Commit bb5529bb624ab922def08f24f5201b9fd83bb094
1 parent
54728ac6
Convert ldfsr and stfsr to TCG
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4067 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
4 changed files
with
10 additions
and
13 deletions
target-sparc/helper.h
| @@ -34,6 +34,7 @@ uint64_t TCG_HELPER_PROTO helper_ld_asi(target_ulong addr, int asi, | @@ -34,6 +34,7 @@ uint64_t TCG_HELPER_PROTO helper_ld_asi(target_ulong addr, int asi, | ||
| 34 | void TCG_HELPER_PROTO helper_st_asi(target_ulong addr, uint64_t val, int asi, | 34 | void TCG_HELPER_PROTO helper_st_asi(target_ulong addr, uint64_t val, int asi, |
| 35 | int size); | 35 | int size); |
| 36 | void TCG_HELPER_PROTO helper_ldfsr(void); | 36 | void TCG_HELPER_PROTO helper_ldfsr(void); |
| 37 | +void TCG_HELPER_PROTO helper_stfsr(void); | ||
| 37 | void TCG_HELPER_PROTO helper_check_ieee_exceptions(void); | 38 | void TCG_HELPER_PROTO helper_check_ieee_exceptions(void); |
| 38 | void TCG_HELPER_PROTO helper_clear_float_exceptions(void); | 39 | void TCG_HELPER_PROTO helper_clear_float_exceptions(void); |
| 39 | void TCG_HELPER_PROTO helper_fabss(void); | 40 | void TCG_HELPER_PROTO helper_fabss(void); |
target-sparc/op.c
| @@ -285,16 +285,6 @@ void OPPROTO op_sdiv_T1_T0(void) | @@ -285,16 +285,6 @@ void OPPROTO op_sdiv_T1_T0(void) | ||
| 285 | #endif | 285 | #endif |
| 286 | #endif | 286 | #endif |
| 287 | 287 | ||
| 288 | -void OPPROTO op_ldfsr(void) | ||
| 289 | -{ | ||
| 290 | - PUT_FSR32(env, *((uint32_t *) &FT0)); | ||
| 291 | -} | ||
| 292 | - | ||
| 293 | -void OPPROTO op_stfsr(void) | ||
| 294 | -{ | ||
| 295 | - *((uint32_t *) &FT0) = GET_FSR32(env); | ||
| 296 | -} | ||
| 297 | - | ||
| 298 | #ifndef TARGET_SPARC64 | 288 | #ifndef TARGET_SPARC64 |
| 299 | /* XXX: use another pointer for %iN registers to avoid slow wrapping | 289 | /* XXX: use another pointer for %iN registers to avoid slow wrapping |
| 300 | handling ? */ | 290 | handling ? */ |
target-sparc/op_helper.c
| @@ -1590,6 +1590,8 @@ uint64_t helper_pack64(target_ulong high, target_ulong low) | @@ -1590,6 +1590,8 @@ uint64_t helper_pack64(target_ulong high, target_ulong low) | ||
| 1590 | void helper_ldfsr(void) | 1590 | void helper_ldfsr(void) |
| 1591 | { | 1591 | { |
| 1592 | int rnd_mode; | 1592 | int rnd_mode; |
| 1593 | + | ||
| 1594 | + PUT_FSR32(env, *((uint32_t *) &FT0)); | ||
| 1593 | switch (env->fsr & FSR_RD_MASK) { | 1595 | switch (env->fsr & FSR_RD_MASK) { |
| 1594 | case FSR_RD_NEAREST: | 1596 | case FSR_RD_NEAREST: |
| 1595 | rnd_mode = float_round_nearest_even; | 1597 | rnd_mode = float_round_nearest_even; |
| @@ -1608,7 +1610,12 @@ void helper_ldfsr(void) | @@ -1608,7 +1610,12 @@ void helper_ldfsr(void) | ||
| 1608 | set_float_rounding_mode(rnd_mode, &env->fp_status); | 1610 | set_float_rounding_mode(rnd_mode, &env->fp_status); |
| 1609 | } | 1611 | } |
| 1610 | 1612 | ||
| 1611 | -void helper_debug() | 1613 | +void helper_stfsr(void) |
| 1614 | +{ | ||
| 1615 | + *((uint32_t *) &FT0) = GET_FSR32(env); | ||
| 1616 | +} | ||
| 1617 | + | ||
| 1618 | +void helper_debug(void) | ||
| 1612 | { | 1619 | { |
| 1613 | env->exception_index = EXCP_DEBUG; | 1620 | env->exception_index = EXCP_DEBUG; |
| 1614 | cpu_loop_exit(); | 1621 | cpu_loop_exit(); |
target-sparc/translate.c
| @@ -4259,7 +4259,6 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -4259,7 +4259,6 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 4259 | case 0x21: /* load fsr */ | 4259 | case 0x21: /* load fsr */ |
| 4260 | gen_op_check_align_T0_3(); | 4260 | gen_op_check_align_T0_3(); |
| 4261 | gen_op_ldst(ldf); | 4261 | gen_op_ldst(ldf); |
| 4262 | - gen_op_ldfsr(); | ||
| 4263 | tcg_gen_helper_0_0(helper_ldfsr); | 4262 | tcg_gen_helper_0_0(helper_ldfsr); |
| 4264 | break; | 4263 | break; |
| 4265 | case 0x22: /* load quad fpreg */ | 4264 | case 0x22: /* load quad fpreg */ |
| @@ -4415,7 +4414,7 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -4415,7 +4414,7 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 4415 | #ifdef CONFIG_USER_ONLY | 4414 | #ifdef CONFIG_USER_ONLY |
| 4416 | gen_op_check_align_T0_3(); | 4415 | gen_op_check_align_T0_3(); |
| 4417 | #endif | 4416 | #endif |
| 4418 | - gen_op_stfsr(); | 4417 | + tcg_gen_helper_0_0(helper_stfsr); |
| 4419 | gen_op_ldst(stf); | 4418 | gen_op_ldst(stf); |
| 4420 | break; | 4419 | break; |
| 4421 | case 0x26: | 4420 | case 0x26: |