📄 amd3dx.h
字号:
#define PMULHUWM(dst,src,off) InjMMXMOps(dst,src,off,PMULHUW)
#define PAVGBM(dst,src,off) InjMMXMOps(dst,src,off,PAVGB)
#define PAVGWM(dst,src,off) InjMMXMOps(dst,src,off,PAVGW)
#define PSADBWM(dst,src,off) InjMMXMOps(dst,src,off,PSADBW)
#define PMOVMSKBM(dst,src,off) InjMMXMOps(dst,src,off,PMOVMSKB)
#define PMASKMOVQM(dst,src,off) InjMMXMOps(dst,src,off,PMASKMOVQ)
#define MASKMOVQM(dst,src,off) InjMMXMOps(dst,src,off,MASKMOVQ)
#define PINSRWM(dst,src,off,msk) InjMMXMOps(dst,src,off,PINSRW) _asm _emit msk
#define PSHUFWM(dst,src,off,msk) InjMMXMOps(dst,src,off,PSHUFW) _asm _emit msk
#define MOVNTQM(dst,src,off) InjMMXMOps(src,dst,off,MOVNTQ)
#define PREFETCHNTAM(mem,off) InjMMXMOps(mm0,mem,off,PREFETCHT)
#define PREFETCHT0M(mem,off) InjMMXMOps(mm1,mem,off,PREFETCHT)
#define PREFETCHT1M(mem,off) InjMMXMOps(mm2,mem,off,PREFETCHT)
#define PREFETCHT2M(mem,off) InjMMXMOps(mm3,mem,off,PREFETCHT)
#else
/* Assume built-in support for 3DNow! opcodes, replace macros with opcodes */
#define PAVGUSB(dst,src) pavgusb dst,src
#define PF2ID(dst,src) pf2id dst,src
#define PFACC(dst,src) pfacc dst,src
#define PFADD(dst,src) pfadd dst,src
#define PFCMPEQ(dst,src) pfcmpeq dst,src
#define PFCMPGE(dst,src) pfcmpge dst,src
#define PFCMPGT(dst,src) pfcmpgt dst,src
#define PFMAX(dst,src) pfmax dst,src
#define PFMIN(dst,src) pfmin dst,src
#define PFMUL(dst,src) pfmul dst,src
#define PFRCP(dst,src) pfrcp dst,src
#define PFRCPIT1(dst,src) pfrcpit1 dst,src
#define PFRCPIT2(dst,src) pfrcpit2 dst,src
#define PFRSQRT(dst,src) pfrsqrt dst,src
#define PFRSQIT1(dst,src) pfrsqit1 dst,src
#define PFSUB(dst,src) pfsub dst,src
#define PFSUBR(dst,src) pfsubr dst,src
#define PI2FD(dst,src) pi2fd dst,src
#define PMULHRW(dst,src) pmulhrw dst,src
#define PREFETCH(src) prefetch src
#define PREFETCHW(src) prefetchw src
#define PAVGUSBM(dst,src,off) pavgusb dst,[src+off]
#define PF2IDM(dst,src,off) PF2ID dst,[src+off]
#define PFACCM(dst,src,off) PFACC dst,[src+off]
#define PFADDM(dst,src,off) PFADD dst,[src+off]
#define PFCMPEQM(dst,src,off) PFCMPEQ dst,[src+off]
#define PFCMPGEM(dst,src,off) PFCMPGE dst,[src+off]
#define PFCMPGTM(dst,src,off) PFCMPGT dst,[src+off]
#define PFMAXM(dst,src,off) PFMAX dst,[src+off]
#define PFMINM(dst,src,off) PFMIN dst,[src+off]
#define PFMULM(dst,src,off) PFMUL dst,[src+off]
#define PFRCPM(dst,src,off) PFRCP dst,[src+off]
#define PFRCPIT1M(dst,src,off) PFRCPIT1 dst,[src+off]
#define PFRCPIT2M(dst,src,off) PFRCPIT2 dst,[src+off]
#define PFRSQRTM(dst,src,off) PFRSQRT dst,[src+off]
#define PFRSQIT1M(dst,src,off) PFRSQIT1 dst,[src+off]
#define PFSUBM(dst,src,off) PFSUB dst,[src+off]
#define PFSUBRM(dst,src,off) PFSUBR dst,[src+off]
#define PI2FDM(dst,src,off) PI2FD dst,[src+off]
#define PMULHRWM(dst,src,off) PMULHRW dst,[src+off]
#if defined (__MWERKS__)
// At the moment, CodeWarrior does not support these opcodes, so hand-assemble them
// Defines for operands.
#define _K3D_MM0 0xc0
#define _K3D_MM1 0xc1
#define _K3D_MM2 0xc2
#define _K3D_MM3 0xc3
#define _K3D_MM4 0xc4
#define _K3D_MM5 0xc5
#define _K3D_MM6 0xc6
#define _K3D_MM7 0xc7
#define _K3D_mm0 0xc0
#define _K3D_mm1 0xc1
#define _K3D_mm2 0xc2
#define _K3D_mm3 0xc3
#define _K3D_mm4 0xc4
#define _K3D_mm5 0xc5
#define _K3D_mm6 0xc6
#define _K3D_mm7 0xc7
#define _K3D_EAX 0x00
#define _K3D_ECX 0x01
#define _K3D_EDX 0x02
#define _K3D_EBX 0x03
#define _K3D_ESI 0x06
#define _K3D_EDI 0x07
#define _K3D_eax 0x00
#define _K3D_ecx 0x01
#define _K3D_edx 0x02
#define _K3D_ebx 0x03
#define _K3D_esi 0x06
#define _K3D_edi 0x07
#define _K3D_EAX 0x00
#define _K3D_ECX 0x01
#define _K3D_EDX 0x02
#define _K3D_EBX 0x03
#define _K3D_ESI 0x06
#define _K3D_EDI 0x07
#define _K3D_eax 0x00
#define _K3D_ecx 0x01
#define _K3D_edx 0x02
#define _K3D_ebx 0x03
#define _K3D_esi 0x06
#define _K3D_edi 0x07
#define InjK3DOps(dst,src,inst) \
db 0x0f, 0x0f, (((_K3D_##dst & 0x3f) << 3) | _K3D_##src), _3DNowOpcode##inst
#define InjK3DMOps(dst,src,off,inst) \
db 0x0f, 0x0f, (((_K3D_##dst & 0x3f) << 3) | _K3D_##src | 0x40), off, _3DNowOpcode##inst
#define InjMMXOps(dst,src,inst) \
db 0x0f, _3DNowOpcode##inst, (((_K3D_##dst & 0x3f) << 3) | _K3D_##src)
#define InjMMXMOps(dst,src,off,inst) \
db 0x0f, _3DNowOpcode##inst, (((_K3D_##dst & 0x3f) << 3) | _K3D_##src | 0x40), off
#define PFNACC(dst,src) InjK3DOps(dst,src,PFNACC)
#define PFPNACC(dst,src) InjK3DOps(dst,src,PFPNACC)
#define PSWAPD(dst,src) InjK3DOps(dst,src,PSWAPD)
#define PMINUB(dst,src) InjMMXOps(dst,src,PMINUB)
#define PMAXUB(dst,src) InjMMXOps(dst,src,PMAXUB)
#define PMINSW(dst,src) InjMMXOps(dst,src,PMINSW)
#define PMAXSW(dst,src) InjMMXOps(dst,src,PMAXSW)
#define PMULHUW(dst,src) InjMMXOps(dst,src,PMULHUW)
#define PAVGB(dst,src) InjMMXOps(dst,src,PAVGB)
#define PAVGW(dst,src) InjMMXOps(dst,src,PAVGW)
#define PSADBW(dst,src) InjMMXOps(dst,src,PSADBW)
#define PMOVMSKB(dst,src) InjMMXOps(dst,src,PMOVMSKB)
#define PMASKMOVQ(dst,src) InjMMXOps(dst,src,PMASKMOVQ)
#define MASKMOVQ(dst,src) InjMMXOps(dst,src,MASKMOVQ)
#define PINSRW(dst,src,msk) InjMMXOps(dst,src,PINSRW) db msk
#define PEXTRW(dst,src,msk) InjMMXOps(dst,src,PEXTRW) db msk
#define PSHUFW(dst,src,msk) InjMMXOps(dst,src,PSHUFW) db msk
#define MOVNTQ(dst,src) InjMMXOps(src,dst,MOVNTQ)
#define PREFETCHNTA(mem) InjMMXOps(mm0,mem,PREFETCHT)
#define PREFETCHT0(mem) InjMMXOps(mm1,mem,PREFETCHT)
#define PREFETCHT1(mem) InjMMXOps(mm2,mem,PREFETCHT)
#define PREFETCHT2(mem) InjMMXOps(mm3,mem,PREFETCHT)
/* Memory/offset versions of the K7 opcodes */
#define PFNACCM(dst,src,off) InjK3DMOps(dst,src,off,PFNACC)
#define PFPNACCM(dst,src,off) InjK3DMOps(dst,src,off,PFPNACC)
#define PSWAPDM(dst,src,off) InjK3DMOps(dst,src,off,PSWAPD)
#define PMINUBM(dst,src,off) InjMMXMOps(dst,src,off,PMINUB)
#define PMAXUBM(dst,src,off) InjMMXMOps(dst,src,off,PMAXUB)
#define PMINSWM(dst,src,off) InjMMXMOps(dst,src,off,PMINSW)
#define PMAXSWM(dst,src,off) InjMMXMOps(dst,src,off,PMAXSW)
#define PMULHUWM(dst,src,off) InjMMXMOps(dst,src,off,PMULHUW)
#define PAVGBM(dst,src,off) InjMMXMOps(dst,src,off,PAVGB)
#define PAVGWM(dst,src,off) InjMMXMOps(dst,src,off,PAVGW)
#define PSADBWM(dst,src,off) InjMMXMOps(dst,src,off,PSADBW)
#define PMOVMSKBM(dst,src,off) InjMMXMOps(dst,src,off,PMOVMSKB)
#define PMASKMOVQM(dst,src,off) InjMMXMOps(dst,src,off,PMASKMOVQ)
#define MASKMOVQM(dst,src,off) InjMMXMOps(dst,src,off,MASKMOVQ)
#define PINSRWM(dst,src,off,msk) InjMMXMOps(dst,src,off,PINSRW), msk
#define PEXTRWM(dst,src,off,msk) InjMMXMOps(dst,src,off,PEXTRW), msk
#define PSHUFWM(dst,src,off,msk) InjMMXMOps(dst,src,off,PSHUFW), msk
#define MOVNTQM(dst,src,off) InjMMXMOps(src,dst,off,MOVNTQ)
#define PREFETCHNTAM(mem,off) InjMMXMOps(mm0,mem,off,PREFETCHT)
#define PREFETCHT0M(mem,off) InjMMXMOps(mm1,mem,off,PREFETCHT)
#define PREFETCHT1M(mem,off) InjMMXMOps(mm2,mem,off,PREFETCHT)
#define PREFETCHT2M(mem,off) InjMMXMOps(mm3,mem,off,PREFETCHT)
#else
#define PFNACC(dst,src) PFNACC dst,src
#define PFPNACC(dst,src) PFPNACC dst,src
#define PSWAPD(dst,src) PSWAPD dst,src
#define PMINUB(dst,src) PMINUB dst,src
#define PMAXUB(dst,src) PMAXUB dst,src
#define PMINSW(dst,src) PMINSW dst,src
#define PMAXSW(dst,src) PMAXSW dst,src
#define PMULHUW(dst,src) PMULHUW dst,src
#define PAVGB(dst,src) PAVGB dst,src
#define PAVGW(dst,src) PAVGW dst,src
#define PSADBW(dst,src) PSADBW dst,src
#define PMOVMSKB(dst,src) PMOVMSKB dst,src
#define PMASKMOVQ(dst,src) PMASKMOVQ dst,src
#define MASKMOVQ(dst,src) MASKMOVQ dst,src
#define PINSRW(dst,src,msk) PINSRW dst,src,msk
#define PEXTRW(dst,src,msk) PEXTRW dst,src,msk
#define PSHUFW(dst,src,msk) PSHUFW dst,src,msk
#define MOVNTQ(dst,src) MOVNTQ dst,src
#define PFNACCM(dst,src,off) PFNACC dst,[src+off]
#define PFPNACCM(dst,src,off) PFPNACC dst,[src+off]
#define PSWAPDM(dst,src,off) PSWAPD dst,[src+off]
#define PMINUBM(dst,src,off) PMINUB dst,[src+off]
#define PMAXUBM(dst,src,off) PMAXUB dst,[src+off]
#define PMINSWM(dst,src,off) PMINSW dst,[src+off]
#define PMAXSWM(dst,src,off) PMAXSW dst,[src+off]
#define PMULHUWM(dst,src,off) PMULHUW dst,[src+off]
#define PAVGBM(dst,src,off) PAVGB dst,[src+off]
#define PAVGWM(dst,src,off) PAVGW dst,[src+off]
#define PSADBWM(dst,src,off) PSADBW dst,[src+off]
#define PMOVMSKBM(dst,src,off) PMOVMSKB dst,[src+off]
#define PMASKMOVQM(dst,src,off) PMASKMOVQ dst,[src+off]
#define MASKMOVQM(dst,src,off) MASKMOVQ dst,[src+off]
#define PINSRWM(dst,src,off,msk) PINSRW dst,[src+off],msk
#define PEXTRWM(dst,src,off,msk) PEXTRW dst,[src+off],msk
#define PSHUFWM(dst,src,off,msk) PSHUFW dst,[src+off],msk
#define MOVNTQM(dst,src,off) MOVNTQ dst,[src+off]
#endif
#endif
/* Just to deal with lower case. */
#define pf2id(dst,src) PF2ID(dst,src)
#define pfacc(dst,src) PFACC(dst,src)
#define pfadd(dst,src) PFADD(dst,src)
#define pfcmpeq(dst,src) PFCMPEQ(dst,src)
#define pfcmpge(dst,src) PFCMPGE(dst,src)
#define pfcmpgt(dst,src) PFCMPGT(dst,src)
#define pfmax(dst,src) PFMAX(dst,src)
#define pfmin(dst,src) PFMIN(dst,src)
#define pfmul(dst,src) PFMUL(dst,src)
#define pfrcp(dst,src) PFRCP(dst,src)
#define pfrcpit1(dst,src) PFRCPIT1(dst,src)
#define pfrcpit2(dst,src) PFRCPIT2(dst,src)
#define pfrsqrt(dst,src) PFRSQRT(dst,src)
#define pfrsqit1(dst,src) PFRSQIT1(dst,src)
#define pfsub(dst,src) PFSUB(dst,src)
#define pfsubr(dst,src) PFSUBR(dst,src)
#define pi2fd(dst,src) PI2FD(dst,src)
#define femms FEMMS
#define pavgusb(dst,src) PAVGUSB(dst,src)
#define pmulhrw(dst,src) PMULHRW(dst,src)
#define prefetch(src) PREFETCH(src)
#define prefetchw(src) PREFETCHW(src)
#define prefetchm(src,off) PREFETCHM(src,off)
#define prefetchmlong(src,off) PREFETCHMLONG(src,off)
#define prefetchwm(src,off) PREFETCHWM(src,off)
#define prefetchwmlong(src,off) PREFETCHWMLONG(src,off)
#define pfnacc(dst,src) PFNACC(dst,src)
#define pfpnacc(dst,src) PFPNACC(dst,src)
#define pswapd(dst,src) PSWAPD(dst,src)
#define pminub(dst,src) PMINUB(dst,src)
#define pmaxub(dst,src) PMAXUB(dst,src)
#define pminsw(dst,src) PMINSW(dst,src)
#define pmaxsw(dst,src) PMAXSW(dst,src)
#define pmulhuw(dst,src) PMULHUW(dst,src)
#define pavgb(dst,src) PAVGB(dst,src)
#define pavgw(dst,src) PAVGW(dst,src)
#define psadbw(dst,src) PSADBW(dst,src)
#define pmovmskb(dst,src) PMOVMSKB(dst,src)
#define pmaskmovq(dst,src) PMASKMOVQ(dst,src)
#define maskmovq(dst,src) MASKMOVQ(dst,src)
#define pinsrw(dst,src,msk) PINSRW(dst,src,msk)
#define pextrw(dst,src,msk) PEXTRW(dst,src,msk)
#define pshufw(dst,src,msk) PSHUFW(dst,src,msk)
#define movntq(dst,src) MOVNTQ(dst,src)
#define prefetchnta(mem) PREFETCHNTA(mem)
#define prefetcht0(mem) PREFETCHT0(mem)
#define prefetcht1(mem) PREFETCHT1(mem)
#define prefetcht2(mem) PREFETCHT2(mem)
#define pavgusbm(dst,src,off) PAVGUSBM(dst,src,off)
#define pf2idm(dst,src,off) PF2IDM(dst,src,off)
#define pfaccm(dst,src,off) PFACCM(dst,src,off)
#define pfaddm(dst,src,off) PFADDM(dst,src,off)
#define pfcmpeqm(dst,src,off) PFCMPEQM(dst,src,off)
#define pfcmpgem(dst,src,off) PFCMPGEM(dst,src,off)
#define pfcmpgtm(dst,src,off) PFCMPGTM(dst,src,off)
#define pfmaxm(dst,src,off) PFMAXM(dst,src,off)
#define pfminm(dst,src,off) PFMINM(dst,src,off)
#define pfmulm(dst,src,off) PFMULM(dst,src,off)
#define pfrcpm(dst,src,off) PFRCPM(dst,src,off)
#define pfrcpit1m(dst,src,off) PFRCPIT1M(dst,src,off)
#define pfrcpit2m(dst,src,off) PFRCPIT2M(dst,src,off)
#define pfrsqrtm(dst,src,off) PFRSQRTM(dst,src,off)
#define pfrsqit1m(dst,src,off) PFRSQIT1M(dst,src,off)
#define pfsubm(dst,src,off) PFSUBM(dst,src,off)
#define pfsubrm(dst,src,off) PFSUBRM(dst,src,off)
#define pi2fdm(dst,src,off) PI2FDM(dst,src,off)
#define pmulhrwm(dst,src,off) PMULHRWM(dst,src,off)
#define sfence SFENCE
#define pfnaccm(dst,src,off) PFNACCM(dst,src,off)
#define pfpnaccm(dst,src,off) PFPNACCM(dst,src,off)
#define pswapdm(dst,src,off) PSWAPDM(dst,src,off)
#define pminubm(dst,src,off) PMINUBM(dst,src,off)
#define pmaxubm(dst,src,off) PMAXUBM(dst,src,off)
#define pminswm(dst,src,off) PMINSWM(dst,src,off)
#define pmaxswm(dst,src,off) PMAXSWM(dst,src,off)
#define pmulhuwm(dst,src,off) PMULHUWM(dst,src,off)
#define pavgbm(dst,src,off) PAVGBM(dst,src,off)
#define pavgwm(dst,src,off) PAVGWM(dst,src,off)
#define psadbwm(dst,src,off) PSADBWM(dst,src,off)
#define pmovmskbm(dst,src,off) PMOVMSKBM(dst,src,off)
#define pmaskmovqm(dst,src,off) PMASKMOVQM(dst,src,off)
#define maskmovqm(dst,src,off) MASKMOVQM(dst,src,off)
#define pinsrwm(dst,src,off,msk) PINSRWM(dst,src,off,msk)
#define pextrwm(dst,src,off,msk) PEXTRWM(dst,src,off,msk)
#define pshufwm(dst,src,off,msk) PSHUFWM(dst,src,off,msk)
#define movntqm(dst,src,off) MOVNTQM(dst,src,off)
#define prefetchntam(mem,off) PREFETCHNTA(mem,off)
#define prefetcht0m(mem,off) PREFETCHT0(mem,off)
#define prefetcht1m(mem,off) PREFETCHT1(mem,off)
#define prefetcht2m(mem,off) PREFETCHT2(mem,off)
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -