179 lines
3.3 KiB
C
179 lines
3.3 KiB
C
// stop compiling if NORECBUILD build (only for Visual Studio)
|
|
#if !(defined(_MSC_VER) && defined(PCSX2_NORECBUILD))
|
|
|
|
#include "ix86-64.h"
|
|
|
|
/**********************/
|
|
/* 3DNOW instructions */
|
|
/**********************/
|
|
|
|
/* femms */
|
|
void FEMMS( void )
|
|
{
|
|
write16( 0x0E0F );
|
|
}
|
|
|
|
void PFCMPEQMtoR( x86IntRegType to, uptr from )
|
|
{
|
|
MEMADDR_OP(0, VAROP2(0x0F, 0x0F), true, to, from, 1);
|
|
write8( 0xB0 );
|
|
}
|
|
|
|
void PFCMPGTMtoR( x86IntRegType to, uptr from )
|
|
{
|
|
MEMADDR_OP(0, VAROP2(0x0F, 0x0F), true, to, from, 1);
|
|
write8( 0xA0 );
|
|
}
|
|
|
|
void PFCMPGEMtoR( x86IntRegType to, uptr from )
|
|
{
|
|
MEMADDR_OP(0, VAROP2(0x0F, 0x0F), true, to, from, 1);
|
|
write8( 0x90 );
|
|
}
|
|
|
|
void PFADDMtoR( x86IntRegType to, uptr from )
|
|
{
|
|
MEMADDR_OP(0, VAROP2(0x0F, 0x0F), true, to, from, 1);
|
|
write8( 0x9E );
|
|
}
|
|
|
|
void PFADDRtoR( x86IntRegType to, x86IntRegType from )
|
|
{
|
|
RexRB(0, to, from);
|
|
write16( 0x0F0F );
|
|
ModRM( 3, to, from );
|
|
write8( 0x9E );
|
|
}
|
|
|
|
void PFSUBMtoR( x86IntRegType to, uptr from )
|
|
{
|
|
MEMADDR_OP(0, VAROP2(0x0F, 0x0F), true, to, from, 1);
|
|
write8( 0x9A );
|
|
}
|
|
|
|
void PFSUBRtoR( x86IntRegType to, x86IntRegType from )
|
|
{
|
|
RexRB(0, to, from);
|
|
write16( 0x0F0F );
|
|
ModRM( 3, to, from );
|
|
write8( 0x9A );
|
|
}
|
|
|
|
void PFMULMtoR( x86IntRegType to, uptr from )
|
|
{
|
|
MEMADDR_OP(0, VAROP2(0x0F, 0x0F), true, to, from, 1);
|
|
write8( 0xB4 );
|
|
}
|
|
|
|
void PFMULRtoR( x86IntRegType to, x86IntRegType from )
|
|
{
|
|
RexRB(0, to, from);
|
|
write16( 0x0F0F );
|
|
ModRM( 3, to, from );
|
|
write8( 0xB4 );
|
|
}
|
|
|
|
void PFRCPMtoR( x86IntRegType to, uptr from )
|
|
{
|
|
MEMADDR_OP(0, VAROP2(0x0F, 0x0F), true, to, from, 1);
|
|
write8( 0x96 );
|
|
}
|
|
|
|
void PFRCPRtoR( x86IntRegType to, x86IntRegType from )
|
|
{
|
|
RexRB(0, to, from);
|
|
write16( 0x0F0F );
|
|
ModRM( 3, to, from );
|
|
write8( 0x96 );
|
|
}
|
|
|
|
void PFRCPIT1RtoR( x86IntRegType to, x86IntRegType from )
|
|
{
|
|
RexRB(0, to, from);
|
|
write16( 0x0F0F );
|
|
ModRM( 3, to, from );
|
|
write8( 0xA6 );
|
|
}
|
|
|
|
void PFRCPIT2RtoR( x86IntRegType to, x86IntRegType from )
|
|
{
|
|
RexRB(0, to, from);
|
|
write16( 0x0F0F );
|
|
ModRM( 3, to, from );
|
|
write8( 0xB6 );
|
|
}
|
|
|
|
void PFRSQRTRtoR( x86IntRegType to, x86IntRegType from )
|
|
{
|
|
RexRB(0, to, from);
|
|
write16( 0x0F0F );
|
|
ModRM( 3, to, from );
|
|
write8( 0x97 );
|
|
}
|
|
|
|
void PFRSQIT1RtoR( x86IntRegType to, x86IntRegType from )
|
|
{
|
|
RexRB(0, to, from);
|
|
write16( 0x0F0F );
|
|
ModRM( 3, to, from );
|
|
write8( 0xA7 );
|
|
}
|
|
|
|
void PF2IDMtoR( x86IntRegType to, uptr from )
|
|
{
|
|
MEMADDR_OP(0, VAROP2(0x0F, 0x0F), true, to, from, 1);
|
|
write8( 0x1D );
|
|
}
|
|
|
|
void PF2IDRtoR( x86IntRegType to, x86IntRegType from )
|
|
{
|
|
RexRB(0, to, from);
|
|
write16( 0x0F0F );
|
|
ModRM( 3, to, from );
|
|
write8( 0x1D );
|
|
}
|
|
|
|
void PI2FDMtoR( x86IntRegType to, uptr from )
|
|
{
|
|
MEMADDR_OP(0, VAROP2(0x0F, 0x0F), true, to, from, 1);
|
|
write8( 0x0D );
|
|
}
|
|
|
|
void PI2FDRtoR( x86IntRegType to, x86IntRegType from )
|
|
{
|
|
RexRB(0, to, from);
|
|
write16( 0x0F0F );
|
|
ModRM( 3, to, from );
|
|
write8( 0x0D );
|
|
}
|
|
|
|
void PFMAXMtoR( x86IntRegType to, uptr from )
|
|
{
|
|
MEMADDR_OP(0, VAROP2(0x0F, 0x0F), true, to, from, 1);
|
|
write8( 0xA4 );
|
|
}
|
|
|
|
void PFMAXRtoR( x86IntRegType to, x86IntRegType from )
|
|
{
|
|
RexRB(0, to, from);
|
|
write16( 0x0F0F );
|
|
ModRM( 3, to, from );
|
|
write8( 0xA4 );
|
|
}
|
|
|
|
void PFMINMtoR( x86IntRegType to, uptr from )
|
|
{
|
|
MEMADDR_OP(0, VAROP2(0x0F, 0x0F), true, to, from, 1);
|
|
write8( 0x94 );
|
|
}
|
|
|
|
void PFMINRtoR( x86IntRegType to, x86IntRegType from )
|
|
{
|
|
RexRB(0, to, from);
|
|
write16( 0x0F0F );
|
|
ModRM( 3, to, from );
|
|
write8( 0x94 );
|
|
}
|
|
|
|
#endif
|