Instructions函数对照表:01 mmintrin.h与MMX指令集

作者:zyl910

更多详情见——
http://www.cnblogs.com/zyl910/archive/2012/04/26/md00.html
SIMD函数整理:00 索引贴


Name:函数名。
Name2:另一种函数名。
功能:功能描述。
Asm:汇编指令。
PCode:伪代码。

NameName2功能AsmPCode
_m_empty_mm_emptyMMX状态置空EMMS 
_m_from_int_mm_cvtsi32_si64加载32位MOVDr=ZX(i)
_m_to_int_mm_cvtsi64_si32返回低32位MOVDr=(uD)m
_m_packsswb_mm_packs_pi16饱和打包.符16位至符8位PACKSSWBfor(i=0;i<4;++i){ r.iB[i]=SS(m1.iW[i]); r.iB[4+i]=SS(m2.iW[i]); }
_m_packssdw_mm_packs_pi32饱和打包.符32位至符16位PACKSSDWfor(i=0;i<2;++i){ r.iW[i]=SS(m1.iD[i]); r.iW[2+i]=SS(m2.iD[i]); }
_m_packuswb_mm_packs_pu16饱和打包.符16位至无8位PACKUSWBfor(i=0;i<4;++i){ r.uB[i]=SU(m1.iW[i]); r.uB[4+i]=SU(m2.iW[i]); }
_m_punpckhbw_mm_unpackhi_pi8高位解包.8位PUNPCKHBWfor(i=0;i<4;++i){ r.mB[i*2]=m1.mB[4+i]; r.mB[i*2+1]=m2.mB[4+i]; }
_m_punpckhwd_mm_unpackhi_pi16高位解包.16位PUNPCKHWDfor(i=0;i<2;++i){ r.mW[i*2]=m1.mW[2+i]; r.mW[i*2+1]=m2.mW[2+i]; }
_m_punpckhdq_mm_unpackhi_pi32高位解包.32位PUNPCKHDQfor(i=0;i<1;++i){ r.mD[i*2]=m1.mD[1+i]; r.mD[i*2+1]=m2.mD[1+i]; }
_m_punpcklbw_mm_unpacklo_pi8低位解包.8位PUNPCKLBWfor(i=0;i<4;++i){ r.mB[i*2]=m1.mB[i]; r.mB[i*2+1]=m2.mB[i]; }
_m_punpcklwd_mm_unpacklo_pi16低位解包.16位PUNPCKLWDfor(i=0;i<2;++i){ r.mW[i*2]=m1.mW[i]; r.mW[i*2+1]=m2.mW[i]; }
_m_punpckldq_mm_unpacklo_pi32低位解包.32位PUNPCKLDQfor(i=0;i<1;++i){ r.mD[i*2]=m1.mD[i]; r.mD[i*2+1]=m2.mD[i]; }
_m_paddb_mm_add_pi8环绕加法.8位PADDBfor(i=0;i<8;++i){ r.uB[i]=m1.uB[i]+m1.uB[i]; }
_m_paddw_mm_add_pi16环绕加法.16位PADDWfor(i=0;i<4;++i){ r.uW[i]=m1.uW[i]+m1.uW[i]; }
_m_paddd_mm_add_pi32环绕加法.32位PADDDfor(i=0;i<2;++i){ r.uD[i]=m1.uD[i]+m1.uD[i]; }
_m_paddsb_mm_adds_pi8饱和加法.符8位PADDSBfor(i=0;i<8;++i){ r.uB[i]=SS(m1.uB[i]+m1.uB[i]); }
_m_paddsw_mm_adds_pi16饱和加法.符16位PADDSWfor(i=0;i<4;++i){ r.uW[i]=SS(m1.uW[i]+m1.uW[i]); }
_m_paddusb_mm_adds_pu8饱和加法.无8位PADDUSBfor(i=0;i<8;++i){ r.uB[i]=SU(m1.uB[i]+m1.uB[i]); }
_m_paddusw_mm_adds_pu16饱和加法.无16位PADDUSWfor(i=0;i<4;++i){ r.uW[i]=SU(m1.uW[i]+m1.uW[i]); }
_m_psubb_mm_sub_pi8环绕减法.8位PSUBBfor(i=0;i<8;++i){ r.uB[i]=m1.uB[i]-m1.uB[i]; }
_m_psubw_mm_sub_pi16环绕减法.16位PSUBWfor(i=0;i<4;++i){ r.uW[i]=m1.uW[i]-m1.uW[i]; }
_m_psubd_mm_sub_pi32环绕减法.32位PSUBDfor(i=0;i<2;++i){ r.uD[i]=m1.uD[i]-m1.uD[i]; }
_m_psubsb_mm_subs_pi8饱和减法.符8位PSUBSBfor(i=0;i<8;++i){ r.uB[i]=SS(m1.uB[i]-m1.uB[i]); }
_m_psubsw_mm_subs_pi16饱和减法.符16位PSUBSWfor(i=0;i<4;++i){ r.uW[i]=SS(m1.uW[i]-m1.uW[i]); }
_m_psubusb_mm_subs_pu8饱和减法.无8位PSUBUSBfor(i=0;i<8;++i){ r.uB[i]=SU(m1.uB[i]-m1.uB[i]); }
_m_psubusw_mm_subs_pu16饱和减法.无16位PSUBUSWfor(i=0;i<4;++i){ r.uW[i]=SU(m1.uW[i]-m1.uW[i]); }
_m_pmaddwd_mm_madd_pi16乘后二加.符16位PMADDWDfor(i=0;i<2;++i){ r.iD[i]=iD(m1.iW[i*2]*m2.iW[i*2]) + iD(m1.iW[i*2+1]*m2.iW[i*2+1]); }
_m_pmulhw_mm_mulhi_pi16乘法高位.符16位PMULHWfor(i=0;i<4;++i){ r.iW[i]=hi16(m1.iW[i]*m1.iW[i]); }
_m_pmullw_mm_mullo_pi16乘法低位.符16位PMULLWfor(i=0;i<4;++i){ r.iW[i]=lo16(m1.iW[i]*m1.iW[i]); }
_m_psllw_mm_sll_pi16逻辑左移.寄存器.16位PSLLW 
_m_psllwi_mm_slli_pi16逻辑左移.立即数.16位PSLLWfor(i=0;i<4;++i){ r.uW[i]=m.uW[i]<<count; }
_m_pslld_mm_sll_pi32逻辑左移.寄存器.32位PSLLD 
_m_pslldi_mm_slli_pi32逻辑左移.立即数.32位PSLLDfor(i=0;i<2;++i){ r.uD[i]=m.uW[i]<<count; }
_m_psllq_mm_sll_si64逻辑左移.寄存器.64位PSLLQ 
_m_psllqi_mm_slli_si64逻辑左移.立即数.64位PSLLQfor(i=0;i<1;++i){ r.uQ[i]=m.uW[i]<<count; }
_m_psraw_mm_sra_pi16算术右移.寄存器.16位PSRAW 
_m_psrawi_mm_srai_pi16算术右移.立即数.16位PSRAWfor(i=0;i<4;++i){ r.uW[i]=SX(m.uW[i]>>count); }
_m_psrad_mm_sra_pi32算术右移.寄存器.32位PSRAD 
_m_psradi_mm_srai_pi32算术右移.立即数.32位PSRADfor(i=0;i<2;++i){ r.uD[i]=SX(m.uW[i]>>count); }
_m_psrlw_mm_srl_pi16逻辑右移.寄存器.16位PSRLW 
_m_psrlwi_mm_srli_pi16逻辑右移.立即数.16位PSRLWfor(i=0;i<4;++i){ r.uW[i]=ZX(m.uW[i]>>count); }
_m_psrld_mm_srl_pi32逻辑右移.寄存器.32位PSRLD 
_m_psrldi_mm_srli_pi32逻辑右移.立即数.32位PSRLDfor(i=0;i<2;++i){ r.uD[i]=ZX(m.uW[i]>>count); }
_m_psrlq_mm_srl_si64逻辑右移.寄存器.64位PSRLQ 
_m_psrlqi_mm_srli_si64逻辑右移.立即数.64位PSRLQfor(i=0;i<1;++i){ r.uQ[i]=zX(m.uW[i]>>count); }
_m_pand_mm_and_si64逻辑位与PANDr = m1&m2
_m_pandn_mm_andnot_si64逻辑位与非PANDNr = (!m1)&m2
_m_por_mm_or_si64逻辑位或PORr = m1|m2
_m_pxor_mm_xor_si64逻辑位异或PXORr = m1^m2
_m_pcmpeqb_mm_cmpeq_pi8比较.相等.符8位PCMPEQBfor(i=0;i<8;++i){ r.iB[i]=BM(m1.iB[i]==m2.iB[i]); }
_m_pcmpeqw_mm_cmpeq_pi16比较.相等.符16位PCMPEQWfor(i=0;i<4;++i){ r.iW[i]=BM(m1.iW[i]==m2.iW[i]); }
_m_pcmpeqd_mm_cmpeq_pi32比较.相等.符32位PCMPEQDfor(i=0;i<2;++i){ r.iD[i]=BM(m1.iD[i]==m2.iD[i]); }
_m_pcmpgtb_mm_cmpgt_pi8比较.大于.符8位PCMPGTBfor(i=0;i<8;++i){ r.iB[i]=BM(m1.iB[i]>m2.iB[i]); }
_m_pcmpgtw_mm_cmpgt_pi16比较.大于.符16位PCMPGTWfor(i=0;i<4;++i){ r.iW[i]=BM(m1.iW[i]>m2.iW[i]); }
_m_pcmpgtd_mm_cmpgt_pi32比较.大于.符32位PCMPGTDfor(i=0;i<2;++i){ r.iD[i]=BM(m1.iD[i]>m2.iD[i]); }
_mm_setzero_si64 赋值为零 r = 0
_mm_set_pi32 赋值自32位 for(i=0;i<2;++i){ r.uD[i]=arg[i]); }
_mm_set_pi16 赋值自16位 for(i=0;i<4;++i){ r.uW[i]=arg[i]); }
_mm_set_pi8 赋值自8位 for(i=0;i<8;++i){ r.uB[i]=arg[i]); }
_mm_set1_pi32 重复赋值自32位 for(i=0;i<2;++i){ r.uD[i]=arg[0]); }
_mm_set1_pi16 重复赋值自16位 for(i=0;i<4;++i){ r.uW[i]=arg[0]); }
_mm_set1_pi8 重复赋值自8位 for(i=0;i<8;++i){ r.uB[i]=arg[0]); }
_mm_setr_pi32 逆序赋值自32位 for(i=0;i<2;++i){ r.uD[i]=arg[i?]); }
_mm_setr_pi16 逆序赋值自16位 for(i=0;i<4;++i){ r.uW[i]=arg[i?]); }
_mm_setr_pi8 逆序赋值自8位 for(i=0;i<8;++i){ r.uB[i]=arg[i?]); }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值