All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/5] misc hexagon patches
@ 2025-04-07 19:27 Brian Cain
  2025-04-07 19:27 ` [PATCH v3 1/5] target/hexagon: handle .new values Brian Cain
                   ` (5 more replies)
  0 siblings, 6 replies; 14+ messages in thread
From: Brian Cain @ 2025-04-07 19:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: brian.cain, richard.henderson, philmd, matheus.bernardino, ale,
	anjo, marco.liebel, ltaylorsimpson, alex.bennee, quic_mburton,
	sidneym

Changes since previous "misc hexagon patches" series (v2):
- changed author to match MAINTAINERS (I was fooled by the mailmap before --
so, for real this time).


Brian Cain (5):
  target/hexagon: handle .new values
  target/hexagon: Fix badva reference, delete CAUSE
  target/hexagon: Add missing A_CALL attr, hintjumpr to multi_cof
  target/hexagon: s/pkt_has_store/pkt_has_scalar_store
  target/hexagon: Remove unreachable

 target/hexagon/idef-parser/README.rst       |  2 +-
 target/hexagon/insn.h                       |  4 +--
 target/hexagon/macros.h                     |  8 +++---
 target/hexagon/cpu.c                        |  3 +--
 target/hexagon/decode.c                     | 10 ++++---
 target/hexagon/genptr.c                     |  3 ++-
 target/hexagon/idef-parser/parser-helpers.c |  4 +--
 target/hexagon/op_helper.c                  |  4 +--
 target/hexagon/translate.c                  |  9 ++++---
 target/hexagon/gen_helper_funcs.py          |  2 +-
 target/hexagon/hex_common.py                | 29 ++++++++++++++++-----
 11 files changed, 49 insertions(+), 29 deletions(-)

-- 
2.34.1


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

* [PATCH v3 1/5] target/hexagon: handle .new values
  2025-04-07 19:27 [PATCH v3 0/5] misc hexagon patches Brian Cain
@ 2025-04-07 19:27 ` Brian Cain
  2025-04-14 16:47   ` ltaylorsimpson
  2025-04-07 19:27 ` [PATCH v3 2/5] target/hexagon: Fix badva reference, delete CAUSE Brian Cain
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 14+ messages in thread
From: Brian Cain @ 2025-04-07 19:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: brian.cain, richard.henderson, philmd, matheus.bernardino, ale,
	anjo, marco.liebel, ltaylorsimpson, alex.bennee, quic_mburton,
	sidneym

Signed-off-by: Brian Cain <brian.cain@oss.qualcomm.com>
---
 target/hexagon/hex_common.py | 22 +++++++++++++++++-----
 1 file changed, 17 insertions(+), 5 deletions(-)

diff --git a/target/hexagon/hex_common.py b/target/hexagon/hex_common.py
index 758e5fd12d..6803908718 100755
--- a/target/hexagon/hex_common.py
+++ b/target/hexagon/hex_common.py
@@ -350,6 +350,7 @@ def helper_arg(self):
             f"{self.helper_arg_type()} {self.helper_arg_name()}"
         )
 
+
 #
 # Every register is either Single or Pair or Hvx
 #
@@ -1070,11 +1071,22 @@ def init_registers():
     for reg in new_regs:
         new_registers[f"{reg.regtype}{reg.regid}"] = reg
 
-def get_register(tag, regtype, regid):
-    if f"{regtype}{regid}V" in semdict[tag]:
-        return registers[f"{regtype}{regid}"]
-    else:
-        return new_registers[f"{regtype}{regid}"]
+def is_new_reg(tag, regid):
+    if regid[0] in "NO":
+        return True
+    return regid[0] == "P" and \
+           f"{regid}N" in semdict[tag] and \
+           f"{regid}V" not in semdict[tag]
+
+def get_register(tag, regtype, regid, subtype=""):
+    regid = f"{regtype}{regid}"
+    is_new = is_new_reg(tag, regid)
+    try:
+        reg = new_registers[regid] if is_new else registers[regid]
+    except KeyError:
+        raise Exception(f"Unknown {'new ' if is_new else ''}register {regid}" +\
+                        f"from '{tag}' with syntax '{semdict[tag]}'") from None
+    return reg
 
 def helper_ret_type(tag, regs):
     ## If there is a scalar result, it is the return type
-- 
2.34.1


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

* [PATCH v3 2/5] target/hexagon: Fix badva reference, delete CAUSE
  2025-04-07 19:27 [PATCH v3 0/5] misc hexagon patches Brian Cain
  2025-04-07 19:27 ` [PATCH v3 1/5] target/hexagon: handle .new values Brian Cain
