}
FLOAT_OP(movf, ps)
{
- if (!(env->fpu->fcr31 & PARAM1)) {
+ unsigned int mask = GET_FP_COND (env->fpu) >> PARAM1;
+ if (!(mask & 1))
WT2 = WT0;
+ if (!(mask & 2))
WTH2 = WTH0;
- }
DEBUG_FPU_STATE();
FORCE_RET();
}
}
FLOAT_OP(movt, ps)
{
- if (env->fpu->fcr31 & PARAM1) {
+ unsigned int mask = GET_FP_COND (env->fpu) >> PARAM1;
+ if (mask & 1)
WT2 = WT0;
+ if (mask & 2)
WTH2 = WTH0;
- }
DEBUG_FPU_STATE();
FORCE_RET();
}
}
GEN_MOVCF(d);
GEN_MOVCF(s);
-GEN_MOVCF(ps);
#undef GEN_MOVCF
static void gen_farith (DisasContext *ctx, uint32_t op1,
GEN_LOAD_FREG_FTN(WTH0, fs);
GEN_LOAD_FREG_FTN(WT2, fd);
GEN_LOAD_FREG_FTN(WTH2, fd);
- gen_movcf_ps(ctx, (ft >> 2) & 0x7, ft & 0x1);
+ if (ft & 0x1)
+ gen_op_float_movt_ps ((ft >> 2) & 0x7);
+ else
+ gen_op_float_movf_ps ((ft >> 2) & 0x7);
GEN_STORE_FTN_FREG(fd, WT2);
GEN_STORE_FTN_FREG(fd, WTH2);
opn = "movcf.ps";