⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simd.txt

📁 会变语言实现的一些程序
💻 TXT
📖 第 1 页 / 共 5 页
字号:
        andnpd XMM,XMM/m128
        目的寄存器128个二进制位先取'非',再'与'源存储器128个二进制位,结果送入目的寄存器,内存变量必须对齐内存16字节.
        
        orpd XMM,XMM/m128
        源存储器128个二进制位'或'目的寄存器128个二进制位,结果送入目的寄存器,内存变量必须对齐内存16字节.
        
        xorpd XMM,XMM/m128
        源存储器128个二进制位'异或'目的寄存器128个二进制位,结果送入目的寄存器,内存变量必须对齐内存16字节.
        
        ───────────────────────────
        
        cvtps2pd XMM,XMM/m64
        把源存储器低64位两个单精度浮点数变成两个双精度浮点数,结果送入目的寄存器.
        
        cvtss2sd XMM,XMM/m32
        把源存储器低32位1个单精度浮点数变成1个双精度浮点数,结果送入目的寄存器的低64位,高64位不变.
        
        cvtpd2ps XMM,XMM/m128
        把源存储器两个双精度浮点数变成两个单精度浮点数,结果送入目的寄存器的低64位,高64位清零,
        内存变量必须对齐内存16字节.
        例:
        当XMM0 = 011112222 33334444 55556666 77778888 h,
          XMM1 = 0dd1a5e1f35aec736   41132a4000000000 h,执行cvtpd2ps XMM0,XMM1
        则XMM0 = 000000000 00000000 ff800000 48995200 h
                                   ^特殊状态 ^3.14E5
        
        因为XMM1 = -3.14E140         3.14E5
        而单精浮点最小可表示1.18E-38(规格化),-3.14E140已远超过,所以变成一种特殊状态,
        指数位全为1,尾数全为0,符号位不变,3.14E5则变为正常的单精度3.14E5
        
        
        cvtsd2ss XMM,XMM/m64
        把源存储器低64位1个双精度浮点数变成1个单精度浮点数,结果送入目的寄存器的低32位,高96位不变.
        
        cvtpd2pi MM,XMM/m128
        把源存储器两个双精度浮点数变成两个双字有符号整数,结果送入目的寄存器,内存变量必须对齐内存16字节.
        如果结果大于所能表示的范围,那么转化为80000000h(正数也转为此值).
        当XMM1 = 0dd1a5e1f35aec736   41132a4000000000 h,执行cvtpd2pi MM0,XMM1
        则 MM0 = 80000000 0004ca90 h
        因为0dd1a5e1f35aec736h(双精度浮点数) = -3.14E140 超过 80000000h所以变为80000000h
        而41132a4000000000h(双精度浮点数) = 3.14E5,所以转为314000 = 0004ca90h(有符号整数)
        
        cvtpi2pd XMM,MM/m64
        把源存储器两个双字有符号整数变成两个双精度浮点数,结果送入目的寄存器.
        
        cvtpd2dq XMM,XMM/m128
        把源存储器两个双精度浮点数变成两个双字有符号整数(此运算与cvtpd2pi类似但目的寄存器变为XMM),
        结果送入目的寄存器的低64位,高64位清零,内存变量必须对齐内存16字节.
        
        cvtdq2pd XMM,XMM/m128
        把源存储器低64位两个双字有符号整数变成两个双精度浮点数,结果送入目的寄存器,内存变量必须对齐内存16字节.
        
        cvtsd2si r32,XMM/m64
        把源存储器低64位1个双精度浮点数变成1个双字有符号整数,结果送入目的寄存器.
        
        cvtsi2sd XMM,r32/m32
        把源存储器1个双字有符号整数变成1个双精度浮点数,结果送入目的寄存器的低64位,高64位不变.
        
        cvtps2dq XMM,XMM/m128
        把源存储器4个单精度浮点数变成4个双字有符号整数,结果送入目的寄存器,内存变量必须对齐内存16字节.
        
        cvtdq2ps XMM,XMM/m128
        把源存储器4个双字有符号整数变成4个单精度浮点数,结果送入目的寄存器,内存变量必须对齐内存16字节.
        
        ───────────────────────────
        
        movdqa XMM,XMM/m128     movdqa XMM/m128,XMM
        把源存储器内容值送入目的寄存器,当有m128时,必须对齐内存16字节.
        
        movdqu XMM,XMM/m128     movdqu XMM/m128,XMM
        把源存储器内容值送入目的寄存器,但不必对齐内存16字节.
        
        paddd XMM,XMM/m128
        把源存储器与目的寄存器按双字对齐无符号整数普通相加,结果送入目的寄存器,内存变量必须对齐内存16字节.
        
        paddq XMM,XMM/m128
        把源存储器与目的寄存器按四字对齐无符号整数普通相加,结果送入目的寄存器,内存变量必须对齐内存16字节.
        
        paddq MM,MM/m64
        把源存储器与目的寄存器四字无符号整数普通相加,结果送入目的寄存器.
        
        psubd XMM,XMM/m128
        把目的寄存器与源存储器按双字对齐无符号整数普通相减,结果送入目的寄存器,
        内存变量必须对齐内存16字节.(目的减去源)
        
        psubq XMM,XMM/m128
        把目的寄存器与源存储器按四字对齐无符号整数普通相减,结果送入目的寄存器,
        内存变量必须对齐内存16字节.(目的减去源)
        
        psubq MM,MM/m64
        把目的寄存器与源存储器四字无符号整数普通相减,结果送入目的寄存器.(目的减去源)
        
        pmuludq XMM,XMM/m128
        把源存储器与目的寄存器的低32位无符号整数相乘,结果变为64位,送入目的寄存器低64位,
        把源存储器与目的寄存器的高64位的低32位无符号整数相乘,结果变为64位,送入目的寄存器高64位.
        内存变量必须对齐内存16字节.
                                 高64位   |    低64位
        目的寄存器:            a0  |  a1  |  a2  |  a3
        源存储器:              b0  |  b1  |  b2  |  b3
        目的寄存器结果:          b1*a1    |    b3*a3
        
        pmuludq MM,MM/m64
        把源存储器与目的寄存器的低32位无符号整数相乘,结果变为64位,送入目的寄存器.
                                 高32位   |    低32位
        目的寄存器:                a0     |      a1
        源存储器:                  b0     |      b1
        目的寄存器结果:                 b1*a1
        
        pslldq XMM,imm8
        把目的寄存器128位按imm8(立即数)指定字节数逻辑左移,移出的字节丢失.
        imm8 == 1时,代表左移8位,imm8 == 2时,代表左移16位.
        
        psrldq XMM,imm8
        把目的寄存器128位按imm8(立即数)指定字节数逻辑右移,移出的字节丢失.
        imm8 == 1时,代表右移8位,imm8 == 2时,代表右移16位.
        
        psllw XMM,XMM/m128   psllw XMM,imm8
        把目的寄存器按字由源存储器(或imm8 立即数)指定位数逻辑左移,移出的位丢失.
        低字移出的位不会移入高字,内存变量必须对齐内存16字节.
        
        psrlw XMM,XMM/m128   psrlw XMM,imm8
        把目的寄存器按字由源存储器(或imm8 立即数)指定位数逻辑右移,移出的位丢失.
        高字移出的位不会移入低字,内存变量必须对齐内存16字节.
        
        pslld XMM,XMM/m128   pslld XMM,XMM imm8
        把目的寄存器按双字由源存储器(或imm8 立即数)指定位数逻辑左移,移出的位丢失.
        低双字移出的位不会移入高双字,内存变量必须对齐内存16字节.
        
        psrld XMM,XMM/m128   psrld XMM,imm8
        把目的寄存器按双字由源存储器(或imm8 立即数)指定位数逻辑右移,移出的位丢失.
        高双字移出的位不会移入低双字,内存变量必须对齐内存16字节.
        
        movq2dq XMM,MM
        把源寄存器内容送入目的寄存器的低64位,高64位清零.
        
        movdq2q MM,XMM
        把源寄存器低64位内容送入目的寄存器.
        
        pmaddwd XMM,XMM/m128
        把源存储器与目的寄存器分4组进行向量点乘(有符号补码操作),内存变量必须对齐内存16字节..
                                        高64位          |           低64位
        目的寄存器:            a0  |  a1  |  a2  |  a3  |  a4  |  a5  |  a6  |  a7
        源存储器:              b0  |  b1  |  b2  |  b3  |  b4  |  b5  |  b6  |  b7
        目的寄存器结果:       a0*b0+a1*b1 | a2*b2+a3*b3 | a4*b4+a5*b5 | a6*b6+a7*b7
        
        paddsb XMM,XMM/m128
        源存储器与目的寄存器按字节对齐有符号补码饱和相加,内存变量必须对齐内存16字节.
        
        paddsw XMM,XMM/m128
        源存储器与目的寄存器按字对齐有符号补码饱和相加,内存变量必须对齐内存16字节.
        
        psubsb XMM,XMM/m128
        源存储器与目的寄存器按字节对齐有符号补码饱和相减(目的减去源),内存变量必须对齐内存16字节.
        
        psubsw XMM,XMM/m128
        源存储器与目的寄存器按字对齐有符号补码饱和相减(目的减去源),内存变量必须对齐内存16字节.
        
        paddusb XMM,XMM/m128
        源存储器与目的寄存器按字节对齐无符号饱和相加,内存变量必须对齐内存16字节.
        
        paddusw XMM,XMM/m128
        源存储器与目的寄存器按字对齐无符号饱和相加,内存变量必须对齐内存16字节.
        
        psubusb XMM,XMM/m128
        源存储器与目的寄存器按字节对齐无符号饱和相减(目的减去源),内存变量必须对齐内存16字节.
        
        psubusw XMM,XMM/m128
        源存储器与目的寄存器按字对齐无符号饱和相减(目的减去源),内存变量必须对齐内存16字节.
        
        paddb XMM,XMM/m128
        源存储器与目的寄存器按字节对齐无符号普通相加,内存变量必须对齐内存16字节.
        
        paddw XMM,XMM/m128
        源存储器与目的寄存器按字对齐无符号普通相加,内存变量必须对齐内存16字节.
        
        paddd XMM,XMM/m128
        源存储器与目的寄存器按双字对齐无符号普通相加,内存变量必须对齐内存16字节.
        
        paddq XMM,XMM/m128
        源存储器与目的寄存器按四字对齐无符号普通相加,内存变量必须对齐内存16字节.
        
        psubb XMM,XMM/m128
        源存储器与目的寄存器按字节对齐无符号普通相减(目的减去源),内存变量必须对齐内存16字节.
        
        psubw XMM,XMM/m128
        源存储器与目的寄存器按字对齐无符号普通相减(目的减去源),内存变量必须对齐内存16字节.
        
        psubd XMM,XMM/m128
        源存储器与目的寄存器按双字对齐无符号普通相减(目的减去源),内存变量必须对齐内存16字节.
        
        psubq XMM,XMM/m128
        源存储器与目的寄存器按四字对齐无符号普通相减(目的减去源),内存变量必须对齐内存16字节.
        
        pmulhw XMM,XMM/m128
        源存储器与目的寄存器按字对齐有符号补码饱和相乘,取结果的高16位放入目的寄存器对应字中.
        内存变量必须对齐内存16字节.
        
        pmullw XMM,XMM/m128
        源存储器与目的寄存器按字对齐有符号补码饱和相乘,取结果的低16位放入目的寄存器对应字中.
        内存变量必须对齐内存16字节.
        
        pcmpeqb XMM,XMM/m128

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -