aboutsummaryrefslogtreecommitdiff
path: root/clang
diff options
context:
space:
mode:
authorXiang1 Zhang <xiang1.zhang@intel.com>2022-08-25 15:06:41 +0800
committerXiang1 Zhang <xiang1.zhang@intel.com>2022-09-01 09:37:23 +0800
commit2da0df5e7cac2d06e0632522a3451e3a2dbd1a37 (patch)
tree8de47a854fa3ddbfd4e7989bd55b221318de9e85 /clang
parent08d9912d1c599b5d79d4f2cd6f6be2cdb2bbfa83 (diff)
downloadllvm-2da0df5e7cac2d06e0632522a3451e3a2dbd1a37.zip
llvm-2da0df5e7cac2d06e0632522a3451e3a2dbd1a37.tar.gz
llvm-2da0df5e7cac2d06e0632522a3451e3a2dbd1a37.tar.bz2
[X86][bugfix] redefine __SSC_MARK to escape cpp string literal concatenation problem
Reviewed By: pengfei, RKSimon Differential Revision: https://reviews.llvm.org/D132636
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Headers/x86gprintrin.h11
1 files changed, 4 insertions, 7 deletions
diff --git a/clang/lib/Headers/x86gprintrin.h b/clang/lib/Headers/x86gprintrin.h
index 2c2fbb9..81d7360 100644
--- a/clang/lib/Headers/x86gprintrin.h
+++ b/clang/lib/Headers/x86gprintrin.h
@@ -26,22 +26,19 @@
#endif
#if defined(__i386__)
-#define __FULLBX "ebx"
+#define __SAVE_GPRBX "mov {%%ebx, %%eax |eax, ebx};"
+#define __RESTORE_GPRBX "mov {%%eax, %%ebx |ebx, eax};"
#define __TMPGPR "eax"
#else
// When in 64-bit target, the 32-bit operands generate a 32-bit result,
// zero-extended to a 64-bit result in the destination general-purpose,
// It means "mov x %ebx" will clobber the higher 32 bits of rbx, so we
// should preserve the 64-bit register rbx.
-#define __FULLBX "rbx"
+#define __SAVE_GPRBX "mov {%%rbx, %%rax |rax, rbx};"
+#define __RESTORE_GPRBX "mov {%%rax, %%rbx |rbx, rax};"
#define __TMPGPR "rax"
#endif
-#define __MOVEGPR(__r1, __r2) "mov {%%"__r1 ", %%"__r2 "|"__r2 ", "__r1"};"
-
-#define __SAVE_GPRBX __MOVEGPR(__FULLBX, __TMPGPR)
-#define __RESTORE_GPRBX __MOVEGPR(__TMPGPR, __FULLBX)
-
#define __SSC_MARK(__Tag) \
__asm__ __volatile__( __SAVE_GPRBX \
"mov {%0, %%ebx|ebx, %0}; " \