Convert ldf/ldfsr and stf/stfsr to TCG
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4101 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
8911f5019c
commit
ce8536e23f
@ -15,22 +15,12 @@ void OPPROTO glue(op_std, MEMSUFFIX)(void)
|
|||||||
|
|
||||||
#endif /* __i386__ */
|
#endif /* __i386__ */
|
||||||
/*** Floating-point store ***/
|
/*** Floating-point store ***/
|
||||||
void OPPROTO glue(op_stf, MEMSUFFIX) (void)
|
|
||||||
{
|
|
||||||
glue(stfl, MEMSUFFIX)(ADDR(T0), FT0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void OPPROTO glue(op_stdf, MEMSUFFIX) (void)
|
void OPPROTO glue(op_stdf, MEMSUFFIX) (void)
|
||||||
{
|
{
|
||||||
glue(stfq, MEMSUFFIX)(ADDR(T0), DT0);
|
glue(stfq, MEMSUFFIX)(ADDR(T0), DT0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*** Floating-point load ***/
|
/*** Floating-point load ***/
|
||||||
void OPPROTO glue(op_ldf, MEMSUFFIX) (void)
|
|
||||||
{
|
|
||||||
FT0 = glue(ldfl, MEMSUFFIX)(ADDR(T0));
|
|
||||||
}
|
|
||||||
|
|
||||||
void OPPROTO glue(op_lddf, MEMSUFFIX) (void)
|
void OPPROTO glue(op_lddf, MEMSUFFIX) (void)
|
||||||
{
|
{
|
||||||
DT0 = glue(ldfq, MEMSUFFIX)(ADDR(T0));
|
DT0 = glue(ldfq, MEMSUFFIX)(ADDR(T0));
|
||||||
|
@ -226,9 +226,7 @@ static void gen_op_store_QT0_fpr(unsigned int dst)
|
|||||||
#ifdef __i386__
|
#ifdef __i386__
|
||||||
OP_LD_TABLE(std);
|
OP_LD_TABLE(std);
|
||||||
#endif /* __i386__ */
|
#endif /* __i386__ */
|
||||||
OP_LD_TABLE(stf);
|
|
||||||
OP_LD_TABLE(stdf);
|
OP_LD_TABLE(stdf);
|
||||||
OP_LD_TABLE(ldf);
|
|
||||||
OP_LD_TABLE(lddf);
|
OP_LD_TABLE(lddf);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -4295,12 +4293,15 @@ static void disas_sparc_insn(DisasContext * dc)
|
|||||||
switch (xop) {
|
switch (xop) {
|
||||||
case 0x20: /* load fpreg */
|
case 0x20: /* load fpreg */
|
||||||
gen_op_check_align_T0_3();
|
gen_op_check_align_T0_3();
|
||||||
gen_op_ldst(ldf);
|
tcg_gen_qemu_ld32u(cpu_tmp32, cpu_T[0], dc->mem_idx);
|
||||||
gen_op_store_FT0_fpr(rd);
|
tcg_gen_st_i32(cpu_tmp32, cpu_env,
|
||||||
|
offsetof(CPUState, fpr[rd]));
|
||||||
break;
|
break;
|
||||||
case 0x21: /* load fsr */
|
case 0x21: /* load fsr */
|
||||||
gen_op_check_align_T0_3();
|
gen_op_check_align_T0_3();
|
||||||
gen_op_ldst(ldf);
|
tcg_gen_qemu_ld32u(cpu_tmp32, cpu_T[0], dc->mem_idx);
|
||||||
|
tcg_gen_st_i32(cpu_tmp32, cpu_env,
|
||||||
|
offsetof(CPUState, ft0));
|
||||||
tcg_gen_helper_0_0(helper_ldfsr);
|
tcg_gen_helper_0_0(helper_ldfsr);
|
||||||
break;
|
break;
|
||||||
case 0x22: /* load quad fpreg */
|
case 0x22: /* load quad fpreg */
|
||||||
@ -4422,17 +4423,20 @@ static void disas_sparc_insn(DisasContext * dc)
|
|||||||
if (gen_trap_ifnofpu(dc))
|
if (gen_trap_ifnofpu(dc))
|
||||||
goto jmp_insn;
|
goto jmp_insn;
|
||||||
switch (xop) {
|
switch (xop) {
|
||||||
case 0x24:
|
case 0x24: /* store fpreg */
|
||||||
gen_op_check_align_T0_3();
|
gen_op_check_align_T0_3();
|
||||||
gen_op_load_fpr_FT0(rd);
|
tcg_gen_ld_i32(cpu_tmp32, cpu_env,
|
||||||
gen_op_ldst(stf);
|
offsetof(CPUState, fpr[rd]));
|
||||||
|
tcg_gen_qemu_st32(cpu_tmp32, cpu_T[0], dc->mem_idx);
|
||||||
break;
|
break;
|
||||||
case 0x25: /* stfsr, V9 stxfsr */
|
case 0x25: /* stfsr, V9 stxfsr */
|
||||||
#ifdef CONFIG_USER_ONLY
|
#ifdef CONFIG_USER_ONLY
|
||||||
gen_op_check_align_T0_3();
|
gen_op_check_align_T0_3();
|
||||||
#endif
|
#endif
|
||||||
tcg_gen_helper_0_0(helper_stfsr);
|
tcg_gen_helper_0_0(helper_stfsr);
|
||||||
gen_op_ldst(stf);
|
tcg_gen_ld_i32(cpu_tmp32, cpu_env,
|
||||||
|
offsetof(CPUState, ft0));
|
||||||
|
tcg_gen_qemu_st32(cpu_tmp32, cpu_T[0], dc->mem_idx);
|
||||||
break;
|
break;
|
||||||
case 0x26:
|
case 0x26:
|
||||||
#ifdef TARGET_SPARC64
|
#ifdef TARGET_SPARC64
|
||||||
|
Loading…
Reference in New Issue
Block a user