forked from OSchip/llvm-project
Support __seg_fs and __seg_gs on x86
Summary: GCC supports named address spaces macros: https://gcc.gnu.org/onlinedocs/gcc/Named-Address-Spaces.html clang does as well with address spaces: https://clang.llvm.org/docs/LanguageExtensions.html#memory-references-to-specified-segments Add the __seg_fs and __seg_gs macros for compatibility with GCC. <rdar://problem/52944935> Subscribers: jkorous, dexonsmith, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D64676 llvm-svn: 366028
This commit is contained in:
parent
24cacf9c56
commit
fff5dc0b17
|
@ -2465,6 +2465,10 @@ Which compiles to (on X86-32):
|
|||
movl %gs:(%eax), %eax
|
||||
ret
|
||||
|
||||
You can also use the GCC compatibility macros ``__seg_fs`` and ``__seg_gs`` for
|
||||
the same purpose. The preprocessor symbols ``__SEG_FS`` and ``__SEG_GS``
|
||||
indicate their support.
|
||||
|
||||
PowerPC Language Extensions
|
||||
------------------------------
|
||||
|
||||
|
|
|
@ -917,6 +917,11 @@ void X86TargetInfo::getTargetDefines(const LangOptions &Opts,
|
|||
DefineStd(Builder, "i386", Opts);
|
||||
}
|
||||
|
||||
Builder.defineMacro("__SEG_GS");
|
||||
Builder.defineMacro("__SEG_FS");
|
||||
Builder.defineMacro("__seg_gs", "__attribute__((address_space(256)))");
|
||||
Builder.defineMacro("__seg_fs", "__attribute__((address_space(257)))");
|
||||
|
||||
// Subtarget options.
|
||||
// FIXME: We are hard-coding the tune parameters based on the CPU, but they
|
||||
// truly should be based on -mtune options.
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
// RUN: %clang -target i386-unknown-unknown -x c -E -dM -o - %s | FileCheck -match-full-lines %s
|
||||
// RUN: %clang -target x86_64-unknown-unknown -x c -E -dM -o - %s | FileCheck -match-full-lines %s
|
||||
|
||||
// CHECK: #define __SEG_FS 1
|
||||
// CHECK: #define __SEG_GS 1
|
||||
// CHECK: #define __seg_fs __attribute__((address_space(257)))
|
||||
// CHECK: #define __seg_gs __attribute__((address_space(256)))
|
Loading…
Reference in New Issue