From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PATCH v5 07/23] tcg: Expand TempOptInfo to 64-bits
Date: Thu, 17 Dec 2020 08:51:59 -0600 [thread overview]
Message-ID: <20201217145215.534637-8-richard.henderson@linaro.org> (raw)
In-Reply-To: <20201217145215.534637-1-richard.henderson@linaro.org>
This propagates the extended value of TCGTemp.val that we did before.
In addition, it will be required for vector constants.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
tcg/optimize.c | 40 +++++++++++++++++++++-------------------
1 file changed, 21 insertions(+), 19 deletions(-)
diff --git a/tcg/optimize.c b/tcg/optimize.c
index 81faf7cf10..33d1fc8f87 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -39,8 +39,8 @@ typedef struct TempOptInfo {
bool is_const;
TCGTemp *prev_copy;
TCGTemp *next_copy;
- tcg_target_ulong val;
- tcg_target_ulong mask;
+ uint64_t val;
+ uint64_t mask;
} TempOptInfo;
static inline TempOptInfo *ts_info(TCGTemp *ts)
@@ -166,11 +166,11 @@ static bool args_are_copies(TCGArg arg1, TCGArg arg2)
return ts_are_copies(arg_temp(arg1), arg_temp(arg2));
}
-static void tcg_opt_gen_movi(TCGContext *s, TCGOp *op, TCGArg dst, TCGArg val)
+static void tcg_opt_gen_movi(TCGContext *s, TCGOp *op, TCGArg dst, uint64_t val)
{
const TCGOpDef *def;
TCGOpcode new_op;
- tcg_target_ulong mask;
+ uint64_t mask;
TempOptInfo *di = arg_info(dst);
def = &tcg_op_defs[op->opc];
@@ -204,7 +204,7 @@ static void tcg_opt_gen_mov(TCGContext *s, TCGOp *op, TCGArg dst, TCGArg src)
const TCGOpDef *def;
TempOptInfo *di;
TempOptInfo *si;
- tcg_target_ulong mask;
+ uint64_t mask;
TCGOpcode new_op;
if (ts_are_copies(dst_ts, src_ts)) {
@@ -247,7 +247,7 @@ static void tcg_opt_gen_mov(TCGContext *s, TCGOp *op, TCGArg dst, TCGArg src)
}
}
-static TCGArg do_constant_folding_2(TCGOpcode op, TCGArg x, TCGArg y)
+static uint64_t do_constant_folding_2(TCGOpcode op, uint64_t x, uint64_t y)
{
uint64_t l64, h64;
@@ -410,10 +410,10 @@ static TCGArg do_constant_folding_2(TCGOpcode op, TCGArg x, TCGArg y)
}
}
-static TCGArg do_constant_folding(TCGOpcode op, TCGArg x, TCGArg y)
+static uint64_t do_constant_folding(TCGOpcode op, uint64_t x, uint64_t y)
{
const TCGOpDef *def = &tcg_op_defs[op];
- TCGArg res = do_constant_folding_2(op, x, y);
+ uint64_t res = do_constant_folding_2(op, x, y);
if (!(def->flags & TCG_OPF_64BIT)) {
res = (int32_t)res;
}
@@ -501,8 +501,9 @@ static bool do_constant_folding_cond_eq(TCGCond c)
static TCGArg do_constant_folding_cond(TCGOpcode op, TCGArg x,
TCGArg y, TCGCond c)
{
- tcg_target_ulong xv = arg_info(x)->val;
- tcg_target_ulong yv = arg_info(y)->val;
+ uint64_t xv = arg_info(x)->val;
+ uint64_t yv = arg_info(y)->val;
+
if (arg_is_const(x) && arg_is_const(y)) {
const TCGOpDef *def = &tcg_op_defs[op];
tcg_debug_assert(!(def->flags & TCG_OPF_VECTOR));
@@ -613,9 +614,8 @@ void tcg_optimize(TCGContext *s)
infos = tcg_malloc(sizeof(TempOptInfo) * nb_temps);
QTAILQ_FOREACH_SAFE(op, &s->ops, link, op_next) {
- tcg_target_ulong mask, partmask, affected;
+ uint64_t mask, partmask, affected, tmp;
int nb_oargs, nb_iargs, i;
- TCGArg tmp;
TCGOpcode opc = op->opc;
const TCGOpDef *def = &tcg_op_defs[opc];
@@ -1221,14 +1221,15 @@ void tcg_optimize(TCGContext *s)
CASE_OP_32_64(extract2):
if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) {
- TCGArg v1 = arg_info(op->args[1])->val;
- TCGArg v2 = arg_info(op->args[2])->val;
+ uint64_t v1 = arg_info(op->args[1])->val;
+ uint64_t v2 = arg_info(op->args[2])->val;
+ int shr = op->args[3];
if (opc == INDEX_op_extract2_i64) {
- tmp = (v1 >> op->args[3]) | (v2 << (64 - op->args[3]));
+ tmp = (v1 >> shr) | (v2 << (64 - shr));
} else {
- tmp = (int32_t)(((uint32_t)v1 >> op->args[3]) |
- ((uint32_t)v2 << (32 - op->args[3])));
+ tmp = (int32_t)(((uint32_t)v1 >> shr) |
+ ((uint32_t)v2 << (32 - shr)));
}
tcg_opt_gen_movi(s, op, op->args[0], tmp);
break;
@@ -1267,9 +1268,10 @@ void tcg_optimize(TCGContext *s)
break;
}
if (arg_is_const(op->args[3]) && arg_is_const(op->args[4])) {
- tcg_target_ulong tv = arg_info(op->args[3])->val;
- tcg_target_ulong fv = arg_info(op->args[4])->val;
+ uint64_t tv = arg_info(op->args[3])->val;
+ uint64_t fv = arg_info(op->args[4])->val;
TCGCond cond = op->args[5];
+
if (fv == 1 && tv == 0) {
cond = tcg_invert_cond(cond);
} else if (!(tv == 1 && fv == 0)) {
--
2.25.1
next prev parent reply other threads:[~2020-12-17 15:20 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-17 14:51 [PATCH v5 00/23] tcg: Better handling of constants Richard Henderson
2020-12-17 14:51 ` [PATCH v5 01/23] tcg: Use tcg_out_dupi_vec from temp_load Richard Henderson
2020-12-17 14:51 ` [PATCH v5 02/23] tcg: Increase tcg_out_dupi_vec immediate to int64_t Richard Henderson
2020-12-17 14:51 ` [PATCH v5 03/23] tcg: Consolidate 3 bits into enum TCGTempKind Richard Henderson
2020-12-17 14:51 ` [PATCH v5 04/23] tcg: Add temp_readonly Richard Henderson
2020-12-17 14:51 ` [PATCH v5 05/23] tcg: Expand TCGTemp.val to 64-bits Richard Henderson
2020-12-17 14:51 ` [PATCH v5 06/23] tcg: Rename struct tcg_temp_info to TempOptInfo Richard Henderson
2020-12-17 14:51 ` Richard Henderson [this message]
2020-12-17 14:52 ` [PATCH v5 08/23] tcg: Introduce TYPE_CONST temporaries Richard Henderson
2020-12-17 14:52 ` [PATCH v5 09/23] tcg/optimize: Improve find_better_copy Richard Henderson
2020-12-17 14:52 ` [PATCH v5 10/23] tcg/optimize: Adjust TempOptInfo allocation Richard Henderson
2020-12-17 14:52 ` [PATCH v5 11/23] tcg/optimize: Use tcg_constant_internal with constant folding Richard Henderson
2020-12-17 14:52 ` [PATCH v5 12/23] tcg: Convert tcg_gen_dupi_vec to TCG_CONST Richard Henderson
2020-12-17 14:52 ` [PATCH v5 13/23] tcg: Use tcg_constant_i32 with icount expander Richard Henderson
2020-12-17 14:52 ` [PATCH v5 14/23] tcg: Use tcg_constant_{i32, i64} with tcg int expanders Richard Henderson
2020-12-17 14:52 ` [PATCH v5 15/23] tcg: Use tcg_constant_{i32,i64} with tcg plugins Richard Henderson
2020-12-17 14:52 ` [PATCH v5 16/23] tcg: Use tcg_constant_{i32, i64, vec} with gvec expanders Richard Henderson
2020-12-17 14:52 ` [PATCH v5 17/23] tcg/tci: Add special tci_movi_{i32,i64} opcodes Richard Henderson
2020-12-17 14:52 ` [PATCH v5 18/23] tcg: Remove movi and dupi opcodes Richard Henderson
2020-12-17 14:52 ` [PATCH v5 19/23] tcg: Add tcg_reg_alloc_dup2 Richard Henderson
2020-12-17 14:52 ` [PATCH v5 20/23] tcg/i386: Use tcg_constant_vec with tcg vec expanders Richard Henderson
2020-12-17 14:52 ` [PATCH v5 21/23] tcg: Remove tcg_gen_dup{8,16,32,64}i_vec Richard Henderson
2020-12-17 14:52 ` [PATCH v5 22/23] tcg/ppc: Use tcg_constant_vec with tcg vec expanders Richard Henderson
2020-12-17 14:52 ` [PATCH v5 23/23] tcg/aarch64: " Richard Henderson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201217145215.534637-8-richard.henderson@linaro.org \
--to=richard.henderson@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).