All of lore.kernel.org
 help / color / mirror / Atom feed
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: git@xen0n.name, gaosong@loongson.cn, philmd@linaro.org,
	qemu-arm@nongnu.org, qemu-riscv@nongnu.org,
	qemu-s390x@nongnu.org
Subject: [PATCH v4 20/57] tcg: Introduce TCG_OPF_TYPE_MASK
Date: Wed,  3 May 2023 08:06:19 +0100	[thread overview]
Message-ID: <20230503070656.1746170-21-richard.henderson@linaro.org> (raw)
In-Reply-To: <20230503070656.1746170-1-richard.henderson@linaro.org>

Reorg TCG_OPF_64BIT and TCG_OPF_VECTOR into a two-bit field so
that we can add TCG_OPF_128BIT without requiring another bit.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 include/tcg/tcg.h            | 22 ++++++++++++----------
 tcg/optimize.c               | 15 ++++++++++++---
 tcg/tcg.c                    |  4 ++--
 tcg/aarch64/tcg-target.c.inc |  8 +++++---
 tcg/tci/tcg-target.c.inc     |  3 ++-
 5 files changed, 33 insertions(+), 19 deletions(-)

diff --git a/include/tcg/tcg.h b/include/tcg/tcg.h
index b19e167e1d..efbd891f87 100644
--- a/include/tcg/tcg.h
+++ b/include/tcg/tcg.h
@@ -932,24 +932,26 @@ typedef struct TCGArgConstraint {
 
 /* Bits for TCGOpDef->flags, 8 bits available, all used.  */
 enum {
+    /* Two bits describing the output type. */
+    TCG_OPF_TYPE_MASK    = 0x03,
+    TCG_OPF_32BIT        = 0x00,
+    TCG_OPF_64BIT        = 0x01,
+    TCG_OPF_VECTOR       = 0x02,
+    TCG_OPF_128BIT       = 0x03,
     /* Instruction exits the translation block.  */
-    TCG_OPF_BB_EXIT      = 0x01,
+    TCG_OPF_BB_EXIT      = 0x04,
     /* Instruction defines the end of a basic block.  */
-    TCG_OPF_BB_END       = 0x02,
+    TCG_OPF_BB_END       = 0x08,
     /* Instruction clobbers call registers and potentially update globals.  */
-    TCG_OPF_CALL_CLOBBER = 0x04,
+    TCG_OPF_CALL_CLOBBER = 0x10,
     /* Instruction has side effects: it cannot be removed if its outputs
        are not used, and might trigger exceptions.  */
-    TCG_OPF_SIDE_EFFECTS = 0x08,
-    /* Instruction operands are 64-bits (otherwise 32-bits).  */
-    TCG_OPF_64BIT        = 0x10,
+    TCG_OPF_SIDE_EFFECTS = 0x20,
     /* Instruction is optional and not implemented by the host, or insn
        is generic and should not be implemened by the host.  */
-    TCG_OPF_NOT_PRESENT  = 0x20,
-    /* Instruction operands are vectors.  */
-    TCG_OPF_VECTOR       = 0x40,
+    TCG_OPF_NOT_PRESENT  = 0x40,
     /* Instruction is a conditional branch. */
-    TCG_OPF_COND_BRANCH  = 0x80
+    TCG_OPF_COND_BRANCH  = 0x80,
 };
 
 typedef struct TCGOpDef {
diff --git a/tcg/optimize.c b/tcg/optimize.c
index 9614fa3638..37d46f2a1f 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -2051,12 +2051,21 @@ void tcg_optimize(TCGContext *s)
         copy_propagate(&ctx, op, def->nb_oargs, def->nb_iargs);
 
         /* Pre-compute the type of the operation. */
-        if (def->flags & TCG_OPF_VECTOR) {
+        switch (def->flags & TCG_OPF_TYPE_MASK) {
+        case TCG_OPF_VECTOR:
             ctx.type = TCG_TYPE_V64 + TCGOP_VECL(op);
-        } else if (def->flags & TCG_OPF_64BIT) {
+            break;
+        case TCG_OPF_128BIT:
+            ctx.type = TCG_TYPE_I128;
+            break;
+        case TCG_OPF_64BIT:
             ctx.type = TCG_TYPE_I64;
-        } else {
+            break;
+        case TCG_OPF_32BIT:
             ctx.type = TCG_TYPE_I32;
+            break;
+        default:
+            qemu_build_not_reached();
         }
 
         /* Assume all bits affected, no bits known zero, no sign reps. */
diff --git a/tcg/tcg.c b/tcg/tcg.c
index d0afabf194..cb5ca9b612 100644
--- a/tcg/tcg.c
+++ b/tcg/tcg.c
@@ -2294,7 +2294,7 @@ static void tcg_dump_ops(TCGContext *s, FILE *f, bool have_prefs)
             nb_iargs = def->nb_iargs;
             nb_cargs = def->nb_cargs;
 
-            if (def->flags & TCG_OPF_VECTOR) {
+            if ((def->flags & TCG_OPF_TYPE_MASK) == TCG_OPF_VECTOR) {
                 col += ne_fprintf(f, "v%d,e%d,", 64 << TCGOP_VECL(op),
                                   8 << TCGOP_VECE(op));
             }
@@ -4782,7 +4782,7 @@ static void tcg_reg_alloc_op(TCGContext *s, const TCGOp *op)
         tcg_out_extrl_i64_i32(s, new_args[0], new_args[1]);
         break;
     default:
-        if (def->flags & TCG_OPF_VECTOR) {
+        if ((def->flags & TCG_OPF_TYPE_MASK) == TCG_OPF_VECTOR) {
             tcg_out_vec_op(s, op->opc, TCGOP_VECL(op), TCGOP_VECE(op),
                            new_args, const_args);
         } else {
diff --git a/tcg/aarch64/tcg-target.c.inc b/tcg/aarch64/tcg-target.c.inc
index 3adc5fd3a3..43acb4fbcb 100644
--- a/tcg/aarch64/tcg-target.c.inc
+++ b/tcg/aarch64/tcg-target.c.inc
@@ -1921,9 +1921,11 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc,
                        const TCGArg args[TCG_MAX_OP_ARGS],
                        const int const_args[TCG_MAX_OP_ARGS])
 {
-    /* 99% of the time, we can signal the use of extension registers
-       by looking to see if the opcode handles 64-bit data.  */
-    TCGType ext = (tcg_op_defs[opc].flags & TCG_OPF_64BIT) != 0;
+    /*
+     * 99% of the time, we can signal the use of extension registers
+     * by looking to see if the opcode handles 32-bit data or not.
+     */
+    TCGType ext = (tcg_op_defs[opc].flags & TCG_OPF_TYPE_MASK) != TCG_OPF_32BIT;
 
     /* Hoist the loads of the most common arguments.  */
     TCGArg a0 = args[0];
diff --git a/tcg/tci/tcg-target.c.inc b/tcg/tci/tcg-target.c.inc
index 4cf03a579c..e31640d109 100644
--- a/tcg/tci/tcg-target.c.inc
+++ b/tcg/tci/tcg-target.c.inc
@@ -790,7 +790,8 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc,
     CASE_32_64(sextract) /* Optional (TCG_TARGET_HAS_sextract_*). */
         {
             TCGArg pos = args[2], len = args[3];
-            TCGArg max = tcg_op_defs[opc].flags & TCG_OPF_64BIT ? 64 : 32;
+            TCGArg max = ((tcg_op_defs[opc].flags & TCG_OPF_TYPE_MASK)
+                          == TCG_OPF_32BIT ? 32 : 64);
 
             tcg_debug_assert(pos < max);
             tcg_debug_assert(pos + len <= max);
-- 
2.34.1



  parent reply	other threads:[~2023-05-03  7:09 UTC|newest]

Thread overview: 132+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-03  7:05 [PATCH v4 00/57] tcg: Improve atomicity support Richard Henderson
2023-05-03  7:06 ` [PATCH v4 01/57] include/exec/memop: Add bits describing atomicity Richard Henderson
2023-05-04 14:49   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 02/57] accel/tcg: Add cpu_in_serial_context Richard Henderson
2023-05-03  7:06 ` [PATCH v4 03/57] accel/tcg: Introduce tlb_read_idx Richard Henderson
2023-05-04 15:02   ` Peter Maydell
2023-05-05 18:57     ` Richard Henderson
2023-05-07 10:09       ` Peter Maydell
2023-05-08 10:02         ` Richard Henderson
2023-05-03  7:06 ` [PATCH v4 04/57] accel/tcg: Reorg system mode load helpers Richard Henderson
2023-05-04 15:39   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 05/57] accel/tcg: Reorg system mode store helpers Richard Henderson
2023-05-04 15:44   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 06/57] accel/tcg: Honor atomicity of loads Richard Henderson
2023-05-04 17:17   ` Peter Maydell
2023-05-05 20:19     ` Richard Henderson
2023-05-09 12:04       ` Peter Maydell
2023-05-09 14:27         ` Richard Henderson
2023-05-09 14:33           ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 07/57] accel/tcg: Honor atomicity of stores Richard Henderson
2023-05-05  9:28   ` Peter Maydell
2023-05-08 10:11     ` Richard Henderson
2023-05-03  7:06 ` [PATCH v4 08/57] target/loongarch: Do not include tcg-ldst.h Richard Henderson
2023-05-05  9:29   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 09/57] tcg: Unify helper_{be,le}_{ld,st}* Richard Henderson
2023-05-05  9:36   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 10/57] accel/tcg: Implement helper_{ld, st}*_mmu for user-only Richard Henderson
2023-05-05  9:43   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 11/57] tcg/tci: Use helper_{ld,st}*_mmu " Richard Henderson
2023-05-05  9:44   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 12/57] tcg: Add 128-bit guest memory primitives Richard Henderson
2023-05-05 10:04   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 13/57] meson: Detect atomic128 support with optimization Richard Henderson
2023-05-05 10:29   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 14/57] tcg/i386: Add have_atomic16 Richard Henderson
2023-05-05 10:34   ` Peter Maydell
2023-05-08 13:41     ` Richard Henderson
2023-05-03  7:06 ` [PATCH v4 15/57] accel/tcg: Use have_atomic16 in ldst_atomicity.c.inc Richard Henderson
2023-05-05 10:37   ` Peter Maydell
2023-05-08 13:48     ` Richard Henderson
2023-05-03  7:06 ` [PATCH v4 16/57] accel/tcg: Add aarch64 specific support in ldst_atomicity Richard Henderson
2023-05-03  7:06 ` [PATCH v4 17/57] tcg/aarch64: Detect have_lse, have_lse2 for linux Richard Henderson
2023-05-05 10:41   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 18/57] tcg/aarch64: Detect have_lse, have_lse2 for darwin Richard Henderson
2023-05-05 10:43   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 19/57] accel/tcg: Add have_lse2 support in ldst_atomicity Richard Henderson
2023-05-03  7:06 ` Richard Henderson [this message]
2023-05-05 10:45   ` [PATCH v4 20/57] tcg: Introduce TCG_OPF_TYPE_MASK Peter Maydell
2023-05-03  7:06 ` [PATCH v4 21/57] tcg/i386: Use full load/store helpers in user-only mode Richard Henderson
2023-05-05 12:01   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 22/57] tcg/aarch64: " Richard Henderson
2023-05-05 12:06   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 23/57] tcg/ppc: " Richard Henderson
2023-05-05 12:07   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 24/57] tcg/loongarch64: " Richard Henderson
2023-05-05 12:07   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 25/57] tcg/riscv: " Richard Henderson
2023-05-05 12:07   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 26/57] tcg/arm: Adjust constraints on qemu_ld/st Richard Henderson
2023-05-05 12:14   ` Peter Maydell
2023-05-08 15:13     ` Richard Henderson
2023-05-03  7:06 ` [PATCH v4 27/57] tcg/arm: Use full load/store helpers in user-only mode Richard Henderson
2023-05-05 12:15   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 28/57] tcg/mips: " Richard Henderson
2023-05-05 12:15   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 29/57] tcg/s390x: " Richard Henderson
2023-05-05 12:16   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 30/57] tcg/sparc64: Allocate %g2 as a third temporary Richard Henderson
2023-05-05 12:19   ` Peter Maydell
2023-05-08 15:17     ` Richard Henderson
2023-05-09  9:24       ` Peter Maydell
2023-05-09 14:34         ` Richard Henderson
2023-05-03  7:06 ` [PATCH v4 31/57] tcg/sparc64: Rename tcg_out_movi_imm13 to tcg_out_movi_s13 Richard Henderson
2023-05-05 12:20   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 32/57] tcg/sparc64: Rename tcg_out_movi_imm32 to tcg_out_movi_u32 Richard Henderson
2023-05-05 12:22   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 33/57] tcg/sparc64: Split out tcg_out_movi_s32 Richard Henderson
2023-05-05 12:23   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 34/57] tcg/sparc64: Use standard slow path for softmmu Richard Henderson
2023-05-05 12:26   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 35/57] accel/tcg: Remove helper_unaligned_{ld,st} Richard Henderson
2023-05-05 12:27   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 36/57] tcg/loongarch64: Assert the host supports unaligned accesses Richard Henderson
2023-05-05 12:30   ` Peter Maydell
2023-05-05 13:24   ` WANG Xuerui
2023-05-06  2:03     ` Song Gao
2023-05-03  7:06 ` [PATCH v4 37/57] tcg/loongarch64: Support softmmu " Richard Henderson
2023-05-05 12:35   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 38/57] tcg/riscv: " Richard Henderson
2023-05-05 10:35   ` LIU Zhiwei
2023-05-03  7:06 ` [PATCH v4 39/57] tcg: Introduce tcg_target_has_memory_bswap Richard Henderson
2023-05-05 12:41   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 40/57] tcg: Add INDEX_op_qemu_{ld,st}_i128 Richard Henderson
2023-05-05 12:45   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 41/57] tcg: Support TCG_TYPE_I128 in tcg_out_{ld, st}_helper_{args, ret} Richard Henderson
2023-05-05 12:53   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 42/57] tcg: Introduce atom_and_align_for_opc Richard Henderson
2023-05-05 13:03   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 43/57] tcg/i386: Use atom_and_align_for_opc Richard Henderson
2023-05-05 13:14   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 44/57] tcg/aarch64: " Richard Henderson
2023-05-05 13:15   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 45/57] tcg/arm: " Richard Henderson
2023-05-05 13:15   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 46/57] tcg/loongarch64: " Richard Henderson
2023-05-05 13:16   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 47/57] tcg/mips: " Richard Henderson
2023-05-05 13:17   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 48/57] tcg/ppc: " Richard Henderson
2023-05-05 13:18   ` Peter Maydell
2023-05-08 17:32     ` Richard Henderson
2023-05-03  7:06 ` [PATCH v4 49/57] tcg/riscv: " Richard Henderson
2023-05-05 13:19   ` Peter Maydell
2023-05-08 17:33     ` Richard Henderson
2023-05-03  7:06 ` [PATCH v4 50/57] tcg/s390x: " Richard Henderson
2023-05-05 13:20   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 51/57] tcg/sparc64: " Richard Henderson
2023-05-05 13:20   ` Peter Maydell
2023-05-08 17:34     ` Richard Henderson
2023-05-03  7:06 ` [PATCH v4 52/57] tcg/i386: Honor 64-bit atomicity in 32-bit mode Richard Henderson
2023-05-05 13:27   ` Peter Maydell
2023-05-08 16:15     ` Richard Henderson
2023-05-03  7:06 ` [PATCH v4 53/57] tcg/i386: Support 128-bit load/store with have_atomic16 Richard Henderson
2023-05-05 13:34   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 54/57] tcg/aarch64: Rename temporaries Richard Henderson
2023-05-05 13:36   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 55/57] tcg/aarch64: Support 128-bit load/store Richard Henderson
2023-05-05 13:41   ` Peter Maydell
2023-05-03  7:06 ` [PATCH v4 56/57] tcg/ppc: " Richard Henderson
2023-05-08 12:16   ` Daniel Henrique Barboza
2023-05-03  7:06 ` [PATCH v4 57/57] tcg/s390x: " Richard Henderson
2023-05-05 13:43 ` [PATCH v4 00/57] tcg: Improve atomicity support Peter Maydell

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=20230503070656.1746170-21-richard.henderson@linaro.org \
    --to=richard.henderson@linaro.org \
    --cc=gaosong@loongson.cn \
    --cc=git@xen0n.name \
    --cc=philmd@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-riscv@nongnu.org \
    --cc=qemu-s390x@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.