Skip to content

Commit 2da0df5

Browse files
committed
[X86][bugfix] redefine __SSC_MARK to escape cpp string literal concatenation problem
Reviewed By: pengfei, RKSimon Differential Revision: https://reviews.llvm.org/D132636
1 parent 08d9912 commit 2da0df5

File tree

1 file changed

+4
-7
lines changed

1 file changed

+4
-7
lines changed

clang/lib/Headers/x86gprintrin.h

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,22 +26,19 @@
2626
#endif
2727

2828
#if defined(__i386__)
29-
#define __FULLBX "ebx"
29+
#define __SAVE_GPRBX "mov {%%ebx, %%eax |eax, ebx};"
30+
#define __RESTORE_GPRBX "mov {%%eax, %%ebx |ebx, eax};"
3031
#define __TMPGPR "eax"
3132
#else
3233
// When in 64-bit target, the 32-bit operands generate a 32-bit result,
3334
// zero-extended to a 64-bit result in the destination general-purpose,
3435
// It means "mov x %ebx" will clobber the higher 32 bits of rbx, so we
3536
// should preserve the 64-bit register rbx.
36-
#define __FULLBX "rbx"
37+
#define __SAVE_GPRBX "mov {%%rbx, %%rax |rax, rbx};"
38+
#define __RESTORE_GPRBX "mov {%%rax, %%rbx |rbx, rax};"
3739
#define __TMPGPR "rax"
3840
#endif
3941

40-
#define __MOVEGPR(__r1, __r2) "mov {%%"__r1 ", %%"__r2 "|"__r2 ", "__r1"};"
41-
42-
#define __SAVE_GPRBX __MOVEGPR(__FULLBX, __TMPGPR)
43-
#define __RESTORE_GPRBX __MOVEGPR(__TMPGPR, __FULLBX)
44-
4542
#define __SSC_MARK(__Tag) \
4643
__asm__ __volatile__( __SAVE_GPRBX \
4744
"mov {%0, %%ebx|ebx, %0}; " \

0 commit comments

Comments
 (0)