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:
JF Bastien 2019-07-14 18:33:51 +00:00
parent 24cacf9c56
commit fff5dc0b17
3 changed files with 16 additions and 0 deletions

View File

@ -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
------------------------------

View File

@ -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.

View File

@ -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)))