This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] [i386, libgcc] PR 82196 -mcall-ms2sysv-xlogues emits wrong AVX/SSE MOV


On Thu, Sep 14, 2017 at 6:03 AM, Daniel Santos <daniel.santos@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.santos@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
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]