如何使用内置函数在运行时检查msr.le?

时间:2017-09-12 02:05:29

标签: c built-in powerpc msr altivec

这个问题出现在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。

我们如何使用内置函数在运行时检查机器状态寄存器?

1 个答案:

答案 0 :(得分:2)

你不需要 - 它在编译时就知道了。如果您以编译代码的相反字节顺序运行,那么您的指令将被完全错误地编码。因此,您的操作系统将确保您的程序在可执行文件的字节顺序的正确MSR[LE]设置中运行。

实质上:MSR[LE]位控制指令以及数据加载/存储。

如果我们真的不知道,我们可以使用一些技巧来检测字节顺序,但除非您编写超级早期启动代码,否则您将不需要。