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