如何使用内置函数在运行时检查 msr.le?
How to check msr.le at runtime using built-ins?
这个问题出现在 Power8 in-core crypto patch。该补丁使用 Power8 内置插件提供 AES。加载 VSX 寄存器时,我们需要在小端机器上 运行 时执行 128 位字节序反转,以确保 VSX 寄存器加载正确的值。
在编译时我们可以检查__BYTE_ORDER__
这样的宏。但是,我相信我们应该在运行时检查机器状态寄存器。如果 msr.le=1
,那么我们执行字节序交换。另见 AltiVec Programming Environment Manual,第 3.1.4 节,p。 3-5.
我们如何使用内置函数在运行时检查机器状态寄存器?
您不需要 - 它在编译时已知。如果您 运行 在编译代码的相反字节序中,您的指令将被完全错误地编码。因此,您的 OS 将确保您的程序 运行 在正确的 MSR[LE]
可执行文件字节顺序设置中。
本质上:MSR[LE]
位控制指令和数据loads/stores。
如果我们真的不知道,可以使用一些技巧来检测字节顺序,但除非您正在编写超级早期的启动代码,否则您不需要这些。
这个问题出现在 Power8 in-core crypto patch。该补丁使用 Power8 内置插件提供 AES。加载 VSX 寄存器时,我们需要在小端机器上 运行 时执行 128 位字节序反转,以确保 VSX 寄存器加载正确的值。
在编译时我们可以检查__BYTE_ORDER__
这样的宏。但是,我相信我们应该在运行时检查机器状态寄存器。如果 msr.le=1
,那么我们执行字节序交换。另见 AltiVec Programming Environment Manual,第 3.1.4 节,p。 3-5.
我们如何使用内置函数在运行时检查机器状态寄存器?
您不需要 - 它在编译时已知。如果您 运行 在编译代码的相反字节序中,您的指令将被完全错误地编码。因此,您的 OS 将确保您的程序 运行 在正确的 MSR[LE]
可执行文件字节顺序设置中。
本质上:MSR[LE]
位控制指令和数据loads/stores。
如果我们真的不知道,可以使用一些技巧来检测字节顺序,但除非您正在编写超级早期的启动代码,否则您不需要这些。