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

📄 amd3dx.h

📁 这是一组DCT和iDCT的代码
💻 H
📖 第 1 页 / 共 4 页
字号:
#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 + -