pcsxr/libpcsxcore/ix86_64/ix86_3dnow.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