On Thu, Sep 14, 2017 at 6:03 AM, Daniel Santos <daniel.san...@pobox.com> wrote: > I made a silly mistake in libgcc by testing the cpp macro __AVX__ to > determine rather to use movaps or vmovaps in the stubs. This resulted > in the stubs choice of instruction being decided by the machine flags > when the compiler was built rather than those being supplied at the > command line. This patch splits stubs into separate sse and avx > versions so that both are available. > > gcc: > config/i386/i386.c: (xlogue_layout::STUB_NAME_MAX_LEN): Increase to 20 > bytes. > (xlogue_layout::s_stub_names): Add an additional size-2 diminsion. > (xlogue_layout::get_stub_name): Modify to select the appropairate sse > and avx version of the stub. > > gcc/testsuite: > gcc.target/i386/pr82196-1.c: New test. > gcc.target/i386/pr82196-2.c: Likewise. > > libgcc: > config/i386/i386-asm.h (PASTE2): New macro. > (ASMNAME): Modify to use PASTE2. > (MS2SYSV_STUB_PREFIX): New macro for isa prefix. > (MS2SYSV_STUB_BEGIN, MS2SYSV_STUB_END): New macros for stub headers. > config/i386/resms64.S: Rename to a header file, use MS2SYSV_STUB_BEGIN > instead of HIDDEN_FUNC and MS2SYSV_STUB_END instead of FUNC_END. > config/i386/resms64f.S: Likewise. > config/i386/resms64fx.S: Likewise. > config/i386/resms64x.S: Likewise. > config/i386/savms64.S: Likewise. > config/i386/savms64f.S: Likewise. > config/i386/avx_resms64.S: New file that only defines a macro and > includes it's corresponding header file. > config/i386/avx_resms64f.S: Likewise. > config/i386/avx_resms64fx.S: Likewise. > config/i386/avx_resms64x.S: Likewise. > config/i386/avx_savms64.S: Likewise. > config/i386/avx_savms64f.S: Likewise. > config/i386/sse_resms64.S: Likewise. > config/i386/sse_resms64f.S: Likewise. > config/i386/sse_resms64fx.S: Likewise. > config/i386/sse_resms64x.S: Likewise. > config/i386/sse_savms64.S: Likewise. > config/i386/sse_savms64f.S: Likewise. > config/i386/t-msabi: Modified to add avx and sse versions of stubs.
OK. Thanks, Uros. > Signed-off-by: Daniel Santos <daniel.san...@pobox.com> > --- > gcc/config/i386/i386.c | 15 ++++++----- > gcc/testsuite/gcc.target/i386/pr82196-1.c | 14 ++++++++++ > gcc/testsuite/gcc.target/i386/pr82196-2.c | 14 ++++++++++ > libgcc/config/i386/avx_resms64.S | 2 ++ > libgcc/config/i386/avx_resms64f.S | 2 ++ > libgcc/config/i386/avx_resms64fx.S | 2 ++ > libgcc/config/i386/avx_resms64x.S | 2 ++ > libgcc/config/i386/avx_savms64.S | 2 ++ > libgcc/config/i386/avx_savms64f.S | 2 ++ > libgcc/config/i386/i386-asm.h | 34 > ++++++++++++++++--------- > libgcc/config/i386/{resms64.S => resms64.h} | 28 ++++++++++---------- > libgcc/config/i386/{resms64f.S => resms64f.h} | 24 ++++++++--------- > libgcc/config/i386/{resms64fx.S => resms64fx.h} | 24 ++++++++--------- > libgcc/config/i386/{resms64x.S => resms64x.h} | 28 ++++++++++---------- > libgcc/config/i386/{savms64.S => savms64.h} | 28 ++++++++++---------- > libgcc/config/i386/{savms64f.S => savms64f.h} | 24 ++++++++--------- > libgcc/config/i386/sse_resms64.S | 2 ++ > libgcc/config/i386/sse_resms64f.S | 2 ++ > libgcc/config/i386/sse_resms64fx.S | 2 ++ > libgcc/config/i386/sse_resms64x.S | 2 ++ > libgcc/config/i386/sse_savms64.S | 2 ++ > libgcc/config/i386/sse_savms64f.S | 2 ++ > libgcc/config/i386/t-msabi | 18 ++++++++----- > 23 files changed, 173 insertions(+), 102 deletions(-) > create mode 100644 gcc/testsuite/gcc.target/i386/pr82196-1.c > create mode 100644 gcc/testsuite/gcc.target/i386/pr82196-2.c > create mode 100644 libgcc/config/i386/avx_resms64.S > create mode 100644 libgcc/config/i386/avx_resms64f.S > create mode 100644 libgcc/config/i386/avx_resms64fx.S > create mode 100644 libgcc/config/i386/avx_resms64x.S > create mode 100644 libgcc/config/i386/avx_savms64.S > create mode 100644 libgcc/config/i386/avx_savms64f.S > rename libgcc/config/i386/{resms64.S => resms64.h} (76%) > rename libgcc/config/i386/{resms64f.S => resms64f.h} (79%) > rename libgcc/config/i386/{resms64fx.S => resms64fx.h} (79%) > rename libgcc/config/i386/{resms64x.S => resms64x.h} (77%) > rename libgcc/config/i386/{savms64.S => savms64.h} (76%) > rename libgcc/config/i386/{savms64f.S => savms64f.h} (79%) > create mode 100644 libgcc/config/i386/sse_resms64.S > create mode 100644 libgcc/config/i386/sse_resms64f.S > create mode 100644 libgcc/config/i386/sse_resms64fx.S > create mode 100644 libgcc/config/i386/sse_resms64x.S > create mode 100644 libgcc/config/i386/sse_savms64.S > create mode 100644 libgcc/config/i386/sse_savms64f.S > > diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c > index b2b02acc58a..f0d7d0eb196 100644 > --- a/gcc/config/i386/i386.c > +++ b/gcc/config/i386/i386.c > @@ -2513,7 +2513,7 @@ public: > static const unsigned MAX_REGS = 18; > static const unsigned MAX_EXTRA_REGS = MAX_REGS - MIN_REGS; > static const unsigned VARIANT_COUNT = MAX_EXTRA_REGS + 1; > - static const unsigned STUB_NAME_MAX_LEN = 16; > + static const unsigned STUB_NAME_MAX_LEN = 20; > static const char * const STUB_BASE_NAMES[XLOGUE_STUB_COUNT]; > static const unsigned REG_ORDER[MAX_REGS]; > static const unsigned REG_ORDER_REALIGN[MAX_REGS]; > @@ -2536,7 +2536,7 @@ private: > struct reginfo m_regs[MAX_REGS]; > > /* Lazy-inited cache of symbol names for stubs. */ > - static char s_stub_names[XLOGUE_STUB_COUNT][VARIANT_COUNT] > + static char s_stub_names[2][XLOGUE_STUB_COUNT][VARIANT_COUNT] > [STUB_NAME_MAX_LEN]; > > static const xlogue_layout s_instances[XLOGUE_SET_COUNT]; > @@ -2588,7 +2588,7 @@ const unsigned xlogue_layout::VARIANT_COUNT; > const unsigned xlogue_layout::STUB_NAME_MAX_LEN; > > /* Initialize xlogue_layout::s_stub_names to zero. */ > -char xlogue_layout::s_stub_names[XLOGUE_STUB_COUNT][VARIANT_COUNT] > +char xlogue_layout::s_stub_names[2][XLOGUE_STUB_COUNT][VARIANT_COUNT] > [STUB_NAME_MAX_LEN]; > > /* Instantiates all xlogue_layout instances. */ > @@ -2692,13 +2692,16 @@ const char * > xlogue_layout::get_stub_name (enum xlogue_stub stub, > unsigned n_extra_regs) > { > - char *name = s_stub_names[stub][n_extra_regs]; > + const int have_avx = TARGET_AVX; > + char *name = s_stub_names[!!have_avx][stub][n_extra_regs]; > > /* Lazy init */ > if (!*name) > { > - int res = snprintf (name, STUB_NAME_MAX_LEN, "__%s_%u", > - STUB_BASE_NAMES[stub], MIN_REGS + n_extra_regs); > + int res = snprintf (name, STUB_NAME_MAX_LEN, "__%s_%s_%u", > + (have_avx ? "avx" : "sse"), > + STUB_BASE_NAMES[stub], > + MIN_REGS + n_extra_regs); > gcc_checking_assert (res < (int)STUB_NAME_MAX_LEN); > } > > diff --git a/gcc/testsuite/gcc.target/i386/pr82196-1.c > b/gcc/testsuite/gcc.target/i386/pr82196-1.c > new file mode 100644 > index 00000000000..fa573dc6b66 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/i386/pr82196-1.c > @@ -0,0 +1,14 @@ > +/* { dg-do compile } */ > +/* { dg-options "-msse -mcall-ms2sysv-xlogues -O2" } */ > +/* { dg-final { scan-assembler "call.*__sse_savms64_18" } } */ > +/* { dg-final { scan-assembler "jmp.*__sse_resms64x_18" } } */ > + > +void __attribute__((sysv_abi)) a() { > +} > + > +static void __attribute__((sysv_abi)) (*volatile a_noinfo)() = a; > + > +void __attribute__((ms_abi)) b() { > + __asm__ __volatile__ ("" :::"rbx", "rbp", "r12", "r13", "r14", "r15"); > + a_noinfo (); > +} > diff --git a/gcc/testsuite/gcc.target/i386/pr82196-2.c > b/gcc/testsuite/gcc.target/i386/pr82196-2.c > new file mode 100644 > index 00000000000..31705bee29b > --- /dev/null > +++ b/gcc/testsuite/gcc.target/i386/pr82196-2.c > @@ -0,0 +1,14 @@ > +/* { dg-do compile } */ > +/* { dg-options "-mavx -mcall-ms2sysv-xlogues -O2" } */ > +/* { dg-final { scan-assembler "call.*__avx_savms64_18" } } */ > +/* { dg-final { scan-assembler "jmp.*__avx_resms64x_18" } } */ > + > +void __attribute__((sysv_abi)) a() { > +} > + > +static void __attribute__((sysv_abi)) (*volatile a_noinfo)() = a; > + > +void __attribute__((ms_abi)) b() { > + __asm__ __volatile__ ("" :::"rbx", "rbp", "r12", "r13", "r14", "r15"); > + a_noinfo (); > +} > diff --git a/libgcc/config/i386/avx_resms64.S > b/libgcc/config/i386/avx_resms64.S > new file mode 100644 > index 00000000000..2be744937cf > --- /dev/null > +++ b/libgcc/config/i386/avx_resms64.S > @@ -0,0 +1,2 @@ > +#define MS2SYSV_STUB_AVX > +#include "resms64.h" > diff --git a/libgcc/config/i386/avx_resms64f.S > b/libgcc/config/i386/avx_resms64f.S > new file mode 100644 > index 00000000000..76a1340ab1f > --- /dev/null > +++ b/libgcc/config/i386/avx_resms64f.S > @@ -0,0 +1,2 @@ > +#define MS2SYSV_STUB_AVX > +#include "resms64f.h" > diff --git a/libgcc/config/i386/avx_resms64fx.S > b/libgcc/config/i386/avx_resms64fx.S > new file mode 100644 > index 00000000000..2ea4738af7e > --- /dev/null > +++ b/libgcc/config/i386/avx_resms64fx.S > @@ -0,0 +1,2 @@ > +#define MS2SYSV_STUB_AVX > +#include "resms64fx.h" > diff --git a/libgcc/config/i386/avx_resms64x.S > b/libgcc/config/i386/avx_resms64x.S > new file mode 100644 > index 00000000000..14a53d4fcf9 > --- /dev/null > +++ b/libgcc/config/i386/avx_resms64x.S > @@ -0,0 +1,2 @@ > +#define MS2SYSV_STUB_AVX > +#include "resms64x.h" > diff --git a/libgcc/config/i386/avx_savms64.S > b/libgcc/config/i386/avx_savms64.S > new file mode 100644 > index 00000000000..fed1620b968 > --- /dev/null > +++ b/libgcc/config/i386/avx_savms64.S > @@ -0,0 +1,2 @@ > +#define MS2SYSV_STUB_AVX > +#include "savms64.h" > diff --git a/libgcc/config/i386/avx_savms64f.S > b/libgcc/config/i386/avx_savms64f.S > new file mode 100644 > index 00000000000..32279657e30 > --- /dev/null > +++ b/libgcc/config/i386/avx_savms64f.S > @@ -0,0 +1,2 @@ > +#define MS2SYSV_STUB_AVX > +#include "savms64f.h" > diff --git a/libgcc/config/i386/i386-asm.h b/libgcc/config/i386/i386-asm.h > index 1387fd24b4f..424e0f72aac 100644 > --- a/libgcc/config/i386/i386-asm.h > +++ b/libgcc/config/i386/i386-asm.h > @@ -28,6 +28,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively. > If not, see > > #include "auto-host.h" > > +#define PASTE2(a, b) PASTE2a(a, b) > +#define PASTE2a(a, b) a ## b > + > /* These macros currently support GNU/Linux, Solaris and Darwin. */ > > #ifdef __ELF__ > @@ -46,9 +49,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. > If not, see > #endif > > #ifdef __USER_LABEL_PREFIX__ > -# define ASMNAME2(prefix, name) prefix ## name > -# define ASMNAME1(prefix, name) ASMNAME2(prefix, name) > -# define ASMNAME(name) ASMNAME1(__USER_LABEL_PREFIX__, name) > +# define ASMNAME(name) PASTE2(__USER_LABEL_PREFIX__, name) > #else > # define ASMNAME(name) name > #endif > @@ -66,15 +67,24 @@ ASMNAME(fn): > > #define FUNC_END(fn) FN_SIZE(ASMNAME(fn)) > > -#ifdef __SSE2__ > -# ifdef __AVX__ > -# define MOVAPS vmovaps > -# else > -# define MOVAPS movaps > -# endif > +#ifdef MS2SYSV_STUB_AVX > +# define MS2SYSV_STUB_PREFIX __avx_ > +# define MOVAPS vmovaps > +#elif defined(MS2SYSV_STUB_SSE) > +# define MS2SYSV_STUB_PREFIX __sse_ > +# define MOVAPS movaps > +#endif > + > +#if defined (MS2SYSV_STUB_PREFIX) && defined (MOVAPS) > + > +# define MS2SYSV_STUB_BEGIN(base_name) \ > + HIDDEN_FUNC(PASTE2(MS2SYSV_STUB_PREFIX, base_name)) > + > +# define MS2SYSV_STUB_END(base_name) \ > + FUNC_END(PASTE2(MS2SYSV_STUB_PREFIX, base_name)) > > /* Save SSE registers 6-15. off is the offset of rax to get to xmm6. */ > -#define SSE_SAVE \ > +# define SSE_SAVE \ > MOVAPS %xmm15,-0x30(%rax); \ > MOVAPS %xmm14,-0x20(%rax); \ > MOVAPS %xmm13,-0x10(%rax); \ > @@ -87,7 +97,7 @@ ASMNAME(fn): > MOVAPS %xmm6, 0x60(%rax) > > /* Restore SSE registers 6-15. off is the offset of rsi to get to xmm6. */ > -#define SSE_RESTORE \ > +# define SSE_RESTORE \ > MOVAPS -0x30(%rsi), %xmm15; \ > MOVAPS -0x20(%rsi), %xmm14; \ > MOVAPS -0x10(%rsi), %xmm13; \ > @@ -99,5 +109,5 @@ ASMNAME(fn): > MOVAPS 0x50(%rsi), %xmm7 ; \ > MOVAPS 0x60(%rsi), %xmm6 > > -#endif /* __SSE2__ */ > +#endif /* defined (MS2SYSV_STUB_ISA) && defined (MOVAPS) */ > #endif /* I386_ASM_H */ > diff --git a/libgcc/config/i386/resms64.S b/libgcc/config/i386/resms64.h > similarity index 76% > rename from libgcc/config/i386/resms64.S > rename to libgcc/config/i386/resms64.h > index f842c20a77a..f01b41897bc 100644 > --- a/libgcc/config/i386/resms64.S > +++ b/libgcc/config/i386/resms64.h > @@ -29,29 +29,29 @@ see the files COPYING3 and COPYING.RUNTIME respectively. > If not, see > /* Epilogue routine for restoring 64-bit ms/sysv registers. */ > > .text > -HIDDEN_FUNC(__resms64_18) > +MS2SYSV_STUB_BEGIN(resms64_18) > mov -0x70(%rsi),%r15 > -HIDDEN_FUNC(__resms64_17) > +MS2SYSV_STUB_BEGIN(resms64_17) > mov -0x68(%rsi),%r14 > -HIDDEN_FUNC(__resms64_16) > +MS2SYSV_STUB_BEGIN(resms64_16) > mov -0x60(%rsi),%r13 > -HIDDEN_FUNC(__resms64_15) > +MS2SYSV_STUB_BEGIN(resms64_15) > mov -0x58(%rsi),%r12 > -HIDDEN_FUNC(__resms64_14) > +MS2SYSV_STUB_BEGIN(resms64_14) > mov -0x50(%rsi),%rbp > -HIDDEN_FUNC(__resms64_13) > +MS2SYSV_STUB_BEGIN(resms64_13) > mov -0x48(%rsi),%rbx > -HIDDEN_FUNC(__resms64_12) > +MS2SYSV_STUB_BEGIN(resms64_12) > mov -0x40(%rsi),%rdi > SSE_RESTORE > mov -0x38(%rsi),%rsi > ret > -FUNC_END(__resms64_12) > -FUNC_END(__resms64_13) > -FUNC_END(__resms64_14) > -FUNC_END(__resms64_15) > -FUNC_END(__resms64_16) > -FUNC_END(__resms64_17) > -FUNC_END(__resms64_18) > +MS2SYSV_STUB_END(resms64_12) > +MS2SYSV_STUB_END(resms64_13) > +MS2SYSV_STUB_END(resms64_14) > +MS2SYSV_STUB_END(resms64_15) > +MS2SYSV_STUB_END(resms64_16) > +MS2SYSV_STUB_END(resms64_17) > +MS2SYSV_STUB_END(resms64_18) > > #endif /* __x86_64__ */ > diff --git a/libgcc/config/i386/resms64f.S b/libgcc/config/i386/resms64f.h > similarity index 79% > rename from libgcc/config/i386/resms64f.S > rename to libgcc/config/i386/resms64f.h > index 81946cda944..743ec514cef 100644 > --- a/libgcc/config/i386/resms64f.S > +++ b/libgcc/config/i386/resms64f.h > @@ -30,26 +30,26 @@ see the files COPYING3 and COPYING.RUNTIME respectively. > If not, see > pointer is used. */ > > .text > -HIDDEN_FUNC(__resms64f_17) > +MS2SYSV_STUB_BEGIN(resms64f_17) > mov -0x68(%rsi),%r15 > -HIDDEN_FUNC(__resms64f_16) > +MS2SYSV_STUB_BEGIN(resms64f_16) > mov -0x60(%rsi),%r14 > -HIDDEN_FUNC(__resms64f_15) > +MS2SYSV_STUB_BEGIN(resms64f_15) > mov -0x58(%rsi),%r13 > -HIDDEN_FUNC(__resms64f_14) > +MS2SYSV_STUB_BEGIN(resms64f_14) > mov -0x50(%rsi),%r12 > -HIDDEN_FUNC(__resms64f_13) > +MS2SYSV_STUB_BEGIN(resms64f_13) > mov -0x48(%rsi),%rbx > -HIDDEN_FUNC(__resms64f_12) > +MS2SYSV_STUB_BEGIN(resms64f_12) > mov -0x40(%rsi),%rdi > SSE_RESTORE > mov -0x38(%rsi),%rsi > ret > -FUNC_END(__resms64f_12) > -FUNC_END(__resms64f_13) > -FUNC_END(__resms64f_14) > -FUNC_END(__resms64f_15) > -FUNC_END(__resms64f_16) > -FUNC_END(__resms64f_17) > +MS2SYSV_STUB_END(resms64f_12) > +MS2SYSV_STUB_END(resms64f_13) > +MS2SYSV_STUB_END(resms64f_14) > +MS2SYSV_STUB_END(resms64f_15) > +MS2SYSV_STUB_END(resms64f_16) > +MS2SYSV_STUB_END(resms64f_17) > > #endif /* __x86_64__ */ > diff --git a/libgcc/config/i386/resms64fx.S b/libgcc/config/i386/resms64fx.h > similarity index 79% > rename from libgcc/config/i386/resms64fx.S > rename to libgcc/config/i386/resms64fx.h > index acf34fa0837..965807a1299 100644 > --- a/libgcc/config/i386/resms64fx.S > +++ b/libgcc/config/i386/resms64fx.h > @@ -31,27 +31,27 @@ see the files COPYING3 and COPYING.RUNTIME respectively. > If not, see > * from the function. */ > > .text > -HIDDEN_FUNC(__resms64fx_17) > +MS2SYSV_STUB_BEGIN(resms64fx_17) > mov -0x68(%rsi),%r15 > -HIDDEN_FUNC(__resms64fx_16) > +MS2SYSV_STUB_BEGIN(resms64fx_16) > mov -0x60(%rsi),%r14 > -HIDDEN_FUNC(__resms64fx_15) > +MS2SYSV_STUB_BEGIN(resms64fx_15) > mov -0x58(%rsi),%r13 > -HIDDEN_FUNC(__resms64fx_14) > +MS2SYSV_STUB_BEGIN(resms64fx_14) > mov -0x50(%rsi),%r12 > -HIDDEN_FUNC(__resms64fx_13) > +MS2SYSV_STUB_BEGIN(resms64fx_13) > mov -0x48(%rsi),%rbx > -HIDDEN_FUNC(__resms64fx_12) > +MS2SYSV_STUB_BEGIN(resms64fx_12) > mov -0x40(%rsi),%rdi > SSE_RESTORE > mov -0x38(%rsi),%rsi > leaveq > ret > -FUNC_END(__resms64fx_12) > -FUNC_END(__resms64fx_13) > -FUNC_END(__resms64fx_14) > -FUNC_END(__resms64fx_15) > -FUNC_END(__resms64fx_16) > -FUNC_END(__resms64fx_17) > +MS2SYSV_STUB_END(resms64fx_12) > +MS2SYSV_STUB_END(resms64fx_13) > +MS2SYSV_STUB_END(resms64fx_14) > +MS2SYSV_STUB_END(resms64fx_15) > +MS2SYSV_STUB_END(resms64fx_16) > +MS2SYSV_STUB_END(resms64fx_17) > > #endif /* __x86_64__ */ > diff --git a/libgcc/config/i386/resms64x.S b/libgcc/config/i386/resms64x.h > similarity index 77% > rename from libgcc/config/i386/resms64x.S > rename to libgcc/config/i386/resms64x.h > index e27aab7d881..689a1dec20b 100644 > --- a/libgcc/config/i386/resms64x.S > +++ b/libgcc/config/i386/resms64x.h > @@ -30,30 +30,30 @@ see the files COPYING3 and COPYING.RUNTIME respectively. > If not, see > * function. */ > > .text > -HIDDEN_FUNC(__resms64x_18) > +MS2SYSV_STUB_BEGIN(resms64x_18) > mov -0x70(%rsi),%r15 > -HIDDEN_FUNC(__resms64x_17) > +MS2SYSV_STUB_BEGIN(resms64x_17) > mov -0x68(%rsi),%r14 > -HIDDEN_FUNC(__resms64x_16) > +MS2SYSV_STUB_BEGIN(resms64x_16) > mov -0x60(%rsi),%r13 > -HIDDEN_FUNC(__resms64x_15) > +MS2SYSV_STUB_BEGIN(resms64x_15) > mov -0x58(%rsi),%r12 > -HIDDEN_FUNC(__resms64x_14) > +MS2SYSV_STUB_BEGIN(resms64x_14) > mov -0x50(%rsi),%rbp > -HIDDEN_FUNC(__resms64x_13) > +MS2SYSV_STUB_BEGIN(resms64x_13) > mov -0x48(%rsi),%rbx > -HIDDEN_FUNC(__resms64x_12) > +MS2SYSV_STUB_BEGIN(resms64x_12) > mov -0x40(%rsi),%rdi > SSE_RESTORE > mov -0x38(%rsi),%rsi > mov %r10,%rsp > ret > -FUNC_END(__resms64x_12) > -FUNC_END(__resms64x_13) > -FUNC_END(__resms64x_14) > -FUNC_END(__resms64x_15) > -FUNC_END(__resms64x_16) > -FUNC_END(__resms64x_17) > -FUNC_END(__resms64x_18) > +MS2SYSV_STUB_END(resms64x_12) > +MS2SYSV_STUB_END(resms64x_13) > +MS2SYSV_STUB_END(resms64x_14) > +MS2SYSV_STUB_END(resms64x_15) > +MS2SYSV_STUB_END(resms64x_16) > +MS2SYSV_STUB_END(resms64x_17) > +MS2SYSV_STUB_END(resms64x_18) > > #endif /* __x86_64__ */ > diff --git a/libgcc/config/i386/savms64.S b/libgcc/config/i386/savms64.h > similarity index 76% > rename from libgcc/config/i386/savms64.S > rename to libgcc/config/i386/savms64.h > index 44dda46ec54..28d5e3548ab 100644 > --- a/libgcc/config/i386/savms64.S > +++ b/libgcc/config/i386/savms64.h > @@ -29,29 +29,29 @@ see the files COPYING3 and COPYING.RUNTIME respectively. > If not, see > /* Prologue routine for saving 64-bit ms/sysv registers. */ > > .text > -HIDDEN_FUNC(__savms64_18) > +MS2SYSV_STUB_BEGIN(savms64_18) > mov %r15,-0x70(%rax) > -HIDDEN_FUNC(__savms64_17) > +MS2SYSV_STUB_BEGIN(savms64_17) > mov %r14,-0x68(%rax) > -HIDDEN_FUNC(__savms64_16) > +MS2SYSV_STUB_BEGIN(savms64_16) > mov %r13,-0x60(%rax) > -HIDDEN_FUNC(__savms64_15) > +MS2SYSV_STUB_BEGIN(savms64_15) > mov %r12,-0x58(%rax) > -HIDDEN_FUNC(__savms64_14) > +MS2SYSV_STUB_BEGIN(savms64_14) > mov %rbp,-0x50(%rax) > -HIDDEN_FUNC(__savms64_13) > +MS2SYSV_STUB_BEGIN(savms64_13) > mov %rbx,-0x48(%rax) > -HIDDEN_FUNC(__savms64_12) > +MS2SYSV_STUB_BEGIN(savms64_12) > mov %rdi,-0x40(%rax) > mov %rsi,-0x38(%rax) > SSE_SAVE > ret > -FUNC_END(__savms64_12) > -FUNC_END(__savms64_13) > -FUNC_END(__savms64_14) > -FUNC_END(__savms64_15) > -FUNC_END(__savms64_16) > -FUNC_END(__savms64_17) > -FUNC_END(__savms64_18) > +MS2SYSV_STUB_END(savms64_12) > +MS2SYSV_STUB_END(savms64_13) > +MS2SYSV_STUB_END(savms64_14) > +MS2SYSV_STUB_END(savms64_15) > +MS2SYSV_STUB_END(savms64_16) > +MS2SYSV_STUB_END(savms64_17) > +MS2SYSV_STUB_END(savms64_18) > > #endif /* __x86_64__ */ > diff --git a/libgcc/config/i386/savms64f.S b/libgcc/config/i386/savms64f.h > similarity index 79% > rename from libgcc/config/i386/savms64f.S > rename to libgcc/config/i386/savms64f.h > index 64e91ac0394..723e1080f5c 100644 > --- a/libgcc/config/i386/savms64f.S > +++ b/libgcc/config/i386/savms64f.h > @@ -30,26 +30,26 @@ see the files COPYING3 and COPYING.RUNTIME respectively. > If not, see > * needed or hard frame pointer used. */ > > .text > -HIDDEN_FUNC(__savms64f_17) > +MS2SYSV_STUB_BEGIN(savms64f_17) > mov %r15,-0x68(%rax) > -HIDDEN_FUNC(__savms64f_16) > +MS2SYSV_STUB_BEGIN(savms64f_16) > mov %r14,-0x60(%rax) > -HIDDEN_FUNC(__savms64f_15) > +MS2SYSV_STUB_BEGIN(savms64f_15) > mov %r13,-0x58(%rax) > -HIDDEN_FUNC(__savms64f_14) > +MS2SYSV_STUB_BEGIN(savms64f_14) > mov %r12,-0x50(%rax) > -HIDDEN_FUNC(__savms64f_13) > +MS2SYSV_STUB_BEGIN(savms64f_13) > mov %rbx,-0x48(%rax) > -HIDDEN_FUNC(__savms64f_12) > +MS2SYSV_STUB_BEGIN(savms64f_12) > mov %rdi,-0x40(%rax) > mov %rsi,-0x38(%rax) > SSE_SAVE > ret > -FUNC_END(__savms64f_12) > -FUNC_END(__savms64f_13) > -FUNC_END(__savms64f_14) > -FUNC_END(__savms64f_15) > -FUNC_END(__savms64f_16) > -FUNC_END(__savms64f_17) > +MS2SYSV_STUB_END(savms64f_12) > +MS2SYSV_STUB_END(savms64f_13) > +MS2SYSV_STUB_END(savms64f_14) > +MS2SYSV_STUB_END(savms64f_15) > +MS2SYSV_STUB_END(savms64f_16) > +MS2SYSV_STUB_END(savms64f_17) > > #endif /* __x86_64__ */ > diff --git a/libgcc/config/i386/sse_resms64.S > b/libgcc/config/i386/sse_resms64.S > new file mode 100644 > index 00000000000..c87f5cc021d > --- /dev/null > +++ b/libgcc/config/i386/sse_resms64.S > @@ -0,0 +1,2 @@ > +#define MS2SYSV_STUB_SSE > +#include "resms64.h" > diff --git a/libgcc/config/i386/sse_resms64f.S > b/libgcc/config/i386/sse_resms64f.S > new file mode 100644 > index 00000000000..3a066bc174a > --- /dev/null > +++ b/libgcc/config/i386/sse_resms64f.S > @@ -0,0 +1,2 @@ > +#define MS2SYSV_STUB_SSE > +#include "resms64f.h" > diff --git a/libgcc/config/i386/sse_resms64fx.S > b/libgcc/config/i386/sse_resms64fx.S > new file mode 100644 > index 00000000000..142667a28bf > --- /dev/null > +++ b/libgcc/config/i386/sse_resms64fx.S > @@ -0,0 +1,2 @@ > +#define MS2SYSV_STUB_SSE > +#include "resms64fx.h" > diff --git a/libgcc/config/i386/sse_resms64x.S > b/libgcc/config/i386/sse_resms64x.S > new file mode 100644 > index 00000000000..2cfc2b0195f > --- /dev/null > +++ b/libgcc/config/i386/sse_resms64x.S > @@ -0,0 +1,2 @@ > +#define MS2SYSV_STUB_SSE > +#include "resms64x.h" > diff --git a/libgcc/config/i386/sse_savms64.S > b/libgcc/config/i386/sse_savms64.S > new file mode 100644 > index 00000000000..52f43075b40 > --- /dev/null > +++ b/libgcc/config/i386/sse_savms64.S > @@ -0,0 +1,2 @@ > +#define MS2SYSV_STUB_SSE > +#include "savms64.h" > diff --git a/libgcc/config/i386/sse_savms64f.S > b/libgcc/config/i386/sse_savms64f.S > new file mode 100644 > index 00000000000..426be35b53b > --- /dev/null > +++ b/libgcc/config/i386/sse_savms64f.S > @@ -0,0 +1,2 @@ > +#define MS2SYSV_STUB_SSE > +#include "savms64f.h" > diff --git a/libgcc/config/i386/t-msabi b/libgcc/config/i386/t-msabi > index f9806a611aa..ffc9c4f6656 100644 > --- a/libgcc/config/i386/t-msabi > +++ b/libgcc/config/i386/t-msabi > @@ -1,7 +1,13 @@ > # Makefile fragment to support -mcall-ms2sysv-xlogues > -LIB2ADD_ST += $(srcdir)/config/i386/savms64.S \ > - $(srcdir)/config/i386/resms64.S \ > - $(srcdir)/config/i386/resms64x.S \ > - $(srcdir)/config/i386/savms64f.S \ > - $(srcdir)/config/i386/resms64f.S \ > - $(srcdir)/config/i386/resms64fx.S > +LIB2ADD_ST += $(srcdir)/config/i386/avx_savms64.S \ > + $(srcdir)/config/i386/avx_resms64.S \ > + $(srcdir)/config/i386/avx_resms64x.S \ > + $(srcdir)/config/i386/avx_savms64f.S \ > + $(srcdir)/config/i386/avx_resms64f.S \ > + $(srcdir)/config/i386/avx_resms64fx.S \ > + $(srcdir)/config/i386/sse_savms64.S \ > + $(srcdir)/config/i386/sse_resms64.S \ > + $(srcdir)/config/i386/sse_resms64x.S \ > + $(srcdir)/config/i386/sse_savms64f.S \ > + $(srcdir)/config/i386/sse_resms64f.S \ > + $(srcdir)/config/i386/sse_resms64fx.S > -- > 2.14.1 >