📄 amd3dx.h
字号:
#define p_pextrw(dst,src,msk) P_PEXTRW(dst,src,msk)
#define p_pshufw(dst,src,msk) P_PSHUFW(dst,src,msk)
#define p_movntq(dst,src) P_MOVNTQ(dst,src)
#define p_pfnaccm(dst,src,off) P_PFNACCM(dst,src,off)
#define p_pfpnaccm(dst,src,off) P_PFPNACCM(dst,src,off)
#define p_pswapdm(dst,src,off) P_PSWAPDM(dst,src,off)
#define p_pminubm(dst,src,off) P_PMINUBM(dst,src,off)
#define p_pmaxubm(dst,src,off) P_PMAXUBM(dst,src,off)
#define p_pminswm(dst,src,off) P_PMINSWM(dst,src,off)
#define p_pmaxswm(dst,src,off) P_PMAXSWM(dst,src,off)
#define p_pmulhuwm(dst,src,off) P_PMULHUWM(dst,src,off)
#define p_pavgbm(dst,src,off) P_PAVGBM(dst,src,off)
#define p_avgwm(dst,src,off) P_PAVGWM(dst,src,off)
#define p_psadbwm(dst,src,off) P_PSADBWM(dst,src,off)
#define p_pmovmskbm(dst,src,off) P_PMOVMSKBM(dst,src,off)
#define p_pmaskmovqm(dst,src,off) P_PMASKMOVQM(dst,src,off)
#define p_maskmovqm(dst,src,off) P_MASKMOVQM(dst,src,off)
#define p_pinsrwm(dst,src,off,msk) P_PINSRWM(dst,src,off,msk)
#define p_pshufwm(dst,src,off,msk) P_PSHUFWM(dst,src,off,msk)
#define p_movntqm(dst,src,off) P_MOVNTQM(dst,src,off)
#elif defined (_MSC_VER) && !defined (__MWERKS__)
// The Microsoft Visual C++ version of the 3DNow! macros.
// Stop the "no EMMS" warning, since it doesn't detect FEMMS properly
#pragma warning(disable:4799)
// 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
// These defines are for compatibility with the previous version of the header file.
#define _K3D_M0 0xc0
#define _K3D_M1 0xc1
#define _K3D_M2 0xc2
#define _K3D_M3 0xc3
#define _K3D_M4 0xc4
#define _K3D_M5 0xc5
#define _K3D_M6 0xc6
#define _K3D_M7 0xc7
#define _K3D_m0 0xc0
#define _K3D_m1 0xc1
#define _K3D_m2 0xc2
#define _K3D_m3 0xc3
#define _K3D_m4 0xc4
#define _K3D_m5 0xc5
#define _K3D_m6 0xc6
#define _K3D_m7 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
// General 3DNow! instruction format that is supported by
// these macros. Note that only the most basic form of memory
// operands are supported by these macros.
#define InjK3DOps(dst,src,inst) \
{ \
_asm _emit 0x0f \
_asm _emit 0x0f \
_asm _emit ((_K3D_##dst & 0x3f) << 3) | _K3D_##src \
_asm _emit _3DNowOpcode##inst \
}
#define InjK3DMOps(dst,src,off,inst) \
{ \
_asm _emit 0x0f \
_asm _emit 0x0f \
_asm _emit (((_K3D_##dst & 0x3f) << 3) | _K3D_##src | 0x40) \
_asm _emit off \
_asm _emit _3DNowOpcode##inst \
}
#define InjMMXOps(dst,src,inst) \
{ \
_asm _emit 0x0f \
_asm _emit _3DNowOpcode##inst \
_asm _emit ((_K3D_##dst & 0x3f) << 3) | _K3D_##src \
}
#define InjMMXMOps(dst,src,off,inst) \
{ \
_asm _emit 0x0f \
_asm _emit _3DNowOpcode##inst \
_asm _emit (((_K3D_##dst & 0x3f) << 3) | _K3D_##src | 0x40) \
_asm _emit off \
}
#define _3DNowOpcodePF2ID 0x1d
#define _3DNowOpcodePFACC 0xae
#define _3DNowOpcodePFADD 0x9e
#define _3DNowOpcodePFCMPEQ 0xb0
#define _3DNowOpcodePFCMPGE 0x90
#define _3DNowOpcodePFCMPGT 0xa0
#define _3DNowOpcodePFMAX 0xa4
#define _3DNowOpcodePFMIN 0x94
#define _3DNowOpcodePFMUL 0xb4
#define _3DNowOpcodePFRCP 0x96
#define _3DNowOpcodePFRCPIT1 0xa6
#define _3DNowOpcodePFRCPIT2 0xb6
#define _3DNowOpcodePFRSQRT 0x97
#define _3DNowOpcodePFRSQIT1 0xa7
#define _3DNowOpcodePFSUB 0x9a
#define _3DNowOpcodePFSUBR 0xaa
#define _3DNowOpcodePI2FD 0x0d
#define _3DNowOpcodePAVGUSB 0xbf
#define _3DNowOpcodePMULHRW 0xb7
#define _3DNowOpcodePFNACC 0x8a
#define _3DNowOpcodePFPNACC 0x8e
#define _3DNowOpcodePSWAPD 0xbb
#define _3DNowOpcodePMINUB 0xda
#define _3DNowOpcodePMAXUB 0xde
#define _3DNowOpcodePMINSW 0xea
#define _3DNowOpcodePMAXSW 0xee
#define _3DNowOpcodePMULHUW 0xe4
#define _3DNowOpcodePAVGB 0xe0
#define _3DNowOpcodePAVGW 0xe3
#define _3DNowOpcodePSADBW 0xf6
#define _3DNowOpcodePMOVMSKB 0xd7
#define _3DNowOpcodePMASKMOVQ 0xf7
#define _3DNowOpcodeMASKMOVQ 0xf7
#define _3DNowOpcodePINSRW 0xc4
#define _3DNowOpcodePEXTRW 0xc5
#define _3DNowOpcodePSHUFW 0x70
#define _3DNowOpcodeMOVNTQ 0xe7
#define _3DNowOpcodePREFETCHT 0x18
#define PF2ID(dst,src) InjK3DOps(dst, src, PF2ID)
#define PFACC(dst,src) InjK3DOps(dst, src, PFACC)
#define PFADD(dst,src) InjK3DOps(dst, src, PFADD)
#define PFCMPEQ(dst,src) InjK3DOps(dst, src, PFCMPEQ)
#define PFCMPGE(dst,src) InjK3DOps(dst, src, PFCMPGE)
#define PFCMPGT(dst,src) InjK3DOps(dst, src, PFCMPGT)
#define PFMAX(dst,src) InjK3DOps(dst, src, PFMAX)
#define PFMIN(dst,src) InjK3DOps(dst, src, PFMIN)
#define PFMUL(dst,src) InjK3DOps(dst, src, PFMUL)
#define PFRCP(dst,src) InjK3DOps(dst, src, PFRCP)
#define PFRCPIT1(dst,src) InjK3DOps(dst, src, PFRCPIT1)
#define PFRCPIT2(dst,src) InjK3DOps(dst, src, PFRCPIT2)
#define PFRSQRT(dst,src) InjK3DOps(dst, src, PFRSQRT)
#define PFRSQIT1(dst,src) InjK3DOps(dst, src, PFRSQIT1)
#define PFSUB(dst,src) InjK3DOps(dst, src, PFSUB)
#define PFSUBR(dst,src) InjK3DOps(dst, src, PFSUBR)
#define PI2FD(dst,src) InjK3DOps(dst, src, PI2FD)
#define PAVGUSB(dst,src) InjK3DOps(dst, src, PAVGUSB)
#define PMULHRW(dst,src) InjK3DOps(dst, src, PMULHRW)
#define FEMMS \
{ \
_asm _emit 0x0f \
_asm _emit 0x0e \
}
#define PREFETCH(src) \
{ \
_asm _emit 0x0f \
_asm _emit 0x0d \
_asm _emit (_K3D_##src & 0x07) \
}
/* Prefetch with a short offset, < 127 or > -127
Carefull! Doesn't check for your offset being
in range. */
#define PREFETCHM(src,off) \
{ \
_asm _emit 0x0f \
_asm _emit 0x0d \
_asm _emit (0x40 | (_K3D_##src & 0x07)) \
_asm _emit off \
}
/* Prefetch with a long offset */
#define PREFETCHMLONG(src,off) \
{ \
_asm _emit 0x0f \
_asm _emit 0x0d \
_asm _emit (0x80 | (_K3D_##src & 0x07)) \
_asm _emit (off & 0x000000ff) \
_asm _emit (off & 0x0000ff00) >> 8 \
_asm _emit (off & 0x00ff0000) >> 16 \
_asm _emit (off & 0xff000000) >> 24 \
}
#define PREFETCHW(src) \
{ \
_asm _emit 0x0f \
_asm _emit 0x0d \
_asm _emit (0x08 | (_K3D_##src & 0x07)) \
}
#define PREFETCHWM(src,off) \
{ \
_asm _emit 0x0f \
_asm _emit 0x0d \
_asm _emit 0x48 | (_K3D_##src & 0x07) \
_asm _emit off \
}
#define PREFETCHWMLONG(src,off) \
{ \
_asm _emit 0x0f \
_asm _emit 0x0d \
_asm _emit 0x88 | (_K3D_##src & 0x07) \
_asm _emit (off & 0x000000ff) \
_asm _emit (off & 0x0000ff00) >> 8 \
_asm _emit (off & 0x00ff0000) >> 16 \
_asm _emit (off & 0xff000000) >> 24 \
}
/* Defines for new, K7 opcodes */
#define SFENCE \
{ \
_asm _emit 0x0f \
_asm _emit 0xae \
_asm _emit 0xf8 \
}
#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) _asm _emit msk
#define PEXTRW(dst,src,msk) InjMMXOps(dst,src,PEXTRW) _asm _emit msk
#define PSHUFW(dst,src,msk) InjMMXOps(dst,src,PSHUFW) _asm _emit 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 opcodes */
#define PAVGUSBM(dst,src,off) InjK3DMOps(dst,src,off,PAVGUSB)
#define PF2IDM(dst,src,off) InjK3DMOps(dst,src,off,PF2ID)
#define PFACCM(dst,src,off) InjK3DMOps(dst,src,off,PFACC)
#define PFADDM(dst,src,off) InjK3DMOps(dst,src,off,PFADD)
#define PFCMPEQM(dst,src,off) InjK3DMOps(dst,src,off,PFCMPEQ)
#define PFCMPGEM(dst,src,off) InjK3DMOps(dst,src,off,PFCMPGE)
#define PFCMPGTM(dst,src,off) InjK3DMOps(dst,src,off,PFCMPGT)
#define PFMAXM(dst,src,off) InjK3DMOps(dst,src,off,PFMAX)
#define PFMINM(dst,src,off) InjK3DMOps(dst,src,off,PFMIN)
#define PFMULM(dst,src,off) InjK3DMOps(dst,src,off,PFMUL)
#define PFRCPM(dst,src,off) InjK3DMOps(dst,src,off,PFRCP)
#define PFRCPIT1M(dst,src,off) InjK3DMOps(dst,src,off,PFRCPIT1)
#define PFRCPIT2M(dst,src,off) InjK3DMOps(dst,src,off,PFRCPIT2)
#define PFRSQRTM(dst,src,off) InjK3DMOps(dst,src,off,PFRSQRT)
#define PFRSQIT1M(dst,src,off) InjK3DMOps(dst,src,off,PFRSQIT1)
#define PFSUBM(dst,src,off) InjK3DMOps(dst,src,off,PFSUB)
#define PFSUBRM(dst,src,off) InjK3DMOps(dst,src,off,PFSUBR)
#define PI2FDM(dst,src,off) InjK3DMOps(dst,src,off,PI2FD)
#define PMULHRWM(dst,src,off) InjK3DMOps(dst,src,off,PMULHRW)
/* 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)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -