[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH for-7.1 5/5] target/loongarch: Update gdb_set_fpu() and gdb_get_f
From: |
Song Gao |
Subject: |
[PATCH for-7.1 5/5] target/loongarch: Update gdb_set_fpu() and gdb_get_fpu() |
Date: |
Thu, 4 Aug 2022 21:02:13 +0800 |
GDB LoongArch fpu use fcc register, update gdb_set_fpu() and gdb_get_fpu() to
match it.
Signed-off-by: Song Gao <gaosong@loongson.cn>
---
target/loongarch/gdbstub.c | 23 ++++++++++++++++-------
1 file changed, 16 insertions(+), 7 deletions(-)
diff --git a/target/loongarch/gdbstub.c b/target/loongarch/gdbstub.c
index 7d95b4b11c..265f0f43b6 100644
--- a/target/loongarch/gdbstub.c
+++ b/target/loongarch/gdbstub.c
@@ -51,9 +51,14 @@ static int loongarch_gdb_get_fpu(CPULoongArchState *env,
{
if (0 <= n && n < 32) {
return gdb_get_reg64(mem_buf, env->fpr[n]);
- } else if (32 <= n && n < 40) {
- return gdb_get_reg8(mem_buf, env->cf[n - 32]);
- } else if (n == 40) {
+ } else if (n == 32) {
+ /* fcc */
+ uint64_t val = 0;
+ for (int i = 0; i < 8; ++i) {
+ val |= (uint64_t)env->cf[i] << (i * 8);
+ }
+ return gdb_get_reg64(mem_buf, val);
+ } else if (n == 33) {
return gdb_get_reg32(mem_buf, env->fcsr0);
}
return 0;
@@ -67,10 +72,14 @@ static int loongarch_gdb_set_fpu(CPULoongArchState *env,
if (0 <= n && n < 32) {
env->fpr[n] = ldq_p(mem_buf);
length = 8;
- } else if (32 <= n && n < 40) {
- env->cf[n - 32] = ldub_p(mem_buf);
- length = 1;
- } else if (n == 40) {
+ } else if (n == 32) {
+ /* fcc */
+ uint64_t val = ldq_p(mem_buf);
+ for (int i = 0; i < 8; ++i) {
+ env->cf[i] = (val >> (i * 8)) & 1;
+ }
+ length = 8;
+ } else if (n == 33) {
env->fcsr0 = ldl_p(mem_buf);
length = 4;
}
--
2.31.1