diff options
| author | Aleksandar Markovic <aleksandar.markovic@imgtec.com> | 2016-06-10 11:57:36 +0200 |
|---|---|---|
| committer | Leon Alrae <leon.alrae@imgtec.com> | 2016-06-24 13:43:52 +0100 |
| commit | 599bc5e89c46f95f86ccad0d747d041c89a28806 (patch) | |
| tree | ac0fde39e6c036c145a5beba89e3a8b9975e0e50 /target-mips/gdbstub.c | |
| parent | 87552089b62fa229d2ff86906e4e779177fb5835 (diff) | |
| download | focaccia-qemu-599bc5e89c46f95f86ccad0d747d041c89a28806.tar.gz focaccia-qemu-599bc5e89c46f95f86ccad0d747d041c89a28806.zip | |
target-mips: Implement FCR31's R/W bitmask and related functionalities
This patch implements read and write access rules for Mips floating point control and status register (FCR31). The change can be divided into following parts: - Add fields that will keep FCR31's R/W bitmask in procesor definitions and processor float_status structure. - Add appropriate value for FCR31's R/W bitmask for each supported processor. - Add function for setting snan_bit_is_one, and integrate it in appropriate places. - Modify handling of CTC1 (case 31) instruction to use FCR31's R/W bitmask. - Modify handling user mode executables for Mips, in relation to the bit EF_MIPS_NAN2008 from ELF header, that is in turn related to reading and writing to FCR31. - Modify gdb behavior in relation to FCR31. Signed-off-by: Thomas Schwinge <thomas@codesourcery.com> Signed-off-by: Maciej W. Rozycki <macro@codesourcery.com> Signed-off-by: Aleksandar Markovic <aleksandar.markovic@imgtec.com> Reviewed-by: Leon Alrae <leon.alrae@imgtec.com> Signed-off-by: Leon Alrae <leon.alrae@imgtec.com>
Diffstat (limited to 'target-mips/gdbstub.c')
| -rw-r--r-- | target-mips/gdbstub.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/target-mips/gdbstub.c b/target-mips/gdbstub.c index 2707ff5c2b..7c682289c2 100644 --- a/target-mips/gdbstub.c +++ b/target-mips/gdbstub.c @@ -90,11 +90,9 @@ int mips_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n) if (env->CP0_Config1 & (1 << CP0C1_FP) && n >= 38 && n < 72) { switch (n) { case 70: - env->active_fpu.fcr31 = tmp & 0xFF83FFFF; - /* set rounding mode */ - restore_rounding_mode(env); - /* set flush-to-zero mode */ - restore_flush_mode(env); + env->active_fpu.fcr31 = (tmp & env->active_fpu.fcr31_rw_bitmask) | + (env->active_fpu.fcr31 & ~(env->active_fpu.fcr31_rw_bitmask)); + restore_fp_status(env); break; case 71: /* FIR is read-only. Ignore writes. */ |