/* * 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 "../psxcommon.h" // Basic types header #include #include #if defined(__MINGW32__) #define PCSX2_ALIGNED16(x) __declspec(align(16)) x #else #define PCSX2_ALIGNED16(x) x __attribute((aligned(16))) #endif #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 typedef int x86IntRegType; #define EAX 0 #define EBX 3 #define ECX 1 #define EDX 2 #define ESI 6 #define EDI 7 #define EBP 5 #define ESP 4 #ifdef __x86_64__ #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 #define X86_TEMP RAX // don't allocate anything #ifdef _MSC_VER extern x86IntRegType g_x86savedregs[8]; extern x86IntRegType g_x86tempregs[6]; #else extern x86IntRegType g_x86savedregs[6]; extern x86IntRegType g_x86tempregs[8]; #endif extern x86IntRegType g_x86allregs[14]; // all registers that can be used by the recs extern x86IntRegType g_x868bitregs[11]; extern x86IntRegType g_x86non8bitregs[3]; #ifdef _MSC_VER #define X86ARG1 RCX #define X86ARG2 RDX #define X86ARG3 R8 #define X86ARG4 R9 #else #define X86ARG1 RDI #define X86ARG2 RSI #define X86ARG3 RDX #define X86ARG4 RCX #endif #else #define X86ARG1 EAX #define X86ARG2 ECX #define X86ARG3 EDX #define X86ARG4 EBX #endif // __x86_64__ #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 X86_64ASSERT() assert(0) #define MEMADDR_(addr, oplen) (sptr)((uptr)(addr) - ((uptr)x86Ptr + ((u64)(oplen)))) #define SPTR32(addr) ((addr) < 0x80000000L && (addr) >= -0x80000000L) #define UPTR32(addr) ((addr) < 0x100000000L) #define MEMADDR(addr, oplen) ({ sptr _a = MEMADDR_(addr, oplen); assert(SPTR32(_a)); _a; }) #else #define X86_64ASSERT() #define SPTR32(a) 1 #define UPTR32(a) 1 #define MEMADDR(addr, oplen) (addr) #endif #ifdef __x86_64__ #define Rex( w, r, x, b ) write8( 0x40 | ((w) << 3) | ((r) << 2) | ((x) << 1) | (b) ) #else #define Rex(w,r,x,b) assert(0) #endif #define RexRXB(w, reg, index, base) if(w || (reg) >= 8 || (index) >= 8 || (base) >= 8 ) \ Rex(w, (reg)>=8, (index)>=8, (base)>=8) #define RexR(w, reg) RexRXB(w, reg, 0, 0) #define RexB(w, base) RexRXB(w, 0, 0, base) #define RexRB(w, reg, base) RexRXB(w, reg, 0, base) 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 #define ModRM(mod, rm, reg) write8( ( mod << 6 ) | ( (rm & 7) << 3 ) | ( reg & 7 ) ) #define SibSB(ss, rm, index) write8( ( ss << 6 ) | ( rm << 3 ) | ( 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, uptr from ); void MEMADDR_OP(bool w, unsigned opl, u64 op, bool isreg, int reg, uptr p, sptr off); #define VAROP1(op) 1, op #define VAROP2(op1, op2) 2, (op1) | ((op2) << 8) //****************** // 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( uptr to, x86IntRegType from ); // mov m64 to r64 void MOV64MtoR( x86IntRegType to, uptr from ); // mov sign ext imm32 to m64 void MOV64I32toM( uptr to, u32 from ); // mov sign ext imm32 to r64 void MOV64I32toR( x86IntRegType to, s32 from); // mov imm64 to r64 void MOV64ItoR( x86IntRegType to, u64 from); // mov imm64 to [r64+off] void MOV64ItoRmOffset( x86IntRegType to, u32 from, int offset); // mov [r64+offset] to r64 void MOV64RmOffsettoR( x86IntRegType to, x86IntRegType from, int offset ); // mov [r64][r64*scale] to r64 void MOV64RmStoR( x86IntRegType to, x86IntRegType from, x86IntRegType from2, int scale); // mov r64 to [r64+offset] void MOV64RtoRmOffset( x86IntRegType to, x86IntRegType from, int offset ); // mov r64 to [r64][r64*scale] void MOV64RtoRmS( x86IntRegType to, x86IntRegType from, x86IntRegType from2, int scale); // mov r32 to r32 void MOV32RtoR( x86IntRegType to, x86IntRegType from ); // mov r32 to m32 void MOV32RtoM( uptr to, x86IntRegType from ); // mov m32 to r32 void MOV32MtoR( x86IntRegType to, uptr from ); // mov [r32] to r32 void MOV32RmtoR( x86IntRegType to, x86IntRegType from ); void MOV32RmtoROffset( x86IntRegType to, x86IntRegType from, int 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( uptr from ); // fsub m32 to fpu reg stack void FSUB32( uptr from ); // fmul m32 to fpu reg stack void FMUL32( uptr from ); // fdiv m32 to fpu reg stack void FDIV32( uptr 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( uptr 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( uptr from ); void FNSTSWtoAX( void ); // probably a little extreme here, but x86-64 should NOT use MMX #ifdef __x86_64__ #define MMXONLY(code) #else #define MMXONLY(code) code //****************** // MMX instructions //****************** // r64 = mm // movq m64 to r64 void MOVQMtoR( x86MMXRegType to, uptr from ); // movq r64 to m64 void MOVQRtoM( uptr 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, uptr from ); // pandn r64 to r64 void PANDNRtoR( x86MMXRegType to, x86MMXRegType from ); // pandn r64 to r64 void PANDNMtoR( x86MMXRegType to, uptr from ); // por r64 to r64 void PORRtoR( x86MMXRegType to, x86MMXRegType from ); // por m64 to r64 void PORMtoR( x86MMXRegType to, uptr from ); // pxor r64 to r64 void PXORRtoR( x86MMXRegType to, x86MMXRegType from ); // pxor m64 to r64 void PXORMtoR( x86MMXRegType to, uptr from ); // psllq r64 to r64 void PSLLQRtoR( x86MMXRegType to, x86MMXRegType from ); // psllq m64 to r64 void PSLLQMtoR( x86MMXRegType to, uptr 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, uptr 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, uptr from ); // paddusw r64 to r64 void PADDUSWRtoR( x86MMXRegType to, x86MMXRegType from ); // paddusw m64 to r64 void PADDUSWMtoR( x86MMXRegType to, uptr from ); // paddb r64 to r64 void PADDBRtoR( x86MMXRegType to, x86MMXRegType from ); // paddb m64 to r64 void PADDBMtoR( x86MMXRegType to, uptr from ); // paddw r64 to r64 void PADDWRtoR( x86MMXRegType to, x86MMXRegType from ); // paddw m64 to r64 void PADDWMtoR( x86MMXRegType to, uptr from ); // paddd r64 to r64 void PADDDRtoR( x86MMXRegType to, x86MMXRegType from ); // paddd m64 to r64 void PADDDMtoR( x86MMXRegType to, uptr from ); void PADDSBRtoR( x86MMXRegType to, x86MMXRegType from ); void PADDSWRtoR( x86MMXRegType to, x86MMXRegType from ); // paddq m64 to r64 (sse2 only?) void PADDQMtoR( x86MMXRegType to, uptr 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, uptr from ); // psubq m64 to r64 (sse2 only?) void PSUBQMtoR( x86MMXRegType to, uptr from ); // psubq r64 to r64 (sse2 only?) void PSUBQRtoR( x86MMXRegType to, x86MMXRegType from ); // pmuludq m64 to r64 (sse2 only?) void PMULUDQMtoR( x86MMXRegType to, uptr 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, uptr from ); void PCMPGTBRtoR( x86MMXRegType to, x86MMXRegType from ); void PCMPGTWRtoR( x86MMXRegType to, x86MMXRegType from ); void PCMPGTDRtoR( x86MMXRegType to, x86MMXRegType from ); void PCMPGTDMtoR( x86MMXRegType to, uptr 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, uptr from ); void PUNPCKHDQRtoR( x86MMXRegType to, x86MMXRegType from ); void PUNPCKHDQMtoR( x86MMXRegType to, uptr 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, uptr from ); void MOVDMMXtoM( uptr 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, uptr 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); void SSE2_MOVDQ2Q_XMM_to_MM( x86MMXRegType to, x86SSERegType from); void SSE2_MOVQ2DQ_MM_to_XMM( x86SSERegType to, x86MMXRegType from); #endif // !__x86_64__ //********************* // SSE instructions * //********************* void SSE_MOVAPS_M128_to_XMM( x86SSERegType to, uptr from ); void SSE_MOVAPS_XMM_to_M128( uptr to, x86SSERegType from ); void SSE_MOVAPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_MOVUPS_M128_to_XMM( x86SSERegType to, uptr from ); void SSE_MOVUPS_XMM_to_M128( uptr to, x86SSERegType from ); void SSE_MOVSS_M32_to_XMM( x86SSERegType to, uptr 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, int offset ); void SSE_MOVSS_XMM_to_RmOffset( x86IntRegType to, x86SSERegType from, int offset ); void SSE2_MOVSD_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_MOVQ_M64_to_XMM( x86SSERegType to, uptr from ); void SSE2_MOVQ_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_MOVQ_XMM_to_M64( u32 to, x86SSERegType from ); void SSE_MASKMOVDQU_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_MOVLPS_M64_to_XMM( x86SSERegType to, uptr from ); void SSE_MOVLPS_XMM_to_M64( u32 to, x86SSERegType from ); void SSE_MOVLPS_RmOffset_to_XMM( x86SSERegType to, x86IntRegType from, int offset ); void SSE_MOVLPS_XMM_to_RmOffset( x86IntRegType to, x86SSERegType from, int offset ); void SSE_MOVHPS_M64_to_XMM( x86SSERegType to, uptr from ); void SSE_MOVHPS_XMM_to_M64( u32 to, x86SSERegType from ); void SSE_MOVHPS_RmOffset_to_XMM( x86SSERegType to, x86IntRegType from, int offset ); void SSE_MOVHPS_XMM_to_RmOffset( x86IntRegType to, x86SSERegType from, int offset ); void SSE_MOVLHPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_MOVHLPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_MOVLPSRmtoR( x86SSERegType to, x86IntRegType from ); void SSE_MOVLPSRmtoROffset( x86SSERegType to, x86IntRegType from, int offset ); void SSE_MOVLPSRtoRm( x86SSERegType to, x86IntRegType from ); void SSE_MOVLPSRtoRmOffset( x86SSERegType to, x86IntRegType from, int 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, int offset ); void SSE_MOVAPSRmtoROffset( x86SSERegType to, x86IntRegType from, int 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, int offset ); void SSE_MOVUPSRtoRmOffset( x86SSERegType to, x86IntRegType from, int offset ); void SSE2_MOVDQARtoRmOffset( x86IntRegType to, x86SSERegType from, int offset ); void SSE2_MOVDQARmtoROffset( x86SSERegType to, x86IntRegType from, int offset ); void SSE_RCPPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_RCPPS_M128_to_XMM( x86SSERegType to, uptr from ); void SSE_RCPSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_RCPSS_M32_to_XMM( x86SSERegType to, uptr from ); void SSE_ORPS_M128_to_XMM( x86SSERegType to, uptr from ); void SSE_ORPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_XORPS_M128_to_XMM( x86SSERegType to, uptr from ); void SSE_XORPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_ANDPS_M128_to_XMM( x86SSERegType to, uptr from ); void SSE_ANDPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_ANDNPS_M128_to_XMM( x86SSERegType to, uptr from ); void SSE_ANDNPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_ADDPS_M128_to_XMM( x86SSERegType to, uptr from ); void SSE_ADDPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_ADDSS_M32_to_XMM( x86SSERegType to, uptr from ); void SSE_ADDSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_SUBPS_M128_to_XMM( x86SSERegType to, uptr from ); void SSE_SUBPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_SUBSS_M32_to_XMM( x86SSERegType to, uptr from ); void SSE_SUBSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_MULPS_M128_to_XMM( x86SSERegType to, uptr from ); void SSE_MULPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_MULSS_M32_to_XMM( x86SSERegType to, uptr from ); void SSE_MULSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPEQSS_M32_to_XMM( x86SSERegType to, uptr from ); void SSE_CMPEQSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPLTSS_M32_to_XMM( x86SSERegType to, uptr from ); void SSE_CMPLTSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPLESS_M32_to_XMM( x86SSERegType to, uptr from ); void SSE_CMPLESS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPUNORDSS_M32_to_XMM( x86SSERegType to, uptr from ); void SSE_CMPUNORDSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPNESS_M32_to_XMM( x86SSERegType to, uptr from ); void SSE_CMPNESS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPNLTSS_M32_to_XMM( x86SSERegType to, uptr from ); void SSE_CMPNLTSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPNLESS_M32_to_XMM( x86SSERegType to, uptr from ); void SSE_CMPNLESS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPORDSS_M32_to_XMM( x86SSERegType to, uptr from ); void SSE_CMPORDSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_UCOMISS_M32_to_XMM( x86SSERegType to, uptr from ); void SSE_UCOMISS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); #ifndef __x86_64__ void SSE_PMAXSW_MM_to_MM( x86MMXRegType to, x86MMXRegType from ); void SSE_PMINSW_MM_to_MM( x86MMXRegType to, x86MMXRegType from ); void SSE_CVTPI2PS_MM_to_XMM( x86SSERegType to, x86MMXRegType from ); void SSE_CVTPS2PI_M64_to_MM( x86MMXRegType to, uptr from ); void SSE_CVTPS2PI_XMM_to_MM( x86MMXRegType to, x86SSERegType from ); #endif void SSE_CVTPI2PS_M64_to_XMM( x86SSERegType to, uptr from ); void SSE_CVTTSS2SI_M32_to_R32(x86IntRegType to, uptr from); void SSE_CVTTSS2SI_XMM_to_R32(x86IntRegType to, x86SSERegType from); void SSE_CVTSI2SS_M32_to_XMM(x86SSERegType to, uptr from); void SSE_CVTSI2SS_R_to_XMM(x86SSERegType to, x86IntRegType from); void SSE2_CVTDQ2PS_M128_to_XMM( x86SSERegType to, uptr from ); void SSE2_CVTDQ2PS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_CVTPS2DQ_M128_to_XMM( x86SSERegType to, uptr 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, uptr from ); void SSE_MAXPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_MAXSS_M32_to_XMM( x86SSERegType to, uptr from ); void SSE_MAXSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_MINPS_M128_to_XMM( x86SSERegType to, uptr from ); void SSE_MINPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_MINSS_M32_to_XMM( x86SSERegType to, uptr from ); void SSE_MINSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_RSQRTPS_M128_to_XMM( x86SSERegType to, uptr from ); void SSE_RSQRTPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_RSQRTSS_M32_to_XMM( x86SSERegType to, uptr from ); void SSE_RSQRTSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_SQRTPS_M128_to_XMM( x86SSERegType to, uptr from ); void SSE_SQRTPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_SQRTSS_M32_to_XMM( x86SSERegType to, uptr from ); void SSE_SQRTSS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_UNPCKLPS_M128_to_XMM( x86SSERegType to, uptr from ); void SSE_UNPCKLPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_UNPCKHPS_M128_to_XMM( x86SSERegType to, uptr 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, uptr from, u8 imm8 ); void SSE_SHUFPS_RmOffset_to_XMM( x86SSERegType to, x86IntRegType from, int offset, u8 imm8 ); void SSE_CMPEQPS_M128_to_XMM( x86SSERegType to, uptr from ); void SSE_CMPEQPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPLTPS_M128_to_XMM( x86SSERegType to, uptr from ); void SSE_CMPLTPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPLEPS_M128_to_XMM( x86SSERegType to, uptr from ); void SSE_CMPLEPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPUNORDPS_M128_to_XMM( x86SSERegType to, uptr from ); void SSE_CMPUNORDPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPNEPS_M128_to_XMM( x86SSERegType to, uptr from ); void SSE_CMPNEPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPNLTPS_M128_to_XMM( x86SSERegType to, uptr from ); void SSE_CMPNLTPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPNLEPS_M128_to_XMM( x86SSERegType to, uptr from ); void SSE_CMPNLEPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_CMPORDPS_M128_to_XMM( x86SSERegType to, uptr from ); void SSE_CMPORDPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_DIVPS_M128_to_XMM( x86SSERegType to, uptr from ); void SSE_DIVPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE_DIVSS_M32_to_XMM( x86SSERegType to, uptr 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, uptr from, u8 imm8 ); void SSE2_PSHUFLW_XMM_to_XMM( x86SSERegType to, x86SSERegType from, u8 imm8 ); void SSE2_PSHUFLW_M128_to_XMM( x86SSERegType to, uptr from, u8 imm8 ); void SSE2_PSHUFHW_XMM_to_XMM( x86SSERegType to, x86SSERegType from, u8 imm8 ); void SSE2_PSHUFHW_M128_to_XMM( x86SSERegType to, uptr from, u8 imm8 ); void SSE_STMXCSR( uptr from ); void SSE_LDMXCSR( uptr from ); //********************* // SSE 2 Instructions* //********************* void SSE2_MOVDQA_M128_to_XMM(x86SSERegType to, uptr from); void SSE2_MOVDQA_XMM_to_M128( uptr to, x86SSERegType from); void SSE2_MOVDQA_XMM_to_XMM( x86SSERegType to, x86SSERegType from); void SSE2_MOVDQU_M128_to_XMM(x86SSERegType to, uptr from); void SSE2_MOVDQU_XMM_to_M128( uptr 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, uptr 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, uptr 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, uptr 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, uptr 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, uptr 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, uptr 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, uptr 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, uptr 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, uptr from ); void SSE2_PMAXUB_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_PMAXUB_M128_to_XMM( x86SSERegType to, uptr from ); void SSE2_PMINSW_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_PMINSW_M128_to_XMM( x86SSERegType to, uptr from ); void SSE2_PMINUB_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_PMINUB_M128_to_XMM( x86SSERegType to, uptr from ); void SSE2_PADDSB_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_PADDSB_M128_to_XMM( x86SSERegType to, uptr from ); void SSE2_PADDSW_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_PADDSW_M128_to_XMM( x86SSERegType to, uptr from ); void SSE2_PSUBSB_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_PSUBSB_M128_to_XMM( x86SSERegType to, uptr from ); void SSE2_PSUBSW_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_PSUBSW_M128_to_XMM( x86SSERegType to, uptr from ); void SSE2_PSUBUSB_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_PSUBUSB_M128_to_XMM( x86SSERegType to, uptr from ); void SSE2_PSUBUSW_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_PSUBUSW_M128_to_XMM( x86SSERegType to, uptr from ); void SSE2_PAND_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_PAND_M128_to_XMM( x86SSERegType to, uptr from ); void SSE2_PANDN_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_PANDN_M128_to_XMM( x86SSERegType to, uptr from ); void SSE2_PXOR_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_PXOR_M128_to_XMM( x86SSERegType to, uptr from ); void SSE2_PADDW_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); void SSE2_PADDW_M128_to_XMM(x86SSERegType to, uptr from ); void SSE2_PADDUSB_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_PADDUSB_M128_to_XMM( x86SSERegType to, uptr from ); void SSE2_PADDUSW_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_PADDUSW_M128_to_XMM( x86SSERegType to, uptr from ); void SSE2_PADDB_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); void SSE2_PADDB_M128_to_XMM(x86SSERegType to, uptr from ); void SSE2_PADDD_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); void SSE2_PADDD_M128_to_XMM(x86SSERegType to, uptr from ); void SSE2_PADDQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); void SSE2_PADDQ_M128_to_XMM(x86SSERegType to, uptr 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, uptr from); void SSE2_PACKSSDW_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PACKSSDW_M128_to_XMM(x86SSERegType to, uptr from); void SSE2_PACKUSWB_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PACKUSWB_M128_to_XMM(x86SSERegType to, uptr from); //**********************************************************************************/ //PUNPCKHWD: Unpack 16bit high //********************************************************************************** void SSE2_PUNPCKLBW_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PUNPCKLBW_M128_to_XMM(x86SSERegType to, uptr from); void SSE2_PUNPCKHBW_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PUNPCKHBW_M128_to_XMM(x86SSERegType to, uptr from); void SSE2_PUNPCKLWD_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PUNPCKLWD_M128_to_XMM(x86SSERegType to, uptr from); void SSE2_PUNPCKHWD_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PUNPCKHWD_M128_to_XMM(x86SSERegType to, uptr from); void SSE2_PUNPCKLDQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PUNPCKLDQ_M128_to_XMM(x86SSERegType to, uptr from); void SSE2_PUNPCKHDQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PUNPCKHDQ_M128_to_XMM(x86SSERegType to, uptr from); void SSE2_PUNPCKLQDQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PUNPCKLQDQ_M128_to_XMM(x86SSERegType to, uptr from); void SSE2_PUNPCKHQDQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PUNPCKHQDQ_M128_to_XMM(x86SSERegType to, uptr from); // mult by half words void SSE2_PMULLW_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PMULLW_M128_to_XMM(x86SSERegType to, uptr from); void SSE2_PMULHW_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PMULHW_M128_to_XMM(x86SSERegType to, uptr from); void SSE2_PMULUDQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE2_PMULUDQ_M128_to_XMM(x86SSERegType to, uptr 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, uptr from ); void SSE2_PSUBW_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); void SSE2_PSUBW_M128_to_XMM(x86SSERegType to, uptr from ); void SSE2_PSUBD_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); void SSE2_PSUBD_M128_to_XMM(x86SSERegType to, uptr from ); void SSE2_PSUBQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); void SSE2_PSUBQ_M128_to_XMM(x86SSERegType to, uptr from ); /////////////////////////////////////////////////////////////////////////////////////// //**********************************************************************************/ //PCMPxx: Compare Packed Integers * //********************************************************************************** void SSE2_PCMPGTB_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); void SSE2_PCMPGTB_M128_to_XMM(x86SSERegType to, uptr from ); void SSE2_PCMPGTW_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); void SSE2_PCMPGTW_M128_to_XMM(x86SSERegType to, uptr from ); void SSE2_PCMPGTD_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); void SSE2_PCMPGTD_M128_to_XMM(x86SSERegType to, uptr from ); void SSE2_PCMPEQB_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); void SSE2_PCMPEQB_M128_to_XMM(x86SSERegType to, uptr from ); void SSE2_PCMPEQW_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); void SSE2_PCMPEQW_M128_to_XMM(x86SSERegType to, uptr from ); void SSE2_PCMPEQD_XMM_to_XMM(x86SSERegType to, x86SSERegType from ); void SSE2_PCMPEQD_M128_to_XMM(x86SSERegType to, uptr from ); //**********************************************************************************/ //MOVD: Move Dword(32bit) to /from XMM reg * //********************************************************************************** void SSE2_MOVD_M32_to_XMM( x86SSERegType to, uptr 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, int 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, int offset ); #ifdef __x86_64__ void SSE2_MOVQ_XMM_to_R( x86IntRegType to, x86SSERegType from ); void SSE2_MOVQ_R_to_XMM( x86SSERegType to, x86IntRegType from ); #endif //**********************************************************************************/ //POR : SSE Bitwise OR * //********************************************************************************** void SSE2_POR_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSE2_POR_M128_to_XMM( x86SSERegType to, uptr from ); void SSE3_HADDPS_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE3_HADDPS_M128_to_XMM(x86SSERegType to, uptr from); void SSE3_MOVSLDUP_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE3_MOVSLDUP_M128_to_XMM(x86SSERegType to, uptr from); void SSE3_MOVSHDUP_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSE3_MOVSHDUP_M128_to_XMM(x86SSERegType to, uptr 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, uptr from ); void SSEX_MOVDQA_XMM_to_M128( uptr to, x86SSERegType from ); void SSEX_MOVDQA_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSEX_MOVDQARmtoROffset( x86SSERegType to, x86IntRegType from, int offset ); void SSEX_MOVDQARtoRmOffset( x86IntRegType to, x86SSERegType from, int offset ); void SSEX_MOVDQU_M128_to_XMM( x86SSERegType to, uptr from ); void SSEX_MOVDQU_XMM_to_M128( uptr to, x86SSERegType from ); void SSEX_MOVDQU_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSEX_MOVD_M32_to_XMM( x86SSERegType to, uptr 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, int offset ); void SSEX_MOVD_XMM_to_RmOffset( x86IntRegType to, x86SSERegType from, int offset ); void SSEX_POR_M128_to_XMM( x86SSERegType to, uptr from ); void SSEX_POR_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSEX_PXOR_M128_to_XMM( x86SSERegType to, uptr from ); void SSEX_PXOR_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSEX_PAND_M128_to_XMM( x86SSERegType to, uptr from ); void SSEX_PAND_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); void SSEX_PANDN_M128_to_XMM( x86SSERegType to, uptr 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, uptr from); void SSEX_PUNPCKHDQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from); void SSEX_PUNPCKHDQ_M128_to_XMM(x86SSERegType to, uptr from); void SSEX_MOVHLPS_XMM_to_XMM( x86SSERegType to, x86SSERegType from ); //********************* // 3DNOW instructions * //********************* void FEMMS( void ); void PFCMPEQMtoR( x86IntRegType to, uptr from ); void PFCMPGTMtoR( x86IntRegType to, uptr from ); void PFCMPGEMtoR( x86IntRegType to, uptr from ); void PFADDMtoR( x86IntRegType to, uptr from ); void PFADDRtoR( x86IntRegType to, x86IntRegType from ); void PFSUBMtoR( x86IntRegType to, uptr from ); void PFSUBRtoR( x86IntRegType to, x86IntRegType from ); void PFMULMtoR( x86IntRegType to, uptr from ); void PFMULRtoR( x86IntRegType to, x86IntRegType from ); void PFRCPMtoR( x86IntRegType to, uptr 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, uptr from ); void PF2IDRtoR( x86IntRegType to, x86IntRegType from ); void PI2FDMtoR( x86IntRegType to, uptr from ); void PI2FDRtoR( x86IntRegType to, x86IntRegType from ); void PFMAXMtoR( x86IntRegType to, uptr from ); void PFMAXRtoR( x86IntRegType to, x86IntRegType from ); void PFMINMtoR( x86IntRegType to, uptr 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, uptr from); void SSE2EMU_MOVQ_XMM_to_XMM( x86SSERegType to, x86SSERegType from); void SSE2EMU_MOVD_RmOffset_to_XMM( x86SSERegType to, x86IntRegType from, int offset ); void SSE2EMU_MOVD_XMM_to_RmOffset(x86IntRegType to, x86SSERegType from, int offset ); #ifndef __x86_64__ void SSE2EMU_MOVDQ2Q_XMM_to_MM( x86MMXRegType to, x86SSERegType from); void SSE2EMU_MOVQ2DQ_MM_to_XMM( x86SSERegType to, x86MMXRegType from); #endif /* 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, uptr from ); void SSE2EMU_MOVD_XMM_to_M32( uptr to, x86SSERegType from ); void SSE2EMU_MOVD_R_to_XMM( x86SSERegType to, x86IntRegType from ); //////////////////////////////////////////////////// #ifdef _DEBUG #define WRITECHECK() CheckX86Ptr() #else #define WRITECHECK() #endif #define writeVAL(val) ({ \ WRITECHECK(); \ *(typeof(val)*)x86Ptr = (val); \ x86Ptr += sizeof(val); \ (void)0; \ }) #define write8(val ) writeVAL((u8)(val)) #define write16(val ) writeVAL((u16)(val)) #define write32( val ) writeVAL((u32)(val)) #define write64( val ) writeVAL((u64)(val)) #ifdef __cplusplus } #endif #endif // __IX86_H__