This is useful for unifying some pieces of asm code.
Signed-off-by: Jeremy Fitzhardinge <[email protected]>
---
include/asm-x86/asm.h | 56 +++++++++++++++++++++++++++++++++++--------------
1 file changed, 40 insertions(+), 16 deletions(-)
===================================================================
--- a/include/asm-x86/asm.h
+++ b/include/asm-x86/asm.h
@@ -1,33 +1,57 @@
#ifndef _ASM_X86_ASM_H
#define _ASM_X86_ASM_H
+
+#include <linux/stringify.h>
#ifdef CONFIG_X86_32
/* 32 bits */
-# define _ASM_PTR " .long "
-# define _ASM_ALIGN " .balign 4 "
-# define _ASM_MOV_UL " movl "
+# define __ASM_PTR .long
+# define __ASM_ALIGN .balign 4
+# define __ASM_MOV_UL movl
-# define _ASM_INC " incl "
-# define _ASM_DEC " decl "
-# define _ASM_ADD " addl "
-# define _ASM_SUB " subl "
-# define _ASM_XADD " xaddl "
+# define __ASM_INC incl
+# define __ASM_DEC decl
+# define __ASM_ADD addl
+# define __ASM_SUB subl
+# define __ASM_XADD xaddl
#else
/* 64 bits */
-# define _ASM_PTR " .quad "
-# define _ASM_ALIGN " .balign 8 "
-# define _ASM_MOV_UL " movq "
+# define __ASM_PTR .quad
+# define __ASM_ALIGN .balign 8
+# define __ASM_MOV_UL movq
-# define _ASM_INC " incq "
-# define _ASM_DEC " decq "
-# define _ASM_ADD " addq "
-# define _ASM_SUB " subq "
-# define _ASM_XADD " xaddq "
+# define __ASM_INC incq
+# define __ASM_DEC decq
+# define __ASM_ADD addq
+# define __ASM_SUB subq
+# define __ASM_XADD xaddq
#endif /* CONFIG_X86_32 */
+
+#ifdef __ASSEMBLER__
+#define _ASM_PTR __ASM_PTR
+#define _ASM_ALIGN __ASM_ALIGN
+#define _ASM_MOV_UL __ASM_MOV_UL
+
+#define _ASM_INC __ASM_INC
+#define _ASM_DEC __ASM_DEC
+#define _ASM_ADD __ASM_ADD
+#define _ASM_SUB __ASM_SUB
+#define _ASM_XADD __ASM_XADD
+#else /* !ASSEMBLER */
+#define _ASM_PTR " " __stringify(__ASM_PTR) " "
+#define _ASM_ALIGN " " __stringify(__ASM_ALIGN) " "
+#define _ASM_MOV_UL " " __stringify(__ASM_MOV_UL) " "
+
+#define _ASM_INC " " __stringify(__ASM_INC) " "
+#define _ASM_DEC " " __stringify(__ASM_DEC) " "
+#define _ASM_ADD " " __stringify(__ASM_ADD) " "
+#define _ASM_SUB " " __stringify(__ASM_SUB) " "
+#define _ASM_XADD " " __stringify(__ASM_XADD) " "
+#endif /* __ASSEMBLER__ */
/* Exception table entry */
# define _ASM_EXTABLE(from,to) \
Jeremy Fitzhardinge wrote:
> +# define __ASM_INC incl
> +# define __ASM_INC incq
> +#define _ASM_INC __ASM_INC
> +#define _ASM_INC " " __stringify(__ASM_INC) " "
You have *exactly* as many #defines as if one would simply do four cases
(32 C, 64 C, 32 asm, 64 asm), and that would be easier to read...
-hpa
Jeremy Fitzhardinge wrote:
> This is useful for unifying some pieces of asm code.
>
> Signed-off-by: Jeremy Fitzhardinge <[email protected]>
Thinking about it some more, this should be possible to do cleaner like
this:
#ifdef CONFIG_X86_32
# ifdef __ASSEMBLY__
# define __ASM_SEL(a,b) a
# else
# define __ASM_SEL(a,b) " " #a " "
# endif
#else
# ifdef __ASSEMBLY__
# define __ASM_SEL(a,b) b
# else
# define __ASM_SEL(a,b) " " #b " "
# endif
#endif
#define _ASM_INC _ASM_SEL(incl,incq)
#define _ASM_DEC _ASM_SEL(decl,decq)
/* ... etc ... */
H. Peter Anvin wrote:
> Jeremy Fitzhardinge wrote:
>> This is useful for unifying some pieces of asm code.
>>
>> Signed-off-by: Jeremy Fitzhardinge <[email protected]>
>
> Thinking about it some more, this should be possible to do cleaner
> like this:
OK, how about this...
J
Subject: x86: make asm/asm.h work for asm code.
This is useful for unifying some pieces of asm code.
Signed-off-by: Jeremy Fitzhardinge <[email protected]>
---
include/asm-x86/asm.h | 42 +++++++++++++++++++-----------------------
1 file changed, 19 insertions(+), 23 deletions(-)
===================================================================
--- a/include/asm-x86/asm.h
+++ b/include/asm-x86/asm.h
@@ -1,33 +1,29 @@
#ifndef _ASM_X86_ASM_H
#define _ASM_X86_ASM_H
+#ifdef __ASSEMBLY__
+# define __ASM_FORM(x) x
+#else
+# define __ASM_FORM(x) " " #x " "
+#endif
+
#ifdef CONFIG_X86_32
-/* 32 bits */
+# define __ASM_SEL(a,b) __ASM_FORM(a)
+#else
+# define __ASM_SEL(a,b) __ASM_FORM(b)
+#endif
-# define _ASM_PTR " .long "
-# define _ASM_ALIGN " .balign 4 "
-# define _ASM_MOV_UL " movl "
+#define __ASM_SIZE(inst) __ASM_SEL(inst##l, inst##q)
-# define _ASM_INC " incl "
-# define _ASM_DEC " decl "
-# define _ASM_ADD " addl "
-# define _ASM_SUB " subl "
-# define _ASM_XADD " xaddl "
+#define _ASM_PTR __ASM_SEL(.long, .quad)
+#define _ASM_ALIGN __ASM_SEL(.balign 4, .balign 8)
+#define _ASM_MOV_UL __ASM_SIZE(mov)
-#else
-/* 64 bits */
-
-# define _ASM_PTR " .quad "
-# define _ASM_ALIGN " .balign 8 "
-# define _ASM_MOV_UL " movq "
-
-# define _ASM_INC " incq "
-# define _ASM_DEC " decq "
-# define _ASM_ADD " addq "
-# define _ASM_SUB " subq "
-# define _ASM_XADD " xaddq "
-
-#endif /* CONFIG_X86_32 */
+#define _ASM_INC __ASM_SIZE(inc)
+#define _ASM_DEC __ASM_SIZE(dec)
+#define _ASM_ADD __ASM_SIZE(add)
+#define _ASM_SUB __ASM_SIZE(sub)
+#define _ASM_XADD __ASM_SIZE(xadd)
/* Exception table entry */
# define _ASM_EXTABLE(from,to) \
Jeremy Fitzhardinge wrote:
> H. Peter Anvin wrote:
>> Jeremy Fitzhardinge wrote:
>>> This is useful for unifying some pieces of asm code.
>>>
>>> Signed-off-by: Jeremy Fitzhardinge <[email protected]>
>>
>> Thinking about it some more, this should be possible to do cleaner
>> like this:
>
> OK, how about this...
A little over the top, but looks great ;)
Acked-by: H. Peter Anvin <[email protected]>
I'll pull this into -tip once I figure out which topic it should go under.
-hpa
H. Peter Anvin wrote:
>
> Acked-by: H. Peter Anvin <[email protected]>
>
> I'll pull this into -tip once I figure out which topic it should go under.
>
I applied this to x86/cleanups last night.
-hpa