/* * ix86 definitions v0.6.2 * Authors: linuzappz * alexey silinov * goldfinger * shadow < shadow@pcsx2.net > */ #ifndef __IX86_H__ #define __IX86_H__ #ifdef __cplusplus extern "C" { #endif #include "PS2Etypes.h" // Basic types header #ifdef __x86_64__ #define XMMREGS 16 #define X86REGS 16 #else #define XMMREGS 8 #define X86REGS 8 #endif #define MMXREGS 8 #define SIB 4 #define DISP32 5 // general types #define EAX 0 #define EBX 3 #define ECX 1 #define EDX 2 #define ESI 6 #define EDI 7 #define EBP 5 #define ESP 4 #define RAX 0 #define RBX 3 #define RCX 1 #define RDX 2 #define RSI 6 #define RDI 7 #define RBP 5 #define RSP 4 #define R8 8 #define R9 9 #define R10 10 #define R11 11 #define R12 12 #define R13 13 #define R14 14 #define R15 15 typedef int x86IntRegType; #define MM0 0 #define MM1 1 #define MM2 2 #define MM3 3 #define MM4 4 #define MM5 5 #define MM6 6 #define MM7 7 typedef int x86MMXRegType; #define XMM0 0 #define XMM1 1 #define XMM2 2 #define XMM3 3 #define XMM4 4 #define XMM5 5 #define XMM6 6 #define XMM7 7 #define XMM8 8 #define XMM9 9 #define XMM10 10 #define XMM11 11 #define XMM12 12 #define XMM13 13 #define XMM14 14 #define XMM15 15 typedef int x86SSERegType; typedef enum { XMMT_INT = 0, // integer (sse2 only) XMMT_FPS = 1, // floating point //XMMT_FPD = 3, // double } XMMSSEType; extern XMMSSEType g_xmmtypes[XMMREGS]; void cpudetectInit( void );//this is all that needs to be called and will fill up the below structs //cpu capabilities structure typedef struct { u32 hasFloatingPointUnit; u32 hasVirtual8086ModeEnhancements; u32 hasDebuggingExtensions; u32 hasPageSizeExtensions; u32 hasTimeStampCounter; u32 hasModelSpecificRegisters; u32 hasPhysicalAddressExtension; u32 hasCOMPXCHG8BInstruction; u32 hasAdvancedProgrammableInterruptController; u32 hasSEPFastSystemCall; u32 hasMemoryTypeRangeRegisters; u32 hasPTEGlobalFlag; u32 hasMachineCheckArchitecture; u32 hasConditionalMoveAndCompareInstructions; u32 hasFGPageAttributeTable; u32 has36bitPageSizeExtension; u32 hasProcessorSerialNumber; u32 hasCFLUSHInstruction; u32 hasDebugStore; u32 hasACPIThermalMonitorAndClockControl; u32 hasMultimediaExtensions; u32 hasFastStreamingSIMDExtensionsSaveRestore; u32 hasStreamingSIMDExtensions; u32 hasStreamingSIMD2Extensions; u32 hasSelfSnoop; u32 hasHyperThreading; u32 hasThermalMonitor; u32 hasIntel64BitArchitecture; u32 hasStreamingSIMD3Extensions; //that is only for AMDs u32 hasMultimediaExtensionsExt; u32 hasAMD64BitArchitecture; u32 has3DNOWInstructionExtensionsExt; u32 has3DNOWInstructionExtensions; } CAPABILITIES; extern CAPABILITIES cpucaps; typedef struct { u32 x86Family; // Processor Family u32 x86Model; // Processor Model u32 x86PType; // Processor Type u32 x86StepID; // Stepping ID u32 x86Flags; // Feature Flags u32 x86EFlags; // Extended Feature Flags //all the above returns hex values s8 x86ID[16]; // Vendor ID //the vendor creator (in %s) s8 x86Type[20]; //cpu type in char format //the cpu type (in %s) s8 x86Fam[50]; // family in char format //the original cpu name string (in %s) u32 cpuspeed; // speed of cpu //this will give cpu speed (in %d) } CPUINFO; extern CPUINFO cpuinfo; extern s8 *x86Ptr; extern u8 *j8Ptr[32]; extern u32 *j32Ptr[32]; #ifdef __x86_64__ #define MEMADDR(addr, oplen) ((addr) - ((u64)x86Ptr + ((u64)oplen))) #else #define MEMADDR(addr, oplen) (addr) #endif void write8( int val ); void write16( int val ); void write32( u32 val ); void write64( u64 val ); void x86SetPtr( char *ptr ); void x86Shutdown( void ); void x86SetJ8( u8 *j8 ); void x86SetJ8A( u8 *j8 ); void x86SetJ16( u16 *j16 ); void x86SetJ16A( u16 *j16 ); void x86SetJ32( u32 *j32 ); void x86SetJ32A( u32 *j32 ); void x86Align( int bytes ); u64 GetCPUTick( void ); // General Helper functions void Rex( int w, int r, int x, int b ); void ModRM( int mod, int rm, int reg ); void SibSB( int ss, int rm, int index ); void SET8R( int cc, int to ); u8* J8Rel( int cc, int to ); u32* J32Rel( int cc, u32 to ); void CMOV32RtoR( int cc, int to, int from ); void CMOV32MtoR( int cc, int to, u32 from ); //****************** // IX86 intructions //****************** // // * scale values: // * 0 - *1 // * 1 - *2 // * 2 - *4 // * 3 - *8 // void STC( void ); void CLC( void ); //////////////////////////////////// // mov instructions // //////////////////////////////////// // mov r64 to r64 void MOV64RtoR( x86IntRegType to, x86IntRegType from ); // mov r64 to m64 void MOV64RtoM( u64 to, x86IntRegType from ); // mov m64 to r64 void MOV64MtoR( x86IntRegType to, u64 from ); // mov imm32 to m64 void MOV64ItoM( u32 to, u32 from ); // mov r32 to r32 void MOV32RtoR( x86IntRegType to, x86IntRegType from ); // mov r32 to m32 void MOV32RtoM( u32 to, x86IntRegType from ); // mov m32 to r32 void MOV32MtoR( x86IntRegType to, u32 from ); // mov [r32] to r32 void MOV32RmtoR( x86IntRegType to, x86IntRegType from ); void MOV32RmtoROffset( x86IntRegType to, x86IntRegType from, u32 offset ); // mov [r32][r32< subtract ST(0) from ST(1), store in ST(1) and POP stack void FSUBP( void ); // fmul ST(src) to fpu reg stack ST(0) void FMUL32Rto0( x86IntRegType src ); // fmul ST(0) to fpu reg stack ST(src) void FMUL320toR( x86IntRegType src ); // fdiv ST(src) to fpu reg stack ST(0) void FDIV32Rto0( x86IntRegType src ); // fdiv ST(0) to fpu reg stack ST(src) void FDIV320toR( x86IntRegType src ); // fdiv ST(0) to fpu reg stack ST(src), pop stack, store in ST(src) void FDIV320toRP( x86IntRegType src ); // fadd m32 to fpu reg stack void FADD32( u32 from ); // fsub m32 to fpu reg stack void FSUB32( u32 from ); // fmul m32 to fpu reg stack void FMUL32( u32 from ); // fdiv m32 to fpu reg stack void FDIV32( u32 from ); // fcomi st, st( i) void FCOMI( x86IntRegType src ); // fcomip st, st( i) void FCOMIP( x86IntRegType src ); // fucomi st, st( i) void FUCOMI( x86IntRegType src ); // fucomip st, st( i) void FUCOMIP( x86IntRegType src ); // fcom m32 to fpu reg stack void FCOM32( u32 from ); // fabs fpu reg stack void FABS( void ); // fsqrt fpu reg stack void FSQRT( void ); // ftan fpu reg stack void FPATAN( void ); // fsin fpu reg stack void FSIN( void ); // fchs fpu reg stack void FCHS( void ); // fcmovb fpu reg to fpu reg stack void FCMOVB32( x86IntRegType from ); // fcmove fpu reg to fpu reg stack void FCMOVE32( x86IntRegType from ); // fcmovbe fpu reg to fpu reg stack void FCMOVBE32( x86IntRegType from ); // fcmovu fpu reg to fpu reg stack void FCMOVU32( x86IntRegType from ); // fcmovnb fpu reg to fpu reg stack void FCMOVNB32( x86IntRegType from ); // fcmovne fpu reg to fpu reg stack void FCMOVNE32( x86IntRegType from ); // fcmovnbe fpu reg to fpu reg stack void FCMOVNBE32( x86IntRegType from ); // fcmovnu fpu reg to fpu reg stack void FCMOVNU32( x86IntRegType from ); void FCOMP32( u32 from ); void FNSTSWtoAX( void ); //****************** // MMX instructions //****************** // r64 = mm // movq m64 to r64 void MOVQMtoR( x86MMXRegType to, u32 from ); // movq r64 to m64 void MOVQRtoM( u32 to, x86MMXRegType from ); // pand r64 to r64 void PANDRtoR( x86MMXRegType to, x86MMXRegType from ); void PANDNRtoR( x86MMXRegType to, x86MMXRegType from ); // pand m64 to r64 ; void PANDMtoR( x86MMXRegType to, u32 from ); // pandn r64 to r64 void PANDNRtoR( x86MMXRegType to, x86MMXRegType from ); // pandn r64 to r64 void PANDNMtoR( x86MMXRegType to, u32 from ); // por r64 to r64 void PORRtoR( x86MMXRegType to, x86MMXRegType from ); // por m64 to r64 void PORMtoR( x86MMXRegType to, u32 from ); // pxor r64 to r64 void PXORRtoR( x86MMXRegType to, x86MMXRegType from ); // pxor m64 to r64 void PXORMtoR( x86MMXRegType to, u32 from ); // psllq r64 to r64 void PSLLQRtoR( x86MMXRegType to, x86MMXRegType from ); // psllq m64 to r64 void PSLLQMtoR( x86MMXRegType to, u32 from ); // psllq imm8 to r64 void PSLLQItoR( x86MMXRegType to, u8 from ); // psrlq r64 to r64 void PSRLQRtoR( x86MMXRegType to, x86MMXRegType from ); // psrlq m64 to r64 void PSRLQMtoR( x86MMXRegType to, u32 from ); // psrlq imm8 to r64 void PSRLQItoR( x86MMXRegType to, u8 from ); // paddusb r64 to r64 void PADDUSBRtoR( x86MMXRegType to, x86MMXRegType from ); // paddusb m64 to r64 void PADDUSBMtoR( x86MMXRegType to, u32 from ); // paddusw r64 to r64 void PADDUSWRtoR( x86MMXRegType to, x86MMXRegType from ); // paddusw m64 to r64 void PADDUSWMtoR( x86MMXRegType to, u32 from ); // paddb r64 to r64 void PADDBRtoR( x86MMXRegType to, x86MMXRegType from ); // paddb m64 to r64 void PADDBMtoR( x86MMXRegType to, u32 from ); // paddw r64 to r64 void PADDWRtoR( x86MMXRegType to, x86MMXRegType from ); // paddw m64 to r64 void PADDWMtoR( x86MMXRegType to, u32 from ); // paddd r64 to r64 void PADDDRtoR( x86MMXRegType to, x86MMXRegType from ); // paddd m64 to r64 void PADDDMtoR( x86MMXRegType to, u32 from ); void PADDSBRtoR( x86MMXRegType to, x86MMXRegType from ); void PADDSWRtoR( x86MMXRegType to, x86MMXRegType from ); // paddq m64 to r64 (sse2 only?) void PADDQMtoR( x86MMXRegType to, u32 from ); // paddq r64 to r64 (sse2 only?) void PADDQRtoR( x86MMXRegType to, x86MMXRegType from ); void PSUBSBRtoR( x86MMXRegType to, x86MMXRegType from ); void PSUBSWRtoR( x86MMXRegType to, x86MMXRegType from ); void PSUBBRtoR( x86MMXRegType to, x86MMXRegType from ); void PSUBWRtoR( x86MMXRegType to, x86MMXRegType from ); void PSUBDRtoR( x86MMXRegType to, x86MMXRegType from ); void PSUBDMtoR( x86MMXRegType to, u32 from ); // psubq m64 to r64 (sse2 only?) void PSUBQMtoR( x86MMXRegType to, u32 from ); // psubq r64 to r64 (sse2 only?) void PSUBQRtoR( x86MMXRegType to, x86MMXRegType from ); // pmuludq m64 to r64 (sse2 only?) void PMULUDQMtoR( x86MMXRegType to, u32 from ); // pmuludq r64 to r64 (sse2 only?) void PMULUDQRtoR( x86MMXRegType to, x86MMXRegType from ); void PCMPEQBRtoR( x86MMXRegType to, x86MMXRegType from ); void PCMPEQWRtoR( x86MMXRegType to, x86MMXRegType from ); void PCMPEQDRtoR( x86MMXRegType to, x86MMXRegType from ); void PCMPEQDMtoR( x86MMXRegType to, u32 from ); void PCMPGTBRtoR( x86MMXRegType to, x86MMXRegType from ); void PCMPGTWRtoR( x86MMXRegType to, x86MMXRegType from ); void PCMPGTDRtoR( x86MMXRegType to, x86MMXRegType from ); void PCMPGTDMtoR( x86MMXRegType to, u32 from ); void PSRLWItoR( x86MMXRegType to, u8 from ); void PSRLDItoR( x86MMXRegType to, u8 from ); void PSRLDRtoR( x86MMXRegType to, x86MMXRegType from ); void PSLLWItoR( x86MMXRegType to, u8 from ); void PSLLDItoR( x86MMXRegType to, u8 from ); void PSLLDRtoR( x86MMXRegType to, x86MMXRegType from ); void PSRAWItoR( x86MMXRegType to, u8 from ); void PSRADItoR( x86MMXRegType to, u8 from ); void PSRADRtoR( x86MMXRegType to, x86MMXRegType from ); void PUNPCKLDQRtoR( x86MMXRegType to, x86MMXRegType from ); void PUNPCKLDQMtoR( x86MMXRegType to, u32 from ); void PUNPCKHDQRtoR( x86MMXRegType to, x86MMXRegType from ); void PUNPCKHDQMtoR( x86MMXRegType to, u32 from ); void MOVQ64ItoR( x86MMXRegType reg, u64 i ); //Prototype.Todo add all consts to end of block.not after jr $+8 void MOVQRtoR( x86MMXRegType to, x86MMXRegType from ); void MOVQRmtoROffset( x86MMXRegType to, x86IntRegType from, u32 offset ); void MOVQRtoRmOffset( x86IntRegType to, x86MMXRegType from, u32 offset ); void MOVDMtoMMX( x86MMXRegType to, u32 from ); void MOVDMMXtoM( u32 to, x86MMXRegType from ); void MOVD32RtoMMX( x86MMXRegType to, x86IntRegType from ); void MOVD32RmtoMMX( x86MMXRegType to, x86IntRegType from ); void MOVD32RmOffsettoMMX( x86MMXRegType to, x86IntRegType from, u32 offset ); void MOVD32MMXtoR( x86IntRegType to, x86MMXRegType from ); void MOVD32MMXtoRm( x86IntRegType to, x86MMXRegType from ); void MOVD32MMXtoRmOffset( x86IntRegType to, x86MMXRegType from, u32 offset ); void PINSRWRtoMMX( x86MMXRegType to, x86SSERegType from, u8 imm8 ); void PSHUFWRtoR(x86MMXRegType to, x86MMXRegType from, u8 imm8); void PSHUFWMtoR(x86MMXRegType to, u32 from, u8 imm8); void MASKMOVQRtoR(x86MMXRegType to, x86MMXRegType from); // emms void EMMS( void ); //**********************************************************************************/ //PACKSSWB,PACKSSDW: Pack Saturate Signed Word 64bits //********************************************************************************** void PACKSSWBMMXtoMMX(x86MMXRegType to, x86MMXRegType from); void PACKSSDWMMXtoMMX(x86MMXRegType to, x86MMXRegType from); void PMOVMSKBMMXtoR(x86IntRegType to, x86MMXRegType from); //********************* // SSE instructions * //********************* void SSE_MOVAPS_M128_to_XMM( x86SSERegType to, u32 from ); void SSE_MOVAPS_XMM_to_M128( u32 to, x86SSERegType from ); void SSE_MOVAPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_MOVUPS_M128_to_XMM( x86SSERegType to, u32 from ); void SSE_MOVUPS_XMM_to_M128( u32 to, x86SSERegType from ); void SSE_MOVSS_M32_to_XMM( x86SSERegType to, u32 from ); void SSE_MOVSS_XMM_to_M32( u32 to, x86SSERegType from ); void SSE_MOVSS_XMM_to_Rm( x86IntRegType to, x86SSERegType from ); void SSE_MOVSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_MOVSS_RmOffset_to_XMM( x86SSERegType to, x86IntRegType from, u32 offset ); void SSE_MOVSS_XMM_to_RmOffset( x86IntRegType to, x86SSERegType from, u32 offset ); void SSE2_MOVSD_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_MOVQ_M64_to_XMM( x86SSERegType to, u32 from ); void SSE2_MOVQ_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_MOVQ_XMM_to_M64( u32 to, x86SSERegType from ); void SSE2_MOVDQ2Q_XMM_to_MM( x86MMXRegType to, x86SSERegType from); void SSE2_MOVQ2DQ_MM_to_XMM( x86SSERegType to, x86MMXRegType from); void SSE_MASKMOVDQU_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_MOVLPS_M64_to_XMM( x86SSERegType to, u32 from ); void SSE_MOVLPS_XMM_to_M64( u32 to, x86SSERegType from ); void SSE_MOVLPS_RmOffset_to_XMM( x86SSERegType to, x86IntRegType from, u32 offset ); void SSE_MOVLPS_XMM_to_RmOffset( x86IntRegType to, x86SSERegType from, u32 offset ); void SSE_MOVHPS_M64_to_XMM( x86SSERegType to, u32 from ); void SSE_MOVHPS_XMM_to_M64( u32 to, x86SSERegType from ); void SSE_MOVHPS_RmOffset_to_XMM( x86SSERegType to, x86IntRegType from, u32 offset ); void SSE_MOVHPS_XMM_to_RmOffset( x86IntRegType to, x86SSERegType from, u32 offset ); void SSE_MOVLHPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_MOVHLPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_MOVLPSRmtoR( x86MMXRegType to, x86IntRegType from ); void SSE_MOVLPSRmtoROffset( x86MMXRegType to, x86IntRegType from, u32 offset ); void SSE_MOVLPSRtoRm( x86MMXRegType to, x86IntRegType from ); void SSE_MOVLPSRtoRmOffset( x86MMXRegType to, x86IntRegType from, u32 offset ); void SSE_MOVAPSRmStoR( x86SSERegType to, x86IntRegType from, x86IntRegType from2, int scale ); void SSE_MOVAPSRtoRmS( x86SSERegType to, x86IntRegType from, x86IntRegType from2, int scale ); void SSE_MOVAPSRtoRmOffset( x86IntRegType to, x86SSERegType from, u32 offset ); void SSE_MOVAPSRmtoROffset( x86SSERegType to, x86IntRegType from, u32 offset ); void SSE_MOVUPSRmStoR( x86SSERegType to, x86IntRegType from, x86IntRegType from2, int scale ); void SSE_MOVUPSRtoRmS( x86SSERegType to, x86IntRegType from, x86IntRegType from2, int scale ); void SSE_MOVUPSRtoRm( x86IntRegType to, x86IntRegType from ); void SSE_MOVUPSRmtoR( x86IntRegType to, x86IntRegType from ); void SSE_MOVUPSRmtoROffset( x86SSERegType to, x86IntRegType from, u32 offset ); void SSE_MOVUPSRtoRmOffset( x86SSERegType to, x86IntRegType from, u32 offset ); void SSE2_MOVDQARtoRmOffset( x86IntRegType to, x86SSERegType from, u32 offset ); void SSE2_MOVDQARmtoROffset( x86SSERegType to, x86IntRegType from, u32 offset ); void SSE_RCPPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_RCPPS_M128_to_XMM( x86SSERegType to, u32 from ); void SSE_RCPSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_RCPSS_M32_to_XMM( x86SSERegType to, u32 from ); void SSE_ORPS_M128_to_XMM( x86SSERegType to, u32 from ); void SSE_ORPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_XORPS_M128_to_XMM( x86SSERegType to, u32 from ); void SSE_XORPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_ANDPS_M128_to_XMM( x86SSERegType to, u32 from ); void SSE_ANDPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_ANDNPS_M128_to_XMM( x86SSERegType to, u32 from ); void SSE_ANDNPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_ADDPS_M128_to_XMM( x86SSERegType to, u32 from ); void SSE_ADDPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_ADDSS_M32_to_XMM( x86SSERegType to, u32 from ); void SSE_ADDSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_SUBPS_M128_to_XMM( x86SSERegType to, u32 from ); void SSE_SUBPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_SUBSS_M32_to_XMM( x86SSERegType to, u32 from ); void SSE_SUBSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_MULPS_M128_to_XMM( x86SSERegType to, u32 from ); void SSE_MULPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_MULSS_M32_to_XMM( x86SSERegType to, u32 from ); void SSE_MULSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPEQSS_M32_to_XMM( x86SSERegType to, u32 from ); void SSE_CMPEQSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPLTSS_M32_to_XMM( x86SSERegType to, u32 from ); void SSE_CMPLTSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPLESS_M32_to_XMM( x86SSERegType to, u32 from ); void SSE_CMPLESS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPUNORDSS_M32_to_XMM( x86SSERegType to, u32 from ); void SSE_CMPUNORDSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPNESS_M32_to_XMM( x86SSERegType to, u32 from ); void SSE_CMPNESS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPNLTSS_M32_to_XMM( x86SSERegType to, u32 from ); void SSE_CMPNLTSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPNLESS_M32_to_XMM( x86SSERegType to, u32 from ); void SSE_CMPNLESS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPORDSS_M32_to_XMM( x86SSERegType to, u32 from ); void SSE_CMPORDSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_UCOMISS_M32_to_XMM( x86SSERegType to, u32 from ); void SSE_UCOMISS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_PMAXSW_MM_to_MM( x86MMXRegType to, x86MMXRegType from ); void SSE_PMINSW_MM_to_MM( x86MMXRegType to, x86MMXRegType from ); void SSE_CVTPI2PS_M64_to_XMM( x86SSERegType to, u32 from ); void SSE_CVTPI2PS_MM_to_XMM( x86SSERegType to, x86MMXRegType from ); void SSE_CVTPS2PI_M64_to_MM( x86MMXRegType to, u32 from ); void SSE_CVTPS2PI_XMM_to_MM( x86MMXRegType to, x86SSERegType from ); void SSE_CVTTSS2SI_M32_to_R32(x86IntRegType to, u32 from); void SSE_CVTTSS2SI_XMM_to_R32(x86IntRegType to, x86SSERegType from); void SSE_CVTSI2SS_M32_to_XMM(x86SSERegType to, u32 from); void SSE_CVTSI2SS_R_to_XMM(x86SSERegType to, x86IntRegType from); void SSE2_CVTDQ2PS_M128_to_XMM( x86SSERegType to, u32 from ); void SSE2_CVTDQ2PS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_CVTPS2DQ_M128_to_XMM( x86SSERegType to, u32 from ); void SSE2_CVTPS2DQ_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_CVTTPS2DQ_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_MAXPS_M128_to_XMM( x86SSERegType to, u32 from ); void SSE_MAXPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_MAXSS_M32_to_XMM( x86SSERegType to, u32 from ); void SSE_MAXSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_MINPS_M128_to_XMM( x86SSERegType to, u32 from ); void SSE_MINPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_MINSS_M32_to_XMM( x86SSERegType to, u32 from ); void SSE_MINSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_RSQRTPS_M128_to_XMM( x86SSERegType to, u32 from ); void SSE_RSQRTPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_RSQRTSS_M32_to_XMM( x86SSERegType to, u32 from ); void SSE_RSQRTSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_SQRTPS_M128_to_XMM( x86SSERegType to, u32 from ); void SSE_SQRTPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_SQRTSS_M32_to_XMM( x86SSERegType to, u32 from ); void SSE_SQRTSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_UNPCKLPS_M128_to_XMM( x86SSERegType to, u32 from ); void SSE_UNPCKLPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_UNPCKHPS_M128_to_XMM( x86SSERegType to, u32 from ); void SSE_UNPCKHPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_SHUFPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from, u8 imm8 ); void SSE_SHUFPS_M128_to_XMM( x86SSERegType to, u32 from, u8 imm8 ); void SSE_SHUFPS_RmOffset_to_XMM( x86SSERegType to, x86IntRegType from, u32 offset, u8 imm8 ); void SSE_CMPEQPS_M128_to_XMM( x86SSERegType to, u32 from ); void SSE_CMPEQPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPLTPS_M128_to_XMM( x86SSERegType to, u32 from ); void SSE_CMPLTPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPLEPS_M128_to_XMM( x86SSERegType to, u32 from ); void SSE_CMPLEPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPUNORDPS_M128_to_XMM( x86SSERegType to, u32 from ); void SSE_CMPUNORDPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPNEPS_M128_to_XMM( x86SSERegType to, u32 from ); void SSE_CMPNEPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPNLTPS_M128_to_XMM( x86SSERegType to, u32 from ); void SSE_CMPNLTPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPNLEPS_M128_to_XMM( x86SSERegType to, u32 from ); void SSE_CMPNLEPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPORDPS_M128_to_XMM( x86SSERegType to, u32 from ); void SSE_CMPORDPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_DIVPS_M128_to_XMM( x86SSERegType to, u32 from ); void SSE_DIVPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_DIVSS_M32_to_XMM( x86SSERegType to, u32 from ); void SSE_DIVSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); // VectorPath void SSE2_PSHUFD_XMM_to_XMM( x86SSERegType to, x86SSERegType from, u8 imm8 ); void SSE2_PSHUFD_M128_to_XMM( x86SSERegType to, u32 from, u8 imm8 ); void SSE2_PSHUFLW_XMM_to_XMM( x86SSERegType to, x86SSERegType from, u8 imm8 ); void SSE2_PSHUFLW_M128_to_XMM( x86SSERegType to, u32 from, u8 imm8 ); void SSE2_PSHUFHW_XMM_to_XMM( x86SSERegType to, x86SSERegType from, u8 imm8 ); void SSE2_PSHUFHW_M128_to_XMM( x86SSERegType to, u32 from, u8 imm8 ); void SSE_STMXCSR( u32 from ); void SSE_LDMXCSR( u32 from ); //********************* // SSE 2 Instructions* //********************* void SSE2_MOVDQA_M128_to_XMM(x86SSERegType to, u32 from); void SSE2_MOVDQA_XMM_to_M128( u32 to, x86SSERegType from); void SSE2_MOVDQA_XMM_to_XMM( x86SSERegType to, x86SSERegType from); void SSE2_MOVDQU_M128_to_XMM(x86SSERegType to, u32 from); void SSE2_MOVDQU_XMM_to_M128( u32 to, x86SSERegType from); void SSE2_MOVDQU_XMM_to_XMM( x86SSERegType to, x86SSERegType from); void SSE2_PSRLW_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PSRLW_M128_to_XMM(x86SSERegType to, u32 from); void SSE2_PSRLW_I8_to_XMM(x86SSERegType to, u8 imm8); void SSE2_PSRLD_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PSRLD_M128_to_XMM(x86SSERegType to, u32 from); void SSE2_PSRLD_I8_to_XMM(x86SSERegType to, u8 imm8); void SSE2_PSRLQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PSRLQ_M128_to_XMM(x86SSERegType to, u32 from); void SSE2_PSRLQ_I8_to_XMM(x86SSERegType to, u8 imm8); void SSE2_PSRLDQ_I8_to_XMM(x86SSERegType to, u8 imm8); void SSE2_PSRAW_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PSRAW_M128_to_XMM(x86SSERegType to, u32 from); void SSE2_PSRAW_I8_to_XMM(x86SSERegType to, u8 imm8); void SSE2_PSRAD_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PSRAD_M128_to_XMM(x86SSERegType to, u32 from); void SSE2_PSRAD_I8_to_XMM(x86SSERegType to, u8 imm8); void SSE2_PSLLW_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PSLLW_M128_to_XMM(x86SSERegType to, u32 from); void SSE2_PSLLW_I8_to_XMM(x86SSERegType to, u8 imm8); void SSE2_PSLLD_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PSLLD_M128_to_XMM(x86SSERegType to, u32 from); void SSE2_PSLLD_I8_to_XMM(x86SSERegType to, u8 imm8); void SSE2_PSLLQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PSLLQ_M128_to_XMM(x86SSERegType to, u32 from); void SSE2_PSLLQ_I8_to_XMM(x86SSERegType to, u8 imm8); void SSE2_PSLLDQ_I8_to_XMM(x86SSERegType to, u8 imm8); void SSE2_PMAXSW_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_PMAXSW_M128_to_XMM( x86SSERegType to, u32 from ); void SSE2_PMAXUB_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_PMAXUB_M128_to_XMM( x86SSERegType to, u32 from ); void SSE2_PMINSW_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_PMINSW_M128_to_XMM( x86SSERegType to, u32 from ); void SSE2_PMINUB_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_PMINUB_M128_to_XMM( x86SSERegType to, u32 from ); void SSE2_PADDSB_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_PADDSB_M128_to_XMM( x86SSERegType to, u32 from ); void SSE2_PADDSW_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_PADDSW_M128_to_XMM( x86SSERegType to, u32 from ); void SSE2_PSUBSB_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_PSUBSB_M128_to_XMM( x86SSERegType to, u32 from ); void SSE2_PSUBSW_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_PSUBSW_M128_to_XMM( x86SSERegType to, u32 from ); void SSE2_PSUBUSB_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_PSUBUSB_M128_to_XMM( x86SSERegType to, u32 from ); void SSE2_PSUBUSW_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_PSUBUSW_M128_to_XMM( x86SSERegType to, u32 from ); void SSE2_PAND_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_PAND_M128_to_XMM( x86SSERegType to, u32 from ); void SSE2_PANDN_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_PANDN_M128_to_XMM( x86SSERegType to, u32 from ); void SSE2_PXOR_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_PXOR_M128_to_XMM( x86SSERegType to, u32 from ); void SSE2_PADDW_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); void SSE2_PADDW_M128_to_XMM(x86SSERegType to, u32 from ); void SSE2_PADDUSB_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_PADDUSB_M128_to_XMM( x86SSERegType to, u32 from ); void SSE2_PADDUSW_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_PADDUSW_M128_to_XMM( x86SSERegType to, u32 from ); void SSE2_PADDB_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); void SSE2_PADDB_M128_to_XMM(x86SSERegType to, u32 from ); void SSE2_PADDD_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); void SSE2_PADDD_M128_to_XMM(x86SSERegType to, u32 from ); void SSE2_PADDQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); void SSE2_PADDQ_M128_to_XMM(x86SSERegType to, u32 from ); //**********************************************************************************/ //PACKSSWB,PACKSSDW: Pack Saturate Signed Word //********************************************************************************** void SSE2_PACKSSWB_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PACKSSWB_M128_to_XMM(x86SSERegType to, u32 from); void SSE2_PACKSSDW_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PACKSSDW_M128_to_XMM(x86SSERegType to, u32 from); void SSE2_PACKUSWB_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PACKUSWB_M128_to_XMM(x86SSERegType to, u32 from); //**********************************************************************************/ //PUNPCKHWD: Unpack 16bit high //********************************************************************************** void SSE2_PUNPCKLBW_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PUNPCKLBW_M128_to_XMM(x86SSERegType to, u32 from); void SSE2_PUNPCKHBW_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PUNPCKHBW_M128_to_XMM(x86SSERegType to, u32 from); void SSE2_PUNPCKLWD_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PUNPCKLWD_M128_to_XMM(x86SSERegType to, u32 from); void SSE2_PUNPCKHWD_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PUNPCKHWD_M128_to_XMM(x86SSERegType to, u32 from); void SSE2_PUNPCKLDQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PUNPCKLDQ_M128_to_XMM(x86SSERegType to, u32 from); void SSE2_PUNPCKHDQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PUNPCKHDQ_M128_to_XMM(x86SSERegType to, u32 from); void SSE2_PUNPCKLQDQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PUNPCKLQDQ_M128_to_XMM(x86SSERegType to, u32 from); void SSE2_PUNPCKHQDQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PUNPCKHQDQ_M128_to_XMM(x86SSERegType to, u32 from); // mult by half words void SSE2_PMULLW_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PMULLW_M128_to_XMM(x86SSERegType to, u32 from); void SSE2_PMULHW_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PMULHW_M128_to_XMM(x86SSERegType to, u32 from); void SSE2_PMULUDQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PMULUDQ_M128_to_XMM(x86SSERegType to, u32 from); //**********************************************************************************/ //PMOVMSKB: Create 16bit mask from signs of 8bit integers //********************************************************************************** void SSE2_PMOVMSKB_XMM_to_R32(x86IntRegType to, x86SSERegType from); void SSE_MOVMSKPS_XMM_to_R32(x86IntRegType to, x86SSERegType from); void SSE2_MOVMSKPD_XMM_to_R32(x86IntRegType to, x86SSERegType from); //**********************************************************************************/ //PEXTRW,PINSRW: Packed Extract/Insert Word * //********************************************************************************** void SSE_PEXTRW_XMM_to_R32(x86IntRegType to, x86SSERegType from, u8 imm8 ); void SSE_PINSRW_R32_to_XMM(x86SSERegType from, x86IntRegType to, u8 imm8 ); //**********************************************************************************/ //PSUBx: Subtract Packed Integers * //********************************************************************************** void SSE2_PSUBB_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); void SSE2_PSUBB_M128_to_XMM(x86SSERegType to, u32 from ); void SSE2_PSUBW_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); void SSE2_PSUBW_M128_to_XMM(x86SSERegType to, u32 from ); void SSE2_PSUBD_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); void SSE2_PSUBD_M128_to_XMM(x86SSERegType to, u32 from ); void SSE2_PSUBQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); void SSE2_PSUBQ_M128_to_XMM(x86SSERegType to, u32 from ); /////////////////////////////////////////////////////////////////////////////////////// //**********************************************************************************/ //PCMPxx: Compare Packed Integers * //********************************************************************************** void SSE2_PCMPGTB_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); void SSE2_PCMPGTB_M128_to_XMM(x86SSERegType to, u32 from ); void SSE2_PCMPGTW_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); void SSE2_PCMPGTW_M128_to_XMM(x86SSERegType to, u32 from ); void SSE2_PCMPGTD_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); void SSE2_PCMPGTD_M128_to_XMM(x86SSERegType to, u32 from ); void SSE2_PCMPEQB_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); void SSE2_PCMPEQB_M128_to_XMM(x86SSERegType to, u32 from ); void SSE2_PCMPEQW_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); void SSE2_PCMPEQW_M128_to_XMM(x86SSERegType to, u32 from ); void SSE2_PCMPEQD_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); void SSE2_PCMPEQD_M128_to_XMM(x86SSERegType to, u32 from ); //**********************************************************************************/ //MOVD: Move Dword(32bit) to /from XMM reg * //********************************************************************************** void SSE2_MOVD_M32_to_XMM( x86SSERegType to, u32 from ); void SSE2_MOVD_R_to_XMM( x86SSERegType to, x86IntRegType from ); void SSE2_MOVD_Rm_to_XMM( x86SSERegType to, x86IntRegType from ); void SSE2_MOVD_RmOffset_to_XMM( x86SSERegType to, x86IntRegType from, u32 offset ); void SSE2_MOVD_XMM_to_M32( u32 to, x86SSERegType from ); void SSE2_MOVD_XMM_to_R( x86IntRegType to, x86SSERegType from ); void SSE2_MOVD_XMM_to_Rm( x86IntRegType to, x86SSERegType from ); void SSE2_MOVD_XMM_to_RmOffset( x86IntRegType to, x86SSERegType from, u32 offset ); //**********************************************************************************/ //POR : SSE Bitwise OR * //********************************************************************************** void SSE2_POR_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_POR_M128_to_XMM( x86SSERegType to, u32 from ); void SSE3_HADDPS_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE3_HADDPS_M128_to_XMM(x86SSERegType to, u32 from); void SSE3_MOVSLDUP_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE3_MOVSLDUP_M128_to_XMM(x86SSERegType to, u32 from); void SSE3_MOVSHDUP_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE3_MOVSHDUP_M128_to_XMM(x86SSERegType to, u32 from); //********************* // SSE-X - uses both SSE,SSE2 code and tries to keep consistensies between the data // Uses g_xmmtypes to infer the correct type. //********************* void SSEX_MOVDQA_M128_to_XMM( x86SSERegType to, u32 from ); void SSEX_MOVDQA_XMM_to_M128( u32 to, x86SSERegType from ); void SSEX_MOVDQA_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSEX_MOVDQARmtoROffset( x86SSERegType to, x86IntRegType from, u32 offset ); void SSEX_MOVDQARtoRmOffset( x86IntRegType to, x86SSERegType from, u32 offset ); void SSEX_MOVDQU_M128_to_XMM( x86SSERegType to, u32 from ); void SSEX_MOVDQU_XMM_to_M128( u32 to, x86SSERegType from ); void SSEX_MOVDQU_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSEX_MOVD_M32_to_XMM( x86SSERegType to, u32 from ); void SSEX_MOVD_XMM_to_M32( u32 to, x86SSERegType from ); void SSEX_MOVD_XMM_to_Rm( x86IntRegType to, x86SSERegType from ); void SSEX_MOVD_RmOffset_to_XMM( x86SSERegType to, x86IntRegType from, u32 offset ); void SSEX_MOVD_XMM_to_RmOffset( x86IntRegType to, x86SSERegType from, u32 offset ); void SSEX_POR_M128_to_XMM( x86SSERegType to, u32 from ); void SSEX_POR_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSEX_PXOR_M128_to_XMM( x86SSERegType to, u32 from ); void SSEX_PXOR_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSEX_PAND_M128_to_XMM( x86SSERegType to, u32 from ); void SSEX_PAND_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSEX_PANDN_M128_to_XMM( x86SSERegType to, u32 from ); void SSEX_PANDN_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSEX_PUNPCKLDQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSEX_PUNPCKLDQ_M128_to_XMM(x86SSERegType to, u32 from); void SSEX_PUNPCKHDQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSEX_PUNPCKHDQ_M128_to_XMM(x86SSERegType to, u32 from); void SSEX_MOVHLPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); //********************* // 3DNOW instructions * //********************* void FEMMS( void ); void PFCMPEQMtoR( x86IntRegType to, u32 from ); void PFCMPGTMtoR( x86IntRegType to, u32 from ); void PFCMPGEMtoR( x86IntRegType to, u32 from ); void PFADDMtoR( x86IntRegType to, u32 from ); void PFADDRtoR( x86IntRegType to, x86IntRegType from ); void PFSUBMtoR( x86IntRegType to, u32 from ); void PFSUBRtoR( x86IntRegType to, x86IntRegType from ); void PFMULMtoR( x86IntRegType to, u32 from ); void PFMULRtoR( x86IntRegType to, x86IntRegType from ); void PFRCPMtoR( x86IntRegType to, u32 from ); void PFRCPRtoR( x86IntRegType to, x86IntRegType from ); void PFRCPIT1RtoR( x86IntRegType to, x86IntRegType from ); void PFRCPIT2RtoR( x86IntRegType to, x86IntRegType from ); void PFRSQRTRtoR( x86IntRegType to, x86IntRegType from ); void PFRSQIT1RtoR( x86IntRegType to, x86IntRegType from ); void PF2IDMtoR( x86IntRegType to, u32 from ); void PF2IDRtoR( x86IntRegType to, x86IntRegType from ); void PI2FDMtoR( x86IntRegType to, u32 from ); void PI2FDRtoR( x86IntRegType to, x86IntRegType from ); void PFMAXMtoR( x86IntRegType to, u32 from ); void PFMAXRtoR( x86IntRegType to, x86IntRegType from ); void PFMINMtoR( x86IntRegType to, u32 from ); void PFMINRtoR( x86IntRegType to, x86IntRegType from ); void SSE2EMU_MOVSD_XMM_to_XMM( x86SSERegType to, x86SSERegType from); void SSE2EMU_MOVQ_M64_to_XMM( x86SSERegType to, u32 from); void SSE2EMU_MOVQ_XMM_to_XMM( x86SSERegType to, x86SSERegType from); void SSE2EMU_MOVD_RmOffset_to_XMM( x86SSERegType to, x86IntRegType from, u32 offset ); void SSE2EMU_MOVD_XMM_to_RmOffset(x86IntRegType to, x86SSERegType from, u32 offset ); void SSE2EMU_MOVDQ2Q_XMM_to_MM( x86MMXRegType to, x86SSERegType from); void SSE2EMU_MOVQ2DQ_MM_to_XMM( x86SSERegType to, x86MMXRegType from); /* SSE2 emulated functions for SSE CPU's by kekko*/ void SSE2EMU_PSHUFD_XMM_to_XMM( x86SSERegType to, x86SSERegType from, u8 imm8 ); void SSE2EMU_MOVD_XMM_to_R( x86IntRegType to, x86SSERegType from ); void SSE2EMU_CVTPS2DQ_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2EMU_CVTDQ2PS_M128_to_XMM( x86SSERegType to, u32 from ); void SSE2EMU_MOVD_XMM_to_M32( u32 to, x86SSERegType from ); void SSE2EMU_MOVD_R_to_XMM( x86SSERegType to, x86IntRegType from ); //////////////////////////////////////////////////// #ifdef _DEBUG #define WRITECHECK() CheckX86Ptr() #else #define WRITECHECK() #endif #define write8(val ) { \ *(u8*)x86Ptr = (u8)val; \ x86Ptr++; \ } \ #define write16(val ) \ { \ *(u16*)x86Ptr = (u16)val; \ x86Ptr += 2; \ } \ #define write32( val ) \ { \ *(u32*)x86Ptr = val; \ x86Ptr += 4; \ } \ #ifdef __cplusplus } #endif #endif // __IX86_H__