[v2,07/14] target/m68k: use gdb_get_reg helpers

Message ID 20191130084602.10818-8-alex.bennee@linaro.org
State Superseded
Headers show
Series
  • gdbstub refactor and SVE support
Related show

Commit Message

Alex Bennée Nov. 30, 2019, 8:45 a.m.
This is cleaner than poking memory directly and will make later
clean-ups easier.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

---
 target/m68k/helper.c | 29 +++++++++++------------------
 1 file changed, 11 insertions(+), 18 deletions(-)

-- 
2.20.1

Comments

Laurent Vivier Nov. 30, 2019, 10:58 a.m. | #1
Le 30/11/2019 à 09:45, Alex Bennée a écrit :
> This is cleaner than poking memory directly and will make later

> clean-ups easier.

> 

> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

> ---

>  target/m68k/helper.c | 29 +++++++++++------------------

>  1 file changed, 11 insertions(+), 18 deletions(-)

> 

> diff --git a/target/m68k/helper.c b/target/m68k/helper.c

> index ae766a6cb0b..70b0c0b5076 100644

> --- a/target/m68k/helper.c

> +++ b/target/m68k/helper.c

> @@ -72,19 +72,15 @@ static int cf_fpu_gdb_get_reg(CPUM68KState *env, uint8_t *mem_buf, int n)

>  {

>      if (n < 8) {

>          float_status s;

> -        stfq_p(mem_buf, floatx80_to_float64(env->fregs[n].d, &s));

> -        return 8;

> +        return gdb_get_reg64(buf, floatx80_to_float64(env->fregs[n].d, &s));


Where is coming from "buf"? We were using "mem_buf".

>      }

>      switch (n) {

>      case 8: /* fpcontrol */

> -        stl_be_p(mem_buf, env->fpcr);

> -        return 4;

> +        return gdb_get_reg32(buf, env->fpcr);

>      case 9: /* fpstatus */

> -        stl_be_p(mem_buf, env->fpsr);

> -        return 4;

> +        return gdb_get_reg32(buf, env->fpsr);

>      case 10: /* fpiar, not implemented */

> -        memset(mem_buf, 0, 4);

> -        return 4;

> +        return gdb_get_reg32(buf, 0);

>      }

>      return 0;

>  }

> @@ -112,21 +108,18 @@ static int cf_fpu_gdb_set_reg(CPUM68KState *env, uint8_t *mem_buf, int n)

>  static int m68k_fpu_gdb_get_reg(CPUM68KState *env, uint8_t *mem_buf, int n)

>  {

>      if (n < 8) {

> -        stw_be_p(mem_buf, env->fregs[n].l.upper);

> -        memset(mem_buf + 2, 0, 2);

> -        stq_be_p(mem_buf + 4, env->fregs[n].l.lower);

> -        return 12;

> +        int len = gdb_get_reg16(buf, env->fregs[n].l.upper);

> +        len += gdb_get_reg16(buf, 0);


len += gdb_get_reg16(buf + len, ...

> +        len += gdb_get_reg64(buf, env->fregs[n].l.lower);


len += gdb_get_reg64(buf + len, ...

> +        return len;

>      }

>      switch (n) {

>      case 8: /* fpcontrol */

> -        stl_be_p(mem_buf, env->fpcr);

> -        return 4;

> +        return gdb_get_reg32(buf, env->fpcr);

>      case 9: /* fpstatus */

> -        stl_be_p(mem_buf, env->fpsr);

> -        return 4;

> +        return gdb_get_reg32(buf, env->fpsr);

>      case 10: /* fpiar, not implemented */

> -        memset(mem_buf, 0, 4);

> -        return 4;

> +        return gdb_get_reg32(buf, 0);

>      }

>      return 0;

>  }

> 


Thanks,
Laurent

Patch

diff --git a/target/m68k/helper.c b/target/m68k/helper.c
index ae766a6cb0b..70b0c0b5076 100644
--- a/target/m68k/helper.c
+++ b/target/m68k/helper.c
@@ -72,19 +72,15 @@  static int cf_fpu_gdb_get_reg(CPUM68KState *env, uint8_t *mem_buf, int n)
 {
     if (n < 8) {
         float_status s;
-        stfq_p(mem_buf, floatx80_to_float64(env->fregs[n].d, &s));
-        return 8;
+        return gdb_get_reg64(buf, floatx80_to_float64(env->fregs[n].d, &s));
     }
     switch (n) {
     case 8: /* fpcontrol */
-        stl_be_p(mem_buf, env->fpcr);
-        return 4;
+        return gdb_get_reg32(buf, env->fpcr);
     case 9: /* fpstatus */
-        stl_be_p(mem_buf, env->fpsr);
-        return 4;
+        return gdb_get_reg32(buf, env->fpsr);
     case 10: /* fpiar, not implemented */
-        memset(mem_buf, 0, 4);
-        return 4;
+        return gdb_get_reg32(buf, 0);
     }
     return 0;
 }
@@ -112,21 +108,18 @@  static int cf_fpu_gdb_set_reg(CPUM68KState *env, uint8_t *mem_buf, int n)
 static int m68k_fpu_gdb_get_reg(CPUM68KState *env, uint8_t *mem_buf, int n)
 {
     if (n < 8) {
-        stw_be_p(mem_buf, env->fregs[n].l.upper);
-        memset(mem_buf + 2, 0, 2);
-        stq_be_p(mem_buf + 4, env->fregs[n].l.lower);
-        return 12;
+        int len = gdb_get_reg16(buf, env->fregs[n].l.upper);
+        len += gdb_get_reg16(buf, 0);
+        len += gdb_get_reg64(buf, env->fregs[n].l.lower);
+        return len;
     }
     switch (n) {
     case 8: /* fpcontrol */
-        stl_be_p(mem_buf, env->fpcr);
-        return 4;
+        return gdb_get_reg32(buf, env->fpcr);
     case 9: /* fpstatus */
-        stl_be_p(mem_buf, env->fpsr);
-        return 4;
+        return gdb_get_reg32(buf, env->fpsr);
     case 10: /* fpiar, not implemented */
-        memset(mem_buf, 0, 4);
-        return 4;
+        return gdb_get_reg32(buf, 0);
     }
     return 0;
 }