Message ID | 1387644224-2404-3-git-send-email-aurelien@aurel32.net |
---|---|
State | New |
Headers | show |
On 12/21/2013 08:43 AM, Aurelien Jarno wrote: > P_REXW is defined has a constant at the beginning of i386/tcg-target.c, > but the corresponding bit is later used in a harcoded way, which defeat > the purpose of a constant. > > Fix that by using a conditional expression operator instead of a shift. > On x86 this actually makes the code slightly smaller as GCC does in > practice (opc >> 8) & 8 instead of (opc & 0x800) >> 8 so the constants > are smaller to load. > > Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> > --- > tcg/i386/tcg-target.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) Reviewed-by: Richard Henderson <rth@twiddle.net> r~
diff --git a/tcg/i386/tcg-target.c b/tcg/i386/tcg-target.c index 495b901..753b3a1 100644 --- a/tcg/i386/tcg-target.c +++ b/tcg/i386/tcg-target.c @@ -381,7 +381,7 @@ static void tcg_out_opc(TCGContext *s, int opc, int r, int rm, int x) } rex = 0; - rex |= (opc & P_REXW) >> 8; /* REX.W */ + rex |= (opc & P_REXW) ? 0x8 : 0x0; /* REX.W */ rex |= (r & 8) >> 1; /* REX.R */ rex |= (x & 8) >> 2; /* REX.X */ rex |= (rm & 8) >> 3; /* REX.B */
P_REXW is defined has a constant at the beginning of i386/tcg-target.c, but the corresponding bit is later used in a harcoded way, which defeat the purpose of a constant. Fix that by using a conditional expression operator instead of a shift. On x86 this actually makes the code slightly smaller as GCC does in practice (opc >> 8) & 8 instead of (opc & 0x800) >> 8 so the constants are smaller to load. Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> --- tcg/i386/tcg-target.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)