All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/9] Clean up .new decode and scripts
@ 2024-03-07  3:23 Taylor Simpson
  2024-03-07  3:23 ` [PATCH v2 1/9] Hexagon (target/hexagon) Add is_old/is_new to Register class Taylor Simpson
                   ` (8 more replies)
  0 siblings, 9 replies; 21+ messages in thread
From: Taylor Simpson @ 2024-03-07  3:23 UTC (permalink / raw)
  To: qemu-devel
  Cc: bcain, quic_mathbern, sidneym, quic_mliebel, richard.henderson,
	philmd, ale, anjo, ltaylorsimpson

During .new decode, there are several places where strchr is used.
We remove these by generating the values that are needed.

Once we have generated the proper values, we no longer need
op_regs_generated.h.inc.  We remove the script that generates it as
well as the code in meson.build

We also remove the script and meson.build code that creates
shortcode_generated.h.inc.  The data structure that includes it is
not used.

We remove hex_common.read_attribs_file.  The Python data structures built
during this step are not used.

**** Changes in v2 ****
Address feedback from Matheus Tavares Bernardino <quic_mathbern@quicinc.com>
Mark Philippe's Reviewed-by on patch 01
Update example comment in gen_trans_funcs.py



Taylor Simpson (9):
  Hexagon (target/hexagon) Add is_old/is_new to Register class
  Hexagon (target/hexagon) Mark new_read_idx in trans functions
  Hexagon (target/hexagon) Mark dest_idx in trans functions
  Hexagon (target/hexagon) Mark has_pred_dest in trans functions
  Hexagon (tests/tcg/hexagon) Test HVX .new read from high half of pair
  Hexagon (target/hexagon) Remove uses of op_regs_generated.h.inc
  Hexagon (target/hexagon) Remove gen_op_regs.py
  Hexagon (target/hexagon) Remove gen_shortcode.py
  Hexagon (target/hexagon) Remove hex_common.read_attribs_file

 target/hexagon/insn.h                   |   5 +-
 target/hexagon/opcodes.h                |   4 -
 target/hexagon/decode.c                 |  50 ++--------
 target/hexagon/mmvec/decode_ext_mmvec.c |  30 ++----
 target/hexagon/opcodes.c                |  35 -------
 tests/tcg/hexagon/hvx_misc.c            |  16 ++-
 target/hexagon/README                   |   2 -
 target/hexagon/gen_analyze_funcs.py     |  21 +---
 target/hexagon/gen_helper_funcs.py      |  21 +---
 target/hexagon/gen_helper_protos.py     |  21 +---
 target/hexagon/gen_idef_parser_funcs.py |   5 +-
 target/hexagon/gen_op_attribs.py        |   5 +-
 target/hexagon/gen_op_regs.py           | 125 ------------------------
 target/hexagon/gen_opcodes_def.py       |   4 +-
 target/hexagon/gen_printinsn.py         |   5 +-
 target/hexagon/gen_shortcode.py         |  63 ------------
 target/hexagon/gen_tcg_func_table.py    |   5 +-
 target/hexagon/gen_tcg_funcs.py         |  21 +---
 target/hexagon/gen_trans_funcs.py       |  26 ++++-
 target/hexagon/hex_common.py            |  49 +++++++---
 target/hexagon/meson.build              |  55 ++++-------
 21 files changed, 122 insertions(+), 446 deletions(-)
 delete mode 100755 target/hexagon/gen_op_regs.py
 delete mode 100755 target/hexagon/gen_shortcode.py

-- 
2.34.1



^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH v2 1/9] Hexagon (target/hexagon) Add is_old/is_new to Register class
  2024-03-07  3:23 [PATCH v2 0/9] Clean up .new decode and scripts Taylor Simpson
@ 2024-03-07  3:23 ` Taylor Simpson
  2024-03-29  1:05   ` Brian Cain
  2024-03-07  3:23 ` [PATCH v2 2/9] Hexagon (target/hexagon) Mark new_read_idx in trans functions Taylor Simpson
                   ` (7 subsequent siblings)
  8 siblings, 1 reply; 21+ messages in thread
From: Taylor Simpson @ 2024-03-07  3:23 UTC (permalink / raw)
  To: qemu-devel
  Cc: bcain, quic_mathbern, sidneym, quic_mliebel, richard.henderson,
	philmd, ale, anjo, ltaylorsimpson

Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 target/hexagon/hex_common.py | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/target/hexagon/hex_common.py b/target/hexagon/hex_common.py
index 195620c7ec..4bacef223f 100755
--- a/target/hexagon/hex_common.py
+++ b/target/hexagon/hex_common.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 ##
-##  Copyright(c) 2019-2023 Qualcomm Innovation Center, Inc. All Rights Reserved.
+##  Copyright(c) 2019-2024 Qualcomm Innovation Center, Inc. All Rights Reserved.
 ##
 ##  This program is free software; you can redistribute it and/or modify
 ##  it under the terms of the GNU General Public License as published by
@@ -397,10 +397,18 @@ def is_readwrite(self):
 class OldSource(Source):
     def reg_tcg(self):
         return f"{self.regtype}{self.regid}V"
+    def is_old(self):
+        return True
+    def is_new(self):
+        return False
 
 class NewSource(Source):
     def reg_tcg(self):
         return f"{self.regtype}{self.regid}N"
+    def is_old(self):
+        return False
+    def is_new(self):
+        return True
 
 class ReadWrite:
     def reg_tcg(self):
@@ -413,6 +421,10 @@ def is_read(self):
         return True
     def is_readwrite(self):
         return True