@ 2025-04-07 19:27 ` Brian Cain
  2025-04-14 16:53   ` ltaylorsimpson
  2025-04-07 19:27 ` [PATCH v3 3/5] target/hexagon: Add missing A_CALL attr, hintjumpr to multi_cof Brian Cain
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 14+ messages in thread
From: Brian Cain @ 2025-04-07 19:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: brian.cain, richard.henderson, philmd, matheus.bernardino, ale,
	anjo, marco.liebel, ltaylorsimpson, alex.bennee, quic_mburton,
	sidneym

The BADVA reg is referred to with the wrong identifier.  The
CAUSE reg field of SSR is not yet modeled.

Signed-off-by: Brian Cain <brian.cain@oss.qualcomm.com>
---
 target/hexagon/cpu.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/target/hexagon/cpu.c b/target/hexagon/cpu.c
index 766b678651..62f1fe15b8 100644
--- a/target/hexagon/cpu.c
+++ b/target/hexagon/cpu.c
@@ -216,8 +216,7 @@ static void hexagon_dump(CPUHexagonState *env, FILE *f, int flags)
     qemu_fprintf(f, "  cs0 = 0x00000000\n");
     qemu_fprintf(f, "  cs1 = 0x00000000\n");
 #else
-    print_reg(f, env, HEX_REG_CAUSE);
-    print_reg(f, env, HEX_REG_BADVA);
+    print_reg(f, env, HEX_SREG_BADVA);
     print_reg(f, env, HEX_REG_CS0);
     print_reg(f, env, HEX_REG_CS1);
 #endif
-- 
2.34.1


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

* [PATCH v3 3/5] target/hexagon: Add missing A_CALL attr, hintjumpr to multi_cof
  2025-04-07 19:27 [PATCH v3 0/5] misc hexagon patches Brian Cain
  2025-04-07 19:27 ` [PATCH v3 1/5] target/hexagon: handle .new values Brian Cain
  2025-04-07 19:27 ` [PATCH v3 2/5] target/hexagon: Fix badva reference, delete CAUSE Brian Cain
@ 2025-04-07 19:27 ` Brian Cain
  2025-04-14 17:04   ` ltaylorsimpson
  2025-04-07 19:27 ` [PATCH v3 4/5] target/hexagon: s/pkt_has_store/pkt_has_scalar_store Brian Cain
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 14+ messages in thread
From: Brian Cain @ 2025-04-07 19:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: brian.cain, richard.henderson, philmd, matheus.bernardino, ale,
	anjo, marco.liebel, ltaylorsimpson, alex.bennee, quic_mburton,
	sidneym

Signed-off-by: Brian Cain <brian.cain@oss.qualcomm.com>
---
 target/hexagon/hex_common.py | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/target/hexagon/hex_common.py b/target/hexagon/hex_common.py
index 6803908718..a2dcb0aa2e 100755
--- a/target/hexagon/hex_common.py
+++ b/target/hexagon/hex_common.py
@@ -247,8 +247,11 @@ def need_next_PC(tag):
 
 
 def need_pkt_has_multi_cof(tag):
-    return "A_COF" in attribdict[tag]
-
+    return (
+        "A_JUMP" in attribdict[tag]
+        or "A_CALL" in attribdict[tag]
+        or "J2_rte" == tag
+    ) and tag != "J2_hintjumpr"
 
 def need_pkt_need_commit(tag):
     return 'A_IMPLICIT_WRITES_USR' in attribdict[tag]
-- 
2.34.1


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

* [PATCH v3 4/5] target/hexagon: s/pkt_has_store/pkt_has_scalar_store
  2025-04-07 19:27 [PATCH v3 0/5] misc hexagon patches Brian Cain
                   ` (2 preceding siblings ...)
  2025-04-07 19:27 ` [PATCH v3 3/5] target/hexagon: Add missing A_CALL attr, hintjumpr to multi_cof Brian Cain
@ 2025-04-07 19:27 ` Brian Cain
  2025-04-14 17:06   ` ltaylorsimpson
  2025-04-07 19:27 ` [PATCH v3 5/5] target/hexagon: Remove unreachable Brian Cain
  2025-04-07 19:37 ` [PATCH v3 0/5] misc hexagon patches Matheus Tavares Bernardino
  5 siblings, 1 reply; 14+ messages in thread
From: Brian Cain @ 2025-04-07 19:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: brian.cain, richard.henderson, philmd, matheus.bernardino, ale,
	anjo, marco.liebel, ltaylorsimpson, alex.bennee, quic_mburton,
	sidneym

To remove any confusion with HVX or other potential store instructions,
we'll qualify this context var with "scalar".

Signed-off-by: Brian Cain <brian.cain@oss.qualcomm.com>
---
 target/hexagon/idef-parser/README.rst       | 2 +-
 target/hexagon/insn.h                       | 4 ++--
 target/hexagon/macros.h                     | 8 ++++----
 target/hexagon/decode.c                     | 4 ++--
 target/hexagon/genptr.c                     | 3 ++-
 target/hexagon/idef-parser/parser-helpers.c | 4 ++--
 target/hexagon/op_helper.c                  | 4 ++--
 target/hexagon/translate.c                  | 9 +++++----
 target/hexagon/gen_helper_funcs.py          | 2 +-
 9 files changed, 21 insertions(+), 19 deletions(-)

diff --git a/target/hexagon/idef-parser/README.rst b/target/hexagon/idef-parser/README.rst
index 7199177ee3..235e3debee 100644
--- a/target/hexagon/idef-parser/README.rst
+++ b/target/hexagon/idef-parser/README.rst
@@ -637,7 +637,7 @@ tinycode for the Hexagon ``add`` instruction
 ::
 
    ---- 00021094
-   mov_i32 pkt_has_store_s1,$0x0
+   mov_i32 pkt_has_scalar_store_s1,$0x0
    add_i32 tmp0,r2,r2
    mov_i32 loc2,tmp0
    mov_i32 new_r1,loc2
