2

这个问题出现在Power8 内核加密补丁中。该补丁使用 Power8 内置插件提供 AES。在加载 VSX 寄存器时,我们需要在 little-endian 机器上运行时执行 128 位字节序反转,以确保 VSX 寄存器加载正确的值。

在编译时,我们可以检查像__BYTE_ORDER__. 但是,我相信我们应该在运行时检查机器状态寄存器。如果msr.le=1,那么我们执行字节序交换。另请参阅AltiVec 编程环境手册,第 3.1.4 节,p。3-5。

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

4

1 回答 1

2

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

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

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

于 2017-09-12T03:05:56.833 回答