RIP 相对寻址是否需要 16 字节对齐?

Does RIP-relative addressing require 16-byte aligned?

测试时间为 64-bit/x86 Ubuntu 12.04。使用 GCC 4.6.3.

基本上我是在处理一些 x64 汇编代码。我观察到 RIP-relative addressing 要求绝对地址是 16 字节对齐的。

下面是使用gdb进行调试的例子:

0x40f38d <S_0x40F614+61>        xorpd  0x84d3(%rip),%xmm0   # 0x417868 <S_0x417DE0>

此地址 0x417868 的内存引用失败(分段错误),因为此地址仅对齐 8 字节。

0x40f38d <S_0x40F614+61>        xorpd  0x8a4b(%rip),%xmm0   # 0x417de0 <S_0x417DE0>

此内存引用可以工作,因为地址 0x417de0 是 16 字节对齐的。

这是我的观察,我没有找到任何官方资料讨论这个问题。谁能告诉我

  1. 这个 16 字节对齐要求是否普遍适用?
  2. 如果是这样,那么有官方document/manual谈论这个吗?

xorpd指令。它会导致类型 4 的异常,当您指定没有 VEX 前缀的未对齐内存位置时会发生这种情况。 (所以 vxorpd 不会因未对齐而出错。)

然而,它不是唯一的,还有大约 106 条指令导致了同样的事情。