diff options
Diffstat (limited to 'target-sparc/translate.c')
-rw-r--r-- | target-sparc/translate.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/target-sparc/translate.c b/target-sparc/translate.c index 55364ad715..885fa5897a 100644 --- a/target-sparc/translate.c +++ b/target-sparc/translate.c @@ -2307,12 +2307,18 @@ static void gen_ldda_asi(DisasContext *dc, TCGv hi, TCGv addr, default: { TCGv_i32 r_asi = tcg_const_i32(da.asi); - TCGv_i32 r_rd = tcg_const_i32(rd); + TCGv_i64 tmp; save_state(dc); - gen_helper_ldda_asi(cpu_env, addr, r_asi, r_rd); - tcg_temp_free_i32(r_rd); + gen_helper_ldda_asi(cpu_env, addr, r_asi); tcg_temp_free_i32(r_asi); + + tmp = gen_dest_gpr(dc, rd); + tcg_gen_ld_i64(tmp, cpu_env, offsetof(CPUSPARCState, qt0.high)); + gen_store_gpr(dc, rd, tmp); + tmp = gen_dest_gpr(dc, rd + 1); + tcg_gen_ld_i64(tmp, cpu_env, offsetof(CPUSPARCState, qt0.low)); + gen_store_gpr(dc, rd + 1, tmp); } break; } |