这个问题出现在Power8 in-core crypto patch中。该补丁使用Power8内置函数提供AES。加载VSX寄存器时,我们需要在小端机器上运行时执行128位字节序反转,以确保VSX寄存器加载正确的值。
在编译时,我们可以检查__BYTE_ORDER__
之类的宏。但是,我相信我们应该在运行时检查机器状态寄存器。如果msr.le=1
,那么我们执行endian交换。另请参见AltiVec Programming Environment Manual,第3.1.4节,p。 3-5。
我们如何使用内置函数在运行时检查机器状态寄存器?
答案 0 :(得分:2)
你不需要 - 它在编译时就知道了。如果您以编译代码的相反字节顺序运行,那么您的指令将被完全错误地编码。因此,您的操作系统将确保您的程序在可执行文件的字节顺序的正确MSR[LE]
设置中运行。
实质上:MSR[LE]
位控制指令以及数据加载/存储。
如果我们真的不知道,我们可以使用一些技巧来检测字节顺序,但除非您编写超级早期启动代码,否则您将不需要。