+    def is_old(self):
+        return True
+    def is_new(self):
+        return False
 
 class GprDest(Register, Single, Dest):
     def decl_tcg(self, f, tag, regno):
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v2 2/9] Hexagon (target/hexagon) Mark new_read_idx in trans functions
  2024-03-07  3:23 [PATCH v2 0/9] Clean up .new decode and scripts Taylor Simpson
  2024-03-07  3:23 ` [PATCH v2 1/9] Hexagon (target/hexagon) Add is_old/is_new to Register class Taylor Simpson
@ 2024-03-07  3:23 ` Taylor Simpson
  2024-03-29  1:05   ` Brian Cain
  2024-03-07  3:23 ` [PATCH v2 3/9] Hexagon (target/hexagon) Mark dest_idx " Taylor Simpson
                   ` (6 subsequent siblings)
  8 siblings, 1 reply; 21+ messages in thread
From: Taylor Simpson @ 2024-03-07  3:23 UTC (permalink / raw)
  To: qemu-devel
  Cc: bcain, quic_mathbern, sidneym, quic_mliebel, richard.henderson,
	philmd, ale, anjo, ltaylorsimpson

Check that the value matches opcode_reginfo

Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
---
 target/hexagon/insn.h                   |  3 ++-
 target/hexagon/decode.c                 |  2 ++
 target/hexagon/mmvec/decode_ext_mmvec.c |  2 ++
 target/hexagon/gen_trans_funcs.py       | 15 ++++++++++-----
 4 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/target/hexagon/insn.h b/target/hexagon/insn.h
index 3e7a22c91e..36502bf056 100644
--- a/target/hexagon/insn.h
+++ b/target/hexagon/insn.h
@@ -1,5 +1,5 @@
 /*
- *  Copyright(c) 2019-2022 Qualcomm Innovation Center, Inc. All Rights Reserved.
+ *  Copyright(c) 2019-2024 Qualcomm Innovation Center, Inc. All Rights Reserved.
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -39,6 +39,7 @@ struct Instruction {
     uint32_t slot:3;
     uint32_t which_extended:1;    /* If has an extender, which immediate */
     uint32_t new_value_producer_slot:4;
+    int32_t new_read_idx;
 
     bool part1;              /*
                               * cmp-jumps are split into two insns.
diff --git a/target/hexagon/decode.c b/target/hexagon/decode.c
index a40210ca1e..4595e30384 100644
--- a/target/hexagon/decode.c
+++ b/target/hexagon/decode.c
@@ -131,6 +131,8 @@ decode_fill_newvalue_regno(Packet *packet)
                 use_regidx = strchr(opcode_reginfo[use_opcode], 's') -
                     opcode_reginfo[use_opcode];
             }
+            g_assert(packet->insn[i].new_read_idx != -1 &&
+                     packet->insn[i].new_read_idx == use_regidx);
 
             /*
              * What's encoded at the N-field is the offset to who's producing
diff --git a/target/hexagon/mmvec/decode_ext_mmvec.c b/target/hexagon/mmvec/decode_ext_mmvec.c
index 202d84c7c0..e9007f5d71 100644
--- a/target/hexagon/mmvec/decode_ext_mmvec.c
+++ b/target/hexagon/mmvec/decode_ext_mmvec.c
@@ -41,6 +41,8 @@ check_new_value(Packet *pkt)
             GET_ATTRIB(use_opcode, A_STORE)) {
             int use_regidx = strchr(opcode_reginfo[use_opcode], 's') -
                 opcode_reginfo[use_opcode];
+            g_assert(pkt->insn[i].new_read_idx != -1 &&
+                     pkt->insn[i].new_read_idx == use_regidx);
             /*
              * What's encoded at the N-field is the offset to who's producing
              * the value.
diff --git a/target/hexagon/gen_trans_funcs.py b/target/hexagon/gen_trans_funcs.py
index 53e844a44b..8acecdb993 100755
--- a/target/hexagon/gen_trans_funcs.py
+++ b/target/hexagon/gen_trans_funcs.py
@@ -68,6 +68,7 @@ def mark_which_imm_extended(f, tag):
 ##         insn->regno[0] = args->Rd;
 ##         insn->regno[1] = args->Rs;
 ##         insn->regno[2] = args->Rt;
+##         insn->new_read_idx = -1;
 ##         return true;
 ##     }
 ##
@@ -84,14 +85,14 @@ def gen_trans_funcs(f):
                 insn->opcode = {tag};
         """))
 
-        regno = 0
-        for reg in regs:
-            reg_type = reg[0]
-            reg_id = reg[1]
+        new_read_idx = -1
+        for regno, (reg_type, reg_id, *_) in enumerate(regs):
+            reg = hex_common.get_register(tag, reg_type, reg_id)
             f.write(code_fmt(f"""\
                 insn->regno[{regno}] = args->{reg_type}{reg_id};
             """))
-            regno += 1
+            if reg.is_read() and reg.is_new():
+                new_read_idx = regno
 
         if len(imms) != 0:
             mark_which_imm_extended(f, tag)
@@ -112,6 +113,9 @@ def gen_trans_funcs(f):
                     insn->immed[{immno}] = args->{imm_type}{imm_letter};
                 """))
 
+        f.write(code_fmt(f"""\
+            insn->new_read_idx = {new_read_idx};
+        """))
         f.write(textwrap.dedent(f"""\
                 return true;
             {close_curly}
@@ -120,5 +124,6 @@ def gen_trans_funcs(f):
 
 if __name__ == "__main__":
     hex_common.read_semantics_file(sys.argv[1])
+    hex_common.init_registers()
     with open(sys.argv[2], "w") as f:
         gen_trans_funcs(f)
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v2 3/9] Hexagon (target/hexagon) Mark dest_idx in trans functions
  2024-03-07  3:23 [PATCH v2 0/9] Clean up .new decode and scripts Taylor Simpson
  2024-03-07  3:23 ` [PATCH v2 1/9] Hexagon (target/hexagon) Add is_old/is_new to Register class Taylor Simpson
  2024-03-07  3:23 ` [PATCH v2 2/9] Hexagon (target/hexagon) Mark new_read_idx in trans functions Taylor Simpson
@ 2024-03-07  3:23 ` Taylor Simpson
  2024-03-29  1:05   ` Brian Cain
  2024-03-07  3:23 ` [PATCH v2 4/9] Hexagon (target/hexagon) Mark has_pred_dest " Taylor Simpson
                   ` (5 subsequent siblings)
  8 siblings, 1 reply; 21+ messages in thread
From: Taylor Simpson @ 2024-03-07  3:23 UTC (permalink / raw)
  To: qemu-devel
  Cc: bcain, quic_mathbern, sidneym, quic_mliebel, richard.henderson,
	philmd, ale, anjo, ltaylorsimpson

Check that the value matches opcode_reginfo/opcode_wregs

Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
---
 target/hexagon/insn.h                   | 1 +
 target/hexagon/decode.c                 | 2 ++
 target/hexagon/mmvec/decode_ext_mmvec.c | 2 ++
 target/hexagon/gen_trans_funcs.py       | 6 ++++++
 4 files changed, 11 insertions(+)

diff --git a/target/hexagon/insn.h b/target/hexagon/insn.h
index 36502bf056..a770379958 100644
--- a/target/hexagon/insn.h
+++ b/target/hexagon/insn.h
@@ -40,6 +40,7 @@ struct Instruction {
     uint32_t which_extended:1;    /* If has an extender, which immediate */
     uint32_t new_value_producer_slot:4;
     int32_t new_read_idx;
+    int32_t dest_idx;
 
     bool part1;              /*
                               * cmp-jumps are split into two insns.
diff --git a/target/hexagon/decode.c b/target/hexagon/decode.c
index 4595e30384..a4d8500fea 100644
--- a/target/hexagon/decode.c
+++ b/target/hexagon/decode.c
@@ -184,6 +184,8 @@ decode_fill_newvalue_regno(Packet *packet)
 
             /* Now patch up the consumer with the register number */
             dst_idx = dststr - opcode_reginfo[def_opcode];
+            g_assert(packet->insn[def_idx].dest_idx != -1 &&
+                     packet->insn[def_idx].dest_idx == dst_idx);
             packet->insn[i].regno[use_regidx] =
                 packet->insn[def_idx].regno[dst_idx];
             /*
diff --git a/target/hexagon/mmvec/decode_ext_mmvec.c b/target/hexagon/mmvec/decode_ext_mmvec.c
index e9007f5d71..c1320406df 100644
--- a/target/hexagon/mmvec/decode_ext_mmvec.c
+++ b/target/hexagon/mmvec/decode_ext_mmvec.c
@@ -86,6 +86,8 @@ check_new_value(Packet *pkt)
                     /* still not there, we have a bad packet */
                     g_assert_not_reached();
                 }
+                g_assert(pkt->insn[def_idx].dest_idx != -1 &&
+                         pkt->insn[def_idx].dest_idx == dststr - reginfo);
                 int def_regnum = pkt->insn[def_idx].regno[dststr - reginfo];
                 /* Now patch up the consumer with the register number */
                 pkt->insn[i].regno[use_regidx] = def_regnum ^ def_oreg;
diff --git a/target/hexagon/gen_trans_funcs.py b/target/hexagon/gen_trans_funcs.py
index 8acecdb993..1201172dda 100755
--- a/target/hexagon/gen_trans_funcs.py
+++ b/target/hexagon/gen_trans_funcs.py
@@ -69,6 +69,7 @@ def mark_which_imm_extended(f, tag):
 ##         insn->regno[1] = args->Rs;
 ##         insn->regno[2] = args->Rt;
 ##         insn->new_read_idx = -1;
+##         insn->dest_idx = 0;
 ##         return true;
 ##     }
 ##
@@ -86,6 +87,7 @@ def gen_trans_funcs(f):
         """))
 
         new_read_idx = -1
+        dest_idx = -1
         for regno, (reg_type, reg_id, *_) in enumerate(regs):
             reg = hex_common.get_register(tag, reg_type, reg_id)
             f.write(code_fmt(f"""\
@@ -93,6 +95,9 @@ def gen_trans_funcs(f):
             """))
             if reg.is_read() and reg.is_new():
                 new_read_idx = regno
+            # dest_idx should be the first destination, so check for -1
+            if reg.is_written() and dest_idx == -1:
+                dest_idx = regno
 
         if len(imms) != 0:
             mark_which_imm_extended(f, tag)
@@ -115,6 +120,7 @@ def gen_trans_funcs(f):
 
         f.write(code_fmt(f"""\
             insn->new_read_idx = {new_read_idx};
+            insn->dest_idx = {dest_idx};
         """))
         f.write(textwrap.dedent(f"""\
                 return true;
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v2 4/9] Hexagon (target/hexagon) Mark has_pred_dest in trans functions
  2024-03-07  3:23 [PATCH v2 0/9] Clean up .new decode and scripts Taylor Simpson
                   ` (2 preceding siblings ...)
  2024-03-07  3:23 ` [PATCH v2 3/9] Hexagon (target/hexagon) Mark dest_idx " Taylor Simpson
@ 2024-03-07  3:23 ` Taylor Simpson
  2024-03-29  1:04   ` Brian Cain
  2024-03-07  3:23 ` [PATCH v2 5/9] Hexagon (tests/tcg/hexagon) Test HVX .new read from high half of pair Taylor Simpson
                   ` (4 subsequent siblings)
  8 siblings, 1 reply; 21+ messages in thread
From: Taylor Simpson @ 2024-03-07  3:23 UTC (permalink / raw)
  To: qemu-devel
  Cc: bcain, quic_mathbern, sidneym, quic_mliebel, richard.henderson,
	philmd, ale, anjo, ltaylorsimpson

Check that the value matches opcode_wregs

Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
---
 target/hexagon/insn.h             | 1 +
 target/hexagon/decode.c           | 3 +++
 target/hexagon/gen_trans_funcs.py | 5 +++++
 3 files changed, 9 insertions(+)

diff --git a/target/hexagon/insn.h b/target/hexagon/insn.h
index a770379958..24dcf7fe9f 100644
--- a/target/hexagon/insn.h
+++ b/target/hexagon/insn.h
@@ -41,6 +41,7 @@ struct Instruction {
     uint32_t new_value_producer_slot:4;
     int32_t new_read_idx;
     int32_t dest_idx;
+    bool has_pred_dest;
 
     bool part1;              /*
                               * cmp-jumps are split into two insns.
diff --git a/target/hexagon/decode.c b/target/hexagon/decode.c
index a4d8500fea..84a3899556 100644
--- a/target/hexagon/decode.c
+++ b/target/hexagon/decode.c
@@ -366,6 +366,9 @@ static void decode_shuffle_for_execution(Packet *packet)
         for (flag = false, i = 0; i < last_insn + 1; i++) {
             int opcode = packet->insn[i].opcode;
 
+            g_assert(packet->insn[i].has_pred_dest ==
+                     (strstr(opcode_wregs[opcode], "Pd4") ||
+                      strstr(opcode_wregs[opcode], "Pe4")));
             if ((strstr(opcode_wregs[opcode], "Pd4") ||
                  strstr(opcode_wregs[opcode], "Pe4")) &&
                 GET_ATTRIB(opcode, A_STORE) == 0) {
diff --git a/target/hexagon/gen_trans_funcs.py b/target/hexagon/gen_trans_funcs.py
index 1201172dda..9f86b4edbd 100755
--- a/target/hexagon/gen_trans_funcs.py
+++ b/target/hexagon/gen_trans_funcs.py
@@ -70,6 +70,7 @@ def mark_which_imm_extended(f, tag):
 ##         insn->regno[2] = args->Rt;
 ##         insn->new_read_idx = -1;
 ##         insn->dest_idx = 0;
+##         insn->has_pred_dest = false;
 ##         return true;
 ##     }
 ##
@@ -88,6 +89,7 @@ def gen_trans_funcs(f):
 
         new_read_idx = -1
         dest_idx = -1
+        has_pred_dest = "false"
         for regno, (reg_type, reg_id, *_) in enumerate(regs):
             reg = hex_common.get_register(tag, reg_type, reg_id)
             f.write(code_fmt(f"""\
@@ -98,6 +100,8 @@ def gen_trans_funcs(f):
             # dest_idx should be the first destination, so check for -1
             if reg.is_written() and dest_idx == -1:
                 dest_idx = regno
+            if reg_type == "P" and reg.is_written() and not reg.is_read():
+                has_pred_dest = "true"
 
         if len(imms) != 0:
             mark_which_imm_extended(f, tag)
@@ -121,6 +125,7 @@ def gen_trans_funcs(f):
         f.write(code_fmt(f"""\
             insn->new_read_idx = {new_read_idx};
             insn->dest_idx = {dest_idx};
+            insn->has_pred_dest = {has_pred_dest};
         """))
         f.write(textwrap.dedent(f"""\
                 return true;
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v2 5/9] Hexagon (tests/tcg/hexagon) Test HVX .new read from high half of pair
  2024-03-07  3:23 [PATCH v2 0/9] Clean up .new decode and scripts Taylor Simpson
                   ` (3 preceding siblings ...)
  2024-03-07  3:23 ` [PATCH v2 4/9] Hexagon (target/hexagon) Mark has_pred_dest " Taylor Simpson
@ 2024-03-07  3:23 ` Taylor Simpson
  2024-03-29  1:05   ` Brian Cain
  2024-03-07  3:23 ` [PATCH v2 6/9] Hexagon (target/hexagon) Remove uses of op_regs_generated.h.inc Taylor Simpson
                   ` (3 subsequent siblings)
  8 siblings, 1 reply; 21+ messages in thread
From: Taylor Simpson @ 2024-03-07  3:23 UTC (permalink / raw)
  To: qemu-devel
  Cc: bcain, quic_mathbern, sidneym, quic_mliebel, richard.henderson,
	philmd, ale, anjo, ltaylorsimpson

Make sure the decoding of HVX .new is correctly handling this case

Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
---
 tests/tcg/hexagon/hvx_misc.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/tests/tcg/hexagon/hvx_misc.c b/tests/tcg/hexagon/hvx_misc.c
index b45170acd1..1fe14b5158 100644
--- a/tests/tcg/hexagon/hvx_misc.c
+++ b/tests/tcg/hexagon/hvx_misc.c
@@ -1,5 +1,5 @@
 /*
- *  Copyright(c) 2021-2023 Qualcomm Innovation Center, Inc. All Rights Reserved.
+ *  Copyright(c) 2021-2024 Qualcomm Innovation Center, Inc. All Rights Reserved.
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -231,6 +231,7 @@ static void test_masked_store(bool invert)
 static void test_new_value_store(void)
 {
     void *p0 = buffer0;
+    void *p1 = buffer1;
     void *pout = output;
 
     asm("{\n\t"
@@ -242,6 +243,19 @@ static void test_new_value_store(void)
     expect[0] = buffer0[0];
 
     check_output_w(__LINE__, 1);
+
+    /* Test the .new read from the high half of a pair */
+    asm("v7 = vmem(%0 + #0)\n\t"
+        "v12 = vmem(%1 + #0)\n\t"
+        "{\n\t"
+        "    v5:4 = vcombine(v12, v7)\n\t"
+        "    vmem(%2 + #0) = v5.new\n\t"
+        "}\n\t"
+        : : "r"(p0), "r"(p1), "r"(pout) : "v4", "v5", "v7", "v12", "memory");
+
+    expect[0] = buffer1[0];
+
+    check_output_w(__LINE__, 1);
 }
 
 static void test_max_temps()
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v2 6/9] Hexagon (target/hexagon) Remove uses of op_regs_generated.h.inc
  2024-03-07  3:23 [PATCH v2 0/9] Clean up .new decode and scripts Taylor Simpson
                   ` (4 preceding siblings ...)
  2024-03-07  3:23 ` [PATCH v2 5/9] Hexagon (tests/tcg/hexagon) Test HVX .new read from high half of pair Taylor Simpson
@ 2024-03-07  3:23 ` Taylor Simpson
  2024-03-29  1:04   ` Brian Cain
  2024-03-07  3:23 ` [PATCH v2 7/9] Hexagon (target/hexagon) Remove gen_op_regs.py Taylor Simpson
                   ` (2 subsequent siblings)
  8 siblings, 1 reply; 21+ messages in thread
From: Taylor Simpson @ 2024-03-07  3:23 UTC (permalink / raw)
  To: qemu-devel
  Cc: bcain, quic_mathbern, sidneym, quic_mliebel, richard.henderson,
	philmd, ale, anjo, ltaylorsimpson

Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
---
 target/hexagon/opcodes.h                |  4 --
 target/hexagon/decode.c                 | 57 +++----------------------
 target/hexagon/mmvec/decode_ext_mmvec.c | 34 +++------------
 target/hexagon/opcodes.c                | 28 ------------
 4 files changed, 13 insertions(+), 110 deletions(-)

diff --git a/target/hexagon/opcodes.h b/target/hexagon/opcodes.h
index fa7e321950..0ee11bd445 100644
--- a/target/hexagon/opcodes.h
+++ b/target/hexagon/opcodes.h
@@ -40,10 +40,6 @@ typedef enum {
 
 extern const char * const opcode_names[];
 
-extern const char * const opcode_reginfo[];
-extern const char * const opcode_rregs[];
-extern const char * const opcode_wregs[];
-
 typedef struct {
     const char * const encoding;
     const EncClass enc_class;
diff --git a/target/hexagon/decode.c b/target/hexagon/decode.c
index 84a3899556..23deba2426 100644
--- a/target/hexagon/decode.c
+++ b/target/hexagon/decode.c
@@ -115,24 +115,13 @@ static void
 decode_fill_newvalue_regno(Packet *packet)
 {
     int i, use_regidx, offset, def_idx, dst_idx;
-    uint16_t def_opcode, use_opcode;
-    char *dststr;
 
     for (i = 1; i < packet->num_insns; i++) {
         if (GET_ATTRIB(packet->insn[i].opcode, A_DOTNEWVALUE) &&
             !GET_ATTRIB(packet->insn[i].opcode, A_EXTENSION)) {
-            use_opcode = packet->insn[i].opcode;
-
-            /* It's a store, so we're adjusting the Nt field */
-            if (GET_ATTRIB(use_opcode, A_STORE)) {
-                use_regidx = strchr(opcode_reginfo[use_opcode], 't') -
-                    opcode_reginfo[use_opcode];
-            } else {    /* It's a Jump, so we're adjusting the Ns field */
-                use_regidx = strchr(opcode_reginfo[use_opcode], 's') -
-                    opcode_reginfo[use_opcode];
-            }
-            g_assert(packet->insn[i].new_read_idx != -1 &&
-                     packet->insn[i].new_read_idx == use_regidx);
+
+            g_assert(packet->insn[i].new_read_idx != -1);
+            use_regidx = packet->insn[i].new_read_idx;
 
             /*
              * What's encoded at the N-field is the offset to who's producing
@@ -153,39 +142,9 @@ decode_fill_newvalue_regno(Packet *packet)
              */
             g_assert(!((def_idx < 0) || (def_idx > (packet->num_insns - 1))));
 
-            /*
-             * packet->insn[def_idx] is the producer
-             * Figure out which type of destination it produces
-             * and the corresponding index in the reginfo
-             */
-            def_opcode = packet->insn[def_idx].opcode;
-            dststr = strstr(opcode_wregs[def_opcode], "Rd");
-            if (dststr) {
-                dststr = strchr(opcode_reginfo[def_opcode], 'd');
-            } else {
-                dststr = strstr(opcode_wregs[def_opcode], "Rx");
-                if (dststr) {
-                    dststr = strchr(opcode_reginfo[def_opcode], 'x');
-                } else {
-                    dststr = strstr(opcode_wregs[def_opcode], "Re");
-                    if (dststr) {
-                        dststr = strchr(opcode_reginfo[def_opcode], 'e');
-                    } else {
-                        dststr = strstr(opcode_wregs[def_opcode], "Ry");
-                        if (dststr) {
-                            dststr = strchr(opcode_reginfo[def_opcode], 'y');
-                        } else {
-                            g_assert_not_reached();
-                        }
-                    }
-                }
-            }
-            g_assert(dststr != NULL);
-
             /* Now patch up the consumer with the register number */
-            dst_idx = dststr - opcode_reginfo[def_opcode];
-            g_assert(packet->insn[def_idx].dest_idx != -1 &&
-                     packet->insn[def_idx].dest_idx == dst_idx);
+            g_assert(packet->insn[def_idx].dest_idx != -1);
+            dst_idx = packet->insn[def_idx].dest_idx;
             packet->insn[i].regno[use_regidx] =
                 packet->insn[def_idx].regno[dst_idx];
             /*
@@ -366,11 +325,7 @@ static void decode_shuffle_for_execution(Packet *packet)
         for (flag = false, i = 0; i < last_insn + 1; i++) {
             int opcode = packet->insn[i].opcode;
 
-            g_assert(packet->insn[i].has_pred_dest ==
-                     (strstr(opcode_wregs[opcode], "Pd4") ||
-                      strstr(opcode_wregs[opcode], "Pe4")));
-            if ((strstr(opcode_wregs[opcode], "Pd4") ||
-                 strstr(opcode_wregs[opcode], "Pe4")) &&
+            if (packet->insn[i].has_pred_dest &&
                 GET_ATTRIB(opcode, A_STORE) == 0) {
                 /* This should be a compare (not a store conditional) */
                 if (flag) {
diff --git a/target/hexagon/mmvec/decode_ext_mmvec.c b/target/hexagon/mmvec/decode_ext_mmvec.c
index c1320406df..f850d0154d 100644
--- a/target/hexagon/mmvec/decode_ext_mmvec.c
+++ b/target/hexagon/mmvec/decode_ext_mmvec.c
@@ -28,21 +28,15 @@ check_new_value(Packet *pkt)
 {
     /* .new value for a MMVector store */
     int i, j;
-    const char *reginfo;
-    const char *destletters;
-    const char *dststr = NULL;
     uint16_t def_opcode;
-    char letter;
 
     for (i = 1; i < pkt->num_insns; i++) {
         uint16_t use_opcode = pkt->insn[i].opcode;
         if (GET_ATTRIB(use_opcode, A_DOTNEWVALUE) &&
             GET_ATTRIB(use_opcode, A_CVI) &&
             GET_ATTRIB(use_opcode, A_STORE)) {
-            int use_regidx = strchr(opcode_reginfo[use_opcode], 's') -
-                opcode_reginfo[use_opcode];
-            g_assert(pkt->insn[i].new_read_idx != -1 &&
-                     pkt->insn[i].new_read_idx == use_regidx);
+            int use_regidx = pkt->insn[i].new_read_idx;
+            g_assert(pkt->insn[i].new_read_idx != -1);
             /*
              * What's encoded at the N-field is the offset to who's producing
              * the value.
@@ -70,33 +64,19 @@ check_new_value(Packet *pkt)
 
             /* def_idx is the index of the producer */
             def_opcode = pkt->insn[def_idx].opcode;
-            reginfo = opcode_reginfo[def_opcode];
-            destletters = "dexy";
-            for (j = 0; (letter = destletters[j]) != 0; j++) {
-                dststr = strchr(reginfo, letter);
-                if (dststr != NULL) {
-                    break;
-                }
-            }
-            if ((dststr == NULL)  && GET_ATTRIB(def_opcode, A_CVI_GATHER)) {
+            if ((pkt->insn[def_idx].dest_idx == -1)  &&
+                GET_ATTRIB(def_opcode, A_CVI_GATHER)) {
                 pkt->insn[i].regno[use_regidx] = def_oreg;
                 pkt->insn[i].new_value_producer_slot = pkt->insn[def_idx].slot;
             } else {
-                if (dststr == NULL) {
+                if (pkt->insn[def_idx].dest_idx == -1) {
                     /* still not there, we have a bad packet */
                     g_assert_not_reached();
                 }
-                g_assert(pkt->insn[def_idx].dest_idx != -1 &&
-                         pkt->insn[def_idx].dest_idx == dststr - reginfo);
-                int def_regnum = pkt->insn[def_idx].regno[dststr - reginfo];
+                int def_regnum =
+                    pkt->insn[def_idx].regno[pkt->insn[def_idx].dest_idx];
                 /* Now patch up the consumer with the register number */
                 pkt->insn[i].regno[use_regidx] = def_regnum ^ def_oreg;
-                /* special case for (Vx,Vy) */
-                dststr = strchr(reginfo, 'y');
-                if (def_oreg && strchr(reginfo, 'x') && dststr) {
-                    def_regnum = pkt->insn[def_idx].regno[dststr - reginfo];
-                    pkt->insn[i].regno[use_regidx] = def_regnum;
-                }
                 /*
                  * We need to remember who produces this value to later
                  * check if it was dynamically cancelled
diff --git a/target/hexagon/opcodes.c b/target/hexagon/opcodes.c
index 1f7f3def38..02ae9cf787 100644
--- a/target/hexagon/opcodes.c
+++ b/target/hexagon/opcodes.c
@@ -36,34 +36,6 @@ const char * const opcode_names[] = {
 #undef OPCODE
 };
 
-const char * const opcode_reginfo[] = {
-#define IMMINFO(TAG, SIGN, SIZE, SHAMT, SIGN2, SIZE2, SHAMT2)    /* nothing */
-#define REGINFO(TAG, REGINFO, RREGS, WREGS) REGINFO,
-#include "op_regs_generated.h.inc"
-    NULL
-#undef REGINFO
-#undef IMMINFO
-};
-
-
-const char * const opcode_rregs[] = {
-#define IMMINFO(TAG, SIGN, SIZE, SHAMT, SIGN2, SIZE2, SHAMT2)    /* nothing */
-#define REGINFO(TAG, REGINFO, RREGS, WREGS) RREGS,
-#include "op_regs_generated.h.inc"
-    NULL
-#undef REGINFO
-#undef IMMINFO
-};
-
-
-const char * const opcode_wregs[] = {
-#define IMMINFO(TAG, SIGN, SIZE, SHAMT, SIGN2, SIZE2, SHAMT2)    /* nothing */
-#define REGINFO(TAG, REGINFO, RREGS, WREGS) WREGS,
-#include "op_regs_generated.h.inc"
-    NULL
-#undef REGINFO
-#undef IMMINFO
-};
 
 const char * const opcode_short_semantics[] = {
 #define DEF_SHORTCODE(TAG, SHORTCODE)              [TAG] = #SHORTCODE,
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v2 7/9] Hexagon (target/hexagon) Remove gen_op_regs.py
  2024-03-07  3:23 [PATCH v2 0/9] Clean up .new decode and scripts Taylor Simpson
                   ` (5 preceding siblings ...)
  2024-03-07  3:23 ` [PATCH v2 6/9] Hexagon (target/hexagon) Remove uses of op_regs_generated.h.inc Taylor Simpson
@ 2024-03-07  3:23 ` Taylor Simpson
  2024-03-29  1:04   ` Brian Cain
  2024-03-07  3:23 ` [PATCH v2 8/9] Hexagon (target/hexagon) Remove gen_shortcode.py Taylor Simpson
  2024-03-07  3:23 ` [PATCH v2 9/9] Hexagon (target/hexagon) Remove hex_common.read_attribs_file Taylor Simpson
  8 siblings, 1 reply; 21+ messages in thread
From: Taylor Simpson @ 2024-03-07  3:23 UTC (permalink / raw)
  To: qemu-devel
  Cc: bcain, quic_mathbern, sidneym, quic_mliebel, richard.henderson,
	philmd, ale, anjo, ltaylorsimpson

Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
---
 target/hexagon/README         |   1 -
 target/hexagon/gen_op_regs.py | 125 ----------------------------------
 target/hexagon/meson.build    |  14 +---
 3 files changed, 2 insertions(+), 138 deletions(-)
 delete mode 100755 target/hexagon/gen_op_regs.py

diff --git a/target/hexagon/README b/target/hexagon/README
index 746ebec378..065c05154d 100644
--- a/target/hexagon/README
+++ b/target/hexagon/README
@@ -43,7 +43,6 @@ target/hexagon/gen_semantics.c.  This step produces
 That file is consumed by the following python scripts to produce the indicated
 header files in <BUILD_DIR>/target/hexagon
         gen_opcodes_def.py              -> opcodes_def_generated.h.inc
-        gen_op_regs.py                  -> op_regs_generated.h.inc
         gen_printinsn.py                -> printinsn_generated.h.inc
         gen_op_attribs.py               -> op_attribs_generated.h.inc
         gen_helper_protos.py            -> helper_protos_generated.h.inc
diff --git a/target/hexagon/gen_op_regs.py b/target/hexagon/gen_op_regs.py
deleted file mode 100755
index 7b7b33895a..0000000000
--- a/target/hexagon/gen_op_regs.py
+++ /dev/null
@@ -1,125 +0,0 @@
-#!/usr/bin/env python3
-
-##
-##  Copyright(c) 2019-2023 Qualcomm Innovation Center, Inc. All Rights Reserved.
-##
-##  This program is free software; you can redistribute it and/or modify
-##  it under the terms of the GNU General Public License as published by
-##  the Free Software Foundation; either version 2 of the License, or
-##  (at your option) any later version.
-##
-##  This program is distributed in the hope that it will be useful,
-##  but WITHOUT ANY WARRANTY; without even the implied warranty of
-##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-##  GNU General Public License for more details.
-##
-##  You should have received a copy of the GNU General Public License
-##  along with this program; if not, see <http://www.gnu.org/licenses/>.
-##
-
-import sys
-import re
-import string
-import hex_common
-
-
-##
-##     Generate the register and immediate operands for each instruction
-##
-def calculate_regid_reg(tag):
-    def letter_inc(x):
-        return chr(ord(x) + 1)
-
-    ordered_implregs = ["SP", "FP", "LR"]
-    srcdst_lett = "X"
-    src_lett = "S"
-    dst_lett = "D"
-    retstr = ""
-    mapdict = {}
-    for reg in ordered_implregs:
-        reg_rd = 0
-        reg_wr = 0
-        if ("A_IMPLICIT_WRITES_" + reg) in hex_common.attribdict[tag]:
-            reg_wr = 1
-        if reg_rd and reg_wr:
-            retstr += srcdst_lett
-            mapdict[srcdst_lett] = reg
-            srcdst_lett = letter_inc(srcdst_lett)
-        elif reg_rd:
-            retstr += src_lett
-            mapdict[src_lett] = reg
-            src_lett = letter_inc(src_lett)
-        elif reg_wr:
-            retstr += dst_lett
-            mapdict[dst_lett] = reg
-            dst_lett = letter_inc(dst_lett)
-    return retstr, mapdict
-
-
-def calculate_regid_letters(tag):
-    retstr, mapdict = calculate_regid_reg(tag)
-    return retstr
-
-
-def strip_reg_prefix(x):
-    y = x.replace("UREG.", "")
-    y = y.replace("MREG.", "")
-    return y.replace("GREG.", "")
-
-
-def main():
-    hex_common.read_semantics_file(sys.argv[1])
-    hex_common.read_attribs_file(sys.argv[2])
-    hex_common.init_registers()
-    tagregs = hex_common.get_tagregs(full=True)
-    tagimms = hex_common.get_tagimms()
-
-    with open(sys.argv[3], "w") as f:
-        for tag in hex_common.tags:
-            regs = tagregs[tag]
-            rregs = []
-            wregs = []
-            regids = ""
-            for regtype, regid, _, numregs in regs:
-                reg = hex_common.get_register(tag, regtype, regid)
-                if reg.is_read():
-                    if regid[0] not in regids:
-                        regids += regid[0]
-                    rregs.append(regtype + regid + numregs)
-                if reg.is_written():
-                    wregs.append(regtype + regid + numregs)
-                    if regid[0] not in regids:
-                        regids += regid[0]
-            for attrib in hex_common.attribdict[tag]:
-                if hex_common.attribinfo[attrib]["rreg"]:
-                    rregs.append(strip_reg_prefix(attribinfo[attrib]["rreg"]))
-                if hex_common.attribinfo[attrib]["wreg"]:
-                    wregs.append(strip_reg_prefix(attribinfo[attrib]["wreg"]))
-            regids += calculate_regid_letters(tag)
-            f.write(
-                f'REGINFO({tag},"{regids}",\t/*RD:*/\t"{",".join(rregs)}",'
-                f'\t/*WR:*/\t"{",".join(wregs)}")\n'
-            )
-
-        for tag in hex_common.tags:
-            imms = tagimms[tag]
-            f.write(f"IMMINFO({tag}")
-            if not imms:
-                f.write(""",'u',0,0,'U',0,0""")
-            for sign, size, shamt in imms:
-                if sign == "r":
-                    sign = "s"
-                if not shamt:
-                    shamt = "0"
-                f.write(f""",'{sign}',{size},{shamt}""")
-            if len(imms) == 1:
-                if sign.isupper():
-                    myu = "u"
-                else:
-                    myu = "U"
-                f.write(f""",'{myu}',0,0""")
-            f.write(")\n")
-
-
-if __name__ == "__main__":
-    main()
diff --git a/target/hexagon/meson.build b/target/hexagon/meson.build
index fb480afc03..b3a0944d3b 100644
--- a/target/hexagon/meson.build
+++ b/target/hexagon/meson.build
@@ -1,5 +1,5 @@
 ##
-##  Copyright(c) 2020-2023 Qualcomm Innovation Center, Inc. All Rights Reserved.
+##  Copyright(c) 2020-2024 Qualcomm Innovation Center, Inc. All Rights Reserved.
 ##
 ##  This program is free software; you can redistribute it and/or modify
 ##  it under the terms of the GNU General Public License as published by
@@ -45,7 +45,6 @@ hexagon_ss.add(semantics_generated)
 #     shortcode_generated.h.inc
 #     tcg_func_table_generated.c.inc
 #     printinsn_generated.h.inc
-#     op_regs_generated.h.inc
 #     op_attribs_generated.h.inc
 #     opcodes_def_generated.h.inc
 #
@@ -76,15 +75,6 @@ printinsn_generated = custom_target(
 )
 hexagon_ss.add(printinsn_generated)
 
-op_regs_generated = custom_target(
-    'op_regs_generated.h.inc',
-    output: 'op_regs_generated.h.inc',
-    depends: [semantics_generated],
-    depend_files: [hex_common_py, attribs_def],
-    command: [python, files('gen_op_regs.py'), semantics_generated, attribs_def, '@OUTPUT@'],
-)
-hexagon_ss.add(op_regs_generated)
-
 op_attribs_generated = custom_target(
     'op_attribs_generated.h.inc',
     output: 'op_attribs_generated.h.inc',
@@ -110,7 +100,7 @@ hexagon_ss.add(opcodes_def_generated)
 #
 gen_dectree_import = executable(
     'gen_dectree_import',
-    'gen_dectree_import.c', opcodes_def_generated, op_regs_generated,
+    'gen_dectree_import.c', opcodes_def_generated,
     native: true, build_by_default: false)
 
 iset_py = custom_target(
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v2 8/9] Hexagon (target/hexagon) Remove gen_shortcode.py
  2024-03-07  3:23 [PATCH v2 0/9] Clean up .new decode and scripts Taylor Simpson
                   ` (6 preceding siblings ...)
  2024-03-07  3:23 ` [PATCH v2 7/9] Hexagon (target/hexagon) Remove gen_op_regs.py Taylor Simpson
@ 2024-03-07  3:23 ` Taylor Simpson
  2024-03-07 10:07   ` Philippe Mathieu-Daudé
  2024-03-29  1:03   ` Brian Cain
  2024-03-07  3:23 ` [PATCH v2 9/9] Hexagon (target/hexagon) Remove hex_common.read_attribs_file Taylor Simpson
  8 siblings, 2 replies; 21+ messages in thread
From: Taylor Simpson @ 2024-03-07  3:23 UTC (permalink / raw)
  To: qemu-devel
  Cc: bcain, quic_mathbern, sidneym, quic_mliebel, richard.henderson,
	philmd, ale, anjo, ltaylorsimpson

This data structure is not used

Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
---
 target/hexagon/opcodes.c        |  7 ----
 target/hexagon/README           |  1 -
 target/hexagon/gen_shortcode.py | 63 ---------------------------------
 target/hexagon/meson.build      | 10 ------
 4 files changed, 81 deletions(-)
 delete mode 100755 target/hexagon/gen_shortcode.py

diff --git a/target/hexagon/opcodes.c b/target/hexagon/opcodes.c
index 02ae9cf787..c8bde2f9e9 100644
--- a/target/hexagon/opcodes.c
+++ b/target/hexagon/opcodes.c
@@ -37,13 +37,6 @@ const char * const opcode_names[] = {
 };
 
 
-const char * const opcode_short_semantics[] = {
-#define DEF_SHORTCODE(TAG, SHORTCODE)              [TAG] = #SHORTCODE,
-#include "shortcode_generated.h.inc"
-#undef DEF_SHORTCODE
-    NULL
-};
-
 DECLARE_BITMAP(opcode_attribs[XX_LAST_OPCODE], A_ZZ_LASTATTRIB);
 
 static void init_attribs(int tag, ...)
diff --git a/target/hexagon/README b/target/hexagon/README
index 065c05154d..65b4fcc0fa 100644
--- a/target/hexagon/README
+++ b/target/hexagon/README
@@ -46,7 +46,6 @@ header files in <BUILD_DIR>/target/hexagon
         gen_printinsn.py                -> printinsn_generated.h.inc
         gen_op_attribs.py               -> op_attribs_generated.h.inc
         gen_helper_protos.py            -> helper_protos_generated.h.inc
-        gen_shortcode.py                -> shortcode_generated.h.inc
         gen_tcg_funcs.py                -> tcg_funcs_generated.c.inc
         gen_tcg_func_table.py           -> tcg_func_table_generated.c.inc
         gen_helper_funcs.py             -> helper_funcs_generated.c.inc
diff --git a/target/hexagon/gen_shortcode.py b/target/hexagon/gen_shortcode.py
deleted file mode 100755
index deb94446c4..0000000000
--- a/target/hexagon/gen_shortcode.py
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/usr/bin/env python3
-
-##
-##  Copyright(c) 2019-2023 Qualcomm Innovation Center, Inc. All Rights Reserved.
-##
-##  This program is free software; you can redistribute it and/or modify
-##  it under the terms of the GNU General Public License as published by
-##  the Free Software Foundation; either version 2 of the License, or
-##  (at your option) any later version.
-##
-##  This program is distributed in the hope that it will be useful,
-##  but WITHOUT ANY WARRANTY; without even the implied warranty of
-##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-##  GNU General Public License for more details.
-##
-##  You should have received a copy of the GNU General Public License
-##  along with this program; if not, see <http://www.gnu.org/licenses/>.
-##
-
-import sys
-import re
-import string
-import hex_common
-
-
-def gen_shortcode(f, tag):
-    f.write(f"DEF_SHORTCODE({tag}, {hex_common.semdict[tag]})\n")
-
-
-def main():
-    hex_common.read_semantics_file(sys.argv[1])
-    hex_common.read_attribs_file(sys.argv[2])
-    hex_common.calculate_attribs()
-    tagregs = hex_common.get_tagregs()
-    tagimms = hex_common.get_tagimms()
-
-    with open(sys.argv[3], "w") as f:
-        f.write("#ifndef DEF_SHORTCODE\n")
-        f.write("#define DEF_SHORTCODE(TAG,SHORTCODE)    /* Nothing */\n")
-        f.write("#endif\n")
-
-        for tag in hex_common.tags:
-            ## Skip the priv instructions
-            if "A_PRIV" in hex_common.attribdict[tag]:
-                continue
-            ## Skip the guest instructions
-            if "A_GUEST" in hex_common.attribdict[tag]:
-                continue
-            ## Skip the diag instructions
-            if tag == "Y6_diag":
-                continue
-            if tag == "Y6_diag0":
-                continue
-            if tag == "Y6_diag1":
-                continue
-
-            gen_shortcode(f, tag)
-
-        f.write("#undef DEF_SHORTCODE\n")
-
-
-if __name__ == "__main__":
-    main()
diff --git a/target/hexagon/meson.build b/target/hexagon/meson.build
index b3a0944d3b..988e7489ba 100644
--- a/target/hexagon/meson.build
+++ b/target/hexagon/meson.build
@@ -42,21 +42,11 @@ hexagon_ss.add(semantics_generated)
 #
 # Step 2
 # We use Python scripts to generate the following files
-#     shortcode_generated.h.inc
 #     tcg_func_table_generated.c.inc
 #     printinsn_generated.h.inc
 #     op_attribs_generated.h.inc
 #     opcodes_def_generated.h.inc
 #
-shortcode_generated = custom_target(
-    'shortcode_generated.h.inc',
-    output: 'shortcode_generated.h.inc',
-    depends: [semantics_generated],
-    depend_files: [hex_common_py, attribs_def],
-    command: [python, files('gen_shortcode.py'), semantics_generated, attribs_def, '@OUTPUT@'],
-)
-hexagon_ss.add(shortcode_generated)
-
 tcg_func_table_generated = custom_target(
     'tcg_func_table_generated.c.inc',
     output: 'tcg_func_table_generated.c.inc',
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH v2 9/9] Hexagon (target/hexagon) Remove hex_common.read_attribs_file
  2024-03-07  3:23 [PATCH v2 0/9] Clean up .new decode and scripts Taylor Simpson
                   ` (7 preceding siblings ...)
  2024-03-07  3:23 ` [PATCH v2 8/9] Hexagon (target/hexagon) Remove gen_shortcode.py Taylor Simpson
@ 2024-03-07  3:23 ` Taylor Simpson
  2024-03-07 10:09   ` Philippe Mathieu-Daudé
  2024-03-29  1:03   ` Brian Cain
  8 siblings, 2 replies; 21+ messages in thread
