[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 04/20] Hexagon HVX (target/hexagon) support in gdbstub
From: |
Taylor Simpson |
Subject: |
[PATCH 04/20] Hexagon HVX (target/hexagon) support in gdbstub |
Date: |
Mon, 5 Jul 2021 18:34:18 -0500 |
Signed-off-by: Taylor Simpson <tsimpson@quicinc.com>
---
target/hexagon/gdbstub.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 66 insertions(+)
diff --git a/target/hexagon/gdbstub.c b/target/hexagon/gdbstub.c
index 9c8c04c..b804e97 100644
--- a/target/hexagon/gdbstub.c
+++ b/target/hexagon/gdbstub.c
@@ -21,6 +21,30 @@
#include "cpu.h"
#include "internal.h"
+static int gdb_get_vreg(CPUHexagonState *env, GByteArray *mem_buf, int n)
+{
+ int total = 0;
+ int i;
+ for (i = 0; i < MAX_VEC_SIZE_BYTES / sizeof(uint32_t); i++) {
+ total += gdb_get_regl(mem_buf, env->VRegs[n].uw[i]);
+ mem_buf += sizeof(uint32_t);
+ }
+ return total;
+}
+
+static int gdb_get_qreg(CPUHexagonState *env, GByteArray *mem_buf, int n)
+{
+ int total = 0;
+ int i;
+ for (i = 0;
+ i < MAX_VEC_SIZE_BYTES / sizeof(uint32_t) / BITS_PER_BYTE;
+ i++) {
+ total += gdb_get_regl(mem_buf, env->QRegs[n].uw[i]);
+ mem_buf += sizeof(uint32_t);
+ }
+ return total;
+}
+
int hexagon_gdb_read_register(CPUState *cs, GByteArray *mem_buf, int n)
{
HexagonCPU *cpu = HEXAGON_CPU(cs);
@@ -29,10 +53,42 @@ int hexagon_gdb_read_register(CPUState *cs, GByteArray
*mem_buf, int n)
if (n < TOTAL_PER_THREAD_REGS) {
return gdb_get_regl(mem_buf, env->gpr[n]);
}
+ n -= TOTAL_PER_THREAD_REGS;
+
+ if (n < NUM_VREGS) {
+ return gdb_get_vreg(env, mem_buf, n);
+ }
+ n -= NUM_VREGS;
+
+ if (n < NUM_QREGS) {
+ return gdb_get_qreg(env, mem_buf, n);
+ }
g_assert_not_reached();
}
+static int gdb_put_vreg(CPUHexagonState *env, uint8_t *mem_buf, int n)
+{
+ int i;
+ for (i = 0; i < MAX_VEC_SIZE_BYTES / sizeof(uint32_t); i++) {
+ env->VRegs[n].uw[i] = ldtul_p(mem_buf);
+ mem_buf += sizeof(uint32_t);
+ }
+ return MAX_VEC_SIZE_BYTES;
+}
+
+static int gdb_put_qreg(CPUHexagonState *env, uint8_t *mem_buf, int n)
+{
+ int i;
+ for (i = 0;
+ i < MAX_VEC_SIZE_BYTES / sizeof(uint32_t) / BITS_PER_BYTE;
+ i++) {
+ env->QRegs[n].uw[i] = ldtul_p(mem_buf);
+ mem_buf += sizeof(uint32_t);
+ }
+ return MAX_VEC_SIZE_BYTES / BITS_PER_BYTE;
+}
+
int hexagon_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
{
HexagonCPU *cpu = HEXAGON_CPU(cs);
@@ -42,6 +98,16 @@ int hexagon_gdb_write_register(CPUState *cs, uint8_t
*mem_buf, int n)
env->gpr[n] = ldtul_p(mem_buf);
return sizeof(target_ulong);
}
+ n -= TOTAL_PER_THREAD_REGS;
+
+ if (n < NUM_VREGS) {
+ return gdb_put_vreg(env, mem_buf, n);
+ }
+ n -= NUM_VREGS;
+
+ if (n < NUM_QREGS) {
+ return gdb_put_qreg(env, mem_buf, n);
+ }
g_assert_not_reached();
}
--
2.7.4
- Re: [PATCH 01/20] Hexagon HVX (target/hexagon) README, (continued)
[PATCH 07/20] Hexagon HVX (target/hexagon) import macro definitions, Taylor Simpson, 2021/07/05
[PATCH 08/20] Hexagon HVX (target/hexagon) semantics generator, Taylor Simpson, 2021/07/05
[PATCH 12/20] Hexagon HVX (target/hexagon) helper functions, Taylor Simpson, 2021/07/05
[PATCH 09/20] Hexagon HVX (target/hexagon) semantics generator - part 2, Taylor Simpson, 2021/07/05
[PATCH 04/20] Hexagon HVX (target/hexagon) support in gdbstub,
Taylor Simpson <=
[PATCH 06/20] Hexagon HVX (target/hexagon) macros, Taylor Simpson, 2021/07/05
[PATCH 02/20] Hexagon HVX (target/hexagon) add Hexagon Vector eXtensions (HVX) to core, Taylor Simpson, 2021/07/05
[PATCH 16/20] Hexagon HVX (target/hexagon) import instruction encodings, Taylor Simpson, 2021/07/05
[PATCH 05/20] Hexagon HVX (target/hexagon) instruction attributes, Taylor Simpson, 2021/07/05
[PATCH 03/20] Hexagon HVX (target/hexagon) register names, Taylor Simpson, 2021/07/05