]> rtime.felk.cvut.cz Git - lisovros/qemu_apohw.git/commitdiff
EBase is limited to KSEG0/KSEG1 even on 64bit CPUs.
authorths <ths@c046a42c-6fe2-441c-8c8c-71466251a162>
Wed, 24 Jan 2007 18:01:23 +0000 (18:01 +0000)
committerths <ths@c046a42c-6fe2-441c-8c8c-71466251a162>
Wed, 24 Jan 2007 18:01:23 +0000 (18:01 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2351 c046a42c-6fe2-441c-8c8c-71466251a162

target-mips/cpu.h
target-mips/op.c
target-mips/translate.c

index 3c99054d6d81a500304cbb71f08322bb809332e1..fb5a3fef3d78db3770689dcb290ebfd9d0394247 100644 (file)
@@ -162,7 +162,7 @@ struct CPUMIPSState {
 #define CP0Ca_EC    2
     target_ulong CP0_EPC;
     int32_t CP0_PRid;
-    target_ulong CP0_EBase;
+    int32_t CP0_EBase;
     int32_t CP0_Config0;
 #define CP0C0_M    31
 #define CP0C0_K23  28
index 9d30d03cd37d1376bbdf657772b62c18280f752b..cd5c69ca46e100779ca8447f48edabaafd9dbff4 100644 (file)
@@ -1158,7 +1158,7 @@ void op_mfc0_prid (void)
 
 void op_mfc0_ebase (void)
 {
-    T0 = (int32_t)env->CP0_EBase;
+    T0 = env->CP0_EBase;
     RETURN();
 }
 
@@ -1423,7 +1423,7 @@ void op_mtc0_ebase (void)
 {
     /* vectored interrupts not implemented */
     /* Multi-CPU not implemented */
-    env->CP0_EBase = (int32_t)0x80000000 | (T0 & 0x3FFFF000);
+    env->CP0_EBase = 0x80000000 | (T0 & 0x3FFFF000);
     RETURN();
 }
 
@@ -1563,12 +1563,6 @@ void op_dmfc0_epc (void)
     RETURN();
 }
 
-void op_dmfc0_ebase (void)
-{
-    T0 = env->CP0_EBase;
-    RETURN();
-}
-
 void op_dmfc0_lladdr (void)
 {
     T0 = env->CP0_LLAddr >> 4;
@@ -1627,15 +1621,6 @@ void op_dmtc0_epc (void)
     RETURN();
 }
 
-void op_dmtc0_ebase (void)
-{
-    /* vectored interrupts not implemented */
-    /* Multi-CPU not implemented */
-    /* XXX: 64bit addressing broken */
-    env->CP0_EBase = (int32_t)0x80000000 | (T0 & 0x3FFFF000);
-    RETURN();
-}
-
 void op_dmtc0_watchlo0 (void)
 {
     env->CP0_WatchLo = T0;
index 3cc8a55d4e7dc97e443bb6a2ef85e093cc85245d..ce56bb083453052e65939bbc053c4274a53437e1 100644 (file)
@@ -3099,7 +3099,7 @@ static void gen_dmfc0 (DisasContext *ctx, int reg, int sel)
            rn = "PRid";
            break;
         case 1:
-           gen_op_dmfc0_ebase();
+           gen_op_mfc0_ebase();
            rn = "EBase";
            break;
         default:
@@ -3683,7 +3683,7 @@ static void gen_dmtc0 (DisasContext *ctx, int reg, int sel)
            rn = "PRid";
            break;
         case 1:
-           gen_op_dmtc0_ebase();
+           gen_op_mtc0_ebase();
            rn = "EBase";
            break;
         default:
@@ -5305,7 +5305,7 @@ void cpu_reset (CPUMIPSState *env)
 #endif
     env->CP0_Wired = 0;
     /* SMP not implemented */
-    env->CP0_EBase = (int32_t)0x80000000;
+    env->CP0_EBase = 0x80000000;
     env->CP0_Config0 = MIPS_CONFIG0;
     env->CP0_Config1 = MIPS_CONFIG1;
     env->CP0_Config2 = MIPS_CONFIG2;