Index: target-mips/helper.c =================================================================== --- target-mips/helper.c (revision 5430) +++ target-mips/helper.c (working copy) @@ -448,12 +448,12 @@ cause = 2; if (env->error_code == 1 && !(env->CP0_Status & (1 << CP0St_EXL))) { #if defined(TARGET_MIPS64) - int R = env->CP0_BadVAddr >> 62; + int ksu = (env->CP0_Status >> CP0St_KSU) & 3; int UX = (env->CP0_Status & (1 << CP0St_UX)) != 0; int SX = (env->CP0_Status & (1 << CP0St_SX)) != 0; int KX = (env->CP0_Status & (1 << CP0St_KX)) != 0; - if ((R == 0 && UX) || (R == 1 && SX) || (R == 3 && KX)) + if ((ksu == 0 && KX) || (ksu == 1 && SX) || (ksu == 3 && UX)) offset = 0x080; else #endif @@ -464,12 +464,12 @@ cause = 3; if (env->error_code == 1 && !(env->CP0_Status & (1 << CP0St_EXL))) { #if defined(TARGET_MIPS64) - int R = env->CP0_BadVAddr >> 62; + int ksu = (env->CP0_Status >> CP0St_KSU) & 3; int UX = (env->CP0_Status & (1 << CP0St_UX)) != 0; int SX = (env->CP0_Status & (1 << CP0St_SX)) != 0; int KX = (env->CP0_Status & (1 << CP0St_KX)) != 0; - if ((R == 0 && UX) || (R == 1 && SX) || (R == 3 && KX)) + if ((ksu == 0 && KX) || (ksu == 1 && SX) || (ksu == 3 && UX)) offset = 0x080; else #endif