Commit ce8536e23f5cc37484f8d56fd81b386f78add542

Authored by blueswir1
1 parent 8911f501

Convert ldf/ldfsr and stf/stfsr to TCG


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4101 c046a42c-6fe2-441c-8c8c-71466251a162
target-sparc/op_mem.h
... ... @@ -15,22 +15,12 @@ void OPPROTO glue(op_std, MEMSUFFIX)(void)
15 15  
16 16 #endif /* __i386__ */
17 17 /*** Floating-point store ***/
18   -void OPPROTO glue(op_stf, MEMSUFFIX) (void)
19   -{
20   - glue(stfl, MEMSUFFIX)(ADDR(T0), FT0);
21   -}
22   -
23 18 void OPPROTO glue(op_stdf, MEMSUFFIX) (void)
24 19 {
25 20 glue(stfq, MEMSUFFIX)(ADDR(T0), DT0);
26 21 }
27 22  
28 23 /*** Floating-point load ***/
29   -void OPPROTO glue(op_ldf, MEMSUFFIX) (void)
30   -{
31   - FT0 = glue(ldfl, MEMSUFFIX)(ADDR(T0));
32   -}
33   -
34 24 void OPPROTO glue(op_lddf, MEMSUFFIX) (void)
35 25 {
36 26 DT0 = glue(ldfq, MEMSUFFIX)(ADDR(T0));
... ...
target-sparc/translate.c
... ... @@ -226,9 +226,7 @@ static void gen_op_store_QT0_fpr(unsigned int dst)
226 226 #ifdef __i386__
227 227 OP_LD_TABLE(std);
228 228 #endif /* __i386__ */
229   -OP_LD_TABLE(stf);
230 229 OP_LD_TABLE(stdf);
231   -OP_LD_TABLE(ldf);
232 230 OP_LD_TABLE(lddf);
233 231 #endif
234 232  
... ... @@ -4295,12 +4293,15 @@ static void disas_sparc_insn(DisasContext * dc)
4295 4293 switch (xop) {
4296 4294 case 0x20: /* load fpreg */
4297 4295 gen_op_check_align_T0_3();
4298   - gen_op_ldst(ldf);
4299   - gen_op_store_FT0_fpr(rd);
  4296 + tcg_gen_qemu_ld32u(cpu_tmp32, cpu_T[0], dc->mem_idx);
  4297 + tcg_gen_st_i32(cpu_tmp32, cpu_env,
  4298 + offsetof(CPUState, fpr[rd]));
4300 4299 break;
4301 4300 case 0x21: /* load fsr */
4302 4301 gen_op_check_align_T0_3();
4303   - gen_op_ldst(ldf);
  4302 + tcg_gen_qemu_ld32u(cpu_tmp32, cpu_T[0], dc->mem_idx);
  4303 + tcg_gen_st_i32(cpu_tmp32, cpu_env,
  4304 + offsetof(CPUState, ft0));
4304 4305 tcg_gen_helper_0_0(helper_ldfsr);
4305 4306 break;
4306 4307 case 0x22: /* load quad fpreg */
... ... @@ -4422,17 +4423,20 @@ static void disas_sparc_insn(DisasContext * dc)
4422 4423 if (gen_trap_ifnofpu(dc))
4423 4424 goto jmp_insn;
4424 4425 switch (xop) {
4425   - case 0x24:
  4426 + case 0x24: /* store fpreg */
4426 4427 gen_op_check_align_T0_3();
4427   - gen_op_load_fpr_FT0(rd);
4428   - gen_op_ldst(stf);
  4428 + tcg_gen_ld_i32(cpu_tmp32, cpu_env,
  4429 + offsetof(CPUState, fpr[rd]));
  4430 + tcg_gen_qemu_st32(cpu_tmp32, cpu_T[0], dc->mem_idx);
4429 4431 break;
4430 4432 case 0x25: /* stfsr, V9 stxfsr */
4431 4433 #ifdef CONFIG_USER_ONLY
4432 4434 gen_op_check_align_T0_3();
4433 4435 #endif
4434 4436 tcg_gen_helper_0_0(helper_stfsr);
4435   - gen_op_ldst(stf);
  4437 + tcg_gen_ld_i32(cpu_tmp32, cpu_env,
  4438 + offsetof(CPUState, ft0));
  4439 + tcg_gen_qemu_st32(cpu_tmp32, cpu_T[0], dc->mem_idx);
4436 4440 break;
4437 4441 case 0x26:
4438 4442 #ifdef TARGET_SPARC64
... ...