diff --git a/target/hexagon/insn.h b/target/hexagon/insn.h
index 24dcf7fe9f..5d59430da9 100644
--- a/target/hexagon/insn.h
+++ b/target/hexagon/insn.h
@@ -66,8 +66,8 @@ struct Packet {
 
     bool pkt_has_dczeroa;
 
-    bool pkt_has_store_s0;
-    bool pkt_has_store_s1;
+    bool pkt_has_scalar_store_s0;
+    bool pkt_has_scalar_store_s1;
 
     bool pkt_has_hvx;
     Insn *vhist_insn;
diff --git a/target/hexagon/macros.h b/target/hexagon/macros.h
index ee3d4c88e7..b6e5c8aae2 100644
--- a/target/hexagon/macros.h
+++ b/target/hexagon/macros.h
@@ -82,7 +82,7 @@
  */
 #define CHECK_NOSHUF(VA, SIZE) \
     do { \
-        if (insn->slot == 0 && ctx->pkt->pkt_has_store_s1) { \
+        if (insn->slot == 0 && ctx->pkt->pkt_has_scalar_store_s1) { \
             probe_noshuf_load(VA, SIZE, ctx->mem_idx); \
             process_store(ctx, 1); \
         } \
@@ -93,11 +93,11 @@
         TCGLabel *noshuf_label = gen_new_label(); \
         tcg_gen_brcondi_tl(TCG_COND_EQ, PRED, 0, noshuf_label); \
         GET_EA; \
-        if (insn->slot == 0 && ctx->pkt->pkt_has_store_s1) { \
+        if (insn->slot == 0 && ctx->pkt->pkt_has_scalar_store_s1) { \
             probe_noshuf_load(EA, SIZE, ctx->mem_idx); \
         } \
         gen_set_label(noshuf_label); \
-        if (insn->slot == 0 && ctx->pkt->pkt_has_store_s1) { \
+        if (insn->slot == 0 && ctx->pkt->pkt_has_scalar_store_s1) { \
             process_store(ctx, 1); \
         } \
     } while (0)
@@ -524,7 +524,7 @@ static inline TCGv gen_read_ireg(TCGv result, TCGv val, int shift)
 
 #define fLOAD(NUM, SIZE, SIGN, EA, DST) \
     do { \
-        check_noshuf(env, pkt_has_store_s1, slot, EA, SIZE, GETPC()); \
+        check_noshuf(env, pkt_has_scalar_store_s1, slot, EA, SIZE, GETPC()); \
         DST = (size##SIZE##SIGN##_t)MEM_LOAD##SIZE(env, EA, GETPC()); \
     } while (0)
 #endif
diff --git a/target/hexagon/decode.c b/target/hexagon/decode.c
index 23deba2426..b5ece60450 100644
--- a/target/hexagon/decode.c
+++ b/target/hexagon/decode.c
@@ -236,9 +236,9 @@ static void decode_set_insn_attr_fields(Packet *pkt)
             if (GET_ATTRIB(opcode, A_SCALAR_STORE) &&
                 !GET_ATTRIB(opcode, A_MEMSIZE_0B)) {
                 if (pkt->insn[i].slot == 0) {
-                    pkt->pkt_has_store_s0 = true;
+                    pkt->pkt_has_scalar_store_s0 = true;
                 } else {
-                    pkt->pkt_has_store_s1 = true;
+                    pkt->pkt_has_scalar_store_s1 = true;
                 }
             }
         }
diff --git a/target/hexagon/genptr.c b/target/hexagon/genptr.c
index 2c5e15cfcf..7c73772e40 100644
--- a/target/hexagon/genptr.c
+++ b/target/hexagon/genptr.c
@@ -395,7 +395,8 @@ static inline void gen_store_conditional8(DisasContext *ctx,
 #ifndef CONFIG_HEXAGON_IDEF_PARSER
 static TCGv gen_slotval(DisasContext *ctx)
 {
-    int slotval = (ctx->pkt->pkt_has_store_s1 & 1) | (ctx->insn->slot << 1);
+    int slotval =
+        (ctx->pkt->pkt_has_scalar_store_s1 & 1) | (ctx->insn->slot << 1);
     return tcg_constant_tl(slotval);
 }
 #endif
diff --git a/target/hexagon/idef-parser/parser-helpers.c b/target/hexagon/idef-parser/parser-helpers.c
index a7dcd85fe4..3316c230f8 100644
--- a/target/hexagon/idef-parser/parser-helpers.c
+++ b/target/hexagon/idef-parser/parser-helpers.c
@@ -1725,7 +1725,7 @@ void gen_cancel(Context *c, YYLTYPE *locp)
 
 void gen_load_cancel(Context *c, YYLTYPE *locp)
 {
-    OUT(c, locp, "if (insn->slot == 0 && pkt->pkt_has_store_s1) {\n");
+    OUT(c, locp, "if (insn->slot == 0 && pkt->pkt_has_scalar_store_s1) {\n");
     OUT(c, locp, "ctx->s1_store_processed = false;\n");
     OUT(c, locp, "process_store(ctx, 1);\n");
     OUT(c, locp, "}\n");
@@ -1750,7 +1750,7 @@ void gen_load(Context *c, YYLTYPE *locp, HexValue *width,
 
     /* Lookup the effective address EA */
     find_variable(c, locp, ea, ea);
-    OUT(c, locp, "if (insn->slot == 0 && pkt->pkt_has_store_s1) {\n");
+    OUT(c, locp, "if (insn->slot == 0 && pkt->pkt_has_scalar_store_s1) {\n");
     OUT(c, locp, "probe_noshuf_load(", ea, ", ", width, ", ctx->mem_idx);\n");
     OUT(c, locp, "process_store(ctx, 1);\n");
     OUT(c, locp, "}\n");
diff --git a/target/hexagon/op_helper.c b/target/hexagon/op_helper.c
index 6da8db8ea5..6ff37680d9 100644
--- a/target/hexagon/op_helper.c
+++ b/target/hexagon/op_helper.c
@@ -463,11 +463,11 @@ void HELPER(probe_pkt_scalar_hvx_stores)(CPUHexagonState *env, int mask)
  * If the load is in slot 0 and there is a store in slot1 (that
  * wasn't cancelled), we have to do the store first.
  */
-static void check_noshuf(CPUHexagonState *env, bool pkt_has_store_s1,
+static void check_noshuf(CPUHexagonState *env, bool pkt_has_scalar_store_s1,
                          uint32_t slot, target_ulong vaddr, int size,
                          uintptr_t ra)
 {
-    if (slot == 0 && pkt_has_store_s1 &&
+    if (slot == 0 && pkt_has_scalar_store_s1 &&
         ((env->slot_cancelled & (1 << 1)) == 0)) {
         probe_read(env, vaddr, size, MMU_USER_IDX, ra);
         commit_store(env, 1, ra);
diff --git a/target/hexagon/translate.c b/target/hexagon/translate.c
index 5271c4e022..aca77dfdb1 100644
--- a/target/hexagon/translate.c
+++ b/target/hexagon/translate.c
@@ -705,11 +705,11 @@ static void process_store_log(DisasContext *ctx)
      *  the memory accesses overlap.
      */
     Packet *pkt = ctx->pkt;
-    if (pkt->pkt_has_store_s1) {
+    if (pkt->pkt_has_scalar_store_s1) {
         g_assert(!pkt->pkt_has_dczeroa);
         process_store(ctx, 1);
     }
-    if (pkt->pkt_has_store_s0) {
+    if (pkt->pkt_has_scalar_store_s0) {
         g_assert(!pkt->pkt_has_dczeroa);
         process_store(ctx, 0);
     }
@@ -834,8 +834,9 @@ static void gen_commit_packet(DisasContext *ctx)
      * involved in committing the packet.
      */
     Packet *pkt = ctx->pkt;
-    bool has_store_s0 = pkt->pkt_has_store_s0;
-    bool has_store_s1 = (pkt->pkt_has_store_s1 && !ctx->s1_store_processed);
+    bool has_store_s0 = pkt->pkt_has_scalar_store_s0;
+    bool has_store_s1 =
+        (pkt->pkt_has_scalar_store_s1 && !ctx->s1_store_processed);
     bool has_hvx_store = pkt_has_hvx_store(pkt);
     if (pkt->pkt_has_dczeroa) {
         /*
diff --git a/target/hexagon/gen_helper_funcs.py b/target/hexagon/gen_helper_funcs.py
index c1f806ac4b..a9c0e27a80 100755
--- a/target/hexagon/gen_helper_funcs.py
+++ b/target/hexagon/gen_helper_funcs.py
@@ -69,7 +69,7 @@ def gen_helper_function(f, tag, tagregs, tagimms):
     if hex_common.need_slot(tag):
         if "A_LOAD" in hex_common.attribdict[tag]:
             f.write(hex_common.code_fmt(f"""\
-                bool pkt_has_store_s1 = slotval & 0x1;
+                bool pkt_has_scalar_store_s1 = slotval & 0x1;
             """))
         f.write(hex_common.code_fmt(f"""\
             uint32_t slot = slotval >> 1;
-- 
2.34.1


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

* [PATCH v3 5/5] target/hexagon: Remove unreachable
  2025-04-07 19:27 [PATCH v3 0/5] misc hexagon patches Brian Cain
                   ` (3 preceding siblings ...)
  2025-04-07 19:27 ` [PATCH v3 4/5] target/hexagon: s/pkt_has_store/pkt_has_scalar_store Brian Cain
@ 2025-04-07 19:27 ` Brian Cain
  2025-04-14 17:19   ` ltaylorsimpson
  2025-04-07 19:37 ` [PATCH v3 0/5] misc hexagon patches Matheus Tavares Bernardino
  5 siblings, 1 reply; 14+ messages in thread
From: Brian Cain @ 2025-04-07 19:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: brian.cain, richard.henderson, philmd, matheus.bernardino, ale,
	anjo, marco.liebel, ltaylorsimpson, alex.bennee, quic_mburton,
	sidneym

We should raise an exception in the event that we encounter a packet
that can't be correctly decoded, not fault.

Signed-off-by: Brian Cain <brian.cain@oss.qualcomm.com>
---
 target/hexagon/decode.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/target/hexagon/decode.c b/target/hexagon/decode.c
index b5ece60450..1db7f1950f 100644
--- a/target/hexagon/decode.c
+++ b/target/hexagon/decode.c
@@ -489,7 +489,6 @@ decode_insns(DisasContext *ctx, Insn *insn, uint32_t encoding)
             insn->iclass = iclass_bits(encoding);
             return 1;
         }
-        g_assert_not_reached();
     } else {
         uint32_t iclass = get_duplex_iclass(encoding);
         unsigned int slot0_subinsn = get_slot0_subinsn(encoding);
@@ -512,6 +511,11 @@ decode_insns(DisasContext *ctx, Insn *insn, uint32_t encoding)
         }
         g_assert_not_reached();
     }
+    /*
+     * invalid/unrecognized opcode; return 1 and let gen_insn() raise an
+     * exception when it sees this empty insn.
+     */
+    return 1;
 }
 
 static void decode_add_endloop_insn(Insn *insn, int loopnum)
-- 
2.34.1


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

* Re: [PATCH v3 0/5] misc hexagon patches
  2025-04-07 19:27 [PATCH v3 0/5] misc hexagon patches Brian Cain
                   ` (4 preceding siblings ...)
  2025-04-07 19:27 ` [PATCH v3 5/5] target/hexagon: Remove unreachable Brian Cain
@ 2025-04-07 19:37 ` Matheus Tavares Bernardino
  5 siblings, 0 replies; 14+ messages in thread
From: Matheus Tavares Bernardino @ 2025-04-07 19:37 UTC (permalink / raw)
  To: brian.cain
  Cc: qemu-devel, richard.henderson, philmd, matheus.bernardino, ale,
	anjo, marco.liebel, ltaylorsimpson, alex.bennee, quic_mburton,
	sidneym

On Mon,  7 Apr 2025 12:27:00 -0700 Brian Cain <brian.cain@oss.qualcomm.com> wrote:
> 
> Brian Cain (5):
>   target/hexagon: handle .new values
>   target/hexagon: Fix badva reference, delete CAUSE
>   target/hexagon: Add missing A_CALL attr, hintjumpr to multi_cof
>   target/hexagon: s/pkt_has_store/pkt_has_scalar_store
>   target/hexagon: Remove unreachable

All patches,

Reviewed-by: Matheus Tavares Bernardino <matheus.bernardino@oss.qualcomm.com>


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

* RE: [PATCH v3 1/5] target/hexagon: handle .new values
  2025-04-07 19:27 ` [PATCH v3 1/5] target/hexagon: handle .new values Brian Cain
@ 2025-04-14 16:47   ` ltaylorsimpson
  0 siblings, 0 replies; 14+ messages in thread
From: ltaylorsimpson @ 2025-04-14 16:47 UTC (permalink / raw)
  To: 'Brian Cain', qemu-devel
  Cc: richard.henderson, philmd, matheus.bernardino, ale, anjo,
	marco.liebel, alex.bennee, quic_mburton, sidneym



> -----Original Message-----
> From: Brian Cain <brian.cain@oss.qualcomm.com>
> Sent: Monday, April 7, 2025 1:27 PM
> To: qemu-devel@nongnu.org
> Cc: brian.cain@oss.qualcomm.com; richard.henderson@linaro.org;
> philmd@linaro.org; matheus.bernardino@oss.qualcomm.com; ale@rev.ng;
> anjo@rev.ng; marco.liebel@oss.qualcomm.com; ltaylorsimpson@gmail.com;
> alex.bennee@linaro.org; quic_mburton@quicinc.com;
> sidneym@quicinc.com
> Subject: [PATCH v3 1/5] target/hexagon: handle .new values
> 
> Signed-off-by: Brian Cain <brian.cain@oss.qualcomm.com>
> ---
>  target/hexagon/hex_common.py | 22 +++++++++++++++++-----
>  1 file changed, 17 insertions(+), 5 deletions(-)

Reviewed-by: Taylor Simpson <ltaylorsimpson@gmail.com>




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

* RE: [PATCH v3 2/5] target/hexagon: Fix badva reference, delete CAUSE
  2025-04-07 19:27 ` [PATCH v3 2/5] target/hexagon: Fix badva reference, delete CAUSE Brian Cain
@ 2025-04-14 16:53   ` ltaylorsimpson
  0 siblings, 0 replies; 14+ messages in thread
From: ltaylorsimpson @ 2025-04-14 16:53 UTC (permalink / raw)
  To: 'Brian Cain', qemu-devel
  Cc: richard.henderson, philmd, matheus.bernardino, ale, anjo,
	marco.liebel, alex.bennee, quic_mburton, sidneym



> -----Original Message-----
> From: Brian Cain <brian.cain@oss.qualcomm.com>
> Sent: Monday, April 7, 2025 1:27 PM
> To: qemu-devel@nongnu.org
> Cc: brian.cain@oss.qualcomm.com; richard.henderson@linaro.org;
> philmd@linaro.org; matheus.bernardino@oss.qualcomm.com; ale@rev.ng;
> anjo@rev.ng; marco.liebel@oss.qualcomm.com; ltaylorsimpson@gmail.com;
> alex.bennee@linaro.org; quic_mburton@quicinc.com;
> sidneym@quicinc.com
> Subject: [PATCH v3 2/5] target/hexagon: Fix badva reference, delete CAUSE
> 
> The BADVA reg is referred to with the wrong identifier.  The CAUSE reg field
> of SSR is not yet modeled.
> 
> Signed-off-by: Brian Cain <brian.cain@oss.qualcomm.com>
> ---
>  target/hexagon/cpu.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/target/hexagon/cpu.c b/target/hexagon/cpu.c index
> 766b678651..62f1fe15b8 100644
> --- a/target/hexagon/cpu.c
> +++ b/target/hexagon/cpu.c
> @@ -216,8 +216,7 @@ static void hexagon_dump(CPUHexagonState *env,
> FILE *f, int flags)
>      qemu_fprintf(f, "  cs0 = 0x00000000\n");
>      qemu_fprintf(f, "  cs1 = 0x00000000\n");  #else
> -    print_reg(f, env, HEX_REG_CAUSE);
> -    print_reg(f, env, HEX_REG_BADVA);
> +    print_reg(f, env, HEX_SREG_BADVA);

Since BADVA is a proxy for BADVA0/BADVA1, consider naming it HEX_SREG_BADVA_ALIASED to help avoid the problems we've seen with HEX_REG_P3_0_ALIASED.

Taylor




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

* RE: [PATCH v3 3/5] target/hexagon: Add missing A_CALL attr, hintjumpr to multi_cof
  2025-04-07 19:27 ` [PATCH v3 3/5] target/hexagon: Add missing A_CALL attr, hintjumpr to multi_cof Brian Cain
@ 2025-04-14 17:04   ` ltaylorsimpson
  2025-04-15 18:22     ` Brian Cain
  0 siblings, 1 reply; 14+ messages in thread
From: ltaylorsimpson @ 2025-04-14 17:04 UTC (permalink / raw)
  To: 'Brian Cain', qemu-devel
  Cc: richard.henderson, philmd, matheus.bernardino, ale, anjo,
	marco.liebel, alex.bennee, quic_mburton, sidneym



> -----Original Message-----
> From: Brian Cain <brian.cain@oss.qualcomm.com>
> Sent: Monday, April 7, 2025 1:27 PM
> To: qemu-devel@nongnu.org
> Cc: brian.cain@oss.qualcomm.com; richard.henderson@linaro.org;
> philmd@linaro.org; matheus.bernardino@oss.qualcomm.com; ale@rev.ng;
> anjo@rev.ng; marco.liebel@oss.qualcomm.com; ltaylorsimpson@gmail.com;
> alex.bennee@linaro.org; quic_mburton@quicinc.com;
> sidneym@quicinc.com
> Subject: [PATCH v3 3/5] target/hexagon: Add missing A_CALL attr, hintjumpr
> to multi_cof
> 
> Signed-off-by: Brian Cain <brian.cain@oss.qualcomm.com>
> ---
>  target/hexagon/hex_common.py | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/target/hexagon/hex_common.py
> b/target/hexagon/hex_common.py index 6803908718..a2dcb0aa2e 100755
> --- a/target/hexagon/hex_common.py
> +++ b/target/hexagon/hex_common.py
> @@ -247,8 +247,11 @@ def need_next_PC(tag):
> 
> 
>  def need_pkt_has_multi_cof(tag):
> -    return "A_COF" in attribdict[tag]
> -
> +    return (
> +        "A_JUMP" in attribdict[tag]
> +        or "A_CALL" in attribdict[tag]
> +        or "J2_rte" == tag
> +    ) and tag != "J2_hintjumpr"

It would be better to make this decision with instruction attributes only rather than a mix of attributes and specific tags.  If needed, add another add_qemu_macro_attrib call to hex_common.calculate_attribs.

Having said that, the correct tag for hintjumpr is J*4*_hintjumpr.

Taylor




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

* RE: [PATCH v3 4/5] target/hexagon: s/pkt_has_store/pkt_has_scalar_store
  2025-04-07 19:27 ` [PATCH v3 4/5] target/hexagon: s/pkt_has_store/pkt_has_scalar_store Brian Cain
@ 2025-04-14 17:06   ` ltaylorsimpson
  0 siblings, 0 replies; 14+ messages in thread
From: ltaylorsimpson @ 2025-04-14 17:06 UTC (permalink / raw)
  To: 'Brian Cain', qemu-devel
  Cc: richard.henderson, philmd, matheus.bernardino, ale, anjo,
	marco.liebel, alex.bennee, quic_mburton, sidneym



> -----Original Message-----
> From: Brian Cain <brian.cain@oss.qualcomm.com>
> Sent: Monday, April 7, 2025 1:27 PM
> To: qemu-devel@nongnu.org
> Cc: brian.cain@oss.qualcomm.com; richard.henderson@linaro.org;
> philmd@linaro.org; matheus.bernardino@oss.qualcomm.com; ale@rev.ng;
> anjo@rev.ng; marco.liebel@oss.qualcomm.com; ltaylorsimpson@gmail.com;
> alex.bennee@linaro.org; quic_mburton@quicinc.com;
> sidneym@quicinc.com
> Subject: [PATCH v3 4/5] target/hexagon:
> s/pkt_has_store/pkt_has_scalar_store
> 
> To remove any confusion with HVX or other potential store instructions, we'll
> qualify this context var with "scalar".
> 
> Signed-off-by: Brian Cain <brian.cain@oss.qualcomm.com>
> ---
>  target/hexagon/idef-parser/README.rst       | 2 +-
>  target/hexagon/insn.h                       | 4 ++--
>  target/hexagon/macros.h                     | 8 ++++----
>  target/hexagon/decode.c                     | 4 ++--
>  target/hexagon/genptr.c                     | 3 ++-
>  target/hexagon/idef-parser/parser-helpers.c | 4 ++--
>  target/hexagon/op_helper.c                  | 4 ++--
>  target/hexagon/translate.c                  | 9 +++++----
>  target/hexagon/gen_helper_funcs.py          | 2 +-
>  9 files changed, 21 insertions(+), 19 deletions(-)

Reviewed-by: Taylor Simpson <ltaylorsimpson@gmail.com>




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

* RE: [PATCH v3 5/5] target/hexagon: Remove unreachable
  2025-04-07 19:27 ` [PATCH v3 5/5] target/hexagon: Remove unreachable Brian Cain
@ 2025-04-14 17:19   ` ltaylorsimpson
  0 siblings, 0 replies; 14+ messages in thread
From: ltaylorsimpson @ 2025-04-14 17:19 UTC (permalink / raw)
  To: 'Brian Cain', qemu-devel
  Cc: richard.henderson, philmd, matheus.bernardino, ale, anjo,
	marco.liebel, alex.bennee, quic_mburton, sidneym



> -----Original Message-----
> From: Brian Cain <brian.cain@oss.qualcomm.com>
> Sent: Monday, April 7, 2025 1:27 PM
> To: qemu-devel@nongnu.org
> Cc: brian.cain@oss.qualcomm.com; richard.henderson@linaro.org;
> philmd@linaro.org; matheus.bernardino@oss.qualcomm.com; ale@rev.ng;
> anjo@rev.ng; marco.liebel@oss.qualcomm.com; ltaylorsimpson@gmail.com;
> alex.bennee@linaro.org; quic_mburton@quicinc.com;
> sidneym@quicinc.com
> Subject: [PATCH v3 5/5] target/hexagon: Remove unreachable
> 
> We should raise an exception in the event that we encounter a packet that
> can't be correctly decoded, not fault.
> 
> Signed-off-by: Brian Cain <brian.cain@oss.qualcomm.com>
> ---
>  target/hexagon/decode.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/target/hexagon/decode.c b/target/hexagon/decode.c index
> b5ece60450..1db7f1950f 100644
> --- a/target/hexagon/decode.c
> +++ b/target/hexagon/decode.c
> @@ -489,7 +489,6 @@ decode_insns(DisasContext *ctx, Insn *insn, uint32_t
> encoding)
>              insn->iclass = iclass_bits(encoding);
>              return 1;
>          }
> -        g_assert_not_reached();
>      } else {
>          uint32_t iclass = get_duplex_iclass(encoding);
>          unsigned int slot0_subinsn = get_slot0_subinsn(encoding); @@ -512,6
> +511,11 @@ decode_insns(DisasContext *ctx, Insn *insn, uint32_t encoding)
>          }
>          g_assert_not_reached();

Why leave this one rather than raising an exception?

>      }
> +    /*
> +     * invalid/unrecognized opcode; return 1 and let gen_insn() raise an
> +     * exception when it sees this empty insn.
> +     */
> +    return 1;

You should set insn->generate to NULL if you want to guarantee that gen_insn will raise an exception.  A better option is to return a special value that indicates "invalid" and have decode_packet return 0 which will cause decode_and_translate_packet to generate the exception before generating the code for any other instructions in the packet.

Do you have a test case for this?

Taylor




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

* Re: [PATCH v3 3/5] target/hexagon: Add missing A_CALL attr, hintjumpr to multi_cof
  2025-04-14 17:04   ` ltaylorsimpson
@ 2025-04-15 18:22     ` Brian Cain
  2025-04-15 23:31       ` ltaylorsimpson
  0 siblings, 1 reply; 14+ messages in thread
From: Brian Cain @ 2025-04-15 18:22 UTC (permalink / raw)
  To: ltaylorsimpson, qemu-devel
  Cc: richard.henderson, philmd, matheus.bernardino, ale, anjo,
	marco.liebel, alex.bennee, quic_mburton, sidneym


On 4/14/2025 12:04 PM, ltaylorsimpson@gmail.com wrote:
>
>> -----Original Message-----
>> From: Brian Cain <brian.cain@oss.qualcomm.com>
>> Sent: Monday, April 7, 2025 1:27 PM
>> To: qemu-devel@nongnu.org
>> Cc: brian.cain@oss.qualcomm.com; richard.henderson@linaro.org;
>> philmd@linaro.org; matheus.bernardino@oss.qualcomm.com; ale@rev.ng;
>> anjo@rev.ng; marco.liebel@oss.qualcomm.com; ltaylorsimpson@gmail.com;
>> alex.bennee@linaro.org; quic_mburton@quicinc.com;
>> sidneym@quicinc.com
>> Subject: [PATCH v3 3/5] target/hexagon: Add missing A_CALL attr, hintjumpr
>> to multi_cof
>>
>> Signed-off-by: Brian Cain <brian.cain@oss.qualcomm.com>
>> ---
>>   target/hexagon/hex_common.py | 7 +++++--
>>   1 file changed, 5 insertions(+), 2 deletions(-)
>>
>> diff --git a/target/hexagon/hex_common.py
>> b/target/hexagon/hex_common.py index 6803908718..a2dcb0aa2e 100755
>> --- a/target/hexagon/hex_common.py
>> +++ b/target/hexagon/hex_common.py
>> @@ -247,8 +247,11 @@ def need_next_PC(tag):
>>
>>
>>   def need_pkt_has_multi_cof(tag):
>> -    return "A_COF" in attribdict[tag]
>> -
>> +    return (
>> +        "A_JUMP" in attribdict[tag]
>> +        or "A_CALL" in attribdict[tag]
>> +        or "J2_rte" == tag
>> +    ) and tag != "J2_hintjumpr"
> It would be better to make this decision with instruction attributes only rather than a mix of attributes and specific tags.  If needed, add another add_qemu_macro_attrib call to hex_common.calculate_attribs.
>
> Having said that, the correct tag for hintjumpr is J*4*_hintjumpr.


Good catch, thanks for finding it.  And I suppose we can change it to 
`"A_HINTJR" not in attribdict[tag]` instead.


So, now more like this:

      add_qemu_macro_attrib('fREAD_SP', 'A_IMPLICIT_READS_SP')
+    add_qemu_macro_attrib('fCLEAR_RTE_EX', 'A_RTE')

      # Recurse down macros, find attributes from sub-macros
      macroValues = list(macros.values())
@@ -291,8 +292,8 @@ def need_pkt_has_multi_cof(tag):
      return (
          "A_JUMP" in attribdict[tag]
          or "A_CALL" in attribdict[tag]
-        or "J2_rte" == tag
-    ) and tag != "J2_hintjumpr"
+        or "A_RTE" in attribdict[tag]
+    ) and "A_HINTJR" not in attribdict[tag]



> Taylor
>
>


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

* RE: [PATCH v3 3/5] target/hexagon: Add missing A_CALL attr, hintjumpr to multi_cof
  2025-04-15 18:22     ` Brian Cain
@ 2025-04-15 23:31       ` ltaylorsimpson
  0 siblings, 0 replies; 14+ messages in thread
From: ltaylorsimpson @ 2025-04-15 23:31 UTC (permalink / raw)
  To: 'Brian Cain', qemu-devel
  Cc: richard.henderson, philmd, matheus.bernardino, ale, anjo,
	marco.liebel, alex.bennee, quic_mburton, sidneym



> -----Original Message-----
> From: Brian Cain <brian.cain@oss.qualcomm.com>
> Sent: Tuesday, April 15, 2025 12:22 PM
> To: ltaylorsimpson@gmail.com; qemu-devel@nongnu.org
> Cc: richard.henderson@linaro.org; philmd@linaro.org;
> matheus.bernardino@oss.qualcomm.com; ale@rev.ng; anjo@rev.ng;
> marco.liebel@oss.qualcomm.com; alex.bennee@linaro.org;
> quic_mburton@quicinc.com; sidneym@quicinc.com
> Subject: Re: [PATCH v3 3/5] target/hexagon: Add missing A_CALL attr,
> hintjumpr to multi_cof
> 
> 
> On 4/14/2025 12:04 PM, ltaylorsimpson@gmail.com wrote:
> >
> >> -----Original Message-----
> >> From: Brian Cain <brian.cain@oss.qualcomm.com>
> >> Sent: Monday, April 7, 2025 1:27 PM
> >> To: qemu-devel@nongnu.org
> >> Cc: brian.cain@oss.qualcomm.com; richard.henderson@linaro.org;
> >> philmd@linaro.org; matheus.bernardino@oss.qualcomm.com;
> ale@rev.ng;
> >> anjo@rev.ng; marco.liebel@oss.qualcomm.com;
> ltaylorsimpson@gmail.com;
> >> alex.bennee@linaro.org; quic_mburton@quicinc.com;
> sidneym@quicinc.com
> >> Subject: [PATCH v3 3/5] target/hexagon: Add missing A_CALL attr,
> >> hintjumpr to multi_cof
> >>
> >> Signed-off-by: Brian Cain <brian.cain@oss.qualcomm.com>
> >> ---
> >>   target/hexagon/hex_common.py | 7 +++++--
> >>   1 file changed, 5 insertions(+), 2 deletions(-)
> >>
> >> diff --git a/target/hexagon/hex_common.py
> >> b/target/hexagon/hex_common.py index 6803908718..a2dcb0aa2e
> 100755
> >> --- a/target/hexagon/hex_common.py
> >> +++ b/target/hexagon/hex_common.py
> >> @@ -247,8 +247,11 @@ def need_next_PC(tag):
> >>
> >>
> >>   def need_pkt_has_multi_cof(tag):
> >> -    return "A_COF" in attribdict[tag]
> >> -
> >> +    return (
> >> +        "A_JUMP" in attribdict[tag]
> >> +        or "A_CALL" in attribdict[tag]
> >> +        or "J2_rte" == tag
> >> +    ) and tag != "J2_hintjumpr"
> > It would be better to make this decision with instruction attributes only
> rather than a mix of attributes and specific tags.  If needed, add another
> add_qemu_macro_attrib call to hex_common.calculate_attribs.
> >
> > Having said that, the correct tag for hintjumpr is J*4*_hintjumpr.
> 
> 
> Good catch, thanks for finding it.  And I suppose we can change it to
> `"A_HINTJR" not in attribdict[tag]` instead.
> 
> 
> So, now more like this:
> 
>       add_qemu_macro_attrib('fREAD_SP', 'A_IMPLICIT_READS_SP')
> +    add_qemu_macro_attrib('fCLEAR_RTE_EX', 'A_RTE')
> 
>       # Recurse down macros, find attributes from sub-macros
>       macroValues = list(macros.values())
> @@ -291,8 +292,8 @@ def need_pkt_has_multi_cof(tag):
>       return (
>           "A_JUMP" in attribdict[tag]
>           or "A_CALL" in attribdict[tag]
> -        or "J2_rte" == tag
> -    ) and tag != "J2_hintjumpr"
> +        or "A_RTE" in attribdict[tag]
> +    ) and "A_HINTJR" not in attribdict[tag]

Let's take a step back here.  The goal is to eliminate the pkt_has_multi_cof parameter from helpers that don't need it, right?

So, the first step is to change a check for A_COF to a check for A_JUMP or A_CALL.  Here are the opcodes where this distinction matters
    J2_endloop*                     These have fGEN_TCG overrides so there is no helper function.
    J2_pause                            Ditto
    J2_rte                                  Ditto
    J4_hintjumpr                     This is a nop in QEMU, and there is an idef-parser emit_J4_hintjumpr function that doesn't generate any TCG.
                                                 When idef-parser is off, you get a helper call, but you could easily override this with an empty fGEN_TCG.
    J2_trap[01]                        These have helper functions, so we want to return false because the helpers don't need this argument.

So the bottom line is you can add an A_TRAP attribute attached to the fTRAP macro and then this function can be
    return "A_COF" in attribdict[tag] and "A_TRAP" not in attribdict[tag]

HTH,
Taylor





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

end of thread, other threads:[~2025-04-15 23:32 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-07 19:27 [PATCH v3 0/5] misc hexagon patches Brian Cain
2025-04-07 19:27 ` [PATCH v3 1/5] target/hexagon: handle .new values Brian Cain
2025-04-14 16:47   ` ltaylorsimpson
2025-04-07 19:27 ` [PATCH v3 2/5] target/hexagon: Fix badva reference, delete CAUSE Brian Cain
2025-04-14 16:53   ` ltaylorsimpson
2025-04-07 19:27 ` [PATCH v3 3/5] target/hexagon: Add missing A_CALL attr, hintjumpr to multi_cof Brian Cain
2025-04-14 17:04   ` ltaylorsimpson
2025-04-15 18:22     ` Brian Cain
2025-04-15 23:31       ` ltaylorsimpson
2025-04-07 19:27 ` [PATCH v3 4/5] target/hexagon: s/pkt_has_store/pkt_has_scalar_store Brian Cain
2025-04-14 17:06   ` ltaylorsimpson
2025-04-07 19:27 ` [PATCH v3 5/5] target/hexagon: Remove unreachable Brian Cain
2025-04-14 17:19   ` ltaylorsimpson
2025-04-07 19:37 ` [PATCH v3 0/5] misc hexagon patches Matheus Tavares Bernardino

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.