AVX2的基本指令範例
vpmovzx
Section titled “vpmovzx”整數搬移指令movzx,會以0填充到目標大小再做搬移
在nasm文件可以看到vpmovzx有這些
VPMOVSXBW xmmreg,xmmrm64VPMOVSXBD xmmreg,xmmrm32VPMOVSXBQ xmmreg,xmmrm16VPMOVSXWD xmmreg,xmmrm64VPMOVSXWQ xmmreg,xmmrm32VPMOVSXDQ xmmreg,xmmrm64VPMOVZXBW xmmreg,xmmrm64VPMOVZXBD xmmreg,xmmrm32VPMOVZXBQ xmmreg,xmmrm16VPMOVZXWD xmmreg,xmmrm64VPMOVZXWQ xmmreg,xmmrm32VPMOVZXDQ xmmreg,xmmrm64vpmovzxdq xmm0, xmm1作用就是將內容補0填充到16 bytes並移動至xmm暫存器
指令名稱說明:
- Packed在前面是整數指令
- movzx以0填充,movsx帶符號的擴展確保負數的內容不變
- 後兩位的意思是將src原本是Dword擴展到Qword,拆分成兩個qword 比如{0x1, 0x1}的形式搬移
雖然SSE4.1也有相同的PMOVZXDQ,但只支援xmm暫存器的操作
在AVX2的章節有對於ymm的操作,AVX-512也有更靈活的操作。
vmovdqu & vmovdqa
Section titled “vmovdqu & vmovdqa”整數搬移指令,a和u的差異是對齊,xmm和ymm需要跟16和32 bytes對齊
a表示Aligned,u表示Unaligned
若來源不確定是否對齊需要使用vmovdqu來操作
; vmovdqu ymmreg, ymmrm256vmovdqu ymm0, YWORD [rdi+rax]取ymm大小的值用YWORD,xmm對應OWORD, zmm對應ZWORD
整數有vpor, vpxor, vpand等等的這些
浮點有vxorpd, vxorps, vandpd, vandps等等的
命名方式都相同,比如使用vpxor將ymm0清零
; VPXOR ymmreg,ymmreg*,ymmrm256vpxor ymm0, ymm0, ymm0