/* PCSX2 - PS2 Emulator for PCs * Copyright (C) 2002-2010 PCSX2 Dev Team * * PCSX2 is free software: you can redistribute it and/or modify it under the terms * of the GNU Lesser General Public License as published by the Free Software Found- * ation, either version 3 of the License, or (at your option) any later version. * * PCSX2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with PCSX2. * If not, see . */ #pragma once //------------------------------------------------------------------ // legacy jump/align functions //------------------------------------------------------------------ extern void x86SetPtr( u8 *ptr ); extern void x86SetJ8( u8 *j8 ); extern void x86SetJ8A( u8 *j8 ); extern void x86SetJ16( u16 *j16 ); extern void x86SetJ16A( u16 *j16 ); extern void x86SetJ32( u32 *j32 ); extern void x86SetJ32A( u32 *j32 ); extern void x86Align( int bytes ); extern void x86AlignExecutable( int align ); //------------------------------------------------------------------ extern void CLC( void ); extern void NOP( void ); //////////////////////////////////// // mov instructions // //////////////////////////////////// // mov r32 to r32 extern void MOV32RtoR( x86IntRegType to, x86IntRegType from ); // mov r32 to m32 extern void MOV32RtoM( uptr to, x86IntRegType from ); // mov m32 to r32 extern void MOV32MtoR( x86IntRegType to, uptr from ); // mov [r32] to r32 extern void MOV32RmtoR( x86IntRegType to, x86IntRegType from, int offset=0 ); // mov [r32][r32< subtract ST(0) from ST(1), store in ST(1) and POP stack extern void FSUBP( void ); // fmul ST(src) to fpu reg stack ST(0) extern void FMUL32Rto0( x86IntRegType src ); // fmul ST(0) to fpu reg stack ST(src) extern void FMUL320toR( x86IntRegType src ); // fdiv ST(src) to fpu reg stack ST(0) extern void FDIV32Rto0( x86IntRegType src ); // fdiv ST(0) to fpu reg stack ST(src) extern void FDIV320toR( x86IntRegType src ); // fdiv ST(0) to fpu reg stack ST(src), pop stack, store in ST(src) extern void FDIV320toRP( x86IntRegType src ); // fadd m32 to fpu reg stack extern void FADD32( u32 from ); // fsub m32 to fpu reg stack extern void FSUB32( u32 from ); // fmul m32 to fpu reg stack extern void FMUL32( u32 from ); // fdiv m32 to fpu reg stack extern void FDIV32( u32 from ); // fcomi st, st( i) extern void FCOMI( x86IntRegType src ); // fcomip st, st( i) extern void FCOMIP( x86IntRegType src ); // fucomi st, st( i) extern void FUCOMI( x86IntRegType src ); // fucomip st, st( i) extern void FUCOMIP( x86IntRegType src ); // fcom m32 to fpu reg stack extern void FCOM32( u32 from ); // fabs fpu reg stack extern void FABS( void ); // fsqrt fpu reg stack extern void FSQRT( void ); // ftan fpu reg stack extern void FPATAN( void ); // fsin fpu reg stack extern void FSIN( void ); // fchs fpu reg stack extern void FCHS( void ); // fcmovb fpu reg to fpu reg stack extern void FCMOVB32( x86IntRegType from ); // fcmove fpu reg to fpu reg stack extern void FCMOVE32( x86IntRegType from ); // fcmovbe fpu reg to fpu reg stack extern void FCMOVBE32( x86IntRegType from ); // fcmovu fpu reg to fpu reg stack extern void FCMOVU32( x86IntRegType from ); // fcmovnb fpu reg to fpu reg stack extern void FCMOVNB32( x86IntRegType from ); // fcmovne fpu reg to fpu reg stack extern void FCMOVNE32( x86IntRegType from ); // fcmovnbe fpu reg to fpu reg stack extern void FCMOVNBE32( x86IntRegType from ); // fcmovnu fpu reg to fpu reg stack extern void FCMOVNU32( x86IntRegType from ); extern void FCOMP32( u32 from ); extern void FNSTSWtoAX( void ); #define MMXONLY(code) code //****************** // MMX instructions //****************** // r64 = mm // movq m64 to r64 extern void MOVQMtoR( x86MMXRegType to, uptr from ); // movq r64 to m64 extern void MOVQRtoM( uptr to, x86MMXRegType from ); // pand r64 to r64 extern void PANDRtoR( x86MMXRegType to, x86MMXRegType from ); extern void PANDNRtoR( x86MMXRegType to, x86MMXRegType from ); // pand m64 to r64 ; extern void PANDMtoR( x86MMXRegType to, uptr from ); // pandn r64 to r64 extern void PANDNRtoR( x86MMXRegType to, x86MMXRegType from ); // pandn r64 to r64 extern void PANDNMtoR( x86MMXRegType to, uptr from ); // por r64 to r64 extern void PORRtoR( x86MMXRegType to, x86MMXRegType from ); // por m64 to r64 extern void PORMtoR( x86MMXRegType to, uptr from ); // pxor r64 to r64 extern void PXORRtoR( x86MMXRegType to, x86MMXRegType from ); // pxor m64 to r64 extern void PXORMtoR( x86MMXRegType to, uptr from ); // psllq r64 to r64 extern void PSLLQRtoR( x86MMXRegType to, x86MMXRegType from ); // psllq m64 to r64 extern void PSLLQMtoR( x86MMXRegType to, uptr from ); // psllq imm8 to r64 extern void PSLLQItoR( x86MMXRegType to, u8 from ); // psrlq r64 to r64 extern void PSRLQRtoR( x86MMXRegType to, x86MMXRegType from ); // psrlq m64 to r64 extern void PSRLQMtoR( x86MMXRegType to, uptr from ); // psrlq imm8 to r64 extern void PSRLQItoR( x86MMXRegType to, u8 from ); // paddusb r64 to r64 extern void PADDUSBRtoR( x86MMXRegType to, x86MMXRegType from ); // paddusb m64 to r64 extern void PADDUSBMtoR( x86MMXRegType to, uptr from ); // paddusw r64 to r64 extern void PADDUSWRtoR( x86MMXRegType to, x86MMXRegType from ); // paddusw m64 to r64 extern void PADDUSWMtoR( x86MMXRegType to, uptr from ); // paddb r64 to r64 extern void PADDBRtoR( x86MMXRegType to, x86MMXRegType from ); // paddb m64 to r64 extern void PADDBMtoR( x86MMXRegType to, uptr from ); // paddw r64 to r64 extern void PADDWRtoR( x86MMXRegType to, x86MMXRegType from ); // paddw m64 to r64 extern void PADDWMtoR( x86MMXRegType to, uptr from ); // paddd r64 to r64 extern void PADDDRtoR( x86MMXRegType to, x86MMXRegType from ); // paddd m64 to r64 extern void PADDDMtoR( x86MMXRegType to, uptr from ); extern void PADDSBRtoR( x86MMXRegType to, x86MMXRegType from ); extern void PADDSWRtoR( x86MMXRegType to, x86MMXRegType from ); // paddq m64 to r64 (sse2 only?) extern void PADDQMtoR( x86MMXRegType to, uptr from ); // paddq r64 to r64 (sse2 only?) extern void PADDQRtoR( x86MMXRegType to, x86MMXRegType from ); extern void PSUBSBRtoR( x86MMXRegType to, x86MMXRegType from ); extern void PSUBSWRtoR( x86MMXRegType to, x86MMXRegType from ); extern void PSUBBRtoR( x86MMXRegType to, x86MMXRegType from ); extern void PSUBWRtoR( x86MMXRegType to, x86MMXRegType from ); extern void PSUBDRtoR( x86MMXRegType to, x86MMXRegType from ); extern void PSUBDMtoR( x86MMXRegType to, uptr from ); // psubq m64 to r64 (sse2 only?) extern void PSUBQMtoR( x86MMXRegType to, uptr from ); // psubq r64 to r64 (sse2 only?) extern void PSUBQRtoR( x86MMXRegType to, x86MMXRegType from ); // pmuludq m64 to r64 (sse2 only?) extern void PMULUDQMtoR( x86MMXRegType to, uptr from ); // pmuludq r64 to r64 (sse2 only?) extern void PMULUDQRtoR( x86MMXRegType to, x86MMXRegType from ); extern void PCMPEQBRtoR( x86MMXRegType to, x86MMXRegType from ); extern void PCMPEQWRtoR( x86MMXRegType to, x86MMXRegType from ); extern void PCMPEQDRtoR( x86MMXRegType to, x86MMXRegType from ); extern void PCMPEQDMtoR( x86MMXRegType to, uptr from ); extern void PCMPGTBRtoR( x86MMXRegType to, x86MMXRegType from ); extern void PCMPGTWRtoR( x86MMXRegType to, x86MMXRegType from ); extern void PCMPGTDRtoR( x86MMXRegType to, x86MMXRegType from ); extern void PCMPGTDMtoR( x86MMXRegType to, uptr from ); extern void PSRLWItoR( x86MMXRegType to, u8 from ); extern void PSRLDItoR( x86MMXRegType to, u8 from ); extern void PSRLDRtoR( x86MMXRegType to, x86MMXRegType from ); extern void PSLLWItoR( x86MMXRegType to, u8 from ); extern void PSLLDItoR( x86MMXRegType to, u8 from ); extern void PSLLDRtoR( x86MMXRegType to, x86MMXRegType from ); extern void PSRAWItoR( x86MMXRegType to, u8 from ); extern void PSRADItoR( x86MMXRegType to, u8 from ); extern void PSRADRtoR( x86MMXRegType to, x86MMXRegType from ); extern void PUNPCKLDQRtoR( x86MMXRegType to, x86MMXRegType from ); extern void PUNPCKLDQMtoR( x86MMXRegType to, uptr from ); extern void PUNPCKHDQRtoR( x86MMXRegType to, x86MMXRegType from ); extern void PUNPCKHDQMtoR( x86MMXRegType to, uptr from ); extern void MOVQRtoR( x86MMXRegType to, x86MMXRegType from ); extern void MOVQRmtoR( x86MMXRegType to, x86IntRegType from, int offset=0 ); extern void MOVQRtoRm( x86IntRegType to, x86MMXRegType from, int offset=0 ); extern void MOVDMtoMMX( x86MMXRegType to, uptr from ); extern void MOVDMMXtoM( uptr to, x86MMXRegType from ); extern void MOVD32RtoMMX( x86MMXRegType to, x86IntRegType from ); extern void MOVD32RmtoMMX( x86MMXRegType to, x86IntRegType from, int offset=0 ); extern void MOVD32MMXtoR( x86IntRegType to, x86MMXRegType from ); extern void MOVD32MMXtoRm( x86IntRegType to, x86MMXRegType from, int offset=0 ); extern void PINSRWRtoMMX( x86MMXRegType to, x86SSERegType from, u8 imm8 ); extern void PSHUFWRtoR(x86MMXRegType to, x86MMXRegType from, u8 imm8); extern void PSHUFWMtoR(x86MMXRegType to, uptr from, u8 imm8); extern void MASKMOVQRtoR(x86MMXRegType to, x86MMXRegType from); // emms extern void EMMS( void ); extern void PMOVMSKBMMXtoR(x86IntRegType to, x86MMXRegType from); //********************* // SSE instructions * //********************* extern void SSE_MOVAPS_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE_MOVAPS_XMM_to_M128( uptr to, x86SSERegType from ); extern void SSE_MOVAPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_MOVUPS_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE_MOVUPS_XMM_to_M128( uptr to, x86SSERegType from ); extern void SSE_MOVSS_M32_to_XMM( x86SSERegType to, uptr from ); extern void SSE_MOVSS_XMM_to_M32( u32 to, x86SSERegType from ); extern void SSE_MOVSS_XMM_to_Rm( x86IntRegType to, x86SSERegType from ); extern void SSE_MOVSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_MOVSS_Rm_to_XMM( x86SSERegType to, x86IntRegType from, int offset=0 ); extern void SSE_MOVSS_XMM_to_Rm( x86IntRegType to, x86SSERegType from, int offset=0 ); extern void SSE_MASKMOVDQU_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_MOVLPS_M64_to_XMM( x86SSERegType to, uptr from ); extern void SSE_MOVLPS_XMM_to_M64( u32 to, x86SSERegType from ); extern void SSE_MOVLPS_Rm_to_XMM( x86SSERegType to, x86IntRegType from, int offset=0 ); extern void SSE_MOVLPS_XMM_to_Rm( x86IntRegType to, x86SSERegType from, int offset=0 ); extern void SSE_MOVHPS_M64_to_XMM( x86SSERegType to, uptr from ); extern void SSE_MOVHPS_XMM_to_M64( u32 to, x86SSERegType from ); extern void SSE_MOVHPS_Rm_to_XMM( x86SSERegType to, x86IntRegType from, int offset=0 ); extern void SSE_MOVHPS_XMM_to_Rm( x86IntRegType to, x86SSERegType from, int offset=0 ); extern void SSE_MOVLHPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_MOVHLPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_MOVLPSRmtoR( x86SSERegType to, x86IntRegType from, int offset=0 ); extern void SSE_MOVLPSRtoRm( x86SSERegType to, x86IntRegType from, int offset=0 ); extern void SSE_MOVAPSRtoRm( x86IntRegType to, x86SSERegType from, int offset=0 ); extern void SSE_MOVAPSRmtoR( x86SSERegType to, x86IntRegType from, int offset=0 ); extern void SSE_MOVUPSRtoRm( x86IntRegType to, x86SSERegType from ); extern void SSE_MOVUPSRmtoR( x86SSERegType to, x86IntRegType from ); extern void SSE_MOVUPSRmtoR( x86SSERegType to, x86IntRegType from, int offset=0 ); extern void SSE_MOVUPSRtoRm( x86SSERegType to, x86IntRegType from, int offset=0 ); extern void SSE2_MOVDQARtoRm( x86IntRegType to, x86SSERegType from, int offset=0 ); extern void SSE2_MOVDQARmtoR( x86SSERegType to, x86IntRegType from, int offset=0 ); extern void SSE_RCPPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_RCPPS_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE_RCPSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_RCPSS_M32_to_XMM( x86SSERegType to, uptr from ); extern void SSE_ORPS_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE_ORPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_XORPS_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE_XORPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_ANDPS_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE_ANDPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_ANDNPS_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE_ANDNPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_ADDPS_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE_ADDPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_ADDSS_M32_to_XMM( x86SSERegType to, uptr from ); extern void SSE_ADDSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_SUBPS_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE_SUBPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_SUBSS_M32_to_XMM( x86SSERegType to, uptr from ); extern void SSE_SUBSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_MULPS_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE_MULPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_MULSS_M32_to_XMM( x86SSERegType to, uptr from ); extern void SSE_MULSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_CMPEQSS_M32_to_XMM( x86SSERegType to, uptr from ); extern void SSE_CMPEQSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_CMPLTSS_M32_to_XMM( x86SSERegType to, uptr from ); extern void SSE_CMPLTSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_CMPLESS_M32_to_XMM( x86SSERegType to, uptr from ); extern void SSE_CMPLESS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_CMPUNORDSS_M32_to_XMM( x86SSERegType to, uptr from ); extern void SSE_CMPUNORDSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_CMPNESS_M32_to_XMM( x86SSERegType to, uptr from ); extern void SSE_CMPNESS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_CMPNLTSS_M32_to_XMM( x86SSERegType to, uptr from ); extern void SSE_CMPNLTSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_CMPNLESS_M32_to_XMM( x86SSERegType to, uptr from ); extern void SSE_CMPNLESS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_CMPORDSS_M32_to_XMM( x86SSERegType to, uptr from ); extern void SSE_CMPORDSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_UCOMISS_M32_to_XMM( x86SSERegType to, uptr from ); extern void SSE_UCOMISS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_PMAXSW_MM_to_MM( x86MMXRegType to, x86MMXRegType from ); extern void SSE_PMINSW_MM_to_MM( x86MMXRegType to, x86MMXRegType from ); extern void SSE_CVTPI2PS_MM_to_XMM( x86SSERegType to, x86MMXRegType from ); extern void SSE_CVTPS2PI_M64_to_MM( x86MMXRegType to, uptr from ); extern void SSE_CVTPS2PI_XMM_to_MM( x86MMXRegType to, x86SSERegType from ); extern void SSE_CVTPI2PS_M64_to_XMM( x86SSERegType to, uptr from ); extern void SSE_CVTTSS2SI_M32_to_R32(x86IntRegType to, uptr from); extern void SSE_CVTTSS2SI_XMM_to_R32(x86IntRegType to, x86SSERegType from); extern void SSE_CVTSI2SS_M32_to_XMM(x86SSERegType to, uptr from); extern void SSE_CVTSI2SS_R_to_XMM(x86SSERegType to, x86IntRegType from); extern void SSE2_CVTDQ2PS_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_CVTDQ2PS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_CVTPS2DQ_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_CVTPS2DQ_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_CVTTPS2DQ_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_MAXPD_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_MAXPD_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_MAXPS_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE_MAXPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_MAXSS_M32_to_XMM( x86SSERegType to, uptr from ); extern void SSE_MAXSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_MINPD_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_MINPD_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_MINPS_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE_MINPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_MINSS_M32_to_XMM( x86SSERegType to, uptr from ); extern void SSE_MINSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_RSQRTPS_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE_RSQRTPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_RSQRTSS_M32_to_XMM( x86SSERegType to, uptr from ); extern void SSE_RSQRTSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_SQRTPS_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE_SQRTPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_SQRTSS_M32_to_XMM( x86SSERegType to, uptr from ); extern void SSE_SQRTSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_UNPCKLPS_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE_UNPCKLPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_UNPCKHPS_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE_UNPCKHPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_SHUFPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from, u8 imm8 ); extern void SSE_SHUFPS_M128_to_XMM( x86SSERegType to, uptr from, u8 imm8 ); extern void SSE_SHUFPS_Rm_to_XMM( x86SSERegType to, x86IntRegType from, int offset, u8 imm8 ); extern void SSE_CMPEQPS_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE_CMPEQPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_CMPLTPS_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE_CMPLTPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_CMPLEPS_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE_CMPLEPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_CMPUNORDPS_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE_CMPUNORDPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_CMPNEPS_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE_CMPNEPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_CMPNLTPS_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE_CMPNLTPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_CMPNLEPS_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE_CMPNLEPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_CMPORDPS_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE_CMPORDPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_DIVPS_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE_DIVPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE_DIVSS_M32_to_XMM( x86SSERegType to, uptr from ); extern void SSE_DIVSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); // VectorPath extern void SSE2_PSHUFD_XMM_to_XMM( x86SSERegType to, x86SSERegType from, u8 imm8 ); extern void SSE2_PSHUFD_M128_to_XMM( x86SSERegType to, uptr from, u8 imm8 ); extern void SSE2_PSHUFLW_XMM_to_XMM( x86SSERegType to, x86SSERegType from, u8 imm8 ); extern void SSE2_PSHUFLW_M128_to_XMM( x86SSERegType to, uptr from, u8 imm8 ); extern void SSE2_PSHUFHW_XMM_to_XMM( x86SSERegType to, x86SSERegType from, u8 imm8 ); extern void SSE2_PSHUFHW_M128_to_XMM( x86SSERegType to, uptr from, u8 imm8 ); extern void SSE2_SHUFPD_XMM_to_XMM( x86SSERegType to, x86SSERegType from, u8 imm8 ); extern void SSE2_SHUFPD_M128_to_XMM( x86SSERegType to, uptr from, u8 imm8 ); extern void SSE_STMXCSR( uptr from ); extern void SSE_LDMXCSR( uptr from ); //********************* // SSE 2 Instructions* //********************* extern void SSE2_CVTSS2SD_M32_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_CVTSS2SD_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_CVTSD2SS_M64_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_CVTSD2SS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_MOVDQA_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE2_MOVDQA_XMM_to_M128( uptr to, x86SSERegType from); extern void SSE2_MOVDQA_XMM_to_XMM( x86SSERegType to, x86SSERegType from); extern void SSE2_MOVDQU_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE2_MOVDQU_XMM_to_M128( uptr to, x86SSERegType from); extern void SSE2_MOVDQU_XMM_to_XMM( x86SSERegType to, x86SSERegType from); extern void SSE2_PSRLW_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE2_PSRLW_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE2_PSRLW_I8_to_XMM(x86SSERegType to, u8 imm8); extern void SSE2_PSRLD_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE2_PSRLD_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE2_PSRLD_I8_to_XMM(x86SSERegType to, u8 imm8); extern void SSE2_PSRLQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE2_PSRLQ_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE2_PSRLQ_I8_to_XMM(x86SSERegType to, u8 imm8); extern void SSE2_PSRLDQ_I8_to_XMM(x86SSERegType to, u8 imm8); extern void SSE2_PSRAW_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE2_PSRAW_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE2_PSRAW_I8_to_XMM(x86SSERegType to, u8 imm8); extern void SSE2_PSRAD_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE2_PSRAD_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE2_PSRAD_I8_to_XMM(x86SSERegType to, u8 imm8); extern void SSE2_PSLLW_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE2_PSLLW_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE2_PSLLW_I8_to_XMM(x86SSERegType to, u8 imm8); extern void SSE2_PSLLD_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE2_PSLLD_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE2_PSLLD_I8_to_XMM(x86SSERegType to, u8 imm8); extern void SSE2_PSLLQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE2_PSLLQ_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE2_PSLLQ_I8_to_XMM(x86SSERegType to, u8 imm8); extern void SSE2_PSLLDQ_I8_to_XMM(x86SSERegType to, u8 imm8); extern void SSE2_PMAXSW_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_PMAXSW_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_PMAXUB_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_PMAXUB_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_PMINSW_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_PMINSW_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_PMINUB_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_PMINUB_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_PADDSB_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_PADDSB_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_PADDSW_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_PADDSW_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_PSUBSB_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_PSUBSB_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_PSUBSW_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_PSUBSW_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_PSUBUSB_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_PSUBUSB_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_PSUBUSW_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_PSUBUSW_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_PAND_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_PAND_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_PANDN_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_PANDN_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_PXOR_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_PXOR_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_PADDW_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); extern void SSE2_PADDW_M128_to_XMM(x86SSERegType to, uptr from ); extern void SSE2_PADDUSB_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_PADDUSB_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_PADDUSW_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_PADDUSW_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_PADDB_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); extern void SSE2_PADDB_M128_to_XMM(x86SSERegType to, uptr from ); extern void SSE2_PADDD_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); extern void SSE2_PADDD_M128_to_XMM(x86SSERegType to, uptr from ); extern void SSE2_PADDQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); extern void SSE2_PADDQ_M128_to_XMM(x86SSERegType to, uptr from ); extern void SSE2_PMADDWD_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE2_ANDPD_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_ANDPD_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_UCOMISD_M64_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_UCOMISD_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_SQRTSD_M64_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_SQRTSD_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_MAXPD_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_MAXPD_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_MAXSD_M64_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_MAXSD_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_XORPD_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_XORPD_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_ADDSD_M64_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_ADDSD_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_SUBSD_M64_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_SUBSD_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_MULSD_M64_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_MULSD_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_DIVSD_M64_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_DIVSD_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_MINSD_M64_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_MINSD_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); //**********************************************************************************/ //PACKSSWB,PACKSSDW: Pack Saturate Signed Word //********************************************************************************** extern void SSE2_PACKSSWB_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE2_PACKSSWB_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE2_PACKSSDW_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE2_PACKSSDW_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE2_PACKUSWB_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE2_PACKUSWB_M128_to_XMM(x86SSERegType to, uptr from); //**********************************************************************************/ //PUNPCKHWD: Unpack 16bit high //********************************************************************************** extern void SSE2_PUNPCKLBW_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE2_PUNPCKLBW_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE2_PUNPCKHBW_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE2_PUNPCKHBW_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE2_PUNPCKLWD_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE2_PUNPCKLWD_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE2_PUNPCKHWD_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE2_PUNPCKHWD_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE2_PUNPCKLDQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE2_PUNPCKLDQ_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE2_PUNPCKHDQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE2_PUNPCKHDQ_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE2_PUNPCKLQDQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE2_PUNPCKLQDQ_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE2_PUNPCKHQDQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE2_PUNPCKHQDQ_M128_to_XMM(x86SSERegType to, uptr from); // mult by half words extern void SSE2_PMULLW_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE2_PMULLW_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE2_PMULHW_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE2_PMULHW_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE2_PMULUDQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE2_PMULUDQ_M128_to_XMM(x86SSERegType to, uptr from); //**********************************************************************************/ //PMOVMSKB: Create 16bit mask from signs of 8bit integers //********************************************************************************** extern void SSE2_PMOVMSKB_XMM_to_R32(x86IntRegType to, x86SSERegType from); extern void SSE_MOVMSKPS_XMM_to_R32(x86IntRegType to, x86SSERegType from); extern void SSE2_MOVMSKPD_XMM_to_R32(x86IntRegType to, x86SSERegType from); //**********************************************************************************/ //PEXTRW,PINSRW: Packed Extract/Insert Word * //********************************************************************************** extern void SSE_PEXTRW_XMM_to_R32(x86IntRegType to, x86SSERegType from, u8 imm8 ); extern void SSE_PINSRW_R32_to_XMM(x86SSERegType from, x86IntRegType to, u8 imm8 ); //**********************************************************************************/ //PSUBx: Subtract Packed Integers * //********************************************************************************** extern void SSE2_PSUBB_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); extern void SSE2_PSUBB_M128_to_XMM(x86SSERegType to, uptr from ); extern void SSE2_PSUBW_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); extern void SSE2_PSUBW_M128_to_XMM(x86SSERegType to, uptr from ); extern void SSE2_PSUBD_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); extern void SSE2_PSUBD_M128_to_XMM(x86SSERegType to, uptr from ); extern void SSE2_PSUBQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); extern void SSE2_PSUBQ_M128_to_XMM(x86SSERegType to, uptr from ); /////////////////////////////////////////////////////////////////////////////////////// //**********************************************************************************/ //PCMPxx: Compare Packed Integers * //********************************************************************************** extern void SSE2_PCMPGTB_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); extern void SSE2_PCMPGTB_M128_to_XMM(x86SSERegType to, uptr from ); extern void SSE2_PCMPGTW_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); extern void SSE2_PCMPGTW_M128_to_XMM(x86SSERegType to, uptr from ); extern void SSE2_PCMPGTD_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); extern void SSE2_PCMPGTD_M128_to_XMM(x86SSERegType to, uptr from ); extern void SSE2_PCMPEQB_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); extern void SSE2_PCMPEQB_M128_to_XMM(x86SSERegType to, uptr from ); extern void SSE2_PCMPEQW_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); extern void SSE2_PCMPEQW_M128_to_XMM(x86SSERegType to, uptr from ); extern void SSE2_PCMPEQD_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); extern void SSE2_PCMPEQD_M128_to_XMM(x86SSERegType to, uptr from ); //**********************************************************************************/ //MOVD: Move Dword(32bit) to /from XMM reg * //********************************************************************************** extern void SSE2_MOVD_M32_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_MOVD_R_to_XMM( x86SSERegType to, x86IntRegType from ); extern void SSE2_MOVD_Rm_to_XMM( x86SSERegType to, x86IntRegType from, int offset=0 ); extern void SSE2_MOVD_XMM_to_M32( u32 to, x86SSERegType from ); extern void SSE2_MOVD_XMM_to_R( x86IntRegType to, x86SSERegType from ); extern void SSE2_MOVD_XMM_to_Rm( x86IntRegType to, x86SSERegType from, int offset=0 ); extern void SSE2_MOVSD_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_MOVQ_XMM_to_R( x86IntRegType to, x86SSERegType from ); extern void SSE2_MOVQ_R_to_XMM( x86SSERegType to, x86IntRegType from ); extern void SSE2_MOVQ_M64_to_XMM( x86SSERegType to, uptr from ); extern void SSE2_MOVQ_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_MOVQ_XMM_to_M64( u32 to, x86SSERegType from ); //**********************************************************************************/ //MOVD: Move Qword(64bit) to/from MMX/XMM reg * //********************************************************************************** extern void SSE2_MOVDQ2Q_XMM_to_MM( x86MMXRegType to, x86SSERegType from); extern void SSE2_MOVQ2DQ_MM_to_XMM( x86SSERegType to, x86MMXRegType from); //**********************************************************************************/ //POR : SSE Bitwise OR * //********************************************************************************** extern void SSE2_POR_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); extern void SSE2_POR_M128_to_XMM( x86SSERegType to, uptr from ); extern void SSE3_HADDPS_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE3_HADDPS_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE3_MOVSLDUP_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE3_MOVSLDUP_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE3_MOVSHDUP_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE3_MOVSHDUP_M128_to_XMM(x86SSERegType to, uptr from); // SSSE3 extern void SSSE3_PABSB_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSSE3_PABSW_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSSE3_PABSD_XMM_to_XMM(x86SSERegType to, x86SSERegType from); // SSE4.1 #ifndef _MM_MK_INSERTPS_NDX #define _MM_MK_INSERTPS_NDX(srcField, dstField, zeroMask) (((srcField)<<6) | ((dstField)<<4) | (zeroMask)) #endif extern void SSE4_DPPS_XMM_to_XMM(x86SSERegType to, x86SSERegType from, u8 imm8); extern void SSE4_DPPS_M128_to_XMM(x86SSERegType to, uptr from, u8 imm8); extern void SSE4_INSERTPS_XMM_to_XMM(x86SSERegType to, x86SSERegType from, u8 imm8); extern void SSE4_EXTRACTPS_XMM_to_R32(x86IntRegType to, x86SSERegType from, u8 imm8); extern void SSE4_EXTRACTPS_XMM_to_M32(uptr to, x86SSERegType from, u8 imm8); extern void SSE4_BLENDPS_XMM_to_XMM(x86SSERegType to, x86SSERegType from, u8 imm8); extern void SSE4_BLENDVPS_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE4_BLENDVPS_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE4_PMOVSXDQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE4_PINSRD_R32_to_XMM(x86SSERegType to, x86IntRegType from, u8 imm8); extern void SSE4_PMAXSD_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE4_PMINSD_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE4_PMAXUD_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE4_PMINUD_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE4_PMAXSD_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE4_PMINSD_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE4_PMAXUD_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE4_PMINUD_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE4_PMULDQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE4_PTEST_XMM_to_XMM(x86SSERegType to, x86SSERegType from); //********************* // 3DNOW instructions * //********************* extern void FEMMS( void ); extern void PFCMPEQMtoR( x86IntRegType to, uptr from ); extern void PFCMPGTMtoR( x86IntRegType to, uptr from ); extern void PFCMPGEMtoR( x86IntRegType to, uptr from ); extern void PFADDMtoR( x86IntRegType to, uptr from ); extern void PFADDRtoR( x86IntRegType to, x86IntRegType from ); extern void PFSUBMtoR( x86IntRegType to, uptr from ); extern void PFSUBRtoR( x86IntRegType to, x86IntRegType from ); extern void PFMULMtoR( x86IntRegType to, uptr from ); extern void PFMULRtoR( x86IntRegType to, x86IntRegType from ); extern void PFRCPMtoR( x86IntRegType to, uptr from ); extern void PFRCPRtoR( x86IntRegType to, x86IntRegType from ); extern void PFRCPIT1RtoR( x86IntRegType to, x86IntRegType from ); extern void PFRCPIT2RtoR( x86IntRegType to, x86IntRegType from ); extern void PFRSQRTRtoR( x86IntRegType to, x86IntRegType from ); extern void PFRSQIT1RtoR( x86IntRegType to, x86IntRegType from ); extern void PF2IDMtoR( x86IntRegType to, uptr from ); extern void PI2FDMtoR( x86IntRegType to, uptr from ); extern void PI2FDRtoR( x86IntRegType to, x86IntRegType from ); extern void PFMAXMtoR( x86IntRegType to, uptr from ); extern void PFMAXRtoR( x86IntRegType to, x86IntRegType from ); extern void PFMINMtoR( x86IntRegType to, uptr from ); extern void PFMINRtoR( x86IntRegType to, x86IntRegType from );