Jan Beulich
2008-Jan-29  10:46 UTC
[Xen-devel] [PATCH 2/3] linux/x86: avoid casting hypercall return value
.., being a little more type correct and producing better code on
64-bits.
As usual, written and tested on 2.6.24 and made apply to the 2.6.18
tree without further testing.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
Index: head-2008-01-28/include/asm-i386/mach-xen/asm/hypercall.h
==================================================================---
head-2008-01-28.orig/include/asm-i386/mach-xen/asm/hypercall.h	2008-01-29
09:53:01.000000000 +0100
+++ head-2008-01-28/include/asm-i386/mach-xen/asm/hypercall.h	2008-01-29
10:09:17.000000000 +0100
@@ -52,40 +52,43 @@
 
 #define _hypercall0(type, name)			\
 ({						\
-	long __res;				\
+	type __res;				\
 	asm volatile (				\
 		HYPERCALL_STR(name)		\
 		: "=a" (__res)			\
 		:				\
 		: "memory" );			\
-	(type)__res;				\
+	__res;					\
 })
 
 #define _hypercall1(type, name, a1)				\
 ({								\
-	long __res, __ign1;					\
+	type __res;						\
+	long __ign1;						\
 	asm volatile (						\
 		HYPERCALL_STR(name)				\
 		: "=a" (__res), "=b" (__ign1)			\
 		: "1" ((long)(a1))				\
 		: "memory" );					\
-	(type)__res;						\
+	__res;							\
 })
 
 #define _hypercall2(type, name, a1, a2)				\
 ({								\
-	long __res, __ign1, __ign2;				\
+	type __res;						\
+	long __ign1, __ign2;					\
 	asm volatile (						\
 		HYPERCALL_STR(name)				\
 		: "=a" (__res), "=b" (__ign1), "=c" (__ign2)	\
 		: "1" ((long)(a1)), "2" ((long)(a2))		\
 		: "memory" );					\
-	(type)__res;						\
+	__res;							\
 })
 
 #define _hypercall3(type, name, a1, a2, a3)			\
 ({								\
-	long __res, __ign1, __ign2, __ign3;			\
+	type __res;						\
+	long __ign1, __ign2, __ign3;				\
 	asm volatile (						\
 		HYPERCALL_STR(name)				\
 		: "=a" (__res), "=b" (__ign1), "=c" (__ign2), 
\
@@ -93,12 +96,13 @@
 		: "1" ((long)(a1)), "2" ((long)(a2)),		\
 		"3" ((long)(a3))				\
 		: "memory" );					\
-	(type)__res;						\
+	__res;							\
 })
 
 #define _hypercall4(type, name, a1, a2, a3, a4)			\
 ({								\
-	long __res, __ign1, __ign2, __ign3, __ign4;		\
+	type __res;						\
+	long __ign1, __ign2, __ign3, __ign4;			\
 	asm volatile (						\
 		HYPERCALL_STR(name)				\
 		: "=a" (__res), "=b" (__ign1), "=c" (__ign2),	\
@@ -106,12 +110,13 @@
 		: "1" ((long)(a1)), "2" ((long)(a2)),		\
 		"3" ((long)(a3)), "4" ((long)(a4))		\
 		: "memory" );					\
-	(type)__res;						\
+	__res;							\
 })
 
 #define _hypercall5(type, name, a1, a2, a3, a4, a5)		\
 ({								\
-	long __res, __ign1, __ign2, __ign3, __ign4, __ign5;	\
+	type __res;						\
+	long __ign1, __ign2, __ign3, __ign4, __ign5;		\
 	asm volatile (						\
 		HYPERCALL_STR(name)				\
 		: "=a" (__res), "=b" (__ign1), "=c" (__ign2),	\
@@ -120,7 +125,7 @@
 		"3" ((long)(a3)), "4" ((long)(a4)),		\
 		"5" ((long)(a5))				\
 		: "memory" );					\
-	(type)__res;						\
+	__res;							\
 })
 
 static inline int __must_check
Index: head-2008-01-28/include/asm-x86_64/mach-xen/asm/hypercall.h
==================================================================---
head-2008-01-28.orig/include/asm-x86_64/mach-xen/asm/hypercall.h	2008-01-29
10:03:28.000000000 +0100
+++ head-2008-01-28/include/asm-x86_64/mach-xen/asm/hypercall.h	2008-01-29
10:15:17.000000000 +0100
@@ -56,40 +56,43 @@
 
 #define _hypercall0(type, name)			\
 ({						\
-	long __res;				\
+	type __res;				\
 	asm volatile (				\
 		HYPERCALL_STR(name)		\
 		: "=a" (__res)			\
 		:				\
 		: "memory" );			\
-	(type)__res;				\
+	__res;					\
 })
 
 #define _hypercall1(type, name, a1)				\
 ({								\
-	long __res, __ign1;					\
+	type __res;						\
+	long __ign1;						\
 	asm volatile (						\
 		HYPERCALL_STR(name)				\
 		: "=a" (__res), "=D" (__ign1)			\
 		: "1" ((long)(a1))				\
 		: "memory" );					\
-	(type)__res;						\
+	__res;							\
 })
 
 #define _hypercall2(type, name, a1, a2)				\
 ({								\
-	long __res, __ign1, __ign2;				\
+	type __res;						\
+	long __ign1, __ign2;					\
 	asm volatile (						\
 		HYPERCALL_STR(name)				\
 		: "=a" (__res), "=D" (__ign1), "=S" (__ign2)	\
 		: "1" ((long)(a1)), "2" ((long)(a2))		\
 		: "memory" );					\
-	(type)__res;						\
+	__res;							\
 })
 
 #define _hypercall3(type, name, a1, a2, a3)			\
 ({								\
-	long __res, __ign1, __ign2, __ign3;			\
+	type __res;						\
+	long __ign1, __ign2, __ign3;				\
 	asm volatile (						\
 		HYPERCALL_STR(name)				\
 		: "=a" (__res), "=D" (__ign1), "=S" (__ign2), 
\
@@ -97,12 +100,13 @@
 		: "1" ((long)(a1)), "2" ((long)(a2)),		\
 		"3" ((long)(a3))				\
 		: "memory" );					\
-	(type)__res;						\
+	__res;							\
 })
 
 #define _hypercall4(type, name, a1, a2, a3, a4)			\
 ({								\
-	long __res, __ign1, __ign2, __ign3;			\
+	type __res;						\
+	long __ign1, __ign2, __ign3;				\
 	register long __arg4 asm("r10") = (long)(a4);		\
 	asm volatile (						\
 		HYPERCALL_STR(name)				\
@@ -111,12 +115,13 @@
 		: "1" ((long)(a1)), "2" ((long)(a2)),		\
 		  "3" ((long)(a3))				\
 		: "memory" );					\
-	(type)__res;						\
+	__res;							\
 })
 
 #define _hypercall5(type, name, a1, a2, a3, a4, a5)		\
 ({								\
-	long __res, __ign1, __ign2, __ign3;			\
+	type __res;						\
+	long __ign1, __ign2, __ign3;				\
 	register long __arg4 asm("r10") = (long)(a4);		\
 	register long __arg5 asm("r8") = (long)(a5);		\
 	asm volatile (						\
@@ -126,7 +131,7 @@
 		: "1" ((long)(a1)), "2" ((long)(a2)),		\
 		  "3" ((long)(a3))				\
 		: "memory" );					\
-	(type)__res;						\
+	__res;							\
 })
 
 static inline int __must_check
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel