mirror of https://github.com/PCSX2/pcsx2.git
x86emitter: align EmitRex interface on EmitSibMagic
This commit is contained in:
parent
e50e9a5e65
commit
f2ecfc99ad
|
@ -31,11 +31,12 @@ namespace x86Emitter {
|
|||
extern void EmitSibMagic( const xRegisterBase& reg1, const void* src );
|
||||
extern void EmitSibMagic( const xRegisterBase& reg1, const xIndirectVoid& sib );
|
||||
|
||||
void EmitRex( const xRegisterBase& reg1, const xRegisterBase& reg2 );
|
||||
void EmitRex( const xRegisterBase& reg1, const void* src );
|
||||
void EmitRex( const xRegisterBase& reg1, const xIndirectVoid& sib );
|
||||
void EmitRex( const xRegisterBase& reg1 );
|
||||
void EmitRex( const xIndirectVoid& sib );
|
||||
extern void EmitRex( uint regfield, const void* address );
|
||||
extern void EmitRex( uint regfield, const xIndirectVoid& info );
|
||||
extern void EmitRex( uint reg1, const xRegisterBase& reg2 );
|
||||
extern void EmitRex( const xRegisterBase& reg1, const xRegisterBase& reg2 );
|
||||
extern void EmitRex( const xRegisterBase& reg1, const void* src );
|
||||
extern void EmitRex( const xRegisterBase& reg1, const xIndirectVoid& sib );
|
||||
|
||||
extern void _xMovRtoR( const xRegisterInt& to, const xRegisterInt& from );
|
||||
|
||||
|
|
|
@ -406,51 +406,71 @@ void EmitSibMagic( const xRegisterBase& reg1, const xIndirectVoid& sib )
|
|||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
__emitinline static void EmitRex(bool w, bool r, bool x, bool b)
|
||||
{
|
||||
#ifdef __x86_64__
|
||||
u8 rex = 0x40 | (w << 3) | (r << 2) | (x << 1) | b;
|
||||
if (rex != 0x40)
|
||||
xWrite8(rex);
|
||||
#endif
|
||||
}
|
||||
|
||||
void EmitRex( uint regfield, const void* address )
|
||||
{
|
||||
pxAssert(0);
|
||||
bool w = false;
|
||||
bool r = false;
|
||||
bool x = false;
|
||||
bool b = false;
|
||||
EmitRex(w, r, x, b);
|
||||
}
|
||||
|
||||
void EmitRex( uint regfield, const xIndirectVoid& info )
|
||||
{
|
||||
bool w = info.Base.IsWide();
|
||||
bool r = false;
|
||||
bool x = false;
|
||||
bool b = info.IsExtended();
|
||||
EmitRex(w, r, x, b);
|
||||
}
|
||||
|
||||
void EmitRex( uint reg1, const xRegisterBase& reg2 )
|
||||
{
|
||||
bool w = reg2.IsWide();
|
||||
bool r = false;
|
||||
bool x = false;
|
||||
bool b = reg2.IsExtended();
|
||||
EmitRex(w, r, x, b);
|
||||
}
|
||||
|
||||
void EmitRex( const xRegisterBase& reg1, const xRegisterBase& reg2 )
|
||||
{
|
||||
u8 w = reg1.IsWide() << 3;
|
||||
u8 r = reg1.IsExtended() << 2;
|
||||
u8 x = 0;
|
||||
u8 b = reg2.IsExtended();
|
||||
xWrite8( 0x40 | w | r | x | b );
|
||||
bool w = reg1.IsWide();
|
||||
bool r = reg1.IsExtended();
|
||||
bool x = false;
|
||||
bool b = reg2.IsExtended();
|
||||
EmitRex(w, r, x, b);
|
||||
}
|
||||
|
||||
void EmitRex( const xRegisterBase& reg1, const void* src )
|
||||
{
|
||||
pxAssert(0); //see fixme
|
||||
u8 w = reg1.IsWide() << 3;
|
||||
u8 r = reg1.IsExtended() << 2;
|
||||
u8 x = 0;
|
||||
u8 b = 0; // FIXME src.IsExtended();
|
||||
xWrite8( 0x40 | w | r | x | b );
|
||||
bool w = reg1.IsWide();
|
||||
bool r = reg1.IsExtended();
|
||||
bool x = false;
|
||||
bool b = false; // FIXME src.IsExtended();
|
||||
EmitRex(w, r, x, b);
|
||||
}
|
||||
|
||||
void EmitRex( const xRegisterBase& reg1, const xIndirectVoid& sib )
|
||||
{
|
||||
u8 w = reg1.IsWide() << 3;
|
||||
u8 r = reg1.IsExtended() << 2;
|
||||
u8 x = sib.Index.IsExtended() << 1;
|
||||
u8 w = reg1.IsWide();
|
||||
u8 r = reg1.IsExtended();
|
||||
u8 x = sib.Index.IsExtended();
|
||||
u8 b = sib.Base.IsExtended();
|
||||
xWrite8( 0x40 | w | r | x | b );
|
||||
EmitRex(w, r, x, b);
|
||||
}
|
||||
|
||||
void EmitRex( const xRegisterBase& reg1)
|
||||
{
|
||||
u8 w = reg1.IsWide() << 3;
|
||||
u8 r = 0;
|
||||
u8 x = 0;
|
||||
u8 b = reg1.IsExtended();
|
||||
xWrite8( 0x40 | w | r | x | b );
|
||||
}
|
||||
|
||||
void EmitRex( const xIndirectVoid& sib)
|
||||
{
|
||||
u8 w = sib.Base.IsWide() << 3;
|
||||
u8 r = 0;
|
||||
u8 x = 0;
|
||||
u8 b = sib.IsExtended();
|
||||
xWrite8( 0x40 | w | r | x | b );
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------------------
|
||||
// xSetPtr / xAlignPtr / xGetPtr / xAdvancePtr
|
||||
|
|
Loading…
Reference in New Issue