From: Taylor Simpson @ 2024-03-07  3:23 UTC (permalink / raw)
  To: qemu-devel
  Cc: bcain, quic_mathbern, sidneym, quic_mliebel, richard.henderson,
	philmd, ale, anjo, ltaylorsimpson

The attribinfo data structure is not used
Adjust the command-line arguments to the python scripts
Add hex_common.read_common_files for TCG/helper generation scripts

Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
---
 target/hexagon/gen_analyze_funcs.py     | 21 ++-------------
 target/hexagon/gen_helper_funcs.py      | 21 ++-------------
 target/hexagon/gen_helper_protos.py     | 21 ++-------------
 target/hexagon/gen_idef_parser_funcs.py |  5 ++--
 target/hexagon/gen_op_attribs.py        |  5 ++--
 target/hexagon/gen_opcodes_def.py       |  4 +--
 target/hexagon/gen_printinsn.py         |  5 ++--
 target/hexagon/gen_tcg_func_table.py    |  5 ++--
 target/hexagon/gen_tcg_funcs.py         | 21 ++-------------
 target/hexagon/hex_common.py            | 35 +++++++++++++++----------
 target/hexagon/meson.build              | 31 +++++++++++-----------
 11 files changed, 54 insertions(+), 120 deletions(-)

diff --git a/target/hexagon/gen_analyze_funcs.py b/target/hexagon/gen_analyze_funcs.py
index a9af666cef..b73b4e2349 100755
--- a/target/hexagon/gen_analyze_funcs.py
+++ b/target/hexagon/gen_analyze_funcs.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 ##
-##  Copyright(c) 2022-2023 Qualcomm Innovation Center, Inc. All Rights Reserved.
+##  Copyright(c) 2022-2024 Qualcomm Innovation Center, Inc. All Rights Reserved.
 ##
 ##  This program is free software; you can redistribute it and/or modify
 ##  it under the terms of the GNU General Public License as published by
@@ -67,24 +67,7 @@ def gen_analyze_func(f, tag, regs, imms):
 
 
 def main():
-    hex_common.read_semantics_file(sys.argv[1])
-    hex_common.read_attribs_file(sys.argv[2])
-    hex_common.read_overrides_file(sys.argv[3])
-    hex_common.read_overrides_file(sys.argv[4])
-    ## Whether or not idef-parser is enabled is
-    ## determined by the number of arguments to
-    ## this script:
-    ##
-    ##   5 args. -> not enabled,
-    ##   6 args. -> idef-parser enabled.
-    ##
-    ## The 6:th arg. then holds a list of the successfully
-    ## parsed instructions.
-    is_idef_parser_enabled = len(sys.argv) > 6
-    if is_idef_parser_enabled:
-        hex_common.read_idef_parser_enabled_file(sys.argv[5])
-    hex_common.calculate_attribs()
-    hex_common.init_registers()
+    hex_common.read_common_files()
     tagregs = hex_common.get_tagregs()
     tagimms = hex_common.get_tagimms()
 
diff --git a/target/hexagon/gen_helper_funcs.py b/target/hexagon/gen_helper_funcs.py
index 9cc3d69c49..e9685bff2f 100755
--- a/target/hexagon/gen_helper_funcs.py
+++ b/target/hexagon/gen_helper_funcs.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 ##
-##  Copyright(c) 2019-2023 Qualcomm Innovation Center, Inc. All Rights Reserved.
+##  Copyright(c) 2019-2024 Qualcomm Innovation Center, Inc. All Rights Reserved.
 ##
 ##  This program is free software; you can redistribute it and/or modify
 ##  it under the terms of the GNU General Public License as published by
@@ -102,24 +102,7 @@ def gen_helper_function(f, tag, tagregs, tagimms):
 
 
 def main():
-    hex_common.read_semantics_file(sys.argv[1])
-    hex_common.read_attribs_file(sys.argv[2])
-    hex_common.read_overrides_file(sys.argv[3])
-    hex_common.read_overrides_file(sys.argv[4])
-    ## Whether or not idef-parser is enabled is
-    ## determined by the number of arguments to
-    ## this script:
-    ##
-    ##   5 args. -> not enabled,
-    ##   6 args. -> idef-parser enabled.
-    ##
-    ## The 6:th arg. then holds a list of the successfully
-    ## parsed instructions.
-    is_idef_parser_enabled = len(sys.argv) > 6
-    if is_idef_parser_enabled:
-        hex_common.read_idef_parser_enabled_file(sys.argv[5])
-    hex_common.calculate_attribs()
-    hex_common.init_registers()
+    hex_common.read_common_files()
     tagregs = hex_common.get_tagregs()
     tagimms = hex_common.get_tagimms()
 
diff --git a/target/hexagon/gen_helper_protos.py b/target/hexagon/gen_helper_protos.py
index c82b0f54e4..4cc72a1581 100755
--- a/target/hexagon/gen_helper_protos.py
+++ b/target/hexagon/gen_helper_protos.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 ##
-##  Copyright(c) 2019-2023 Qualcomm Innovation Center, Inc. All Rights Reserved.
+##  Copyright(c) 2019-2024 Qualcomm Innovation Center, Inc. All Rights Reserved.
 ##
 ##  This program is free software; you can redistribute it and/or modify
 ##  it under the terms of the GNU General Public License as published by
@@ -44,24 +44,7 @@ def gen_helper_prototype(f, tag, tagregs, tagimms):
 
 
 def main():
-    hex_common.read_semantics_file(sys.argv[1])
-    hex_common.read_attribs_file(sys.argv[2])
-    hex_common.read_overrides_file(sys.argv[3])
-    hex_common.read_overrides_file(sys.argv[4])
-    ## Whether or not idef-parser is enabled is
-    ## determined by the number of arguments to
-    ## this script:
-    ##
-    ##   5 args. -> not enabled,
-    ##   6 args. -> idef-parser enabled.
-    ##
-    ## The 6:th arg. then holds a list of the successfully
-    ## parsed instructions.
-    is_idef_parser_enabled = len(sys.argv) > 6
-    if is_idef_parser_enabled:
-        hex_common.read_idef_parser_enabled_file(sys.argv[5])
-    hex_common.calculate_attribs()
-    hex_common.init_registers()
+    hex_common.read_common_files()
     tagregs = hex_common.get_tagregs()
     tagimms = hex_common.get_tagimms()
 
diff --git a/target/hexagon/gen_idef_parser_funcs.py b/target/hexagon/gen_idef_parser_funcs.py
index 550a48cb7b..eb494abba8 100644
--- a/target/hexagon/gen_idef_parser_funcs.py
+++ b/target/hexagon/gen_idef_parser_funcs.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 ##
-##  Copyright(c) 2019-2023 rev.ng Labs Srl. All Rights Reserved.
+##  Copyright(c) 2019-2024 rev.ng Labs Srl. All Rights Reserved.
 ##
 ##  This program is free software; you can redistribute it and/or modify
 ##  it under the terms of the GNU General Public License as published by
@@ -44,13 +44,12 @@
 ##
 def main():
     hex_common.read_semantics_file(sys.argv[1])
-    hex_common.read_attribs_file(sys.argv[2])
     hex_common.calculate_attribs()
     hex_common.init_registers()
     tagregs = hex_common.get_tagregs()
     tagimms = hex_common.get_tagimms()
 
-    with open(sys.argv[3], "w") as f:
+    with open(sys.argv[-1], "w") as f:
         f.write('#include "macros.inc"\n\n')
 
         for tag in hex_common.tags:
diff --git a/target/hexagon/gen_op_attribs.py b/target/hexagon/gen_op_attribs.py
index 41074b8573..99448220da 100755
--- a/target/hexagon/gen_op_attribs.py
+++ b/target/hexagon/gen_op_attribs.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 ##
-##  Copyright(c) 2019-2023 Qualcomm Innovation Center, Inc. All Rights Reserved.
+##  Copyright(c) 2019-2024 Qualcomm Innovation Center, Inc. All Rights Reserved.
 ##
 ##  This program is free software; you can redistribute it and/or modify
 ##  it under the terms of the GNU General Public License as published by
@@ -25,13 +25,12 @@
 
 def main():
     hex_common.read_semantics_file(sys.argv[1])
-    hex_common.read_attribs_file(sys.argv[2])
     hex_common.calculate_attribs()
 
     ##
     ##     Generate all the attributes associated with each instruction
     ##
