diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b09c7ce5812..fcfcfbb2578 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2017-09-17 Daniel Santos + + 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 + or avx version of the stub. + 2017-09-17 H.J. Lu PR target/82166 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 4f0414ffa9d..1ed6f75d455 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/ChangeLog b/gcc/testsuite/ChangeLog index 47de348eb51..d2aa6052dcb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-09-17 Daniel Santos + + gcc.target/i386/pr82196-1.c: New test. + gcc.target/i386/pr82196-2.c: Likewise. + 2017-09-17 H.J. Lu PR target/82166 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..ef858328f00 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr82196-1.c @@ -0,0 +1,14 @@ +/* { dg-do compile { target lp64 } } */ +/* { 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..8fe58411d5e --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr82196-2.c @@ -0,0 +1,14 @@ +/* { dg-do compile { target lp64 } } */ +/* { 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/ChangeLog b/libgcc/ChangeLog index 8c1e1738c73..b548922904c 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,31 @@ +2017-09-17 Daniel Santos + + 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. + 2017-09-01 Olivier Hainque * config.host (*-*-vxworks7): Widen scope to vxworks7*. 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