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

Reply via email to