Commit e214b9bb55b20480c4f7a6f4db2d929332cf8c19
1 parent
e8996ee0
Switch MIPS movf/movt to TCG.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4545 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
22 additions
and
23 deletions
target-mips/op.c
... | ... | @@ -460,21 +460,6 @@ void op_dmultu (void) |
460 | 460 | } |
461 | 461 | #endif |
462 | 462 | |
463 | -/* Conditional moves */ | |
464 | -void op_movf (void) | |
465 | -{ | |
466 | - if (!(env->fpu->fcr31 & PARAM1)) | |
467 | - T0 = T1; | |
468 | - FORCE_RET(); | |
469 | -} | |
470 | - | |
471 | -void op_movt (void) | |
472 | -{ | |
473 | - if (env->fpu->fcr31 & PARAM1) | |
474 | - T0 = T1; | |
475 | - FORCE_RET(); | |
476 | -} | |
477 | - | |
478 | 463 | /* CP0 functions */ |
479 | 464 | void op_mfc0_index (void) |
480 | 465 | { | ... | ... |
target-mips/translate.c
... | ... | @@ -5450,19 +5450,33 @@ static void gen_cp1 (DisasContext *ctx, uint32_t opc, int rt, int fs) |
5450 | 5450 | |
5451 | 5451 | static void gen_movci (DisasContext *ctx, int rd, int rs, int cc, int tf) |
5452 | 5452 | { |
5453 | + TCGv r_ptr = tcg_temp_new(TCG_TYPE_PTR); | |
5454 | + TCGv r_tmp = new_tmp(); | |
5455 | + TCGv t0 = tcg_temp_new(TCG_TYPE_TL); | |
5456 | + TCGv t1 = tcg_temp_new(TCG_TYPE_TL); | |
5457 | + int l1 = gen_new_label(); | |
5453 | 5458 | uint32_t ccbit; |
5459 | + TCGCond cond; | |
5454 | 5460 | |
5455 | - gen_load_gpr(cpu_T[0], rd); | |
5456 | - gen_load_gpr(cpu_T[1], rs); | |
5457 | - if (cc) { | |
5461 | + if (cc) | |
5458 | 5462 | ccbit = 1 << (24 + cc); |
5459 | - } else | |
5463 | + else | |
5460 | 5464 | ccbit = 1 << 23; |
5461 | - if (!tf) | |
5462 | - gen_op_movf(ccbit); | |
5465 | + if (tf) | |
5466 | + cond = TCG_COND_NE; | |
5463 | 5467 | else |
5464 | - gen_op_movt(ccbit); | |
5465 | - gen_store_gpr(cpu_T[0], rd); | |
5468 | + cond = TCG_COND_EQ; | |
5469 | + | |
5470 | + gen_load_gpr(t0, rd); | |
5471 | + gen_load_gpr(t1, rs); | |
5472 | + tcg_gen_ld_ptr(r_ptr, cpu_env, offsetof(CPUState, fpu)); | |
5473 | + tcg_gen_ld_i32(r_tmp, r_ptr, offsetof(CPUMIPSFPUContext, fcr31)); | |
5474 | + tcg_gen_andi_i32(r_tmp, r_tmp, ccbit); | |
5475 | + tcg_gen_brcond_i32(cond, r_tmp, tcg_const_i32(0), l1); | |
5476 | + tcg_gen_mov_tl(t0, t1); | |
5477 | + gen_set_label(l1); | |
5478 | + dead_tmp(r_tmp); | |
5479 | + gen_store_gpr(t0, rd); | |
5466 | 5480 | } |
5467 | 5481 | |
5468 | 5482 | #define GEN_MOVCF(fmt) \ | ... | ... |