]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
tcg/mips: fix TLB loading for BE host with 32-bit guests
authorAurelien Jarno <aurelien@aurel32.net>
Thu, 30 Jul 2015 21:39:34 +0000 (23:39 +0200)
committerMichael Roth <mdroth@linux.vnet.ibm.com>
Tue, 4 Aug 2015 17:30:20 +0000 (12:30 -0500)
For 32-bit guest, we load a 32-bit address from the TLB, so there is no
need to compensate for the low or high part. This fixes 32-bit guests on
big-endian hosts.

Cc: qemu-stable@nongnu.org
Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
(cherry picked from commit e72c4fb81db52be881c9356f1c60e0a7817d2d32)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
tcg/mips/tcg-target.c

index 5414b8312c906acf2e606fea8fd3765cb4a4005d..6ca35a7d05e1ef57a865c27ac7db5c3f0ec903af 100644 (file)
@@ -963,9 +963,11 @@ static void tcg_out_tlb_load(TCGContext *s, TCGReg base, TCGReg addrl,
     }
 
     /* Load the tlb comparator.  */
-    tcg_out_opc_imm(s, OPC_LW, TCG_TMP0, TCG_REG_A0, cmp_off + LO_OFF);
     if (TARGET_LONG_BITS == 64) {
+        tcg_out_opc_imm(s, OPC_LW, TCG_TMP0, TCG_REG_A0, cmp_off + LO_OFF);
         tcg_out_opc_imm(s, OPC_LW, base, TCG_REG_A0, cmp_off + HI_OFF);
+    } else {
+        tcg_out_opc_imm(s, OPC_LW, TCG_TMP0, TCG_REG_A0, cmp_off);
     }
 
     /* Mask the page bits, keeping the alignment bits to compare against.