summaryrefslogtreecommitdiffstats
path: root/sys/mips/rmi
diff options
context:
space:
mode:
authorjchandra <jchandra@FreeBSD.org>2010-10-05 05:49:38 +0000
committerjchandra <jchandra@FreeBSD.org>2010-10-05 05:49:38 +0000
commit71fb5fea95d648b5af444d43dc9096a02bd37a1a (patch)
treee6ba25946cce3028ca41817da10efe2c23aeec81 /sys/mips/rmi
parent07c7ca7c366d860131106658c7d6bc84e0e1738c (diff)
downloadFreeBSD-src-71fb5fea95d648b5af444d43dc9096a02bd37a1a.zip
FreeBSD-src-71fb5fea95d648b5af444d43dc9096a02bd37a1a.tar.gz
Fix asm for XKPHYS read for o32, constriants needed for input registers
that are clobbered. Fixes a crash when compiled without DEBUG
Diffstat (limited to 'sys/mips/rmi')
-rw-r--r--sys/mips/rmi/rmi_mips_exts.h27
1 files changed, 14 insertions, 13 deletions
diff --git a/sys/mips/rmi/rmi_mips_exts.h b/sys/mips/rmi/rmi_mips_exts.h
index 9f5f6aa..fb2f886 100644
--- a/sys/mips/rmi/rmi_mips_exts.h
+++ b/sys/mips/rmi/rmi_mips_exts.h
@@ -39,7 +39,7 @@
#define CPU_BLOCKID_MMU 4
#define CPU_BLOCKID_PRF 5
-#define LSU_CERRLOG_REGID 9
+#define LSU_CERRLOG_REGID 9
#if defined(__mips_n64) || defined(__mips_n32)
static __inline uint64_t
@@ -481,14 +481,15 @@ xlr_paddr_lw(uint64_t paddr)
__asm__ __volatile__(
".set push \n\t"
".set mips64 \n\t"
- "dsll32 %1, %1, 0 \n\t"
- "dsll32 %2, %2, 0 \n\t" /* get rid of the */
- "dsrl32 %2, %2, 0 \n\t" /* sign extend */
- "or %0, %1, %2 \n\t"
- "lw %0, 0(%0) \n\t"
+ "dsll32 $8, %1, 0 \n\t"
+ "dsll32 $9, %2, 0 \n\t" /* get rid of the */
+ "dsrl32 $9, $9, 0 \n\t" /* sign extend */
+ "or $9, $8, $8 \n\t"
+ "lw %0, 0($9) \n\t"
".set pop \n"
- : "=&r"(val)
- : "r"(addrh), "r"(addrl));
+ : "=r"(val)
+ : "r"(addrh), "r"(addrl)
+ : "$8", "$9");
return (val);
}
@@ -505,14 +506,14 @@ xlr_paddr_ld(uint64_t paddr)
__asm__ __volatile__(
".set push \n\t"
".set mips64 \n\t"
- "dsll32 %2, %2, 0 \n\t"
- "dsll32 %3, %3, 0 \n\t" /* get rid of the */
- "dsrl32 %3, %3, 0 \n\t" /* sign extend */
- "or %0, %2, %3 \n\t"
+ "dsll32 %0, %2, 0 \n\t"
+ "dsll32 %1, %3, 0 \n\t" /* get rid of the */
+ "dsrl32 %1, %1, 0 \n\t" /* sign extend */
+ "or %0, %0, %1 \n\t"
"lw %1, 4(%0) \n\t"
"lw %0, 0(%0) \n\t"
".set pop \n"
- : "=&r"(valh), "=r"(vall)
+ : "=&r"(valh), "=&r"(vall)
: "r"(addrh), "r"(addrl));
return (((uint64_t)valh << 32) | vall);
OpenPOWER on IntegriCloud