x86/i64 のドキュメントを調べたところ、(%rip) が命令キャッシュを使用していると言及している場所が見つかりませんでした。したがって、これが事実であると 100% 確信しているわけではありません。
私は正しいかどうか疑問に思っています。もしそうなら、RIP を使って 4KB のバッファにアクセスしたいと思います。なぜなら、それにアクセスするコードは非常に小さいからです (まあ、余分な 4000 バイトを収容するのに十分小さいからです)。g++ でそれを行う方法は知っていますが、 clでそれを行う方法を見たことがありません。それは私が本当に学びたいと思うもう一つのことです!
g++ を使用すると、次のように記述できます。
__asm__ __volatile__ (".align 4 \n\r"
".big_num: \n\r"
".long 0x01020304 \n\r"
".long 0x05060708 \n\r"
".long 0x01020304 \n\r"
".long 0x05060708 \n\r"
"movdqa .big_num(%rip), xmm0 \n\r");
マイクロソフトのプログラムでこれに相当するものは何ですか?
__asm {
mov big_number(%rip), xmm7
jmp loop
big_number:
???
loop:
}
----- 更新 (2013 年 1 月 24 日)
実際には、RIP アドレッシング モードはオフセットのみに制限されています。
mov offset(%rip), reg
次のようなインデックスが必要になるため、それは役に立ちません。
mov offset(%rip, %eax, 4), reg
とにかく不可能です。