-    with open(sys.argv[3], "w") as f:
+    with open(sys.argv[-1], "w") as f:
         for tag in hex_common.tags:
             f.write(
                 f"OP_ATTRIB({tag},ATTRIBS("
diff --git a/target/hexagon/gen_opcodes_def.py b/target/hexagon/gen_opcodes_def.py
index cddd868fe3..536f0eb68a 100755
--- a/target/hexagon/gen_opcodes_def.py
+++ b/target/hexagon/gen_opcodes_def.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 ##
-##  Copyright(c) 2019-2023 Qualcomm Innovation Center, Inc. All Rights Reserved.
+##  Copyright(c) 2019-2024 Qualcomm Innovation Center, Inc. All Rights Reserved.
 ##
 ##  This program is free software; you can redistribute it and/or modify
 ##  it under the terms of the GNU General Public License as published by
@@ -29,7 +29,7 @@ def main():
     ##
     ##     Generate a list of all the opcodes
     ##
-    with open(sys.argv[3], "w") as f:
+    with open(sys.argv[-1], "w") as f:
         for tag in hex_common.tags:
             f.write(f"OPCODE({tag}),\n")
 
diff --git a/target/hexagon/gen_printinsn.py b/target/hexagon/gen_printinsn.py
index e570bd7c6a..8bf4d0985c 100755
--- a/target/hexagon/gen_printinsn.py
+++ b/target/hexagon/gen_printinsn.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 ##
-##  Copyright(c) 2019-2023 Qualcomm Innovation Center, Inc. All Rights Reserved.
+##  Copyright(c) 2019-2024 Qualcomm Innovation Center, Inc. All Rights Reserved.
 ##
 ##  This program is free software; you can redistribute it and/or modify
 ##  it under the terms of the GNU General Public License as published by
@@ -97,11 +97,10 @@ def spacify(s):
 
 def main():
     hex_common.read_semantics_file(sys.argv[1])
-    hex_common.read_attribs_file(sys.argv[2])
 
     immext_casere = re.compile(r"IMMEXT\(([A-Za-z])")
 
-    with open(sys.argv[3], "w") as f:
+    with open(sys.argv[-1], "w") as f:
         for tag in hex_common.tags:
             if not hex_common.behdict[tag]:
                 continue
diff --git a/target/hexagon/gen_tcg_func_table.py b/target/hexagon/gen_tcg_func_table.py
index f998ef0992..978ac1819b 100755
--- a/target/hexagon/gen_tcg_func_table.py
+++ b/target/hexagon/gen_tcg_func_table.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 ##
-##  Copyright(c) 2019-2023 Qualcomm Innovation Center, Inc. All Rights Reserved.
+##  Copyright(c) 2019-2024 Qualcomm Innovation Center, Inc. All Rights Reserved.
 ##
 ##  This program is free software; you can redistribute it and/or modify
 ##  it under the terms of the GNU General Public License as published by
@@ -25,12 +25,11 @@
 
 def main():
     hex_common.read_semantics_file(sys.argv[1])
-    hex_common.read_attribs_file(sys.argv[2])
     hex_common.calculate_attribs()
     tagregs = hex_common.get_tagregs()
     tagimms = hex_common.get_tagimms()
 
-    with open(sys.argv[3], "w") as f:
+    with open(sys.argv[-1], "w") as f:
         f.write("#ifndef HEXAGON_FUNC_TABLE_H\n")
         f.write("#define HEXAGON_FUNC_TABLE_H\n\n")
 
diff --git a/target/hexagon/gen_tcg_funcs.py b/target/hexagon/gen_tcg_funcs.py
index 3d8e3cb6a2..05aa0a7855 100755
--- a/target/hexagon/gen_tcg_funcs.py
+++ b/target/hexagon/gen_tcg_funcs.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 ##
-##  Copyright(c) 2019-2023 Qualcomm Innovation Center, Inc. All Rights Reserved.
+##  Copyright(c) 2019-2024 Qualcomm Innovation Center, Inc. All Rights Reserved.
 ##
 ##  This program is free software; you can redistribute it and/or modify
 ##  it under the terms of the GNU General Public License as published by
@@ -108,24 +108,7 @@ def gen_def_tcg_func(f, tag, tagregs, tagimms):
 
 
 def main():
-    hex_common.read_semantics_file(sys.argv[1])
-    hex_common.read_attribs_file(sys.argv[2])
-    hex_common.read_overrides_file(sys.argv[3])
-    hex_common.read_overrides_file(sys.argv[4])
-    hex_common.calculate_attribs()
-    hex_common.init_registers()
-    ## Whether or not idef-parser is enabled is
-    ## determined by the number of arguments to
-    ## this script:
-    ##
-    ##   5 args. -> not enabled,
-    ##   6 args. -> idef-parser enabled.
-    ##
-    ## The 6:th arg. then holds a list of the successfully
-    ## parsed instructions.
-    is_idef_parser_enabled = len(sys.argv) > 6
-    if is_idef_parser_enabled:
-        hex_common.read_idef_parser_enabled_file(sys.argv[5])
+    is_idef_parser_enabled = hex_common.read_common_files()
     tagregs = hex_common.get_tagregs()
     tagimms = hex_common.get_tagimms()
 
diff --git a/target/hexagon/hex_common.py b/target/hexagon/hex_common.py
index 4bacef223f..43ca78b489 100755
--- a/target/hexagon/hex_common.py
+++ b/target/hexagon/hex_common.py
@@ -26,7 +26,6 @@
 semdict = {}  # tag -> semantics
 attribdict = {}  # tag -> attributes
 macros = {}  # macro -> macro information...
-attribinfo = {}  # Register information and misc
 registers = {}  # register -> register functions
 new_registers = {}
 tags = []  # list of all tags
@@ -257,19 +256,6 @@ def read_semantics_file(name):
                 eval_line = ""
 
 
-def read_attribs_file(name):
-    attribre = re.compile(
-        r"DEF_ATTRIB\(([A-Za-z0-9_]+), ([^,]*), "
-        + r'"([A-Za-z0-9_\.]*)", "([A-Za-z0-9_\.]*)"\)'
-    )
-    for line in open(name, "rt").readlines():
-        if not attribre.match(line):
-            continue
-        (attrib_base, descr, rreg, wreg) = attribre.findall(line)[0]
-        attrib_base = "A_" + attrib_base
-        attribinfo[attrib_base] = {"rreg": rreg, "wreg": wreg, "descr": descr}
-
-
 def read_overrides_file(name):
     overridere = re.compile(r"#define fGEN_TCG_([A-Za-z0-9_]+)\(.*")
     for line in open(name, "rt").readlines():
@@ -1143,3 +1129,24 @@ def helper_args(tag, regs, imms):
             "uint32_t part1"
         ))
     return args
+
+
+def read_common_files():
+    read_semantics_file(sys.argv[1])
+    read_overrides_file(sys.argv[2])
+    read_overrides_file(sys.argv[3])
+    ## Whether or not idef-parser is enabled is
+    ## determined by the number of arguments to
+    ## this script:
+    ##
+    ##   4 args. -> not enabled,
+    ##   5 args. -> idef-parser enabled.
+    ##
+    ## The 5:th arg. then holds a list of the successfully
+    ## parsed instructions.
+    is_idef_parser_enabled = len(sys.argv) > 5
+    if is_idef_parser_enabled:
+        read_idef_parser_enabled_file(sys.argv[4])
+    calculate_attribs()
+    init_registers()
+    return is_idef_parser_enabled
diff --git a/target/hexagon/meson.build b/target/hexagon/meson.build
index 988e7489ba..b0b253aa6b 100644
--- a/target/hexagon/meson.build
+++ b/target/hexagon/meson.build
@@ -18,7 +18,6 @@
 hexagon_ss = ss.source_set()
 
 hex_common_py = 'hex_common.py'
-attribs_def = meson.current_source_dir() / 'attribs_def.h.inc'
 gen_tcg_h = meson.current_source_dir() / 'gen_tcg.h'
 gen_tcg_hvx_h = meson.current_source_dir() / 'gen_tcg_hvx.h'
 idef_parser_dir = meson.current_source_dir() / 'idef-parser'
@@ -51,8 +50,8 @@ tcg_func_table_generated = custom_target(
     'tcg_func_table_generated.c.inc',
     output: 'tcg_func_table_generated.c.inc',
     depends: [semantics_generated],
-    depend_files: [hex_common_py, attribs_def],
-    command: [python, files('gen_tcg_func_table.py'), semantics_generated, attribs_def, '@OUTPUT@'],
+    depend_files: [hex_common_py],
+    command: [python, files('gen_tcg_func_table.py'), semantics_generated, '@OUTPUT@'],
 )
 hexagon_ss.add(tcg_func_table_generated)
 
@@ -60,8 +59,8 @@ printinsn_generated = custom_target(
     'printinsn_generated.h.inc',
     output: 'printinsn_generated.h.inc',
     depends: [semantics_generated],
-    depend_files: [hex_common_py, attribs_def],
-    command: [python, files('gen_printinsn.py'), semantics_generated, attribs_def, '@OUTPUT@'],
+    depend_files: [hex_common_py],
+    command: [python, files('gen_printinsn.py'), semantics_generated, '@OUTPUT@'],
 )
 hexagon_ss.add(printinsn_generated)
 
@@ -69,8 +68,8 @@ op_attribs_generated = custom_target(
     'op_attribs_generated.h.inc',
     output: 'op_attribs_generated.h.inc',
     depends: [semantics_generated],
-    depend_files: [hex_common_py, attribs_def],
-    command: [python, files('gen_op_attribs.py'), semantics_generated, attribs_def, '@OUTPUT@'],
+    depend_files: [hex_common_py],
+    command: [python, files('gen_op_attribs.py'), semantics_generated, '@OUTPUT@'],
 )
 hexagon_ss.add(op_attribs_generated)
 
@@ -78,8 +77,8 @@ opcodes_def_generated = custom_target(
     'opcodes_def_generated.h.inc',
     output: 'opcodes_def_generated.h.inc',
     depends: [semantics_generated],
-    depend_files: [hex_common_py, attribs_def],
-    command: [python, files('gen_opcodes_def.py'), semantics_generated, attribs_def, '@OUTPUT@'],
+    depend_files: [hex_common_py],
+    command: [python, files('gen_opcodes_def.py'), semantics_generated, '@OUTPUT@'],
 )
 hexagon_ss.add(opcodes_def_generated)
 
@@ -278,7 +277,7 @@ if idef_parser_enabled and 'hexagon-linux-user' in target_dirs
         output: 'idef_parser_input.h.inc',
         depends: [semantics_generated],
         depend_files: [hex_common_py],
