diff --git a/arch/powerpc/kernel/fpu.S b/arch/powerpc/kernel/fpu.S
index de36955..adb08af 100644
--- a/arch/powerpc/kernel/fpu.S
+++ b/arch/powerpc/kernel/fpu.S
@@ -25,14 +25,24 @@
 #include <asm/asm-offsets.h>
 #include <asm/ptrace.h>
 
-#ifdef CONFIG_VSX
+#if defined (CONFIG_VSX) && defined(CONFIG_BGQ)
+# error "This code depends on CONFIG_VSX and CONFIG_BGQ being exclusive
+#elif defined (CONFIG_VSX)
+# define _REST_32VSRS(n,c,base) REST_32VSRS(n,c,base)
+# define _SAVE_32VSRS(n,c,base) SAVE_32VSRS(n,c,base)
+#elif defined(CONFIG_BGQ)
+# define _REST_32VSRS(n,c,base) REST_32QRS(n,c,base)
+# define _SAVE_32VSRS(n,c,base) SAVE_32QRS(n,c,base)
+#endif
+
+#if defined (CONFIG_VSX) || defined(CONFIG_BGQ)
 #define REST_32FPVSRS(n,c,base)						\
 BEGIN_FTR_SECTION							\
 	b	2f;							\
 END_FTR_SECTION_IFSET(CPU_FTR_VSX);					\
 	REST_32FPRS(n,base);						\
 	b	3f;							\
-2:	REST_32VSRS(n,c,base);						\
+2:	_REST_32VSRS(n,c,base);						\
 3:
 
 #define SAVE_32FPVSRS(n,c,base)						\
@@ -41,7 +51,7 @@ BEGIN_FTR_SECTION							\
 END_FTR_SECTION_IFSET(CPU_FTR_VSX);					\
 	SAVE_32FPRS(n,base);						\
 	b	3f;							\
-2:	SAVE_32VSRS(n,c,base);						\
+2:	_SAVE_32VSRS(n,c,base);						\
 3:
 #else
 #define REST_32FPVSRS(n,b,base)	REST_32FPRS(n, base)
