diff options
author | Richard Henderson <richard.henderson@linaro.org> | 2023-02-27 11:33:23 -1000 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2023-03-06 14:08:11 +0000 |
commit | 41c9ad8fb4641d812309b8f75329a74aa7397fc9 (patch) | |
tree | 70255f8b9bbc49e4308902cb5a9e4f5f69849862 | |
parent | fdfb214cf05a186e573fc337972d5b169edc942a (diff) | |
download | qemu-41c9ad8fb4641d812309b8f75329a74aa7397fc9.zip qemu-41c9ad8fb4641d812309b8f75329a74aa7397fc9.tar.gz qemu-41c9ad8fb4641d812309b8f75329a74aa7397fc9.tar.bz2 |
target/arm: Add name argument to output_vector_union_type
This will make the function usable between SVE and SME.
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20230227213329.793795-9-richard.henderson@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
-rw-r--r-- | target/arm/gdbstub64.c | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/target/arm/gdbstub64.c b/target/arm/gdbstub64.c index d0e1305..36166bf 100644 --- a/target/arm/gdbstub64.c +++ b/target/arm/gdbstub64.c @@ -210,7 +210,8 @@ int aarch64_gdb_set_sve_reg(CPUARMState *env, uint8_t *buf, int reg) return 0; } -static void output_vector_union_type(GString *s, int reg_width) +static void output_vector_union_type(GString *s, int reg_width, + const char *name) { struct TypeSize { const char *gdb_type; @@ -240,39 +241,38 @@ static void output_vector_union_type(GString *s, int reg_width) }; static const char suf[] = { 'q', 'd', 's', 'h', 'b' }; - - g_autoptr(GString) ts = g_string_new(""); int i, j, bits; /* First define types and totals in a whole VL */ for (i = 0; i < ARRAY_SIZE(vec_lanes); i++) { - int count = reg_width / vec_lanes[i].size; - g_string_printf(ts, "svev%c%c", vec_lanes[i].sz, vec_lanes[i].suffix); g_string_append_printf(s, - "<vector id=\"%s\" type=\"%s\" count=\"%d\"/>", - ts->str, vec_lanes[i].gdb_type, count); + "<vector id=\"%s%c%c\" type=\"%s\" count=\"%d\"/>", + name, vec_lanes[i].sz, vec_lanes[i].suffix, + vec_lanes[i].gdb_type, reg_width / vec_lanes[i].size); } + /* * Now define a union for each size group containing unsigned and * signed and potentially float versions of each size from 128 to * 8 bits. */ for (bits = 128, i = 0; bits >= 8; bits /= 2, i++) { - g_string_append_printf(s, "<union id=\"svevn%c\">", suf[i]); + g_string_append_printf(s, "<union id=\"%sn%c\">", name, suf[i]); for (j = 0; j < ARRAY_SIZE(vec_lanes); j++) { if (vec_lanes[j].size == bits) { - g_string_append_printf(s, "<field name=\"%c\" type=\"svev%c%c\"/>", - vec_lanes[j].suffix, + g_string_append_printf(s, "<field name=\"%c\" type=\"%s%c%c\"/>", + vec_lanes[j].suffix, name, vec_lanes[j].sz, vec_lanes[j].suffix); } } g_string_append(s, "</union>"); } + /* And now the final union of unions */ - g_string_append(s, "<union id=\"svev\">"); + g_string_append_printf(s, "<union id=\"%s\">", name); for (bits = 128, i = 0; bits >= 8; bits /= 2, i++) { - g_string_append_printf(s, "<field name=\"%c\" type=\"svevn%c\"/>", - suf[i], suf[i]); + g_string_append_printf(s, "<field name=\"%c\" type=\"%sn%c\"/>", + suf[i], name, suf[i]); } g_string_append(s, "</union>"); } @@ -292,7 +292,7 @@ int arm_gen_dynamic_svereg_xml(CPUState *cs, int orig_base_reg) g_string_append_printf(s, "<feature name=\"org.gnu.gdb.aarch64.sve\">"); /* Create the vector union type. */ - output_vector_union_type(s, reg_width); + output_vector_union_type(s, reg_width, "svev"); /* Create the predicate vector type. */ g_string_append_printf(s, |