[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC PATCH v2 55/67] Hexagon HVX support in gdbstub
From: |
Taylor Simpson |
Subject: |
[RFC PATCH v2 55/67] Hexagon HVX support in gdbstub |
Date: |
Fri, 28 Feb 2020 10:43:51 -0600 |
Signed-off-by: Taylor Simpson <address@hidden>
---
target/hexagon/gdbstub.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 62 insertions(+)
diff --git a/target/hexagon/gdbstub.c b/target/hexagon/gdbstub.c
index e678aea..79a4f33 100644
--- a/target/hexagon/gdbstub.c
+++ b/target/hexagon/gdbstub.c
@@ -21,6 +21,28 @@
#include "cpu.h"
#include "internal.h"
+static int gdb_get_vreg(CPUHexagonState *env, uint8_t *mem_buf, int n)
+{
+ int total = 0;
+ int i;
+ for (i = 0; i < MAX_VEC_SIZE_BYTES / 4; i++) {
+ total += gdb_get_regl(mem_buf, env->VRegs[n].uw[i]);
+ mem_buf += 4;
+ }
+ return total;
+}
+
+static int gdb_get_qreg(CPUHexagonState *env, uint8_t *mem_buf, int n)
+{
+ int total = 0;
+ int i;
+ for (i = 0; i < MAX_VEC_SIZE_BYTES / 4 / 8; i++) {
+ total += gdb_get_regl(mem_buf, env->QRegs[n].uw[i]);
+ mem_buf += 4;
+ }
+ return total;
+}
+
int hexagon_gdb_read_register(CPUState *cs, uint8_t *mem_buf, int n)
{
HexagonCPU *cpu = HEXAGON_CPU(cs);
@@ -29,11 +51,41 @@ int hexagon_gdb_read_register(CPUState *cs, uint8_t
*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();
return 0;
}
+static int gdb_put_vreg(CPUHexagonState *env, uint8_t *mem_buf, int n)
+{
+ int i;
+ for (i = 0; i < MAX_VEC_SIZE_BYTES / 4; i++) {
+ env->VRegs[n].uw[i] = ldtul_p(mem_buf);
+ mem_buf += 4;
+ }
+ 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 / 4 / 8; i++) {
+ env->QRegs[n].uw[i] = ldtul_p(mem_buf);
+ mem_buf += 4;
+ }
+ return MAX_VEC_SIZE_BYTES / 8;
+}
+
int hexagon_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
{
HexagonCPU *cpu = HEXAGON_CPU(cs);
@@ -43,6 +95,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();
return 0;
--
2.7.4
- [RFC PATCH v2 34/67] Hexagon TCG generation helpers - step 1, (continued)
- [RFC PATCH v2 34/67] Hexagon TCG generation helpers - step 1, Taylor Simpson, 2020/02/28
- [RFC PATCH v2 43/67] Hexagon TCG generation - step 05, Taylor Simpson, 2020/02/28
- [RFC PATCH v2 49/67] Hexagon TCG generation - step 11, Taylor Simpson, 2020/02/28
- [RFC PATCH v2 65/67] Hexagon HVX TCG generation, Taylor Simpson, 2020/02/28
- [RFC PATCH v2 66/67] Hexagon HVX translation, Taylor Simpson, 2020/02/28
- [RFC PATCH v2 51/67] Hexagon translation, Taylor Simpson, 2020/02/28
- [RFC PATCH v2 67/67] Hexagon HVX build infrastructure, Taylor Simpson, 2020/02/28
- [RFC PATCH v2 64/67] Hexagon HVX helper to commit vector stores (masked and scatter/gather), Taylor Simpson, 2020/02/28
- [RFC PATCH v2 53/67] Hexagon build infrastructure, Taylor Simpson, 2020/02/28
- [RFC PATCH v2 57/67] Hexagon HVX import semantics, Taylor Simpson, 2020/02/28
- [RFC PATCH v2 55/67] Hexagon HVX support in gdbstub,
Taylor Simpson <=