Index: arch/ppc/include/asm.h
===================================================================
--- arch/ppc/include/asm.h	(revision 82a80d392903baa374f50e411c3523502ebdc9c2)
+++ arch/ppc/include/asm.h	(revision fe56609d549b89f3cdaf034f209b7dfcb325b768)
@@ -40,12 +40,12 @@
 static inline pri_t cpu_priority_low(void) {
 	pri_t v;
+	pri_t tmp;
+	
 	__asm__ volatile (
 		"mfmsr %0\n"
-		"mfmsr %%r31\n"
-		"ori %%r31, %%r31, 1 << 15\n"
-		"mtmsr %%r31\n"
-		: "=r" (v)
-		:
-		: "%r31"
+		"mfmsr %1\n"
+		"ori %1, %1, 1 << 15\n"
+		"mtmsr %1\n"
+		: "=r" (v), "=r" (tmp)
 	);
 	return v;
@@ -59,12 +59,12 @@
 static inline pri_t cpu_priority_high(void) {
 	pri_t v;
+	pri_t tmp;
+	
 	__asm__ volatile (
 		"mfmsr %0\n"
-		"mfmsr %%r31\n"
-		"rlwinm %%r31, %%r31, 0, 17, 15\n"
-		"mtmsr %%r31\n"
-		: "=r" (v)
-		:
-		: "%r31"
+		"mfmsr %1\n"
+		"rlwinm %1, %1, 0, 17, 15\n"
+		"mtmsr %1\n"
+		: "=r" (v), "=r" (tmp)
 	);
 	return v;
@@ -76,14 +76,15 @@
  */
 static inline void cpu_priority_restore(pri_t pri) {
+	pri_t tmp;
+	
 	__asm__ volatile (
-		"mfmsr %%r31\n"
-		"rlwimi  %0, %%r31, 0, 17, 15\n"
-		"cmpw 0, %0, %%r31\n"
+		"mfmsr %1\n"
+		"rlwimi  %0, %1, 0, 17, 15\n"
+		"cmpw 0, %0, %1\n"
 		"beq 0f\n"
 		"mtmsr %0\n"
 		"0:\n"
-		: "=r" (pri)
+		: "=r" (pri), "=r" (tmp)
 		: "0" (pri)
-		: "%r31"
 	);
 }
@@ -117,4 +118,5 @@
 }
 
+void cpu_halt(void);
 void cpu_sleep(void);
 void asm_delay_loop(__u32 t);
Index: arch/ppc/src/drivers/ofw.c
===================================================================
--- arch/ppc/src/drivers/ofw.c	(revision 82a80d392903baa374f50e411c3523502ebdc9c2)
+++ arch/ppc/src/drivers/ofw.c	(revision fe56609d549b89f3cdaf034f209b7dfcb325b768)
@@ -28,4 +28,5 @@
 
 #include <arch/drivers/ofw.h>
+#include <arch/asm.h>
 #include <stdarg.h>
 #include <cpu.h>
