C 如何使用内置程序在运行时检查msr.le?

C 如何使用内置程序在运行时检查msr.le?,c,built-in,powerpc,msr,altivec,C,Built In,Powerpc,Msr,Altivec,这个问题是在一次会议上提出来的。该补丁使用Power8内置提供AES。当加载VSX寄存器时,我们需要在小型endian机器上运行时执行128位endian反转,以确保VSX寄存器加载正确的值 在编译时,我们可以检查宏,如\uu字节\u顺序\uu。然而,我相信我们应该在运行时检查机器状态寄存器。如果msr.le=1,则执行endian交换。另见第3.1.4节第。3-5 我们如何在运行时使用内置程序检查机器状态寄存器?您不需要这样做-编译时就知道了。如果在编译代码的相反端运行,则指令的编码将完全错误

这个问题是在一次会议上提出来的。该补丁使用Power8内置提供AES。当加载VSX寄存器时,我们需要在小型endian机器上运行时执行128位endian反转,以确保VSX寄存器加载正确的值

在编译时,我们可以检查宏,如
\uu字节\u顺序\uu
。然而,我相信我们应该在运行时检查机器状态寄存器。如果
msr.le=1
,则执行endian交换。另见第3.1.4节第。3-5


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

您不需要这样做-编译时就知道了。如果在编译代码的相反端运行,则指令的编码将完全错误。因此,您的操作系统将确保您的程序在正确的
MSR[LE]
可执行文件的结尾设置下运行

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


如果我们真的不知道endianness,我们可以使用一些技巧来检测endianness,但除非您正在编写超级早期引导代码,否则您将不需要这些。

谢谢@Jeremy。所以我很清楚:我们只需要在编译时进行检查。我们不需要在运行时进行检查。对吗?对,没错。正如您已经发现的那样,只需使用
\uu字节\u顺序
。如果将LE位设置为相反的endianness,则无论如何都无法运行任何代码来检查endianness:)确认,谢谢。我不知道
msr[le]
也适用于指令。如果我知道这一点,那么我可能一开始就不会问这个问题:好吧!很高兴有人问这个问题,所以它是为未来的用户。。。