diff options
author | ths <ths@c046a42c-6fe2-441c-8c8c-71466251a162> | 2007-09-24 12:48:00 +0000 |
---|---|---|
committer | ths <ths@c046a42c-6fe2-441c-8c8c-71466251a162> | 2007-09-24 12:48:00 +0000 |
commit | e189e7486867e36c35f99cbac27d503ce4e7c71d (patch) | |
tree | ac7f7d77ee235b50b3db039b78d6965f807daca7 /target-mips/op.c | |
parent | 92a34c10b595ae01ff55c385b9867363ac91e0eb (diff) | |
download | qemu-e189e7486867e36c35f99cbac27d503ce4e7c71d.tar.gz qemu-e189e7486867e36c35f99cbac27d503ce4e7c71d.tar.bz2 qemu-e189e7486867e36c35f99cbac27d503ce4e7c71d.zip |
Per-CPU instruction decoding implementation, by Aurelien Jarno.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3228 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'target-mips/op.c')
-rw-r--r-- | target-mips/op.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/target-mips/op.c b/target-mips/op.c index 8d4c7d4afd..dd90163376 100644 --- a/target-mips/op.c +++ b/target-mips/op.c @@ -1847,10 +1847,9 @@ void op_mtc0_status (void) (val & (1 << CP0St_UM))) env->hflags |= MIPS_HFLAG_UM; #ifdef TARGET_MIPS64 - if (!(env->CP0_Config0 & (0x3 << CP0C0_AT)) || - ((env->hflags & MIPS_HFLAG_UM) && + if ((env->hflags & MIPS_HFLAG_UM) && !(val & (1 << CP0St_PX)) && - !(val & (1 << CP0St_UX)))) + !(val & (1 << CP0St_UX))) env->hflags &= ~MIPS_HFLAG_64; #endif if (val & (1 << CP0St_CU1)) @@ -1906,7 +1905,7 @@ void op_mtc0_cause (void) { uint32_t mask = 0x00C00300; - if ((env->CP0_Config0 & (0x7 << CP0C0_AR)) == (1 << CP0C0_AR)) + if (env->insn_flags & ISA_MIPS32R2) mask |= 1 << CP0Ca_DC; env->CP0_Cause = (env->CP0_Cause & ~mask) | (T0 & mask); @@ -3014,10 +3013,9 @@ void op_eret (void) (env->CP0_Status & (1 << CP0St_UM))) env->hflags |= MIPS_HFLAG_UM; #ifdef TARGET_MIPS64 - if (!(env->CP0_Config0 & (0x3 << CP0C0_AT)) || - ((env->hflags & MIPS_HFLAG_UM) && + if ((env->hflags & MIPS_HFLAG_UM) && !(env->CP0_Status & (1 << CP0St_PX)) && - !(env->CP0_Status & (1 << CP0St_UX)))) + !(env->CP0_Status & (1 << CP0St_UX))) env->hflags &= ~MIPS_HFLAG_64; #endif if (loglevel & CPU_LOG_EXEC) @@ -3038,10 +3036,9 @@ void op_deret (void) (env->CP0_Status & (1 << CP0St_UM))) env->hflags |= MIPS_HFLAG_UM; #ifdef TARGET_MIPS64 - if (!(env->CP0_Config0 & (0x3 << CP0C0_AT)) || - ((env->hflags & MIPS_HFLAG_UM) && + if ((env->hflags & MIPS_HFLAG_UM) && !(env->CP0_Status & (1 << CP0St_PX)) && - !(env->CP0_Status & (1 << CP0St_UX)))) + !(env->CP0_Status & (1 << CP0St_UX))) env->hflags &= ~MIPS_HFLAG_64; #endif if (loglevel & CPU_LOG_EXEC) |