-        command: [python, files('gen_idef_parser_funcs.py'), semantics_generated, attribs_def, '@OUTPUT@'],
+        command: [python, files('gen_idef_parser_funcs.py'), semantics_generated, '@OUTPUT@'],
     )
 
     preprocessed_idef_parser_input_generated = custom_target(
@@ -347,12 +346,12 @@ if idef_parser_enabled and 'hexagon-linux-user' in target_dirs
     # Setup input and dependencies for the next step, this depends on whether or
     # not idef-parser is enabled
     helper_dep = [semantics_generated, idef_generated_tcg_c, idef_generated_tcg]
-    helper_in = [semantics_generated, attribs_def, gen_tcg_h, gen_tcg_hvx_h, idef_generated_list]
+    helper_in = [semantics_generated, gen_tcg_h, gen_tcg_hvx_h, idef_generated_list]
 else
     # Setup input and dependencies for the next step, this depends on whether or
     # not idef-parser is enabled
     helper_dep = [semantics_generated]
-    helper_in = [semantics_generated, attribs_def, gen_tcg_h, gen_tcg_hvx_h]
+    helper_in = [semantics_generated, gen_tcg_h, gen_tcg_hvx_h]
 endif
 
 #
@@ -366,7 +365,7 @@ helper_protos_generated = custom_target(
     'helper_protos_generated.h.inc',
     output: 'helper_protos_generated.h.inc',
     depends: helper_dep,
-    depend_files: [hex_common_py, attribs_def, gen_tcg_h, gen_tcg_hvx_h],
+    depend_files: [hex_common_py, gen_tcg_h, gen_tcg_hvx_h],
     command: [python, files('gen_helper_protos.py'), helper_in, '@OUTPUT@'],
 )
 hexagon_ss.add(helper_protos_generated)
@@ -375,7 +374,7 @@ helper_funcs_generated = custom_target(
     'helper_funcs_generated.c.inc',
     output: 'helper_funcs_generated.c.inc',
     depends: helper_dep,
-    depend_files: [hex_common_py, attribs_def, gen_tcg_h, gen_tcg_hvx_h],
+    depend_files: [hex_common_py, gen_tcg_h, gen_tcg_hvx_h],
     command: [python, files('gen_helper_funcs.py'), helper_in, '@OUTPUT@'],
 )
 hexagon_ss.add(helper_funcs_generated)
@@ -384,7 +383,7 @@ tcg_funcs_generated = custom_target(
     'tcg_funcs_generated.c.inc',
     output: 'tcg_funcs_generated.c.inc',
     depends: helper_dep,
-    depend_files: [hex_common_py, attribs_def, gen_tcg_h, gen_tcg_hvx_h],
+    depend_files: [hex_common_py, gen_tcg_h, gen_tcg_hvx_h],
     command: [python, files('gen_tcg_funcs.py'), helper_in, '@OUTPUT@'],
 )
 hexagon_ss.add(tcg_funcs_generated)
@@ -393,7 +392,7 @@ analyze_funcs_generated = custom_target(
     'analyze_funcs_generated.c.inc',
     output: 'analyze_funcs_generated.c.inc',
     depends: helper_dep,
-    depend_files: [hex_common_py, attribs_def, gen_tcg_h, gen_tcg_hvx_h],
+    depend_files: [hex_common_py, gen_tcg_h, gen_tcg_hvx_h],
     command: [python, files('gen_analyze_funcs.py'), helper_in, '@OUTPUT@'],
 )
 hexagon_ss.add(analyze_funcs_generated)
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* Re: [PATCH v2 8/9] Hexagon (target/hexagon) Remove gen_shortcode.py
  2024-03-07  3:23 ` [PATCH v2 8/9] Hexagon (target/hexagon) Remove gen_shortcode.py Taylor Simpson
@ 2024-03-07 10:07   ` Philippe Mathieu-Daudé
  2024-03-29  1:03   ` Brian Cain
  1 sibling, 0 replies; 21+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-03-07 10:07 UTC (permalink / raw)
  To: Taylor Simpson, qemu-devel
  Cc: bcain, quic_mathbern, sidneym, quic_mliebel, richard.henderson,
	ale, anjo

On 7/3/24 04:23, Taylor Simpson wrote:
> This data structure is not used
> 
> Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
> ---
>   target/hexagon/opcodes.c        |  7 ----
>   target/hexagon/README           |  1 -
>   target/hexagon/gen_shortcode.py | 63 ---------------------------------
>   target/hexagon/meson.build      | 10 ------
>   4 files changed, 81 deletions(-)
>   delete mode 100755 target/hexagon/gen_shortcode.py

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>



^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH v2 9/9] Hexagon (target/hexagon) Remove hex_common.read_attribs_file
  2024-03-07  3:23 ` [PATCH v2 9/9] Hexagon (target/hexagon) Remove hex_common.read_attribs_file Taylor Simpson
@ 2024-03-07 10:09   ` Philippe Mathieu-Daudé
  2024-03-29  1:03   ` Brian Cain
  1 sibling, 0 replies; 21+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-03-07 10:09 UTC (permalink / raw)
  To: Taylor Simpson, qemu-devel
  Cc: bcain, quic_mathbern, sidneym, quic_mliebel, richard.henderson,
	ale, anjo

On 7/3/24 04:23, Taylor Simpson wrote:
> The attribinfo data structure is not used
> Adjust the command-line arguments to the python scripts
> Add hex_common.read_common_files for TCG/helper generation scripts
> 
> Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
> ---
>   target/hexagon/gen_analyze_funcs.py     | 21 ++-------------
>   target/hexagon/gen_helper_funcs.py      | 21 ++-------------
>   target/hexagon/gen_helper_protos.py     | 21 ++-------------
>   target/hexagon/gen_idef_parser_funcs.py |  5 ++--
>   target/hexagon/gen_op_attribs.py        |  5 ++--
>   target/hexagon/gen_opcodes_def.py       |  4 +--
>   target/hexagon/gen_printinsn.py         |  5 ++--
>   target/hexagon/gen_tcg_func_table.py    |  5 ++--
>   target/hexagon/gen_tcg_funcs.py         | 21 ++-------------
>   target/hexagon/hex_common.py            | 35 +++++++++++++++----------
>   target/hexagon/meson.build              | 31 +++++++++++-----------
>   11 files changed, 54 insertions(+), 120 deletions(-)

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>



^ permalink raw reply	[flat|nested] 21+ messages in thread

* RE: [PATCH v2 9/9] Hexagon (target/hexagon) Remove hex_common.read_attribs_file
  2024-03-07  3:23 ` [PATCH v2 9/9] Hexagon (target/hexagon) Remove hex_common.read_attribs_file Taylor Simpson
  2024-03-07 10:09   ` Philippe Mathieu-Daudé
@ 2024-03-29  1:03   ` Brian Cain
  1 sibling, 0 replies; 21+ messages in thread
From: Brian Cain @ 2024-03-29  1:03 UTC (permalink / raw)
  To: Taylor Simpson, qemu-devel
  Cc: Matheus Bernardino (QUIC), Sid Manning, Marco Liebel (QUIC),
	richard.henderson, philmd, ale, anjo



> -----Original Message-----
> From: Taylor Simpson <ltaylorsimpson@gmail.com>
> Sent: Wednesday, March 6, 2024 9:23 PM
> To: qemu-devel@nongnu.org
> Cc: Brian Cain <bcain@quicinc.com>; Matheus Bernardino (QUIC)
> <quic_mathbern@quicinc.com>; Sid Manning <sidneym@quicinc.com>;
> Marco Liebel (QUIC) <quic_mliebel@quicinc.com>;
> richard.henderson@linaro.org; philmd@linaro.org; ale@rev.ng; anjo@rev.ng;
> ltaylorsimpson@gmail.com
> Subject: [PATCH v2 9/9] Hexagon (target/hexagon) Remove
> hex_common.read_attribs_file
> 
> WARNING: This email originated from outside of Qualcomm. Please be wary
> of any links or attachments, and do not enable macros.
> 
> The attribinfo data structure is not used
> Adjust the command-line arguments to the python scripts
> Add hex_common.read_common_files for TCG/helper generation scripts
> 
> Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
> ---

Reviewed-by: Brian Cain <bcain@quicinc.com>

>  target/hexagon/gen_analyze_funcs.py     | 21 ++-------------
>  target/hexagon/gen_helper_funcs.py      | 21 ++-------------
>  target/hexagon/gen_helper_protos.py     | 21 ++-------------
>  target/hexagon/gen_idef_parser_funcs.py |  5 ++--
>  target/hexagon/gen_op_attribs.py        |  5 ++--
>  target/hexagon/gen_opcodes_def.py       |  4 +--
>  target/hexagon/gen_printinsn.py         |  5 ++--
>  target/hexagon/gen_tcg_func_table.py    |  5 ++--
>  target/hexagon/gen_tcg_funcs.py         | 21 ++-------------
>  target/hexagon/hex_common.py            | 35 +++++++++++++++----------
>  target/hexagon/meson.build              | 31 +++++++++++-----------
>  11 files changed, 54 insertions(+), 120 deletions(-)
> 
> diff --git a/target/hexagon/gen_analyze_funcs.py
> b/target/hexagon/gen_analyze_funcs.py
> index a9af666cef..b73b4e2349 100755
> --- a/target/hexagon/gen_analyze_funcs.py
> +++ b/target/hexagon/gen_analyze_funcs.py
> @@ -1,7 +1,7 @@
>  #!/usr/bin/env python3
> 
>  ##
> -##  Copyright(c) 2022-2023 Qualcomm Innovation Center, Inc. All Rights
> Reserved.
> +##  Copyright(c) 2022-2024 Qualcomm Innovation Center, Inc. All Rights
> Reserved.
>  ##
>  ##  This program is free software; you can redistribute it and/or modify
>  ##  it under the terms of the GNU General Public License as published by
> @@ -67,24 +67,7 @@ def gen_analyze_func(f, tag, regs, imms):
> 
> 
>  def main():
> -    hex_common.read_semantics_file(sys.argv[1])
> -    hex_common.read_attribs_file(sys.argv[2])
> -    hex_common.read_overrides_file(sys.argv[3])
> -    hex_common.read_overrides_file(sys.argv[4])
> -    ## Whether or not idef-parser is enabled is
> -    ## determined by the number of arguments to
> -    ## this script:
> -    ##
> -    ##   5 args. -> not enabled,
> -    ##   6 args. -> idef-parser enabled.
> -    ##
> -    ## The 6:th arg. then holds a list of the successfully
> -    ## parsed instructions.
> -    is_idef_parser_enabled = len(sys.argv) > 6
> -    if is_idef_parser_enabled:
> -        hex_common.read_idef_parser_enabled_file(sys.argv[5])
> -    hex_common.calculate_attribs()
> -    hex_common.init_registers()
> +    hex_common.read_common_files()
>      tagregs = hex_common.get_tagregs()
>      tagimms = hex_common.get_tagimms()
> 
> diff --git a/target/hexagon/gen_helper_funcs.py
> b/target/hexagon/gen_helper_funcs.py
> index 9cc3d69c49..e9685bff2f 100755
> --- a/target/hexagon/gen_helper_funcs.py
> +++ b/target/hexagon/gen_helper_funcs.py
> @@ -1,7 +1,7 @@
>  #!/usr/bin/env python3
> 
>  ##
> -##  Copyright(c) 2019-2023 Qualcomm Innovation Center, Inc. All Rights
> Reserved.
> +##  Copyright(c) 2019-2024 Qualcomm Innovation Center, Inc. All Rights
> Reserved.
>  ##
>  ##  This program is free software; you can redistribute it and/or modify
>  ##  it under the terms of the GNU General Public License as published by
> @@ -102,24 +102,7 @@ def gen_helper_function(f, tag, tagregs, tagimms):
> 
> 
>  def main():
> -    hex_common.read_semantics_file(sys.argv[1])
> -    hex_common.read_attribs_file(sys.argv[2])
> -    hex_common.read_overrides_file(sys.argv[3])
> -    hex_common.read_overrides_file(sys.argv[4])
> -    ## Whether or not idef-parser is enabled is
> -    ## determined by the number of arguments to
> -    ## this script:
> -    ##
> -    ##   5 args. -> not enabled,
> -    ##   6 args. -> idef-parser enabled.
> -    ##
> -    ## The 6:th arg. then holds a list of the successfully
> -    ## parsed instructions.
> -    is_idef_parser_enabled = len(sys.argv) > 6
> -    if is_idef_parser_enabled:
> -        hex_common.read_idef_parser_enabled_file(sys.argv[5])
> -    hex_common.calculate_attribs()
> -    hex_common.init_registers()
> +    hex_common.read_common_files()
>      tagregs = hex_common.get_tagregs()
>      tagimms = hex_common.get_tagimms()
> 
> diff --git a/target/hexagon/gen_helper_protos.py
> b/target/hexagon/gen_helper_protos.py
> index c82b0f54e4..4cc72a1581 100755
> --- a/target/hexagon/gen_helper_protos.py
> +++ b/target/hexagon/gen_helper_protos.py
> @@ -1,7 +1,7 @@
>  #!/usr/bin/env python3
> 
>  ##
> -##  Copyright(c) 2019-2023 Qualcomm Innovation Center, Inc. All Rights
> Reserved.
> +##  Copyright(c) 2019-2024 Qualcomm Innovation Center, Inc. All Rights
> Reserved.
>  ##
>  ##  This program is free software; you can redistribute it and/or modify
>  ##  it under the terms of the GNU General Public License as published by
> @@ -44,24 +44,7 @@ def gen_helper_prototype(f, tag, tagregs, tagimms):
> 
> 
>  def main():
> -    hex_common.read_semantics_file(sys.argv[1])
> -    hex_common.read_attribs_file(sys.argv[2])
> -    hex_common.read_overrides_file(sys.argv[3])
> -    hex_common.read_overrides_file(sys.argv[4])
> -    ## Whether or not idef-parser is enabled is
> -    ## determined by the number of arguments to
> -    ## this script:
> -    ##
> -    ##   5 args. -> not enabled,
> -    ##   6 args. -> idef-parser enabled.
> -    ##
> -    ## The 6:th arg. then holds a list of the successfully
> -    ## parsed instructions.
> -    is_idef_parser_enabled = len(sys.argv) > 6
> -    if is_idef_parser_enabled:
> -        hex_common.read_idef_parser_enabled_file(sys.argv[5])
> -    hex_common.calculate_attribs()
> -    hex_common.init_registers()
> +    hex_common.read_common_files()
>      tagregs = hex_common.get_tagregs()
>      tagimms = hex_common.get_tagimms()
> 
> diff --git a/target/hexagon/gen_idef_parser_funcs.py
> b/target/hexagon/gen_idef_parser_funcs.py
> index 550a48cb7b..eb494abba8 100644
> --- a/target/hexagon/gen_idef_parser_funcs.py
> +++ b/target/hexagon/gen_idef_parser_funcs.py
> @@ -1,7 +1,7 @@
>  #!/usr/bin/env python3
> 
>  ##
> -##  Copyright(c) 2019-2023 rev.ng Labs Srl. All Rights Reserved.
> +##  Copyright(c) 2019-2024 rev.ng Labs Srl. All Rights Reserved.
>  ##
>  ##  This program is free software; you can redistribute it and/or modify
>  ##  it under the terms of the GNU General Public License as published by
> @@ -44,13 +44,12 @@
>  ##
>  def main():
>      hex_common.read_semantics_file(sys.argv[1])
> -    hex_common.read_attribs_file(sys.argv[2])
>      hex_common.calculate_attribs()
>      hex_common.init_registers()
>      tagregs = hex_common.get_tagregs()
>      tagimms = hex_common.get_tagimms()
> 
> -    with open(sys.argv[3], "w") as f:
> +    with open(sys.argv[-1], "w") as f:
>          f.write('#include "macros.inc"\n\n')
> 
>          for tag in hex_common.tags:
> diff --git a/target/hexagon/gen_op_attribs.py
> b/target/hexagon/gen_op_attribs.py
> index 41074b8573..99448220da 100755
> --- a/target/hexagon/gen_op_attribs.py
> +++ b/target/hexagon/gen_op_attribs.py
> @@ -1,7 +1,7 @@
>  #!/usr/bin/env python3
> 
>  ##
> -##  Copyright(c) 2019-2023 Qualcomm Innovation Center, Inc. All Rights
> Reserved.
> +##  Copyright(c) 2019-2024 Qualcomm Innovation Center, Inc. All Rights
> Reserved.
>  ##
>  ##  This program is free software; you can redistribute it and/or modify
>  ##  it under the terms of the GNU General Public License as published by
> @@ -25,13 +25,12 @@
> 
>  def main():
>      hex_common.read_semantics_file(sys.argv[1])
> -    hex_common.read_attribs_file(sys.argv[2])
>      hex_common.calculate_attribs()
> 
>      ##
>      ##     Generate all the attributes associated with each instruction
>      ##
> -    with open(sys.argv[3], "w") as f:
> +    with open(sys.argv[-1], "w") as f:
>          for tag in hex_common.tags:
>              f.write(
>                  f"OP_ATTRIB({tag},ATTRIBS("
> diff --git a/target/hexagon/gen_opcodes_def.py
> b/target/hexagon/gen_opcodes_def.py
> index cddd868fe3..536f0eb68a 100755
> --- a/target/hexagon/gen_opcodes_def.py
> +++ b/target/hexagon/gen_opcodes_def.py
> @@ -1,7 +1,7 @@
>  #!/usr/bin/env python3
> 
>  ##
> -##  Copyright(c) 2019-2023 Qualcomm Innovation Center, Inc. All Rights
> Reserved.
> +##  Copyright(c) 2019-2024 Qualcomm Innovation Center, Inc. All Rights
> Reserved.
>  ##
>  ##  This program is free software; you can redistribute it and/or modify
>  ##  it under the terms of the GNU General Public License as published by
> @@ -29,7 +29,7 @@ def main():
>      ##
>      ##     Generate a list of all the opcodes
>      ##
> -    with open(sys.argv[3], "w") as f:
> +    with open(sys.argv[-1], "w") as f:
>          for tag in hex_common.tags:
>              f.write(f"OPCODE({tag}),\n")
> 
> diff --git a/target/hexagon/gen_printinsn.py
> b/target/hexagon/gen_printinsn.py
> index e570bd7c6a..8bf4d0985c 100755
> --- a/target/hexagon/gen_printinsn.py
> +++ b/target/hexagon/gen_printinsn.py
> @@ -1,7 +1,7 @@
>  #!/usr/bin/env python3
> 
>  ##
> -##  Copyright(c) 2019-2023 Qualcomm Innovation Center, Inc. All Rights
> Reserved.
> +##  Copyright(c) 2019-2024 Qualcomm Innovation Center, Inc. All Rights
> Reserved.
>  ##
>  ##  This program is free software; you can redistribute it and/or modify
>  ##  it under the terms of the GNU General Public License as published by
> @@ -97,11 +97,10 @@ def spacify(s):
> 
>  def main():
>      hex_common.read_semantics_file(sys.argv[1])
> -    hex_common.read_attribs_file(sys.argv[2])
> 
>      immext_casere = re.compile(r"IMMEXT\(([A-Za-z])")
> 
> -    with open(sys.argv[3], "w") as f:
> +    with open(sys.argv[-1], "w") as f:
>          for tag in hex_common.tags:
>              if not hex_common.behdict[tag]:
>                  continue
> diff --git a/target/hexagon/gen_tcg_func_table.py
> b/target/hexagon/gen_tcg_func_table.py
> index f998ef0992..978ac1819b 100755
> --- a/target/hexagon/gen_tcg_func_table.py
> +++ b/target/hexagon/gen_tcg_func_table.py
> @@ -1,7 +1,7 @@
>  #!/usr/bin/env python3
> 
>  ##
> -##  Copyright(c) 2019-2023 Qualcomm Innovation Center, Inc. All Rights
> Reserved.
> +##  Copyright(c) 2019-2024 Qualcomm Innovation Center, Inc. All Rights
> Reserved.
>  ##
>  ##  This program is free software; you can redistribute it and/or modify
>  ##  it under the terms of the GNU General Public License as published by
> @@ -25,12 +25,11 @@
> 
>  def main():
>      hex_common.read_semantics_file(sys.argv[1])
> -    hex_common.read_attribs_file(sys.argv[2])
>      hex_common.calculate_attribs()
>      tagregs = hex_common.get_tagregs()
>      tagimms = hex_common.get_tagimms()
> 
> -    with open(sys.argv[3], "w") as f:
> +    with open(sys.argv[-1], "w") as f:
>          f.write("#ifndef HEXAGON_FUNC_TABLE_H\n")
>          f.write("#define HEXAGON_FUNC_TABLE_H\n\n")
> 
> diff --git a/target/hexagon/gen_tcg_funcs.py
> b/target/hexagon/gen_tcg_funcs.py
> index 3d8e3cb6a2..05aa0a7855 100755
> --- a/target/hexagon/gen_tcg_funcs.py
> +++ b/target/hexagon/gen_tcg_funcs.py
> @@ -1,7 +1,7 @@
>  #!/usr/bin/env python3
> 
>  ##
> -##  Copyright(c) 2019-2023 Qualcomm Innovation Center, Inc. All Rights
> Reserved.
> +##  Copyright(c) 2019-2024 Qualcomm Innovation Center, Inc. All Rights
> Reserved.
>  ##
>  ##  This program is free software; you can redistribute it and/or modify
>  ##  it under the terms of the GNU General Public License as published by
> @@ -108,24 +108,7 @@ def gen_def_tcg_func(f, tag, tagregs, tagimms):
> 
> 
>  def main():
> -    hex_common.read_semantics_file(sys.argv[1])
> -    hex_common.read_attribs_file(sys.argv[2])
> -    hex_common.read_overrides_file(sys.argv[3])
> -    hex_common.read_overrides_file(sys.argv[4])
> -    hex_common.calculate_attribs()
> -    hex_common.init_registers()
> -    ## Whether or not idef-parser is enabled is
> -    ## determined by the number of arguments to
> -    ## this script:
> -    ##
> -    ##   5 args. -> not enabled,
> -    ##   6 args. -> idef-parser enabled.
> -    ##
> -    ## The 6:th arg. then holds a list of the successfully
> -    ## parsed instructions.
> -    is_idef_parser_enabled = len(sys.argv) > 6
> -    if is_idef_parser_enabled:
> -        hex_common.read_idef_parser_enabled_file(sys.argv[5])
> +    is_idef_parser_enabled = hex_common.read_common_files()
>      tagregs = hex_common.get_tagregs()
>      tagimms = hex_common.get_tagimms()
> 
> diff --git a/target/hexagon/hex_common.py
> b/target/hexagon/hex_common.py
> index 4bacef223f..43ca78b489 100755
> --- a/target/hexagon/hex_common.py
> +++ b/target/hexagon/hex_common.py
> @@ -26,7 +26,6 @@
>  semdict = {}  # tag -> semantics
>  attribdict = {}  # tag -> attributes
>  macros = {}  # macro -> macro information...
> -attribinfo = {}  # Register information and misc
>  registers = {}  # register -> register functions
>  new_registers = {}
>  tags = []  # list of all tags
> @@ -257,19 +256,6 @@ def read_semantics_file(name):
>                  eval_line = ""
> 
> 
> -def read_attribs_file(name):
> -    attribre = re.compile(
> -        r"DEF_ATTRIB\(([A-Za-z0-9_]+), ([^,]*), "
> -        + r'"([A-Za-z0-9_\.]*)", "([A-Za-z0-9_\.]*)"\)'
> -    )
> -    for line in open(name, "rt").readlines():
> -        if not attribre.match(line):
> -            continue
> -        (attrib_base, descr, rreg, wreg) = attribre.findall(line)[0]
> -        attrib_base = "A_" + attrib_base
> -        attribinfo[attrib_base] = {"rreg": rreg, "wreg": wreg, "descr": descr}
> -
> -
>  def read_overrides_file(name):
>      overridere = re.compile(r"#define fGEN_TCG_([A-Za-z0-9_]+)\(.*")
>      for line in open(name, "rt").readlines():
> @@ -1143,3 +1129,24 @@ def helper_args(tag, regs, imms):
>              "uint32_t part1"
>          ))
>      return args
> +
> +
> +def read_common_files():
> +    read_semantics_file(sys.argv[1])
> +    read_overrides_file(sys.argv[2])
> +    read_overrides_file(sys.argv[3])
> +    ## Whether or not idef-parser is enabled is
> +    ## determined by the number of arguments to
> +    ## this script:
> +    ##
> +    ##   4 args. -> not enabled,
> +    ##   5 args. -> idef-parser enabled.
> +    ##
> +    ## The 5:th arg. then holds a list of the successfully
> +    ## parsed instructions.
> +    is_idef_parser_enabled = len(sys.argv) > 5
> +    if is_idef_parser_enabled:
> +        read_idef_parser_enabled_file(sys.argv[4])
> +    calculate_attribs()
> +    init_registers()
> +    return is_idef_parser_enabled
> diff --git a/target/hexagon/meson.build b/target/hexagon/meson.build
> index 988e7489ba..b0b253aa6b 100644
> --- a/target/hexagon/meson.build
> +++ b/target/hexagon/meson.build
> @@ -18,7 +18,6 @@
>  hexagon_ss = ss.source_set()
> 
>  hex_common_py = 'hex_common.py'
> -attribs_def = meson.current_source_dir() / 'attribs_def.h.inc'
>  gen_tcg_h = meson.current_source_dir() / 'gen_tcg.h'
>  gen_tcg_hvx_h = meson.current_source_dir() / 'gen_tcg_hvx.h'
>  idef_parser_dir = meson.current_source_dir() / 'idef-parser'
> @@ -51,8 +50,8 @@ tcg_func_table_generated = custom_target(
>      'tcg_func_table_generated.c.inc',
>      output: 'tcg_func_table_generated.c.inc',
>      depends: [semantics_generated],
> -    depend_files: [hex_common_py, attribs_def],
> -    command: [python, files('gen_tcg_func_table.py'), semantics_generated,
> attribs_def, '@OUTPUT@'],
> +    depend_files: [hex_common_py],
> +    command: [python, files('gen_tcg_func_table.py'), semantics_generated,
> '@OUTPUT@'],
>  )
>  hexagon_ss.add(tcg_func_table_generated)
> 
> @@ -60,8 +59,8 @@ printinsn_generated = custom_target(
>      'printinsn_generated.h.inc',
>      output: 'printinsn_generated.h.inc',
>      depends: [semantics_generated],
> -    depend_files: [hex_common_py, attribs_def],
> -    command: [python, files('gen_printinsn.py'), semantics_generated,
> attribs_def, '@OUTPUT@'],
> +    depend_files: [hex_common_py],
> +    command: [python, files('gen_printinsn.py'), semantics_generated,
> '@OUTPUT@'],
>  )
>  hexagon_ss.add(printinsn_generated)
> 
> @@ -69,8 +68,8 @@ op_attribs_generated = custom_target(
>      'op_attribs_generated.h.inc',
>      output: 'op_attribs_generated.h.inc',
>      depends: [semantics_generated],
> -    depend_files: [hex_common_py, attribs_def],
> -    command: [python, files('gen_op_attribs.py'), semantics_generated,
> attribs_def, '@OUTPUT@'],
> +    depend_files: [hex_common_py],
> +    command: [python, files('gen_op_attribs.py'), semantics_generated,
> '@OUTPUT@'],
>  )
>  hexagon_ss.add(op_attribs_generated)
> 
> @@ -78,8 +77,8 @@ opcodes_def_generated = custom_target(
>      'opcodes_def_generated.h.inc',
>      output: 'opcodes_def_generated.h.inc',
>      depends: [semantics_generated],
> -    depend_files: [hex_common_py, attribs_def],
> -    command: [python, files('gen_opcodes_def.py'), semantics_generated,
> attribs_def, '@OUTPUT@'],
> +    depend_files: [hex_common_py],
> +    command: [python, files('gen_opcodes_def.py'), semantics_generated,
> '@OUTPUT@'],
>  )
>  hexagon_ss.add(opcodes_def_generated)
> 
> @@ -278,7 +277,7 @@ if idef_parser_enabled and 'hexagon-linux-user' in
> target_dirs
>          output: 'idef_parser_input.h.inc',
>          depends: [semantics_generated],
>          depend_files: [hex_common_py],
> -        command: [python, files('gen_idef_parser_funcs.py'),
> semantics_generated, attribs_def, '@OUTPUT@'],
> +        command: [python, files('gen_idef_parser_funcs.py'),
> semantics_generated, '@OUTPUT@'],
>      )
> 
>      preprocessed_idef_parser_input_generated = custom_target(
> @@ -347,12 +346,12 @@ if idef_parser_enabled and 'hexagon-linux-user' in
> target_dirs
>      # Setup input and dependencies for the next step, this depends on whether
> or
>      # not idef-parser is enabled
>      helper_dep = [semantics_generated, idef_generated_tcg_c,
> idef_generated_tcg]
> -    helper_in = [semantics_generated, attribs_def, gen_tcg_h, gen_tcg_hvx_h,
> idef_generated_list]
> +    helper_in = [semantics_generated, gen_tcg_h, gen_tcg_hvx_h,
> idef_generated_list]
>  else
>      # Setup input and dependencies for the next step, this depends on whether
> or
>      # not idef-parser is enabled
>      helper_dep = [semantics_generated]
> -    helper_in = [semantics_generated, attribs_def, gen_tcg_h, gen_tcg_hvx_h]
> +    helper_in = [semantics_generated, gen_tcg_h, gen_tcg_hvx_h]
>  endif
> 
>  #
> @@ -366,7 +365,7 @@ helper_protos_generated = custom_target(
>      'helper_protos_generated.h.inc',
>      output: 'helper_protos_generated.h.inc',
>      depends: helper_dep,
> -    depend_files: [hex_common_py, attribs_def, gen_tcg_h, gen_tcg_hvx_h],
> +    depend_files: [hex_common_py, gen_tcg_h, gen_tcg_hvx_h],
>      command: [python, files('gen_helper_protos.py'), helper_in,
> '@OUTPUT@'],
>  )
>  hexagon_ss.add(helper_protos_generated)
> @@ -375,7 +374,7 @@ helper_funcs_generated = custom_target(
>      'helper_funcs_generated.c.inc',
>      output: 'helper_funcs_generated.c.inc',
>      depends: helper_dep,
> -    depend_files: [hex_common_py, attribs_def, gen_tcg_h, gen_tcg_hvx_h],
> +    depend_files: [hex_common_py, gen_tcg_h, gen_tcg_hvx_h],
>      command: [python, files('gen_helper_funcs.py'), helper_in, '@OUTPUT@'],
>  )
>  hexagon_ss.add(helper_funcs_generated)
> @@ -384,7 +383,7 @@ tcg_funcs_generated = custom_target(
>      'tcg_funcs_generated.c.inc',
>      output: 'tcg_funcs_generated.c.inc',
>      depends: helper_dep,
> -    depend_files: [hex_common_py, attribs_def, gen_tcg_h, gen_tcg_hvx_h],
> +    depend_files: [hex_common_py, gen_tcg_h, gen_tcg_hvx_h],
>      command: [python, files('gen_tcg_funcs.py'), helper_in, '@OUTPUT@'],
>  )
>  hexagon_ss.add(tcg_funcs_generated)
> @@ -393,7 +392,7 @@ analyze_funcs_generated = custom_target(
>      'analyze_funcs_generated.c.inc',
>      output: 'analyze_funcs_generated.c.inc',
>      depends: helper_dep,
> -    depend_files: [hex_common_py, attribs_def, gen_tcg_h, gen_tcg_hvx_h],
> +    depend_files: [hex_common_py, gen_tcg_h, gen_tcg_hvx_h],
>      command: [python, files('gen_analyze_funcs.py'), helper_in,
> '@OUTPUT@'],
>  )
>  hexagon_ss.add(analyze_funcs_generated)
> --
> 2.34.1


^ permalink raw reply	[flat|nested] 21+ messages in thread

* RE: [PATCH v2 8/9] Hexagon (target/hexagon) Remove gen_shortcode.py
  2024-03-07  3:23 ` [PATCH v2 8/9] Hexagon (target/hexagon) Remove gen_shortcode.py Taylor Simpson
  2024-03-07 10:07   ` Philippe Mathieu-Daudé
@ 2024-03-29  1:03   ` Brian Cain
  1 sibling, 0 replies; 21+ messages in thread
From: Brian Cain @ 2024-03-29  1:03 UTC (permalink / raw)
  To: Taylor Simpson, qemu-devel
  Cc: Matheus Bernardino (QUIC), Sid Manning, Marco Liebel (QUIC),
	richard.henderson, philmd, ale, anjo



> -----Original Message-----
> From: Taylor Simpson <ltaylorsimpson@gmail.com>
> Sent: Wednesday, March 6, 2024 9:23 PM
> To: qemu-devel@nongnu.org
> Cc: Brian Cain <bcain@quicinc.com>; Matheus Bernardino (QUIC)
> <quic_mathbern@quicinc.com>; Sid Manning <sidneym@quicinc.com>;
> Marco Liebel (QUIC) <quic_mliebel@quicinc.com>;
> richard.henderson@linaro.org; philmd@linaro.org; ale@rev.ng; anjo@rev.ng;
> ltaylorsimpson@gmail.com
> Subject: [PATCH v2 8/9] Hexagon (target/hexagon) Remove gen_shortcode.py
> 
> WARNING: This email originated from outside of Qualcomm. Please be wary
> of any links or attachments, and do not enable macros.
> 
> This data structure is not used
> 
> Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
> ---

Reviewed-by: Brian Cain <bcain@quicinc.com>

>  target/hexagon/opcodes.c        |  7 ----
>  target/hexagon/README           |  1 -
>  target/hexagon/gen_shortcode.py | 63 ---------------------------------
>  target/hexagon/meson.build      | 10 ------
>  4 files changed, 81 deletions(-)
>  delete mode 100755 target/hexagon/gen_shortcode.py
> 
> diff --git a/target/hexagon/opcodes.c b/target/hexagon/opcodes.c
> index 02ae9cf787..c8bde2f9e9 100644
> --- a/target/hexagon/opcodes.c
> +++ b/target/hexagon/opcodes.c
> @@ -37,13 +37,6 @@ const char * const opcode_names[] = {
>  };
> 
> 
> -const char * const opcode_short_semantics[] = {
> -#define DEF_SHORTCODE(TAG, SHORTCODE)              [TAG] = #SHORTCODE,
> -#include "shortcode_generated.h.inc"
> -#undef DEF_SHORTCODE
> -    NULL
> -};
> -
>  DECLARE_BITMAP(opcode_attribs[XX_LAST_OPCODE], A_ZZ_LASTATTRIB);
> 
>  static void init_attribs(int tag, ...)
> diff --git a/target/hexagon/README b/target/hexagon/README
> index 065c05154d..65b4fcc0fa 100644
> --- a/target/hexagon/README
> +++ b/target/hexagon/README
> @@ -46,7 +46,6 @@ header files in <BUILD_DIR>/target/hexagon
>          gen_printinsn.py                -> printinsn_generated.h.inc
>          gen_op_attribs.py               -> op_attribs_generated.h.inc
>          gen_helper_protos.py            -> helper_protos_generated.h.inc
> -        gen_shortcode.py                -> shortcode_generated.h.inc
>          gen_tcg_funcs.py                -> tcg_funcs_generated.c.inc
>          gen_tcg_func_table.py           -> tcg_func_table_generated.c.inc
>          gen_helper_funcs.py             -> helper_funcs_generated.c.inc
> diff --git a/target/hexagon/gen_shortcode.py
> b/target/hexagon/gen_shortcode.py
> deleted file mode 100755
> index deb94446c4..0000000000
> --- a/target/hexagon/gen_shortcode.py
> +++ /dev/null
> @@ -1,63 +0,0 @@
> -#!/usr/bin/env python3
> -
> -##
> -##  Copyright(c) 2019-2023 Qualcomm Innovation Center, Inc. All Rights
> Reserved.
> -##
> -##  This program is free software; you can redistribute it and/or modify
> -##  it under the terms of the GNU General Public License as published by
> -##  the Free Software Foundation; either version 2 of the License, or
> -##  (at your option) any later version.
> -##
> -##  This program is distributed in the hope that it will be useful,
> -##  but WITHOUT ANY WARRANTY; without even the implied warranty of
> -##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> -##  GNU General Public License for more details.
> -##
> -##  You should have received a copy of the GNU General Public License
> -##  along with this program; if not, see <http://www.gnu.org/licenses/>.
> -##
> -
> -import sys
> -import re
> -import string
> -import hex_common
> -
> -
> -def gen_shortcode(f, tag):
> -    f.write(f"DEF_SHORTCODE({tag}, {hex_common.semdict[tag]})\n")
> -
> -
> -def main():
> -    hex_common.read_semantics_file(sys.argv[1])
> -    hex_common.read_attribs_file(sys.argv[2])
> -    hex_common.calculate_attribs()
> -    tagregs = hex_common.get_tagregs()
> -    tagimms = hex_common.get_tagimms()
> -
> -    with open(sys.argv[3], "w") as f:
> -        f.write("#ifndef DEF_SHORTCODE\n")
> -        f.write("#define DEF_SHORTCODE(TAG,SHORTCODE)    /* Nothing */\n")
> -        f.write("#endif\n")
> -
> -        for tag in hex_common.tags:
> -            ## Skip the priv instructions
> -            if "A_PRIV" in hex_common.attribdict[tag]:
> -                continue
> -            ## Skip the guest instructions
> -            if "A_GUEST" in hex_common.attribdict[tag]:
> -                continue
> -            ## Skip the diag instructions
> -            if tag == "Y6_diag":
> -                continue
> -            if tag == "Y6_diag0":
> -                continue
> -            if tag == "Y6_diag1":
> -                continue
> -
> -            gen_shortcode(f, tag)
> -
> -        f.write("#undef DEF_SHORTCODE\n")
> -
> -
> -if __name__ == "__main__":
> -    main()
> diff --git a/target/hexagon/meson.build b/target/hexagon/meson.build
> index b3a0944d3b..988e7489ba 100644
> --- a/target/hexagon/meson.build
> +++ b/target/hexagon/meson.build
> @@ -42,21 +42,11 @@ hexagon_ss.add(semantics_generated)
>  #
>  # Step 2
>  # We use Python scripts to generate the following files
> -#     shortcode_generated.h.inc
>  #     tcg_func_table_generated.c.inc
>  #     printinsn_generated.h.inc
>  #     op_attribs_generated.h.inc
>  #     opcodes_def_generated.h.inc
>  #
> -shortcode_generated = custom_target(
> -    'shortcode_generated.h.inc',
> -    output: 'shortcode_generated.h.inc',
> -    depends: [semantics_generated],
> -    depend_files: [hex_common_py, attribs_def],
> -    command: [python, files('gen_shortcode.py'), semantics_generated,
> attribs_def, '@OUTPUT@'],
> -)
> -hexagon_ss.add(shortcode_generated)
> -
>  tcg_func_table_generated = custom_target(
>      'tcg_func_table_generated.c.inc',
>      output: 'tcg_func_table_generated.c.inc',
> --
> 2.34.1


^ permalink raw reply	[flat|nested] 21+ messages in thread

* RE: [PATCH v2 7/9] Hexagon (target/hexagon) Remove gen_op_regs.py
  2024-03-07  3:23 ` [PATCH v2 7/9] Hexagon (target/hexagon) Remove gen_op_regs.py Taylor Simpson
@ 2024-03-29  1:04   ` Brian Cain
  0 siblings, 0 replies; 21+ messages in thread
From: Brian Cain @ 2024-03-29  1:04 UTC (permalink / raw)
  To: Taylor Simpson, qemu-devel
  Cc: Matheus Bernardino (QUIC), Sid Manning, Marco Liebel (QUIC),
	richard.henderson, philmd, ale, anjo



> -----Original Message-----
> From: Taylor Simpson <ltaylorsimpson@gmail.com>
> Sent: Wednesday, March 6, 2024 9:23 PM
> To: qemu-devel@nongnu.org
> Cc: Brian Cain <bcain@quicinc.com>; Matheus Bernardino (QUIC)
> <quic_mathbern@quicinc.com>; Sid Manning <sidneym@quicinc.com>;
> Marco Liebel (QUIC) <quic_mliebel@quicinc.com>;
> richard.henderson@linaro.org; philmd@linaro.org; ale@rev.ng; anjo@rev.ng;
> ltaylorsimpson@gmail.com
> Subject: [PATCH v2 7/9] Hexagon (target/hexagon) Remove gen_op_regs.py
> 
> WARNING: This email originated from outside of Qualcomm. Please be wary
> of any links or attachments, and do not enable macros.
> 
> Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
> ---

Reviewed-by: Brian Cain <bcain@quicinc.com>

>  target/hexagon/README         |   1 -
>  target/hexagon/gen_op_regs.py | 125 ----------------------------------
>  target/hexagon/meson.build    |  14 +---
>  3 files changed, 2 insertions(+), 138 deletions(-)
>  delete mode 100755 target/hexagon/gen_op_regs.py
> 
> diff --git a/target/hexagon/README b/target/hexagon/README
> index 746ebec378..065c05154d 100644
> --- a/target/hexagon/README
> +++ b/target/hexagon/README
> @@ -43,7 +43,6 @@ target/hexagon/gen_semantics.c.  This step produces
>  That file is consumed by the following python scripts to produce the indicated
>  header files in <BUILD_DIR>/target/hexagon
>          gen_opcodes_def.py              -> opcodes_def_generated.h.inc
> -        gen_op_regs.py                  -> op_regs_generated.h.inc
>          gen_printinsn.py                -> printinsn_generated.h.inc
>          gen_op_attribs.py               -> op_attribs_generated.h.inc
>          gen_helper_protos.py            -> helper_protos_generated.h.inc
> diff --git a/target/hexagon/gen_op_regs.py b/target/hexagon/gen_op_regs.py
> deleted file mode 100755
> index 7b7b33895a..0000000000
> --- a/target/hexagon/gen_op_regs.py
> +++ /dev/null
> @@ -1,125 +0,0 @@
> -#!/usr/bin/env python3
> -
> -##
> -##  Copyright(c) 2019-2023 Qualcomm Innovation Center, Inc. All Rights
> Reserved.
> -##
> -##  This program is free software; you can redistribute it and/or modify
> -##  it under the terms of the GNU General Public License as published by
> -##  the Free Software Foundation; either version 2 of the License, or
> -##  (at your option) any later version.
> -##
> -##  This program is distributed in the hope that it will be useful,
> -##  but WITHOUT ANY WARRANTY; without even the implied warranty of
> -##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> -##  GNU General Public License for more details.
> -##
> -##  You should have received a copy of the GNU General Public License
> -##  along with this program; if not, see <http://www.gnu.org/licenses/>.
> -##
> -
> -import sys
> -import re
> -import string
> -import hex_common
> -
> -
> -##
> -##     Generate the register and immediate operands for each instruction
> -##
> -def calculate_regid_reg(tag):
> -    def letter_inc(x):
> -        return chr(ord(x) + 1)
> -
> -    ordered_implregs = ["SP", "FP", "LR"]
> -    srcdst_lett = "X"
> -    src_lett = "S"
> -    dst_lett = "D"
> -    retstr = ""
> -    mapdict = {}
> -    for reg in ordered_implregs:
> -        reg_rd = 0
> -        reg_wr = 0
> -        if ("A_IMPLICIT_WRITES_" + reg) in hex_common.attribdict[tag]:
> -            reg_wr = 1
> -        if reg_rd and reg_wr:
> -            retstr += srcdst_lett
> -            mapdict[srcdst_lett] = reg
> -            srcdst_lett = letter_inc(srcdst_lett)
> -        elif reg_rd:
> -            retstr += src_lett
> -            mapdict[src_lett] = reg
> -            src_lett = letter_inc(src_lett)
> -        elif reg_wr:
> -            retstr += dst_lett
> -            mapdict[dst_lett] = reg
> -            dst_lett = letter_inc(dst_lett)
> -    return retstr, mapdict
> -
> -
> -def calculate_regid_letters(tag):
> -    retstr, mapdict = calculate_regid_reg(tag)
> -    return retstr
> -
> -
> -def strip_reg_prefix(x):
> -    y = x.replace("UREG.", "")
> -    y = y.replace("MREG.", "")
> -    return y.replace("GREG.", "")
> -
> -
> -def main():
> -    hex_common.read_semantics_file(sys.argv[1])
> -    hex_common.read_attribs_file(sys.argv[2])
> -    hex_common.init_registers()
> -    tagregs = hex_common.get_tagregs(full=True)
> -    tagimms = hex_common.get_tagimms()
> -
> -    with open(sys.argv[3], "w") as f:
> -        for tag in hex_common.tags:
> -            regs = tagregs[tag]
> -            rregs = []
> -            wregs = []
> -            regids = ""
> -            for regtype, regid, _, numregs in regs:
> -                reg = hex_common.get_register(tag, regtype, regid)
> -                if reg.is_read():
> -                    if regid[0] not in regids:
> -                        regids += regid[0]
> -                    rregs.append(regtype + regid + numregs)
> -                if reg.is_written():
> -                    wregs.append(regtype + regid + numregs)
> -                    if regid[0] not in regids:
> -                        regids += regid[0]
> -            for attrib in hex_common.attribdict[tag]:
> -                if hex_common.attribinfo[attrib]["rreg"]:
> -                    rregs.append(strip_reg_prefix(attribinfo[attrib]["rreg"]))
> -                if hex_common.attribinfo[attrib]["wreg"]:
> -                    wregs.append(strip_reg_prefix(attribinfo[attrib]["wreg"]))
> -            regids += calculate_regid_letters(tag)
> -            f.write(
> -                f'REGINFO({tag},"{regids}",\t/*RD:*/\t"{",".join(rregs)}",'
> -                f'\t/*WR:*/\t"{",".join(wregs)}")\n'
> -            )
> -
> -        for tag in hex_common.tags:
> -            imms = tagimms[tag]
> -            f.write(f"IMMINFO({tag}")
> -            if not imms:
> -                f.write(""",'u',0,0,'U',0,0""")
> -            for sign, size, shamt in imms:
> -                if sign == "r":
> -                    sign = "s"
> -                if not shamt:
> -                    shamt = "0"
> -                f.write(f""",'{sign}',{size},{shamt}""")
> -            if len(imms) == 1:
> -                if sign.isupper():
> -                    myu = "u"
> -                else:
> -                    myu = "U"
> -                f.write(f""",'{myu}',0,0""")
> -            f.write(")\n")
> -
> -
> -if __name__ == "__main__":
> -    main()
> diff --git a/target/hexagon/meson.build b/target/hexagon/meson.build
> index fb480afc03..b3a0944d3b 100644
> --- a/target/hexagon/meson.build
> +++ b/target/hexagon/meson.build
> @@ -1,5 +1,5 @@
>  ##
> -##  Copyright(c) 2020-2023 Qualcomm Innovation Center, Inc. All Rights
> Reserved.
> +##  Copyright(c) 2020-2024 Qualcomm Innovation Center, Inc. All Rights
> Reserved.
>  ##
>  ##  This program is free software; you can redistribute it and/or modify
>  ##  it under the terms of the GNU General Public License as published by
> @@ -45,7 +45,6 @@ hexagon_ss.add(semantics_generated)
>  #     shortcode_generated.h.inc
>  #     tcg_func_table_generated.c.inc
>  #     printinsn_generated.h.inc
> -#     op_regs_generated.h.inc
>  #     op_attribs_generated.h.inc
>  #     opcodes_def_generated.h.inc
>  #
> @@ -76,15 +75,6 @@ printinsn_generated = custom_target(
>  )
>  hexagon_ss.add(printinsn_generated)
> 
> -op_regs_generated = custom_target(
> -    'op_regs_generated.h.inc',
> -    output: 'op_regs_generated.h.inc',
> -    depends: [semantics_generated],
> -    depend_files: [hex_common_py, attribs_def],
> -    command: [python, files('gen_op_regs.py'), semantics_generated,
> attribs_def, '@OUTPUT@'],
> -)
> -hexagon_ss.add(op_regs_generated)
> -
>  op_attribs_generated = custom_target(
>      'op_attribs_generated.h.inc',
>      output: 'op_attribs_generated.h.inc',
> @@ -110,7 +100,7 @@ hexagon_ss.add(opcodes_def_generated)
>  #
>  gen_dectree_import = executable(
>      'gen_dectree_import',
> -    'gen_dectree_import.c', opcodes_def_generated, op_regs_generated,
> +    'gen_dectree_import.c', opcodes_def_generated,
>      native: true, build_by_default: false)
> 
>  iset_py = custom_target(
> --
> 2.34.1


^ permalink raw reply	[flat|nested] 21+ messages in thread

* RE: [PATCH v2 6/9] Hexagon (target/hexagon) Remove uses of op_regs_generated.h.inc
  2024-03-07  3:23 ` [PATCH v2 6/9] Hexagon (target/hexagon) Remove uses of op_regs_generated.h.inc Taylor Simpson
@ 2024-03-29  1:04   ` Brian Cain
  0 siblings, 0 replies; 21+ messages in thread
From: Brian Cain @ 2024-03-29  1:04 UTC (permalink / raw)
  To: Taylor Simpson, qemu-devel
  Cc: Matheus Bernardino (QUIC), Sid Manning, Marco Liebel (QUIC),
	richard.henderson, philmd, ale, anjo



> -----Original Message-----
> From: Taylor Simpson <ltaylorsimpson@gmail.com>
> Sent: Wednesday, March 6, 2024 9:23 PM
> To: qemu-devel@nongnu.org
> Cc: Brian Cain <bcain@quicinc.com>; Matheus Bernardino (QUIC)
> <quic_mathbern@quicinc.com>; Sid Manning <sidneym@quicinc.com>;
> Marco Liebel (QUIC) <quic_mliebel@quicinc.com>;
> richard.henderson@linaro.org; philmd@linaro.org; ale@rev.ng; anjo@rev.ng;
> ltaylorsimpson@gmail.com
> Subject: [PATCH v2 6/9] Hexagon (target/hexagon) Remove uses of
> op_regs_generated.h.inc
> 
> WARNING: This email originated from outside of Qualcomm. Please be wary
> of any links or attachments, and do not enable macros.
> 
> Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
> ---

Reviewed-by: Brian Cain <bcain@quicinc.com>

>  target/hexagon/opcodes.h                |  4 --
>  target/hexagon/decode.c                 | 57 +++----------------------
>  target/hexagon/mmvec/decode_ext_mmvec.c | 34 +++------------
>  target/hexagon/opcodes.c                | 28 ------------
>  4 files changed, 13 insertions(+), 110 deletions(-)
> 
> diff --git a/target/hexagon/opcodes.h b/target/hexagon/opcodes.h
> index fa7e321950..0ee11bd445 100644
> --- a/target/hexagon/opcodes.h
> +++ b/target/hexagon/opcodes.h
> @@ -40,10 +40,6 @@ typedef enum {
> 
>  extern const char * const opcode_names[];
> 
> -extern const char * const opcode_reginfo[];
> -extern const char * const opcode_rregs[];
> -extern const char * const opcode_wregs[];
> -
>  typedef struct {
>      const char * const encoding;
>      const EncClass enc_class;
> diff --git a/target/hexagon/decode.c b/target/hexagon/decode.c
> index 84a3899556..23deba2426 100644
> --- a/target/hexagon/decode.c
> +++ b/target/hexagon/decode.c
> @@ -115,24 +115,13 @@ static void
>  decode_fill_newvalue_regno(Packet *packet)
>  {
>      int i, use_regidx, offset, def_idx, dst_idx;
> -    uint16_t def_opcode, use_opcode;
> -    char *dststr;
> 
>      for (i = 1; i < packet->num_insns; i++) {
>          if (GET_ATTRIB(packet->insn[i].opcode, A_DOTNEWVALUE) &&
>              !GET_ATTRIB(packet->insn[i].opcode, A_EXTENSION)) {
> -            use_opcode = packet->insn[i].opcode;
> -
> -            /* It's a store, so we're adjusting the Nt field */
> -            if (GET_ATTRIB(use_opcode, A_STORE)) {
> -                use_regidx = strchr(opcode_reginfo[use_opcode], 't') -
> -                    opcode_reginfo[use_opcode];
> -            } else {    /* It's a Jump, so we're adjusting the Ns field */
> -                use_regidx = strchr(opcode_reginfo[use_opcode], 's') -
> -                    opcode_reginfo[use_opcode];
> -            }
> -            g_assert(packet->insn[i].new_read_idx != -1 &&
> -                     packet->insn[i].new_read_idx == use_regidx);
> +
> +            g_assert(packet->insn[i].new_read_idx != -1);
> +            use_regidx = packet->insn[i].new_read_idx;
> 
>              /*
>               * What's encoded at the N-field is the offset to who's producing
> @@ -153,39 +142,9 @@ decode_fill_newvalue_regno(Packet *packet)
>               */
>              g_assert(!((def_idx < 0) || (def_idx > (packet->num_insns - 1))));
> 
> -            /*
> -             * packet->insn[def_idx] is the producer
> -             * Figure out which type of destination it produces
> -             * and the corresponding index in the reginfo
> -             */
> -            def_opcode = packet->insn[def_idx].opcode;
> -            dststr = strstr(opcode_wregs[def_opcode], "Rd");
> -            if (dststr) {
> -                dststr = strchr(opcode_reginfo[def_opcode], 'd');
> -            } else {
> -                dststr = strstr(opcode_wregs[def_opcode], "Rx");
> -                if (dststr) {
> -                    dststr = strchr(opcode_reginfo[def_opcode], 'x');
> -                } else {
> -                    dststr = strstr(opcode_wregs[def_opcode], "Re");
> -                    if (dststr) {
> -                        dststr = strchr(opcode_reginfo[def_opcode], 'e');
> -                    } else {
> -                        dststr = strstr(opcode_wregs[def_opcode], "Ry");
> -                        if (dststr) {
> -                            dststr = strchr(opcode_reginfo[def_opcode], 'y');
> -                        } else {
> -                            g_assert_not_reached();
> -                        }
> -                    }
> -                }
> -            }
> -            g_assert(dststr != NULL);
> -
>              /* Now patch up the consumer with the register number */
> -            dst_idx = dststr - opcode_reginfo[def_opcode];
> -            g_assert(packet->insn[def_idx].dest_idx != -1 &&
> -                     packet->insn[def_idx].dest_idx == dst_idx);
> +            g_assert(packet->insn[def_idx].dest_idx != -1);
> +            dst_idx = packet->insn[def_idx].dest_idx;
>              packet->insn[i].regno[use_regidx] =
>                  packet->insn[def_idx].regno[dst_idx];
>              /*
> @@ -366,11 +325,7 @@ static void decode_shuffle_for_execution(Packet
> *packet)
>          for (flag = false, i = 0; i < last_insn + 1; i++) {
>              int opcode = packet->insn[i].opcode;
> 
> -            g_assert(packet->insn[i].has_pred_dest ==
> -                     (strstr(opcode_wregs[opcode], "Pd4") ||
> -                      strstr(opcode_wregs[opcode], "Pe4")));
> -            if ((strstr(opcode_wregs[opcode], "Pd4") ||
> -                 strstr(opcode_wregs[opcode], "Pe4")) &&
> +            if (packet->insn[i].has_pred_dest &&
>                  GET_ATTRIB(opcode, A_STORE) == 0) {
>                  /* This should be a compare (not a store conditional) */
>                  if (flag) {
> diff --git a/target/hexagon/mmvec/decode_ext_mmvec.c
> b/target/hexagon/mmvec/decode_ext_mmvec.c
> index c1320406df..f850d0154d 100644
> --- a/target/hexagon/mmvec/decode_ext_mmvec.c
> +++ b/target/hexagon/mmvec/decode_ext_mmvec.c
> @@ -28,21 +28,15 @@ check_new_value(Packet *pkt)
>  {
>      /* .new value for a MMVector store */
>      int i, j;
> -    const char *reginfo;
> -    const char *destletters;
> -    const char *dststr = NULL;
>      uint16_t def_opcode;
> -    char letter;
> 
>      for (i = 1; i < pkt->num_insns; i++) {
>          uint16_t use_opcode = pkt->insn[i].opcode;
>          if (GET_ATTRIB(use_opcode, A_DOTNEWVALUE) &&
>              GET_ATTRIB(use_opcode, A_CVI) &&
>              GET_ATTRIB(use_opcode, A_STORE)) {
> -            int use_regidx = strchr(opcode_reginfo[use_opcode], 's') -
> -                opcode_reginfo[use_opcode];
> -            g_assert(pkt->insn[i].new_read_idx != -1 &&
> -                     pkt->insn[i].new_read_idx == use_regidx);
> +            int use_regidx = pkt->insn[i].new_read_idx;
> +            g_assert(pkt->insn[i].new_read_idx != -1);
>              /*
>               * What's encoded at the N-field is the offset to who's producing
>               * the value.
> @@ -70,33 +64,19 @@ check_new_value(Packet *pkt)
> 
>              /* def_idx is the index of the producer */
>              def_opcode = pkt->insn[def_idx].opcode;
> -            reginfo = opcode_reginfo[def_opcode];
> -            destletters = "dexy";
> -            for (j = 0; (letter = destletters[j]) != 0; j++) {
> -                dststr = strchr(reginfo, letter);
> -                if (dststr != NULL) {
> -                    break;
> -                }
> -            }
> -            if ((dststr == NULL)  && GET_ATTRIB(def_opcode, A_CVI_GATHER)) {
> +            if ((pkt->insn[def_idx].dest_idx == -1)  &&
> +                GET_ATTRIB(def_opcode, A_CVI_GATHER)) {
>                  pkt->insn[i].regno[use_regidx] = def_oreg;
>                  pkt->insn[i].new_value_producer_slot = pkt->insn[def_idx].slot;
>              } else {
> -                if (dststr == NULL) {
> +                if (pkt->insn[def_idx].dest_idx == -1) {
>                      /* still not there, we have a bad packet */
>                      g_assert_not_reached();
>                  }
> -                g_assert(pkt->insn[def_idx].dest_idx != -1 &&
> -                         pkt->insn[def_idx].dest_idx == dststr - reginfo);
> -                int def_regnum = pkt->insn[def_idx].regno[dststr - reginfo];
> +                int def_regnum =
> +                    pkt->insn[def_idx].regno[pkt->insn[def_idx].dest_idx];
>                  /* Now patch up the consumer with the register number */
>                  pkt->insn[i].regno[use_regidx] = def_regnum ^ def_oreg;
> -                /* special case for (Vx,Vy) */
> -                dststr = strchr(reginfo, 'y');
> -                if (def_oreg && strchr(reginfo, 'x') && dststr) {
> -                    def_regnum = pkt->insn[def_idx].regno[dststr - reginfo];
> -                    pkt->insn[i].regno[use_regidx] = def_regnum;
> -                }
>                  /*
>                   * We need to remember who produces this value to later
>                   * check if it was dynamically cancelled
> diff --git a/target/hexagon/opcodes.c b/target/hexagon/opcodes.c
> index 1f7f3def38..02ae9cf787 100644
> --- a/target/hexagon/opcodes.c
> +++ b/target/hexagon/opcodes.c
> @@ -36,34 +36,6 @@ const char * const opcode_names[] = {
>  #undef OPCODE
>  };
> 
> -const char * const opcode_reginfo[] = {
> -#define IMMINFO(TAG, SIGN, SIZE, SHAMT, SIGN2, SIZE2, SHAMT2)    /*
> nothing */
> -#define REGINFO(TAG, REGINFO, RREGS, WREGS) REGINFO,
> -#include "op_regs_generated.h.inc"
> -    NULL
> -#undef REGINFO
> -#undef IMMINFO
> -};
> -
> -
> -const char * const opcode_rregs[] = {
> -#define IMMINFO(TAG, SIGN, SIZE, SHAMT, SIGN2, SIZE2, SHAMT2)    /*
> nothing */
> -#define REGINFO(TAG, REGINFO, RREGS, WREGS) RREGS,
> -#include "op_regs_generated.h.inc"
> -    NULL
> -#undef REGINFO
> -#undef IMMINFO
> -};
> -
> -
> -const char * const opcode_wregs[] = {
> -#define IMMINFO(TAG, SIGN, SIZE, SHAMT, SIGN2, SIZE2, SHAMT2)    /*
> nothing */
> -#define REGINFO(TAG, REGINFO, RREGS, WREGS) WREGS,
> -#include "op_regs_generated.h.inc"
> -    NULL
> -#undef REGINFO
> -#undef IMMINFO
> -};
> 
>  const char * const opcode_short_semantics[] = {
>  #define DEF_SHORTCODE(TAG, SHORTCODE)              [TAG] = #SHORTCODE,
> --
> 2.34.1


^ permalink raw reply	[flat|nested] 21+ messages in thread

* RE: [PATCH v2 4/9] Hexagon (target/hexagon) Mark has_pred_dest in trans functions
  2024-03-07  3:23 ` [PATCH v2 4/9] Hexagon (target/hexagon) Mark has_pred_dest " Taylor Simpson
@ 2024-03-29  1:04   ` Brian Cain
  0 siblings, 0 replies; 21+ messages in thread
From: Brian Cain @ 2024-03-29  1:04 UTC (permalink / raw)
  To: Taylor Simpson, qemu-devel
  Cc: Matheus Bernardino (QUIC), Sid Manning, Marco Liebel (QUIC),
	richard.henderson, philmd, ale, anjo



> -----Original Message-----
> From: Taylor Simpson <ltaylorsimpson@gmail.com>
> Sent: Wednesday, March 6, 2024 9:23 PM
> To: qemu-devel@nongnu.org
> Cc: Brian Cain <bcain@quicinc.com>; Matheus Bernardino (QUIC)
> <quic_mathbern@quicinc.com>; Sid Manning <sidneym@quicinc.com>;
> Marco Liebel (QUIC) <quic_mliebel@quicinc.com>;
> richard.henderson@linaro.org; philmd@linaro.org; ale@rev.ng; anjo@rev.ng;
> ltaylorsimpson@gmail.com
> Subject: [PATCH v2 4/9] Hexagon (target/hexagon) Mark has_pred_dest in
> trans functions
> 
> WARNING: This email originated from outside of Qualcomm. Please be wary
> of any links or attachments, and do not enable macros.
> 
> Check that the value matches opcode_wregs
> 
> Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
> ---

Reviewed-by: Brian Cain <bcain@quicinc.com>

>  target/hexagon/insn.h             | 1 +
>  target/hexagon/decode.c           | 3 +++
>  target/hexagon/gen_trans_funcs.py | 5 +++++
>  3 files changed, 9 insertions(+)
> 
> diff --git a/target/hexagon/insn.h b/target/hexagon/insn.h
> index a770379958..24dcf7fe9f 100644
> --- a/target/hexagon/insn.h
> +++ b/target/hexagon/insn.h
> @@ -41,6 +41,7 @@ struct Instruction {
>      uint32_t new_value_producer_slot:4;
>      int32_t new_read_idx;
>      int32_t dest_idx;
> +    bool has_pred_dest;
> 
>      bool part1;              /*
>                                * cmp-jumps are split into two insns.
> diff --git a/target/hexagon/decode.c b/target/hexagon/decode.c
> index a4d8500fea..84a3899556 100644
> --- a/target/hexagon/decode.c
> +++ b/target/hexagon/decode.c
> @@ -366,6 +366,9 @@ static void decode_shuffle_for_execution(Packet
> *packet)
>          for (flag = false, i = 0; i < last_insn + 1; i++) {
>              int opcode = packet->insn[i].opcode;
> 
> +            g_assert(packet->insn[i].has_pred_dest ==
> +                     (strstr(opcode_wregs[opcode], "Pd4") ||
> +                      strstr(opcode_wregs[opcode], "Pe4")));
>              if ((strstr(opcode_wregs[opcode], "Pd4") ||
>                   strstr(opcode_wregs[opcode], "Pe4")) &&
>                  GET_ATTRIB(opcode, A_STORE) == 0) {
> diff --git a/target/hexagon/gen_trans_funcs.py
> b/target/hexagon/gen_trans_funcs.py
> index 1201172dda..9f86b4edbd 100755
> --- a/target/hexagon/gen_trans_funcs.py
> +++ b/target/hexagon/gen_trans_funcs.py
> @@ -70,6 +70,7 @@ def mark_which_imm_extended(f, tag):
>  ##         insn->regno[2] = args->Rt;
>  ##         insn->new_read_idx = -1;
>  ##         insn->dest_idx = 0;
> +##         insn->has_pred_dest = false;
>  ##         return true;
>  ##     }
>  ##
> @@ -88,6 +89,7 @@ def gen_trans_funcs(f):
> 
>          new_read_idx = -1
>          dest_idx = -1
> +        has_pred_dest = "false"
>          for regno, (reg_type, reg_id, *_) in enumerate(regs):
>              reg = hex_common.get_register(tag, reg_type, reg_id)
>              f.write(code_fmt(f"""\
> @@ -98,6 +100,8 @@ def gen_trans_funcs(f):
>              # dest_idx should be the first destination, so check for -1
>              if reg.is_written() and dest_idx == -1:
>                  dest_idx = regno
> +            if reg_type == "P" and reg.is_written() and not reg.is_read():
> +                has_pred_dest = "true"
> 
>          if len(imms) != 0:
>              mark_which_imm_extended(f, tag)
> @@ -121,6 +125,7 @@ def gen_trans_funcs(f):
>          f.write(code_fmt(f"""\
>              insn->new_read_idx = {new_read_idx};
>              insn->dest_idx = {dest_idx};
> +            insn->has_pred_dest = {has_pred_dest};
>          """))
>          f.write(textwrap.dedent(f"""\
>                  return true;
> --
> 2.34.1


^ permalink raw reply	[flat|nested] 21+ messages in thread

* RE: [PATCH v2 5/9] Hexagon (tests/tcg/hexagon) Test HVX .new read from high half of pair
  2024-03-07  3:23 ` [PATCH v2 5/9] Hexagon (tests/tcg/hexagon) Test HVX .new read from high half of pair Taylor Simpson
@ 2024-03-29  1:05   ` Brian Cain
  0 siblings, 0 replies; 21+ messages in thread
From: Brian Cain @ 2024-03-29  1:05 UTC (permalink / raw)
  To: Taylor Simpson, qemu-devel
  Cc: Matheus Bernardino (QUIC), Sid Manning, Marco Liebel (QUIC),
	richard.henderson, philmd, ale, anjo



> -----Original Message-----
> From: Taylor Simpson <ltaylorsimpson@gmail.com>
> Sent: Wednesday, March 6, 2024 9:23 PM
> To: qemu-devel@nongnu.org
> Cc: Brian Cain <bcain@quicinc.com>; Matheus Bernardino (QUIC)
> <quic_mathbern@quicinc.com>; Sid Manning <sidneym@quicinc.com>;
> Marco Liebel (QUIC) <quic_mliebel@quicinc.com>;
> richard.henderson@linaro.org; philmd@linaro.org; ale@rev.ng; anjo@rev.ng;
> ltaylorsimpson@gmail.com
> Subject: [PATCH v2 5/9] Hexagon (tests/tcg/hexagon) Test HVX .new read
> from high half of pair
> 
> WARNING: This email originated from outside of Qualcomm. Please be wary
> of any links or attachments, and do not enable macros.
> 
> Make sure the decoding of HVX .new is correctly handling this case
> 
> Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
> ---

Reviewed-by: Brian Cain <bcain@quicinc.com>

>  tests/tcg/hexagon/hvx_misc.c | 16 +++++++++++++++-
>  1 file changed, 15 insertions(+), 1 deletion(-)
> 
> diff --git a/tests/tcg/hexagon/hvx_misc.c b/tests/tcg/hexagon/hvx_misc.c
> index b45170acd1..1fe14b5158 100644
> --- a/tests/tcg/hexagon/hvx_misc.c
> +++ b/tests/tcg/hexagon/hvx_misc.c
> @@ -1,5 +1,5 @@
>  /*
> - *  Copyright(c) 2021-2023 Qualcomm Innovation Center, Inc. All Rights
> Reserved.
> + *  Copyright(c) 2021-2024 Qualcomm Innovation Center, Inc. All Rights
> Reserved.
>   *
>   *  This program is free software; you can redistribute it and/or modify
>   *  it under the terms of the GNU General Public License as published by
> @@ -231,6 +231,7 @@ static void test_masked_store(bool invert)
>  static void test_new_value_store(void)
>  {
>      void *p0 = buffer0;
> +    void *p1 = buffer1;
>      void *pout = output;
> 
>      asm("{\n\t"
> @@ -242,6 +243,19 @@ static void test_new_value_store(void)
>      expect[0] = buffer0[0];
> 
>      check_output_w(__LINE__, 1);
> +
> +    /* Test the .new read from the high half of a pair */
> +    asm("v7 = vmem(%0 + #0)\n\t"
> +        "v12 = vmem(%1 + #0)\n\t"
> +        "{\n\t"
> +        "    v5:4 = vcombine(v12, v7)\n\t"
> +        "    vmem(%2 + #0) = v5.new\n\t"
> +        "}\n\t"
> +        : : "r"(p0), "r"(p1), "r"(pout) : "v4", "v5", "v7", "v12", "memory");
> +
> +    expect[0] = buffer1[0];
> +
> +    check_output_w(__LINE__, 1);
>  }
> 
>  static void test_max_temps()
> --
> 2.34.1


^ permalink raw reply	[flat|nested] 21+ messages in thread

* RE: [PATCH v2 3/9] Hexagon (target/hexagon) Mark dest_idx in trans functions
  2024-03-07  3:23 ` [PATCH v2 3/9] Hexagon (target/hexagon) Mark dest_idx " Taylor Simpson
@ 2024-03-29  1:05   ` Brian Cain
  0 siblings, 0 replies; 21+ messages in thread
From: Brian Cain @ 2024-03-29  1:05 UTC (permalink / raw)
  To: Taylor Simpson, qemu-devel
  Cc: Matheus Bernardino (QUIC), Sid Manning, Marco Liebel (QUIC),
	richard.henderson, philmd, ale, anjo



> -----Original Message-----
> From: Taylor Simpson <ltaylorsimpson@gmail.com>
> Sent: Wednesday, March 6, 2024 9:23 PM
> To: qemu-devel@nongnu.org
> Cc: Brian Cain <bcain@quicinc.com>; Matheus Bernardino (QUIC)
> <quic_mathbern@quicinc.com>; Sid Manning <sidneym@quicinc.com>;
> Marco Liebel (QUIC) <quic_mliebel@quicinc.com>;
> richard.henderson@linaro.org; philmd@linaro.org; ale@rev.ng; anjo@rev.ng;
> ltaylorsimpson@gmail.com
> Subject: [PATCH v2 3/9] Hexagon (target/hexagon) Mark dest_idx in trans
> functions
> 
> WARNING: This email originated from outside of Qualcomm. Please be wary
> of any links or attachments, and do not enable macros.
> 
> Check that the value matches opcode_reginfo/opcode_wregs
> 
> Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
> ---

Reviewed-by: Brian Cain <bcain@quicinc.com>

>  target/hexagon/insn.h                   | 1 +
>  target/hexagon/decode.c                 | 2 ++
>  target/hexagon/mmvec/decode_ext_mmvec.c | 2 ++
>  target/hexagon/gen_trans_funcs.py       | 6 ++++++
>  4 files changed, 11 insertions(+)
> 
> diff --git a/target/hexagon/insn.h b/target/hexagon/insn.h
> index 36502bf056..a770379958 100644
> --- a/target/hexagon/insn.h
> +++ b/target/hexagon/insn.h
> @@ -40,6 +40,7 @@ struct Instruction {
>      uint32_t which_extended:1;    /* If has an extender, which immediate */
>      uint32_t new_value_producer_slot:4;
>      int32_t new_read_idx;
> +    int32_t dest_idx;
> 
>      bool part1;              /*
>                                * cmp-jumps are split into two insns.
> diff --git a/target/hexagon/decode.c b/target/hexagon/decode.c
> index 4595e30384..a4d8500fea 100644
> --- a/target/hexagon/decode.c
> +++ b/target/hexagon/decode.c
> @@ -184,6 +184,8 @@ decode_fill_newvalue_regno(Packet *packet)
> 
>              /* Now patch up the consumer with the register number */
>              dst_idx = dststr - opcode_reginfo[def_opcode];
> +            g_assert(packet->insn[def_idx].dest_idx != -1 &&
> +                     packet->insn[def_idx].dest_idx == dst_idx);
>              packet->insn[i].regno[use_regidx] =
>                  packet->insn[def_idx].regno[dst_idx];
>              /*
> diff --git a/target/hexagon/mmvec/decode_ext_mmvec.c
> b/target/hexagon/mmvec/decode_ext_mmvec.c
> index e9007f5d71..c1320406df 100644
> --- a/target/hexagon/mmvec/decode_ext_mmvec.c
> +++ b/target/hexagon/mmvec/decode_ext_mmvec.c
> @@ -86,6 +86,8 @@ check_new_value(Packet *pkt)
>                      /* still not there, we have a bad packet */
>                      g_assert_not_reached();
>                  }
> +                g_assert(pkt->insn[def_idx].dest_idx != -1 &&
> +                         pkt->insn[def_idx].dest_idx == dststr - reginfo);
>                  int def_regnum = pkt->insn[def_idx].regno[dststr - reginfo];
>                  /* Now patch up the consumer with the register number */
>                  pkt->insn[i].regno[use_regidx] = def_regnum ^ def_oreg;
> diff --git a/target/hexagon/gen_trans_funcs.py
> b/target/hexagon/gen_trans_funcs.py
> index 8acecdb993..1201172dda 100755
> --- a/target/hexagon/gen_trans_funcs.py
> +++ b/target/hexagon/gen_trans_funcs.py
> @@ -69,6 +69,7 @@ def mark_which_imm_extended(f, tag):
>  ##         insn->regno[1] = args->Rs;
>  ##         insn->regno[2] = args->Rt;
>  ##         insn->new_read_idx = -1;
> +##         insn->dest_idx = 0;
>  ##         return true;
>  ##     }
>  ##
> @@ -86,6 +87,7 @@ def gen_trans_funcs(f):
>          """))
> 
>          new_read_idx = -1
> +        dest_idx = -1
>          for regno, (reg_type, reg_id, *_) in enumerate(regs):
>              reg = hex_common.get_register(tag, reg_type, reg_id)
>              f.write(code_fmt(f"""\
> @@ -93,6 +95,9 @@ def gen_trans_funcs(f):
>              """))
>              if reg.is_read() and reg.is_new():
>                  new_read_idx = regno
> +            # dest_idx should be the first destination, so check for -1
> +            if reg.is_written() and dest_idx == -1:
> +                dest_idx = regno
> 
>          if len(imms) != 0:
>              mark_which_imm_extended(f, tag)
> @@ -115,6 +120,7 @@ def gen_trans_funcs(f):
> 
>          f.write(code_fmt(f"""\
>              insn->new_read_idx = {new_read_idx};
> +            insn->dest_idx = {dest_idx};
>          """))
>          f.write(textwrap.dedent(f"""\
>                  return true;
> --
> 2.34.1


^ permalink raw reply	[flat|nested] 21+ messages in thread

* RE: [PATCH v2 2/9] Hexagon (target/hexagon) Mark new_read_idx in trans functions
  2024-03-07  3:23 ` [PATCH v2 2/9] Hexagon (target/hexagon) Mark new_read_idx in trans functions Taylor Simpson
@ 2024-03-29  1:05   ` Brian Cain
  0 siblings, 0 replies; 21+ messages in thread
From: Brian Cain @ 2024-03-29  1:05 UTC (permalink / raw)
  To: Taylor Simpson, qemu-devel
  Cc: Matheus Bernardino (QUIC), Sid Manning, Marco Liebel (QUIC),
	richard.henderson, philmd, ale, anjo



> -----Original Message-----
> From: Taylor Simpson <ltaylorsimpson@gmail.com>
> Sent: Wednesday, March 6, 2024 9:23 PM
> To: qemu-devel@nongnu.org
> Cc: Brian Cain <bcain@quicinc.com>; Matheus Bernardino (QUIC)
> <quic_mathbern@quicinc.com>; Sid Manning <sidneym@quicinc.com>;
> Marco Liebel (QUIC) <quic_mliebel@quicinc.com>;
> richard.henderson@linaro.org; philmd@linaro.org; ale@rev.ng; anjo@rev.ng;
> ltaylorsimpson@gmail.com
> Subject: [PATCH v2 2/9] Hexagon (target/hexagon) Mark new_read_idx in
> trans functions
> 
> WARNING: This email originated from outside of Qualcomm. Please be wary
> of any links or attachments, and do not enable macros.
> 
> Check that the value matches opcode_reginfo
> 
> Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
> ---

Reviewed-by: Brian Cain <bcain@quicinc.com>


>  target/hexagon/insn.h                   |  3 ++-
>  target/hexagon/decode.c                 |  2 ++
>  target/hexagon/mmvec/decode_ext_mmvec.c |  2 ++
>  target/hexagon/gen_trans_funcs.py       | 15 ++++++++++-----
>  4 files changed, 16 insertions(+), 6 deletions(-)
> 
> diff --git a/target/hexagon/insn.h b/target/hexagon/insn.h
> index 3e7a22c91e..36502bf056 100644
> --- a/target/hexagon/insn.h
> +++ b/target/hexagon/insn.h
> @@ -1,5 +1,5 @@
>  /*
> - *  Copyright(c) 2019-2022 Qualcomm Innovation Center, Inc. All Rights
> Reserved.
> + *  Copyright(c) 2019-2024 Qualcomm Innovation Center, Inc. All Rights
> Reserved.
>   *
>   *  This program is free software; you can redistribute it and/or modify
>   *  it under the terms of the GNU General Public License as published by
> @@ -39,6 +39,7 @@ struct Instruction {
>      uint32_t slot:3;
>      uint32_t which_extended:1;    /* If has an extender, which immediate */
>      uint32_t new_value_producer_slot:4;
> +    int32_t new_read_idx;
> 
>      bool part1;              /*
>                                * cmp-jumps are split into two insns.
> diff --git a/target/hexagon/decode.c b/target/hexagon/decode.c
> index a40210ca1e..4595e30384 100644
> --- a/target/hexagon/decode.c
> +++ b/target/hexagon/decode.c
> @@ -131,6 +131,8 @@ decode_fill_newvalue_regno(Packet *packet)
>                  use_regidx = strchr(opcode_reginfo[use_opcode], 's') -
>                      opcode_reginfo[use_opcode];
>              }
> +            g_assert(packet->insn[i].new_read_idx != -1 &&
> +                     packet->insn[i].new_read_idx == use_regidx);
> 
>              /*
>               * What's encoded at the N-field is the offset to who's producing
> diff --git a/target/hexagon/mmvec/decode_ext_mmvec.c
> b/target/hexagon/mmvec/decode_ext_mmvec.c
> index 202d84c7c0..e9007f5d71 100644
> --- a/target/hexagon/mmvec/decode_ext_mmvec.c
> +++ b/target/hexagon/mmvec/decode_ext_mmvec.c
> @@ -41,6 +41,8 @@ check_new_value(Packet *pkt)
>              GET_ATTRIB(use_opcode, A_STORE)) {
>              int use_regidx = strchr(opcode_reginfo[use_opcode], 's') -
>                  opcode_reginfo[use_opcode];
> +            g_assert(pkt->insn[i].new_read_idx != -1 &&
> +                     pkt->insn[i].new_read_idx == use_regidx);
>              /*
>               * What's encoded at the N-field is the offset to who's producing
>               * the value.
> diff --git a/target/hexagon/gen_trans_funcs.py
> b/target/hexagon/gen_trans_funcs.py
> index 53e844a44b..8acecdb993 100755
> --- a/target/hexagon/gen_trans_funcs.py
> +++ b/target/hexagon/gen_trans_funcs.py
> @@ -68,6 +68,7 @@ def mark_which_imm_extended(f, tag):
>  ##         insn->regno[0] = args->Rd;
>  ##         insn->regno[1] = args->Rs;
>  ##         insn->regno[2] = args->Rt;
> +##         insn->new_read_idx = -1;
>  ##         return true;
>  ##     }
>  ##
> @@ -84,14 +85,14 @@ def gen_trans_funcs(f):
>                  insn->opcode = {tag};
>          """))
> 
> -        regno = 0
> -        for reg in regs:
> -            reg_type = reg[0]
> -            reg_id = reg[1]
> +        new_read_idx = -1
> +        for regno, (reg_type, reg_id, *_) in enumerate(regs):
> +            reg = hex_common.get_register(tag, reg_type, reg_id)
>              f.write(code_fmt(f"""\
>                  insn->regno[{regno}] = args->{reg_type}{reg_id};
>              """))
> -            regno += 1
> +            if reg.is_read() and reg.is_new():
> +                new_read_idx = regno
> 
>          if len(imms) != 0:
>              mark_which_imm_extended(f, tag)
> @@ -112,6 +113,9 @@ def gen_trans_funcs(f):
>                      insn->immed[{immno}] = args->{imm_type}{imm_letter};
>                  """))
> 
> +        f.write(code_fmt(f"""\
> +            insn->new_read_idx = {new_read_idx};
> +        """))
>          f.write(textwrap.dedent(f"""\
>                  return true;
>              {close_curly}
> @@ -120,5 +124,6 @@ def gen_trans_funcs(f):
> 
>  if __name__ == "__main__":
>      hex_common.read_semantics_file(sys.argv[1])
> +    hex_common.init_registers()
>      with open(sys.argv[2], "w") as f:
>          gen_trans_funcs(f)
> --
> 2.34.1


^ permalink raw reply	[flat|nested] 21+ messages in thread

* RE: [PATCH v2 1/9] Hexagon (target/hexagon) Add is_old/is_new to Register class
  2024-03-07  3:23 ` [PATCH v2 1/9] Hexagon (target/hexagon) Add is_old/is_new to Register class Taylor Simpson
@ 2024-03-29  1:05   ` Brian Cain
  0 siblings, 0 replies; 21+ messages in thread
From: Brian Cain @ 2024-03-29  1:05 UTC (permalink / raw)
  To: Taylor Simpson, qemu-devel
  Cc: Matheus Bernardino (QUIC), Sid Manning, Marco Liebel (QUIC),
	richard.henderson, philmd, ale, anjo



> -----Original Message-----
> From: Taylor Simpson <ltaylorsimpson@gmail.com>
> Sent: Wednesday, March 6, 2024 9:23 PM
> To: qemu-devel@nongnu.org
> Cc: Brian Cain <bcain@quicinc.com>; Matheus Bernardino (QUIC)
> <quic_mathbern@quicinc.com>; Sid Manning <sidneym@quicinc.com>;
> Marco Liebel (QUIC) <quic_mliebel@quicinc.com>;
> richard.henderson@linaro.org; philmd@linaro.org; ale@rev.ng; anjo@rev.ng;
> ltaylorsimpson@gmail.com
> Subject: [PATCH v2 1/9] Hexagon (target/hexagon) Add is_old/is_new to
> Register class
> 
> WARNING: This email originated from outside of Qualcomm. Please be wary
> of any links or attachments, and do not enable macros.
> 
> Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---

Reviewed-by: Brian Cain <bcain@quicinc.com>

>  target/hexagon/hex_common.py | 14 +++++++++++++-
>  1 file changed, 13 insertions(+), 1 deletion(-)
> 
> diff --git a/target/hexagon/hex_common.py
> b/target/hexagon/hex_common.py
> index 195620c7ec..4bacef223f 100755
> --- a/target/hexagon/hex_common.py
> +++ b/target/hexagon/hex_common.py
> @@ -1,7 +1,7 @@
>  #!/usr/bin/env python3
> 
>  ##
> -##  Copyright(c) 2019-2023 Qualcomm Innovation Center, Inc. All Rights
> Reserved.
> +##  Copyright(c) 2019-2024 Qualcomm Innovation Center, Inc. All Rights
> Reserved.
>  ##
>  ##  This program is free software; you can redistribute it and/or modify
>  ##  it under the terms of the GNU General Public License as published by
> @@ -397,10 +397,18 @@ def is_readwrite(self):
>  class OldSource(Source):
>      def reg_tcg(self):
>          return f"{self.regtype}{self.regid}V"
> +    def is_old(self):
> +        return True
> +    def is_new(self):
> +        return False
> 
>  class NewSource(Source):
>      def reg_tcg(self):
>          return f"{self.regtype}{self.regid}N"
> +    def is_old(self):
> +        return False
> +    def is_new(self):
> +        return True
> 
>  class ReadWrite:
>      def reg_tcg(self):
> @@ -413,6 +421,10 @@ def is_read(self):
>          return True
>      def is_readwrite(self):
>          return True
> +    def is_old(self):
> +        return True
> +    def is_new(self):
> +        return False
> 
>  class GprDest(Register, Single, Dest):
>      def decl_tcg(self, f, tag, regno):
> --
> 2.34.1


^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2024-03-29  1:06 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-03-07  3:23 [PATCH v2 0/9] Clean up .new decode and scripts Taylor Simpson
2024-03-07  3:23 ` [PATCH v2 1/9] Hexagon (target/hexagon) Add is_old/is_new to Register class Taylor Simpson
2024-03-29  1:05   ` Brian Cain
2024-03-07  3:23 ` [PATCH v2 2/9] Hexagon (target/hexagon) Mark new_read_idx in trans functions Taylor Simpson
2024-03-29  1:05   ` Brian Cain
2024-03-07  3:23 ` [PATCH v2 3/9] Hexagon (target/hexagon) Mark dest_idx " Taylor Simpson
2024-03-29  1:05   ` Brian Cain
2024-03-07  3:23 ` [PATCH v2 4/9] Hexagon (target/hexagon) Mark has_pred_dest " Taylor Simpson
2024-03-29  1:04   ` Brian Cain
2024-03-07  3:23 ` [PATCH v2 5/9] Hexagon (tests/tcg/hexagon) Test HVX .new read from high half of pair Taylor Simpson
2024-03-29  1:05   ` Brian Cain
2024-03-07  3:23 ` [PATCH v2 6/9] Hexagon (target/hexagon) Remove uses of op_regs_generated.h.inc Taylor Simpson
2024-03-29  1:04   ` Brian Cain
2024-03-07  3:23 ` [PATCH v2 7/9] Hexagon (target/hexagon) Remove gen_op_regs.py Taylor Simpson
2024-03-29  1:04   ` Brian Cain
2024-03-07  3:23 ` [PATCH v2 8/9] Hexagon (target/hexagon) Remove gen_shortcode.py Taylor Simpson
2024-03-07 10:07   ` Philippe Mathieu-Daudé
2024-03-29  1:03   ` Brian Cain
2024-03-07  3:23 ` [PATCH v2 9/9] Hexagon (target/hexagon) Remove hex_common.read_attribs_file Taylor Simpson
2024-03-07 10:09   ` Philippe Mathieu-Daudé
2024-03-29  1:03   ` Brian Cain

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.