get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/813705/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 813705,
    "url": "http://patchwork.ozlabs.org/api/patches/813705/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/20170914040348.6339-1-daniel.santos@pobox.com/",
    "project": {
        "id": 17,
        "url": "http://patchwork.ozlabs.org/api/projects/17/?format=api",
        "name": "GNU Compiler Collection",
        "link_name": "gcc",
        "list_id": "gcc-patches.gcc.gnu.org",
        "list_email": "gcc-patches@gcc.gnu.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null,
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20170914040348.6339-1-daniel.santos@pobox.com>",
    "list_archive_url": null,
    "date": "2017-09-14T04:03:48",
    "name": "[i386,libgcc] PR 82196 -mcall-ms2sysv-xlogues emits wrong AVX/SSE MOV",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "be0ed059a4e9c892cca27b6036d11a83cc393717",
    "submitter": {
        "id": 70395,
        "url": "http://patchwork.ozlabs.org/api/people/70395/?format=api",
        "name": "Daniel Santos",
        "email": "daniel.santos@pobox.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/20170914040348.6339-1-daniel.santos@pobox.com/mbox/",
    "series": [
        {
            "id": 3027,
            "url": "http://patchwork.ozlabs.org/api/series/3027/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=3027",
            "date": "2017-09-14T04:03:48",
            "name": "[i386,libgcc] PR 82196 -mcall-ms2sysv-xlogues emits wrong AVX/SSE MOV",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/3027/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/813705/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/813705/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<gcc-patches-return-462104-incoming=patchwork.ozlabs.org@gcc.gnu.org>",
        "X-Original-To": "incoming@patchwork.ozlabs.org",
        "Delivered-To": [
            "patchwork-incoming@bilbo.ozlabs.org",
            "mailing list gcc-patches@gcc.gnu.org"
        ],
        "Authentication-Results": [
            "ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org\n\t(client-ip=209.132.180.131; helo=sourceware.org;\n\tenvelope-from=gcc-patches-return-462104-incoming=patchwork.ozlabs.org@gcc.gnu.org;\n\treceiver=<UNKNOWN>)",
            "ozlabs.org; dkim=pass (1024-bit key;\n\tunprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org\n\theader.b=\"l6eiIamS\"; dkim-atps=neutral",
            "sourceware.org; auth=none"
        ],
        "Received": [
            "from sourceware.org (server1.sourceware.org [209.132.180.131])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xt4WL0PpDz9sBZ\n\tfor <incoming@patchwork.ozlabs.org>;\n\tThu, 14 Sep 2017 13:58:05 +1000 (AEST)",
            "(qmail 28929 invoked by alias); 14 Sep 2017 03:57:55 -0000",
            "(qmail 24345 invoked by uid 89); 14 Sep 2017 03:57:52 -0000",
            "from pb-smtp2.pobox.com (HELO sasl.smtp.pobox.com) (64.147.108.71)\n\tby sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with\n\tESMTP; Thu, 14 Sep 2017 03:57:49 +0000",
            "from sasl.smtp.pobox.com (unknown [127.0.0.1])\tby\n\tpb-smtp2.pobox.com (Postfix) with ESMTP id 7F01BA3B77;\n\tWed, 13 Sep 2017 23:57:47 -0400 (EDT)",
            "from pb-smtp2.nyi.icgroup.com (unknown [127.0.0.1])\tby\n\tpb-smtp2.pobox.com (Postfix) with ESMTP id 75EA4A3B75;\n\tWed, 13 Sep 2017 23:57:47 -0400 (EDT)",
            "from loudmouth.attlocal.net (unknown [76.215.41.237])\t(using\n\tTLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128\n\tbits))\t(No client certificate requested)\tby\n\tpb-smtp2.pobox.com (Postfix) with ESMTPSA id 50E0AA3B74;\n\tWed, 13 Sep 2017 23:57:46 -0400 (EDT)"
        ],
        "DomainKey-Signature": "a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id\n\t:list-unsubscribe:list-archive:list-post:list-help:sender:from\n\t:to:subject:date:message-id; q=dns; s=default; b=KyGUUnzhHahEEHW\n\t1z2yQlTwLumTnuUwe1UvZXNoM3aodVqi/CLQUkby3YmRYExYeQZHgi02bNJ528P0\n\td5pSBn0G1jwZ/nJEeT6h9vHbjpu3MxMZXqDs8SeUxBC3tKerVX6pm0NAqmJAYmuk\n\tSd99z/xp231SNkyDgKmwodPUARgQ=",
        "DKIM-Signature": "v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id\n\t:list-unsubscribe:list-archive:list-post:list-help:sender:from\n\t:to:subject:date:message-id; s=default; bh=SpgivybE5baOTE+IoeyPt\n\tWqZVdw=; b=l6eiIamSQCrNnO9tljiAP7y8rkQ2iA9aOZcy2DzSrtLjdy2d6ISfG\n\tzsbum0YWzn2NY5mX3rtiacK11ixvN8y+Zz5arZa8VlN+cfapy0znTQjTL7o+3FI4\n\t+x7ghip/tZxow/PviPS2Wxk/WJRgzPw7W2aydk40H+X7buX9jxGn+k=",
        "Mailing-List": "contact gcc-patches-help@gcc.gnu.org; run by ezmlm",
        "Precedence": "bulk",
        "List-Id": "<gcc-patches.gcc.gnu.org>",
        "List-Unsubscribe": "<mailto:gcc-patches-unsubscribe-incoming=patchwork.ozlabs.org@gcc.gnu.org>",
        "List-Archive": "<http://gcc.gnu.org/ml/gcc-patches/>",
        "List-Post": "<mailto:gcc-patches@gcc.gnu.org>",
        "List-Help": "<mailto:gcc-patches-help@gcc.gnu.org>",
        "Sender": "gcc-patches-owner@gcc.gnu.org",
        "X-Virus-Found": "No",
        "X-Spam-SWARE-Status": "No, score=-25.5 required=5.0 tests=AWL, BAYES_00,\n\tGIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_MANYTO,\n\tRCVD_IN_DNSWL_LOW, RP_MATCHES_RCVD,\n\tSPF_PASS autolearn=ham version=3.3.2 spammy=HTo:U*ian,\n\tH*Ad:U*ian, 3030",
        "X-HELO": "sasl.smtp.pobox.com",
        "From": "Daniel Santos <daniel.santos@pobox.com>",
        "To": "gcc-patches <gcc-patches@gcc.gnu.org>, Uros Bizjak <ubizjak@gmail.com>,\n\tJan Hubicka <hubicka@ucw.cz>, Ian Lance Taylor <ian@airs.com>,\n\tRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>,\n\tMike Stump <mikestump@comcast.net>",
        "Subject": "[PATCH] [i386,\n\tlibgcc] PR 82196 -mcall-ms2sysv-xlogues emits wrong AVX/SSE MOV",
        "Date": "Wed, 13 Sep 2017 23:03:48 -0500",
        "Message-Id": "<20170914040348.6339-1-daniel.santos@pobox.com>",
        "X-Pobox-Relay-ID": "DE556372-9900-11E7-BAE5-9D2B0D78B957-06139138!pb-smtp2.pobox.com",
        "X-IsSubscribed": "yes"
    },
    "content": "I made a silly mistake in libgcc by testing the cpp macro __AVX__ to\ndetermine rather to use movaps or vmovaps in the stubs.  This resulted\nin the stubs choice of instruction being decided by the machine flags\nwhen the compiler was built rather than those being supplied at the\ncommand line.  This patch splits stubs into separate sse and avx\nversions so that both are available.\n\ngcc:\n\tconfig/i386/i386.c: (xlogue_layout::STUB_NAME_MAX_LEN): Increase to 20\n\tbytes.\n\t(xlogue_layout::s_stub_names): Add an additional size-2 diminsion.\n\t(xlogue_layout::get_stub_name): Modify to select the appropairate sse\n\tand avx version of the stub.\n\ngcc/testsuite:\n\tgcc.target/i386/pr82196-1.c: New test.\n\tgcc.target/i386/pr82196-2.c: Likewise.\n\nlibgcc:\n\tconfig/i386/i386-asm.h (PASTE2): New macro.\n\t(ASMNAME): Modify to use PASTE2.\n\t(MS2SYSV_STUB_PREFIX): New macro for isa prefix.\n\t(MS2SYSV_STUB_BEGIN, MS2SYSV_STUB_END): New macros for stub headers.\n\tconfig/i386/resms64.S: Rename to a header file, use MS2SYSV_STUB_BEGIN\n\tinstead of HIDDEN_FUNC and MS2SYSV_STUB_END instead of FUNC_END.\n\tconfig/i386/resms64f.S: Likewise.\n\tconfig/i386/resms64fx.S: Likewise.\n\tconfig/i386/resms64x.S: Likewise.\n\tconfig/i386/savms64.S: Likewise.\n\tconfig/i386/savms64f.S: Likewise.\n\tconfig/i386/avx_resms64.S: New file that only defines a macro and\n\tincludes it's corresponding header file.\n\tconfig/i386/avx_resms64f.S: Likewise.\n\tconfig/i386/avx_resms64fx.S: Likewise.\n\tconfig/i386/avx_resms64x.S: Likewise.\n\tconfig/i386/avx_savms64.S: Likewise.\n\tconfig/i386/avx_savms64f.S: Likewise.\n\tconfig/i386/sse_resms64.S: Likewise.\n\tconfig/i386/sse_resms64f.S: Likewise.\n\tconfig/i386/sse_resms64fx.S: Likewise.\n\tconfig/i386/sse_resms64x.S: Likewise.\n\tconfig/i386/sse_savms64.S: Likewise.\n\tconfig/i386/sse_savms64f.S: Likewise.\n\tconfig/i386/t-msabi: Modified to add avx and sse versions of stubs.\nSigned-off-by: Daniel Santos <daniel.santos@pobox.com>\n---\n gcc/config/i386/i386.c                          | 15 ++++++-----\n gcc/testsuite/gcc.target/i386/pr82196-1.c       | 14 ++++++++++\n gcc/testsuite/gcc.target/i386/pr82196-2.c       | 14 ++++++++++\n libgcc/config/i386/avx_resms64.S                |  2 ++\n libgcc/config/i386/avx_resms64f.S               |  2 ++\n libgcc/config/i386/avx_resms64fx.S              |  2 ++\n libgcc/config/i386/avx_resms64x.S               |  2 ++\n libgcc/config/i386/avx_savms64.S                |  2 ++\n libgcc/config/i386/avx_savms64f.S               |  2 ++\n libgcc/config/i386/i386-asm.h                   | 34 ++++++++++++++++---------\n libgcc/config/i386/{resms64.S => resms64.h}     | 28 ++++++++++----------\n libgcc/config/i386/{resms64f.S => resms64f.h}   | 24 ++++++++---------\n libgcc/config/i386/{resms64fx.S => resms64fx.h} | 24 ++++++++---------\n libgcc/config/i386/{resms64x.S => resms64x.h}   | 28 ++++++++++----------\n libgcc/config/i386/{savms64.S => savms64.h}     | 28 ++++++++++----------\n libgcc/config/i386/{savms64f.S => savms64f.h}   | 24 ++++++++---------\n libgcc/config/i386/sse_resms64.S                |  2 ++\n libgcc/config/i386/sse_resms64f.S               |  2 ++\n libgcc/config/i386/sse_resms64fx.S              |  2 ++\n libgcc/config/i386/sse_resms64x.S               |  2 ++\n libgcc/config/i386/sse_savms64.S                |  2 ++\n libgcc/config/i386/sse_savms64f.S               |  2 ++\n libgcc/config/i386/t-msabi                      | 18 ++++++++-----\n 23 files changed, 173 insertions(+), 102 deletions(-)\n create mode 100644 gcc/testsuite/gcc.target/i386/pr82196-1.c\n create mode 100644 gcc/testsuite/gcc.target/i386/pr82196-2.c\n create mode 100644 libgcc/config/i386/avx_resms64.S\n create mode 100644 libgcc/config/i386/avx_resms64f.S\n create mode 100644 libgcc/config/i386/avx_resms64fx.S\n create mode 100644 libgcc/config/i386/avx_resms64x.S\n create mode 100644 libgcc/config/i386/avx_savms64.S\n create mode 100644 libgcc/config/i386/avx_savms64f.S\n rename libgcc/config/i386/{resms64.S => resms64.h} (76%)\n rename libgcc/config/i386/{resms64f.S => resms64f.h} (79%)\n rename libgcc/config/i386/{resms64fx.S => resms64fx.h} (79%)\n rename libgcc/config/i386/{resms64x.S => resms64x.h} (77%)\n rename libgcc/config/i386/{savms64.S => savms64.h} (76%)\n rename libgcc/config/i386/{savms64f.S => savms64f.h} (79%)\n create mode 100644 libgcc/config/i386/sse_resms64.S\n create mode 100644 libgcc/config/i386/sse_resms64f.S\n create mode 100644 libgcc/config/i386/sse_resms64fx.S\n create mode 100644 libgcc/config/i386/sse_resms64x.S\n create mode 100644 libgcc/config/i386/sse_savms64.S\n create mode 100644 libgcc/config/i386/sse_savms64f.S",
    "diff": "diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c\nindex b2b02acc58a..f0d7d0eb196 100644\n--- a/gcc/config/i386/i386.c\n+++ b/gcc/config/i386/i386.c\n@@ -2513,7 +2513,7 @@ public:\n   static const unsigned MAX_REGS = 18;\n   static const unsigned MAX_EXTRA_REGS = MAX_REGS - MIN_REGS;\n   static const unsigned VARIANT_COUNT = MAX_EXTRA_REGS + 1;\n-  static const unsigned STUB_NAME_MAX_LEN = 16;\n+  static const unsigned STUB_NAME_MAX_LEN = 20;\n   static const char * const STUB_BASE_NAMES[XLOGUE_STUB_COUNT];\n   static const unsigned REG_ORDER[MAX_REGS];\n   static const unsigned REG_ORDER_REALIGN[MAX_REGS];\n@@ -2536,7 +2536,7 @@ private:\n   struct reginfo m_regs[MAX_REGS];\n \n   /* Lazy-inited cache of symbol names for stubs.  */\n-  static char s_stub_names[XLOGUE_STUB_COUNT][VARIANT_COUNT]\n+  static char s_stub_names[2][XLOGUE_STUB_COUNT][VARIANT_COUNT]\n \t\t\t  [STUB_NAME_MAX_LEN];\n \n   static const xlogue_layout s_instances[XLOGUE_SET_COUNT];\n@@ -2588,7 +2588,7 @@ const unsigned xlogue_layout::VARIANT_COUNT;\n const unsigned xlogue_layout::STUB_NAME_MAX_LEN;\n \n /* Initialize xlogue_layout::s_stub_names to zero.  */\n-char xlogue_layout::s_stub_names[XLOGUE_STUB_COUNT][VARIANT_COUNT]\n+char xlogue_layout::s_stub_names[2][XLOGUE_STUB_COUNT][VARIANT_COUNT]\n \t\t\t\t[STUB_NAME_MAX_LEN];\n \n /* Instantiates all xlogue_layout instances.  */\n@@ -2692,13 +2692,16 @@ const char *\n xlogue_layout::get_stub_name (enum xlogue_stub stub,\n \t\t\t      unsigned n_extra_regs)\n {\n-  char *name = s_stub_names[stub][n_extra_regs];\n+  const int have_avx = TARGET_AVX;\n+  char *name = s_stub_names[!!have_avx][stub][n_extra_regs];\n \n   /* Lazy init */\n   if (!*name)\n     {\n-      int res = snprintf (name, STUB_NAME_MAX_LEN, \"__%s_%u\",\n-\t\t\t  STUB_BASE_NAMES[stub], MIN_REGS + n_extra_regs);\n+      int res = snprintf (name, STUB_NAME_MAX_LEN, \"__%s_%s_%u\",\n+\t\t\t  (have_avx ? \"avx\" : \"sse\"),\n+\t\t\t  STUB_BASE_NAMES[stub],\n+\t\t\t  MIN_REGS + n_extra_regs);\n       gcc_checking_assert (res < (int)STUB_NAME_MAX_LEN);\n     }\n \ndiff --git a/gcc/testsuite/gcc.target/i386/pr82196-1.c b/gcc/testsuite/gcc.target/i386/pr82196-1.c\nnew file mode 100644\nindex 00000000000..fa573dc6b66\n--- /dev/null\n+++ b/gcc/testsuite/gcc.target/i386/pr82196-1.c\n@@ -0,0 +1,14 @@\n+/* { dg-do compile } */\n+/* { dg-options \"-msse -mcall-ms2sysv-xlogues -O2\" } */\n+/* { dg-final { scan-assembler \"call.*__sse_savms64_18\" } } */\n+/* { dg-final { scan-assembler \"jmp.*__sse_resms64x_18\" } } */\n+\n+void __attribute__((sysv_abi)) a() {\n+}\n+\n+static void __attribute__((sysv_abi)) (*volatile a_noinfo)() = a;\n+\n+void __attribute__((ms_abi)) b() {\n+  __asm__ __volatile__ (\"\" :::\"rbx\", \"rbp\", \"r12\", \"r13\", \"r14\", \"r15\");\n+  a_noinfo ();\n+}\ndiff --git a/gcc/testsuite/gcc.target/i386/pr82196-2.c b/gcc/testsuite/gcc.target/i386/pr82196-2.c\nnew file mode 100644\nindex 00000000000..31705bee29b\n--- /dev/null\n+++ b/gcc/testsuite/gcc.target/i386/pr82196-2.c\n@@ -0,0 +1,14 @@\n+/* { dg-do compile } */\n+/* { dg-options \"-mavx -mcall-ms2sysv-xlogues -O2\" } */\n+/* { dg-final { scan-assembler \"call.*__avx_savms64_18\" } } */\n+/* { dg-final { scan-assembler \"jmp.*__avx_resms64x_18\" } } */\n+\n+void __attribute__((sysv_abi)) a() {\n+}\n+\n+static void __attribute__((sysv_abi)) (*volatile a_noinfo)() = a;\n+\n+void __attribute__((ms_abi)) b() {\n+  __asm__ __volatile__ (\"\" :::\"rbx\", \"rbp\", \"r12\", \"r13\", \"r14\", \"r15\");\n+  a_noinfo ();\n+}\ndiff --git a/libgcc/config/i386/avx_resms64.S b/libgcc/config/i386/avx_resms64.S\nnew file mode 100644\nindex 00000000000..2be744937cf\n--- /dev/null\n+++ b/libgcc/config/i386/avx_resms64.S\n@@ -0,0 +1,2 @@\n+#define MS2SYSV_STUB_AVX\n+#include \"resms64.h\"\ndiff --git a/libgcc/config/i386/avx_resms64f.S b/libgcc/config/i386/avx_resms64f.S\nnew file mode 100644\nindex 00000000000..76a1340ab1f\n--- /dev/null\n+++ b/libgcc/config/i386/avx_resms64f.S\n@@ -0,0 +1,2 @@\n+#define MS2SYSV_STUB_AVX\n+#include \"resms64f.h\"\ndiff --git a/libgcc/config/i386/avx_resms64fx.S b/libgcc/config/i386/avx_resms64fx.S\nnew file mode 100644\nindex 00000000000..2ea4738af7e\n--- /dev/null\n+++ b/libgcc/config/i386/avx_resms64fx.S\n@@ -0,0 +1,2 @@\n+#define MS2SYSV_STUB_AVX\n+#include \"resms64fx.h\"\ndiff --git a/libgcc/config/i386/avx_resms64x.S b/libgcc/config/i386/avx_resms64x.S\nnew file mode 100644\nindex 00000000000..14a53d4fcf9\n--- /dev/null\n+++ b/libgcc/config/i386/avx_resms64x.S\n@@ -0,0 +1,2 @@\n+#define MS2SYSV_STUB_AVX\n+#include \"resms64x.h\"\ndiff --git a/libgcc/config/i386/avx_savms64.S b/libgcc/config/i386/avx_savms64.S\nnew file mode 100644\nindex 00000000000..fed1620b968\n--- /dev/null\n+++ b/libgcc/config/i386/avx_savms64.S\n@@ -0,0 +1,2 @@\n+#define MS2SYSV_STUB_AVX\n+#include \"savms64.h\"\ndiff --git a/libgcc/config/i386/avx_savms64f.S b/libgcc/config/i386/avx_savms64f.S\nnew file mode 100644\nindex 00000000000..32279657e30\n--- /dev/null\n+++ b/libgcc/config/i386/avx_savms64f.S\n@@ -0,0 +1,2 @@\n+#define MS2SYSV_STUB_AVX\n+#include \"savms64f.h\"\ndiff --git a/libgcc/config/i386/i386-asm.h b/libgcc/config/i386/i386-asm.h\nindex 1387fd24b4f..424e0f72aac 100644\n--- a/libgcc/config/i386/i386-asm.h\n+++ b/libgcc/config/i386/i386-asm.h\n@@ -28,6 +28,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see\n \n #include \"auto-host.h\"\n \n+#define PASTE2(a, b) PASTE2a(a, b)\n+#define PASTE2a(a, b) a ## b\n+\n /* These macros currently support GNU/Linux, Solaris and Darwin.  */\n \n #ifdef __ELF__\n@@ -46,9 +49,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see\n #endif\n \n #ifdef __USER_LABEL_PREFIX__\n-# define ASMNAME2(prefix, name)\tprefix ## name\n-# define ASMNAME1(prefix, name)\tASMNAME2(prefix, name)\n-# define ASMNAME(name)\t\tASMNAME1(__USER_LABEL_PREFIX__, name)\n+# define ASMNAME(name)\t\tPASTE2(__USER_LABEL_PREFIX__, name)\n #else\n # define ASMNAME(name)\t\tname\n #endif\n@@ -66,15 +67,24 @@ ASMNAME(fn):\n \n #define FUNC_END(fn) FN_SIZE(ASMNAME(fn))\n \n-#ifdef __SSE2__\n-# ifdef __AVX__\n-#  define MOVAPS vmovaps\n-# else\n-#  define MOVAPS movaps\n-# endif\n+#ifdef MS2SYSV_STUB_AVX\n+# define MS2SYSV_STUB_PREFIX __avx_\n+# define MOVAPS vmovaps\n+#elif defined(MS2SYSV_STUB_SSE)\n+# define MS2SYSV_STUB_PREFIX __sse_\n+# define MOVAPS movaps\n+#endif\n+\n+#if defined (MS2SYSV_STUB_PREFIX) && defined (MOVAPS)\n+\n+# define MS2SYSV_STUB_BEGIN(base_name) \\\n+\tHIDDEN_FUNC(PASTE2(MS2SYSV_STUB_PREFIX, base_name))\n+\n+# define MS2SYSV_STUB_END(base_name) \\\n+\tFUNC_END(PASTE2(MS2SYSV_STUB_PREFIX, base_name))\n \n /* Save SSE registers 6-15. off is the offset of rax to get to xmm6.  */\n-#define SSE_SAVE\t\t   \\\n+# define SSE_SAVE\t\t   \\\n \tMOVAPS %xmm15,-0x30(%rax); \\\n \tMOVAPS %xmm14,-0x20(%rax); \\\n \tMOVAPS %xmm13,-0x10(%rax); \\\n@@ -87,7 +97,7 @@ ASMNAME(fn):\n \tMOVAPS %xmm6,  0x60(%rax)\n \n /* Restore SSE registers 6-15. off is the offset of rsi to get to xmm6.  */\n-#define SSE_RESTORE\t\t    \\\n+# define SSE_RESTORE\t\t    \\\n \tMOVAPS -0x30(%rsi), %xmm15; \\\n \tMOVAPS -0x20(%rsi), %xmm14; \\\n \tMOVAPS -0x10(%rsi), %xmm13; \\\n@@ -99,5 +109,5 @@ ASMNAME(fn):\n \tMOVAPS  0x50(%rsi), %xmm7 ; \\\n \tMOVAPS  0x60(%rsi), %xmm6\n \n-#endif /* __SSE2__ */\n+#endif /* defined (MS2SYSV_STUB_ISA) && defined (MOVAPS) */\n #endif /* I386_ASM_H */\ndiff --git a/libgcc/config/i386/resms64.S b/libgcc/config/i386/resms64.h\nsimilarity index 76%\nrename from libgcc/config/i386/resms64.S\nrename to libgcc/config/i386/resms64.h\nindex f842c20a77a..f01b41897bc 100644\n--- a/libgcc/config/i386/resms64.S\n+++ b/libgcc/config/i386/resms64.h\n@@ -29,29 +29,29 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see\n /* Epilogue routine for restoring 64-bit ms/sysv registers.  */\n \n \t.text\n-HIDDEN_FUNC(__resms64_18)\n+MS2SYSV_STUB_BEGIN(resms64_18)\n \tmov\t-0x70(%rsi),%r15\n-HIDDEN_FUNC(__resms64_17)\n+MS2SYSV_STUB_BEGIN(resms64_17)\n \tmov\t-0x68(%rsi),%r14\n-HIDDEN_FUNC(__resms64_16)\n+MS2SYSV_STUB_BEGIN(resms64_16)\n \tmov\t-0x60(%rsi),%r13\n-HIDDEN_FUNC(__resms64_15)\n+MS2SYSV_STUB_BEGIN(resms64_15)\n \tmov\t-0x58(%rsi),%r12\n-HIDDEN_FUNC(__resms64_14)\n+MS2SYSV_STUB_BEGIN(resms64_14)\n \tmov\t-0x50(%rsi),%rbp\n-HIDDEN_FUNC(__resms64_13)\n+MS2SYSV_STUB_BEGIN(resms64_13)\n \tmov\t-0x48(%rsi),%rbx\n-HIDDEN_FUNC(__resms64_12)\n+MS2SYSV_STUB_BEGIN(resms64_12)\n \tmov\t-0x40(%rsi),%rdi\n \tSSE_RESTORE\n \tmov\t-0x38(%rsi),%rsi\n \tret\n-FUNC_END(__resms64_12)\n-FUNC_END(__resms64_13)\n-FUNC_END(__resms64_14)\n-FUNC_END(__resms64_15)\n-FUNC_END(__resms64_16)\n-FUNC_END(__resms64_17)\n-FUNC_END(__resms64_18)\n+MS2SYSV_STUB_END(resms64_12)\n+MS2SYSV_STUB_END(resms64_13)\n+MS2SYSV_STUB_END(resms64_14)\n+MS2SYSV_STUB_END(resms64_15)\n+MS2SYSV_STUB_END(resms64_16)\n+MS2SYSV_STUB_END(resms64_17)\n+MS2SYSV_STUB_END(resms64_18)\n \n #endif /* __x86_64__ */\ndiff --git a/libgcc/config/i386/resms64f.S b/libgcc/config/i386/resms64f.h\nsimilarity index 79%\nrename from libgcc/config/i386/resms64f.S\nrename to libgcc/config/i386/resms64f.h\nindex 81946cda944..743ec514cef 100644\n--- a/libgcc/config/i386/resms64f.S\n+++ b/libgcc/config/i386/resms64f.h\n@@ -30,26 +30,26 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see\n    pointer is used.  */\n \n \t.text\n-HIDDEN_FUNC(__resms64f_17)\n+MS2SYSV_STUB_BEGIN(resms64f_17)\n \tmov\t-0x68(%rsi),%r15\n-HIDDEN_FUNC(__resms64f_16)\n+MS2SYSV_STUB_BEGIN(resms64f_16)\n \tmov\t-0x60(%rsi),%r14\n-HIDDEN_FUNC(__resms64f_15)\n+MS2SYSV_STUB_BEGIN(resms64f_15)\n \tmov\t-0x58(%rsi),%r13\n-HIDDEN_FUNC(__resms64f_14)\n+MS2SYSV_STUB_BEGIN(resms64f_14)\n \tmov\t-0x50(%rsi),%r12\n-HIDDEN_FUNC(__resms64f_13)\n+MS2SYSV_STUB_BEGIN(resms64f_13)\n \tmov\t-0x48(%rsi),%rbx\n-HIDDEN_FUNC(__resms64f_12)\n+MS2SYSV_STUB_BEGIN(resms64f_12)\n \tmov\t-0x40(%rsi),%rdi\n \tSSE_RESTORE\n \tmov\t-0x38(%rsi),%rsi\n \tret\n-FUNC_END(__resms64f_12)\n-FUNC_END(__resms64f_13)\n-FUNC_END(__resms64f_14)\n-FUNC_END(__resms64f_15)\n-FUNC_END(__resms64f_16)\n-FUNC_END(__resms64f_17)\n+MS2SYSV_STUB_END(resms64f_12)\n+MS2SYSV_STUB_END(resms64f_13)\n+MS2SYSV_STUB_END(resms64f_14)\n+MS2SYSV_STUB_END(resms64f_15)\n+MS2SYSV_STUB_END(resms64f_16)\n+MS2SYSV_STUB_END(resms64f_17)\n \n #endif /* __x86_64__ */\ndiff --git a/libgcc/config/i386/resms64fx.S b/libgcc/config/i386/resms64fx.h\nsimilarity index 79%\nrename from libgcc/config/i386/resms64fx.S\nrename to libgcc/config/i386/resms64fx.h\nindex acf34fa0837..965807a1299 100644\n--- a/libgcc/config/i386/resms64fx.S\n+++ b/libgcc/config/i386/resms64fx.h\n@@ -31,27 +31,27 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see\n  * from the function.  */\n \n \t.text\n-HIDDEN_FUNC(__resms64fx_17)\n+MS2SYSV_STUB_BEGIN(resms64fx_17)\n \tmov\t-0x68(%rsi),%r15\n-HIDDEN_FUNC(__resms64fx_16)\n+MS2SYSV_STUB_BEGIN(resms64fx_16)\n \tmov\t-0x60(%rsi),%r14\n-HIDDEN_FUNC(__resms64fx_15)\n+MS2SYSV_STUB_BEGIN(resms64fx_15)\n \tmov\t-0x58(%rsi),%r13\n-HIDDEN_FUNC(__resms64fx_14)\n+MS2SYSV_STUB_BEGIN(resms64fx_14)\n \tmov\t-0x50(%rsi),%r12\n-HIDDEN_FUNC(__resms64fx_13)\n+MS2SYSV_STUB_BEGIN(resms64fx_13)\n \tmov\t-0x48(%rsi),%rbx\n-HIDDEN_FUNC(__resms64fx_12)\n+MS2SYSV_STUB_BEGIN(resms64fx_12)\n \tmov\t-0x40(%rsi),%rdi\n \tSSE_RESTORE\n \tmov\t-0x38(%rsi),%rsi\n \tleaveq\n \tret\n-FUNC_END(__resms64fx_12)\n-FUNC_END(__resms64fx_13)\n-FUNC_END(__resms64fx_14)\n-FUNC_END(__resms64fx_15)\n-FUNC_END(__resms64fx_16)\n-FUNC_END(__resms64fx_17)\n+MS2SYSV_STUB_END(resms64fx_12)\n+MS2SYSV_STUB_END(resms64fx_13)\n+MS2SYSV_STUB_END(resms64fx_14)\n+MS2SYSV_STUB_END(resms64fx_15)\n+MS2SYSV_STUB_END(resms64fx_16)\n+MS2SYSV_STUB_END(resms64fx_17)\n \n #endif /* __x86_64__ */\ndiff --git a/libgcc/config/i386/resms64x.S b/libgcc/config/i386/resms64x.h\nsimilarity index 77%\nrename from libgcc/config/i386/resms64x.S\nrename to libgcc/config/i386/resms64x.h\nindex e27aab7d881..689a1dec20b 100644\n--- a/libgcc/config/i386/resms64x.S\n+++ b/libgcc/config/i386/resms64x.h\n@@ -30,30 +30,30 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see\n  * function.  */\n \n \t.text\n-HIDDEN_FUNC(__resms64x_18)\n+MS2SYSV_STUB_BEGIN(resms64x_18)\n \tmov\t-0x70(%rsi),%r15\n-HIDDEN_FUNC(__resms64x_17)\n+MS2SYSV_STUB_BEGIN(resms64x_17)\n \tmov\t-0x68(%rsi),%r14\n-HIDDEN_FUNC(__resms64x_16)\n+MS2SYSV_STUB_BEGIN(resms64x_16)\n \tmov\t-0x60(%rsi),%r13\n-HIDDEN_FUNC(__resms64x_15)\n+MS2SYSV_STUB_BEGIN(resms64x_15)\n \tmov\t-0x58(%rsi),%r12\n-HIDDEN_FUNC(__resms64x_14)\n+MS2SYSV_STUB_BEGIN(resms64x_14)\n \tmov\t-0x50(%rsi),%rbp\n-HIDDEN_FUNC(__resms64x_13)\n+MS2SYSV_STUB_BEGIN(resms64x_13)\n \tmov\t-0x48(%rsi),%rbx\n-HIDDEN_FUNC(__resms64x_12)\n+MS2SYSV_STUB_BEGIN(resms64x_12)\n \tmov\t-0x40(%rsi),%rdi\n \tSSE_RESTORE\n \tmov\t-0x38(%rsi),%rsi\n \tmov\t%r10,%rsp\n \tret\n-FUNC_END(__resms64x_12)\n-FUNC_END(__resms64x_13)\n-FUNC_END(__resms64x_14)\n-FUNC_END(__resms64x_15)\n-FUNC_END(__resms64x_16)\n-FUNC_END(__resms64x_17)\n-FUNC_END(__resms64x_18)\n+MS2SYSV_STUB_END(resms64x_12)\n+MS2SYSV_STUB_END(resms64x_13)\n+MS2SYSV_STUB_END(resms64x_14)\n+MS2SYSV_STUB_END(resms64x_15)\n+MS2SYSV_STUB_END(resms64x_16)\n+MS2SYSV_STUB_END(resms64x_17)\n+MS2SYSV_STUB_END(resms64x_18)\n \n #endif /* __x86_64__ */\ndiff --git a/libgcc/config/i386/savms64.S b/libgcc/config/i386/savms64.h\nsimilarity index 76%\nrename from libgcc/config/i386/savms64.S\nrename to libgcc/config/i386/savms64.h\nindex 44dda46ec54..28d5e3548ab 100644\n--- a/libgcc/config/i386/savms64.S\n+++ b/libgcc/config/i386/savms64.h\n@@ -29,29 +29,29 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see\n /* Prologue routine for saving 64-bit ms/sysv registers.  */\n \n \t.text\n-HIDDEN_FUNC(__savms64_18)\n+MS2SYSV_STUB_BEGIN(savms64_18)\n \tmov\t%r15,-0x70(%rax)\n-HIDDEN_FUNC(__savms64_17)\n+MS2SYSV_STUB_BEGIN(savms64_17)\n \tmov\t%r14,-0x68(%rax)\n-HIDDEN_FUNC(__savms64_16)\n+MS2SYSV_STUB_BEGIN(savms64_16)\n \tmov\t%r13,-0x60(%rax)\n-HIDDEN_FUNC(__savms64_15)\n+MS2SYSV_STUB_BEGIN(savms64_15)\n \tmov\t%r12,-0x58(%rax)\n-HIDDEN_FUNC(__savms64_14)\n+MS2SYSV_STUB_BEGIN(savms64_14)\n \tmov\t%rbp,-0x50(%rax)\n-HIDDEN_FUNC(__savms64_13)\n+MS2SYSV_STUB_BEGIN(savms64_13)\n \tmov\t%rbx,-0x48(%rax)\n-HIDDEN_FUNC(__savms64_12)\n+MS2SYSV_STUB_BEGIN(savms64_12)\n \tmov\t%rdi,-0x40(%rax)\n \tmov\t%rsi,-0x38(%rax)\n \tSSE_SAVE\n \tret\n-FUNC_END(__savms64_12)\n-FUNC_END(__savms64_13)\n-FUNC_END(__savms64_14)\n-FUNC_END(__savms64_15)\n-FUNC_END(__savms64_16)\n-FUNC_END(__savms64_17)\n-FUNC_END(__savms64_18)\n+MS2SYSV_STUB_END(savms64_12)\n+MS2SYSV_STUB_END(savms64_13)\n+MS2SYSV_STUB_END(savms64_14)\n+MS2SYSV_STUB_END(savms64_15)\n+MS2SYSV_STUB_END(savms64_16)\n+MS2SYSV_STUB_END(savms64_17)\n+MS2SYSV_STUB_END(savms64_18)\n \n #endif /* __x86_64__ */\ndiff --git a/libgcc/config/i386/savms64f.S b/libgcc/config/i386/savms64f.h\nsimilarity index 79%\nrename from libgcc/config/i386/savms64f.S\nrename to libgcc/config/i386/savms64f.h\nindex 64e91ac0394..723e1080f5c 100644\n--- a/libgcc/config/i386/savms64f.S\n+++ b/libgcc/config/i386/savms64f.h\n@@ -30,26 +30,26 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see\n  * needed or hard frame pointer used.  */\n \n \t.text\n-HIDDEN_FUNC(__savms64f_17)\n+MS2SYSV_STUB_BEGIN(savms64f_17)\n \tmov\t%r15,-0x68(%rax)\n-HIDDEN_FUNC(__savms64f_16)\n+MS2SYSV_STUB_BEGIN(savms64f_16)\n \tmov\t%r14,-0x60(%rax)\n-HIDDEN_FUNC(__savms64f_15)\n+MS2SYSV_STUB_BEGIN(savms64f_15)\n \tmov\t%r13,-0x58(%rax)\n-HIDDEN_FUNC(__savms64f_14)\n+MS2SYSV_STUB_BEGIN(savms64f_14)\n \tmov\t%r12,-0x50(%rax)\n-HIDDEN_FUNC(__savms64f_13)\n+MS2SYSV_STUB_BEGIN(savms64f_13)\n \tmov\t%rbx,-0x48(%rax)\n-HIDDEN_FUNC(__savms64f_12)\n+MS2SYSV_STUB_BEGIN(savms64f_12)\n \tmov\t%rdi,-0x40(%rax)\n \tmov\t%rsi,-0x38(%rax)\n \tSSE_SAVE\n \tret\n-FUNC_END(__savms64f_12)\n-FUNC_END(__savms64f_13)\n-FUNC_END(__savms64f_14)\n-FUNC_END(__savms64f_15)\n-FUNC_END(__savms64f_16)\n-FUNC_END(__savms64f_17)\n+MS2SYSV_STUB_END(savms64f_12)\n+MS2SYSV_STUB_END(savms64f_13)\n+MS2SYSV_STUB_END(savms64f_14)\n+MS2SYSV_STUB_END(savms64f_15)\n+MS2SYSV_STUB_END(savms64f_16)\n+MS2SYSV_STUB_END(savms64f_17)\n \n #endif /* __x86_64__ */\ndiff --git a/libgcc/config/i386/sse_resms64.S b/libgcc/config/i386/sse_resms64.S\nnew file mode 100644\nindex 00000000000..c87f5cc021d\n--- /dev/null\n+++ b/libgcc/config/i386/sse_resms64.S\n@@ -0,0 +1,2 @@\n+#define MS2SYSV_STUB_SSE\n+#include \"resms64.h\"\ndiff --git a/libgcc/config/i386/sse_resms64f.S b/libgcc/config/i386/sse_resms64f.S\nnew file mode 100644\nindex 00000000000..3a066bc174a\n--- /dev/null\n+++ b/libgcc/config/i386/sse_resms64f.S\n@@ -0,0 +1,2 @@\n+#define MS2SYSV_STUB_SSE\n+#include \"resms64f.h\"\ndiff --git a/libgcc/config/i386/sse_resms64fx.S b/libgcc/config/i386/sse_resms64fx.S\nnew file mode 100644\nindex 00000000000..142667a28bf\n--- /dev/null\n+++ b/libgcc/config/i386/sse_resms64fx.S\n@@ -0,0 +1,2 @@\n+#define MS2SYSV_STUB_SSE\n+#include \"resms64fx.h\"\ndiff --git a/libgcc/config/i386/sse_resms64x.S b/libgcc/config/i386/sse_resms64x.S\nnew file mode 100644\nindex 00000000000..2cfc2b0195f\n--- /dev/null\n+++ b/libgcc/config/i386/sse_resms64x.S\n@@ -0,0 +1,2 @@\n+#define MS2SYSV_STUB_SSE\n+#include \"resms64x.h\"\ndiff --git a/libgcc/config/i386/sse_savms64.S b/libgcc/config/i386/sse_savms64.S\nnew file mode 100644\nindex 00000000000..52f43075b40\n--- /dev/null\n+++ b/libgcc/config/i386/sse_savms64.S\n@@ -0,0 +1,2 @@\n+#define MS2SYSV_STUB_SSE\n+#include \"savms64.h\"\ndiff --git a/libgcc/config/i386/sse_savms64f.S b/libgcc/config/i386/sse_savms64f.S\nnew file mode 100644\nindex 00000000000..426be35b53b\n--- /dev/null\n+++ b/libgcc/config/i386/sse_savms64f.S\n@@ -0,0 +1,2 @@\n+#define MS2SYSV_STUB_SSE\n+#include \"savms64f.h\"\ndiff --git a/libgcc/config/i386/t-msabi b/libgcc/config/i386/t-msabi\nindex f9806a611aa..ffc9c4f6656 100644\n--- a/libgcc/config/i386/t-msabi\n+++ b/libgcc/config/i386/t-msabi\n@@ -1,7 +1,13 @@\n # Makefile fragment to support -mcall-ms2sysv-xlogues\n-LIB2ADD_ST += $(srcdir)/config/i386/savms64.S \\\n-\t      $(srcdir)/config/i386/resms64.S \\\n-\t      $(srcdir)/config/i386/resms64x.S \\\n-\t      $(srcdir)/config/i386/savms64f.S \\\n-\t      $(srcdir)/config/i386/resms64f.S \\\n-\t      $(srcdir)/config/i386/resms64fx.S\n+LIB2ADD_ST += $(srcdir)/config/i386/avx_savms64.S \\\n+\t      $(srcdir)/config/i386/avx_resms64.S \\\n+\t      $(srcdir)/config/i386/avx_resms64x.S \\\n+\t      $(srcdir)/config/i386/avx_savms64f.S \\\n+\t      $(srcdir)/config/i386/avx_resms64f.S \\\n+\t      $(srcdir)/config/i386/avx_resms64fx.S \\\n+\t      $(srcdir)/config/i386/sse_savms64.S \\\n+\t      $(srcdir)/config/i386/sse_resms64.S \\\n+\t      $(srcdir)/config/i386/sse_resms64x.S \\\n+\t      $(srcdir)/config/i386/sse_savms64f.S \\\n+\t      $(srcdir)/config/i386/sse_resms64f.S \\\n+\t      $(srcdir)/config/i386/sse_resms64fx.S\n",
    "prefixes": [
        "i386",
        "libgcc"
    ]
}