# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID e02a45b9104380bc7593c54554469bbb6e92e56d
# Parent 832cb25d1f554b5d8d173bb6647e6a109a47173b
Avoid code duplication between stringified and
non-stringified asm macros, by stringifying on use
where that is needed.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
diff -r 832cb25d1f55 -r e02a45b91043 xen/include/asm-x86/asm_defns.h
--- a/xen/include/asm-x86/asm_defns.h Thu Sep 1 09:07:10 2005
+++ b/xen/include/asm-x86/asm_defns.h Thu Sep 1 09:37:54 2005
@@ -6,11 +6,6 @@
#include <asm/asm-offsets.h>
#include <asm/processor.h>
-#ifndef STR
-#define __STR(x) #x
-#define STR(x) __STR(x)
-#endif
-
#ifdef __x86_64__
#include <asm/x86_64/asm_defns.h>
#else
diff -r 832cb25d1f55 -r e02a45b91043 xen/include/asm-x86/bitops.h
--- a/xen/include/asm-x86/bitops.h Thu Sep 1 09:07:10 2005
+++ b/xen/include/asm-x86/bitops.h Thu Sep 1 09:37:54 2005
@@ -6,11 +6,6 @@
*/
#include <xen/config.h>
-
-#ifndef STR
-#define __STR(x) #x
-#define STR(x) __STR(x)
-#endif
/*
* These have to be done with inline assembly: that way the bit-setting
diff -r 832cb25d1f55 -r e02a45b91043 xen/include/asm-x86/x86_32/asm_defns.h
--- a/xen/include/asm-x86/x86_32/asm_defns.h Thu Sep 1 09:07:10 2005
+++ b/xen/include/asm-x86/x86_32/asm_defns.h Thu Sep 1 09:37:54 2005
@@ -1,45 +1,5 @@
#ifndef __X86_32_ASM_DEFNS_H__
#define __X86_32_ASM_DEFNS_H__
-
-/* Maybe auto-generate the following two cases (quoted vs. unquoted). */
-#ifndef __ASSEMBLY__
-
-#define __SAVE_ALL_PRE \
- "cld;" \
- "pushl %eax;" \
- "pushl %ebp;" \
- "pushl %edi;" \
- "pushl %esi;" \
- "pushl %edx;" \
- "pushl %ecx;" \
- "pushl %ebx;" \
- "testl $"STR(X86_EFLAGS_VM)","STR(UREGS_eflags)"(%esp);" \
- "jz 2f;" \
- "call setup_vm86_frame;" \
- "jmp 3f;" \
- "2:testb $3,"STR(UREGS_cs)"(%esp);" \
- "jz 1f;" \
- "mov %ds,"STR(UREGS_ds)"(%esp);" \
- "mov %es,"STR(UREGS_es)"(%esp);" \
- "mov %fs,"STR(UREGS_fs)"(%esp);" \
- "mov %gs,"STR(UREGS_gs)"(%esp);" \
- "3:"
-
-#define SAVE_ALL_NOSEGREGS(_reg) \
- __SAVE_ALL_PRE \
- "1:"
-
-#define SET_XEN_SEGMENTS(_reg) \
- "movl $("STR(__HYPERVISOR_DS)"),%e"STR(_reg)"x;" \
- "mov %e"STR(_reg)"x,%ds;" \
- "mov %e"STR(_reg)"x,%es;"
-
-#define SAVE_ALL(_reg) \
- __SAVE_ALL_PRE \
- SET_XEN_SEGMENTS(_reg) \
- "1:"
-
-#else
#define __SAVE_ALL_PRE \
cld; \
@@ -50,7 +10,7 @@
pushl %edx; \
pushl %ecx; \
pushl %ebx; \
- testl $X86_EFLAGS_VM,UREGS_eflags(%esp); \
+ testl $(X86_EFLAGS_VM),UREGS_eflags(%esp); \
jz 2f; \
call setup_vm86_frame; \
jmp 3f; \
@@ -83,8 +43,6 @@
#define PERFC_INCR(_name,_idx)
#endif
-#endif
-
#define BUILD_SMP_INTERRUPT(x,v) XBUILD_SMP_INTERRUPT(x,v)
#define XBUILD_SMP_INTERRUPT(x,v) \
asmlinkage void x(void); \
@@ -92,7 +50,7 @@
"\n"__ALIGN_STR"\n" \
STR(x) ":\n\t" \
"pushl $"#v"<<16\n\t" \
- SAVE_ALL(a) \
+ STR(SAVE_ALL(a)) \
"call "STR(smp_##x)"\n\t" \
"jmp ret_from_intr\n");
@@ -103,7 +61,7 @@
"\n"__ALIGN_STR"\n" \
STR(x) ":\n\t" \
"pushl $"#v"<<16\n\t" \
- SAVE_ALL(a) \
+ STR(SAVE_ALL(a)) \
"movl %esp,%eax\n\t" \
"pushl %eax\n\t" \
"call "STR(smp_##x)"\n\t" \
@@ -114,7 +72,7 @@
__asm__( \
"\n" __ALIGN_STR"\n" \
"common_interrupt:\n\t" \
- SAVE_ALL(a) \
+ STR(SAVE_ALL(a)) \
"movl %esp,%eax\n\t" \
"pushl %eax\n\t" \
"call " STR(do_IRQ) "\n\t" \
diff -r 832cb25d1f55 -r e02a45b91043 xen/include/asm-x86/x86_64/asm_defns.h
--- a/xen/include/asm-x86/x86_64/asm_defns.h Thu Sep 1 09:07:10 2005
+++ b/xen/include/asm-x86/x86_64/asm_defns.h Thu Sep 1 09:37:54 2005
@@ -1,49 +1,5 @@
#ifndef __X86_64_ASM_DEFNS_H__
#define __X86_64_ASM_DEFNS_H__
-
-/* Maybe auto-generate the following two cases (quoted vs. unquoted). */
-#ifndef __ASSEMBLY__
-
-#define SAVE_ALL \
- "cld;" \
- "pushq %rdi;" \
- "pushq %rsi;" \
- "pushq %rdx;" \
- "pushq %rcx;" \
- "pushq %rax;" \
- "pushq %r8;" \
- "pushq %r9;" \
- "pushq %r10;" \
- "pushq %r11;" \
- "pushq %rbx;" \
- "pushq %rbp;" \
- "pushq %r12;" \
- "pushq %r13;" \
- "pushq %r14;" \
- "pushq %r15;"
-
-#define RESTORE_ALL \
- "popq %r15;" \
- "popq %r14;" \
- "popq %r13;" \
- "popq %r12;" \
- "popq %rbp;" \
- "popq %rbx;" \
- "popq %r11;" \
- "popq %r10;" \
- "popq %r9;" \
- "popq %r8;" \
- "popq %rax;" \
- "popq %rcx;" \
- "popq %rdx;" \
- "popq %rsi;" \
- "popq %rdi;"
-
-/* Work around AMD erratum #88 */
-#define safe_swapgs \
- "mfence; swapgs;"
-
-#else
#define SAVE_ALL \
cld; \
@@ -90,7 +46,9 @@
#define PERFC_INCR(_name,_idx)
#endif
-#endif
+/* Work around AMD erratum #88 */
+#define safe_swapgs \
+ "mfence; swapgs;"
#define BUILD_SMP_INTERRUPT(x,v) XBUILD_SMP_INTERRUPT(x,v)
#define XBUILD_SMP_INTERRUPT(x,v) \
@@ -100,7 +58,7 @@
STR(x) ":\n\t" \
"pushq $0\n\t" \
"movl $"#v",4(%rsp)\n\t" \
- SAVE_ALL \
+ STR(SAVE_ALL) \
"callq "STR(smp_##x)"\n\t" \
"jmp ret_from_intr\n");
@@ -112,7 +70,7 @@
STR(x) ":\n\t" \
"pushq $0\n\t" \
"movl $"#v",4(%rsp)\n\t" \
- SAVE_ALL \
+ STR(SAVE_ALL) \
"movq %rsp,%rdi\n\t" \
"callq "STR(smp_##x)"\n\t" \
"jmp ret_from_intr\n");
@@ -121,7 +79,7 @@
__asm__( \
"\n" __ALIGN_STR"\n" \
"common_interrupt:\n\t" \
- SAVE_ALL \
+ STR(SAVE_ALL) \
"movq %rsp,%rdi\n\t" \
"callq " STR(do_IRQ) "\n\t" \
"jmp ret_from_intr\n");
diff -r 832cb25d1f55 -r e02a45b91043 xen/include/xen/config.h
--- a/xen/include/xen/config.h Thu Sep 1 09:07:10 2005
+++ b/xen/include/xen/config.h Thu Sep 1 09:37:54 2005
@@ -40,4 +40,7 @@
#include <xen/compiler.h>
#endif
+#define __STR(...) #__VA_ARGS__
+#define STR(...) __STR(__VA_ARGS__)
+
#endif /* __XEN_CONFIG_H__ */
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|