2017-09-12 3 views
2

이 질문은 Power8 in-core crypto patch입니다. 이 패치는 Power8 내장 기능을 사용하여 AES를 제공합니다. VSX 레지스터를로드 할 때 VSX 레지스터가 적절한 값을로드하는지 확인하기 위해 리틀 엔디안 시스템에서 실행할 때 128 비트 엔디안 반전을 수행해야합니다.내장 함수를 사용하여 런타임시 msr.le을 확인하는 방법은 무엇입니까?

컴파일시 우리는 __BYTE_ORDER__과 같은 매크로를 검사 할 수 있습니다. 그러나 런타임시 시스템 상태 레지스터를 확인해야한다고 생각합니다. msr.le=1이면 엔디안 스왑을 수행합니다. 또한 AltiVec Programming Environment Manual, 섹션 3.1.4, p를 참조하십시오. 3-5.

내장 기능을 사용하여 런타임에 기계 상태 레지스터를 어떻게 확인합니까?

답변

2

컴파일 할 때 알 필요가 없습니다. 컴파일 된 코드의 반대 엔디안에서 실행중인 경우 지침이 완전히 잘못 인코딩됩니다. 따라서 운영 체제는 프로그램이 실행 파일의 endianness에 대한 올바른 MSR[LE] 설정으로 실행되는지 확인합니다.

본질적으로 : MSR[LE] 비트는 명령어와 데이터로드/저장을 제어합니다.

우리가 정말로 생각하지 못하면 엔디안을 감지하는 데 사용할 수있는 몇 가지 트릭이 있지만 슈퍼 초기 부트 코드를 작성하지 않으면 필요하지 않습니다.

+0

감사합니다. @ 제레미. 그래서 저는 명확합니다. 컴파일시에만 확인하면됩니다. 우리는 런타임에 확인할 필요가 없습니다. 그 맞습니까? – jww

+0

예, 정확하게. 이미 찾은 것처럼'__BYTE_ORDER__' 만 사용하십시오. LE 비트가 반대 엔디안으로 설정된 경우 어쨌든 엔디안을 검사 할 코드를 실행할 수 없습니다. –

+0

감사합니다. 나는 명령에 적용된'msr [le] '도 몰랐다. 내가 그것을 안다면, 아마도 처음에는 질문하지 않았을 것입니다. o – jww

관련 문제