]> git.proxmox.com Git - qemu.git/commitdiff
Fix sign-extension of VPN field in TLB, by Herve Poussineau.
authorths <ths@c046a42c-6fe2-441c-8c8c-71466251a162>
Sun, 18 Feb 2007 00:19:08 +0000 (00:19 +0000)
committerths <ths@c046a42c-6fe2-441c-8c8c-71466251a162>
Sun, 18 Feb 2007 00:19:08 +0000 (00:19 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2433 c046a42c-6fe2-441c-8c8c-71466251a162

target-mips/helper.c
target-mips/op.c
target-mips/op_helper.c

index d2d7a9f871297d250f1296f647af4940b8328363..51b8ca102ca994851a2c3b229f463e3981dfd0b7 100644 (file)
@@ -41,12 +41,12 @@ enum {
 static int map_address (CPUState *env, target_ulong *physical, int *prot,
                         target_ulong address, int rw, int access_type)
 {
+    uint8_t ASID = env->CP0_EntryHi & 0xFF;
     int i;
 
     for (i = 0; i < env->tlb_in_use; i++) {
         tlb_t *tlb = &env->tlb[i];
         /* 1k pages are not supported. */
-        uint8_t ASID = env->CP0_EntryHi & 0xFF;
         target_ulong mask = tlb->PageMask | 0x1FFF;
         target_ulong tag = address & ~mask;
         int n;
index cd5c69ca46e100779ca8447f48edabaafd9dbff4..34c17c1ab5f9773d6747c197c6792d3edd6d246a 100644 (file)
@@ -1340,7 +1340,7 @@ void op_mtc0_entryhi (void)
 
     /* 1k pages not implemented */
     /* Ignore MIPS64 TLB for now */
-    val = (int32_t)T0 & 0xFFFFE0FF;
+    val = (target_ulong)(int32_t)T0 & ~(target_ulong)0x1F00;
     old = env->CP0_EntryHi;
     env->CP0_EntryHi = val;
     /* If the ASID changes, flush qemu's TLB.  */
index 9596d04fb60a32c08753e37c761c4a1e5c16eedc..1b8d9351a966139728e7c14f3bfdd8a51a3dce06 100644 (file)
@@ -395,7 +395,7 @@ static void fill_tlb (int idx)
 
     /* XXX: detect conflicting TLBs and raise a MCHECK exception when needed */
     tlb = &env->tlb[idx];
-    tlb->VPN = env->CP0_EntryHi & (int32_t)0xFFFFE000;
+    tlb->VPN = env->CP0_EntryHi & ~(target_ulong)0x1FFF;
     tlb->ASID = env->CP0_EntryHi & 0xFF;
     tlb->PageMask = env->CP0_PageMask;
     tlb->G = env->CP0_EntryLo0 & env->CP0_EntryLo1 & 1;