[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 26/38] tcg/i386: Use TEST r,r to test 8/16/32 bits
|
From: |
Richard Henderson |
|
Subject: |
[PATCH v3 26/38] tcg/i386: Use TEST r,r to test 8/16/32 bits |
|
Date: |
Thu, 11 Jan 2024 09:43:56 +1100 |
From: Paolo Bonzini <pbonzini@redhat.com>
Just like when testing against the sign bits, TEST r,r can be used when the
immediate is 0xff, 0xff00, 0xffff, 0xffffffff.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
tcg/i386/tcg-target.c.inc | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/tcg/i386/tcg-target.c.inc b/tcg/i386/tcg-target.c.inc
index 0b8c60d021..c6ba498623 100644
--- a/tcg/i386/tcg-target.c.inc
+++ b/tcg/i386/tcg-target.c.inc
@@ -1501,6 +1501,10 @@ static int tcg_out_cmp(TCGContext *s, TCGCond cond,
TCGArg arg1,
tcg_out_modrm(s, OPC_TESTB | P_REXB_R, arg1, arg1);
return js;
}
+ if (arg2 == 0xff) {
+ tcg_out_modrm(s, OPC_TESTB | P_REXB_R, arg1, arg1);
+ return jz;
+ }
tcg_out_modrm(s, OPC_GRP3_Eb | P_REXB_RM, EXT3_TESTi, arg1);
tcg_out8(s, arg2);
return jz;
@@ -1511,11 +1515,24 @@ static int tcg_out_cmp(TCGContext *s, TCGCond cond,
TCGArg arg1,
tcg_out_modrm(s, OPC_TESTB, arg1 + 4, arg1 + 4);
return js;
}
+ if (arg2 == 0xff00) {
+ tcg_out_modrm(s, OPC_TESTB, arg1 + 4, arg1 + 4);
+ return jz;
+ }
tcg_out_modrm(s, OPC_GRP3_Eb, EXT3_TESTi, arg1 + 4);
tcg_out8(s, arg2 >> 8);
return jz;
}
+ if (arg2 == 0xffff) {
+ tcg_out_modrm(s, OPC_TESTL | P_DATA16, arg1, arg1);
+ return jz;
+ }
+ if (arg2 == 0xffffffffu) {
+ tcg_out_modrm(s, OPC_TESTL, arg1, arg1);
+ return jz;
+ }
+
if (is_power_of_2(rexw ? arg2 : (uint32_t)arg2)) {
int jc = (cond == TCG_COND_TSTNE ? JCC_JB : JCC_JAE);
int sh = ctz64(arg2);
--
2.34.1
- [PATCH v3 20/38] tcg/arm: Factor tcg_out_cmp() out, (continued)
- [PATCH v3 20/38] tcg/arm: Factor tcg_out_cmp() out, Richard Henderson, 2024/01/10
- [PATCH v3 22/38] tcg/i386: Pass x86 condition codes to tcg_out_cmov, Richard Henderson, 2024/01/10
- [PATCH v3 24/38] tcg/i386: Support TCG_COND_TST{EQ,NE}, Richard Henderson, 2024/01/10
- [PATCH v3 31/38] tcg/ppc: Use cr0 in tcg_to_bc and tcg_to_isel, Richard Henderson, 2024/01/10
- [PATCH v3 17/38] tcg/aarch64: Support TCG_COND_TST{EQ,NE}, Richard Henderson, 2024/01/10
- [PATCH v3 32/38] tcg/ppc: Tidy up tcg_target_const_match, Richard Henderson, 2024/01/10
- [PATCH v3 25/38] tcg/i386: Improve TSTNE/TESTEQ vs powers of two, Richard Henderson, 2024/01/10
- [PATCH v3 26/38] tcg/i386: Use TEST r,r to test 8/16/32 bits,
Richard Henderson <=
- [PATCH v3 23/38] tcg/i386: Move tcg_cond_to_jcc[] into tcg_out_cmp, Richard Henderson, 2024/01/10
- [PATCH v3 27/38] tcg/sparc64: Hoist read of tcg_cond_to_rcond, Richard Henderson, 2024/01/10
- [PATCH v3 28/38] tcg/sparc64: Pass TCGCond to tcg_out_cmp, Richard Henderson, 2024/01/10
- [PATCH v3 29/38] tcg/sparc64: Support TCG_COND_TST{EQ,NE}, Richard Henderson, 2024/01/10
- [PATCH v3 30/38] tcg/ppc: Sink tcg_to_bc usage into tcg_out_bc, Richard Henderson, 2024/01/10
- [PATCH v3 33/38] tcg/ppc: Add TCG_CT_CONST_CMP, Richard Henderson, 2024/01/10
- [PATCH v3 34/38] tcg/ppc: Support TCG_COND_TST{EQ,NE}, Richard Henderson, 2024/01/10