// 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
