sh4 fmov et al instructions (amatus)

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1971 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
bellard 2006-06-14 15:02:05 +00:00
parent 191f9a93f4
commit eda9b09b1d
5 changed files with 303 additions and 38 deletions

View file

@ -228,6 +228,18 @@ void OPPROTO op_sett(void)
RETURN();
}
void OPPROTO op_frchg(void)
{
env->fpscr ^= FPSCR_FR;
RETURN();
}
void OPPROTO op_fschg(void)
{
env->fpscr ^= FPSCR_SZ;
RETURN();
}
void OPPROTO op_rte(void)
{
env->sr = env->ssr;
@ -465,6 +477,18 @@ void OPPROTO op_ldcl_rMplus_rN_bank(void)
RETURN();
}
void OPPROTO op_ldc_T0_sr(void)
{
env->sr = T0 & 0x700083f3;
RETURN();
}
void OPPROTO op_stc_sr_T0(void)
{
T0 = env->sr;
RETURN();
}
#define LDSTOPS(target,load,store) \
void OPPROTO op_##load##_T0_##target (void) \
{ env ->target = T0; RETURN(); \
@ -473,7 +497,6 @@ void OPPROTO op_##store##_##target##_T0 (void) \
{ T0 = env->target; RETURN(); \
} \
LDSTOPS(sr, ldc, stc)
LDSTOPS(gbr, ldc, stc)
LDSTOPS(vbr, ldc, stc)
LDSTOPS(ssr, ldc, stc)
@ -483,6 +506,19 @@ LDSTOPS(sr, ldc, stc)
LDSTOPS(mach, lds, sts)
LDSTOPS(macl, lds, sts)
LDSTOPS(pr, lds, sts)
LDSTOPS(fpul, lds, sts)
void OPPROTO op_lds_T0_fpscr(void)
{
env->fpscr = T0 & 0x003fffff;
RETURN();
}
void OPPROTO op_sts_fpscr_T0(void)
{
T0 = env->fpscr & 0x003fffff;
RETURN();
}
void OPPROTO op_movt_rN(void)
{
@ -659,6 +695,30 @@ void OPPROTO op_movl_imm_rN(void)
RETURN();
}
void OPPROTO op_fmov_frN_FT0(void)
{
FT0 = *(float32 *)&env->fregs[PARAM1];
RETURN();
}
void OPPROTO op_fmov_drN_DT0(void)
{
DT0 = *(float64 *)&env->fregs[PARAM1];
RETURN();
}
void OPPROTO op_fmov_FT0_frN(void)
{
*(float32 *)&env->fregs[PARAM1] = FT0;
RETURN();
}
void OPPROTO op_fmov_DT0_drN(void)
{
*(float64 *)&env->fregs[PARAM1] = DT0;
RETURN();
}
void OPPROTO op_dec1_rN(void)
{
env->gregs[PARAM1] -= 1;
@ -677,6 +737,12 @@ void OPPROTO op_dec4_rN(void)
RETURN();
}
void OPPROTO op_dec8_rN(void)
{
env->gregs[PARAM1] -= 4;
RETURN();
}
void OPPROTO op_inc1_rN(void)
{
env->gregs[PARAM1] += 1;
@ -695,6 +761,12 @@ void OPPROTO op_inc4_rN(void)
RETURN();
}
void OPPROTO op_inc8_rN(void)
{
env->gregs[PARAM1] += 4;
RETURN();
}
void OPPROTO op_add_T0_rN(void)
{
env->gregs[PARAM1] += T0;
@ -779,6 +851,18 @@ void OPPROTO op_movl_T0_T1(void)
RETURN();
}
void OPPROTO op_movl_fpul_FT0(void)
{
FT0 = *(float32 *)&env->fpul;
RETURN();
}
void OPPROTO op_movl_FT0_fpul(void)
{
*(float32 *)&env->fpul = FT0;
RETURN();
}
void OPPROTO op_goto_tb0(void)
{
GOTO_TB(op_goto_tb0, PARAM1, 0);