mirror of
https://git.proxmox.com/git/qemu
synced 2025-06-15 18:00:47 +00:00
MIPS FPU support for the gdb stub, by Daniel Jacobowitz.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2242 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
197ea35ab2
commit
8e33c08c84
48
gdbstub.c
48
gdbstub.c
@ -532,11 +532,37 @@ static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf)
|
|||||||
*(uint32_t *)ptr = tswapl(env->PC);
|
*(uint32_t *)ptr = tswapl(env->PC);
|
||||||
ptr += 4;
|
ptr += 4;
|
||||||
|
|
||||||
|
#ifdef MIPS_USES_FPU
|
||||||
|
for (i = 0; i < 32; i++)
|
||||||
|
{
|
||||||
|
*(uint32_t *)ptr = tswapl(FPR_W (env, i));
|
||||||
|
ptr += 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
*(uint32_t *)ptr = tswapl(env->fcr31);
|
||||||
|
ptr += 4;
|
||||||
|
|
||||||
|
*(uint32_t *)ptr = tswapl(env->fcr0);
|
||||||
|
ptr += 4;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* 32 FP registers, fsr, fir, fp. Not yet implemented. */
|
/* 32 FP registers, fsr, fir, fp. Not yet implemented. */
|
||||||
|
/* what's 'fp' mean here? */
|
||||||
|
|
||||||
return ptr - mem_buf;
|
return ptr - mem_buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* convert MIPS rounding mode in FCR31 to IEEE library */
|
||||||
|
static unsigned int ieee_rm[] =
|
||||||
|
{
|
||||||
|
float_round_nearest_even,
|
||||||
|
float_round_to_zero,
|
||||||
|
float_round_up,
|
||||||
|
float_round_down
|
||||||
|
};
|
||||||
|
#define RESTORE_ROUNDING_MODE \
|
||||||
|
set_float_rounding_mode(ieee_rm[env->fcr31 & 3], &env->fp_status)
|
||||||
|
|
||||||
static void cpu_gdb_write_registers(CPUState *env, uint8_t *mem_buf, int size)
|
static void cpu_gdb_write_registers(CPUState *env, uint8_t *mem_buf, int size)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@ -566,6 +592,28 @@ static void cpu_gdb_write_registers(CPUState *env, uint8_t *mem_buf, int size)
|
|||||||
|
|
||||||
env->PC = tswapl(*(uint32_t *)ptr);
|
env->PC = tswapl(*(uint32_t *)ptr);
|
||||||
ptr += 4;
|
ptr += 4;
|
||||||
|
|
||||||
|
#ifdef MIPS_USES_FPU
|
||||||
|
for (i = 0; i < 32; i++)
|
||||||
|
{
|
||||||
|
FPR_W (env, i) = tswapl(*(uint32_t *)ptr);
|
||||||
|
ptr += 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
env->fcr31 = tswapl(*(uint32_t *)ptr) & 0x0183FFFF;
|
||||||
|
ptr += 4;
|
||||||
|
|
||||||
|
env->fcr0 = tswapl(*(uint32_t *)ptr);
|
||||||
|
ptr += 4;
|
||||||
|
|
||||||
|
/* set rounding mode */
|
||||||
|
RESTORE_ROUNDING_MODE;
|
||||||
|
|
||||||
|
#ifndef CONFIG_SOFTFLOAT
|
||||||
|
/* no floating point exception for native float */
|
||||||
|
SET_FP_ENABLE(env->fcr31, 0);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#elif defined (TARGET_SH4)
|
#elif defined (TARGET_SH4)
|
||||||
static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf)
|
static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf)
|
||||||
|
Loading…
Reference in New Issue
Block a user