Engelen Open Source


orphans
{
  "bomFormat": "CycloneDX",
  "specVersion": "1.5",
  "version": 1,
  "serialNumber": "urn:uuid:192869b4-53b5-0de3-606b-dbfe1a176699",
  "metadata": {
    "tools": {
      "components": [
        {
          "type": "application",
          "name": "bombon",
          "version": "0.4.0",
          "description": "Nix CycloneDX Software Bills of Materials (SBOMs)",
          "licenses": [
            {
              "license": {
                "id": "MIT"
              }
            }
          ],
          "externalReferences": [
            {
              "type": "website",
              "url": "https://github.com/nikstur/bombon"
            }
          ]
        }
      ]
    },
    "component": {
      "type": "application",
      "bom-ref": "nj0vh5qc9z2fj7ll90b7a1x0jxjlg9rf-nethogs-0.8.8",
      "name": "nethogs",
      "version": "0.8.8",
      "description": "Small 'net top' tool, grouping bandwidth by process",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-2.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/nethogs@0.8.8",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/raboof/nethogs/archive/v0.8.8.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "fb254cc864812015988c0f636865afadcb0d3db27a4b86b1f47d418561d85145"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/raboof/nethogs#readme"
        }
      ]
    }
  },
  "components": [
    {
      "type": "application",
      "bom-ref": "2a3izq4hffdd9r9gb2w6q2ibdc86kss6-xgcc-14.3.0-libgcc",
      "name": "xgcc",
      "version": "14.3.0",
      "description": "GNU Compiler Collection, version 14.3.0",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/xgcc@14.3.0",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/gcc/cppdefault.cc\t2013-01-10 21:38:27.000000000 +0100\n+++ b/gcc/cppdefault.cc\t2014-08-18 16:20:32.893944536 +0200\n@@ -35,6 +35,8 @@\n # undef CROSS_INCLUDE_DIR\n #endif\n \n+#undef LOCAL_INCLUDE_DIR\n+\n const struct default_include cpp_include_defaults[]\n #ifdef INCLUDE_DEFAULTS\n = INCLUDE_DEFAULTS;\n--- a/gcc/gcc.cc\t2014-03-23 12:30:57.000000000 +0100\n+++ b/gcc/gcc.cc\t2014-08-18 13:19:32.689201690 +0200\n@@ -1162,10 +1162,10 @@\n /* Default prefixes to attach to command names.  */\n \n #ifndef STANDARD_STARTFILE_PREFIX_1\n-#define STANDARD_STARTFILE_PREFIX_1 \"/lib/\"\n+#define STANDARD_STARTFILE_PREFIX_1 \"\"\n #endif\n #ifndef STANDARD_STARTFILE_PREFIX_2\n-#define STANDARD_STARTFILE_PREFIX_2 \"/usr/lib/\"\n+#define STANDARD_STARTFILE_PREFIX_2 \"\"\n #endif\n \n #ifdef CROSS_DIRECTORY_STRUCTURE  /* Don't use these prefixes for a cross compiler.  */\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/gcc/config/riscv/linux.h\n+++ b/gcc/config/riscv/linux.h\n@@ -69,9 +69,5 @@\n \n #define TARGET_ASM_FILE_END file_end_indicate_exec_stack\n \n-#define STARTFILE_PREFIX_SPEC \t\t\t\\\n-   \"/lib\" XLEN_SPEC \"/\" ABI_SPEC \"/ \"\t\t\\\n-   \"/usr/lib\" XLEN_SPEC \"/\" ABI_SPEC \"/ \"\t\\\n-   \"/lib/ \"\t\t\t\t\t\\\n-   \"/usr/lib/ \"\n+#define STARTFILE_PREFIX_SPEC \"\"\n \n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From e160a8cd4a704f4b7724df02b62394f677cc4198 Mon Sep 17 00:00:00 2001\nFrom: Sergei Trofimovich <siarheit@google.com>\nDate: Fri, 22 Sep 2023 22:41:49 +0100\nSubject: [PATCH] gcc/file-prefix-map.cc: always mangle __FILE__ into invalid\n store path\n\nWithout the change `__FILE__` used in static inline functions in headers\nembed paths to header files into executable images. For local headers\nit's not a problem, but for headers in `/nix/store` this causes `-dev`\ninputs to be retained in runtime closure.\n\nTypical examples are `nix` -> `nlohmann_json` and `pipewire` ->\n`lttng-ust.dev`.\n\nFor this reason we want to remove the occurrences of hashes in the\nexpansion of `__FILE__`. `nuke-references` does it by replacing hashes\nby `eeeeee...`. It is handy to be able to invert the transformation to\ngo back to the original store path. The chosen solution is to make the\nhash uppercase:\n- it does not trigger runtime references (except for all digit hashes,\n  which are unlikely enough)\n- it visually looks like a bogus store path\n- it is easy to find the original store path if required\n\nIdeally we would like to use `-fmacro-prefix-map=` feature of `gcc` as:\n\n  -fmacro-prefix-map=/nix/store/$hash1-nlohmann-json-ver=/nix/store/$HASH1-nlohmann-json-ver\n  -fmacro-prefix-map=/nix/...\n\nIn practice it quickly exhausts argument length limit due to `gcc`\ndeficiency: https://gcc.gnu.org/PR111527\n\nUntil it's fixed let's hardcode header mangling if $NIX_STORE variable\nis present in the environment.\n\nTested as:\n\n    $ printf \"# 0 \\\"/nix/store/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-pppppp-vvvvvvv\\\" \\nconst char * f(void) { return __FILE__; }\" | NIX_STORE=/nix/store ./gcc/xgcc -Bgcc -x c - -S -o -\n    ...\n    .string \"/nix/store/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-pppppp-vvvvvvv\"\n    ...\n\nMangled successfully.\n\nTo reverse the effect of the mangle use new `NIX_GCC_DONT_MANGLE_PREFIX_MAP`\nenvironment variable. It should not normally be needed.\n--- a/gcc/file-prefix-map.cc\n+++ b/gcc/file-prefix-map.cc\n@@ -74,7 +74,7 @@ add_prefix_map (file_prefix_map *&maps, const char *arg, const char *opt)\n    remapping was performed.  */\n \n static const char *\n-remap_filename (file_prefix_map *maps, const char *filename)\n+remap_filename (file_prefix_map *maps, const char *filename, bool mangle_nix_store = false)\n {\n   file_prefix_map *map;\n   char *s;\n@@ -102,6 +102,30 @@ remap_filename (file_prefix_map *maps, const char *filename)\n       break;\n   if (!map)\n     {\n+      if (mangle_nix_store && getenv(\"NIX_GCC_DONT_MANGLE_PREFIX_MAP\") == NULL)\n+\t{\n+\t  /* Remap all fo $NIX_STORE/.{32} paths to uppercase\n+\t   *\n+\t   * That way we avoid argument parameters explosion\n+\t   * and still avoid embedding headers into runtime closure:\n+\t   *   https://gcc.gnu.org/PR111527\n+\t   */\n+\t   char * nix_store = getenv(\"NIX_STORE\");\n+\t   size_t nix_store_len = nix_store ? strlen(nix_store) : 0;\n+\t   const char * name = realname ? realname : filename;\n+\t   size_t name_len = strlen(name);\n+\t   if (nix_store && name_len >= nix_store_len + 1 + 32 && memcmp(name, nix_store, nix_store_len) == 0)\n+\t     {\n+\t\ts = (char *) ggc_alloc_atomic (name_len + 1);\n+\t\tmemcpy(s, name, name_len + 1);\n+\t\tfor (size_t i = nix_store_len + 1; i < nix_store_len + 1 + 32; i++) {\n+\t\t  s[i] = TOUPPER(s[i]);\n+\t\t}\n+\t\tif (realname != filename)\n+\t\t  free (const_cast <char *> (realname));\n+\t\treturn s;\n+\t     }\n+\t}\n       if (realname != filename)\n \tfree (const_cast <char *> (realname));\n       return filename;\n@@ -163,7 +187,7 @@ add_profile_prefix_map (const char *arg)\n const char *\n remap_macro_filename (const char *filename)\n {\n-  return remap_filename (macro_prefix_maps, filename);\n+  return remap_filename (macro_prefix_maps, filename, true);\n }\n \n /* Remap using -fdebug-prefix-map.  Return the GC-allocated new name\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h\nindex cbee89140dd..e1f26b0a096 100644\n--- a/gcc/config/rs6000/sysv4.h\n+++ b/gcc/config/rs6000/sysv4.h\n@@ -996,13 +996,7 @@ ncrtn.o%s\"\n     { GPLUSPLUS_BACKWARD_INCLUDE_DIR, \"G++\", 1, 1,\t\\\n       GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 0 },\n \n-#ifdef LOCAL_INCLUDE_DIR\n-#define INCLUDE_DEFAULTS_MUSL_LOCAL\t\t\t\\\n-    { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 2 },\t\t\\\n-    { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 0 },\n-#else\n #define INCLUDE_DEFAULTS_MUSL_LOCAL\n-#endif\n \n #ifdef PREFIX_INCLUDE_DIR\n #define INCLUDE_DEFAULTS_MUSL_PREFIX\t\t\t\\\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "this patch fixes build for clang-18+\n\ndiff --git a/libgcc/config/aarch64/lse.S b/libgcc/config/aarch64/lse.S\nindex ecef47086..b478dd4d9 100644\n--- a/libgcc/config/aarch64/lse.S\n+++ b/libgcc/config/aarch64/lse.S\n@@ -174,8 +174,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see\n \t.globl\t\\name\n \tHIDDEN(\\name)\n \tSYMBOL_TYPE(\\name, %function)\n-\t.cfi_startproc\n \\name:\n+\t.cfi_startproc\n .endm\n \n .macro\tENDFN name\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://mirror.koddos.net/gcc/releases/gcc-14.3.0/gcc-14.3.0.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "e0dc77297625631ac8e50fa92fffefe899a4eb702592da5c32ef04e2293aca3a"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://gcc.gnu.org/"
        }
      ],
      "evidence": {
        "identity": {
          "field": "cpe",
          "methods": [
            {
              "technique": "manifest-analysis",
              "confidence": 0.5,
              "value": "cpe:2.3:a:gnu:xgcc:14.3.0:*:*:*:*:*:*:*"
            },
            {
              "technique": "manifest-analysis",
              "confidence": 0.5,
              "value": "cpe:2.3:a:gnu:xgcc:14.3:0:*:*:*:*:*:*"
            }
          ]
        }
      }
    },
    {
      "type": "application",
      "bom-ref": "3rkccxj7vi0p2a0d48c4a4z2vv2cni88-libunistring-1.4.1",
      "name": "libunistring",
      "version": "1.4.1",
      "description": "Unicode string library",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "LGPL-3.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/libunistring@1.4.1",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://ftpmirror.gnu.org/libunistring/libunistring-1.4.1.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "12542ad7619470efd95a623174dcd4b364f2483caf708c6bee837cb53a54cb9d"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/libunistring/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "5rs376cqh36kx91mafhcx80jw4xfxdf3-libpcap-1.10.5-lib",
      "name": "libpcap",
      "version": "1.10.5",
      "description": "Packet Capture Library",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/libpcap@1.10.5",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://www.tcpdump.org/release/libpcap-1.10.5.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "37ced90a19a302a7f32e458224a00c365c117905c2cd35ac544b6880a81488f0"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.tcpdump.org"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "dpb7blsmabn5sx142nnw2yl1wwwmncjj-libnl-3.11.0",
      "name": "libnl",
      "version": "3.11.0",
      "description": "Linux Netlink interface library suite",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "LGPL-2.1"
          }
        }
      ],
      "purl": "pkg:nix/libnl@3.11.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/thom311/libnl/archive/libnl3_11_0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "1ae615d9b50e84b79d07fa3d473e8fcbf1b91c12b688d79fc2b9646495e06e72"
            }
          ]
        },
        {
          "type": "website",
          "url": "http://www.infradead.org/~tgr/libnl/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "hxcmad417fd8ql9ylx96xpak7da06yiv-libidn2-2.3.8",
      "name": "libidn2",
      "version": "2.3.8",
      "description": "Free software implementation of IDNA2008 and TR46",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "LGPL-3.0-or-later"
          }
        },
        {
          "license": {
            "id": "GPL-2.0-or-later"
          }
        },
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/libidn2@2.3.8",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://ftp.gnu.org/gnu/libidn/libidn2-2.3.8.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "f557911bf6171621e1f72ff35f5b1825bb35b52ed45325dcdee931e5d3c0787a"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/libidn/#libidn2"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "nj0vh5qc9z2fj7ll90b7a1x0jxjlg9rf-nethogs-0.8.8",
      "name": "nethogs",
      "version": "0.8.8",
      "description": "Small 'net top' tool, grouping bandwidth by process",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-2.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/nethogs@0.8.8",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/raboof/nethogs/archive/v0.8.8.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "fb254cc864812015988c0f636865afadcb0d3db27a4b86b1f47d418561d85145"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/raboof/nethogs#readme"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "shs2lyjm5yv7fmg4pwyvrlv9zr4macmv-gcc-14.3.0-libgcc",
      "name": "gcc",
      "version": "14.3.0",
      "description": "GNU Compiler Collection, version 14.3.0",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/gcc@14.3.0",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/gcc/cppdefault.cc\t2013-01-10 21:38:27.000000000 +0100\n+++ b/gcc/cppdefault.cc\t2014-08-18 16:20:32.893944536 +0200\n@@ -35,6 +35,8 @@\n # undef CROSS_INCLUDE_DIR\n #endif\n \n+#undef LOCAL_INCLUDE_DIR\n+\n const struct default_include cpp_include_defaults[]\n #ifdef INCLUDE_DEFAULTS\n = INCLUDE_DEFAULTS;\n--- a/gcc/gcc.cc\t2014-03-23 12:30:57.000000000 +0100\n+++ b/gcc/gcc.cc\t2014-08-18 13:19:32.689201690 +0200\n@@ -1162,10 +1162,10 @@\n /* Default prefixes to attach to command names.  */\n \n #ifndef STANDARD_STARTFILE_PREFIX_1\n-#define STANDARD_STARTFILE_PREFIX_1 \"/lib/\"\n+#define STANDARD_STARTFILE_PREFIX_1 \"\"\n #endif\n #ifndef STANDARD_STARTFILE_PREFIX_2\n-#define STANDARD_STARTFILE_PREFIX_2 \"/usr/lib/\"\n+#define STANDARD_STARTFILE_PREFIX_2 \"\"\n #endif\n \n #ifdef CROSS_DIRECTORY_STRUCTURE  /* Don't use these prefixes for a cross compiler.  */\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/gcc/config/riscv/linux.h\n+++ b/gcc/config/riscv/linux.h\n@@ -69,9 +69,5 @@\n \n #define TARGET_ASM_FILE_END file_end_indicate_exec_stack\n \n-#define STARTFILE_PREFIX_SPEC \t\t\t\\\n-   \"/lib\" XLEN_SPEC \"/\" ABI_SPEC \"/ \"\t\t\\\n-   \"/usr/lib\" XLEN_SPEC \"/\" ABI_SPEC \"/ \"\t\\\n-   \"/lib/ \"\t\t\t\t\t\\\n-   \"/usr/lib/ \"\n+#define STARTFILE_PREFIX_SPEC \"\"\n \n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From e160a8cd4a704f4b7724df02b62394f677cc4198 Mon Sep 17 00:00:00 2001\nFrom: Sergei Trofimovich <siarheit@google.com>\nDate: Fri, 22 Sep 2023 22:41:49 +0100\nSubject: [PATCH] gcc/file-prefix-map.cc: always mangle __FILE__ into invalid\n store path\n\nWithout the change `__FILE__` used in static inline functions in headers\nembed paths to header files into executable images. For local headers\nit's not a problem, but for headers in `/nix/store` this causes `-dev`\ninputs to be retained in runtime closure.\n\nTypical examples are `nix` -> `nlohmann_json` and `pipewire` ->\n`lttng-ust.dev`.\n\nFor this reason we want to remove the occurrences of hashes in the\nexpansion of `__FILE__`. `nuke-references` does it by replacing hashes\nby `eeeeee...`. It is handy to be able to invert the transformation to\ngo back to the original store path. The chosen solution is to make the\nhash uppercase:\n- it does not trigger runtime references (except for all digit hashes,\n  which are unlikely enough)\n- it visually looks like a bogus store path\n- it is easy to find the original store path if required\n\nIdeally we would like to use `-fmacro-prefix-map=` feature of `gcc` as:\n\n  -fmacro-prefix-map=/nix/store/$hash1-nlohmann-json-ver=/nix/store/$HASH1-nlohmann-json-ver\n  -fmacro-prefix-map=/nix/...\n\nIn practice it quickly exhausts argument length limit due to `gcc`\ndeficiency: https://gcc.gnu.org/PR111527\n\nUntil it's fixed let's hardcode header mangling if $NIX_STORE variable\nis present in the environment.\n\nTested as:\n\n    $ printf \"# 0 \\\"/nix/store/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-pppppp-vvvvvvv\\\" \\nconst char * f(void) { return __FILE__; }\" | NIX_STORE=/nix/store ./gcc/xgcc -Bgcc -x c - -S -o -\n    ...\n    .string \"/nix/store/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-pppppp-vvvvvvv\"\n    ...\n\nMangled successfully.\n\nTo reverse the effect of the mangle use new `NIX_GCC_DONT_MANGLE_PREFIX_MAP`\nenvironment variable. It should not normally be needed.\n--- a/gcc/file-prefix-map.cc\n+++ b/gcc/file-prefix-map.cc\n@@ -74,7 +74,7 @@ add_prefix_map (file_prefix_map *&maps, const char *arg, const char *opt)\n    remapping was performed.  */\n \n static const char *\n-remap_filename (file_prefix_map *maps, const char *filename)\n+remap_filename (file_prefix_map *maps, const char *filename, bool mangle_nix_store = false)\n {\n   file_prefix_map *map;\n   char *s;\n@@ -102,6 +102,30 @@ remap_filename (file_prefix_map *maps, const char *filename)\n       break;\n   if (!map)\n     {\n+      if (mangle_nix_store && getenv(\"NIX_GCC_DONT_MANGLE_PREFIX_MAP\") == NULL)\n+\t{\n+\t  /* Remap all fo $NIX_STORE/.{32} paths to uppercase\n+\t   *\n+\t   * That way we avoid argument parameters explosion\n+\t   * and still avoid embedding headers into runtime closure:\n+\t   *   https://gcc.gnu.org/PR111527\n+\t   */\n+\t   char * nix_store = getenv(\"NIX_STORE\");\n+\t   size_t nix_store_len = nix_store ? strlen(nix_store) : 0;\n+\t   const char * name = realname ? realname : filename;\n+\t   size_t name_len = strlen(name);\n+\t   if (nix_store && name_len >= nix_store_len + 1 + 32 && memcmp(name, nix_store, nix_store_len) == 0)\n+\t     {\n+\t\ts = (char *) ggc_alloc_atomic (name_len + 1);\n+\t\tmemcpy(s, name, name_len + 1);\n+\t\tfor (size_t i = nix_store_len + 1; i < nix_store_len + 1 + 32; i++) {\n+\t\t  s[i] = TOUPPER(s[i]);\n+\t\t}\n+\t\tif (realname != filename)\n+\t\t  free (const_cast <char *> (realname));\n+\t\treturn s;\n+\t     }\n+\t}\n       if (realname != filename)\n \tfree (const_cast <char *> (realname));\n       return filename;\n@@ -163,7 +187,7 @@ add_profile_prefix_map (const char *arg)\n const char *\n remap_macro_filename (const char *filename)\n {\n-  return remap_filename (macro_prefix_maps, filename);\n+  return remap_filename (macro_prefix_maps, filename, true);\n }\n \n /* Remap using -fdebug-prefix-map.  Return the GC-allocated new name\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h\nindex cbee89140dd..e1f26b0a096 100644\n--- a/gcc/config/rs6000/sysv4.h\n+++ b/gcc/config/rs6000/sysv4.h\n@@ -996,13 +996,7 @@ ncrtn.o%s\"\n     { GPLUSPLUS_BACKWARD_INCLUDE_DIR, \"G++\", 1, 1,\t\\\n       GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 0 },\n \n-#ifdef LOCAL_INCLUDE_DIR\n-#define INCLUDE_DEFAULTS_MUSL_LOCAL\t\t\t\\\n-    { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 2 },\t\t\\\n-    { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 0 },\n-#else\n #define INCLUDE_DEFAULTS_MUSL_LOCAL\n-#endif\n \n #ifdef PREFIX_INCLUDE_DIR\n #define INCLUDE_DEFAULTS_MUSL_PREFIX\t\t\t\\\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "this patch fixes build for clang-18+\n\ndiff --git a/libgcc/config/aarch64/lse.S b/libgcc/config/aarch64/lse.S\nindex ecef47086..b478dd4d9 100644\n--- a/libgcc/config/aarch64/lse.S\n+++ b/libgcc/config/aarch64/lse.S\n@@ -174,8 +174,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see\n \t.globl\t\\name\n \tHIDDEN(\\name)\n \tSYMBOL_TYPE(\\name, %function)\n-\t.cfi_startproc\n \\name:\n+\t.cfi_startproc\n .endm\n \n .macro\tENDFN name\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://mirror.koddos.net/gcc/releases/gcc-14.3.0/gcc-14.3.0.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "e0dc77297625631ac8e50fa92fffefe899a4eb702592da5c32ef04e2293aca3a"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://gcc.gnu.org/"
        }
      ],
      "evidence": {
        "identity": {
          "field": "cpe",
          "methods": [
            {
              "technique": "manifest-analysis",
              "confidence": 0.5,
              "value": "cpe:2.3:a:gnu:gcc:14.3.0:*:*:*:*:*:*:*"
            },
            {
              "technique": "manifest-analysis",
              "confidence": 0.5,
              "value": "cpe:2.3:a:gnu:gcc:14.3:0:*:*:*:*:*:*"
            }
          ]
        }
      }
    },
    {
      "type": "application",
      "bom-ref": "xx7cm72qy2c0643cm1ipngd87aqwkcdp-glibc-2.40-66",
      "name": "glibc",
      "version": "2.40",
      "description": "GNU C Library",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "LGPL-2.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/glibc@2.40",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "commit 6daa77104520ca992a9369bd01cccd4d98c82984\nAuthor: Andreas K. Hüttel <dilfridge@gentoo.org>\nDate:   Sun Jul 21 19:02:10 2024 +0200\n\n    Replace advisories directory\n    \n    Signed-off-by: Andreas K. Hüttel <dilfridge@gentoo.org>\n\ndiff --git a/advisories/GLIBC-SA-2023-0001 b/advisories/GLIBC-SA-2023-0001\ndeleted file mode 100644\nindex 3d19c91b6a..0000000000\n--- a/advisories/GLIBC-SA-2023-0001\n+++ /dev/null\n@@ -1,14 +0,0 @@\n-printf: incorrect output for integers with thousands separator and width field\n-\n-When the printf family of functions is called with a format specifier\n-that uses an <apostrophe> (enable grouping) and a minimum width\n-specifier, the resulting output could be larger than reasonably expected\n-by a caller that computed a tight bound on the buffer size.  The\n-resulting larger than expected output could result in a buffer overflow\n-in the printf family of functions.\n-\n-CVE-Id: CVE-2023-25139\n-Public-Date: 2023-02-02\n-Vulnerable-Commit: e88b9f0e5cc50cab57a299dc7efe1a4eb385161d (2.37)\n-Fix-Commit: c980549cc6a1c03c23cc2fe3e7b0fe626a0364b0 (2.38)\n-Fix-Commit: 07b9521fc6369d000216b96562ff7c0ed32a16c4 (2.37-4)\ndiff --git a/advisories/GLIBC-SA-2023-0002 b/advisories/GLIBC-SA-2023-0002\ndeleted file mode 100644\nindex 5122669a64..0000000000\n--- a/advisories/GLIBC-SA-2023-0002\n+++ /dev/null\n@@ -1,15 +0,0 @@\n-getaddrinfo: Stack read overflow in no-aaaa mode\n-\n-If the system is configured in no-aaaa mode via /etc/resolv.conf,\n-getaddrinfo is called for the AF_UNSPEC address family, and a DNS\n-response is received over TCP that is larger than 2048 bytes,\n-getaddrinfo may potentially disclose stack contents via the returned\n-address data, or crash.\n-\n-CVE-Id: CVE-2023-4527\n-Public-Date: 2023-09-12\n-Vulnerable-Commit: f282cdbe7f436c75864e5640a409a10485e9abb2 (2.36)\n-Fix-Commit: bd77dd7e73e3530203be1c52c8a29d08270cb25d (2.39)\n-Fix-Commit: 4ea972b7edd7e36610e8cde18bf7a8149d7bac4f (2.36-113)\n-Fix-Commit: b7529346025a130fee483d42178b5c118da971bb (2.37-38)\n-Fix-Commit: b25508dd774b617f99419bdc3cf2ace4560cd2d6 (2.38-19)\ndiff --git a/advisories/GLIBC-SA-2023-0003 b/advisories/GLIBC-SA-2023-0003\ndeleted file mode 100644\nindex d3aef80348..0000000000\n--- a/advisories/GLIBC-SA-2023-0003\n+++ /dev/null\n@@ -1,15 +0,0 @@\n-getaddrinfo: Potential use-after-free\n-\n-When an NSS plugin only implements the _gethostbyname2_r and\n-_getcanonname_r callbacks, getaddrinfo could use memory that was freed\n-during buffer resizing, potentially causing a crash or read or write to\n-arbitrary memory.\n-\n-CVE-Id: CVE-2023-4806\n-Public-Date: 2023-09-12\n-Fix-Commit: 973fe93a5675c42798b2161c6f29c01b0e243994 (2.39)\n-Fix-Commit: e09ee267c03e3150c2c9ba28625ab130705a485e (2.34-420)\n-Fix-Commit: e3ccb230a961b4797510e6a1f5f21fd9021853e7 (2.35-270)\n-Fix-Commit: a9728f798ec7f05454c95637ee6581afaa9b487d (2.36-115)\n-Fix-Commit: 6529a7466c935f36e9006b854d6f4e1d4876f942 (2.37-39)\n-Fix-Commit: 00ae4f10b504bc4564e9f22f00907093f1ab9338 (2.38-20)\ndiff --git a/advisories/GLIBC-SA-2023-0004 b/advisories/GLIBC-SA-2023-0004\ndeleted file mode 100644\nindex 5286a7aa54..0000000000\n--- a/advisories/GLIBC-SA-2023-0004\n+++ /dev/null\n@@ -1,16 +0,0 @@\n-tunables: local privilege escalation through buffer overflow\n-\n-If a tunable of the form NAME=NAME=VAL is passed in the environment of a\n-setuid program and NAME is valid, it may result in a buffer overflow,\n-which could be exploited to achieve escalated privileges.  This flaw was\n-introduced in glibc 2.34.\n-\n-CVE-Id: CVE-2023-4911\n-Public-Date: 2023-10-03\n-Vulnerable-Commit: 2ed18c5b534d9e92fc006202a5af0df6b72e7aca (2.34)\n-Fix-Commit: 1056e5b4c3f2d90ed2b4a55f96add28da2f4c8fa (2.39)\n-Fix-Commit: dcc367f148bc92e7f3778a125f7a416b093964d9 (2.34-423)\n-Fix-Commit: c84018a05aec80f5ee6f682db0da1130b0196aef (2.35-274)\n-Fix-Commit: 22955ad85186ee05834e47e665056148ca07699c (2.36-118)\n-Fix-Commit: b4e23c75aea756b4bddc4abcf27a1c6dca8b6bd3 (2.37-45)\n-Fix-Commit: 750a45a783906a19591fb8ff6b7841470f1f5701 (2.38-27)\ndiff --git a/advisories/GLIBC-SA-2023-0005 b/advisories/GLIBC-SA-2023-0005\ndeleted file mode 100644\nindex cc4eb90b82..0000000000\n--- a/advisories/GLIBC-SA-2023-0005\n+++ /dev/null\n@@ -1,18 +0,0 @@\n-getaddrinfo: DoS due to memory leak\n-\n-The fix for CVE-2023-4806 introduced a memory leak when an application\n-calls getaddrinfo for AF_INET6 with AI_CANONNAME, AI_ALL and AI_V4MAPPED\n-flags set.\n-\n-CVE-Id: CVE-2023-5156\n-Public-Date: 2023-09-25\n-Vulnerable-Commit: e09ee267c03e3150c2c9ba28625ab130705a485e (2.34-420)\n-Vulnerable-Commit: e3ccb230a961b4797510e6a1f5f21fd9021853e7 (2.35-270)\n-Vulnerable-Commit: a9728f798ec7f05454c95637ee6581afaa9b487d (2.36-115)\n-Vulnerable-Commit: 6529a7466c935f36e9006b854d6f4e1d4876f942 (2.37-39)\n-Vulnerable-Commit: 00ae4f10b504bc4564e9f22f00907093f1ab9338 (2.38-20)\n-Fix-Commit: 8006457ab7e1cd556b919f477348a96fe88f2e49 (2.34-421)\n-Fix-Commit: 17092c0311f954e6f3c010f73ce3a78c24ac279a (2.35-272)\n-Fix-Commit: 856bac55f98dc840e7c27cfa82262b933385de90 (2.36-116)\n-Fix-Commit: 4473d1b87d04b25cdd0e0354814eeaa421328268 (2.37-42)\n-Fix-Commit: 5ee59ca371b99984232d7584fe2b1a758b4421d3 (2.38-24)\ndiff --git a/advisories/GLIBC-SA-2024-0001 b/advisories/GLIBC-SA-2024-0001\ndeleted file mode 100644\nindex 28931c75ae..0000000000\n--- a/advisories/GLIBC-SA-2024-0001\n+++ /dev/null\n@@ -1,15 +0,0 @@\n-syslog: Heap buffer overflow in __vsyslog_internal\n-\n-__vsyslog_internal did not handle a case where printing a SYSLOG_HEADER\n-containing a long program name failed to update the required buffer\n-size, leading to the allocation and overflow of a too-small buffer on\n-the heap.\n-\n-CVE-Id: CVE-2023-6246\n-Public-Date: 2024-01-30\n-Vulnerable-Commit: 52a5be0df411ef3ff45c10c7c308cb92993d15b1 (2.37)\n-Fix-Commit: 6bd0e4efcc78f3c0115e5ea9739a1642807450da (2.39)\n-Fix-Commit: 23514c72b780f3da097ecf33a793b7ba9c2070d2 (2.38-42)\n-Fix-Commit: 97a4292aa4a2642e251472b878d0ec4c46a0e59a (2.37-57)\n-Vulnerable-Commit: b0e7888d1fa2dbd2d9e1645ec8c796abf78880b9 (2.36-16)\n-Fix-Commit: d1a83b6767f68b3cb5b4b4ea2617254acd040c82 (2.36-126)\ndiff --git a/advisories/GLIBC-SA-2024-0002 b/advisories/GLIBC-SA-2024-0002\ndeleted file mode 100644\nindex 940bfcf2fc..0000000000\n--- a/advisories/GLIBC-SA-2024-0002\n+++ /dev/null\n@@ -1,15 +0,0 @@\n-syslog: Heap buffer overflow in __vsyslog_internal\n-\n-__vsyslog_internal used the return value of snprintf/vsnprintf to\n-calculate buffer sizes for memory allocation.  If these functions (for\n-any reason) failed and returned -1, the resulting buffer would be too\n-small to hold output.\n-\n-CVE-Id: CVE-2023-6779\n-Public-Date: 2024-01-30\n-Vulnerable-Commit: 52a5be0df411ef3ff45c10c7c308cb92993d15b1 (2.37)\n-Fix-Commit: 7e5a0c286da33159d47d0122007aac016f3e02cd (2.39)\n-Fix-Commit: d0338312aace5bbfef85e03055e1212dd0e49578 (2.38-43)\n-Fix-Commit: 67062eccd9a65d7fda9976a56aeaaf6c25a80214 (2.37-58)\n-Vulnerable-Commit: b0e7888d1fa2dbd2d9e1645ec8c796abf78880b9 (2.36-16)\n-Fix-Commit: 2bc9d7c002bdac38b5c2a3f11b78e309d7765b83 (2.36-127)\ndiff --git a/advisories/GLIBC-SA-2024-0003 b/advisories/GLIBC-SA-2024-0003\ndeleted file mode 100644\nindex b43a5150ab..0000000000\n--- a/advisories/GLIBC-SA-2024-0003\n+++ /dev/null\n@@ -1,13 +0,0 @@\n-syslog: Integer overflow in __vsyslog_internal\n-\n-__vsyslog_internal calculated a buffer size by adding two integers, but\n-did not first check if the addition would overflow.\n-\n-CVE-Id: CVE-2023-6780\n-Public-Date: 2024-01-30\n-Vulnerable-Commit: 52a5be0df411ef3ff45c10c7c308cb92993d15b1 (2.37)\n-Fix-Commit: ddf542da94caf97ff43cc2875c88749880b7259b (2.39)\n-Fix-Commit: d37c2b20a4787463d192b32041c3406c2bd91de0 (2.38-44)\n-Fix-Commit: 2b58cba076e912961ceaa5fa58588e4b10f791c0 (2.37-59)\n-Vulnerable-Commit: b0e7888d1fa2dbd2d9e1645ec8c796abf78880b9 (2.36-16)\n-Fix-Commit: b9b7d6a27aa0632f334352fa400771115b3c69b7 (2.36-128)\ndiff --git a/advisories/GLIBC-SA-2024-0004 b/advisories/GLIBC-SA-2024-0004\ndeleted file mode 100644\nindex 08df2b3118..0000000000\n--- a/advisories/GLIBC-SA-2024-0004\n+++ /dev/null\n@@ -1,28 +0,0 @@\n-ISO-2022-CN-EXT: fix out-of-bound writes when writing escape sequence\n-\n-The iconv() function in the GNU C Library versions 2.39 and older may \n-overflow the output buffer passed to it by up to 4 bytes when converting \n-strings to the ISO-2022-CN-EXT character set, which may be used to \n-crash an application or overwrite a neighbouring variable.\n-\n-ISO-2022-CN-EXT uses escape sequences to indicate character set changes\n-(as specified by RFC 1922).  While the SOdesignation has the expected\n-bounds checks, neither SS2designation nor SS3designation have its;\n-allowing a write overflow of 1, 2, or 3 bytes with fixed values:\n-'$+I', '$+J', '$+K', '$+L', '$+M', or '$*H'.\n-\n-CVE-Id: CVE-2024-2961\n-Public-Date: 2024-04-17\n-Vulnerable-Commit: 755104edc75c53f4a0e7440334e944ad3c6b32fc (2.1.93-169)\n-Fix-Commit: f9dc609e06b1136bb0408be9605ce7973a767ada (2.40)\n-Fix-Commit: 31da30f23cddd36db29d5b6a1c7619361b271fb4 (2.39-31)\n-Fix-Commit: e1135387deded5d73924f6ca20c72a35dc8e1bda (2.38-66)\n-Fix-Commit: 89ce64b269a897a7780e4c73a7412016381c6ecf (2.37-89)\n-Fix-Commit: 4ed98540a7fd19f458287e783ae59c41e64df7b5 (2.36-164)\n-Fix-Commit: 36280d1ce5e245aabefb877fe4d3c6cff95dabfa (2.35-315)\n-Fix-Commit: a8b0561db4b9847ebfbfec20075697d5492a363c (2.34-459)\n-Fix-Commit: ed4f16ff6bed3037266f1fa682ebd32a18fce29c (2.33-263)\n-Fix-Commit: 682ad4c8623e611a971839990ceef00346289cc9 (2.32-140)\n-Fix-Commit: 3703c32a8d304c1ee12126134ce69be965f38000 (2.31-154)\n-\n-Reported-By: Charles Fol\ndiff --git a/advisories/GLIBC-SA-2024-0005 b/advisories/GLIBC-SA-2024-0005\ndeleted file mode 100644\nindex a59596610a..0000000000\n--- a/advisories/GLIBC-SA-2024-0005\n+++ /dev/null\n@@ -1,22 +0,0 @@\n-nscd: Stack-based buffer overflow in netgroup cache\n-\n-If the Name Service Cache Daemon's (nscd) fixed size cache is exhausted\n-by client requests then a subsequent client request for netgroup data\n-may result in a stack-based buffer overflow.  This flaw was introduced\n-in glibc 2.15 when the cache was added to nscd.\n-\n-This vulnerability is only present in the nscd binary.\n-\n-CVE-Id: CVE-2024-33599\n-Public-Date: 2024-04-23\n-Vulnerable-Commit: 684ae515993269277448150a1ca70db3b94aa5bd (2.15)\n-Fix-Commit: 69c58d5ef9f584ea198bd00f7964d364d0e6b921 (2.31-155)\n-Fix-Commit: a77064893bfe8a701770e2f53a4d33805bc47a5a (2.32-141)\n-Fix-Commit: 5c75001a96abcd50cbdb74df24c3f013188d076e (2.33-264)\n-Fix-Commit: 52f73e5c4e29b14e79167272297977f360ae1e97 (2.34-460)\n-Fix-Commit: 7a95873543ce225376faf13bb71c43dea6d24f86 (2.35-316)\n-Fix-Commit: caa3151ca460bdd9330adeedd68c3112d97bffe4 (2.36-165)\n-Fix-Commit: f75c298e747b2b8b41b1c2f551c011a52c41bfd1 (2.37-91)\n-Fix-Commit: 5968aebb86164034b8f8421b4abab2f837a5bdaf (2.38-72)\n-Fix-Commit: 1263d583d2e28afb8be53f8d6922f0842036f35d (2.39-35)\n-Fix-Commit: 87801a8fd06db1d654eea3e4f7626ff476a9bdaa (2.40)\ndiff --git a/advisories/GLIBC-SA-2024-0006 b/advisories/GLIBC-SA-2024-0006\ndeleted file mode 100644\nindex d44148d3d9..0000000000\n--- a/advisories/GLIBC-SA-2024-0006\n+++ /dev/null\n@@ -1,32 +0,0 @@\n-nscd: Null pointer crash after notfound response\n-\n-If the Name Service Cache Daemon's (nscd) cache fails to add a not-found\n-netgroup response to the cache, the client request can result in a null\n-pointer dereference.  This flaw was introduced in glibc 2.15 when the\n-cache was added to nscd.\n-\n-This vulnerability is only present in the nscd binary.\n-\n-CVE-Id: CVE-2024-33600\n-Public-Date: 2024-04-24\n-Vulnerable-Commit: 684ae515993269277448150a1ca70db3b94aa5bd (2.15)\n-Fix-Commit: b048a482f088e53144d26a61c390bed0210f49f2 (2.40)\n-Fix-Commit: 7835b00dbce53c3c87bbbb1754a95fb5e58187aa (2.40)\n-Fix-Commit: c99f886de54446cd4447db6b44be93dabbdc2f8b (2.39-37)\n-Fix-Commit: 5a508e0b508c8ad53bd0d2fb48fd71b242626341 (2.39-36)\n-Fix-Commit: 2ae9446c1b7a3064743b4a51c0bbae668ee43e4c (2.38-74)\n-Fix-Commit: 541ea5172aa658c4bd5c6c6d6fd13903c3d5bb0a (2.38-73)\n-Fix-Commit: a8070b31043c7585c36ba68a74298c4f7af075c3 (2.37-93)\n-Fix-Commit: 5eea50c4402e39588de98aa1d4469a79774703d4 (2.37-92)\n-Fix-Commit: f205b3af56740e3b014915b1bd3b162afe3407ef (2.36-167)\n-Fix-Commit: c34f470a615b136170abd16142da5dd0c024f7d1 (2.36-166)\n-Fix-Commit: bafadc589fbe21ae330e8c2af74db9da44a17660 (2.35-318)\n-Fix-Commit: 4370bef52b0f3f3652c6aa13d7a9bb3ac079746d (2.35-317)\n-Fix-Commit: 1f94122289a9bf7dba573f5d60327aaa2b85cf2e (2.34-462)\n-Fix-Commit: 966d6ac9e40222b84bb21674cc4f83c8d72a5a26 (2.34-461)\n-Fix-Commit: e3eef1b8fbdd3a7917af466ca9c4b7477251ca79 (2.33-266)\n-Fix-Commit: f20a8d696b13c6261b52a6434899121f8b19d5a7 (2.33-265)\n-Fix-Commit: be602180146de37582a3da3a0caa4b719645de9c (2.32-143)\n-Fix-Commit: 394eae338199078b7961b051c191539870742d7b (2.32-142)\n-Fix-Commit: 8d7949183760170c61e55def723c1d8050187874 (2.31-157)\n-Fix-Commit: 304ce5fe466c4762b21b36c26926a4657b59b53e (2.31-156)\ndiff --git a/advisories/GLIBC-SA-2024-0007 b/advisories/GLIBC-SA-2024-0007\ndeleted file mode 100644\nindex b6928fa27a..0000000000\n--- a/advisories/GLIBC-SA-2024-0007\n+++ /dev/null\n@@ -1,28 +0,0 @@\n-nscd: netgroup cache may terminate daemon on memory allocation failure\n-\n-The Name Service Cache Daemon's (nscd) netgroup cache uses xmalloc or\n-xrealloc and these functions may terminate the process due to a memory\n-allocation failure resulting in a denial of service to the clients.  The\n-flaw was introduced in glibc 2.15 when the cache was added to nscd.\n-\n-This vulnerability is only present in the nscd binary.\n-\n-Subsequent refactoring of the netgroup cache only added more uses of\n-xmalloc and xrealloc. Uses of xmalloc and xrealloc in other parts of\n-nscd only occur during startup of the daemon and so are not affected by\n-client requests that could trigger an out of memory followed by\n-termination.\n-\n-CVE-Id: CVE-2024-33601\n-Public-Date: 2024-04-24\n-Vulnerable-Commit: 684ae515993269277448150a1ca70db3b94aa5bd (2.15)\n-Fix-Commit: c04a21e050d64a1193a6daab872bca2528bda44b (2.40)\n-Fix-Commit: a9a8d3eebb145779a18d90e3966009a1daa63cd8 (2.39-38)\n-Fix-Commit: 71af8ca864345d39b746d5cee84b94b430fad5db (2.38-75)\n-Fix-Commit: 6e106dc214d6a033a4e945d1c6cf58061f1c5f1f (2.37-94)\n-Fix-Commit: b6742463694b1dfdd5120b91ee21cf05d15ec2e2 (2.36-168)\n-Fix-Commit: 7a5864cac60e06000394128a5a2817b03542f5a3 (2.35-319)\n-Fix-Commit: 86f1d5f4129c373ac6fb6df5bcf38273838843cb (2.34-463)\n-Fix-Commit: 4d27d4b9a188786fc6a56745506cec2acfc51f83 (2.33-267)\n-Fix-Commit: 3ed195a8ec89da281e3c4bf887a13d281b72d8f4 (2.32-144)\n-Fix-Commit: bbf5a58ccb55679217f94de706164d15372fbbc0 (2.31-158)\ndiff --git a/advisories/GLIBC-SA-2024-0008 b/advisories/GLIBC-SA-2024-0008\ndeleted file mode 100644\nindex d93e2a6f0b..0000000000\n--- a/advisories/GLIBC-SA-2024-0008\n+++ /dev/null\n@@ -1,26 +0,0 @@\n-nscd: netgroup cache assumes NSS callback uses in-buffer strings\n-\n-The Name Service Cache Daemon's (nscd) netgroup cache can corrupt memory\n-when the NSS callback does not store all strings in the provided buffer.\n-The flaw was introduced in glibc 2.15 when the cache was added to nscd.\n-\n-This vulnerability is only present in the nscd binary.\n-\n-There is no guarantee from the NSS callback API that the returned\n-strings are all within the buffer. However, the netgroup cache code\n-assumes that the NSS callback uses in-buffer strings and if it doesn't\n-the buffer resizing logic could lead to potential memory corruption.\n-\n-CVE-Id: CVE-2024-33602\n-Public-Date: 2024-04-24\n-Vulnerable-Commit: 684ae515993269277448150a1ca70db3b94aa5bd (2.15)\n-Fix-Commit: c04a21e050d64a1193a6daab872bca2528bda44b (2.40)\n-Fix-Commit: a9a8d3eebb145779a18d90e3966009a1daa63cd8 (2.39-38)\n-Fix-Commit: 71af8ca864345d39b746d5cee84b94b430fad5db (2.38-75)\n-Fix-Commit: 6e106dc214d6a033a4e945d1c6cf58061f1c5f1f (2.37-94)\n-Fix-Commit: b6742463694b1dfdd5120b91ee21cf05d15ec2e2 (2.36-168)\n-Fix-Commit: 7a5864cac60e06000394128a5a2817b03542f5a3 (2.35-319)\n-Fix-Commit: 86f1d5f4129c373ac6fb6df5bcf38273838843cb (2.34-463)\n-Fix-Commit: 4d27d4b9a188786fc6a56745506cec2acfc51f83 (2.33-267)\n-Fix-Commit: 3ed195a8ec89da281e3c4bf887a13d281b72d8f4 (2.32-144)\n-Fix-Commit: bbf5a58ccb55679217f94de706164d15372fbbc0 (2.31-158)\ndiff --git a/advisories/README b/advisories/README\ndeleted file mode 100644\nindex b8f8a829ca..0000000000\n--- a/advisories/README\n+++ /dev/null\n@@ -1,77 +0,0 @@\n-GNU C Library Security Advisory Format\n-======================================\n-\n-Security advisories in this directory follow a simple git commit log\n-format, with a heading and free-format description augmented with tags\n-to allow parsing key information.  References to code changes are\n-specific to the glibc repository and follow a specific format:\n-\n-  Tag-name: <commit-ref> (release-version)\n-\n-The <commit-ref> indicates a specific commit in the repository.  The\n-release-version indicates the publicly consumable release in which this\n-commit is known to exist.  The release-version is derived from the\n-git-describe format, (i.e. stripped out from glibc-2.34.NNN-gxxxx) and\n-is of the form 2.34-NNN.  If the -NNN suffix is absent, it means that\n-the change is in that release tarball, otherwise the change is on the\n-release/2.YY/master branch and not in any released tarball.\n-\n-The following tags are currently being used:\n-\n-CVE-Id:\n-This is the CVE-Id assigned under the CVE Program\n-(https://www.cve.org/).\n-\n-Public-Date:\n-The date this issue became publicly known.\n-\n-Vulnerable-Commit:\n-The commit that introduced this vulnerability.  There could be multiple\n-entries, one for each release branch in the glibc repository; the\n-release-version portion of this tag should tell you which branch this is\n-on.\n-\n-Fix-Commit:\n-The commit that fixed this vulnerability.  There could be multiple\n-entries for each release branch in the glibc repository, indicating that\n-all of those commits contributed to fixing that issue in each of those\n-branches.\n-\n-Reported-By:\n-The entity that reported this issue. There could be multiple entries, one for\n-each reporter.\n-\n-Adding an Advisory\n-------------------\n-\n-An advisory for a CVE needs to be added on the master branch in two steps:\n-\n-1. Add the text of the advisory without any Fix-Commit tags along with\n-   the fix for the CVE.  Add the Vulnerable-Commit tag, if applicable.\n-   The advisories directory does not exist in release branches, so keep\n-   the advisory text commit distinct from the code changes, to ease\n-   backports.  Ask for the GLIBC-SA advisory number from the security\n-   team.\n-\n-2. Finish all backports on release branches and then back on the msater\n-   branch, add all commit refs to the advisory using the Fix-Commit\n-   tags.  Don't bother adding the release-version subscript since the\n-   next step will overwrite it.\n-\n-3. Run the process-advisories.sh script in the scripts directory on the\n-   advisory:\n-\n-     scripts/process-advisories.sh update GLIBC-SA-YYYY-NNNN\n-\n-   (replace YYYY-NNNN with the actual advisory number).\n-\n-4. Verify the updated advisory and push the result.\n-\n-Getting a NEWS snippet from advisories\n---------------------------------------\n-\n-Run:\n-\n-  scripts/process-advisories.sh news\n-\n-and copy the content into the NEWS file.\n\ncommit 8bbb8d7b16cae777eed06bc9d2e059fc00be24e9\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Wed Jul 24 12:06:47 2024 +0200\n\n    resolv: Allow short error responses to match any query (bug 31890)\n    \n    Reviewed-by: DJ Delorie <dj@redhat.com>\n    (cherry picked from commit 691a3b2e9bfaba842e46a5ccb7f5e6ea144c3ade)\n\ndiff --git a/NEWS b/NEWS\nindex 31281ac408..66b755ed34 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -5,6 +5,12 @@ See the end for copying conditions.\n Please send GNU C library bug reports via <https://sourceware.org/bugzilla/>\n using `glibc' in the \"product\" field.\n \f\n+Version 2.41\n+\n+The following bugs are resolved with this release:\n+\n+  [31890] resolv: Allow short error responses to match any DNS query\n+\f\n Version 2.40\n \n Major new features:\ndiff --git a/resolv/Makefile b/resolv/Makefile\nindex 5f44f5896b..d927e337d9 100644\n--- a/resolv/Makefile\n+++ b/resolv/Makefile\n@@ -106,6 +106,7 @@ tests += \\\n   tst-resolv-nondecimal \\\n   tst-resolv-res_init-multi \\\n   tst-resolv-search \\\n+  tst-resolv-short-response \\\n   tst-resolv-trailing \\\n \n # This test calls __res_context_send directly, which is not exported\n@@ -299,6 +300,8 @@ $(objpfx)tst-resolv-nondecimal: $(objpfx)libresolv.so $(shared-thread-library)\n $(objpfx)tst-resolv-qtypes: $(objpfx)libresolv.so $(shared-thread-library)\n $(objpfx)tst-resolv-rotate: $(objpfx)libresolv.so $(shared-thread-library)\n $(objpfx)tst-resolv-search: $(objpfx)libresolv.so $(shared-thread-library)\n+$(objpfx)tst-resolv-short-response: $(objpfx)libresolv.so \\\n+  $(shared-thread-library)\n $(objpfx)tst-resolv-trailing: $(objpfx)libresolv.so $(shared-thread-library)\n $(objpfx)tst-resolv-threads: $(objpfx)libresolv.so $(shared-thread-library)\n $(objpfx)tst-resolv-txnid-collision: $(objpfx)libresolv.a \\\ndiff --git a/resolv/res_send.c b/resolv/res_send.c\nindex ea7cf192b2..572e72c32f 100644\n--- a/resolv/res_send.c\n+++ b/resolv/res_send.c\n@@ -1199,19 +1199,30 @@ send_dg(res_state statp,\n \t\t}\n \n \t\t/* Check for the correct header layout and a matching\n-\t\t   question.  */\n+\t\t   question.  Some recursive resolvers send REFUSED\n+\t\t   without copying back the question section\n+\t\t   (producing a response that is only HFIXEDSZ bytes\n+\t\t   long).  Skip query matching in this case.  */\n+\t\tbool thisansp_error = (anhp->rcode == SERVFAIL ||\n+\t\t\t\t       anhp->rcode == NOTIMP ||\n+\t\t\t\t       anhp->rcode == REFUSED);\n+\t\tbool skip_query_match = (*thisresplenp == HFIXEDSZ\n+\t\t\t\t\t && ntohs (anhp->qdcount) == 0\n+\t\t\t\t\t && thisansp_error);\n \t\tint matching_query = 0; /* Default to no matching query.  */\n \t\tif (!recvresp1\n \t\t    && anhp->id == hp->id\n-\t\t    && __libc_res_queriesmatch (buf, buf + buflen,\n-\t\t\t\t\t\t*thisansp,\n-\t\t\t\t\t\t*thisansp + *thisanssizp))\n+\t\t    && (skip_query_match\n+\t\t\t|| __libc_res_queriesmatch (buf, buf + buflen,\n+\t\t\t\t\t\t    *thisansp,\n+\t\t\t\t\t\t    *thisansp + *thisanssizp)))\n \t\t  matching_query = 1;\n \t\tif (!recvresp2\n \t\t    && anhp->id == hp2->id\n-\t\t    && __libc_res_queriesmatch (buf2, buf2 + buflen2,\n-\t\t\t\t\t\t*thisansp,\n-\t\t\t\t\t\t*thisansp + *thisanssizp))\n+\t\t    && (skip_query_match\n+\t\t\t|| __libc_res_queriesmatch (buf2, buf2 + buflen2,\n+\t\t\t\t\t\t    *thisansp,\n+\t\t\t\t\t\t    *thisansp + *thisanssizp)))\n \t\t  matching_query = 2;\n \t\tif (matching_query == 0)\n \t\t  /* Spurious UDP packet.  Drop it and continue\n@@ -1221,9 +1232,7 @@ send_dg(res_state statp,\n \t\t    goto wait;\n \t\t  }\n \n-\t\tif (anhp->rcode == SERVFAIL ||\n-\t\t    anhp->rcode == NOTIMP ||\n-\t\t    anhp->rcode == REFUSED) {\n+\t\tif (thisansp_error) {\n \t\tnext_ns:\n \t\t\tif (recvresp1 || (buf2 != NULL && recvresp2)) {\n \t\t\t  *resplen2 = 0;\ndiff --git a/resolv/tst-resolv-short-response.c b/resolv/tst-resolv-short-response.c\nnew file mode 100644\nindex 0000000000..cf1e39876f\n--- /dev/null\n+++ b/resolv/tst-resolv-short-response.c\n@@ -0,0 +1,112 @@\n+/* Test for spurious timeouts with short 12-byte responses (bug 31890).\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <resolv.h>\n+#include <support/check.h>\n+#include <support/resolv_test.h>\n+#include <support/check_nss.h>\n+\n+/* The rcode in the initial response.  */\n+static volatile int rcode;\n+\n+static void\n+response (const struct resolv_response_context *ctx,\n+          struct resolv_response_builder *b,\n+          const char *qname, uint16_t qclass, uint16_t qtype)\n+{\n+  switch (ctx->server_index)\n+    {\n+    case 0:\n+      /* First server times out.  */\n+      struct resolv_response_flags flags = {.rcode = rcode};\n+      resolv_response_init (b, flags);\n+      break;\n+    case 1:\n+      /* Second server sends reply.  */\n+      resolv_response_init (b, (struct resolv_response_flags) {});\n+      resolv_response_add_question (b, qname, qclass, qtype);\n+      resolv_response_section (b, ns_s_an);\n+      resolv_response_open_record (b, qname, qclass, qtype, 0);\n+      switch (qtype)\n+        {\n+        case T_A:\n+          {\n+            char ipv4[4] = {192, 0, 2, 17};\n+            resolv_response_add_data (b, &ipv4, sizeof (ipv4));\n+          }\n+          break;\n+        case T_AAAA:\n+          {\n+            char ipv6[16]\n+              = {0x20, 0x01, 0xd, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};\n+            resolv_response_add_data (b, &ipv6, sizeof (ipv6));\n+          }\n+          break;\n+        default:\n+          FAIL_EXIT1 (\"unexpected TYPE%d query\", qtype);\n+        }\n+      resolv_response_close_record (b);\n+      break;\n+    default:\n+      FAIL_EXIT1 (\"unexpected query to server %d\", ctx->server_index);\n+    }\n+}\n+\n+static void\n+check_one (void)\n+{\n+\n+  /* The buggy 1-second query timeout results in 30 seconds of delay,\n+     which triggers a test timeout failure.  */\n+  for (int i = 0;  i < 10; ++i)\n+    {\n+      check_hostent (\"www.example\", gethostbyname (\"www.example\"),\n+                     \"name: www.example\\n\"\n+                     \"address: 192.0.2.17\\n\");\n+      check_hostent (\"www.example\", gethostbyname2 (\"www.example\", AF_INET6),\n+                     \"name: www.example\\n\"\n+                     \"address: 2001:db8::1\\n\");\n+    }\n+}\n+\n+static int\n+do_test (void)\n+{\n+  struct resolv_test *aux = resolv_test_start\n+    ((struct resolv_redirect_config)\n+     {\n+       .response_callback = response,\n+     });\n+\n+  _res.options |= RES_SNGLKUP;\n+\n+  rcode = 2; /* SERVFAIL.  */\n+  check_one ();\n+\n+  rcode = 4; /* NOTIMP.  */\n+  check_one ();\n+\n+  rcode = 5; /* REFUSED.  */\n+  check_one ();\n+\n+  resolv_test_end (aux);\n+\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\n\ncommit ef141426630da0946f0af8732eddce9b9a52b2d3\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Wed Jul 24 12:06:47 2024 +0200\n\n    resolv: Do not wait for non-existing second DNS response after error (bug 30081)\n    \n    In single-request mode, there is no second response after an error\n    because the second query has not been sent yet.  Waiting for it\n    introduces an unnecessary timeout.\n    \n    Reviewed-by: DJ Delorie <dj@redhat.com>\n    (cherry picked from commit af625987d619388a100b153520d3ee308bda9889)\n\ndiff --git a/NEWS b/NEWS\nindex 66b755ed34..4d7100b21c 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -9,6 +9,7 @@ Version 2.41\n \n The following bugs are resolved with this release:\n \n+  [30081] resolv: Do not wait for non-existing second DNS response after error\n   [31890] resolv: Allow short error responses to match any DNS query\n \f\n Version 2.40\ndiff --git a/resolv/Makefile b/resolv/Makefile\nindex d927e337d9..abff7fc007 100644\n--- a/resolv/Makefile\n+++ b/resolv/Makefile\n@@ -106,6 +106,7 @@ tests += \\\n   tst-resolv-nondecimal \\\n   tst-resolv-res_init-multi \\\n   tst-resolv-search \\\n+  tst-resolv-semi-failure \\\n   tst-resolv-short-response \\\n   tst-resolv-trailing \\\n \n@@ -300,6 +301,8 @@ $(objpfx)tst-resolv-nondecimal: $(objpfx)libresolv.so $(shared-thread-library)\n $(objpfx)tst-resolv-qtypes: $(objpfx)libresolv.so $(shared-thread-library)\n $(objpfx)tst-resolv-rotate: $(objpfx)libresolv.so $(shared-thread-library)\n $(objpfx)tst-resolv-search: $(objpfx)libresolv.so $(shared-thread-library)\n+$(objpfx)tst-resolv-semi-failure: $(objpfx)libresolv.so \\\n+  $(shared-thread-library)\n $(objpfx)tst-resolv-short-response: $(objpfx)libresolv.so \\\n   $(shared-thread-library)\n $(objpfx)tst-resolv-trailing: $(objpfx)libresolv.so $(shared-thread-library)\ndiff --git a/resolv/res_send.c b/resolv/res_send.c\nindex 572e72c32f..9c77613f37 100644\n--- a/resolv/res_send.c\n+++ b/resolv/res_send.c\n@@ -1238,7 +1238,7 @@ send_dg(res_state statp,\n \t\t\t  *resplen2 = 0;\n \t\t\t  return resplen;\n \t\t\t}\n-\t\t\tif (buf2 != NULL)\n+\t\t\tif (buf2 != NULL && !single_request)\n \t\t\t  {\n \t\t\t    /* No data from the first reply.  */\n \t\t\t    resplen = 0;\ndiff --git a/resolv/tst-resolv-semi-failure.c b/resolv/tst-resolv-semi-failure.c\nnew file mode 100644\nindex 0000000000..aa9798b5a7\n--- /dev/null\n+++ b/resolv/tst-resolv-semi-failure.c\n@@ -0,0 +1,133 @@\n+/* Test parallel failure/success responses (bug 30081).\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <resolv.h>\n+#include <support/check.h>\n+#include <support/resolv_test.h>\n+#include <support/check_nss.h>\n+\n+/* The rcode in the initial response.  */\n+static volatile int rcode;\n+\n+/* Whether to fail the initial A query (!fail_aaaa) or the initial\n+   AAAA query (fail_aaaa).  */\n+static volatile bool fail_aaaa;\n+\n+static void\n+response (const struct resolv_response_context *ctx,\n+          struct resolv_response_builder *b,\n+          const char *qname, uint16_t qclass, uint16_t qtype)\n+{\n+  /* Handle the failing query.  */\n+  if ((fail_aaaa && qtype == T_AAAA) && ctx->server_index == 0)\n+    {\n+      struct resolv_response_flags flags = {.rcode = rcode};\n+      resolv_response_init (b, flags);\n+      return;\n+    }\n+\n+  /* Otherwise produce a response.  */\n+  resolv_response_init (b, (struct resolv_response_flags) {});\n+  resolv_response_add_question (b, qname, qclass, qtype);\n+  resolv_response_section (b, ns_s_an);\n+  resolv_response_open_record (b, qname, qclass, qtype, 0);\n+  switch (qtype)\n+    {\n+    case T_A:\n+      {\n+        char ipv4[4] = {192, 0, 2, 17};\n+        resolv_response_add_data (b, &ipv4, sizeof (ipv4));\n+      }\n+      break;\n+    case T_AAAA:\n+      {\n+        char ipv6[16]\n+          = {0x20, 0x01, 0xd, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};\n+        resolv_response_add_data (b, &ipv6, sizeof (ipv6));\n+      }\n+      break;\n+    default:\n+      FAIL_EXIT1 (\"unexpected TYPE%d query\", qtype);\n+    }\n+  resolv_response_close_record (b);\n+}\n+\n+static void\n+check_one (void)\n+{\n+\n+  /* The buggy 1-second query timeout results in 30 seconds of delay,\n+     which triggers are test timeout failure.  */\n+  for (int i = 0;  i < 30; ++i)\n+    {\n+      static const struct addrinfo hints =\n+        {\n+          .ai_family = AF_UNSPEC,\n+          .ai_socktype = SOCK_STREAM,\n+        };\n+      struct addrinfo *ai;\n+      int ret = getaddrinfo (\"www.example\", \"80\", &hints, &ai);\n+      const char *expected;\n+      if (ret == 0 && ai->ai_next != NULL)\n+        expected = (\"address: STREAM/TCP 192.0.2.17 80\\n\"\n+                    \"address: STREAM/TCP 2001:db8::1 80\\n\");\n+      else\n+        /* Only one response because the AAAA lookup failure is\n+           treated as an ignoreable error.  */\n+        expected = \"address: STREAM/TCP 192.0.2.17 80\\n\";\n+      check_addrinfo (\"www.example\", ai, ret, expected);\n+      if (ret == 0)\n+        freeaddrinfo (ai);\n+    }\n+}\n+\n+static int\n+do_test (void)\n+{\n+  for (int do_single_lookup = 0; do_single_lookup < 2; ++do_single_lookup)\n+    {\n+      struct resolv_test *aux = resolv_test_start\n+        ((struct resolv_redirect_config)\n+         {\n+           .response_callback = response,\n+         });\n+\n+      if (do_single_lookup)\n+        _res.options |= RES_SNGLKUP;\n+\n+      for (int do_fail_aaaa = 0; do_fail_aaaa < 2; ++do_fail_aaaa)\n+        {\n+          fail_aaaa = do_fail_aaaa;\n+\n+          rcode = 2; /* SERVFAIL.  */\n+          check_one ();\n+\n+          rcode = 4; /* NOTIMP.  */\n+          check_one ();\n+\n+          rcode = 5; /* REFUSED.  */\n+          check_one ();\n+        }\n+\n+      resolv_test_end (aux);\n+    }\n+\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\ndiff --git a/resolv/tst-resolv-short-response.c b/resolv/tst-resolv-short-response.c\nindex cf1e39876f..be354ae1c7 100644\n--- a/resolv/tst-resolv-short-response.c\n+++ b/resolv/tst-resolv-short-response.c\n@@ -81,6 +81,18 @@ check_one (void)\n       check_hostent (\"www.example\", gethostbyname2 (\"www.example\", AF_INET6),\n                      \"name: www.example\\n\"\n                      \"address: 2001:db8::1\\n\");\n+      static const struct addrinfo hints =\n+        {\n+          .ai_family = AF_UNSPEC,\n+          .ai_socktype = SOCK_STREAM,\n+        };\n+      struct addrinfo *ai;\n+      int ret = getaddrinfo (\"www.example\", \"80\", &hints, &ai);\n+      check_addrinfo (\"www.example\", ai, ret,\n+                      \"address: STREAM/TCP 192.0.2.17 80\\n\"\n+                      \"address: STREAM/TCP 2001:db8::1 80\\n\");\n+      if (ret == 0)\n+        freeaddrinfo (ai);\n     }\n }\n \n\ncommit b6aeba2de157ba0cdc8fb0aed67b632b3490f383\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Wed Jul 24 12:50:17 2024 +0200\n\n    manual: Do not mention STATIC_TLS in dynamic linker hardening recommendations\n    \n    The current toolchain does not consistently generate it, and\n    glibc does not use it.\n    \n    Reviewed-by: Szabolcs Nagy <szabolcs.nagy@arm.com>\n    (cherry picked from commit 90842d3980064ef410b998b22170ad409b76b9fd)\n\ndiff --git a/manual/dynlink.texi b/manual/dynlink.texi\nindex 03565d4fb0..1500a53de6 100644\n--- a/manual/dynlink.texi\n+++ b/manual/dynlink.texi\n@@ -993,21 +993,21 @@ The dynamic segment should also mention @code{BIND_NOW} on the\n enough).\n \n @item\n-For shared objects (not main programs), if the program header has a\n-@code{PT_TLS} segment, the dynamic segment (as shown by @samp{readelf\n--dW}) should contain the @code{STATIC_TLS} flag on the @code{FLAGS}\n-line.\n-\n-If @code{STATIC_TLS} is missing in shared objects, ensure that the\n-appropriate relocations for GNU2 TLS descriptors are used (for example,\n+Ensure that only static TLS relocations (thread-pointer relative offset\n+locations) are used, for example @code{R_AARCH64_TLS_TPREL} and\n+@code{X86_64_TPOFF64}.  As the second-best option, and only if\n+compatibility with non-hardened applications using @code{dlopen} is\n+needed, GNU2 TLS descriptor relocations can be used (for example,\n @code{R_AARCH64_TLSDESC} or @code{R_X86_64_TLSDESC}).\n \n @item\n-There should not be a reference to the symbols @code{__tls_get_addr},\n-@code{__tls_get_offset}, @code{__tls_get_addr_opt} in the dynamic symbol\n-table (in the @samp{readelf -sDW} output).  Thread-local storage must be\n-accessed using the initial-exec (static) model, or using GNU2 TLS\n-descriptors.\n+There should not be references to the traditional TLS function symbols\n+@code{__tls_get_addr}, @code{__tls_get_offset},\n+@code{__tls_get_addr_opt} in the dynamic symbol table (in the\n+@samp{readelf -sDW} output).  Supporting global dynamic TLS relocations\n+(such as @code{R_AARCH64_TLS_DTPMOD}, @code{R_AARCH64_TLS_DTPREL},\n+@code{R_X86_64_DTPMOD64}, @code{R_X86_64_DTPOFF64}) should not be used,\n+either.\n \n @item\n Likewise, the functions @code{dlopen}, @code{dlmopen}, @code{dlclose}\n\ncommit 145b5886379c8de4f0a1bca3556a4c3d7b6c24b2\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Wed Jul 24 13:42:16 2024 +0200\n\n    Fix version number in NEWS file\n\ndiff --git a/NEWS b/NEWS\nindex 4d7100b21c..6b62f55658 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -5,7 +5,7 @@ See the end for copying conditions.\n Please send GNU C library bug reports via <https://sourceware.org/bugzilla/>\n using `glibc' in the \"product\" field.\n \f\n-Version 2.41\n+Version 2.40.1\n \n The following bugs are resolved with this release:\n \n\ncommit 2aebac5e158277d852b87b0cbd4af2b2d10ac387\nAuthor: Miguel Martín <mmartinv@redhat.com>\nDate:   Tue Jul 16 17:14:56 2024 +0200\n\n    malloc: avoid global locks in tst-aligned_alloc-lib.c\n    \n    Make sure the DSO used by aligned_alloc/calloc/malloc tests does not get\n    a global lock on multithreaded tests.\n    Reviewed-by: Arjun Shankar <arjun@redhat.com>\n    \n    (cherry picked from commit 9a27b566b2048f599048f2f4afe1cce06c4ef43d)\n\ndiff --git a/malloc/tst-aligned_alloc-lib.c b/malloc/tst-aligned_alloc-lib.c\nindex 0205df5acf..9ef1f839c1 100644\n--- a/malloc/tst-aligned_alloc-lib.c\n+++ b/malloc/tst-aligned_alloc-lib.c\n@@ -17,37 +17,38 @@\n    License along with the GNU C Library; see the file COPYING.LIB.  If\n    not, see <https://www.gnu.org/licenses/>.  */\n \n-#include <array_length.h>\n #include <libc-symbols.h>\n #include <stdlib.h>\n+#include <time.h>\n \n extern void *__libc_malloc (size_t size);\n extern void *__libc_calloc (size_t n, size_t size);\n \n+__thread unsigned int seed = 0;\n+\n int aligned_alloc_count = 0;\n int libc_malloc_count = 0;\n int libc_calloc_count = 0;\n \n-/* Get a random alignment value.  Biased towards the smaller values.  Must be\n-   a power of 2. */\n-static size_t get_random_alignment (void)\n-{\n-  size_t aligns[] = {\n-    1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384\n-  };\n-\n-  return aligns[random () % array_length (aligns)];\n-}\n-\n-static void *get_random_alloc (size_t size)\n+static void *\n+get_random_alloc (size_t size)\n {\n   void *retval;\n   size_t align;\n+  struct timespec tp;\n+\n+  if (seed == 0)\n+    {\n+      clock_gettime (CLOCK_REALTIME, &tp);\n+      seed = tp.tv_nsec;\n+    }\n \n-  switch (random() % 3)\n-  {\n+  switch (rand_r (&seed) % 3)\n+    {\n     case 1:\n-      align = get_random_alignment ();\n+      /* Get a random alignment value.  Biased towards the smaller\n+       * values up to 16384. Must be a power of 2. */\n+      align = 1 << rand_r (&seed) % 15;\n       retval = aligned_alloc (align, size);\n       aligned_alloc_count++;\n       break;\n@@ -59,13 +60,13 @@ static void *get_random_alloc (size_t size)\n       retval = __libc_malloc (size);\n       libc_malloc_count++;\n       break;\n-  }\n+    }\n \n   return retval;\n }\n \n-\n-void * __random_malloc (size_t size)\n+void *\n+__random_malloc (size_t size)\n {\n   return get_random_alloc (size);\n }\n\ncommit 5d2a931a8167a288374c3a38dc10fe0492ab5ffe\nAuthor: Miguel Martín <mmartinv@redhat.com>\nDate:   Tue Jul 16 17:14:57 2024 +0200\n\n    malloc: add multi-threaded tests for aligned_alloc/calloc/malloc\n    \n    Improve aligned_alloc/calloc/malloc test coverage by adding\n    multi-threaded tests with random memory allocations and with/without\n    cross-thread memory deallocations.\n    \n    Perform a number of memory allocation calls with random sizes limited\n    to 0xffff.\n    \n    Use the existing DSO ('malloc/tst-aligned_alloc-lib.c') to randomize\n    allocator selection.\n    \n    The multi-threaded allocation/deallocation is staged as described below:\n    \n    - Stage 1: Half of the threads will be allocating memory and the\n      other half will be waiting for them to finish the allocation.\n    - Stage 2: Half of the threads will be allocating memory and the\n      other half will be deallocating memory.\n    - Stage 3: Half of the threads will be deallocating memory and the\n      second half waiting on them to finish.\n    \n    Add 'malloc/tst-aligned-alloc-random-thread.c' where each thread will\n    deallocate only the memory that was previously allocated by itself.\n    \n    Add 'malloc/tst-aligned-alloc-random-thread-cross.c' where each thread\n    will deallocate memory that was previously allocated by another thread.\n    \n    The intention is to be able to utilize existing malloc testing to ensure\n    that similar allocation APIs are also exposed to the same rigors.\n    Reviewed-by: Arjun Shankar <arjun@redhat.com>\n    \n    (cherry picked from commit b0fbcb7d0051a68baf26b2aed51a8a31c34d68e5)\n\ndiff --git a/malloc/Makefile b/malloc/Makefile\nindex 02aff1bd1d..98d507a6eb 100644\n--- a/malloc/Makefile\n+++ b/malloc/Makefile\n@@ -28,6 +28,8 @@ tests := \\\n   mallocbug \\\n   tst-aligned-alloc \\\n   tst-aligned-alloc-random \\\n+  tst-aligned-alloc-random-thread \\\n+  tst-aligned-alloc-random-thread-cross \\\n   tst-alloc_buffer \\\n   tst-calloc \\\n   tst-free-errno \\\n@@ -151,6 +153,8 @@ ifeq ($(have-GLIBC_2.23)$(build-shared),yesyes)\n # the tests expect specific internal behavior that is changed due to linking to\n # libmcheck.a.\n tests-exclude-mcheck = \\\n+  tst-aligned-alloc-random-thread \\\n+  tst-aligned-alloc-random-thread-cross \\\n   tst-compathooks-off \\\n   tst-compathooks-on \\\n   tst-malloc-backtrace \\\n@@ -415,7 +419,11 @@ $(objpfx)tst-mallocstate: $(objpfx)libc_malloc_debug.so\n $(objpfx)tst-mallocstate-malloc-check: $(objpfx)libc_malloc_debug.so\n \n $(objpfx)tst-aligned-alloc-random.out: $(objpfx)tst-aligned_alloc-lib.so\n+$(objpfx)tst-aligned-alloc-random-thread.out: $(objpfx)tst-aligned_alloc-lib.so\n+$(objpfx)tst-aligned-alloc-random-thread-cross.out: $(objpfx)tst-aligned_alloc-lib.so\n $(objpfx)tst-malloc-random.out: $(objpfx)tst-aligned_alloc-lib.so\n \n tst-aligned-alloc-random-ENV = LD_PRELOAD=$(objpfx)tst-aligned_alloc-lib.so\n+tst-aligned-alloc-random-thread-ENV = LD_PRELOAD=$(objpfx)tst-aligned_alloc-lib.so\n+tst-aligned-alloc-random-thread-cross-ENV = LD_PRELOAD=$(objpfx)tst-aligned_alloc-lib.so\n tst-malloc-random-ENV = LD_PRELOAD=$(objpfx)tst-aligned_alloc-lib.so\ndiff --git a/malloc/tst-aligned-alloc-random-thread-cross.c b/malloc/tst-aligned-alloc-random-thread-cross.c\nnew file mode 100644\nindex 0000000000..360ecc56ee\n--- /dev/null\n+++ b/malloc/tst-aligned-alloc-random-thread-cross.c\n@@ -0,0 +1,19 @@\n+/* multi-threaded memory allocation and cross-thread deallocation test.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public License as\n+   published by the Free Software Foundation; either version 2.1 of the\n+   License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; see the file COPYING.LIB.  If\n+   not, see <https://www.gnu.org/licenses/>.  */\n+#define CROSS_THREAD_DEALLOC\n+#include \"tst-aligned-alloc-random-thread.c\"\ndiff --git a/malloc/tst-aligned-alloc-random-thread.c b/malloc/tst-aligned-alloc-random-thread.c\nnew file mode 100644\nindex 0000000000..e95f79250a\n--- /dev/null\n+++ b/malloc/tst-aligned-alloc-random-thread.c\n@@ -0,0 +1,145 @@\n+/* multi-threaded memory allocation/deallocation test.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public License as\n+   published by the Free Software Foundation; either version 2.1 of the\n+   License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; see the file COPYING.LIB.  If\n+   not, see <https://www.gnu.org/licenses/>.  */\n+\n+#include <stdio.h>\n+#include <stdlib.h>\n+#include <string.h>\n+#include <support/check.h>\n+#include <support/support.h>\n+#include <support/xthread.h>\n+#include <support/test-driver.h>\n+#include <sys/sysinfo.h>\n+#include <unistd.h>\n+\n+#ifndef ITERATIONS\n+#  define ITERATIONS 16\n+#endif\n+\n+#ifndef NUM_THREADS\n+#  define NUM_THREADS 8\n+#endif\n+\n+#ifndef NUM_ALLOCATIONS\n+#  define NUM_ALLOCATIONS 2048\n+#endif\n+\n+static pthread_barrier_t barrier;\n+\n+__thread unsigned int seed;\n+\n+typedef struct\n+{\n+  int id;\n+  pthread_t thread;\n+} thread;\n+\n+thread threads[NUM_THREADS];\n+\n+void *allocations[NUM_THREADS][NUM_ALLOCATIONS];\n+\n+void\n+run_thread_dealloc (int id)\n+{\n+  for (int i = 0; i < NUM_ALLOCATIONS; i++)\n+    {\n+      free (allocations[id][i]);\n+      allocations[id][i] = NULL;\n+    }\n+}\n+\n+void\n+run_thread_alloc (int id)\n+{\n+  size_t msb, size;\n+  for (int i = 0; i < NUM_ALLOCATIONS; i++)\n+    {\n+      msb = 1 << rand_r (&seed) % 16;\n+      size = msb + rand_r (&seed) % msb;\n+      allocations[id][i] = malloc (size);\n+      TEST_VERIFY_EXIT (allocations[id][i] != NULL);\n+    }\n+}\n+\n+void *\n+run_allocations (void *arg)\n+{\n+  int id = *((int *) arg);\n+  seed = time (NULL) + id;\n+\n+  /* Stage 1: First half o the threads allocating memory and the second\n+   * half waiting for them to finish\n+   */\n+  if (id < NUM_THREADS / 2)\n+    run_thread_alloc (id);\n+\n+  xpthread_barrier_wait (&barrier);\n+\n+  /* Stage 2: Half of the threads allocationg memory and the other\n+   * half deallocating:\n+   * - In the non cross-thread dealloc scenario the first half will be\n+   *   deallocating the memory allocated by themselves in stage 1 and the\n+   *   second half will be allocating memory.\n+   * - In the cross-thread dealloc scenario the first half will continue\n+   *   to allocate memory and the second half will deallocate the memory\n+   *   allocated by the first half in stage 1.\n+   */\n+  if (id < NUM_THREADS / 2)\n+#ifndef CROSS_THREAD_DEALLOC\n+    run_thread_dealloc (id);\n+#else\n+    run_thread_alloc (id + NUM_THREADS / 2);\n+#endif\n+  else\n+#ifndef CROSS_THREAD_DEALLOC\n+    run_thread_alloc (id);\n+#else\n+    run_thread_dealloc (id - NUM_THREADS / 2);\n+#endif\n+\n+  xpthread_barrier_wait (&barrier);\n+\n+  // Stage 3: Second half of the threads deallocating and the first half\n+  // waiting for them to finish.\n+  if (id >= NUM_THREADS / 2)\n+    run_thread_dealloc (id);\n+\n+  return NULL;\n+}\n+\n+static int\n+do_test (void)\n+{\n+  xpthread_barrier_init (&barrier, NULL, NUM_THREADS);\n+\n+  for (int i = 0; i < ITERATIONS; i++)\n+    {\n+      for (int t = 0; t < NUM_THREADS; t++)\n+\t{\n+\t  threads[t].id = t;\n+\t  threads[t].thread\n+\t      = xpthread_create (NULL, run_allocations, &threads[t].id);\n+\t}\n+\n+      for (int t = 0; t < NUM_THREADS; t++)\n+\txpthread_join (threads[t].thread);\n+    }\n+\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\n\ncommit 65fbcfe58991194301a7e4fb9c53ab936573e711\nAuthor: Arjun Shankar <arjun@redhat.com>\nDate:   Mon Jul 29 14:30:59 2024 +0200\n\n    manual/stdio: Clarify putc and putwc\n    \n    The manual entry for `putc' described what \"most systems\" do instead of\n    describing the glibc implementation and its guarantees.  This commit\n    fixes that by warning that putc may be implemented as a macro that\n    double-evaluates `stream', and removing the performance claim.\n    \n    Even though the current `putc' implementation does not double-evaluate\n    `stream', offering this obscure guarantee as an extension to what\n    POSIX allows does not seem very useful.\n    \n    The entry for `putwc' is also edited to bring it in line with `putc'.\n    Reviewed-by: Florian Weimer <fweimer@redhat.com>\n    \n    (cherry picked from commit 10de4a47ef3f481592e3c62eb07bcda23e9fde4d)\n\ndiff --git a/manual/stdio.texi b/manual/stdio.texi\nindex f5e289d58a..f9529a098d 100644\n--- a/manual/stdio.texi\n+++ b/manual/stdio.texi\n@@ -903,21 +903,21 @@ This function is a GNU extension.\n @deftypefun int putc (int @var{c}, FILE *@var{stream})\n @standards{ISO, stdio.h}\n @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}\n-This is just like @code{fputc}, except that most systems implement it as\n+This is just like @code{fputc}, except that it may be implemented as\n a macro, making it faster.  One consequence is that it may evaluate the\n @var{stream} argument more than once, which is an exception to the\n-general rule for macros.  @code{putc} is usually the best function to\n-use for writing a single character.\n+general rule for macros.  Therefore, @var{stream} should never be an\n+expression with side-effects.\n @end deftypefun\n \n @deftypefun wint_t putwc (wchar_t @var{wc}, FILE *@var{stream})\n @standards{ISO, wchar.h}\n @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}\n-This is just like @code{fputwc}, except that it can be implement as\n+This is just like @code{fputwc}, except that it may be implemented as\n a macro, making it faster.  One consequence is that it may evaluate the\n @var{stream} argument more than once, which is an exception to the\n-general rule for macros.  @code{putwc} is usually the best function to\n-use for writing a single wide character.\n+general rule for macros.  Therefore, @var{stream} should never be an\n+expression with side-effects.\n @end deftypefun\n \n @deftypefun int putc_unlocked (int @var{c}, FILE *@var{stream})\n\ncommit 132a72f93cb4ad9f16b8469dc061de5f75f6a44e\nAuthor: Lukas Bulwahn <lukas.bulwahn@redhat.com>\nDate:   Mon Jul 29 11:08:17 2024 +0200\n\n    manual: make setrlimit() description less ambiguous\n    \n    The existing description for setrlimit() has some ambiguity. It could be\n    understood to have the semantics of getrlimit(), i.e., the limits from the\n    process are stored in the provided rlp pointer.\n    \n    Make the description more explicit that rlp are the input values, and that\n    the limits of the process is changed with this function.\n    \n    Reviewed-by: Florian Weimer <fweimer@redhat.com>\n    (cherry picked from commit aedbf08891069fc029ed021e4dba933eb877b394)\n\ndiff --git a/manual/resource.texi b/manual/resource.texi\nindex c9b21dedeb..25966bcb64 100644\n--- a/manual/resource.texi\n+++ b/manual/resource.texi\n@@ -192,8 +192,8 @@ If the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a\n @standards{BSD, sys/resource.h}\n @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}\n @c Direct syscall on most systems; lock-taking critical section on HURD.\n-Store the current and maximum limits for the resource @var{resource}\n-in @code{*@var{rlp}}.\n+Change the current and maximum limits of the process for the resource\n+@var{resource} to the values provided in @code{*@var{rlp}}.\n \n The return value is @code{0} on success and @code{-1} on failure.  The\n following @code{errno} error condition is possible:\n\ncommit 509166c9a53ad81217a28cc67ba2a688f02fc477\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Wed Jun 26 11:27:54 2024 +0200\n\n    Enhance test coverage for strnlen, wcsnlen\n    \n    This commit adds string/test-strnlen-nonarray and\n    wcsmbs/test-wcsnlen-nonarray.\n    \n    Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>\n    (cherry picked from commit 783d4c0b81889c39a9ddf13b60d0fde4040fb1c0)\n\ndiff --git a/string/Makefile b/string/Makefile\nindex 8f31fa49e6..2e20fc00fd 100644\n--- a/string/Makefile\n+++ b/string/Makefile\n@@ -184,6 +184,7 @@ tests := \\\n   test-strncpy \\\n   test-strndup \\\n   test-strnlen \\\n+  test-strnlen-nonarray \\\n   test-strpbrk \\\n   test-strrchr \\\n   test-strspn \\\ndiff --git a/string/test-Xnlen-nonarray.c b/string/test-Xnlen-nonarray.c\nnew file mode 100644\nindex 0000000000..499bef2041\n--- /dev/null\n+++ b/string/test-Xnlen-nonarray.c\n@@ -0,0 +1,133 @@\n+/* Test non-array inputs to string length functions.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+/* This skeleton file is included from string/test-strnlen-nonarray.c\n+   and wcsmbs/test-wcsnlen-nonarray.c to test that reading of the array\n+   stops at the first null character.\n+\n+   TEST_IDENTIFIER must be the test function identifier.  TEST_NAME is\n+   the same as a string.\n+\n+   CHAR must be defined as the character type.  */\n+\n+#include <array_length.h>\n+#include <string.h>\n+#include <support/check.h>\n+#include <support/next_to_fault.h>\n+#include <support/test-driver.h>\n+#include <sys/param.h>\n+#include <unistd.h>\n+\n+typedef __typeof (TEST_IDENTIFIER) *proto_t;\n+\n+#define TEST_MAIN\n+#include \"test-string.h\"\n+\n+IMPL (TEST_IDENTIFIER, 1)\n+\n+static int\n+test_main (void)\n+{\n+  enum { buffer_length = 256 };\n+  TEST_VERIFY_EXIT (sysconf (_SC_PAGESIZE) >= buffer_length);\n+\n+  test_init ();\n+\n+  /* Buffer layout: There are a_count 'A' character followed by\n+     zero_count null character, for a total of buffer_length\n+     character:\n+\n+     AAAAA...AAAAA 00000 ... 00000 (unmapped page follows)\n+     \\           / \\             /\n+       (a_count)     (zero_count)\n+       \\___ (buffer_length) ___/\n+          ^\n+          |\n+          start_offset\n+\n+    The buffer length does not change, but a_count (and thus _zero)\n+    and start_offset vary.\n+\n+    If start_offset == buffer_length, only 0 is a valid length\n+    argument.  The result is 0.\n+\n+    Otherwwise, if zero_count > 0 (if there a null characters in the\n+    buffer), then any length argument is valid.  If start_offset <\n+    a_count (i.e., there is a non-null character at start_offset), the\n+    result is the minimum of a_count - start_offset and the length\n+    argument.  Otherwise the result is 0.\n+\n+    Otherwise, there are no null characters before the unmapped page.\n+    The length argument must not be greater than buffer_length -\n+    start_offset, and the result is the length argument.  */\n+\n+  struct support_next_to_fault ntf\n+    = support_next_to_fault_allocate (buffer_length * sizeof (CHAR));\n+  CHAR *buffer = (CHAR *) ntf.buffer;\n+\n+  FOR_EACH_IMPL (impl, 0)\n+    {\n+      printf (\"info: testing %s\\n\", impl->name);\n+      for (size_t i = 0; i < buffer_length; ++i)\n+        buffer[i] = 'A';\n+\n+      for (int zero_count = 0; zero_count <= buffer_length; ++zero_count)\n+        {\n+          if (zero_count > 0)\n+            buffer[buffer_length - zero_count] = 0;\n+          int a_count = buffer_length - zero_count;\n+          for (int start_offset = 0; start_offset <= buffer_length;\n+               ++start_offset)\n+            {\n+              CHAR *start_pointer = buffer + start_offset;\n+              if (start_offset == buffer_length)\n+                TEST_COMPARE (CALL (impl, buffer + start_offset, 0), 0);\n+              else if (zero_count > 0)\n+                for (int length_argument = 0;\n+                     length_argument <= 2 * buffer_length;\n+                     ++length_argument)\n+                  {\n+                    if (test_verbose)\n+                      printf (\"zero_count=%d a_count=%d start_offset=%d\"\n+                              \" length_argument=%d\\n\",\n+                              zero_count, a_count, start_offset,\n+                              length_argument);\n+                    if (start_offset < a_count)\n+                      TEST_COMPARE (CALL (impl, start_pointer, length_argument),\n+                                    MIN (a_count - start_offset,\n+                                         length_argument));\n+                    else\n+                      TEST_COMPARE (CALL (impl, start_pointer, length_argument),\n+                                    0);\n+                  }\n+              else\n+                for (int length_argument = 0;\n+                     length_argument <= buffer_length - start_offset;\n+                     ++length_argument)\n+                  TEST_COMPARE (CALL (impl, start_pointer, length_argument),\n+                                length_argument);\n+            }\n+        }\n+    }\n+\n+  support_next_to_fault_free (&ntf);\n+\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\ndiff --git a/string/test-strnlen-nonarray.c b/string/test-strnlen-nonarray.c\nnew file mode 100644\nindex 0000000000..0ad05756d9\n--- /dev/null\n+++ b/string/test-strnlen-nonarray.c\n@@ -0,0 +1,4 @@\n+#define TEST_IDENTIFIER strnlen\n+#define TEST_NAME \"strnlen\"\n+typedef char CHAR;\n+#include \"test-Xnlen-nonarray.c\"\ndiff --git a/wcsmbs/Makefile b/wcsmbs/Makefile\nindex 1cddd8cc6d..c51c9b4f1f 100644\n--- a/wcsmbs/Makefile\n+++ b/wcsmbs/Makefile\n@@ -160,6 +160,7 @@ tests := \\\n   test-wcsncmp \\\n   test-wcsncpy \\\n   test-wcsnlen \\\n+  test-wcsnlen-nonarray \\\n   test-wcspbrk \\\n   test-wcsrchr \\\n   test-wcsspn \\\ndiff --git a/wcsmbs/test-wcsnlen-nonarray.c b/wcsmbs/test-wcsnlen-nonarray.c\nnew file mode 100644\nindex 0000000000..a4b21fecd3\n--- /dev/null\n+++ b/wcsmbs/test-wcsnlen-nonarray.c\n@@ -0,0 +1,5 @@\n+#include <wchar.h>\n+#define TEST_IDENTIFIER wcsnlen\n+#define TEST_NAME \"wcsnlen\"\n+typedef wchar_t CHAR;\n+#include \"../string/test-Xnlen-nonarray.c\"\n\ncommit 46f19b234244f4654b9e3898ac1c27de86068222\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Thu Jun 27 16:26:56 2024 +0200\n\n    Enhanced test coverage for strncmp, wcsncmp\n    \n    Add string/test-strncmp-nonarray and\n    wcsmbs/test-wcsncmp-nonarray.\n    \n    This is the test that uncovered bug 31934.  Test run time\n    is more than one minute on a fairly current system, so turn\n    these into xtests that do not run automatically.\n    \n    Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>\n    (cherry picked from commit 54252394c25ddf0062e288d4a6ab7a885f8ae009)\n\ndiff --git a/string/Makefile b/string/Makefile\nindex 2e20fc00fd..1dff405c27 100644\n--- a/string/Makefile\n+++ b/string/Makefile\n@@ -236,7 +236,10 @@ tests-unsupported += $(tests-translation)\n endif\n \n # This test allocates a lot of memory and can run for a long time.\n-xtests = tst-strcoll-overflow\n+xtests += tst-strcoll-overflow\n+\n+# This test runs for a long time.\n+xtests += test-strncmp-nonarray\n \n # This test needs libdl.\n ifeq (yes,$(build-shared))\ndiff --git a/string/test-Xncmp-nonarray.c b/string/test-Xncmp-nonarray.c\nnew file mode 100644\nindex 0000000000..9f3a3ca75d\n--- /dev/null\n+++ b/string/test-Xncmp-nonarray.c\n@@ -0,0 +1,183 @@\n+/* Test non-array inputs to string comparison functions.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+/* This skeleton file is included from string/test-strncmp-nonarray.c and\n+   wcsmbs/test-wcsncmp-nonarray.c to test that reading of the arrays stops\n+   at the first null character.\n+\n+   TEST_IDENTIFIER must be the test function identifier.  TEST_NAME is\n+   the same as a string.\n+\n+   CHAR must be defined as the character type.  */\n+\n+#include <array_length.h>\n+#include <string.h>\n+#include <support/check.h>\n+#include <support/next_to_fault.h>\n+#include <support/test-driver.h>\n+#include <sys/param.h>\n+#include <unistd.h>\n+\n+/* Much shorter than test-Xnlen-nonarray.c because of deeply nested loops.  */\n+enum { buffer_length = 80 };\n+\n+/* The test buffer layout follows what is described test-Xnlen-nonarray.c,\n+   except that there two buffers, left and right.  The variables\n+   a_count, zero_count, start_offset are all duplicated.  */\n+\n+/* Return the maximum string length for a string that starts at\n+   start_offset.  */\n+static int\n+string_length (int a_count, int start_offset)\n+{\n+  if (start_offset == buffer_length || start_offset >= a_count)\n+    return 0;\n+  else\n+    return a_count - start_offset;\n+}\n+\n+/* This is the valid maximum length argument computation for\n+   strnlen/wcsnlen.  See text-Xnlen-nonarray.c.  */\n+static int\n+maximum_length (int start_offset, int zero_count)\n+{\n+  if (start_offset == buffer_length)\n+    return 0;\n+  else if (zero_count > 0)\n+    /* Effectively unbounded, but we need to stop fairly low,\n+       otherwise testing takes too long.  */\n+    return buffer_length + 32;\n+  else\n+    return buffer_length - start_offset;\n+}\n+\n+typedef __typeof (TEST_IDENTIFIER) *proto_t;\n+\n+#define TEST_MAIN\n+#include \"test-string.h\"\n+\n+IMPL (TEST_IDENTIFIER, 1)\n+\n+static int\n+test_main (void)\n+{\n+  TEST_VERIFY_EXIT (sysconf (_SC_PAGESIZE) >= buffer_length);\n+  test_init ();\n+\n+  struct support_next_to_fault left_ntf\n+    = support_next_to_fault_allocate (buffer_length * sizeof (CHAR));\n+  CHAR *left_buffer = (CHAR *) left_ntf.buffer;\n+  struct support_next_to_fault right_ntf\n+    = support_next_to_fault_allocate (buffer_length * sizeof (CHAR));\n+  CHAR *right_buffer = (CHAR *) right_ntf.buffer;\n+\n+  FOR_EACH_IMPL (impl, 0)\n+    {\n+      printf (\"info: testing %s\\n\", impl->name);\n+      for (size_t i = 0; i < buffer_length; ++i)\n+        left_buffer[i] = 'A';\n+\n+      for (int left_zero_count = 0; left_zero_count <= buffer_length;\n+           ++left_zero_count)\n+        {\n+          if (left_zero_count > 0)\n+            left_buffer[buffer_length - left_zero_count] = 0;\n+          int left_a_count = buffer_length - left_zero_count;\n+          for (size_t i = 0; i < buffer_length; ++i)\n+            right_buffer[i] = 'A';\n+          for (int right_zero_count = 0; right_zero_count <= buffer_length;\n+               ++right_zero_count)\n+            {\n+              if (right_zero_count > 0)\n+                right_buffer[buffer_length - right_zero_count] = 0;\n+              int right_a_count = buffer_length - right_zero_count;\n+              for (int left_start_offset = 0;\n+                   left_start_offset <= buffer_length;\n+                   ++left_start_offset)\n+                {\n+                  CHAR *left_start_pointer = left_buffer + left_start_offset;\n+                  int left_maxlen\n+                    = maximum_length (left_start_offset, left_zero_count);\n+                  int left_length\n+                    = string_length (left_a_count, left_start_offset);\n+                  for (int right_start_offset = 0;\n+                       right_start_offset <= buffer_length;\n+                       ++right_start_offset)\n+                    {\n+                      CHAR *right_start_pointer\n+                        = right_buffer + right_start_offset;\n+                      int right_maxlen\n+                        = maximum_length (right_start_offset, right_zero_count);\n+                      int right_length\n+                        = string_length (right_a_count, right_start_offset);\n+\n+                      /* Maximum length is modelled after strnlen/wcsnlen,\n+                         and must be valid for both pointer arguments at\n+                         the same time.  */\n+                      int maxlen = MIN (left_maxlen, right_maxlen);\n+\n+                      for (int length_argument = 0; length_argument <= maxlen;\n+                           ++length_argument)\n+                        {\n+                          if (test_verbose)\n+                            {\n+                              printf (\"left: zero_count=%d\"\n+                                      \" a_count=%d start_offset=%d\\n\",\n+                                      left_zero_count, left_a_count,\n+                                      left_start_offset);\n+                              printf (\"right: zero_count=%d\"\n+                                      \" a_count=%d start_offset=%d\\n\",\n+                                      right_zero_count, right_a_count,\n+                                      right_start_offset);\n+                              printf (\"length argument: %d\\n\",\n+                                      length_argument);\n+                            }\n+\n+                          /* Effective lengths bounded by length argument.\n+                             The effective length determines the\n+                             outcome of the comparison.  */\n+                          int left_effective\n+                            = MIN (left_length, length_argument);\n+                          int right_effective\n+                            = MIN (right_length, length_argument);\n+                          if (left_effective == right_effective)\n+                            TEST_COMPARE (CALL (impl,\n+                                                left_start_pointer,\n+                                                right_start_pointer,\n+                                                length_argument), 0);\n+                          else if (left_effective < right_effective)\n+                            TEST_COMPARE (CALL (impl,\n+                                                left_start_pointer,\n+                                                right_start_pointer,\n+                                                length_argument) < 0, 1);\n+                          else\n+                            TEST_COMPARE (CALL (impl,\n+                                                left_start_pointer,\n+                                                right_start_pointer,\n+                                                length_argument) > 0, 1);\n+                        }\n+                    }\n+                }\n+            }\n+        }\n+    }\n+\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\ndiff --git a/string/test-strncmp-nonarray.c b/string/test-strncmp-nonarray.c\nnew file mode 100644\nindex 0000000000..581e52d01b\n--- /dev/null\n+++ b/string/test-strncmp-nonarray.c\n@@ -0,0 +1,4 @@\n+#define TEST_IDENTIFIER strncmp\n+#define TEST_NAME \"strncmp\"\n+typedef char CHAR;\n+#include \"test-Xncmp-nonarray.c\"\ndiff --git a/wcsmbs/Makefile b/wcsmbs/Makefile\nindex c51c9b4f1f..63adf0e8ef 100644\n--- a/wcsmbs/Makefile\n+++ b/wcsmbs/Makefile\n@@ -206,6 +206,10 @@ tests := \\\n   wcsmbs-tst1 \\\n   # tests\n \n+# This test runs for a long time.\n+xtests += test-wcsncmp-nonarray\n+\n+\n include ../Rules\n \n ifeq ($(run-built-tests),yes)\ndiff --git a/wcsmbs/test-wcsncmp-nonarray.c b/wcsmbs/test-wcsncmp-nonarray.c\nnew file mode 100644\nindex 0000000000..1ad9ebd8fd\n--- /dev/null\n+++ b/wcsmbs/test-wcsncmp-nonarray.c\n@@ -0,0 +1,5 @@\n+#include <wchar.h>\n+#define TEST_IDENTIFIER wcsncmp\n+#define TEST_NAME \"wcsncmp\"\n+typedef wchar_t CHAR;\n+#include \"../string/test-Xncmp-nonarray.c\"\n\ncommit 3433a358428bcec2d203fa408b85f442c9a465ca\nAuthor: H.J. Lu <hjl.tools@gmail.com>\nDate:   Wed Jul 24 14:05:13 2024 -0700\n\n    linux: Update the mremap C implementation [BZ #31968]\n    \n    Update the mremap C implementation to support the optional argument for\n    MREMAP_DONTUNMAP added in Linux 5.7 since it may not always be correct\n    to implement a variadic function as a non-variadic function on all Linux\n    targets.  Return MAP_FAILED and set errno to EINVAL for unknown flag bits.\n    This fixes BZ #31968.\n    \n    Note: A test must be added when a new flag bit is introduced.\n    \n    Signed-off-by: H.J. Lu <hjl.tools@gmail.com>\n    Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>\n    (cherry picked from commit 6c40cb0e9f893d49dc7caee580a055de53562206)\n\ndiff --git a/NEWS b/NEWS\nindex 6b62f55658..5948704ef9 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -11,6 +11,7 @@ The following bugs are resolved with this release:\n \n   [30081] resolv: Do not wait for non-existing second DNS response after error\n   [31890] resolv: Allow short error responses to match any DNS query\n+  [31968] mremap implementation in C does not handle arguments correctly\n \f\n Version 2.40\n \ndiff --git a/sysdeps/unix/sysv/linux/mremap.c b/sysdeps/unix/sysv/linux/mremap.c\nindex 4f770799c4..1ada5c1f40 100644\n--- a/sysdeps/unix/sysv/linux/mremap.c\n+++ b/sysdeps/unix/sysv/linux/mremap.c\n@@ -20,6 +20,12 @@\n #include <sysdep.h>\n #include <stdarg.h>\n #include <stddef.h>\n+#include <errno.h>\n+\n+#define MREMAP_KNOWN_BITS \\\n+  (MREMAP_MAYMOVE \\\n+   | MREMAP_FIXED \\\n+   | MREMAP_DONTUNMAP)\n \n void *\n __mremap (void *addr, size_t old_len, size_t new_len, int flags, ...)\n@@ -27,7 +33,13 @@ __mremap (void *addr, size_t old_len, size_t new_len, int flags, ...)\n   va_list va;\n   void *new_addr = NULL;\n \n-  if (flags & MREMAP_FIXED)\n+  if (flags & ~(MREMAP_KNOWN_BITS))\n+    {\n+      __set_errno (EINVAL);\n+      return MAP_FAILED;\n+    }\n+\n+  if (flags & (MREMAP_FIXED | MREMAP_DONTUNMAP))\n     {\n       va_start (va, flags);\n       new_addr = va_arg (va, void *);\n\ncommit 2eb2d78ca75d7432bd1d11d227f4c899554ea02e\nAuthor: H.J. Lu <hjl.tools@gmail.com>\nDate:   Wed Jul 24 14:05:14 2024 -0700\n\n    mremap: Update manual entry\n    \n    Update mremap manual entry:\n    \n    1. Change mremap to variadic.\n    2. Document MREMAP_FIXED and MREMAP_DONTUNMAP.\n    \n    Signed-off-by: H.J. Lu <hjl.tools@gmail.com>\n    Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>\n    (cherry picked from commit cb2dee4eccf46642eef588bee64f9c875c408f1c)\n\ndiff --git a/NEWS b/NEWS\nindex 5948704ef9..8da0408ad9 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -10,6 +10,7 @@ Version 2.40.1\n The following bugs are resolved with this release:\n \n   [30081] resolv: Do not wait for non-existing second DNS response after error\n+  [31968] mremap implementation in C does not handle arguments correctly\n   [31890] resolv: Allow short error responses to match any DNS query\n   [31968] mremap implementation in C does not handle arguments correctly\n \f\ndiff --git a/manual/llio.texi b/manual/llio.texi\nindex 6f0a48609b..ea84196abd 100644\n--- a/manual/llio.texi\n+++ b/manual/llio.texi\n@@ -1892,7 +1892,7 @@ There is no existing mapping in at least part of the given region.\n \n @end deftypefun\n \n-@deftypefun {void *} mremap (void *@var{address}, size_t @var{length}, size_t @var{new_length}, int @var{flag})\n+@deftypefun {void *} mremap (void *@var{address}, size_t @var{length}, size_t @var{new_length}, int @var{flag}, ... /* void *@var{new_address} */)\n @standards{GNU, sys/mman.h}\n @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}\n \n@@ -1901,12 +1901,40 @@ area. @var{address} and @var{length} must cover a region entirely mapped\n in the same @code{mmap} statement.  A new mapping with the same\n characteristics will be returned with the length @var{new_length}.\n \n-One option is possible, @code{MREMAP_MAYMOVE}.  If it is given in\n-@var{flags}, the system may remove the existing mapping and create a new\n-one of the desired length in another location.\n+Possible flags are\n \n-The address of the resulting mapping is returned, or @math{-1}.  Possible\n-error codes include:\n+@table @code\n+\n+@item MREMAP_MAYMOVE\n+If it is given in @var{flags}, the system may remove the existing mapping\n+and create a new one of the desired length in another location.\n+\n+@item MREMAP_FIXED\n+If it is given in @var{flags}, @code{mremap} accepts a fifth argument,\n+@code{void *new_address}, which specifies a page-aligned address to\n+which the mapping must be moved.  Any previous mapping at the address\n+range specified by @var{new_address} and @var{new_size} is unmapped.\n+\n+@code{MREMAP_FIXED} must be used together with @code{MREMAP_MAYMOVE}.\n+\n+@item MREMAP_DONTUNMAP\n+If it is given in @var{flags}, @code{mremap} accepts a fifth argument,\n+@code{void *new_address}, which specifies a page-aligned address.  Any\n+previous mapping at the address range specified by @var{new_address} and\n+@var{new_size} is unmapped.  If @var{new_address} is @code{NULL}, the\n+kernel chooses the page-aligned address at which to create the mapping.\n+Otherwise, the kernel takes it as a hint about where to place the mapping.\n+The mapping at the address range specified by @var{old_address} and\n+@var{old_size} isn't unmapped.\n+\n+@code{MREMAP_DONTUNMAP} must be used together with @code{MREMAP_MAYMOVE}.\n+@var{old_size} must be the same as @var{new_size}.  This flag bit is\n+Linux-specific.\n+\n+@end table\n+\n+The address of the resulting mapping is returned, or @code{MAP_FAILED}.\n+Possible error codes include:\n \n @table @code\n \n@@ -1915,7 +1943,7 @@ There is no existing mapping in at least part of the original region, or\n the region covers two or more distinct mappings.\n \n @item EINVAL\n-The address given is misaligned or inappropriate.\n+Any arguments are inappropriate, including unknown @var{flags} values.\n \n @item EAGAIN\n The region has pages locked, and if extended it would exceed the\n\ncommit ca53bc68ab92ab413a7d53e951227d380a85ebd8\nAuthor: H.J. Lu <hjl.tools@gmail.com>\nDate:   Wed Jul 24 14:05:15 2024 -0700\n\n    Add mremap tests\n    \n    Add tests for MREMAP_MAYMOVE and MREMAP_FIXED.  On Linux, also test\n    MREMAP_DONTUNMAP.\n    \n    Signed-off-by: H.J. Lu <hjl.tools@gmail.com>\n    Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>\n    (cherry picked from commit ff0320bec2810192d453c579623482fab87bfa01)\n\ndiff --git a/misc/Makefile b/misc/Makefile\nindex 5d17c562fe..7b7f8351bf 100644\n--- a/misc/Makefile\n+++ b/misc/Makefile\n@@ -257,6 +257,8 @@ tests := \\\n   tst-mntent-blank-passno \\\n   tst-mntent-escape \\\n   tst-mntent2 \\\n+  tst-mremap1 \\\n+  tst-mremap2 \\\n   tst-preadvwritev \\\n   tst-preadvwritev2 \\\n   tst-preadvwritev64 \\\ndiff --git a/misc/tst-mremap1.c b/misc/tst-mremap1.c\nnew file mode 100644\nindex 0000000000..0469991a6c\n--- /dev/null\n+++ b/misc/tst-mremap1.c\n@@ -0,0 +1,46 @@\n+/* Test mremap with MREMAP_MAYMOVE.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <errno.h>\n+#include <sys/mman.h>\n+#include <support/xstdlib.h>\n+#include <support/xunistd.h>\n+#include <support/check.h>\n+#include <support/test-driver.h>\n+\n+static int\n+do_test (void)\n+{\n+  size_t old_size = getpagesize ();\n+  char *old_addr = xmmap (NULL, old_size, PROT_READ | PROT_WRITE,\n+\t\t\t  MAP_PRIVATE | MAP_ANONYMOUS, -1);\n+  old_addr[0] = 1;\n+  old_addr[old_size - 1] = 2;\n+\n+  /* Test MREMAP_MAYMOVE.  */\n+  size_t new_size = old_size + old_size;\n+  char *new_addr = mremap (old_addr, old_size, new_size, MREMAP_MAYMOVE);\n+  TEST_VERIFY_EXIT (new_addr != MAP_FAILED);\n+  new_addr[0] = 1;\n+  new_addr[new_size - 1] = 2;\n+  xmunmap (new_addr, new_size);\n+\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\ndiff --git a/misc/tst-mremap2.c b/misc/tst-mremap2.c\nnew file mode 100644\nindex 0000000000..45be7f0369\n--- /dev/null\n+++ b/misc/tst-mremap2.c\n@@ -0,0 +1,54 @@\n+/* Test mremap with MREMAP_FIXED.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <errno.h>\n+#include <sys/mman.h>\n+#include <support/xstdlib.h>\n+#include <support/xunistd.h>\n+#include <support/test-driver.h>\n+#include <mremap-failure.h>\n+\n+static int\n+do_test (void)\n+{\n+  size_t old_size = getpagesize ();\n+  size_t new_size = old_size + old_size;\n+  char *old_addr = xmmap (NULL, old_size, PROT_READ | PROT_WRITE,\n+\t\t\t  MAP_PRIVATE | MAP_ANONYMOUS, -1);\n+  old_addr[0] = 1;\n+  old_addr[old_size - 1] = 2;\n+\n+  char *fixed_addr = xmmap (NULL, new_size, PROT_READ | PROT_WRITE,\n+\t\t\t    MAP_PRIVATE | MAP_ANONYMOUS, -1);\n+  fixed_addr[0] = 1;\n+  fixed_addr[new_size - 1] = 2;\n+\n+  /* Test MREMAP_FIXED.  */\n+  char *new_addr = mremap (old_addr, old_size, new_size,\n+\t\t\t   MREMAP_FIXED | MREMAP_MAYMOVE,\n+\t\t\t   fixed_addr);\n+  if (new_addr == MAP_FAILED)\n+    return mremap_failure_exit (errno);\n+  new_addr[0] = 1;\n+  new_addr[new_size - 1] = 2;\n+  xmunmap (new_addr, new_size);\n+\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\ndiff --git a/sysdeps/generic/mremap-failure.h b/sysdeps/generic/mremap-failure.h\nnew file mode 100644\nindex 0000000000..bc0d476368\n--- /dev/null\n+++ b/sysdeps/generic/mremap-failure.h\n@@ -0,0 +1,25 @@\n+/* mremap failure handling.  Generic version.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+/* Return exit value on mremap failure with errno ERR.  */\n+\n+static int\n+mremap_failure_exit (int err)\n+{\n+  return EXIT_FAILURE;\n+}\ndiff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile\nindex 097b5a26fc..59998c7af4 100644\n--- a/sysdeps/unix/sysv/linux/Makefile\n+++ b/sysdeps/unix/sysv/linux/Makefile\n@@ -206,6 +206,7 @@ tests += \\\n   tst-getauxval \\\n   tst-gettid \\\n   tst-gettid-kill \\\n+  tst-linux-mremap1 \\\n   tst-memfd_create \\\n   tst-misalign-clone \\\n   tst-mlock2 \\\ndiff --git a/sysdeps/unix/sysv/linux/mremap-failure.h b/sysdeps/unix/sysv/linux/mremap-failure.h\nnew file mode 100644\nindex 0000000000..c99ab30ca9\n--- /dev/null\n+++ b/sysdeps/unix/sysv/linux/mremap-failure.h\n@@ -0,0 +1,30 @@\n+/* mremap failure handling.  Linux version.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <support/check.h>\n+\n+/* Return exit value on mremap failure with errno ERR.  */\n+\n+static int\n+mremap_failure_exit (int err)\n+{\n+  if (err != EINVAL)\n+    return EXIT_FAILURE;\n+\n+  return EXIT_UNSUPPORTED;\n+}\ndiff --git a/sysdeps/unix/sysv/linux/tst-linux-mremap1.c b/sysdeps/unix/sysv/linux/tst-linux-mremap1.c\nnew file mode 100644\nindex 0000000000..408e8af2ab\n--- /dev/null\n+++ b/sysdeps/unix/sysv/linux/tst-linux-mremap1.c\n@@ -0,0 +1,63 @@\n+/* Test mremap with MREMAP_DONTUNMAP.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <errno.h>\n+#include <sys/mman.h>\n+#include <support/xstdlib.h>\n+#include <support/xunistd.h>\n+#include <support/check.h>\n+#include <support/test-driver.h>\n+#include <mremap-failure.h>\n+\n+static int\n+do_test (void)\n+{\n+  size_t old_size = getpagesize ();\n+  size_t new_size = old_size;\n+  char *old_addr = xmmap (NULL, old_size, PROT_READ | PROT_WRITE,\n+\t\t\t  MAP_PRIVATE | MAP_ANONYMOUS, -1);\n+  old_addr[0] = 1;\n+  old_addr[old_size - 1] = 2;\n+\n+  /* Create an available 64-page mmap region.  */\n+  size_t fixed_size = old_size * 64;\n+  char *fixed_addr = xmmap (NULL, fixed_size, PROT_READ | PROT_WRITE,\n+\t\t\t    MAP_PRIVATE | MAP_ANONYMOUS, -1);\n+  xmunmap (fixed_addr, fixed_size);\n+\n+  /* Add 3 * pagesize.  */\n+  fixed_size += 3 * old_size;\n+\n+  /* Test MREMAP_DONTUNMAP.  It should return FIXED_ADDR created above.  */\n+  char *new_addr = mremap (old_addr, old_size, new_size,\n+\t\t\t   MREMAP_DONTUNMAP | MREMAP_MAYMOVE,\n+\t\t\t   fixed_addr);\n+  if (new_addr == MAP_FAILED)\n+    return mremap_failure_exit (errno);\n+  TEST_VERIFY_EXIT (fixed_addr == new_addr);\n+  old_addr[0] = 3;\n+  old_addr[old_size - 1] = 4;\n+  new_addr[0] = 1;\n+  new_addr[new_size - 1] = 2;\n+  xmunmap (new_addr, new_size);\n+  xmunmap (old_addr, old_size);\n+\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\n\ncommit 928769737c8f0cbb51dfa2a02de0594c2395d802\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Thu Aug 1 10:46:10 2024 +0200\n\n    resolv: Fix tst-resolv-short-response for older GCC (bug 32042)\n    \n    Previous GCC versions do not support the C23 change that\n    allows labels on declarations.\n    \n    Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>\n    (cherry picked from commit ec119972cb2598c04ec7d4219e20506006836f64)\n\ndiff --git a/resolv/tst-resolv-short-response.c b/resolv/tst-resolv-short-response.c\nindex be354ae1c7..9b06b0c176 100644\n--- a/resolv/tst-resolv-short-response.c\n+++ b/resolv/tst-resolv-short-response.c\n@@ -33,8 +33,10 @@ response (const struct resolv_response_context *ctx,\n     {\n     case 0:\n       /* First server times out.  */\n-      struct resolv_response_flags flags = {.rcode = rcode};\n-      resolv_response_init (b, flags);\n+      {\n+        struct resolv_response_flags flags = {.rcode = rcode};\n+        resolv_response_init (b, flags);\n+      }\n       break;\n     case 1:\n       /* Second server sends reply.  */\n\ncommit aa533d58ff12e27771d9c960a727d74992a3f2a3\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Fri Aug 2 15:22:14 2024 +0200\n\n    x86: Tunables may incorrectly set Prefer_PMINUB_for_stringop (bug 32047)\n    \n    Fixes commit 5bcf6265f215326d14dfacdce8532792c2c7f8f8 (\"x86:\n    Disable non-temporal memset on Skylake Server\").\n    \n    Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>\n    (cherry picked from commit 7a630f7d3392ca391a399486ce2846f9e4b4ee63)\n\ndiff --git a/sysdeps/x86/cpu-tunables.c b/sysdeps/x86/cpu-tunables.c\nindex ae9dcd6180..ccc6b64dc2 100644\n--- a/sysdeps/x86/cpu-tunables.c\n+++ b/sysdeps/x86/cpu-tunables.c\n@@ -248,6 +248,7 @@ TUNABLE_CALLBACK (set_hwcaps) (tunable_val_t *valp)\n \t    CHECK_GLIBC_IFUNC_PREFERRED_BOTH (n, cpu_features,\n \t\t\t\t\t      Avoid_Non_Temporal_Memset, 25);\n \t  }\n+\t  break;\n \tcase 26:\n \t    {\n \t      CHECK_GLIBC_IFUNC_PREFERRED_NEED_BOTH\n\ncommit 6a97e2ba144a554809161d488f25e4bae07c9405\nAuthor: Andreas Schwab <schwab@suse.de>\nDate:   Mon Aug 5 10:55:51 2024 +0200\n\n    Fix name space violation in fortify wrappers (bug 32052)\n    \n    Rename the identifier sz to __sz everywhere.\n    \n    Fixes: a643f60c53 (\"Make sure that the fortified function conditionals are constant\")\n    (cherry picked from commit 39ca997ab378990d5ac1aadbaa52aaf1db6d526f)\n\ndiff --git a/NEWS b/NEWS\nindex 8da0408ad9..b9eb4a558b 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -13,6 +13,7 @@ The following bugs are resolved with this release:\n   [31968] mremap implementation in C does not handle arguments correctly\n   [31890] resolv: Allow short error responses to match any DNS query\n   [31968] mremap implementation in C does not handle arguments correctly\n+  [32052] Name space violation in fortify wrappers\n \f\n Version 2.40\n \ndiff --git a/libio/bits/stdio2.h b/libio/bits/stdio2.h\nindex 91a80dd7c6..4b8bc35bdf 100644\n--- a/libio/bits/stdio2.h\n+++ b/libio/bits/stdio2.h\n@@ -308,14 +308,14 @@ fgets (__fortify_clang_overload_arg (char *, __restrict, __s), int __n,\n \t\t\t      \"fgets called with bigger size than length of \"\n \t\t\t      \"destination buffer\")\n {\n-  size_t sz = __glibc_objsize (__s);\n-  if (__glibc_safe_or_unknown_len (__n, sizeof (char), sz))\n+  size_t __sz = __glibc_objsize (__s);\n+  if (__glibc_safe_or_unknown_len (__n, sizeof (char), __sz))\n     return __fgets_alias (__s, __n, __stream);\n #if !__fortify_use_clang\n-  if (__glibc_unsafe_len (__n, sizeof (char), sz))\n-    return __fgets_chk_warn (__s, sz, __n, __stream);\n+  if (__glibc_unsafe_len (__n, sizeof (char), __sz))\n+    return __fgets_chk_warn (__s, __sz, __n, __stream);\n #endif\n-  return __fgets_chk (__s, sz, __n, __stream);\n+  return __fgets_chk (__s, __sz, __n, __stream);\n }\n \n __fortify_function __wur __nonnull ((4)) __attribute_overloadable__ size_t\n@@ -326,14 +326,14 @@ fread (__fortify_clang_overload_arg (void *, __restrict, __ptr),\n \t\t\t      \"fread called with bigger size * n than length \"\n \t\t\t      \"of destination buffer\")\n {\n-  size_t sz = __glibc_objsize0 (__ptr);\n-  if (__glibc_safe_or_unknown_len (__n, __size, sz))\n+  size_t __sz = __glibc_objsize0 (__ptr);\n+  if (__glibc_safe_or_unknown_len (__n, __size, __sz))\n     return __fread_alias (__ptr, __size, __n, __stream);\n #if !__fortify_use_clang\n-  if (__glibc_unsafe_len (__n, __size, sz))\n-    return __fread_chk_warn (__ptr, sz, __size, __n, __stream);\n+  if (__glibc_unsafe_len (__n, __size, __sz))\n+    return __fread_chk_warn (__ptr, __sz, __size, __n, __stream);\n #endif\n-  return __fread_chk (__ptr, sz, __size, __n, __stream);\n+  return __fread_chk (__ptr, __sz, __size, __n, __stream);\n }\n \n #ifdef __USE_GNU\n@@ -345,14 +345,14 @@ fgets_unlocked (__fortify_clang_overload_arg (char *, __restrict, __s),\n \t\t\t      \"fgets called with bigger size than length of \"\n \t\t\t      \"destination buffer\")\n {\n-  size_t sz = __glibc_objsize (__s);\n-  if (__glibc_safe_or_unknown_len (__n, sizeof (char), sz))\n+  size_t __sz = __glibc_objsize (__s);\n+  if (__glibc_safe_or_unknown_len (__n, sizeof (char), __sz))\n     return __fgets_unlocked_alias (__s, __n, __stream);\n #if !__fortify_use_clang\n-  if (__glibc_unsafe_len (__n, sizeof (char), sz))\n-    return __fgets_unlocked_chk_warn (__s, sz, __n, __stream);\n+  if (__glibc_unsafe_len (__n, sizeof (char), __sz))\n+    return __fgets_unlocked_chk_warn (__s, __sz, __n, __stream);\n #endif\n-  return __fgets_unlocked_chk (__s, sz, __n, __stream);\n+  return __fgets_unlocked_chk (__s, __sz, __n, __stream);\n }\n #endif\n \n@@ -366,8 +366,8 @@ fread_unlocked (__fortify_clang_overload_arg0 (void *, __restrict, __ptr),\n \t\t\t      \"fread_unlocked called with bigger size * n than \"\n \t\t\t      \"length of destination buffer\")\n {\n-  size_t sz = __glibc_objsize0 (__ptr);\n-  if (__glibc_safe_or_unknown_len (__n, __size, sz))\n+  size_t __sz = __glibc_objsize0 (__ptr);\n+  if (__glibc_safe_or_unknown_len (__n, __size, __sz))\n     {\n # ifdef __USE_EXTERN_INLINES\n       if (__builtin_constant_p (__size)\n@@ -393,10 +393,10 @@ fread_unlocked (__fortify_clang_overload_arg0 (void *, __restrict, __ptr),\n       return __fread_unlocked_alias (__ptr, __size, __n, __stream);\n     }\n # if !__fortify_use_clang\n-  if (__glibc_unsafe_len (__n, __size, sz))\n-    return __fread_unlocked_chk_warn (__ptr, sz, __size, __n, __stream);\n+  if (__glibc_unsafe_len (__n, __size, __sz))\n+    return __fread_unlocked_chk_warn (__ptr, __sz, __size, __n, __stream);\n # endif\n-  return __fread_unlocked_chk (__ptr, sz, __size, __n, __stream);\n+  return __fread_unlocked_chk (__ptr, __sz, __size, __n, __stream);\n \n }\n #endif\ndiff --git a/socket/bits/socket2.h b/socket/bits/socket2.h\nindex 04780f320e..bd91647f37 100644\n--- a/socket/bits/socket2.h\n+++ b/socket/bits/socket2.h\n@@ -37,14 +37,14 @@ recv (int __fd, __fortify_clang_overload_arg0 (void *, ,__buf), size_t __n,\n \t\t\t\t\t      \"recv called with bigger length than \"\n \t\t\t\t\t      \"size of destination buffer\")\n {\n-  size_t sz = __glibc_objsize0 (__buf);\n-  if (__glibc_safe_or_unknown_len (__n, sizeof (char), sz))\n+  size_t __sz = __glibc_objsize0 (__buf);\n+  if (__glibc_safe_or_unknown_len (__n, sizeof (char), __sz))\n     return __recv_alias (__fd, __buf, __n, __flags);\n #if !__fortify_use_clang\n-  if (__glibc_unsafe_len (__n, sizeof (char), sz))\n-    return __recv_chk_warn (__fd, __buf, __n, sz, __flags);\n+  if (__glibc_unsafe_len (__n, sizeof (char), __sz))\n+    return __recv_chk_warn (__fd, __buf, __n, __sz, __flags);\n #endif\n-  return __recv_chk (__fd, __buf, __n, sz, __flags);\n+  return __recv_chk (__fd, __buf, __n, __sz, __flags);\n }\n \n extern ssize_t __recvfrom_chk (int __fd, void *__restrict __buf, size_t __n,\n@@ -71,13 +71,13 @@ recvfrom (int __fd, __fortify_clang_overload_arg0 (void *, __restrict, __buf),\n \t\t\t\t\t      \"recvfrom called with bigger length \"\n \t\t\t\t\t      \"than size of destination buffer\")\n {\n-  size_t sz = __glibc_objsize0 (__buf);\n-  if (__glibc_safe_or_unknown_len (__n, sizeof (char), sz))\n+  size_t __sz = __glibc_objsize0 (__buf);\n+  if (__glibc_safe_or_unknown_len (__n, sizeof (char), __sz))\n     return __recvfrom_alias (__fd, __buf, __n, __flags, __addr, __addr_len);\n #if !__fortify_use_clang\n-  if (__glibc_unsafe_len (__n, sizeof (char), sz))\n-    return __recvfrom_chk_warn (__fd, __buf, __n, sz, __flags, __addr,\n+  if (__glibc_unsafe_len (__n, sizeof (char), __sz))\n+    return __recvfrom_chk_warn (__fd, __buf, __n, __sz, __flags, __addr,\n \t\t\t\t__addr_len);\n #endif\n-  return __recvfrom_chk (__fd, __buf, __n, sz, __flags, __addr, __addr_len);\n+  return __recvfrom_chk (__fd, __buf, __n, __sz, __flags, __addr, __addr_len);\n }\ndiff --git a/stdlib/bits/stdlib.h b/stdlib/bits/stdlib.h\nindex 1557b862b1..9c78ecf458 100644\n--- a/stdlib/bits/stdlib.h\n+++ b/stdlib/bits/stdlib.h\n@@ -43,16 +43,16 @@ __NTH (realpath (const char *__restrict __name,\n \t\t\t\t\t     \"bytes long buffer\")\n #endif\n {\n-  size_t sz = __glibc_objsize (__resolved);\n+  size_t __sz = __glibc_objsize (__resolved);\n \n-  if (sz == (size_t) -1)\n+  if (__sz == (size_t) -1)\n     return __realpath_alias (__name, __resolved);\n \n #if !__fortify_use_clang && defined _LIBC_LIMITS_H_ && defined PATH_MAX\n-  if (__glibc_unsafe_len (PATH_MAX, sizeof (char), sz))\n-    return __realpath_chk_warn (__name, __resolved, sz);\n+  if (__glibc_unsafe_len (PATH_MAX, sizeof (char), __sz))\n+    return __realpath_chk_warn (__name, __resolved, __sz);\n #endif\n-  return __realpath_chk (__name, __resolved, sz);\n+  return __realpath_chk (__name, __resolved, __sz);\n }\n \n \ndiff --git a/wcsmbs/bits/wchar2.h b/wcsmbs/bits/wchar2.h\nindex 9fdff47ee2..43c6b63027 100644\n--- a/wcsmbs/bits/wchar2.h\n+++ b/wcsmbs/bits/wchar2.h\n@@ -74,9 +74,9 @@ __fortify_function __attribute_overloadable__ wchar_t *\n __NTH (wcscpy (__fortify_clang_overload_arg (wchar_t *, __restrict, __dest),\n \t       const wchar_t *__restrict __src))\n {\n-  size_t sz = __glibc_objsize (__dest);\n-  if (sz != (size_t) -1)\n-    return __wcscpy_chk (__dest, __src, sz / sizeof (wchar_t));\n+  size_t __sz = __glibc_objsize (__dest);\n+  if (__sz != (size_t) -1)\n+    return __wcscpy_chk (__dest, __src, __sz / sizeof (wchar_t));\n   return __wcscpy_alias (__dest, __src);\n }\n \n@@ -84,9 +84,9 @@ __fortify_function __attribute_overloadable__ wchar_t *\n __NTH (wcpcpy (__fortify_clang_overload_arg (wchar_t *, __restrict, __dest),\n \t       const wchar_t *__restrict __src))\n {\n-  size_t sz = __glibc_objsize (__dest);\n-  if (sz != (size_t) -1)\n-    return __wcpcpy_chk (__dest, __src, sz / sizeof (wchar_t));\n+  size_t __sz = __glibc_objsize (__dest);\n+  if (__sz != (size_t) -1)\n+    return __wcpcpy_chk (__dest, __src, __sz / sizeof (wchar_t));\n   return __wcpcpy_alias (__dest, __src);\n }\n \n@@ -118,9 +118,9 @@ __fortify_function __attribute_overloadable__ wchar_t *\n __NTH (wcscat (__fortify_clang_overload_arg (wchar_t *, __restrict, __dest),\n \t       const wchar_t *__restrict __src))\n {\n-  size_t sz = __glibc_objsize (__dest);\n-  if (sz != (size_t) -1)\n-    return __wcscat_chk (__dest, __src, sz / sizeof (wchar_t));\n+  size_t __sz = __glibc_objsize (__dest);\n+  if (__sz != (size_t) -1)\n+    return __wcscat_chk (__dest, __src, __sz / sizeof (wchar_t));\n   return __wcscat_alias (__dest, __src);\n }\n \n@@ -128,9 +128,9 @@ __fortify_function __attribute_overloadable__ wchar_t *\n __NTH (wcsncat (__fortify_clang_overload_arg (wchar_t *, __restrict, __dest),\n \t       const wchar_t *__restrict __src, size_t __n))\n {\n-  size_t sz = __glibc_objsize (__dest);\n-  if (sz != (size_t) -1)\n-    return __wcsncat_chk (__dest, __src, __n, sz / sizeof (wchar_t));\n+  size_t __sz = __glibc_objsize (__dest);\n+  if (__sz != (size_t) -1)\n+    return __wcsncat_chk (__dest, __src, __n, __sz / sizeof (wchar_t));\n   return __wcsncat_alias (__dest, __src, __n);\n }\n \n@@ -170,10 +170,10 @@ __fortify_function int\n __NTH (swprintf (wchar_t *__restrict __s, size_t __n,\n \t\t const wchar_t *__restrict __fmt, ...))\n {\n-  size_t sz = __glibc_objsize (__s);\n-  if (sz != (size_t) -1 || __USE_FORTIFY_LEVEL > 1)\n+  size_t __sz = __glibc_objsize (__s);\n+  if (__sz != (size_t) -1 || __USE_FORTIFY_LEVEL > 1)\n     return __swprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,\n-\t\t\t   sz / sizeof (wchar_t), __fmt, __va_arg_pack ());\n+\t\t\t   __sz / sizeof (wchar_t), __fmt, __va_arg_pack ());\n   return __swprintf_alias (__s, __n, __fmt, __va_arg_pack ());\n }\n #elif __fortify_use_clang\n@@ -206,10 +206,10 @@ __fortify_function int\n __NTH (vswprintf (wchar_t *__restrict __s, size_t __n,\n \t\t  const wchar_t *__restrict __fmt, __gnuc_va_list __ap))\n {\n-  size_t sz = __glibc_objsize (__s);\n-  if (sz != (size_t) -1 || __USE_FORTIFY_LEVEL > 1)\n+  size_t __sz = __glibc_objsize (__s);\n+  if (__sz != (size_t) -1 || __USE_FORTIFY_LEVEL > 1)\n     return __vswprintf_chk (__s, __n,  __USE_FORTIFY_LEVEL - 1,\n-\t\t\t    sz / sizeof (wchar_t), __fmt, __ap);\n+\t\t\t    __sz / sizeof (wchar_t), __fmt, __ap);\n   return __vswprintf_alias (__s, __n, __fmt, __ap);\n }\n \n@@ -257,14 +257,14 @@ fgetws (__fortify_clang_overload_arg (wchar_t *, __restrict, __s), int __n,\n \t\t\t\t\t      \"fgetws called with length bigger \"\n \t\t\t\t\t      \"than size of destination buffer\")\n {\n-  size_t sz = __glibc_objsize (__s);\n-  if (__glibc_safe_or_unknown_len (__n, sizeof (wchar_t), sz))\n+  size_t __sz = __glibc_objsize (__s);\n+  if (__glibc_safe_or_unknown_len (__n, sizeof (wchar_t), __sz))\n     return __fgetws_alias (__s, __n, __stream);\n #if !__fortify_use_clang\n-  if (__glibc_unsafe_len (__n, sizeof (wchar_t), sz))\n-    return __fgetws_chk_warn (__s, sz / sizeof (wchar_t), __n, __stream);\n+  if (__glibc_unsafe_len (__n, sizeof (wchar_t), __sz))\n+    return __fgetws_chk_warn (__s, __sz / sizeof (wchar_t), __n, __stream);\n #endif\n-  return __fgetws_chk (__s, sz / sizeof (wchar_t), __n, __stream);\n+  return __fgetws_chk (__s, __sz / sizeof (wchar_t), __n, __stream);\n }\n \n #ifdef __USE_GNU\n@@ -275,15 +275,15 @@ fgetws_unlocked (__fortify_clang_overload_arg (wchar_t *, __restrict, __s),\n \t\t\t\t\t      \"fgetws_unlocked called with length bigger \"\n \t\t\t\t\t      \"than size of destination buffer\")\n {\n-  size_t sz = __glibc_objsize (__s);\n-  if (__glibc_safe_or_unknown_len (__n, sizeof (wchar_t), sz))\n+  size_t __sz = __glibc_objsize (__s);\n+  if (__glibc_safe_or_unknown_len (__n, sizeof (wchar_t), __sz))\n     return __fgetws_unlocked_alias (__s, __n, __stream);\n # if !__fortify_use_clang\n-  if (__glibc_unsafe_len (__n, sizeof (wchar_t), sz))\n-    return __fgetws_unlocked_chk_warn (__s, sz / sizeof (wchar_t), __n,\n+  if (__glibc_unsafe_len (__n, sizeof (wchar_t), __sz))\n+    return __fgetws_unlocked_chk_warn (__s, __sz / sizeof (wchar_t), __n,\n \t\t\t\t       __stream);\n # endif\n-  return __fgetws_unlocked_chk (__s, sz / sizeof (wchar_t), __n, __stream);\n+  return __fgetws_unlocked_chk (__s, __sz / sizeof (wchar_t), __n, __stream);\n }\n #endif\n \n\ncommit 5641780762723156b0d20a0b9f7df1d76831bab0\nAuthor: Arjun Shankar <arjun@redhat.com>\nDate:   Tue Jul 30 11:37:57 2024 +0200\n\n    manual/stdio: Further clarify putc, putwc, getc, and getwc\n    \n    This is a follow-up to 10de4a47ef3f481592e3c62eb07bcda23e9fde4d that\n    reworded the manual entries for putc and putwc and removed any\n    performance claims.\n    \n    This commit further clarifies these entries and brings getc and getwc in\n    line with the descriptions of putc and putwc, removing any performance\n    claims from them as well.\n    Reviewed-by: Florian Weimer <fweimer@redhat.com>\n    \n    (cherry picked from commit 942670c81dc8071dd75d6213e771daa5d2084cb6)\n\ndiff --git a/manual/stdio.texi b/manual/stdio.texi\nindex f9529a098d..8517653507 100644\n--- a/manual/stdio.texi\n+++ b/manual/stdio.texi\n@@ -904,20 +904,16 @@ This function is a GNU extension.\n @standards{ISO, stdio.h}\n @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}\n This is just like @code{fputc}, except that it may be implemented as\n-a macro, making it faster.  One consequence is that it may evaluate the\n-@var{stream} argument more than once, which is an exception to the\n-general rule for macros.  Therefore, @var{stream} should never be an\n-expression with side-effects.\n+a macro and may evaluate the @var{stream} argument more than once.\n+Therefore, @var{stream} should never be an expression with side-effects.\n @end deftypefun\n \n @deftypefun wint_t putwc (wchar_t @var{wc}, FILE *@var{stream})\n @standards{ISO, wchar.h}\n @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}\n This is just like @code{fputwc}, except that it may be implemented as\n-a macro, making it faster.  One consequence is that it may evaluate the\n-@var{stream} argument more than once, which is an exception to the\n-general rule for macros.  Therefore, @var{stream} should never be an\n-expression with side-effects.\n+a macro and may evaluate the @var{stream} argument more than once.\n+Therefore, @var{stream} should never be an expression with side-effects.\n @end deftypefun\n \n @deftypefun int putc_unlocked (int @var{c}, FILE *@var{stream})\n@@ -1110,20 +1106,17 @@ This function is a GNU extension.\n @deftypefun int getc (FILE *@var{stream})\n @standards{ISO, stdio.h}\n @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}\n-This is just like @code{fgetc}, except that it is permissible (and\n-typical) for it to be implemented as a macro that evaluates the\n-@var{stream} argument more than once.  @code{getc} is often highly\n-optimized, so it is usually the best function to use to read a single\n-character.\n+This is just like @code{fgetc}, except that it may be implemented as\n+a macro and may evaluate the @var{stream} argument more than once.\n+Therefore, @var{stream} should never be an expression with side-effects.\n @end deftypefun\n \n @deftypefun wint_t getwc (FILE *@var{stream})\n @standards{ISO, wchar.h}\n @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}\n-This is just like @code{fgetwc}, except that it is permissible for it to\n-be implemented as a macro that evaluates the @var{stream} argument more\n-than once.  @code{getwc} can be highly optimized, so it is usually the\n-best function to use to read a single wide character.\n+This is just like @code{fgetwc}, except that it may be implemented as\n+a macro and may evaluate the @var{stream} argument more than once.\n+Therefore, @var{stream} should never be an expression with side-effects.\n @end deftypefun\n \n @deftypefun int getc_unlocked (FILE *@var{stream})\n\ncommit 39ee60a719eb6ffde76ccc232d79273c473d7a93\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Fri Aug 9 17:01:17 2024 +0200\n\n    support: Add options list terminator to the test driver\n    \n    This avoids crashes if a test is passed unknown options.\n    \n    Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>\n    (cherry picked from commit c2a474f4617ede7a8bf56b7257acb37dc757b2d1)\n\ndiff --git a/support/test-driver.c b/support/test-driver.c\nindex f4c3e4d666..04ceebc08f 100644\n--- a/support/test-driver.c\n+++ b/support/test-driver.c\n@@ -155,6 +155,7 @@ main (int argc, char **argv)\n     {\n       CMDLINE_OPTIONS\n       TEST_DEFAULT_OPTIONS\n+      { 0, }\n     };\n   test_config.options = &options;\n #endif\n\ncommit e3556937c2402b8acf2e586bf53168e9f482ba91\nAuthor: H.J. Lu <hjl.tools@gmail.com>\nDate:   Mon Jul 22 17:47:21 2024 -0700\n\n    x86-64: Remove sysdeps/x86_64/x32/dl-machine.h\n    \n    Remove sysdeps/x86_64/x32/dl-machine.h by folding x32 ARCH_LA_PLTENTER,\n    ARCH_LA_PLTEXIT and RTLD_START into sysdeps/x86_64/dl-machine.h.  There\n    are no regressions on x86-64 nor x32.  There are no changes in x86-64\n    _dl_start_user.  On x32, _dl_start_user changes are\n    \n     <_dl_start_user>:\n            mov    %eax,%r12d\n    +       mov    %esp,%r13d\n            mov    (%rsp),%edx\n            mov    %edx,%esi\n    -       mov    %esp,%r13d\n            and    $0xfffffff0,%esp\n            mov    0x0(%rip),%edi        # <_dl_start_user+0x14>\n            lea    0x8(%r13,%rdx,4),%ecx\n    \n    Signed-off-by: H.J. Lu <hjl.tools@gmail.com>\n    Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>\n    (cherry picked from commit 652c6cf26927352fc0e37e4e60c6fc98ddf6d3b4)\n\ndiff --git a/sysdeps/x86_64/dl-machine.h b/sysdeps/x86_64/dl-machine.h\nindex a6de3793e4..4f12955875 100644\n--- a/sysdeps/x86_64/dl-machine.h\n+++ b/sysdeps/x86_64/dl-machine.h\n@@ -139,37 +139,37 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],\n .globl _start\\n\\\n .globl _dl_start_user\\n\\\n _start:\\n\\\n-\tmovq %rsp, %rdi\\n\\\n+\tmov %\" RSP_LP \", %\" RDI_LP \"\\n\\\n \tcall _dl_start\\n\\\n _dl_start_user:\\n\\\n \t# Save the user entry point address in %r12.\\n\\\n-\tmovq %rax, %r12\\n\\\n+\tmov %\" RAX_LP \", %\" R12_LP \"\\n\\\n \t# Save %rsp value in %r13.\\n\\\n-\tmovq %rsp, %r13\\n\\\n+\tmov %\" RSP_LP \", % \" R13_LP \"\\n\\\n \"\\\n \tRTLD_START_ENABLE_X86_FEATURES \\\n \"\\\n \t# Read the original argument count.\\n\\\n-\tmovq (%rsp), %rdx\\n\\\n+\tmov (%rsp), %\" RDX_LP \"\\n\\\n \t# Call _dl_init (struct link_map *main_map, int argc, char **argv, char **env)\\n\\\n \t# argc -> rsi\\n\\\n-\tmovq %rdx, %rsi\\n\\\n+\tmov %\" RDX_LP \", %\" RSI_LP \"\\n\\\n \t# And align stack for the _dl_init call. \\n\\\n-\tandq $-16, %rsp\\n\\\n+\tand $-16, %\" RSP_LP \"\\n\\\n \t# _dl_loaded -> rdi\\n\\\n-\tmovq _rtld_local(%rip), %rdi\\n\\\n+\tmov _rtld_local(%rip), %\" RDI_LP \"\\n\\\n \t# env -> rcx\\n\\\n-\tleaq 16(%r13,%rdx,8), %rcx\\n\\\n+\tlea 2*\" LP_SIZE \"(%r13,%rdx,\" LP_SIZE \"), %\" RCX_LP \"\\n\\\n \t# argv -> rdx\\n\\\n-\tleaq 8(%r13), %rdx\\n\\\n+\tlea \" LP_SIZE \"(%r13), %\" RDX_LP \"\\n\\\n \t# Clear %rbp to mark outermost frame obviously even for constructors.\\n\\\n \txorl %ebp, %ebp\\n\\\n \t# Call the function to run the initializers.\\n\\\n \tcall _dl_init\\n\\\n \t# Pass our finalizer function to the user in %rdx, as per ELF ABI.\\n\\\n-\tleaq _dl_fini(%rip), %rdx\\n\\\n+\tlea _dl_fini(%rip), %\" RDX_LP \"\\n\\\n \t# And make sure %rsp points to argc stored on the stack.\\n\\\n-\tmovq %r13, %rsp\\n\\\n+\tmov %\" R13_LP \", %\" RSP_LP \"\\n\\\n \t# Jump to the user's entry point.\\n\\\n \tjmp *%r12\\n\\\n .previous\\n\\\n@@ -234,8 +234,13 @@ elf_machine_plt_value (struct link_map *map, const ElfW(Rela) *reloc,\n \n \n /* Names of the architecture-specific auditing callback functions.  */\n+#ifdef __LP64__\n #define ARCH_LA_PLTENTER x86_64_gnu_pltenter\n #define ARCH_LA_PLTEXIT x86_64_gnu_pltexit\n+#else\n+#define ARCH_LA_PLTENTER x32_gnu_pltenter\n+#define ARCH_LA_PLTEXIT x32_gnu_pltexit\n+#endif\n \n #endif /* !dl_machine_h */\n \ndiff --git a/sysdeps/x86_64/x32/dl-machine.h b/sysdeps/x86_64/x32/dl-machine.h\ndeleted file mode 100644\nindex c35cee9261..0000000000\n--- a/sysdeps/x86_64/x32/dl-machine.h\n+++ /dev/null\n@@ -1,76 +0,0 @@\n-/* Machine-dependent ELF dynamic relocation inline functions.  x32 version.\n-   Copyright (C) 2012-2024 Free Software Foundation, Inc.\n-   This file is part of the GNU C Library.\n-\n-   The GNU C Library is free software; you can redistribute it and/or\n-   modify it under the terms of the GNU Lesser General Public\n-   License as published by the Free Software Foundation; either\n-   version 2.1 of the License, or (at your option) any later version.\n-\n-   The GNU C Library is distributed in the hope that it will be useful,\n-   but WITHOUT ANY WARRANTY; without even the implied warranty of\n-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n-   Lesser General Public License for more details.\n-\n-   You should have received a copy of the GNU Lesser General Public\n-   License along with the GNU C Library; if not, see\n-   <https://www.gnu.org/licenses/>.  */\n-\n-/* Must allow <sysdeps/x86_64/dl-machine.h> to be included more than once.\n-   See #ifdef RESOLVE_MAP in sysdeps/x86_64/dl-machine.h.  */\n-#include <sysdeps/x86_64/dl-machine.h>\n-\n-#ifndef _X32_DL_MACHINE_H\n-#define _X32_DL_MACHINE_H\n-\n-#undef ARCH_LA_PLTENTER\n-#undef ARCH_LA_PLTEXIT\n-#undef RTLD_START\n-\n-/* Names of the architecture-specific auditing callback functions.  */\n-#define ARCH_LA_PLTENTER x32_gnu_pltenter\n-#define ARCH_LA_PLTEXIT x32_gnu_pltexit\n-\n-/* Initial entry point code for the dynamic linker.\n-   The C function `_dl_start' is the real entry point;\n-   its return value is the user program's entry point.  */\n-#define RTLD_START asm (\"\\n\\\n-.text\\n\\\n-\t.p2align 4\\n\\\n-.globl _start\\n\\\n-.globl _dl_start_user\\n\\\n-_start:\\n\\\n-\tmovl %esp, %edi\\n\\\n-\tcall _dl_start\\n\\\n-_dl_start_user:\\n\\\n-\t# Save the user entry point address in %r12.\\n\\\n-\tmovl %eax, %r12d\\n\\\n-\t# Read the original argument count.\\n\\\n-\tmovl (%rsp), %edx\\n\\\n-\t# Call _dl_init (struct link_map *main_map, int argc, char **argv, char **env)\\n\\\n-\t# argc -> rsi\\n\\\n-\tmovl %edx, %esi\\n\\\n-\t# Save %rsp value in %r13.\\n\\\n-\tmovl %esp, %r13d\\n\\\n-\t# And align stack for the _dl_init call.\\n\\\n-\tand $-16, %esp\\n\\\n-\t# _dl_loaded -> rdi\\n\\\n-\tmovl _rtld_local(%rip), %edi\\n\\\n-\t# env -> rcx\\n\\\n-\tlea 8(%r13,%rdx,4), %ecx\\n\\\n-\t# argv -> rdx\\n\\\n-\tlea 4(%r13), %edx\\n\\\n-\t# Clear %rbp to mark outermost frame obviously even for constructors.\\n\\\n-\txorl %ebp, %ebp\\n\\\n-\t# Call the function to run the initializers.\\n\\\n-\tcall _dl_init\\n\\\n-\t# Pass our finalizer function to the user in %rdx, as per ELF ABI.\\n\\\n-\tlea _dl_fini(%rip), %edx\\n\\\n-\t# And make sure %rsp points to argc stored on the stack.\\n\\\n-\tmovl %r13d, %esp\\n\\\n-\t# Jump to the user's entry point.\\n\\\n-\tjmp *%r12\\n\\\n-.previous\\n\\\n-\");\n-\n-#endif /* !_X32_DL_MACHINE_H */\n\ncommit 898f25e0b1026be5701d05715600be646e9d0714\nAuthor: H.J. Lu <hjl.tools@gmail.com>\nDate:   Mon Jul 22 17:47:22 2024 -0700\n\n    x32/cet: Support shadow stack during startup for Linux 6.10\n    \n    Use RXX_LP in RTLD_START_ENABLE_X86_FEATURES.  Support shadow stack during\n    startup for Linux 6.10:\n    \n    commit 2883f01ec37dd8668e7222dfdb5980c86fdfe277\n    Author: H.J. Lu <hjl.tools@gmail.com>\n    Date:   Fri Mar 15 07:04:33 2024 -0700\n    \n        x86/shstk: Enable shadow stacks for x32\n    \n        1. Add shadow stack support to x32 signal.\n        2. Use the 64-bit map_shadow_stack syscall for x32.\n        3. Set up shadow stack for x32.\n    \n    Add the map_shadow_stack system call to <fixup-asm-unistd.h> and regenerate\n    arch-syscall.h.  Tested on Intel Tiger Lake with CET enabled x32.  There\n    are no regressions with CET enabled x86-64.  There are no changes in CET\n    enabled x86-64 _dl_start_user.\n    \n    Signed-off-by: H.J. Lu <hjl.tools@gmail.com>\n    Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>\n    (cherry picked from commit 8344c1f5514b1b5b1c8c6e48f4b802653bd23b71)\n\ndiff --git a/sysdeps/unix/sysv/linux/x86_64/dl-cet.h b/sysdeps/unix/sysv/linux/x86_64/dl-cet.h\nindex 1fe3133406..b4f7e6c9cd 100644\n--- a/sysdeps/unix/sysv/linux/x86_64/dl-cet.h\n+++ b/sysdeps/unix/sysv/linux/x86_64/dl-cet.h\n@@ -92,9 +92,9 @@ dl_cet_ibt_enabled (void)\n \t# Pass GL(dl_x86_feature_1) to _dl_cet_setup_features.\\n\\\n \tmovl %edx, %edi\\n\\\n \t# Align stack for the _dl_cet_setup_features call.\\n\\\n-\tandq $-16, %rsp\\n\\\n+\tand $-16, %\" RSP_LP \"\\n\\\n \tcall _dl_cet_setup_features\\n\\\n \t# Restore %rax and %rsp from %r12 and %r13.\\n\\\n-\tmovq %r12, %rax\\n\\\n-\tmovq %r13, %rsp\\n\\\n+\tmov %\" R12_LP \", %\" RAX_LP \"\\n\\\n+\tmov %\" R13_LP \", %\" RSP_LP \"\\n\\\n \"\ndiff --git a/sysdeps/unix/sysv/linux/x86_64/x32/arch-syscall.h b/sysdeps/unix/sysv/linux/x86_64/x32/arch-syscall.h\nindex 3040a47d72..df3e22236d 100644\n--- a/sysdeps/unix/sysv/linux/x86_64/x32/arch-syscall.h\n+++ b/sysdeps/unix/sysv/linux/x86_64/x32/arch-syscall.h\n@@ -155,6 +155,7 @@\n #define __NR_lsm_set_self_attr 1073742284\n #define __NR_lstat 1073741830\n #define __NR_madvise 1073741852\n+#define __NR_map_shadow_stack 1073742277\n #define __NR_mbind 1073742061\n #define __NR_membarrier 1073742148\n #define __NR_memfd_create 1073742143\ndiff --git a/sysdeps/unix/sysv/linux/x86_64/x32/fixup-asm-unistd.h b/sysdeps/unix/sysv/linux/x86_64/x32/fixup-asm-unistd.h\nindex 98124169e6..47fa8af4ce 100644\n--- a/sysdeps/unix/sysv/linux/x86_64/x32/fixup-asm-unistd.h\n+++ b/sysdeps/unix/sysv/linux/x86_64/x32/fixup-asm-unistd.h\n@@ -15,6 +15,10 @@\n    License along with the GNU C Library; if not, see\n    <http://www.gnu.org/licenses/>.  */\n \n+#ifndef __NR_map_shadow_stack\n+# define __NR_map_shadow_stack 1073742277\n+#endif\n+\n /* X32 uses the same 64-bit syscall interface for set_thread_area.   */\n #ifndef __NR_set_thread_area\n # define __NR_set_thread_area 1073742029\n\ncommit c0af0c2ba016030c778bc22c55f5f9498f96b8b9\nAuthor: Noah Goldstein <goldstein.w.n@gmail.com>\nDate:   Tue Aug 13 23:29:14 2024 +0800\n\n    x86: Fix bug in strchrnul-evex512 [BZ #32078]\n    \n    Issue was we were expecting not matches with CHAR before the start of\n    the string in the page cross case.\n    \n    The check code in the page cross case:\n    ```\n        and    $0xffffffffffffffc0,%rax\n        vmovdqa64 (%rax),%zmm17\n        vpcmpneqb %zmm17,%zmm16,%k1\n        vptestmb %zmm17,%zmm17,%k0{%k1}\n        kmovq  %k0,%rax\n        inc    %rax\n        shr    %cl,%rax\n        je     L(continue)\n    ```\n    \n    expects that all characters that neither match null nor CHAR will be\n    1s in `rax` prior to the `inc`. Then the `inc` will overflow all of\n    the 1s where no relevant match was found.\n    \n    This is incorrect in the page-cross case, as the\n    `vmovdqa64 (%rax),%zmm17` loads from before the start of the input\n    string.\n    \n    If there are matches with CHAR before the start of the string, `rax`\n    won't properly overflow.\n    \n    The fix is quite simple. Just replace:\n    \n    ```\n        inc    %rax\n        shr    %cl,%rax\n    ```\n    With:\n    ```\n        sar    %cl,%rax\n        inc    %rax\n    ```\n    \n    The arithmetic shift will clear any matches prior to the start of the\n    string while maintaining the signbit so the 1s can properly overflow\n    to zero in the case of no matches.\n    Reviewed-by: H.J. Lu <hjl.tools@gmail.com>\n    \n    (cherry picked from commit 7da08862471dfec6fdae731c2a5f351ad485c71f)\n\ndiff --git a/string/test-strchr.c b/string/test-strchr.c\nindex c795eac6fa..72b17af687 100644\n--- a/string/test-strchr.c\n+++ b/string/test-strchr.c\n@@ -255,6 +255,69 @@ check1 (void)\n     check_result (impl, s, c, exp_result);\n }\n \n+static void\n+check2 (void)\n+{\n+  CHAR *s = (CHAR *) (buf1 + getpagesize () - 4 * sizeof (CHAR));\n+  CHAR *s_begin = (CHAR *) (buf1 + getpagesize () - 64);\n+#ifndef USE_FOR_STRCHRNUL\n+  CHAR *exp_result = NULL;\n+#else\n+  CHAR *exp_result = s + 1;\n+#endif\n+  CHAR val = 0x12;\n+  for (; s_begin != s; ++s_begin)\n+    *s_begin = val;\n+\n+  s[0] = val + 1;\n+  s[1] = 0;\n+  s[2] = val + 1;\n+  s[3] = val + 1;\n+\n+  {\n+    FOR_EACH_IMPL (impl, 0)\n+      check_result (impl, s, val, exp_result);\n+  }\n+  s[3] = val;\n+  {\n+    FOR_EACH_IMPL (impl, 0)\n+      check_result (impl, s, val, exp_result);\n+  }\n+  exp_result = s;\n+  s[0] = val;\n+  {\n+    FOR_EACH_IMPL (impl, 0)\n+      check_result (impl, s, val, exp_result);\n+  }\n+\n+  s[3] = val + 1;\n+  {\n+    FOR_EACH_IMPL (impl, 0)\n+      check_result (impl, s, val, exp_result);\n+  }\n+\n+  s[0] = val + 1;\n+  s[1] = val + 1;\n+  s[2] = val + 1;\n+  s[3] = val + 1;\n+  s[4] = val;\n+  exp_result = s + 4;\n+  {\n+    FOR_EACH_IMPL (impl, 0)\n+      check_result (impl, s, val, exp_result);\n+  }\n+  s[4] = 0;\n+#ifndef USE_FOR_STRCHRNUL\n+  exp_result = NULL;\n+#else\n+  exp_result = s + 4;\n+#endif\n+  {\n+    FOR_EACH_IMPL (impl, 0)\n+      check_result (impl, s, val, exp_result);\n+  }\n+}\n+\n int\n test_main (void)\n {\n@@ -263,7 +326,7 @@ test_main (void)\n   test_init ();\n \n   check1 ();\n-\n+  check2 ();\n   printf (\"%20s\", \"\");\n   FOR_EACH_IMPL (impl, 0)\n     printf (\"\\t%s\", impl->name);\ndiff --git a/sysdeps/x86_64/multiarch/strchr-evex-base.S b/sysdeps/x86_64/multiarch/strchr-evex-base.S\nindex 04e2c0e79e..3a0b7c9d64 100644\n--- a/sysdeps/x86_64/multiarch/strchr-evex-base.S\n+++ b/sysdeps/x86_64/multiarch/strchr-evex-base.S\n@@ -124,13 +124,13 @@ L(page_cross):\n \tVPCMPNE\t%VMM(1), %VMM(0), %k1\n \tVPTEST\t%VMM(1), %VMM(1), %k0{%k1}\n \tKMOV\t%k0, %VRAX\n-# ifdef USE_AS_WCSCHR\n+\tsar\t%cl, %VRAX\n+#ifdef USE_AS_WCSCHR\n \tsub\t$VEC_MATCH_MASK, %VRAX\n-# else\n+#else\n \tinc\t%VRAX\n-# endif\n+#endif\n \t/* Ignore number of character for alignment adjustment.  */\n-\tshr\t%cl, %VRAX\n \tjz\tL(align_more)\n \n \tbsf\t%VRAX, %VRAX\n\ncommit 586e4cd8c67df95ebb0bfecea3d007bff618d6d9\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Fri Aug 9 16:17:14 2024 +0200\n\n    Define __libc_initial for the static libc\n    \n    Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>\n    (cherry picked from commit eb0e50e9a1cf80a2ba6f33f990a08ef37a3267fb)\n\ndiff --git a/include/libc-internal.h b/include/libc-internal.h\nindex 87ac591835..1ef43ffe67 100644\n--- a/include/libc-internal.h\n+++ b/include/libc-internal.h\n@@ -53,6 +53,9 @@ extern __typeof (__profile_frequency) __profile_frequency attribute_hidden;\n    is not for an audit module, not loaded via dlmopen, and not loaded\n    via static dlopen either).  */\n extern _Bool __libc_initial attribute_hidden;\n+#else\n+/* The static libc is always the initial namespace.  */\n+# define __libc_initial ((_Bool) 1)\n #endif\n \n #endif /* _LIBC_INTERNAL  */\n\ncommit 709319f9de6f976f9feceb623cb2c96769e9d78b\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Mon Aug 19 15:48:03 2024 +0200\n\n    string: strerror, strsignal cannot use buffer after dlmopen (bug 32026)\n    \n    Secondary namespaces have a different malloc.  Allocating the\n    buffer in one namespace and freeing it another results in\n    heap corruption.  Fix this by using a static string (potentially\n    translated) in secondary namespaces.  It would also be possible\n    to use the malloc from the initial namespace to manage the\n    buffer, but these functions would still not be safe to use in\n    auditors etc. because a call to strerror could still free a\n    buffer while it is used by the application.  Another approach\n    could use proper initial-exec TLS, duplicated in secondary\n    namespaces, but that would need a callback interface for freeing\n    libc resources in namespaces on thread exit, which does not exist\n    today.\n    \n    Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>\n    (cherry picked from commit 25a5eb4010df94b412c67db9e346029de316d06b)\n\ndiff --git a/NEWS b/NEWS\nindex b9eb4a558b..10a125bc66 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -13,6 +13,7 @@ The following bugs are resolved with this release:\n   [31968] mremap implementation in C does not handle arguments correctly\n   [31890] resolv: Allow short error responses to match any DNS query\n   [31968] mremap implementation in C does not handle arguments correctly\n+  [32026] strerror/strsignal TLS not handled correctly for secondary namespaces\n   [32052] Name space violation in fortify wrappers\n \f\n Version 2.40\ndiff --git a/string/strerror_l.c b/string/strerror_l.c\nindex 15cce261e6..70456e5bb4 100644\n--- a/string/strerror_l.c\n+++ b/string/strerror_l.c\n@@ -20,7 +20,7 @@\n #include <stdio.h>\n #include <string.h>\n #include <tls-internal.h>\n-\n+#include <libc-internal.h>\n \n static const char *\n translate (const char *str, locale_t loc)\n@@ -31,6 +31,12 @@ translate (const char *str, locale_t loc)\n   return res;\n }\n \n+static char *\n+unknown_error (locale_t loc)\n+{\n+  return (char *) translate (\"Unknown error\", loc);\n+}\n+\n \n /* Return a string describing the errno code in ERRNUM.  */\n char *\n@@ -40,18 +46,25 @@ __strerror_l (int errnum, locale_t loc)\n   char *err = (char *) __get_errlist (errnum);\n   if (__glibc_unlikely (err == NULL))\n     {\n-      struct tls_internal_t *tls_internal = __glibc_tls_internal ();\n-      free (tls_internal->strerror_l_buf);\n-      if (__asprintf (&tls_internal->strerror_l_buf, \"%s%d\",\n-\t\t      translate (\"Unknown error \", loc), errnum) > 0)\n-\terr = tls_internal->strerror_l_buf;\n-      else\n+      if (__libc_initial)\n \t{\n-\t  /* The memory was freed above.  */\n-\t  tls_internal->strerror_l_buf = NULL;\n-\t  /* Provide a fallback translation.  */\n-\t  err = (char *) translate (\"Unknown error\", loc);\n+\t  struct tls_internal_t *tls_internal = __glibc_tls_internal ();\n+\t  free (tls_internal->strerror_l_buf);\n+\t  if (__asprintf (&tls_internal->strerror_l_buf, \"%s%d\",\n+\t\t\t  translate (\"Unknown error \", loc), errnum) > 0)\n+\t    err = tls_internal->strerror_l_buf;\n+\t  else\n+\t    {\n+\t      /* The memory was freed above.  */\n+\t      tls_internal->strerror_l_buf = NULL;\n+\t      /* Provide a fallback translation.  */\n+\t      err = unknown_error (loc);\n+\t    }\n \t}\n+      else\n+\t/* Secondary namespaces use a different malloc, so cannot\n+\t   participate in the buffer management.  */\n+\terr = unknown_error (loc);\n     }\n   else\n     err = (char *) translate (err, loc);\ndiff --git a/string/strsignal.c b/string/strsignal.c\nindex 3114601564..d9b0365468 100644\n--- a/string/strsignal.c\n+++ b/string/strsignal.c\n@@ -21,6 +21,7 @@\n #include <string.h>\n #include <libintl.h>\n #include <tls-internal.h>\n+#include <libc-internal.h>\n \n /* Return a string describing the meaning of the signal number SIGNUM.  */\n char *\n@@ -30,21 +31,28 @@ strsignal (int signum)\n   if (desc != NULL)\n     return _(desc);\n \n-  struct tls_internal_t *tls_internal = __glibc_tls_internal ();\n-  free (tls_internal->strsignal_buf);\n+  if (__libc_initial)\n+    {\n+      struct tls_internal_t *tls_internal = __glibc_tls_internal ();\n+      free (tls_internal->strsignal_buf);\n \n-  int r;\n+      int r;\n #ifdef SIGRTMIN\n-  if (signum >= SIGRTMIN && signum <= SIGRTMAX)\n-    r = __asprintf (&tls_internal->strsignal_buf, _(\"Real-time signal %d\"),\n-\t\t    signum - SIGRTMIN);\n-  else\n+      if (signum >= SIGRTMIN && signum <= SIGRTMAX)\n+\tr = __asprintf (&tls_internal->strsignal_buf, _(\"Real-time signal %d\"),\n+\t\t\tsignum - SIGRTMIN);\n+      else\n #endif\n-    r = __asprintf (&tls_internal->strsignal_buf, _(\"Unknown signal %d\"),\n-\t\t    signum);\n-\n-  if (r == -1)\n-    tls_internal->strsignal_buf = NULL;\n-\n-  return tls_internal->strsignal_buf;\n+\tr = __asprintf (&tls_internal->strsignal_buf, _(\"Unknown signal %d\"),\n+\t\t\tsignum);\n+\n+      if (r >= 0)\n+\treturn tls_internal->strsignal_buf;\n+      else\n+\ttls_internal->strsignal_buf = NULL;\n+    }\n+  /* Fall through on asprintf error, and for !__libc_initial:\n+     secondary namespaces use a different malloc and cannot\n+     participate in the buffer management.  */\n+  return _(\"Unknown signal\");\n }\n\ncommit bc240ba7c86a74bc64d4234feadb49bb8e36e1c9\nAuthor: Maciej W. Rozycki <macro@redhat.com>\nDate:   Fri Jul 26 13:21:34 2024 +0100\n\n    support: Add FAIL test failure helper\n    \n    Add a FAIL test failure helper analogous to FAIL_RET, that does not\n    cause the current function to return, providing a standardized way to\n    report a test failure with a message supplied while permitting the\n    caller to continue executing, for further reporting, cleaning up, etc.\n    \n    Update existing test cases that provide a conflicting definition of FAIL\n    by removing the local FAIL definition and then as follows:\n    \n    - tst-fortify-syslog: provide a meaningful message in addition to the\n      file name already added by <support/check.h>; 'support_record_failure'\n      is already called by 'support_print_failure_impl' invoked by the new\n      FAIL test failure helper.\n    \n    - tst-ctype: no update to FAIL calls required, with the name of the file\n      and the line number within of the failure site additionally included\n      by the new FAIL test failure helper, and error counting plus count\n      reporting upon test program termination also already provided by\n      'support_record_failure' and 'support_report_failure' respectively,\n      called by 'support_print_failure_impl' and 'adjust_exit_status' also\n      respectively.  However in a number of places 'printf' is called and\n      the error count adjusted by hand, so update these places to make use\n      of FAIL instead.  And last but not least adjust the final summary just\n      to report completion, with any error count following as reported by\n      the test driver.\n    \n    - test-tgmath2: no update to FAIL calls required, with the name of the\n      file of the failure site additionally included by the new FAIL test\n      failure helper.  Also there is no need to track the return status by\n      hand as any call to FAIL will eventually cause the test case to return\n      an unsuccesful exit status regardless of the return status from the\n      test function, via a call to 'adjust_exit_status' made by the test\n      driver.\n    \n    Reviewed-by: DJ Delorie <dj@redhat.com>\n    (cherry picked from commit 1b97a9f23bf605ca608162089c94187573fb2a9e)\n\ndiff --git a/debug/tst-fortify-syslog.c b/debug/tst-fortify-syslog.c\nindex a7ddbf7c6b..2712acf689 100644\n--- a/debug/tst-fortify-syslog.c\n+++ b/debug/tst-fortify-syslog.c\n@@ -22,7 +22,6 @@\n #include <syslog.h>\n #include <string.h>\n #include <unistd.h>\n-#include <stdio.h>\n \n #include <support/check.h>\n #include <support/support.h>\n@@ -46,18 +45,13 @@ handler (int sig)\n     _exit (127);\n }\n \n-#define FAIL()\t\t\t\t\t\t\\\n-  do {\t\t\t\t\t\t\t\\\n-      printf (\"Failure on line %d\\n\", __LINE__);\t\\\n-      support_record_failure ();\t\t\t\\\n-  } while (0)\n #define CHK_FAIL_START\t\t\t\t\t\\\n   chk_fail_ok = 1;\t\t\t\t\t\\\n   if (! setjmp (chk_fail_buf))\t\t\t\t\\\n     {\n #define CHK_FAIL_END\t\t\t\t\t\\\n       chk_fail_ok = 0;\t\t\t\t\t\\\n-      FAIL ();\t\t\t\t\t\t\\\n+      FAIL (\"not supposed to reach here\");\t\t\\\n     }\n \n static void\ndiff --git a/localedata/tst-ctype.c b/localedata/tst-ctype.c\nindex 9de979a2d7..a23689719c 100644\n--- a/localedata/tst-ctype.c\n+++ b/localedata/tst-ctype.c\n@@ -21,6 +21,8 @@\n #include <stdio.h>\n #include <string.h>\n \n+#include <support/check.h>\n+\n \n static const char lower[] = \"abcdefghijklmnopqrstuvwxyz\";\n static const char upper[] = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n@@ -53,19 +55,11 @@ static struct classes\n #define nclasses (sizeof (classes) / sizeof (classes[0]))\n \n \n-#define FAIL(str, args...) \\\n-  {\t\t\t\t\t\t\t\t\t      \\\n-    printf (\"      \" str \"\\n\", ##args);\t\t\t\t\t      \\\n-    ++errors;\t\t\t\t\t\t\t\t      \\\n-  }\n-\n-\n static int\n do_test (void)\n {\n   const char *cp;\n   const char *cp2;\n-  int errors = 0;\n   char *inpline = NULL;\n   size_t inplinelen = 0;\n   char *resline = NULL;\n@@ -394,11 +388,8 @@ punct = %04x  alnum = %04x\\n\",\n \t    {\n \t      if (((__ctype_b[(unsigned int) *inp] & classes[n].mask) != 0)\n \t\t  != (*resp != '0'))\n-\t\t{\n-\t\t  printf (\"    is%s('%c' = '\\\\x%02x') %s true\\n\", inpline,\n-\t\t\t  *inp, *inp, *resp == '1' ? \"not\" : \"is\");\n-\t\t  ++errors;\n-\t\t}\n+\t\tFAIL (\"    is%s('%c' = '\\\\x%02x') %s true\\n\", inpline,\n+\t\t      *inp, *inp, *resp == '1' ? \"not\" : \"is\");\n \t      ++inp;\n \t      ++resp;\n \t    }\n@@ -408,11 +399,8 @@ punct = %04x  alnum = %04x\\n\",\n \t  while (*inp != '\\0')\n \t    {\n \t      if (tolower (*inp) != *resp)\n-\t\t{\n-\t\t  printf (\"    tolower('%c' = '\\\\x%02x') != '%c'\\n\",\n-\t\t\t  *inp, *inp, *resp);\n-\t\t  ++errors;\n-\t\t}\n+\t\tFAIL (\"    tolower('%c' = '\\\\x%02x') != '%c'\\n\",\n+\t\t      *inp, *inp, *resp);\n \t      ++inp;\n \t      ++resp;\n \t    }\n@@ -422,11 +410,8 @@ punct = %04x  alnum = %04x\\n\",\n \t  while (*inp != '\\0')\n \t    {\n \t      if (toupper (*inp) != *resp)\n-\t\t{\n-\t\t  printf (\"    toupper('%c' = '\\\\x%02x') != '%c'\\n\",\n-\t\t\t  *inp, *inp, *resp);\n-\t\t  ++errors;\n-\t\t}\n+\t\tFAIL (\"    toupper('%c' = '\\\\x%02x') != '%c'\\n\",\n+\t\t      *inp, *inp, *resp);\n \t      ++inp;\n \t      ++resp;\n \t    }\n@@ -436,14 +421,7 @@ punct = %04x  alnum = %04x\\n\",\n     }\n \n \n-  if (errors != 0)\n-    {\n-      printf (\"  %d error%s for `%s' locale\\n\\n\\n\", errors,\n-\t      errors == 1 ? \"\" : \"s\", setlocale (LC_ALL, NULL));\n-      return 1;\n-    }\n-\n-  printf (\"  No errors for `%s' locale\\n\\n\\n\", setlocale (LC_ALL, NULL));\n+  printf (\"Completed testing for `%s' locale\\n\\n\\n\", setlocale (LC_ALL, NULL));\n   return 0;\n }\n \ndiff --git a/math/test-tgmath2.c b/math/test-tgmath2.c\nindex 37afa8a08a..4aeb877b8e 100644\n--- a/math/test-tgmath2.c\n+++ b/math/test-tgmath2.c\n@@ -24,6 +24,8 @@\n #include <string.h>\n #include <tgmath.h>\n \n+#include <support/check.h>\n+\n //#define DEBUG\n \n typedef complex float cfloat;\n@@ -87,13 +89,6 @@ enum\n int count;\n int counts[Tlast][C_last];\n \n-#define FAIL(str) \\\n-  do\t\t\t\t\t\t\t\t\\\n-    {\t\t\t\t\t\t\t\t\\\n-      printf (\"%s failure on line %d\\n\", (str), __LINE__);\t\\\n-      result = 1;\t\t\t\t\t\t\\\n-    }\t\t\t\t\t\t\t\t\\\n-  while (0)\n #define TEST_TYPE_ONLY(expr, rettype) \\\n   do\t\t\t\t\t\t\t\t\\\n     {\t\t\t\t\t\t\t\t\\\n@@ -133,8 +128,6 @@ int counts[Tlast][C_last];\n int\n test_cos (const int Vint4, const long long int Vllong4)\n {\n-  int result = 0;\n-\n   TEST (cos (vfloat1), float, cos);\n   TEST (cos (vdouble1), double, cos);\n   TEST (cos (vldouble1), ldouble, cos);\n@@ -152,7 +145,7 @@ test_cos (const int Vint4, const long long int Vllong4)\n   TEST (cos (Vcdouble1), cdouble, cos);\n   TEST (cos (Vcldouble1), cldouble, cos);\n \n-  return result;\n+  return 0;\n }\n \n int\ndiff --git a/support/check.h b/support/check.h\nindex 711f34b83b..7ea22c7a2c 100644\n--- a/support/check.h\n+++ b/support/check.h\n@@ -24,6 +24,11 @@\n \n __BEGIN_DECLS\n \n+/* Record a test failure, print the failure message to standard output\n+   and pass the result of 1 through.  */\n+#define FAIL(...) \\\n+  support_print_failure_impl (__FILE__, __LINE__, __VA_ARGS__)\n+\n /* Record a test failure, print the failure message to standard output\n    and return 1.  */\n #define FAIL_RET(...) \\\n\ncommit 27fb563bfee521239316142fa4968282bffa86a6\nAuthor: Maciej W. Rozycki <macro@redhat.com>\nDate:   Fri Jul 26 13:21:34 2024 +0100\n\n    stdio-common: Add test for vfscanf with matches longer than INT_MAX [BZ #27650]\n    \n    Complement commit b03e4d7bd25b (\"stdio: fix vfscanf with matches longer\n    than INT_MAX (bug 27650)\") and add a test case for the issue, inspired\n    by the reproducer provided with the bug report.\n    \n    This has been verified to succeed as from the commit referred and fail\n    beforehand.\n    \n    As the test requires 2GiB of data to be passed around its performance\n    has been evaluated using a choice of systems and the execution time\n    determined to be respectively in the range of 9s for POWER9@2.166GHz,\n    24s for FU740@1.2GHz, and 40s for 74Kf@950MHz.  As this is on the verge\n    of and beyond the default timeout it has been increased by the factor of\n    8.  Regardless, following recent practice the test has been added to the\n    standard rather than extended set.\n    \n    Reviewed-by: DJ Delorie <dj@redhat.com>\n    (cherry picked from commit 89cddc8a7096f3d9225868304d2bc0a1aaf07d63)\n\ndiff --git a/stdio-common/Makefile b/stdio-common/Makefile\nindex a63c05a120..e4f0146d2c 100644\n--- a/stdio-common/Makefile\n+++ b/stdio-common/Makefile\n@@ -240,6 +240,7 @@ tests := \\\n   tst-scanf-binary-c23 \\\n   tst-scanf-binary-gnu11 \\\n   tst-scanf-binary-gnu89 \\\n+  tst-scanf-bz27650 \\\n   tst-scanf-intn \\\n   tst-scanf-round \\\n   tst-scanf-to_inpunct \\\n@@ -328,6 +329,7 @@ generated += \\\n   tst-printf-fp-free.mtrace \\\n   tst-printf-fp-leak-mem.out \\\n   tst-printf-fp-leak.mtrace \\\n+  tst-scanf-bz27650.mtrace \\\n   tst-vfprintf-width-prec-mem.out \\\n   tst-vfprintf-width-prec.mtrace \\\n   # generated\n@@ -419,6 +421,9 @@ tst-printf-fp-free-ENV = \\\n tst-printf-fp-leak-ENV = \\\n   MALLOC_TRACE=$(objpfx)tst-printf-fp-leak.mtrace \\\n   LD_PRELOAD=$(common-objpfx)/malloc/libc_malloc_debug.so\n+tst-scanf-bz27650-ENV = \\\n+  MALLOC_TRACE=$(objpfx)tst-scanf-bz27650.mtrace \\\n+  LD_PRELOAD=$(common-objpfx)malloc/libc_malloc_debug.so\n \n $(objpfx)tst-unbputc.out: tst-unbputc.sh $(objpfx)tst-unbputc\n \t$(SHELL) $< $(common-objpfx) '$(test-program-prefix)'; \\\ndiff --git a/stdio-common/tst-scanf-bz27650.c b/stdio-common/tst-scanf-bz27650.c\nnew file mode 100644\nindex 0000000000..3a742bc865\n--- /dev/null\n+++ b/stdio-common/tst-scanf-bz27650.c\n@@ -0,0 +1,108 @@\n+/* Test for BZ #27650, formatted input matching beyond INT_MAX.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <error.h>\n+#include <errno.h>\n+#include <limits.h>\n+#include <mcheck.h>\n+#include <stddef.h>\n+#include <stdio.h>\n+#include <stdlib.h>\n+#include <string.h>\n+\n+#include <sys/types.h>\n+\n+#include <support/check.h>\n+#include <support/test-driver.h>\n+\n+/* Produce a stream of more than INT_MAX characters via buffer BUF of\n+   size SIZE according to bookkeeping in COOKIE and then return EOF.  */\n+\n+static ssize_t\n+io_read (void *cookie, char *buf, size_t size)\n+{\n+  unsigned int *written = cookie;\n+  unsigned int w = *written;\n+\n+  if (w > INT_MAX)\n+    return 0;\n+\n+  memset (buf, 'a', size);\n+  *written = w + size;\n+  return size;\n+}\n+\n+/* Consume a stream of more than INT_MAX characters from an artificial\n+   input stream of which none is the new line character.  The call to\n+   fscanf is supposed to complete upon the EOF condition of input,\n+   however in the presence of BZ #27650 it will terminate prematurely\n+   with characters still outstanding in input.  Diagnose the condition\n+   and return status accordingly.  */\n+\n+int\n+do_test (void)\n+{\n+  static cookie_io_functions_t io_funcs = { .read = io_read };\n+  unsigned int written = 0;\n+  FILE *in;\n+  int v;\n+\n+  mtrace ();\n+\n+  in = fopencookie (&written, \"r\", io_funcs);\n+  if (in == NULL)\n+    {\n+      FAIL (\"fopencookie: %m\");\n+      goto out;\n+    }\n+\n+  v = fscanf (in, \"%*[^\\n]\");\n+  if (ferror (in))\n+    {\n+      FAIL (\"fscanf: input failure, at %u: %m\", written);\n+      goto out_close;\n+    }\n+  else if (v == EOF)\n+    {\n+      FAIL (\"fscanf: unexpected end of file, at %u\", written);\n+      goto out_close;\n+    }\n+\n+  if (!feof (in))\n+    {\n+      v = fgetc (in);\n+      if (ferror (in))\n+\tFAIL (\"fgetc: input failure: %m\");\n+      else if (v == EOF)\n+\tFAIL (\"fgetc: unexpected end of file after missing end of file\");\n+      else if (v == '\\n')\n+\tFAIL (\"unexpected new line character received\");\n+      else\n+\tFAIL (\"character received after end of file expected: \\\\x%02x\", v);\n+    }\n+\n+out_close:\n+  if (fclose (in) != 0)\n+    FAIL (\"fclose: %m\");\n+\n+out:\n+  return EXIT_SUCCESS;\n+}\n+\n+#define TIMEOUT (DEFAULT_TIMEOUT * 8)\n+#include <support/test-driver.c>\n\ncommit 2f749d2b15cbc82268d7f8735f21ae1e3b68754f\nAuthor: Siddhesh Poyarekar <siddhesh@sourceware.org>\nDate:   Wed Aug 14 19:20:04 2024 -0400\n\n    Make tst-ungetc use libsupport\n    \n    Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>\n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit 3f7df7e757f4efec38e45d4068e5492efcac4856)\n\ndiff --git a/stdio-common/tst-ungetc.c b/stdio-common/tst-ungetc.c\nindex 1344b2b591..5c808f0734 100644\n--- a/stdio-common/tst-ungetc.c\n+++ b/stdio-common/tst-ungetc.c\n@@ -1,70 +1,72 @@\n-/* Test for ungetc bugs.  */\n+/* Test for ungetc bugs.\n+   Copyright (C) 1996-2024 Free Software Foundation, Inc.\n+   Copyright The GNU Toolchain Authors.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n \n #include <stdio.h>\n #include <stdlib.h>\n-#include <unistd.h>\n-\n-#undef assert\n-#define assert(x) \\\n-  if (!(x)) \\\n-    { \\\n-      fputs (\"test failed: \" #x \"\\n\", stderr); \\\n-      retval = 1; \\\n-      goto the_end; \\\n-    }\n+#include <support/check.h>\n+#include <support/support.h>\n+#include <support/temp_file.h>\n+#include <support/xstdio.h>\n+#include <support/xunistd.h>\n \n-int\n-main (int argc, char *argv[])\n+static int\n+do_test (void)\n {\n-  char name[] = \"/tmp/tst-ungetc.XXXXXX\";\n+  char *name = NULL;\n   FILE *fp = NULL;\n-  int retval = 0;\n   int c;\n   char buffer[64];\n \n-  int fd = mkstemp (name);\n+  int fd = create_temp_file (\"tst-ungetc.\", &name);\n   if (fd == -1)\n-    {\n-      printf (\"mkstemp failed: %m\\n\");\n-      return 1;\n-    }\n-  close (fd);\n-  fp = fopen (name, \"w\");\n-  assert (fp != NULL)\n-  fputs (\"bla\", fp);\n-  fclose (fp);\n-  fp = NULL;\n+    FAIL_EXIT1 (\"cannot create temporary file: %m\");\n+  xclose (fd);\n \n-  fp = fopen (name, \"r\");\n-  assert (fp != NULL);\n-  assert (ungetc ('z', fp) == 'z');\n-  assert (getc (fp) == 'z');\n-  assert (getc (fp) == 'b');\n-  assert (getc (fp) == 'l');\n-  assert (ungetc ('m', fp) == 'm');\n-  assert (getc (fp) == 'm');\n-  assert ((c = getc (fp)) == 'a');\n-  assert (getc (fp) == EOF);\n-  assert (ungetc (c, fp) == c);\n-  assert (feof (fp) == 0);\n-  assert (getc (fp) == c);\n-  assert (getc (fp) == EOF);\n-  fclose (fp);\n-  fp = NULL;\n+  fp = xfopen (name, \"w\");\n+  fputs (\"bla\", fp);\n+  xfclose (fp);\n \n-  fp = fopen (name, \"r\");\n-  assert (fp != NULL);\n-  assert (getc (fp) == 'b');\n-  assert (getc (fp) == 'l');\n-  assert (ungetc ('b', fp) == 'b');\n-  assert (fread (buffer, 1, 64, fp) == 2);\n-  assert (buffer[0] == 'b');\n-  assert (buffer[1] == 'a');\n+  fp = xfopen (name, \"r\");\n+  TEST_VERIFY_EXIT (ungetc ('z', fp) == 'z');\n+  TEST_VERIFY_EXIT (getc (fp) == 'z');\n+  TEST_VERIFY_EXIT (getc (fp) == 'b');\n+  TEST_VERIFY_EXIT (getc (fp) == 'l');\n+  TEST_VERIFY_EXIT (ungetc ('m', fp) == 'm');\n+  TEST_VERIFY_EXIT (getc (fp) == 'm');\n+  TEST_VERIFY_EXIT ((c = getc (fp)) == 'a');\n+  TEST_VERIFY_EXIT (getc (fp) == EOF);\n+  TEST_VERIFY_EXIT (ungetc (c, fp) == c);\n+  TEST_VERIFY_EXIT (feof (fp) == 0);\n+  TEST_VERIFY_EXIT (getc (fp) == c);\n+  TEST_VERIFY_EXIT (getc (fp) == EOF);\n+  xfclose (fp);\n \n-the_end:\n-  if (fp != NULL)\n-    fclose (fp);\n-  unlink (name);\n+  fp = xfopen (name, \"r\");\n+  TEST_VERIFY_EXIT (getc (fp) == 'b');\n+  TEST_VERIFY_EXIT (getc (fp) == 'l');\n+  TEST_VERIFY_EXIT (ungetc ('b', fp) == 'b');\n+  TEST_VERIFY_EXIT (fread (buffer, 1, 64, fp) == 2);\n+  TEST_VERIFY_EXIT (buffer[0] == 'b');\n+  TEST_VERIFY_EXIT (buffer[1] == 'a');\n+  xfclose (fp);\n \n-  return retval;\n+  return 0;\n }\n+\n+#include <support/test-driver.c>\n\ncommit dac7a0694b5e853f08be518cd5a133ac5804666d\nAuthor: Siddhesh Poyarekar <siddhesh@sourceware.org>\nDate:   Tue Aug 13 21:00:06 2024 -0400\n\n    ungetc: Fix uninitialized read when putting into unused streams [BZ #27821]\n    \n    When ungetc is called on an unused stream, the backup buffer is\n    allocated without the main get area being present.  This results in\n    every subsequent ungetc (as the stream remains in the backup area)\n    checking uninitialized memory in the backup buffer when trying to put a\n    character back into the stream.\n    \n    Avoid comparing the input character with buffer contents when in backup\n    to avoid this uninitialized read.  The uninitialized read is harmless in\n    this context since the location is promptly overwritten with the input\n    character, thus fulfilling ungetc functionality.\n    \n    Also adjust wording in the manual to drop the paragraph that says glibc\n    cannot do multiple ungetc back to back since with this change, ungetc\n    can actually do this.\n    \n    Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>\n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit cdf0f88f97b0aaceb894cc02b21159d148d7065c)\n\ndiff --git a/libio/genops.c b/libio/genops.c\nindex 99f5e80f20..b012fa33d2 100644\n--- a/libio/genops.c\n+++ b/libio/genops.c\n@@ -662,7 +662,7 @@ _IO_sputbackc (FILE *fp, int c)\n {\n   int result;\n \n-  if (fp->_IO_read_ptr > fp->_IO_read_base\n+  if (fp->_IO_read_ptr > fp->_IO_read_base && !_IO_in_backup (fp)\n       && (unsigned char)fp->_IO_read_ptr[-1] == (unsigned char)c)\n     {\n       fp->_IO_read_ptr--;\ndiff --git a/manual/stdio.texi b/manual/stdio.texi\nindex 8517653507..92614775fa 100644\n--- a/manual/stdio.texi\n+++ b/manual/stdio.texi\n@@ -1467,11 +1467,9 @@ program; usually @code{ungetc} is used only to unread a character that\n was just read from the same stream.  @Theglibc{} supports this\n even on files opened in binary mode, but other systems might not.\n \n-@Theglibc{} only supports one character of pushback---in other\n-words, it does not work to call @code{ungetc} twice without doing input\n-in between.  Other systems might let you push back multiple characters;\n-then reading from the stream retrieves the characters in the reverse\n-order that they were pushed.\n+@Theglibc{} supports pushing back multiple characters; subsequently\n+reading from the stream retrieves the characters in the reverse order\n+that they were pushed.\n \n Pushing back characters doesn't alter the file; only the internal\n buffering for the stream is affected.  If a file positioning function\ndiff --git a/stdio-common/tst-ungetc.c b/stdio-common/tst-ungetc.c\nindex 5c808f0734..388b202493 100644\n--- a/stdio-common/tst-ungetc.c\n+++ b/stdio-common/tst-ungetc.c\n@@ -48,6 +48,8 @@ do_test (void)\n   TEST_VERIFY_EXIT (getc (fp) == 'b');\n   TEST_VERIFY_EXIT (getc (fp) == 'l');\n   TEST_VERIFY_EXIT (ungetc ('m', fp) == 'm');\n+  TEST_VERIFY_EXIT (ungetc ('n', fp) == 'n');\n+  TEST_VERIFY_EXIT (getc (fp) == 'n');\n   TEST_VERIFY_EXIT (getc (fp) == 'm');\n   TEST_VERIFY_EXIT ((c = getc (fp)) == 'a');\n   TEST_VERIFY_EXIT (getc (fp) == EOF);\n\ncommit e24902f409994f226dbc6fde2476009df452a18f\nAuthor: Siddhesh Poyarekar <siddhesh@sourceware.org>\nDate:   Tue Aug 13 21:08:49 2024 -0400\n\n    ungetc: Fix backup buffer leak on program exit [BZ #27821]\n    \n    If a file descriptor is left unclosed and is cleaned up by _IO_cleanup\n    on exit, its backup buffer remains unfreed, registering as a leak in\n    valgrind.  This is not strictly an issue since (1) the program should\n    ideally be closing the stream once it's not in use and (2) the program\n    is about to exit anyway, so keeping the backup buffer around a wee bit\n    longer isn't a real problem.  Free it anyway to keep valgrind happy\n    when the streams in question are the standard ones, i.e. stdout, stdin\n    or stderr.\n    \n    Also, the _IO_have_backup macro checks for _IO_save_base,\n    which is a roundabout way to check for a backup buffer instead of\n    directly looking for _IO_backup_base.  The roundabout check breaks when\n    the main get area has not been used and user pushes a char into the\n    backup buffer with ungetc.  Fix this to use the _IO_backup_base\n    directly.\n    \n    Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>\n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit 3e1d8d1d1dca24ae90df2ea826a8916896fc7e77)\n\ndiff --git a/libio/genops.c b/libio/genops.c\nindex b012fa33d2..35d8b30710 100644\n--- a/libio/genops.c\n+++ b/libio/genops.c\n@@ -816,6 +816,12 @@ _IO_unbuffer_all (void)\n \tlegacy = 1;\n #endif\n \n+      /* Free up the backup area if it was ever allocated.  */\n+      if (_IO_have_backup (fp))\n+\t_IO_free_backup_area (fp);\n+      if (fp->_mode > 0 && _IO_have_wbackup (fp))\n+\t_IO_free_wbackup_area (fp);\n+\n       if (! (fp->_flags & _IO_UNBUFFERED)\n \t  /* Iff stream is un-orientated, it wasn't used. */\n \t  && (legacy || fp->_mode != 0))\ndiff --git a/libio/libioP.h b/libio/libioP.h\nindex 1af287b19f..616253fcd0 100644\n--- a/libio/libioP.h\n+++ b/libio/libioP.h\n@@ -577,8 +577,8 @@ extern void _IO_old_init (FILE *fp, int flags) __THROW;\n        ((__fp)->_wide_data->_IO_write_base \\\n \t= (__fp)->_wide_data->_IO_write_ptr = __p, \\\n \t(__fp)->_wide_data->_IO_write_end = (__ep))\n-#define _IO_have_backup(fp) ((fp)->_IO_save_base != NULL)\n-#define _IO_have_wbackup(fp) ((fp)->_wide_data->_IO_save_base != NULL)\n+#define _IO_have_backup(fp) ((fp)->_IO_backup_base != NULL)\n+#define _IO_have_wbackup(fp) ((fp)->_wide_data->_IO_backup_base != NULL)\n #define _IO_in_backup(fp) ((fp)->_flags & _IO_IN_BACKUP)\n #define _IO_have_markers(fp) ((fp)->_markers != NULL)\n #define _IO_blen(fp) ((fp)->_IO_buf_end - (fp)->_IO_buf_base)\ndiff --git a/stdio-common/Makefile b/stdio-common/Makefile\nindex e4f0146d2c..a91754f52d 100644\n--- a/stdio-common/Makefile\n+++ b/stdio-common/Makefile\n@@ -254,6 +254,7 @@ tests := \\\n   tst-swscanf \\\n   tst-tmpnam \\\n   tst-ungetc \\\n+  tst-ungetc-leak \\\n   tst-unlockedio \\\n   tst-vfprintf-mbs-prec \\\n   tst-vfprintf-user-type \\\n@@ -316,6 +317,7 @@ tests-special += \\\n   $(objpfx)tst-printf-bz25691-mem.out \\\n   $(objpfx)tst-printf-fp-free-mem.out \\\n   $(objpfx)tst-printf-fp-leak-mem.out \\\n+  $(objpfx)tst-ungetc-leak-mem.out \\\n   $(objpfx)tst-vfprintf-width-prec-mem.out \\\n   # tests-special\n \n@@ -330,6 +332,8 @@ generated += \\\n   tst-printf-fp-leak-mem.out \\\n   tst-printf-fp-leak.mtrace \\\n   tst-scanf-bz27650.mtrace \\\n+  tst-ungetc-leak-mem.out \\\n+  tst-ungetc-leak.mtrace \\\n   tst-vfprintf-width-prec-mem.out \\\n   tst-vfprintf-width-prec.mtrace \\\n   # generated\n@@ -424,6 +428,9 @@ tst-printf-fp-leak-ENV = \\\n tst-scanf-bz27650-ENV = \\\n   MALLOC_TRACE=$(objpfx)tst-scanf-bz27650.mtrace \\\n   LD_PRELOAD=$(common-objpfx)malloc/libc_malloc_debug.so\n+tst-ungetc-leak-ENV = \\\n+  MALLOC_TRACE=$(objpfx)tst-ungetc-leak.mtrace \\\n+  LD_PRELOAD=$(common-objpfx)malloc/libc_malloc_debug.so\n \n $(objpfx)tst-unbputc.out: tst-unbputc.sh $(objpfx)tst-unbputc\n \t$(SHELL) $< $(common-objpfx) '$(test-program-prefix)'; \\\ndiff --git a/stdio-common/tst-ungetc-leak.c b/stdio-common/tst-ungetc-leak.c\nnew file mode 100644\nindex 0000000000..6c5152b43f\n--- /dev/null\n+++ b/stdio-common/tst-ungetc-leak.c\n@@ -0,0 +1,32 @@\n+/* Test for memory leak with ungetc when stream is unused.\n+   Copyright The GNU Toolchain Authors.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <stdio.h>\n+#include <mcheck.h>\n+#include <support/check.h>\n+#include <support/support.h>\n+\n+static int\n+do_test (void)\n+{\n+  mtrace ();\n+  TEST_COMPARE (ungetc('y', stdin), 'y');\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\n\ncommit 3b3350d7baa8de70b71c02e964d5b8343749ebf8\nAuthor: Maciej W. Rozycki <macro@redhat.com>\nDate:   Fri Jul 26 13:21:34 2024 +0100\n\n    posix: Use <support/check.h> facilities in tst-truncate and tst-truncate64\n    \n    Remove local FAIL macro in favor to FAIL_RET from <support/check.h>,\n    which provides equivalent reporting, with the name of the file of the\n    failure site additionally included, for the tst-truncate-common core\n    shared between the tst-truncate and tst-truncate64 tests.\n    \n    Reviewed-by: DJ Delorie <dj@redhat.com>\n    (cherry picked from commit fe47595504a55e7bb992f8928533df154b510383)\n\ndiff --git a/posix/tst-truncate-common.c b/posix/tst-truncate-common.c\nindex b774fa46b8..b8c561ffdb 100644\n--- a/posix/tst-truncate-common.c\n+++ b/posix/tst-truncate-common.c\n@@ -21,6 +21,8 @@\n #include <sys/stat.h>\n #include <unistd.h>\n \n+#include <support/check.h>\n+\n static void do_prepare (void);\n #define PREPARE(argc, argv)     do_prepare ()\n static int do_test (void);\n@@ -42,9 +44,6 @@ do_prepare (void)\n     }\n }\n \n-#define FAIL(str) \\\n-  do { printf (\"error: %s (line %d)\\n\", str, __LINE__); return 1; } while (0)\n-\n static int\n do_test_with_offset (off_t offset)\n {\n@@ -54,35 +53,35 @@ do_test_with_offset (off_t offset)\n   memset (buf, 0xcf, sizeof (buf));\n \n   if (pwrite (temp_fd, buf, sizeof (buf), offset) != sizeof (buf))\n-    FAIL (\"write failed\");\n+    FAIL_RET (\"write failed\");\n   if (fstat (temp_fd, &st) < 0 || st.st_size != (offset + sizeof (buf)))\n-    FAIL (\"initial size wrong\");\n+    FAIL_RET (\"initial size wrong\");\n \n   if (ftruncate (temp_fd, offset + 800) < 0)\n-    FAIL (\"size reduction with ftruncate failed\");\n+    FAIL_RET (\"size reduction with ftruncate failed\");\n   if (fstat (temp_fd, &st) < 0 || st.st_size != (offset + 800))\n-    FAIL (\"size after reduction with ftruncate is incorrect\");\n+    FAIL_RET (\"size after reduction with ftruncate is incorrect\");\n \n   /* The following test covers more than POSIX.  POSIX does not require\n      that ftruncate() can increase the file size.  But we are testing\n      Unix systems.  */\n   if (ftruncate (temp_fd, offset + 1200) < 0)\n-    FAIL (\"size increate with ftruncate failed\");\n+    FAIL_RET (\"size increate with ftruncate failed\");\n   if (fstat (temp_fd, &st) < 0 || st.st_size != (offset + 1200))\n-    FAIL (\"size after increase is incorrect\");\n+    FAIL_RET (\"size after increase is incorrect\");\n \n   if (truncate (temp_filename, offset + 800) < 0)\n-    FAIL (\"size reduction with truncate failed\");\n+    FAIL_RET (\"size reduction with truncate failed\");\n   if (fstat (temp_fd, &st) < 0 || st.st_size != (offset + 800))\n-    FAIL (\"size after reduction with truncate incorrect\");\n+    FAIL_RET (\"size after reduction with truncate incorrect\");\n \n   /* The following test covers more than POSIX.  POSIX does not require\n      that truncate() can increase the file size.  But we are testing\n      Unix systems.  */\n   if (truncate (temp_filename, (offset + 1200)) < 0)\n-    FAIL (\"size increase with truncate failed\");\n+    FAIL_RET (\"size increase with truncate failed\");\n   if (fstat (temp_fd, &st) < 0 || st.st_size != (offset + 1200))\n-    FAIL (\"size increase with truncate is incorrect\");\n+    FAIL_RET (\"size increase with truncate is incorrect\");\n \n   return 0;\n }\n\ncommit 3414b17e9db16c3bc0de5b49555c4f94f155ffc8\nAuthor: Maciej W. Rozycki <macro@redhat.com>\nDate:   Fri Jul 26 13:21:34 2024 +0100\n\n    nptl: Use <support/check.h> facilities in tst-setuid3\n    \n    Remove local FAIL macro in favor to FAIL_EXIT1 from <support/check.h>,\n    which provides equivalent reporting, with the name of the file and the\n    line number within of the failure site additionally included.  Remove\n    FAIL_ERR altogether and include \": %m\" explicitly with the format string\n    supplied to FAIL_EXIT1 as there seems little value to have a separate\n    macro just for this.\n    \n    Reviewed-by: DJ Delorie <dj@redhat.com>\n    (cherry picked from commit 8c98195af6e6f1ce21743fc26c723e0f7e45bcf2)\n\ndiff --git a/sysdeps/pthread/tst-setuid3.c b/sysdeps/pthread/tst-setuid3.c\nindex 83f42a0ae5..3845ab03d3 100644\n--- a/sysdeps/pthread/tst-setuid3.c\n+++ b/sysdeps/pthread/tst-setuid3.c\n@@ -15,24 +15,19 @@\n    License along with the GNU C Library; if not, see\n    <https://www.gnu.org/licenses/>.  */\n \n-#include <stdio.h>\n #include <errno.h>\n #include <pthread.h>\n #include <stdbool.h>\n #include <unistd.h>\n \n+#include <support/check.h>\n+\n /* The test must run under a non-privileged user ID.  */\n static const uid_t test_uid = 1;\n \n static pthread_barrier_t barrier1;\n static pthread_barrier_t barrier2;\n \n-#define FAIL(fmt, ...) \\\n-  do { printf (\"FAIL: \" fmt \"\\n\", __VA_ARGS__); _exit (1); } while (0)\n-\n-#define FAIL_ERR(fmt, ...) \\\n-  do { printf (\"FAIL: \" fmt \": %m\\n\", __VA_ARGS__); _exit (1); } while (0)\n-\n /* True if x is not a successful return code from pthread_barrier_wait.  */\n static inline bool\n is_invalid_barrier_ret (int x)\n@@ -45,10 +40,10 @@ thread_func (void *ctx __attribute__ ((unused)))\n {\n   int ret = pthread_barrier_wait (&barrier1);\n   if (is_invalid_barrier_ret (ret))\n-    FAIL (\"pthread_barrier_wait (barrier1) (on thread): %d\", ret);\n+    FAIL_EXIT1 (\"pthread_barrier_wait (barrier1) (on thread): %d\", ret);\n   ret = pthread_barrier_wait (&barrier2);\n   if (is_invalid_barrier_ret (ret))\n-    FAIL (\"pthread_barrier_wait (barrier2) (on thread): %d\", ret);\n+    FAIL_EXIT1 (\"pthread_barrier_wait (barrier2) (on thread): %d\", ret);\n   return NULL;\n }\n \n@@ -59,13 +54,13 @@ setuid_failure (int phase)\n   switch (ret)\n     {\n     case 0:\n-      FAIL (\"setuid succeeded unexpectedly in phase %d\", phase);\n+      FAIL_EXIT1 (\"setuid succeeded unexpectedly in phase %d\", phase);\n     case -1:\n       if (errno != EPERM)\n-\tFAIL_ERR (\"setuid phase %d\", phase);\n+\tFAIL_EXIT1 (\"setuid phase %d: %m\", phase);\n       break;\n     default:\n-      FAIL (\"invalid setuid return value in phase %d: %d\", phase, ret);\n+      FAIL_EXIT1 (\"invalid setuid return value in phase %d: %d\", phase, ret);\n     }\n }\n \n@@ -74,42 +69,42 @@ do_test (void)\n {\n   if (getuid () == 0)\n     if (setuid (test_uid) != 0)\n-      FAIL_ERR (\"setuid (%u)\", (unsigned) test_uid);\n+      FAIL_EXIT1 (\"setuid (%u): %m\", (unsigned) test_uid);\n   if (setuid (getuid ()))\n-    FAIL_ERR (\"setuid (%s)\", \"getuid ()\");\n+    FAIL_EXIT1 (\"setuid (%s): %m\", \"getuid ()\");\n   setuid_failure (1);\n \n   int ret = pthread_barrier_init (&barrier1, NULL, 2);\n   if (ret != 0)\n-    FAIL (\"pthread_barrier_init (barrier1): %d\", ret);\n+    FAIL_EXIT1 (\"pthread_barrier_init (barrier1): %d\", ret);\n   ret = pthread_barrier_init (&barrier2, NULL, 2);\n   if (ret != 0)\n-    FAIL (\"pthread_barrier_init (barrier2): %d\", ret);\n+    FAIL_EXIT1 (\"pthread_barrier_init (barrier2): %d\", ret);\n \n   pthread_t thread;\n   ret = pthread_create (&thread, NULL, thread_func, NULL);\n   if (ret != 0)\n-    FAIL (\"pthread_create: %d\", ret);\n+    FAIL_EXIT1 (\"pthread_create: %d\", ret);\n \n   /* Ensure that the thread is running properly.  */\n   ret = pthread_barrier_wait (&barrier1);\n   if (is_invalid_barrier_ret (ret))\n-    FAIL (\"pthread_barrier_wait (barrier1): %d\", ret);\n+    FAIL_EXIT1 (\"pthread_barrier_wait (barrier1): %d\", ret);\n \n   setuid_failure (2);\n \n   /* Check success case. */\n   if (setuid (getuid ()) != 0)\n-    FAIL_ERR (\"setuid (%s)\", \"getuid ()\");\n+    FAIL_EXIT1 (\"setuid (%s): %m\", \"getuid ()\");\n \n   /* Shutdown.  */\n   ret = pthread_barrier_wait (&barrier2);\n   if (is_invalid_barrier_ret (ret))\n-    FAIL (\"pthread_barrier_wait (barrier2): %d\", ret);\n+    FAIL_EXIT1 (\"pthread_barrier_wait (barrier2): %d\", ret);\n \n   ret = pthread_join (thread, NULL);\n   if (ret != 0)\n-    FAIL (\"pthread_join: %d\", ret);\n+    FAIL_EXIT1 (\"pthread_join: %d\", ret);\n \n   return 0;\n }\n\ncommit b7edcfa0f41ccfaeb665a661d3a6a594c8d95848\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Thu Aug 1 23:31:23 2024 +0200\n\n    elf: Clarify and invert second argument of _dl_allocate_tls_init\n    \n    Also remove an outdated comment: _dl_allocate_tls_init is\n    called as part of pthread_create.\n    \n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit fe06fb313bddf7e4530056897d4a706606e49377)\n\ndiff --git a/elf/dl-tls.c b/elf/dl-tls.c\nindex 3d221273f1..ecb966d282 100644\n--- a/elf/dl-tls.c\n+++ b/elf/dl-tls.c\n@@ -552,9 +552,14 @@ _dl_resize_dtv (dtv_t *dtv, size_t max_modid)\n /* Allocate initial TLS.  RESULT should be a non-NULL pointer to storage\n    for the TLS space.  The DTV may be resized, and so this function may\n    call malloc to allocate that space.  The loader's GL(dl_load_tls_lock)\n-   is taken when manipulating global TLS-related data in the loader.  */\n+   is taken when manipulating global TLS-related data in the loader.\n+\n+   If MAIN_THREAD, this is the first call during process\n+   initialization.  In this case, TLS initialization for secondary\n+   (audit) namespaces is skipped because that has already been handled\n+   by dlopen.  */\n void *\n-_dl_allocate_tls_init (void *result, bool init_tls)\n+_dl_allocate_tls_init (void *result, bool main_thread)\n {\n   if (result == NULL)\n     /* The memory allocation failed.  */\n@@ -633,7 +638,7 @@ _dl_allocate_tls_init (void *result, bool init_tls)\n \t     because it would already be set by the audit setup.  However,\n \t     subsequent thread creation would need to follow the default\n \t     behaviour.   */\n-\t  if (map->l_ns != LM_ID_BASE && !init_tls)\n+\t  if (map->l_ns != LM_ID_BASE && main_thread)\n \t    continue;\n \t  memset (__mempcpy (dest, map->l_tls_initimage,\n \t\t\t     map->l_tls_initimage_size), '\\0',\n@@ -661,7 +666,7 @@ _dl_allocate_tls (void *mem)\n {\n   return _dl_allocate_tls_init (mem == NULL\n \t\t\t\t? _dl_allocate_tls_storage ()\n-\t\t\t\t: allocate_dtv (mem), true);\n+\t\t\t\t: allocate_dtv (mem), false);\n }\n rtld_hidden_def (_dl_allocate_tls)\n \ndiff --git a/elf/rtld.c b/elf/rtld.c\nindex bfdf632e77..09b9c9993b 100644\n--- a/elf/rtld.c\n+++ b/elf/rtld.c\n@@ -2338,7 +2338,7 @@ dl_main (const ElfW(Phdr) *phdr,\n      into the main thread's TLS area, which we allocated above.\n      Note: thread-local variables must only be accessed after completing\n      the next step.  */\n-  _dl_allocate_tls_init (tcbp, false);\n+  _dl_allocate_tls_init (tcbp, true);\n \n   /* And finally install it for the main thread.  */\n   if (! __rtld_tls_init_tp_called)\ndiff --git a/nptl/allocatestack.c b/nptl/allocatestack.c\nindex f35a8369bd..2cb562f8ea 100644\n--- a/nptl/allocatestack.c\n+++ b/nptl/allocatestack.c\n@@ -139,7 +139,7 @@ get_cached_stack (size_t *sizep, void **memp)\n   memset (dtv, '\\0', (dtv[-1].counter + 1) * sizeof (dtv_t));\n \n   /* Re-initialize the TLS.  */\n-  _dl_allocate_tls_init (TLS_TPADJ (result), true);\n+  _dl_allocate_tls_init (TLS_TPADJ (result), false);\n \n   return result;\n }\ndiff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h\nindex 656e8a3fa0..154efb0e19 100644\n--- a/sysdeps/generic/ldsodefs.h\n+++ b/sysdeps/generic/ldsodefs.h\n@@ -1200,10 +1200,8 @@ extern void _dl_get_tls_static_info (size_t *sizep, size_t *alignp);\n \n extern void _dl_allocate_static_tls (struct link_map *map) attribute_hidden;\n \n-/* These are internal entry points to the two halves of _dl_allocate_tls,\n-   only used within rtld.c itself at startup time.  */\n extern void *_dl_allocate_tls_storage (void) attribute_hidden;\n-extern void *_dl_allocate_tls_init (void *, bool);\n+extern void *_dl_allocate_tls_init (void *result, bool main_thread);\n rtld_hidden_proto (_dl_allocate_tls_init)\n \n /* True if the TCB has been set up.  */\n\ncommit f496b750f135e57da921e975835c44bd199246dd\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Thu Aug 1 23:31:30 2024 +0200\n\n    elf: Avoid re-initializing already allocated TLS in dlopen (bug 31717)\n    \n    The old code used l_init_called as an indicator for whether TLS\n    initialization was complete.  However, it is possible that\n    TLS for an object is initialized, written to, and then dlopen\n    for this object is called again, and l_init_called is not true at\n    this point.  Previously, this resulted in TLS being initialized\n    twice, discarding any interim writes (technically introducing a\n    use-after-free bug even).\n    \n    This commit introduces an explicit per-object flag, l_tls_in_slotinfo.\n    It indicates whether _dl_add_to_slotinfo has been called for this\n    object.  This flag is used to avoid double-initialization of TLS.\n    In update_tls_slotinfo, the first_static_tls micro-optimization\n    is removed because preserving the initalization flag for subsequent\n    use by the second loop for static TLS is a bit complicated, and\n    another per-object flag does not seem to be worth it.  Furthermore,\n    the l_init_called flag is dropped from the second loop (for static\n    TLS initialization) because l_need_tls_init on its own prevents\n    double-initialization.\n    \n    The remaining l_init_called usage in resize_scopes and update_scopes\n    is just an optimization due to the use of scope_has_map, so it is\n    not changed in this commit.\n    \n    The isupper check ensures that libc.so.6 is TLS is not reverted.\n    Such a revert happens if l_need_tls_init is not cleared in\n    _dl_allocate_tls_init for the main_thread case, now that\n    l_init_called is not checked anymore in update_tls_slotinfo\n    in elf/dl-open.c.\n    \n    Reported-by: Jonathon Anderson <janderson@rice.edu>\n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit 5097cd344fd243fb8deb6dec96e8073753f962f9)\n\ndiff --git a/NEWS b/NEWS\nindex 10a125bc66..5b20efbf6c 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -10,7 +10,7 @@ Version 2.40.1\n The following bugs are resolved with this release:\n \n   [30081] resolv: Do not wait for non-existing second DNS response after error\n-  [31968] mremap implementation in C does not handle arguments correctly\n+  [31717] elf: Avoid re-initializing already allocated TLS in dlopen\n   [31890] resolv: Allow short error responses to match any DNS query\n   [31968] mremap implementation in C does not handle arguments correctly\n   [32026] strerror/strsignal TLS not handled correctly for secondary namespaces\ndiff --git a/elf/Makefile b/elf/Makefile\nindex a3475f3fb5..a03c6520d8 100644\n--- a/elf/Makefile\n+++ b/elf/Makefile\n@@ -416,6 +416,10 @@ tests += \\\n   tst-dlmopen4 \\\n   tst-dlopen-self \\\n   tst-dlopen-tlsmodid \\\n+  tst-dlopen-tlsreinit1 \\\n+  tst-dlopen-tlsreinit2 \\\n+  tst-dlopen-tlsreinit3 \\\n+  tst-dlopen-tlsreinit4 \\\n   tst-dlopenfail \\\n   tst-dlopenfail-2 \\\n   tst-dlopenrpath \\\n@@ -853,6 +857,9 @@ modules-names += \\\n   tst-dlmopen-twice-mod1 \\\n   tst-dlmopen-twice-mod2 \\\n   tst-dlmopen1mod \\\n+  tst-dlopen-tlsreinitmod1 \\\n+  tst-dlopen-tlsreinitmod2 \\\n+  tst-dlopen-tlsreinitmod3 \\\n   tst-dlopenfaillinkmod \\\n   tst-dlopenfailmod1 \\\n   tst-dlopenfailmod2 \\\n@@ -3118,3 +3125,26 @@ $(objpfx)tst-recursive-tls.out: \\\n     0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)\n $(objpfx)tst-recursive-tlsmod%.os: tst-recursive-tlsmodN.c\n \t$(compile-command.c) -DVAR=thread_$* -DFUNC=get_threadvar_$*\n+\n+# Order matters here.  The test needs the constructor for\n+# tst-dlopen-tlsreinitmod2.so to be called first.\n+LDFLAGS-tst-dlopen-tlsreinitmod1.so = -Wl,--no-as-needed\n+$(objpfx)tst-dlopen-tlsreinitmod1.so: \\\n+  $(objpfx)tst-dlopen-tlsreinitmod3.so $(objpfx)tst-dlopen-tlsreinitmod2.so\n+LDFLAGS-tst-dlopen-tlsreinit2 = -Wl,--no-as-needed\n+$(objpfx)tst-dlopen-tlsreinit2: \\\n+  $(objpfx)tst-dlopen-tlsreinitmod3.so $(objpfx)tst-dlopen-tlsreinitmod2.so\n+LDFLAGS-tst-dlopen-tlsreinit4 = -Wl,--no-as-needed\n+$(objpfx)tst-dlopen-tlsreinit4: \\\n+  $(objpfx)tst-dlopen-tlsreinitmod3.so $(objpfx)tst-dlopen-tlsreinitmod2.so\n+# tst-dlopen-tlsreinitmod2.so is underlinked and refers to\n+# tst-dlopen-tlsreinitmod3.so.  The dependency is provided via\n+# $(objpfx)tst-dlopen-tlsreinitmod1.so.\n+tst-dlopen-tlsreinitmod2.so-no-z-defs = yes\n+$(objpfx)tst-dlopen-tlsreinit.out: $(objpfx)tst-dlopen-tlsreinitmod1.so \\\n+  $(objpfx)tst-dlopen-tlsreinitmod2.so $(objpfx)tst-dlopen-tlsreinitmod3.so\n+# Reuse an audit module which provides ample debug logging.\n+$(objpfx)tst-dlopen-tlsreinit3.out: $(objpfx)tst-auditmod1.so\n+tst-dlopen-tlsreinit3-ENV = LD_AUDIT=$(objpfx)tst-auditmod1.so\n+$(objpfx)tst-dlopen-tlsreinit4.out: $(objpfx)tst-auditmod1.so\n+tst-dlopen-tlsreinit4-ENV = LD_AUDIT=$(objpfx)tst-auditmod1.so\ndiff --git a/elf/dl-open.c b/elf/dl-open.c\nindex c378da16c0..8556e7bd2f 100644\n--- a/elf/dl-open.c\n+++ b/elf/dl-open.c\n@@ -363,17 +363,8 @@ resize_tls_slotinfo (struct link_map *new)\n {\n   bool any_tls = false;\n   for (unsigned int i = 0; i < new->l_searchlist.r_nlist; ++i)\n-    {\n-      struct link_map *imap = new->l_searchlist.r_list[i];\n-\n-      /* Only add TLS memory if this object is loaded now and\n-\t therefore is not yet initialized.  */\n-      if (! imap->l_init_called && imap->l_tls_blocksize > 0)\n-\t{\n-\t  _dl_add_to_slotinfo (imap, false);\n-\t  any_tls = true;\n-\t}\n-    }\n+    if (_dl_add_to_slotinfo (new->l_searchlist.r_list[i], false))\n+      any_tls = true;\n   return any_tls;\n }\n \n@@ -383,22 +374,8 @@ resize_tls_slotinfo (struct link_map *new)\n static void\n update_tls_slotinfo (struct link_map *new)\n {\n-  unsigned int first_static_tls = new->l_searchlist.r_nlist;\n   for (unsigned int i = 0; i < new->l_searchlist.r_nlist; ++i)\n-    {\n-      struct link_map *imap = new->l_searchlist.r_list[i];\n-\n-      /* Only add TLS memory if this object is loaded now and\n-\t therefore is not yet initialized.  */\n-      if (! imap->l_init_called && imap->l_tls_blocksize > 0)\n-\t{\n-\t  _dl_add_to_slotinfo (imap, true);\n-\n-\t  if (imap->l_need_tls_init\n-\t      && first_static_tls == new->l_searchlist.r_nlist)\n-\t    first_static_tls = i;\n-\t}\n-    }\n+    _dl_add_to_slotinfo (new->l_searchlist.r_list[i], true);\n \n   size_t newgen = GL(dl_tls_generation) + 1;\n   if (__glibc_unlikely (newgen == 0))\n@@ -410,13 +387,11 @@ TLS generation counter wrapped!  Please report this.\"));\n   /* We need a second pass for static tls data, because\n      _dl_update_slotinfo must not be run while calls to\n      _dl_add_to_slotinfo are still pending.  */\n-  for (unsigned int i = first_static_tls; i < new->l_searchlist.r_nlist; ++i)\n+  for (unsigned int i = 0; i < new->l_searchlist.r_nlist; ++i)\n     {\n       struct link_map *imap = new->l_searchlist.r_list[i];\n \n-      if (imap->l_need_tls_init\n-\t  && ! imap->l_init_called\n-\t  && imap->l_tls_blocksize > 0)\n+      if (imap->l_need_tls_init && imap->l_tls_blocksize > 0)\n \t{\n \t  /* For static TLS we have to allocate the memory here and\n \t     now, but we can delay updating the DTV.  */\ndiff --git a/elf/dl-tls.c b/elf/dl-tls.c\nindex ecb966d282..3d529b722c 100644\n--- a/elf/dl-tls.c\n+++ b/elf/dl-tls.c\n@@ -632,17 +632,21 @@ _dl_allocate_tls_init (void *result, bool main_thread)\n \t     some platforms use in static programs requires it.  */\n \t  dtv[map->l_tls_modid].pointer.val = dest;\n \n-\t  /* Copy the initialization image and clear the BSS part.  For\n-\t     audit modules or dependencies with initial-exec TLS, we can not\n-\t     set the initial TLS image on default loader initialization\n-\t     because it would already be set by the audit setup.  However,\n-\t     subsequent thread creation would need to follow the default\n-\t     behaviour.   */\n+\t  /* Copy the initialization image and clear the BSS part.\n+\t     For audit modules or dependencies with initial-exec TLS,\n+\t     we can not set the initial TLS image on default loader\n+\t     initialization because it would already be set by the\n+\t     audit setup, which uses the dlopen code and already\n+\t     clears l_need_tls_init.  Calls with !main_thread from\n+\t     pthread_create need to initialze TLS for the current\n+\t     thread regardless of namespace.  */\n \t  if (map->l_ns != LM_ID_BASE && main_thread)\n \t    continue;\n \t  memset (__mempcpy (dest, map->l_tls_initimage,\n \t\t\t     map->l_tls_initimage_size), '\\0',\n \t\t  map->l_tls_blocksize - map->l_tls_initimage_size);\n+\t  if (main_thread)\n+\t    map->l_need_tls_init = 0;\n \t}\n \n       total += cnt;\n@@ -1099,9 +1103,32 @@ _dl_tls_initial_modid_limit_setup (void)\n }\n \n \n-void\n+/* Add module to slot information data.  If DO_ADD is false, only the\n+   required memory is allocated.  Must be called with\n+   GL (dl_load_tls_lock) acquired.  If the function has already been\n+   called for the link map L with !DO_ADD, then this function will not\n+   raise an exception, otherwise it is possible that it encounters a\n+   memory allocation failure.\n+\n+   Return false if L has already been added to the slotinfo data, or\n+   if L has no TLS data.  If the returned value is true, L has been\n+   added with this call (DO_ADD), or has been added in a previous call\n+   (!DO_ADD).\n+\n+   The expected usage is as follows: Call _dl_add_to_slotinfo for\n+   several link maps with DO_ADD set to false, and record if any calls\n+   result in a true result.  If there was a true result, call\n+   _dl_add_to_slotinfo again, this time with DO_ADD set to true.  (For\n+   simplicity, it's possible to call the function for link maps where\n+   the previous result was false.)  The return value from the second\n+   round of calls can be ignored.  If there was true result initially,\n+   call _dl_update_slotinfo to update the TLS generation counter.  */\n+bool\n _dl_add_to_slotinfo (struct link_map *l, bool do_add)\n {\n+  if (l->l_tls_blocksize == 0 || l->l_tls_in_slotinfo)\n+    return false;\n+\n   /* Now that we know the object is loaded successfully add\n      modules containing TLS data to the dtv info table.  We\n      might have to increase its size.  */\n@@ -1157,7 +1184,10 @@ cannot create TLS data structures\"));\n       atomic_store_relaxed (&listp->slotinfo[idx].map, l);\n       atomic_store_relaxed (&listp->slotinfo[idx].gen,\n \t\t\t    GL(dl_tls_generation) + 1);\n+      l->l_tls_in_slotinfo = true;\n     }\n+\n+  return true;\n }\n \n #if PTHREAD_IN_LIBC\ndiff --git a/elf/tst-dlopen-tlsreinit1.c b/elf/tst-dlopen-tlsreinit1.c\nnew file mode 100644\nindex 0000000000..2016b9b0c6\n--- /dev/null\n+++ b/elf/tst-dlopen-tlsreinit1.c\n@@ -0,0 +1,40 @@\n+/* Test that dlopen preserves already accessed TLS (bug 31717).\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <stdbool.h>\n+#include <support/check.h>\n+#include <support/xdlfcn.h>\n+#include <ctype.h>\n+\n+static int\n+do_test (void)\n+{\n+  void *handle = xdlopen (\"tst-dlopen-tlsreinitmod1.so\", RTLD_NOW);\n+\n+  bool *tlsreinitmod3_tested = xdlsym (handle, \"tlsreinitmod3_tested\");\n+  TEST_VERIFY (*tlsreinitmod3_tested);\n+\n+  xdlclose (handle);\n+\n+  /* This crashes if the libc.so.6 TLS image has been reverted.  */\n+  TEST_VERIFY (!isupper ('@'));\n+\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\ndiff --git a/elf/tst-dlopen-tlsreinit2.c b/elf/tst-dlopen-tlsreinit2.c\nnew file mode 100644\nindex 0000000000..90ad2c7713\n--- /dev/null\n+++ b/elf/tst-dlopen-tlsreinit2.c\n@@ -0,0 +1,39 @@\n+/* Test that dlopen preserves already accessed TLS (bug 31717).\n+   Variant with initially-linked modules.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <ctype.h>\n+#include <stdbool.h>\n+#include <support/check.h>\n+#include <support/xdlfcn.h>\n+\n+\n+static int\n+do_test (void)\n+{\n+  /* Defined in tst-dlopen-tlsreinitmod3.so.  */\n+  extern bool tlsreinitmod3_tested;\n+  TEST_VERIFY (tlsreinitmod3_tested);\n+\n+  /* This crashes if the libc.so.6 TLS image has been reverted.  */\n+  TEST_VERIFY (!isupper ('@'));\n+\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\ndiff --git a/elf/tst-dlopen-tlsreinit3.c b/elf/tst-dlopen-tlsreinit3.c\nnew file mode 100644\nindex 0000000000..79bd585aff\n--- /dev/null\n+++ b/elf/tst-dlopen-tlsreinit3.c\n@@ -0,0 +1,2 @@\n+/* Same code, but run with LD_AUDIT=tst-auditmod1.so.  */\n+#include \"tst-dlopen-tlsreinit1.c\"\ndiff --git a/elf/tst-dlopen-tlsreinit4.c b/elf/tst-dlopen-tlsreinit4.c\nnew file mode 100644\nindex 0000000000..344c9211ab\n--- /dev/null\n+++ b/elf/tst-dlopen-tlsreinit4.c\n@@ -0,0 +1,2 @@\n+/* Same code, but run with LD_AUDIT=tst-auditmod1.so.  */\n+#include \"tst-dlopen-tlsreinit2.c\"\ndiff --git a/elf/tst-dlopen-tlsreinitmod1.c b/elf/tst-dlopen-tlsreinitmod1.c\nnew file mode 100644\nindex 0000000000..354cc3de51\n--- /dev/null\n+++ b/elf/tst-dlopen-tlsreinitmod1.c\n@@ -0,0 +1,20 @@\n+/* Test that dlopen preserves already accessed TLS (bug 31717), module 1.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+/* This module triggers loading of tst-dlopen-tlsreinitmod2.so and\n+   tst-dlopen-tlsreinitmod3.so.  */\ndiff --git a/elf/tst-dlopen-tlsreinitmod2.c b/elf/tst-dlopen-tlsreinitmod2.c\nnew file mode 100644\nindex 0000000000..677e69bd35\n--- /dev/null\n+++ b/elf/tst-dlopen-tlsreinitmod2.c\n@@ -0,0 +1,30 @@\n+/* Test that dlopen preserves already accessed TLS (bug 31717), module 2.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <stdio.h>\n+\n+/* Defined in tst-dlopen-tlsreinitmod3.so.  This an underlinked symbol\n+   dependency.  */\n+extern void call_tlsreinitmod3 (void);\n+\n+static void __attribute__ ((constructor))\n+tlsreinitmod2_init (void)\n+{\n+  puts (\"info: constructor of tst-dlopen-tlsreinitmod2.so invoked\");\n+  call_tlsreinitmod3 ();\n+}\ndiff --git a/elf/tst-dlopen-tlsreinitmod3.c b/elf/tst-dlopen-tlsreinitmod3.c\nnew file mode 100644\nindex 0000000000..ef769c5131\n--- /dev/null\n+++ b/elf/tst-dlopen-tlsreinitmod3.c\n@@ -0,0 +1,102 @@\n+/* Test that dlopen preserves already accessed TLS (bug 31717), module 3.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <dlfcn.h>\n+#include <stdbool.h>\n+#include <stdio.h>\n+#include <unistd.h>\n+\n+/* Used to verify from the main program that the test ran.  */\n+bool tlsreinitmod3_tested;\n+\n+/* This TLS variable must not revert back to the initial state after\n+   dlopen.  */\n+static __thread int tlsreinitmod3_state = 1;\n+\n+/* Set from the ELF constructor during dlopen.  */\n+static bool tlsreinitmod3_constructed;\n+\n+/* Second half of test, behind a compiler barrier.  The compiler\n+   barrier is necessary to prevent carrying over TLS address\n+   information from call_tlsreinitmod3 to call_tlsreinitmod3_tail.  */\n+void call_tlsreinitmod3_tail (void *self) __attribute__ ((weak));\n+\n+/* Called from tst-dlopen-tlsreinitmod2.so.  */\n+void\n+call_tlsreinitmod3 (void)\n+{\n+  printf (\"info: call_tlsreinitmod3 invoked (state=%d)\\n\",\n+          tlsreinitmod3_state);\n+\n+  if (tlsreinitmod3_constructed)\n+    {\n+      puts (\"error: call_tlsreinitmod3 called after ELF constructor\");\n+      fflush (stdout);\n+      /* Cannot rely on test harness due to dynamic linking.  */\n+      _exit (1);\n+    }\n+\n+  tlsreinitmod3_state = 2;\n+\n+  /* Self-dlopen.  This will run the ELF constructor.   */\n+  void *self = dlopen (\"tst-dlopen-tlsreinitmod3.so\", RTLD_NOW);\n+  if (self == NULL)\n+    {\n+      printf (\"error: dlopen: %s\\n\", dlerror ());\n+      fflush (stdout);\n+      /* Cannot rely on test harness due to dynamic linking.  */\n+      _exit (1);\n+    }\n+\n+  call_tlsreinitmod3_tail (self);\n+}\n+\n+void\n+call_tlsreinitmod3_tail (void *self)\n+{\n+  printf (\"info: dlopen returned in tlsreinitmod3 (state=%d)\\n\",\n+          tlsreinitmod3_state);\n+\n+  if (!tlsreinitmod3_constructed)\n+    {\n+      puts (\"error: dlopen did not call tlsreinitmod3 ELF constructor\");\n+      fflush (stdout);\n+      /* Cannot rely on test harness due to dynamic linking.  */\n+      _exit (1);\n+    }\n+\n+  if (tlsreinitmod3_state != 2)\n+    {\n+      puts (\"error: TLS state reverted in tlsreinitmod3\");\n+      fflush (stdout);\n+      /* Cannot rely on test harness due to dynamic linking.  */\n+      _exit (1);\n+    }\n+\n+  dlclose (self);\n+\n+  /* Signal test completion to the main program.  */\n+  tlsreinitmod3_tested = true;\n+}\n+\n+static void __attribute__ ((constructor))\n+tlsreinitmod3_init (void)\n+{\n+  puts (\"info: constructor of tst-dlopen-tlsreinitmod3.so invoked\");\n+  tlsreinitmod3_constructed = true;\n+}\ndiff --git a/include/link.h b/include/link.h\nindex cb0d7d8e2f..5ed445d5a6 100644\n--- a/include/link.h\n+++ b/include/link.h\n@@ -212,6 +212,7 @@ struct link_map\n     unsigned int l_find_object_processed:1; /* Zero if _dl_find_object_update\n \t\t\t\t\t       needs to process this\n \t\t\t\t\t       lt_library map.  */\n+    unsigned int l_tls_in_slotinfo:1; /* TLS slotinfo updated in dlopen.  */\n \n     /* NODELETE status of the map.  Only valid for maps of type\n        lt_loaded.  Lazy binding sets l_nodelete_active directly,\ndiff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h\nindex 154efb0e19..259ce2e7d6 100644\n--- a/sysdeps/generic/ldsodefs.h\n+++ b/sysdeps/generic/ldsodefs.h\n@@ -1239,13 +1239,7 @@ extern void *_dl_open (const char *name, int mode, const void *caller,\n extern int _dl_scope_free (void *) attribute_hidden;\n \n \n-/* Add module to slot information data.  If DO_ADD is false, only the\n-   required memory is allocated.  Must be called with GL\n-   (dl_load_tls_lock) acquired.  If the function has already been called\n-   for the link map L with !do_add, then this function will not raise\n-   an exception, otherwise it is possible that it encounters a memory\n-   allocation failure.  */\n-extern void _dl_add_to_slotinfo (struct link_map *l, bool do_add)\n+extern bool _dl_add_to_slotinfo (struct link_map *l, bool do_add)\n   attribute_hidden;\n \n /* Update slot information data for at least the generation of the\n\ncommit f4a9b6e97bf05cf5a41907e55901f7e9afaafd4d\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Mon Sep 9 21:10:23 2024 +0200\n\n    elf: Fix tst-dlopen-tlsreinit1.out test dependency\n    \n    Fixes commit 5097cd344fd243fb8deb6dec96e8073753f962f9\n    (\"elf: Avoid re-initializing already allocated TLS in dlopen\n    (bug 31717)\").\n    \n    Reported-by: Patsy Griffin <patsy@redhat.com>\n    Reviewed-by: Patsy Griffin <patsy@redhat.com>\n    (cherry picked from commit e82a7cb1622bff08d8e3a144d7c5516a088f1cbc)\n\ndiff --git a/elf/Makefile b/elf/Makefile\nindex a03c6520d8..dc686c3bff 100644\n--- a/elf/Makefile\n+++ b/elf/Makefile\n@@ -3141,7 +3141,7 @@ $(objpfx)tst-dlopen-tlsreinit4: \\\n # tst-dlopen-tlsreinitmod3.so.  The dependency is provided via\n # $(objpfx)tst-dlopen-tlsreinitmod1.so.\n tst-dlopen-tlsreinitmod2.so-no-z-defs = yes\n-$(objpfx)tst-dlopen-tlsreinit.out: $(objpfx)tst-dlopen-tlsreinitmod1.so \\\n+$(objpfx)tst-dlopen-tlsreinit1.out: $(objpfx)tst-dlopen-tlsreinitmod1.so \\\n   $(objpfx)tst-dlopen-tlsreinitmod2.so $(objpfx)tst-dlopen-tlsreinitmod3.so\n # Reuse an audit module which provides ample debug logging.\n $(objpfx)tst-dlopen-tlsreinit3.out: $(objpfx)tst-auditmod1.so\n\ncommit adfb14e71f240a6bc2a4cbd6e6c50cc3fa1bcc3b\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Tue Sep 10 12:40:27 2024 +0200\n\n    debug: Fix read error handling in pcprofiledump\n    \n    The reading loops did not check for read failures.  Addresses\n    a static analysis report.\n    \n    Manually tested by compiling a program with the GCC's\n    -finstrument-functions option, running it with\n    “LD_PRELOAD=debug/libpcprofile.so PCPROFILE_OUTPUT=output-file”,\n    and reviewing the output of “debug/pcprofiledump output-file”.\n    \n    (cherry picked from commit 89b088bf70c651c231bf27e644270d093b8f144a)\n\ndiff --git a/debug/pcprofiledump.c b/debug/pcprofiledump.c\nindex 049a9c2744..94530f0cf9 100644\n--- a/debug/pcprofiledump.c\n+++ b/debug/pcprofiledump.c\n@@ -75,6 +75,44 @@ static struct argp argp =\n   options, parse_opt, args_doc, doc, NULL, more_help\n };\n \n+/* Try to read SIZE bytes from FD and store them on BUF.  Terminate\n+   the process upon read error.  Also terminate the process if less\n+   than SIZE bytes are remaining in the file.  If !IN_HEADER, do not\n+   terminate the process if the end of the file is encountered\n+   immediately, before any bytes are read.\n+\n+   Returns true if SIZE bytes have been read, and false if no bytes\n+   have been read due to an end-of-file condition.  */\n+static bool\n+read_exactly (int fd, void *buffer, size_t size, bool in_header)\n+{\n+  char *p = buffer;\n+  char *end = p + size;\n+  while (p < end)\n+    {\n+      ssize_t ret = TEMP_FAILURE_RETRY (read (fd, p, end - p));\n+      if (ret < 0)\n+\t{\n+\t  if (in_header)\n+\t    error (EXIT_FAILURE, errno, _(\"cannot read header\"));\n+\t  else\n+\t    error (EXIT_FAILURE, errno,  _(\"cannot read pointer pair\"));\n+\t}\n+      if (ret == 0)\n+\t{\n+\t  if (p == buffer && !in_header)\n+\t    /* Nothing has been read.  */\n+\t    return false;\n+\t  if (in_header)\n+\t    error (EXIT_FAILURE, 0, _(\"unexpected end of file in header\"));\n+\t  else\n+\t    error (EXIT_FAILURE, 0,\n+\t\t   _(\"unexpected end of file in pointer pair\"));\n+\t}\n+      p += ret;\n+    }\n+  return true;\n+}\n \n int\n main (int argc, char *argv[])\n@@ -110,8 +148,7 @@ main (int argc, char *argv[])\n   /* Read the first 4-byte word.  It contains the information about\n      the word size and the endianness.  */\n   uint32_t word;\n-  if (TEMP_FAILURE_RETRY (read (fd, &word, 4)) != 4)\n-    error (EXIT_FAILURE, errno, _(\"cannot read header\"));\n+  read_exactly (fd, &word, sizeof (word), true);\n \n   /* Check whether we have to swap the byte order.  */\n   int must_swap = (word & 0x0fffffff) == bswap_32 (0xdeb00000);\n@@ -121,56 +158,30 @@ main (int argc, char *argv[])\n   /* We have two loops, one for 32 bit pointers, one for 64 bit pointers.  */\n   if (word == 0xdeb00004)\n     {\n-      union\n-      {\n-\tuint32_t ptrs[2];\n-\tchar bytes[8];\n-      } pair;\n+      uint32_t ptrs[2];\n \n       while (1)\n \t{\n-\t  size_t len = sizeof (pair);\n-\t  size_t n;\n-\n-\t  while (len > 0\n-\t\t && (n = TEMP_FAILURE_RETRY (read (fd, &pair.bytes[8 - len],\n-\t\t\t\t\t\t   len))) != 0)\n-\t    len -= n;\n-\n-\t  if (len != 0)\n-\t    /* Nothing to read.  */\n+\t  if (!read_exactly (fd, ptrs, sizeof (ptrs), false))\n \t    break;\n \n \t  printf (\"this = %#010\" PRIx32 \", caller = %#010\" PRIx32 \"\\n\",\n-\t\t  must_swap ? bswap_32 (pair.ptrs[0]) : pair.ptrs[0],\n-\t\t  must_swap ? bswap_32 (pair.ptrs[1]) : pair.ptrs[1]);\n+\t\t  must_swap ? bswap_32 (ptrs[0]) : ptrs[0],\n+\t\t  must_swap ? bswap_32 (ptrs[1]) : ptrs[1]);\n \t}\n     }\n   else if (word == 0xdeb00008)\n     {\n-      union\n-      {\n-\tuint64_t ptrs[2];\n-\tchar bytes[16];\n-      } pair;\n+      uint64_t ptrs[2];\n \n       while (1)\n \t{\n-\t  size_t len = sizeof (pair);\n-\t  size_t n;\n-\n-\t  while (len > 0\n-\t\t && (n = TEMP_FAILURE_RETRY (read (fd, &pair.bytes[8 - len],\n-\t\t\t\t\t\t   len))) != 0)\n-\t    len -= n;\n-\n-\t  if (len != 0)\n-\t    /* Nothing to read.  */\n+\t  if (!read_exactly (fd, ptrs, sizeof (ptrs), false))\n \t    break;\n \n \t  printf (\"this = %#018\" PRIx64 \", caller = %#018\" PRIx64 \"\\n\",\n-\t\t  must_swap ? bswap_64 (pair.ptrs[0]) : pair.ptrs[0],\n-\t\t  must_swap ? bswap_64 (pair.ptrs[1]) : pair.ptrs[1]);\n+\t\t  must_swap ? bswap_64 (ptrs[0]) : ptrs[0],\n+\t\t  must_swap ? bswap_64 (ptrs[1]) : ptrs[1]);\n \t}\n     }\n   else\n\ncommit 7073164add3b874cf0c19ca0fb84236f6bb0985d\nAuthor: Siddhesh Poyarekar <siddhesh@sourceware.org>\nDate:   Tue Sep 3 14:58:33 2024 -0400\n\n    libio: Attempt wide backup free only for non-legacy code\n    \n    _wide_data and _mode are not available in legacy code, so do not attempt\n    to free the wide backup buffer in legacy code.\n    \n    Resolves: BZ #32137 and BZ #27821\n    \n    Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>\n    Reviewed-by: Florian Weimer <fweimer@redhat.com>\n    (cherry picked from commit ae4d44b1d501421ad9a3af95279b8f4d1546f1ce)\n\ndiff --git a/NEWS b/NEWS\nindex 5b20efbf6c..9033335db1 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -9,12 +9,14 @@ Version 2.40.1\n \n The following bugs are resolved with this release:\n \n+  [27821] ungetc: Fix backup buffer leak on program exit\n   [30081] resolv: Do not wait for non-existing second DNS response after error\n   [31717] elf: Avoid re-initializing already allocated TLS in dlopen\n   [31890] resolv: Allow short error responses to match any DNS query\n   [31968] mremap implementation in C does not handle arguments correctly\n   [32026] strerror/strsignal TLS not handled correctly for secondary namespaces\n   [32052] Name space violation in fortify wrappers\n+  [32137] libio: Attempt wide backup free only for non-legacy code\n \f\n Version 2.40\n \ndiff --git a/libio/genops.c b/libio/genops.c\nindex 35d8b30710..6f20d49669 100644\n--- a/libio/genops.c\n+++ b/libio/genops.c\n@@ -819,7 +819,7 @@ _IO_unbuffer_all (void)\n       /* Free up the backup area if it was ever allocated.  */\n       if (_IO_have_backup (fp))\n \t_IO_free_backup_area (fp);\n-      if (fp->_mode > 0 && _IO_have_wbackup (fp))\n+      if (!legacy && fp->_mode > 0 && _IO_have_wbackup (fp))\n \t_IO_free_wbackup_area (fp);\n \n       if (! (fp->_flags & _IO_UNBUFFERED)\n\ncommit 77018fd9f99f86a354387219fdf099915857a527\nAuthor: Sergey Kolosov <skolosov@redhat.com>\nDate:   Wed Sep 25 15:51:23 2024 +0200\n\n    stdio-common: Add new test for fdopen\n    \n    This commit adds fdopen test with all modes.\n    Reviewed-by: DJ Delorie <dj@redhat.com>\n    \n    (cherry picked from commit 1d72fa3cfa046f7293421a7e58f2a272474ea901)\n\ndiff --git a/stdio-common/Makefile b/stdio-common/Makefile\nindex a91754f52d..5af53d61fd 100644\n--- a/stdio-common/Makefile\n+++ b/stdio-common/Makefile\n@@ -207,6 +207,7 @@ tests := \\\n   tst-cookie \\\n   tst-dprintf-length \\\n   tst-fdopen \\\n+  tst-fdopen2 \\\n   tst-ferror \\\n   tst-fgets \\\n   tst-fileno \\\ndiff --git a/stdio-common/tst-fdopen2.c b/stdio-common/tst-fdopen2.c\nnew file mode 100644\nindex 0000000000..0c6625f258\n--- /dev/null\n+++ b/stdio-common/tst-fdopen2.c\n@@ -0,0 +1,246 @@\n+/* Test the fdopen function.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <stdio.h>\n+#include <errno.h>\n+#include <fcntl.h>\n+#include <support/check.h>\n+#include <support/support.h>\n+#include <support/xunistd.h>\n+#include <support/temp_file.h>\n+\n+char *tmp_dir;\n+char *path_to_file;\n+\n+void\n+prepare_tmp_dir (void)\n+{\n+  tmp_dir = support_create_temp_directory (\"tst-fdopen2\");\n+  path_to_file = xasprintf (\"%s/tst-fdopen2.txt\", tmp_dir);\n+}\n+\n+/* open temp file descriptor with mode.  */\n+int\n+open_tmp_fd (int mode)\n+{\n+  int fd = xopen (path_to_file, mode, 0644);\n+  return fd;\n+}\n+\n+\n+/* close and remove temp file with close.  */\n+void\n+close_tmp_fd (int fd)\n+{\n+  xclose (fd);\n+  xunlink (path_to_file);\n+}\n+\n+/* close and remove temp file with fclose.  */\n+void\n+close_tmp_fp (FILE *fp)\n+{\n+  fclose (fp);\n+  xunlink (path_to_file);\n+}\n+\n+/* test \"w\" fdopen mode.  */\n+void\n+do_test_fdopen_w (void)\n+{\n+  int fd, ret;\n+  FILE *fp;\n+  fd = open_tmp_fd (O_WRONLY | O_CREAT | O_TRUNC);\n+\n+  /* test mode mismatch.  */\n+  fp = fdopen (fd, \"r\");\n+  if (fp != NULL || errno != EINVAL)\n+    {\n+      close_tmp_fd (fd);\n+      FAIL_EXIT1 (\"fdopen (%d, r) should fail with EINVAL: %m\", fd);\n+    }\n+\n+  fp = fdopen (fd, \"w\");\n+  if (fp == NULL)\n+    {\n+      close_tmp_fd (fd);\n+      FAIL_EXIT1 (\"fdopen (%d, w): %m\", fd);\n+    }\n+\n+  const void *buf = \"AAAA\";\n+  ret = fwrite (buf, 1, 4, fp);\n+  if (ret != 4)\n+    {\n+      close_tmp_fp (fp);\n+      FAIL_EXIT1 (\"fwrite (): %m\");\n+    }\n+\n+  unsigned char buf2[4];\n+  rewind (fp);\n+  clearerr (fp);\n+  /* fread should fail in \"w\" mode  */\n+  ret = fread (buf2, 1, 4, fp);\n+  if (ret != 0 || ferror (fp) == 0)\n+    {\n+      close_tmp_fp (fp);\n+      FAIL_EXIT1 (\"fread should fail in \\\"w\\\" mode\");\n+    }\n+\n+  fclose (fp);\n+}\n+\n+/* test \"r\" fdopen mode. */\n+void\n+do_test_fdopen_r (void)\n+{\n+  int fd, ret;\n+  FILE *fp;\n+  fd = open_tmp_fd (O_RDONLY);\n+\n+  /* test mode mismatch. */\n+  fp = fdopen (fd, \"w\");\n+  if (fp != NULL || errno != EINVAL)\n+    {\n+      close_tmp_fd (fd);\n+      FAIL_EXIT1 (\"fdopen (%d, w) should fail with EINVAL: %m\", fd);\n+    }\n+\n+  fp = fdopen (fd, \"r\");\n+  if (fp == NULL)\n+    {\n+      close_tmp_fd (fd);\n+      FAIL_EXIT1 (\"fdopen (%d, w): %m\", fd);\n+    }\n+\n+  const void *buf = \"BBBB\";\n+  /* fwrite should fail in \"r\" mode.  */\n+  ret = fwrite (buf, 1, 4, fp);\n+  if (ret != 0 || ferror (fp) == 0)\n+    {\n+      close_tmp_fp (fp);\n+      FAIL_EXIT1 (\"fwrite should fail in \\\"r\\\" mode\");\n+    }\n+\n+  unsigned char buf2[4];\n+  ret = fread (buf2, 1, 4, fp);\n+  if (ret != 4)\n+    {\n+      close_tmp_fp (fp);\n+      FAIL_EXIT1 (\"fread (): %m\");\n+    }\n+\n+  fclose (fp);\n+}\n+\n+/* test \"a\" fdopen mode.  */\n+void\n+do_test_fdopen_a (void)\n+{\n+  int fd, ret;\n+  FILE *fp;\n+  fd = open_tmp_fd (O_WRONLY | O_CREAT | O_APPEND);\n+\n+  /* test mode mismatch.  */\n+  fp = fdopen (fd, \"r+\");\n+  if (fp != NULL || errno != EINVAL)\n+    {\n+      close_tmp_fd (fd);\n+      FAIL_EXIT1 (\"fdopen (%d, \\\"r+\\\") should fail with EINVAL: %m\", fd);\n+    }\n+\n+  fp = fdopen (fd, \"a\");\n+  if (fp == NULL)\n+    {\n+      close_tmp_fd (fd);\n+      FAIL_EXIT1 (\"fdopen (%d, w): %m\", fd);\n+    }\n+\n+  const void *buf = \"CCCC\";\n+  ret = fwrite (buf, 1, 4, fp);\n+  if (ret != 4)\n+    {\n+      close_tmp_fp (fp);\n+      FAIL_EXIT1 (\"fwrite (): %m\");\n+    }\n+\n+  /* fread should fail in \"a\" mode.  */\n+  unsigned char buf2[4];\n+  clearerr (fp);\n+  ret = fread (buf2, 1, 4, fp);\n+  if (ret != 0 || ferror (fp) == 0)\n+    {\n+      close_tmp_fp (fp);\n+      FAIL_EXIT1 (\"fread should fail \\\"a\\\" mode\");\n+    }\n+\n+  fclose (fp);\n+}\n+\n+void\n+do_test_fdopen_mode (int mode, const char *fmode)\n+{\n+  int fd, ret;\n+  FILE *fp;\n+  fd = open_tmp_fd (mode);\n+\n+  fp = fdopen (fd, fmode);\n+  if (fp == NULL)\n+    {\n+      close_tmp_fd (fd);\n+      FAIL_EXIT1 (\"fdopen (%d, %s): %m\", fd, fmode);\n+    }\n+\n+  const void *buf = \"EEEE\";\n+  ret = fwrite (buf, 1, 4, fp);\n+  if (ret != 4)\n+    {\n+      close_tmp_fp (fp);\n+      FAIL_EXIT1 (\"fwrite () in mode:%s returns %d: %m\", fmode, ret);\n+    }\n+\n+  rewind (fp);\n+  unsigned char buf2[4];\n+  ret = fread (buf2, 1, 4, fp);\n+  if (ret != 4)\n+    {\n+      close_tmp_fp (fp);\n+      FAIL_EXIT1 (\"fread () in mode:%s returns %d: %m\", fmode, ret);\n+    }\n+\n+  fclose (fp);\n+}\n+\n+static int\n+do_test (void)\n+{\n+\n+  prepare_tmp_dir ();\n+\n+  do_test_fdopen_w ();\n+  do_test_fdopen_r ();\n+  do_test_fdopen_a ();\n+\n+  /* test r+ w+ a+ fdopen modes.  */\n+  do_test_fdopen_mode (O_RDWR, \"r+\");\n+  do_test_fdopen_mode (O_RDWR | O_CREAT | O_TRUNC, \"w+\");\n+  do_test_fdopen_mode (O_RDWR | O_CREAT | O_APPEND, \"a+\");\n+  xunlink (path_to_file);\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\n\ncommit 61b6464f8d72aef520ee769a2ae317b4f68d5e1d\nAuthor: Joseph Myers <josmyers@redhat.com>\nDate:   Tue Sep 24 14:06:22 2024 +0000\n\n    Add tests of fread\n    \n    There seem to be no glibc tests specifically for the fread function.\n    Add basic tests of that function.\n    \n    Tested for x86_64.\n    \n    (cherry picked from commit d14c977c65aac7db35bb59380ef99d6582c4f930)\n\ndiff --git a/stdio-common/Makefile b/stdio-common/Makefile\nindex 5af53d61fd..3396090be1 100644\n--- a/stdio-common/Makefile\n+++ b/stdio-common/Makefile\n@@ -217,6 +217,7 @@ tests := \\\n   tst-fmemopen4 \\\n   tst-fphex \\\n   tst-fphex-wide \\\n+  tst-fread \\\n   tst-fseek \\\n   tst-fwrite \\\n   tst-gets \\\ndiff --git a/stdio-common/tst-fread.c b/stdio-common/tst-fread.c\nnew file mode 100644\nindex 0000000000..4d9a7895f6\n--- /dev/null\n+++ b/stdio-common/tst-fread.c\n@@ -0,0 +1,134 @@\n+/* Test fread.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <stdio.h>\n+#include <stdlib.h>\n+#include <string.h>\n+\n+#include <support/check.h>\n+#include <support/support.h>\n+#include <support/temp_file.h>\n+#include <support/test-driver.h>\n+#include <support/xstdio.h>\n+#include <support/xunistd.h>\n+\n+int\n+do_test (void)\n+{\n+  char *temp_dir = support_create_temp_directory (\"tst-fread\");\n+  char *file1 = xasprintf (\"%s/file1\", temp_dir);\n+  support_write_file_string (file1, \"file1\");\n+  add_temp_file (file1);\n+  FILE *fp;\n+  size_t ret;\n+  char buf[1024];\n+\n+  verbose_printf (\"test single-byte reads\\n\");\n+  fp = xfopen (file1, \"r\");\n+  memset (buf, 0, sizeof buf);\n+  ret = fread (buf, 1, 2, fp);\n+  TEST_COMPARE (ret, 2);\n+  TEST_COMPARE (buf[0], 'f');\n+  TEST_COMPARE (buf[1], 'i');\n+  TEST_COMPARE (feof (fp), 0);\n+  TEST_COMPARE (ftell (fp), 2);\n+  memset (buf, 0, sizeof buf);\n+  ret = fread (buf, 1, 3, fp);\n+  TEST_COMPARE (ret, 3);\n+  TEST_COMPARE (buf[0], 'l');\n+  TEST_COMPARE (buf[1], 'e');\n+  TEST_COMPARE (buf[2], '1');\n+  TEST_COMPARE (ftell (fp), 5);\n+  TEST_COMPARE (feof (fp), 0);\n+  memset (buf, 0, sizeof buf);\n+  ret = fread (buf, 1, 1, fp);\n+  TEST_COMPARE (ret, 0);\n+  TEST_COMPARE (!!feof (fp), 1);\n+  TEST_COMPARE (ferror (fp), 0);\n+  TEST_COMPARE (ftell (fp), 5);\n+  xfclose (fp);\n+\n+  verbose_printf (\"test single-byte reads, EOF part way through\\n\");\n+  fp = xfopen (file1, \"r\");\n+  memset (buf, 0, sizeof buf);\n+  ret = fread (buf, 1, sizeof buf, fp);\n+  TEST_COMPARE (ret, 5);\n+  TEST_COMPARE (buf[0], 'f');\n+  TEST_COMPARE (buf[1], 'i');\n+  TEST_COMPARE (buf[2], 'l');\n+  TEST_COMPARE (buf[3], 'e');\n+  TEST_COMPARE (buf[4], '1');\n+  TEST_COMPARE (!!feof (fp), 1);\n+  TEST_COMPARE (ferror (fp), 0);\n+  TEST_COMPARE (ftell (fp), 5);\n+  xfclose (fp);\n+\n+  verbose_printf (\"test multi-byte reads\\n\");\n+  fp = xfopen (file1, \"r\");\n+  memset (buf, 0, sizeof buf);\n+  ret = fread (buf, 2, 2, fp);\n+  TEST_COMPARE (ret, 2);\n+  TEST_COMPARE (buf[0], 'f');\n+  TEST_COMPARE (buf[1], 'i');\n+  TEST_COMPARE (buf[2], 'l');\n+  TEST_COMPARE (buf[3], 'e');\n+  TEST_COMPARE (feof (fp), 0);\n+  TEST_COMPARE (ftell (fp), 4);\n+  memset (buf, 0, sizeof buf);\n+  ret = fread (buf, 3, 3, fp);\n+  TEST_COMPARE (ret, 0);\n+  /* The bytes written for a partial element read are unspecified.  */\n+  TEST_COMPARE (!!feof (fp), 1);\n+  TEST_COMPARE (ferror (fp), 0);\n+  TEST_COMPARE (ftell (fp), 5);\n+  xfclose (fp);\n+\n+  verbose_printf (\"test read error\\n\");\n+  fp = xfopen (file1, \"r\");\n+  xclose (fileno (fp));\n+  memset (buf, 0, sizeof buf);\n+  ret = fread (buf, 1, sizeof buf, fp);\n+  TEST_COMPARE (ret, 0);\n+  TEST_COMPARE (feof (fp), 0);\n+  TEST_COMPARE (!!ferror (fp), 1);\n+  fclose (fp);\n+\n+  verbose_printf (\"test zero size\\n\");\n+  fp = xfopen (file1, \"r\");\n+  ret = fread (buf, 0, SIZE_MAX, fp);\n+  TEST_COMPARE (ret, 0);\n+  TEST_COMPARE (feof (fp), 0);\n+  TEST_COMPARE (ferror (fp), 0);\n+  TEST_COMPARE (ftell (fp), 0);\n+  xfclose (fp);\n+\n+  verbose_printf (\"test zero items\\n\");\n+  fp = xfopen (file1, \"r\");\n+  ret = fread (buf, SIZE_MAX, 0, fp);\n+  TEST_COMPARE (ret, 0);\n+  TEST_COMPARE (feof (fp), 0);\n+  TEST_COMPARE (ferror (fp), 0);\n+  TEST_COMPARE (ftell (fp), 0);\n+  xfclose (fp);\n+\n+  free (temp_dir);\n+  free (file1);\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\n\ncommit 9bc76c7ca4d6022fd588c274d139813f99e04f35\nAuthor: Joseph Myers <josmyers@redhat.com>\nDate:   Wed Aug 14 17:15:46 2024 +0000\n\n    Test errno setting on strtod overflow in tst-strtod-round\n    \n    We have no tests that errno is set to ERANGE on overflow of\n    strtod-family functions (we do have some tests for underflow, in\n    tst-strtod-underflow).  Add such tests to tst-strtod-round.\n    \n    Tested for x86_64.\n    \n    (cherry picked from commit 207d64feb26279e152c50744e3c37e68491aca99)\n\ndiff --git a/stdlib/tst-strtod-round-skeleton.c b/stdlib/tst-strtod-round-skeleton.c\nindex 6fba4b5228..c3cc0201d4 100644\n--- a/stdlib/tst-strtod-round-skeleton.c\n+++ b/stdlib/tst-strtod-round-skeleton.c\n@@ -21,6 +21,7 @@\n    declared in the headers.  */\n #define _LIBC_TEST 1\n #define __STDC_WANT_IEC_60559_TYPES_EXT__\n+#include <errno.h>\n #include <fenv.h>\n #include <float.h>\n #include <math.h>\n@@ -205,7 +206,9 @@ struct test {\n #define GEN_ONE_TEST(FSUF, FTYPE, FTOSTR, LSUF, CSUF)\t\t\\\n {\t\t\t\t\t\t\t\t\\\n   feclearexcept (FE_ALL_EXCEPT);\t\t\t\t\\\n+  errno = 0;\t\t\t\t\t\t\t\\\n   FTYPE f = STRTO (FSUF) (s, NULL);\t\t\t\t\\\n+  int new_errno = errno;\t\t\t\t\t\\\n   if (f != expected->FSUF\t\t\t\t\t\\\n       || (copysign ## CSUF) (1.0 ## LSUF, f)\t\t\t\\\n \t != (copysign ## CSUF) (1.0 ## LSUF, expected->FSUF))\t\\\n@@ -254,6 +257,14 @@ struct test {\n \t\tprintf (\"ignoring this exception error\\n\");\t\\\n \t    }\t\t\t\t\t\t\t\\\n \t}\t\t\t\t\t\t\t\\\n+      if (overflow->FSUF && new_errno != ERANGE)\t\t\\\n+\t{\t\t\t\t\t\t\t\\\n+\t  printf (FNPFXS \"to\" #FSUF\t\t\t\t\\\n+\t\t  \" (\" STRM \") left errno == %d,\"\t\t\\\n+\t\t  \" not %d (ERANGE)\\n\",\t\t\t\t\\\n+\t\t  s, new_errno, ERANGE);\t\t\t\\\n+\t  result = 1;\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\\\n     }\t\t\t\t\t\t\t\t\\\n }\n \n\ncommit e06153665fa931e4c7d2a3ecc14e5197e96143a7\nAuthor: Joseph Myers <josmyers@redhat.com>\nDate:   Tue Aug 27 12:38:01 2024 +0000\n\n    More thoroughly test underflow / errno in tst-strtod-round\n    \n    Add tests of underflow in tst-strtod-round, and thus also test for\n    errno being unchanged when there is neither overflow nor underflow.\n    The errno setting before the function call to test for being unchanged\n    is adjusted to set errno to 12345 instead of 0, so that any bugs where\n    strtod sets errno to 0 would be detected.\n    \n    This doesn't add any new test inputs for tst-strtod-round, and in\n    particular doesn't cover the edge cases of underflow the way\n    tst-strtod-underflow does (none of the existing test inputs for\n    tst-strtod-round actually exercise cases that have underflow with\n    before-rounding tininess detection but not with after-rounding\n    tininess detection), but at least it provides some coverage (as per\n    the recent discussions) that ordinary non-overflowing non-underflowing\n    inputs to these functions do not set errno.\n    \n    Tested for x86_64.\n    \n    (cherry picked from commit d73ed2601b7c3c93c3529149a3d7f7b6177900a8)\n\ndiff --git a/stdlib/gen-tst-strtod-round.c b/stdlib/gen-tst-strtod-round.c\nindex e48bf4d6ea..7ce735f81d 100644\n--- a/stdlib/gen-tst-strtod-round.c\n+++ b/stdlib/gen-tst-strtod-round.c\n@@ -46,6 +46,7 @@ static int\n string_to_fp (mpfr_t f, const char *s, mpfr_rnd_t rnd)\n {\n   mpfr_clear_overflow ();\n+  mpfr_clear_underflow ();\n #ifdef WORKAROUND\n   mpfr_t f2;\n   mpfr_init2 (f2, 100000);\n@@ -53,12 +54,16 @@ string_to_fp (mpfr_t f, const char *s, mpfr_rnd_t rnd)\n   int r = mpfr_set (f, f2, rnd);\n   r |= mpfr_subnormalize (f, r, rnd);\n   mpfr_clear (f2);\n-  return r0 | r;\n+  r |= r0;\n #else\n   int r = mpfr_strtofr (f, s, NULL, 0, rnd);\n   r |= mpfr_subnormalize (f, r, rnd);\n-  return r;\n #endif\n+  if (r == 0)\n+    /* The MPFR underflow flag is set for exact subnormal results,\n+       which is not wanted here.  */\n+    mpfr_clear_underflow ();\n+  return r;\n }\n \n void\n@@ -70,6 +75,21 @@ print_fp (FILE *fout, mpfr_t f, const char *suffix)\n     mpfr_fprintf (fout, \"\\t%Ra%s\", f, suffix);\n }\n \n+static const char *\n+suffix_to_print (bool overflow, bool underflow, bool underflow_before_rounding,\n+\t\t bool with_comma)\n+{\n+  if (overflow)\n+    return with_comma ? \", true, false,\\n\" : \", true, false\";\n+  if (underflow)\n+    return with_comma ? \", false, true,\\n\" : \", false, true\";\n+  if (underflow_before_rounding)\n+    return (with_comma\n+\t    ? \", false, !TININESS_AFTER_ROUNDING,\\n\"\n+\t    : \", false, !TININESS_AFTER_ROUNDING\");\n+  return with_comma ? \", false, false,\\n\" : \", false, false\";\n+}\n+\n static void\n round_str (FILE *fout, const char *s, int prec, int emin, int emax,\n \t   bool ibm_ld)\n@@ -80,8 +100,11 @@ round_str (FILE *fout, const char *s, int prec, int emin, int emax,\n   mpfr_set_emin (emin);\n   mpfr_set_emax (emax);\n   mpfr_init (f);\n+  string_to_fp (f, s, MPFR_RNDZ);\n+  bool underflow_before_rounding = mpfr_underflow_p () != 0;\n   int r = string_to_fp (f, s, MPFR_RNDD);\n   bool overflow = mpfr_overflow_p () != 0;\n+  bool underflow = mpfr_underflow_p () != 0;\n   if (ibm_ld)\n     {\n       assert (prec == 106 && emin == -1073 && emax == 1024);\n@@ -97,19 +120,27 @@ round_str (FILE *fout, const char *s, int prec, int emin, int emax,\n \t}\n     }\n   mpfr_fprintf (fout, \"\\t%s,\\n\", r ? \"false\" : \"true\");\n-  print_fp (fout, f, overflow ? \", true,\\n\" : \", false,\\n\");\n+  print_fp (fout, f,\n+\t    suffix_to_print (overflow, underflow, underflow_before_rounding,\n+\t\t\t     true));\n   string_to_fp (f, s, MPFR_RNDN);\n   overflow = (mpfr_overflow_p () != 0\n \t      || (ibm_ld && mpfr_cmpabs (f, max_value) > 0));\n-  print_fp (fout, f, overflow ? \", true,\\n\" : \", false,\\n\");\n+  print_fp (fout, f,\n+\t    suffix_to_print (overflow, underflow, underflow_before_rounding,\n+\t\t\t     true));\n   string_to_fp (f, s, MPFR_RNDZ);\n   overflow = (mpfr_overflow_p () != 0\n \t      || (ibm_ld && mpfr_cmpabs (f, max_value) > 0));\n-  print_fp (fout, f, overflow ? \", true,\\n\" : \", false,\\n\");\n+  print_fp (fout, f,\n+\t    suffix_to_print (overflow, underflow, underflow_before_rounding,\n+\t\t\t     true));\n   string_to_fp (f, s, MPFR_RNDU);\n   overflow = (mpfr_overflow_p () != 0\n \t      || (ibm_ld && mpfr_cmpabs (f, max_value) > 0));\n-  print_fp (fout, f, overflow ? \", true\" : \", false\");\n+  print_fp (fout, f,\n+\t    suffix_to_print (overflow, underflow, underflow_before_rounding,\n+\t\t\t     false));\n   mpfr_clear (f);\n   if (ibm_ld)\n     mpfr_clear (max_value);\ndiff --git a/stdlib/tst-strtod-round-data.h b/stdlib/tst-strtod-round-data.h\nindex 8899d15f9b..13e62dd2b0 100644\n--- a/stdlib/tst-strtod-round-data.h\n+++ b/stdlib/tst-strtod-round-data.h\n@@ -2,1852 +2,1852 @@\n static const struct test tests[] = {\n   TEST (\"3.518437208883201171875E+013\",\n \tfalse,\n-\t0x2p+44, false,\n-\t0x2p+44, false,\n-\t0x2p+44, false,\n-\t0x2.000004p+44, false,\n-\tfalse,\n-\t0x2.0000000000002p+44, false,\n-\t0x2.0000000000004p+44, false,\n-\t0x2.0000000000002p+44, false,\n-\t0x2.0000000000004p+44, false,\n-\ttrue,\n-\t0x2.0000000000003p+44, false,\n-\t0x2.0000000000003p+44, false,\n-\t0x2.0000000000003p+44, false,\n-\t0x2.0000000000003p+44, false,\n-\ttrue,\n-\t0x2.0000000000003p+44, false,\n-\t0x2.0000000000003p+44, false,\n-\t0x2.0000000000003p+44, false,\n-\t0x2.0000000000003p+44, false,\n-\ttrue,\n-\t0x2.0000000000003p+44, false,\n-\t0x2.0000000000003p+44, false,\n-\t0x2.0000000000003p+44, false,\n-\t0x2.0000000000003p+44, false,\n-\ttrue,\n-\t0x2.0000000000003p+44, false,\n-\t0x2.0000000000003p+44, false,\n-\t0x2.0000000000003p+44, false,\n-\t0x2.0000000000003p+44, false),\n+\t0x2p+44, false, false,\n+\t0x2p+44, false, false,\n+\t0x2p+44, false, false,\n+\t0x2.000004p+44, false, false,\n+\tfalse,\n+\t0x2.0000000000002p+44, false, false,\n+\t0x2.0000000000004p+44, false, false,\n+\t0x2.0000000000002p+44, false, false,\n+\t0x2.0000000000004p+44, false, false,\n+\ttrue,\n+\t0x2.0000000000003p+44, false, false,\n+\t0x2.0000000000003p+44, false, false,\n+\t0x2.0000000000003p+44, false, false,\n+\t0x2.0000000000003p+44, false, false,\n+\ttrue,\n+\t0x2.0000000000003p+44, false, false,\n+\t0x2.0000000000003p+44, false, false,\n+\t0x2.0000000000003p+44, false, false,\n+\t0x2.0000000000003p+44, false, false,\n+\ttrue,\n+\t0x2.0000000000003p+44, false, false,\n+\t0x2.0000000000003p+44, false, false,\n+\t0x2.0000000000003p+44, false, false,\n+\t0x2.0000000000003p+44, false, false,\n+\ttrue,\n+\t0x2.0000000000003p+44, false, false,\n+\t0x2.0000000000003p+44, false, false,\n+\t0x2.0000000000003p+44, false, false,\n+\t0x2.0000000000003p+44, false, false),\n   TEST (\"1.00000005960464477550\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.0000010000001p+0, false,\n-\tfalse,\n-\t0x1.0000010000000002p+0, false,\n-\t0x1.0000010000000002p+0, false,\n-\t0x1.0000010000000002p+0, false,\n-\t0x1.0000010000000004p+0, false,\n-\tfalse,\n-\t0x1.0000010000000002p+0, false,\n-\t0x1.0000010000000002p+0, false,\n-\t0x1.0000010000000002p+0, false,\n-\t0x1.0000010000000004p+0, false,\n-\tfalse,\n-\t0x1.0000010000000002048242f2ffp+0, false,\n-\t0x1.0000010000000002048242f2ff8p+0, false,\n-\t0x1.0000010000000002048242f2ffp+0, false,\n-\t0x1.0000010000000002048242f2ff8p+0, false,\n-\tfalse,\n-\t0x1.0000010000000002048242f2ff66p+0, false,\n-\t0x1.0000010000000002048242f2ff67p+0, false,\n-\t0x1.0000010000000002048242f2ff66p+0, false,\n-\t0x1.0000010000000002048242f2ff67p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.0000010000001p+0, false, false,\n+\tfalse,\n+\t0x1.0000010000000002p+0, false, false,\n+\t0x1.0000010000000002p+0, false, false,\n+\t0x1.0000010000000002p+0, false, false,\n+\t0x1.0000010000000004p+0, false, false,\n+\tfalse,\n+\t0x1.0000010000000002p+0, false, false,\n+\t0x1.0000010000000002p+0, false, false,\n+\t0x1.0000010000000002p+0, false, false,\n+\t0x1.0000010000000004p+0, false, false,\n+\tfalse,\n+\t0x1.0000010000000002048242f2ffp+0, false, false,\n+\t0x1.0000010000000002048242f2ff8p+0, false, false,\n+\t0x1.0000010000000002048242f2ffp+0, false, false,\n+\t0x1.0000010000000002048242f2ff8p+0, false, false,\n+\tfalse,\n+\t0x1.0000010000000002048242f2ff66p+0, false, false,\n+\t0x1.0000010000000002048242f2ff67p+0, false, false,\n+\t0x1.0000010000000002048242f2ff66p+0, false, false,\n+\t0x1.0000010000000002048242f2ff67p+0, false, false),\n   TEST (\"1.0000000596046447755\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.0000010000001p+0, false,\n-\tfalse,\n-\t0x1.0000010000000002p+0, false,\n-\t0x1.0000010000000002p+0, false,\n-\t0x1.0000010000000002p+0, false,\n-\t0x1.0000010000000004p+0, false,\n-\tfalse,\n-\t0x1.0000010000000002p+0, false,\n-\t0x1.0000010000000002p+0, false,\n-\t0x1.0000010000000002p+0, false,\n-\t0x1.0000010000000004p+0, false,\n-\tfalse,\n-\t0x1.0000010000000002048242f2ffp+0, false,\n-\t0x1.0000010000000002048242f2ff8p+0, false,\n-\t0x1.0000010000000002048242f2ffp+0, false,\n-\t0x1.0000010000000002048242f2ff8p+0, false,\n-\tfalse,\n-\t0x1.0000010000000002048242f2ff66p+0, false,\n-\t0x1.0000010000000002048242f2ff67p+0, false,\n-\t0x1.0000010000000002048242f2ff66p+0, false,\n-\t0x1.0000010000000002048242f2ff67p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.0000010000001p+0, false, false,\n+\tfalse,\n+\t0x1.0000010000000002p+0, false, false,\n+\t0x1.0000010000000002p+0, false, false,\n+\t0x1.0000010000000002p+0, false, false,\n+\t0x1.0000010000000004p+0, false, false,\n+\tfalse,\n+\t0x1.0000010000000002p+0, false, false,\n+\t0x1.0000010000000002p+0, false, false,\n+\t0x1.0000010000000002p+0, false, false,\n+\t0x1.0000010000000004p+0, false, false,\n+\tfalse,\n+\t0x1.0000010000000002048242f2ffp+0, false, false,\n+\t0x1.0000010000000002048242f2ff8p+0, false, false,\n+\t0x1.0000010000000002048242f2ffp+0, false, false,\n+\t0x1.0000010000000002048242f2ff8p+0, false, false,\n+\tfalse,\n+\t0x1.0000010000000002048242f2ff66p+0, false, false,\n+\t0x1.0000010000000002048242f2ff67p+0, false, false,\n+\t0x1.0000010000000002048242f2ff66p+0, false, false,\n+\t0x1.0000010000000002048242f2ff67p+0, false, false),\n   TEST (\"1.000000059604644776\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.0000010000001p+0, false,\n-\tfalse,\n-\t0x1.000001000000000ap+0, false,\n-\t0x1.000001000000000cp+0, false,\n-\t0x1.000001000000000ap+0, false,\n-\t0x1.000001000000000cp+0, false,\n-\tfalse,\n-\t0x1.000001000000000ap+0, false,\n-\t0x1.000001000000000cp+0, false,\n-\t0x1.000001000000000ap+0, false,\n-\t0x1.000001000000000cp+0, false,\n-\tfalse,\n-\t0x1.000001000000000b3db12bdc21p+0, false,\n-\t0x1.000001000000000b3db12bdc21p+0, false,\n-\t0x1.000001000000000b3db12bdc21p+0, false,\n-\t0x1.000001000000000b3db12bdc218p+0, false,\n-\tfalse,\n-\t0x1.000001000000000b3db12bdc213cp+0, false,\n-\t0x1.000001000000000b3db12bdc213dp+0, false,\n-\t0x1.000001000000000b3db12bdc213cp+0, false,\n-\t0x1.000001000000000b3db12bdc213dp+0, false),\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.0000010000001p+0, false, false,\n+\tfalse,\n+\t0x1.000001000000000ap+0, false, false,\n+\t0x1.000001000000000cp+0, false, false,\n+\t0x1.000001000000000ap+0, false, false,\n+\t0x1.000001000000000cp+0, false, false,\n+\tfalse,\n+\t0x1.000001000000000ap+0, false, false,\n+\t0x1.000001000000000cp+0, false, false,\n+\t0x1.000001000000000ap+0, false, false,\n+\t0x1.000001000000000cp+0, false, false,\n+\tfalse,\n+\t0x1.000001000000000b3db12bdc21p+0, false, false,\n+\t0x1.000001000000000b3db12bdc21p+0, false, false,\n+\t0x1.000001000000000b3db12bdc21p+0, false, false,\n+\t0x1.000001000000000b3db12bdc218p+0, false, false,\n+\tfalse,\n+\t0x1.000001000000000b3db12bdc213cp+0, false, false,\n+\t0x1.000001000000000b3db12bdc213dp+0, false, false,\n+\t0x1.000001000000000b3db12bdc213cp+0, false, false,\n+\t0x1.000001000000000b3db12bdc213dp+0, false, false),\n   TEST (\"1.000000059604644775\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.000000fffffffp+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000000fffffffp+0, false,\n-\t0x1.000001p+0, false,\n-\tfalse,\n-\t0x1.000000fffffffff8p+0, false,\n-\t0x1.000000fffffffff8p+0, false,\n-\t0x1.000000fffffffff8p+0, false,\n-\t0x1.000000fffffffffap+0, false,\n-\tfalse,\n-\t0x1.000000fffffffff8p+0, false,\n-\t0x1.000000fffffffff8p+0, false,\n-\t0x1.000000fffffffff8p+0, false,\n-\t0x1.000000fffffffffap+0, false,\n-\tfalse,\n-\t0x1.000000fffffffff8cb535a09dd8p+0, false,\n-\t0x1.000000fffffffff8cb535a09dd8p+0, false,\n-\t0x1.000000fffffffff8cb535a09dd8p+0, false,\n-\t0x1.000000fffffffff8cb535a09dep+0, false,\n-\tfalse,\n-\t0x1.000000fffffffff8cb535a09dd9p+0, false,\n-\t0x1.000000fffffffff8cb535a09dd91p+0, false,\n-\t0x1.000000fffffffff8cb535a09dd9p+0, false,\n-\t0x1.000000fffffffff8cb535a09dd91p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffffp+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000000fffffffp+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffffff8p+0, false, false,\n+\t0x1.000000fffffffff8p+0, false, false,\n+\t0x1.000000fffffffff8p+0, false, false,\n+\t0x1.000000fffffffffap+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffffff8p+0, false, false,\n+\t0x1.000000fffffffff8p+0, false, false,\n+\t0x1.000000fffffffff8p+0, false, false,\n+\t0x1.000000fffffffffap+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffffff8cb535a09dd8p+0, false, false,\n+\t0x1.000000fffffffff8cb535a09dd8p+0, false, false,\n+\t0x1.000000fffffffff8cb535a09dd8p+0, false, false,\n+\t0x1.000000fffffffff8cb535a09dep+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffffff8cb535a09dd9p+0, false, false,\n+\t0x1.000000fffffffff8cb535a09dd91p+0, false, false,\n+\t0x1.000000fffffffff8cb535a09dd9p+0, false, false,\n+\t0x1.000000fffffffff8cb535a09dd91p+0, false, false),\n   TEST (\"1.00000005960464478\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.0000010000001p+0, false,\n-\tfalse,\n-\t0x1.0000010000000054p+0, false,\n-\t0x1.0000010000000056p+0, false,\n-\t0x1.0000010000000054p+0, false,\n-\t0x1.0000010000000056p+0, false,\n-\tfalse,\n-\t0x1.0000010000000054p+0, false,\n-\t0x1.0000010000000056p+0, false,\n-\t0x1.0000010000000054p+0, false,\n-\t0x1.0000010000000056p+0, false,\n-\tfalse,\n-\t0x1.0000010000000055072873252f8p+0, false,\n-\t0x1.0000010000000055072873253p+0, false,\n-\t0x1.0000010000000055072873252f8p+0, false,\n-\t0x1.0000010000000055072873253p+0, false,\n-\tfalse,\n-\t0x1.0000010000000055072873252febp+0, false,\n-\t0x1.0000010000000055072873252febp+0, false,\n-\t0x1.0000010000000055072873252febp+0, false,\n-\t0x1.0000010000000055072873252fecp+0, false),\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.0000010000001p+0, false, false,\n+\tfalse,\n+\t0x1.0000010000000054p+0, false, false,\n+\t0x1.0000010000000056p+0, false, false,\n+\t0x1.0000010000000054p+0, false, false,\n+\t0x1.0000010000000056p+0, false, false,\n+\tfalse,\n+\t0x1.0000010000000054p+0, false, false,\n+\t0x1.0000010000000056p+0, false, false,\n+\t0x1.0000010000000054p+0, false, false,\n+\t0x1.0000010000000056p+0, false, false,\n+\tfalse,\n+\t0x1.0000010000000055072873252f8p+0, false, false,\n+\t0x1.0000010000000055072873253p+0, false, false,\n+\t0x1.0000010000000055072873252f8p+0, false, false,\n+\t0x1.0000010000000055072873253p+0, false, false,\n+\tfalse,\n+\t0x1.0000010000000055072873252febp+0, false, false,\n+\t0x1.0000010000000055072873252febp+0, false, false,\n+\t0x1.0000010000000055072873252febp+0, false, false,\n+\t0x1.0000010000000055072873252fecp+0, false, false),\n   TEST (\"1.0000000596046448\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.0000010000001p+0, false,\n-\tfalse,\n-\t0x1.00000100000001c4p+0, false,\n-\t0x1.00000100000001c6p+0, false,\n-\t0x1.00000100000001c4p+0, false,\n-\t0x1.00000100000001c6p+0, false,\n-\tfalse,\n-\t0x1.00000100000001c4p+0, false,\n-\t0x1.00000100000001c6p+0, false,\n-\t0x1.00000100000001c4p+0, false,\n-\t0x1.00000100000001c6p+0, false,\n-\tfalse,\n-\t0x1.00000100000001c5f67cd79279p+0, false,\n-\t0x1.00000100000001c5f67cd792798p+0, false,\n-\t0x1.00000100000001c5f67cd79279p+0, false,\n-\t0x1.00000100000001c5f67cd792798p+0, false,\n-\tfalse,\n-\t0x1.00000100000001c5f67cd7927953p+0, false,\n-\t0x1.00000100000001c5f67cd7927954p+0, false,\n-\t0x1.00000100000001c5f67cd7927953p+0, false,\n-\t0x1.00000100000001c5f67cd7927954p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.0000010000001p+0, false, false,\n+\tfalse,\n+\t0x1.00000100000001c4p+0, false, false,\n+\t0x1.00000100000001c6p+0, false, false,\n+\t0x1.00000100000001c4p+0, false, false,\n+\t0x1.00000100000001c6p+0, false, false,\n+\tfalse,\n+\t0x1.00000100000001c4p+0, false, false,\n+\t0x1.00000100000001c6p+0, false, false,\n+\t0x1.00000100000001c4p+0, false, false,\n+\t0x1.00000100000001c6p+0, false, false,\n+\tfalse,\n+\t0x1.00000100000001c5f67cd79279p+0, false, false,\n+\t0x1.00000100000001c5f67cd792798p+0, false, false,\n+\t0x1.00000100000001c5f67cd79279p+0, false, false,\n+\t0x1.00000100000001c5f67cd792798p+0, false, false,\n+\tfalse,\n+\t0x1.00000100000001c5f67cd7927953p+0, false, false,\n+\t0x1.00000100000001c5f67cd7927954p+0, false, false,\n+\t0x1.00000100000001c5f67cd7927953p+0, false, false,\n+\t0x1.00000100000001c5f67cd7927954p+0, false, false),\n   TEST (\"1.000000059604645\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.0000010000001p+0, false,\n-\t0x1.0000010000001p+0, false,\n-\t0x1.0000010000001p+0, false,\n-\t0x1.0000010000002p+0, false,\n-\tfalse,\n-\t0x1.000001000000102ep+0, false,\n-\t0x1.000001000000103p+0, false,\n-\t0x1.000001000000102ep+0, false,\n-\t0x1.000001000000103p+0, false,\n-\tfalse,\n-\t0x1.000001000000102ep+0, false,\n-\t0x1.000001000000103p+0, false,\n-\t0x1.000001000000102ep+0, false,\n-\t0x1.000001000000103p+0, false,\n-\tfalse,\n-\t0x1.000001000000102f4fc8c3d757p+0, false,\n-\t0x1.000001000000102f4fc8c3d7578p+0, false,\n-\t0x1.000001000000102f4fc8c3d757p+0, false,\n-\t0x1.000001000000102f4fc8c3d7578p+0, false,\n-\tfalse,\n-\t0x1.000001000000102f4fc8c3d75769p+0, false,\n-\t0x1.000001000000102f4fc8c3d75769p+0, false,\n-\t0x1.000001000000102f4fc8c3d75769p+0, false,\n-\t0x1.000001000000102f4fc8c3d7576ap+0, false),\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.0000010000001p+0, false, false,\n+\t0x1.0000010000001p+0, false, false,\n+\t0x1.0000010000001p+0, false, false,\n+\t0x1.0000010000002p+0, false, false,\n+\tfalse,\n+\t0x1.000001000000102ep+0, false, false,\n+\t0x1.000001000000103p+0, false, false,\n+\t0x1.000001000000102ep+0, false, false,\n+\t0x1.000001000000103p+0, false, false,\n+\tfalse,\n+\t0x1.000001000000102ep+0, false, false,\n+\t0x1.000001000000103p+0, false, false,\n+\t0x1.000001000000102ep+0, false, false,\n+\t0x1.000001000000103p+0, false, false,\n+\tfalse,\n+\t0x1.000001000000102f4fc8c3d757p+0, false, false,\n+\t0x1.000001000000102f4fc8c3d7578p+0, false, false,\n+\t0x1.000001000000102f4fc8c3d757p+0, false, false,\n+\t0x1.000001000000102f4fc8c3d7578p+0, false, false,\n+\tfalse,\n+\t0x1.000001000000102f4fc8c3d75769p+0, false, false,\n+\t0x1.000001000000102f4fc8c3d75769p+0, false, false,\n+\t0x1.000001000000102f4fc8c3d75769p+0, false, false,\n+\t0x1.000001000000102f4fc8c3d7576ap+0, false, false),\n   TEST (\"1.00000005960464\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.000000fffffeap+0, false,\n-\t0x1.000000fffffeap+0, false,\n-\t0x1.000000fffffeap+0, false,\n-\t0x1.000000fffffebp+0, false,\n-\tfalse,\n-\t0x1.000000fffffea7e4p+0, false,\n-\t0x1.000000fffffea7e6p+0, false,\n-\t0x1.000000fffffea7e4p+0, false,\n-\t0x1.000000fffffea7e6p+0, false,\n-\tfalse,\n-\t0x1.000000fffffea7e4p+0, false,\n-\t0x1.000000fffffea7e6p+0, false,\n-\t0x1.000000fffffea7e4p+0, false,\n-\t0x1.000000fffffea7e6p+0, false,\n-\tfalse,\n-\t0x1.000000fffffea7e5975eb11da7p+0, false,\n-\t0x1.000000fffffea7e5975eb11da78p+0, false,\n-\t0x1.000000fffffea7e5975eb11da7p+0, false,\n-\t0x1.000000fffffea7e5975eb11da78p+0, false,\n-\tfalse,\n-\t0x1.000000fffffea7e5975eb11da74ap+0, false,\n-\t0x1.000000fffffea7e5975eb11da74bp+0, false,\n-\t0x1.000000fffffea7e5975eb11da74ap+0, false,\n-\t0x1.000000fffffea7e5975eb11da74bp+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffeap+0, false, false,\n+\t0x1.000000fffffeap+0, false, false,\n+\t0x1.000000fffffeap+0, false, false,\n+\t0x1.000000fffffebp+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffea7e4p+0, false, false,\n+\t0x1.000000fffffea7e6p+0, false, false,\n+\t0x1.000000fffffea7e4p+0, false, false,\n+\t0x1.000000fffffea7e6p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffea7e4p+0, false, false,\n+\t0x1.000000fffffea7e6p+0, false, false,\n+\t0x1.000000fffffea7e4p+0, false, false,\n+\t0x1.000000fffffea7e6p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffea7e5975eb11da7p+0, false, false,\n+\t0x1.000000fffffea7e5975eb11da78p+0, false, false,\n+\t0x1.000000fffffea7e5975eb11da7p+0, false, false,\n+\t0x1.000000fffffea7e5975eb11da78p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffea7e5975eb11da74ap+0, false, false,\n+\t0x1.000000fffffea7e5975eb11da74bp+0, false, false,\n+\t0x1.000000fffffea7e5975eb11da74ap+0, false, false,\n+\t0x1.000000fffffea7e5975eb11da74bp+0, false, false),\n   TEST (\"1.0000000596046\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.000000fffff36p+0, false,\n-\t0x1.000000fffff36p+0, false,\n-\t0x1.000000fffff36p+0, false,\n-\t0x1.000000fffff37p+0, false,\n-\tfalse,\n-\t0x1.000000fffff36596p+0, false,\n-\t0x1.000000fffff36598p+0, false,\n-\t0x1.000000fffff36596p+0, false,\n-\t0x1.000000fffff36598p+0, false,\n-\tfalse,\n-\t0x1.000000fffff36596p+0, false,\n-\t0x1.000000fffff36598p+0, false,\n-\t0x1.000000fffff36596p+0, false,\n-\t0x1.000000fffff36598p+0, false,\n-\tfalse,\n-\t0x1.000000fffff36597d40e1b5026p+0, false,\n-\t0x1.000000fffff36597d40e1b50268p+0, false,\n-\t0x1.000000fffff36597d40e1b5026p+0, false,\n-\t0x1.000000fffff36597d40e1b50268p+0, false,\n-\tfalse,\n-\t0x1.000000fffff36597d40e1b502655p+0, false,\n-\t0x1.000000fffff36597d40e1b502656p+0, false,\n-\t0x1.000000fffff36597d40e1b502655p+0, false,\n-\t0x1.000000fffff36597d40e1b502656p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffff36p+0, false, false,\n+\t0x1.000000fffff36p+0, false, false,\n+\t0x1.000000fffff36p+0, false, false,\n+\t0x1.000000fffff37p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffff36596p+0, false, false,\n+\t0x1.000000fffff36598p+0, false, false,\n+\t0x1.000000fffff36596p+0, false, false,\n+\t0x1.000000fffff36598p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffff36596p+0, false, false,\n+\t0x1.000000fffff36598p+0, false, false,\n+\t0x1.000000fffff36596p+0, false, false,\n+\t0x1.000000fffff36598p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffff36597d40e1b5026p+0, false, false,\n+\t0x1.000000fffff36597d40e1b50268p+0, false, false,\n+\t0x1.000000fffff36597d40e1b5026p+0, false, false,\n+\t0x1.000000fffff36597d40e1b50268p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffff36597d40e1b502655p+0, false, false,\n+\t0x1.000000fffff36597d40e1b502656p+0, false, false,\n+\t0x1.000000fffff36597d40e1b502655p+0, false, false,\n+\t0x1.000000fffff36597d40e1b502656p+0, false, false),\n   TEST (\"1.000000059605\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.000001000063fp+0, false,\n-\t0x1.000001000064p+0, false,\n-\t0x1.000001000063fp+0, false,\n-\t0x1.000001000064p+0, false,\n-\tfalse,\n-\t0x1.000001000063fcap+0, false,\n-\t0x1.000001000063fca2p+0, false,\n-\t0x1.000001000063fcap+0, false,\n-\t0x1.000001000063fca2p+0, false,\n-\tfalse,\n-\t0x1.000001000063fcap+0, false,\n-\t0x1.000001000063fca2p+0, false,\n-\t0x1.000001000063fcap+0, false,\n-\t0x1.000001000063fca2p+0, false,\n-\tfalse,\n-\t0x1.000001000063fca17533f5572f8p+0, false,\n-\t0x1.000001000063fca17533f5573p+0, false,\n-\t0x1.000001000063fca17533f5572f8p+0, false,\n-\t0x1.000001000063fca17533f5573p+0, false,\n-\tfalse,\n-\t0x1.000001000063fca17533f5572fe9p+0, false,\n-\t0x1.000001000063fca17533f5572feap+0, false,\n-\t0x1.000001000063fca17533f5572fe9p+0, false,\n-\t0x1.000001000063fca17533f5572feap+0, false),\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.000001000063fp+0, false, false,\n+\t0x1.000001000064p+0, false, false,\n+\t0x1.000001000063fp+0, false, false,\n+\t0x1.000001000064p+0, false, false,\n+\tfalse,\n+\t0x1.000001000063fcap+0, false, false,\n+\t0x1.000001000063fca2p+0, false, false,\n+\t0x1.000001000063fcap+0, false, false,\n+\t0x1.000001000063fca2p+0, false, false,\n+\tfalse,\n+\t0x1.000001000063fcap+0, false, false,\n+\t0x1.000001000063fca2p+0, false, false,\n+\t0x1.000001000063fcap+0, false, false,\n+\t0x1.000001000063fca2p+0, false, false,\n+\tfalse,\n+\t0x1.000001000063fca17533f5572f8p+0, false, false,\n+\t0x1.000001000063fca17533f5573p+0, false, false,\n+\t0x1.000001000063fca17533f5572f8p+0, false, false,\n+\t0x1.000001000063fca17533f5573p+0, false, false,\n+\tfalse,\n+\t0x1.000001000063fca17533f5572fe9p+0, false, false,\n+\t0x1.000001000063fca17533f5572feap+0, false, false,\n+\t0x1.000001000063fca17533f5572fe9p+0, false, false,\n+\t0x1.000001000063fca17533f5572feap+0, false, false),\n   TEST (\"1.00000005960\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.000000fffae49p+0, false,\n-\t0x1.000000fffae4ap+0, false,\n-\t0x1.000000fffae49p+0, false,\n-\t0x1.000000fffae4ap+0, false,\n-\tfalse,\n-\t0x1.000000fffae49ca8p+0, false,\n-\t0x1.000000fffae49caap+0, false,\n-\t0x1.000000fffae49ca8p+0, false,\n-\t0x1.000000fffae49caap+0, false,\n-\tfalse,\n-\t0x1.000000fffae49ca8p+0, false,\n-\t0x1.000000fffae49caap+0, false,\n-\t0x1.000000fffae49ca8p+0, false,\n-\t0x1.000000fffae49caap+0, false,\n-\tfalse,\n-\t0x1.000000fffae49ca916dacfff38p+0, false,\n-\t0x1.000000fffae49ca916dacfff38p+0, false,\n-\t0x1.000000fffae49ca916dacfff38p+0, false,\n-\t0x1.000000fffae49ca916dacfff388p+0, false,\n-\tfalse,\n-\t0x1.000000fffae49ca916dacfff382dp+0, false,\n-\t0x1.000000fffae49ca916dacfff382dp+0, false,\n-\t0x1.000000fffae49ca916dacfff382dp+0, false,\n-\t0x1.000000fffae49ca916dacfff382ep+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffae49p+0, false, false,\n+\t0x1.000000fffae4ap+0, false, false,\n+\t0x1.000000fffae49p+0, false, false,\n+\t0x1.000000fffae4ap+0, false, false,\n+\tfalse,\n+\t0x1.000000fffae49ca8p+0, false, false,\n+\t0x1.000000fffae49caap+0, false, false,\n+\t0x1.000000fffae49ca8p+0, false, false,\n+\t0x1.000000fffae49caap+0, false, false,\n+\tfalse,\n+\t0x1.000000fffae49ca8p+0, false, false,\n+\t0x1.000000fffae49caap+0, false, false,\n+\t0x1.000000fffae49ca8p+0, false, false,\n+\t0x1.000000fffae49caap+0, false, false,\n+\tfalse,\n+\t0x1.000000fffae49ca916dacfff38p+0, false, false,\n+\t0x1.000000fffae49ca916dacfff38p+0, false, false,\n+\t0x1.000000fffae49ca916dacfff38p+0, false, false,\n+\t0x1.000000fffae49ca916dacfff388p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffae49ca916dacfff382dp+0, false, false,\n+\t0x1.000000fffae49ca916dacfff382dp+0, false, false,\n+\t0x1.000000fffae49ca916dacfff382dp+0, false, false,\n+\t0x1.000000fffae49ca916dacfff382ep+0, false, false),\n   TEST (\"1.0000000596\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.000000fffae49p+0, false,\n-\t0x1.000000fffae4ap+0, false,\n-\t0x1.000000fffae49p+0, false,\n-\t0x1.000000fffae4ap+0, false,\n-\tfalse,\n-\t0x1.000000fffae49ca8p+0, false,\n-\t0x1.000000fffae49caap+0, false,\n-\t0x1.000000fffae49ca8p+0, false,\n-\t0x1.000000fffae49caap+0, false,\n-\tfalse,\n-\t0x1.000000fffae49ca8p+0, false,\n-\t0x1.000000fffae49caap+0, false,\n-\t0x1.000000fffae49ca8p+0, false,\n-\t0x1.000000fffae49caap+0, false,\n-\tfalse,\n-\t0x1.000000fffae49ca916dacfff38p+0, false,\n-\t0x1.000000fffae49ca916dacfff38p+0, false,\n-\t0x1.000000fffae49ca916dacfff38p+0, false,\n-\t0x1.000000fffae49ca916dacfff388p+0, false,\n-\tfalse,\n-\t0x1.000000fffae49ca916dacfff382dp+0, false,\n-\t0x1.000000fffae49ca916dacfff382dp+0, false,\n-\t0x1.000000fffae49ca916dacfff382dp+0, false,\n-\t0x1.000000fffae49ca916dacfff382ep+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffae49p+0, false, false,\n+\t0x1.000000fffae4ap+0, false, false,\n+\t0x1.000000fffae49p+0, false, false,\n+\t0x1.000000fffae4ap+0, false, false,\n+\tfalse,\n+\t0x1.000000fffae49ca8p+0, false, false,\n+\t0x1.000000fffae49caap+0, false, false,\n+\t0x1.000000fffae49ca8p+0, false, false,\n+\t0x1.000000fffae49caap+0, false, false,\n+\tfalse,\n+\t0x1.000000fffae49ca8p+0, false, false,\n+\t0x1.000000fffae49caap+0, false, false,\n+\t0x1.000000fffae49ca8p+0, false, false,\n+\t0x1.000000fffae49caap+0, false, false,\n+\tfalse,\n+\t0x1.000000fffae49ca916dacfff38p+0, false, false,\n+\t0x1.000000fffae49ca916dacfff38p+0, false, false,\n+\t0x1.000000fffae49ca916dacfff38p+0, false, false,\n+\t0x1.000000fffae49ca916dacfff388p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffae49ca916dacfff382dp+0, false, false,\n+\t0x1.000000fffae49ca916dacfff382dp+0, false, false,\n+\t0x1.000000fffae49ca916dacfff382dp+0, false, false,\n+\t0x1.000000fffae49ca916dacfff382ep+0, false, false),\n   TEST (\"1.000000060\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.00000101b2b29p+0, false,\n-\t0x1.00000101b2b2ap+0, false,\n-\t0x1.00000101b2b29p+0, false,\n-\t0x1.00000101b2b2ap+0, false,\n-\tfalse,\n-\t0x1.00000101b2b29a46p+0, false,\n-\t0x1.00000101b2b29a46p+0, false,\n-\t0x1.00000101b2b29a46p+0, false,\n-\t0x1.00000101b2b29a48p+0, false,\n-\tfalse,\n-\t0x1.00000101b2b29a46p+0, false,\n-\t0x1.00000101b2b29a46p+0, false,\n-\t0x1.00000101b2b29a46p+0, false,\n-\t0x1.00000101b2b29a48p+0, false,\n-\tfalse,\n-\t0x1.00000101b2b29a4692b67b7ca3p+0, false,\n-\t0x1.00000101b2b29a4692b67b7ca3p+0, false,\n-\t0x1.00000101b2b29a4692b67b7ca3p+0, false,\n-\t0x1.00000101b2b29a4692b67b7ca38p+0, false,\n-\tfalse,\n-\t0x1.00000101b2b29a4692b67b7ca313p+0, false,\n-\t0x1.00000101b2b29a4692b67b7ca314p+0, false,\n-\t0x1.00000101b2b29a4692b67b7ca313p+0, false,\n-\t0x1.00000101b2b29a4692b67b7ca314p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.00000101b2b29p+0, false, false,\n+\t0x1.00000101b2b2ap+0, false, false,\n+\t0x1.00000101b2b29p+0, false, false,\n+\t0x1.00000101b2b2ap+0, false, false,\n+\tfalse,\n+\t0x1.00000101b2b29a46p+0, false, false,\n+\t0x1.00000101b2b29a46p+0, false, false,\n+\t0x1.00000101b2b29a46p+0, false, false,\n+\t0x1.00000101b2b29a48p+0, false, false,\n+\tfalse,\n+\t0x1.00000101b2b29a46p+0, false, false,\n+\t0x1.00000101b2b29a46p+0, false, false,\n+\t0x1.00000101b2b29a46p+0, false, false,\n+\t0x1.00000101b2b29a48p+0, false, false,\n+\tfalse,\n+\t0x1.00000101b2b29a4692b67b7ca3p+0, false, false,\n+\t0x1.00000101b2b29a4692b67b7ca3p+0, false, false,\n+\t0x1.00000101b2b29a4692b67b7ca3p+0, false, false,\n+\t0x1.00000101b2b29a4692b67b7ca38p+0, false, false,\n+\tfalse,\n+\t0x1.00000101b2b29a4692b67b7ca313p+0, false, false,\n+\t0x1.00000101b2b29a4692b67b7ca314p+0, false, false,\n+\t0x1.00000101b2b29a4692b67b7ca313p+0, false, false,\n+\t0x1.00000101b2b29a4692b67b7ca314p+0, false, false),\n   TEST (\"1.00000006\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.00000101b2b29p+0, false,\n-\t0x1.00000101b2b2ap+0, false,\n-\t0x1.00000101b2b29p+0, false,\n-\t0x1.00000101b2b2ap+0, false,\n-\tfalse,\n-\t0x1.00000101b2b29a46p+0, false,\n-\t0x1.00000101b2b29a46p+0, false,\n-\t0x1.00000101b2b29a46p+0, false,\n-\t0x1.00000101b2b29a48p+0, false,\n-\tfalse,\n-\t0x1.00000101b2b29a46p+0, false,\n-\t0x1.00000101b2b29a46p+0, false,\n-\t0x1.00000101b2b29a46p+0, false,\n-\t0x1.00000101b2b29a48p+0, false,\n-\tfalse,\n-\t0x1.00000101b2b29a4692b67b7ca3p+0, false,\n-\t0x1.00000101b2b29a4692b67b7ca3p+0, false,\n-\t0x1.00000101b2b29a4692b67b7ca3p+0, false,\n-\t0x1.00000101b2b29a4692b67b7ca38p+0, false,\n-\tfalse,\n-\t0x1.00000101b2b29a4692b67b7ca313p+0, false,\n-\t0x1.00000101b2b29a4692b67b7ca314p+0, false,\n-\t0x1.00000101b2b29a4692b67b7ca313p+0, false,\n-\t0x1.00000101b2b29a4692b67b7ca314p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.00000101b2b29p+0, false, false,\n+\t0x1.00000101b2b2ap+0, false, false,\n+\t0x1.00000101b2b29p+0, false, false,\n+\t0x1.00000101b2b2ap+0, false, false,\n+\tfalse,\n+\t0x1.00000101b2b29a46p+0, false, false,\n+\t0x1.00000101b2b29a46p+0, false, false,\n+\t0x1.00000101b2b29a46p+0, false, false,\n+\t0x1.00000101b2b29a48p+0, false, false,\n+\tfalse,\n+\t0x1.00000101b2b29a46p+0, false, false,\n+\t0x1.00000101b2b29a46p+0, false, false,\n+\t0x1.00000101b2b29a46p+0, false, false,\n+\t0x1.00000101b2b29a48p+0, false, false,\n+\tfalse,\n+\t0x1.00000101b2b29a4692b67b7ca3p+0, false, false,\n+\t0x1.00000101b2b29a4692b67b7ca3p+0, false, false,\n+\t0x1.00000101b2b29a4692b67b7ca3p+0, false, false,\n+\t0x1.00000101b2b29a4692b67b7ca38p+0, false, false,\n+\tfalse,\n+\t0x1.00000101b2b29a4692b67b7ca313p+0, false, false,\n+\t0x1.00000101b2b29a4692b67b7ca314p+0, false, false,\n+\t0x1.00000101b2b29a4692b67b7ca313p+0, false, false,\n+\t0x1.00000101b2b29a4692b67b7ca314p+0, false, false),\n   TEST (\"1.0000001\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.000001ad7f29ap+0, false,\n-\t0x1.000001ad7f29bp+0, false,\n-\t0x1.000001ad7f29ap+0, false,\n-\t0x1.000001ad7f29bp+0, false,\n-\tfalse,\n-\t0x1.000001ad7f29abcap+0, false,\n-\t0x1.000001ad7f29abcap+0, false,\n-\t0x1.000001ad7f29abcap+0, false,\n-\t0x1.000001ad7f29abccp+0, false,\n-\tfalse,\n-\t0x1.000001ad7f29abcap+0, false,\n-\t0x1.000001ad7f29abcap+0, false,\n-\t0x1.000001ad7f29abcap+0, false,\n-\t0x1.000001ad7f29abccp+0, false,\n-\tfalse,\n-\t0x1.000001ad7f29abcaf485787a65p+0, false,\n-\t0x1.000001ad7f29abcaf485787a65p+0, false,\n-\t0x1.000001ad7f29abcaf485787a65p+0, false,\n-\t0x1.000001ad7f29abcaf485787a658p+0, false,\n-\tfalse,\n-\t0x1.000001ad7f29abcaf485787a652p+0, false,\n-\t0x1.000001ad7f29abcaf485787a6521p+0, false,\n-\t0x1.000001ad7f29abcaf485787a652p+0, false,\n-\t0x1.000001ad7f29abcaf485787a6521p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.000001ad7f29ap+0, false, false,\n+\t0x1.000001ad7f29bp+0, false, false,\n+\t0x1.000001ad7f29ap+0, false, false,\n+\t0x1.000001ad7f29bp+0, false, false,\n+\tfalse,\n+\t0x1.000001ad7f29abcap+0, false, false,\n+\t0x1.000001ad7f29abcap+0, false, false,\n+\t0x1.000001ad7f29abcap+0, false, false,\n+\t0x1.000001ad7f29abccp+0, false, false,\n+\tfalse,\n+\t0x1.000001ad7f29abcap+0, false, false,\n+\t0x1.000001ad7f29abcap+0, false, false,\n+\t0x1.000001ad7f29abcap+0, false, false,\n+\t0x1.000001ad7f29abccp+0, false, false,\n+\tfalse,\n+\t0x1.000001ad7f29abcaf485787a65p+0, false, false,\n+\t0x1.000001ad7f29abcaf485787a65p+0, false, false,\n+\t0x1.000001ad7f29abcaf485787a65p+0, false, false,\n+\t0x1.000001ad7f29abcaf485787a658p+0, false, false,\n+\tfalse,\n+\t0x1.000001ad7f29abcaf485787a652p+0, false, false,\n+\t0x1.000001ad7f29abcaf485787a6521p+0, false, false,\n+\t0x1.000001ad7f29abcaf485787a652p+0, false, false,\n+\t0x1.000001ad7f29abcaf485787a6521p+0, false, false),\n   TEST (\"1.000000\",\n \ttrue,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\ttrue,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\ttrue,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\ttrue,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\ttrue,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\ttrue,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\ttrue,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\ttrue,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\ttrue,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\ttrue,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\ttrue,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false),\n   TEST (\"1.00000000000000011113\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.0000000000000802p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.0000000000000802p+0, false,\n-\tfalse,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.0000000000000802p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.0000000000000802p+0, false,\n-\tfalse,\n-\t0x1.0000000000000801fc96557232p+0, false,\n-\t0x1.0000000000000801fc96557232p+0, false,\n-\t0x1.0000000000000801fc96557232p+0, false,\n-\t0x1.0000000000000801fc965572328p+0, false,\n-\tfalse,\n-\t0x1.0000000000000801fc9655723222p+0, false,\n-\t0x1.0000000000000801fc9655723222p+0, false,\n-\t0x1.0000000000000801fc9655723222p+0, false,\n-\t0x1.0000000000000801fc9655723223p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.0000000000000802p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.0000000000000802p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.0000000000000802p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.0000000000000802p+0, false, false,\n+\tfalse,\n+\t0x1.0000000000000801fc96557232p+0, false, false,\n+\t0x1.0000000000000801fc96557232p+0, false, false,\n+\t0x1.0000000000000801fc96557232p+0, false, false,\n+\t0x1.0000000000000801fc965572328p+0, false, false,\n+\tfalse,\n+\t0x1.0000000000000801fc9655723222p+0, false, false,\n+\t0x1.0000000000000801fc9655723222p+0, false, false,\n+\t0x1.0000000000000801fc9655723222p+0, false, false,\n+\t0x1.0000000000000801fc9655723223p+0, false, false),\n   TEST (\"1.00000000000000011103\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.0000000000000802p+0, false,\n-\tfalse,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.0000000000000802p+0, false,\n-\tfalse,\n-\t0x1.00000000000008002459c076c48p+0, false,\n-\t0x1.00000000000008002459c076c5p+0, false,\n-\t0x1.00000000000008002459c076c48p+0, false,\n-\t0x1.00000000000008002459c076c5p+0, false,\n-\tfalse,\n-\t0x1.00000000000008002459c076c4f7p+0, false,\n-\t0x1.00000000000008002459c076c4f8p+0, false,\n-\t0x1.00000000000008002459c076c4f7p+0, false,\n-\t0x1.00000000000008002459c076c4f8p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.0000000000000802p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.0000000000000802p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000008002459c076c48p+0, false, false,\n+\t0x1.00000000000008002459c076c5p+0, false, false,\n+\t0x1.00000000000008002459c076c48p+0, false, false,\n+\t0x1.00000000000008002459c076c5p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000008002459c076c4f7p+0, false, false,\n+\t0x1.00000000000008002459c076c4f8p+0, false, false,\n+\t0x1.00000000000008002459c076c4f7p+0, false, false,\n+\t0x1.00000000000008002459c076c4f8p+0, false, false),\n   TEST (\"1.00000000000000011102\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1.00000000000007fep+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000007fep+0, false,\n-\t0x1.00000000000008p+0, false,\n-\tfalse,\n-\t0x1.00000000000007fep+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000007fep+0, false,\n-\t0x1.00000000000008p+0, false,\n-\tfalse,\n-\t0x1.00000000000007fff5207e5dap+0, false,\n-\t0x1.00000000000007fff5207e5da08p+0, false,\n-\t0x1.00000000000007fff5207e5dap+0, false,\n-\t0x1.00000000000007fff5207e5da08p+0, false,\n-\tfalse,\n-\t0x1.00000000000007fff5207e5da073p+0, false,\n-\t0x1.00000000000007fff5207e5da073p+0, false,\n-\t0x1.00000000000007fff5207e5da073p+0, false,\n-\t0x1.00000000000007fff5207e5da074p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007fep+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000007fep+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007fep+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000007fep+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007fff5207e5dap+0, false, false,\n+\t0x1.00000000000007fff5207e5da08p+0, false, false,\n+\t0x1.00000000000007fff5207e5dap+0, false, false,\n+\t0x1.00000000000007fff5207e5da08p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007fff5207e5da073p+0, false, false,\n+\t0x1.00000000000007fff5207e5da073p+0, false, false,\n+\t0x1.00000000000007fff5207e5da073p+0, false, false,\n+\t0x1.00000000000007fff5207e5da074p+0, false, false),\n   TEST (\"1.00000000000000011101\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1.00000000000007fep+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000007fep+0, false,\n-\t0x1.00000000000008p+0, false,\n-\tfalse,\n-\t0x1.00000000000007fep+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000007fep+0, false,\n-\t0x1.00000000000008p+0, false,\n-\tfalse,\n-\t0x1.00000000000007ffc5e73c447b8p+0, false,\n-\t0x1.00000000000007ffc5e73c447cp+0, false,\n-\t0x1.00000000000007ffc5e73c447b8p+0, false,\n-\t0x1.00000000000007ffc5e73c447cp+0, false,\n-\tfalse,\n-\t0x1.00000000000007ffc5e73c447befp+0, false,\n-\t0x1.00000000000007ffc5e73c447befp+0, false,\n-\t0x1.00000000000007ffc5e73c447befp+0, false,\n-\t0x1.00000000000007ffc5e73c447bfp+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007fep+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000007fep+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007fep+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000007fep+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007ffc5e73c447b8p+0, false, false,\n+\t0x1.00000000000007ffc5e73c447cp+0, false, false,\n+\t0x1.00000000000007ffc5e73c447b8p+0, false, false,\n+\t0x1.00000000000007ffc5e73c447cp+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007ffc5e73c447befp+0, false, false,\n+\t0x1.00000000000007ffc5e73c447befp+0, false, false,\n+\t0x1.00000000000007ffc5e73c447befp+0, false, false,\n+\t0x1.00000000000007ffc5e73c447bfp+0, false, false),\n   TEST (\"1.0000000000000001111\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.0000000000000802p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.0000000000000802p+0, false,\n-\tfalse,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.0000000000000802p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.0000000000000802p+0, false,\n-\tfalse,\n-\t0x1.00000000000008016eea8f26c48p+0, false,\n-\t0x1.00000000000008016eea8f26c48p+0, false,\n-\t0x1.00000000000008016eea8f26c48p+0, false,\n-\t0x1.00000000000008016eea8f26c5p+0, false,\n-\tfalse,\n-\t0x1.00000000000008016eea8f26c495p+0, false,\n-\t0x1.00000000000008016eea8f26c496p+0, false,\n-\t0x1.00000000000008016eea8f26c495p+0, false,\n-\t0x1.00000000000008016eea8f26c496p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.0000000000000802p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.0000000000000802p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.0000000000000802p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.0000000000000802p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000008016eea8f26c48p+0, false, false,\n+\t0x1.00000000000008016eea8f26c48p+0, false, false,\n+\t0x1.00000000000008016eea8f26c48p+0, false, false,\n+\t0x1.00000000000008016eea8f26c5p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000008016eea8f26c495p+0, false, false,\n+\t0x1.00000000000008016eea8f26c496p+0, false, false,\n+\t0x1.00000000000008016eea8f26c495p+0, false, false,\n+\t0x1.00000000000008016eea8f26c496p+0, false, false),\n   TEST (\"1.000000000000000111\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1.00000000000007fep+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000007fep+0, false,\n-\t0x1.00000000000008p+0, false,\n-\tfalse,\n-\t0x1.00000000000007fep+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000007fep+0, false,\n-\t0x1.00000000000008p+0, false,\n-\tfalse,\n-\t0x1.00000000000007ff96adfa2b57p+0, false,\n-\t0x1.00000000000007ff96adfa2b578p+0, false,\n-\t0x1.00000000000007ff96adfa2b57p+0, false,\n-\t0x1.00000000000007ff96adfa2b578p+0, false,\n-\tfalse,\n-\t0x1.00000000000007ff96adfa2b576ap+0, false,\n-\t0x1.00000000000007ff96adfa2b576bp+0, false,\n-\t0x1.00000000000007ff96adfa2b576ap+0, false,\n-\t0x1.00000000000007ff96adfa2b576bp+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007fep+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000007fep+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007fep+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000007fep+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007ff96adfa2b57p+0, false, false,\n+\t0x1.00000000000007ff96adfa2b578p+0, false, false,\n+\t0x1.00000000000007ff96adfa2b57p+0, false, false,\n+\t0x1.00000000000007ff96adfa2b578p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007ff96adfa2b576ap+0, false, false,\n+\t0x1.00000000000007ff96adfa2b576bp+0, false, false,\n+\t0x1.00000000000007ff96adfa2b576ap+0, false, false,\n+\t0x1.00000000000007ff96adfa2b576bp+0, false, false),\n   TEST (\"1.00000000000000011\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1.00000000000007ecp+0, false,\n-\t0x1.00000000000007eep+0, false,\n-\t0x1.00000000000007ecp+0, false,\n-\t0x1.00000000000007eep+0, false,\n-\tfalse,\n-\t0x1.00000000000007ecp+0, false,\n-\t0x1.00000000000007eep+0, false,\n-\t0x1.00000000000007ecp+0, false,\n-\t0x1.00000000000007eep+0, false,\n-\tfalse,\n-\t0x1.00000000000007ed24502859138p+0, false,\n-\t0x1.00000000000007ed24502859138p+0, false,\n-\t0x1.00000000000007ed24502859138p+0, false,\n-\t0x1.00000000000007ed2450285914p+0, false,\n-\tfalse,\n-\t0x1.00000000000007ed2450285913bfp+0, false,\n-\t0x1.00000000000007ed2450285913bfp+0, false,\n-\t0x1.00000000000007ed2450285913bfp+0, false,\n-\t0x1.00000000000007ed2450285913cp+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007ecp+0, false, false,\n+\t0x1.00000000000007eep+0, false, false,\n+\t0x1.00000000000007ecp+0, false, false,\n+\t0x1.00000000000007eep+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007ecp+0, false, false,\n+\t0x1.00000000000007eep+0, false, false,\n+\t0x1.00000000000007ecp+0, false, false,\n+\t0x1.00000000000007eep+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007ed24502859138p+0, false, false,\n+\t0x1.00000000000007ed24502859138p+0, false, false,\n+\t0x1.00000000000007ed24502859138p+0, false, false,\n+\t0x1.00000000000007ed2450285914p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007ed2450285913bfp+0, false, false,\n+\t0x1.00000000000007ed2450285913bfp+0, false, false,\n+\t0x1.00000000000007ed2450285913bfp+0, false, false,\n+\t0x1.00000000000007ed2450285913cp+0, false, false),\n   TEST (\"1.0000000000000001\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1.0000000000000734p+0, false,\n-\t0x1.0000000000000734p+0, false,\n-\t0x1.0000000000000734p+0, false,\n-\t0x1.0000000000000736p+0, false,\n-\tfalse,\n-\t0x1.0000000000000734p+0, false,\n-\t0x1.0000000000000734p+0, false,\n-\t0x1.0000000000000734p+0, false,\n-\t0x1.0000000000000736p+0, false,\n-\tfalse,\n-\t0x1.0000000000000734aca5f6226fp+0, false,\n-\t0x1.0000000000000734aca5f6226fp+0, false,\n-\t0x1.0000000000000734aca5f6226fp+0, false,\n-\t0x1.0000000000000734aca5f6226f8p+0, false,\n-\tfalse,\n-\t0x1.0000000000000734aca5f6226f0ap+0, false,\n-\t0x1.0000000000000734aca5f6226f0bp+0, false,\n-\t0x1.0000000000000734aca5f6226f0ap+0, false,\n-\t0x1.0000000000000734aca5f6226f0bp+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1.0000000000000734p+0, false, false,\n+\t0x1.0000000000000734p+0, false, false,\n+\t0x1.0000000000000734p+0, false, false,\n+\t0x1.0000000000000736p+0, false, false,\n+\tfalse,\n+\t0x1.0000000000000734p+0, false, false,\n+\t0x1.0000000000000734p+0, false, false,\n+\t0x1.0000000000000734p+0, false, false,\n+\t0x1.0000000000000736p+0, false, false,\n+\tfalse,\n+\t0x1.0000000000000734aca5f6226fp+0, false, false,\n+\t0x1.0000000000000734aca5f6226fp+0, false, false,\n+\t0x1.0000000000000734aca5f6226fp+0, false, false,\n+\t0x1.0000000000000734aca5f6226f8p+0, false, false,\n+\tfalse,\n+\t0x1.0000000000000734aca5f6226f0ap+0, false, false,\n+\t0x1.0000000000000734aca5f6226f0bp+0, false, false,\n+\t0x1.0000000000000734aca5f6226f0ap+0, false, false,\n+\t0x1.0000000000000734aca5f6226f0bp+0, false, false),\n   TEST (\"3929201589819414e-25\",\n \tfalse,\n-\t0x1.b0053p-32, false,\n-\t0x1.b00532p-32, false,\n-\t0x1.b0053p-32, false,\n-\t0x1.b00532p-32, false,\n-\tfalse,\n-\t0x1.b005314e2421ep-32, false,\n-\t0x1.b005314e2421ep-32, false,\n-\t0x1.b005314e2421ep-32, false,\n-\t0x1.b005314e2421fp-32, false,\n-\tfalse,\n-\t0x1.b005314e2421e7fep-32, false,\n-\t0x1.b005314e2421e8p-32, false,\n-\t0x1.b005314e2421e7fep-32, false,\n-\t0x1.b005314e2421e8p-32, false,\n-\tfalse,\n-\t0x1.b005314e2421e7fep-32, false,\n-\t0x1.b005314e2421e8p-32, false,\n-\t0x1.b005314e2421e7fep-32, false,\n-\t0x1.b005314e2421e8p-32, false,\n-\tfalse,\n-\t0x1.b005314e2421e7ffb472840c5ap-32, false,\n-\t0x1.b005314e2421e7ffb472840c5a8p-32, false,\n-\t0x1.b005314e2421e7ffb472840c5ap-32, false,\n-\t0x1.b005314e2421e7ffb472840c5a8p-32, false,\n-\tfalse,\n-\t0x1.b005314e2421e7ffb472840c5a6ep-32, false,\n-\t0x1.b005314e2421e7ffb472840c5a6fp-32, false,\n-\t0x1.b005314e2421e7ffb472840c5a6ep-32, false,\n-\t0x1.b005314e2421e7ffb472840c5a6fp-32, false),\n+\t0x1.b0053p-32, false, false,\n+\t0x1.b00532p-32, false, false,\n+\t0x1.b0053p-32, false, false,\n+\t0x1.b00532p-32, false, false,\n+\tfalse,\n+\t0x1.b005314e2421ep-32, false, false,\n+\t0x1.b005314e2421ep-32, false, false,\n+\t0x1.b005314e2421ep-32, false, false,\n+\t0x1.b005314e2421fp-32, false, false,\n+\tfalse,\n+\t0x1.b005314e2421e7fep-32, false, false,\n+\t0x1.b005314e2421e8p-32, false, false,\n+\t0x1.b005314e2421e7fep-32, false, false,\n+\t0x1.b005314e2421e8p-32, false, false,\n+\tfalse,\n+\t0x1.b005314e2421e7fep-32, false, false,\n+\t0x1.b005314e2421e8p-32, false, false,\n+\t0x1.b005314e2421e7fep-32, false, false,\n+\t0x1.b005314e2421e8p-32, false, false,\n+\tfalse,\n+\t0x1.b005314e2421e7ffb472840c5ap-32, false, false,\n+\t0x1.b005314e2421e7ffb472840c5a8p-32, false, false,\n+\t0x1.b005314e2421e7ffb472840c5ap-32, false, false,\n+\t0x1.b005314e2421e7ffb472840c5a8p-32, false, false,\n+\tfalse,\n+\t0x1.b005314e2421e7ffb472840c5a6ep-32, false, false,\n+\t0x1.b005314e2421e7ffb472840c5a6fp-32, false, false,\n+\t0x1.b005314e2421e7ffb472840c5a6ep-32, false, false,\n+\t0x1.b005314e2421e7ffb472840c5a6fp-32, false, false),\n   TEST (\"0.0000000000000000000000000000000000000000000021019476964872\"\n \t\"256063855943749348741969203929128147736576356024258346866240\"\n \t\"28790902229957282543182373046875\",\n \tfalse,\n-\t0x8p-152, false,\n-\t0x1p-148, false,\n-\t0x8p-152, false,\n-\t0x1p-148, false,\n-\ttrue,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\ttrue,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\ttrue,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\ttrue,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\ttrue,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false),\n+\t0x8p-152, false, true,\n+\t0x1p-148, false, true,\n+\t0x8p-152, false, true,\n+\t0x1p-148, false, true,\n+\ttrue,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\ttrue,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\ttrue,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\ttrue,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\ttrue,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false),\n   TEST (\"1.00000005960464477539062499\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.000000fffffffp+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000000fffffffp+0, false,\n-\t0x1.000001p+0, false,\n-\tfalse,\n-\t0x1.000000fffffffffep+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000000fffffffffep+0, false,\n-\t0x1.000001p+0, false,\n-\tfalse,\n-\t0x1.000000fffffffffep+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000000fffffffffep+0, false,\n-\t0x1.000001p+0, false,\n-\tfalse,\n-\t0x1.000000fffffffffffffffce7b78p+0, false,\n-\t0x1.000000fffffffffffffffce7b8p+0, false,\n-\t0x1.000000fffffffffffffffce7b78p+0, false,\n-\t0x1.000000fffffffffffffffce7b8p+0, false,\n-\tfalse,\n-\t0x1.000000fffffffffffffffce7b7e7p+0, false,\n-\t0x1.000000fffffffffffffffce7b7e7p+0, false,\n-\t0x1.000000fffffffffffffffce7b7e7p+0, false,\n-\t0x1.000000fffffffffffffffce7b7e8p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffffp+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000000fffffffp+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffffffep+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000000fffffffffep+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffffffep+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000000fffffffffep+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffffffffffffce7b78p+0, false, false,\n+\t0x1.000000fffffffffffffffce7b8p+0, false, false,\n+\t0x1.000000fffffffffffffffce7b78p+0, false, false,\n+\t0x1.000000fffffffffffffffce7b8p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffffffffffffce7b7e7p+0, false, false,\n+\t0x1.000000fffffffffffffffce7b7e7p+0, false, false,\n+\t0x1.000000fffffffffffffffce7b7e7p+0, false, false,\n+\t0x1.000000fffffffffffffffce7b7e8p+0, false, false),\n   TEST (\"1.000000059604644775390625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\ttrue,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\ttrue,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\ttrue,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\ttrue,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\ttrue,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\ttrue,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\ttrue,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\ttrue,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false),\n   TEST (\"1.00000005960464477539062501\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.0000010000001p+0, false,\n-\tfalse,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.0000010000000002p+0, false,\n-\tfalse,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.0000010000000002p+0, false,\n-\tfalse,\n-\t0x1.00000100000000000000031848p+0, false,\n-\t0x1.00000100000000000000031848p+0, false,\n-\t0x1.00000100000000000000031848p+0, false,\n-\t0x1.000001000000000000000318488p+0, false,\n-\tfalse,\n-\t0x1.0000010000000000000003184818p+0, false,\n-\t0x1.0000010000000000000003184819p+0, false,\n-\t0x1.0000010000000000000003184818p+0, false,\n-\t0x1.0000010000000000000003184819p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.0000010000001p+0, false, false,\n+\tfalse,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.0000010000000002p+0, false, false,\n+\tfalse,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.0000010000000002p+0, false, false,\n+\tfalse,\n+\t0x1.00000100000000000000031848p+0, false, false,\n+\t0x1.00000100000000000000031848p+0, false, false,\n+\t0x1.00000100000000000000031848p+0, false, false,\n+\t0x1.000001000000000000000318488p+0, false, false,\n+\tfalse,\n+\t0x1.0000010000000000000003184818p+0, false, false,\n+\t0x1.0000010000000000000003184819p+0, false, false,\n+\t0x1.0000010000000000000003184818p+0, false, false,\n+\t0x1.0000010000000000000003184819p+0, false, false),\n   TEST (\"1.00000011920928955078125\",\n \ttrue,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false),\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false),\n   TEST (\"1.00000017881393432617187499\",\n \tfalse,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000004p+0, false,\n-\tfalse,\n-\t0x1.000002fffffffp+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000002fffffffp+0, false,\n-\t0x1.000003p+0, false,\n-\tfalse,\n-\t0x1.000002fffffffffep+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000002fffffffffep+0, false,\n-\t0x1.000003p+0, false,\n-\tfalse,\n-\t0x1.000002fffffffffep+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000002fffffffffep+0, false,\n-\t0x1.000003p+0, false,\n-\tfalse,\n-\t0x1.000002fffffffffffffffce7b78p+0, false,\n-\t0x1.000002fffffffffffffffce7b8p+0, false,\n-\t0x1.000002fffffffffffffffce7b78p+0, false,\n-\t0x1.000002fffffffffffffffce7b8p+0, false,\n-\tfalse,\n-\t0x1.000002fffffffffffffffce7b7e7p+0, false,\n-\t0x1.000002fffffffffffffffce7b7e7p+0, false,\n-\t0x1.000002fffffffffffffffce7b7e7p+0, false,\n-\t0x1.000002fffffffffffffffce7b7e8p+0, false),\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\tfalse,\n+\t0x1.000002fffffffp+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000002fffffffp+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\tfalse,\n+\t0x1.000002fffffffffep+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000002fffffffffep+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\tfalse,\n+\t0x1.000002fffffffffep+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000002fffffffffep+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\tfalse,\n+\t0x1.000002fffffffffffffffce7b78p+0, false, false,\n+\t0x1.000002fffffffffffffffce7b8p+0, false, false,\n+\t0x1.000002fffffffffffffffce7b78p+0, false, false,\n+\t0x1.000002fffffffffffffffce7b8p+0, false, false,\n+\tfalse,\n+\t0x1.000002fffffffffffffffce7b7e7p+0, false, false,\n+\t0x1.000002fffffffffffffffce7b7e7p+0, false, false,\n+\t0x1.000002fffffffffffffffce7b7e7p+0, false, false,\n+\t0x1.000002fffffffffffffffce7b7e8p+0, false, false),\n   TEST (\"1.000000178813934326171875\",\n \tfalse,\n-\t0x1.000002p+0, false,\n-\t0x1.000004p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000004p+0, false,\n-\ttrue,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\ttrue,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\ttrue,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\ttrue,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\ttrue,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false),\n+\t0x1.000002p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\ttrue,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\ttrue,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\ttrue,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\ttrue,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\ttrue,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false),\n   TEST (\"1.00000017881393432617187501\",\n \tfalse,\n-\t0x1.000002p+0, false,\n-\t0x1.000004p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000004p+0, false,\n-\tfalse,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.0000030000001p+0, false,\n-\tfalse,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.0000030000000002p+0, false,\n-\tfalse,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.0000030000000002p+0, false,\n-\tfalse,\n-\t0x1.00000300000000000000031848p+0, false,\n-\t0x1.00000300000000000000031848p+0, false,\n-\t0x1.00000300000000000000031848p+0, false,\n-\t0x1.000003000000000000000318488p+0, false,\n-\tfalse,\n-\t0x1.0000030000000000000003184818p+0, false,\n-\t0x1.0000030000000000000003184819p+0, false,\n-\t0x1.0000030000000000000003184818p+0, false,\n-\t0x1.0000030000000000000003184819p+0, false),\n+\t0x1.000002p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\tfalse,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.0000030000001p+0, false, false,\n+\tfalse,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.0000030000000002p+0, false, false,\n+\tfalse,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.0000030000000002p+0, false, false,\n+\tfalse,\n+\t0x1.00000300000000000000031848p+0, false, false,\n+\t0x1.00000300000000000000031848p+0, false, false,\n+\t0x1.00000300000000000000031848p+0, false, false,\n+\t0x1.000003000000000000000318488p+0, false, false,\n+\tfalse,\n+\t0x1.0000030000000000000003184818p+0, false, false,\n+\t0x1.0000030000000000000003184819p+0, false, false,\n+\t0x1.0000030000000000000003184818p+0, false, false,\n+\t0x1.0000030000000000000003184819p+0, false, false),\n   TEST (\"1.0000002384185791015625\",\n \ttrue,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\ttrue,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\ttrue,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\ttrue,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\ttrue,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\ttrue,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false),\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\ttrue,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\ttrue,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\ttrue,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\ttrue,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\ttrue,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false),\n   TEST (\"1.08420217248550443400745280086994171142578125e-19\",\n \ttrue,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\ttrue,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\ttrue,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\ttrue,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\ttrue,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\ttrue,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2p-64, false),\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\ttrue,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\ttrue,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\ttrue,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\ttrue,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\ttrue,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false),\n   TEST (\"1.0842022371089897897127399001987457793916291848290711641311\"\n \t\"645507812499e-19\",\n \tfalse,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2.000004p-64, false,\n-\tfalse,\n-\t0x2.000001ffffffep-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000001ffffffep-64, false,\n-\t0x2.000002p-64, false,\n-\tfalse,\n-\t0x2.000001fffffffffcp-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000001fffffffffcp-64, false,\n-\t0x2.000002p-64, false,\n-\tfalse,\n-\t0x2.000001fffffffffcp-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000001fffffffffcp-64, false,\n-\t0x2.000002p-64, false,\n-\tfalse,\n-\t0x2.000001ffffffffffffffffffffp-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000001ffffffffffffffffffffp-64, false,\n-\t0x2.000002p-64, false,\n-\tfalse,\n-\t0x2.000001fffffffffffffffffffffep-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000001fffffffffffffffffffffep-64, false,\n-\t0x2.000002p-64, false),\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\tfalse,\n+\t0x2.000001ffffffep-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000001ffffffep-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\tfalse,\n+\t0x2.000001fffffffffcp-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000001fffffffffcp-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\tfalse,\n+\t0x2.000001fffffffffcp-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000001fffffffffcp-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\tfalse,\n+\t0x2.000001ffffffffffffffffffffp-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000001ffffffffffffffffffffp-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\tfalse,\n+\t0x2.000001fffffffffffffffffffffep-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000001fffffffffffffffffffffep-64, false, false,\n+\t0x2.000002p-64, false, false),\n   TEST (\"1.0842022371089897897127399001987457793916291848290711641311\"\n \t\"6455078125e-19\",\n \tfalse,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2.000004p-64, false,\n-\ttrue,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\ttrue,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\ttrue,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\ttrue,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\ttrue,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false),\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\ttrue,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\ttrue,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\ttrue,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\ttrue,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\ttrue,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false),\n   TEST (\"1.0842022371089897897127399001987457793916291848290711641311\"\n \t\"645507812501e-19\",\n \tfalse,\n-\t0x2p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2p-64, false,\n-\t0x2.000004p-64, false,\n-\tfalse,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.0000020000002p-64, false,\n-\tfalse,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.0000020000000004p-64, false,\n-\tfalse,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.0000020000000004p-64, false,\n-\tfalse,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.00000200000000000000000001p-64, false,\n-\tfalse,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.0000020000000000000000000002p-64, false),\n+\t0x2p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\tfalse,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.0000020000002p-64, false, false,\n+\tfalse,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.0000020000000004p-64, false, false,\n+\tfalse,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.0000020000000004p-64, false, false,\n+\tfalse,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.00000200000000000000000001p-64, false, false,\n+\tfalse,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.0000020000000000000000000002p-64, false, false),\n   TEST (\"1.0842023017324751454180269995275498473574771196581423282623\"\n \t\"291015625e-19\",\n \ttrue,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\ttrue,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\ttrue,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\ttrue,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\ttrue,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\ttrue,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false),\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\ttrue,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\ttrue,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\ttrue,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\ttrue,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\ttrue,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false),\n   TEST (\"1.0842023663559605011233140988563539153233250544872134923934\"\n \t\"936523437499e-19\",\n \tfalse,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000008p-64, false,\n-\tfalse,\n-\t0x2.000005ffffffep-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000005ffffffep-64, false,\n-\t0x2.000006p-64, false,\n-\tfalse,\n-\t0x2.000005fffffffffcp-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000005fffffffffcp-64, false,\n-\t0x2.000006p-64, false,\n-\tfalse,\n-\t0x2.000005fffffffffcp-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000005fffffffffcp-64, false,\n-\t0x2.000006p-64, false,\n-\tfalse,\n-\t0x2.000005ffffffffffffffffffffp-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000005ffffffffffffffffffffp-64, false,\n-\t0x2.000006p-64, false,\n-\tfalse,\n-\t0x2.000005fffffffffffffffffffffep-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000005fffffffffffffffffffffep-64, false,\n-\t0x2.000006p-64, false),\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\tfalse,\n+\t0x2.000005ffffffep-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000005ffffffep-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\tfalse,\n+\t0x2.000005fffffffffcp-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000005fffffffffcp-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\tfalse,\n+\t0x2.000005fffffffffcp-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000005fffffffffcp-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\tfalse,\n+\t0x2.000005ffffffffffffffffffffp-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000005ffffffffffffffffffffp-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\tfalse,\n+\t0x2.000005fffffffffffffffffffffep-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000005fffffffffffffffffffffep-64, false, false,\n+\t0x2.000006p-64, false, false),\n   TEST (\"1.0842023663559605011233140988563539153233250544872134923934\"\n \t\"9365234375e-19\",\n \tfalse,\n-\t0x2.000004p-64, false,\n-\t0x2.000008p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000008p-64, false,\n-\ttrue,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\ttrue,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\ttrue,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\ttrue,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\ttrue,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false),\n+\t0x2.000004p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\ttrue,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\ttrue,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\ttrue,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\ttrue,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\ttrue,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false),\n   TEST (\"1.0842023663559605011233140988563539153233250544872134923934\"\n \t\"936523437501e-19\",\n \tfalse,\n-\t0x2.000004p-64, false,\n-\t0x2.000008p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000008p-64, false,\n-\tfalse,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.0000060000002p-64, false,\n-\tfalse,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.0000060000000004p-64, false,\n-\tfalse,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.0000060000000004p-64, false,\n-\tfalse,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.00000600000000000000000001p-64, false,\n-\tfalse,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.0000060000000000000000000002p-64, false),\n+\t0x2.000004p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\tfalse,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.0000060000002p-64, false, false,\n+\tfalse,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.0000060000000004p-64, false, false,\n+\tfalse,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.0000060000000004p-64, false, false,\n+\tfalse,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.00000600000000000000000001p-64, false, false,\n+\tfalse,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.0000060000000000000000000002p-64, false, false),\n   TEST (\"1.0842024309794458568286011981851579832891729893162846565246\"\n \t\"58203125e-19\",\n \ttrue,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\ttrue,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\ttrue,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\ttrue,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\ttrue,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\ttrue,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false),\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\ttrue,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\ttrue,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\ttrue,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\ttrue,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\ttrue,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false),\n   TEST (\"7.5231638452626400509999138382223723380394595633413601376560\"\n \t\"1092018187046051025390625e-37\",\n \ttrue,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\ttrue,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\ttrue,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\ttrue,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\ttrue,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\ttrue,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1p-120, false),\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\ttrue,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\ttrue,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\ttrue,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\ttrue,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\ttrue,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false),\n   TEST (\"7.5231642936781486349413765338158389908126215730251815381410\"\n \t\"578824437213052434003657253924757242202758789062499e-37\",\n \tfalse,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1.000002p-120, false,\n-\tfalse,\n-\t0x1.000000fffffffp-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000000fffffffp-120, false,\n-\t0x1.000001p-120, false,\n-\tfalse,\n-\t0x1.000000fffffffffep-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000000fffffffffep-120, false,\n-\t0x1.000001p-120, false,\n-\tfalse,\n-\t0x1.000000fffffffffep-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000000fffffffffep-120, false,\n-\t0x1.000001p-120, false,\n-\tfalse,\n-\t0x1.000000ffffffffffffffffffff8p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000000ffffffffffffffffffff8p-120, false,\n-\t0x1.000001p-120, false,\n-\tfalse,\n-\t0x1.000000ffffffffffffffffffffffp-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000000ffffffffffffffffffffffp-120, false,\n-\t0x1.000001p-120, false),\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\tfalse,\n+\t0x1.000000fffffffp-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000000fffffffp-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\tfalse,\n+\t0x1.000000fffffffffep-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000000fffffffffep-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\tfalse,\n+\t0x1.000000fffffffffep-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000000fffffffffep-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\tfalse,\n+\t0x1.000000ffffffffffffffffffff8p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000000ffffffffffffffffffff8p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\tfalse,\n+\t0x1.000000ffffffffffffffffffffffp-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000000ffffffffffffffffffffffp-120, false, false,\n+\t0x1.000001p-120, false, false),\n   TEST (\"7.5231642936781486349413765338158389908126215730251815381410\"\n \t\"5788244372130524340036572539247572422027587890625e-37\",\n \tfalse,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1.000002p-120, false,\n-\ttrue,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\ttrue,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\ttrue,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\ttrue,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\ttrue,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false),\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\ttrue,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\ttrue,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\ttrue,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\ttrue,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\ttrue,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false),\n   TEST (\"7.5231642936781486349413765338158389908126215730251815381410\"\n \t\"578824437213052434003657253924757242202758789062501e-37\",\n \tfalse,\n-\t0x1p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1p-120, false,\n-\t0x1.000002p-120, false,\n-\tfalse,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.0000010000001p-120, false,\n-\tfalse,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.0000010000000002p-120, false,\n-\tfalse,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.0000010000000002p-120, false,\n-\tfalse,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001000000000000000000008p-120, false,\n-\tfalse,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.0000010000000000000000000001p-120, false),\n+\t0x1p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\tfalse,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.0000010000001p-120, false, false,\n+\tfalse,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.0000010000000002p-120, false, false,\n+\tfalse,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.0000010000000002p-120, false, false,\n+\tfalse,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001000000000000000000008p-120, false, false,\n+\tfalse,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.0000010000000000000000000001p-120, false, false),\n   TEST (\"7.5231647420936572188828392294093056435857835827090029386261\"\n \t\"048447055721499765468252007849514484405517578125e-37\",\n \ttrue,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\ttrue,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\ttrue,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\ttrue,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\ttrue,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\ttrue,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false),\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\ttrue,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\ttrue,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\ttrue,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\ttrue,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\ttrue,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false),\n   TEST (\"7.5231651905091658028243019250027722963589455923928243391111\"\n \t\"518069674229947096932846761774271726608276367187499e-37\",\n \tfalse,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000004p-120, false,\n-\tfalse,\n-\t0x1.000002fffffffp-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000002fffffffp-120, false,\n-\t0x1.000003p-120, false,\n-\tfalse,\n-\t0x1.000002fffffffffep-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000002fffffffffep-120, false,\n-\t0x1.000003p-120, false,\n-\tfalse,\n-\t0x1.000002fffffffffep-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000002fffffffffep-120, false,\n-\t0x1.000003p-120, false,\n-\tfalse,\n-\t0x1.000002ffffffffffffffffffff8p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000002ffffffffffffffffffff8p-120, false,\n-\t0x1.000003p-120, false,\n-\tfalse,\n-\t0x1.000002ffffffffffffffffffffffp-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000002ffffffffffffffffffffffp-120, false,\n-\t0x1.000003p-120, false),\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\tfalse,\n+\t0x1.000002fffffffp-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000002fffffffp-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\tfalse,\n+\t0x1.000002fffffffffep-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000002fffffffffep-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\tfalse,\n+\t0x1.000002fffffffffep-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000002fffffffffep-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\tfalse,\n+\t0x1.000002ffffffffffffffffffff8p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000002ffffffffffffffffffff8p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\tfalse,\n+\t0x1.000002ffffffffffffffffffffffp-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000002ffffffffffffffffffffffp-120, false, false,\n+\t0x1.000003p-120, false, false),\n   TEST (\"7.5231651905091658028243019250027722963589455923928243391111\"\n \t\"5180696742299470969328467617742717266082763671875e-37\",\n \tfalse,\n-\t0x1.000002p-120, false,\n-\t0x1.000004p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000004p-120, false,\n-\ttrue,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\ttrue,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\ttrue,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\ttrue,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\ttrue,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false),\n+\t0x1.000002p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\ttrue,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\ttrue,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\ttrue,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\ttrue,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\ttrue,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false),\n   TEST (\"7.5231651905091658028243019250027722963589455923928243391111\"\n \t\"518069674229947096932846761774271726608276367187501e-37\",\n \tfalse,\n-\t0x1.000002p-120, false,\n-\t0x1.000004p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000004p-120, false,\n-\tfalse,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.0000030000001p-120, false,\n-\tfalse,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.0000030000000002p-120, false,\n-\tfalse,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.0000030000000002p-120, false,\n-\tfalse,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003000000000000000000008p-120, false,\n-\tfalse,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.0000030000000000000000000001p-120, false),\n+\t0x1.000002p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\tfalse,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.0000030000001p-120, false, false,\n+\tfalse,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.0000030000000002p-120, false, false,\n+\tfalse,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.0000030000000002p-120, false, false,\n+\tfalse,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003000000000000000000008p-120, false, false,\n+\tfalse,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.0000030000000000000000000001p-120, false, false),\n   TEST (\"7.5231656389246743867657646205962389491321076020766457395961\"\n \t\"98769229273839442839744151569902896881103515625e-37\",\n \ttrue,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\ttrue,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\ttrue,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\ttrue,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\ttrue,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\ttrue,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false),\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\ttrue,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\ttrue,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\ttrue,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\ttrue,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\ttrue,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false),\n   TEST (\"340282356779733661637539395458142568447.999\",\n \tfalse,\n-\t0xf.fffffp+124, false,\n-\t0xf.fffffp+124, false,\n-\t0xf.fffffp+124, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffff7ffffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff7ffffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\tfalse,\n-\t0xf.fffff7fffffffffp+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff7fffffffffp+124, false,\n-\t0xf.fffff8p+124, false,\n-\tfalse,\n-\t0xf.fffff7fffffffffp+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff7fffffffffp+124, false,\n-\t0xf.fffff8p+124, false,\n-\tfalse,\n-\t0xf.fffff7fffffffffffffffffffcp+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff7fffffffffffffffffffcp+124, false,\n-\t0xf.fffff8p+124, false,\n-\tfalse,\n-\t0xf.fffff7fffffffffffffffffffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff7fffffffffffffffffffff8p+124, false,\n-\t0xf.fffff8p+124, false),\n+\t0xf.fffffp+124, false, false,\n+\t0xf.fffffp+124, false, false,\n+\t0xf.fffffp+124, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffff7ffffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff7ffffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\tfalse,\n+\t0xf.fffff7fffffffffp+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff7fffffffffp+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\tfalse,\n+\t0xf.fffff7fffffffffp+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff7fffffffffp+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\tfalse,\n+\t0xf.fffff7fffffffffffffffffffcp+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff7fffffffffffffffffffcp+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\tfalse,\n+\t0xf.fffff7fffffffffffffffffffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff7fffffffffffffffffffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false),\n   TEST (\"340282356779733661637539395458142568448\",\n \tfalse,\n-\t0xf.fffffp+124, false,\n-\tINF, true,\n-\t0xf.fffffp+124, false,\n-\tINF, true,\n-\ttrue,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\ttrue,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\ttrue,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\ttrue,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\ttrue,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false),\n+\t0xf.fffffp+124, false, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, false, false,\n+\tINF, true, false,\n+\ttrue,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\ttrue,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\ttrue,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\ttrue,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\ttrue,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false),\n   TEST (\"340282356779733661637539395458142568448.001\",\n \tfalse,\n-\t0xf.fffffp+124, false,\n-\tINF, true,\n-\t0xf.fffffp+124, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff80000008p+124, false,\n-\tfalse,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8000000001p+124, false,\n-\tfalse,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8000000001p+124, false,\n-\tfalse,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff800000000000000000004p+124, false,\n-\tfalse,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff80000000000000000000008p+124, false),\n+\t0xf.fffffp+124, false, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff80000008p+124, false, false,\n+\tfalse,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8000000001p+124, false, false,\n+\tfalse,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8000000001p+124, false, false,\n+\tfalse,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff800000000000000000004p+124, false, false,\n+\tfalse,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff80000000000000000000008p+124, false, false),\n   TEST (\"-340282356779733661637539395458142568447.999\",\n \tfalse,\n-\t-INF, true,\n-\t-0xf.fffffp+124, false,\n-\t-0xf.fffffp+124, false,\n-\t-0xf.fffffp+124, false,\n-\tfalse,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff7ffffff8p+124, false,\n-\t-0xf.fffff7ffffff8p+124, false,\n-\tfalse,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff7fffffffffp+124, false,\n-\t-0xf.fffff7fffffffffp+124, false,\n-\tfalse,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff7fffffffffp+124, false,\n-\t-0xf.fffff7fffffffffp+124, false,\n-\tfalse,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff7fffffffffffffffffffcp+124, false,\n-\t-0xf.fffff7fffffffffffffffffffcp+124, false,\n-\tfalse,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff7fffffffffffffffffffff8p+124, false,\n-\t-0xf.fffff7fffffffffffffffffffff8p+124, false),\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, false, false,\n+\t-0xf.fffffp+124, false, false,\n+\t-0xf.fffffp+124, false, false,\n+\tfalse,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff7ffffff8p+124, false, false,\n+\t-0xf.fffff7ffffff8p+124, false, false,\n+\tfalse,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff7fffffffffp+124, false, false,\n+\t-0xf.fffff7fffffffffp+124, false, false,\n+\tfalse,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff7fffffffffp+124, false, false,\n+\t-0xf.fffff7fffffffffp+124, false, false,\n+\tfalse,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff7fffffffffffffffffffcp+124, false, false,\n+\t-0xf.fffff7fffffffffffffffffffcp+124, false, false,\n+\tfalse,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff7fffffffffffffffffffff8p+124, false, false,\n+\t-0xf.fffff7fffffffffffffffffffff8p+124, false, false),\n   TEST (\"-340282356779733661637539395458142568448\",\n \tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffp+124, false,\n-\t-0xf.fffffp+124, false,\n-\ttrue,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\ttrue,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\ttrue,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\ttrue,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\ttrue,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false),\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, false, false,\n+\t-0xf.fffffp+124, false, false,\n+\ttrue,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\ttrue,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\ttrue,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\ttrue,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\ttrue,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false),\n   TEST (\"-340282356779733661637539395458142568448.001\",\n \tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffp+124, false,\n-\t-0xf.fffffp+124, false,\n-\tfalse,\n-\t-0xf.fffff80000008p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\tfalse,\n-\t-0xf.fffff8000000001p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\tfalse,\n-\t-0xf.fffff8000000001p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\tfalse,\n-\t-0xf.fffff800000000000000000004p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\tfalse,\n-\t-0xf.fffff80000000000000000000008p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false),\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, false, false,\n+\t-0xf.fffffp+124, false, false,\n+\tfalse,\n+\t-0xf.fffff80000008p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\tfalse,\n+\t-0xf.fffff8000000001p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\tfalse,\n+\t-0xf.fffff8000000001p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\tfalse,\n+\t-0xf.fffff800000000000000000004p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\tfalse,\n+\t-0xf.fffff80000000000000000000008p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false),\n   TEST (\"179769313486231580793728971405303415079934132710037826936173\"\n \t\"778980444968292764750946649017977587207096330286416692887910\"\n \t\"946555547851940402630657488671505820681908902000708383676273\"\n@@ -1855,35 +1855,35 @@ static const struct test tests[] = {\n \t\"936475292719074168444365510704342711559699508093042880177904\"\n \t\"174497791.999\",\n \tfalse,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffff8p+1020, false,\n-\t0xf.ffffffffffff8p+1020, false,\n-\t0xf.ffffffffffff8p+1020, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffffbffp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffbffp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\tfalse,\n-\t0xf.ffffffffffffbffp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffbffp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\tfalse,\n-\t0xf.ffffffffffffbffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, true,\n-\t0xf.ffffffffffffbffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, true,\n-\tfalse,\n-\t0xf.ffffffffffffbffffffffffffff8p+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffbffffffffffffff8p+1020, false,\n-\t0xf.ffffffffffffcp+1020, false),\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffff8p+1020, false, false,\n+\t0xf.ffffffffffff8p+1020, false, false,\n+\t0xf.ffffffffffff8p+1020, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffffbffp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffbffp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\tfalse,\n+\t0xf.ffffffffffffbffp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffbffp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\tfalse,\n+\t0xf.ffffffffffffbffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, true, false,\n+\t0xf.ffffffffffffbffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, true, false,\n+\tfalse,\n+\t0xf.ffffffffffffbffffffffffffff8p+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffbffffffffffffff8p+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false),\n   TEST (\"179769313486231580793728971405303415079934132710037826936173\"\n \t\"778980444968292764750946649017977587207096330286416692887910\"\n \t\"946555547851940402630657488671505820681908902000708383676273\"\n@@ -1891,35 +1891,35 @@ static const struct test tests[] = {\n \t\"936475292719074168444365510704342711559699508093042880177904\"\n \t\"174497792\",\n \tfalse,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffff8p+1020, false,\n-\tINF, true,\n-\t0xf.ffffffffffff8p+1020, false,\n-\tINF, true,\n-\ttrue,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\ttrue,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\tfalse,\n-\t0xf.ffffffffffffcp+1020, true,\n-\t0xf.ffffffffffffcp+1020, true,\n-\t0xf.ffffffffffffcp+1020, true,\n-\t0xf.ffffffffffffcp+1020, true,\n-\ttrue,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false),\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffff8p+1020, false, false,\n+\tINF, true, false,\n+\t0xf.ffffffffffff8p+1020, false, false,\n+\tINF, true, false,\n+\ttrue,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\ttrue,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\tfalse,\n+\t0xf.ffffffffffffcp+1020, true, false,\n+\t0xf.ffffffffffffcp+1020, true, false,\n+\t0xf.ffffffffffffcp+1020, true, false,\n+\t0xf.ffffffffffffcp+1020, true, false,\n+\ttrue,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false),\n   TEST (\"179769313486231580793728971405303415079934132710037826936173\"\n \t\"778980444968292764750946649017977587207096330286416692887910\"\n \t\"946555547851940402630657488671505820681908902000708383676273\"\n@@ -1927,35 +1927,35 @@ static const struct test tests[] = {\n \t\"936475292719074168444365510704342711559699508093042880177904\"\n \t\"174497792.001\",\n \tfalse,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffff8p+1020, false,\n-\tINF, true,\n-\t0xf.ffffffffffff8p+1020, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffc01p+1020, false,\n-\tfalse,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffc01p+1020, false,\n-\tfalse,\n-\t0xf.ffffffffffffcp+1020, true,\n-\t0xf.ffffffffffffcp+1020, true,\n-\t0xf.ffffffffffffcp+1020, true,\n-\t0xf.ffffffffffffc0000000000004p+1020, true,\n-\tfalse,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffc000000000000008p+1020, false),\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffff8p+1020, false, false,\n+\tINF, true, false,\n+\t0xf.ffffffffffff8p+1020, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffc01p+1020, false, false,\n+\tfalse,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffc01p+1020, false, false,\n+\tfalse,\n+\t0xf.ffffffffffffcp+1020, true, false,\n+\t0xf.ffffffffffffcp+1020, true, false,\n+\t0xf.ffffffffffffcp+1020, true, false,\n+\t0xf.ffffffffffffc0000000000004p+1020, true, false,\n+\tfalse,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffc000000000000008p+1020, false, false),\n   TEST (\"-17976931348623158079372897140530341507993413271003782693617\"\n \t\"377898044496829276475094664901797758720709633028641669288791\"\n \t\"094655554785194040263065748867150582068190890200070838367627\"\n@@ -1963,35 +1963,35 @@ static const struct test tests[] = {\n \t\"493647529271907416844436551070434271155969950809304288017790\"\n \t\"4174497791.999\",\n \tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffp+124, true,\n-\t-0xf.fffffp+124, true,\n-\tfalse,\n-\t-INF, true,\n-\t-0xf.ffffffffffff8p+1020, false,\n-\t-0xf.ffffffffffff8p+1020, false,\n-\t-0xf.ffffffffffff8p+1020, false,\n-\tfalse,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffbffp+1020, false,\n-\t-0xf.ffffffffffffbffp+1020, false,\n-\tfalse,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffbffp+1020, false,\n-\t-0xf.ffffffffffffbffp+1020, false,\n-\tfalse,\n-\t-0xf.ffffffffffffcp+1020, true,\n-\t-0xf.ffffffffffffcp+1020, true,\n-\t-0xf.ffffffffffffbffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffbffffffffffffcp+1020, false,\n-\tfalse,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffbffffffffffffff8p+1020, false,\n-\t-0xf.ffffffffffffbffffffffffffff8p+1020, false),\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-0xf.ffffffffffff8p+1020, false, false,\n+\t-0xf.ffffffffffff8p+1020, false, false,\n+\t-0xf.ffffffffffff8p+1020, false, false,\n+\tfalse,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffbffp+1020, false, false,\n+\t-0xf.ffffffffffffbffp+1020, false, false,\n+\tfalse,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffbffp+1020, false, false,\n+\t-0xf.ffffffffffffbffp+1020, false, false,\n+\tfalse,\n+\t-0xf.ffffffffffffcp+1020, true, false,\n+\t-0xf.ffffffffffffcp+1020, true, false,\n+\t-0xf.ffffffffffffbffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffbffffffffffffcp+1020, false, false,\n+\tfalse,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffbffffffffffffff8p+1020, false, false,\n+\t-0xf.ffffffffffffbffffffffffffff8p+1020, false, false),\n   TEST (\"-17976931348623158079372897140530341507993413271003782693617\"\n \t\"377898044496829276475094664901797758720709633028641669288791\"\n \t\"094655554785194040263065748867150582068190890200070838367627\"\n@@ -1999,35 +1999,35 @@ static const struct test tests[] = {\n \t\"493647529271907416844436551070434271155969950809304288017790\"\n \t\"4174497792\",\n \tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffp+124, true,\n-\t-0xf.fffffp+124, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.ffffffffffff8p+1020, false,\n-\t-0xf.ffffffffffff8p+1020, false,\n-\ttrue,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\ttrue,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\tfalse,\n-\t-0xf.ffffffffffffcp+1020, true,\n-\t-0xf.ffffffffffffcp+1020, true,\n-\t-0xf.ffffffffffffcp+1020, true,\n-\t-0xf.ffffffffffffcp+1020, true,\n-\ttrue,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false),\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.ffffffffffff8p+1020, false, false,\n+\t-0xf.ffffffffffff8p+1020, false, false,\n+\ttrue,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\ttrue,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\tfalse,\n+\t-0xf.ffffffffffffcp+1020, true, false,\n+\t-0xf.ffffffffffffcp+1020, true, false,\n+\t-0xf.ffffffffffffcp+1020, true, false,\n+\t-0xf.ffffffffffffcp+1020, true, false,\n+\ttrue,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false),\n   TEST (\"-17976931348623158079372897140530341507993413271003782693617\"\n \t\"377898044496829276475094664901797758720709633028641669288791\"\n \t\"094655554785194040263065748867150582068190890200070838367627\"\n@@ -2035,35 +2035,35 @@ static const struct test tests[] = {\n \t\"493647529271907416844436551070434271155969950809304288017790\"\n \t\"4174497792.001\",\n \tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffp+124, true,\n-\t-0xf.fffffp+124, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.ffffffffffff8p+1020, false,\n-\t-0xf.ffffffffffff8p+1020, false,\n-\tfalse,\n-\t-0xf.ffffffffffffc01p+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\tfalse,\n-\t-0xf.ffffffffffffc01p+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\tfalse,\n-\t-0xf.ffffffffffffc0000000000004p+1020, true,\n-\t-0xf.ffffffffffffcp+1020, true,\n-\t-0xf.ffffffffffffcp+1020, true,\n-\t-0xf.ffffffffffffcp+1020, true,\n-\tfalse,\n-\t-0xf.ffffffffffffc000000000000008p+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false),\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.ffffffffffff8p+1020, false, false,\n+\t-0xf.ffffffffffff8p+1020, false, false,\n+\tfalse,\n+\t-0xf.ffffffffffffc01p+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\tfalse,\n+\t-0xf.ffffffffffffc01p+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\tfalse,\n+\t-0xf.ffffffffffffc0000000000004p+1020, true, false,\n+\t-0xf.ffffffffffffcp+1020, true, false,\n+\t-0xf.ffffffffffffcp+1020, true, false,\n+\t-0xf.ffffffffffffcp+1020, true, false,\n+\tfalse,\n+\t-0xf.ffffffffffffc000000000000008p+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false),\n   TEST (\"118973149535723176505351158982948866796625400469556721895649\"\n \t\"927756249918185172720476044944290457046138433056764616744328\"\n \t\"666255526748948793023632513609765434237723241753648908036202\"\n@@ -2148,35 +2148,35 @@ static const struct test tests[] = {\n \t\"578031503869424406179027994752890226443351619365453243328968\"\n \t\"8740976918527.999\",\n \tfalse,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+16380, false,\n-\t0xf.fffffffffffffffp+16380, false,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+16380, false,\n-\t0xf.fffffffffffffffp+16380, false,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffff7fffffffffff8p+16380, false,\n-\t0xf.fffffffffffffff8p+16380, false,\n-\t0xf.fffffffffffffff7fffffffffff8p+16380, false,\n-\t0xf.fffffffffffffff8p+16380, false),\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffff7fffffffffff8p+16380, false, false,\n+\t0xf.fffffffffffffff8p+16380, false, false,\n+\t0xf.fffffffffffffff7fffffffffff8p+16380, false, false,\n+\t0xf.fffffffffffffff8p+16380, false, false),\n   TEST (\"118973149535723176505351158982948866796625400469556721895649\"\n \t\"927756249918185172720476044944290457046138433056764616744328\"\n \t\"666255526748948793023632513609765434237723241753648908036202\"\n@@ -2261,35 +2261,35 @@ static const struct test tests[] = {\n \t\"578031503869424406179027994752890226443351619365453243328968\"\n \t\"8740976918528\",\n \tfalse,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\ttrue,\n-\t0xf.fffffffffffffff8p+16380, false,\n-\t0xf.fffffffffffffff8p+16380, false,\n-\t0xf.fffffffffffffff8p+16380, false,\n-\t0xf.fffffffffffffff8p+16380, false),\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\ttrue,\n+\t0xf.fffffffffffffff8p+16380, false, false,\n+\t0xf.fffffffffffffff8p+16380, false, false,\n+\t0xf.fffffffffffffff8p+16380, false, false,\n+\t0xf.fffffffffffffff8p+16380, false, false),\n   TEST (\"118973149535723176505351158982948866796625400469556721895649\"\n \t\"927756249918185172720476044944290457046138433056764616744328\"\n \t\"666255526748948793023632513609765434237723241753648908036202\"\n@@ -2374,35 +2374,35 @@ static const struct test tests[] = {\n \t\"578031503869424406179027994752890226443351619365453243328968\"\n \t\"8740976918528.001\",\n \tfalse,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffff8p+16380, false,\n-\t0xf.fffffffffffffff8p+16380, false,\n-\t0xf.fffffffffffffff8p+16380, false,\n-\t0xf.fffffffffffffff8000000000008p+16380, false),\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffff8p+16380, false, false,\n+\t0xf.fffffffffffffff8p+16380, false, false,\n+\t0xf.fffffffffffffff8p+16380, false, false,\n+\t0xf.fffffffffffffff8000000000008p+16380, false, false),\n   TEST (\"-11897314953572317650535115898294886679662540046955672189564\"\n \t\"992775624991818517272047604494429045704613843305676461674432\"\n \t\"866625552674894879302363251360976543423772324175364890803620\"\n@@ -2487,35 +2487,35 @@ static const struct test tests[] = {\n \t\"557803150386942440617902799475289022644335161936545324332896\"\n \t\"88740976918527.999\",\n \tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffp+124, true,\n-\t-0xf.fffffp+124, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.ffffffffffff8p+1020, true,\n-\t-0xf.ffffffffffff8p+1020, true,\n-\tfalse,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\tfalse,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tfalse,\n-\t-0xf.fffffffffffffff8p+16380, false,\n-\t-0xf.fffffffffffffff8p+16380, false,\n-\t-0xf.fffffffffffffff7fffffffffff8p+16380, false,\n-\t-0xf.fffffffffffffff7fffffffffff8p+16380, false),\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.ffffffffffff8p+1020, true, false,\n+\t-0xf.ffffffffffff8p+1020, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tfalse,\n+\t-0xf.fffffffffffffff8p+16380, false, false,\n+\t-0xf.fffffffffffffff8p+16380, false, false,\n+\t-0xf.fffffffffffffff7fffffffffff8p+16380, false, false,\n+\t-0xf.fffffffffffffff7fffffffffff8p+16380, false, false),\n   TEST (\"-11897314953572317650535115898294886679662540046955672189564\"\n \t\"992775624991818517272047604494429045704613843305676461674432\"\n \t\"866625552674894879302363251360976543423772324175364890803620\"\n@@ -2600,35 +2600,35 @@ static const struct test tests[] = {\n \t\"557803150386942440617902799475289022644335161936545324332896\"\n \t\"88740976918528\",\n \tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffp+124, true,\n-\t-0xf.fffffp+124, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.ffffffffffff8p+1020, true,\n-\t-0xf.ffffffffffff8p+1020, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\ttrue,\n-\t-0xf.fffffffffffffff8p+16380, false,\n-\t-0xf.fffffffffffffff8p+16380, false,\n-\t-0xf.fffffffffffffff8p+16380, false,\n-\t-0xf.fffffffffffffff8p+16380, false),\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.ffffffffffff8p+1020, true, false,\n+\t-0xf.ffffffffffff8p+1020, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\ttrue,\n+\t-0xf.fffffffffffffff8p+16380, false, false,\n+\t-0xf.fffffffffffffff8p+16380, false, false,\n+\t-0xf.fffffffffffffff8p+16380, false, false,\n+\t-0xf.fffffffffffffff8p+16380, false, false),\n   TEST (\"-11897314953572317650535115898294886679662540046955672189564\"\n \t\"992775624991818517272047604494429045704613843305676461674432\"\n \t\"866625552674894879302363251360976543423772324175364890803620\"\n@@ -2713,35 +2713,35 @@ static const struct test tests[] = {\n \t\"557803150386942440617902799475289022644335161936545324332896\"\n \t\"88740976918528.001\",\n \tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffp+124, true,\n-\t-0xf.fffffp+124, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.ffffffffffff8p+1020, true,\n-\t-0xf.ffffffffffff8p+1020, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tfalse,\n-\t-0xf.fffffffffffffff8000000000008p+16380, false,\n-\t-0xf.fffffffffffffff8p+16380, false,\n-\t-0xf.fffffffffffffff8p+16380, false,\n-\t-0xf.fffffffffffffff8p+16380, false),\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.ffffffffffff8p+1020, true, false,\n+\t-0xf.ffffffffffff8p+1020, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tfalse,\n+\t-0xf.fffffffffffffff8000000000008p+16380, false, false,\n+\t-0xf.fffffffffffffff8p+16380, false, false,\n+\t-0xf.fffffffffffffff8p+16380, false, false,\n+\t-0xf.fffffffffffffff8p+16380, false, false),\n   TEST (\"118973149535723176508575932662800707347995686986910214150118\"\n \t\"685272271246896789803961473130416053705672050873552479421805\"\n \t\"932646640744124594447361172514341324846716679654551308018400\"\n@@ -2826,35 +2826,35 @@ static const struct test tests[] = {\n \t\"972233447491583165728635513802591543441145939539353470970452\"\n \t\"5536550715391.999\",\n \tfalse,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffff8p+16380, false,\n-\t0xf.fffffffffffffffffffffffffff8p+16380, false,\n-\t0xf.fffffffffffffffffffffffffff8p+16380, false,\n-\tINF, true),\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffff8p+16380, false, false,\n+\t0xf.fffffffffffffffffffffffffff8p+16380, false, false,\n+\t0xf.fffffffffffffffffffffffffff8p+16380, false, false,\n+\tINF, true, false),\n   TEST (\"118973149535723176508575932662800707347995686986910214150118\"\n \t\"685272271246896789803961473130416053705672050873552479421805\"\n \t\"932646640744124594447361172514341324846716679654551308018400\"\n@@ -2939,35 +2939,35 @@ static const struct test tests[] = {\n \t\"972233447491583165728635513802591543441145939539353470970452\"\n \t\"5536550715392\",\n \tfalse,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffff8p+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffffffffffffff8p+16380, false,\n-\tINF, true),\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffff8p+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffffffffffffff8p+16380, false, false,\n+\tINF, true, false),\n   TEST (\"118973149535723176508575932662800707347995686986910214150118\"\n \t\"685272271246896789803961473130416053705672050873552479421805\"\n \t\"932646640744124594447361172514341324846716679654551308018400\"\n@@ -3052,35 +3052,35 @@ static const struct test tests[] = {\n \t\"972233447491583165728635513802591543441145939539353470970452\"\n \t\"5536550715392.001\",\n \tfalse,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffff8p+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffffffffffffff8p+16380, false,\n-\tINF, true),\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffff8p+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffffffffffffff8p+16380, false, false,\n+\tINF, true, false),\n   TEST (\"-11897314953572317650857593266280070734799568698691021415011\"\n \t\"868527227124689678980396147313041605370567205087355247942180\"\n \t\"593264664074412459444736117251434132484671667965455130801840\"\n@@ -3165,35 +3165,35 @@ static const struct test tests[] = {\n \t\"097223344749158316572863551380259154344114593953935347097045\"\n \t\"25536550715391.999\",\n \tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffp+124, true,\n-\t-0xf.fffffp+124, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.ffffffffffff8p+1020, true,\n-\t-0xf.ffffffffffff8p+1020, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tfalse,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffffffffffffff8p+16380, false,\n-\t-0xf.fffffffffffffffffffffffffff8p+16380, false,\n-\t-0xf.fffffffffffffffffffffffffff8p+16380, false),\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.ffffffffffff8p+1020, true, false,\n+\t-0xf.ffffffffffff8p+1020, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffffffffffffff8p+16380, false, false,\n+\t-0xf.fffffffffffffffffffffffffff8p+16380, false, false,\n+\t-0xf.fffffffffffffffffffffffffff8p+16380, false, false),\n   TEST (\"-11897314953572317650857593266280070734799568698691021415011\"\n \t\"868527227124689678980396147313041605370567205087355247942180\"\n \t\"593264664074412459444736117251434132484671667965455130801840\"\n@@ -3278,35 +3278,35 @@ static const struct test tests[] = {\n \t\"097223344749158316572863551380259154344114593953935347097045\"\n \t\"25536550715392\",\n \tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffp+124, true,\n-\t-0xf.fffffp+124, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.ffffffffffff8p+1020, true,\n-\t-0xf.ffffffffffff8p+1020, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffffffffffffff8p+16380, false,\n-\t-0xf.fffffffffffffffffffffffffff8p+16380, false),\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.ffffffffffff8p+1020, true, false,\n+\t-0xf.ffffffffffff8p+1020, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffffffffffffff8p+16380, false, false,\n+\t-0xf.fffffffffffffffffffffffffff8p+16380, false, false),\n   TEST (\"-11897314953572317650857593266280070734799568698691021415011\"\n \t\"868527227124689678980396147313041605370567205087355247942180\"\n \t\"593264664074412459444736117251434132484671667965455130801840\"\n@@ -3391,419 +3391,419 @@ static const struct test tests[] = {\n \t\"097223344749158316572863551380259154344114593953935347097045\"\n \t\"25536550715392.001\",\n \tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffp+124, true,\n-\t-0xf.fffffp+124, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.ffffffffffff8p+1020, true,\n-\t-0xf.ffffffffffff8p+1020, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffffffffffffff8p+16380, false,\n-\t-0xf.fffffffffffffffffffffffffff8p+16380, false),\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.ffffffffffff8p+1020, true, false,\n+\t-0xf.ffffffffffff8p+1020, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffffffffffffff8p+16380, false, false,\n+\t-0xf.fffffffffffffffffffffffffff8p+16380, false, false),\n   TEST (\"2.1019476964872256063855943749348741969203929128147736576356\"\n \t\"0242583468662402879090222995728254318237304687499e-45\",\n \tfalse,\n-\t0x8p-152, false,\n-\t0x8p-152, false,\n-\t0x8p-152, false,\n-\t0x1p-148, false,\n-\tfalse,\n-\t0xb.ffffffffffff8p-152, false,\n-\t0xcp-152, false,\n-\t0xb.ffffffffffff8p-152, false,\n-\t0xcp-152, false,\n-\tfalse,\n-\t0xb.fffffffffffffffp-152, false,\n-\t0xcp-152, false,\n-\t0xb.fffffffffffffffp-152, false,\n-\t0xcp-152, false,\n-\tfalse,\n-\t0xb.fffffffffffffffp-152, false,\n-\t0xcp-152, false,\n-\t0xb.fffffffffffffffp-152, false,\n-\t0xcp-152, false,\n-\tfalse,\n-\t0xb.fffffffffffffffffffffffffcp-152, false,\n-\t0xcp-152, false,\n-\t0xb.fffffffffffffffffffffffffcp-152, false,\n-\t0xcp-152, false,\n-\tfalse,\n-\t0xb.fffffffffffffffffffffffffff8p-152, false,\n-\t0xcp-152, false,\n-\t0xb.fffffffffffffffffffffffffff8p-152, false,\n-\t0xcp-152, false),\n+\t0x8p-152, false, true,\n+\t0x8p-152, false, true,\n+\t0x8p-152, false, true,\n+\t0x1p-148, false, true,\n+\tfalse,\n+\t0xb.ffffffffffff8p-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xb.ffffffffffff8p-152, false, false,\n+\t0xcp-152, false, false,\n+\tfalse,\n+\t0xb.fffffffffffffffp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xb.fffffffffffffffp-152, false, false,\n+\t0xcp-152, false, false,\n+\tfalse,\n+\t0xb.fffffffffffffffp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xb.fffffffffffffffp-152, false, false,\n+\t0xcp-152, false, false,\n+\tfalse,\n+\t0xb.fffffffffffffffffffffffffcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xb.fffffffffffffffffffffffffcp-152, false, false,\n+\t0xcp-152, false, false,\n+\tfalse,\n+\t0xb.fffffffffffffffffffffffffff8p-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xb.fffffffffffffffffffffffffff8p-152, false, false,\n+\t0xcp-152, false, false),\n   TEST (\"2.1019476964872256063855943749348741969203929128147736576356\"\n \t\"02425834686624028790902229957282543182373046875e-45\",\n \tfalse,\n-\t0x8p-152, false,\n-\t0x1p-148, false,\n-\t0x8p-152, false,\n-\t0x1p-148, false,\n-\ttrue,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\ttrue,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\ttrue,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\ttrue,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\ttrue,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false),\n+\t0x8p-152, false, true,\n+\t0x1p-148, false, true,\n+\t0x8p-152, false, true,\n+\t0x1p-148, false, true,\n+\ttrue,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\ttrue,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\ttrue,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\ttrue,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\ttrue,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false),\n   TEST (\"2.1019476964872256063855943749348741969203929128147736576356\"\n \t\"0242583468662402879090222995728254318237304687501e-45\",\n \tfalse,\n-\t0x8p-152, false,\n-\t0x1p-148, false,\n-\t0x8p-152, false,\n-\t0x1p-148, false,\n-\tfalse,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xc.0000000000008p-152, false,\n-\tfalse,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xc.000000000000001p-152, false,\n-\tfalse,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xc.000000000000001p-152, false,\n-\tfalse,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xc.00000000000000000000000004p-152, false,\n-\tfalse,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xc.0000000000000000000000000008p-152, false),\n+\t0x8p-152, false, true,\n+\t0x1p-148, false, true,\n+\t0x8p-152, false, true,\n+\t0x1p-148, false, true,\n+\tfalse,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xc.0000000000008p-152, false, false,\n+\tfalse,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xc.000000000000001p-152, false, false,\n+\tfalse,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xc.000000000000001p-152, false, false,\n+\tfalse,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xc.00000000000000000000000004p-152, false, false,\n+\tfalse,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xc.0000000000000000000000000008p-152, false, false),\n   TEST (\"-2.101947696487225606385594374934874196920392912814773657635\"\n \t\"60242583468662402879090222995728254318237304687499e-45\",\n \tfalse,\n-\t-0x1p-148, false,\n-\t-0x8p-152, false,\n-\t-0x8p-152, false,\n-\t-0x8p-152, false,\n-\tfalse,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xb.ffffffffffff8p-152, false,\n-\t-0xb.ffffffffffff8p-152, false,\n-\tfalse,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xb.fffffffffffffffp-152, false,\n-\t-0xb.fffffffffffffffp-152, false,\n-\tfalse,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xb.fffffffffffffffp-152, false,\n-\t-0xb.fffffffffffffffp-152, false,\n-\tfalse,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xb.fffffffffffffffffffffffffcp-152, false,\n-\t-0xb.fffffffffffffffffffffffffcp-152, false,\n-\tfalse,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xb.fffffffffffffffffffffffffff8p-152, false,\n-\t-0xb.fffffffffffffffffffffffffff8p-152, false),\n+\t-0x1p-148, false, true,\n+\t-0x8p-152, false, true,\n+\t-0x8p-152, false, true,\n+\t-0x8p-152, false, true,\n+\tfalse,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xb.ffffffffffff8p-152, false, false,\n+\t-0xb.ffffffffffff8p-152, false, false,\n+\tfalse,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xb.fffffffffffffffp-152, false, false,\n+\t-0xb.fffffffffffffffp-152, false, false,\n+\tfalse,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xb.fffffffffffffffp-152, false, false,\n+\t-0xb.fffffffffffffffp-152, false, false,\n+\tfalse,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xb.fffffffffffffffffffffffffcp-152, false, false,\n+\t-0xb.fffffffffffffffffffffffffcp-152, false, false,\n+\tfalse,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xb.fffffffffffffffffffffffffff8p-152, false, false,\n+\t-0xb.fffffffffffffffffffffffffff8p-152, false, false),\n   TEST (\"-2.101947696487225606385594374934874196920392912814773657635\"\n \t\"602425834686624028790902229957282543182373046875e-45\",\n \tfalse,\n-\t-0x1p-148, false,\n-\t-0x1p-148, false,\n-\t-0x8p-152, false,\n-\t-0x8p-152, false,\n-\ttrue,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\ttrue,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\ttrue,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\ttrue,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\ttrue,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false),\n+\t-0x1p-148, false, true,\n+\t-0x1p-148, false, true,\n+\t-0x8p-152, false, true,\n+\t-0x8p-152, false, true,\n+\ttrue,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\ttrue,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\ttrue,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\ttrue,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\ttrue,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false),\n   TEST (\"-2.101947696487225606385594374934874196920392912814773657635\"\n \t\"60242583468662402879090222995728254318237304687501e-45\",\n \tfalse,\n-\t-0x1p-148, false,\n-\t-0x1p-148, false,\n-\t-0x8p-152, false,\n-\t-0x8p-152, false,\n-\tfalse,\n-\t-0xc.0000000000008p-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\tfalse,\n-\t-0xc.000000000000001p-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\tfalse,\n-\t-0xc.000000000000001p-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\tfalse,\n-\t-0xc.00000000000000000000000004p-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\tfalse,\n-\t-0xc.0000000000000000000000000008p-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false),\n+\t-0x1p-148, false, true,\n+\t-0x1p-148, false, true,\n+\t-0x8p-152, false, true,\n+\t-0x8p-152, false, true,\n+\tfalse,\n+\t-0xc.0000000000008p-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\tfalse,\n+\t-0xc.000000000000001p-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\tfalse,\n+\t-0xc.000000000000001p-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\tfalse,\n+\t-0xc.00000000000000000000000004p-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\tfalse,\n+\t-0xc.0000000000000000000000000008p-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false),\n   TEST (\"3.5032461608120426773093239582247903282006548546912894293926\"\n \t\"7070972447770671465150371659547090530395507812499e-45\",\n \tfalse,\n-\t0x1p-148, false,\n-\t0x1p-148, false,\n-\t0x1p-148, false,\n-\t0x1.8p-148, false,\n-\tfalse,\n-\t0x1.3ffffffffffffp-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.3ffffffffffffp-148, false,\n-\t0x1.4p-148, false,\n-\tfalse,\n-\t0x1.3ffffffffffffffep-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.3ffffffffffffffep-148, false,\n-\t0x1.4p-148, false,\n-\tfalse,\n-\t0x1.3ffffffffffffffep-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.3ffffffffffffffep-148, false,\n-\t0x1.4p-148, false,\n-\tfalse,\n-\t0x1.3fffffffffffffffffffffffff8p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.3fffffffffffffffffffffffff8p-148, false,\n-\t0x1.4p-148, false,\n-\tfalse,\n-\t0x1.3fffffffffffffffffffffffffffp-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.3fffffffffffffffffffffffffffp-148, false,\n-\t0x1.4p-148, false),\n+\t0x1p-148, false, true,\n+\t0x1p-148, false, true,\n+\t0x1p-148, false, true,\n+\t0x1.8p-148, false, true,\n+\tfalse,\n+\t0x1.3ffffffffffffp-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.3ffffffffffffp-148, false, false,\n+\t0x1.4p-148, false, false,\n+\tfalse,\n+\t0x1.3ffffffffffffffep-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.3ffffffffffffffep-148, false, false,\n+\t0x1.4p-148, false, false,\n+\tfalse,\n+\t0x1.3ffffffffffffffep-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.3ffffffffffffffep-148, false, false,\n+\t0x1.4p-148, false, false,\n+\tfalse,\n+\t0x1.3fffffffffffffffffffffffff8p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.3fffffffffffffffffffffffff8p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\tfalse,\n+\t0x1.3fffffffffffffffffffffffffffp-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.3fffffffffffffffffffffffffffp-148, false, false,\n+\t0x1.4p-148, false, false),\n   TEST (\"3.5032461608120426773093239582247903282006548546912894293926\"\n \t\"70709724477706714651503716595470905303955078125e-45\",\n \tfalse,\n-\t0x1p-148, false,\n-\t0x1p-148, false,\n-\t0x1p-148, false,\n-\t0x1.8p-148, false,\n-\ttrue,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\ttrue,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\ttrue,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\ttrue,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\ttrue,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false),\n+\t0x1p-148, false, true,\n+\t0x1p-148, false, true,\n+\t0x1p-148, false, true,\n+\t0x1.8p-148, false, true,\n+\ttrue,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\ttrue,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\ttrue,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\ttrue,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\ttrue,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false),\n   TEST (\"3.5032461608120426773093239582247903282006548546912894293926\"\n \t\"7070972447770671465150371659547090530395507812501e-45\",\n \tfalse,\n-\t0x1p-148, false,\n-\t0x1.8p-148, false,\n-\t0x1p-148, false,\n-\t0x1.8p-148, false,\n-\tfalse,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4000000000001p-148, false,\n-\tfalse,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4000000000000002p-148, false,\n-\tfalse,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4000000000000002p-148, false,\n-\tfalse,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.400000000000000000000000008p-148, false,\n-\tfalse,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4000000000000000000000000001p-148, false),\n+\t0x1p-148, false, true,\n+\t0x1.8p-148, false, true,\n+\t0x1p-148, false, true,\n+\t0x1.8p-148, false, true,\n+\tfalse,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4000000000001p-148, false, false,\n+\tfalse,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4000000000000002p-148, false, false,\n+\tfalse,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4000000000000002p-148, false, false,\n+\tfalse,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.400000000000000000000000008p-148, false, false,\n+\tfalse,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4000000000000000000000000001p-148, false, false),\n   TEST (\"-3.503246160812042677309323958224790328200654854691289429392\"\n \t\"67070972447770671465150371659547090530395507812499e-45\",\n \tfalse,\n-\t-0x1.8p-148, false,\n-\t-0x1p-148, false,\n-\t-0x1p-148, false,\n-\t-0x1p-148, false,\n-\tfalse,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.3ffffffffffffp-148, false,\n-\t-0x1.3ffffffffffffp-148, false,\n-\tfalse,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.3ffffffffffffffep-148, false,\n-\t-0x1.3ffffffffffffffep-148, false,\n-\tfalse,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.3ffffffffffffffep-148, false,\n-\t-0x1.3ffffffffffffffep-148, false,\n-\tfalse,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.3fffffffffffffffffffffffff8p-148, false,\n-\t-0x1.3fffffffffffffffffffffffff8p-148, false,\n-\tfalse,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.3fffffffffffffffffffffffffffp-148, false,\n-\t-0x1.3fffffffffffffffffffffffffffp-148, false),\n+\t-0x1.8p-148, false, true,\n+\t-0x1p-148, false, true,\n+\t-0x1p-148, false, true,\n+\t-0x1p-148, false, true,\n+\tfalse,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.3ffffffffffffp-148, false, false,\n+\t-0x1.3ffffffffffffp-148, false, false,\n+\tfalse,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.3ffffffffffffffep-148, false, false,\n+\t-0x1.3ffffffffffffffep-148, false, false,\n+\tfalse,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.3ffffffffffffffep-148, false, false,\n+\t-0x1.3ffffffffffffffep-148, false, false,\n+\tfalse,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.3fffffffffffffffffffffffff8p-148, false, false,\n+\t-0x1.3fffffffffffffffffffffffff8p-148, false, false,\n+\tfalse,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.3fffffffffffffffffffffffffffp-148, false, false,\n+\t-0x1.3fffffffffffffffffffffffffffp-148, false, false),\n   TEST (\"-3.503246160812042677309323958224790328200654854691289429392\"\n \t\"670709724477706714651503716595470905303955078125e-45\",\n \tfalse,\n-\t-0x1.8p-148, false,\n-\t-0x1p-148, false,\n-\t-0x1p-148, false,\n-\t-0x1p-148, false,\n-\ttrue,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\ttrue,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\ttrue,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\ttrue,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\ttrue,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false),\n+\t-0x1.8p-148, false, true,\n+\t-0x1p-148, false, true,\n+\t-0x1p-148, false, true,\n+\t-0x1p-148, false, true,\n+\ttrue,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\ttrue,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\ttrue,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\ttrue,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\ttrue,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false),\n   TEST (\"-3.503246160812042677309323958224790328200654854691289429392\"\n \t\"67070972447770671465150371659547090530395507812501e-45\",\n \tfalse,\n-\t-0x1.8p-148, false,\n-\t-0x1.8p-148, false,\n-\t-0x1p-148, false,\n-\t-0x1p-148, false,\n-\tfalse,\n-\t-0x1.4000000000001p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\tfalse,\n-\t-0x1.4000000000000002p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\tfalse,\n-\t-0x1.4000000000000002p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\tfalse,\n-\t-0x1.400000000000000000000000008p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\tfalse,\n-\t-0x1.4000000000000000000000000001p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false),\n+\t-0x1.8p-148, false, true,\n+\t-0x1.8p-148, false, true,\n+\t-0x1p-148, false, true,\n+\t-0x1p-148, false, true,\n+\tfalse,\n+\t-0x1.4000000000001p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\tfalse,\n+\t-0x1.4000000000000002p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\tfalse,\n+\t-0x1.4000000000000002p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\tfalse,\n+\t-0x1.400000000000000000000000008p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\tfalse,\n+\t-0x1.4000000000000000000000000001p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false),\n   TEST (\"7.4109846876186981626485318930233205854758970392148714663837\"\n \t\"852375101326090531312779794975454245398856969484704316857659\"\n \t\"638998506553390969459816219401617281718945106978546710679176\"\n@@ -3818,35 +3818,35 @@ static const struct test tests[] = {\n \t\"337560846003984904972149117463085539556354188641513168478436\"\n \t\"31308023759629577398300170898437499e-324\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x4p-1076, false,\n-\t0x4p-1076, false,\n-\t0x4p-1076, false,\n-\t0x8p-1076, false,\n-\tfalse,\n-\t0x5.fffffffffffffff8p-1076, false,\n-\t0x6p-1076, false,\n-\t0x5.fffffffffffffff8p-1076, false,\n-\t0x6p-1076, false,\n-\tfalse,\n-\t0x5.fffffffffffffff8p-1076, false,\n-\t0x6p-1076, false,\n-\t0x5.fffffffffffffff8p-1076, false,\n-\t0x6p-1076, false,\n-\tfalse,\n-\t0x4p-1076, false,\n-\t0x4p-1076, false,\n-\t0x4p-1076, false,\n-\t0x8p-1076, false,\n-\tfalse,\n-\t0x5.fffffffffffffffffffffffffffcp-1076, false,\n-\t0x6p-1076, false,\n-\t0x5.fffffffffffffffffffffffffffcp-1076, false,\n-\t0x6p-1076, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x4p-1076, false, true,\n+\t0x4p-1076, false, true,\n+\t0x4p-1076, false, true,\n+\t0x8p-1076, false, true,\n+\tfalse,\n+\t0x5.fffffffffffffff8p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x5.fffffffffffffff8p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\tfalse,\n+\t0x5.fffffffffffffff8p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x5.fffffffffffffff8p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\tfalse,\n+\t0x4p-1076, false, true,\n+\t0x4p-1076, false, true,\n+\t0x4p-1076, false, true,\n+\t0x8p-1076, false, true,\n+\tfalse,\n+\t0x5.fffffffffffffffffffffffffffcp-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x5.fffffffffffffffffffffffffffcp-1076, false, false,\n+\t0x6p-1076, false, false),\n   TEST (\"7.4109846876186981626485318930233205854758970392148714663837\"\n \t\"852375101326090531312779794975454245398856969484704316857659\"\n \t\"638998506553390969459816219401617281718945106978546710679176\"\n@@ -3861,35 +3861,35 @@ static const struct test tests[] = {\n \t\"337560846003984904972149117463085539556354188641513168478436\"\n \t\"313080237596295773983001708984375e-324\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x4p-1076, false,\n-\t0x8p-1076, false,\n-\t0x4p-1076, false,\n-\t0x8p-1076, false,\n-\ttrue,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false,\n-\ttrue,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false,\n-\tfalse,\n-\t0x4p-1076, false,\n-\t0x8p-1076, false,\n-\t0x4p-1076, false,\n-\t0x8p-1076, false,\n-\ttrue,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x4p-1076, false, true,\n+\t0x8p-1076, false, true,\n+\t0x4p-1076, false, true,\n+\t0x8p-1076, false, true,\n+\ttrue,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\ttrue,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\tfalse,\n+\t0x4p-1076, false, true,\n+\t0x8p-1076, false, true,\n+\t0x4p-1076, false, true,\n+\t0x8p-1076, false, true,\n+\ttrue,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false),\n   TEST (\"7.4109846876186981626485318930233205854758970392148714663837\"\n \t\"852375101326090531312779794975454245398856969484704316857659\"\n \t\"638998506553390969459816219401617281718945106978546710679176\"\n@@ -3904,35 +3904,35 @@ static const struct test tests[] = {\n \t\"337560846003984904972149117463085539556354188641513168478436\"\n \t\"31308023759629577398300170898437501e-324\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x4p-1076, false,\n-\t0x8p-1076, false,\n-\t0x4p-1076, false,\n-\t0x8p-1076, false,\n-\tfalse,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false,\n-\t0x6.0000000000000008p-1076, false,\n-\tfalse,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false,\n-\t0x6.0000000000000008p-1076, false,\n-\tfalse,\n-\t0x4p-1076, false,\n-\t0x8p-1076, false,\n-\t0x4p-1076, false,\n-\t0x8p-1076, false,\n-\tfalse,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false,\n-\t0x6.0000000000000000000000000004p-1076, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x4p-1076, false, true,\n+\t0x8p-1076, false, true,\n+\t0x4p-1076, false, true,\n+\t0x8p-1076, false, true,\n+\tfalse,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x6.0000000000000008p-1076, false, false,\n+\tfalse,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x6.0000000000000008p-1076, false, false,\n+\tfalse,\n+\t0x4p-1076, false, true,\n+\t0x8p-1076, false, true,\n+\t0x4p-1076, false, true,\n+\t0x8p-1076, false, true,\n+\tfalse,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x6.0000000000000000000000000004p-1076, false, false),\n   TEST (\"-7.410984687618698162648531893023320585475897039214871466383\"\n \t\"785237510132609053131277979497545424539885696948470431685765\"\n \t\"963899850655339096945981621940161728171894510697854671067917\"\n@@ -3947,35 +3947,35 @@ static const struct test tests[] = {\n \t\"433756084600398490497214911746308553955635418864151316847843\"\n \t\"631308023759629577398300170898437499e-324\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-1076, false,\n-\t-0x4p-1076, false,\n-\t-0x4p-1076, false,\n-\t-0x4p-1076, false,\n-\tfalse,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x5.fffffffffffffff8p-1076, false,\n-\t-0x5.fffffffffffffff8p-1076, false,\n-\tfalse,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x5.fffffffffffffff8p-1076, false,\n-\t-0x5.fffffffffffffff8p-1076, false,\n-\tfalse,\n-\t-0x8p-1076, false,\n-\t-0x4p-1076, false,\n-\t-0x4p-1076, false,\n-\t-0x4p-1076, false,\n-\tfalse,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x5.fffffffffffffffffffffffffffcp-1076, false,\n-\t-0x5.fffffffffffffffffffffffffffcp-1076, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\tfalse,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x5.fffffffffffffff8p-1076, false, false,\n+\t-0x5.fffffffffffffff8p-1076, false, false,\n+\tfalse,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x5.fffffffffffffff8p-1076, false, false,\n+\t-0x5.fffffffffffffff8p-1076, false, false,\n+\tfalse,\n+\t-0x8p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\tfalse,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x5.fffffffffffffffffffffffffffcp-1076, false, false,\n+\t-0x5.fffffffffffffffffffffffffffcp-1076, false, false),\n   TEST (\"-7.410984687618698162648531893023320585475897039214871466383\"\n \t\"785237510132609053131277979497545424539885696948470431685765\"\n \t\"963899850655339096945981621940161728171894510697854671067917\"\n@@ -3990,35 +3990,35 @@ static const struct test tests[] = {\n \t\"433756084600398490497214911746308553955635418864151316847843\"\n \t\"6313080237596295773983001708984375e-324\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-1076, false,\n-\t-0x8p-1076, false,\n-\t-0x4p-1076, false,\n-\t-0x4p-1076, false,\n-\ttrue,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\ttrue,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\tfalse,\n-\t-0x8p-1076, false,\n-\t-0x8p-1076, false,\n-\t-0x4p-1076, false,\n-\t-0x4p-1076, false,\n-\ttrue,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-1076, false, true,\n+\t-0x8p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\ttrue,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\ttrue,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\tfalse,\n+\t-0x8p-1076, false, true,\n+\t-0x8p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\ttrue,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false),\n   TEST (\"-7.410984687618698162648531893023320585475897039214871466383\"\n \t\"785237510132609053131277979497545424539885696948470431685765\"\n \t\"963899850655339096945981621940161728171894510697854671067917\"\n@@ -4033,35 +4033,35 @@ static const struct test tests[] = {\n \t\"433756084600398490497214911746308553955635418864151316847843\"\n \t\"631308023759629577398300170898437501e-324\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-1076, false,\n-\t-0x8p-1076, false,\n-\t-0x4p-1076, false,\n-\t-0x4p-1076, false,\n-\tfalse,\n-\t-0x6.0000000000000008p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\tfalse,\n-\t-0x6.0000000000000008p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\tfalse,\n-\t-0x8p-1076, false,\n-\t-0x8p-1076, false,\n-\t-0x4p-1076, false,\n-\t-0x4p-1076, false,\n-\tfalse,\n-\t-0x6.0000000000000000000000000004p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-1076, false, true,\n+\t-0x8p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\tfalse,\n+\t-0x6.0000000000000008p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\tfalse,\n+\t-0x6.0000000000000008p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\tfalse,\n+\t-0x8p-1076, false, true,\n+\t-0x8p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\tfalse,\n+\t-0x6.0000000000000000000000000004p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false),\n   TEST (\"5.4677992978237119037926089004291297245985762235403450155814\"\n \t\"707305425575329500966052143410629387408077958710210208052966\"\n \t\"529504784489330482549602621133847135082257338717668975178538\"\n@@ -4255,35 +4255,35 @@ static const struct test tests[] = {\n \t\"866268925981702690270202829595794350800918257913991744455922\"\n \t\"683343374046671669930219650268554687499e-4951\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x8p-16448, false,\n-\t0x8p-16448, false,\n-\t0x8p-16448, false,\n-\t0x1p-16444, false,\n-\tfalse,\n-\t0x8p-16448, false,\n-\t0xcp-16448, false,\n-\t0x8p-16448, false,\n-\t0xcp-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0xb.fffffffffffcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xb.fffffffffffcp-16448, false,\n-\t0xcp-16448, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x8p-16448, false, true,\n+\t0x8p-16448, false, true,\n+\t0x8p-16448, false, true,\n+\t0x1p-16444, false, true,\n+\tfalse,\n+\t0x8p-16448, false, true,\n+\t0xcp-16448, false, true,\n+\t0x8p-16448, false, true,\n+\t0xcp-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0xb.fffffffffffcp-16448, false, true,\n+\t0xcp-16448, false, true,\n+\t0xb.fffffffffffcp-16448, false, true,\n+\t0xcp-16448, false, true),\n   TEST (\"5.4677992978237119037926089004291297245985762235403450155814\"\n \t\"707305425575329500966052143410629387408077958710210208052966\"\n \t\"529504784489330482549602621133847135082257338717668975178538\"\n@@ -4477,35 +4477,35 @@ static const struct test tests[] = {\n \t\"866268925981702690270202829595794350800918257913991744455922\"\n \t\"6833433740466716699302196502685546875e-4951\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x8p-16448, false,\n-\t0x1p-16444, false,\n-\t0x8p-16448, false,\n-\t0x1p-16444, false,\n-\ttrue,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\ttrue,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x8p-16448, false, true,\n+\t0x1p-16444, false, true,\n+\t0x8p-16448, false, true,\n+\t0x1p-16444, false, true,\n+\ttrue,\n+\t0xcp-16448, false, false,\n+\t0xcp-16448, false, false,\n+\t0xcp-16448, false, false,\n+\t0xcp-16448, false, false,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\ttrue,\n+\t0xcp-16448, false, false,\n+\t0xcp-16448, false, false,\n+\t0xcp-16448, false, false,\n+\t0xcp-16448, false, false),\n   TEST (\"5.4677992978237119037926089004291297245985762235403450155814\"\n \t\"707305425575329500966052143410629387408077958710210208052966\"\n \t\"529504784489330482549602621133847135082257338717668975178538\"\n@@ -4699,35 +4699,35 @@ static const struct test tests[] = {\n \t\"866268925981702690270202829595794350800918257913991744455922\"\n \t\"683343374046671669930219650268554687501e-4951\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x8p-16448, false,\n-\t0x1p-16444, false,\n-\t0x8p-16448, false,\n-\t0x1p-16444, false,\n-\tfalse,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0x1p-16444, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xc.000000000004p-16448, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x8p-16448, false, true,\n+\t0x1p-16444, false, true,\n+\t0x8p-16448, false, true,\n+\t0x1p-16444, false, true,\n+\tfalse,\n+\t0xcp-16448, false, true,\n+\t0xcp-16448, false, true,\n+\t0xcp-16448, false, true,\n+\t0x1p-16444, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0xcp-16448, false, true,\n+\t0xcp-16448, false, true,\n+\t0xcp-16448, false, true,\n+\t0xc.000000000004p-16448, false, true),\n   TEST (\"-5.467799297823711903792608900429129724598576223540345015581\"\n \t\"470730542557532950096605214341062938740807795871021020805296\"\n \t\"652950478448933048254960262113384713508225733871766897517853\"\n@@ -4921,35 +4921,35 @@ static const struct test tests[] = {\n \t\"386626892598170269027020282959579435080091825791399174445592\"\n \t\"2683343374046671669930219650268554687499e-4951\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x1p-16444, false,\n-\t-0x8p-16448, false,\n-\t-0x8p-16448, false,\n-\t-0x8p-16448, false,\n-\tfalse,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0x8p-16448, false,\n-\t-0x8p-16448, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xb.fffffffffffcp-16448, false,\n-\t-0xb.fffffffffffcp-16448, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x1p-16444, false, true,\n+\t-0x8p-16448, false, true,\n+\t-0x8p-16448, false, true,\n+\t-0x8p-16448, false, true,\n+\tfalse,\n+\t-0xcp-16448, false, true,\n+\t-0xcp-16448, false, true,\n+\t-0x8p-16448, false, true,\n+\t-0x8p-16448, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0xcp-16448, false, true,\n+\t-0xcp-16448, false, true,\n+\t-0xb.fffffffffffcp-16448, false, true,\n+\t-0xb.fffffffffffcp-16448, false, true),\n   TEST (\"-5.467799297823711903792608900429129724598576223540345015581\"\n \t\"470730542557532950096605214341062938740807795871021020805296\"\n \t\"652950478448933048254960262113384713508225733871766897517853\"\n@@ -5143,35 +5143,35 @@ static const struct test tests[] = {\n \t\"386626892598170269027020282959579435080091825791399174445592\"\n \t\"26833433740466716699302196502685546875e-4951\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x1p-16444, false,\n-\t-0x1p-16444, false,\n-\t-0x8p-16448, false,\n-\t-0x8p-16448, false,\n-\ttrue,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x1p-16444, false, true,\n+\t-0x1p-16444, false, true,\n+\t-0x8p-16448, false, true,\n+\t-0x8p-16448, false, true,\n+\ttrue,\n+\t-0xcp-16448, false, false,\n+\t-0xcp-16448, false, false,\n+\t-0xcp-16448, false, false,\n+\t-0xcp-16448, false, false,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0xcp-16448, false, false,\n+\t-0xcp-16448, false, false,\n+\t-0xcp-16448, false, false,\n+\t-0xcp-16448, false, false),\n   TEST (\"-5.467799297823711903792608900429129724598576223540345015581\"\n \t\"470730542557532950096605214341062938740807795871021020805296\"\n \t\"652950478448933048254960262113384713508225733871766897517853\"\n@@ -5365,35 +5365,35 @@ static const struct test tests[] = {\n \t\"386626892598170269027020282959579435080091825791399174445592\"\n \t\"2683343374046671669930219650268554687501e-4951\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x1p-16444, false,\n-\t-0x1p-16444, false,\n-\t-0x8p-16448, false,\n-\t-0x8p-16448, false,\n-\tfalse,\n-\t-0x1p-16444, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0xc.000000000004p-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x1p-16444, false, true,\n+\t-0x1p-16444, false, true,\n+\t-0x8p-16448, false, true,\n+\t-0x8p-16448, false, true,\n+\tfalse,\n+\t-0x1p-16444, false, true,\n+\t-0xcp-16448, false, true,\n+\t-0xcp-16448, false, true,\n+\t-0xcp-16448, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0xc.000000000004p-16448, false, true,\n+\t-0xcp-16448, false, true,\n+\t-0xcp-16448, false, true,\n+\t-0xcp-16448, false, true),\n   TEST (\"5.4677992978237119037926089004291297245985762235403450155814\"\n \t\"707305425575329500966052143410629387408077958710210208052966\"\n \t\"529504784489330482549602621133847135082257338717668975178538\"\n@@ -5587,35 +5587,35 @@ static const struct test tests[] = {\n \t\"866268925981702690270202829595794350800918257913991744455922\"\n \t\"683343374046671669930219650268554687499e-4951\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x8p-16448, false,\n-\t0x8p-16448, false,\n-\t0x8p-16448, false,\n-\t0x1p-16444, false,\n-\tfalse,\n-\t0x8p-16448, false,\n-\t0xcp-16448, false,\n-\t0x8p-16448, false,\n-\t0xcp-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0xb.fffffffffffcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xb.fffffffffffcp-16448, false,\n-\t0xcp-16448, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x8p-16448, false, true,\n+\t0x8p-16448, false, true,\n+\t0x8p-16448, false, true,\n+\t0x1p-16444, false, true,\n+\tfalse,\n+\t0x8p-16448, false, true,\n+\t0xcp-16448, false, true,\n+\t0x8p-16448, false, true,\n+\t0xcp-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0xb.fffffffffffcp-16448, false, true,\n+\t0xcp-16448, false, true,\n+\t0xb.fffffffffffcp-16448, false, true,\n+\t0xcp-16448, false, true),\n   TEST (\"5.4677992978237119037926089004291297245985762235403450155814\"\n \t\"707305425575329500966052143410629387408077958710210208052966\"\n \t\"529504784489330482549602621133847135082257338717668975178538\"\n@@ -5809,35 +5809,35 @@ static const struct test tests[] = {\n \t\"866268925981702690270202829595794350800918257913991744455922\"\n \t\"6833433740466716699302196502685546875e-4951\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x8p-16448, false,\n-\t0x1p-16444, false,\n-\t0x8p-16448, false,\n-\t0x1p-16444, false,\n-\ttrue,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\ttrue,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x8p-16448, false, true,\n+\t0x1p-16444, false, true,\n+\t0x8p-16448, false, true,\n+\t0x1p-16444, false, true,\n+\ttrue,\n+\t0xcp-16448, false, false,\n+\t0xcp-16448, false, false,\n+\t0xcp-16448, false, false,\n+\t0xcp-16448, false, false,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\ttrue,\n+\t0xcp-16448, false, false,\n+\t0xcp-16448, false, false,\n+\t0xcp-16448, false, false,\n+\t0xcp-16448, false, false),\n   TEST (\"5.4677992978237119037926089004291297245985762235403450155814\"\n \t\"707305425575329500966052143410629387408077958710210208052966\"\n \t\"529504784489330482549602621133847135082257338717668975178538\"\n@@ -6031,35 +6031,35 @@ static const struct test tests[] = {\n \t\"866268925981702690270202829595794350800918257913991744455922\"\n \t\"683343374046671669930219650268554687501e-4951\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x8p-16448, false,\n-\t0x1p-16444, false,\n-\t0x8p-16448, false,\n-\t0x1p-16444, false,\n-\tfalse,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0x1p-16444, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xc.000000000004p-16448, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x8p-16448, false, true,\n+\t0x1p-16444, false, true,\n+\t0x8p-16448, false, true,\n+\t0x1p-16444, false, true,\n+\tfalse,\n+\t0xcp-16448, false, true,\n+\t0xcp-16448, false, true,\n+\t0xcp-16448, false, true,\n+\t0x1p-16444, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0xcp-16448, false, true,\n+\t0xcp-16448, false, true,\n+\t0xcp-16448, false, true,\n+\t0xc.000000000004p-16448, false, true),\n   TEST (\"-5.467799297823711903792608900429129724598576223540345015581\"\n \t\"470730542557532950096605214341062938740807795871021020805296\"\n \t\"652950478448933048254960262113384713508225733871766897517853\"\n@@ -6253,35 +6253,35 @@ static const struct test tests[] = {\n \t\"386626892598170269027020282959579435080091825791399174445592\"\n \t\"2683343374046671669930219650268554687499e-4951\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x1p-16444, false,\n-\t-0x8p-16448, false,\n-\t-0x8p-16448, false,\n-\t-0x8p-16448, false,\n-\tfalse,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0x8p-16448, false,\n-\t-0x8p-16448, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xb.fffffffffffcp-16448, false,\n-\t-0xb.fffffffffffcp-16448, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x1p-16444, false, true,\n+\t-0x8p-16448, false, true,\n+\t-0x8p-16448, false, true,\n+\t-0x8p-16448, false, true,\n+\tfalse,\n+\t-0xcp-16448, false, true,\n+\t-0xcp-16448, false, true,\n+\t-0x8p-16448, false, true,\n+\t-0x8p-16448, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0xcp-16448, false, true,\n+\t-0xcp-16448, false, true,\n+\t-0xb.fffffffffffcp-16448, false, true,\n+\t-0xb.fffffffffffcp-16448, false, true),\n   TEST (\"-5.467799297823711903792608900429129724598576223540345015581\"\n \t\"470730542557532950096605214341062938740807795871021020805296\"\n \t\"652950478448933048254960262113384713508225733871766897517853\"\n@@ -6475,35 +6475,35 @@ static const struct test tests[] = {\n \t\"386626892598170269027020282959579435080091825791399174445592\"\n \t\"26833433740466716699302196502685546875e-4951\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x1p-16444, false,\n-\t-0x1p-16444, false,\n-\t-0x8p-16448, false,\n-\t-0x8p-16448, false,\n-\ttrue,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x1p-16444, false, true,\n+\t-0x1p-16444, false, true,\n+\t-0x8p-16448, false, true,\n+\t-0x8p-16448, false, true,\n+\ttrue,\n+\t-0xcp-16448, false, false,\n+\t-0xcp-16448, false, false,\n+\t-0xcp-16448, false, false,\n+\t-0xcp-16448, false, false,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0xcp-16448, false, false,\n+\t-0xcp-16448, false, false,\n+\t-0xcp-16448, false, false,\n+\t-0xcp-16448, false, false),\n   TEST (\"-5.467799297823711903792608900429129724598576223540345015581\"\n \t\"470730542557532950096605214341062938740807795871021020805296\"\n \t\"652950478448933048254960262113384713508225733871766897517853\"\n@@ -6697,630 +6697,630 @@ static const struct test tests[] = {\n \t\"386626892598170269027020282959579435080091825791399174445592\"\n \t\"2683343374046671669930219650268554687501e-4951\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x1p-16444, false,\n-\t-0x1p-16444, false,\n-\t-0x8p-16448, false,\n-\t-0x8p-16448, false,\n-\tfalse,\n-\t-0x1p-16444, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0xc.000000000004p-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x1p-16444, false, true,\n+\t-0x1p-16444, false, true,\n+\t-0x8p-16448, false, true,\n+\t-0x8p-16448, false, true,\n+\tfalse,\n+\t-0x1p-16444, false, true,\n+\t-0xcp-16448, false, true,\n+\t-0xcp-16448, false, true,\n+\t-0xcp-16448, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0xc.000000000004p-16448, false, true,\n+\t-0xcp-16448, false, true,\n+\t-0xcp-16448, false, true,\n+\t-0xcp-16448, false, true),\n   TEST (\"-0x0.7p-149\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false,\n-\ttrue,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false,\n-\ttrue,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false,\n-\ttrue,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false,\n-\ttrue,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false,\n+\ttrue,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false,\n+\ttrue,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false,\n+\ttrue,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false,\n+\ttrue,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false),\n   TEST (\"-0x0.7p-1074\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x1.cp-1076, false,\n-\t-0x1.cp-1076, false,\n-\t-0x1.cp-1076, false,\n-\t-0x1.cp-1076, false,\n-\ttrue,\n-\t-0x1.cp-1076, false,\n-\t-0x1.cp-1076, false,\n-\t-0x1.cp-1076, false,\n-\t-0x1.cp-1076, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x1.cp-1076, false,\n-\t-0x1.cp-1076, false,\n-\t-0x1.cp-1076, false,\n-\t-0x1.cp-1076, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x1.cp-1076, false, false,\n+\t-0x1.cp-1076, false, false,\n+\t-0x1.cp-1076, false, false,\n+\t-0x1.cp-1076, false, false,\n+\ttrue,\n+\t-0x1.cp-1076, false, false,\n+\t-0x1.cp-1076, false, false,\n+\t-0x1.cp-1076, false, false,\n+\t-0x1.cp-1076, false, false,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x1.cp-1076, false, false,\n+\t-0x1.cp-1076, false, false,\n+\t-0x1.cp-1076, false, false,\n+\t-0x1.cp-1076, false, false),\n   TEST (\"-0x0.7p-16445\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x3.8p-16448, false,\n-\t-0x3.8p-16448, false,\n-\t-0x3.8p-16448, false,\n-\t-0x3.8p-16448, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16448, false, true,\n+\t-0x4p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x3.8p-16448, false, false,\n+\t-0x3.8p-16448, false, false,\n+\t-0x3.8p-16448, false, false,\n+\t-0x3.8p-16448, false, false),\n   TEST (\"-0x0.7p-16494\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16496, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16496, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true),\n   TEST (\"0x1p-150\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\ttrue,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\ttrue,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\ttrue,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\ttrue,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\ttrue,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\ttrue,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\ttrue,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\ttrue,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\ttrue,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\ttrue,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false),\n   TEST (\"0x1p-1075\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\ttrue,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\ttrue,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\ttrue,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\ttrue,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\ttrue,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\ttrue,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false),\n   TEST (\"0x1p-16446\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-16448, false,\n-\ttrue,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\ttrue,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-16448, false, true,\n+\ttrue,\n+\t0x4p-16448, false, false,\n+\t0x4p-16448, false, false,\n+\t0x4p-16448, false, false,\n+\t0x4p-16448, false, false,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\ttrue,\n+\t0x4p-16448, false, false,\n+\t0x4p-16448, false, false,\n+\t0x4p-16448, false, false,\n+\t0x4p-16448, false, false),\n   TEST (\"0x1p-16495\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-16496, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-16496, false, true),\n   TEST (\"-0x1p-150\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\ttrue,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\ttrue,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\ttrue,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\ttrue,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\ttrue,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\ttrue,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\ttrue,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\ttrue,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false),\n   TEST (\"-0x1p-1075\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\ttrue,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\ttrue,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false),\n   TEST (\"-0x1p-16446\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x4p-16448, false, false,\n+\t-0x4p-16448, false, false,\n+\t-0x4p-16448, false, false,\n+\t-0x4p-16448, false, false,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x4p-16448, false, false,\n+\t-0x4p-16448, false, false,\n+\t-0x4p-16448, false, false,\n+\t-0x4p-16448, false, false),\n   TEST (\"-0x1p-16495\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16496, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16496, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true),\n   TEST (\".70064923216240853546186479164495807e-45\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4.0000000000004p-152, false,\n-\tfalse,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4.0000000000000008p-152, false,\n-\tfalse,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4.0000000000000008p-152, false,\n-\tfalse,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4.00000000000000000000000002p-152, false,\n-\tfalse,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4.0000000000000000000000000004p-152, false),\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4.0000000000004p-152, false, false,\n+\tfalse,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4.0000000000000008p-152, false, false,\n+\tfalse,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4.0000000000000008p-152, false, false,\n+\tfalse,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4.00000000000000000000000002p-152, false, false,\n+\tfalse,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4.0000000000000000000000000004p-152, false, false),\n   TEST (\"7.0064923216240853546186479164495806564013097093825788587853\"\n \t\"4141944895541342930300743319094181060791015624e-46\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x3.ffffffffffffep-152, false,\n-\t0x4p-152, false,\n-\t0x3.ffffffffffffep-152, false,\n-\t0x4p-152, false,\n-\tfalse,\n-\t0x3.fffffffffffffffcp-152, false,\n-\t0x4p-152, false,\n-\t0x3.fffffffffffffffcp-152, false,\n-\t0x4p-152, false,\n-\tfalse,\n-\t0x3.fffffffffffffffcp-152, false,\n-\t0x4p-152, false,\n-\t0x3.fffffffffffffffcp-152, false,\n-\t0x4p-152, false,\n-\tfalse,\n-\t0x3.ffffffffffffffffffffffffffp-152, false,\n-\t0x4p-152, false,\n-\t0x3.ffffffffffffffffffffffffffp-152, false,\n-\t0x4p-152, false,\n-\tfalse,\n-\t0x3.fffffffffffffffffffffffffffep-152, false,\n-\t0x4p-152, false,\n-\t0x3.fffffffffffffffffffffffffffep-152, false,\n-\t0x4p-152, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x3.ffffffffffffep-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x3.ffffffffffffep-152, false, false,\n+\t0x4p-152, false, false,\n+\tfalse,\n+\t0x3.fffffffffffffffcp-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x3.fffffffffffffffcp-152, false, false,\n+\t0x4p-152, false, false,\n+\tfalse,\n+\t0x3.fffffffffffffffcp-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x3.fffffffffffffffcp-152, false, false,\n+\t0x4p-152, false, false,\n+\tfalse,\n+\t0x3.ffffffffffffffffffffffffffp-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x3.ffffffffffffffffffffffffffp-152, false, false,\n+\t0x4p-152, false, false,\n+\tfalse,\n+\t0x3.fffffffffffffffffffffffffffep-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x3.fffffffffffffffffffffffffffep-152, false, false,\n+\t0x4p-152, false, false),\n   TEST (\"7.0064923216240853546186479164495806564013097093825788587853\"\n \t\"4141944895541342930300743319094181060791015625e-46\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\ttrue,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\ttrue,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\ttrue,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\ttrue,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\ttrue,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\ttrue,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\ttrue,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\ttrue,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\ttrue,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\ttrue,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false),\n   TEST (\"7.0064923216240853546186479164495806564013097093825788587853\"\n \t\"4141944895541342930300743319094181060791015626e-46\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4.0000000000004p-152, false,\n-\tfalse,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4.0000000000000008p-152, false,\n-\tfalse,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4.0000000000000008p-152, false,\n-\tfalse,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4.00000000000000000000000002p-152, false,\n-\tfalse,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4.0000000000000000000000000004p-152, false),\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4.0000000000004p-152, false, false,\n+\tfalse,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4.0000000000000008p-152, false, false,\n+\tfalse,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4.0000000000000008p-152, false, false,\n+\tfalse,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4.00000000000000000000000002p-152, false, false,\n+\tfalse,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4.0000000000000000000000000004p-152, false, false),\n   TEST (\"-7.006492321624085354618647916449580656401309709382578858785\"\n \t\"34141944895541342930300743319094181060791015624e-46\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x3.ffffffffffffep-152, false,\n-\t-0x3.ffffffffffffep-152, false,\n-\tfalse,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x3.fffffffffffffffcp-152, false,\n-\t-0x3.fffffffffffffffcp-152, false,\n-\tfalse,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x3.fffffffffffffffcp-152, false,\n-\t-0x3.fffffffffffffffcp-152, false,\n-\tfalse,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x3.ffffffffffffffffffffffffffp-152, false,\n-\t-0x3.ffffffffffffffffffffffffffp-152, false,\n-\tfalse,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x3.fffffffffffffffffffffffffffep-152, false,\n-\t-0x3.fffffffffffffffffffffffffffep-152, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x3.ffffffffffffep-152, false, false,\n+\t-0x3.ffffffffffffep-152, false, false,\n+\tfalse,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x3.fffffffffffffffcp-152, false, false,\n+\t-0x3.fffffffffffffffcp-152, false, false,\n+\tfalse,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x3.fffffffffffffffcp-152, false, false,\n+\t-0x3.fffffffffffffffcp-152, false, false,\n+\tfalse,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x3.ffffffffffffffffffffffffffp-152, false, false,\n+\t-0x3.ffffffffffffffffffffffffffp-152, false, false,\n+\tfalse,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x3.fffffffffffffffffffffffffffep-152, false, false,\n+\t-0x3.fffffffffffffffffffffffffffep-152, false, false),\n   TEST (\"-7.006492321624085354618647916449580656401309709382578858785\"\n \t\"34141944895541342930300743319094181060791015625e-46\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\ttrue,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\ttrue,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\ttrue,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\ttrue,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\ttrue,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\ttrue,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\ttrue,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\ttrue,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false),\n   TEST (\"-7.006492321624085354618647916449580656401309709382578858785\"\n \t\"34141944895541342930300743319094181060791015626e-46\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4.0000000000004p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\tfalse,\n-\t-0x4.0000000000000008p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\tfalse,\n-\t-0x4.0000000000000008p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\tfalse,\n-\t-0x4.00000000000000000000000002p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\tfalse,\n-\t-0x4.0000000000000000000000000004p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false),\n+\t-0x8p-152, false, true,\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4.0000000000004p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\tfalse,\n+\t-0x4.0000000000000008p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\tfalse,\n+\t-0x4.0000000000000008p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\tfalse,\n+\t-0x4.00000000000000000000000002p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\tfalse,\n+\t-0x4.0000000000000000000000000004p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false),\n   TEST (\"2.4703282292062327208828439643411068618252990130716238221279\"\n \t\"284125033775363510437593264991818081799618989828234772285886\"\n \t\"546332835517796989819938739800539093906315035659515570226392\"\n@@ -7335,35 +7335,35 @@ static const struct test tests[] = {\n \t\"779186948667994968324049705821028513185451396213837722826145\"\n \t\"437693412532098591327667236328124e-324\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x1.fffffffffffffffep-1076, false,\n-\t0x2p-1076, false,\n-\t0x1.fffffffffffffffep-1076, false,\n-\t0x2p-1076, false,\n-\tfalse,\n-\t0x1.fffffffffffffffep-1076, false,\n-\t0x2p-1076, false,\n-\t0x1.fffffffffffffffep-1076, false,\n-\t0x2p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x1.ffffffffffffffffffffffffffffp-1076, false,\n-\t0x2p-1076, false,\n-\t0x1.ffffffffffffffffffffffffffffp-1076, false,\n-\t0x2p-1076, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x1.fffffffffffffffep-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x1.fffffffffffffffep-1076, false, false,\n+\t0x2p-1076, false, false,\n+\tfalse,\n+\t0x1.fffffffffffffffep-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x1.fffffffffffffffep-1076, false, false,\n+\t0x2p-1076, false, false,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x1.ffffffffffffffffffffffffffffp-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x1.ffffffffffffffffffffffffffffp-1076, false, false,\n+\t0x2p-1076, false, false),\n   TEST (\"2.4703282292062327208828439643411068618252990130716238221279\"\n \t\"284125033775363510437593264991818081799618989828234772285886\"\n \t\"546332835517796989819938739800539093906315035659515570226392\"\n@@ -7378,35 +7378,35 @@ static const struct test tests[] = {\n \t\"779186948667994968324049705821028513185451396213837722826145\"\n \t\"437693412532098591327667236328125e-324\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\ttrue,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\ttrue,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\ttrue,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\ttrue,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\ttrue,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\ttrue,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false),\n   TEST (\"2.4703282292062327208828439643411068618252990130716238221279\"\n \t\"284125033775363510437593264991818081799618989828234772285886\"\n \t\"546332835517796989819938739800539093906315035659515570226392\"\n@@ -7421,35 +7421,35 @@ static const struct test tests[] = {\n \t\"779186948667994968324049705821028513185451396213837722826145\"\n \t\"437693412532098591327667236328126e-324\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2.0000000000000004p-1076, false,\n-\tfalse,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2.0000000000000004p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2.0000000000000000000000000002p-1076, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2.0000000000000004p-1076, false, false,\n+\tfalse,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2.0000000000000004p-1076, false, false,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2.0000000000000000000000000002p-1076, false, false),\n   TEST (\"-2.470328229206232720882843964341106861825299013071623822127\"\n \t\"928412503377536351043759326499181808179961898982823477228588\"\n \t\"654633283551779698981993873980053909390631503565951557022639\"\n@@ -7464,35 +7464,35 @@ static const struct test tests[] = {\n \t\"477918694866799496832404970582102851318545139621383772282614\"\n \t\"5437693412532098591327667236328124e-324\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x1.fffffffffffffffep-1076, false,\n-\t-0x1.fffffffffffffffep-1076, false,\n-\tfalse,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x1.fffffffffffffffep-1076, false,\n-\t-0x1.fffffffffffffffep-1076, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x1.ffffffffffffffffffffffffffffp-1076, false,\n-\t-0x1.ffffffffffffffffffffffffffffp-1076, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x1.fffffffffffffffep-1076, false, false,\n+\t-0x1.fffffffffffffffep-1076, false, false,\n+\tfalse,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x1.fffffffffffffffep-1076, false, false,\n+\t-0x1.fffffffffffffffep-1076, false, false,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x1.ffffffffffffffffffffffffffffp-1076, false, false,\n+\t-0x1.ffffffffffffffffffffffffffffp-1076, false, false),\n   TEST (\"-2.470328229206232720882843964341106861825299013071623822127\"\n \t\"928412503377536351043759326499181808179961898982823477228588\"\n \t\"654633283551779698981993873980053909390631503565951557022639\"\n@@ -7507,35 +7507,35 @@ static const struct test tests[] = {\n \t\"477918694866799496832404970582102851318545139621383772282614\"\n \t\"5437693412532098591327667236328125e-324\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\ttrue,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\ttrue,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false),\n   TEST (\"-2.470328229206232720882843964341106861825299013071623822127\"\n \t\"928412503377536351043759326499181808179961898982823477228588\"\n \t\"654633283551779698981993873980053909390631503565951557022639\"\n@@ -7550,35 +7550,35 @@ static const struct test tests[] = {\n \t\"477918694866799496832404970582102851318545139621383772282614\"\n \t\"5437693412532098591327667236328126e-324\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x2.0000000000000004p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\tfalse,\n-\t-0x2.0000000000000004p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x2.0000000000000000000000000002p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x2.0000000000000004p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\tfalse,\n+\t-0x2.0000000000000004p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x2.0000000000000000000000000002p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false),\n   TEST (\"1.8225997659412373012642029668097099081995254078467816718604\"\n \t\"902435141858443166988684047803543129136025986236736736017655\"\n \t\"509834928163110160849867540377949045027419112905889658392846\"\n@@ -7772,35 +7772,35 @@ static const struct test tests[] = {\n \t\"622089641993900896756734276531931450266972752637997248151974\"\n \t\"2277811246822238899767398834228515624e-4951\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x4p-16448, false,\n-\t0x0p+0, false,\n-\t0x4p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x3.fffffffffffcp-16448, false,\n-\t0x4p-16448, false,\n-\t0x3.fffffffffffcp-16448, false,\n-\t0x4p-16448, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x4p-16448, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x3.fffffffffffcp-16448, false, true,\n+\t0x4p-16448, false, true,\n+\t0x3.fffffffffffcp-16448, false, true,\n+\t0x4p-16448, false, true),\n   TEST (\"1.8225997659412373012642029668097099081995254078467816718604\"\n \t\"902435141858443166988684047803543129136025986236736736017655\"\n \t\"509834928163110160849867540377949045027419112905889658392846\"\n@@ -7994,35 +7994,35 @@ static const struct test tests[] = {\n \t\"622089641993900896756734276531931450266972752637997248151974\"\n \t\"2277811246822238899767398834228515625e-4951\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-16448, false,\n-\ttrue,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\ttrue,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-16448, false, true,\n+\ttrue,\n+\t0x4p-16448, false, false,\n+\t0x4p-16448, false, false,\n+\t0x4p-16448, false, false,\n+\t0x4p-16448, false, false,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\ttrue,\n+\t0x4p-16448, false, false,\n+\t0x4p-16448, false, false,\n+\t0x4p-16448, false, false,\n+\t0x4p-16448, false, false),\n   TEST (\"1.8225997659412373012642029668097099081995254078467816718604\"\n \t\"902435141858443166988684047803543129136025986236736736017655\"\n \t\"509834928163110160849867540377949045027419112905889658392846\"\n@@ -8216,35 +8216,35 @@ static const struct test tests[] = {\n \t\"622089641993900896756734276531931450266972752637997248151974\"\n \t\"2277811246822238899767398834228515626e-4951\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x8p-16448, false,\n-\t0x0p+0, false,\n-\t0x8p-16448, false,\n-\tfalse,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false,\n-\t0x8p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false,\n-\t0x4.000000000004p-16448, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x8p-16448, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-16448, false, true,\n+\tfalse,\n+\t0x4p-16448, false, true,\n+\t0x4p-16448, false, true,\n+\t0x4p-16448, false, true,\n+\t0x8p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x4p-16448, false, true,\n+\t0x4p-16448, false, true,\n+\t0x4p-16448, false, true,\n+\t0x4.000000000004p-16448, false, true),\n   TEST (\"-1.822599765941237301264202966809709908199525407846781671860\"\n \t\"490243514185844316698868404780354312913602598623673673601765\"\n \t\"550983492816311016084986754037794904502741911290588965839284\"\n@@ -8438,35 +8438,35 @@ static const struct test tests[] = {\n \t\"462208964199390089675673427653193145026697275263799724815197\"\n \t\"42277811246822238899767398834228515624e-4951\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x3.fffffffffffcp-16448, false,\n-\t-0x3.fffffffffffcp-16448, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16448, false, true,\n+\t-0x4p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16448, false, true,\n+\t-0x4p-16448, false, true,\n+\t-0x3.fffffffffffcp-16448, false, true,\n+\t-0x3.fffffffffffcp-16448, false, true),\n   TEST (\"-1.822599765941237301264202966809709908199525407846781671860\"\n \t\"490243514185844316698868404780354312913602598623673673601765\"\n \t\"550983492816311016084986754037794904502741911290588965839284\"\n@@ -8660,35 +8660,35 @@ static const struct test tests[] = {\n \t\"462208964199390089675673427653193145026697275263799724815197\"\n \t\"42277811246822238899767398834228515625e-4951\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x4p-16448, false, false,\n+\t-0x4p-16448, false, false,\n+\t-0x4p-16448, false, false,\n+\t-0x4p-16448, false, false,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x4p-16448, false, false,\n+\t-0x4p-16448, false, false,\n+\t-0x4p-16448, false, false,\n+\t-0x4p-16448, false, false),\n   TEST (\"-1.822599765941237301264202966809709908199525407846781671860\"\n \t\"490243514185844316698868404780354312913602598623673673601765\"\n \t\"550983492816311016084986754037794904502741911290588965839284\"\n@@ -8882,35 +8882,35 @@ static const struct test tests[] = {\n \t\"462208964199390089675673427653193145026697275263799724815197\"\n \t\"42277811246822238899767398834228515626e-4951\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-16448, false,\n-\t-0x8p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4.000000000004p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-16448, false, true,\n+\t-0x8p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-16448, false, true,\n+\t-0x4p-16448, false, true,\n+\t-0x4p-16448, false, true,\n+\t-0x4p-16448, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4.000000000004p-16448, false, true,\n+\t-0x4p-16448, false, true,\n+\t-0x4p-16448, false, true,\n+\t-0x4p-16448, false, true),\n   TEST (\"9.1129988297061865063210148340485495409976270392339083593024\"\n \t\"512175709292215834943420239017715645680129931183683680088277\"\n \t\"549174640815550804249337701889745225137095564529448291964230\"\n@@ -9104,35 +9104,35 @@ static const struct test tests[] = {\n \t\"110448209969504483783671382659657251334863763189986240759871\"\n \t\"1389056234111194498836994171142578124e-4952\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x1.fffffffffffcp-16448, false,\n-\t0x2p-16448, false,\n-\t0x1.fffffffffffcp-16448, false,\n-\t0x2p-16448, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x1.fffffffffffcp-16448, false, true,\n+\t0x2p-16448, false, true,\n+\t0x1.fffffffffffcp-16448, false, true,\n+\t0x2p-16448, false, true),\n   TEST (\"9.1129988297061865063210148340485495409976270392339083593024\"\n \t\"512175709292215834943420239017715645680129931183683680088277\"\n \t\"549174640815550804249337701889745225137095564529448291964230\"\n@@ -9326,35 +9326,35 @@ static const struct test tests[] = {\n \t\"110448209969504483783671382659657251334863763189986240759871\"\n \t\"1389056234111194498836994171142578125e-4952\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\ttrue,\n-\t0x2p-16448, false,\n-\t0x2p-16448, false,\n-\t0x2p-16448, false,\n-\t0x2p-16448, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\ttrue,\n+\t0x2p-16448, false, false,\n+\t0x2p-16448, false, false,\n+\t0x2p-16448, false, false,\n+\t0x2p-16448, false, false),\n   TEST (\"9.1129988297061865063210148340485495409976270392339083593024\"\n \t\"512175709292215834943420239017715645680129931183683680088277\"\n \t\"549174640815550804249337701889745225137095564529448291964230\"\n@@ -9548,35 +9548,35 @@ static const struct test tests[] = {\n \t\"110448209969504483783671382659657251334863763189986240759871\"\n \t\"1389056234111194498836994171142578126e-4952\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x4p-16448, false,\n-\t0x0p+0, false,\n-\t0x4p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x2p-16448, false,\n-\t0x2p-16448, false,\n-\t0x2p-16448, false,\n-\t0x2.000000000004p-16448, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x4p-16448, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x2p-16448, false, true,\n+\t0x2p-16448, false, true,\n+\t0x2p-16448, false, true,\n+\t0x2.000000000004p-16448, false, true),\n   TEST (\"-9.112998829706186506321014834048549540997627039233908359302\"\n \t\"451217570929221583494342023901771564568012993118368368008827\"\n \t\"754917464081555080424933770188974522513709556452944829196423\"\n@@ -9770,35 +9770,35 @@ static const struct test tests[] = {\n \t\"311044820996950448378367138265965725133486376318998624075987\"\n \t\"11389056234111194498836994171142578124e-4952\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x2p-16448, false,\n-\t-0x2p-16448, false,\n-\t-0x1.fffffffffffcp-16448, false,\n-\t-0x1.fffffffffffcp-16448, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x2p-16448, false, true,\n+\t-0x2p-16448, false, true,\n+\t-0x1.fffffffffffcp-16448, false, true,\n+\t-0x1.fffffffffffcp-16448, false, true),\n   TEST (\"-9.112998829706186506321014834048549540997627039233908359302\"\n \t\"451217570929221583494342023901771564568012993118368368008827\"\n \t\"754917464081555080424933770188974522513709556452944829196423\"\n@@ -9992,35 +9992,35 @@ static const struct test tests[] = {\n \t\"311044820996950448378367138265965725133486376318998624075987\"\n \t\"11389056234111194498836994171142578125e-4952\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x2p-16448, false,\n-\t-0x2p-16448, false,\n-\t-0x2p-16448, false,\n-\t-0x2p-16448, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x2p-16448, false, false,\n+\t-0x2p-16448, false, false,\n+\t-0x2p-16448, false, false,\n+\t-0x2p-16448, false, false),\n   TEST (\"-9.112998829706186506321014834048549540997627039233908359302\"\n \t\"451217570929221583494342023901771564568012993118368368008827\"\n \t\"754917464081555080424933770188974522513709556452944829196423\"\n@@ -10214,35 +10214,35 @@ static const struct test tests[] = {\n \t\"311044820996950448378367138265965725133486376318998624075987\"\n \t\"11389056234111194498836994171142578126e-4952\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x2.000000000004p-16448, false,\n-\t-0x2p-16448, false,\n-\t-0x2p-16448, false,\n-\t-0x2p-16448, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16448, false, true,\n+\t-0x4p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x2.000000000004p-16448, false, true,\n+\t-0x2p-16448, false, true,\n+\t-0x2p-16448, false, true,\n+\t-0x2p-16448, false, true),\n   TEST (\"3.2375875597190125554622194791138232762497846690173405048449\"\n \t\"421945985197700620596855088357456383249701279390707384240598\"\n \t\"382936099431912710233425550359863089915213963553756674672083\"\n@@ -10437,35 +10437,35 @@ static const struct test tests[] = {\n \t\"182358152808745703724362178773168996492870519432472065091133\"\n \t\"11767578124e-4966\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-16496, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-16496, false, true),\n   TEST (\"3.2375875597190125554622194791138232762497846690173405048449\"\n \t\"421945985197700620596855088357456383249701279390707384240598\"\n \t\"382936099431912710233425550359863089915213963553756674672083\"\n@@ -10660,35 +10660,35 @@ static const struct test tests[] = {\n \t\"182358152808745703724362178773168996492870519432472065091133\"\n \t\"11767578125e-4966\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-16496, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-16496, false, true),\n   TEST (\"3.2375875597190125554622194791138232762497846690173405048449\"\n \t\"421945985197700620596855088357456383249701279390707384240598\"\n \t\"382936099431912710233425550359863089915213963553756674672083\"\n@@ -10883,35 +10883,35 @@ static const struct test tests[] = {\n \t\"182358152808745703724362178773168996492870519432472065091133\"\n \t\"11767578126e-4966\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x4p-16496, false,\n-\t0x0p+0, false,\n-\t0x4p-16496, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x4p-16496, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-16496, false, true),\n   TEST (\"-3.237587559719012555462219479113823276249784669017340504844\"\n \t\"942194598519770062059685508835745638324970127939070738424059\"\n \t\"838293609943191271023342555035986308991521396355375667467208\"\n@@ -11106,35 +11106,35 @@ static const struct test tests[] = {\n \t\"218235815280874570372436217877316899649287051943247206509113\"\n \t\"311767578124e-4966\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16496, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16496, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true),\n   TEST (\"-3.237587559719012555462219479113823276249784669017340504844\"\n \t\"942194598519770062059685508835745638324970127939070738424059\"\n \t\"838293609943191271023342555035986308991521396355375667467208\"\n@@ -11329,35 +11329,35 @@ static const struct test tests[] = {\n \t\"218235815280874570372436217877316899649287051943247206509113\"\n \t\"311767578125e-4966\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16496, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16496, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true),\n   TEST (\"-3.237587559719012555462219479113823276249784669017340504844\"\n \t\"942194598519770062059685508835745638324970127939070738424059\"\n \t\"838293609943191271023342555035986308991521396355375667467208\"\n@@ -11552,66 +11552,66 @@ static const struct test tests[] = {\n \t\"218235815280874570372436217877316899649287051943247206509113\"\n \t\"311767578126e-4966\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16496, false,\n-\t-0x4p-16496, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16496, false, true,\n+\t-0x4p-16496, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true),\n   TEST (\"340282366920938463463374607431768211455\",\n \tfalse,\n-\t0xf.fffffp+124, false,\n-\tINF, true,\n-\t0xf.fffffp+124, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffff8p+124, false,\n-\t0x1p+128, false,\n-\t0xf.ffffffffffff8p+124, false,\n-\t0x1p+128, false,\n-\tfalse,\n-\t0xf.fffffffffffffffp+124, false,\n-\t0x1p+128, false,\n-\t0xf.fffffffffffffffp+124, false,\n-\t0x1p+128, false,\n-\tfalse,\n-\t0xf.fffffffffffffffp+124, false,\n-\t0x1p+128, false,\n-\t0xf.fffffffffffffffp+124, false,\n-\t0x1p+128, false,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffcp+124, false,\n-\t0x1p+128, false,\n-\t0xf.fffffffffffffffffffffffffcp+124, false,\n-\t0x1p+128, false,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffff8p+124, false,\n-\t0x1p+128, false,\n-\t0xf.fffffffffffffffffffffffffff8p+124, false,\n-\t0x1p+128, false),\n+\t0xf.fffffp+124, false, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffff8p+124, false, false,\n+\t0x1p+128, false, false,\n+\t0xf.ffffffffffff8p+124, false, false,\n+\t0x1p+128, false, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+124, false, false,\n+\t0x1p+128, false, false,\n+\t0xf.fffffffffffffffp+124, false, false,\n+\t0x1p+128, false, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+124, false, false,\n+\t0x1p+128, false, false,\n+\t0xf.fffffffffffffffp+124, false, false,\n+\t0x1p+128, false, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffcp+124, false, false,\n+\t0x1p+128, false, false,\n+\t0xf.fffffffffffffffffffffffffcp+124, false, false,\n+\t0x1p+128, false, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffff8p+124, false, false,\n+\t0x1p+128, false, false,\n+\t0xf.fffffffffffffffffffffffffff8p+124, false, false,\n+\t0x1p+128, false, false),\n   TEST (\"179769313486231590772930519078902473361797697894230657273430\"\n \t\"081157732675805500963132708477322407536021120113879871393357\"\n \t\"658789768814416622492847430639474124377767893424865485276302\"\n@@ -11619,35 +11619,35 @@ static const struct test tests[] = {\n \t\"540827237163350510684586298239947245938479716304835356329624\"\n \t\"224137215\",\n \tfalse,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffff8p+1020, false,\n-\tINF, true,\n-\t0xf.ffffffffffff8p+1020, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+1020, false,\n-\t0x1p+1024, false,\n-\t0xf.fffffffffffffffp+1020, false,\n-\t0x1p+1024, false,\n-\tfalse,\n-\t0xf.fffffffffffffffp+1020, false,\n-\t0x1p+1024, false,\n-\t0xf.fffffffffffffffp+1020, false,\n-\t0x1p+1024, false,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffff8p+1020, false,\n-\t0x1p+1024, false,\n-\t0xf.fffffffffffffffffffffffffff8p+1020, false,\n-\t0x1p+1024, false),\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffff8p+1020, false, false,\n+\tINF, true, false,\n+\t0xf.ffffffffffff8p+1020, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+1020, false, false,\n+\t0x1p+1024, false, false,\n+\t0xf.fffffffffffffffp+1020, false, false,\n+\t0x1p+1024, false, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+1020, false, false,\n+\t0x1p+1024, false, false,\n+\t0xf.fffffffffffffffp+1020, false, false,\n+\t0x1p+1024, false, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffff8p+1020, false, false,\n+\t0x1p+1024, false, false,\n+\t0xf.fffffffffffffffffffffffffff8p+1020, false, false,\n+\t0x1p+1024, false, false),\n   TEST (\"118973149535723176508575932662800713076344468709651023747267\"\n \t\"482123326135818048368690448859547261203991511543748483930925\"\n \t\"889766738130868742627452469834156500608087163436600489752214\"\n@@ -11732,66 +11732,66 @@ static const struct test tests[] = {\n \t\"047398248889922809181821393428829567971736994315246044702729\"\n \t\"0669964066815\",\n \tfalse,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffff8p+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffffffffffffff8p+16380, false,\n-\tINF, true),\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffff8p+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffffffffffffff8p+16380, false, false,\n+\tINF, true, false),\n   TEST (\"-340282366920938463463374607431768211455\",\n \tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffp+124, false,\n-\t-0xf.fffffp+124, false,\n-\tfalse,\n-\t-0x1p+128, false,\n-\t-0x1p+128, false,\n-\t-0xf.ffffffffffff8p+124, false,\n-\t-0xf.ffffffffffff8p+124, false,\n-\tfalse,\n-\t-0x1p+128, false,\n-\t-0x1p+128, false,\n-\t-0xf.fffffffffffffffp+124, false,\n-\t-0xf.fffffffffffffffp+124, false,\n-\tfalse,\n-\t-0x1p+128, false,\n-\t-0x1p+128, false,\n-\t-0xf.fffffffffffffffp+124, false,\n-\t-0xf.fffffffffffffffp+124, false,\n-\tfalse,\n-\t-0x1p+128, false,\n-\t-0x1p+128, false,\n-\t-0xf.fffffffffffffffffffffffffcp+124, false,\n-\t-0xf.fffffffffffffffffffffffffcp+124, false,\n-\tfalse,\n-\t-0x1p+128, false,\n-\t-0x1p+128, false,\n-\t-0xf.fffffffffffffffffffffffffff8p+124, false,\n-\t-0xf.fffffffffffffffffffffffffff8p+124, false),\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, false, false,\n+\t-0xf.fffffp+124, false, false,\n+\tfalse,\n+\t-0x1p+128, false, false,\n+\t-0x1p+128, false, false,\n+\t-0xf.ffffffffffff8p+124, false, false,\n+\t-0xf.ffffffffffff8p+124, false, false,\n+\tfalse,\n+\t-0x1p+128, false, false,\n+\t-0x1p+128, false, false,\n+\t-0xf.fffffffffffffffp+124, false, false,\n+\t-0xf.fffffffffffffffp+124, false, false,\n+\tfalse,\n+\t-0x1p+128, false, false,\n+\t-0x1p+128, false, false,\n+\t-0xf.fffffffffffffffp+124, false, false,\n+\t-0xf.fffffffffffffffp+124, false, false,\n+\tfalse,\n+\t-0x1p+128, false, false,\n+\t-0x1p+128, false, false,\n+\t-0xf.fffffffffffffffffffffffffcp+124, false, false,\n+\t-0xf.fffffffffffffffffffffffffcp+124, false, false,\n+\tfalse,\n+\t-0x1p+128, false, false,\n+\t-0x1p+128, false, false,\n+\t-0xf.fffffffffffffffffffffffffff8p+124, false, false,\n+\t-0xf.fffffffffffffffffffffffffff8p+124, false, false),\n   TEST (\"-17976931348623159077293051907890247336179769789423065727343\"\n \t\"008115773267580550096313270847732240753602112011387987139335\"\n \t\"765878976881441662249284743063947412437776789342486548527630\"\n@@ -11799,35 +11799,35 @@ static const struct test tests[] = {\n \t\"054082723716335051068458629823994724593847971630483535632962\"\n \t\"4224137215\",\n \tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffp+124, true,\n-\t-0xf.fffffp+124, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.ffffffffffff8p+1020, false,\n-\t-0xf.ffffffffffff8p+1020, false,\n-\tfalse,\n-\t-0x1p+1024, false,\n-\t-0x1p+1024, false,\n-\t-0xf.fffffffffffffffp+1020, false,\n-\t-0xf.fffffffffffffffp+1020, false,\n-\tfalse,\n-\t-0x1p+1024, false,\n-\t-0x1p+1024, false,\n-\t-0xf.fffffffffffffffp+1020, false,\n-\t-0xf.fffffffffffffffp+1020, false,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tfalse,\n-\t-0x1p+1024, false,\n-\t-0x1p+1024, false,\n-\t-0xf.fffffffffffffffffffffffffff8p+1020, false,\n-\t-0xf.fffffffffffffffffffffffffff8p+1020, false),\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.ffffffffffff8p+1020, false, false,\n+\t-0xf.ffffffffffff8p+1020, false, false,\n+\tfalse,\n+\t-0x1p+1024, false, false,\n+\t-0x1p+1024, false, false,\n+\t-0xf.fffffffffffffffp+1020, false, false,\n+\t-0xf.fffffffffffffffp+1020, false, false,\n+\tfalse,\n+\t-0x1p+1024, false, false,\n+\t-0x1p+1024, false, false,\n+\t-0xf.fffffffffffffffp+1020, false, false,\n+\t-0xf.fffffffffffffffp+1020, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tfalse,\n+\t-0x1p+1024, false, false,\n+\t-0x1p+1024, false, false,\n+\t-0xf.fffffffffffffffffffffffffff8p+1020, false, false,\n+\t-0xf.fffffffffffffffffffffffffff8p+1020, false, false),\n   TEST (\"-11897314953572317650857593266280071307634446870965102374726\"\n \t\"748212332613581804836869044885954726120399151154374848393092\"\n \t\"588976673813086874262745246983415650060808716343660048975221\"\n@@ -11912,3529 +11912,3529 @@ static const struct test tests[] = {\n \t\"904739824888992280918182139342882956797173699431524604470272\"\n \t\"90669964066815\",\n \tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffp+124, true,\n-\t-0xf.fffffp+124, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.ffffffffffff8p+1020, true,\n-\t-0xf.ffffffffffff8p+1020, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffffffffffffff8p+16380, false,\n-\t-0xf.fffffffffffffffffffffffffff8p+16380, false),\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.ffffffffffff8p+1020, true, false,\n+\t-0xf.ffffffffffff8p+1020, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffffffffffffff8p+16380, false, false,\n+\t-0xf.fffffffffffffffffffffffffff8p+16380, false, false),\n   TEST (\"+0x.80000000000000000000000000000001p1025\",\n \tfalse,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0x1p+1024, false,\n-\t0x1p+1024, false,\n-\t0x1p+1024, false,\n-\t0x1.0000000000000002p+1024, false,\n-\tfalse,\n-\t0x1p+1024, false,\n-\t0x1p+1024, false,\n-\t0x1p+1024, false,\n-\t0x1.0000000000000002p+1024, false,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0x1p+1024, false,\n-\t0x1p+1024, false,\n-\t0x1p+1024, false,\n-\t0x1.0000000000000000000000000001p+1024, false),\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0x1p+1024, false, false,\n+\t0x1p+1024, false, false,\n+\t0x1p+1024, false, false,\n+\t0x1.0000000000000002p+1024, false, false,\n+\tfalse,\n+\t0x1p+1024, false, false,\n+\t0x1p+1024, false, false,\n+\t0x1p+1024, false, false,\n+\t0x1.0000000000000002p+1024, false, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0x1p+1024, false, false,\n+\t0x1p+1024, false, false,\n+\t0x1p+1024, false, false,\n+\t0x1.0000000000000000000000000001p+1024, false, false),\n   TEST (\"1.5\",\n \ttrue,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\ttrue,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\ttrue,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\ttrue,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\ttrue,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\ttrue,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false),\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\ttrue,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\ttrue,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\ttrue,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\ttrue,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\ttrue,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false),\n   TEST (\"1.25\",\n \ttrue,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\ttrue,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\ttrue,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\ttrue,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\ttrue,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\ttrue,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false),\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\ttrue,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\ttrue,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\ttrue,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\ttrue,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\ttrue,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false),\n   TEST (\"1.125\",\n \ttrue,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\ttrue,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\ttrue,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\ttrue,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\ttrue,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\ttrue,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false),\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\ttrue,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\ttrue,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\ttrue,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\ttrue,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\ttrue,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false),\n   TEST (\"1.0625\",\n \ttrue,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\ttrue,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\ttrue,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\ttrue,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\ttrue,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\ttrue,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false),\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\ttrue,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\ttrue,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\ttrue,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\ttrue,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\ttrue,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false),\n   TEST (\"1.03125\",\n \ttrue,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\ttrue,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\ttrue,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\ttrue,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\ttrue,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\ttrue,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false),\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\ttrue,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\ttrue,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\ttrue,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\ttrue,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\ttrue,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false),\n   TEST (\"1.015625\",\n \ttrue,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\ttrue,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\ttrue,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\ttrue,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\ttrue,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\ttrue,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false),\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\ttrue,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\ttrue,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\ttrue,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\ttrue,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\ttrue,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false),\n   TEST (\"1.0078125\",\n \ttrue,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\ttrue,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\ttrue,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\ttrue,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\ttrue,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\ttrue,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false),\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\ttrue,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\ttrue,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\ttrue,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\ttrue,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\ttrue,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false),\n   TEST (\"1.00390625\",\n \ttrue,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\ttrue,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\ttrue,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\ttrue,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\ttrue,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\ttrue,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false),\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\ttrue,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\ttrue,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\ttrue,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\ttrue,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\ttrue,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false),\n   TEST (\"1.001953125\",\n \ttrue,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\ttrue,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\ttrue,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\ttrue,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\ttrue,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\ttrue,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false),\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\ttrue,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\ttrue,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\ttrue,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\ttrue,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\ttrue,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false),\n   TEST (\"1.0009765625\",\n \ttrue,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\ttrue,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\ttrue,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\ttrue,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\ttrue,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\ttrue,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false),\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\ttrue,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\ttrue,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\ttrue,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\ttrue,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\ttrue,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false),\n   TEST (\"1.00048828125\",\n \ttrue,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\ttrue,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\ttrue,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\ttrue,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\ttrue,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\ttrue,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false),\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\ttrue,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\ttrue,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\ttrue,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\ttrue,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\ttrue,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false),\n   TEST (\"1.000244140625\",\n \ttrue,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\ttrue,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\ttrue,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\ttrue,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\ttrue,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\ttrue,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false),\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\ttrue,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\ttrue,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\ttrue,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\ttrue,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\ttrue,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false),\n   TEST (\"1.0001220703125\",\n \ttrue,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\ttrue,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\ttrue,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\ttrue,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\ttrue,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\ttrue,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false),\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\ttrue,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\ttrue,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\ttrue,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\ttrue,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\ttrue,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false),\n   TEST (\"1.00006103515625\",\n \ttrue,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\ttrue,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\ttrue,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\ttrue,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\ttrue,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\ttrue,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false),\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\ttrue,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\ttrue,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\ttrue,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\ttrue,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\ttrue,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false),\n   TEST (\"1.000030517578125\",\n \ttrue,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\ttrue,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\ttrue,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\ttrue,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\ttrue,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\ttrue,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false),\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\ttrue,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\ttrue,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\ttrue,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\ttrue,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\ttrue,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false),\n   TEST (\"1.0000152587890625\",\n \ttrue,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\ttrue,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\ttrue,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\ttrue,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\ttrue,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\ttrue,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false),\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\ttrue,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\ttrue,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\ttrue,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\ttrue,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\ttrue,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false),\n   TEST (\"1.00000762939453125\",\n \ttrue,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\ttrue,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\ttrue,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\ttrue,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\ttrue,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\ttrue,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false),\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\ttrue,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\ttrue,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\ttrue,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\ttrue,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\ttrue,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false),\n   TEST (\"1.000003814697265625\",\n \ttrue,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\ttrue,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\ttrue,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\ttrue,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\ttrue,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\ttrue,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false),\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\ttrue,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\ttrue,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\ttrue,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\ttrue,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\ttrue,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false),\n   TEST (\"1.0000019073486328125\",\n \ttrue,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\ttrue,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\ttrue,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\ttrue,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\ttrue,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\ttrue,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false),\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\ttrue,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\ttrue,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\ttrue,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\ttrue,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\ttrue,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false),\n   TEST (\"1.00000095367431640625\",\n \ttrue,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\ttrue,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\ttrue,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\ttrue,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\ttrue,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\ttrue,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false),\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\ttrue,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\ttrue,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\ttrue,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\ttrue,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\ttrue,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false),\n   TEST (\"1.000000476837158203125\",\n \ttrue,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\ttrue,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\ttrue,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\ttrue,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\ttrue,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\ttrue,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false),\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\ttrue,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\ttrue,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\ttrue,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\ttrue,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\ttrue,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false),\n   TEST (\"1.0000000298023223876953125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false,\n-\ttrue,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false,\n-\ttrue,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false,\n-\ttrue,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false,\n-\ttrue,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false),\n   TEST (\"1.00000001490116119384765625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false,\n-\ttrue,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false,\n-\ttrue,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false,\n-\ttrue,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false,\n-\ttrue,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false),\n   TEST (\"1.000000007450580596923828125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false,\n-\ttrue,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false,\n-\ttrue,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false,\n-\ttrue,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false,\n-\ttrue,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false),\n   TEST (\"1.0000000037252902984619140625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false,\n-\ttrue,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false,\n-\ttrue,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false,\n-\ttrue,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false,\n-\ttrue,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false),\n   TEST (\"1.00000000186264514923095703125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false,\n-\ttrue,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false,\n-\ttrue,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false,\n-\ttrue,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false,\n-\ttrue,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false),\n   TEST (\"1.000000000931322574615478515625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false,\n-\ttrue,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false,\n-\ttrue,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false,\n-\ttrue,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false,\n-\ttrue,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false),\n   TEST (\"1.0000000004656612873077392578125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false,\n-\ttrue,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false,\n-\ttrue,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false,\n-\ttrue,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false,\n-\ttrue,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false),\n   TEST (\"1.00000000023283064365386962890625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false,\n-\ttrue,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false,\n-\ttrue,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false,\n-\ttrue,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false,\n-\ttrue,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false),\n   TEST (\"1.000000000116415321826934814453125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false,\n-\ttrue,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false,\n-\ttrue,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false,\n-\ttrue,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false,\n-\ttrue,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false),\n   TEST (\"1.0000000000582076609134674072265625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false,\n-\ttrue,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false,\n-\ttrue,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false,\n-\ttrue,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false,\n-\ttrue,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false,\n+\ttrue,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false,\n+\ttrue,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false,\n+\ttrue,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false,\n+\ttrue,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false),\n   TEST (\"1.00000000002910383045673370361328125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false,\n-\ttrue,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false,\n-\ttrue,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false,\n-\ttrue,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false,\n-\ttrue,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false),\n   TEST (\"1.000000000014551915228366851806640625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false,\n-\ttrue,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false,\n-\ttrue,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false,\n-\ttrue,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false,\n-\ttrue,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false),\n   TEST (\"1.0000000000072759576141834259033203125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false),\n   TEST (\"1.00000000000363797880709171295166015625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false,\n-\ttrue,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false,\n-\ttrue,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false,\n-\ttrue,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false,\n-\ttrue,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false),\n   TEST (\"1.000000000001818989403545856475830078125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false),\n   TEST (\"1.0000000000009094947017729282379150390625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false),\n   TEST (\"1.00000000000045474735088646411895751953125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false,\n-\ttrue,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false,\n-\ttrue,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false,\n-\ttrue,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false,\n-\ttrue,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false),\n   TEST (\"1.000000000000227373675443232059478759765625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false,\n-\ttrue,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false,\n-\ttrue,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false,\n-\ttrue,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false,\n-\ttrue,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false),\n   TEST (\"1.0000000000001136868377216160297393798828125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false),\n   TEST (\"1.00000000000005684341886080801486968994140625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false),\n   TEST (\"1.000000000000028421709430404007434844970703125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false,\n-\ttrue,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false,\n-\ttrue,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false,\n-\ttrue,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false,\n-\ttrue,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false),\n   TEST (\"1.0000000000000142108547152020037174224853515625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false,\n-\ttrue,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false,\n-\ttrue,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false,\n-\ttrue,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false,\n-\ttrue,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false),\n   TEST (\"1.00000000000000710542735760100185871124267578125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false),\n   TEST (\"1.000000000000003552713678800500929355621337890625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false,\n-\ttrue,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false,\n-\ttrue,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false,\n-\ttrue,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false,\n-\ttrue,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false),\n   TEST (\"1.0000000000000017763568394002504646778106689453125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false),\n   TEST (\"1.00000000000000088817841970012523233890533447265625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false,\n-\ttrue,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false,\n-\ttrue,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false,\n-\ttrue,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false,\n-\ttrue,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false),\n   TEST (\"1.000000000000000444089209850062616169452667236328125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false),\n   TEST (\"1.0000000000000002220446049250313080847263336181640625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false),\n   TEST (\"1.00000000000000011102230246251565404236316680908203125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\ttrue,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\ttrue,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\ttrue,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false),\n   TEST (\"1.000000000000000055511151231257827021181583404541015625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000000004p+0, false,\n-\t0x1.00000000000004p+0, false,\n-\t0x1.00000000000004p+0, false,\n-\t0x1.00000000000004p+0, false,\n-\ttrue,\n-\t0x1.00000000000004p+0, false,\n-\t0x1.00000000000004p+0, false,\n-\t0x1.00000000000004p+0, false,\n-\t0x1.00000000000004p+0, false,\n-\ttrue,\n-\t0x1.00000000000004p+0, false,\n-\t0x1.00000000000004p+0, false,\n-\t0x1.00000000000004p+0, false,\n-\t0x1.00000000000004p+0, false,\n-\ttrue,\n-\t0x1.00000000000004p+0, false,\n-\t0x1.00000000000004p+0, false,\n-\t0x1.00000000000004p+0, false,\n-\t0x1.00000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000004p+0, false, false,\n+\t0x1.00000000000004p+0, false, false,\n+\t0x1.00000000000004p+0, false, false,\n+\t0x1.00000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000004p+0, false, false,\n+\t0x1.00000000000004p+0, false, false,\n+\t0x1.00000000000004p+0, false, false,\n+\t0x1.00000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000004p+0, false, false,\n+\t0x1.00000000000004p+0, false, false,\n+\t0x1.00000000000004p+0, false, false,\n+\t0x1.00000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000004p+0, false, false,\n+\t0x1.00000000000004p+0, false, false,\n+\t0x1.00000000000004p+0, false, false,\n+\t0x1.00000000000004p+0, false, false),\n   TEST (\"1.0000000000000000277555756156289135105907917022705078125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000000002p+0, false,\n-\t0x1.00000000000002p+0, false,\n-\t0x1.00000000000002p+0, false,\n-\t0x1.00000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000002p+0, false,\n-\t0x1.00000000000002p+0, false,\n-\t0x1.00000000000002p+0, false,\n-\t0x1.00000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000002p+0, false,\n-\t0x1.00000000000002p+0, false,\n-\t0x1.00000000000002p+0, false,\n-\t0x1.00000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000002p+0, false,\n-\t0x1.00000000000002p+0, false,\n-\t0x1.00000000000002p+0, false,\n-\t0x1.00000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000002p+0, false, false,\n+\t0x1.00000000000002p+0, false, false,\n+\t0x1.00000000000002p+0, false, false,\n+\t0x1.00000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000002p+0, false, false,\n+\t0x1.00000000000002p+0, false, false,\n+\t0x1.00000000000002p+0, false, false,\n+\t0x1.00000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000002p+0, false, false,\n+\t0x1.00000000000002p+0, false, false,\n+\t0x1.00000000000002p+0, false, false,\n+\t0x1.00000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000002p+0, false, false,\n+\t0x1.00000000000002p+0, false, false,\n+\t0x1.00000000000002p+0, false, false,\n+\t0x1.00000000000002p+0, false, false),\n   TEST (\"1.00000000000000001387778780781445675529539585113525390625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000000001p+0, false,\n-\t0x1.00000000000001p+0, false,\n-\t0x1.00000000000001p+0, false,\n-\t0x1.00000000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000000001p+0, false,\n-\t0x1.00000000000001p+0, false,\n-\t0x1.00000000000001p+0, false,\n-\t0x1.00000000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000000001p+0, false,\n-\t0x1.00000000000001p+0, false,\n-\t0x1.00000000000001p+0, false,\n-\t0x1.00000000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000000001p+0, false,\n-\t0x1.00000000000001p+0, false,\n-\t0x1.00000000000001p+0, false,\n-\t0x1.00000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000001p+0, false, false,\n+\t0x1.00000000000001p+0, false, false,\n+\t0x1.00000000000001p+0, false, false,\n+\t0x1.00000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000001p+0, false, false,\n+\t0x1.00000000000001p+0, false, false,\n+\t0x1.00000000000001p+0, false, false,\n+\t0x1.00000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000001p+0, false, false,\n+\t0x1.00000000000001p+0, false, false,\n+\t0x1.00000000000001p+0, false, false,\n+\t0x1.00000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000001p+0, false, false,\n+\t0x1.00000000000001p+0, false, false,\n+\t0x1.00000000000001p+0, false, false,\n+\t0x1.00000000000001p+0, false, false),\n   TEST (\"1.000000000000000006938893903907228377647697925567626953125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.000000000000008p+0, false,\n-\t0x1.000000000000008p+0, false,\n-\t0x1.000000000000008p+0, false,\n-\t0x1.000000000000008p+0, false,\n-\ttrue,\n-\t0x1.000000000000008p+0, false,\n-\t0x1.000000000000008p+0, false,\n-\t0x1.000000000000008p+0, false,\n-\t0x1.000000000000008p+0, false,\n-\ttrue,\n-\t0x1.000000000000008p+0, false,\n-\t0x1.000000000000008p+0, false,\n-\t0x1.000000000000008p+0, false,\n-\t0x1.000000000000008p+0, false,\n-\ttrue,\n-\t0x1.000000000000008p+0, false,\n-\t0x1.000000000000008p+0, false,\n-\t0x1.000000000000008p+0, false,\n-\t0x1.000000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000008p+0, false, false,\n+\t0x1.000000000000008p+0, false, false,\n+\t0x1.000000000000008p+0, false, false,\n+\t0x1.000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000008p+0, false, false,\n+\t0x1.000000000000008p+0, false, false,\n+\t0x1.000000000000008p+0, false, false,\n+\t0x1.000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000008p+0, false, false,\n+\t0x1.000000000000008p+0, false, false,\n+\t0x1.000000000000008p+0, false, false,\n+\t0x1.000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000008p+0, false, false,\n+\t0x1.000000000000008p+0, false, false,\n+\t0x1.000000000000008p+0, false, false,\n+\t0x1.000000000000008p+0, false, false),\n   TEST (\"1.0000000000000000034694469519536141888238489627838134765625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.000000000000004p+0, false,\n-\t0x1.000000000000004p+0, false,\n-\t0x1.000000000000004p+0, false,\n-\t0x1.000000000000004p+0, false,\n-\ttrue,\n-\t0x1.000000000000004p+0, false,\n-\t0x1.000000000000004p+0, false,\n-\t0x1.000000000000004p+0, false,\n-\t0x1.000000000000004p+0, false,\n-\ttrue,\n-\t0x1.000000000000004p+0, false,\n-\t0x1.000000000000004p+0, false,\n-\t0x1.000000000000004p+0, false,\n-\t0x1.000000000000004p+0, false,\n-\ttrue,\n-\t0x1.000000000000004p+0, false,\n-\t0x1.000000000000004p+0, false,\n-\t0x1.000000000000004p+0, false,\n-\t0x1.000000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000004p+0, false, false,\n+\t0x1.000000000000004p+0, false, false,\n+\t0x1.000000000000004p+0, false, false,\n+\t0x1.000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000004p+0, false, false,\n+\t0x1.000000000000004p+0, false, false,\n+\t0x1.000000000000004p+0, false, false,\n+\t0x1.000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000004p+0, false, false,\n+\t0x1.000000000000004p+0, false, false,\n+\t0x1.000000000000004p+0, false, false,\n+\t0x1.000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000004p+0, false, false,\n+\t0x1.000000000000004p+0, false, false,\n+\t0x1.000000000000004p+0, false, false,\n+\t0x1.000000000000004p+0, false, false),\n   TEST (\"1.0000000000000000017347234759768070944119244813919067382812\"\n \t\"5\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.000000000000002p+0, false,\n-\t0x1.000000000000002p+0, false,\n-\t0x1.000000000000002p+0, false,\n-\t0x1.000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000002p+0, false,\n-\t0x1.000000000000002p+0, false,\n-\t0x1.000000000000002p+0, false,\n-\t0x1.000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000002p+0, false,\n-\t0x1.000000000000002p+0, false,\n-\t0x1.000000000000002p+0, false,\n-\t0x1.000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000002p+0, false,\n-\t0x1.000000000000002p+0, false,\n-\t0x1.000000000000002p+0, false,\n-\t0x1.000000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000002p+0, false, false,\n+\t0x1.000000000000002p+0, false, false,\n+\t0x1.000000000000002p+0, false, false,\n+\t0x1.000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000002p+0, false, false,\n+\t0x1.000000000000002p+0, false, false,\n+\t0x1.000000000000002p+0, false, false,\n+\t0x1.000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000002p+0, false, false,\n+\t0x1.000000000000002p+0, false, false,\n+\t0x1.000000000000002p+0, false, false,\n+\t0x1.000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000002p+0, false, false,\n+\t0x1.000000000000002p+0, false, false,\n+\t0x1.000000000000002p+0, false, false,\n+\t0x1.000000000000002p+0, false, false),\n   TEST (\"1.0000000000000000008673617379884035472059622406959533691406\"\n \t\"25\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.000000000000001p+0, false,\n-\t0x1.000000000000001p+0, false,\n-\t0x1.000000000000001p+0, false,\n-\t0x1.000000000000001p+0, false,\n-\ttrue,\n-\t0x1.000000000000001p+0, false,\n-\t0x1.000000000000001p+0, false,\n-\t0x1.000000000000001p+0, false,\n-\t0x1.000000000000001p+0, false,\n-\ttrue,\n-\t0x1.000000000000001p+0, false,\n-\t0x1.000000000000001p+0, false,\n-\t0x1.000000000000001p+0, false,\n-\t0x1.000000000000001p+0, false,\n-\ttrue,\n-\t0x1.000000000000001p+0, false,\n-\t0x1.000000000000001p+0, false,\n-\t0x1.000000000000001p+0, false,\n-\t0x1.000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000001p+0, false, false,\n+\t0x1.000000000000001p+0, false, false,\n+\t0x1.000000000000001p+0, false, false,\n+\t0x1.000000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000001p+0, false, false,\n+\t0x1.000000000000001p+0, false, false,\n+\t0x1.000000000000001p+0, false, false,\n+\t0x1.000000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000001p+0, false, false,\n+\t0x1.000000000000001p+0, false, false,\n+\t0x1.000000000000001p+0, false, false,\n+\t0x1.000000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000001p+0, false, false,\n+\t0x1.000000000000001p+0, false, false,\n+\t0x1.000000000000001p+0, false, false,\n+\t0x1.000000000000001p+0, false, false),\n   TEST (\"1.0000000000000000004336808689942017736029811203479766845703\"\n \t\"125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000000000008p+0, false,\n-\t0x1.0000000000000008p+0, false,\n-\t0x1.0000000000000008p+0, false,\n-\t0x1.0000000000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000000000008p+0, false,\n-\t0x1.0000000000000008p+0, false,\n-\t0x1.0000000000000008p+0, false,\n-\t0x1.0000000000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000000000008p+0, false,\n-\t0x1.0000000000000008p+0, false,\n-\t0x1.0000000000000008p+0, false,\n-\t0x1.0000000000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000000000008p+0, false,\n-\t0x1.0000000000000008p+0, false,\n-\t0x1.0000000000000008p+0, false,\n-\t0x1.0000000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000008p+0, false, false,\n+\t0x1.0000000000000008p+0, false, false,\n+\t0x1.0000000000000008p+0, false, false,\n+\t0x1.0000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000008p+0, false, false,\n+\t0x1.0000000000000008p+0, false, false,\n+\t0x1.0000000000000008p+0, false, false,\n+\t0x1.0000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000008p+0, false, false,\n+\t0x1.0000000000000008p+0, false, false,\n+\t0x1.0000000000000008p+0, false, false,\n+\t0x1.0000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000008p+0, false, false,\n+\t0x1.0000000000000008p+0, false, false,\n+\t0x1.0000000000000008p+0, false, false,\n+\t0x1.0000000000000008p+0, false, false),\n   TEST (\"1.0000000000000000002168404344971008868014905601739883422851\"\n \t\"5625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000000000004p+0, false,\n-\t0x1.0000000000000004p+0, false,\n-\t0x1.0000000000000004p+0, false,\n-\t0x1.0000000000000004p+0, false,\n-\ttrue,\n-\t0x1.0000000000000004p+0, false,\n-\t0x1.0000000000000004p+0, false,\n-\t0x1.0000000000000004p+0, false,\n-\t0x1.0000000000000004p+0, false,\n-\ttrue,\n-\t0x1.0000000000000004p+0, false,\n-\t0x1.0000000000000004p+0, false,\n-\t0x1.0000000000000004p+0, false,\n-\t0x1.0000000000000004p+0, false,\n-\ttrue,\n-\t0x1.0000000000000004p+0, false,\n-\t0x1.0000000000000004p+0, false,\n-\t0x1.0000000000000004p+0, false,\n-\t0x1.0000000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000004p+0, false, false,\n+\t0x1.0000000000000004p+0, false, false,\n+\t0x1.0000000000000004p+0, false, false,\n+\t0x1.0000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000004p+0, false, false,\n+\t0x1.0000000000000004p+0, false, false,\n+\t0x1.0000000000000004p+0, false, false,\n+\t0x1.0000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000004p+0, false, false,\n+\t0x1.0000000000000004p+0, false, false,\n+\t0x1.0000000000000004p+0, false, false,\n+\t0x1.0000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000004p+0, false, false,\n+\t0x1.0000000000000004p+0, false, false,\n+\t0x1.0000000000000004p+0, false, false,\n+\t0x1.0000000000000004p+0, false, false),\n   TEST (\"1.0000000000000000001084202172485504434007452800869941711425\"\n \t\"78125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000000000002p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000002p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000002p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000002p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\t0x1.0000000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000002p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000002p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000002p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000002p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false),\n   TEST (\"1.0000000000000000000542101086242752217003726400434970855712\"\n \t\"890625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000001p+0, false,\n-\t0x1.0000000000000001p+0, false,\n-\t0x1.0000000000000001p+0, false,\n-\t0x1.0000000000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000000000001p+0, false,\n-\t0x1.0000000000000001p+0, false,\n-\t0x1.0000000000000001p+0, false,\n-\t0x1.0000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000001p+0, false, false,\n+\t0x1.0000000000000001p+0, false, false,\n+\t0x1.0000000000000001p+0, false, false,\n+\t0x1.0000000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000001p+0, false, false,\n+\t0x1.0000000000000001p+0, false, false,\n+\t0x1.0000000000000001p+0, false, false,\n+\t0x1.0000000000000001p+0, false, false),\n   TEST (\"1.0000000000000000000271050543121376108501863200217485427856\"\n \t\"4453125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000008p+0, false,\n-\t0x1.00000000000000008p+0, false,\n-\t0x1.00000000000000008p+0, false,\n-\t0x1.00000000000000008p+0, false,\n-\ttrue,\n-\t0x1.00000000000000008p+0, false,\n-\t0x1.00000000000000008p+0, false,\n-\t0x1.00000000000000008p+0, false,\n-\t0x1.00000000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000008p+0, false, false,\n+\t0x1.00000000000000008p+0, false, false,\n+\t0x1.00000000000000008p+0, false, false,\n+\t0x1.00000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000008p+0, false, false,\n+\t0x1.00000000000000008p+0, false, false,\n+\t0x1.00000000000000008p+0, false, false,\n+\t0x1.00000000000000008p+0, false, false),\n   TEST (\"1.0000000000000000000135525271560688054250931600108742713928\"\n \t\"22265625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000004p+0, false,\n-\t0x1.00000000000000004p+0, false,\n-\t0x1.00000000000000004p+0, false,\n-\t0x1.00000000000000004p+0, false,\n-\ttrue,\n-\t0x1.00000000000000004p+0, false,\n-\t0x1.00000000000000004p+0, false,\n-\t0x1.00000000000000004p+0, false,\n-\t0x1.00000000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000004p+0, false, false,\n+\t0x1.00000000000000004p+0, false, false,\n+\t0x1.00000000000000004p+0, false, false,\n+\t0x1.00000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000004p+0, false, false,\n+\t0x1.00000000000000004p+0, false, false,\n+\t0x1.00000000000000004p+0, false, false,\n+\t0x1.00000000000000004p+0, false, false),\n   TEST (\"1.0000000000000000000067762635780344027125465800054371356964\"\n \t\"111328125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000002p+0, false,\n-\t0x1.00000000000000002p+0, false,\n-\t0x1.00000000000000002p+0, false,\n-\t0x1.00000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000002p+0, false,\n-\t0x1.00000000000000002p+0, false,\n-\t0x1.00000000000000002p+0, false,\n-\t0x1.00000000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000002p+0, false, false,\n+\t0x1.00000000000000002p+0, false, false,\n+\t0x1.00000000000000002p+0, false, false,\n+\t0x1.00000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000002p+0, false, false,\n+\t0x1.00000000000000002p+0, false, false,\n+\t0x1.00000000000000002p+0, false, false,\n+\t0x1.00000000000000002p+0, false, false),\n   TEST (\"1.0000000000000000000033881317890172013562732900027185678482\"\n \t\"0556640625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000001p+0, false,\n-\t0x1.00000000000000001p+0, false,\n-\t0x1.00000000000000001p+0, false,\n-\t0x1.00000000000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000000000001p+0, false,\n-\t0x1.00000000000000001p+0, false,\n-\t0x1.00000000000000001p+0, false,\n-\t0x1.00000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000001p+0, false, false,\n+\t0x1.00000000000000001p+0, false, false,\n+\t0x1.00000000000000001p+0, false, false,\n+\t0x1.00000000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000001p+0, false, false,\n+\t0x1.00000000000000001p+0, false, false,\n+\t0x1.00000000000000001p+0, false, false,\n+\t0x1.00000000000000001p+0, false, false),\n   TEST (\"1.0000000000000000000016940658945086006781366450013592839241\"\n \t\"02783203125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000008p+0, false,\n-\t0x1.000000000000000008p+0, false,\n-\t0x1.000000000000000008p+0, false,\n-\t0x1.000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.000000000000000008p+0, false,\n-\t0x1.000000000000000008p+0, false,\n-\t0x1.000000000000000008p+0, false,\n-\t0x1.000000000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000008p+0, false, false,\n+\t0x1.000000000000000008p+0, false, false,\n+\t0x1.000000000000000008p+0, false, false,\n+\t0x1.000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000008p+0, false, false,\n+\t0x1.000000000000000008p+0, false, false,\n+\t0x1.000000000000000008p+0, false, false,\n+\t0x1.000000000000000008p+0, false, false),\n   TEST (\"1.0000000000000000000008470329472543003390683225006796419620\"\n \t\"513916015625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000004p+0, false,\n-\t0x1.000000000000000004p+0, false,\n-\t0x1.000000000000000004p+0, false,\n-\t0x1.000000000000000004p+0, false,\n-\ttrue,\n-\t0x1.000000000000000004p+0, false,\n-\t0x1.000000000000000004p+0, false,\n-\t0x1.000000000000000004p+0, false,\n-\t0x1.000000000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000004p+0, false, false,\n+\t0x1.000000000000000004p+0, false, false,\n+\t0x1.000000000000000004p+0, false, false,\n+\t0x1.000000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000004p+0, false, false,\n+\t0x1.000000000000000004p+0, false, false,\n+\t0x1.000000000000000004p+0, false, false,\n+\t0x1.000000000000000004p+0, false, false),\n   TEST (\"1.0000000000000000000004235164736271501695341612503398209810\"\n \t\"2569580078125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000002p+0, false,\n-\t0x1.000000000000000002p+0, false,\n-\t0x1.000000000000000002p+0, false,\n-\t0x1.000000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000002p+0, false,\n-\t0x1.000000000000000002p+0, false,\n-\t0x1.000000000000000002p+0, false,\n-\t0x1.000000000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000002p+0, false, false,\n+\t0x1.000000000000000002p+0, false, false,\n+\t0x1.000000000000000002p+0, false, false,\n+\t0x1.000000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000002p+0, false, false,\n+\t0x1.000000000000000002p+0, false, false,\n+\t0x1.000000000000000002p+0, false, false,\n+\t0x1.000000000000000002p+0, false, false),\n   TEST (\"1.0000000000000000000002117582368135750847670806251699104905\"\n \t\"12847900390625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000001p+0, false,\n-\t0x1.000000000000000001p+0, false,\n-\t0x1.000000000000000001p+0, false,\n-\t0x1.000000000000000001p+0, false,\n-\ttrue,\n-\t0x1.000000000000000001p+0, false,\n-\t0x1.000000000000000001p+0, false,\n-\t0x1.000000000000000001p+0, false,\n-\t0x1.000000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000001p+0, false, false,\n+\t0x1.000000000000000001p+0, false, false,\n+\t0x1.000000000000000001p+0, false, false,\n+\t0x1.000000000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000001p+0, false, false,\n+\t0x1.000000000000000001p+0, false, false,\n+\t0x1.000000000000000001p+0, false, false,\n+\t0x1.000000000000000001p+0, false, false),\n   TEST (\"1.0000000000000000000001058791184067875423835403125849552452\"\n \t\"564239501953125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000008p+0, false,\n-\t0x1.0000000000000000008p+0, false,\n-\t0x1.0000000000000000008p+0, false,\n-\t0x1.0000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000008p+0, false,\n-\t0x1.0000000000000000008p+0, false,\n-\t0x1.0000000000000000008p+0, false,\n-\t0x1.0000000000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000008p+0, false, false,\n+\t0x1.0000000000000000008p+0, false, false,\n+\t0x1.0000000000000000008p+0, false, false,\n+\t0x1.0000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000008p+0, false, false,\n+\t0x1.0000000000000000008p+0, false, false,\n+\t0x1.0000000000000000008p+0, false, false,\n+\t0x1.0000000000000000008p+0, false, false),\n   TEST (\"1.0000000000000000000000529395592033937711917701562924776226\"\n \t\"2821197509765625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000004p+0, false,\n-\t0x1.0000000000000000004p+0, false,\n-\t0x1.0000000000000000004p+0, false,\n-\t0x1.0000000000000000004p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000004p+0, false,\n-\t0x1.0000000000000000004p+0, false,\n-\t0x1.0000000000000000004p+0, false,\n-\t0x1.0000000000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000004p+0, false, false,\n+\t0x1.0000000000000000004p+0, false, false,\n+\t0x1.0000000000000000004p+0, false, false,\n+\t0x1.0000000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000004p+0, false, false,\n+\t0x1.0000000000000000004p+0, false, false,\n+\t0x1.0000000000000000004p+0, false, false,\n+\t0x1.0000000000000000004p+0, false, false),\n   TEST (\"1.0000000000000000000000264697796016968855958850781462388113\"\n \t\"14105987548828125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000002p+0, false,\n-\t0x1.0000000000000000002p+0, false,\n-\t0x1.0000000000000000002p+0, false,\n-\t0x1.0000000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000002p+0, false,\n-\t0x1.0000000000000000002p+0, false,\n-\t0x1.0000000000000000002p+0, false,\n-\t0x1.0000000000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000002p+0, false, false,\n+\t0x1.0000000000000000002p+0, false, false,\n+\t0x1.0000000000000000002p+0, false, false,\n+\t0x1.0000000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000002p+0, false, false,\n+\t0x1.0000000000000000002p+0, false, false,\n+\t0x1.0000000000000000002p+0, false, false,\n+\t0x1.0000000000000000002p+0, false, false),\n   TEST (\"1.0000000000000000000000132348898008484427979425390731194056\"\n \t\"570529937744140625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000001p+0, false,\n-\t0x1.0000000000000000001p+0, false,\n-\t0x1.0000000000000000001p+0, false,\n-\t0x1.0000000000000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000001p+0, false,\n-\t0x1.0000000000000000001p+0, false,\n-\t0x1.0000000000000000001p+0, false,\n-\t0x1.0000000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000001p+0, false, false,\n+\t0x1.0000000000000000001p+0, false, false,\n+\t0x1.0000000000000000001p+0, false, false,\n+\t0x1.0000000000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000001p+0, false, false,\n+\t0x1.0000000000000000001p+0, false, false,\n+\t0x1.0000000000000000001p+0, false, false,\n+\t0x1.0000000000000000001p+0, false, false),\n   TEST (\"1.0000000000000000000000066174449004242213989712695365597028\"\n \t\"2852649688720703125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000008p+0, false,\n-\t0x1.00000000000000000008p+0, false,\n-\t0x1.00000000000000000008p+0, false,\n-\t0x1.00000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000008p+0, false,\n-\t0x1.00000000000000000008p+0, false,\n-\t0x1.00000000000000000008p+0, false,\n-\t0x1.00000000000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000008p+0, false, false,\n+\t0x1.00000000000000000008p+0, false, false,\n+\t0x1.00000000000000000008p+0, false, false,\n+\t0x1.00000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000008p+0, false, false,\n+\t0x1.00000000000000000008p+0, false, false,\n+\t0x1.00000000000000000008p+0, false, false,\n+\t0x1.00000000000000000008p+0, false, false),\n   TEST (\"1.0000000000000000000000033087224502121106994856347682798514\"\n \t\"14263248443603515625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000004p+0, false,\n-\t0x1.00000000000000000004p+0, false,\n-\t0x1.00000000000000000004p+0, false,\n-\t0x1.00000000000000000004p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000004p+0, false,\n-\t0x1.00000000000000000004p+0, false,\n-\t0x1.00000000000000000004p+0, false,\n-\t0x1.00000000000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000004p+0, false, false,\n+\t0x1.00000000000000000004p+0, false, false,\n+\t0x1.00000000000000000004p+0, false, false,\n+\t0x1.00000000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000004p+0, false, false,\n+\t0x1.00000000000000000004p+0, false, false,\n+\t0x1.00000000000000000004p+0, false, false,\n+\t0x1.00000000000000000004p+0, false, false),\n   TEST (\"1.0000000000000000000000016543612251060553497428173841399257\"\n \t\"071316242218017578125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000002p+0, false,\n-\t0x1.00000000000000000002p+0, false,\n-\t0x1.00000000000000000002p+0, false,\n-\t0x1.00000000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000002p+0, false,\n-\t0x1.00000000000000000002p+0, false,\n-\t0x1.00000000000000000002p+0, false,\n-\t0x1.00000000000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000002p+0, false, false,\n+\t0x1.00000000000000000002p+0, false, false,\n+\t0x1.00000000000000000002p+0, false, false,\n+\t0x1.00000000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000002p+0, false, false,\n+\t0x1.00000000000000000002p+0, false, false,\n+\t0x1.00000000000000000002p+0, false, false,\n+\t0x1.00000000000000000002p+0, false, false),\n   TEST (\"1.0000000000000000000000008271806125530276748714086920699628\"\n \t\"5356581211090087890625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000001p+0, false,\n-\t0x1.00000000000000000001p+0, false,\n-\t0x1.00000000000000000001p+0, false,\n-\t0x1.00000000000000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000001p+0, false,\n-\t0x1.00000000000000000001p+0, false,\n-\t0x1.00000000000000000001p+0, false,\n-\t0x1.00000000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000001p+0, false, false,\n+\t0x1.00000000000000000001p+0, false, false,\n+\t0x1.00000000000000000001p+0, false, false,\n+\t0x1.00000000000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000001p+0, false, false,\n+\t0x1.00000000000000000001p+0, false, false,\n+\t0x1.00000000000000000001p+0, false, false,\n+\t0x1.00000000000000000001p+0, false, false),\n   TEST (\"1.0000000000000000000000004135903062765138374357043460349814\"\n \t\"26782906055450439453125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000008p+0, false,\n-\t0x1.000000000000000000008p+0, false,\n-\t0x1.000000000000000000008p+0, false,\n-\t0x1.000000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000008p+0, false,\n-\t0x1.000000000000000000008p+0, false,\n-\t0x1.000000000000000000008p+0, false,\n-\t0x1.000000000000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000008p+0, false, false),\n   TEST (\"1.0000000000000000000000002067951531382569187178521730174907\"\n \t\"133914530277252197265625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000004p+0, false,\n-\t0x1.000000000000000000004p+0, false,\n-\t0x1.000000000000000000004p+0, false,\n-\t0x1.000000000000000000004p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000004p+0, false,\n-\t0x1.000000000000000000004p+0, false,\n-\t0x1.000000000000000000004p+0, false,\n-\t0x1.000000000000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000004p+0, false, false),\n   TEST (\"1.0000000000000000000000001033975765691284593589260865087453\"\n \t\"5669572651386260986328125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000002p+0, false,\n-\t0x1.000000000000000000002p+0, false,\n-\t0x1.000000000000000000002p+0, false,\n-\t0x1.000000000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000002p+0, false,\n-\t0x1.000000000000000000002p+0, false,\n-\t0x1.000000000000000000002p+0, false,\n-\t0x1.000000000000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000002p+0, false, false),\n   TEST (\"1.0000000000000000000000000516987882845642296794630432543726\"\n \t\"78347863256931304931640625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000001p+0, false,\n-\t0x1.000000000000000000001p+0, false,\n-\t0x1.000000000000000000001p+0, false,\n-\t0x1.000000000000000000001p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000001p+0, false,\n-\t0x1.000000000000000000001p+0, false,\n-\t0x1.000000000000000000001p+0, false,\n-\t0x1.000000000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000001p+0, false, false),\n   TEST (\"1.0000000000000000000000000258493941422821148397315216271863\"\n \t\"391739316284656524658203125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000008p+0, false,\n-\t0x1.0000000000000000000008p+0, false,\n-\t0x1.0000000000000000000008p+0, false,\n-\t0x1.0000000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000008p+0, false,\n-\t0x1.0000000000000000000008p+0, false,\n-\t0x1.0000000000000000000008p+0, false,\n-\t0x1.0000000000000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000008p+0, false, false),\n   TEST (\"1.0000000000000000000000000129246970711410574198657608135931\"\n \t\"6958696581423282623291015625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000004p+0, false,\n-\t0x1.0000000000000000000004p+0, false,\n-\t0x1.0000000000000000000004p+0, false,\n-\t0x1.0000000000000000000004p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000004p+0, false,\n-\t0x1.0000000000000000000004p+0, false,\n-\t0x1.0000000000000000000004p+0, false,\n-\t0x1.0000000000000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000004p+0, false, false),\n   TEST (\"1.0000000000000000000000000064623485355705287099328804067965\"\n \t\"84793482907116413116455078125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000002p+0, false,\n-\t0x1.0000000000000000000002p+0, false,\n-\t0x1.0000000000000000000002p+0, false,\n-\t0x1.0000000000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000002p+0, false,\n-\t0x1.0000000000000000000002p+0, false,\n-\t0x1.0000000000000000000002p+0, false,\n-\t0x1.0000000000000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000002p+0, false, false),\n   TEST (\"1.0000000000000000000000000032311742677852643549664402033982\"\n \t\"923967414535582065582275390625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000001p+0, false,\n-\t0x1.0000000000000000000001p+0, false,\n-\t0x1.0000000000000000000001p+0, false,\n-\t0x1.0000000000000000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000001p+0, false,\n-\t0x1.0000000000000000000001p+0, false,\n-\t0x1.0000000000000000000001p+0, false,\n-\t0x1.0000000000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000001p+0, false, false),\n   TEST (\"1.0000000000000000000000000016155871338926321774832201016991\"\n \t\"4619837072677910327911376953125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000008p+0, false,\n-\t0x1.00000000000000000000008p+0, false,\n-\t0x1.00000000000000000000008p+0, false,\n-\t0x1.00000000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000008p+0, false,\n-\t0x1.00000000000000000000008p+0, false,\n-\t0x1.00000000000000000000008p+0, false,\n-\t0x1.00000000000000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000008p+0, false, false,\n+\t0x1.00000000000000000000008p+0, false, false,\n+\t0x1.00000000000000000000008p+0, false, false,\n+\t0x1.00000000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000008p+0, false, false,\n+\t0x1.00000000000000000000008p+0, false, false,\n+\t0x1.00000000000000000000008p+0, false, false,\n+\t0x1.00000000000000000000008p+0, false, false),\n   TEST (\"1.0000000000000000000000000008077935669463160887416100508495\"\n \t\"73099185363389551639556884765625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000004p+0, false,\n-\t0x1.00000000000000000000004p+0, false,\n-\t0x1.00000000000000000000004p+0, false,\n-\t0x1.00000000000000000000004p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000004p+0, false,\n-\t0x1.00000000000000000000004p+0, false,\n-\t0x1.00000000000000000000004p+0, false,\n-\t0x1.00000000000000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000004p+0, false, false,\n+\t0x1.00000000000000000000004p+0, false, false,\n+\t0x1.00000000000000000000004p+0, false, false,\n+\t0x1.00000000000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000004p+0, false, false,\n+\t0x1.00000000000000000000004p+0, false, false,\n+\t0x1.00000000000000000000004p+0, false, false,\n+\t0x1.00000000000000000000004p+0, false, false),\n   TEST (\"1.0000000000000000000000000004038967834731580443708050254247\"\n \t\"865495926816947758197784423828125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000002p+0, false,\n-\t0x1.00000000000000000000002p+0, false,\n-\t0x1.00000000000000000000002p+0, false,\n-\t0x1.00000000000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000002p+0, false,\n-\t0x1.00000000000000000000002p+0, false,\n-\t0x1.00000000000000000000002p+0, false,\n-\t0x1.00000000000000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000002p+0, false, false,\n+\t0x1.00000000000000000000002p+0, false, false,\n+\t0x1.00000000000000000000002p+0, false, false,\n+\t0x1.00000000000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000002p+0, false, false,\n+\t0x1.00000000000000000000002p+0, false, false,\n+\t0x1.00000000000000000000002p+0, false, false,\n+\t0x1.00000000000000000000002p+0, false, false),\n   TEST (\"1.0000000000000000000000000002019483917365790221854025127123\"\n \t\"9327479634084738790988922119140625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000001p+0, false,\n-\t0x1.00000000000000000000001p+0, false,\n-\t0x1.00000000000000000000001p+0, false,\n-\t0x1.00000000000000000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000001p+0, false,\n-\t0x1.00000000000000000000001p+0, false,\n-\t0x1.00000000000000000000001p+0, false,\n-\t0x1.00000000000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000001p+0, false, false,\n+\t0x1.00000000000000000000001p+0, false, false,\n+\t0x1.00000000000000000000001p+0, false, false,\n+\t0x1.00000000000000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000001p+0, false, false,\n+\t0x1.00000000000000000000001p+0, false, false,\n+\t0x1.00000000000000000000001p+0, false, false,\n+\t0x1.00000000000000000000001p+0, false, false),\n   TEST (\"1.0000000000000000000000000001009741958682895110927012563561\"\n \t\"96637398170423693954944610595703125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000000008p+0, false,\n-\t0x1.000000000000000000000008p+0, false,\n-\t0x1.000000000000000000000008p+0, false,\n-\t0x1.000000000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000000008p+0, false,\n-\t0x1.000000000000000000000008p+0, false,\n-\t0x1.000000000000000000000008p+0, false,\n-\t0x1.000000000000000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000000008p+0, false, false),\n   TEST (\"1.0000000000000000000000000000504870979341447555463506281780\"\n \t\"983186990852118469774723052978515625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000000004p+0, false,\n-\t0x1.000000000000000000000004p+0, false,\n-\t0x1.000000000000000000000004p+0, false,\n-\t0x1.000000000000000000000004p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000000004p+0, false,\n-\t0x1.000000000000000000000004p+0, false,\n-\t0x1.000000000000000000000004p+0, false,\n-\t0x1.000000000000000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000000004p+0, false, false),\n   TEST (\"1.0000000000000000000000000000252435489670723777731753140890\"\n \t\"4915934954260592348873615264892578125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000000002p+0, false,\n-\t0x1.000000000000000000000002p+0, false,\n-\t0x1.000000000000000000000002p+0, false,\n-\t0x1.000000000000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000000002p+0, false,\n-\t0x1.000000000000000000000002p+0, false,\n-\t0x1.000000000000000000000002p+0, false,\n-\t0x1.000000000000000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000000002p+0, false, false),\n   TEST (\"1.0000000000000000000000000000126217744835361888865876570445\"\n \t\"24579674771302961744368076324462890625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000000001p+0, false,\n-\t0x1.000000000000000000000001p+0, false,\n-\t0x1.000000000000000000000001p+0, false,\n-\t0x1.000000000000000000000001p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000000001p+0, false,\n-\t0x1.000000000000000000000001p+0, false,\n-\t0x1.000000000000000000000001p+0, false,\n-\t0x1.000000000000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000000001p+0, false, false),\n   TEST (\"1.0000000000000000000000000000063108872417680944432938285222\"\n \t\"622898373856514808721840381622314453125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000000008p+0, false,\n-\t0x1.0000000000000000000000008p+0, false,\n-\t0x1.0000000000000000000000008p+0, false,\n-\t0x1.0000000000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000000008p+0, false,\n-\t0x1.0000000000000000000000008p+0, false,\n-\t0x1.0000000000000000000000008p+0, false,\n-\t0x1.0000000000000000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000000008p+0, false, false),\n   TEST (\"1.0000000000000000000000000000031554436208840472216469142611\"\n \t\"3114491869282574043609201908111572265625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000000004p+0, false,\n-\t0x1.0000000000000000000000004p+0, false,\n-\t0x1.0000000000000000000000004p+0, false,\n-\t0x1.0000000000000000000000004p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000000004p+0, false,\n-\t0x1.0000000000000000000000004p+0, false,\n-\t0x1.0000000000000000000000004p+0, false,\n-\t0x1.0000000000000000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000000004p+0, false, false),\n   TEST (\"1.0000000000000000000000000000015777218104420236108234571305\"\n \t\"65572459346412870218046009540557861328125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000000002p+0, false,\n-\t0x1.0000000000000000000000002p+0, false,\n-\t0x1.0000000000000000000000002p+0, false,\n-\t0x1.0000000000000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000000002p+0, false,\n-\t0x1.0000000000000000000000002p+0, false,\n-\t0x1.0000000000000000000000002p+0, false,\n-\t0x1.0000000000000000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000000002p+0, false, false),\n   TEST (\"1.0000000000000000000000000000007888609052210118054117285652\"\n \t\"827862296732064351090230047702789306640625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000000001p+0, false,\n-\t0x1.0000000000000000000000001p+0, false,\n-\t0x1.0000000000000000000000001p+0, false,\n-\t0x1.0000000000000000000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000000001p+0, false,\n-\t0x1.0000000000000000000000001p+0, false,\n-\t0x1.0000000000000000000000001p+0, false,\n-\t0x1.0000000000000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000000001p+0, false, false),\n   TEST (\"1.0000000000000000000000000000003944304526105059027058642826\"\n \t\"4139311483660321755451150238513946533203125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000000008p+0, false,\n-\t0x1.00000000000000000000000008p+0, false,\n-\t0x1.00000000000000000000000008p+0, false,\n-\t0x1.00000000000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000000008p+0, false,\n-\t0x1.00000000000000000000000008p+0, false,\n-\t0x1.00000000000000000000000008p+0, false,\n-\t0x1.00000000000000000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000000008p+0, false, false,\n+\t0x1.00000000000000000000000008p+0, false, false,\n+\t0x1.00000000000000000000000008p+0, false, false,\n+\t0x1.00000000000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000000008p+0, false, false,\n+\t0x1.00000000000000000000000008p+0, false, false,\n+\t0x1.00000000000000000000000008p+0, false, false,\n+\t0x1.00000000000000000000000008p+0, false, false),\n   TEST (\"1.0000000000000000000000000000001972152263052529513529321413\"\n \t\"20696557418301608777255751192569732666015625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000000004p+0, false,\n-\t0x1.00000000000000000000000004p+0, false,\n-\t0x1.00000000000000000000000004p+0, false,\n-\t0x1.00000000000000000000000004p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000000004p+0, false,\n-\t0x1.00000000000000000000000004p+0, false,\n-\t0x1.00000000000000000000000004p+0, false,\n-\t0x1.00000000000000000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000000004p+0, false, false,\n+\t0x1.00000000000000000000000004p+0, false, false,\n+\t0x1.00000000000000000000000004p+0, false, false,\n+\t0x1.00000000000000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000000004p+0, false, false,\n+\t0x1.00000000000000000000000004p+0, false, false,\n+\t0x1.00000000000000000000000004p+0, false, false,\n+\t0x1.00000000000000000000000004p+0, false, false),\n   TEST (\"1.0000000000000000000000000000000986076131526264756764660706\"\n \t\"603482787091508043886278755962848663330078125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000000002p+0, false,\n-\t0x1.00000000000000000000000002p+0, false,\n-\t0x1.00000000000000000000000002p+0, false,\n-\t0x1.00000000000000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000000002p+0, false,\n-\t0x1.00000000000000000000000002p+0, false,\n-\t0x1.00000000000000000000000002p+0, false,\n-\t0x1.00000000000000000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000000002p+0, false, false,\n+\t0x1.00000000000000000000000002p+0, false, false,\n+\t0x1.00000000000000000000000002p+0, false, false,\n+\t0x1.00000000000000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000000002p+0, false, false,\n+\t0x1.00000000000000000000000002p+0, false, false,\n+\t0x1.00000000000000000000000002p+0, false, false,\n+\t0x1.00000000000000000000000002p+0, false, false),\n   TEST (\"1.0000000000000000000000000000000493038065763132378382330353\"\n \t\"3017413935457540219431393779814243316650390625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000000001p+0, false,\n-\t0x1.00000000000000000000000001p+0, false,\n-\t0x1.00000000000000000000000001p+0, false,\n-\t0x1.00000000000000000000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000000001p+0, false,\n-\t0x1.00000000000000000000000001p+0, false,\n-\t0x1.00000000000000000000000001p+0, false,\n-\t0x1.00000000000000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000000001p+0, false, false,\n+\t0x1.00000000000000000000000001p+0, false, false,\n+\t0x1.00000000000000000000000001p+0, false, false,\n+\t0x1.00000000000000000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000000001p+0, false, false,\n+\t0x1.00000000000000000000000001p+0, false, false,\n+\t0x1.00000000000000000000000001p+0, false, false,\n+\t0x1.00000000000000000000000001p+0, false, false),\n   TEST (\"1.0000000000000000000000000000000246519032881566189191165176\"\n \t\"65087069677287701097156968899071216583251953125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000000000008p+0, false,\n-\t0x1.000000000000000000000000008p+0, false,\n-\t0x1.000000000000000000000000008p+0, false,\n-\t0x1.000000000000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000000000008p+0, false,\n-\t0x1.000000000000000000000000008p+0, false,\n-\t0x1.000000000000000000000000008p+0, false,\n-\t0x1.000000000000000000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000000000008p+0, false, false),\n   TEST (\"1.0000000000000000000000000000000123259516440783094595582588\"\n \t\"325435348386438505485784844495356082916259765625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000000000000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000000000004p+0, false,\n-\t0x1.000000000000000000000000004p+0, false,\n-\t0x1.000000000000000000000000004p+0, false,\n-\t0x1.000000000000000000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000000000004p+0, false, false),\n   TEST (\"1.0000000000000000000000000000000061629758220391547297791294\"\n \t\"1627176741932192527428924222476780414581298828125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000000000000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000000000002p+0, false,\n-\t0x1.000000000000000000000000002p+0, false,\n-\t0x1.000000000000000000000000002p+0, false,\n-\t0x1.000000000000000000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000000000002p+0, false, false),\n   TEST (\"1.0000000000000000000000000000000030814879110195773648895647\"\n \t\"08135883709660962637144621112383902072906494140625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000000000000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000000000001p+0, false,\n-\t0x1.000000000000000000000000001p+0, false,\n-\t0x1.000000000000000000000000001p+0, false,\n-\t0x1.000000000000000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000000000001p+0, false, false),\n   TEST (\"1.0000000000000000000000000000000015407439555097886824447823\"\n \t\"540679418548304813185723105561919510364532470703125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000000000000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000000000008p+0, false,\n-\t0x1.0000000000000000000000000008p+0, false,\n-\t0x1.0000000000000000000000000008p+0, false,\n-\t0x1.0000000000000000000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000000000008p+0, false, false),\n   TEST (\"1.0000000000000000000000000000000007703719777548943412223911\"\n \t\"7703397092741524065928615527809597551822662353515625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000000000000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000000000004p+0, false,\n-\t0x1.0000000000000000000000000004p+0, false,\n-\t0x1.0000000000000000000000000004p+0, false,\n-\t0x1.0000000000000000000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000000000004p+0, false, false),\n   TEST (\"1.0000000000000000000000000000000003851859888774471706111955\"\n \t\"88516985463707620329643077639047987759113311767578125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000000000000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000000000002p+0, false,\n-\t0x1.0000000000000000000000000002p+0, false,\n-\t0x1.0000000000000000000000000002p+0, false,\n-\t0x1.0000000000000000000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000000000002p+0, false, false),\n   TEST (\"1.0000000000000000000000000000000001925929944387235853055977\"\n \t\"942584927318538101648215388195239938795566558837890625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000000000000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000000000001p+0, false,\n-\t0x1.0000000000000000000000000001p+0, false,\n-\t0x1.0000000000000000000000000001p+0, false,\n-\t0x1.0000000000000000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000000000001p+0, false, false),\n   TEST (\"1.0000000000000000000000000000000000962964972193617926527988\"\n \t\"9712924636592690508241076940976199693977832794189453125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000000000000000000000000008p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000000000000000001p+0, false, false),\n };\ndiff --git a/stdlib/tst-strtod-round-skeleton.c b/stdlib/tst-strtod-round-skeleton.c\nindex c3cc0201d4..be081ba416 100644\n--- a/stdlib/tst-strtod-round-skeleton.c\n+++ b/stdlib/tst-strtod-round-skeleton.c\n@@ -30,6 +30,7 @@\n #include <stdlib.h>\n #include <string.h>\n #include <math-tests.h>\n+#include <tininess.h>\n \n #include \"tst-strtod.h\"\n \n@@ -139,16 +140,26 @@\n    gen-tst-strtod-round utility to select the appropriately\n    rounded long double value for a given format.  */\n #define TEST(s,\t\t\t\t\t\t\t\\\n-\t     fx, fd, fdo, fn, fno, fz, fzo, fu, fuo,\t\t\\\n-\t     dx, dd, ddo, dn, dno, dz, dzo, du, duo,\t\t\\\n-\t     ld64ix, ld64id, ld64ido, ld64in, ld64ino,\t\t\\\n-\t     ld64iz, ld64izo, ld64iu, ld64iuo,\t\t\t\\\n-\t     ld64mx, ld64md, ld64mdo, ld64mn, ld64mno,\t\t\\\n-\t     ld64mz, ld64mzo, ld64mu, ld64muo,\t\t\t\\\n-\t     ld106x, ld106d, ld106do, ld106n, ld106no,\t\t\\\n-\t     ld106z, ld106zo, ld106u, ld106uo,\t\t\t\\\n-\t     ld113x, ld113d, ld113do, ld113n, ld113no,\t\t\\\n-\t     ld113z, ld113zo, ld113u, ld113uo)\t\t\t\\\n+\t     fx, fd, fdo, fdu, fn, fno, fnu,\t\t\t\\\n+\t     fz, fzo, fzu, fu, fuo, fuu,\t\t\t\\\n+\t     dx, dd, ddo, ddu, dn, dno, dnu,\t\t\t\\\n+\t     dz, dzo, dzu, du, duo, duu,\t\t\t\\\n+\t     ld64ix, ld64id, ld64ido, ld64idu,\t\t\t\\\n+\t     ld64in, ld64ino, ld64inu,\t\t\t\t\\\n+\t     ld64iz, ld64izo, ld64izu,\t\t\t\t\\\n+\t     ld64iu, ld64iuo, ld64iuu,\t\t\t\t\\\n+\t     ld64mx, ld64md, ld64mdo, ld64mdu,\t\t\t\\\n+\t     ld64mn, ld64mno, ld64mnu,\t\t\t\t\\\n+\t     ld64mz, ld64mzo, ld64mzu,\t\t\t\t\\\n+\t     ld64mu, ld64muo, ld64muu,\t\t\t\t\\\n+\t     ld106x, ld106d, ld106do, ld106du,\t\t\t\\\n+\t     ld106n, ld106no, ld106nu,\t\t\t\t\\\n+\t     ld106z, ld106zo, ld106zu,\t\t\t\t\\\n+\t     ld106u, ld106uo, ld106uu,\t\t\t\t\\\n+\t     ld113x, ld113d, ld113do, ld113du,\t\t\t\\\n+\t     ld113n, ld113no, ld113nu,\t\t\t\t\\\n+\t     ld113z, ld113zo, ld113zu,\t\t\t\t\\\n+\t     ld113u, ld113uo, ld113uu)\t\t\t\t\\\n   {\t\t\t\t\t\t\t\t\\\n     L_ (s),\t\t\t\t\t\t\t\\\n     { XNTRY (fx, dx, ld64ix, ld64mx, ld106x, ld113x) },\t\t\\\n@@ -163,6 +174,12 @@\n     { XNTRY (fdo, ddo, ld64ido, ld64mdo, ld106do, ld113do) },\t\\\n     { XNTRY (fzo, dzo, ld64izo, ld64mzo, ld106zo, ld113zo) },\t\\\n     { XNTRY (fuo, duo, ld64iuo, ld64muo, ld106uo, ld113uo) }\t\\\n+    },\t\t\t\t\t\t\t\t\\\n+    {\t\t\t\t\t\t\t\t\\\n+    { XNTRY (fnu, dnu, ld64inu, ld64mnu, ld106nu, ld113nu) },\t\\\n+    { XNTRY (fdu, ddu, ld64idu, ld64mdu, ld106du, ld113du) },\t\\\n+    { XNTRY (fzu, dzu, ld64izu, ld64mzu, ld106zu, ld113zu) },\t\\\n+    { XNTRY (fuu, duu, ld64iuu, ld64muu, ld106uu, ld113uu) }\t\\\n     }\t\t\t\t\t\t\t\t\\\n   }\n \n@@ -181,11 +198,17 @@ struct test_overflow\n   STRUCT_FOREACH_FLOAT_BOOL\n   };\n \n+struct test_underflow\n+  {\n+  STRUCT_FOREACH_FLOAT_BOOL\n+  };\n+\n struct test {\n   const CHAR *s;\n   struct test_exactness exact;\n   struct test_results r[4];\n   struct test_overflow o[4];\n+  struct test_underflow u[4];\n };\n \n /* Include the generated test data.  */\n@@ -203,10 +226,14 @@ struct test {\n # define FE_OVERFLOW 0\n #endif\n \n+#ifndef FE_UNDERFLOW\n+# define FE_UNDERFLOW 0\n+#endif\n+\n #define GEN_ONE_TEST(FSUF, FTYPE, FTOSTR, LSUF, CSUF)\t\t\\\n {\t\t\t\t\t\t\t\t\\\n   feclearexcept (FE_ALL_EXCEPT);\t\t\t\t\\\n-  errno = 0;\t\t\t\t\t\t\t\\\n+  errno = 12345;\t\t\t\t\t\t\\\n   FTYPE f = STRTO (FSUF) (s, NULL);\t\t\t\t\\\n   int new_errno = errno;\t\t\t\t\t\\\n   if (f != expected->FSUF\t\t\t\t\t\\\n@@ -265,6 +292,40 @@ struct test {\n \t\t  s, new_errno, ERANGE);\t\t\t\\\n \t  result = 1;\t\t\t\t\t\t\\\n \t}\t\t\t\t\t\t\t\\\n+      if (FE_UNDERFLOW != 0)\t\t\t\t\t\\\n+\t{\t\t\t\t\t\t\t\\\n+\t  bool underflow_raised\t\t\t\t\t\\\n+\t    = fetestexcept (FE_UNDERFLOW) != 0;\t\t\t\\\n+\t  if (underflow_raised != underflow->FSUF)\t\t\\\n+\t    {\t\t\t\t\t\t\t\\\n+\t      printf (FNPFXS \"to\" #FSUF\t\t\t\t\\\n+\t\t      \" (\" STRM \") underflow %d \"\t\t\\\n+\t\t      \"not %d\\n\", s, underflow_raised,\t\t\\\n+\t\t      underflow->FSUF);\t\t\t\t\\\n+\t      if (EXCEPTION_TESTS (FTYPE))\t\t\t\\\n+\t\tresult = 1;\t\t\t\t\t\\\n+\t      else\t\t\t\t\t\t\\\n+\t\tprintf (\"ignoring this exception error\\n\");\t\\\n+\t    }\t\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\\\n+      if (underflow->FSUF && new_errno != ERANGE)\t\t\\\n+\t{\t\t\t\t\t\t\t\\\n+\t  printf (FNPFXS \"to\" #FSUF\t\t\t\t\\\n+\t\t  \" (\" STRM \") left errno == %d,\"\t\t\\\n+\t\t  \" not %d (ERANGE)\\n\",\t\t\t\t\\\n+\t\t  s, new_errno, ERANGE);\t\t\t\\\n+\t  result = 1;\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\\\n+      if (!overflow->FSUF\t\t\t\t\t\\\n+\t  && !underflow->FSUF\t\t\t\t\t\\\n+\t  && new_errno != 12345)\t\t\t\t\\\n+\t{\t\t\t\t\t\t\t\\\n+\t  printf (FNPFXS \"to\" #FSUF\t\t\t\t\\\n+\t\t  \" (\" STRM \") set errno == %d,\"\t\t\\\n+\t\t  \" should be unchanged\\n\",\t\t\t\\\n+\t\t  s, new_errno);\t\t\t\t\\\n+\t  result = 1;\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\\\n     }\t\t\t\t\t\t\t\t\\\n }\n \n@@ -272,6 +333,7 @@ static int\n test_in_one_mode (const CHAR *s, const struct test_results *expected,\n \t\t    const struct test_exactness *exact,\n \t\t    const struct test_overflow *overflow,\n+\t\t    const struct test_underflow *underflow,\n \t\t    const char *mode_name, int rnd_mode)\n {\n   int result = 0;\n@@ -307,6 +369,7 @@ do_test (void)\n     {\n       result |= test_in_one_mode (tests[i].s, &tests[i].r[modes[0].rnd_i],\n \t\t\t\t  &tests[i].exact, &tests[i].o[modes[0].rnd_i],\n+\t\t\t\t  &tests[i].u[modes[0].rnd_i],\n \t\t\t\t  modes[0].mode_name, modes[0].rnd_mode);\n       for (const struct fetestmodes *m = &modes[1]; m->mode_name != NULL; m++)\n \t{\n@@ -314,7 +377,9 @@ do_test (void)\n \t    {\n \t      result |= test_in_one_mode (tests[i].s, &tests[i].r[m->rnd_i],\n \t\t\t\t\t  &tests[i].exact,\n-\t\t\t\t\t  &tests[i].o[m->rnd_i], m->mode_name,\n+\t\t\t\t\t  &tests[i].o[m->rnd_i],\n+\t\t\t\t\t  &tests[i].u[m->rnd_i],\n+\t\t\t\t\t  m->mode_name,\n \t\t\t\t\t  m->rnd_mode);\n \t      fesetround (save_round_mode);\n \t    }\n\ncommit d0c1792ad269566f877208ffda91c21dcd1a72e6\nAuthor: Joseph Myers <josmyers@redhat.com>\nDate:   Tue Aug 27 12:41:02 2024 +0000\n\n    Fix strtod subnormal rounding (bug 30220)\n    \n    As reported in bug 30220, the implementation of strtod-family\n    functions has a bug in the following case: the input string would,\n    with infinite exponent range, take one more bit to represent than is\n    available in the normal precision of the return type; the value\n    represented is in the subnormal range; and there are no nonzero bits\n    in the value, below those that can be represented in subnormal\n    precision, other than the least significant bit and possibly the\n    0.5ulp bit.  In this case, round_and_return ends up discarding the\n    least significant bit.\n    \n    Fix by saving that bit to merge into more_bits (it can't be merged in\n    at the time it's computed, because more_bits mustn't include this bit\n    in the case of after-rounding tininess detection checking if the\n    result is still subnormal when rounded to normal precision, so merging\n    this bit into more_bits needs to take place after that check).\n    \n    Tested for x86_64.\n    \n    (cherry picked from commit 457622c2fa8f9f7435822d5287a437bc8be8090d)\n\ndiff --git a/stdlib/strtod_l.c b/stdlib/strtod_l.c\nindex be515ce659..beb97b3d0c 100644\n--- a/stdlib/strtod_l.c\n+++ b/stdlib/strtod_l.c\n@@ -222,6 +222,7 @@ round_and_return (mp_limb_t *retval, intmax_t exponent, int negative,\n \n       mp_size_t shift = MIN_EXP - 1 - exponent;\n       bool is_tiny = true;\n+      bool old_half_bit = (round_limb & (((mp_limb_t) 1) << round_bit)) != 0;\n \n       more_bits |= (round_limb & ((((mp_limb_t) 1) << round_bit) - 1)) != 0;\n       if (shift == MANT_DIG)\n@@ -292,6 +293,7 @@ round_and_return (mp_limb_t *retval, intmax_t exponent, int negative,\n \t  round_bit = shift - 1;\n \t  (void) __mpn_rshift (retval, retval, RETURN_LIMB_SIZE, shift);\n \t}\n+      more_bits |= old_half_bit;\n       /* This is a hook for the m68k long double format, where the\n \t exponent bias is the same for normalized and denormalized\n \t numbers.  */\ndiff --git a/stdlib/tst-strtod-round-data b/stdlib/tst-strtod-round-data\nindex 84ab705709..9489fbcc9c 100644\n--- a/stdlib/tst-strtod-round-data\n+++ b/stdlib/tst-strtod-round-data\n@@ -265,3 +265,15 @@\n 1.000000000000000000000000000000000385185988877447170611195588516985463707620329643077639047987759113311767578125\n 1.0000000000000000000000000000000001925929944387235853055977942584927318538101648215388195239938795566558837890625\n 1.00000000000000000000000000000000009629649721936179265279889712924636592690508241076940976199693977832794189453125\n+0x30000002222225p-1077\n+0x0.7fffffffffffeap-1022\n+0x0.7fffffffffffe9p-1022\n+0x0.7ffffd4p-126\n+0x0.7ffffffffffffffd4p-16382\n+0x0.7ffffffffffffffd4p-16383\n+0x0.7ffffffffffffffffffffffffffeap-16382\n+0x0.7000004p-126\n+0x0.70000000000002p-1022\n+0x0.70000000000000004p-16382\n+0x0.70000000000000004p-16383\n+0x0.70000000000000000000000000002p-16382\ndiff --git a/stdlib/tst-strtod-round-data.h b/stdlib/tst-strtod-round-data.h\nindex 13e62dd2b0..ed50eb2537 100644\n--- a/stdlib/tst-strtod-round-data.h\n+++ b/stdlib/tst-strtod-round-data.h\n@@ -15437,4 +15437,376 @@ static const struct test tests[] = {\n \t0x1p+0, false, false,\n \t0x1p+0, false, false,\n \t0x1.0000000000000000000000000001p+0, false, false),\n+  TEST (\"0x30000002222225p-1077\",\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x1.800000111111p-1024, false, true,\n+\t0x1.8000001111114p-1024, false, true,\n+\t0x1.800000111111p-1024, false, true,\n+\t0x1.8000001111114p-1024, false, true,\n+\ttrue,\n+\t0x1.80000011111128p-1024, false, false,\n+\t0x1.80000011111128p-1024, false, false,\n+\t0x1.80000011111128p-1024, false, false,\n+\t0x1.80000011111128p-1024, false, false,\n+\ttrue,\n+\t0x1.80000011111128p-1024, false, false,\n+\t0x1.80000011111128p-1024, false, false,\n+\t0x1.80000011111128p-1024, false, false,\n+\t0x1.80000011111128p-1024, false, false,\n+\tfalse,\n+\t0x1.800000111111p-1024, false, true,\n+\t0x1.8000001111114p-1024, false, true,\n+\t0x1.800000111111p-1024, false, true,\n+\t0x1.8000001111114p-1024, false, true,\n+\ttrue,\n+\t0x1.80000011111128p-1024, false, false,\n+\t0x1.80000011111128p-1024, false, false,\n+\t0x1.80000011111128p-1024, false, false,\n+\t0x1.80000011111128p-1024, false, false),\n+  TEST (\"0x0.7fffffffffffeap-1022\",\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x1.ffffffffffff8p-1024, false, true,\n+\t0x1.ffffffffffffcp-1024, false, true,\n+\t0x1.ffffffffffff8p-1024, false, true,\n+\t0x1.ffffffffffffcp-1024, false, true,\n+\ttrue,\n+\t0x1.ffffffffffffa8p-1024, false, false,\n+\t0x1.ffffffffffffa8p-1024, false, false,\n+\t0x1.ffffffffffffa8p-1024, false, false,\n+\t0x1.ffffffffffffa8p-1024, false, false,\n+\ttrue,\n+\t0x1.ffffffffffffa8p-1024, false, false,\n+\t0x1.ffffffffffffa8p-1024, false, false,\n+\t0x1.ffffffffffffa8p-1024, false, false,\n+\t0x1.ffffffffffffa8p-1024, false, false,\n+\tfalse,\n+\t0x1.ffffffffffff8p-1024, false, true,\n+\t0x1.ffffffffffffcp-1024, false, true,\n+\t0x1.ffffffffffff8p-1024, false, true,\n+\t0x1.ffffffffffffcp-1024, false, true,\n+\ttrue,\n+\t0x1.ffffffffffffa8p-1024, false, false,\n+\t0x1.ffffffffffffa8p-1024, false, false,\n+\t0x1.ffffffffffffa8p-1024, false, false,\n+\t0x1.ffffffffffffa8p-1024, false, false),\n+  TEST (\"0x0.7fffffffffffe9p-1022\",\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x1.ffffffffffff8p-1024, false, true,\n+\t0x1.ffffffffffffcp-1024, false, true,\n+\t0x1.ffffffffffff8p-1024, false, true,\n+\t0x1.ffffffffffffcp-1024, false, true,\n+\ttrue,\n+\t0x1.ffffffffffffa4p-1024, false, false,\n+\t0x1.ffffffffffffa4p-1024, false, false,\n+\t0x1.ffffffffffffa4p-1024, false, false,\n+\t0x1.ffffffffffffa4p-1024, false, false,\n+\ttrue,\n+\t0x1.ffffffffffffa4p-1024, false, false,\n+\t0x1.ffffffffffffa4p-1024, false, false,\n+\t0x1.ffffffffffffa4p-1024, false, false,\n+\t0x1.ffffffffffffa4p-1024, false, false,\n+\tfalse,\n+\t0x1.ffffffffffff8p-1024, false, true,\n+\t0x1.ffffffffffffcp-1024, false, true,\n+\t0x1.ffffffffffff8p-1024, false, true,\n+\t0x1.ffffffffffffcp-1024, false, true,\n+\ttrue,\n+\t0x1.ffffffffffffa4p-1024, false, false,\n+\t0x1.ffffffffffffa4p-1024, false, false,\n+\t0x1.ffffffffffffa4p-1024, false, false,\n+\t0x1.ffffffffffffa4p-1024, false, false),\n+  TEST (\"0x0.7ffffd4p-126\",\n+\tfalse,\n+\t0x1.fffffp-128, false, true,\n+\t0x1.fffff8p-128, false, true,\n+\t0x1.fffffp-128, false, true,\n+\t0x1.fffff8p-128, false, true,\n+\ttrue,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false,\n+\ttrue,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false,\n+\ttrue,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false,\n+\ttrue,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false,\n+\ttrue,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false),\n+  TEST (\"0x0.7ffffffffffffffd4p-16382\",\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x1.fffffffffffffffp-16384, false, true,\n+\t0x1.fffffffffffffff8p-16384, false, true,\n+\t0x1.fffffffffffffffp-16384, false, true,\n+\t0x1.fffffffffffffff8p-16384, false, true,\n+\tfalse,\n+\t0x1.fffffffffffffff4p-16384, false, true,\n+\t0x1.fffffffffffffff4p-16384, false, true,\n+\t0x1.fffffffffffffff4p-16384, false, true,\n+\t0x1.fffffffffffffff8p-16384, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\ttrue,\n+\t0x1.fffffffffffffff5p-16384, false, false,\n+\t0x1.fffffffffffffff5p-16384, false, false,\n+\t0x1.fffffffffffffff5p-16384, false, false,\n+\t0x1.fffffffffffffff5p-16384, false, false),\n+  TEST (\"0x0.7ffffffffffffffd4p-16383\",\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0xf.ffffffffffffff8p-16388, false, true,\n+\t0xf.ffffffffffffff8p-16388, false, true,\n+\t0xf.ffffffffffffff8p-16388, false, true,\n+\t0x1p-16384, false, true,\n+\tfalse,\n+\t0xf.ffffffffffffff8p-16388, false, true,\n+\t0xf.ffffffffffffffcp-16388, false, true,\n+\t0xf.ffffffffffffff8p-16388, false, true,\n+\t0xf.ffffffffffffffcp-16388, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\ttrue,\n+\t0xf.ffffffffffffffa8p-16388, false, false,\n+\t0xf.ffffffffffffffa8p-16388, false, false,\n+\t0xf.ffffffffffffffa8p-16388, false, false,\n+\t0xf.ffffffffffffffa8p-16388, false, false),\n+  TEST (\"0x0.7ffffffffffffffffffffffffffeap-16382\",\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x1.fffffffffffffff8p-16384, false, true,\n+\t0x2p-16384, false, true,\n+\t0x1.fffffffffffffff8p-16384, false, true,\n+\t0x2p-16384, false, true,\n+\tfalse,\n+\t0x1.fffffffffffffffcp-16384, false, true,\n+\t0x2p-16384, false, true,\n+\t0x1.fffffffffffffffcp-16384, false, true,\n+\t0x2p-16384, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x1.fffffffffffffffffffffffffff8p-16384, false, true,\n+\t0x1.fffffffffffffffffffffffffffcp-16384, false, true,\n+\t0x1.fffffffffffffffffffffffffff8p-16384, false, true,\n+\t0x1.fffffffffffffffffffffffffffcp-16384, false, true),\n+  TEST (\"0x0.7000004p-126\",\n+\tfalse,\n+\t0x1.cp-128, false, true,\n+\t0x1.cp-128, false, true,\n+\t0x1.cp-128, false, true,\n+\t0x1.c00008p-128, false, true,\n+\ttrue,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false,\n+\ttrue,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false,\n+\ttrue,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false,\n+\ttrue,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false,\n+\ttrue,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false),\n+  TEST (\"0x0.70000000000002p-1022\",\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x1.cp-1024, false, true,\n+\t0x1.cp-1024, false, true,\n+\t0x1.cp-1024, false, true,\n+\t0x1.c000000000004p-1024, false, true,\n+\ttrue,\n+\t0x1.c0000000000008p-1024, false, false,\n+\t0x1.c0000000000008p-1024, false, false,\n+\t0x1.c0000000000008p-1024, false, false,\n+\t0x1.c0000000000008p-1024, false, false,\n+\ttrue,\n+\t0x1.c0000000000008p-1024, false, false,\n+\t0x1.c0000000000008p-1024, false, false,\n+\t0x1.c0000000000008p-1024, false, false,\n+\t0x1.c0000000000008p-1024, false, false,\n+\tfalse,\n+\t0x1.cp-1024, false, true,\n+\t0x1.cp-1024, false, true,\n+\t0x1.cp-1024, false, true,\n+\t0x1.c000000000004p-1024, false, true,\n+\ttrue,\n+\t0x1.c0000000000008p-1024, false, false,\n+\t0x1.c0000000000008p-1024, false, false,\n+\t0x1.c0000000000008p-1024, false, false,\n+\t0x1.c0000000000008p-1024, false, false),\n+  TEST (\"0x0.70000000000000004p-16382\",\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x1.cp-16384, false, true,\n+\t0x1.cp-16384, false, true,\n+\t0x1.cp-16384, false, true,\n+\t0x1.c000000000000008p-16384, false, true,\n+\tfalse,\n+\t0x1.cp-16384, false, true,\n+\t0x1.cp-16384, false, true,\n+\t0x1.cp-16384, false, true,\n+\t0x1.c000000000000004p-16384, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\ttrue,\n+\t0x1.c000000000000001p-16384, false, false,\n+\t0x1.c000000000000001p-16384, false, false,\n+\t0x1.c000000000000001p-16384, false, false,\n+\t0x1.c000000000000001p-16384, false, false),\n+  TEST (\"0x0.70000000000000004p-16383\",\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0xep-16388, false, true,\n+\t0xep-16388, false, true,\n+\t0xep-16388, false, true,\n+\t0xe.000000000000008p-16388, false, true,\n+\tfalse,\n+\t0xep-16388, false, true,\n+\t0xep-16388, false, true,\n+\t0xep-16388, false, true,\n+\t0xe.000000000000004p-16388, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\ttrue,\n+\t0xe.0000000000000008p-16388, false, false,\n+\t0xe.0000000000000008p-16388, false, false,\n+\t0xe.0000000000000008p-16388, false, false,\n+\t0xe.0000000000000008p-16388, false, false),\n+  TEST (\"0x0.70000000000000000000000000002p-16382\",\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x1.cp-16384, false, true,\n+\t0x1.cp-16384, false, true,\n+\t0x1.cp-16384, false, true,\n+\t0x1.c000000000000008p-16384, false, true,\n+\tfalse,\n+\t0x1.cp-16384, false, true,\n+\t0x1.cp-16384, false, true,\n+\t0x1.cp-16384, false, true,\n+\t0x1.c000000000000004p-16384, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x1.cp-16384, false, true,\n+\t0x1.cp-16384, false, true,\n+\t0x1.cp-16384, false, true,\n+\t0x1.c000000000000000000000000004p-16384, false, true),\n };\n\ncommit cac10d88c684c0171e549d813bfef7a31029f257\nAuthor: Joseph Myers <josmyers@redhat.com>\nDate:   Tue Aug 27 20:41:54 2024 +0000\n\n    Make __strtod_internal tests type-generic\n    \n    Some of the strtod tests use type-generic machinery in tst-strtod.h to\n    test the strto* functions for all floating types, while others only\n    test double even when the tests are in fact meaningful for all\n    floating types.\n    \n    Convert the tests of the internal __strtod_internal interface to cover\n    all floating types.  I haven't tried to convert them to use newer test\n    interfaces in other ways, just made the changes necessary to use the\n    type-generic machinery.  As an internal interface, there are no\n    aliases for different types with the same ABI (however,\n    __strtold_internal is defined even if long double has the same ABI as\n    double), so macros used by the type-generic testing code are redefined\n    as needed to avoid expecting such aliases to be present.\n    \n    Tested for x86_64.\n    \n    (cherry picked from commit 3fc063dee01da4f80920a14b7db637c8501d6fd4)\n\ndiff --git a/stdlib/tst-strtod1i.c b/stdlib/tst-strtod1i.c\nindex 9d6bb760fb..44ae0264f4 100644\n--- a/stdlib/tst-strtod1i.c\n+++ b/stdlib/tst-strtod1i.c\n@@ -25,60 +25,91 @@\n #include <string.h>\n #include <math.h>\n \n-/* Perform a few tests in a locale with thousands separators.  */\n-static int\n-do_test (void)\n-{\n-  static const struct\n-  {\n-    const char *loc;\n-    const char *str;\n-    double exp;\n-    ptrdiff_t nread;\n-  } tests[] =\n-    {\n-      { \"de_DE.UTF-8\", \"1,5\", 1.5, 3 },\n-      { \"de_DE.UTF-8\", \"1.5\", 1.0, 1 },\n-      { \"de_DE.UTF-8\", \"1.500\", 1500.0, 5 },\n-      { \"de_DE.UTF-8\", \"36.893.488.147.419.103.232\", 0x1.0p65, 26 }\n-    };\n-#define ntests (sizeof (tests) / sizeof (tests[0]))\n-  size_t n;\n-  int result = 0;\n-\n-  puts (\"\\nLocale tests\");\n+#include \"tst-strtod.h\"\n \n-  for (n = 0; n < ntests; ++n)\n-    {\n-      double d;\n-      char *endp;\n+/* This tests internal interfaces, which are only defined for types\n+   with distinct ABIs, so disable testing for types without distinct\n+   ABIs.  */\n+#undef IF_FLOAT32\n+#define IF_FLOAT32(x)\n+#undef IF_FLOAT64\n+#define IF_FLOAT64(x)\n+#undef IF_FLOAT32X\n+#define IF_FLOAT32X(x)\n+#undef IF_FLOAT64X\n+#define IF_FLOAT64X(x)\n+#if !__HAVE_DISTINCT_FLOAT128\n+# undef IF_FLOAT128\n+# define IF_FLOAT128(x)\n+#endif\n \n-      if (setlocale (LC_ALL, tests[n].loc) == NULL)\n-\t{\n-\t  printf (\"cannot set locale %s\\n\", tests[n].loc);\n-\t  result = 1;\n-\t  continue;\n-\t}\n+#define ntests (sizeof (tests) / sizeof (tests[0]))\n \n-      d = __strtod_internal (tests[n].str, &endp, 1);\n-      if (d != tests[n].exp)\n-\t{\n-\t  printf (\"strtod(\\\"%s\\\") returns %g and not %g\\n\",\n-\t\t  tests[n].str, d, tests[n].exp);\n-\t  result = 1;\n-\t}\n-      else if (endp - tests[n].str != tests[n].nread)\n-\t{\n-\t  printf (\"strtod(\\\"%s\\\") read %td bytes and not %td\\n\",\n-\t\t  tests[n].str, endp - tests[n].str, tests[n].nread);\n-\t  result = 1;\n-\t}\n-    }\n+/* Perform a few tests in a locale with thousands separators.  */\n+#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF)\t\t\t\\\n+static int\t\t\t\t\t\t\t\t\\\n+test_strto ## FSUF (void)\t\t\t\t\t\t\\\n+{\t\t\t\t\t\t\t\t\t\\\n+  static const struct\t\t\t\t\t\t\t\\\n+  {\t\t\t\t\t\t\t\t\t\\\n+    const char *loc;\t\t\t\t\t\t\t\\\n+    const char *str;\t\t\t\t\t\t\t\\\n+    FTYPE exp;\t\t\t\t\t\t\t\t\\\n+    ptrdiff_t nread;\t\t\t\t\t\t\t\\\n+  } tests[] =\t\t\t\t\t\t\t\t\\\n+    {\t\t\t\t\t\t\t\t\t\\\n+      { \"de_DE.UTF-8\", \"1,5\", 1.5 ## LSUF, 3 },\t\t\t\t\\\n+      { \"de_DE.UTF-8\", \"1.5\", 1.0 ## LSUF, 1 },\t\t\t\t\\\n+      { \"de_DE.UTF-8\", \"1.500\", 1500.0 ## LSUF, 5 },\t\t\t\\\n+      { \"de_DE.UTF-8\", \"36.893.488.147.419.103.232\", 0x1.0p65 ## LSUF, 26 } \\\n+    };\t\t\t\t\t\t\t\t\t\\\n+  size_t n;\t\t\t\t\t\t\t\t\\\n+  int result = 0;\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+  puts (\"\\nLocale tests\");\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+  for (n = 0; n < ntests; ++n)\t\t\t\t\t\t\\\n+    {\t\t\t\t\t\t\t\t\t\\\n+      FTYPE d;\t\t\t\t\t\t\t\t\\\n+      char *endp;\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+      if (setlocale (LC_ALL, tests[n].loc) == NULL)\t\t\t\\\n+\t{\t\t\t\t\t\t\t\t\\\n+\t  printf (\"cannot set locale %s\\n\", tests[n].loc);\t\t\\\n+\t  result = 1;\t\t\t\t\t\t\t\\\n+\t  continue;\t\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+      d = __strto ## FSUF ## _internal (tests[n].str, &endp, 1);\t\\\n+      if (d != tests[n].exp)\t\t\t\t\t\t\\\n+\t{\t\t\t\t\t\t\t\t\\\n+\t  char buf1[FSTRLENMAX], buf2[FSTRLENMAX];\t\t\t\\\n+\t  FTOSTR (buf1, sizeof (buf1), \"%g\", d);\t\t\t\\\n+\t  FTOSTR (buf2, sizeof (buf2), \"%g\", tests[n].exp);\t\t\\\n+\t  printf (\"strto\" # FSUF \"(\\\"%s\\\") returns %s and not %s\\n\",\t\\\n+\t\t  tests[n].str, buf1, buf2);\t\t\t\t\\\n+\t  result = 1;\t\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\t\\\n+      else if (endp - tests[n].str != tests[n].nread)\t\t\t\\\n+\t{\t\t\t\t\t\t\t\t\\\n+\t  printf (\"strto\" # FSUF \"(\\\"%s\\\") read %td bytes and not %td\\n\", \\\n+\t\t  tests[n].str, endp - tests[n].str, tests[n].nread);\t\\\n+\t  result = 1;\t\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\t\\\n+    }\t\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+  if (result == 0)\t\t\t\t\t\t\t\\\n+    puts (\"all OK\");\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+  return result ? EXIT_FAILURE : EXIT_SUCCESS;\t\t\t\t\\\n+}\n \n-  if (result == 0)\n-    puts (\"all OK\");\n+GEN_TEST_STRTOD_FOREACH (TEST_STRTOD)\n \n-  return result ? EXIT_FAILURE : EXIT_SUCCESS;\n+static int\n+do_test (void)\n+{\n+  return STRTOD_TEST_FOREACH (test_strto);\n }\n \n #include <support/test-driver.c>\ndiff --git a/stdlib/tst-strtod3.c b/stdlib/tst-strtod3.c\nindex 23abec1896..0d662d8be8 100644\n--- a/stdlib/tst-strtod3.c\n+++ b/stdlib/tst-strtod3.c\n@@ -3,19 +3,73 @@\n #include <stdlib.h>\n #include <string.h>\n \n-static const struct\n-{\n-  const char *in;\n-  const char *out;\n-  double expected;\n-} tests[] =\n-  {\n-    { \"000,,,e1\", \",,,e1\", 0.0 },\n-    { \"000e1\", \"\", 0.0 },\n-    { \"000,1e1\", \",1e1\", 0.0 }\n-  };\n-#define NTESTS (sizeof (tests) / sizeof (tests[0]))\n+#include \"tst-strtod.h\"\n+\n+/* This tests internal interfaces, which are only defined for types\n+   with distinct ABIs, so disable testing for types without distinct\n+   ABIs.  */\n+#undef IF_FLOAT32\n+#define IF_FLOAT32(x)\n+#undef IF_FLOAT64\n+#define IF_FLOAT64(x)\n+#undef IF_FLOAT32X\n+#define IF_FLOAT32X(x)\n+#undef IF_FLOAT64X\n+#define IF_FLOAT64X(x)\n+#if !__HAVE_DISTINCT_FLOAT128\n+# undef IF_FLOAT128\n+# define IF_FLOAT128(x)\n+#endif\n \n+#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF)\t\t\t\\\n+static const struct\t\t\t\t\t\t\t\\\n+{\t\t\t\t\t\t\t\t\t\\\n+  const char *in;\t\t\t\t\t\t\t\\\n+  const char *out;\t\t\t\t\t\t\t\\\n+  FTYPE expected;\t\t\t\t\t\t\t\\\n+} tests_strto ## FSUF[] =\t\t\t\t\t\t\\\n+  {\t\t\t\t\t\t\t\t\t\\\n+    { \"000,,,e1\", \",,,e1\", 0.0 ## LSUF },\t\t\t\t\\\n+    { \"000e1\", \"\", 0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"000,1e1\", \",1e1\", 0.0 ## LSUF }\t\t\t\t\t\\\n+  };\t\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+static int\t\t\t\t\t\t\t\t\\\n+test_strto ## FSUF (void)\t\t\t\t\t\t\\\n+{\t\t\t\t\t\t\t\t\t\\\n+  int status = 0;\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+  for (int i = 0;\t\t\t\t\t\t\t\\\n+       i < sizeof (tests_strto ## FSUF) / sizeof (tests_strto ## FSUF[0]); \\\n+       ++i)\t\t\t\t\t\t\t\t\\\n+    {\t\t\t\t\t\t\t\t\t\\\n+      char *ep;\t\t\t\t\t\t\t\t\\\n+      FTYPE r = __strto ## FSUF ## _internal (tests_strto ## FSUF[i].in, \\\n+\t\t\t\t\t      &ep, 1);\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+      if (strcmp (ep, tests_strto ## FSUF[i].out) != 0)\t\t\t\\\n+\t{\t\t\t\t\t\t\t\t\\\n+\t  printf (\"%d: got rest string \\\"%s\\\", expected \\\"%s\\\"\\n\",\t\\\n+\t\t  i, ep, tests_strto ## FSUF[i].out);\t\t\t\\\n+\t  status = 1;\t\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+      if (r != tests_strto ## FSUF[i].expected)\t\t\t\t\\\n+\t{\t\t\t\t\t\t\t\t\\\n+\t  char buf1[FSTRLENMAX], buf2[FSTRLENMAX];\t\t\t\\\n+\t  FTOSTR (buf1, sizeof (buf1), \"%g\", r);\t\t\t\\\n+\t  FTOSTR (buf2, sizeof (buf2), \"%g\",\t\t\t\t\\\n+\t\t  tests_strto ## FSUF[i].expected);\t\t\t\\\n+\t  printf (\"%d: got wrong results %s, expected %s\\n\",\t\t\\\n+\t\t  i, buf1, buf2);\t\t\t\t\t\\\n+\t  status = 1;\t\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\t\\\n+    }\t\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+  return status;\t\t\t\t\t\t\t\\\n+}\n+\n+GEN_TEST_STRTOD_FOREACH (TEST_STRTOD)\n \n static int\n do_test (void)\n@@ -26,29 +80,7 @@ do_test (void)\n       return 1;\n     }\n \n-  int status = 0;\n-\n-  for (int i = 0; i < NTESTS; ++i)\n-    {\n-      char *ep;\n-      double r = __strtod_internal (tests[i].in, &ep, 1);\n-\n-      if (strcmp (ep, tests[i].out) != 0)\n-\t{\n-\t  printf (\"%d: got rest string \\\"%s\\\", expected \\\"%s\\\"\\n\",\n-\t\t  i, ep, tests[i].out);\n-\t  status = 1;\n-\t}\n-\n-      if (r != tests[i].expected)\n-\t{\n-\t  printf (\"%d: got wrong results %g, expected %g\\n\",\n-\t\t  i, r, tests[i].expected);\n-\t  status = 1;\n-\t}\n-    }\n-\n-  return status;\n+  return STRTOD_TEST_FOREACH (test_strto);\n }\n \n #define TEST_FUNCTION do_test ()\ndiff --git a/stdlib/tst-strtod4.c b/stdlib/tst-strtod4.c\nindex 6cc4e843c7..dfd3f05027 100644\n--- a/stdlib/tst-strtod4.c\n+++ b/stdlib/tst-strtod4.c\n@@ -3,22 +3,76 @@\n #include <stdlib.h>\n #include <string.h>\n \n+#include \"tst-strtod.h\"\n+\n+/* This tests internal interfaces, which are only defined for types\n+   with distinct ABIs, so disable testing for types without distinct\n+   ABIs.  */\n+#undef IF_FLOAT32\n+#define IF_FLOAT32(x)\n+#undef IF_FLOAT64\n+#define IF_FLOAT64(x)\n+#undef IF_FLOAT32X\n+#define IF_FLOAT32X(x)\n+#undef IF_FLOAT64X\n+#define IF_FLOAT64X(x)\n+#if !__HAVE_DISTINCT_FLOAT128\n+# undef IF_FLOAT128\n+# define IF_FLOAT128(x)\n+#endif\n+\n #define NNBSP \"\\xe2\\x80\\xaf\"\n \n-static const struct\n-{\n-  const char *in;\n-  const char *out;\n-  double expected;\n-} tests[] =\n-  {\n-    { \"000\"NNBSP\"000\"NNBSP\"000\", \"\", 0.0 },\n-    { \"1\"NNBSP\"000\"NNBSP\"000,5x\", \"x\", 1000000.5 },\n-    /* Bug 30964 */\n-    { \"10\"NNBSP NNBSP\"200\", NNBSP NNBSP\"200\", 10.0 }\n-  };\n-#define NTESTS (sizeof (tests) / sizeof (tests[0]))\n+#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF)\t\t\t\\\n+static const struct\t\t\t\t\t\t\t\\\n+{\t\t\t\t\t\t\t\t\t\\\n+  const char *in;\t\t\t\t\t\t\t\\\n+  const char *out;\t\t\t\t\t\t\t\\\n+  FTYPE expected;\t\t\t\t\t\t\t\\\n+} tests_strto ## FSUF[] =\t\t\t\t\t\t\\\n+  {\t\t\t\t\t\t\t\t\t\\\n+    { \"000\"NNBSP\"000\"NNBSP\"000\", \"\", 0.0 ## LSUF },\t\t\t\\\n+    { \"1\"NNBSP\"000\"NNBSP\"000,5x\", \"x\", 1000000.5 ## LSUF },\t\t\\\n+    /* Bug 30964 */\t\t\t\t\t\t\t\\\n+    { \"10\"NNBSP NNBSP\"200\", NNBSP NNBSP\"200\", 10.0 ## LSUF }\t\t\\\n+  };\t\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+static int\t\t\t\t\t\t\t\t\\\n+test_strto ## FSUF (void)\t\t\t\t\t\t\\\n+{\t\t\t\t\t\t\t\t\t\\\n+  int status = 0;\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+  for (int i = 0;\t\t\t\t\t\t\t\\\n+       i < sizeof (tests_strto ## FSUF) / sizeof (tests_strto ## FSUF[0]); \\\n+       ++i)\t\t\t\t\t\t\t\t\\\n+    {\t\t\t\t\t\t\t\t\t\\\n+      char *ep;\t\t\t\t\t\t\t\t\\\n+      FTYPE r = __strto ## FSUF ## _internal (tests_strto ## FSUF[i].in, \\\n+\t\t\t\t\t      &ep, 1);\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+      if (strcmp (ep, tests_strto ## FSUF[i].out) != 0)\t\t\t\\\n+\t{\t\t\t\t\t\t\t\t\\\n+\t  printf (\"%d: got rest string \\\"%s\\\", expected \\\"%s\\\"\\n\",\t\\\n+\t\t  i, ep, tests_strto ## FSUF[i].out);\t\t\t\\\n+\t  status = 1;\t\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+      if (r != tests_strto ## FSUF[i].expected)\t\t\t\t\\\n+\t{\t\t\t\t\t\t\t\t\\\n+\t  char buf1[FSTRLENMAX], buf2[FSTRLENMAX];\t\t\t\\\n+\t  FTOSTR (buf1, sizeof (buf1), \"%g\", r);\t\t\t\\\n+\t  FTOSTR (buf2, sizeof (buf2), \"%g\",\t\t\t\t\\\n+\t\t  tests_strto ## FSUF[i].expected);\t\t\t\\\n+\t  printf (\"%d: got wrong results %s, expected %s\\n\",\t\t\\\n+\t\t  i, buf1, buf2);\t\t\t\t\t\\\n+\t  status = 1;\t\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\t\\\n+    }\t\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+  return status;\t\t\t\t\t\t\t\\\n+}\n \n+GEN_TEST_STRTOD_FOREACH (TEST_STRTOD)\n \n static int\n do_test (void)\n@@ -29,29 +83,7 @@ do_test (void)\n       return 1;\n     }\n \n-  int status = 0;\n-\n-  for (int i = 0; i < NTESTS; ++i)\n-    {\n-      char *ep;\n-      double r = __strtod_internal (tests[i].in, &ep, 1);\n-\n-      if (strcmp (ep, tests[i].out) != 0)\n-\t{\n-\t  printf (\"%d: got rest string \\\"%s\\\", expected \\\"%s\\\"\\n\",\n-\t\t  i, ep, tests[i].out);\n-\t  status = 1;\n-\t}\n-\n-      if (r != tests[i].expected)\n-\t{\n-\t  printf (\"%d: got wrong results %g, expected %g\\n\",\n-\t\t  i, r, tests[i].expected);\n-\t  status = 1;\n-\t}\n-    }\n-\n-  return status;\n+  return STRTOD_TEST_FOREACH (test_strto);\n }\n \n #define TEST_FUNCTION do_test ()\ndiff --git a/stdlib/tst-strtod5i.c b/stdlib/tst-strtod5i.c\nindex ee54e3404c..136aedea68 100644\n--- a/stdlib/tst-strtod5i.c\n+++ b/stdlib/tst-strtod5i.c\n@@ -16,52 +16,112 @@\n    License along with the GNU C Library; if not, see\n    <https://www.gnu.org/licenses/>.  */\n \n+/* Defining _LIBC_TEST ensures long double math functions are\n+   declared in the headers.  */\n+#define _LIBC_TEST 1\n #include <locale.h>\n #include <stdio.h>\n #include <stdlib.h>\n #include <string.h>\n #include <math.h>\n \n+#include \"tst-strtod.h\"\n+\n+/* This tests internal interfaces, which are only defined for types\n+   with distinct ABIs, so disable testing for types without distinct\n+   ABIs.  */\n+#undef IF_FLOAT32\n+#define IF_FLOAT32(x)\n+#undef IF_FLOAT64\n+#define IF_FLOAT64(x)\n+#undef IF_FLOAT32X\n+#define IF_FLOAT32X(x)\n+#undef IF_FLOAT64X\n+#define IF_FLOAT64X(x)\n+#if !__HAVE_DISTINCT_FLOAT128\n+# undef IF_FLOAT128\n+# define IF_FLOAT128(x)\n+#endif\n+\n #define NNBSP \"\\xe2\\x80\\xaf\"\n \n-static const struct\n-{\n-  const char *in;\n-  int group;\n-  double expected;\n-} tests[] =\n-  {\n-    { \"0\", 0, 0.0 },\n-    { \"000\", 0, 0.0 },\n-    { \"-0\", 0, -0.0 },\n-    { \"-000\", 0, -0.0 },\n-    { \"0,\", 0, 0.0 },\n-    { \"-0,\", 0, -0.0 },\n-    { \"0,0\", 0, 0.0 },\n-    { \"-0,0\", 0, -0.0 },\n-    { \"0e-10\", 0, 0.0 },\n-    { \"-0e-10\", 0, -0.0 },\n-    { \"0,e-10\", 0, 0.0 },\n-    { \"-0,e-10\", 0, -0.0 },\n-    { \"0,0e-10\", 0, 0.0 },\n-    { \"-0,0e-10\", 0, -0.0 },\n-    { \"0e-1000000\", 0, 0.0 },\n-    { \"-0e-1000000\", 0, -0.0 },\n-    { \"0,0e-1000000\", 0, 0.0 },\n-    { \"-0,0e-1000000\", 0, -0.0 },\n-    { \"0\", 1, 0.0 },\n-    { \"000\", 1, 0.0 },\n-    { \"-0\", 1, -0.0 },\n-    { \"-000\", 1, -0.0 },\n-    { \"0e-10\", 1, 0.0 },\n-    { \"-0e-10\", 1, -0.0 },\n-    { \"0e-1000000\", 1, 0.0 },\n-    { \"-0e-1000000\", 1, -0.0 },\n-    { \"000\"NNBSP\"000\"NNBSP\"000\", 1, 0.0 },\n-    { \"-000\"NNBSP\"000\"NNBSP\"000\", 1, -0.0 }\n-  };\n-#define NTESTS (sizeof (tests) / sizeof (tests[0]))\n+#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF)\t\t\t\\\n+static const struct\t\t\t\t\t\t\t\\\n+{\t\t\t\t\t\t\t\t\t\\\n+  const char *in;\t\t\t\t\t\t\t\\\n+  int group;\t\t\t\t\t\t\t\t\\\n+  FTYPE expected;\t\t\t\t\t\t\t\\\n+} tests_strto ## FSUF[] =\t\t\t\t\t\t\\\n+  {\t\t\t\t\t\t\t\t\t\\\n+    { \"0\", 0, 0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"000\", 0, 0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"-0\", 0, -0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"-000\", 0, -0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"0,\", 0, 0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"-0,\", 0, -0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"0,0\", 0, 0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"-0,0\", 0, -0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"0e-10\", 0, 0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"-0e-10\", 0, -0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"0,e-10\", 0, 0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"-0,e-10\", 0, -0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"0,0e-10\", 0, 0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"-0,0e-10\", 0, -0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"0e-1000000\", 0, 0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"-0e-1000000\", 0, -0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"0,0e-1000000\", 0, 0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"-0,0e-1000000\", 0, -0.0 ## LSUF },\t\t\t\t\\\n+    { \"0\", 1, 0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"000\", 1, 0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"-0\", 1, -0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"-000\", 1, -0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"0e-10\", 1, 0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"-0e-10\", 1, -0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"0e-1000000\", 1, 0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"-0e-1000000\", 1, -0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"000\"NNBSP\"000\"NNBSP\"000\", 1, 0.0 ## LSUF },\t\t\t\\\n+    { \"-000\"NNBSP\"000\"NNBSP\"000\", 1, -0.0 ## LSUF }\t\t\t\\\n+  };\t\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+static int\t\t\t\t\t\t\t\t\\\n+test_strto ## FSUF (void)\t\t\t\t\t\t\\\n+{\t\t\t\t\t\t\t\t\t\\\n+  int status = 0;\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+  for (int i = 0;\t\t\t\t\t\t\t\\\n+       i < sizeof (tests_strto ## FSUF) / sizeof (tests_strto ## FSUF[0]); \\\n+       ++i)\t\t\t\t\t\t\t\t\\\n+    {\t\t\t\t\t\t\t\t\t\\\n+      char *ep;\t\t\t\t\t\t\t\t\\\n+      FTYPE r = __strto ## FSUF ## _internal (tests_strto ## FSUF[i].in, \\\n+\t\t\t\t\t      &ep,\t\t\t\\\n+\t\t\t\t\t      tests_strto ## FSUF[i].group); \\\n+\t\t\t\t\t\t\t\t\t\\\n+      if (*ep != '\\0')\t\t\t\t\t\t\t\\\n+\t{\t\t\t\t\t\t\t\t\\\n+\t  printf (\"%d: got rest string \\\"%s\\\", expected \\\"\\\"\\n\", i, ep); \\\n+\t  status = 1;\t\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+      if (r != tests_strto ## FSUF[i].expected\t\t\t\t\\\n+\t  || (copysign ## CSUF (10.0 ## LSUF, r)\t\t\t\\\n+\t      != copysign ## CSUF (10.0 ## LSUF,\t\t\t\\\n+\t\t\t\t   tests_strto ## FSUF[i].expected)))\t\\\n+\t{\t\t\t\t\t\t\t\t\\\n+\t  char buf1[FSTRLENMAX], buf2[FSTRLENMAX];\t\t\t\\\n+\t  FTOSTR (buf1, sizeof (buf1), \"%g\", r);\t\t\t\\\n+\t  FTOSTR (buf2, sizeof (buf2), \"%g\",\t\t\t\t\\\n+\t\t  tests_strto ## FSUF[i].expected);\t\t\t\\\n+\t  printf (\"%d: got wrong results %s, expected %s\\n\",\t\t\\\n+\t\t  i, buf1, buf2);\t\t\t\t\t\\\n+\t  status = 1;\t\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\t\\\n+    }\t\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+  return status;\t\t\t\t\t\t\t\\\n+}\n \n+GEN_TEST_STRTOD_FOREACH (TEST_STRTOD)\n \n static int\n do_test (void)\n@@ -72,29 +132,7 @@ do_test (void)\n       return 1;\n     }\n \n-  int status = 0;\n-\n-  for (int i = 0; i < NTESTS; ++i)\n-    {\n-      char *ep;\n-      double r = __strtod_internal (tests[i].in, &ep, tests[i].group);\n-\n-      if (*ep != '\\0')\n-\t{\n-\t  printf (\"%d: got rest string \\\"%s\\\", expected \\\"\\\"\\n\", i, ep);\n-\t  status = 1;\n-\t}\n-\n-      if (r != tests[i].expected\n-\t  || copysign (10.0, r) != copysign (10.0, tests[i].expected))\n-\t{\n-\t  printf (\"%d: got wrong results %g, expected %g\\n\",\n-\t\t  i, r, tests[i].expected);\n-\t  status = 1;\n-\t}\n-    }\n-\n-  return status;\n+  return STRTOD_TEST_FOREACH (test_strto);\n }\n \n #include <support/test-driver.c>\n\ncommit ad93c2047d791044d45e8f65070d821b0b918993\nAuthor: Joseph Myers <josmyers@redhat.com>\nDate:   Wed Sep 4 13:20:18 2024 +0000\n\n    Improve NaN payload testing\n    \n    There are two separate sets of tests of NaN payloads in glibc:\n    \n    * libm-test-{get,set}payload* verify that getpayload, setpayload,\n      setpayloadsig and __builtin_nan functions are consistent in their\n      payload handling.\n    \n    * test-nan-payload verifies that strtod-family functions and the\n      not-built-in nan functions are consistent in their payload handling.\n    \n    Nothing, however, connects the two sets of functions (i.e., verifies\n    that strtod / nan are consistent with getpayload / setpayload /\n    __builtin_nan).\n    \n    Improve test-nan-payload to check actual payload value with getpayload\n    rather than just verifying that the strtod and nan functions produce\n    the same NaN.  Also check that the NaNs produced aren't signaling and\n    extend the tests to cover _FloatN / _FloatNx.\n    \n    Tested for x86_64.\n    \n    (cherry picked from commit be77d5ae417236883c02d3d67c0716e3f669fa41)\n\ndiff --git a/math/test-nan-payload.c b/math/test-nan-payload.c\nindex 4a81dc348b..55c13de14e 100644\n--- a/math/test-nan-payload.c\n+++ b/math/test-nan-payload.c\n@@ -16,6 +16,8 @@\n    License along with the GNU C Library; if not, see\n    <https://www.gnu.org/licenses/>.  */\n \n+#define _LIBC_TEST 1\n+#define __STDC_WANT_IEC_60559_TYPES_EXT__\n #include <float.h>\n #include <math.h>\n #include <stdio.h>\n@@ -31,7 +33,7 @@\n #define CHECK_IS_NAN(TYPE, A)\t\t\t\\\n   do\t\t\t\t\t\t\\\n     {\t\t\t\t\t\t\\\n-      if (isnan (A))\t\t\t\t\\\n+      if (isnan (A) && !issignaling (A))\t\\\n \tputs (\"PASS: \" #TYPE \" \" #A);\t\t\\\n       else\t\t\t\t\t\\\n \t{\t\t\t\t\t\\\n@@ -41,6 +43,19 @@\n     }\t\t\t\t\t\t\\\n   while (0)\n \n+#define CHECK_PAYLOAD(TYPE, FUNC, A, P)\t\t\\\n+  do\t\t\t\t\t\t\\\n+    {\t\t\t\t\t\t\\\n+      if (FUNC (&(A)) == (P))\t\t\t\\\n+\tputs (\"PASS: \" #TYPE \" payload \" #A);\t\\\n+      else\t\t\t\t\t\\\n+\t{\t\t\t\t\t\\\n+\t  puts (\"FAIL: \" #TYPE \" payload \" #A);\t\\\n+\t  result = 1;\t\t\t\t\\\n+\t}\t\t\t\t\t\\\n+    }\t\t\t\t\t\t\\\n+  while (0)\n+\n #define CHECK_SAME_NAN(TYPE, A, B)\t\t\t\\\n   do\t\t\t\t\t\t\t\\\n     {\t\t\t\t\t\t\t\\\n@@ -71,7 +86,7 @@\n    bits.  */\n #define CAN_TEST_EQ(MANT_DIG) ((MANT_DIG) != 64 && (MANT_DIG) != 106)\n \n-#define RUN_TESTS(TYPE, SFUNC, FUNC, MANT_DIG)\t\t\\\n+#define RUN_TESTS(TYPE, SFUNC, FUNC, PLFUNC, MANT_DIG)\t\\\n   do\t\t\t\t\t\t\t\\\n     {\t\t\t\t\t\t\t\\\n      TYPE n123 = WRAP_NAN (FUNC, \"123\");\t\t\\\n@@ -82,6 +97,10 @@\n      CHECK_IS_NAN (TYPE, n456);\t\t\t\t\\\n      TYPE s456 = WRAP_STRTO (SFUNC, \"NAN(456)\");\t\\\n      CHECK_IS_NAN (TYPE, s456);\t\t\t\t\\\n+     TYPE nh123 = WRAP_NAN (FUNC, \"0x123\");\t\t\\\n+     CHECK_IS_NAN (TYPE, nh123);\t\t\t\\\n+     TYPE sh123 = WRAP_STRTO (SFUNC, \"NAN(0x123)\");\t\\\n+     CHECK_IS_NAN (TYPE, sh123);\t\t\t\\\n      TYPE n123x = WRAP_NAN (FUNC, \"123)\");\t\t\\\n      CHECK_IS_NAN (TYPE, n123x);\t\t\t\\\n      TYPE nemp = WRAP_NAN (FUNC, \"\");\t\t\t\\\n@@ -92,8 +111,16 @@\n      CHECK_IS_NAN (TYPE, sx);\t\t\t\t\\\n      if (CAN_TEST_EQ (MANT_DIG))\t\t\t\\\n        CHECK_SAME_NAN (TYPE, n123, s123);\t\t\\\n+     CHECK_PAYLOAD (TYPE, PLFUNC, n123, 123);\t\t\\\n+     CHECK_PAYLOAD (TYPE, PLFUNC, s123, 123);\t\t\\\n      if (CAN_TEST_EQ (MANT_DIG))\t\t\t\\\n        CHECK_SAME_NAN (TYPE, n456, s456);\t\t\\\n+     CHECK_PAYLOAD (TYPE, PLFUNC, n456, 456);\t\t\\\n+     CHECK_PAYLOAD (TYPE, PLFUNC, s456, 456);\t\t\\\n+     if (CAN_TEST_EQ (MANT_DIG))\t\t\t\\\n+       CHECK_SAME_NAN (TYPE, nh123, sh123);\t\t\\\n+     CHECK_PAYLOAD (TYPE, PLFUNC, nh123, 0x123);\t\\\n+     CHECK_PAYLOAD (TYPE, PLFUNC, sh123, 0x123);\t\\\n      if (CAN_TEST_EQ (MANT_DIG))\t\t\t\\\n        CHECK_SAME_NAN (TYPE, nemp, semp);\t\t\\\n      if (CAN_TEST_EQ (MANT_DIG))\t\t\t\\\n@@ -110,9 +137,31 @@ static int\n do_test (void)\n {\n   int result = 0;\n-  RUN_TESTS (float, strtof, nanf, FLT_MANT_DIG);\n-  RUN_TESTS (double, strtod, nan, DBL_MANT_DIG);\n-  RUN_TESTS (long double, strtold, nanl, LDBL_MANT_DIG);\n+  RUN_TESTS (float, strtof, nanf, getpayloadf, FLT_MANT_DIG);\n+  RUN_TESTS (double, strtod, nan, getpayload, DBL_MANT_DIG);\n+  RUN_TESTS (long double, strtold, nanl, getpayloadl, LDBL_MANT_DIG);\n+#if __HAVE_FLOAT16\n+  RUN_TESTS (_Float16, strtof16, nanf16, getpayloadf16, FLT16_MANT_DIG);\n+#endif\n+#if __HAVE_FLOAT32\n+  RUN_TESTS (_Float32, strtof32, nanf32, getpayloadf32, FLT32_MANT_DIG);\n+#endif\n+#if __HAVE_FLOAT64\n+  RUN_TESTS (_Float64, strtof64, nanf64, getpayloadf64, FLT64_MANT_DIG);\n+#endif\n+#if __HAVE_FLOAT128\n+  RUN_TESTS (_Float128, strtof128, nanf128, getpayloadf128, FLT128_MANT_DIG);\n+#endif\n+#if __HAVE_FLOAT32X\n+  RUN_TESTS (_Float32x, strtof32x, nanf32x, getpayloadf32x, FLT32X_MANT_DIG);\n+#endif\n+#if __HAVE_FLOAT64X\n+  RUN_TESTS (_Float64x, strtof64x, nanf64x, getpayloadf64x, FLT64X_MANT_DIG);\n+#endif\n+#if __HAVE_FLOAT128X\n+  RUN_TESTS (_Float128x, strtof128x, nanf128x, getpayloadf128x,\n+\t     FLT128X_MANT_DIG);\n+#endif\n   return result;\n }\n \n\ncommit c4cc72d2efc741872d65ae1fd77572e47042d179\nAuthor: Joseph Myers <josmyers@redhat.com>\nDate:   Wed Sep 4 13:21:23 2024 +0000\n\n    Do not set errno for overflowing NaN payload in strtod/nan (bug 32045)\n    \n    As reported in bug 32045, it's incorrect for strtod/nan functions to\n    set errno based on overflowing payload (strtod should only set errno\n    for overflow / underflow of its actual result, and potentially if\n    nothing in the string can be parsed as a number at all; nan should be\n    a pure function that never sets it).  Save and restore errno around\n    the internal strtoull call and add associated test coverage.\n    \n    Tested for x86_64.\n    \n    (cherry picked from commit 64f62c47e9c350f353336f2df6714e1d48ec50d8)\n\ndiff --git a/math/Makefile b/math/Makefile\nindex f06d370383..b64c3eedd5 100644\n--- a/math/Makefile\n+++ b/math/Makefile\n@@ -1077,6 +1077,7 @@ CFLAGS-test-flt-eval-method.c += -fexcess-precision=standard\n CFLAGS-test-fe-snans-always-signal.c += $(config-cflags-signaling-nans)\n \n CFLAGS-test-nan-const.c += -fno-builtin\n+CFLAGS-test-nan-payload.c += -fno-builtin\n \n CFLAGS-test-ceil-except-2.c += -fno-builtin\n CFLAGS-test-floor-except-2.c += -fno-builtin\ndiff --git a/math/test-nan-payload.c b/math/test-nan-payload.c\nindex 55c13de14e..413791e09f 100644\n--- a/math/test-nan-payload.c\n+++ b/math/test-nan-payload.c\n@@ -18,6 +18,7 @@\n \n #define _LIBC_TEST 1\n #define __STDC_WANT_IEC_60559_TYPES_EXT__\n+#include <errno.h>\n #include <float.h>\n #include <math.h>\n #include <stdio.h>\n@@ -82,6 +83,26 @@\n     }\t\t\t\t\t\t\t\\\n   while (0)\n \n+#define CLEAR_ERRNO\t\t\t\t\\\n+  do\t\t\t\t\t\t\\\n+    {\t\t\t\t\t\t\\\n+      errno = 12345;\t\t\t\t\\\n+    }\t\t\t\t\t\t\\\n+  while (0)\n+\n+#define CHECK_ERRNO(TYPE, A)\t\t\t\t\\\n+  do\t\t\t\t\t\t\t\\\n+    {\t\t\t\t\t\t\t\\\n+      if (errno == 12345)\t\t\t\t\\\n+\tputs (\"PASS: \" #TYPE \" \" #A \" errno\");\t\t\\\n+      else\t\t\t\t\t\t\\\n+\t{\t\t\t\t\t\t\\\n+\t  puts (\"FAIL: \" #TYPE \" \" #A \" errno\");\t\\\n+\t  result = 1;\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\\\n+    }\t\t\t\t\t\t\t\\\n+  while (0)\n+\n /* Cannot test payloads by memcmp for formats where NaNs have padding\n    bits.  */\n #define CAN_TEST_EQ(MANT_DIG) ((MANT_DIG) != 64 && (MANT_DIG) != 106)\n@@ -89,26 +110,58 @@\n #define RUN_TESTS(TYPE, SFUNC, FUNC, PLFUNC, MANT_DIG)\t\\\n   do\t\t\t\t\t\t\t\\\n     {\t\t\t\t\t\t\t\\\n+     CLEAR_ERRNO;\t\t\t\t\t\\\n      TYPE n123 = WRAP_NAN (FUNC, \"123\");\t\t\\\n+     CHECK_ERRNO (TYPE, n123);\t\t\t\t\\\n      CHECK_IS_NAN (TYPE, n123);\t\t\t\t\\\n+     CLEAR_ERRNO;\t\t\t\t\t\\\n      TYPE s123 = WRAP_STRTO (SFUNC, \"NAN(123)\");\t\\\n+     CHECK_ERRNO (TYPE, s123);\t\t\t\t\\\n      CHECK_IS_NAN (TYPE, s123);\t\t\t\t\\\n+     CLEAR_ERRNO;\t\t\t\t\t\\\n      TYPE n456 = WRAP_NAN (FUNC, \"456\");\t\t\\\n+     CHECK_ERRNO (TYPE, n456);\t\t\t\t\\\n      CHECK_IS_NAN (TYPE, n456);\t\t\t\t\\\n+     CLEAR_ERRNO;\t\t\t\t\t\\\n      TYPE s456 = WRAP_STRTO (SFUNC, \"NAN(456)\");\t\\\n+     CHECK_ERRNO (TYPE, s456);\t\t\t\t\\\n      CHECK_IS_NAN (TYPE, s456);\t\t\t\t\\\n+     CLEAR_ERRNO;\t\t\t\t\t\\\n      TYPE nh123 = WRAP_NAN (FUNC, \"0x123\");\t\t\\\n+     CHECK_ERRNO (TYPE, nh123);\t\t\t\t\\\n      CHECK_IS_NAN (TYPE, nh123);\t\t\t\\\n+     CLEAR_ERRNO;\t\t\t\t\t\\\n      TYPE sh123 = WRAP_STRTO (SFUNC, \"NAN(0x123)\");\t\\\n+     CHECK_ERRNO (TYPE, sh123);\t\t\t\t\\\n      CHECK_IS_NAN (TYPE, sh123);\t\t\t\\\n+     CLEAR_ERRNO;\t\t\t\t\t\\\n      TYPE n123x = WRAP_NAN (FUNC, \"123)\");\t\t\\\n+     CHECK_ERRNO (TYPE, n123x);\t\t\t\t\\\n      CHECK_IS_NAN (TYPE, n123x);\t\t\t\\\n+     CLEAR_ERRNO;\t\t\t\t\t\\\n      TYPE nemp = WRAP_NAN (FUNC, \"\");\t\t\t\\\n+     CHECK_ERRNO (TYPE, nemp);\t\t\t\t\\\n      CHECK_IS_NAN (TYPE, nemp);\t\t\t\t\\\n+     CLEAR_ERRNO;\t\t\t\t\t\\\n      TYPE semp = WRAP_STRTO (SFUNC, \"NAN()\");\t\t\\\n+     CHECK_ERRNO (TYPE, semp);\t\t\t\t\\\n      CHECK_IS_NAN (TYPE, semp);\t\t\t\t\\\n+     CLEAR_ERRNO;\t\t\t\t\t\\\n      TYPE sx = WRAP_STRTO (SFUNC, \"NAN\");\t\t\\\n+     CHECK_ERRNO (TYPE, sx);\t\t\t\t\\\n      CHECK_IS_NAN (TYPE, sx);\t\t\t\t\\\n+     CLEAR_ERRNO;\t\t\t\t\t\\\n+     TYPE novf = WRAP_NAN (FUNC, \"9999999999\"\t\t\\\n+\t\t\t   \"99999999999999999999\"\t\\\n+\t\t\t   \"9999999999\");\t\t\\\n+     CHECK_ERRNO (TYPE, novf);\t\t\t\t\\\n+     CHECK_IS_NAN (TYPE, novf);\t\t\t\t\\\n+     CLEAR_ERRNO;\t\t\t\t\t\\\n+     TYPE sovf = WRAP_STRTO (SFUNC, \"NAN(9999999999\"\t\\\n+\t\t\t     \"99999999999999999999\"\t\\\n+\t\t\t     \"9999999999)\");\t\t\\\n+     CHECK_ERRNO (TYPE, sovf);\t\t\t\t\\\n+     CHECK_IS_NAN (TYPE, sovf);\t\t\t\t\\\n      if (CAN_TEST_EQ (MANT_DIG))\t\t\t\\\n        CHECK_SAME_NAN (TYPE, n123, s123);\t\t\\\n      CHECK_PAYLOAD (TYPE, PLFUNC, n123, 123);\t\t\\\ndiff --git a/stdlib/strtod_nan_main.c b/stdlib/strtod_nan_main.c\nindex 4cb286d2b3..39fb7e9f75 100644\n--- a/stdlib/strtod_nan_main.c\n+++ b/stdlib/strtod_nan_main.c\n@@ -16,6 +16,7 @@\n    License along with the GNU C Library; if not, see\n    <https://www.gnu.org/licenses/>.  */\n \n+#include <errno.h>\n #include <ieee754.h>\n #include <locale.h>\n #include <math.h>\n@@ -50,7 +51,9 @@ STRTOD_NAN (const STRING_TYPE *str, STRING_TYPE **endptr, STRING_TYPE endc)\n   STRING_TYPE *endp;\n   unsigned long long int mant;\n \n+  int save_errno = errno;\n   mant = STRTOULL (str, &endp, 0);\n+  __set_errno (save_errno);\n   if (endp == cp)\n     SET_NAN_PAYLOAD (retval, mant);\n \n\ncommit 5a10d05c39689dcf7ee694ec94cd2fd069c747ee\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Thu Sep 5 21:18:23 2024 +0200\n\n    powerpc64le: Build new strtod tests with long double ABI flags (bug 32145)\n    \n    This fixes several test failures:\n    \n    =====FAIL: stdlib/tst-strtod1i.out=====\n    Locale tests\n    all OK\n    Locale tests\n    all OK\n    Locale tests\n    strtold(\"1,5\") returns -6,38643e+367 and not 1,5\n    strtold(\"1.5\") returns 1,5 and not 1\n    strtold(\"1.500\") returns 1 and not 1500\n    strtold(\"36.893.488.147.419.103.232\") returns 1500 and not 3,68935e+19\n    Locale tests\n    all OK\n    \n    =====FAIL: stdlib/tst-strtod3.out=====\n    0: got wrong results -2.5937e+4826, expected 0\n    \n    =====FAIL: stdlib/tst-strtod4.out=====\n    0: got wrong results -6,38643e+367, expected 0\n    1: got wrong results 0, expected 1e+06\n    2: got wrong results 1e+06, expected 10\n    \n    =====FAIL: stdlib/tst-strtod5i.out=====\n    0: got wrong results -6,38643e+367, expected 0\n    2: got wrong results 0, expected -0\n    4: got wrong results -0, expected 0\n    5: got wrong results 0, expected -0\n    6: got wrong results -0, expected 0\n    7: got wrong results 0, expected -0\n    8: got wrong results -0, expected 0\n    9: got wrong results 0, expected -0\n    10: got wrong results -0, expected 0\n    11: got wrong results 0, expected -0\n    12: got wrong results -0, expected 0\n    13: got wrong results 0, expected -0\n    14: got wrong results -0, expected 0\n    15: got wrong results 0, expected -0\n    16: got wrong results -0, expected 0\n    17: got wrong results 0, expected -0\n    18: got wrong results -0, expected 0\n    20: got wrong results 0, expected -0\n    22: got wrong results -0, expected 0\n    23: got wrong results 0, expected -0\n    24: got wrong results -0, expected 0\n    25: got wrong results 0, expected -0\n    26: got wrong results -0, expected 0\n    27: got wrong results 0, expected -0\n    \n    Fixes commit 3fc063dee01da4f80920a14b7db637c8501d6fd4\n    (\"Make __strtod_internal tests type-generic\").\n    \n    Suggested-by: Joseph Myers <josmyers@redhat.com>\n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit cc3e743fc09ee6fca45767629df9cbcbe1feba82)\n\ndiff --git a/sysdeps/powerpc/powerpc64/le/Makefile b/sysdeps/powerpc/powerpc64/le/Makefile\nindex 9d568d4f44..b77775cf95 100644\n--- a/sysdeps/powerpc/powerpc64/le/Makefile\n+++ b/sysdeps/powerpc/powerpc64/le/Makefile\n@@ -129,6 +129,10 @@ CFLAGS-tst-strtod-round.c += $(type-float128-CFLAGS)\n CFLAGS-tst-wcstod-round.c += $(type-float128-CFLAGS)\n CFLAGS-tst-strtod-nan-locale.c += $(type-float128-CFLAGS)\n CFLAGS-tst-wcstod-nan-locale.c += $(type-float128-CFLAGS)\n+CFLAGS-tst-strtod1i.c += $(type-float128-CFLAGS)\n+CFLAGS-tst-strtod3.c += $(type-float128-CFLAGS)\n+CFLAGS-tst-strtod4.c += $(type-float128-CFLAGS)\n+CFLAGS-tst-strtod5i.c += $(type-float128-CFLAGS)\n CFLAGS-tst-strtod6.c += $(type-float128-CFLAGS)\n CFLAGS-tst-strfrom.c += $(type-float128-CFLAGS)\n CFLAGS-tst-strfrom-locale.c += $(type-float128-CFLAGS)\n\ncommit 4a9b6cdc88335e2a7291418563073a58fe97346e\nAuthor: Joseph Myers <josmyers@redhat.com>\nDate:   Fri Sep 20 23:23:13 2024 +0000\n\n    Make tst-strtod2 and tst-strtod5 type-generic\n    \n    Some of the strtod tests use type-generic machinery in tst-strtod.h to\n    test the strto* functions for all floating types, while others only\n    test double even when the tests are in fact meaningful for all\n    floating types.\n    \n    Convert tst-strtod2 and tst-strtod5 to use the type-generic machinery\n    so they test all floating types.  I haven't tried to convert them to\n    use newer test interfaces in other ways, just made the changes\n    necessary to use the type-generic machinery.\n    \n    Tested for x86_64.\n    \n    (cherry picked from commit 8de031bcb9adfa736c0caed2c79d10947b8d8f48)\n\ndiff --git a/stdlib/tst-strtod2.c b/stdlib/tst-strtod2.c\nindex a7df82ebbd..2cb0953fa9 100644\n--- a/stdlib/tst-strtod2.c\n+++ b/stdlib/tst-strtod2.c\n@@ -1,43 +1,61 @@\n #include <stdio.h>\n #include <stdlib.h>\n \n-struct test\n-{\n-  const char *str;\n-  double result;\n-  size_t offset;\n-} tests[] =\n-{\n-  { \"0xy\", 0.0, 1 },\n-  { \"0x.y\", 0.0, 1 },\n-  { \"0x0.y\", 0.0, 4 },\n-  { \"0x.0y\", 0.0, 4 },\n-  { \".y\", 0.0, 0 },\n-  { \"0.y\", 0.0, 2 },\n-  { \".0y\", 0.0, 2 }\n-};\n+#include \"tst-strtod.h\"\n+\n+#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF)\t\t\t\\\n+struct test_strto ## FSUF\t\t\t\t\t\t\\\n+{\t\t\t\t\t\t\t\t\t\\\n+  const char *str;\t\t\t\t\t\t\t\\\n+  FTYPE result;\t\t\t\t\t\t\t\t\\\n+  size_t offset;\t\t\t\t\t\t\t\\\n+} tests_strto ## FSUF[] =\t\t\t\t\t\t\\\n+{\t\t\t\t\t\t\t\t\t\\\n+  { \"0xy\", 0.0 ## LSUF, 1 },\t\t\t\t\t\t\\\n+  { \"0x.y\", 0.0 ## LSUF, 1 },\t\t\t\t\t\t\\\n+  { \"0x0.y\", 0.0 ## LSUF, 4 },\t\t\t\t\t\t\\\n+  { \"0x.0y\", 0.0 ## LSUF, 4 },\t\t\t\t\t\t\\\n+  { \".y\", 0.0 ## LSUF, 0 },\t\t\t\t\t\t\\\n+  { \"0.y\", 0.0 ## LSUF, 2 },\t\t\t\t\t\t\\\n+  { \".0y\", 0.0 ## LSUF, 2 }\t\t\t\t\t\t\\\n+};\t\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+static int\t\t\t\t\t\t\t\t\\\n+test_strto ## FSUF (void)\t\t\t\t\t\t\\\n+{\t\t\t\t\t\t\t\t\t\\\n+  int status = 0;\t\t\t\t\t\t\t\\\n+  for (size_t i = 0;\t\t\t\t\t\t\t\\\n+       i < sizeof (tests_strto ## FSUF) / sizeof (tests_strto ## FSUF[0]); \\\n+       ++i)\t\t\t\t\t\t\t\t\\\n+    {\t\t\t\t\t\t\t\t\t\\\n+      char *ep;\t\t\t\t\t\t\t\t\\\n+      FTYPE r = strto ## FSUF (tests_strto ## FSUF[i].str, &ep);\t\\\n+      if (r != tests_strto ## FSUF[i].result)\t\t\t\t\\\n+\t{\t\t\t\t\t\t\t\t\\\n+\t  char buf1[FSTRLENMAX], buf2[FSTRLENMAX];\t\t\t\\\n+\t  FTOSTR (buf1, sizeof (buf1), \"%g\", r);\t\t\t\\\n+\t  FTOSTR (buf2, sizeof (buf2), \"%g\", tests_strto ## FSUF[i].result); \\\n+\t  printf (\"test %zu r = %s, expect %s\\n\", i, buf1, buf2);\t\\\n+\t  status = 1;\t\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\t\\\n+      if (ep != tests_strto ## FSUF[i].str + tests_strto ## FSUF[i].offset) \\\n+\t{\t\t\t\t\t\t\t\t\\\n+\t  printf (\"test %zu strto\" #FSUF\t\t\t\t\\\n+\t\t  \" parsed %tu characters, expected %zu\\n\",\t\t\\\n+\t\t  i, ep - tests_strto ## FSUF[i].str,\t\t\t\\\n+\t\t  tests_strto ## FSUF[i].offset);\t\t\t\\\n+\t  status = 1;\t\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\t\\\n+    }\t\t\t\t\t\t\t\t\t\\\n+  return status;\t\t\t\t\t\t\t\\\n+}\n+\n+GEN_TEST_STRTOD_FOREACH (TEST_STRTOD)\n \n static int\n do_test (void)\n {\n-  int status = 0;\n-  for (size_t i = 0; i < sizeof (tests) / sizeof (tests[0]); ++i)\n-    {\n-      char *ep;\n-      double r = strtod (tests[i].str, &ep);\n-      if (r != tests[i].result)\n-\t{\n-\t  printf (\"test %zu r = %g, expect %g\\n\", i, r, tests[i].result);\n-\t  status = 1;\n-\t}\n-      if (ep != tests[i].str + tests[i].offset)\n-\t{\n-\t  printf (\"test %zu strtod parsed %tu characters, expected %zu\\n\",\n-\t\t  i, ep - tests[i].str, tests[i].offset);\n-\t  status = 1;\n-\t}\n-    }\n-  return status;\n+  return STRTOD_TEST_FOREACH (test_strto);\n }\n \n #define TEST_FUNCTION do_test ()\ndiff --git a/stdlib/tst-strtod5.c b/stdlib/tst-strtod5.c\nindex 29153ec005..7eb9b3a2d7 100644\n--- a/stdlib/tst-strtod5.c\n+++ b/stdlib/tst-strtod5.c\n@@ -22,35 +22,75 @@\n #include <string.h>\n #include <math.h>\n \n+#include \"tst-strtod.h\"\n+\n #define NBSP \"\\xc2\\xa0\"\n \n-static const struct\n-{\n-  const char *in;\n-  double expected;\n-} tests[] =\n-  {\n-    { \"0\", 0.0 },\n-    { \"000\", 0.0 },\n-    { \"-0\", -0.0 },\n-    { \"-000\", -0.0 },\n-    { \"0,\", 0.0 },\n-    { \"-0,\", -0.0 },\n-    { \"0,0\", 0.0 },\n-    { \"-0,0\", -0.0 },\n-    { \"0e-10\", 0.0 },\n-    { \"-0e-10\", -0.0 },\n-    { \"0,e-10\", 0.0 },\n-    { \"-0,e-10\", -0.0 },\n-    { \"0,0e-10\", 0.0 },\n-    { \"-0,0e-10\", -0.0 },\n-    { \"0e-1000000\", 0.0 },\n-    { \"-0e-1000000\", -0.0 },\n-    { \"0,0e-1000000\", 0.0 },\n-    { \"-0,0e-1000000\", -0.0 },\n-  };\n-#define NTESTS (sizeof (tests) / sizeof (tests[0]))\n+#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF)\t\t\t\\\n+static const struct\t\t\t\t\t\t\t\\\n+{\t\t\t\t\t\t\t\t\t\\\n+  const char *in;\t\t\t\t\t\t\t\\\n+  FTYPE expected;\t\t\t\t\t\t\t\\\n+} tests_strto ## FSUF[] =\t\t\t\t\t\t\\\n+  {\t\t\t\t\t\t\t\t\t\\\n+    { \"0\", 0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"000\", 0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"-0\", -0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"-000\", -0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"0,\", 0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"-0,\", -0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"0,0\", 0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"-0,0\", -0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"0e-10\", 0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"-0e-10\", -0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"0,e-10\", 0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"-0,e-10\", -0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"0,0e-10\", 0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"-0,0e-10\", -0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"0e-1000000\", 0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"-0e-1000000\", -0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"0,0e-1000000\", 0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"-0,0e-1000000\", -0.0 ## LSUF },\t\t\t\t\t\\\n+  };\t\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+static int\t\t\t\t\t\t\t\t\\\n+test_strto ## FSUF (void)\t\t\t\t\t\t\\\n+{\t\t\t\t\t\t\t\t\t\\\n+  int status = 0;\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+  for (int i = 0;\t\t\t\t\t\t\t\\\n+       i < sizeof (tests_strto ## FSUF) / sizeof (tests_strto ## FSUF[0]); \\\n+       ++i)\t\t\t\t\t\t\t\t\\\n+    {\t\t\t\t\t\t\t\t\t\\\n+      char *ep;\t\t\t\t\t\t\t\t\\\n+      FTYPE r = strto ## FSUF (tests_strto ## FSUF[i].in, &ep);\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+      if (*ep != '\\0')\t\t\t\t\t\t\t\\\n+\t{\t\t\t\t\t\t\t\t\\\n+\t  printf (\"%d: got rest string \\\"%s\\\", expected \\\"\\\"\\n\", i, ep); \\\n+\t  status = 1;\t\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+      if (r != tests_strto ## FSUF[i].expected\t\t\t\t\\\n+\t  || (copysign ## CSUF (10.0 ## LSUF, r)\t\t\t\\\n+\t      != copysign ## CSUF (10.0 ## LSUF,\t\t\t\\\n+\t\t\t\t   tests_strto ## FSUF[i].expected)))\t\\\n+\t{\t\t\t\t\t\t\t\t\\\n+\t  char buf1[FSTRLENMAX], buf2[FSTRLENMAX];\t\t\t\\\n+\t  FTOSTR (buf1, sizeof (buf1), \"%g\", r);\t\t\t\\\n+\t  FTOSTR (buf2, sizeof (buf2), \"%g\",\t\t\t\t\\\n+\t\t  tests_strto ## FSUF[i].expected);\t\t\t\\\n+\t  printf (\"%d: got wrong results %s, expected %s\\n\",\t\t\\\n+\t\t  i, buf1, buf2);\t\t\t\t\t\\\n+\t  status = 1;\t\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\t\\\n+    }\t\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+  return status;\t\t\t\t\t\t\t\\\n+}\n \n+GEN_TEST_STRTOD_FOREACH (TEST_STRTOD)\n \n static int\n do_test (void)\n@@ -61,29 +101,7 @@ do_test (void)\n       return 1;\n     }\n \n-  int status = 0;\n-\n-  for (int i = 0; i < NTESTS; ++i)\n-    {\n-      char *ep;\n-      double r = strtod (tests[i].in, &ep);\n-\n-      if (*ep != '\\0')\n-\t{\n-\t  printf (\"%d: got rest string \\\"%s\\\", expected \\\"\\\"\\n\", i, ep);\n-\t  status = 1;\n-\t}\n-\n-      if (r != tests[i].expected\n-\t  || copysign (10.0, r) != copysign (10.0, tests[i].expected))\n-\t{\n-\t  printf (\"%d: got wrong results %g, expected %g\\n\",\n-\t\t  i, r, tests[i].expected);\n-\t  status = 1;\n-\t}\n-    }\n-\n-  return status;\n+  return STRTOD_TEST_FOREACH (test_strto);\n }\n \n #include <support/test-driver.c>\n\ncommit 8f40dfbe2ad8a4a2d2fc3bbe01d289037d113ced\nAuthor: Joseph Myers <josmyers@redhat.com>\nDate:   Fri Sep 20 23:24:02 2024 +0000\n\n    Add more tests of strtod end pointer\n    \n    Although there are some tests in tst-strtod2 and tst-strtod3 for the\n    end pointer provided by strtod when it doesn't parse the whole string,\n    they aren't very thorough.  Add tests of more such cases to\n    tst-strtod2.\n    \n    Tested for x86_64.\n    \n    (cherry picked from commit b5d3737b305525315e0c7c93ca49eadc868eabd5)\n\ndiff --git a/stdlib/tst-strtod2.c b/stdlib/tst-strtod2.c\nindex 2cb0953fa9..c84bd792c1 100644\n--- a/stdlib/tst-strtod2.c\n+++ b/stdlib/tst-strtod2.c\n@@ -1,3 +1,4 @@\n+#include <math.h>\n #include <stdio.h>\n #include <stdlib.h>\n \n@@ -17,10 +18,46 @@ struct test_strto ## FSUF\t\t\t\t\t\t\\\n   { \"0x.0y\", 0.0 ## LSUF, 4 },\t\t\t\t\t\t\\\n   { \".y\", 0.0 ## LSUF, 0 },\t\t\t\t\t\t\\\n   { \"0.y\", 0.0 ## LSUF, 2 },\t\t\t\t\t\t\\\n-  { \".0y\", 0.0 ## LSUF, 2 }\t\t\t\t\t\t\\\n+  { \".0y\", 0.0 ## LSUF, 2 },\t\t\t\t\t\t\\\n+  { \"1.0e\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n+  { \"1.0e+\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n+  { \"1.0e-\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n+  { \"1.0ex\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n+  { \"1.0e+x\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n+  { \"1.0e-x\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n+  { \"0x1p\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n+  { \"0x1p+\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n+  { \"0x1p-\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n+  { \"0x1px\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n+  { \"0x1p+x\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n+  { \"0x1p-x\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n+  { \"INFx\", INFINITY, 3 },\t\t\t\t\t\t\\\n+  { \"infx\", INFINITY, 3 },\t\t\t\t\t\t\\\n+  { \"INFINITx\", INFINITY, 3 },\t\t\t\t\t\t\\\n+  { \"infinitx\", INFINITY, 3 },\t\t\t\t\t\t\\\n+  { \"INFINITYY\", INFINITY, 8 },\t\t\t\t\t\t\\\n+  { \"infinityy\", INFINITY, 8 },\t\t\t\t\t\t\\\n+  { \"NANx\", NAN, 3 },\t\t\t\t\t\t\t\\\n+  { \"nanx\", NAN, 3 },\t\t\t\t\t\t\t\\\n+  { \"NAN(\", NAN, 3 },\t\t\t\t\t\t\t\\\n+  { \"nan(\", NAN, 3 },\t\t\t\t\t\t\t\\\n+  { \"NAN(x\", NAN, 3 },\t\t\t\t\t\t\t\\\n+  { \"nan(x\", NAN, 3 },\t\t\t\t\t\t\t\\\n+  { \"NAN(x)y\", NAN, 6 },\t\t\t\t\t\t\\\n+  { \"nan(x)y\", NAN, 6 },\t\t\t\t\t\t\\\n+  { \"NAN(*)y\", NAN, 3 },\t\t\t\t\t\t\\\n+  { \"nan(*)y\", NAN, 3 }\t\t\t\t\t\t\t\\\n };\t\t\t\t\t\t\t\t\t\\\n \t\t\t\t\t\t\t\t\t\\\n static int\t\t\t\t\t\t\t\t\\\n+compare_strto ## FSUF (FTYPE x, FTYPE y)\t\t\t\t\\\n+{\t\t\t\t\t\t\t\t\t\\\n+  if (isnan (x) && isnan (y))\t\t\t\t\t\t\\\n+    return 1;\t\t\t\t\t\t\t\t\\\n+  return x == y;\t\t\t\t\t\t\t\\\n+}\t\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+static int\t\t\t\t\t\t\t\t\\\n test_strto ## FSUF (void)\t\t\t\t\t\t\\\n {\t\t\t\t\t\t\t\t\t\\\n   int status = 0;\t\t\t\t\t\t\t\\\n@@ -30,7 +67,7 @@ test_strto ## FSUF (void)\t\t\t\t\t\t\\\n     {\t\t\t\t\t\t\t\t\t\\\n       char *ep;\t\t\t\t\t\t\t\t\\\n       FTYPE r = strto ## FSUF (tests_strto ## FSUF[i].str, &ep);\t\\\n-      if (r != tests_strto ## FSUF[i].result)\t\t\t\t\\\n+      if (!compare_strto ## FSUF (r, tests_strto ## FSUF[i].result))\t\\\n \t{\t\t\t\t\t\t\t\t\\\n \t  char buf1[FSTRLENMAX], buf2[FSTRLENMAX];\t\t\t\\\n \t  FTOSTR (buf1, sizeof (buf1), \"%g\", r);\t\t\t\\\n\ncommit cc256952ecb07789c423dff9712eb7a38f80e963\nAuthor: Joseph Myers <josmyers@redhat.com>\nDate:   Fri Sep 20 23:24:45 2024 +0000\n\n    Add tests of more strtod special cases\n    \n    There is very little test coverage of inputs to strtod-family\n    functions that don't contain anything that can be parsed as a number\n    (one test of \".y\" in tst-strtod2), and none that I can see of skipping\n    initial whitespace.  Add some tests of these things to tst-strtod2.\n    \n    Tested for x86_64.\n    \n    (cherry picked from commit 378039ca578c2ea93095a1e710d96f58c68a3997)\n\ndiff --git a/stdlib/tst-strtod2.c b/stdlib/tst-strtod2.c\nindex c84bd792c1..d00bc13323 100644\n--- a/stdlib/tst-strtod2.c\n+++ b/stdlib/tst-strtod2.c\n@@ -31,6 +31,20 @@ struct test_strto ## FSUF\t\t\t\t\t\t\\\n   { \"0x1px\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n   { \"0x1p+x\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n   { \"0x1p-x\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n+  { \"\", 0.0 ## LSUF, 0 },\t\t\t\t\t\t\\\n+  { \".\", 0.0 ## LSUF, 0 },\t\t\t\t\t\t\\\n+  { \"-\", 0.0 ## LSUF, 0 },\t\t\t\t\t\t\\\n+  { \"-.\", 0.0 ## LSUF, 0 },\t\t\t\t\t\t\\\n+  { \".e\", 0.0 ## LSUF, 0 },\t\t\t\t\t\t\\\n+  { \"-.e\", 0.0 ## LSUF, 0 },\t\t\t\t\t\t\\\n+  { \" \\t\", 0.0 ## LSUF, 0 },\t\t\t\t\t\t\\\n+  { \" \\t.\", 0.0 ## LSUF, 0 },\t\t\t\t\t\t\\\n+  { \" \\t-\", 0.0 ## LSUF, 0 },\t\t\t\t\t\t\\\n+  { \" \\t-.\", 0.0 ## LSUF, 0 },\t\t\t\t\t\t\\\n+  { \" \\t.e\", 0.0 ## LSUF, 0 },\t\t\t\t\t\t\\\n+  { \" \\t-.e\", 0.0 ## LSUF, 0 },\t\t\t\t\t\t\\\n+  { \" \\t\\f\\r\\n\\v1\", 1.0 ## LSUF, 7 },\t\t\t\t\t\\\n+  { \" \\t\\f\\r\\n\\v-1.5e2\", -150.0 ## LSUF, 12 },\t\t\t\t\\\n   { \"INFx\", INFINITY, 3 },\t\t\t\t\t\t\\\n   { \"infx\", INFINITY, 3 },\t\t\t\t\t\t\\\n   { \"INFINITx\", INFINITY, 3 },\t\t\t\t\t\t\\\n\ncommit 5c06c6e0b5078ffb0aa0c09bac79f086145e0897\nAuthor: H.J. Lu <hjl.tools@gmail.com>\nDate:   Sat Sep 7 08:32:32 2024 -0700\n\n    libio: Set _vtable_offset before calling _IO_link_in [BZ #32148]\n    \n    Since _IO_vtable_offset is used to detect the old binaries, set it\n    in _IO_old_file_init_internal before calling _IO_link_in which checks\n    _IO_vtable_offset.  Add a glibc 2.0 test with copy relocation on\n    _IO_stderr_@GLIBC_2.0 to verify that fopen won't cause memory corruption.\n    This fixes BZ #32148.\n    \n    Signed-off-by: H.J. Lu <hjl.tools@gmail.com>\n    Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>\n    (cherry picked from commit 9dfea3de7f690bff70e3c6eb346b9ad082bb2e35)\n\ndiff --git a/libio/Makefile b/libio/Makefile\nindex 6a507b67ea..5292baa4e0 100644\n--- a/libio/Makefile\n+++ b/libio/Makefile\n@@ -286,11 +286,18 @@ endif\n ifeq ($(build-shared),yes)\n aux\t+= oldfileops oldstdfiles\n tests += \\\n+  tst-fopen-compat \\\n   tst-stderr-compat \\\n # tests\n tests-2.0 += \\\n+  tst-fopen-compat \\\n   tst-stderr-compat \\\n # tests-2.0\n+\n+tst-fopen-compat-ARGS = tst-fopen-compat.c\n+# Disable PIE to trigger copy relocation.\n+CFLAGS-tst-fopen-compat.c += -fno-pie\n+tst-fopen-compat-no-pie = yes\n endif\n \n shared-only-routines = oldiofopen oldiofdopen oldiofclose oldfileops\t\\\ndiff --git a/libio/oldfileops.c b/libio/oldfileops.c\nindex 97148dba9b..8f775c9094 100644\n--- a/libio/oldfileops.c\n+++ b/libio/oldfileops.c\n@@ -103,9 +103,11 @@ _IO_old_file_init_internal (struct _IO_FILE_plus *fp)\n   fp->file._old_offset = _IO_pos_BAD;\n   fp->file._flags |= CLOSED_FILEBUF_FLAGS;\n \n-  _IO_link_in (fp);\n+  /* NB: _vtable_offset must be set before calling _IO_link_in since\n+     _IO_vtable_offset is used to detect the old binaries.  */\n   fp->file._vtable_offset = ((int) sizeof (struct _IO_FILE)\n \t\t\t     - (int) sizeof (struct _IO_FILE_complete));\n+  _IO_link_in (fp);\n   fp->file._fileno = -1;\n \n   if (&_IO_stdin_used != NULL || !_IO_legacy_file ((FILE *) fp))\ndiff --git a/libio/tst-fopen-compat.c b/libio/tst-fopen-compat.c\nnew file mode 100644\nindex 0000000000..f241b61043\n--- /dev/null\n+++ b/libio/tst-fopen-compat.c\n@@ -0,0 +1,85 @@\n+/* Verify that fopen works with copy relocation on _IO_stderr_ in binaries\n+   linked with glibc 2.0.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <shlib-compat.h>\n+\n+#if TEST_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)\n+# define _LIBC\n+# define _IO_USE_OLD_IO_FILE\n+# include <stdio.h>\n+# include <string.h>\n+# include <unistd.h>\n+# include <limits.h>\n+# include <sys/stat.h>\n+# include <support/check.h>\n+\n+struct _IO_jump_t;\n+\n+struct _IO_FILE_plus\n+{\n+  FILE file;\n+  const struct _IO_jump_t *vtable;\n+};\n+\n+extern struct _IO_FILE_plus _IO_stderr_;\n+compat_symbol_reference (libc, _IO_stderr_, _IO_stderr_, GLIBC_2_0);\n+compat_symbol_reference (libc, fopen, fopen, GLIBC_2_0);\n+compat_symbol_reference (libc, fclose, fclose, GLIBC_2_0);\n+\n+static int\n+do_test (int argc, char *argv[])\n+{\n+  static char filename[PATH_MAX + 1];\n+  struct stat st;\n+  char *name = NULL;\n+  int i;\n+\n+  /* Try to trigger copy relocation.  */\n+  TEST_VERIFY_EXIT (_IO_stderr_.file._fileno == STDERR_FILENO);\n+\n+  for (i = 1; i < argc; i++)\n+    {\n+      name = argv[i];\n+      if (stat (name, &st) == 0)\n+\t{\n+\t  TEST_VERIFY_EXIT (strlen (name) <= PATH_MAX);\n+\t  break;\n+\t}\n+    }\n+  TEST_VERIFY_EXIT (name != NULL);\n+\n+  strcpy (filename, name);\n+  FILE *fp = fopen (filename, \"r\");\n+  TEST_VERIFY_EXIT (strcmp (filename, name) == 0);\n+  TEST_VERIFY_EXIT (fp != NULL);\n+  TEST_VERIFY_EXIT (fclose (fp) == 0);\n+  return 0;\n+}\n+#else\n+# include <support/test-driver.h>\n+\n+static int\n+do_test (int argc, char *argv[])\n+{\n+  return EXIT_UNSUPPORTED;\n+}\n+#endif\n+\n+#define TEST_FUNCTION_ARGV do_test\n+#include <support/test-driver.c>\n\ncommit 85e5850f2f4ea5f304be5356ecb7a15998766a4e\nAuthor: Joseph Myers <josmyers@redhat.com>\nDate:   Fri Sep 20 23:25:32 2024 +0000\n\n    Make tst-strtod-underflow type-generic\n    \n    The test tst-strtod-underflow covers various edge cases close to the\n    underflow threshold for strtod (especially cases where underflow on\n    architectures with after-rounding tininess detection depends on the\n    rounding mode).  Make it use the type-generic machinery, with\n    corresponding test inputs for each supported floating-point format, so\n    that other functions in the strtod family are tested for underflow\n    edge cases as well.\n    \n    Tested for x86_64.\n    \n    (cherry picked from commit 94ca2c0894f0e1b62625c369cc598a2b9236622c)\n\ndiff --git a/stdlib/tst-strtod-underflow.c b/stdlib/tst-strtod-underflow.c\nindex a5ced18599..8598b95b6d 100644\n--- a/stdlib/tst-strtod-underflow.c\n+++ b/stdlib/tst-strtod-underflow.c\n@@ -17,6 +17,10 @@\n    License along with the GNU C Library; if not, see\n    <https://www.gnu.org/licenses/>.  */\n \n+/* Defining _LIBC_TEST ensures long double math functions are\n+   declared in the headers.  */\n+#define _LIBC_TEST 1\n+#define __STDC_WANT_IEC_60559_TYPES_EXT__\n #include <errno.h>\n #include <fenv.h>\n #include <float.h>\n@@ -25,6 +29,60 @@\n #include <stdlib.h>\n #include <tininess.h>\n \n+#include \"tst-strtod.h\"\n+\n+/* Logic for selecting between tests for different formats is as in\n+   tst-strtod-skeleton.c, but here it is selecting string inputs with\n+   different underflow properties, rather than generated test\n+   data.  */\n+\n+#define _CONCAT(a, b) a ## b\n+#define CONCAT(a, b) _CONCAT (a, b)\n+\n+#define MEMBER(FSUF, FTYPE, FTOSTR, LSUF, CSUF)\t\\\n+  const char *s_ ## FSUF;\n+\n+#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024\n+# define CHOOSE_ld(f,d,...) d\n+#elif LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384 && LDBL_MIN_EXP == -16381\n+# define CHOOSE_ld(f,d,ld64i,...) ld64i\n+#elif LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384 && LDBL_MIN_EXP == -16382\n+# define CHOOSE_ld(f,d,ld64i,ld64m,...) ld64m\n+#elif LDBL_MANT_DIG == 106 && LDBL_MAX_EXP == 1024\n+# define CHOOSE_ld(f,d,ld64i,ld64m,ld106,...) ld106\n+#elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384\n+# define CHOOSE_ld(f,d,ld64i,ld64m,ld106,ld113,...) ld113\n+#else\n+# error \"unknown long double format\"\n+#endif\n+\n+#define CHOOSE_f(f,...) f\n+#define CHOOSE_f32(f,...) f\n+#define CHOOSE_d(f,d,...) d\n+#define CHOOSE_f64(f,d,...) d\n+#define CHOOSE_f32x(f,d,...) d\n+#define CHOOSE_f128(f,d,ld64i,ld64m,ld106,ld113,...) ld113\n+\n+#if __HAVE_FLOAT64X\n+# if FLT64X_MANT_DIG == 113 && FLT64X_MAX_EXP == 16384\n+#  define CHOOSE_f64x(f,d,ld64i,ld64m,ld106,ld113,...) ld113\n+# elif (FLT64X_MANT_DIG == 64\t\t\t\\\n+\t&& FLT64X_MAX_EXP == 16384\t\t\\\n+\t&& FLT64X_MIN_EXP == -16381)\n+#  define CHOOSE_f64x(f,d,ld64i,...) ld64i\n+# else\n+#  error \"unknown _Float64x format\"\n+# endif\n+#endif\n+\n+#define _XNTRY(FSUF, FTYPE, FTOSTR, LSUF, CSUF, ...)\t\\\n+  CHOOSE_ ## FSUF (__VA_ARGS__),\n+#define XNTRY(...) \\\n+  GEN_TEST_STRTOD_FOREACH (_XNTRY, __VA_ARGS__)\n+\n+#define TEST(f, d, ld64i, ld64m, ld106, ld113, u) \\\n+  { XNTRY(f, d, ld64i, ld64m, ld106, ld113) u }\n+\n enum underflow_case\n   {\n     /* Result is exact or outside the subnormal range.  */\n@@ -55,38 +113,194 @@ enum underflow_case\n \n struct test\n {\n-  const char *s;\n+  GEN_TEST_STRTOD_FOREACH (MEMBER)\n   enum underflow_case c;\n };\n \n static const struct test tests[] =\n   {\n-    { \"0x1p-1022\", UNDERFLOW_NONE },\n-    { \"-0x1p-1022\", UNDERFLOW_NONE },\n-    { \"0x0p-10000000000000000000000000\", UNDERFLOW_NONE },\n-    { \"-0x0p-10000000000000000000000000\", UNDERFLOW_NONE },\n-    { \"0x1p-10000000000000000000000000\", UNDERFLOW_ALWAYS },\n-    { \"-0x1p-10000000000000000000000000\", UNDERFLOW_ALWAYS },\n-    { \"0x1.000000000000000000001p-1022\", UNDERFLOW_NONE },\n-    { \"-0x1.000000000000000000001p-1022\", UNDERFLOW_NONE },\n-    { \"0x1p-1075\", UNDERFLOW_ALWAYS },\n-    { \"-0x1p-1075\", UNDERFLOW_ALWAYS },\n-    { \"0x1p-1023\", UNDERFLOW_NONE },\n-    { \"-0x1p-1023\", UNDERFLOW_NONE },\n-    { \"0x1p-1074\", UNDERFLOW_NONE },\n-    { \"-0x1p-1074\", UNDERFLOW_NONE },\n-    { \"0x1.ffffffffffffep-1023\", UNDERFLOW_NONE },\n-    { \"-0x1.ffffffffffffep-1023\", UNDERFLOW_NONE },\n-    { \"0x1.fffffffffffffp-1023\", UNDERFLOW_ALWAYS },\n-    { \"-0x1.fffffffffffffp-1023\", UNDERFLOW_ALWAYS },\n-    { \"0x1.fffffffffffff0001p-1023\", UNDERFLOW_EXCEPT_UPWARD },\n-    { \"-0x1.fffffffffffff0001p-1023\", UNDERFLOW_EXCEPT_DOWNWARD },\n-    { \"0x1.fffffffffffff7fffp-1023\", UNDERFLOW_EXCEPT_UPWARD },\n-    { \"-0x1.fffffffffffff7fffp-1023\", UNDERFLOW_EXCEPT_DOWNWARD },\n-    { \"0x1.fffffffffffff8p-1023\", UNDERFLOW_ONLY_DOWNWARD_ZERO },\n-    { \"-0x1.fffffffffffff8p-1023\", UNDERFLOW_ONLY_UPWARD_ZERO },\n-    { \"0x1.fffffffffffffffffp-1023\", UNDERFLOW_ONLY_DOWNWARD_ZERO },\n-    { \"-0x1.fffffffffffffffffp-1023\", UNDERFLOW_ONLY_UPWARD_ZERO },\n+    TEST (\"0x1p-126\",\n+\t  \"0x1p-1022\",\n+\t  \"0x1p-16382\",\n+\t  \"0x1p-16383\",\n+\t  \"0x1p-969\",\n+\t  \"0x1p-16382\",\n+\t  UNDERFLOW_NONE),\n+    TEST (\"-0x1p-126\",\n+\t  \"-0x1p-1022\",\n+\t  \"-0x1p-16382\",\n+\t  \"-0x1p-16383\",\n+\t  \"-0x1p-969\",\n+\t  \"-0x1p-16382\",\n+\t  UNDERFLOW_NONE),\n+    TEST (\"0x0p-10000000000000000000000000\",\n+\t  \"0x0p-10000000000000000000000000\",\n+\t  \"0x0p-10000000000000000000000000\",\n+\t  \"0x0p-10000000000000000000000000\",\n+\t  \"0x0p-10000000000000000000000000\",\n+\t  \"0x0p-10000000000000000000000000\",\n+\t  UNDERFLOW_NONE),\n+    TEST (\"-0x0p-10000000000000000000000000\",\n+\t  \"-0x0p-10000000000000000000000000\",\n+\t  \"-0x0p-10000000000000000000000000\",\n+\t  \"-0x0p-10000000000000000000000000\",\n+\t  \"-0x0p-10000000000000000000000000\",\n+\t  \"-0x0p-10000000000000000000000000\",\n+\t  UNDERFLOW_NONE),\n+    TEST (\"0x1p-10000000000000000000000000\",\n+\t  \"0x1p-10000000000000000000000000\",\n+\t  \"0x1p-10000000000000000000000000\",\n+\t  \"0x1p-10000000000000000000000000\",\n+\t  \"0x1p-10000000000000000000000000\",\n+\t  \"0x1p-10000000000000000000000000\",\n+\t  UNDERFLOW_ALWAYS),\n+    TEST (\"-0x1p-10000000000000000000000000\",\n+\t  \"-0x1p-10000000000000000000000000\",\n+\t  \"-0x1p-10000000000000000000000000\",\n+\t  \"-0x1p-10000000000000000000000000\",\n+\t  \"-0x1p-10000000000000000000000000\",\n+\t  \"-0x1p-10000000000000000000000000\",\n+\t  UNDERFLOW_ALWAYS),\n+    TEST (\"0x1.000000000000000000001p-126\",\n+\t  \"0x1.000000000000000000001p-1022\",\n+\t  \"0x1.000000000000000000001p-16382\",\n+\t  \"0x1.000000000000000000001p-16383\",\n+\t  \"0x1.000000000000000000001p-969\",\n+\t  \"0x1.00000000000000000000000000000000000000001p-16382\",\n+\t  UNDERFLOW_NONE),\n+    TEST (\"-0x1.000000000000000000001p-126\",\n+\t  \"-0x1.000000000000000000001p-1022\",\n+\t  \"-0x1.000000000000000000001p-16382\",\n+\t  \"-0x1.000000000000000000001p-16383\",\n+\t  \"-0x1.000000000000000000001p-969\",\n+\t  \"-0x1.00000000000000000000000000000000000000001p-16382\",\n+\t  UNDERFLOW_NONE),\n+    TEST (\"0x1p-150\",\n+\t  \"0x1p-1075\",\n+\t  \"0x1p-16446\",\n+\t  \"0x1p-16447\",\n+\t  \"0x1p-1075\",\n+\t  \"0x1p-16495\",\n+\t  UNDERFLOW_ALWAYS),\n+    TEST (\"-0x1p-150\",\n+\t  \"-0x1p-1075\",\n+\t  \"-0x1p-16446\",\n+\t  \"-0x1p-16447\",\n+\t  \"-0x1p-1075\",\n+\t  \"-0x1p-16495\",\n+\t  UNDERFLOW_ALWAYS),\n+    TEST (\"0x1p-127\",\n+\t  \"0x1p-1023\",\n+\t  \"0x1p-16383\",\n+\t  \"0x1p-16384\",\n+\t  \"0x1p-970\",\n+\t  \"0x1p-16383\",\n+\t  UNDERFLOW_NONE),\n+    TEST (\"-0x1p-127\",\n+\t  \"-0x1p-1023\",\n+\t  \"-0x1p-16383\",\n+\t  \"-0x1p-16384\",\n+\t  \"-0x1p-970\",\n+\t  \"-0x1p-16383\",\n+\t  UNDERFLOW_NONE),\n+    TEST (\"0x1p-149\",\n+\t  \"0x1p-1074\",\n+\t  \"0x1p-16445\",\n+\t  \"0x1p-16446\",\n+\t  \"0x1p-1074\",\n+\t  \"0x1p-16494\",\n+\t  UNDERFLOW_NONE),\n+    TEST (\"-0x1p-149\",\n+\t  \"-0x1p-1074\",\n+\t  \"-0x1p-16445\",\n+\t  \"-0x1p-16446\",\n+\t  \"-0x1p-1074\",\n+\t  \"-0x1p-16494\",\n+\t  UNDERFLOW_NONE),\n+    TEST (\"0x1.fffffcp-127\",\n+\t  \"0x1.ffffffffffffep-1023\",\n+\t  \"0x1.fffffffffffffffcp-16383\",\n+\t  \"0x1.fffffffffffffffcp-16384\",\n+\t  \"0x1.ffffffffffffffffffffffffffp-970\",\n+\t  \"0x1.fffffffffffffffffffffffffffep-16383\",\n+\t  UNDERFLOW_NONE),\n+    TEST (\"-0x1.fffffcp-127\",\n+\t  \"-0x1.ffffffffffffep-1023\",\n+\t  \"-0x1.fffffffffffffffcp-16383\",\n+\t  \"-0x1.fffffffffffffffcp-16384\",\n+\t  \"-0x1.ffffffffffffffffffffffffffp-970\",\n+\t  \"-0x1.fffffffffffffffffffffffffffep-16383\",\n+\t  UNDERFLOW_NONE),\n+    TEST (\"0x1.fffffep-127\",\n+\t  \"0x1.fffffffffffffp-1023\",\n+\t  \"0x1.fffffffffffffffep-16383\",\n+\t  \"0x1.fffffffffffffffep-16384\",\n+\t  \"0x1.ffffffffffffffffffffffffff8p-970\",\n+\t  \"0x1.ffffffffffffffffffffffffffffp-16383\",\n+\t  UNDERFLOW_ALWAYS),\n+    TEST (\"-0x1.fffffep-127\",\n+\t  \"-0x1.fffffffffffffp-1023\",\n+\t  \"-0x1.fffffffffffffffep-16383\",\n+\t  \"-0x1.fffffffffffffffep-16384\",\n+\t  \"-0x1.ffffffffffffffffffffffffff8p-970\",\n+\t  \"-0x1.ffffffffffffffffffffffffffffp-16383\",\n+\t  UNDERFLOW_ALWAYS),\n+    TEST (\"0x1.fffffe0001p-127\",\n+\t  \"0x1.fffffffffffff0001p-1023\",\n+\t  \"0x1.fffffffffffffffe0001p-16383\",\n+\t  \"0x1.fffffffffffffffe0001p-16384\",\n+\t  \"0x1.ffffffffffffffffffffffffff80001p-970\",\n+\t  \"0x1.ffffffffffffffffffffffffffff0001p-16383\",\n+\t  UNDERFLOW_EXCEPT_UPWARD),\n+    TEST (\"-0x1.fffffe0001p-127\",\n+\t  \"-0x1.fffffffffffff0001p-1023\",\n+\t  \"-0x1.fffffffffffffffe0001p-16383\",\n+\t  \"-0x1.fffffffffffffffe0001p-16384\",\n+\t  \"-0x1.ffffffffffffffffffffffffff80001p-970\",\n+\t  \"-0x1.ffffffffffffffffffffffffffff0001p-16383\",\n+\t  UNDERFLOW_EXCEPT_DOWNWARD),\n+    TEST (\"0x1.fffffeffffp-127\",\n+\t  \"0x1.fffffffffffff7fffp-1023\",\n+\t  \"0x1.fffffffffffffffeffffp-16383\",\n+\t  \"0x1.fffffffffffffffeffffp-16384\",\n+\t  \"0x1.ffffffffffffffffffffffffffbffffp-970\",\n+\t  \"0x1.ffffffffffffffffffffffffffff7fffp-16383\",\n+\t  UNDERFLOW_EXCEPT_UPWARD),\n+    TEST (\"-0x1.fffffeffffp-127\",\n+\t  \"-0x1.fffffffffffff7fffp-1023\",\n+\t  \"-0x1.fffffffffffffffeffffp-16383\",\n+\t  \"-0x1.fffffffffffffffeffffp-16384\",\n+\t  \"-0x1.ffffffffffffffffffffffffffbffffp-970\",\n+\t  \"-0x1.ffffffffffffffffffffffffffff7fffp-16383\",\n+\t  UNDERFLOW_EXCEPT_DOWNWARD),\n+    TEST (\"0x1.ffffffp-127\",\n+\t  \"0x1.fffffffffffff8p-1023\",\n+\t  \"0x1.ffffffffffffffffp-16383\",\n+\t  \"0x1.ffffffffffffffffp-16384\",\n+\t  \"0x1.ffffffffffffffffffffffffffcp-970\",\n+\t  \"0x1.ffffffffffffffffffffffffffff8p-16383\",\n+\t  UNDERFLOW_ONLY_DOWNWARD_ZERO),\n+    TEST (\"-0x1.ffffffp-127\",\n+\t  \"-0x1.fffffffffffff8p-1023\",\n+\t  \"-0x1.ffffffffffffffffp-16383\",\n+\t  \"-0x1.ffffffffffffffffp-16384\",\n+\t  \"-0x1.ffffffffffffffffffffffffffcp-970\",\n+\t  \"-0x1.ffffffffffffffffffffffffffff8p-16383\",\n+\t  UNDERFLOW_ONLY_UPWARD_ZERO),\n+    TEST (\"0x1.ffffffffffp-127\",\n+\t  \"0x1.fffffffffffffffffp-1023\",\n+\t  \"0x1.ffffffffffffffffffffp-16383\",\n+\t  \"0x1.ffffffffffffffffffffp-16384\",\n+\t  \"0x1.ffffffffffffffffffffffffffffffp-970\",\n+\t  \"0x1.ffffffffffffffffffffffffffffffffp-16383\",\n+\t  UNDERFLOW_ONLY_DOWNWARD_ZERO),\n+    TEST (\"-0x1.ffffffffffp-127\",\n+\t  \"-0x1.fffffffffffffffffp-1023\",\n+\t  \"-0x1.ffffffffffffffffffffp-16383\",\n+\t  \"-0x1.ffffffffffffffffffffp-16384\",\n+\t  \"-0x1.ffffffffffffffffffffffffffffffp-970\",\n+\t  \"-0x1.ffffffffffffffffffffffffffffffffp-16383\",\n+\t  UNDERFLOW_ONLY_UPWARD_ZERO),\n   };\n \n /* Return whether to expect underflow from a particular testcase, in a\n@@ -133,39 +347,62 @@ static bool support_underflow_exception = false;\n volatile double d = DBL_MIN;\n volatile double dd;\n \n-static int\n-test_in_one_mode (const char *s, enum underflow_case c, int rm,\n-\t\t  const char *mode_name)\n+static bool\n+test_got_fe_underflow (void)\n {\n-  int result = 0;\n-  feclearexcept (FE_ALL_EXCEPT);\n-  errno = 0;\n-  double d = strtod (s, NULL);\n-  int got_errno = errno;\n #ifdef FE_UNDERFLOW\n-  bool got_fe_underflow = fetestexcept (FE_UNDERFLOW) != 0;\n+  return fetestexcept (FE_UNDERFLOW) != 0;\n #else\n-  bool got_fe_underflow = false;\n+  return false;\n #endif\n-  printf (\"strtod (%s) (%s) returned %a, errno = %d, %sunderflow exception\\n\",\n-\t  s, mode_name, d, got_errno, got_fe_underflow ? \"\" : \"no \");\n-  bool this_expect_underflow = expect_underflow (c, rm);\n-  if (got_errno != 0 && got_errno != ERANGE)\n-    {\n-      puts (\"FAIL: errno neither 0 nor ERANGE\");\n-      result = 1;\n-    }\n-  else if (this_expect_underflow != (errno == ERANGE))\n-    {\n-      puts (\"FAIL: underflow from errno differs from expectations\");\n-      result = 1;\n-    }\n-  if (support_underflow_exception && got_fe_underflow != this_expect_underflow)\n-    {\n-      puts (\"FAIL: underflow from exceptions differs from expectations\");\n-      result = 1;\n-    }\n-  return result;\n+}\n+\n+#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF)\t\t\t\\\n+static int\t\t\t\t\t\t\t\t\\\n+test_strto ## FSUF (int i, int rm, const char *mode_name)\t\t\\\n+{\t\t\t\t\t\t\t\t\t\\\n+  const char *s = tests[i].s_ ## FSUF;\t\t\t\t\t\\\n+  enum underflow_case c = tests[i].c;\t\t\t\t\t\\\n+  int result = 0;\t\t\t\t\t\t\t\\\n+  feclearexcept (FE_ALL_EXCEPT);\t\t\t\t\t\\\n+  errno = 0;\t\t\t\t\t\t\t\t\\\n+  FTYPE d = strto ## FSUF (s, NULL);\t\t\t\t\t\\\n+  int got_errno = errno;\t\t\t\t\t\t\\\n+  bool got_fe_underflow = test_got_fe_underflow ();\t\t\t\\\n+  char buf[FSTRLENMAX];\t\t\t\t\t\t\t\\\n+  FTOSTR (buf, sizeof (buf), \"%a\", d);\t\t\t\t\t\\\n+  printf (\"strto\" #FSUF\t\t\t\t\t\t\t\\\n+\t  \" (%s) (%s) returned %s, errno = %d, \"\t\t\t\\\n+\t  \"%sunderflow exception\\n\",\t\t\t\t\t\\\n+\t  s, mode_name, buf, got_errno,\t\t\t\t\t\\\n+\t  got_fe_underflow ? \"\" : \"no \");\t\t\t\t\\\n+  bool this_expect_underflow = expect_underflow (c, rm);\t\t\\\n+  if (got_errno != 0 && got_errno != ERANGE)\t\t\t\t\\\n+    {\t\t\t\t\t\t\t\t\t\\\n+      puts (\"FAIL: errno neither 0 nor ERANGE\");\t\t\t\\\n+      result = 1;\t\t\t\t\t\t\t\\\n+    }\t\t\t\t\t\t\t\t\t\\\n+  else if (this_expect_underflow != (errno == ERANGE))\t\t\t\\\n+    {\t\t\t\t\t\t\t\t\t\\\n+      puts (\"FAIL: underflow from errno differs from expectations\");\t\\\n+      result = 1;\t\t\t\t\t\t\t\\\n+    }\t\t\t\t\t\t\t\t\t\\\n+  if (support_underflow_exception\t\t\t\t\t\\\n+      && got_fe_underflow != this_expect_underflow)\t\t\t\\\n+    {\t\t\t\t\t\t\t\t\t\\\n+      puts (\"FAIL: underflow from exceptions \"\t\t\t\t\\\n+\t    \"differs from expectations\");\t\t\t\t\\\n+      result = 1;\t\t\t\t\t\t\t\\\n+    }\t\t\t\t\t\t\t\t\t\\\n+  return result;\t\t\t\t\t\t\t\\\n+}\n+\n+GEN_TEST_STRTOD_FOREACH (TEST_STRTOD)\n+\n+static int\n+test_in_one_mode (size_t i, int rm, const char *mode_name)\n+{\n+  return STRTOD_TEST_FOREACH (test_strto, i, rm, mode_name);\n }\n \n static int\n@@ -191,12 +428,12 @@ do_test (void)\n #endif\n   for (size_t i = 0; i < sizeof (tests) / sizeof (tests[0]); i++)\n     {\n-      result |= test_in_one_mode (tests[i].s, tests[i].c, fe_tonearest,\n+      result |= test_in_one_mode (i, fe_tonearest,\n \t\t\t\t  \"default rounding mode\");\n #ifdef FE_DOWNWARD\n       if (!fesetround (FE_DOWNWARD))\n \t{\n-\t  result |= test_in_one_mode (tests[i].s, tests[i].c, FE_DOWNWARD,\n+\t  result |= test_in_one_mode (i, FE_DOWNWARD,\n \t\t\t\t      \"FE_DOWNWARD\");\n \t  fesetround (save_round_mode);\n \t}\n@@ -204,7 +441,7 @@ do_test (void)\n #ifdef FE_TOWARDZERO\n       if (!fesetround (FE_TOWARDZERO))\n \t{\n-\t  result |= test_in_one_mode (tests[i].s, tests[i].c, FE_TOWARDZERO,\n+\t  result |= test_in_one_mode (i, FE_TOWARDZERO,\n \t\t\t\t      \"FE_TOWARDZERO\");\n \t  fesetround (save_round_mode);\n \t}\n@@ -212,7 +449,7 @@ do_test (void)\n #ifdef FE_UPWARD\n       if (!fesetround (FE_UPWARD))\n \t{\n-\t  result |= test_in_one_mode (tests[i].s, tests[i].c, FE_UPWARD,\n+\t  result |= test_in_one_mode (i, FE_UPWARD,\n \t\t\t\t      \"FE_UPWARD\");\n \t  fesetround (save_round_mode);\n \t}\n\ncommit 3a34851103d554b2c9b269ecae111648f9d7bb6d\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Mon Oct 28 14:45:30 2024 +0100\n\n    elf: Change ldconfig auxcache magic number (bug 32231)\n    \n    In commit c628c2296392ed3bf2cb8d8470668e64fe53389f (elf: Remove\n    ldconfig kernel version check), the layout of auxcache entries\n    changed because the osversion field was removed from\n    struct aux_cache_file_entry.  However, AUX_CACHEMAGIC was not\n    changed, so existing files are still used, potentially leading\n    to unintended ldconfig behavior.  This commit changes AUX_CACHEMAGIC,\n    so that the file is regenerated.\n    \n    Reported-by: DJ Delorie <dj@redhat.com>\n    Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>\n    (cherry picked from commit 0a536f6e2f76e3ef581b3fd9af1e5cf4ddc7a5a2)\n\ndiff --git a/NEWS b/NEWS\nindex 9033335db1..928c516bec 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -17,6 +17,7 @@ The following bugs are resolved with this release:\n   [32026] strerror/strsignal TLS not handled correctly for secondary namespaces\n   [32052] Name space violation in fortify wrappers\n   [32137] libio: Attempt wide backup free only for non-legacy code\n+  [32231] elf: Change ldconfig auxcache magic number\n \f\n Version 2.40\n \ndiff --git a/elf/cache.c b/elf/cache.c\nindex 8a618e11fa..62d681df42 100644\n--- a/elf/cache.c\n+++ b/elf/cache.c\n@@ -820,7 +820,7 @@ struct aux_cache_entry\n   struct aux_cache_entry *next;\n };\n \n-#define AUX_CACHEMAGIC\t\t\"glibc-ld.so.auxcache-1.0\"\n+#define AUX_CACHEMAGIC\t\t\"glibc-ld.so.auxcache-2.0\"\n \n struct aux_cache_file_entry\n {\n\ncommit 234458024300f0b4b430785999f33eddf059af6a\nAuthor: Michael Karcher <Michael.Karcher@fu-berlin.de>\nDate:   Sun Jul 28 15:30:57 2024 +0200\n\n    Mitigation for \"clone on sparc might fail with -EFAULT for no valid reason\" (bz 31394)\n    \n    It seems the kernel can not deal with uncommitted stack space in the area intended\n    for the register window when executing the clone() system call. So create a nested\n    frame (proxy for the kernel frame) and flush it from the processor to memory to\n    force committing pages to the stack before invoking the system call.\n    \n    Bug: https://www.mail-archive.com/debian-glibc@lists.debian.org/msg62592.html\n    Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31394\n    See-also: https://lore.kernel.org/sparclinux/62f9be9d-a086-4134-9a9f-5df8822708af@mkarcher.dialup.fu-berlin.de/\n    Signed-off-by: Michael Karcher <sourceware-bugzilla@mkarcher.dialup.fu-berlin.de>\n    Reviewed-by: DJ Delorie <dj@redhat.com>\n    (cherry picked from commit faeaa3bc9f76030b9882ccfdee232fc0ca6dcb06)\n\ndiff --git a/NEWS b/NEWS\nindex 928c516bec..dc815fb6d3 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -11,6 +11,7 @@ The following bugs are resolved with this release:\n \n   [27821] ungetc: Fix backup buffer leak on program exit\n   [30081] resolv: Do not wait for non-existing second DNS response after error\n+  [31394] clone on sparc might fail with -EFAULT for no valid reason\n   [31717] elf: Avoid re-initializing already allocated TLS in dlopen\n   [31890] resolv: Allow short error responses to match any DNS query\n   [31968] mremap implementation in C does not handle arguments correctly\ndiff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S\nindex 748d25fcfe..c9cf9bb055 100644\n--- a/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S\n+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S\n@@ -28,6 +28,9 @@\n \t.text\n ENTRY (__clone)\n \tsave\t%sp,-96,%sp\n+\tsave\t%sp,-96,%sp\n+\tflushw\n+\trestore\n \tcfi_def_cfa_register(%fp)\n \tcfi_window_save\n \tcfi_register(%o7, %i7)\ndiff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S\nindex e5ff2cf1a0..370d51fda2 100644\n--- a/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S\n+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S\n@@ -32,6 +32,9 @@\n \n ENTRY (__clone)\n \tsave\t%sp, -192, %sp\n+\tsave\t%sp, -192, %sp\n+\tflushw\n+\trestore\n \tcfi_def_cfa_register(%fp)\n \tcfi_window_save\n \tcfi_register(%o7, %i7)\n\ncommit efb710034e4c5e734d100cc4ef1b1e27d4315825\nAuthor: Adhemerval Zanella <adhemerval.zanella@linaro.org>\nDate:   Mon Sep 2 16:58:51 2024 -0300\n\n    linux: sparc: Fix clone for LEON/sparcv8 (BZ 31394)\n    \n    The sparc clone mitigation (faeaa3bc9f76030) added the use of\n    flushw, which is not support by LEON/sparcv8.  As discussed on\n    the libc-alpha, 'ta 3' is a working alternative [1].\n    \n    [1] https://sourceware.org/pipermail/libc-alpha/2024-August/158905.html\n    \n    Checked with a build for sparcv8-linux-gnu targetting leon.\n    \n    Acked-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>\n    (cherry picked from commit 5e8cfc5d625e6dd000a0371d21d792836ea7951a)\n\ndiff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S\nindex c9cf9bb055..c84244f56b 100644\n--- a/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S\n+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S\n@@ -29,7 +29,11 @@\n ENTRY (__clone)\n \tsave\t%sp,-96,%sp\n \tsave\t%sp,-96,%sp\n+#ifdef __sparcv9\n \tflushw\n+#else\n+\tta 3\n+#endif\n \trestore\n \tcfi_def_cfa_register(%fp)\n \tcfi_window_save\n\ncommit 626c048f32a979f77662bdcb1cca477c11d3f9c1\nAuthor: Aurelien Jarno <aurelien@aurel32.net>\nDate:   Sun Nov 10 10:50:34 2024 +0100\n\n    elf: handle addition overflow in _dl_find_object_update_1 [BZ #32245]\n    \n    The remaining_to_add variable can be 0 if (current_used + count) wraps,\n    This is caught by GCC 14+ on hppa, which determines from there that\n    target_seg could be be NULL when remaining_to_add is zero, which in\n    turns causes a -Wstringop-overflow warning:\n    \n     In file included from ../include/atomic.h:49,\n                      from dl-find_object.c:20:\n     In function '_dlfo_update_init_seg',\n         inlined from '_dl_find_object_update_1' at dl-find_object.c:689:30,\n         inlined from '_dl_find_object_update' at dl-find_object.c:805:13:\n     ../sysdeps/unix/sysv/linux/hppa/atomic-machine.h:44:4: error: '__atomic_store_4' writing 4 bytes into a region of size 0 overflows the destination [-Werror=stringop-overflow=]\n        44 |    __atomic_store_n ((mem), (val), __ATOMIC_RELAXED);                        \\\n           |    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     dl-find_object.c:644:3: note: in expansion of macro 'atomic_store_relaxed'\n       644 |   atomic_store_relaxed (&seg->size, new_seg_size);\n           |   ^~~~~~~~~~~~~~~~~~~~\n     In function '_dl_find_object_update':\n     cc1: note: destination object is likely at address zero\n    \n    In practice, this is not possible as it represent counts of link maps.\n    Link maps have sizes larger than 1 byte, so the sum of any two link map\n    counts will always fit within a size_t without wrapping around.\n    \n    This patch therefore adds a check on remaining_to_add == 0 and tell GCC\n    that this can not happen using __builtin_unreachable.\n    \n    Thanks to Andreas Schwab for the investigation.\n    \n    Closes: BZ #32245\n    Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>\n    Tested-by: John David Anglin <dave.anglin@bell.net>\n    Reviewed-by: Florian Weimer <fweimer@redhat.com>\n    (cherry picked from commit 6c915c73d08028987232f6dc718f218c61113240)\n\ndiff --git a/NEWS b/NEWS\nindex dc815fb6d3..bd0b3bd66a 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -19,6 +19,7 @@ The following bugs are resolved with this release:\n   [32052] Name space violation in fortify wrappers\n   [32137] libio: Attempt wide backup free only for non-legacy code\n   [32231] elf: Change ldconfig auxcache magic number\n+  [32245] glibc -Wstringop-overflow= build failure on hppa\n \f\n Version 2.40\n \ndiff --git a/elf/dl-find_object.c b/elf/dl-find_object.c\nindex 449302eda3..ae18b438d3 100644\n--- a/elf/dl-find_object.c\n+++ b/elf/dl-find_object.c\n@@ -662,6 +662,14 @@ _dl_find_object_update_1 (struct link_map **loaded, size_t count)\n     = _dlfo_loaded_mappings[!active_idx];\n   size_t remaining_to_add = current_used + count;\n \n+  /* remaining_to_add can be 0 if (current_used + count) wraps, but in practice\n+     this is not possible as it represent counts of link maps.  Link maps have\n+     sizes larger than 1 byte, so the sum of any two link map counts will\n+     always fit within a size_t without wrapping around.  This check ensures\n+     that target_seg is not erroneously considered potentially NULL by GCC. */\n+  if (remaining_to_add == 0)\n+    __builtin_unreachable ();\n+\n   /* Ensure that the new segment chain has enough space.  */\n   {\n     size_t new_allocated\n\ncommit 9b9545ba27613fa41efdfa7965b6fc580bf1b919\nAuthor: Michael Jeanson <mjeanson@efficios.com>\nDate:   Thu Nov 7 22:23:49 2024 +0100\n\n    nptl: initialize rseq area prior to registration\n    \n    Per the rseq syscall documentation, 3 fields are required to be\n    initialized by userspace prior to registration, they are 'cpu_id',\n    'rseq_cs' and 'flags'. Since we have no guarantee that 'struct pthread'\n    is cleared on all architectures, explicitly set those 3 fields prior to\n    registration.\n    \n    Signed-off-by: Michael Jeanson <mjeanson@efficios.com>\n    Reviewed-by: Florian Weimer <fweimer@redhat.com>\n    (cherry picked from commit 97f60abd25628425971f07e9b0e7f8eec0741235)\n\ndiff --git a/nptl/descr.h b/nptl/descr.h\nindex 8cef95810c..c4bdd7757a 100644\n--- a/nptl/descr.h\n+++ b/nptl/descr.h\n@@ -414,6 +414,8 @@ struct pthread\n     {\n       uint32_t cpu_id_start;\n       uint32_t cpu_id;\n+      uint64_t rseq_cs;\n+      uint32_t flags;\n     };\n     char pad[32];\t\t/* Original rseq area size.  */\n   } rseq_area __attribute__ ((aligned (32)));\ndiff --git a/sysdeps/unix/sysv/linux/rseq-internal.h b/sysdeps/unix/sysv/linux/rseq-internal.h\nindex 7ea935b4ad..37a8f630b6 100644\n--- a/sysdeps/unix/sysv/linux/rseq-internal.h\n+++ b/sysdeps/unix/sysv/linux/rseq-internal.h\n@@ -51,11 +51,21 @@ rseq_register_current_thread (struct pthread *self, bool do_rseq)\n         /* The initial implementation used only 20 bytes out of 32,\n            but still expected size 32.  */\n         size = RSEQ_AREA_SIZE_INITIAL;\n+\n+      /* Initialize the rseq fields that are read by the kernel on\n+         registration, there is no guarantee that struct pthread is\n+         cleared on all architectures.  */\n+      THREAD_SETMEM (self, rseq_area.cpu_id, RSEQ_CPU_ID_UNINITIALIZED);\n+      THREAD_SETMEM (self, rseq_area.rseq_cs, 0);\n+      THREAD_SETMEM (self, rseq_area.flags, 0);\n+\n       int ret = INTERNAL_SYSCALL_CALL (rseq, &self->rseq_area,\n                                        size, 0, RSEQ_SIG);\n       if (!INTERNAL_SYSCALL_ERROR_P (ret))\n         return true;\n     }\n+  /* When rseq is disabled by tunables or the registration fails, inform\n+     userspace by setting 'cpu_id' to RSEQ_CPU_ID_REGISTRATION_FAILED.  */\n   THREAD_SETMEM (self, rseq_area.cpu_id, RSEQ_CPU_ID_REGISTRATION_FAILED);\n   return false;\n }\n\ncommit 091dd12831792cef16eee24fe240c73a25b47a1d\nAuthor: Michael Jeanson <mjeanson@efficios.com>\nDate:   Wed Nov 20 14:15:42 2024 -0500\n\n    nptl: initialize cpu_id_start prior to rseq registration\n    \n    When adding explicit initialization of rseq fields prior to\n    registration, I glossed over the fact that 'cpu_id_start' is also\n    documented as initialized by user-space.\n    \n    While current kernels don't validate the content of this field on\n    registration, future ones could.\n    \n    Signed-off-by: Michael Jeanson <mjeanson@efficios.com>\n    Reviewed-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>\n    (cherry picked from commit d9f40387d3305d97e30a8cf8724218c42a63680a)\n\ndiff --git a/sysdeps/unix/sysv/linux/rseq-internal.h b/sysdeps/unix/sysv/linux/rseq-internal.h\nindex 37a8f630b6..ef3eab1fef 100644\n--- a/sysdeps/unix/sysv/linux/rseq-internal.h\n+++ b/sysdeps/unix/sysv/linux/rseq-internal.h\n@@ -56,6 +56,7 @@ rseq_register_current_thread (struct pthread *self, bool do_rseq)\n          registration, there is no guarantee that struct pthread is\n          cleared on all architectures.  */\n       THREAD_SETMEM (self, rseq_area.cpu_id, RSEQ_CPU_ID_UNINITIALIZED);\n+      THREAD_SETMEM (self, rseq_area.cpu_id_start, 0);\n       THREAD_SETMEM (self, rseq_area.rseq_cs, 0);\n       THREAD_SETMEM (self, rseq_area.flags, 0);\n \n\ncommit c6cdab1e01bc11bc4036dc5b1be6086f6259c123\nAuthor: Sam James <sam@gentoo.org>\nDate:   Mon Dec 9 23:11:25 2024 +0000\n\n    malloc: add indirection for malloc(-like) functions in tests [BZ #32366]\n    \n    GCC 15 introduces allocation dead code removal (DCE) for PR117370 in\n    r15-5255-g7828dc070510f8. This breaks various glibc tests which want\n    to assert various properties of the allocator without doing anything\n    obviously useful with the allocated memory.\n    \n    Alexander Monakov rightly pointed out that we can and should do better\n    than passing -fno-malloc-dce to paper over the problem. Not least because\n    GCC 14 already does such DCE where there's no testing of malloc's return\n    value against NULL, and LLVM has such optimisations too.\n    \n    Handle this by providing malloc (and friends) wrappers with a volatile\n    function pointer to obscure that we're calling malloc (et. al) from the\n    compiler.\n    \n    Reviewed-by: Paul Eggert <eggert@cs.ucla.edu>\n    (cherry picked from commit a9944a52c967ce76a5894c30d0274b824df43c7a)\n\ndiff --git a/malloc/tst-aligned-alloc.c b/malloc/tst-aligned-alloc.c\nindex 91167d1392..b0f05a8fec 100644\n--- a/malloc/tst-aligned-alloc.c\n+++ b/malloc/tst-aligned-alloc.c\n@@ -25,6 +25,8 @@\n #include <libc-diag.h>\n #include <support/check.h>\n \n+#include \"tst-malloc-aux.h\"\n+\n static int\n do_test (void)\n {\ndiff --git a/malloc/tst-compathooks-off.c b/malloc/tst-compathooks-off.c\nindex d0106f3fb7..4cce6e5a80 100644\n--- a/malloc/tst-compathooks-off.c\n+++ b/malloc/tst-compathooks-off.c\n@@ -25,6 +25,8 @@\n #include <support/check.h>\n #include <support/support.h>\n \n+#include \"tst-malloc-aux.h\"\n+\n extern void (*volatile __free_hook) (void *, const void *);\n extern void *(*volatile __malloc_hook)(size_t, const void *);\n extern void *(*volatile __realloc_hook)(void *, size_t, const void *);\ndiff --git a/malloc/tst-malloc-aux.h b/malloc/tst-malloc-aux.h\nnew file mode 100644\nindex 0000000000..54908b4a24\n--- /dev/null\n+++ b/malloc/tst-malloc-aux.h\n@@ -0,0 +1,41 @@\n+/* Wrappers for malloc-like functions to allow testing the implementation\n+   without optimization.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public License as\n+   published by the Free Software Foundation; either version 2.1 of the\n+   License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; see the file COPYING.LIB.  If\n+   not, see <https://www.gnu.org/licenses/>.  */\n+\n+#ifndef TST_MALLOC_AUX_H\n+#define TST_MALLOC_AUX_H\n+\n+#include <stddef.h>\n+#include <stdlib.h>\n+\n+static void *(*volatile aligned_alloc_indirect)(size_t, size_t) = aligned_alloc;\n+static void *(*volatile calloc_indirect)(size_t, size_t) = calloc;\n+static void *(*volatile malloc_indirect)(size_t) = malloc;\n+static void *(*volatile realloc_indirect)(void*, size_t) = realloc;\n+\n+#undef aligned_alloc\n+#undef calloc\n+#undef malloc\n+#undef realloc\n+\n+#define aligned_alloc aligned_alloc_indirect\n+#define calloc calloc_indirect\n+#define malloc malloc_indirect\n+#define realloc realloc_indirect\n+\n+#endif /* TST_MALLOC_AUX_H */\ndiff --git a/malloc/tst-malloc-check.c b/malloc/tst-malloc-check.c\nindex fde8863ad7..cc88bff3b3 100644\n--- a/malloc/tst-malloc-check.c\n+++ b/malloc/tst-malloc-check.c\n@@ -20,6 +20,8 @@\n #include <stdlib.h>\n #include <libc-diag.h>\n \n+#include \"tst-malloc-aux.h\"\n+\n static int errors = 0;\n \n static void\ndiff --git a/malloc/tst-malloc-too-large.c b/malloc/tst-malloc-too-large.c\nindex 8e9e0d5fa2..2b91377e54 100644\n--- a/malloc/tst-malloc-too-large.c\n+++ b/malloc/tst-malloc-too-large.c\n@@ -43,6 +43,7 @@\n #include <unistd.h>\n #include <sys/param.h>\n \n+#include \"tst-malloc-aux.h\"\n \n /* This function prepares for each 'too-large memory allocation' test by\n    performing a small successful malloc/free and resetting errno prior to\ndiff --git a/malloc/tst-malloc.c b/malloc/tst-malloc.c\nindex f7a6e4654c..68af399022 100644\n--- a/malloc/tst-malloc.c\n+++ b/malloc/tst-malloc.c\n@@ -22,6 +22,8 @@\n #include <libc-diag.h>\n #include <time.h>\n \n+#include \"tst-malloc-aux.h\"\n+\n static int errors = 0;\n \n static void\ndiff --git a/malloc/tst-realloc.c b/malloc/tst-realloc.c\nindex f50499ecb1..74a28fb45e 100644\n--- a/malloc/tst-realloc.c\n+++ b/malloc/tst-realloc.c\n@@ -23,6 +23,8 @@\n #include <libc-diag.h>\n #include <support/check.h>\n \n+#include \"tst-malloc-aux.h\"\n+\n static int\n do_test (void)\n {\ndiff --git a/support/support.h b/support/support.h\nindex ba21ec9b5a..1a77f79793 100644\n--- a/support/support.h\n+++ b/support/support.h\n@@ -113,7 +113,7 @@ void *xposix_memalign (size_t alignment, size_t n)\n   __attribute_malloc__ __attribute_alloc_align__ ((1))\n   __attribute_alloc_size__ ((2)) __attr_dealloc_free __returns_nonnull;\n char *xasprintf (const char *format, ...)\n-  __attribute__ ((format (printf, 1, 2), malloc)) __attr_dealloc_free\n+  __attribute__ ((format (printf, 1, 2), __malloc__)) __attr_dealloc_free\n   __returns_nonnull;\n char *xstrdup (const char *) __attr_dealloc_free __returns_nonnull;\n char *xstrndup (const char *, size_t) __attr_dealloc_free __returns_nonnull;\ndiff --git a/test-skeleton.c b/test-skeleton.c\nindex ae185a4f28..690f26e7cf 100644\n--- a/test-skeleton.c\n+++ b/test-skeleton.c\n@@ -27,7 +27,6 @@\n #include <errno.h>\n #include <fcntl.h>\n #include <getopt.h>\n-#include <malloc.h>\n #include <paths.h>\n #include <search.h>\n #include <signal.h>\n\ncommit 846e64257e5fc9b5b723c2eec2b7155ab5944d1f\nAuthor: Adhemerval Zanella <adhemerval.zanella@linaro.org>\nDate:   Fri Sep 13 11:10:05 2024 -0300\n\n    support: Make support_process_state_wait return the found state\n    \n    So caller can check which state was found if multiple ones are\n    asked.\n    \n    Checked on x86_64-linux-gnu.\n    \n    Reviewed-by: Florian Weimer <fweimer@redhat.com>\n    (cherry picked from commit 38316352e0f742f3a2b5816a61a4b603cb5573f8)\n    (cherry picked from commit 2e38c5a090b3a54040b6e508d42e5a76e492c6e8)\n\ndiff --git a/support/process_state.h b/support/process_state.h\nindex 1cf902e91b..9541d8c343 100644\n--- a/support/process_state.h\n+++ b/support/process_state.h\n@@ -31,13 +31,16 @@ enum support_process_state\n   support_process_state_dead         = 0x20,  /* X (dead).  */\n   support_process_state_zombie       = 0x40,  /* Z (zombie).  */\n   support_process_state_parked       = 0x80,  /* P (parked).  */\n+  support_process_state_invalid      = 0x100  /* Invalid state.  */\n };\n \n /* Wait for process PID to reach state STATE.  It can be a combination of\n    multiple possible states ('process_state_running | process_state_sleeping')\n    where the function return when any of these state are observed.\n    For an invalid state not represented by SUPPORT_PROCESS_STATE, it fallbacks\n-   to a 2 second sleep.  */\n-void support_process_state_wait (pid_t pid, enum support_process_state state);\n+   to a 2 second sleep.\n+   Return the found process state.  */\n+enum support_process_state\n+support_process_state_wait (pid_t pid, enum support_process_state state);\n \n #endif\ndiff --git a/support/support_process_state.c b/support/support_process_state.c\nindex 062335234f..ae8e0a531c 100644\n--- a/support/support_process_state.c\n+++ b/support/support_process_state.c\n@@ -27,7 +27,7 @@\n #include <support/xstdio.h>\n #include <support/check.h>\n \n-void\n+enum support_process_state\n support_process_state_wait (pid_t pid, enum support_process_state state)\n {\n #ifdef __linux__\n@@ -75,7 +75,7 @@ support_process_state_wait (pid_t pid, enum support_process_state state)\n \t  {\n \t    free (line);\n \t    xfclose (fstatus);\n-\t    return;\n+\t    return process_states[i].s;\n \t  }\n \n       rewind (fstatus);\n@@ -90,4 +90,6 @@ support_process_state_wait (pid_t pid, enum support_process_state state)\n   /* Fallback to nanosleep if an invalid state is found.  */\n #endif\n   nanosleep (&(struct timespec) { 1, 0 }, NULL);\n+\n+  return support_process_state_invalid;\n }\ndiff --git a/support/tst-support-process_state.c b/support/tst-support-process_state.c\nindex d73269320f..4a88eae3a7 100644\n--- a/support/tst-support-process_state.c\n+++ b/support/tst-support-process_state.c\n@@ -68,28 +68,39 @@ do_test (void)\n   if (test_verbose)\n     printf (\"info: waiting pid %d, state_stopped/state_tracing_stop\\n\",\n \t    (int) pid);\n-  support_process_state_wait (pid, stop_state);\n+  {\n+    enum support_process_state state =\n+      support_process_state_wait (pid, stop_state);\n+    TEST_VERIFY (state == support_process_state_stopped\n+\t\t || state == support_process_state_tracing_stop);\n+  }\n \n   if (kill (pid, SIGCONT) != 0)\n     FAIL_RET (\"kill (%d, SIGCONT): %m\\n\", pid);\n \n   if (test_verbose)\n     printf (\"info: waiting pid %d, state_sleeping\\n\", (int) pid);\n-  support_process_state_wait (pid, support_process_state_sleeping);\n+  TEST_COMPARE (support_process_state_wait (pid,\n+\t\t\t\t\t    support_process_state_sleeping),\n+\t\tsupport_process_state_sleeping);\n \n   if (kill (pid, SIGUSR1) != 0)\n     FAIL_RET (\"kill (%d, SIGUSR1): %m\\n\", pid);\n \n   if (test_verbose)\n     printf (\"info: waiting pid %d, state_running\\n\", (int) pid);\n-  support_process_state_wait (pid, support_process_state_running);\n+  TEST_COMPARE (support_process_state_wait (pid,\n+\t\t\t\t\t    support_process_state_running),\n+\t\tsupport_process_state_running);\n \n   if (kill (pid, SIGKILL) != 0)\n     FAIL_RET (\"kill (%d, SIGKILL): %m\\n\", pid);\n \n   if (test_verbose)\n     printf (\"info: waiting pid %d, state_zombie\\n\", (int) pid);\n-  support_process_state_wait (pid, support_process_state_zombie);\n+  TEST_COMPARE (support_process_state_wait (pid,\n+\t\t\t\t\t    support_process_state_zombie),\n+\t\tsupport_process_state_zombie);;\n \n   siginfo_t info;\n   int r = waitid (P_PID, pid, &info, WEXITED);\n\ncommit 11d9f49cebe64939f50e16a59c9ebefb80a294ab\nAuthor: Adhemerval Zanella <adhemerval.zanella@linaro.org>\nDate:   Fri Sep 13 11:11:56 2024 -0300\n\n    sparc: Fix restartable syscalls (BZ 32173)\n    \n    The commit 'sparc: Use Linux kABI for syscall return'\n    (86c5d2cf0ce046279baddc7faa27da71f1a89fde) did not take into account\n    a subtle sparc syscall kABI constraint.  For syscalls that might block\n    indefinitely, on an interrupt (like SIGCONT) the kernel will set the\n    instruction pointer to just before the syscall:\n    \n    arch/sparc/kernel/signal_64.c\n    476 static void do_signal(struct pt_regs *regs, unsigned long orig_i0)\n    477 {\n    [...]\n    525                 if (restart_syscall) {\n    526                         switch (regs->u_regs[UREG_I0]) {\n    527                         case ERESTARTNOHAND:\n    528                         case ERESTARTSYS:\n    529                         case ERESTARTNOINTR:\n    530                                 /* replay the system call when we are done */\n    531                                 regs->u_regs[UREG_I0] = orig_i0;\n    532                                 regs->tpc -= 4;\n    533                                 regs->tnpc -= 4;\n    534                                 pt_regs_clear_syscall(regs);\n    535                                 fallthrough;\n    536                         case ERESTART_RESTARTBLOCK:\n    537                                 regs->u_regs[UREG_G1] = __NR_restart_syscall;\n    538                                 regs->tpc -= 4;\n    539                                 regs->tnpc -= 4;\n    540                                 pt_regs_clear_syscall(regs);\n    541                         }\n    \n    However, on a SIGCONT it seems that 'g1' register is being clobbered after the\n    syscall returns.  Before 86c5d2cf0ce046279, the 'g1' was always placed jus\n    before the 'ta' instruction which then reloads the syscall number and restarts\n    the syscall.\n    \n    On master, where 'g1' might be placed before 'ta':\n    \n      $ cat test.c\n      #include <unistd.h>\n    \n      int main ()\n      {\n        pause ();\n      }\n      $ gcc test.c -o test\n      $ strace -f ./t\n      [...]\n      ppoll(NULL, 0, NULL, NULL, 0\n    \n    On another terminal\n    \n      $ kill -STOP 2262828\n    \n      $ strace -f ./t\n      [...]\n      --- SIGSTOP {si_signo=SIGSTOP, si_code=SI_USER, si_pid=2521813, si_uid=8289} ---\n      --- stopped by SIGSTOP ---\n    \n    And then\n    \n      $ kill -CONT 2262828\n    \n    Results in:\n    \n      --- SIGCONT {si_signo=SIGCONT, si_code=SI_USER, si_pid=2521813, si_uid=8289} ---\n      restart_syscall(<... resuming interrupted ppoll ...>) = -1 EINTR (Interrupted system call)\n    \n    Where the expected behaviour would be:\n    \n      $ strace -f ./t\n      [...]\n      ppoll(NULL, 0, NULL, NULL, 0)           = ? ERESTARTNOHAND (To be restarted if no handler)\n      --- SIGSTOP {si_signo=SIGSTOP, si_code=SI_USER, si_pid=2521813, si_uid=8289} ---\n      --- stopped by SIGSTOP ---\n      --- SIGCONT {si_signo=SIGCONT, si_code=SI_USER, si_pid=2521813, si_uid=8289} ---\n      ppoll(NULL, 0, NULL, NULL, 0\n    \n    Just moving the 'g1' setting near the syscall asm is not suffice,\n    the compiler might optimize it away (as I saw on cancellation.c by\n    trying this fix).  Instead, I have change the inline asm to put the\n    'g1' setup in ithe asm block.  This would require to change the asm\n    constraint for INTERNAL_SYSCALL_NCS, since the syscall number is not\n    constant.\n    \n    Checked on sparc64-linux-gnu.\n    \n    Reported-by: René Rebe <rene@exactcode.de>\n    Tested-by: Sam James <sam@gentoo.org>\n    Reviewed-by: Sam James <sam@gentoo.org>\n    (cherry picked from commit 2c1903cbbac0022153a67776f474c221250ad6ed)\n    (cherry picked from commit 1cd7e13289b91e1495a1865c1f678196d1bb7be4)\n\ndiff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile\nindex 59998c7af4..34890ef69a 100644\n--- a/sysdeps/unix/sysv/linux/Makefile\n+++ b/sysdeps/unix/sysv/linux/Makefile\n@@ -227,6 +227,7 @@ tests += \\\n   tst-scm_rights \\\n   tst-sigtimedwait \\\n   tst-sync_file_range \\\n+  tst-syscall-restart \\\n   tst-sysconf-iov_max \\\n   tst-sysvmsg-linux \\\n   tst-sysvsem-linux \\\ndiff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h\nindex d2d68f5312..c2ffbb5c8f 100644\n--- a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h\n+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h\n@@ -107,6 +107,7 @@ ENTRY(name);\t\t\t\t\t\\\n #else  /* __ASSEMBLER__ */\n \n #define __SYSCALL_STRING\t\t\t\t\t\t\\\n+\t\"mov\t%[scn], %%g1;\"\t\t\t\t\t\t\\\n \t\"ta\t0x10;\"\t\t\t\t\t\t\t\\\n \t\"bcc\t1f;\"\t\t\t\t\t\t\t\\\n \t\" nop;\"\t\t\t\t\t\t\t\t\\\n@@ -114,7 +115,7 @@ ENTRY(name);\t\t\t\t\t\\\n \t\"1:\"\n \n #define __SYSCALL_CLOBBERS\t\t\t\t\t\t\\\n-\t\"f0\", \"f1\", \"f2\", \"f3\", \"f4\", \"f5\", \"f6\", \"f7\",\t\t\t\\\n+\t\"g1\", \"f0\", \"f1\", \"f2\", \"f3\", \"f4\", \"f5\", \"f6\", \"f7\",\t\t\\\n \t\"f8\", \"f9\", \"f10\", \"f11\", \"f12\", \"f13\", \"f14\", \"f15\",\t\t\\\n \t\"f16\", \"f17\", \"f18\", \"f19\", \"f20\", \"f21\", \"f22\", \"f23\",\t\t\\\n \t\"f24\", \"f25\", \"f26\", \"f27\", \"f28\", \"f29\", \"f30\", \"f31\",\t\t\\\ndiff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h\nindex 96047424e9..5598fab08a 100644\n--- a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h\n+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h\n@@ -106,6 +106,7 @@ ENTRY(name);\t\t\t\t\t\\\n #else  /* __ASSEMBLER__ */\n \n #define __SYSCALL_STRING\t\t\t\t\t\t\\\n+\t\"mov\t%[scn], %%g1;\"\t\t\t\t\t\t\\\n \t\"ta\t0x6d;\"\t\t\t\t\t\t\t\\\n \t\"bcc,pt\t%%xcc, 1f;\"\t\t\t\t\t\t\\\n \t\" nop;\"\t\t\t\t\t\t\t\t\\\n@@ -113,7 +114,7 @@ ENTRY(name);\t\t\t\t\t\\\n \t\"1:\"\n \n #define __SYSCALL_CLOBBERS\t\t\t\t\t\t\\\n-\t\"f0\", \"f1\", \"f2\", \"f3\", \"f4\", \"f5\", \"f6\", \"f7\",\t\t\t\\\n+\t\"g1\", \"f0\", \"f1\", \"f2\", \"f3\", \"f4\", \"f5\", \"f6\", \"f7\",\t\t\\\n \t\"f8\", \"f9\", \"f10\", \"f11\", \"f12\", \"f13\", \"f14\", \"f15\",\t\t\\\n \t\"f16\", \"f17\", \"f18\", \"f19\", \"f20\", \"f21\", \"f22\", \"f23\",\t\t\\\n \t\"f24\", \"f25\", \"f26\", \"f27\", \"f28\", \"f29\", \"f30\", \"f31\",\t\t\\\ndiff --git a/sysdeps/unix/sysv/linux/sparc/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sysdep.h\nindex dcabb57fe2..c287740a8c 100644\n--- a/sysdeps/unix/sysv/linux/sparc/sysdep.h\n+++ b/sysdeps/unix/sysv/linux/sparc/sysdep.h\n@@ -50,97 +50,109 @@\n \n #undef INTERNAL_SYSCALL_NCS\n #define INTERNAL_SYSCALL_NCS(name, nr, args...) \\\n-  internal_syscall##nr(__SYSCALL_STRING, name, args)\n+  _internal_syscall##nr(__SYSCALL_STRING, \"p\", name, args)\n \n-#define internal_syscall0(string,name,dummy...)\t\t\t\\\n+#define _internal_syscall0(string,nc,name,dummy...)\t\\\n ({\t\t\t\t\t\t\t\t\t\\\n-\tregister long int __g1 __asm__ (\"g1\") = (name);\t\t\t\\\n \tregister long __o0 __asm__ (\"o0\");\t\t\t\t\\\n+\tlong int _name = (long int) (name);\t\t\t\t\\\n \t__asm __volatile (string : \"=r\" (__o0) :\t\t\t\\\n-\t\t\t  \"r\" (__g1) :\t\t\t\t\t\\\n+\t\t\t  [scn] nc (_name) :\t\t\t\t\\\n \t\t\t  __SYSCALL_CLOBBERS);\t\t\t\t\\\n \t__o0;\t\t\t\t\t\t\t\t\\\n })\n+#define internal_syscall0(string,name,args...)\t\t\t\t\\\n+  _internal_syscall0(string, \"i\", name, args)\n \n-#define internal_syscall1(string,name,arg1)\t\t\t\t\\\n+#define _internal_syscall1(string,nc,name,arg1)\t\t\t\t\\\n ({\t\t\t\t\t\t\t\t\t\\\n \tlong int _arg1 = (long int) (arg1);\t\t\t\t\\\n-\tregister long int __g1 __asm__(\"g1\") = (name);\t\t\t\\\n+\tlong int _name = (long int) (name);\t\t\t\t\\\n \tregister long int  __o0 __asm__ (\"o0\") = _arg1;\t\t\t\\\n-\t__asm __volatile (string : \"=r\" (__o0) :\t\t\t\\\n-\t\t\t  \"r\" (__g1), \"0\" (__o0) :\t\t\t\\\n+\t__asm __volatile (string : \"+r\" (__o0) :\t\t\t\\\n+\t\t\t  [scn] nc (_name) :\t\t\t\t\\\n \t\t\t  __SYSCALL_CLOBBERS);\t\t\t\t\\\n \t__o0;\t\t\t\t\t\t\t\t\\\n })\n+#define internal_syscall1(string,name,args...)\t\t\t\t\\\n+  _internal_syscall1(string, \"i\", name, args)\n \n-#define internal_syscall2(string,name,arg1,arg2)\t\t\t\\\n+#define _internal_syscall2(string,nc,name,arg1,arg2)\t\t\t\\\n ({\t\t\t\t\t\t\t\t\t\\\n \tlong int _arg1 = (long int) (arg1);\t\t\t\t\\\n \tlong int _arg2 = (long int) (arg2);\t\t\t\t\\\n-\tregister long int __g1 __asm__(\"g1\") = (name);\t\t\t\\\n+\tlong int _name = (long int) (name);\t\t\t\t\\\n \tregister long int __o0 __asm__ (\"o0\") = _arg1;\t\t\t\\\n \tregister long int __o1 __asm__ (\"o1\") = _arg2;\t\t\t\\\n-\t__asm __volatile (string : \"=r\" (__o0) :\t\t\t\\\n-\t\t\t  \"r\" (__g1), \"0\" (__o0), \"r\" (__o1) :\t\t\\\n+\t__asm __volatile (string : \"+r\" (__o0) :\t\t\t\\\n+\t\t\t  [scn] nc (_name), \"r\" (__o1) :\t\t\\\n \t\t\t  __SYSCALL_CLOBBERS);\t\t\t\t\\\n \t__o0;\t\t\t\t\t\t\t\t\\\n })\n+#define internal_syscall2(string,name,args...)\t\t\t\t\\\n+  _internal_syscall2(string, \"i\", name, args)\n \n-#define internal_syscall3(string,name,arg1,arg2,arg3)\t\t\t\\\n+#define _internal_syscall3(string,nc,name,arg1,arg2,arg3)\t\t\\\n ({\t\t\t\t\t\t\t\t\t\\\n \tlong int _arg1 = (long int) (arg1);\t\t\t\t\\\n \tlong int _arg2 = (long int) (arg2);\t\t\t\t\\\n \tlong int _arg3 = (long int) (arg3);\t\t\t\t\\\n-\tregister long int __g1 __asm__(\"g1\") = (name);\t\t\t\\\n+\tlong int _name = (long int) (name);\t\t\t\t\\\n \tregister long int __o0 __asm__ (\"o0\") = _arg1;\t\t\t\\\n \tregister long int __o1 __asm__ (\"o1\") = _arg2;\t\t\t\\\n \tregister long int __o2 __asm__ (\"o2\") = _arg3;\t\t\t\\\n-\t__asm __volatile (string : \"=r\" (__o0) :\t\t\t\\\n-\t\t\t  \"r\" (__g1), \"0\" (__o0), \"r\" (__o1),\t\t\\\n+\t__asm __volatile (string : \"+r\" (__o0) :\t\t\t\\\n+\t\t\t  [scn] nc (_name), \"r\" (__o1),\t\t\t\\\n \t\t\t  \"r\" (__o2) :\t\t\t\t\t\\\n \t\t\t  __SYSCALL_CLOBBERS);\t\t\t\t\\\n \t__o0;\t\t\t\t\t\t\t\t\\\n })\n+#define internal_syscall3(string,name,args...)\t\t\t\t\\\n+  _internal_syscall3(string, \"i\", name, args)\n \n-#define internal_syscall4(string,name,arg1,arg2,arg3,arg4)\t\t\\\n+#define _internal_syscall4(string,nc,name,arg1,arg2,arg3,arg4)\t\t\\\n ({\t\t\t\t\t\t\t\t\t\\\n \tlong int _arg1 = (long int) (arg1);\t\t\t\t\\\n \tlong int _arg2 = (long int) (arg2);\t\t\t\t\\\n \tlong int _arg3 = (long int) (arg3);\t\t\t\t\\\n \tlong int _arg4 = (long int) (arg4);\t\t\t\t\\\n-\tregister long int __g1 __asm__(\"g1\") = (name);\t\t\t\\\n+\tlong int _name = (long int) (name);\t\t\t\t\\\n \tregister long int __o0 __asm__ (\"o0\") = _arg1;\t\t\t\\\n \tregister long int __o1 __asm__ (\"o1\") = _arg2;\t\t\t\\\n \tregister long int __o2 __asm__ (\"o2\") = _arg3;\t\t\t\\\n \tregister long int __o3 __asm__ (\"o3\") = _arg4;\t\t\t\\\n-\t__asm __volatile (string : \"=r\" (__o0) :\t\t\t\\\n-\t\t\t  \"r\" (__g1), \"0\" (__o0), \"r\" (__o1),\t\t\\\n+\t__asm __volatile (string : \"+r\" (__o0) :\t\t\t\\\n+\t\t\t  [scn] nc (_name), \"r\" (__o1),\t\t\t\\\n \t\t\t  \"r\" (__o2), \"r\" (__o3) :\t\t\t\\\n \t\t\t  __SYSCALL_CLOBBERS);\t\t\t\t\\\n \t__o0;\t\t\t\t\t\t\t\t\\\n })\n+#define internal_syscall4(string,name,args...)\t\t\t\t\\\n+  _internal_syscall4(string, \"i\", name, args)\n \n-#define internal_syscall5(string,name,arg1,arg2,arg3,arg4,arg5)\t\t\\\n+#define _internal_syscall5(string,nc,name,arg1,arg2,arg3,arg4,arg5)\t\\\n ({\t\t\t\t\t\t\t\t\t\\\n \tlong int _arg1 = (long int) (arg1);\t\t\t\t\\\n \tlong int _arg2 = (long int) (arg2);\t\t\t\t\\\n \tlong int _arg3 = (long int) (arg3);\t\t\t\t\\\n \tlong int _arg4 = (long int) (arg4);\t\t\t\t\\\n \tlong int _arg5 = (long int) (arg5);\t\t\t\t\\\n-\tregister long int __g1 __asm__(\"g1\") = (name);\t\t\t\\\n+\tlong int _name = (long int) (name);\t\t\t\t\\\n \tregister long int __o0 __asm__ (\"o0\") = _arg1;\t\t\t\\\n \tregister long int __o1 __asm__ (\"o1\") = _arg2;\t\t\t\\\n \tregister long int __o2 __asm__ (\"o2\") = _arg3;\t\t\t\\\n \tregister long int __o3 __asm__ (\"o3\") = _arg4;\t\t\t\\\n \tregister long int __o4 __asm__ (\"o4\") = _arg5;\t\t\t\\\n-\t__asm __volatile (string : \"=r\" (__o0) :\t\t\t\\\n-\t\t\t  \"r\" (__g1), \"0\" (__o0), \"r\" (__o1),\t\t\\\n+\t__asm __volatile (string : \"+r\" (__o0) :\t\t\t\\\n+\t\t\t  [scn] nc (_name), \"r\" (__o1),\t\t\t\\\n \t\t\t  \"r\" (__o2), \"r\" (__o3), \"r\" (__o4) :\t\t\\\n \t\t\t  __SYSCALL_CLOBBERS);\t\t\t\t\\\n \t__o0;\t\t\t\t\t\t\t\t\\\n })\n+#define internal_syscall5(string,name,args...)\t\t\t\t\\\n+  _internal_syscall5(string, \"i\", name, args)\n \n-#define internal_syscall6(string,name,arg1,arg2,arg3,arg4,arg5,arg6)\t\\\n+#define _internal_syscall6(string,nc,name,arg1,arg2,arg3,arg4,arg5,arg6)\\\n ({\t\t\t\t\t\t\t\t\t\\\n \tlong int _arg1 = (long int) (arg1);\t\t\t\t\\\n \tlong int _arg2 = (long int) (arg2);\t\t\t\t\\\n@@ -148,20 +160,22 @@\n \tlong int _arg4 = (long int) (arg4);\t\t\t\t\\\n \tlong int _arg5 = (long int) (arg5);\t\t\t\t\\\n \tlong int _arg6 = (long int) (arg6);\t\t\t\t\\\n-\tregister long int __g1 __asm__(\"g1\") = (name);\t\t\t\\\n+\tlong int _name = (long int) (name);\t\t\t\t\\\n \tregister long int __o0 __asm__ (\"o0\") = _arg1;\t\t\t\\\n \tregister long int __o1 __asm__ (\"o1\") = _arg2;\t\t\t\\\n \tregister long int __o2 __asm__ (\"o2\") = _arg3;\t\t\t\\\n \tregister long int __o3 __asm__ (\"o3\") = _arg4;\t\t\t\\\n \tregister long int __o4 __asm__ (\"o4\") = _arg5;\t\t\t\\\n \tregister long int __o5 __asm__ (\"o5\") = _arg6;\t\t\t\\\n-\t__asm __volatile (string : \"=r\" (__o0) :\t\t\t\\\n-\t\t\t  \"r\" (__g1), \"0\" (__o0), \"r\" (__o1),\t\t\\\n+\t__asm __volatile (string : \"+r\" (__o0) :\t\t\t\\\n+\t\t\t  [scn] nc (_name), \"r\" (__o1),\t\t\t\\\n \t\t\t  \"r\" (__o2), \"r\" (__o3), \"r\" (__o4),\t\t\\\n \t\t\t  \"r\" (__o5) :\t\t\t\t\t\\\n \t\t\t  __SYSCALL_CLOBBERS);\t\t\t\t\\\n \t__o0;\t\t\t\t\t\t\t\t\\\n })\n+#define internal_syscall6(string,name,args...)\t\t\t\t\\\n+  _internal_syscall6(string, \"i\", name, args)\n \n #define INLINE_CLONE_SYSCALL(arg1,arg2,arg3,arg4,arg5)\t\t\t\\\n ({\t\t\t\t\t\t\t\t\t\\\n@@ -170,15 +184,15 @@\n \tlong int _arg3 = (long int) (arg3);\t\t\t\t\\\n \tlong int _arg4 = (long int) (arg4);\t\t\t\t\\\n \tlong int _arg5 = (long int) (arg5);\t\t\t\t\\\n+\tlong int _name = __NR_clone;\t\t\t\t\t\\\n \tregister long int __o0 __asm__ (\"o0\") = _arg1;\t\t\t\\\n \tregister long int __o1 __asm__ (\"o1\") = _arg2;\t\t\t\\\n \tregister long int __o2 __asm__ (\"o2\") = _arg3;\t\t\t\\\n \tregister long int __o3 __asm__ (\"o3\") = _arg4;\t\t\t\\\n \tregister long int __o4 __asm__ (\"o4\") = _arg5;\t\t\t\\\n-\tregister long int __g1 __asm__ (\"g1\") = __NR_clone;\t\t\\\n \t__asm __volatile (__SYSCALL_STRING :\t\t\t\t\\\n \t\t\t  \"=r\" (__o0), \"=r\" (__o1) :\t\t\t\\\n-\t\t\t  \"r\" (__g1), \"0\" (__o0), \"1\" (__o1),\t\t\\\n+\t\t\t  [scn] \"i\" (_name), \"0\" (__o0), \"1\" (__o1),\t\\\n \t\t\t  \"r\" (__o2), \"r\" (__o3), \"r\" (__o4) :\t\t\\\n \t\t\t  __SYSCALL_CLOBBERS);\t\t\t\t\\\n \tif (__glibc_unlikely ((unsigned long int) (__o0) > -4096UL))\t\\\ndiff --git a/sysdeps/unix/sysv/linux/tst-syscall-restart.c b/sysdeps/unix/sysv/linux/tst-syscall-restart.c\nnew file mode 100644\nindex 0000000000..84a8a41b5c\n--- /dev/null\n+++ b/sysdeps/unix/sysv/linux/tst-syscall-restart.c\n@@ -0,0 +1,112 @@\n+/* Test if a syscall is correctly restarted.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <support/xsignal.h>\n+#include <support/check.h>\n+#include <support/process_state.h>\n+#include <support/xunistd.h>\n+#include <support/xthread.h>\n+#include <sys/wait.h>\n+\n+static int\n+check_pid (pid_t pid)\n+{\n+  /* Wait until the child has called pause and it blocking on kernel.  */\n+  support_process_state_wait (pid, support_process_state_sleeping);\n+\n+  TEST_COMPARE (kill (pid, SIGSTOP), 0);\n+\n+  /* Adding process_state_tracing_stop ('t') allows the test to work under\n+     trace programs such as ptrace.  */\n+  support_process_state_wait (pid, support_process_state_stopped\n+\t\t\t\t   | support_process_state_tracing_stop);\n+\n+  TEST_COMPARE (kill (pid, SIGCONT), 0);\n+\n+  enum support_process_state state\n+    = support_process_state_wait (pid, support_process_state_sleeping\n+\t\t\t\t       | support_process_state_zombie);\n+\n+  TEST_COMPARE (state, support_process_state_sleeping);\n+\n+  TEST_COMPARE (kill (pid, SIGTERM), 0);\n+\n+  siginfo_t info;\n+  TEST_COMPARE (waitid (P_PID, pid, &info, WEXITED), 0);\n+  TEST_COMPARE (info.si_signo, SIGCHLD);\n+  TEST_COMPARE (info.si_code, CLD_KILLED);\n+  TEST_COMPARE (info.si_status, SIGTERM);\n+  TEST_COMPARE (info.si_pid, pid);\n+\n+  return 0;\n+}\n+\n+static void *\n+tf (void *)\n+{\n+  pause ();\n+  return NULL;\n+}\n+\n+static void\n+child_mt (void)\n+{\n+  /* Let only the created thread to handle signals.  */\n+  sigset_t set;\n+  sigfillset (&set);\n+  xpthread_sigmask (SIG_BLOCK, &set, NULL);\n+\n+  sigdelset (&set, SIGSTOP);\n+  sigdelset (&set, SIGCONT);\n+  sigdelset (&set, SIGTERM);\n+\n+  pthread_attr_t attr;\n+  xpthread_attr_init (&attr);\n+  TEST_COMPARE (pthread_attr_setsigmask_np (&attr, &set), 0);\n+\n+  xpthread_join (xpthread_create (&attr, tf, NULL));\n+}\n+\n+static void\n+do_test_syscall (bool multithread)\n+{\n+  pid_t pid = xfork ();\n+  if (pid == 0)\n+    {\n+      if (multithread)\n+\tchild_mt ();\n+      else\n+\tpause ();\n+      _exit (127);\n+    }\n+\n+  check_pid (pid);\n+}\n+\n+static int\n+do_test (void)\n+{\n+  /* Check for both single and multi thread, since they use different syscall\n+     mechanisms.  */\n+  do_test_syscall (false);\n+  do_test_syscall (true);\n+\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\n\ncommit 9af64ca64c532b7e42a40b48fe5e01726a9b7943\nAuthor: H.J. Lu <hjl.tools@gmail.com>\nDate:   Thu Dec 5 08:39:44 2024 +0800\n\n    math: Exclude internal math symbols for tests [BZ #32414]\n    \n    Since internal tests don't have access to internal symbols in libm,\n    exclude them for internal tests.  Also make tst-strtod5 and tst-strtod5i\n    depend on $(libm) to support older versions of GCC which can't inline\n    copysign family functions.  This fixes BZ #32414.\n    \n    Signed-off-by: H.J. Lu <hjl.tools@gmail.com>\n    Reviewed-by: Sunil K Pandey <skpgkp2@gmail.com>\n    (cherry picked from commit 5df09b444835fca6e64b3d4b4a5beb19b3b2ba21)\n\ndiff --git a/include/math.h b/include/math.h\nindex fa11a710a6..035fd160ff 100644\n--- a/include/math.h\n+++ b/include/math.h\n@@ -130,7 +130,10 @@ fabsf128 (_Float128 x)\n }\n # endif\n \n-# if !(defined __FINITE_MATH_ONLY__ && __FINITE_MATH_ONLY__ > 0)\n+\n+/* NB: Internal tests don't have access to internal symbols.  */\n+# if !IS_IN (testsuite_internal) \\\n+     && !(defined __FINITE_MATH_ONLY__ && __FINITE_MATH_ONLY__ > 0)\n #  ifndef NO_MATH_REDIRECT\n /* Declare some functions for use within GLIBC.  Compilers typically\n    inline those functions as a single instruction.  Use an asm to\ndiff --git a/stdlib/Makefile b/stdlib/Makefile\nindex 8b0ac63ddb..8213fa83ef 100644\n--- a/stdlib/Makefile\n+++ b/stdlib/Makefile\n@@ -603,6 +603,8 @@ $(objpfx)bug-strtod2: $(libm)\n $(objpfx)tst-strtod-round: $(libm)\n $(objpfx)tst-tininess: $(libm)\n $(objpfx)tst-strtod-underflow: $(libm)\n+$(objpfx)tst-strtod5: $(libm)\n+$(objpfx)tst-strtod5i: $(libm)\n $(objpfx)tst-strtod6: $(libm)\n $(objpfx)tst-strtod-nan-locale: $(libm)\n $(objpfx)tst-strtod-nan-sign: $(libm)\n\ncommit 0b39fe801208e805cc911f64a2fdd25d04b7151e\nAuthor: Adhemerval Zanella <adhemerval.zanella@linaro.org>\nDate:   Fri Oct 18 08:48:22 2024 -0300\n\n    linux: Fix tst-syscall-restart.c on old gcc (BZ 32283)\n    \n    To avoid a parameter name omitted error.\n    \n    (cherry picked from commit ab564362d0470d10947c24155ec048c4e14a009d)\n\ndiff --git a/sysdeps/unix/sysv/linux/tst-syscall-restart.c b/sysdeps/unix/sysv/linux/tst-syscall-restart.c\nindex 84a8a41b5c..0ee7dc8517 100644\n--- a/sysdeps/unix/sysv/linux/tst-syscall-restart.c\n+++ b/sysdeps/unix/sysv/linux/tst-syscall-restart.c\n@@ -57,7 +57,7 @@ check_pid (pid_t pid)\n }\n \n static void *\n-tf (void *)\n+tf (void *closure)\n {\n   pause ();\n   return NULL;\n\ncommit 94e4a8c7d68129075f1b494a0b26151a4f989b36\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Tue Dec 17 18:12:03 2024 +0100\n\n    x86: Avoid integer truncation with large cache sizes (bug 32470)\n    \n    Some hypervisors report 1 TiB L3 cache size.  This results\n    in some variables incorrectly getting zeroed, causing crashes\n    in memcpy/memmove because invariants are violated.\n    \n    (cherry picked from commit 61c3450db96dce96ad2b24b4f0b548e6a46d68e5)\n\ndiff --git a/NEWS b/NEWS\nindex bd0b3bd66a..97a1e1f5d4 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -20,6 +20,7 @@ The following bugs are resolved with this release:\n   [32137] libio: Attempt wide backup free only for non-legacy code\n   [32231] elf: Change ldconfig auxcache magic number\n   [32245] glibc -Wstringop-overflow= build failure on hppa\n+  [32470] x86: Avoid integer truncation with large cache sizes\n \f\n Version 2.40\n \ndiff --git a/sysdeps/x86/dl-cacheinfo.h b/sysdeps/x86/dl-cacheinfo.h\nindex a1c03b8903..ac97414b5b 100644\n--- a/sysdeps/x86/dl-cacheinfo.h\n+++ b/sysdeps/x86/dl-cacheinfo.h\n@@ -961,11 +961,11 @@ dl_init_cacheinfo (struct cpu_features *cpu_features)\n     non_temporal_threshold = maximum_non_temporal_threshold;\n \n   /* NB: The REP MOVSB threshold must be greater than VEC_SIZE * 8.  */\n-  unsigned int minimum_rep_movsb_threshold;\n+  unsigned long int minimum_rep_movsb_threshold;\n   /* NB: The default REP MOVSB threshold is 4096 * (VEC_SIZE / 16) for\n      VEC_SIZE == 64 or 32.  For VEC_SIZE == 16, the default REP MOVSB\n      threshold is 2048 * (VEC_SIZE / 16).  */\n-  unsigned int rep_movsb_threshold;\n+  unsigned long int rep_movsb_threshold;\n   if (CPU_FEATURE_USABLE_P (cpu_features, AVX512F)\n       && !CPU_FEATURE_PREFERRED_P (cpu_features, Prefer_No_AVX512))\n     {\n\ncommit 9fbfbd924f718663d5303858f34d1f857c375093\nAuthor: John David Anglin <danglin@gcc.gnu.org>\nDate:   Thu Dec 19 11:30:09 2024 -0500\n\n    hppa: Fix strace detach-vfork test\n    \n    This change implements vfork.S for direct support of the vfork\n    syscall.  clone.S is revised to correct child support for the\n    vfork case.\n    \n    The main bug was creating a frame prior to the clone syscall.\n    This was done to allow the rp and r4 registers to be saved and\n    restored from the stack frame.  r4 was used to save and restore\n    the PIC register, r19, across the system call and the call to\n    set errno.  But in the vfork case, it is undefined behavior\n    for the child to return from the function in which vfork was\n    called.  It is surprising that this usually worked.\n    \n    Syscalls on hppa save and restore rp and r19, so we don't need\n    to create a frame prior to the clone syscall.  We only need a\n    frame when __syscall_error is called.  We also don't need to\n    save and restore r19 around the call to $$dyncall as r19 is not\n    used in the code after $$dyncall.\n    \n    This considerably simplifies clone.S.\n    \n    Signed-off-by: John David Anglin <dave.anglin@bell.net>\n\ndiff --git a/sysdeps/unix/sysv/linux/hppa/clone.S b/sysdeps/unix/sysv/linux/hppa/clone.S\nindex a31afea429..c18163d0f7 100644\n--- a/sysdeps/unix/sysv/linux/hppa/clone.S\n+++ b/sysdeps/unix/sysv/linux/hppa/clone.S\n@@ -59,16 +59,6 @@\n \n         .text\n ENTRY(__clone)\n-\t/* Prologue */\n-\tstwm\t%r4, 64(%sp)\n-\t.cfi_def_cfa_offset -64\n-\t.cfi_offset 4, 0\n-\tstw\t%sp, -4(%sp)\n-#ifdef PIC\n-\tstw\t%r19, -32(%sp)\n-\t.cfi_offset 19, 32\n-#endif\n-\n \t/* Sanity check arguments.  */\n \tcomib,=,n\t0,%arg0,.LerrorSanity\t/* no NULL function pointers */\n \tcomib,=,n\t0,%arg1,.LerrorSanity\t/* no NULL stack pointers */\n@@ -87,54 +77,34 @@ ENTRY(__clone)\n \t/* User stack pointer is in the correct register already */\n \n \t/* Load args from stack... */\n-\tldw\t-116(%sp), %r24\t\t/* Load parent_tidptr */\n-\tldw\t-120(%sp), %r23 \t/* Load newtls */\n-\tldw\t-124(%sp), %r22\t\t/* Load child_tidptr */\n-\n-\t/* Save the PIC register. */\n-#ifdef PIC\n-\tcopy\t%r19, %r4\t\t/* parent */\n-#endif\n+\tldw\t-52(%sp), %r24\t\t/* Load parent_tidptr */\n+\tldw\t-56(%sp), %r23\t \t/* Load newtls */\n+\tldw\t-60(%sp), %r22\t\t/* Load child_tidptr */\n \n \t/* Do the system call */\n \tble     0x100(%sr2, %r0)\n \tldi\t__NR_clone, %r20\n \n \tldi\t-4096, %r1\n-\tcomclr,>>= %r1, %ret0, %r0\t/* Note: unsigned compare. */\n-\tb,n\t.LerrorRest\n-\n-\t/* Restore the PIC register.  */\n-#ifdef PIC\n-\tcopy\t%r4, %r19\t\t/* parent */\n-#endif\n-\n+\tcomb,<<,n\t%r1, %ret0, .LerrorRest /* Note: unsigned compare. */\n \tcomib,=,n 0, %ret0, .LthreadStart\n-\n-\t/* Successful return from the parent\n-\t   No need to restore the PIC register,\n-\t   since we return immediately. */\n-\n-\tldw\t-84(%sp), %rp\n-\tbv\t%r0(%rp)\n-\tldwm\t-64(%sp), %r4\n+\tbv,n\t%r0(%rp)\n \n .LerrorRest:\n-\t/* Something bad happened -- no child created */\n+\t/* Something bad happened -- no child created -- need a frame */\n+\tldo\t64(%sp),%sp\n+\t.cfi_def_cfa_offset -64\n \tbl\t__syscall_error, %rp\n \tsub     %r0, %ret0, %arg0\n \tldw\t-84(%sp), %rp\n \t/* Return after setting errno, ret0 is set to -1 by __syscall_error. */\n \tbv\t%r0(%rp)\n-\tldwm\t-64(%sp), %r4\n+\tldo\t-64(%sp), %sp\n \n .LerrorSanity:\n \t/* Sanity checks failed, return -1, and set errno to EINVAL. */\n-\tbl\t__syscall_error, %rp\n-\tldi     EINVAL, %arg0\n-\tldw\t-84(%sp), %rp\n-\tbv\t%r0(%rp)\n-\tldwm\t-64(%sp), %r4\n+\tb\t.LerrorRest\n+\tldi\t-EINVAL, %ret0\n \n .LthreadStart:\n \t/* Load up the arguments.  */\n@@ -144,14 +114,8 @@ ENTRY(__clone)\n \t/* $$dyncall fixes child's PIC register */\n \n \t/* Call the user's function */\n-#ifdef PIC\n-\tcopy\t%r19, %r4\n-#endif\n \tbl\t$$dyncall, %r31\n \tcopy\t%r31, %rp\n-#ifdef PIC\n-\tcopy\t%r4, %r19\n-#endif\n \tcopy\t%r28, %r26\n \tble     0x100(%sr2, %r0)\n \tldi\t__NR_exit, %r20\ndiff --git a/sysdeps/unix/sysv/linux/hppa/vfork.S b/sysdeps/unix/sysv/linux/hppa/vfork.S\nnew file mode 100644\nindex 0000000000..5fd368f3cf\n--- /dev/null\n+++ b/sysdeps/unix/sysv/linux/hppa/vfork.S\n@@ -0,0 +1,53 @@\n+/* Copyright (C) 1999-2024 Free Software Foundation, Inc.\n+\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public License as\n+   published by the Free Software Foundation; either version 2.1 of the\n+   License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <sysdep.h>\n+#define _ERRNO_H\t1\n+#include <bits/errno.h>\n+\n+/* Clone the calling process, but without copying the whole address space.\n+   The calling process is suspended until the new process exits or is\n+   replaced by a call to `execve'.  Return -1 for errors, 0 to the new process,\n+   and the process ID of the new process to the old process.  */\n+\n+ENTRY (__vfork)\n+\tble\t0x100(%sr2, %r0)\n+\tldi\t__NR_vfork, %r20\n+\n+\tldi\t-4096, %r1\n+\tcomclr,<<\t%r1, %ret0, %r0      /* Note: unsigned compare. */\n+\tbv,n\t%r0(%rp)\n+\n+\t/* Something bad happened -- no child created -- we need a frame */\n+\tldo\t64(%sp), %sp\n+\t.cfi_def_cfa_offset -64\n+\n+\t/* Set errno */\n+\tbl\t__syscall_error, %rp\n+\tsub\t%r0, %ret0, %arg0\n+\n+\t/* ret0 is set to -1 by __syscall_error */\n+\tldw\t-84(%sp), %rp\n+\tbv\t%r0(%rp)\n+\tldo\t-64(%sp), %sp\n+\n+PSEUDO_END (__vfork)\n+libc_hidden_def (__vfork)\n+\n+weak_alias (__vfork, vfork)\n+strong_alias (__vfork, __libc_vfork)\n\ncommit 7648e3c8e80b3f1b3b43506b2fbe370e4824ab97\nAuthor: John David Anglin <danglin@gcc.gnu.org>\nDate:   Sun Dec 22 09:58:02 2024 -0500\n\n    hppa: Simplify handling of sanity check errors in clone.S.\n    \n    This simplifies the handling of sanity check errors in clone.S.\n    Adjusted a couple of comments to reflect current code.\n    \n    Signed-off-by: John David Anglin <dave.anglin@bell.net>\n\ndiff --git a/sysdeps/unix/sysv/linux/hppa/clone.S b/sysdeps/unix/sysv/linux/hppa/clone.S\nindex c18163d0f7..e85e7f517f 100644\n--- a/sysdeps/unix/sysv/linux/hppa/clone.S\n+++ b/sysdeps/unix/sysv/linux/hppa/clone.S\n@@ -90,6 +90,10 @@ ENTRY(__clone)\n \tcomib,=,n 0, %ret0, .LthreadStart\n \tbv,n\t%r0(%rp)\n \n+.LerrorSanity:\n+\t/* Sanity checks failed, set errno to EINVAL.  */\n+\tldi\t-EINVAL, %ret0\n+\n .LerrorRest:\n \t/* Something bad happened -- no child created -- need a frame */\n \tldo\t64(%sp),%sp\n@@ -101,11 +105,6 @@ ENTRY(__clone)\n \tbv\t%r0(%rp)\n \tldo\t-64(%sp), %sp\n \n-.LerrorSanity:\n-\t/* Sanity checks failed, return -1, and set errno to EINVAL. */\n-\tb\t.LerrorRest\n-\tldi\t-EINVAL, %ret0\n-\n .LthreadStart:\n \t/* Load up the arguments.  */\n \tldw\t-60(%sp), %arg0\n@@ -121,7 +120,7 @@ ENTRY(__clone)\n \tldi\t__NR_exit, %r20\n \n \t/* We should not return from exit.\n-           We do not restore r4, or the stack state.  */\n+           We do not restore the stack state.  */\n \tiitlbp\t%r0, (%sr0, %r0)\n \n PSEUDO_END(__clone)\n\ncommit 473597d8167f86afee3544215db108b170ec13c0\nAuthor: Andreas Schwab <schwab@suse.de>\nDate:   Wed Sep 25 11:49:30 2024 +0200\n\n    Fix missing randomness in __gen_tempname (bug 32214)\n    \n    Make sure to update the random value also if getrandom fails.\n    \n    Fixes: 686d542025 (\"posix: Sync tempname with gnulib\")\n    (cherry picked from commit 5f62cf88c4530c11904482775b7582bd7f6d80d2)\n\ndiff --git a/NEWS b/NEWS\nindex 97a1e1f5d4..57feba81cd 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -18,6 +18,7 @@ The following bugs are resolved with this release:\n   [32026] strerror/strsignal TLS not handled correctly for secondary namespaces\n   [32052] Name space violation in fortify wrappers\n   [32137] libio: Attempt wide backup free only for non-legacy code\n+  [32214] Fix missing randomness in __gen_tempname\n   [32231] elf: Change ldconfig auxcache magic number\n   [32245] glibc -Wstringop-overflow= build failure on hppa\n   [32470] x86: Avoid integer truncation with large cache sizes\ndiff --git a/sysdeps/posix/tempname.c b/sysdeps/posix/tempname.c\nindex c00fe0c181..fc30958a0c 100644\n--- a/sysdeps/posix/tempname.c\n+++ b/sysdeps/posix/tempname.c\n@@ -117,6 +117,8 @@ random_bits (random_value *r, random_value s)\n      succeed.  */\n #if !_LIBC\n   *r = mix_random_values (v, clock ());\n+#else\n+  *r = v;\n #endif\n   return false;\n }\n\ncommit 7d4b6bcae91f29d7b4daf15bab06b66cf1d2217c\nAuthor: Siddhesh Poyarekar <siddhesh@sourceware.org>\nDate:   Tue Jan 21 16:11:06 2025 -0500\n\n    Fix underallocation of abort_msg_s struct (CVE-2025-0395)\n    \n    Include the space needed to store the length of the message itself, in\n    addition to the message string.  This resolves BZ #32582.\n    \n    Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>\n    Reviewed: Adhemerval Zanella  <adhemerval.zanella@linaro.org>\n    (cherry picked from commit 68ee0f704cb81e9ad0a78c644a83e1e9cd2ee578)\n\ndiff --git a/assert/assert.c b/assert/assert.c\nindex c29629f5f6..b6e37d694c 100644\n--- a/assert/assert.c\n+++ b/assert/assert.c\n@@ -18,6 +18,7 @@\n #include <assert.h>\n #include <atomic.h>\n #include <ldsodefs.h>\n+#include <libc-pointer-arith.h>\n #include <libintl.h>\n #include <stdio.h>\n #include <stdlib.h>\n@@ -65,7 +66,8 @@ __assert_fail_base (const char *fmt, const char *assertion, const char *file,\n       (void) __fxprintf (NULL, \"%s\", str);\n       (void) fflush (stderr);\n \n-      total = (total + 1 + GLRO(dl_pagesize) - 1) & ~(GLRO(dl_pagesize) - 1);\n+      total = ALIGN_UP (total + sizeof (struct abort_msg_s) + 1,\n+\t\t\tGLRO(dl_pagesize));\n       struct abort_msg_s *buf = __mmap (NULL, total, PROT_READ | PROT_WRITE,\n \t\t\t\t\tMAP_ANON | MAP_PRIVATE, -1, 0);\n       if (__glibc_likely (buf != MAP_FAILED))\ndiff --git a/sysdeps/posix/libc_fatal.c b/sysdeps/posix/libc_fatal.c\nindex f9e3425e04..089c47b04b 100644\n--- a/sysdeps/posix/libc_fatal.c\n+++ b/sysdeps/posix/libc_fatal.c\n@@ -20,6 +20,7 @@\n #include <errno.h>\n #include <fcntl.h>\n #include <ldsodefs.h>\n+#include <libc-pointer-arith.h>\n #include <paths.h>\n #include <stdarg.h>\n #include <stdbool.h>\n@@ -105,7 +106,8 @@ __libc_message_impl (const char *fmt, ...)\n     {\n       WRITEV_FOR_FATAL (fd, iov, iovcnt, total);\n \n-      total = (total + 1 + GLRO(dl_pagesize) - 1) & ~(GLRO(dl_pagesize) - 1);\n+      total = ALIGN_UP (total + sizeof (struct abort_msg_s) + 1,\n+\t\t\tGLRO(dl_pagesize));\n       struct abort_msg_s *buf = __mmap (NULL, total,\n \t\t\t\t\tPROT_READ | PROT_WRITE,\n \t\t\t\t\tMAP_ANON | MAP_PRIVATE, -1, 0);\n\ncommit aef8f8d6a947b290162393e1d717c7aee96fef8e\nAuthor: H.J. Lu <hjl.tools@gmail.com>\nDate:   Tue Dec 17 18:41:45 2024 +0800\n\n    Hide all malloc functions from compiler [BZ #32366]\n    \n    Since -1 isn't a power of two, compiler may reject it, hide memalign from\n    Clang 19 which issues an error:\n    \n    tst-memalign.c:86:31: error: requested alignment is not a power of 2 [-Werror,-Wnon-power-of-two-alignment]\n       86 |   p = memalign (-1, pagesize);\n          |                 ^~\n    tst-memalign.c:86:31: error: requested alignment must be 4294967296 bytes or smaller; maximum alignment assumed [-Werror,-Wbuiltin-assume-aligned-alignment]\n       86 |   p = memalign (-1, pagesize);\n          |                 ^~\n    \n    Update tst-malloc-aux.h to hide all malloc functions and include it in\n    all malloc tests to prevent compiler from optimizing out any malloc\n    functions.\n    \n    Tested with Clang 19.1.5 and GCC 15 20241206 for BZ #32366.\n    \n    Signed-off-by: H.J. Lu <hjl.tools@gmail.com>\n    Reviewed-by: Sam James <sam@gentoo.org>\n    (cherry picked from commit f9493a15ea9cfb63a815c00c23142369ec09d8ce)\n\ndiff --git a/malloc/tst-mallinfo2.c b/malloc/tst-mallinfo2.c\nindex 2c02f5f700..f072b9f24b 100644\n--- a/malloc/tst-mallinfo2.c\n+++ b/malloc/tst-mallinfo2.c\n@@ -23,6 +23,8 @@\n #include <stdlib.h>\n #include <support/check.h>\n \n+#include \"tst-malloc-aux.h\"\n+\n /* This is not specifically needed for the test, but (1) does\n    something to the data so gcc doesn't optimize it away, and (2) may\n    help when developing future tests.  */\ndiff --git a/malloc/tst-malloc-aux.h b/malloc/tst-malloc-aux.h\nindex 54908b4a24..3e1b61ce34 100644\n--- a/malloc/tst-malloc-aux.h\n+++ b/malloc/tst-malloc-aux.h\n@@ -22,20 +22,35 @@\n \n #include <stddef.h>\n #include <stdlib.h>\n-\n-static void *(*volatile aligned_alloc_indirect)(size_t, size_t) = aligned_alloc;\n-static void *(*volatile calloc_indirect)(size_t, size_t) = calloc;\n-static void *(*volatile malloc_indirect)(size_t) = malloc;\n-static void *(*volatile realloc_indirect)(void*, size_t) = realloc;\n+#include <malloc.h>\n+\n+static __typeof (aligned_alloc) * volatile aligned_alloc_indirect\n+  = aligned_alloc;\n+static __typeof (calloc) * volatile calloc_indirect = calloc;\n+static __typeof (malloc) * volatile malloc_indirect = malloc;\n+static __typeof (memalign) * volatile memalign_indirect = memalign;\n+static __typeof (posix_memalign) * volatile posix_memalign_indirect\n+  = posix_memalign;\n+static __typeof (pvalloc) * volatile pvalloc_indirect = pvalloc;\n+static __typeof (realloc) * volatile realloc_indirect = realloc;\n+static __typeof (valloc) * volatile valloc_indirect = valloc;\n \n #undef aligned_alloc\n #undef calloc\n #undef malloc\n+#undef memalign\n+#undef posix_memalign\n+#undef pvalloc\n #undef realloc\n+#undef valloc\n \n #define aligned_alloc aligned_alloc_indirect\n #define calloc calloc_indirect\n #define malloc malloc_indirect\n+#define memalign memalign_indirect\n+#define posix_memalign posix_memalign_indirect\n+#define pvalloc pvalloc_indirect\n #define realloc realloc_indirect\n+#define valloc valloc_indirect\n \n #endif /* TST_MALLOC_AUX_H */\ndiff --git a/malloc/tst-malloc-backtrace.c b/malloc/tst-malloc-backtrace.c\nindex c7b1d65e5c..65fa91f6fd 100644\n--- a/malloc/tst-malloc-backtrace.c\n+++ b/malloc/tst-malloc-backtrace.c\n@@ -22,6 +22,8 @@\n #include <support/support.h>\n #include <libc-diag.h>\n \n+#include \"tst-malloc-aux.h\"\n+\n #define SIZE 4096\n \n /* Wrap free with a function to prevent gcc from optimizing it out.  */\ndiff --git a/malloc/tst-memalign.c b/malloc/tst-memalign.c\nindex 563f6413d2..ac9770d3f9 100644\n--- a/malloc/tst-memalign.c\n+++ b/malloc/tst-memalign.c\n@@ -23,6 +23,8 @@\n #include <unistd.h>\n #include <libc-diag.h>\n \n+#include \"tst-malloc-aux.h\"\n+\n static int errors = 0;\n \n static void\ndiff --git a/malloc/tst-safe-linking.c b/malloc/tst-safe-linking.c\nindex 01dd07004d..63a7e2bc8e 100644\n--- a/malloc/tst-safe-linking.c\n+++ b/malloc/tst-safe-linking.c\n@@ -26,6 +26,8 @@\n #include <support/capture_subprocess.h>\n #include <support/check.h>\n \n+#include \"tst-malloc-aux.h\"\n+\n /* Run CALLBACK and check that the data on standard error equals\n    EXPECTED.  */\n static void\ndiff --git a/malloc/tst-valloc.c b/malloc/tst-valloc.c\nindex 9bab8c6470..0243d3dfd4 100644\n--- a/malloc/tst-valloc.c\n+++ b/malloc/tst-valloc.c\n@@ -23,6 +23,8 @@\n #include <unistd.h>\n #include <libc-diag.h>\n \n+#include \"tst-malloc-aux.h\"\n+\n static int errors = 0;\n \n static void\n\ncommit be48b8f6ad0ec6d0d6b1d2f45eb59bf8e8c67dd7\nAuthor: Sam James <sam@gentoo.org>\nDate:   Fri Jan 10 03:03:47 2025 +0000\n\n    malloc: obscure calloc use in tst-calloc\n    \n    Similar to a9944a52c967ce76a5894c30d0274b824df43c7a and\n    f9493a15ea9cfb63a815c00c23142369ec09d8ce, we need to hide calloc use from\n    the compiler to accommodate GCC's r15-6566-g804e9d55d9e54c change.\n    \n    First, include tst-malloc-aux.h, but then use `volatile` variables\n    for size.\n    \n    The test passes without the tst-malloc-aux.h change but IMO we want\n    it there for consistency and to avoid future problems (possibly silent).\n    \n    Reviewed-by: H.J. Lu <hjl.tools@gmail.com>\n    (cherry picked from commit c3d1dac96bdd10250aa37bb367d5ef8334a093a1)\n\ndiff --git a/malloc/tst-calloc.c b/malloc/tst-calloc.c\nindex 01f17f9e65..5a8c7ab121 100644\n--- a/malloc/tst-calloc.c\n+++ b/malloc/tst-calloc.c\n@@ -23,6 +23,7 @@\n #include <stdio.h>\n #include <libc-diag.h>\n \n+#include \"tst-malloc-aux.h\"\n \n /* Number of samples per size.  */\n #define N 50000\n@@ -94,16 +95,19 @@ random_test (void)\n static void\n null_test (void)\n {\n+  /* Obscure allocation size from the compiler.  */\n+  volatile size_t max_size = UINT_MAX;\n+  volatile size_t zero_size = 0;\n   /* If the size is 0 the result is implementation defined.  Just make\n      sure the program doesn't crash.  The result of calloc is\n      deliberately ignored, so do not warn about that.  */\n   DIAG_PUSH_NEEDS_COMMENT;\n   DIAG_IGNORE_NEEDS_COMMENT (10, \"-Wunused-result\");\n   calloc (0, 0);\n-  calloc (0, UINT_MAX);\n-  calloc (UINT_MAX, 0);\n-  calloc (0, ~((size_t) 0));\n-  calloc (~((size_t) 0), 0);\n+  calloc (0, max_size);\n+  calloc (max_size, 0);\n+  calloc (0, ~((size_t) zero_size));\n+  calloc (~((size_t) zero_size), 0);\n   DIAG_POP_NEEDS_COMMENT;\n }\n \n\ncommit 85668221974db44459527e04d04f77ca8f8e3115\nAuthor: H.J. Lu <hjl.tools@gmail.com>\nDate:   Fri Jan 24 18:53:13 2025 +0800\n\n    stdlib: Test using setenv with updated environ [BZ #32588]\n    \n    Add a test for setenv with updated environ.  Verify that BZ #32588 is\n    fixed.\n    \n    Signed-off-by: H.J. Lu <hjl.tools@gmail.com>\n    Reviewed-by: Florian Weimer <fweimer@redhat.com>\n    (cherry picked from commit 8ab34497de14e35aff09b607222fe1309ef156da)\n\ndiff --git a/stdlib/Makefile b/stdlib/Makefile\nindex 8213fa83ef..d3a84fa641 100644\n--- a/stdlib/Makefile\n+++ b/stdlib/Makefile\n@@ -307,6 +307,7 @@ tests := \\\n   tst-setcontext9 \\\n   tst-setcontext10 \\\n   tst-setcontext11 \\\n+  tst-setenv-environ \\\n   tst-stdbit-Wconversion \\\n   tst-stdbit-builtins \\\n   tst-stdc_bit_ceil \\\ndiff --git a/stdlib/tst-setenv-environ.c b/stdlib/tst-setenv-environ.c\nnew file mode 100644\nindex 0000000000..02fcef96d0\n--- /dev/null\n+++ b/stdlib/tst-setenv-environ.c\n@@ -0,0 +1,36 @@\n+/* Test using setenv with updated environ.\n+   Copyright (C) 2025 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <stdlib.h>\n+#include <support/check.h>\n+\n+extern char **environ;\n+\n+int\n+do_test (void)\n+{\n+  char *valp;\n+  static char *dummy_environ[] = { NULL };\n+  environ = dummy_environ;\n+  setenv (\"A\", \"1\", 0);\n+  valp = getenv (\"A\");\n+  TEST_VERIFY_EXIT (valp[0] == '1' && valp[1] == '\\0');\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\n\ncommit e899ca3651f8c5e01bf3420cfb34aad97d093f74\nAuthor: John David Anglin <danglin@gcc.gnu.org>\nDate:   Wed Jan 29 16:51:16 2025 -0500\n\n    nptl: Correct stack size attribute when stack grows up [BZ #32574]\n    \n    Set stack size attribute to the size of the mmap'd region only\n    when the size of the remaining stack space is less than the size\n    of the mmap'd region.\n    \n    This was reversed.  As a result, the initial stack size was only\n    135168 bytes.  On architectures where the stack grows down, the\n    initial stack size is approximately 8384512 bytes with the default\n    rlimit settings.  The small main stack size on hppa broke\n    applications like ruby that check for stack overflows.\n    \n    Signed-off-by: John David Anglin <dave.anglin@bell.net>\n\ndiff --git a/nptl/pthread_getattr_np.c b/nptl/pthread_getattr_np.c\nindex 1e91874767..3ce34437bc 100644\n--- a/nptl/pthread_getattr_np.c\n+++ b/nptl/pthread_getattr_np.c\n@@ -145,9 +145,9 @@ __pthread_getattr_np (pthread_t thread_id, pthread_attr_t *attr)\n \t\t\t  > (size_t) iattr->stackaddr - last_to)\n \t\t\tiattr->stacksize = (size_t) iattr->stackaddr - last_to;\n #else\n-\t\t      /* The limit might be too high.  */\n+\t\t      /* The limit might be too low.  */\n \t\t      if ((size_t) iattr->stacksize\n-\t\t\t  > to - (size_t) iattr->stackaddr)\n+\t\t\t  < to - (size_t) iattr->stackaddr)\n \t\t\tiattr->stacksize = to - (size_t) iattr->stackaddr;\n #endif\n \t\t      /* We succeed and no need to look further.  */\n\ncommit d6c156c326999f144cb5b73d29982108d549ad8a\nAuthor: Siddhesh Poyarekar <siddhesh@sourceware.org>\nDate:   Fri Jan 31 12:16:30 2025 -0500\n\n    assert: Add test for CVE-2025-0395\n    \n    Use the __progname symbol to override the program name to induce the\n    failure that CVE-2025-0395 describes.\n    \n    This is related to BZ #32582\n    \n    Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>\n    Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>\n    (cherry picked from commit cdb9ba84191ce72e86346fb8b1d906e7cd930ea2)\n\ndiff --git a/assert/Makefile b/assert/Makefile\nindex 35dc908ddb..c0fe660bd6 100644\n--- a/assert/Makefile\n+++ b/assert/Makefile\n@@ -38,6 +38,7 @@ tests := \\\n   test-assert-perr \\\n   tst-assert-c++ \\\n   tst-assert-g++ \\\n+  tst-assert-sa-2025-0001 \\\n   # tests\n \n ifeq ($(have-cxx-thread_local),yes)\ndiff --git a/assert/tst-assert-sa-2025-0001.c b/assert/tst-assert-sa-2025-0001.c\nnew file mode 100644\nindex 0000000000..102cb0078d\n--- /dev/null\n+++ b/assert/tst-assert-sa-2025-0001.c\n@@ -0,0 +1,92 @@\n+/* Test for CVE-2025-0395.\n+   Copyright The GNU Toolchain Authors.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+/* Test that a large enough __progname does not result in a buffer overflow\n+   when printing an assertion failure.  This was CVE-2025-0395.  */\n+#include <assert.h>\n+#include <inttypes.h>\n+#include <signal.h>\n+#include <stdbool.h>\n+#include <string.h>\n+#include <sys/mman.h>\n+#include <support/check.h>\n+#include <support/support.h>\n+#include <support/xstdio.h>\n+#include <support/xunistd.h>\n+\n+extern const char *__progname;\n+\n+int\n+do_test (int argc, char **argv)\n+{\n+\n+  support_need_proc (\"Reads /proc/self/maps to add guards to writable maps.\");\n+  ignore_stderr ();\n+\n+  /* XXX assumes that the assert is on a 2 digit line number.  */\n+  const char *prompt = \": %s:99: do_test: Assertion `argc < 1' failed.\\n\";\n+\n+  int ret = fprintf (stderr, prompt, __FILE__);\n+  if (ret < 0)\n+    FAIL_EXIT1 (\"fprintf failed: %m\\n\");\n+\n+  size_t pagesize = getpagesize ();\n+  size_t namesize = pagesize - 1 - ret;\n+\n+  /* Alter the progname so that the assert message fills the entire page.  */\n+  char progname[namesize];\n+  memset (progname, 'A', namesize - 1);\n+  progname[namesize - 1] = '\\0';\n+  __progname = progname;\n+\n+  FILE *f = xfopen (\"/proc/self/maps\", \"r\");\n+  char *line = NULL;\n+  size_t len = 0;\n+  uintptr_t prev_to = 0;\n+\n+  /* Pad the beginning of every writable mapping with a PROT_NONE map.  This\n+     ensures that the mmap in the assert_fail path never ends up below a\n+     writable map and will terminate immediately in case of a buffer\n+     overflow.  */\n+  while (xgetline (&line, &len, f))\n+    {\n+      uintptr_t from, to;\n+      char perm[4];\n+\n+      sscanf (line, \"%\" SCNxPTR \"-%\" SCNxPTR \" %c%c%c%c \",\n+\t      &from, &to,\n+\t      &perm[0], &perm[1], &perm[2], &perm[3]);\n+\n+      bool writable = (memchr (perm, 'w', 4) != NULL);\n+\n+      if (prev_to != 0 && from - prev_to > pagesize && writable)\n+\txmmap ((void *) from - pagesize, pagesize, PROT_NONE,\n+\t       MAP_ANONYMOUS | MAP_PRIVATE, 0);\n+\n+      prev_to = to;\n+    }\n+\n+  xfclose (f);\n+\n+  assert (argc < 1);\n+  return 0;\n+}\n+\n+#define EXPECTED_SIGNAL SIGABRT\n+#define TEST_FUNCTION_ARGV do_test\n+#include <support/test-driver.c>\n\ncommit 523f85558152a1b9cced6d669f758c27677775ba\nAuthor: John David Anglin <danglin@gcc.gnu.org>\nDate:   Tue Feb 25 15:57:53 2025 -0500\n\n    math: Add optimization barrier to ensure a1 + u.d is not reused [BZ #30664]\n    \n    A number of fma tests started to fail on hppa when gcc was changed to\n    use Ranger rather than EVRP.  Eventually I found that the value of\n    a1 + u.d in this is block of code was being computed in FE_TOWARDZERO\n    mode and not the original rounding mode:\n    \n        if (TININESS_AFTER_ROUNDING)\n          {\n            w.d = a1 + u.d;\n            if (w.ieee.exponent == 109)\n              return w.d * 0x1p-108;\n          }\n    \n    This caused the exponent value to be wrong and the wrong return path\n    to be used.\n    \n    Here we add an optimization barrier after the rounding mode is reset\n    to ensure that the previous value of a1 + u.d is not reused.\n    \n    Signed-off-by: John David Anglin <dave.anglin@bell.net>\n\ndiff --git a/sysdeps/ieee754/dbl-64/s_fma.c b/sysdeps/ieee754/dbl-64/s_fma.c\nindex c5f5abdc68..79a3cd721d 100644\n--- a/sysdeps/ieee754/dbl-64/s_fma.c\n+++ b/sysdeps/ieee754/dbl-64/s_fma.c\n@@ -244,6 +244,9 @@ __fma (double x, double y, double z)\n   /* Reset rounding mode and test for inexact simultaneously.  */\n   int j = libc_feupdateenv_test (&env, FE_INEXACT) != 0;\n \n+  /* Ensure value of a1 + u.d is not reused.  */\n+  a1 = math_opt_barrier (a1);\n+\n   if (__glibc_likely (adjust == 0))\n     {\n       if ((u.ieee.mantissa1 & 1) == 0 && u.ieee.exponent != 0x7ff)\n\ncommit ff10623706ea0096f3af7b38a3330ffb7fb15ae7\nAuthor: Joe Ramsay <Joe.Ramsay@arm.com>\nDate:   Mon Sep 9 13:00:01 2024 +0100\n\n    aarch64: Avoid redundant MOVs in AdvSIMD F32 logs\n    \n    Since the last operation is destructive, the first argument to the FMA\n    also has to be the first argument to the special-case in order to\n    avoid unnecessary MOVs. Reorder arguments and adjust special-case\n    bounds to facilitate this.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit 8b09af572b208bfde4d31c6abbae047dcc217675)\n\ndiff --git a/sysdeps/aarch64/fpu/log10f_advsimd.c b/sysdeps/aarch64/fpu/log10f_advsimd.c\nindex 9347422a77..82228b599a 100644\n--- a/sysdeps/aarch64/fpu/log10f_advsimd.c\n+++ b/sysdeps/aarch64/fpu/log10f_advsimd.c\n@@ -22,11 +22,11 @@\n \n static const struct data\n {\n-  uint32x4_t min_norm;\n+  uint32x4_t off, offset_lower_bound;\n   uint16x8_t special_bound;\n+  uint32x4_t mantissa_mask;\n   float32x4_t poly[8];\n   float32x4_t inv_ln10, ln2;\n-  uint32x4_t off, mantissa_mask;\n } data = {\n   /* Use order 9 for log10(1+x), i.e. order 8 for log10(1+x)/x, with x in\n       [-1/3, 1/3] (offset=2/3). Max. relative error: 0x1.068ee468p-25.  */\n@@ -35,18 +35,22 @@ static const struct data\n \t    V4 (-0x1.0fc92cp-4f), V4 (0x1.f5f76ap-5f) },\n   .ln2 = V4 (0x1.62e43p-1f),\n   .inv_ln10 = V4 (0x1.bcb7b2p-2f),\n-  .min_norm = V4 (0x00800000),\n-  .special_bound = V8 (0x7f00), /* asuint32(inf) - min_norm.  */\n+  /* Lower bound is the smallest positive normal float 0x00800000. For\n+     optimised register use subnormals are detected after offset has been\n+     subtracted, so lower bound is 0x0080000 - offset (which wraps around).  */\n+  .offset_lower_bound = V4 (0x00800000 - 0x3f2aaaab),\n+  .special_bound = V8 (0x7f00), /* top16(asuint32(inf) - 0x00800000).  */\n   .off = V4 (0x3f2aaaab),\t/* 0.666667.  */\n   .mantissa_mask = V4 (0x007fffff),\n };\n \n static float32x4_t VPCS_ATTR NOINLINE\n-special_case (float32x4_t x, float32x4_t y, float32x4_t p, float32x4_t r2,\n-\t      uint16x4_t cmp)\n+special_case (float32x4_t y, uint32x4_t u_off, float32x4_t p, float32x4_t r2,\n+\t      uint16x4_t cmp, const struct data *d)\n {\n   /* Fall back to scalar code.  */\n-  return v_call_f32 (log10f, x, vfmaq_f32 (y, p, r2), vmovl_u16 (cmp));\n+  return v_call_f32 (log10f, vreinterpretq_f32_u32 (vaddq_u32 (u_off, d->off)),\n+\t\t     vfmaq_f32 (y, p, r2), vmovl_u16 (cmp));\n }\n \n /* Fast implementation of AdvSIMD log10f,\n@@ -58,15 +62,21 @@ special_case (float32x4_t x, float32x4_t y, float32x4_t p, float32x4_t r2,\n float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (log10) (float32x4_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n-  uint32x4_t u = vreinterpretq_u32_f32 (x);\n-  uint16x4_t special = vcge_u16 (vsubhn_u32 (u, d->min_norm),\n-\t\t\t\t vget_low_u16 (d->special_bound));\n+\n+  /* To avoid having to mov x out of the way, keep u after offset has been\n+     applied, and recover x by adding the offset back in the special-case\n+     handler.  */\n+  uint32x4_t u_off = vreinterpretq_u32_f32 (x);\n \n   /* x = 2^n * (1+r), where 2/3 < 1+r < 4/3.  */\n-  u = vsubq_u32 (u, d->off);\n+  u_off = vsubq_u32 (u_off, d->off);\n   float32x4_t n = vcvtq_f32_s32 (\n-      vshrq_n_s32 (vreinterpretq_s32_u32 (u), 23)); /* signextend.  */\n-  u = vaddq_u32 (vandq_u32 (u, d->mantissa_mask), d->off);\n+      vshrq_n_s32 (vreinterpretq_s32_u32 (u_off), 23)); /* signextend.  */\n+\n+  uint16x4_t special = vcge_u16 (vsubhn_u32 (u_off, d->offset_lower_bound),\n+\t\t\t\t vget_low_u16 (d->special_bound));\n+\n+  uint32x4_t u = vaddq_u32 (vandq_u32 (u_off, d->mantissa_mask), d->off);\n   float32x4_t r = vsubq_f32 (vreinterpretq_f32_u32 (u), v_f32 (1.0f));\n \n   /* y = log10(1+r) + n * log10(2).  */\n@@ -77,7 +87,7 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (log10) (float32x4_t x)\n   y = vmulq_f32 (y, d->inv_ln10);\n \n   if (__glibc_unlikely (v_any_u16h (special)))\n-    return special_case (x, y, poly, r2, special);\n+    return special_case (y, u_off, poly, r2, special, d);\n   return vfmaq_f32 (y, poly, r2);\n }\n libmvec_hidden_def (V_NAME_F1 (log10))\ndiff --git a/sysdeps/aarch64/fpu/log2f_advsimd.c b/sysdeps/aarch64/fpu/log2f_advsimd.c\nindex db21836749..84effe4fe9 100644\n--- a/sysdeps/aarch64/fpu/log2f_advsimd.c\n+++ b/sysdeps/aarch64/fpu/log2f_advsimd.c\n@@ -22,9 +22,9 @@\n \n static const struct data\n {\n-  uint32x4_t min_norm;\n+  uint32x4_t off, offset_lower_bound;\n   uint16x8_t special_bound;\n-  uint32x4_t off, mantissa_mask;\n+  uint32x4_t mantissa_mask;\n   float32x4_t poly[9];\n } data = {\n   /* Coefficients generated using Remez algorithm approximate\n@@ -34,18 +34,22 @@ static const struct data\n \t    V4 (-0x1.715458p-1f), V4 (0x1.ec701cp-2f), V4 (-0x1.7171a4p-2f),\n \t    V4 (0x1.27a0b8p-2f), V4 (-0x1.e5143ep-3f), V4 (0x1.9d8ecap-3f),\n \t    V4 (-0x1.c675bp-3f), V4 (0x1.9e495p-3f) },\n-  .min_norm = V4 (0x00800000),\n-  .special_bound = V8 (0x7f00), /* asuint32(inf) - min_norm.  */\n+  /* Lower bound is the smallest positive normal float 0x00800000. For\n+     optimised register use subnormals are detected after offset has been\n+     subtracted, so lower bound is 0x0080000 - offset (which wraps around).  */\n+  .offset_lower_bound = V4 (0x00800000 - 0x3f2aaaab),\n+  .special_bound = V8 (0x7f00), /* top16(asuint32(inf) - 0x00800000).  */\n   .off = V4 (0x3f2aaaab),\t/* 0.666667.  */\n   .mantissa_mask = V4 (0x007fffff),\n };\n \n static float32x4_t VPCS_ATTR NOINLINE\n-special_case (float32x4_t x, float32x4_t n, float32x4_t p, float32x4_t r,\n-\t      uint16x4_t cmp)\n+special_case (float32x4_t n, uint32x4_t u_off, float32x4_t p, float32x4_t r,\n+\t      uint16x4_t cmp, const struct data *d)\n {\n   /* Fall back to scalar code.  */\n-  return v_call_f32 (log2f, x, vfmaq_f32 (n, p, r), vmovl_u16 (cmp));\n+  return v_call_f32 (log2f, vreinterpretq_f32_u32 (vaddq_u32 (u_off, d->off)),\n+\t\t     vfmaq_f32 (n, p, r), vmovl_u16 (cmp));\n }\n \n /* Fast implementation for single precision AdvSIMD log2,\n@@ -56,15 +60,21 @@ special_case (float32x4_t x, float32x4_t n, float32x4_t p, float32x4_t r,\n float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (log2) (float32x4_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n-  uint32x4_t u = vreinterpretq_u32_f32 (x);\n-  uint16x4_t special = vcge_u16 (vsubhn_u32 (u, d->min_norm),\n-\t\t\t\t vget_low_u16 (d->special_bound));\n+\n+  /* To avoid having to mov x out of the way, keep u after offset has been\n+     applied, and recover x by adding the offset back in the special-case\n+     handler.  */\n+  uint32x4_t u_off = vreinterpretq_u32_f32 (x);\n \n   /* x = 2^n * (1+r), where 2/3 < 1+r < 4/3.  */\n-  u = vsubq_u32 (u, d->off);\n+  u_off = vsubq_u32 (u_off, d->off);\n   float32x4_t n = vcvtq_f32_s32 (\n-      vshrq_n_s32 (vreinterpretq_s32_u32 (u), 23)); /* signextend.  */\n-  u = vaddq_u32 (vandq_u32 (u, d->mantissa_mask), d->off);\n+      vshrq_n_s32 (vreinterpretq_s32_u32 (u_off), 23)); /* signextend.  */\n+\n+  uint16x4_t special = vcge_u16 (vsubhn_u32 (u_off, d->offset_lower_bound),\n+\t\t\t\t vget_low_u16 (d->special_bound));\n+\n+  uint32x4_t u = vaddq_u32 (vandq_u32 (u_off, d->mantissa_mask), d->off);\n   float32x4_t r = vsubq_f32 (vreinterpretq_f32_u32 (u), v_f32 (1.0f));\n \n   /* y = log2(1+r) + n.  */\n@@ -72,7 +82,7 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (log2) (float32x4_t x)\n   float32x4_t p = v_pw_horner_8_f32 (r, r2, d->poly);\n \n   if (__glibc_unlikely (v_any_u16h (special)))\n-    return special_case (x, n, p, r, special);\n+    return special_case (n, u_off, p, r, special, d);\n   return vfmaq_f32 (n, p, r);\n }\n libmvec_hidden_def (V_NAME_F1 (log2))\ndiff --git a/sysdeps/aarch64/fpu/logf_advsimd.c b/sysdeps/aarch64/fpu/logf_advsimd.c\nindex 3c0d0fcdc7..c20dbfd6c0 100644\n--- a/sysdeps/aarch64/fpu/logf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/logf_advsimd.c\n@@ -21,20 +21,22 @@\n \n static const struct data\n {\n-  uint32x4_t min_norm;\n+  uint32x4_t off, offset_lower_bound;\n   uint16x8_t special_bound;\n+  uint32x4_t mantissa_mask;\n   float32x4_t poly[7];\n-  float32x4_t ln2, tiny_bound;\n-  uint32x4_t off, mantissa_mask;\n+  float32x4_t ln2;\n } data = {\n   /* 3.34 ulp error.  */\n   .poly = { V4 (-0x1.3e737cp-3f), V4 (0x1.5a9aa2p-3f), V4 (-0x1.4f9934p-3f),\n \t    V4 (0x1.961348p-3f), V4 (-0x1.00187cp-2f), V4 (0x1.555d7cp-2f),\n \t    V4 (-0x1.ffffc8p-2f) },\n   .ln2 = V4 (0x1.62e43p-1f),\n-  .tiny_bound = V4 (0x1p-126),\n-  .min_norm = V4 (0x00800000),\n-  .special_bound = V8 (0x7f00), /* asuint32(inf) - min_norm.  */\n+  /* Lower bound is the smallest positive normal float 0x00800000. For\n+     optimised register use subnormals are detected after offset has been\n+     subtracted, so lower bound is 0x0080000 - offset (which wraps around).  */\n+  .offset_lower_bound = V4 (0x00800000 - 0x3f2aaaab),\n+  .special_bound = V8 (0x7f00), /* top16(asuint32(inf) - 0x00800000).  */\n   .off = V4 (0x3f2aaaab),\t/* 0.666667.  */\n   .mantissa_mask = V4 (0x007fffff)\n };\n@@ -42,32 +44,37 @@ static const struct data\n #define P(i) d->poly[7 - i]\n \n static float32x4_t VPCS_ATTR NOINLINE\n-special_case (float32x4_t x, float32x4_t y, float32x4_t r2, float32x4_t p,\n-\t      uint16x4_t cmp)\n+special_case (float32x4_t p, uint32x4_t u_off, float32x4_t y, float32x4_t r2,\n+\t      uint16x4_t cmp, const struct data *d)\n {\n   /* Fall back to scalar code.  */\n-  return v_call_f32 (logf, x, vfmaq_f32 (p, y, r2), vmovl_u16 (cmp));\n+  return v_call_f32 (logf, vreinterpretq_f32_u32 (vaddq_u32 (u_off, d->off)),\n+\t\t     vfmaq_f32 (p, y, r2), vmovl_u16 (cmp));\n }\n \n float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (log) (float32x4_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n   float32x4_t n, p, q, r, r2, y;\n-  uint32x4_t u;\n+  uint32x4_t u, u_off;\n   uint16x4_t cmp;\n \n-  u = vreinterpretq_u32_f32 (x);\n-  cmp = vcge_u16 (vsubhn_u32 (u, d->min_norm),\n-\t\t  vget_low_u16 (d->special_bound));\n+  /* To avoid having to mov x out of the way, keep u after offset has been\n+     applied, and recover x by adding the offset back in the special-case\n+     handler.  */\n+  u_off = vreinterpretq_u32_f32 (x);\n \n   /* x = 2^n * (1+r), where 2/3 < 1+r < 4/3.  */\n-  u = vsubq_u32 (u, d->off);\n+  u_off = vsubq_u32 (u_off, d->off);\n   n = vcvtq_f32_s32 (\n-      vshrq_n_s32 (vreinterpretq_s32_u32 (u), 23)); /* signextend.  */\n-  u = vandq_u32 (u, d->mantissa_mask);\n+      vshrq_n_s32 (vreinterpretq_s32_u32 (u_off), 23)); /* signextend.  */\n+  u = vandq_u32 (u_off, d->mantissa_mask);\n   u = vaddq_u32 (u, d->off);\n   r = vsubq_f32 (vreinterpretq_f32_u32 (u), v_f32 (1.0f));\n \n+  cmp = vcge_u16 (vsubhn_u32 (u_off, d->offset_lower_bound),\n+\t\t  vget_low_u16 (d->special_bound));\n+\n   /* y = log(1+r) + n*ln2.  */\n   r2 = vmulq_f32 (r, r);\n   /* n*ln2 + r + r2*(P1 + r*P2 + r2*(P3 + r*P4 + r2*(P5 + r*P6 + r2*P7))).  */\n@@ -80,7 +87,7 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (log) (float32x4_t x)\n   p = vfmaq_f32 (r, d->ln2, n);\n \n   if (__glibc_unlikely (v_any_u16h (cmp)))\n-    return special_case (x, y, r2, p, cmp);\n+    return special_case (p, u_off, y, r2, cmp, d);\n   return vfmaq_f32 (p, y, r2);\n }\n libmvec_hidden_def (V_NAME_F1 (log))\n\ncommit a991a0fc7c051d7ef2ea7778e0a699f22d4e53d7\nAuthor: Joe Ramsay <Joe.Ramsay@arm.com>\nDate:   Thu Sep 19 17:34:02 2024 +0100\n\n    AArch64: Add vector logp1 alias for log1p\n    \n    This enables vectorisation of C23 logp1, which is an alias for log1p.\n    There are no new tests or ulp entries because the new symbols are simply\n    aliases.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit 751a5502bea1d13551c62c47bb9bd25bff870cda)\n\ndiff --git a/bits/libm-simd-decl-stubs.h b/bits/libm-simd-decl-stubs.h\nindex 08a41c46ad..5019e8e25c 100644\n--- a/bits/libm-simd-decl-stubs.h\n+++ b/bits/libm-simd-decl-stubs.h\n@@ -253,6 +253,17 @@\n #define __DECL_SIMD_log1pf64x\n #define __DECL_SIMD_log1pf128x\n \n+#define __DECL_SIMD_logp1\n+#define __DECL_SIMD_logp1f\n+#define __DECL_SIMD_logp1l\n+#define __DECL_SIMD_logp1f16\n+#define __DECL_SIMD_logp1f32\n+#define __DECL_SIMD_logp1f64\n+#define __DECL_SIMD_logp1f128\n+#define __DECL_SIMD_logp1f32x\n+#define __DECL_SIMD_logp1f64x\n+#define __DECL_SIMD_logp1f128x\n+\n #define __DECL_SIMD_atanh\n #define __DECL_SIMD_atanhf\n #define __DECL_SIMD_atanhl\ndiff --git a/math/bits/mathcalls.h b/math/bits/mathcalls.h\nindex 6cb594b6ff..92856becc4 100644\n--- a/math/bits/mathcalls.h\n+++ b/math/bits/mathcalls.h\n@@ -126,7 +126,7 @@ __MATHCALL (log2p1,, (_Mdouble_ __x));\n __MATHCALL (log10p1,, (_Mdouble_ __x));\n \n /* Return log(1 + X).  */\n-__MATHCALL (logp1,, (_Mdouble_ __x));\n+__MATHCALL_VEC (logp1,, (_Mdouble_ __x));\n #endif\n \n #if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99\ndiff --git a/sysdeps/aarch64/fpu/Versions b/sysdeps/aarch64/fpu/Versions\nindex cc15ce2d1e..015211f5f4 100644\n--- a/sysdeps/aarch64/fpu/Versions\n+++ b/sysdeps/aarch64/fpu/Versions\n@@ -135,4 +135,11 @@ libmvec {\n     _ZGVsMxv_tanh;\n     _ZGVsMxv_tanhf;\n   }\n+  GLIBC_2.41 {\n+    _ZGVnN2v_logp1;\n+    _ZGVnN2v_logp1f;\n+    _ZGVnN4v_logp1f;\n+    _ZGVsMxv_logp1;\n+    _ZGVsMxv_logp1f;\n+  }\n }\ndiff --git a/sysdeps/aarch64/fpu/advsimd_f32_protos.h b/sysdeps/aarch64/fpu/advsimd_f32_protos.h\nindex 097d403ffe..5909bb4ce9 100644\n--- a/sysdeps/aarch64/fpu/advsimd_f32_protos.h\n+++ b/sysdeps/aarch64/fpu/advsimd_f32_protos.h\n@@ -36,6 +36,7 @@ libmvec_hidden_proto (V_NAME_F2(hypot));\n libmvec_hidden_proto (V_NAME_F1(log10));\n libmvec_hidden_proto (V_NAME_F1(log1p));\n libmvec_hidden_proto (V_NAME_F1(log2));\n+libmvec_hidden_proto (V_NAME_F1(logp1));\n libmvec_hidden_proto (V_NAME_F1(log));\n libmvec_hidden_proto (V_NAME_F2(pow));\n libmvec_hidden_proto (V_NAME_F1(sin));\ndiff --git a/sysdeps/aarch64/fpu/bits/math-vector.h b/sysdeps/aarch64/fpu/bits/math-vector.h\nindex 7484150131..f295fe185d 100644\n--- a/sysdeps/aarch64/fpu/bits/math-vector.h\n+++ b/sysdeps/aarch64/fpu/bits/math-vector.h\n@@ -113,6 +113,10 @@\n # define __DECL_SIMD_log2 __DECL_SIMD_aarch64\n # undef __DECL_SIMD_log2f\n # define __DECL_SIMD_log2f __DECL_SIMD_aarch64\n+# undef __DECL_SIMD_logp1\n+# define __DECL_SIMD_logp1 __DECL_SIMD_aarch64\n+# undef __DECL_SIMD_logp1f\n+# define __DECL_SIMD_logp1f __DECL_SIMD_aarch64\n # undef __DECL_SIMD_pow\n # define __DECL_SIMD_pow __DECL_SIMD_aarch64\n # undef __DECL_SIMD_powf\n@@ -180,6 +184,7 @@ __vpcs __f32x4_t _ZGVnN4v_logf (__f32x4_t);\n __vpcs __f32x4_t _ZGVnN4v_log10f (__f32x4_t);\n __vpcs __f32x4_t _ZGVnN4v_log1pf (__f32x4_t);\n __vpcs __f32x4_t _ZGVnN4v_log2f (__f32x4_t);\n+__vpcs __f32x4_t _ZGVnN4v_logp1f (__f32x4_t);\n __vpcs __f32x4_t _ZGVnN4vv_powf (__f32x4_t, __f32x4_t);\n __vpcs __f32x4_t _ZGVnN4v_sinf (__f32x4_t);\n __vpcs __f32x4_t _ZGVnN4v_sinhf (__f32x4_t);\n@@ -207,6 +212,7 @@ __vpcs __f64x2_t _ZGVnN2v_log (__f64x2_t);\n __vpcs __f64x2_t _ZGVnN2v_log10 (__f64x2_t);\n __vpcs __f64x2_t _ZGVnN2v_log1p (__f64x2_t);\n __vpcs __f64x2_t _ZGVnN2v_log2 (__f64x2_t);\n+__vpcs __f64x2_t _ZGVnN2v_logp1 (__f64x2_t);\n __vpcs __f64x2_t _ZGVnN2vv_pow (__f64x2_t, __f64x2_t);\n __vpcs __f64x2_t _ZGVnN2v_sin (__f64x2_t);\n __vpcs __f64x2_t _ZGVnN2v_sinh (__f64x2_t);\n@@ -239,6 +245,7 @@ __sv_f32_t _ZGVsMxv_logf (__sv_f32_t, __sv_bool_t);\n __sv_f32_t _ZGVsMxv_log10f (__sv_f32_t, __sv_bool_t);\n __sv_f32_t _ZGVsMxv_log1pf (__sv_f32_t, __sv_bool_t);\n __sv_f32_t _ZGVsMxv_log2f (__sv_f32_t, __sv_bool_t);\n+__sv_f32_t _ZGVsMxv_logp1f (__sv_f32_t, __sv_bool_t);\n __sv_f32_t _ZGVsMxvv_powf (__sv_f32_t, __sv_f32_t, __sv_bool_t);\n __sv_f32_t _ZGVsMxv_sinf (__sv_f32_t, __sv_bool_t);\n __sv_f32_t _ZGVsMxv_sinhf (__sv_f32_t, __sv_bool_t);\n@@ -266,6 +273,7 @@ __sv_f64_t _ZGVsMxv_log (__sv_f64_t, __sv_bool_t);\n __sv_f64_t _ZGVsMxv_log10 (__sv_f64_t, __sv_bool_t);\n __sv_f64_t _ZGVsMxv_log1p (__sv_f64_t, __sv_bool_t);\n __sv_f64_t _ZGVsMxv_log2 (__sv_f64_t, __sv_bool_t);\n+__sv_f64_t _ZGVsMxv_logp1 (__sv_f64_t, __sv_bool_t);\n __sv_f64_t _ZGVsMxvv_pow (__sv_f64_t, __sv_f64_t, __sv_bool_t);\n __sv_f64_t _ZGVsMxv_sin (__sv_f64_t, __sv_bool_t);\n __sv_f64_t _ZGVsMxv_sinh (__sv_f64_t, __sv_bool_t);\ndiff --git a/sysdeps/aarch64/fpu/log1p_advsimd.c b/sysdeps/aarch64/fpu/log1p_advsimd.c\nindex ffc418fc9c..114064c696 100644\n--- a/sysdeps/aarch64/fpu/log1p_advsimd.c\n+++ b/sysdeps/aarch64/fpu/log1p_advsimd.c\n@@ -127,3 +127,5 @@ VPCS_ATTR float64x2_t V_NAME_D1 (log1p) (float64x2_t x)\n \n   return vfmaq_f64 (y, f2, p);\n }\n+\n+strong_alias (V_NAME_D1 (log1p), V_NAME_D1 (logp1))\ndiff --git a/sysdeps/aarch64/fpu/log1p_sve.c b/sysdeps/aarch64/fpu/log1p_sve.c\nindex 04f7e5720e..b21cfb2c90 100644\n--- a/sysdeps/aarch64/fpu/log1p_sve.c\n+++ b/sysdeps/aarch64/fpu/log1p_sve.c\n@@ -116,3 +116,5 @@ svfloat64_t SV_NAME_D1 (log1p) (svfloat64_t x, svbool_t pg)\n \n   return y;\n }\n+\n+strong_alias (SV_NAME_D1 (log1p), SV_NAME_D1 (logp1))\ndiff --git a/sysdeps/aarch64/fpu/log1pf_advsimd.c b/sysdeps/aarch64/fpu/log1pf_advsimd.c\nindex dc15334a85..8cfa28fb8a 100644\n--- a/sysdeps/aarch64/fpu/log1pf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/log1pf_advsimd.c\n@@ -128,3 +128,6 @@ VPCS_ATTR float32x4_t V_NAME_F1 (log1p) (float32x4_t x)\n }\n libmvec_hidden_def (V_NAME_F1 (log1p))\n HALF_WIDTH_ALIAS_F1 (log1p)\n+strong_alias (V_NAME_F1 (log1p), V_NAME_F1 (logp1))\n+libmvec_hidden_def (V_NAME_F1 (logp1))\n+HALF_WIDTH_ALIAS_F1 (logp1)\ndiff --git a/sysdeps/aarch64/fpu/log1pf_sve.c b/sysdeps/aarch64/fpu/log1pf_sve.c\nindex f645cc997e..5256d5e94c 100644\n--- a/sysdeps/aarch64/fpu/log1pf_sve.c\n+++ b/sysdeps/aarch64/fpu/log1pf_sve.c\n@@ -98,3 +98,5 @@ svfloat32_t SV_NAME_F1 (log1p) (svfloat32_t x, svbool_t pg)\n \n   return y;\n }\n+\n+strong_alias (SV_NAME_F1 (log1p), SV_NAME_F1 (logp1))\ndiff --git a/sysdeps/unix/sysv/linux/aarch64/libmvec.abilist b/sysdeps/unix/sysv/linux/aarch64/libmvec.abilist\nindex b685106954..98687cae0d 100644\n--- a/sysdeps/unix/sysv/linux/aarch64/libmvec.abilist\n+++ b/sysdeps/unix/sysv/linux/aarch64/libmvec.abilist\n@@ -128,3 +128,8 @@ GLIBC_2.40 _ZGVsMxvv_hypot F\n GLIBC_2.40 _ZGVsMxvv_hypotf F\n GLIBC_2.40 _ZGVsMxvv_pow F\n GLIBC_2.40 _ZGVsMxvv_powf F\n+GLIBC_2.41 _ZGVnN2v_logp1 F\n+GLIBC_2.41 _ZGVnN2v_logp1f F\n+GLIBC_2.41 _ZGVnN4v_logp1f F\n+GLIBC_2.41 _ZGVsMxv_logp1 F\n+GLIBC_2.41 _ZGVsMxv_logp1f F\n\ncommit 354aeaf2130c1484007025563fe87c997f07324a\nAuthor: Joe Ramsay <Joe.Ramsay@arm.com>\nDate:   Mon Sep 23 15:26:12 2024 +0100\n\n    AArch64: Improve codegen in SVE expf & related routines\n    \n    Reduce MOV and MOVPRFX by improving special-case handling.  Use inline\n    helper to duplicate the entire computation between the special- and\n    non-special case branches, removing the contention for z0 between x\n    and the return value.\n    \n    Also rearrange some MLAs and MLSs - by making the multiplicand the\n    destination we can avoid a MOVPRFX in several cases.  Also change which\n    constants go in the vector used for lanewise ops - the last lane is no\n    longer wasted.\n    \n    Spotted that shift was incorrect in exp2f and exp10f, w.r.t. to the\n    comment that explains it.  Fixed - worst-case ULP for exp2f moves\n    around but it doesn't change significantly for either routine.\n    \n    Worst-case error for coshf increases due to passing x to exp rather\n    than abs(x) - updated the comment, but does not require regen-ulps.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit 7b8c134b5460ed933d610fa92ed1227372b68fdc)\n\ndiff --git a/sysdeps/aarch64/fpu/coshf_sve.c b/sysdeps/aarch64/fpu/coshf_sve.c\nindex e5d8a299c6..7ad6efa0fc 100644\n--- a/sysdeps/aarch64/fpu/coshf_sve.c\n+++ b/sysdeps/aarch64/fpu/coshf_sve.c\n@@ -23,37 +23,42 @@\n static const struct data\n {\n   struct sv_expf_data expf_consts;\n-  uint32_t special_bound;\n+  float special_bound;\n } data = {\n   .expf_consts = SV_EXPF_DATA,\n   /* 0x1.5a92d8p+6: expf overflows above this, so have to use special case.  */\n-  .special_bound = 0x42ad496c,\n+  .special_bound = 0x1.5a92d8p+6,\n };\n \n static svfloat32_t NOINLINE\n-special_case (svfloat32_t x, svfloat32_t y, svbool_t pg)\n+special_case (svfloat32_t x, svfloat32_t half_e, svfloat32_t half_over_e,\n+\t      svbool_t pg)\n {\n-  return sv_call_f32 (coshf, x, y, pg);\n+  return sv_call_f32 (coshf, x, svadd_x (svptrue_b32 (), half_e, half_over_e),\n+\t\t      pg);\n }\n \n /* Single-precision vector cosh, using vector expf.\n-   Maximum error is 1.89 ULP:\n-   _ZGVsMxv_coshf (-0x1.65898cp+6) got 0x1.f00aep+127\n-\t\t\t\t  want 0x1.f00adcp+127.  */\n+   Maximum error is 2.77 ULP:\n+   _ZGVsMxv_coshf(-0x1.5b38f4p+1) got 0x1.e45946p+2\n+\t\t\t\t want 0x1.e4594cp+2.  */\n svfloat32_t SV_NAME_F1 (cosh) (svfloat32_t x, svbool_t pg)\n {\n   const struct data *d = ptr_barrier (&data);\n \n-  svfloat32_t ax = svabs_x (pg, x);\n-  svbool_t special = svcmpge (pg, svreinterpret_u32 (ax), d->special_bound);\n+  svbool_t special = svacge (pg, x, d->special_bound);\n \n-  /* Calculate cosh by exp(x) / 2 + exp(-x) / 2.  */\n-  svfloat32_t t = expf_inline (ax, pg, &d->expf_consts);\n-  svfloat32_t half_t = svmul_x (pg, t, 0.5);\n-  svfloat32_t half_over_t = svdivr_x (pg, t, 0.5);\n+  /* Calculate cosh by exp(x) / 2 + exp(-x) / 2.\n+     Note that x is passed to exp here, rather than |x|. This is to avoid using\n+     destructive unary ABS for better register usage. However it means the\n+     routine is not exactly symmetrical, as the exp helper is slightly less\n+     accurate in the negative range.  */\n+  svfloat32_t e = expf_inline (x, pg, &d->expf_consts);\n+  svfloat32_t half_e = svmul_x (svptrue_b32 (), e, 0.5);\n+  svfloat32_t half_over_e = svdivr_x (pg, e, 0.5);\n \n   if (__glibc_unlikely (svptest_any (pg, special)))\n-    return special_case (x, svadd_x (pg, half_t, half_over_t), special);\n+    return special_case (x, half_e, half_over_e, special);\n \n-  return svadd_x (pg, half_t, half_over_t);\n+  return svadd_x (svptrue_b32 (), half_e, half_over_e);\n }\ndiff --git a/sysdeps/aarch64/fpu/exp10f_sve.c b/sysdeps/aarch64/fpu/exp10f_sve.c\nindex e09b2f3b27..8aa3fa9c43 100644\n--- a/sysdeps/aarch64/fpu/exp10f_sve.c\n+++ b/sysdeps/aarch64/fpu/exp10f_sve.c\n@@ -18,74 +18,83 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include \"sv_math.h\"\n-#include \"poly_sve_f32.h\"\n \n-/* For x < -SpecialBound, the result is subnormal and not handled correctly by\n+/* For x < -Thres, the result is subnormal and not handled correctly by\n    FEXPA.  */\n-#define SpecialBound 37.9\n+#define Thres 37.9\n \n static const struct data\n {\n-  float poly[5];\n-  float shift, log10_2, log2_10_hi, log2_10_lo, special_bound;\n+  float log2_10_lo, c0, c2, c4;\n+  float c1, c3, log10_2;\n+  float shift, log2_10_hi, thres;\n } data = {\n   /* Coefficients generated using Remez algorithm with minimisation of relative\n      error.\n      rel error: 0x1.89dafa3p-24\n      abs error: 0x1.167d55p-23 in [-log10(2)/2, log10(2)/2]\n      maxerr: 0.52 +0.5 ulp.  */\n-  .poly = { 0x1.26bb16p+1f, 0x1.5350d2p+1f, 0x1.04744ap+1f, 0x1.2d8176p+0f,\n-\t    0x1.12b41ap-1f },\n+  .c0 = 0x1.26bb16p+1f,\n+  .c1 = 0x1.5350d2p+1f,\n+  .c2 = 0x1.04744ap+1f,\n+  .c3 = 0x1.2d8176p+0f,\n+  .c4 = 0x1.12b41ap-1f,\n   /* 1.5*2^17 + 127, a shift value suitable for FEXPA.  */\n-  .shift = 0x1.903f8p17f,\n+  .shift = 0x1.803f8p17f,\n   .log10_2 = 0x1.a934fp+1,\n   .log2_10_hi = 0x1.344136p-2,\n   .log2_10_lo = -0x1.ec10cp-27,\n-  .special_bound = SpecialBound,\n+  .thres = Thres,\n };\n \n-static svfloat32_t NOINLINE\n-special_case (svfloat32_t x, svfloat32_t y, svbool_t special)\n+static inline svfloat32_t\n+sv_exp10f_inline (svfloat32_t x, const svbool_t pg, const struct data *d)\n {\n-  return sv_call_f32 (exp10f, x, y, special);\n-}\n-\n-/* Single-precision SVE exp10f routine. Implements the same algorithm\n-   as AdvSIMD exp10f.\n-   Worst case error is 1.02 ULPs.\n-   _ZGVsMxv_exp10f(-0x1.040488p-4) got 0x1.ba5f9ep-1\n-\t\t\t\t  want 0x1.ba5f9cp-1.  */\n-svfloat32_t SV_NAME_F1 (exp10) (svfloat32_t x, const svbool_t pg)\n-{\n-  const struct data *d = ptr_barrier (&data);\n   /* exp10(x) = 2^(n/N) * 10^r = 2^n * (1 + poly (r)),\n      with poly(r) in [1/sqrt(2), sqrt(2)] and\n      x = r + n * log10(2) / N, with r in [-log10(2)/2N, log10(2)/2N].  */\n \n-  /* Load some constants in quad-word chunks to minimise memory access (last\n-     lane is wasted).  */\n-  svfloat32_t log10_2_and_inv = svld1rq (svptrue_b32 (), &d->log10_2);\n+  svfloat32_t lane_consts = svld1rq (svptrue_b32 (), &d->log2_10_lo);\n \n   /* n = round(x/(log10(2)/N)).  */\n   svfloat32_t shift = sv_f32 (d->shift);\n-  svfloat32_t z = svmla_lane (shift, x, log10_2_and_inv, 0);\n-  svfloat32_t n = svsub_x (pg, z, shift);\n+  svfloat32_t z = svmad_x (pg, sv_f32 (d->log10_2), x, shift);\n+  svfloat32_t n = svsub_x (svptrue_b32 (), z, shift);\n \n   /* r = x - n*log10(2)/N.  */\n-  svfloat32_t r = svmls_lane (x, n, log10_2_and_inv, 1);\n-  r = svmls_lane (r, n, log10_2_and_inv, 2);\n+  svfloat32_t r = svmsb_x (pg, sv_f32 (d->log2_10_hi), n, x);\n+  r = svmls_lane (r, n, lane_consts, 0);\n \n-  svbool_t special = svacgt (pg, x, d->special_bound);\n   svfloat32_t scale = svexpa (svreinterpret_u32 (z));\n \n   /* Polynomial evaluation: poly(r) ~ exp10(r)-1.  */\n-  svfloat32_t r2 = svmul_x (pg, r, r);\n-  svfloat32_t poly\n-      = svmla_x (pg, svmul_x (pg, r, d->poly[0]),\n-\t\t sv_pairwise_poly_3_f32_x (pg, r, r2, d->poly + 1), r2);\n-\n-  if (__glibc_unlikely (svptest_any (pg, special)))\n-    return special_case (x, svmla_x (pg, scale, scale, poly), special);\n+  svfloat32_t p12 = svmla_lane (sv_f32 (d->c1), r, lane_consts, 2);\n+  svfloat32_t p34 = svmla_lane (sv_f32 (d->c3), r, lane_consts, 3);\n+  svfloat32_t r2 = svmul_x (svptrue_b32 (), r, r);\n+  svfloat32_t p14 = svmla_x (pg, p12, p34, r2);\n+  svfloat32_t p0 = svmul_lane (r, lane_consts, 1);\n+  svfloat32_t poly = svmla_x (pg, p0, r2, p14);\n \n   return svmla_x (pg, scale, scale, poly);\n }\n+\n+static svfloat32_t NOINLINE\n+special_case (svfloat32_t x, svbool_t special, const struct data *d)\n+{\n+  return sv_call_f32 (exp10f, x, sv_exp10f_inline (x, svptrue_b32 (), d),\n+\t\t      special);\n+}\n+\n+/* Single-precision SVE exp10f routine. Implements the same algorithm\n+   as AdvSIMD exp10f.\n+   Worst case error is 1.02 ULPs.\n+   _ZGVsMxv_exp10f(-0x1.040488p-4) got 0x1.ba5f9ep-1\n+\t\t\t\t  want 0x1.ba5f9cp-1.  */\n+svfloat32_t SV_NAME_F1 (exp10) (svfloat32_t x, const svbool_t pg)\n+{\n+  const struct data *d = ptr_barrier (&data);\n+  svbool_t special = svacgt (pg, x, d->thres);\n+  if (__glibc_unlikely (svptest_any (special, special)))\n+    return special_case (x, special, d);\n+  return sv_exp10f_inline (x, pg, d);\n+}\ndiff --git a/sysdeps/aarch64/fpu/exp2f_sve.c b/sysdeps/aarch64/fpu/exp2f_sve.c\nindex 8a686e3e05..c6216bed9e 100644\n--- a/sysdeps/aarch64/fpu/exp2f_sve.c\n+++ b/sysdeps/aarch64/fpu/exp2f_sve.c\n@@ -24,54 +24,64 @@\n \n static const struct data\n {\n-  float poly[5];\n+  float c0, c2, c4, c1, c3;\n   float shift, thres;\n } data = {\n-  /* Coefficients copied from the polynomial in AdvSIMD variant, reversed for\n-     compatibility with polynomial helpers.  */\n-  .poly = { 0x1.62e422p-1f, 0x1.ebf9bcp-3f, 0x1.c6bd32p-5f, 0x1.3ce9e4p-7f,\n-\t    0x1.59977ap-10f },\n+  /* Coefficients copied from the polynomial in AdvSIMD variant.  */\n+  .c0 = 0x1.62e422p-1f,\n+  .c1 = 0x1.ebf9bcp-3f,\n+  .c2 = 0x1.c6bd32p-5f,\n+  .c3 = 0x1.3ce9e4p-7f,\n+  .c4 = 0x1.59977ap-10f,\n   /* 1.5*2^17 + 127.  */\n-  .shift = 0x1.903f8p17f,\n+  .shift = 0x1.803f8p17f,\n   /* Roughly 87.3. For x < -Thres, the result is subnormal and not handled\n      correctly by FEXPA.  */\n   .thres = Thres,\n };\n \n-static svfloat32_t NOINLINE\n-special_case (svfloat32_t x, svfloat32_t y, svbool_t special)\n-{\n-  return sv_call_f32 (exp2f, x, y, special);\n-}\n-\n-/* Single-precision SVE exp2f routine. Implements the same algorithm\n-   as AdvSIMD exp2f.\n-   Worst case error is 1.04 ULPs.\n-   SV_NAME_F1 (exp2)(0x1.943b9p-1) got 0x1.ba7eb2p+0\n-\t\t\t\t  want 0x1.ba7ebp+0.  */\n-svfloat32_t SV_NAME_F1 (exp2) (svfloat32_t x, const svbool_t pg)\n+static inline svfloat32_t\n+sv_exp2f_inline (svfloat32_t x, const svbool_t pg, const struct data *d)\n {\n-  const struct data *d = ptr_barrier (&data);\n   /* exp2(x) = 2^n (1 + poly(r)), with 1 + poly(r) in [1/sqrt(2),sqrt(2)]\n     x = n + r, with r in [-1/2, 1/2].  */\n-  svfloat32_t shift = sv_f32 (d->shift);\n-  svfloat32_t z = svadd_x (pg, x, shift);\n-  svfloat32_t n = svsub_x (pg, z, shift);\n-  svfloat32_t r = svsub_x (pg, x, n);\n+  svfloat32_t z = svadd_x (svptrue_b32 (), x, d->shift);\n+  svfloat32_t n = svsub_x (svptrue_b32 (), z, d->shift);\n+  svfloat32_t r = svsub_x (svptrue_b32 (), x, n);\n \n-  svbool_t special = svacgt (pg, x, d->thres);\n   svfloat32_t scale = svexpa (svreinterpret_u32 (z));\n \n   /* Polynomial evaluation: poly(r) ~ exp2(r)-1.\n      Evaluate polynomial use hybrid scheme - offset ESTRIN by 1 for\n      coefficients 1 to 4, and apply most significant coefficient directly.  */\n-  svfloat32_t r2 = svmul_x (pg, r, r);\n-  svfloat32_t p14 = sv_pairwise_poly_3_f32_x (pg, r, r2, d->poly + 1);\n-  svfloat32_t p0 = svmul_x (pg, r, d->poly[0]);\n+  svfloat32_t even_coeffs = svld1rq (svptrue_b32 (), &d->c0);\n+  svfloat32_t r2 = svmul_x (svptrue_b32 (), r, r);\n+  svfloat32_t p12 = svmla_lane (sv_f32 (d->c1), r, even_coeffs, 1);\n+  svfloat32_t p34 = svmla_lane (sv_f32 (d->c3), r, even_coeffs, 2);\n+  svfloat32_t p14 = svmla_x (pg, p12, r2, p34);\n+  svfloat32_t p0 = svmul_lane (r, even_coeffs, 0);\n   svfloat32_t poly = svmla_x (pg, p0, r2, p14);\n \n-  if (__glibc_unlikely (svptest_any (pg, special)))\n-    return special_case (x, svmla_x (pg, scale, scale, poly), special);\n-\n   return svmla_x (pg, scale, scale, poly);\n }\n+\n+static svfloat32_t NOINLINE\n+special_case (svfloat32_t x, svbool_t special, const struct data *d)\n+{\n+  return sv_call_f32 (exp2f, x, sv_exp2f_inline (x, svptrue_b32 (), d),\n+\t\t      special);\n+}\n+\n+/* Single-precision SVE exp2f routine. Implements the same algorithm\n+   as AdvSIMD exp2f.\n+   Worst case error is 1.04 ULPs.\n+   _ZGVsMxv_exp2f(-0x1.af994ap-3) got 0x1.ba6a66p-1\n+\t\t\t\t want 0x1.ba6a64p-1.  */\n+svfloat32_t SV_NAME_F1 (exp2) (svfloat32_t x, const svbool_t pg)\n+{\n+  const struct data *d = ptr_barrier (&data);\n+  svbool_t special = svacgt (pg, x, d->thres);\n+  if (__glibc_unlikely (svptest_any (special, special)))\n+    return special_case (x, special, d);\n+  return sv_exp2f_inline (x, pg, d);\n+}\ndiff --git a/sysdeps/aarch64/fpu/expf_sve.c b/sysdeps/aarch64/fpu/expf_sve.c\nindex 3ba79bc4f1..da93e01b87 100644\n--- a/sysdeps/aarch64/fpu/expf_sve.c\n+++ b/sysdeps/aarch64/fpu/expf_sve.c\n@@ -18,33 +18,25 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include \"sv_math.h\"\n+#include \"sv_expf_inline.h\"\n+\n+/* Roughly 87.3. For x < -Thres, the result is subnormal and not handled\n+   correctly by FEXPA.  */\n+#define Thres 0x1.5d5e2ap+6f\n \n static const struct data\n {\n-  float poly[5];\n-  float inv_ln2, ln2_hi, ln2_lo, shift, thres;\n+  struct sv_expf_data d;\n+  float thres;\n } data = {\n-  /* Coefficients copied from the polynomial in AdvSIMD variant, reversed for\n-     compatibility with polynomial helpers.  */\n-  .poly = { 0x1.ffffecp-1f, 0x1.fffdb6p-2f, 0x1.555e66p-3f, 0x1.573e2ep-5f,\n-\t    0x1.0e4020p-7f },\n-  .inv_ln2 = 0x1.715476p+0f,\n-  .ln2_hi = 0x1.62e4p-1f,\n-  .ln2_lo = 0x1.7f7d1cp-20f,\n-  /* 1.5*2^17 + 127.  */\n-  .shift = 0x1.903f8p17f,\n-  /* Roughly 87.3. For x < -Thres, the result is subnormal and not handled\n-     correctly by FEXPA.  */\n-  .thres = 0x1.5d5e2ap+6f,\n+  .d = SV_EXPF_DATA,\n+  .thres = Thres,\n };\n \n-#define C(i) sv_f32 (d->poly[i])\n-#define ExponentBias 0x3f800000\n-\n static svfloat32_t NOINLINE\n-special_case (svfloat32_t x, svfloat32_t y, svbool_t special)\n+special_case (svfloat32_t x, svbool_t special, const struct sv_expf_data *d)\n {\n-  return sv_call_f32 (expf, x, y, special);\n+  return sv_call_f32 (expf, x, expf_inline (x, svptrue_b32 (), d), special);\n }\n \n /* Optimised single-precision SVE exp function.\n@@ -54,36 +46,8 @@ special_case (svfloat32_t x, svfloat32_t y, svbool_t special)\n svfloat32_t SV_NAME_F1 (exp) (svfloat32_t x, const svbool_t pg)\n {\n   const struct data *d = ptr_barrier (&data);\n-\n-  /* exp(x) = 2^n (1 + poly(r)), with 1 + poly(r) in [1/sqrt(2),sqrt(2)]\n-     x = ln2*n + r, with r in [-ln2/2, ln2/2].  */\n-\n-  /* Load some constants in quad-word chunks to minimise memory access (last\n-     lane is wasted).  */\n-  svfloat32_t invln2_and_ln2 = svld1rq (svptrue_b32 (), &d->inv_ln2);\n-\n-  /* n = round(x/(ln2/N)).  */\n-  svfloat32_t z = svmla_lane (sv_f32 (d->shift), x, invln2_and_ln2, 0);\n-  svfloat32_t n = svsub_x (pg, z, d->shift);\n-\n-  /* r = x - n*ln2/N.  */\n-  svfloat32_t r = svmls_lane (x, n, invln2_and_ln2, 1);\n-  r = svmls_lane (r, n, invln2_and_ln2, 2);\n-\n-  /* scale = 2^(n/N).  */\n   svbool_t is_special_case = svacgt (pg, x, d->thres);\n-  svfloat32_t scale = svexpa (svreinterpret_u32 (z));\n-\n-  /* y = exp(r) - 1 ~= r + C0 r^2 + C1 r^3 + C2 r^4 + C3 r^5 + C4 r^6.  */\n-  svfloat32_t p12 = svmla_x (pg, C (1), C (2), r);\n-  svfloat32_t p34 = svmla_x (pg, C (3), C (4), r);\n-  svfloat32_t r2 = svmul_x (pg, r, r);\n-  svfloat32_t p14 = svmla_x (pg, p12, p34, r2);\n-  svfloat32_t p0 = svmul_x (pg, r, C (0));\n-  svfloat32_t poly = svmla_x (pg, p0, r2, p14);\n-\n   if (__glibc_unlikely (svptest_any (pg, is_special_case)))\n-    return special_case (x, svmla_x (pg, scale, scale, poly), is_special_case);\n-\n-  return svmla_x (pg, scale, scale, poly);\n+    return special_case (x, is_special_case, &d->d);\n+  return expf_inline (x, pg, &d->d);\n }\ndiff --git a/sysdeps/aarch64/fpu/sv_expf_inline.h b/sysdeps/aarch64/fpu/sv_expf_inline.h\nindex 23963b5f8e..6166df6553 100644\n--- a/sysdeps/aarch64/fpu/sv_expf_inline.h\n+++ b/sysdeps/aarch64/fpu/sv_expf_inline.h\n@@ -24,19 +24,20 @@\n \n struct sv_expf_data\n {\n-  float poly[5];\n-  float inv_ln2, ln2_hi, ln2_lo, shift;\n+  float c1, c3, inv_ln2;\n+  float ln2_lo, c0, c2, c4;\n+  float ln2_hi, shift;\n };\n \n /* Coefficients copied from the polynomial in AdvSIMD variant, reversed for\n    compatibility with polynomial helpers. Shift is 1.5*2^17 + 127.  */\n #define SV_EXPF_DATA                                                          \\\n   {                                                                           \\\n-    .poly = { 0x1.ffffecp-1f, 0x1.fffdb6p-2f, 0x1.555e66p-3f, 0x1.573e2ep-5f, \\\n-\t      0x1.0e4020p-7f },                                               \\\n-                                                                              \\\n-    .inv_ln2 = 0x1.715476p+0f, .ln2_hi = 0x1.62e4p-1f,                        \\\n-    .ln2_lo = 0x1.7f7d1cp-20f, .shift = 0x1.803f8p17f,                        \\\n+    /* Coefficients copied from the polynomial in AdvSIMD variant.  */        \\\n+    .c0 = 0x1.ffffecp-1f, .c1 = 0x1.fffdb6p-2f, .c2 = 0x1.555e66p-3f,         \\\n+    .c3 = 0x1.573e2ep-5f, .c4 = 0x1.0e4020p-7f, .inv_ln2 = 0x1.715476p+0f,    \\\n+    .ln2_hi = 0x1.62e4p-1f, .ln2_lo = 0x1.7f7d1cp-20f,                        \\\n+    .shift = 0x1.803f8p17f,                                                   \\\n   }\n \n #define C(i) sv_f32 (d->poly[i])\n@@ -47,26 +48,25 @@ expf_inline (svfloat32_t x, const svbool_t pg, const struct sv_expf_data *d)\n   /* exp(x) = 2^n (1 + poly(r)), with 1 + poly(r) in [1/sqrt(2),sqrt(2)]\n      x = ln2*n + r, with r in [-ln2/2, ln2/2].  */\n \n-  /* Load some constants in quad-word chunks to minimise memory access.  */\n-  svfloat32_t c4_invln2_and_ln2 = svld1rq (svptrue_b32 (), &d->poly[4]);\n+  svfloat32_t lane_consts = svld1rq (svptrue_b32 (), &d->ln2_lo);\n \n   /* n = round(x/(ln2/N)).  */\n-  svfloat32_t z = svmla_lane (sv_f32 (d->shift), x, c4_invln2_and_ln2, 1);\n+  svfloat32_t z = svmad_x (pg, sv_f32 (d->inv_ln2), x, d->shift);\n   svfloat32_t n = svsub_x (pg, z, d->shift);\n \n   /* r = x - n*ln2/N.  */\n-  svfloat32_t r = svmls_lane (x, n, c4_invln2_and_ln2, 2);\n-  r = svmls_lane (r, n, c4_invln2_and_ln2, 3);\n+  svfloat32_t r = svmsb_x (pg, sv_f32 (d->ln2_hi), n, x);\n+  r = svmls_lane (r, n, lane_consts, 0);\n \n   /* scale = 2^(n/N).  */\n-  svfloat32_t scale = svexpa (svreinterpret_u32_f32 (z));\n+  svfloat32_t scale = svexpa (svreinterpret_u32 (z));\n \n   /* y = exp(r) - 1 ~= r + C0 r^2 + C1 r^3 + C2 r^4 + C3 r^5 + C4 r^6.  */\n-  svfloat32_t p12 = svmla_x (pg, C (1), C (2), r);\n-  svfloat32_t p34 = svmla_lane (C (3), r, c4_invln2_and_ln2, 0);\n-  svfloat32_t r2 = svmul_f32_x (pg, r, r);\n+  svfloat32_t p12 = svmla_lane (sv_f32 (d->c1), r, lane_consts, 2);\n+  svfloat32_t p34 = svmla_lane (sv_f32 (d->c3), r, lane_consts, 3);\n+  svfloat32_t r2 = svmul_x (svptrue_b32 (), r, r);\n   svfloat32_t p14 = svmla_x (pg, p12, p34, r2);\n-  svfloat32_t p0 = svmul_f32_x (pg, r, C (0));\n+  svfloat32_t p0 = svmul_lane (r, lane_consts, 1);\n   svfloat32_t poly = svmla_x (pg, p0, r2, p14);\n \n   return svmla_x (pg, scale, scale, poly);\n\ncommit c4373426e3a85ec483a0f412c2a7c6cdfa32ccdb\nAuthor: Joe Ramsay <Joe.Ramsay@arm.com>\nDate:   Mon Sep 23 15:30:20 2024 +0100\n\n    AArch64: Improve codegen in SVE F32 logs\n    \n    Reduce MOVPRFXs by using unpredicated (non-destructive) instructions\n    where possible.  Similar to the recent change to AdvSIMD F32 logs,\n    adjust special-case arguments and bounds to allow for more optimal\n    register usage.  For all 3 routines one MOVPRFX remains in the\n    reduction, which cannot be avoided as immediate AND and ASR are both\n    destructive.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit a15b1394b5eba98ffe28a02a392b587e4fe13c0d)\n\ndiff --git a/sysdeps/aarch64/fpu/log10f_sve.c b/sysdeps/aarch64/fpu/log10f_sve.c\nindex bdbb49cd32..7913679f67 100644\n--- a/sysdeps/aarch64/fpu/log10f_sve.c\n+++ b/sysdeps/aarch64/fpu/log10f_sve.c\n@@ -24,6 +24,7 @@ static const struct data\n   float poly_0246[4];\n   float poly_1357[4];\n   float ln2, inv_ln10;\n+  uint32_t off, lower;\n } data = {\n   .poly_1357 = {\n     /* Coefficients copied from the AdvSIMD routine, then rearranged so that coeffs\n@@ -35,18 +36,23 @@ static const struct data\n \t\t -0x1.0fc92cp-4f },\n   .ln2 = 0x1.62e43p-1f,\n   .inv_ln10 = 0x1.bcb7b2p-2f,\n+  .off = 0x3f2aaaab,\n+  /* Lower bound is the smallest positive normal float 0x00800000. For\n+     optimised register use subnormals are detected after offset has been\n+     subtracted, so lower bound is 0x0080000 - offset (which wraps around).  */\n+  .lower = 0x00800000 - 0x3f2aaaab\n };\n \n-#define Min 0x00800000\n-#define Max 0x7f800000\n-#define Thres 0x7f000000  /* Max - Min.  */\n-#define Offset 0x3f2aaaab /* 0.666667.  */\n+#define Thres 0x7f000000 /* asuint32(inf) - 0x00800000.  */\n #define MantissaMask 0x007fffff\n \n static svfloat32_t NOINLINE\n-special_case (svfloat32_t x, svfloat32_t y, svbool_t special)\n+special_case (svuint32_t u_off, svfloat32_t p, svfloat32_t r2, svfloat32_t y,\n+\t      svbool_t cmp)\n {\n-  return sv_call_f32 (log10f, x, y, special);\n+  return sv_call_f32 (\n+      log10f, svreinterpret_f32 (svadd_x (svptrue_b32 (), u_off, data.off)),\n+      svmla_x (svptrue_b32 (), p, r2, y), cmp);\n }\n \n /* Optimised implementation of SVE log10f using the same algorithm and\n@@ -57,23 +63,25 @@ special_case (svfloat32_t x, svfloat32_t y, svbool_t special)\n svfloat32_t SV_NAME_F1 (log10) (svfloat32_t x, const svbool_t pg)\n {\n   const struct data *d = ptr_barrier (&data);\n-  svuint32_t ix = svreinterpret_u32 (x);\n-  svbool_t special = svcmpge (pg, svsub_x (pg, ix, Min), Thres);\n+\n+  svuint32_t u_off = svreinterpret_u32 (x);\n+\n+  u_off = svsub_x (pg, u_off, d->off);\n+  svbool_t special = svcmpge (pg, svsub_x (pg, u_off, d->lower), Thres);\n \n   /* x = 2^n * (1+r), where 2/3 < 1+r < 4/3.  */\n-  ix = svsub_x (pg, ix, Offset);\n   svfloat32_t n = svcvt_f32_x (\n-      pg, svasr_x (pg, svreinterpret_s32 (ix), 23)); /* signextend.  */\n-  ix = svand_x (pg, ix, MantissaMask);\n-  ix = svadd_x (pg, ix, Offset);\n+      pg, svasr_x (pg, svreinterpret_s32 (u_off), 23)); /* signextend.  */\n+  svuint32_t ix = svand_x (pg, u_off, MantissaMask);\n+  ix = svadd_x (pg, ix, d->off);\n   svfloat32_t r = svsub_x (pg, svreinterpret_f32 (ix), 1.0f);\n \n   /* y = log10(1+r) + n*log10(2)\n      log10(1+r) ~ r * InvLn(10) + P(r)\n      where P(r) is a polynomial. Use order 9 for log10(1+x), i.e. order 8 for\n      log10(1+x)/x, with x in [-1/3, 1/3] (offset=2/3).  */\n-  svfloat32_t r2 = svmul_x (pg, r, r);\n-  svfloat32_t r4 = svmul_x (pg, r2, r2);\n+  svfloat32_t r2 = svmul_x (svptrue_b32 (), r, r);\n+  svfloat32_t r4 = svmul_x (svptrue_b32 (), r2, r2);\n   svfloat32_t p_1357 = svld1rq (svptrue_b32 (), &d->poly_1357[0]);\n   svfloat32_t q_01 = svmla_lane (sv_f32 (d->poly_0246[0]), r, p_1357, 0);\n   svfloat32_t q_23 = svmla_lane (sv_f32 (d->poly_0246[1]), r, p_1357, 1);\n@@ -88,7 +96,6 @@ svfloat32_t SV_NAME_F1 (log10) (svfloat32_t x, const svbool_t pg)\n   hi = svmul_x (pg, hi, d->inv_ln10);\n \n   if (__glibc_unlikely (svptest_any (pg, special)))\n-    return special_case (x, svmla_x (svnot_z (pg, special), hi, r2, y),\n-\t\t\t special);\n-  return svmla_x (pg, hi, r2, y);\n+    return special_case (u_off, hi, r2, y, special);\n+  return svmla_x (svptrue_b32 (), hi, r2, y);\n }\ndiff --git a/sysdeps/aarch64/fpu/log2f_sve.c b/sysdeps/aarch64/fpu/log2f_sve.c\nindex 5031c42483..939d89bfb9 100644\n--- a/sysdeps/aarch64/fpu/log2f_sve.c\n+++ b/sysdeps/aarch64/fpu/log2f_sve.c\n@@ -23,6 +23,7 @@ static const struct data\n {\n   float poly_02468[5];\n   float poly_1357[4];\n+  uint32_t off, lower;\n } data = {\n   .poly_1357 = {\n     /* Coefficients copied from the AdvSIMD routine, then rearranged so that coeffs\n@@ -32,18 +33,23 @@ static const struct data\n   },\n   .poly_02468 = { 0x1.715476p0f, 0x1.ec701cp-2f, 0x1.27a0b8p-2f,\n \t\t  0x1.9d8ecap-3f, 0x1.9e495p-3f },\n+  .off = 0x3f2aaaab,\n+  /* Lower bound is the smallest positive normal float 0x00800000. For\n+     optimised register use subnormals are detected after offset has been\n+     subtracted, so lower bound is 0x0080000 - offset (which wraps around).  */\n+  .lower = 0x00800000 - 0x3f2aaaab\n };\n \n-#define Min (0x00800000)\n-#define Max (0x7f800000)\n-#define Thres (0x7f000000) /* Max - Min.  */\n+#define Thresh (0x7f000000) /* asuint32(inf) - 0x00800000.  */\n #define MantissaMask (0x007fffff)\n-#define Off (0x3f2aaaab) /* 0.666667.  */\n \n static svfloat32_t NOINLINE\n-special_case (svfloat32_t x, svfloat32_t y, svbool_t cmp)\n+special_case (svuint32_t u_off, svfloat32_t p, svfloat32_t r2, svfloat32_t y,\n+\t      svbool_t cmp)\n {\n-  return sv_call_f32 (log2f, x, y, cmp);\n+  return sv_call_f32 (\n+      log2f, svreinterpret_f32 (svadd_x (svptrue_b32 (), u_off, data.off)),\n+      svmla_x (svptrue_b32 (), p, r2, y), cmp);\n }\n \n /* Optimised implementation of SVE log2f, using the same algorithm\n@@ -55,19 +61,20 @@ svfloat32_t SV_NAME_F1 (log2) (svfloat32_t x, const svbool_t pg)\n {\n   const struct data *d = ptr_barrier (&data);\n \n-  svuint32_t u = svreinterpret_u32 (x);\n-  svbool_t special = svcmpge (pg, svsub_x (pg, u, Min), Thres);\n+  svuint32_t u_off = svreinterpret_u32 (x);\n+\n+  u_off = svsub_x (pg, u_off, d->off);\n+  svbool_t special = svcmpge (pg, svsub_x (pg, u_off, d->lower), Thresh);\n \n   /* x = 2^n * (1+r), where 2/3 < 1+r < 4/3.  */\n-  u = svsub_x (pg, u, Off);\n   svfloat32_t n = svcvt_f32_x (\n-      pg, svasr_x (pg, svreinterpret_s32 (u), 23)); /* Sign-extend.  */\n-  u = svand_x (pg, u, MantissaMask);\n-  u = svadd_x (pg, u, Off);\n+      pg, svasr_x (pg, svreinterpret_s32 (u_off), 23)); /* Sign-extend.  */\n+  svuint32_t u = svand_x (pg, u_off, MantissaMask);\n+  u = svadd_x (pg, u, d->off);\n   svfloat32_t r = svsub_x (pg, svreinterpret_f32 (u), 1.0f);\n \n   /* y = log2(1+r) + n.  */\n-  svfloat32_t r2 = svmul_x (pg, r, r);\n+  svfloat32_t r2 = svmul_x (svptrue_b32 (), r, r);\n \n   /* Evaluate polynomial using pairwise Horner scheme.  */\n   svfloat32_t p_1357 = svld1rq (svptrue_b32 (), &d->poly_1357[0]);\n@@ -81,6 +88,6 @@ svfloat32_t SV_NAME_F1 (log2) (svfloat32_t x, const svbool_t pg)\n   y = svmla_x (pg, q_01, r2, y);\n \n   if (__glibc_unlikely (svptest_any (pg, special)))\n-    return special_case (x, svmla_x (svnot_z (pg, special), n, r, y), special);\n-  return svmla_x (pg, n, r, y);\n+    return special_case (u_off, n, r, y, special);\n+  return svmla_x (svptrue_b32 (), n, r, y);\n }\ndiff --git a/sysdeps/aarch64/fpu/logf_sve.c b/sysdeps/aarch64/fpu/logf_sve.c\nindex d64e810cfe..5b9324678d 100644\n--- a/sysdeps/aarch64/fpu/logf_sve.c\n+++ b/sysdeps/aarch64/fpu/logf_sve.c\n@@ -24,6 +24,7 @@ static const struct data\n   float poly_0135[4];\n   float poly_246[3];\n   float ln2;\n+  uint32_t off, lower;\n } data = {\n   .poly_0135 = {\n     /* Coefficients copied from the AdvSIMD routine in math/, then rearranged so\n@@ -32,19 +33,24 @@ static const struct data\n     -0x1.3e737cp-3f, 0x1.5a9aa2p-3f, 0x1.961348p-3f, 0x1.555d7cp-2f\n   },\n   .poly_246 = { -0x1.4f9934p-3f, -0x1.00187cp-2f, -0x1.ffffc8p-2f },\n-  .ln2 = 0x1.62e43p-1f\n+  .ln2 = 0x1.62e43p-1f,\n+  .off = 0x3f2aaaab,\n+  /* Lower bound is the smallest positive normal float 0x00800000. For\n+     optimised register use subnormals are detected after offset has been\n+     subtracted, so lower bound is 0x0080000 - offset (which wraps around).  */\n+  .lower = 0x00800000 - 0x3f2aaaab\n };\n \n-#define Min (0x00800000)\n-#define Max (0x7f800000)\n-#define Thresh (0x7f000000) /* Max - Min.  */\n+#define Thresh (0x7f000000) /* asuint32(inf) - 0x00800000.  */\n #define Mask (0x007fffff)\n-#define Off (0x3f2aaaab) /* 0.666667.  */\n \n static svfloat32_t NOINLINE\n-special_case (svfloat32_t x, svfloat32_t y, svbool_t cmp)\n+special_case (svuint32_t u_off, svfloat32_t p, svfloat32_t r2, svfloat32_t y,\n+\t      svbool_t cmp)\n {\n-  return sv_call_f32 (logf, x, y, cmp);\n+  return sv_call_f32 (\n+      logf, svreinterpret_f32 (svadd_x (svptrue_b32 (), u_off, data.off)),\n+      svmla_x (svptrue_b32 (), p, r2, y), cmp);\n }\n \n /* Optimised implementation of SVE logf, using the same algorithm and\n@@ -55,19 +61,21 @@ svfloat32_t SV_NAME_F1 (log) (svfloat32_t x, const svbool_t pg)\n {\n   const struct data *d = ptr_barrier (&data);\n \n-  svuint32_t u = svreinterpret_u32 (x);\n-  svbool_t cmp = svcmpge (pg, svsub_x (pg, u, Min), Thresh);\n+  svuint32_t u_off = svreinterpret_u32 (x);\n+\n+  u_off = svsub_x (pg, u_off, d->off);\n+  svbool_t cmp = svcmpge (pg, svsub_x (pg, u_off, d->lower), Thresh);\n \n   /* x = 2^n * (1+r), where 2/3 < 1+r < 4/3.  */\n-  u = svsub_x (pg, u, Off);\n   svfloat32_t n = svcvt_f32_x (\n-      pg, svasr_x (pg, svreinterpret_s32 (u), 23)); /* Sign-extend.  */\n-  u = svand_x (pg, u, Mask);\n-  u = svadd_x (pg, u, Off);\n+      pg, svasr_x (pg, svreinterpret_s32 (u_off), 23)); /* Sign-extend.  */\n+\n+  svuint32_t u = svand_x (pg, u_off, Mask);\n+  u = svadd_x (pg, u, d->off);\n   svfloat32_t r = svsub_x (pg, svreinterpret_f32 (u), 1.0f);\n \n   /* y = log(1+r) + n*ln2.  */\n-  svfloat32_t r2 = svmul_x (pg, r, r);\n+  svfloat32_t r2 = svmul_x (svptrue_b32 (), r, r);\n   /* n*ln2 + r + r2*(P6 + r*P5 + r2*(P4 + r*P3 + r2*(P2 + r*P1 + r2*P0))).  */\n   svfloat32_t p_0135 = svld1rq (svptrue_b32 (), &d->poly_0135[0]);\n   svfloat32_t p = svmla_lane (sv_f32 (d->poly_246[0]), r, p_0135, 1);\n@@ -80,6 +88,6 @@ svfloat32_t SV_NAME_F1 (log) (svfloat32_t x, const svbool_t pg)\n   p = svmla_x (pg, r, n, d->ln2);\n \n   if (__glibc_unlikely (svptest_any (pg, cmp)))\n-    return special_case (x, svmla_x (svnot_z (pg, cmp), p, r2, y), cmp);\n+    return special_case (u_off, p, r2, y, cmp);\n   return svmla_x (pg, p, r2, y);\n }\n\ncommit 520240173029fd03388ec01db9a5359291cbbd27\nAuthor: Joe Ramsay <Joe.Ramsay@arm.com>\nDate:   Mon Sep 23 15:32:14 2024 +0100\n\n    AArch64: Improve codegen in users of AdvSIMD log1pf helper\n    \n    log1pf is quite register-intensive - use fewer registers for the\n    polynomial, and make various changes to shorten dependency chains in\n    parent routines.  There is now no spilling with GCC 14.  Accuracy moves\n    around a little - comments adjusted accordingly but does not require\n    regen-ulps.\n    \n    Use the helper in log1pf as well, instead of having separate\n    implementations.  The more accurate polynomial means special-casing can\n    be simplified, and the shorter dependency chain avoids the usual dance\n    around v0, which is otherwise difficult.\n    \n    There is a small duplication of vectors containing 1.0f (or 0x3f800000) -\n    GCC is not currently able to efficiently handle values which fit in FMOV\n    but not MOVI, and are reinterpreted to integer.  There may be potential\n    for more optimisation if this is fixed.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit 5bc100bd4b7e00db3009ae93d25d303341545d23)\n\ndiff --git a/sysdeps/aarch64/fpu/acoshf_advsimd.c b/sysdeps/aarch64/fpu/acoshf_advsimd.c\nindex 8916dcbf40..004474acf9 100644\n--- a/sysdeps/aarch64/fpu/acoshf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/acoshf_advsimd.c\n@@ -25,35 +25,32 @@ const static struct data\n {\n   struct v_log1pf_data log1pf_consts;\n   uint32x4_t one;\n-  uint16x4_t thresh;\n-} data = {\n-  .log1pf_consts = V_LOG1PF_CONSTANTS_TABLE,\n-  .one = V4 (0x3f800000),\n-  .thresh = V4 (0x2000) /* top(asuint(SquareLim) - asuint(1)).  */\n-};\n+} data = { .log1pf_consts = V_LOG1PF_CONSTANTS_TABLE, .one = V4 (0x3f800000) };\n+\n+#define Thresh vdup_n_u16 (0x2000) /* top(asuint(SquareLim) - asuint(1)).  */\n \n static float32x4_t NOINLINE VPCS_ATTR\n special_case (float32x4_t x, float32x4_t y, uint16x4_t special,\n-\t      const struct v_log1pf_data d)\n+\t      const struct v_log1pf_data *d)\n {\n   return v_call_f32 (acoshf, x, log1pf_inline (y, d), vmovl_u16 (special));\n }\n \n /* Vector approximation for single-precision acosh, based on log1p. Maximum\n    error depends on WANT_SIMD_EXCEPT. With SIMD fp exceptions enabled, it\n-   is 2.78 ULP:\n-   __v_acoshf(0x1.07887p+0) got 0x1.ef9e9cp-3\n-\t\t\t   want 0x1.ef9ea2p-3.\n+   is 3.00 ULP:\n+   _ZGVnN4v_acoshf(0x1.01df3ap+0) got 0x1.ef0a82p-4\n+\t\t\t\t want 0x1.ef0a7cp-4.\n    With exceptions disabled, we can compute u with a shorter dependency chain,\n-   which gives maximum error of 3.07 ULP:\n-  __v_acoshf(0x1.01f83ep+0) got 0x1.fbc7fap-4\n-\t\t\t   want 0x1.fbc7f4p-4.  */\n+   which gives maximum error of 3.22 ULP:\n+   _ZGVnN4v_acoshf(0x1.007ef2p+0) got 0x1.fdcdccp-5\n+\t\t\t\t want 0x1.fdcdd2p-5.  */\n \n VPCS_ATTR float32x4_t NOINLINE V_NAME_F1 (acosh) (float32x4_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n   uint32x4_t ix = vreinterpretq_u32_f32 (x);\n-  uint16x4_t special = vcge_u16 (vsubhn_u32 (ix, d->one), d->thresh);\n+  uint16x4_t special = vcge_u16 (vsubhn_u32 (ix, d->one), Thresh);\n \n #if WANT_SIMD_EXCEPT\n   /* Mask special lanes with 1 to side-step spurious invalid or overflow. Use\n@@ -64,15 +61,16 @@ VPCS_ATTR float32x4_t NOINLINE V_NAME_F1 (acosh) (float32x4_t x)\n   float32x4_t xm1 = v_zerofy_f32 (vsubq_f32 (x, v_f32 (1)), p);\n   float32x4_t u = vfmaq_f32 (vaddq_f32 (xm1, xm1), xm1, xm1);\n #else\n-  float32x4_t xm1 = vsubq_f32 (x, v_f32 (1));\n-  float32x4_t u = vmulq_f32 (xm1, vaddq_f32 (x, v_f32 (1.0f)));\n+  float32x4_t xm1 = vsubq_f32 (x, vreinterpretq_f32_u32 (d->one));\n+  float32x4_t u\n+      = vmulq_f32 (xm1, vaddq_f32 (x, vreinterpretq_f32_u32 (d->one)));\n #endif\n \n   float32x4_t y = vaddq_f32 (xm1, vsqrtq_f32 (u));\n \n   if (__glibc_unlikely (v_any_u16h (special)))\n-    return special_case (x, y, special, d->log1pf_consts);\n-  return log1pf_inline (y, d->log1pf_consts);\n+    return special_case (x, y, special, &d->log1pf_consts);\n+  return log1pf_inline (y, &d->log1pf_consts);\n }\n libmvec_hidden_def (V_NAME_F1 (acosh))\n HALF_WIDTH_ALIAS_F1 (acosh)\ndiff --git a/sysdeps/aarch64/fpu/asinhf_advsimd.c b/sysdeps/aarch64/fpu/asinhf_advsimd.c\nindex 09fd8a6143..eb789b91b6 100644\n--- a/sysdeps/aarch64/fpu/asinhf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/asinhf_advsimd.c\n@@ -20,16 +20,16 @@\n #include \"v_math.h\"\n #include \"v_log1pf_inline.h\"\n \n-#define SignMask v_u32 (0x80000000)\n-\n const static struct data\n {\n   struct v_log1pf_data log1pf_consts;\n+  float32x4_t one;\n   uint32x4_t big_bound;\n #if WANT_SIMD_EXCEPT\n   uint32x4_t tiny_bound;\n #endif\n } data = {\n+  .one = V4 (1),\n   .log1pf_consts = V_LOG1PF_CONSTANTS_TABLE,\n   .big_bound = V4 (0x5f800000), /* asuint(0x1p64).  */\n #if WANT_SIMD_EXCEPT\n@@ -38,20 +38,27 @@ const static struct data\n };\n \n static float32x4_t NOINLINE VPCS_ATTR\n-special_case (float32x4_t x, float32x4_t y, uint32x4_t special)\n+special_case (float32x4_t x, uint32x4_t sign, float32x4_t y,\n+\t      uint32x4_t special, const struct data *d)\n {\n-  return v_call_f32 (asinhf, x, y, special);\n+  return v_call_f32 (\n+      asinhf, x,\n+      vreinterpretq_f32_u32 (veorq_u32 (\n+\t  sign, vreinterpretq_u32_f32 (log1pf_inline (y, &d->log1pf_consts)))),\n+      special);\n }\n \n /* Single-precision implementation of vector asinh(x), using vector log1p.\n-   Worst-case error is 2.66 ULP, at roughly +/-0.25:\n-   __v_asinhf(0x1.01b04p-2) got 0x1.fe163ep-3 want 0x1.fe1638p-3.  */\n+   Worst-case error is 2.59 ULP:\n+   _ZGVnN4v_asinhf(0x1.d86124p-3) got 0x1.d449bep-3\n+\t\t\t\t want 0x1.d449c4p-3.  */\n VPCS_ATTR float32x4_t NOINLINE V_NAME_F1 (asinh) (float32x4_t x)\n {\n   const struct data *dat = ptr_barrier (&data);\n-  uint32x4_t iax = vbicq_u32 (vreinterpretq_u32_f32 (x), SignMask);\n-  float32x4_t ax = vreinterpretq_f32_u32 (iax);\n+  float32x4_t ax = vabsq_f32 (x);\n+  uint32x4_t iax = vreinterpretq_u32_f32 (ax);\n   uint32x4_t special = vcgeq_u32 (iax, dat->big_bound);\n+  uint32x4_t sign = veorq_u32 (vreinterpretq_u32_f32 (x), iax);\n   float32x4_t special_arg = x;\n \n #if WANT_SIMD_EXCEPT\n@@ -68,13 +75,13 @@ VPCS_ATTR float32x4_t NOINLINE V_NAME_F1 (asinh) (float32x4_t x)\n   /* asinh(x) = log(x + sqrt(x * x + 1)).\n      For positive x, asinh(x) = log1p(x + x * x / (1 + sqrt(x * x + 1))).  */\n   float32x4_t d\n-      = vaddq_f32 (v_f32 (1), vsqrtq_f32 (vfmaq_f32 (v_f32 (1), x, x)));\n-  float32x4_t y = log1pf_inline (\n-      vaddq_f32 (ax, vdivq_f32 (vmulq_f32 (ax, ax), d)), dat->log1pf_consts);\n+      = vaddq_f32 (v_f32 (1), vsqrtq_f32 (vfmaq_f32 (dat->one, ax, ax)));\n+  float32x4_t y = vaddq_f32 (ax, vdivq_f32 (vmulq_f32 (ax, ax), d));\n \n   if (__glibc_unlikely (v_any_u32 (special)))\n-    return special_case (special_arg, vbslq_f32 (SignMask, x, y), special);\n-  return vbslq_f32 (SignMask, x, y);\n+    return special_case (special_arg, sign, y, special, dat);\n+  return vreinterpretq_f32_u32 (veorq_u32 (\n+      sign, vreinterpretq_u32_f32 (log1pf_inline (y, &dat->log1pf_consts))));\n }\n libmvec_hidden_def (V_NAME_F1 (asinh))\n HALF_WIDTH_ALIAS_F1 (asinh)\ndiff --git a/sysdeps/aarch64/fpu/atanhf_advsimd.c b/sysdeps/aarch64/fpu/atanhf_advsimd.c\nindex ae488f7b54..818b6c92ad 100644\n--- a/sysdeps/aarch64/fpu/atanhf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/atanhf_advsimd.c\n@@ -40,15 +40,17 @@ const static struct data\n #define Half v_u32 (0x3f000000)\n \n static float32x4_t NOINLINE VPCS_ATTR\n-special_case (float32x4_t x, float32x4_t y, uint32x4_t special)\n+special_case (float32x4_t x, float32x4_t halfsign, float32x4_t y,\n+\t      uint32x4_t special)\n {\n-  return v_call_f32 (atanhf, x, y, special);\n+  return v_call_f32 (atanhf, vbslq_f32 (AbsMask, x, halfsign),\n+\t\t     vmulq_f32 (halfsign, y), special);\n }\n \n /* Approximation for vector single-precision atanh(x) using modified log1p.\n-   The maximum error is 3.08 ULP:\n-   __v_atanhf(0x1.ff215p-5) got 0x1.ffcb7cp-5\n-\t\t\t   want 0x1.ffcb82p-5.  */\n+   The maximum error is 2.93 ULP:\n+   _ZGVnN4v_atanhf(0x1.f43d7p-5) got 0x1.f4dcfep-5\n+\t\t\t\twant 0x1.f4dcf8p-5.  */\n VPCS_ATTR float32x4_t NOINLINE V_NAME_F1 (atanh) (float32x4_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n@@ -68,11 +70,19 @@ VPCS_ATTR float32x4_t NOINLINE V_NAME_F1 (atanh) (float32x4_t x)\n   uint32x4_t special = vcgeq_u32 (iax, d->one);\n #endif\n \n-  float32x4_t y = vdivq_f32 (vaddq_f32 (ax, ax), vsubq_f32 (v_f32 (1), ax));\n-  y = log1pf_inline (y, d->log1pf_consts);\n+  float32x4_t y = vdivq_f32 (vaddq_f32 (ax, ax),\n+\t\t\t     vsubq_f32 (vreinterpretq_f32_u32 (d->one), ax));\n+  y = log1pf_inline (y, &d->log1pf_consts);\n \n+  /* If exceptions not required, pass ax to special-case for shorter dependency\n+     chain. If exceptions are required ax will have been zerofied, so have to\n+     pass x.  */\n   if (__glibc_unlikely (v_any_u32 (special)))\n-    return special_case (x, vmulq_f32 (halfsign, y), special);\n+#if WANT_SIMD_EXCEPT\n+    return special_case (x, halfsign, y, special);\n+#else\n+    return special_case (ax, halfsign, y, special);\n+#endif\n   return vmulq_f32 (halfsign, y);\n }\n libmvec_hidden_def (V_NAME_F1 (atanh))\ndiff --git a/sysdeps/aarch64/fpu/log1pf_advsimd.c b/sysdeps/aarch64/fpu/log1pf_advsimd.c\nindex 8cfa28fb8a..00006fc703 100644\n--- a/sysdeps/aarch64/fpu/log1pf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/log1pf_advsimd.c\n@@ -18,114 +18,79 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include \"v_math.h\"\n-#include \"poly_advsimd_f32.h\"\n+#include \"v_log1pf_inline.h\"\n+\n+#if WANT_SIMD_EXCEPT\n \n const static struct data\n {\n-  float32x4_t poly[8], ln2;\n-  uint32x4_t tiny_bound, minus_one, four, thresh;\n-  int32x4_t three_quarters;\n+  uint32x4_t minus_one, thresh;\n+  struct v_log1pf_data d;\n } data = {\n-  .poly = { /* Generated using FPMinimax in [-0.25, 0.5]. First two coefficients\n-\t       (1, -0.5) are not stored as they can be generated more\n-\t       efficiently.  */\n-\t    V4 (0x1.5555aap-2f), V4 (-0x1.000038p-2f), V4 (0x1.99675cp-3f),\n-\t    V4 (-0x1.54ef78p-3f), V4 (0x1.28a1f4p-3f), V4 (-0x1.0da91p-3f),\n-\t    V4 (0x1.abcb6p-4f), V4 (-0x1.6f0d5ep-5f) },\n-  .ln2 = V4 (0x1.62e43p-1f),\n-  .tiny_bound = V4 (0x34000000), /* asuint32(0x1p-23). ulp=0.5 at 0x1p-23.  */\n-  .thresh = V4 (0x4b800000), /* asuint32(INFINITY) - tiny_bound.  */\n+  .d = V_LOG1PF_CONSTANTS_TABLE,\n+  .thresh = V4 (0x4b800000), /* asuint32(INFINITY) - TinyBound.  */\n   .minus_one = V4 (0xbf800000),\n-  .four = V4 (0x40800000),\n-  .three_quarters = V4 (0x3f400000)\n };\n \n-static inline float32x4_t\n-eval_poly (float32x4_t m, const float32x4_t *p)\n-{\n-  /* Approximate log(1+m) on [-0.25, 0.5] using split Estrin scheme.  */\n-  float32x4_t p_12 = vfmaq_f32 (v_f32 (-0.5), m, p[0]);\n-  float32x4_t p_34 = vfmaq_f32 (p[1], m, p[2]);\n-  float32x4_t p_56 = vfmaq_f32 (p[3], m, p[4]);\n-  float32x4_t p_78 = vfmaq_f32 (p[5], m, p[6]);\n-\n-  float32x4_t m2 = vmulq_f32 (m, m);\n-  float32x4_t p_02 = vfmaq_f32 (m, m2, p_12);\n-  float32x4_t p_36 = vfmaq_f32 (p_34, m2, p_56);\n-  float32x4_t p_79 = vfmaq_f32 (p_78, m2, p[7]);\n-\n-  float32x4_t m4 = vmulq_f32 (m2, m2);\n-  float32x4_t p_06 = vfmaq_f32 (p_02, m4, p_36);\n-  return vfmaq_f32 (p_06, m4, vmulq_f32 (m4, p_79));\n-}\n+/* asuint32(0x1p-23). ulp=0.5 at 0x1p-23.  */\n+#  define TinyBound v_u32 (0x34000000)\n \n static float32x4_t NOINLINE VPCS_ATTR\n-special_case (float32x4_t x, float32x4_t y, uint32x4_t special)\n+special_case (float32x4_t x, uint32x4_t cmp, const struct data *d)\n {\n-  return v_call_f32 (log1pf, x, y, special);\n+  /* Side-step special lanes so fenv exceptions are not triggered\n+     inadvertently.  */\n+  float32x4_t x_nospecial = v_zerofy_f32 (x, cmp);\n+  return v_call_f32 (log1pf, x, log1pf_inline (x_nospecial, &d->d), cmp);\n }\n \n-/* Vector log1pf approximation using polynomial on reduced interval. Accuracy\n-   is roughly 2.02 ULP:\n-   log1pf(0x1.21e13ap-2) got 0x1.fe8028p-3 want 0x1.fe802cp-3.  */\n+/* Vector log1pf approximation using polynomial on reduced interval. Worst-case\n+   error is 1.69 ULP:\n+   _ZGVnN4v_log1pf(0x1.04418ap-2) got 0x1.cfcbd8p-3\n+\t\t\t\t want 0x1.cfcbdcp-3.  */\n VPCS_ATTR float32x4_t V_NAME_F1 (log1p) (float32x4_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n-\n   uint32x4_t ix = vreinterpretq_u32_f32 (x);\n   uint32x4_t ia = vreinterpretq_u32_f32 (vabsq_f32 (x));\n+\n   uint32x4_t special_cases\n-      = vorrq_u32 (vcgeq_u32 (vsubq_u32 (ia, d->tiny_bound), d->thresh),\n+      = vorrq_u32 (vcgeq_u32 (vsubq_u32 (ia, TinyBound), d->thresh),\n \t\t   vcgeq_u32 (ix, d->minus_one));\n-  float32x4_t special_arg = x;\n \n-#if WANT_SIMD_EXCEPT\n   if (__glibc_unlikely (v_any_u32 (special_cases)))\n-    /* Side-step special lanes so fenv exceptions are not triggered\n-       inadvertently.  */\n-    x = v_zerofy_f32 (x, special_cases);\n-#endif\n+    return special_case (x, special_cases, d);\n \n-  /* With x + 1 = t * 2^k (where t = m + 1 and k is chosen such that m\n-\t\t\t   is in [-0.25, 0.5]):\n-     log1p(x) = log(t) + log(2^k) = log1p(m) + k*log(2).\n-\n-     We approximate log1p(m) with a polynomial, then scale by\n-     k*log(2). Instead of doing this directly, we use an intermediate\n-     scale factor s = 4*k*log(2) to ensure the scale is representable\n-     as a normalised fp32 number.  */\n+  return log1pf_inline (x, &d->d);\n+}\n \n-  float32x4_t m = vaddq_f32 (x, v_f32 (1.0f));\n+#else\n \n-  /* Choose k to scale x to the range [-1/4, 1/2].  */\n-  int32x4_t k\n-      = vandq_s32 (vsubq_s32 (vreinterpretq_s32_f32 (m), d->three_quarters),\n-\t\t   v_s32 (0xff800000));\n-  uint32x4_t ku = vreinterpretq_u32_s32 (k);\n+const static struct v_log1pf_data data = V_LOG1PF_CONSTANTS_TABLE;\n \n-  /* Scale x by exponent manipulation.  */\n-  float32x4_t m_scale\n-      = vreinterpretq_f32_u32 (vsubq_u32 (vreinterpretq_u32_f32 (x), ku));\n+static float32x4_t NOINLINE VPCS_ATTR\n+special_case (float32x4_t x, uint32x4_t cmp)\n+{\n+  return v_call_f32 (log1pf, x, log1pf_inline (x, ptr_barrier (&data)), cmp);\n+}\n \n-  /* Scale up to ensure that the scale factor is representable as normalised\n-     fp32 number, and scale m down accordingly.  */\n-  float32x4_t s = vreinterpretq_f32_u32 (vsubq_u32 (d->four, ku));\n-  m_scale = vaddq_f32 (m_scale, vfmaq_f32 (v_f32 (-1.0f), v_f32 (0.25f), s));\n+/* Vector log1pf approximation using polynomial on reduced interval. Worst-case\n+   error is 1.63 ULP:\n+   _ZGVnN4v_log1pf(0x1.216d12p-2) got 0x1.fdcb12p-3\n+\t\t\t\t want 0x1.fdcb16p-3.  */\n+VPCS_ATTR float32x4_t V_NAME_F1 (log1p) (float32x4_t x)\n+{\n+  uint32x4_t special_cases = vornq_u32 (vcleq_f32 (x, v_f32 (-1)),\n+\t\t\t\t\tvcaleq_f32 (x, v_f32 (0x1p127f)));\n \n-  /* Evaluate polynomial on the reduced interval.  */\n-  float32x4_t p = eval_poly (m_scale, d->poly);\n+  if (__glibc_unlikely (v_any_u32 (special_cases)))\n+    return special_case (x, special_cases);\n \n-  /* The scale factor to be applied back at the end - by multiplying float(k)\n-     by 2^-23 we get the unbiased exponent of k.  */\n-  float32x4_t scale_back = vcvtq_f32_s32 (vshrq_n_s32 (k, 23));\n+  return log1pf_inline (x, ptr_barrier (&data));\n+}\n \n-  /* Apply the scaling back.  */\n-  float32x4_t y = vfmaq_f32 (p, scale_back, d->ln2);\n+#endif\n \n-  if (__glibc_unlikely (v_any_u32 (special_cases)))\n-    return special_case (special_arg, y, special_cases);\n-  return y;\n-}\n libmvec_hidden_def (V_NAME_F1 (log1p))\n HALF_WIDTH_ALIAS_F1 (log1p)\n strong_alias (V_NAME_F1 (log1p), V_NAME_F1 (logp1))\ndiff --git a/sysdeps/aarch64/fpu/v_log1pf_inline.h b/sysdeps/aarch64/fpu/v_log1pf_inline.h\nindex 643a6cdcfc..73e45a942e 100644\n--- a/sysdeps/aarch64/fpu/v_log1pf_inline.h\n+++ b/sysdeps/aarch64/fpu/v_log1pf_inline.h\n@@ -25,54 +25,81 @@\n \n struct v_log1pf_data\n {\n-  float32x4_t poly[8], ln2;\n   uint32x4_t four;\n   int32x4_t three_quarters;\n+  float c0, c3, c5, c7;\n+  float32x4_t c4, c6, c1, c2, ln2;\n };\n \n /* Polynomial generated using FPMinimax in [-0.25, 0.5]. First two coefficients\n    (1, -0.5) are not stored as they can be generated more efficiently.  */\n #define V_LOG1PF_CONSTANTS_TABLE                                              \\\n   {                                                                           \\\n-    .poly                                                                     \\\n-\t= { V4 (0x1.5555aap-2f),  V4 (-0x1.000038p-2f), V4 (0x1.99675cp-3f),  \\\n-\t    V4 (-0x1.54ef78p-3f), V4 (0x1.28a1f4p-3f),\tV4 (-0x1.0da91p-3f),  \\\n-\t    V4 (0x1.abcb6p-4f),\t  V4 (-0x1.6f0d5ep-5f) },                     \\\n-\t.ln2 = V4 (0x1.62e43p-1f), .four = V4 (0x40800000),                   \\\n-\t.three_quarters = V4 (0x3f400000)                                     \\\n+    .c0 = 0x1.5555aap-2f, .c1 = V4 (-0x1.000038p-2f),                         \\\n+    .c2 = V4 (0x1.99675cp-3f), .c3 = -0x1.54ef78p-3f,                         \\\n+    .c4 = V4 (0x1.28a1f4p-3f), .c5 = -0x1.0da91p-3f,                          \\\n+    .c6 = V4 (0x1.abcb6p-4f), .c7 = -0x1.6f0d5ep-5f,                          \\\n+    .ln2 = V4 (0x1.62e43p-1f), .four = V4 (0x40800000),                       \\\n+    .three_quarters = V4 (0x3f400000)                                         \\\n   }\n \n static inline float32x4_t\n-eval_poly (float32x4_t m, const float32x4_t *c)\n+eval_poly (float32x4_t m, const struct v_log1pf_data *d)\n {\n-  /* Approximate log(1+m) on [-0.25, 0.5] using pairwise Horner (main routine\n-     uses split Estrin, but this way reduces register pressure in the calling\n-     routine).  */\n-  float32x4_t q = vfmaq_f32 (v_f32 (-0.5), m, c[0]);\n+  /* Approximate log(1+m) on [-0.25, 0.5] using pairwise Horner.  */\n+  float32x4_t c0357 = vld1q_f32 (&d->c0);\n+  float32x4_t q = vfmaq_laneq_f32 (v_f32 (-0.5), m, c0357, 0);\n   float32x4_t m2 = vmulq_f32 (m, m);\n-  q = vfmaq_f32 (m, m2, q);\n-  float32x4_t p = v_pw_horner_6_f32 (m, m2, c + 1);\n+  float32x4_t p67 = vfmaq_laneq_f32 (d->c6, m, c0357, 3);\n+  float32x4_t p45 = vfmaq_laneq_f32 (d->c4, m, c0357, 2);\n+  float32x4_t p23 = vfmaq_laneq_f32 (d->c2, m, c0357, 1);\n+  float32x4_t p = vfmaq_f32 (p45, m2, p67);\n+  p = vfmaq_f32 (p23, m2, p);\n+  p = vfmaq_f32 (d->c1, m, p);\n   p = vmulq_f32 (m2, p);\n-  return vfmaq_f32 (q, m2, p);\n+  p = vfmaq_f32 (m, m2, p);\n+  return vfmaq_f32 (p, m2, q);\n }\n \n static inline float32x4_t\n-log1pf_inline (float32x4_t x, const struct v_log1pf_data d)\n+log1pf_inline (float32x4_t x, const struct v_log1pf_data *d)\n {\n-  /* Helper for calculating log(x + 1). Copied from log1pf_2u1.c, with no\n-     special-case handling. See that file for details of the algorithm.  */\n+  /* Helper for calculating log(x + 1).  */\n+\n+  /* With x + 1 = t * 2^k (where t = m + 1 and k is chosen such that m\n+\t\t\t   is in [-0.25, 0.5]):\n+     log1p(x) = log(t) + log(2^k) = log1p(m) + k*log(2).\n+\n+     We approximate log1p(m) with a polynomial, then scale by\n+     k*log(2). Instead of doing this directly, we use an intermediate\n+     scale factor s = 4*k*log(2) to ensure the scale is representable\n+     as a normalised fp32 number.  */\n   float32x4_t m = vaddq_f32 (x, v_f32 (1.0f));\n+\n+  /* Choose k to scale x to the range [-1/4, 1/2].  */\n   int32x4_t k\n-      = vandq_s32 (vsubq_s32 (vreinterpretq_s32_f32 (m), d.three_quarters),\n+      = vandq_s32 (vsubq_s32 (vreinterpretq_s32_f32 (m), d->three_quarters),\n \t\t   v_s32 (0xff800000));\n   uint32x4_t ku = vreinterpretq_u32_s32 (k);\n-  float32x4_t s = vreinterpretq_f32_u32 (vsubq_u32 (d.four, ku));\n+\n+  /* Scale up to ensure that the scale factor is representable as normalised\n+     fp32 number, and scale m down accordingly.  */\n+  float32x4_t s = vreinterpretq_f32_u32 (vsubq_u32 (d->four, ku));\n+\n+  /* Scale x by exponent manipulation.  */\n   float32x4_t m_scale\n       = vreinterpretq_f32_u32 (vsubq_u32 (vreinterpretq_u32_f32 (x), ku));\n   m_scale = vaddq_f32 (m_scale, vfmaq_f32 (v_f32 (-1.0f), v_f32 (0.25f), s));\n-  float32x4_t p = eval_poly (m_scale, d.poly);\n+\n+  /* Evaluate polynomial on the reduced interval.  */\n+  float32x4_t p = eval_poly (m_scale, d);\n+\n+  /* The scale factor to be applied back at the end - by multiplying float(k)\n+     by 2^-23 we get the unbiased exponent of k.  */\n   float32x4_t scale_back = vmulq_f32 (vcvtq_f32_s32 (k), v_f32 (0x1.0p-23f));\n-  return vfmaq_f32 (p, scale_back, d.ln2);\n+\n+  /* Apply the scaling back.  */\n+  return vfmaq_f32 (p, scale_back, d->ln2);\n }\n \n #endif\n\ncommit a947a43b95bbea53ec50df058b42392fd5ea52b6\nAuthor: Joe Ramsay <Joe.Ramsay@arm.com>\nDate:   Mon Sep 23 15:32:53 2024 +0100\n\n    AArch64: Improve codegen in users of ADVSIMD expm1f helper\n    \n    Rearrange operations so MOV is not necessary in reduction or around\n    the special-case handler.  Reduce memory access by using more indexed\n    MLAs in polynomial.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit 7900ac490db32f6bccff812733f00280dde34e27)\n\ndiff --git a/sysdeps/aarch64/fpu/expm1f_advsimd.c b/sysdeps/aarch64/fpu/expm1f_advsimd.c\nindex a0616ec754..8303ca296e 100644\n--- a/sysdeps/aarch64/fpu/expm1f_advsimd.c\n+++ b/sysdeps/aarch64/fpu/expm1f_advsimd.c\n@@ -18,27 +18,18 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include \"v_math.h\"\n-#include \"poly_advsimd_f32.h\"\n+#include \"v_expm1f_inline.h\"\n \n static const struct data\n {\n-  float32x4_t poly[5];\n-  float invln2_and_ln2[4];\n-  float32x4_t shift;\n-  int32x4_t exponent_bias;\n+  struct v_expm1f_data d;\n #if WANT_SIMD_EXCEPT\n   uint32x4_t thresh;\n #else\n   float32x4_t oflow_bound;\n #endif\n } data = {\n-  /* Generated using fpminimax with degree=5 in [-log(2)/2, log(2)/2].  */\n-  .poly = { V4 (0x1.fffffep-2), V4 (0x1.5554aep-3), V4 (0x1.555736p-5),\n-\t    V4 (0x1.12287cp-7), V4 (0x1.6b55a2p-10) },\n-  /* Stores constants: invln2, ln2_hi, ln2_lo, 0.  */\n-  .invln2_and_ln2 = { 0x1.715476p+0f, 0x1.62e4p-1f, 0x1.7f7d1cp-20f, 0 },\n-  .shift = V4 (0x1.8p23f),\n-  .exponent_bias = V4 (0x3f800000),\n+  .d = V_EXPM1F_DATA,\n #if !WANT_SIMD_EXCEPT\n   /* Value above which expm1f(x) should overflow. Absolute value of the\n      underflow bound is greater than this, so it catches both cases - there is\n@@ -55,67 +46,38 @@ static const struct data\n #define TinyBound v_u32 (0x34000000 << 1)\n \n static float32x4_t VPCS_ATTR NOINLINE\n-special_case (float32x4_t x, float32x4_t y, uint32x4_t special)\n+special_case (float32x4_t x, uint32x4_t special, const struct data *d)\n {\n-  return v_call_f32 (expm1f, x, y, special);\n+  return v_call_f32 (\n+      expm1f, x, expm1f_inline (v_zerofy_f32 (x, special), &d->d), special);\n }\n \n /* Single-precision vector exp(x) - 1 function.\n-   The maximum error is 1.51 ULP:\n-   _ZGVnN4v_expm1f (0x1.8baa96p-2) got 0x1.e2fb9p-2\n-\t\t\t\t  want 0x1.e2fb94p-2.  */\n+   The maximum error is 1.62 ULP:\n+   _ZGVnN4v_expm1f(0x1.85f83p-2) got 0x1.da9f4p-2\n+\t\t\t\twant 0x1.da9f44p-2.  */\n float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (expm1) (float32x4_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n-  uint32x4_t ix = vreinterpretq_u32_f32 (x);\n \n #if WANT_SIMD_EXCEPT\n+  uint32x4_t ix = vreinterpretq_u32_f32 (x);\n   /* If fp exceptions are to be triggered correctly, fall back to scalar for\n      |x| < 2^-23, |x| > oflow_bound, Inf & NaN. Add ix to itself for\n      shift-left by 1, and compare with thresh which was left-shifted offline -\n      this is effectively an absolute compare.  */\n   uint32x4_t special\n       = vcgeq_u32 (vsubq_u32 (vaddq_u32 (ix, ix), TinyBound), d->thresh);\n-  if (__glibc_unlikely (v_any_u32 (special)))\n-    x = v_zerofy_f32 (x, special);\n #else\n   /* Handles very large values (+ve and -ve), +/-NaN, +/-Inf.  */\n   uint32x4_t special = vcagtq_f32 (x, d->oflow_bound);\n #endif\n \n-  /* Reduce argument to smaller range:\n-     Let i = round(x / ln2)\n-     and f = x - i * ln2, then f is in [-ln2/2, ln2/2].\n-     exp(x) - 1 = 2^i * (expm1(f) + 1) - 1\n-     where 2^i is exact because i is an integer.  */\n-  float32x4_t invln2_and_ln2 = vld1q_f32 (d->invln2_and_ln2);\n-  float32x4_t j\n-      = vsubq_f32 (vfmaq_laneq_f32 (d->shift, x, invln2_and_ln2, 0), d->shift);\n-  int32x4_t i = vcvtq_s32_f32 (j);\n-  float32x4_t f = vfmsq_laneq_f32 (x, j, invln2_and_ln2, 1);\n-  f = vfmsq_laneq_f32 (f, j, invln2_and_ln2, 2);\n-\n-  /* Approximate expm1(f) using polynomial.\n-     Taylor expansion for expm1(x) has the form:\n-\t x + ax^2 + bx^3 + cx^4 ....\n-     So we calculate the polynomial P(f) = a + bf + cf^2 + ...\n-     and assemble the approximation expm1(f) ~= f + f^2 * P(f).  */\n-  float32x4_t p = v_horner_4_f32 (f, d->poly);\n-  p = vfmaq_f32 (f, vmulq_f32 (f, f), p);\n-\n-  /* Assemble the result.\n-     expm1(x) ~= 2^i * (p + 1) - 1\n-     Let t = 2^i.  */\n-  int32x4_t u = vaddq_s32 (vshlq_n_s32 (i, 23), d->exponent_bias);\n-  float32x4_t t = vreinterpretq_f32_s32 (u);\n-\n   if (__glibc_unlikely (v_any_u32 (special)))\n-    return special_case (vreinterpretq_f32_u32 (ix),\n-\t\t\t vfmaq_f32 (vsubq_f32 (t, v_f32 (1.0f)), p, t),\n-\t\t\t special);\n+    return special_case (x, special, d);\n \n   /* expm1(x) ~= p * t + (t - 1).  */\n-  return vfmaq_f32 (vsubq_f32 (t, v_f32 (1.0f)), p, t);\n+  return expm1f_inline (x, &d->d);\n }\n libmvec_hidden_def (V_NAME_F1 (expm1))\n HALF_WIDTH_ALIAS_F1 (expm1)\ndiff --git a/sysdeps/aarch64/fpu/sinhf_advsimd.c b/sysdeps/aarch64/fpu/sinhf_advsimd.c\nindex 6bb7482dc2..c6ed7598e7 100644\n--- a/sysdeps/aarch64/fpu/sinhf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/sinhf_advsimd.c\n@@ -23,15 +23,13 @@\n static const struct data\n {\n   struct v_expm1f_data expm1f_consts;\n-  uint32x4_t halff;\n #if WANT_SIMD_EXCEPT\n   uint32x4_t tiny_bound, thresh;\n #else\n-  uint32x4_t oflow_bound;\n+  float32x4_t oflow_bound;\n #endif\n } data = {\n   .expm1f_consts = V_EXPM1F_DATA,\n-  .halff = V4 (0x3f000000),\n #if WANT_SIMD_EXCEPT\n   /* 0x1.6a09e8p-32, below which expm1f underflows.  */\n   .tiny_bound = V4 (0x2fb504f4),\n@@ -39,14 +37,15 @@ static const struct data\n   .thresh = V4 (0x12fbbbb3),\n #else\n   /* 0x1.61814ep+6, above which expm1f helper overflows.  */\n-  .oflow_bound = V4 (0x42b0c0a7),\n+  .oflow_bound = V4 (0x1.61814ep+6),\n #endif\n };\n \n static float32x4_t NOINLINE VPCS_ATTR\n-special_case (float32x4_t x, float32x4_t y, uint32x4_t special)\n+special_case (float32x4_t x, float32x4_t t, float32x4_t halfsign,\n+\t      uint32x4_t special)\n {\n-  return v_call_f32 (sinhf, x, y, special);\n+  return v_call_f32 (sinhf, x, vmulq_f32 (t, halfsign), special);\n }\n \n /* Approximation for vector single-precision sinh(x) using expm1.\n@@ -60,15 +59,15 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (sinh) (float32x4_t x)\n \n   uint32x4_t ix = vreinterpretq_u32_f32 (x);\n   float32x4_t ax = vabsq_f32 (x);\n-  uint32x4_t iax = vreinterpretq_u32_f32 (ax);\n-  uint32x4_t sign = veorq_u32 (ix, iax);\n-  float32x4_t halfsign = vreinterpretq_f32_u32 (vorrq_u32 (sign, d->halff));\n+  float32x4_t halfsign = vreinterpretq_f32_u32 (\n+      vbslq_u32 (v_u32 (0x80000000), ix, vreinterpretq_u32_f32 (v_f32 (0.5))));\n \n #if WANT_SIMD_EXCEPT\n-  uint32x4_t special = vcgeq_u32 (vsubq_u32 (iax, d->tiny_bound), d->thresh);\n+  uint32x4_t special = vcgeq_u32 (\n+      vsubq_u32 (vreinterpretq_u32_f32 (ax), d->tiny_bound), d->thresh);\n   ax = v_zerofy_f32 (ax, special);\n #else\n-  uint32x4_t special = vcgeq_u32 (iax, d->oflow_bound);\n+  uint32x4_t special = vcageq_f32 (x, d->oflow_bound);\n #endif\n \n   /* Up to the point that expm1f overflows, we can use it to calculate sinhf\n@@ -80,7 +79,7 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (sinh) (float32x4_t x)\n   /* Fall back to the scalar variant for any lanes that should trigger an\n      exception.  */\n   if (__glibc_unlikely (v_any_u32 (special)))\n-    return special_case (x, vmulq_f32 (t, halfsign), special);\n+    return special_case (x, t, halfsign, special);\n \n   return vmulq_f32 (t, halfsign);\n }\ndiff --git a/sysdeps/aarch64/fpu/tanhf_advsimd.c b/sysdeps/aarch64/fpu/tanhf_advsimd.c\nindex 50defd6ef0..3ced9b7a41 100644\n--- a/sysdeps/aarch64/fpu/tanhf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/tanhf_advsimd.c\n@@ -28,13 +28,16 @@ static const struct data\n   /* 0x1.205966p+3, above which tanhf rounds to 1 (or -1 for  negative).  */\n   .boring_bound = V4 (0x41102cb3),\n   .large_bound = V4 (0x7f800000),\n-  .onef = V4 (0x3f800000),\n };\n \n static float32x4_t NOINLINE VPCS_ATTR\n-special_case (float32x4_t x, float32x4_t y, uint32x4_t special)\n+special_case (float32x4_t x, uint32x4_t is_boring, float32x4_t boring,\n+\t      float32x4_t q, uint32x4_t special)\n {\n-  return v_call_f32 (tanhf, x, y, special);\n+  return v_call_f32 (\n+      tanhf, x,\n+      vbslq_f32 (is_boring, boring, vdivq_f32 (q, vaddq_f32 (q, v_f32 (2.0)))),\n+      special);\n }\n \n /* Approximation for single-precision vector tanh(x), using a simplified\n@@ -50,7 +53,9 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (tanh) (float32x4_t x)\n   uint32x4_t iax = vreinterpretq_u32_f32 (ax);\n   uint32x4_t sign = veorq_u32 (ix, iax);\n   uint32x4_t is_boring = vcgtq_u32 (iax, d->boring_bound);\n-  float32x4_t boring = vreinterpretq_f32_u32 (vorrq_u32 (sign, d->onef));\n+  /* expm1 exponent bias is 1.0f reinterpreted to int.  */\n+  float32x4_t boring = vreinterpretq_f32_u32 (vorrq_u32 (\n+      sign, vreinterpretq_u32_s32 (d->expm1f_consts.exponent_bias)));\n \n #if WANT_SIMD_EXCEPT\n   /* If fp exceptions are to be triggered properly, set all special and boring\n@@ -66,10 +71,12 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (tanh) (float32x4_t x)\n \n   /* tanh(x) = (e^2x - 1) / (e^2x + 1).  */\n   float32x4_t q = expm1f_inline (vmulq_n_f32 (x, 2), &d->expm1f_consts);\n-  float32x4_t y = vdivq_f32 (q, vaddq_f32 (q, v_f32 (2.0)));\n+\n   if (__glibc_unlikely (v_any_u32 (special)))\n-    return special_case (vreinterpretq_f32_u32 (ix),\n-\t\t\t vbslq_f32 (is_boring, boring, y), special);\n+    return special_case (vreinterpretq_f32_u32 (ix), is_boring, boring, q,\n+\t\t\t special);\n+\n+  float32x4_t y = vdivq_f32 (q, vaddq_f32 (q, v_f32 (2.0)));\n   return vbslq_f32 (is_boring, boring, y);\n }\n libmvec_hidden_def (V_NAME_F1 (tanh))\ndiff --git a/sysdeps/aarch64/fpu/v_expm1f_inline.h b/sysdeps/aarch64/fpu/v_expm1f_inline.h\nindex 59b552da6b..1daedfdd51 100644\n--- a/sysdeps/aarch64/fpu/v_expm1f_inline.h\n+++ b/sysdeps/aarch64/fpu/v_expm1f_inline.h\n@@ -21,48 +21,47 @@\n #define AARCH64_FPU_V_EXPM1F_INLINE_H\n \n #include \"v_math.h\"\n-#include \"poly_advsimd_f32.h\"\n+#include \"math_config.h\"\n \n struct v_expm1f_data\n {\n-  float32x4_t poly[5];\n-  float invln2_and_ln2[4];\n-  float32x4_t shift;\n+  float32x4_t c0, c2;\n   int32x4_t exponent_bias;\n+  float c1, c3, inv_ln2, c4;\n+  float ln2_hi, ln2_lo;\n };\n \n /* Coefficients generated using fpminimax with degree=5 in [-log(2)/2,\n-   log(2)/2]. Exponent bias is asuint(1.0f).\n-   invln2_and_ln2 Stores constants: invln2, ln2_lo, ln2_hi, 0.  */\n+   log(2)/2]. Exponent bias is asuint(1.0f).  */\n #define V_EXPM1F_DATA                                                         \\\n   {                                                                           \\\n-    .poly = { V4 (0x1.fffffep-2), V4 (0x1.5554aep-3), V4 (0x1.555736p-5),     \\\n-\t      V4 (0x1.12287cp-7), V4 (0x1.6b55a2p-10) },                      \\\n-    .shift = V4 (0x1.8p23f), .exponent_bias = V4 (0x3f800000),                \\\n-    .invln2_and_ln2 = { 0x1.715476p+0f, 0x1.62e4p-1f, 0x1.7f7d1cp-20f, 0 },   \\\n+    .c0 = V4 (0x1.fffffep-2), .c1 = 0x1.5554aep-3, .c2 = V4 (0x1.555736p-5),  \\\n+    .c3 = 0x1.12287cp-7, .c4 = 0x1.6b55a2p-10,                                \\\n+    .exponent_bias = V4 (0x3f800000), .inv_ln2 = 0x1.715476p+0f,              \\\n+    .ln2_hi = 0x1.62e4p-1f, .ln2_lo = 0x1.7f7d1cp-20f,                        \\\n   }\n \n static inline float32x4_t\n expm1f_inline (float32x4_t x, const struct v_expm1f_data *d)\n {\n-  /* Helper routine for calculating exp(x) - 1.\n-     Copied from v_expm1f_1u6.c, with all special-case handling removed - the\n-     calling routine should handle special values if required.  */\n+  /* Helper routine for calculating exp(x) - 1.  */\n+\n+  float32x2_t ln2 = vld1_f32 (&d->ln2_hi);\n+  float32x4_t lane_consts = vld1q_f32 (&d->c1);\n \n   /* Reduce argument: f in [-ln2/2, ln2/2], i is exact.  */\n-  float32x4_t invln2_and_ln2 = vld1q_f32 (d->invln2_and_ln2);\n-  float32x4_t j\n-      = vsubq_f32 (vfmaq_laneq_f32 (d->shift, x, invln2_and_ln2, 0), d->shift);\n+  float32x4_t j = vrndaq_f32 (vmulq_laneq_f32 (x, lane_consts, 2));\n   int32x4_t i = vcvtq_s32_f32 (j);\n-  float32x4_t f = vfmsq_laneq_f32 (x, j, invln2_and_ln2, 1);\n-  f = vfmsq_laneq_f32 (f, j, invln2_and_ln2, 2);\n+  float32x4_t f = vfmsq_lane_f32 (x, j, ln2, 0);\n+  f = vfmsq_lane_f32 (f, j, ln2, 1);\n \n-  /* Approximate expm1(f) with polynomial P, expm1(f) ~= f + f^2 * P(f).\n-     Uses Estrin scheme, where the main _ZGVnN4v_expm1f routine uses\n-     Horner.  */\n+  /* Approximate expm1(f) with polynomial P, expm1(f) ~= f + f^2 * P(f).  */\n   float32x4_t f2 = vmulq_f32 (f, f);\n   float32x4_t f4 = vmulq_f32 (f2, f2);\n-  float32x4_t p = v_estrin_4_f32 (f, f2, f4, d->poly);\n+  float32x4_t p01 = vfmaq_laneq_f32 (d->c0, f, lane_consts, 0);\n+  float32x4_t p23 = vfmaq_laneq_f32 (d->c2, f, lane_consts, 1);\n+  float32x4_t p = vfmaq_f32 (p01, f2, p23);\n+  p = vfmaq_laneq_f32 (p, f4, lane_consts, 3);\n   p = vfmaq_f32 (f, f2, p);\n \n   /* t = 2^i.  */\n\ncommit 68f2eb20de698675ddc74068c2cd03fee29207df\nAuthor: Joe Ramsay <Joe.Ramsay@arm.com>\nDate:   Mon Sep 23 15:33:31 2024 +0100\n\n    AArch64: Simplify rounding-multiply pattern in several AdvSIMD routines\n    \n    This operation can be simplified to use simpler multiply-round-convert\n    sequence, which uses fewer instructions and constants.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit 16a59571e4e9fd019d3fc23a2e7d73c1df8bb5cb)\n\ndiff --git a/sysdeps/aarch64/fpu/cos_advsimd.c b/sysdeps/aarch64/fpu/cos_advsimd.c\nindex 3924c9ce44..11a89b1530 100644\n--- a/sysdeps/aarch64/fpu/cos_advsimd.c\n+++ b/sysdeps/aarch64/fpu/cos_advsimd.c\n@@ -22,7 +22,7 @@\n static const struct data\n {\n   float64x2_t poly[7];\n-  float64x2_t range_val, shift, inv_pi, half_pi, pi_1, pi_2, pi_3;\n+  float64x2_t range_val, inv_pi, pi_1, pi_2, pi_3;\n } data = {\n   /* Worst-case error is 3.3 ulp in [-pi/2, pi/2].  */\n   .poly = { V2 (-0x1.555555555547bp-3), V2 (0x1.1111111108a4dp-7),\n@@ -30,11 +30,9 @@ static const struct data\n \t    V2 (-0x1.ae633919987c6p-26), V2 (0x1.60e277ae07cecp-33),\n \t    V2 (-0x1.9e9540300a1p-41) },\n   .inv_pi = V2 (0x1.45f306dc9c883p-2),\n-  .half_pi = V2 (0x1.921fb54442d18p+0),\n   .pi_1 = V2 (0x1.921fb54442d18p+1),\n   .pi_2 = V2 (0x1.1a62633145c06p-53),\n   .pi_3 = V2 (0x1.c1cd129024e09p-106),\n-  .shift = V2 (0x1.8p52),\n   .range_val = V2 (0x1p23)\n };\n \n@@ -68,10 +66,9 @@ float64x2_t VPCS_ATTR V_NAME_D1 (cos) (float64x2_t x)\n #endif\n \n   /* n = rint((|x|+pi/2)/pi) - 0.5.  */\n-  n = vfmaq_f64 (d->shift, d->inv_pi, vaddq_f64 (r, d->half_pi));\n-  odd = vshlq_n_u64 (vreinterpretq_u64_f64 (n), 63);\n-  n = vsubq_f64 (n, d->shift);\n-  n = vsubq_f64 (n, v_f64 (0.5));\n+  n = vrndaq_f64 (vfmaq_f64 (v_f64 (0.5), r, d->inv_pi));\n+  odd = vshlq_n_u64 (vreinterpretq_u64_s64 (vcvtq_s64_f64 (n)), 63);\n+  n = vsubq_f64 (n, v_f64 (0.5f));\n \n   /* r = |x| - n*pi  (range reduction into -pi/2 .. pi/2).  */\n   r = vfmsq_f64 (r, d->pi_1, n);\ndiff --git a/sysdeps/aarch64/fpu/cosf_advsimd.c b/sysdeps/aarch64/fpu/cosf_advsimd.c\nindex d0c285b03a..85a1b37373 100644\n--- a/sysdeps/aarch64/fpu/cosf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/cosf_advsimd.c\n@@ -22,7 +22,7 @@\n static const struct data\n {\n   float32x4_t poly[4];\n-  float32x4_t range_val, inv_pi, half_pi, shift, pi_1, pi_2, pi_3;\n+  float32x4_t range_val, inv_pi, pi_1, pi_2, pi_3;\n } data = {\n   /* 1.886 ulp error.  */\n   .poly = { V4 (-0x1.555548p-3f), V4 (0x1.110df4p-7f), V4 (-0x1.9f42eap-13f),\n@@ -33,8 +33,6 @@ static const struct data\n   .pi_3 = V4 (-0x1.ee59dap-49f),\n \n   .inv_pi = V4 (0x1.45f306p-2f),\n-  .shift = V4 (0x1.8p+23f),\n-  .half_pi = V4 (0x1.921fb6p0f),\n   .range_val = V4 (0x1p20f)\n };\n \n@@ -69,9 +67,8 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (cos) (float32x4_t x)\n #endif\n \n   /* n = rint((|x|+pi/2)/pi) - 0.5.  */\n-  n = vfmaq_f32 (d->shift, d->inv_pi, vaddq_f32 (r, d->half_pi));\n-  odd = vshlq_n_u32 (vreinterpretq_u32_f32 (n), 31);\n-  n = vsubq_f32 (n, d->shift);\n+  n = vrndaq_f32 (vfmaq_f32 (v_f32 (0.5), r, d->inv_pi));\n+  odd = vshlq_n_u32 (vreinterpretq_u32_s32 (vcvtq_s32_f32 (n)), 31);\n   n = vsubq_f32 (n, v_f32 (0.5f));\n \n   /* r = |x| - n*pi  (range reduction into -pi/2 .. pi/2).  */\ndiff --git a/sysdeps/aarch64/fpu/expf_advsimd.c b/sysdeps/aarch64/fpu/expf_advsimd.c\nindex 99d2e647aa..5c9cb72620 100644\n--- a/sysdeps/aarch64/fpu/expf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/expf_advsimd.c\n@@ -22,7 +22,7 @@\n static const struct data\n {\n   float32x4_t poly[5];\n-  float32x4_t shift, inv_ln2, ln2_hi, ln2_lo;\n+  float32x4_t inv_ln2, ln2_hi, ln2_lo;\n   uint32x4_t exponent_bias;\n #if !WANT_SIMD_EXCEPT\n   float32x4_t special_bound, scale_thresh;\n@@ -31,7 +31,6 @@ static const struct data\n   /* maxerr: 1.45358 +0.5 ulp.  */\n   .poly = { V4 (0x1.0e4020p-7f), V4 (0x1.573e2ep-5f), V4 (0x1.555e66p-3f),\n \t    V4 (0x1.fffdb6p-2f), V4 (0x1.ffffecp-1f) },\n-  .shift = V4 (0x1.8p23f),\n   .inv_ln2 = V4 (0x1.715476p+0f),\n   .ln2_hi = V4 (0x1.62e4p-1f),\n   .ln2_lo = V4 (0x1.7f7d1cp-20f),\n@@ -85,7 +84,7 @@ special_case (float32x4_t poly, float32x4_t n, uint32x4_t e, uint32x4_t cmp1,\n float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (exp) (float32x4_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n-  float32x4_t n, r, r2, scale, p, q, poly, z;\n+  float32x4_t n, r, r2, scale, p, q, poly;\n   uint32x4_t cmp, e;\n \n #if WANT_SIMD_EXCEPT\n@@ -104,11 +103,10 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (exp) (float32x4_t x)\n \n   /* exp(x) = 2^n (1 + poly(r)), with 1 + poly(r) in [1/sqrt(2),sqrt(2)]\n      x = ln2*n + r, with r in [-ln2/2, ln2/2].  */\n-  z = vfmaq_f32 (d->shift, x, d->inv_ln2);\n-  n = vsubq_f32 (z, d->shift);\n+  n = vrndaq_f32 (vmulq_f32 (x, d->inv_ln2));\n   r = vfmsq_f32 (x, n, d->ln2_hi);\n   r = vfmsq_f32 (r, n, d->ln2_lo);\n-  e = vshlq_n_u32 (vreinterpretq_u32_f32 (z), 23);\n+  e = vshlq_n_u32 (vreinterpretq_u32_s32 (vcvtq_s32_f32 (n)), 23);\n   scale = vreinterpretq_f32_u32 (vaddq_u32 (e, d->exponent_bias));\n \n #if !WANT_SIMD_EXCEPT\ndiff --git a/sysdeps/aarch64/fpu/sin_advsimd.c b/sysdeps/aarch64/fpu/sin_advsimd.c\nindex a0d9d3b819..718125cbad 100644\n--- a/sysdeps/aarch64/fpu/sin_advsimd.c\n+++ b/sysdeps/aarch64/fpu/sin_advsimd.c\n@@ -22,7 +22,7 @@\n static const struct data\n {\n   float64x2_t poly[7];\n-  float64x2_t range_val, inv_pi, shift, pi_1, pi_2, pi_3;\n+  float64x2_t range_val, inv_pi, pi_1, pi_2, pi_3;\n } data = {\n   .poly = { V2 (-0x1.555555555547bp-3), V2 (0x1.1111111108a4dp-7),\n \t    V2 (-0x1.a01a019936f27p-13), V2 (0x1.71de37a97d93ep-19),\n@@ -34,12 +34,13 @@ static const struct data\n   .pi_1 = V2 (0x1.921fb54442d18p+1),\n   .pi_2 = V2 (0x1.1a62633145c06p-53),\n   .pi_3 = V2 (0x1.c1cd129024e09p-106),\n-  .shift = V2 (0x1.8p52),\n };\n \n #if WANT_SIMD_EXCEPT\n-# define TinyBound v_u64 (0x3000000000000000) /* asuint64 (0x1p-255).  */\n-# define Thresh v_u64 (0x1160000000000000)    /* RangeVal - TinyBound.  */\n+/* asuint64(0x1p-253)), below which multiply by inv_pi underflows.  */\n+# define TinyBound v_u64 (0x3020000000000000)\n+/* RangeVal - TinyBound.  */\n+# define Thresh v_u64 (0x1160000000000000)\n #endif\n \n #define C(i) d->poly[i]\n@@ -72,16 +73,15 @@ float64x2_t VPCS_ATTR V_NAME_D1 (sin) (float64x2_t x)\n      fenv). These lanes will be fixed by special-case handler later.  */\n   uint64x2_t ir = vreinterpretq_u64_f64 (vabsq_f64 (x));\n   cmp = vcgeq_u64 (vsubq_u64 (ir, TinyBound), Thresh);\n-  r = vbslq_f64 (cmp, vreinterpretq_f64_u64 (cmp), x);\n+  r = vreinterpretq_f64_u64 (vbicq_u64 (vreinterpretq_u64_f64 (x), cmp));\n #else\n   r = x;\n   cmp = vcageq_f64 (x, d->range_val);\n #endif\n \n   /* n = rint(|x|/pi).  */\n-  n = vfmaq_f64 (d->shift, d->inv_pi, r);\n-  odd = vshlq_n_u64 (vreinterpretq_u64_f64 (n), 63);\n-  n = vsubq_f64 (n, d->shift);\n+  n = vrndaq_f64 (vmulq_f64 (r, d->inv_pi));\n+  odd = vshlq_n_u64 (vreinterpretq_u64_s64 (vcvtq_s64_f64 (n)), 63);\n \n   /* r = |x| - n*pi  (range reduction into -pi/2 .. pi/2).  */\n   r = vfmsq_f64 (r, d->pi_1, n);\ndiff --git a/sysdeps/aarch64/fpu/sinf_advsimd.c b/sysdeps/aarch64/fpu/sinf_advsimd.c\nindex 375dfc3331..6ee9a23d5b 100644\n--- a/sysdeps/aarch64/fpu/sinf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/sinf_advsimd.c\n@@ -22,7 +22,7 @@\n static const struct data\n {\n   float32x4_t poly[4];\n-  float32x4_t range_val, inv_pi, shift, pi_1, pi_2, pi_3;\n+  float32x4_t range_val, inv_pi, pi_1, pi_2, pi_3;\n } data = {\n   /* 1.886 ulp error.  */\n   .poly = { V4 (-0x1.555548p-3f), V4 (0x1.110df4p-7f), V4 (-0x1.9f42eap-13f),\n@@ -33,13 +33,14 @@ static const struct data\n   .pi_3 = V4 (-0x1.ee59dap-49f),\n \n   .inv_pi = V4 (0x1.45f306p-2f),\n-  .shift = V4 (0x1.8p+23f),\n   .range_val = V4 (0x1p20f)\n };\n \n #if WANT_SIMD_EXCEPT\n-# define TinyBound v_u32 (0x21000000) /* asuint32(0x1p-61f).  */\n-# define Thresh v_u32 (0x28800000)    /* RangeVal - TinyBound.  */\n+/* asuint32(0x1p-59f), below which multiply by inv_pi underflows.  */\n+# define TinyBound v_u32 (0x22000000)\n+/* RangeVal - TinyBound.  */\n+# define Thresh v_u32 (0x27800000)\n #endif\n \n #define C(i) d->poly[i]\n@@ -64,23 +65,22 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (sin) (float32x4_t x)\n   /* If fenv exceptions are to be triggered correctly, set any special lanes\n      to 1 (which is neutral w.r.t. fenv). These lanes will be fixed by\n      special-case handler later.  */\n-  r = vbslq_f32 (cmp, vreinterpretq_f32_u32 (cmp), x);\n+  r = vreinterpretq_f32_u32 (vbicq_u32 (vreinterpretq_u32_f32 (x), cmp));\n #else\n   r = x;\n   cmp = vcageq_f32 (x, d->range_val);\n #endif\n \n-  /* n = rint(|x|/pi) */\n-  n = vfmaq_f32 (d->shift, d->inv_pi, r);\n-  odd = vshlq_n_u32 (vreinterpretq_u32_f32 (n), 31);\n-  n = vsubq_f32 (n, d->shift);\n+  /* n = rint(|x|/pi).  */\n+  n = vrndaq_f32 (vmulq_f32 (r, d->inv_pi));\n+  odd = vshlq_n_u32 (vreinterpretq_u32_s32 (vcvtq_s32_f32 (n)), 31);\n \n-  /* r = |x| - n*pi  (range reduction into -pi/2 .. pi/2) */\n+  /* r = |x| - n*pi  (range reduction into -pi/2 .. pi/2).  */\n   r = vfmsq_f32 (r, d->pi_1, n);\n   r = vfmsq_f32 (r, d->pi_2, n);\n   r = vfmsq_f32 (r, d->pi_3, n);\n \n-  /* y = sin(r) */\n+  /* y = sin(r).  */\n   r2 = vmulq_f32 (r, r);\n   y = vfmaq_f32 (C (2), C (3), r2);\n   y = vfmaq_f32 (C (1), y, r2);\n\ncommit 9ff7559b274eb0dbce2cbcf87284c1d30d47a2d6\nAuthor: Joe Ramsay <Joe.Ramsay@arm.com>\nDate:   Mon Oct 28 14:58:35 2024 +0000\n\n    AArch64: Small optimisation in AdvSIMD erf and erfc\n    \n    In both routines, reduce register pressure such that GCC 14 emits no\n    spills for erf and fewer spills for erfc.  Also use more efficient\n    comparison for the special-case in erf.\n    \n    Benchtests show erf improves by 6.4%, erfc by 1.0%.\n    \n    (cherry picked from commit 1cf29fbc5be23db775d1dfa6b332ded6e6554252)\n\ndiff --git a/sysdeps/aarch64/fpu/erf_advsimd.c b/sysdeps/aarch64/fpu/erf_advsimd.c\nindex 19cbb7d0f4..c0116735e4 100644\n--- a/sysdeps/aarch64/fpu/erf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/erf_advsimd.c\n@@ -22,19 +22,21 @@\n static const struct data\n {\n   float64x2_t third;\n-  float64x2_t tenth, two_over_five, two_over_fifteen;\n-  float64x2_t two_over_nine, two_over_fortyfive;\n+  float64x2_t tenth, two_over_five, two_over_nine;\n+  double two_over_fifteen, two_over_fortyfive;\n   float64x2_t max, shift;\n+  uint64x2_t max_idx;\n #if WANT_SIMD_EXCEPT\n   float64x2_t tiny_bound, huge_bound, scale_minus_one;\n #endif\n } data = {\n+  .max_idx = V2 (768),\n   .third = V2 (0x1.5555555555556p-2), /* used to compute 2/3 and 1/6 too.  */\n-  .two_over_fifteen = V2 (0x1.1111111111111p-3),\n+  .two_over_fifteen = 0x1.1111111111111p-3,\n   .tenth = V2 (-0x1.999999999999ap-4),\n   .two_over_five = V2 (-0x1.999999999999ap-2),\n   .two_over_nine = V2 (-0x1.c71c71c71c71cp-3),\n-  .two_over_fortyfive = V2 (0x1.6c16c16c16c17p-5),\n+  .two_over_fortyfive = 0x1.6c16c16c16c17p-5,\n   .max = V2 (5.9921875), /* 6 - 1/128.  */\n   .shift = V2 (0x1p45),\n #if WANT_SIMD_EXCEPT\n@@ -87,8 +89,8 @@ float64x2_t VPCS_ATTR V_NAME_D1 (erf) (float64x2_t x)\n   float64x2_t a = vabsq_f64 (x);\n   /* Reciprocal conditions that do not catch NaNs so they can be used in BSLs\n      to return expected results.  */\n-  uint64x2_t a_le_max = vcleq_f64 (a, dat->max);\n-  uint64x2_t a_gt_max = vcgtq_f64 (a, dat->max);\n+  uint64x2_t a_le_max = vcaleq_f64 (x, dat->max);\n+  uint64x2_t a_gt_max = vcagtq_f64 (x, dat->max);\n \n #if WANT_SIMD_EXCEPT\n   /* |x| huge or tiny.  */\n@@ -115,7 +117,7 @@ float64x2_t VPCS_ATTR V_NAME_D1 (erf) (float64x2_t x)\n      segfault.  */\n   uint64x2_t i\n       = vsubq_u64 (vreinterpretq_u64_f64 (z), vreinterpretq_u64_f64 (shift));\n-  i = vbslq_u64 (a_le_max, i, v_u64 (768));\n+  i = vbslq_u64 (a_le_max, i, dat->max_idx);\n   struct entry e = lookup (i);\n \n   float64x2_t r = vsubq_f64 (z, shift);\n@@ -125,14 +127,19 @@ float64x2_t VPCS_ATTR V_NAME_D1 (erf) (float64x2_t x)\n   float64x2_t d2 = vmulq_f64 (d, d);\n   float64x2_t r2 = vmulq_f64 (r, r);\n \n+  float64x2_t two_over_fifteen_and_fortyfive\n+      = vld1q_f64 (&dat->two_over_fifteen);\n+\n   /* poly (d, r) = 1 + p1(r) * d + p2(r) * d^2 + ... + p5(r) * d^5.  */\n   float64x2_t p1 = r;\n   float64x2_t p2\n       = vfmsq_f64 (dat->third, r2, vaddq_f64 (dat->third, dat->third));\n   float64x2_t p3 = vmulq_f64 (r, vfmaq_f64 (v_f64 (-0.5), r2, dat->third));\n-  float64x2_t p4 = vfmaq_f64 (dat->two_over_five, r2, dat->two_over_fifteen);\n+  float64x2_t p4 = vfmaq_laneq_f64 (dat->two_over_five, r2,\n+\t\t\t\t    two_over_fifteen_and_fortyfive, 0);\n   p4 = vfmsq_f64 (dat->tenth, r2, p4);\n-  float64x2_t p5 = vfmaq_f64 (dat->two_over_nine, r2, dat->two_over_fortyfive);\n+  float64x2_t p5 = vfmaq_laneq_f64 (dat->two_over_nine, r2,\n+\t\t\t\t    two_over_fifteen_and_fortyfive, 1);\n   p5 = vmulq_f64 (r, vfmaq_f64 (vmulq_f64 (v_f64 (0.5), dat->third), r2, p5));\n \n   float64x2_t p34 = vfmaq_f64 (p3, d, p4);\ndiff --git a/sysdeps/aarch64/fpu/erfc_advsimd.c b/sysdeps/aarch64/fpu/erfc_advsimd.c\nindex f1b3bfe830..2f2f755c46 100644\n--- a/sysdeps/aarch64/fpu/erfc_advsimd.c\n+++ b/sysdeps/aarch64/fpu/erfc_advsimd.c\n@@ -24,8 +24,8 @@ static const struct data\n {\n   uint64x2_t offset, table_scale;\n   float64x2_t max, shift;\n-  float64x2_t p20, p40, p41, p42;\n-  float64x2_t p51, p52;\n+  float64x2_t p20, p40, p41, p51;\n+  double p42, p52;\n   double qr5[2], qr6[2], qr7[2], qr8[2], qr9[2];\n #if WANT_SIMD_EXCEPT\n   float64x2_t uflow_bound;\n@@ -41,9 +41,9 @@ static const struct data\n   .p20 = V2 (0x1.5555555555555p-2),  /* 1/3, used to compute 2/3 and 1/6.  */\n   .p40 = V2 (-0x1.999999999999ap-4), /* 1/10.  */\n   .p41 = V2 (-0x1.999999999999ap-2), /* 2/5.  */\n-  .p42 = V2 (0x1.1111111111111p-3),  /* 2/15.  */\n+  .p42 = 0x1.1111111111111p-3,\t     /* 2/15.  */\n   .p51 = V2 (-0x1.c71c71c71c71cp-3), /* 2/9.  */\n-  .p52 = V2 (0x1.6c16c16c16c17p-5),  /* 2/45.  */\n+  .p52 = 0x1.6c16c16c16c17p-5,\t     /* 2/45.  */\n   /* Qi = (i+1) / i, Ri = -2 * i / ((i+1)*(i+2)), for i = 5, ..., 9.  */\n   .qr5 = { 0x1.3333333333333p0, -0x1.e79e79e79e79ep-3 },\n   .qr6 = { 0x1.2aaaaaaaaaaabp0, -0x1.b6db6db6db6dbp-3 },\n@@ -157,9 +157,10 @@ float64x2_t V_NAME_D1 (erfc) (float64x2_t x)\n   float64x2_t p1 = r;\n   float64x2_t p2 = vfmsq_f64 (dat->p20, r2, vaddq_f64 (dat->p20, dat->p20));\n   float64x2_t p3 = vmulq_f64 (r, vfmaq_f64 (v_f64 (-0.5), r2, dat->p20));\n-  float64x2_t p4 = vfmaq_f64 (dat->p41, r2, dat->p42);\n+  float64x2_t p42_p52 = vld1q_f64 (&dat->p42);\n+  float64x2_t p4 = vfmaq_laneq_f64 (dat->p41, r2, p42_p52, 0);\n   p4 = vfmsq_f64 (dat->p40, r2, p4);\n-  float64x2_t p5 = vfmaq_f64 (dat->p51, r2, dat->p52);\n+  float64x2_t p5 = vfmaq_laneq_f64 (dat->p51, r2, p42_p52, 1);\n   p5 = vmulq_f64 (r, vfmaq_f64 (vmulq_f64 (v_f64 (0.5), dat->p20), r2, p5));\n   /* Compute p_i using recurrence relation:\n      p_{i+2} = (p_i + r * Q_{i+1} * p_{i+1}) * R_{i+1}.  */\n\ncommit 76c923fe9d09befc8131205659d99cb9ac97460a\nAuthor: Joe Ramsay <Joe.Ramsay@arm.com>\nDate:   Fri Nov 1 15:48:54 2024 +0000\n\n    AArch64: Remove SVE erf and erfc tables\n    \n    By using a combination of mask-and-add instead of the shift-based\n    index calculation the routines can share the same table as other\n    variants with no performance degradation.\n    \n    The tables change name because of other changes in downstream AOR.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit 2d82d781a539ce8e82178fc1fa2c99ae1884e7fe)\n\ndiff --git a/sysdeps/aarch64/fpu/Makefile b/sysdeps/aarch64/fpu/Makefile\nindex 234a6c457c..be8541f649 100644\n--- a/sysdeps/aarch64/fpu/Makefile\n+++ b/sysdeps/aarch64/fpu/Makefile\n@@ -41,8 +41,6 @@ libmvec-support = $(addsuffix f_advsimd,$(float-advsimd-funcs)) \\\n                   v_log10_data \\\n                   erf_data \\\n                   erff_data \\\n-                  sv_erf_data \\\n-                  sv_erff_data \\\n                   v_exp_tail_data \\\n                   erfc_data \\\n                   erfcf_data \\\ndiff --git a/sysdeps/aarch64/fpu/erf_advsimd.c b/sysdeps/aarch64/fpu/erf_advsimd.c\nindex c0116735e4..a48092e838 100644\n--- a/sysdeps/aarch64/fpu/erf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/erf_advsimd.c\n@@ -58,8 +58,8 @@ static inline struct entry\n lookup (uint64x2_t i)\n {\n   struct entry e;\n-  float64x2_t e1 = vld1q_f64 (&__erf_data.tab[vgetq_lane_u64 (i, 0)].erf),\n-\t      e2 = vld1q_f64 (&__erf_data.tab[vgetq_lane_u64 (i, 1)].erf);\n+  float64x2_t e1 = vld1q_f64 (&__v_erf_data.tab[vgetq_lane_u64 (i, 0)].erf),\n+\t      e2 = vld1q_f64 (&__v_erf_data.tab[vgetq_lane_u64 (i, 1)].erf);\n   e.erf = vuzp1q_f64 (e1, e2);\n   e.scale = vuzp2q_f64 (e1, e2);\n   return e;\ndiff --git a/sysdeps/aarch64/fpu/erf_data.c b/sysdeps/aarch64/fpu/erf_data.c\nindex 6d2dcd235c..ea01fad7ca 100644\n--- a/sysdeps/aarch64/fpu/erf_data.c\n+++ b/sysdeps/aarch64/fpu/erf_data.c\n@@ -19,14 +19,14 @@\n \n #include \"vecmath_config.h\"\n \n-/* Lookup table used in erf.\n+/* Lookup table used in vector erf.\n    For each possible rounded input r (multiples of 1/128), between\n    r = 0.0 and r = 6.0 (769 values):\n-   - the first entry __erff_data.tab.erf contains the values of erf(r),\n-   - the second entry __erff_data.tab.scale contains the values of\n+   - the first entry __v_erff_data.tab.erf contains the values of erf(r),\n+   - the second entry __v_erff_data.tab.scale contains the values of\n    2/sqrt(pi)*exp(-r^2). Note that indices 0 and 1 are never hit by the\n    algorithm, since lookup is performed only for x >= 1/64-1/512.  */\n-const struct erf_data __erf_data = {\n+const struct v_erf_data __v_erf_data = {\n   .tab = { { 0x0.0000000000000p+0, 0x1.20dd750429b6dp+0 },\n \t   { 0x1.20dbf3deb1340p-7, 0x1.20d8f1975c85dp+0 },\n \t   { 0x1.20d77083f17a0p-6, 0x1.20cb67bd452c7p+0 },\ndiff --git a/sysdeps/aarch64/fpu/erf_sve.c b/sysdeps/aarch64/fpu/erf_sve.c\nindex 7d51417406..671d55a02b 100644\n--- a/sysdeps/aarch64/fpu/erf_sve.c\n+++ b/sysdeps/aarch64/fpu/erf_sve.c\n@@ -67,14 +67,16 @@ svfloat64_t SV_NAME_D1 (erf) (svfloat64_t x, const svbool_t pg)\n   svfloat64_t a = svabs_x (pg, x);\n   svfloat64_t shift = sv_f64 (dat->shift);\n   svfloat64_t z = svadd_x (pg, a, shift);\n-  svuint64_t i\n-      = svsub_x (pg, svreinterpret_u64 (z), svreinterpret_u64 (shift));\n+  svuint64_t i = svand_x (pg, svreinterpret_u64 (z), 0xfff);\n+  i = svadd_x (pg, i, i);\n \n   /* Lookup without shortcut for small values but with predicate to avoid\n      segfault for large values and NaNs.  */\n   svfloat64_t r = svsub_x (pg, z, shift);\n-  svfloat64_t erfr = svld1_gather_index (a_lt_max, __sv_erf_data.erf, i);\n-  svfloat64_t scale = svld1_gather_index (a_lt_max, __sv_erf_data.scale, i);\n+  svfloat64_t erfr\n+      = svld1_gather_index (a_lt_max, &__v_erf_data.tab[0].erf, i);\n+  svfloat64_t scale\n+      = svld1_gather_index (a_lt_max, &__v_erf_data.tab[0].scale, i);\n \n   /* erf(x) ~ erf(r) + scale * d * poly (r, d).  */\n   svfloat64_t d = svsub_x (pg, a, r);\ndiff --git a/sysdeps/aarch64/fpu/erfc_advsimd.c b/sysdeps/aarch64/fpu/erfc_advsimd.c\nindex 2f2f755c46..d05eac61a2 100644\n--- a/sysdeps/aarch64/fpu/erfc_advsimd.c\n+++ b/sysdeps/aarch64/fpu/erfc_advsimd.c\n@@ -69,9 +69,9 @@ lookup (uint64x2_t i)\n {\n   struct entry e;\n   float64x2_t e1\n-      = vld1q_f64 (&__erfc_data.tab[vgetq_lane_u64 (i, 0) - Off].erfc);\n+      = vld1q_f64 (&__v_erfc_data.tab[vgetq_lane_u64 (i, 0) - Off].erfc);\n   float64x2_t e2\n-      = vld1q_f64 (&__erfc_data.tab[vgetq_lane_u64 (i, 1) - Off].erfc);\n+      = vld1q_f64 (&__v_erfc_data.tab[vgetq_lane_u64 (i, 1) - Off].erfc);\n   e.erfc = vuzp1q_f64 (e1, e2);\n   e.scale = vuzp2q_f64 (e1, e2);\n   return e;\ndiff --git a/sysdeps/aarch64/fpu/erfc_data.c b/sysdeps/aarch64/fpu/erfc_data.c\nindex 76a94e4681..8dc6a8c42c 100644\n--- a/sysdeps/aarch64/fpu/erfc_data.c\n+++ b/sysdeps/aarch64/fpu/erfc_data.c\n@@ -19,14 +19,14 @@\n \n #include \"vecmath_config.h\"\n \n-/* Lookup table used in erfc.\n+/* Lookup table used in vector erfc.\n    For each possible rounded input r (multiples of 1/128), between\n    r = 0.0 and r = ~27.0 (3488 values):\n-   - the first entry __erfc_data.tab.erfc contains the values of erfc(r),\n-   - the second entry __erfc_data.tab.scale contains the values of\n+   - the first entry __v_erfc_data.tab.erfc contains the values of erfc(r),\n+   - the second entry __v_erfc_data.tab.scale contains the values of\n    2/sqrt(pi)*exp(-r^2). Both values may go into subnormal range, therefore\n    they are scaled by a large enough value 2^128 (fits in 8bit).  */\n-const struct erfc_data __erfc_data = {\n+const struct v_erfc_data __v_erfc_data = {\n   .tab = { { 0x1p128, 0x1.20dd750429b6dp128 },\n \t   { 0x1.fb7c9030853b3p127, 0x1.20d8f1975c85dp128 },\n \t   { 0x1.f6f9447be0743p127, 0x1.20cb67bd452c7p128 },\ndiff --git a/sysdeps/aarch64/fpu/erfc_sve.c b/sysdeps/aarch64/fpu/erfc_sve.c\nindex c17d3e4484..703926ee41 100644\n--- a/sysdeps/aarch64/fpu/erfc_sve.c\n+++ b/sysdeps/aarch64/fpu/erfc_sve.c\n@@ -104,7 +104,7 @@ svfloat64_t SV_NAME_D1 (erfc) (svfloat64_t x, const svbool_t pg)\n \n   /* Lookup erfc(r) and 2/sqrt(pi)*exp(-r^2) in tables.  */\n   i = svadd_x (pg, i, i);\n-  const float64_t *p = &__erfc_data.tab[0].erfc - 2 * dat->off_arr;\n+  const float64_t *p = &__v_erfc_data.tab[0].erfc - 2 * dat->off_arr;\n   svfloat64_t erfcr = svld1_gather_index (pg, p, i);\n   svfloat64_t scale = svld1_gather_index (pg, p + 1, i);\n \ndiff --git a/sysdeps/aarch64/fpu/erfcf_advsimd.c b/sysdeps/aarch64/fpu/erfcf_advsimd.c\nindex ca5bc3ab33..59b0b0d64b 100644\n--- a/sysdeps/aarch64/fpu/erfcf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/erfcf_advsimd.c\n@@ -62,13 +62,13 @@ lookup (uint32x4_t i)\n {\n   struct entry e;\n   float32x2_t t0\n-      = vld1_f32 (&__erfcf_data.tab[vgetq_lane_u32 (i, 0) - Off].erfc);\n+      = vld1_f32 (&__v_erfcf_data.tab[vgetq_lane_u32 (i, 0) - Off].erfc);\n   float32x2_t t1\n-      = vld1_f32 (&__erfcf_data.tab[vgetq_lane_u32 (i, 1) - Off].erfc);\n+      = vld1_f32 (&__v_erfcf_data.tab[vgetq_lane_u32 (i, 1) - Off].erfc);\n   float32x2_t t2\n-      = vld1_f32 (&__erfcf_data.tab[vgetq_lane_u32 (i, 2) - Off].erfc);\n+      = vld1_f32 (&__v_erfcf_data.tab[vgetq_lane_u32 (i, 2) - Off].erfc);\n   float32x2_t t3\n-      = vld1_f32 (&__erfcf_data.tab[vgetq_lane_u32 (i, 3) - Off].erfc);\n+      = vld1_f32 (&__v_erfcf_data.tab[vgetq_lane_u32 (i, 3) - Off].erfc);\n   float32x4_t e1 = vcombine_f32 (t0, t1);\n   float32x4_t e2 = vcombine_f32 (t2, t3);\n   e.erfc = vuzp1q_f32 (e1, e2);\ndiff --git a/sysdeps/aarch64/fpu/erfcf_data.c b/sysdeps/aarch64/fpu/erfcf_data.c\nindex 77fb889a78..d45087bbb9 100644\n--- a/sysdeps/aarch64/fpu/erfcf_data.c\n+++ b/sysdeps/aarch64/fpu/erfcf_data.c\n@@ -19,14 +19,14 @@\n \n #include \"vecmath_config.h\"\n \n-/* Lookup table used in erfcf.\n+/* Lookup table used in vector erfcf.\n    For each possible rounded input r (multiples of 1/64), between\n    r = 0.0 and r = 10.0625 (645 values):\n-   - the first entry __erfcf_data.tab.erfc contains the values of erfc(r),\n-   - the second entry __erfcf_data.tab.scale contains the values of\n+   - the first entry __v_erfcf_data.tab.erfc contains the values of erfc(r),\n+   - the second entry __v_erfcf_data.tab.scale contains the values of\n    2/sqrt(pi)*exp(-r^2). Both values may go into subnormal range, therefore\n    they are scaled by a large enough value 2^47 (fits in 8 bits).  */\n-const struct erfcf_data __erfcf_data = {\n+const struct v_erfcf_data __v_erfcf_data = {\n   .tab = { { 0x1p47, 0x1.20dd76p47 },\n \t   { 0x1.f6f944p46, 0x1.20cb68p47 },\n \t   { 0x1.edf3aap46, 0x1.209546p47 },\ndiff --git a/sysdeps/aarch64/fpu/erfcf_sve.c b/sysdeps/aarch64/fpu/erfcf_sve.c\nindex 48d1677eb4..ecacb933ac 100644\n--- a/sysdeps/aarch64/fpu/erfcf_sve.c\n+++ b/sysdeps/aarch64/fpu/erfcf_sve.c\n@@ -77,7 +77,7 @@ svfloat32_t SV_NAME_F1 (erfc) (svfloat32_t x, const svbool_t pg)\n \n   /* Lookup erfc(r) and 2/sqrt(pi)*exp(-r^2) in tables.  */\n   i = svmul_x (pg, i, 2);\n-  const float32_t *p = &__erfcf_data.tab[0].erfc - 2 * dat->off_arr;\n+  const float32_t *p = &__v_erfcf_data.tab[0].erfc - 2 * dat->off_arr;\n   svfloat32_t erfcr = svld1_gather_index (pg, p, i);\n   svfloat32_t scale = svld1_gather_index (pg, p + 1, i);\n \ndiff --git a/sysdeps/aarch64/fpu/erff_advsimd.c b/sysdeps/aarch64/fpu/erff_advsimd.c\nindex f2fe6ff236..db39e789b6 100644\n--- a/sysdeps/aarch64/fpu/erff_advsimd.c\n+++ b/sysdeps/aarch64/fpu/erff_advsimd.c\n@@ -47,10 +47,10 @@ static inline struct entry\n lookup (uint32x4_t i)\n {\n   struct entry e;\n-  float32x2_t t0 = vld1_f32 (&__erff_data.tab[vgetq_lane_u32 (i, 0)].erf);\n-  float32x2_t t1 = vld1_f32 (&__erff_data.tab[vgetq_lane_u32 (i, 1)].erf);\n-  float32x2_t t2 = vld1_f32 (&__erff_data.tab[vgetq_lane_u32 (i, 2)].erf);\n-  float32x2_t t3 = vld1_f32 (&__erff_data.tab[vgetq_lane_u32 (i, 3)].erf);\n+  float32x2_t t0 = vld1_f32 (&__v_erff_data.tab[vgetq_lane_u32 (i, 0)].erf);\n+  float32x2_t t1 = vld1_f32 (&__v_erff_data.tab[vgetq_lane_u32 (i, 1)].erf);\n+  float32x2_t t2 = vld1_f32 (&__v_erff_data.tab[vgetq_lane_u32 (i, 2)].erf);\n+  float32x2_t t3 = vld1_f32 (&__v_erff_data.tab[vgetq_lane_u32 (i, 3)].erf);\n   float32x4_t e1 = vcombine_f32 (t0, t1);\n   float32x4_t e2 = vcombine_f32 (t2, t3);\n   e.erf = vuzp1q_f32 (e1, e2);\ndiff --git a/sysdeps/aarch64/fpu/erff_data.c b/sysdeps/aarch64/fpu/erff_data.c\nindex 9a32940915..da38aed205 100644\n--- a/sysdeps/aarch64/fpu/erff_data.c\n+++ b/sysdeps/aarch64/fpu/erff_data.c\n@@ -19,14 +19,14 @@\n \n #include \"vecmath_config.h\"\n \n-/* Lookup table used in erff.\n+/* Lookup table used in vector erff.\n    For each possible rounded input r (multiples of 1/128), between\n    r = 0.0 and r = 4.0 (513 values):\n-   - the first entry __erff_data.tab.erf contains the values of erf(r),\n-   - the second entry __erff_data.tab.scale contains the values of\n+   - the first entry __v_erff_data.tab.erf contains the values of erf(r),\n+   - the second entry __v_erff_data.tab.scale contains the values of\n    2/sqrt(pi)*exp(-r^2). Note that indices 0 and 1 are never hit by the\n    algorithm, since lookup is performed only for x >= 1/64-1/512.  */\n-const struct erff_data __erff_data = {\n+const struct v_erff_data __v_erff_data = {\n   .tab = { { 0x0.000000p+0, 0x1.20dd76p+0 },\n \t   { 0x1.20dbf4p-7, 0x1.20d8f2p+0 },\n \t   { 0x1.20d770p-6, 0x1.20cb68p+0 },\ndiff --git a/sysdeps/aarch64/fpu/erff_sve.c b/sysdeps/aarch64/fpu/erff_sve.c\nindex 38f00db9be..0e382eb09a 100644\n--- a/sysdeps/aarch64/fpu/erff_sve.c\n+++ b/sysdeps/aarch64/fpu/erff_sve.c\n@@ -62,18 +62,17 @@ svfloat32_t SV_NAME_F1 (erf) (svfloat32_t x, const svbool_t pg)\n \n   svfloat32_t shift = sv_f32 (dat->shift);\n   svfloat32_t z = svadd_x (pg, a, shift);\n-  svuint32_t i\n-      = svsub_x (pg, svreinterpret_u32 (z), svreinterpret_u32 (shift));\n-\n-  /* Saturate lookup index.  */\n-  i = svsel (a_ge_max, sv_u32 (512), i);\n+  svuint32_t i = svand_x (pg, svreinterpret_u32 (z), 0xfff);\n+  i = svadd_x (pg, i, i);\n \n   /* r and erf(r) set to 0 for |x| below min.  */\n   svfloat32_t r = svsub_z (a_gt_min, z, shift);\n-  svfloat32_t erfr = svld1_gather_index (a_gt_min, __sv_erff_data.erf, i);\n+  svfloat32_t erfr\n+      = svld1_gather_index (a_gt_min, &__v_erff_data.tab[0].erf, i);\n \n   /* scale set to 2/sqrt(pi) for |x| below min.  */\n-  svfloat32_t scale = svld1_gather_index (a_gt_min, __sv_erff_data.scale, i);\n+  svfloat32_t scale\n+      = svld1_gather_index (a_gt_min, &__v_erff_data.tab[0].scale, i);\n   scale = svsel (a_gt_min, scale, sv_f32 (dat->scale));\n \n   /* erf(x) ~ erf(r) + scale * d * (1 - r * d + 1/3 * d^2).  */\ndiff --git a/sysdeps/aarch64/fpu/sv_erf_data.c b/sysdeps/aarch64/fpu/sv_erf_data.c\ndeleted file mode 100644\nindex a53878f893..0000000000\n--- a/sysdeps/aarch64/fpu/sv_erf_data.c\n+++ /dev/null\n@@ -1,1570 +0,0 @@\n-/* Table for SVE erf approximation\n-\n-   Copyright (C) 2024 Free Software Foundation, Inc.\n-   This file is part of the GNU C Library.\n-\n-   The GNU C Library is free software; you can redistribute it and/or\n-   modify it under the terms of the GNU Lesser General Public\n-   License as published by the Free Software Foundation; either\n-   version 2.1 of the License, or (at your option) any later version.\n-\n-   The GNU C Library is distributed in the hope that it will be useful,\n-   but WITHOUT ANY WARRANTY; without even the implied warranty of\n-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n-   Lesser General Public License for more details.\n-\n-   You should have received a copy of the GNU Lesser General Public\n-   License along with the GNU C Library; if not, see\n-   <https://www.gnu.org/licenses/>.  */\n-\n-#include \"vecmath_config.h\"\n-\n-/* Lookup table used in vector erf.\n-   For each possible rounded input r (multiples of 1/128), between\n-   r = 0.0 and r = 6.0 (769 values):\n-   - the first entry __erf_data.tab.erf contains the values of erf(r),\n-   - the second entry __erf_data.tab.scale contains the values of\n-   2/sqrt(pi)*exp(-r^2). Note that indices 0 and 1 are never hit by the\n-   algorithm, since lookup is performed only for x >= 1/64-1/512.  */\n-const struct sv_erf_data __sv_erf_data = {\n-  .erf = { 0x0.0000000000000p+0,\n-\t   0x1.20dbf3deb1340p-7,\n-\t   0x1.20d77083f17a0p-6,\n-\t   0x1.b137e0cf584dcp-6,\n-\t   0x1.20c5645dd2538p-5,\n-\t   0x1.68e5d3bbc9526p-5,\n-\t   0x1.b0fafef135745p-5,\n-\t   0x1.f902a77bd3821p-5,\n-\t   0x1.207d480e90658p-4,\n-\t   0x1.44703e87e8593p-4,\n-\t   0x1.68591a1e83b5dp-4,\n-\t   0x1.8c36beb8a8d23p-4,\n-\t   0x1.b0081148a873ap-4,\n-\t   0x1.d3cbf7e70a4b3p-4,\n-\t   0x1.f78159ec8bb50p-4,\n-\t   0x1.0d939005f65e5p-3,\n-\t   0x1.1f5e1a35c3b89p-3,\n-\t   0x1.311fc15f56d14p-3,\n-\t   0x1.42d7fc2f64959p-3,\n-\t   0x1.548642321d7c6p-3,\n-\t   0x1.662a0bdf7a89fp-3,\n-\t   0x1.77c2d2a765f9ep-3,\n-\t   0x1.895010fdbdbfdp-3,\n-\t   0x1.9ad142662e14dp-3,\n-\t   0x1.ac45e37fe2526p-3,\n-\t   0x1.bdad72110a648p-3,\n-\t   0x1.cf076d1233237p-3,\n-\t   0x1.e05354b96ff36p-3,\n-\t   0x1.f190aa85540e2p-3,\n-\t   0x1.015f78a3dcf3dp-2,\n-\t   0x1.09eed6982b948p-2,\n-\t   0x1.127631eb8de32p-2,\n-\t   0x1.1af54e232d609p-2,\n-\t   0x1.236bef825d9a2p-2,\n-\t   0x1.2bd9db0f7827fp-2,\n-\t   0x1.343ed6989b7d9p-2,\n-\t   0x1.3c9aa8b84bedap-2,\n-\t   0x1.44ed18d9f6462p-2,\n-\t   0x1.4d35ef3e5372ep-2,\n-\t   0x1.5574f4ffac98ep-2,\n-\t   0x1.5da9f415ff23fp-2,\n-\t   0x1.65d4b75b00471p-2,\n-\t   0x1.6df50a8dff772p-2,\n-\t   0x1.760aba57a76bfp-2,\n-\t   0x1.7e15944d9d3e4p-2,\n-\t   0x1.861566f5fd3c0p-2,\n-\t   0x1.8e0a01cab516bp-2,\n-\t   0x1.95f3353cbb146p-2,\n-\t   0x1.9dd0d2b721f39p-2,\n-\t   0x1.a5a2aca209394p-2,\n-\t   0x1.ad68966569a87p-2,\n-\t   0x1.b522646bbda68p-2,\n-\t   0x1.bccfec24855b8p-2,\n-\t   0x1.c4710406a65fcp-2,\n-\t   0x1.cc058392a6d2dp-2,\n-\t   0x1.d38d4354c3bd0p-2,\n-\t   0x1.db081ce6e2a48p-2,\n-\t   0x1.e275eaf25e458p-2,\n-\t   0x1.e9d68931ae650p-2,\n-\t   0x1.f129d471eabb1p-2,\n-\t   0x1.f86faa9428f9dp-2,\n-\t   0x1.ffa7ea8eb5fd0p-2,\n-\t   0x1.03693a371519cp-1,\n-\t   0x1.06f794ab2cae7p-1,\n-\t   0x1.0a7ef5c18edd2p-1,\n-\t   0x1.0dff4f247f6c6p-1,\n-\t   0x1.1178930ada115p-1,\n-\t   0x1.14eab43841b55p-1,\n-\t   0x1.1855a5fd3dd50p-1,\n-\t   0x1.1bb95c3746199p-1,\n-\t   0x1.1f15cb50bc4dep-1,\n-\t   0x1.226ae840d4d70p-1,\n-\t   0x1.25b8a88b6dd7fp-1,\n-\t   0x1.28ff0240d52cdp-1,\n-\t   0x1.2c3debfd7d6c1p-1,\n-\t   0x1.2f755ce9a21f4p-1,\n-\t   0x1.32a54cb8db67bp-1,\n-\t   0x1.35cdb3a9a144dp-1,\n-\t   0x1.38ee8a84beb71p-1,\n-\t   0x1.3c07ca9cb4f9ep-1,\n-\t   0x1.3f196dcd0f135p-1,\n-\t   0x1.42236e79a5fa6p-1,\n-\t   0x1.4525c78dd5966p-1,\n-\t   0x1.4820747ba2dc2p-1,\n-\t   0x1.4b13713ad3513p-1,\n-\t   0x1.4dfeba47f63ccp-1,\n-\t   0x1.50e24ca35fd2cp-1,\n-\t   0x1.53be25d016a4fp-1,\n-\t   0x1.569243d2b3a9bp-1,\n-\t   0x1.595ea53035283p-1,\n-\t   0x1.5c2348ecc4dc3p-1,\n-\t   0x1.5ee02e8a71a53p-1,\n-\t   0x1.61955607dd15dp-1,\n-\t   0x1.6442bfdedd397p-1,\n-\t   0x1.66e86d0312e82p-1,\n-\t   0x1.69865ee075011p-1,\n-\t   0x1.6c1c9759d0e5fp-1,\n-\t   0x1.6eab18c74091bp-1,\n-\t   0x1.7131e5f496a5ap-1,\n-\t   0x1.73b1021fc0cb8p-1,\n-\t   0x1.762870f720c6fp-1,\n-\t   0x1.78983697dc96fp-1,\n-\t   0x1.7b00578c26037p-1,\n-\t   0x1.7d60d8c979f7bp-1,\n-\t   0x1.7fb9bfaed8078p-1,\n-\t   0x1.820b1202f27fbp-1,\n-\t   0x1.8454d5f25760dp-1,\n-\t   0x1.8697120d92a4ap-1,\n-\t   0x1.88d1cd474a2e0p-1,\n-\t   0x1.8b050ef253c37p-1,\n-\t   0x1.8d30debfc572ep-1,\n-\t   0x1.8f5544bd00c04p-1,\n-\t   0x1.91724951b8fc6p-1,\n-\t   0x1.9387f53df5238p-1,\n-\t   0x1.959651980da31p-1,\n-\t   0x1.979d67caa6631p-1,\n-\t   0x1.999d4192a5715p-1,\n-\t   0x1.9b95e8fd26abap-1,\n-\t   0x1.9d8768656cc42p-1,\n-\t   0x1.9f71ca72cffb6p-1,\n-\t   0x1.a1551a16aaeafp-1,\n-\t   0x1.a331628a45b92p-1,\n-\t   0x1.a506af4cc00f4p-1,\n-\t   0x1.a6d50c20fa293p-1,\n-\t   0x1.a89c850b7d54dp-1,\n-\t   0x1.aa5d265064366p-1,\n-\t   0x1.ac16fc7143263p-1,\n-\t   0x1.adca142b10f98p-1,\n-\t   0x1.af767a741088bp-1,\n-\t   0x1.b11c3c79bb424p-1,\n-\t   0x1.b2bb679ead19cp-1,\n-\t   0x1.b4540978921eep-1,\n-\t   0x1.b5e62fce16095p-1,\n-\t   0x1.b771e894d602ep-1,\n-\t   0x1.b8f741ef54f83p-1,\n-\t   0x1.ba764a2af2b78p-1,\n-\t   0x1.bbef0fbde6221p-1,\n-\t   0x1.bd61a1453ab44p-1,\n-\t   0x1.bece0d82d1a5cp-1,\n-\t   0x1.c034635b66e23p-1,\n-\t   0x1.c194b1d49a184p-1,\n-\t   0x1.c2ef0812fc1bdp-1,\n-\t   0x1.c443755820d64p-1,\n-\t   0x1.c5920900b5fd1p-1,\n-\t   0x1.c6dad2829ec62p-1,\n-\t   0x1.c81de16b14cefp-1,\n-\t   0x1.c95b455cce69dp-1,\n-\t   0x1.ca930e0e2a825p-1,\n-\t   0x1.cbc54b476248dp-1,\n-\t   0x1.ccf20ce0c0d27p-1,\n-\t   0x1.ce1962c0e0d8bp-1,\n-\t   0x1.cf3b5cdaf0c39p-1,\n-\t   0x1.d0580b2cfd249p-1,\n-\t   0x1.d16f7dbe41ca0p-1,\n-\t   0x1.d281c49d818d0p-1,\n-\t   0x1.d38eefdf64fddp-1,\n-\t   0x1.d4970f9ce00d9p-1,\n-\t   0x1.d59a33f19ed42p-1,\n-\t   0x1.d6986cfa798e7p-1,\n-\t   0x1.d791cad3eff01p-1,\n-\t   0x1.d8865d98abe01p-1,\n-\t   0x1.d97635600bb89p-1,\n-\t   0x1.da61623cb41e0p-1,\n-\t   0x1.db47f43b2980dp-1,\n-\t   0x1.dc29fb60715afp-1,\n-\t   0x1.dd0787a8bb39dp-1,\n-\t   0x1.dde0a90611a0dp-1,\n-\t   0x1.deb56f5f12d28p-1,\n-\t   0x1.df85ea8db188ep-1,\n-\t   0x1.e0522a5dfda73p-1,\n-\t   0x1.e11a3e8cf4eb8p-1,\n-\t   0x1.e1de36c75ba58p-1,\n-\t   0x1.e29e22a89d766p-1,\n-\t   0x1.e35a11b9b61cep-1,\n-\t   0x1.e4121370224ccp-1,\n-\t   0x1.e4c6372cd8927p-1,\n-\t   0x1.e5768c3b4a3fcp-1,\n-\t   0x1.e62321d06c5e0p-1,\n-\t   0x1.e6cc0709c8a0dp-1,\n-\t   0x1.e7714aec96534p-1,\n-\t   0x1.e812fc64db369p-1,\n-\t   0x1.e8b12a44944a8p-1,\n-\t   0x1.e94be342e6743p-1,\n-\t   0x1.e9e335fb56f87p-1,\n-\t   0x1.ea7730ed0bbb9p-1,\n-\t   0x1.eb07e27a133aap-1,\n-\t   0x1.eb9558e6b42cep-1,\n-\t   0x1.ec1fa258c4beap-1,\n-\t   0x1.eca6ccd709544p-1,\n-\t   0x1.ed2ae6489ac1ep-1,\n-\t   0x1.edabfc7453e63p-1,\n-\t   0x1.ee2a1d004692cp-1,\n-\t   0x1.eea5557137ae0p-1,\n-\t   0x1.ef1db32a2277cp-1,\n-\t   0x1.ef93436bc2daap-1,\n-\t   0x1.f006135426b26p-1,\n-\t   0x1.f0762fde45ee6p-1,\n-\t   0x1.f0e3a5e1a1788p-1,\n-\t   0x1.f14e8211e8c55p-1,\n-\t   0x1.f1b6d0fea5f4dp-1,\n-\t   0x1.f21c9f12f0677p-1,\n-\t   0x1.f27ff89525acfp-1,\n-\t   0x1.f2e0e9a6a8b09p-1,\n-\t   0x1.f33f7e43a706bp-1,\n-\t   0x1.f39bc242e43e6p-1,\n-\t   0x1.f3f5c1558b19ep-1,\n-\t   0x1.f44d870704911p-1,\n-\t   0x1.f4a31ebcd47dfp-1,\n-\t   0x1.f4f693b67bd77p-1,\n-\t   0x1.f547f10d60597p-1,\n-\t   0x1.f59741b4b97cfp-1,\n-\t   0x1.f5e4907982a07p-1,\n-\t   0x1.f62fe80272419p-1,\n-\t   0x1.f67952cff6282p-1,\n-\t   0x1.f6c0db3c34641p-1,\n-\t   0x1.f7068b7b10fd9p-1,\n-\t   0x1.f74a6d9a38383p-1,\n-\t   0x1.f78c8b812d498p-1,\n-\t   0x1.f7cceef15d631p-1,\n-\t   0x1.f80ba18636f07p-1,\n-\t   0x1.f848acb544e95p-1,\n-\t   0x1.f88419ce4e184p-1,\n-\t   0x1.f8bdf1fb78370p-1,\n-\t   0x1.f8f63e416ebffp-1,\n-\t   0x1.f92d077f8d56dp-1,\n-\t   0x1.f96256700da8ep-1,\n-\t   0x1.f99633a838a57p-1,\n-\t   0x1.f9c8a7989af0dp-1,\n-\t   0x1.f9f9ba8d3c733p-1,\n-\t   0x1.fa2974addae45p-1,\n-\t   0x1.fa57ddfe27376p-1,\n-\t   0x1.fa84fe5e05c8dp-1,\n-\t   0x1.fab0dd89d1309p-1,\n-\t   0x1.fadb831a9f9c3p-1,\n-\t   0x1.fb04f6868a944p-1,\n-\t   0x1.fb2d3f20f9101p-1,\n-\t   0x1.fb54641aebbc9p-1,\n-\t   0x1.fb7a6c834b5a2p-1,\n-\t   0x1.fb9f5f4739170p-1,\n-\t   0x1.fbc3433260ca5p-1,\n-\t   0x1.fbe61eef4cf6ap-1,\n-\t   0x1.fc07f907bc794p-1,\n-\t   0x1.fc28d7e4f9cd0p-1,\n-\t   0x1.fc48c1d033c7ap-1,\n-\t   0x1.fc67bcf2d7b8fp-1,\n-\t   0x1.fc85cf56ecd38p-1,\n-\t   0x1.fca2fee770c79p-1,\n-\t   0x1.fcbf5170b578bp-1,\n-\t   0x1.fcdacca0bfb73p-1,\n-\t   0x1.fcf57607a6e7cp-1,\n-\t   0x1.fd0f5317f582fp-1,\n-\t   0x1.fd2869270a56fp-1,\n-\t   0x1.fd40bd6d7a785p-1,\n-\t   0x1.fd58550773cb5p-1,\n-\t   0x1.fd6f34f52013ap-1,\n-\t   0x1.fd85621b0876dp-1,\n-\t   0x1.fd9ae142795e3p-1,\n-\t   0x1.fdafb719e6a69p-1,\n-\t   0x1.fdc3e835500b3p-1,\n-\t   0x1.fdd7790ea5bc0p-1,\n-\t   0x1.fdea6e062d0c9p-1,\n-\t   0x1.fdfccb62e52d3p-1,\n-\t   0x1.fe0e9552ebdd6p-1,\n-\t   0x1.fe1fcfebe2083p-1,\n-\t   0x1.fe307f2b503d0p-1,\n-\t   0x1.fe40a6f70af4bp-1,\n-\t   0x1.fe504b1d9696cp-1,\n-\t   0x1.fe5f6f568b301p-1,\n-\t   0x1.fe6e1742f7cf6p-1,\n-\t   0x1.fe7c466dc57a1p-1,\n-\t   0x1.fe8a004c19ae6p-1,\n-\t   0x1.fe97483db8670p-1,\n-\t   0x1.fea4218d6594ap-1,\n-\t   0x1.feb08f7146046p-1,\n-\t   0x1.febc950b3fa75p-1,\n-\t   0x1.fec835695932ep-1,\n-\t   0x1.fed37386190fbp-1,\n-\t   0x1.fede5248e38f4p-1,\n-\t   0x1.fee8d486585eep-1,\n-\t   0x1.fef2fd00af31ap-1,\n-\t   0x1.fefcce6813974p-1,\n-\t   0x1.ff064b5afffbep-1,\n-\t   0x1.ff0f766697c76p-1,\n-\t   0x1.ff18520700971p-1,\n-\t   0x1.ff20e0a7ba8c2p-1,\n-\t   0x1.ff2924a3f7a83p-1,\n-\t   0x1.ff312046f2339p-1,\n-\t   0x1.ff38d5cc4227fp-1,\n-\t   0x1.ff404760319b4p-1,\n-\t   0x1.ff47772010262p-1,\n-\t   0x1.ff4e671a85425p-1,\n-\t   0x1.ff55194fe19dfp-1,\n-\t   0x1.ff5b8fb26f5f6p-1,\n-\t   0x1.ff61cc26c1578p-1,\n-\t   0x1.ff67d08401202p-1,\n-\t   0x1.ff6d9e943c231p-1,\n-\t   0x1.ff733814af88cp-1,\n-\t   0x1.ff789eb6130c9p-1,\n-\t   0x1.ff7dd41ce2b4dp-1,\n-\t   0x1.ff82d9e1a76d8p-1,\n-\t   0x1.ff87b1913e853p-1,\n-\t   0x1.ff8c5cad200a5p-1,\n-\t   0x1.ff90dcaba4096p-1,\n-\t   0x1.ff9532f846ab0p-1,\n-\t   0x1.ff9960f3eb327p-1,\n-\t   0x1.ff9d67f51ddbap-1,\n-\t   0x1.ffa14948549a7p-1,\n-\t   0x1.ffa506302ebaep-1,\n-\t   0x1.ffa89fe5b3625p-1,\n-\t   0x1.ffac17988ef4bp-1,\n-\t   0x1.ffaf6e6f4f5c0p-1,\n-\t   0x1.ffb2a5879f35ep-1,\n-\t   0x1.ffb5bdf67fe6fp-1,\n-\t   0x1.ffb8b8c88295fp-1,\n-\t   0x1.ffbb970200110p-1,\n-\t   0x1.ffbe599f4f9d9p-1,\n-\t   0x1.ffc10194fcb64p-1,\n-\t   0x1.ffc38fcffbb7cp-1,\n-\t   0x1.ffc60535dd7f5p-1,\n-\t   0x1.ffc862a501fd7p-1,\n-\t   0x1.ffcaa8f4c9beap-1,\n-\t   0x1.ffccd8f5c66d1p-1,\n-\t   0x1.ffcef371ea4d7p-1,\n-\t   0x1.ffd0f92cb6ba7p-1,\n-\t   0x1.ffd2eae369a07p-1,\n-\t   0x1.ffd4c94d29fdbp-1,\n-\t   0x1.ffd6951b33686p-1,\n-\t   0x1.ffd84ef9009eep-1,\n-\t   0x1.ffd9f78c7524ap-1,\n-\t   0x1.ffdb8f7605ee7p-1,\n-\t   0x1.ffdd1750e1220p-1,\n-\t   0x1.ffde8fb314ebfp-1,\n-\t   0x1.ffdff92db56e5p-1,\n-\t   0x1.ffe1544d01ccbp-1,\n-\t   0x1.ffe2a1988857cp-1,\n-\t   0x1.ffe3e19349dc7p-1,\n-\t   0x1.ffe514bbdc197p-1,\n-\t   0x1.ffe63b8c8b5f7p-1,\n-\t   0x1.ffe7567b7b5e1p-1,\n-\t   0x1.ffe865fac722bp-1,\n-\t   0x1.ffe96a78a04a9p-1,\n-\t   0x1.ffea645f6d6dap-1,\n-\t   0x1.ffeb5415e7c44p-1,\n-\t   0x1.ffec39ff380b9p-1,\n-\t   0x1.ffed167b12ac2p-1,\n-\t   0x1.ffede9e5d3262p-1,\n-\t   0x1.ffeeb49896c6dp-1,\n-\t   0x1.ffef76e956a9fp-1,\n-\t   0x1.fff0312b010b5p-1,\n-\t   0x1.fff0e3ad91ec2p-1,\n-\t   0x1.fff18ebe2b0e1p-1,\n-\t   0x1.fff232a72b48ep-1,\n-\t   0x1.fff2cfb0453d9p-1,\n-\t   0x1.fff3661e9569dp-1,\n-\t   0x1.fff3f634b79f9p-1,\n-\t   0x1.fff48032dbe40p-1,\n-\t   0x1.fff50456dab8cp-1,\n-\t   0x1.fff582dc48d30p-1,\n-\t   0x1.fff5fbfc8a439p-1,\n-\t   0x1.fff66feee5129p-1,\n-\t   0x1.fff6dee89352ep-1,\n-\t   0x1.fff7491cd4af6p-1,\n-\t   0x1.fff7aebcff755p-1,\n-\t   0x1.fff80ff8911fdp-1,\n-\t   0x1.fff86cfd3e657p-1,\n-\t   0x1.fff8c5f702ccfp-1,\n-\t   0x1.fff91b102fca8p-1,\n-\t   0x1.fff96c717b695p-1,\n-\t   0x1.fff9ba420e834p-1,\n-\t   0x1.fffa04a7928b1p-1,\n-\t   0x1.fffa4bc63ee9ap-1,\n-\t   0x1.fffa8fc0e5f33p-1,\n-\t   0x1.fffad0b901755p-1,\n-\t   0x1.fffb0ecebee1bp-1,\n-\t   0x1.fffb4a210b172p-1,\n-\t   0x1.fffb82cd9dcbfp-1,\n-\t   0x1.fffbb8f1049c6p-1,\n-\t   0x1.fffbeca6adbe9p-1,\n-\t   0x1.fffc1e08f25f5p-1,\n-\t   0x1.fffc4d3120aa1p-1,\n-\t   0x1.fffc7a37857d2p-1,\n-\t   0x1.fffca53375ce3p-1,\n-\t   0x1.fffcce3b57bffp-1,\n-\t   0x1.fffcf564ab6b7p-1,\n-\t   0x1.fffd1ac4135f9p-1,\n-\t   0x1.fffd3e6d5cd87p-1,\n-\t   0x1.fffd607387b07p-1,\n-\t   0x1.fffd80e8ce0dap-1,\n-\t   0x1.fffd9fdeabccep-1,\n-\t   0x1.fffdbd65e5ad0p-1,\n-\t   0x1.fffdd98e903b2p-1,\n-\t   0x1.fffdf46816833p-1,\n-\t   0x1.fffe0e0140857p-1,\n-\t   0x1.fffe26683972ap-1,\n-\t   0x1.fffe3daa95b18p-1,\n-\t   0x1.fffe53d558ae9p-1,\n-\t   0x1.fffe68f4fa777p-1,\n-\t   0x1.fffe7d156d244p-1,\n-\t   0x1.fffe904222101p-1,\n-\t   0x1.fffea2860ee1ep-1,\n-\t   0x1.fffeb3ebb267bp-1,\n-\t   0x1.fffec47d19457p-1,\n-\t   0x1.fffed443e2787p-1,\n-\t   0x1.fffee34943b15p-1,\n-\t   0x1.fffef1960d85dp-1,\n-\t   0x1.fffeff32af7afp-1,\n-\t   0x1.ffff0c273bea2p-1,\n-\t   0x1.ffff187b6bc0ep-1,\n-\t   0x1.ffff2436a21dcp-1,\n-\t   0x1.ffff2f5fefcaap-1,\n-\t   0x1.ffff39fe16963p-1,\n-\t   0x1.ffff44178c8d2p-1,\n-\t   0x1.ffff4db27f146p-1,\n-\t   0x1.ffff56d4d5e5ep-1,\n-\t   0x1.ffff5f8435efcp-1,\n-\t   0x1.ffff67c604180p-1,\n-\t   0x1.ffff6f9f67e55p-1,\n-\t   0x1.ffff77154e0d6p-1,\n-\t   0x1.ffff7e2c6aea2p-1,\n-\t   0x1.ffff84e93cd75p-1,\n-\t   0x1.ffff8b500e77cp-1,\n-\t   0x1.ffff9164f8e46p-1,\n-\t   0x1.ffff972be5c59p-1,\n-\t   0x1.ffff9ca891572p-1,\n-\t   0x1.ffffa1de8c582p-1,\n-\t   0x1.ffffa6d13de73p-1,\n-\t   0x1.ffffab83e54b8p-1,\n-\t   0x1.ffffaff99bac4p-1,\n-\t   0x1.ffffb43555b5fp-1,\n-\t   0x1.ffffb839e52f3p-1,\n-\t   0x1.ffffbc09fa7cdp-1,\n-\t   0x1.ffffbfa82616bp-1,\n-\t   0x1.ffffc316d9ed0p-1,\n-\t   0x1.ffffc6586abf6p-1,\n-\t   0x1.ffffc96f1165ep-1,\n-\t   0x1.ffffcc5cec0c1p-1,\n-\t   0x1.ffffcf23ff5fcp-1,\n-\t   0x1.ffffd1c637b2bp-1,\n-\t   0x1.ffffd4456a10dp-1,\n-\t   0x1.ffffd6a3554a1p-1,\n-\t   0x1.ffffd8e1a2f22p-1,\n-\t   0x1.ffffdb01e8546p-1,\n-\t   0x1.ffffdd05a75eap-1,\n-\t   0x1.ffffdeee4f810p-1,\n-\t   0x1.ffffe0bd3e852p-1,\n-\t   0x1.ffffe273c15b7p-1,\n-\t   0x1.ffffe41314e06p-1,\n-\t   0x1.ffffe59c6698bp-1,\n-\t   0x1.ffffe710d565ep-1,\n-\t   0x1.ffffe8717232dp-1,\n-\t   0x1.ffffe9bf4098cp-1,\n-\t   0x1.ffffeafb377d5p-1,\n-\t   0x1.ffffec2641a9ep-1,\n-\t   0x1.ffffed413e5b7p-1,\n-\t   0x1.ffffee4d01cd6p-1,\n-\t   0x1.ffffef4a55bd4p-1,\n-\t   0x1.fffff039f9e8fp-1,\n-\t   0x1.fffff11ca4876p-1,\n-\t   0x1.fffff1f302bc1p-1,\n-\t   0x1.fffff2bdb904dp-1,\n-\t   0x1.fffff37d63a36p-1,\n-\t   0x1.fffff43297019p-1,\n-\t   0x1.fffff4dde0118p-1,\n-\t   0x1.fffff57fc4a95p-1,\n-\t   0x1.fffff618c3da6p-1,\n-\t   0x1.fffff6a956450p-1,\n-\t   0x1.fffff731ee681p-1,\n-\t   0x1.fffff7b2f8ed6p-1,\n-\t   0x1.fffff82cdcf1bp-1,\n-\t   0x1.fffff89ffc4aap-1,\n-\t   0x1.fffff90cb3c81p-1,\n-\t   0x1.fffff9735b73bp-1,\n-\t   0x1.fffff9d446cccp-1,\n-\t   0x1.fffffa2fc5015p-1,\n-\t   0x1.fffffa8621251p-1,\n-\t   0x1.fffffad7a2652p-1,\n-\t   0x1.fffffb248c39dp-1,\n-\t   0x1.fffffb6d1e95dp-1,\n-\t   0x1.fffffbb196132p-1,\n-\t   0x1.fffffbf22c1e2p-1,\n-\t   0x1.fffffc2f171e3p-1,\n-\t   0x1.fffffc688a9cfp-1,\n-\t   0x1.fffffc9eb76acp-1,\n-\t   0x1.fffffcd1cbc28p-1,\n-\t   0x1.fffffd01f36afp-1,\n-\t   0x1.fffffd2f57d68p-1,\n-\t   0x1.fffffd5a2041fp-1,\n-\t   0x1.fffffd8271d12p-1,\n-\t   0x1.fffffda86faa9p-1,\n-\t   0x1.fffffdcc3b117p-1,\n-\t   0x1.fffffdedf37edp-1,\n-\t   0x1.fffffe0db6b91p-1,\n-\t   0x1.fffffe2ba0ea5p-1,\n-\t   0x1.fffffe47ccb60p-1,\n-\t   0x1.fffffe62534d4p-1,\n-\t   0x1.fffffe7b4c81ep-1,\n-\t   0x1.fffffe92ced93p-1,\n-\t   0x1.fffffea8ef9cfp-1,\n-\t   0x1.fffffebdc2ec6p-1,\n-\t   0x1.fffffed15bcbap-1,\n-\t   0x1.fffffee3cc32cp-1,\n-\t   0x1.fffffef5251c2p-1,\n-\t   0x1.ffffff0576917p-1,\n-\t   0x1.ffffff14cfb92p-1,\n-\t   0x1.ffffff233ee1dp-1,\n-\t   0x1.ffffff30d18e8p-1,\n-\t   0x1.ffffff3d9480fp-1,\n-\t   0x1.ffffff4993c46p-1,\n-\t   0x1.ffffff54dab72p-1,\n-\t   0x1.ffffff5f74141p-1,\n-\t   0x1.ffffff6969fb8p-1,\n-\t   0x1.ffffff72c5fb6p-1,\n-\t   0x1.ffffff7b91176p-1,\n-\t   0x1.ffffff83d3d07p-1,\n-\t   0x1.ffffff8b962bep-1,\n-\t   0x1.ffffff92dfba2p-1,\n-\t   0x1.ffffff99b79d2p-1,\n-\t   0x1.ffffffa0248e8p-1,\n-\t   0x1.ffffffa62ce54p-1,\n-\t   0x1.ffffffabd69b4p-1,\n-\t   0x1.ffffffb127525p-1,\n-\t   0x1.ffffffb624592p-1,\n-\t   0x1.ffffffbad2affp-1,\n-\t   0x1.ffffffbf370cdp-1,\n-\t   0x1.ffffffc355dfdp-1,\n-\t   0x1.ffffffc733572p-1,\n-\t   0x1.ffffffcad3626p-1,\n-\t   0x1.ffffffce39b67p-1,\n-\t   0x1.ffffffd169d0cp-1,\n-\t   0x1.ffffffd466fa5p-1,\n-\t   0x1.ffffffd7344aap-1,\n-\t   0x1.ffffffd9d4aabp-1,\n-\t   0x1.ffffffdc4ad7ap-1,\n-\t   0x1.ffffffde9964ep-1,\n-\t   0x1.ffffffe0c2bf0p-1,\n-\t   0x1.ffffffe2c92dbp-1,\n-\t   0x1.ffffffe4aed5ep-1,\n-\t   0x1.ffffffe675bbdp-1,\n-\t   0x1.ffffffe81fc4ep-1,\n-\t   0x1.ffffffe9aeb97p-1,\n-\t   0x1.ffffffeb24467p-1,\n-\t   0x1.ffffffec81ff2p-1,\n-\t   0x1.ffffffedc95e7p-1,\n-\t   0x1.ffffffeefbc85p-1,\n-\t   0x1.fffffff01a8b6p-1,\n-\t   0x1.fffffff126e1ep-1,\n-\t   0x1.fffffff221f30p-1,\n-\t   0x1.fffffff30cd3fp-1,\n-\t   0x1.fffffff3e8892p-1,\n-\t   0x1.fffffff4b606fp-1,\n-\t   0x1.fffffff57632dp-1,\n-\t   0x1.fffffff629e44p-1,\n-\t   0x1.fffffff6d1e56p-1,\n-\t   0x1.fffffff76ef3fp-1,\n-\t   0x1.fffffff801c1fp-1,\n-\t   0x1.fffffff88af67p-1,\n-\t   0x1.fffffff90b2e3p-1,\n-\t   0x1.fffffff982fc1p-1,\n-\t   0x1.fffffff9f2e9fp-1,\n-\t   0x1.fffffffa5b790p-1,\n-\t   0x1.fffffffabd229p-1,\n-\t   0x1.fffffffb18582p-1,\n-\t   0x1.fffffffb6d844p-1,\n-\t   0x1.fffffffbbd0aap-1,\n-\t   0x1.fffffffc0748fp-1,\n-\t   0x1.fffffffc4c96cp-1,\n-\t   0x1.fffffffc8d462p-1,\n-\t   0x1.fffffffcc9a41p-1,\n-\t   0x1.fffffffd01f89p-1,\n-\t   0x1.fffffffd36871p-1,\n-\t   0x1.fffffffd678edp-1,\n-\t   0x1.fffffffd954aep-1,\n-\t   0x1.fffffffdbff2ap-1,\n-\t   0x1.fffffffde7ba0p-1,\n-\t   0x1.fffffffe0cd16p-1,\n-\t   0x1.fffffffe2f664p-1,\n-\t   0x1.fffffffe4fa30p-1,\n-\t   0x1.fffffffe6daf7p-1,\n-\t   0x1.fffffffe89b0cp-1,\n-\t   0x1.fffffffea3c9ap-1,\n-\t   0x1.fffffffebc1a9p-1,\n-\t   0x1.fffffffed2c21p-1,\n-\t   0x1.fffffffee7dc8p-1,\n-\t   0x1.fffffffefb847p-1,\n-\t   0x1.ffffffff0dd2bp-1,\n-\t   0x1.ffffffff1ede9p-1,\n-\t   0x1.ffffffff2ebdap-1,\n-\t   0x1.ffffffff3d843p-1,\n-\t   0x1.ffffffff4b453p-1,\n-\t   0x1.ffffffff58126p-1,\n-\t   0x1.ffffffff63fc3p-1,\n-\t   0x1.ffffffff6f121p-1,\n-\t   0x1.ffffffff79626p-1,\n-\t   0x1.ffffffff82fabp-1,\n-\t   0x1.ffffffff8be77p-1,\n-\t   0x1.ffffffff94346p-1,\n-\t   0x1.ffffffff9bec8p-1,\n-\t   0x1.ffffffffa319fp-1,\n-\t   0x1.ffffffffa9c63p-1,\n-\t   0x1.ffffffffaffa4p-1,\n-\t   0x1.ffffffffb5be5p-1,\n-\t   0x1.ffffffffbb1a2p-1,\n-\t   0x1.ffffffffc014ep-1,\n-\t   0x1.ffffffffc4b56p-1,\n-\t   0x1.ffffffffc901cp-1,\n-\t   0x1.ffffffffccfffp-1,\n-\t   0x1.ffffffffd0b56p-1,\n-\t   0x1.ffffffffd4271p-1,\n-\t   0x1.ffffffffd759dp-1,\n-\t   0x1.ffffffffda520p-1,\n-\t   0x1.ffffffffdd13cp-1,\n-\t   0x1.ffffffffdfa2dp-1,\n-\t   0x1.ffffffffe202dp-1,\n-\t   0x1.ffffffffe4371p-1,\n-\t   0x1.ffffffffe642ap-1,\n-\t   0x1.ffffffffe8286p-1,\n-\t   0x1.ffffffffe9eb0p-1,\n-\t   0x1.ffffffffeb8d0p-1,\n-\t   0x1.ffffffffed10ap-1,\n-\t   0x1.ffffffffee782p-1,\n-\t   0x1.ffffffffefc57p-1,\n-\t   0x1.fffffffff0fa7p-1,\n-\t   0x1.fffffffff218fp-1,\n-\t   0x1.fffffffff3227p-1,\n-\t   0x1.fffffffff4188p-1,\n-\t   0x1.fffffffff4fc9p-1,\n-\t   0x1.fffffffff5cfdp-1,\n-\t   0x1.fffffffff6939p-1,\n-\t   0x1.fffffffff748ep-1,\n-\t   0x1.fffffffff7f0dp-1,\n-\t   0x1.fffffffff88c5p-1,\n-\t   0x1.fffffffff91c6p-1,\n-\t   0x1.fffffffff9a1bp-1,\n-\t   0x1.fffffffffa1d2p-1,\n-\t   0x1.fffffffffa8f6p-1,\n-\t   0x1.fffffffffaf92p-1,\n-\t   0x1.fffffffffb5b0p-1,\n-\t   0x1.fffffffffbb58p-1,\n-\t   0x1.fffffffffc095p-1,\n-\t   0x1.fffffffffc56dp-1,\n-\t   0x1.fffffffffc9e8p-1,\n-\t   0x1.fffffffffce0dp-1,\n-\t   0x1.fffffffffd1e1p-1,\n-\t   0x1.fffffffffd56cp-1,\n-\t   0x1.fffffffffd8b3p-1,\n-\t   0x1.fffffffffdbbap-1,\n-\t   0x1.fffffffffde86p-1,\n-\t   0x1.fffffffffe11dp-1,\n-\t   0x1.fffffffffe380p-1,\n-\t   0x1.fffffffffe5b6p-1,\n-\t   0x1.fffffffffe7c0p-1,\n-\t   0x1.fffffffffe9a2p-1,\n-\t   0x1.fffffffffeb60p-1,\n-\t   0x1.fffffffffecfbp-1,\n-\t   0x1.fffffffffee77p-1,\n-\t   0x1.fffffffffefd6p-1,\n-\t   0x1.ffffffffff11ap-1,\n-\t   0x1.ffffffffff245p-1,\n-\t   0x1.ffffffffff359p-1,\n-\t   0x1.ffffffffff457p-1,\n-\t   0x1.ffffffffff542p-1,\n-\t   0x1.ffffffffff61bp-1,\n-\t   0x1.ffffffffff6e3p-1,\n-\t   0x1.ffffffffff79bp-1,\n-\t   0x1.ffffffffff845p-1,\n-\t   0x1.ffffffffff8e2p-1,\n-\t   0x1.ffffffffff973p-1,\n-\t   0x1.ffffffffff9f8p-1,\n-\t   0x1.ffffffffffa73p-1,\n-\t   0x1.ffffffffffae4p-1,\n-\t   0x1.ffffffffffb4cp-1,\n-\t   0x1.ffffffffffbadp-1,\n-\t   0x1.ffffffffffc05p-1,\n-\t   0x1.ffffffffffc57p-1,\n-\t   0x1.ffffffffffca2p-1,\n-\t   0x1.ffffffffffce7p-1,\n-\t   0x1.ffffffffffd27p-1,\n-\t   0x1.ffffffffffd62p-1,\n-\t   0x1.ffffffffffd98p-1,\n-\t   0x1.ffffffffffdcap-1,\n-\t   0x1.ffffffffffdf8p-1,\n-\t   0x1.ffffffffffe22p-1,\n-\t   0x1.ffffffffffe49p-1,\n-\t   0x1.ffffffffffe6cp-1,\n-\t   0x1.ffffffffffe8dp-1,\n-\t   0x1.ffffffffffeabp-1,\n-\t   0x1.ffffffffffec7p-1,\n-\t   0x1.ffffffffffee1p-1,\n-\t   0x1.ffffffffffef8p-1,\n-\t   0x1.fffffffffff0ep-1,\n-\t   0x1.fffffffffff22p-1,\n-\t   0x1.fffffffffff34p-1,\n-\t   0x1.fffffffffff45p-1,\n-\t   0x1.fffffffffff54p-1,\n-\t   0x1.fffffffffff62p-1,\n-\t   0x1.fffffffffff6fp-1,\n-\t   0x1.fffffffffff7bp-1,\n-\t   0x1.fffffffffff86p-1,\n-\t   0x1.fffffffffff90p-1,\n-\t   0x1.fffffffffff9ap-1,\n-\t   0x1.fffffffffffa2p-1,\n-\t   0x1.fffffffffffaap-1,\n-\t   0x1.fffffffffffb1p-1,\n-\t   0x1.fffffffffffb8p-1,\n-\t   0x1.fffffffffffbep-1,\n-\t   0x1.fffffffffffc3p-1,\n-\t   0x1.fffffffffffc8p-1,\n-\t   0x1.fffffffffffcdp-1,\n-\t   0x1.fffffffffffd1p-1,\n-\t   0x1.fffffffffffd5p-1,\n-\t   0x1.fffffffffffd9p-1,\n-\t   0x1.fffffffffffdcp-1,\n-\t   0x1.fffffffffffdfp-1,\n-\t   0x1.fffffffffffe2p-1,\n-\t   0x1.fffffffffffe4p-1,\n-\t   0x1.fffffffffffe7p-1,\n-\t   0x1.fffffffffffe9p-1,\n-\t   0x1.fffffffffffebp-1,\n-\t   0x1.fffffffffffedp-1,\n-\t   0x1.fffffffffffeep-1,\n-\t   0x1.ffffffffffff0p-1,\n-\t   0x1.ffffffffffff1p-1,\n-\t   0x1.ffffffffffff3p-1,\n-\t   0x1.ffffffffffff4p-1,\n-\t   0x1.ffffffffffff5p-1,\n-\t   0x1.ffffffffffff6p-1,\n-\t   0x1.ffffffffffff7p-1,\n-\t   0x1.ffffffffffff7p-1,\n-\t   0x1.ffffffffffff8p-1,\n-\t   0x1.ffffffffffff9p-1,\n-\t   0x1.ffffffffffff9p-1,\n-\t   0x1.ffffffffffffap-1,\n-\t   0x1.ffffffffffffbp-1,\n-\t   0x1.ffffffffffffbp-1,\n-\t   0x1.ffffffffffffbp-1,\n-\t   0x1.ffffffffffffcp-1,\n-\t   0x1.ffffffffffffcp-1,\n-\t   0x1.ffffffffffffdp-1,\n-\t   0x1.ffffffffffffdp-1,\n-\t   0x1.ffffffffffffdp-1,\n-\t   0x1.ffffffffffffdp-1,\n-\t   0x1.ffffffffffffep-1,\n-\t   0x1.ffffffffffffep-1,\n-\t   0x1.ffffffffffffep-1,\n-\t   0x1.ffffffffffffep-1,\n-\t   0x1.ffffffffffffep-1,\n-\t   0x1.ffffffffffffep-1,\n-\t   0x1.fffffffffffffp-1,\n-\t   0x1.fffffffffffffp-1,\n-\t   0x1.fffffffffffffp-1,\n-\t   0x1.fffffffffffffp-1,\n-\t   0x1.fffffffffffffp-1,\n-\t   0x1.fffffffffffffp-1,\n-\t   0x1.fffffffffffffp-1,\n-\t   0x1.fffffffffffffp-1,\n-\t   0x1.fffffffffffffp-1,\n-\t   0x1.fffffffffffffp-1,\n-\t   0x1.fffffffffffffp-1,\n-\t   0x1.0000000000000p+0,\n-\t   0x1.0000000000000p+0,\n-\t   0x1.0000000000000p+0,\n-\t   0x1.0000000000000p+0,\n-\t   0x1.0000000000000p+0,\n-\t   0x1.0000000000000p+0,\n-\t   0x1.0000000000000p+0,\n-\t   0x1.0000000000000p+0,\n-\t   0x1.0000000000000p+0,\n-\t   0x1.0000000000000p+0,\n-\t   0x1.0000000000000p+0,\n-  },\n-  .scale = { 0x1.20dd750429b6dp+0,\n-\t     0x1.20d8f1975c85dp+0,\n-\t     0x1.20cb67bd452c7p+0,\n-\t     0x1.20b4d8bac36c1p+0,\n-\t     0x1.209546ad13ccfp+0,\n-\t     0x1.206cb4897b148p+0,\n-\t     0x1.203b261cd0052p+0,\n-\t     0x1.2000a00ae3804p+0,\n-\t     0x1.1fbd27cdc72d3p+0,\n-\t     0x1.1f70c3b4f2cc7p+0,\n-\t     0x1.1f1b7ae44867fp+0,\n-\t     0x1.1ebd5552f795bp+0,\n-\t     0x1.1e565bca400d4p+0,\n-\t     0x1.1de697e413d28p+0,\n-\t     0x1.1d6e14099944ap+0,\n-\t     0x1.1cecdb718d61cp+0,\n-\t     0x1.1c62fa1e869b6p+0,\n-\t     0x1.1bd07cdd189acp+0,\n-\t     0x1.1b357141d95d5p+0,\n-\t     0x1.1a91e5a748165p+0,\n-\t     0x1.19e5e92b964abp+0,\n-\t     0x1.19318bae53a04p+0,\n-\t     0x1.1874ddcdfce24p+0,\n-\t     0x1.17aff0e56ec10p+0,\n-\t     0x1.16e2d7093cd8cp+0,\n-\t     0x1.160da304ed92fp+0,\n-\t     0x1.153068581b781p+0,\n-\t     0x1.144b3b337c90cp+0,\n-\t     0x1.135e3075d076bp+0,\n-\t     0x1.12695da8b5bdep+0,\n-\t     0x1.116cd8fd67618p+0,\n-\t     0x1.1068b94962e5ep+0,\n-\t     0x1.0f5d1602f7e41p+0,\n-\t     0x1.0e4a073dc1b91p+0,\n-\t     0x1.0d2fa5a70c168p+0,\n-\t     0x1.0c0e0a8223359p+0,\n-\t     0x1.0ae54fa490722p+0,\n-\t     0x1.09b58f724416bp+0,\n-\t     0x1.087ee4d9ad247p+0,\n-\t     0x1.07416b4fbfe7cp+0,\n-\t     0x1.05fd3ecbec297p+0,\n-\t     0x1.04b27bc403d30p+0,\n-\t     0x1.03613f2812dafp+0,\n-\t     0x1.0209a65e29545p+0,\n-\t     0x1.00abcf3e187a9p+0,\n-\t     0x1.fe8fb01a47307p-1,\n-\t     0x1.fbbbbef34b4b2p-1,\n-\t     0x1.f8dc092d58ff8p-1,\n-\t     0x1.f5f0cdaf15313p-1,\n-\t     0x1.f2fa4c16c0019p-1,\n-\t     0x1.eff8c4b1375dbp-1,\n-\t     0x1.ecec7870ebca7p-1,\n-\t     0x1.e9d5a8e4c934ep-1,\n-\t     0x1.e6b4982f158b9p-1,\n-\t     0x1.e38988fc46e72p-1,\n-\t     0x1.e054be79d3042p-1,\n-\t     0x1.dd167c4cf9d2ap-1,\n-\t     0x1.d9cf06898cdafp-1,\n-\t     0x1.d67ea1a8b5368p-1,\n-\t     0x1.d325927fb9d89p-1,\n-\t     0x1.cfc41e36c7df9p-1,\n-\t     0x1.cc5a8a3fbea40p-1,\n-\t     0x1.c8e91c4d01368p-1,\n-\t     0x1.c5701a484ef9dp-1,\n-\t     0x1.c1efca49a5011p-1,\n-\t     0x1.be68728e29d5dp-1,\n-\t     0x1.bada596f25436p-1,\n-\t     0x1.b745c55905bf8p-1,\n-\t     0x1.b3aafcc27502ep-1,\n-\t     0x1.b00a46237d5bep-1,\n-\t     0x1.ac63e7ecc1411p-1,\n-\t     0x1.a8b8287ec6a09p-1,\n-\t     0x1.a5074e2157620p-1,\n-\t     0x1.a1519efaf889ep-1,\n-\t     0x1.9d97610879642p-1,\n-\t     0x1.99d8da149c13fp-1,\n-\t     0x1.96164fafd8de3p-1,\n-\t     0x1.925007283d7aap-1,\n-\t     0x1.8e86458169af8p-1,\n-\t     0x1.8ab94f6caa71dp-1,\n-\t     0x1.86e9694134b9ep-1,\n-\t     0x1.8316d6f48133dp-1,\n-\t     0x1.7f41dc12c9e89p-1,\n-\t     0x1.7b6abbb7aaf19p-1,\n-\t     0x1.7791b886e7403p-1,\n-\t     0x1.73b714a552763p-1,\n-\t     0x1.6fdb11b1e0c34p-1,\n-\t     0x1.6bfdf0beddaf5p-1,\n-\t     0x1.681ff24b4ab04p-1,\n-\t     0x1.6441563c665d4p-1,\n-\t     0x1.60625bd75d07bp-1,\n-\t     0x1.5c8341bb23767p-1,\n-\t     0x1.58a445da7c74cp-1,\n-\t     0x1.54c5a57629db0p-1,\n-\t     0x1.50e79d1749ac9p-1,\n-\t     0x1.4d0a6889dfd9fp-1,\n-\t     0x1.492e42d78d2c5p-1,\n-\t     0x1.4553664273d24p-1,\n-\t     0x1.417a0c4049fd0p-1,\n-\t     0x1.3da26d759aef5p-1,\n-\t     0x1.39ccc1b136d5ap-1,\n-\t     0x1.35f93fe7d1b3dp-1,\n-\t     0x1.32281e2fd1a92p-1,\n-\t     0x1.2e5991bd4cbfcp-1,\n-\t     0x1.2a8dcede3673bp-1,\n-\t     0x1.26c508f6bd0ffp-1,\n-\t     0x1.22ff727dd6f7bp-1,\n-\t     0x1.1f3d3cf9ffe5ap-1,\n-\t     0x1.1b7e98fe26217p-1,\n-\t     0x1.17c3b626c7a11p-1,\n-\t     0x1.140cc3173f007p-1,\n-\t     0x1.1059ed7740313p-1,\n-\t     0x1.0cab61f084b93p-1,\n-\t     0x1.09014c2ca74dap-1,\n-\t     0x1.055bd6d32e8d7p-1,\n-\t     0x1.01bb2b87c6968p-1,\n-\t     0x1.fc3ee5d1524b0p-2,\n-\t     0x1.f511a91a67d2ap-2,\n-\t     0x1.edeeee0959518p-2,\n-\t     0x1.e6d6ffaa65a25p-2,\n-\t     0x1.dfca26f5bbf88p-2,\n-\t     0x1.d8c8aace11e63p-2,\n-\t     0x1.d1d2cfff91594p-2,\n-\t     0x1.cae8d93f1d7b6p-2,\n-\t     0x1.c40b0729ed547p-2,\n-\t     0x1.bd3998457afdap-2,\n-\t     0x1.b674c8ffc6283p-2,\n-\t     0x1.afbcd3afe8ab6p-2,\n-\t     0x1.a911f096fbc26p-2,\n-\t     0x1.a27455e14c93cp-2,\n-\t     0x1.9be437a7de946p-2,\n-\t     0x1.9561c7f23a47bp-2,\n-\t     0x1.8eed36b886d93p-2,\n-\t     0x1.8886b1e5ecfd1p-2,\n-\t     0x1.822e655b417e6p-2,\n-\t     0x1.7be47af1f5d89p-2,\n-\t     0x1.75a91a7f4d2edp-2,\n-\t     0x1.6f7c69d7d3ef8p-2,\n-\t     0x1.695e8cd31867ep-2,\n-\t     0x1.634fa54fa285fp-2,\n-\t     0x1.5d4fd33729015p-2,\n-\t     0x1.575f3483021c3p-2,\n-\t     0x1.517de540ce2a3p-2,\n-\t     0x1.4babff975a04cp-2,\n-\t     0x1.45e99bcbb7915p-2,\n-\t     0x1.4036d0468a7a2p-2,\n-\t     0x1.3a93b1998736cp-2,\n-\t     0x1.35005285227f1p-2,\n-\t     0x1.2f7cc3fe6f423p-2,\n-\t     0x1.2a09153529381p-2,\n-\t     0x1.24a55399ea239p-2,\n-\t     0x1.1f518ae487dc8p-2,\n-\t     0x1.1a0dc51a9934dp-2,\n-\t     0x1.14da0a961fd14p-2,\n-\t     0x1.0fb6620c550afp-2,\n-\t     0x1.0aa2d09497f2bp-2,\n-\t     0x1.059f59af7a906p-2,\n-\t     0x1.00abff4dec7a3p-2,\n-\t     0x1.f79183b101c5bp-3,\n-\t     0x1.edeb406d9c824p-3,\n-\t     0x1.e4652fadcb6b2p-3,\n-\t     0x1.daff4969c0b04p-3,\n-\t     0x1.d1b982c501370p-3,\n-\t     0x1.c893ce1dcbef7p-3,\n-\t     0x1.bf8e1b1ca2279p-3,\n-\t     0x1.b6a856c3ed54fp-3,\n-\t     0x1.ade26b7fbed95p-3,\n-\t     0x1.a53c4135a6526p-3,\n-\t     0x1.9cb5bd549b111p-3,\n-\t     0x1.944ec2e4f5630p-3,\n-\t     0x1.8c07329874652p-3,\n-\t     0x1.83deeada4d25ap-3,\n-\t     0x1.7bd5c7df3fe9cp-3,\n-\t     0x1.73eba3b5b07b7p-3,\n-\t     0x1.6c205655be71fp-3,\n-\t     0x1.6473b5b15a7a1p-3,\n-\t     0x1.5ce595c455b0ap-3,\n-\t     0x1.5575c8a468361p-3,\n-\t     0x1.4e241e912c305p-3,\n-\t     0x1.46f066040a832p-3,\n-\t     0x1.3fda6bc016994p-3,\n-\t     0x1.38e1fae1d6a9dp-3,\n-\t     0x1.3206dceef5f87p-3,\n-\t     0x1.2b48d9e5dea1cp-3,\n-\t     0x1.24a7b84d38971p-3,\n-\t     0x1.1e233d434b813p-3,\n-\t     0x1.17bb2c8d41535p-3,\n-\t     0x1.116f48a6476ccp-3,\n-\t     0x1.0b3f52ce8c383p-3,\n-\t     0x1.052b0b1a174eap-3,\n-\t     0x1.fe6460fef4680p-4,\n-\t     0x1.f2a901ccafb37p-4,\n-\t     0x1.e723726b824a9p-4,\n-\t     0x1.dbd32ac4c99b0p-4,\n-\t     0x1.d0b7a0f921e7cp-4,\n-\t     0x1.c5d0497c09e74p-4,\n-\t     0x1.bb1c972f23e50p-4,\n-\t     0x1.b09bfb7d11a83p-4,\n-\t     0x1.a64de673e8837p-4,\n-\t     0x1.9c31c6df3b1b8p-4,\n-\t     0x1.92470a61b6965p-4,\n-\t     0x1.888d1d8e510a3p-4,\n-\t     0x1.7f036c0107294p-4,\n-\t     0x1.75a96077274bap-4,\n-\t     0x1.6c7e64e7281cbp-4,\n-\t     0x1.6381e2980956bp-4,\n-\t     0x1.5ab342383d177p-4,\n-\t     0x1.5211ebf41880bp-4,\n-\t     0x1.499d478bca735p-4,\n-\t     0x1.4154bc68d75c3p-4,\n-\t     0x1.3937b1b319259p-4,\n-\t     0x1.31458e6542847p-4,\n-\t     0x1.297db960e4f63p-4,\n-\t     0x1.21df9981f8e53p-4,\n-\t     0x1.1a6a95b1e786fp-4,\n-\t     0x1.131e14fa1625dp-4,\n-\t     0x1.0bf97e95f2a64p-4,\n-\t     0x1.04fc3a0481321p-4,\n-\t     0x1.fc4b5e32d6259p-5,\n-\t     0x1.eeea8c1b1db93p-5,\n-\t     0x1.e1d4cf1e2450ap-5,\n-\t     0x1.d508f9a1ea64ep-5,\n-\t     0x1.c885df3451a07p-5,\n-\t     0x1.bc4a54a84e834p-5,\n-\t     0x1.b055303221015p-5,\n-\t     0x1.a4a549829587ep-5,\n-\t     0x1.993979e14fffdp-5,\n-\t     0x1.8e109c4622913p-5,\n-\t     0x1.83298d717210ep-5,\n-\t     0x1.78832c03aa2b1p-5,\n-\t     0x1.6e1c5893c380bp-5,\n-\t     0x1.63f3f5c4de13bp-5,\n-\t     0x1.5a08e85af27e0p-5,\n-\t     0x1.505a174e9c929p-5,\n-\t     0x1.46e66be002240p-5,\n-\t     0x1.3dacd1a8d8ccdp-5,\n-\t     0x1.34ac36ad8dafep-5,\n-\t     0x1.2be38b6d92415p-5,\n-\t     0x1.2351c2f2d1449p-5,\n-\t     0x1.1af5d2e04f3f6p-5,\n-\t     0x1.12ceb37ff9bc3p-5,\n-\t     0x1.0adb5fcfa8c75p-5,\n-\t     0x1.031ad58d56279p-5,\n-\t     0x1.f7182a851bca2p-6,\n-\t     0x1.e85c449e377f2p-6,\n-\t     0x1.da0005e5f28dfp-6,\n-\t     0x1.cc0180af00a8bp-6,\n-\t     0x1.be5ecd2fcb5f9p-6,\n-\t     0x1.b1160991ff737p-6,\n-\t     0x1.a4255a00b9f03p-6,\n-\t     0x1.978ae8b55ce1bp-6,\n-\t     0x1.8b44e6031383ep-6,\n-\t     0x1.7f5188610ddc8p-6,\n-\t     0x1.73af0c737bb45p-6,\n-\t     0x1.685bb5134ef13p-6,\n-\t     0x1.5d55cb54cd53ap-6,\n-\t     0x1.529b9e8cf9a1ep-6,\n-\t     0x1.482b8455dc491p-6,\n-\t     0x1.3e03d891b37dep-6,\n-\t     0x1.3422fd6d12e2bp-6,\n-\t     0x1.2a875b5ffab56p-6,\n-\t     0x1.212f612dee7fbp-6,\n-\t     0x1.181983e5133ddp-6,\n-\t     0x1.0f443edc5ce49p-6,\n-\t     0x1.06ae13b0d3255p-6,\n-\t     0x1.fcab1483ea7fcp-7,\n-\t     0x1.ec72615a894c4p-7,\n-\t     0x1.dcaf3691fc448p-7,\n-\t     0x1.cd5ec93c12431p-7,\n-\t     0x1.be7e5ac24963bp-7,\n-\t     0x1.b00b38d6b3575p-7,\n-\t     0x1.a202bd6372dcep-7,\n-\t     0x1.94624e78e0fafp-7,\n-\t     0x1.87275e3a6869dp-7,\n-\t     0x1.7a4f6aca256cbp-7,\n-\t     0x1.6dd7fe3358230p-7,\n-\t     0x1.61beae53b72b7p-7,\n-\t     0x1.56011cc3b036dp-7,\n-\t     0x1.4a9cf6bda3f4cp-7,\n-\t     0x1.3f8ff5042a88ep-7,\n-\t     0x1.34d7dbc76d7e5p-7,\n-\t     0x1.2a727a89a3f14p-7,\n-\t     0x1.205dac02bd6b9p-7,\n-\t     0x1.1697560347b25p-7,\n-\t     0x1.0d1d69569b82dp-7,\n-\t     0x1.03ede1a45bfeep-7,\n-\t     0x1.f60d8aa2a88f2p-8,\n-\t     0x1.e4cc4abf7d065p-8,\n-\t     0x1.d4143a9dfe965p-8,\n-\t     0x1.c3e1a5f5c077cp-8,\n-\t     0x1.b430ecf4a83a8p-8,\n-\t     0x1.a4fe83fb9db25p-8,\n-\t     0x1.9646f35a76623p-8,\n-\t     0x1.8806d70b2fc36p-8,\n-\t     0x1.7a3ade6c8b3e4p-8,\n-\t     0x1.6cdfcbfc1e263p-8,\n-\t     0x1.5ff2750fe7820p-8,\n-\t     0x1.536fc18f7ce5cp-8,\n-\t     0x1.4754abacdf1dcp-8,\n-\t     0x1.3b9e3f9d06e3fp-8,\n-\t     0x1.30499b503957fp-8,\n-\t     0x1.2553ee2a336bfp-8,\n-\t     0x1.1aba78ba3af89p-8,\n-\t     0x1.107a8c7323a6ep-8,\n-\t     0x1.06918b6355624p-8,\n-\t     0x1.f9f9cfd9c3035p-9,\n-\t     0x1.e77448fb66bb9p-9,\n-\t     0x1.d58da68fd1170p-9,\n-\t     0x1.c4412bf4b8f0bp-9,\n-\t     0x1.b38a3af2e55b4p-9,\n-\t     0x1.a3645330550ffp-9,\n-\t     0x1.93cb11a30d765p-9,\n-\t     0x1.84ba3004a50d0p-9,\n-\t     0x1.762d84469c18fp-9,\n-\t     0x1.6821000795a03p-9,\n-\t     0x1.5a90b00981d93p-9,\n-\t     0x1.4d78bba8ca5fdp-9,\n-\t     0x1.40d564548fad7p-9,\n-\t     0x1.34a305080681fp-9,\n-\t     0x1.28de11c5031ebp-9,\n-\t     0x1.1d83170fbf6fbp-9,\n-\t     0x1.128eb96be8798p-9,\n-\t     0x1.07fdb4dafea5fp-9,\n-\t     0x1.fb99b8b8279e1p-10,\n-\t     0x1.e7f232d9e2630p-10,\n-\t     0x1.d4fed7195d7e8p-10,\n-\t     0x1.c2b9cf7f893bfp-10,\n-\t     0x1.b11d702b3deb1p-10,\n-\t     0x1.a024365f771bdp-10,\n-\t     0x1.8fc8c794b03b5p-10,\n-\t     0x1.8005f08d6f1efp-10,\n-\t     0x1.70d6a46e07ddap-10,\n-\t     0x1.6235fbd7a4345p-10,\n-\t     0x1.541f340697987p-10,\n-\t     0x1.468dadf4080abp-10,\n-\t     0x1.397ced7af2b15p-10,\n-\t     0x1.2ce898809244ep-10,\n-\t     0x1.20cc76202c5fap-10,\n-\t     0x1.15246dda49d47p-10,\n-\t     0x1.09ec86c75d497p-10,\n-\t     0x1.fe41cd9bb4eeep-11,\n-\t     0x1.e97ba3b77f306p-11,\n-\t     0x1.d57f524723822p-11,\n-\t     0x1.c245d4b998479p-11,\n-\t     0x1.afc85e0f82e12p-11,\n-\t     0x1.9e005769dbc1dp-11,\n-\t     0x1.8ce75e9f6f8a0p-11,\n-\t     0x1.7c7744d9378f7p-11,\n-\t     0x1.6caa0d3582fe9p-11,\n-\t     0x1.5d79eb71e893bp-11,\n-\t     0x1.4ee1429bf7cc0p-11,\n-\t     0x1.40daa3c89f5b6p-11,\n-\t     0x1.3360ccd23db3ap-11,\n-\t     0x1.266ea71d4f71ap-11,\n-\t     0x1.19ff4663ae9dfp-11,\n-\t     0x1.0e0de78654d1ep-11,\n-\t     0x1.0295ef6591848p-11,\n-\t     0x1.ef25d37f49fe1p-12,\n-\t     0x1.da01102b5f851p-12,\n-\t     0x1.c5b5412dcafadp-12,\n-\t     0x1.b23a5a23e4210p-12,\n-\t     0x1.9f8893d8fd1c1p-12,\n-\t     0x1.8d986a4187285p-12,\n-\t     0x1.7c629a822bc9ep-12,\n-\t     0x1.6be02102b3520p-12,\n-\t     0x1.5c0a378c90bcap-12,\n-\t     0x1.4cda5374ea275p-12,\n-\t     0x1.3e4a23d1f4702p-12,\n-\t     0x1.30538fbb77ecdp-12,\n-\t     0x1.22f0b496539bdp-12,\n-\t     0x1.161be46ad3b50p-12,\n-\t     0x1.09cfa445b00ffp-12,\n-\t     0x1.fc0d55470cf51p-13,\n-\t     0x1.e577bbcd49935p-13,\n-\t     0x1.cfd4a5adec5bfp-13,\n-\t     0x1.bb1a9657ce465p-13,\n-\t     0x1.a740684026555p-13,\n-\t     0x1.943d4a1d1ed39p-13,\n-\t     0x1.8208bc334a6a5p-13,\n-\t     0x1.709a8db59f25cp-13,\n-\t     0x1.5feada379d8b7p-13,\n-\t     0x1.4ff207314a102p-13,\n-\t     0x1.40a8c1949f75ep-13,\n-\t     0x1.3207fb7420eb9p-13,\n-\t     0x1.2408e9ba3327fp-13,\n-\t     0x1.16a501f0e42cap-13,\n-\t     0x1.09d5f819c9e29p-13,\n-\t     0x1.fb2b792b40a22p-14,\n-\t     0x1.e3bcf436a1a95p-14,\n-\t     0x1.cd55277c18d05p-14,\n-\t     0x1.b7e94604479dcp-14,\n-\t     0x1.a36eec00926ddp-14,\n-\t     0x1.8fdc1b2dcf7b9p-14,\n-\t     0x1.7d2737527c3f9p-14,\n-\t     0x1.6b4702d7d5849p-14,\n-\t     0x1.5a329b7d30748p-14,\n-\t     0x1.49e17724f4d41p-14,\n-\t     0x1.3a4b60ba9aa4dp-14,\n-\t     0x1.2b6875310f785p-14,\n-\t     0x1.1d312098e9dbap-14,\n-\t     0x1.0f9e1b4dd36dfp-14,\n-\t     0x1.02a8673a94691p-14,\n-\t     0x1.ec929a665b449p-15,\n-\t     0x1.d4f4b4c8e09edp-15,\n-\t     0x1.be6abbb10a5aap-15,\n-\t     0x1.a8e8cc1fadef6p-15,\n-\t     0x1.94637d5bacfdbp-15,\n-\t     0x1.80cfdc72220cfp-15,\n-\t     0x1.6e2367dc27f95p-15,\n-\t     0x1.5c540b4936fd2p-15,\n-\t     0x1.4b581b8d170fcp-15,\n-\t     0x1.3b2652b06c2b2p-15,\n-\t     0x1.2bb5cc22e5db6p-15,\n-\t     0x1.1cfe010e2052dp-15,\n-\t     0x1.0ef6c4c84a0fep-15,\n-\t     0x1.01984165a5f36p-15,\n-\t     0x1.e9b5e8d00ce76p-16,\n-\t     0x1.d16f5716c6c1ap-16,\n-\t     0x1.ba4f035d60e02p-16,\n-\t     0x1.a447b7b03f045p-16,\n-\t     0x1.8f4ccca7fc90dp-16,\n-\t     0x1.7b5223dac7336p-16,\n-\t     0x1.684c227fcacefp-16,\n-\t     0x1.562fac4329b48p-16,\n-\t     0x1.44f21e49054f2p-16,\n-\t     0x1.34894a5e24657p-16,\n-\t     0x1.24eb7254ccf83p-16,\n-\t     0x1.160f438c70913p-16,\n-\t     0x1.07ebd2a2d2844p-16,\n-\t     0x1.f4f12e9ab070ap-17,\n-\t     0x1.db5ad0b27805cp-17,\n-\t     0x1.c304efa2c6f4ep-17,\n-\t     0x1.abe09e9144b5ep-17,\n-\t     0x1.95df988e76644p-17,\n-\t     0x1.80f439b4ee04bp-17,\n-\t     0x1.6d11788a69c64p-17,\n-\t     0x1.5a2adfa0b4bc4p-17,\n-\t     0x1.4834877429b8fp-17,\n-\t     0x1.37231085c7d9ap-17,\n-\t     0x1.26eb9daed6f7ep-17,\n-\t     0x1.1783ceac28910p-17,\n-\t     0x1.08e1badf0fcedp-17,\n-\t     0x1.f5f7d88472604p-18,\n-\t     0x1.db92b5212fb8dp-18,\n-\t     0x1.c282cd3957edap-18,\n-\t     0x1.aab7abace48dcp-18,\n-\t     0x1.94219bfcb4928p-18,\n-\t     0x1.7eb1a2075864dp-18,\n-\t     0x1.6a597219a93d9p-18,\n-\t     0x1.570b69502f313p-18,\n-\t     0x1.44ba864670882p-18,\n-\t     0x1.335a62115bce2p-18,\n-\t     0x1.22df298214423p-18,\n-\t     0x1.133d96ae7e0ddp-18,\n-\t     0x1.046aeabcfcdecp-18,\n-\t     0x1.ecb9cfe1d8642p-19,\n-\t     0x1.d21397ead99cbp-19,\n-\t     0x1.b8d094c86d374p-19,\n-\t     0x1.a0df0f0c626dcp-19,\n-\t     0x1.8a2e269750a39p-19,\n-\t     0x1.74adc8f4064d3p-19,\n-\t     0x1.604ea819f007cp-19,\n-\t     0x1.4d0231928c6f9p-19,\n-\t     0x1.3aba85fe22e1fp-19,\n-\t     0x1.296a70f414053p-19,\n-\t     0x1.1905613b3abf2p-19,\n-\t     0x1.097f6156f32c5p-19,\n-\t     0x1.f59a20caf6695p-20,\n-\t     0x1.d9c73698fb1dcp-20,\n-\t     0x1.bf716c6168baep-20,\n-\t     0x1.a6852c6b58392p-20,\n-\t     0x1.8eefd70594a88p-20,\n-\t     0x1.789fb715aae95p-20,\n-\t     0x1.6383f726a8e04p-20,\n-\t     0x1.4f8c96f26a26ap-20,\n-\t     0x1.3caa61607f920p-20,\n-\t     0x1.2acee2f5ecdb8p-20,\n-\t     0x1.19ec60b1242edp-20,\n-\t     0x1.09f5cf4dd2877p-20,\n-\t     0x1.f5bd95d8730d8p-21,\n-\t     0x1.d9371e2ff7c35p-21,\n-\t     0x1.be41de54d155ap-21,\n-\t     0x1.a4c89e08ef4f3p-21,\n-\t     0x1.8cb738399b12cp-21,\n-\t     0x1.75fa8dbc84becp-21,\n-\t     0x1.608078a70dcbcp-21,\n-\t     0x1.4c37c0394d094p-21,\n-\t     0x1.39100d5687bfep-21,\n-\t     0x1.26f9df8519bd6p-21,\n-\t     0x1.15e6827001f18p-21,\n-\t     0x1.05c803e4831c1p-21,\n-\t     0x1.ed22548cffd35p-22,\n-\t     0x1.d06ad6ecdf971p-22,\n-\t     0x1.b551c847fbc96p-22,\n-\t     0x1.9bc09f112b494p-22,\n-\t     0x1.83a1ff0aa239dp-22,\n-\t     0x1.6ce1aa3fd7bddp-22,\n-\t     0x1.576c72b514859p-22,\n-\t     0x1.43302cc4a0da8p-22,\n-\t     0x1.301ba221dc9bbp-22,\n-\t     0x1.1e1e857adc568p-22,\n-\t     0x1.0d2966b1746f7p-22,\n-\t     0x1.fa5b4f49cc6b2p-23,\n-\t     0x1.dc3ae30b55c16p-23,\n-\t     0x1.bfd7555a3bd68p-23,\n-\t     0x1.a517d9e61628ap-23,\n-\t     0x1.8be4f8f6c951fp-23,\n-\t     0x1.74287ded49339p-23,\n-\t     0x1.5dcd669f2cd34p-23,\n-\t     0x1.48bfd38302870p-23,\n-\t     0x1.34ecf8a3c124ap-23,\n-\t     0x1.22430f521cbcfp-23,\n-\t     0x1.10b1488aeb235p-23,\n-\t     0x1.0027c00a263a6p-23,\n-\t     0x1.e12ee004efc37p-24,\n-\t     0x1.c3e44ae32b16bp-24,\n-\t     0x1.a854ea14102a8p-24,\n-\t     0x1.8e6761569f45dp-24,\n-\t     0x1.7603bac345f65p-24,\n-\t     0x1.5f1353cdad001p-24,\n-\t     0x1.4980cb3c80949p-24,\n-\t     0x1.3537f00b6ad4dp-24,\n-\t     0x1.2225b12bffc68p-24,\n-\t     0x1.10380e1adb7e9p-24,\n-\t     0x1.febc107d5efaap-25,\n-\t     0x1.df0f2a0ee6946p-25,\n-\t     0x1.c14b2188bcee4p-25,\n-\t     0x1.a553644f7f07dp-25,\n-\t     0x1.8b0cfce0579dfp-25,\n-\t     0x1.725e7c5dd20f7p-25,\n-\t     0x1.5b2fe547a1340p-25,\n-\t     0x1.456a974e92e93p-25,\n-\t     0x1.30f93c3699078p-25,\n-\t     0x1.1dc7b5b978cf8p-25,\n-\t     0x1.0bc30c5d52f15p-25,\n-\t     0x1.f5b2be65a0c7fp-26,\n-\t     0x1.d5f3a8dea7357p-26,\n-\t     0x1.b82915b03515bp-26,\n-\t     0x1.9c3517e789488p-26,\n-\t     0x1.81fb7df06136ep-26,\n-\t     0x1.6961b8d641d06p-26,\n-\t     0x1.524ec4d916caep-26,\n-\t     0x1.3cab1343d18d1p-26,\n-\t     0x1.2860757487a01p-26,\n-\t     0x1.155a09065d4f7p-26,\n-\t     0x1.0384250e4c9fcp-26,\n-\t     0x1.e59890b926c78p-27,\n-\t     0x1.c642116a8a9e3p-27,\n-\t     0x1.a8e405e651ab6p-27,\n-\t     0x1.8d5f98114f872p-27,\n-\t     0x1.7397c5a66e307p-27,\n-\t     0x1.5b71456c5a4c4p-27,\n-\t     0x1.44d26de513197p-27,\n-\t     0x1.2fa31d6371537p-27,\n-\t     0x1.1bcca373b7b43p-27,\n-\t     0x1.0939ab853339fp-27,\n-\t     0x1.efac5187b2863p-28,\n-\t     0x1.cf1e86235d0e6p-28,\n-\t     0x1.b0a68a2128babp-28,\n-\t     0x1.9423165bc4444p-28,\n-\t     0x1.7974e743dea3cp-28,\n-\t     0x1.607e9eacd1050p-28,\n-\t     0x1.4924a74dec728p-28,\n-\t     0x1.334d19e0c2160p-28,\n-\t     0x1.1edfa3c5f5ccap-28,\n-\t     0x1.0bc56f1b54701p-28,\n-\t     0x1.f3d2185e047d9p-29,\n-\t     0x1.d26cb87945e87p-29,\n-\t     0x1.b334fac4b9f99p-29,\n-\t     0x1.96076f7918d1cp-29,\n-\t     0x1.7ac2d72fc2c63p-29,\n-\t     0x1.614801550319ep-29,\n-\t     0x1.4979ac8b28926p-29,\n-\t     0x1.333c68e2d0548p-29,\n-\t     0x1.1e767bce37dd7p-29,\n-\t     0x1.0b0fc5b6d05a0p-29,\n-\t     0x1.f1e3523b41d7dp-30,\n-\t     0x1.d00de6608effep-30,\n-\t     0x1.b0778b7b3301ap-30,\n-\t     0x1.92fb04ec0f6cfp-30,\n-\t     0x1.77756ec9f78fap-30,\n-\t     0x1.5dc61922d5a06p-30,\n-\t     0x1.45ce65699ff6dp-30,\n-\t     0x1.2f71a5f159970p-30,\n-\t     0x1.1a94ff571654fp-30,\n-\t     0x1.071f4bbea09ecp-30,\n-\t     0x1.e9f1ff8ddd774p-31,\n-\t     0x1.c818223a202c7p-31,\n-\t     0x1.a887bd2b4404dp-31,\n-\t     0x1.8b1a336c5eb6bp-31,\n-\t     0x1.6fab63324088ap-31,\n-\t     0x1.56197e30205bap-31,\n-\t     0x1.3e44e45301b92p-31,\n-\t     0x1.281000bfe4c3fp-31,\n-\t     0x1.135f28f2d50b4p-31,\n-\t     0x1.00187dded5975p-31,\n-\t     0x1.dc479de0ef001p-32,\n-\t     0x1.bad4fdad3caa1p-32,\n-\t     0x1.9baed3ed27ab8p-32,\n-\t     0x1.7ead9ce4285bbp-32,\n-\t     0x1.63ac6b4edc88ep-32,\n-\t     0x1.4a88be2a6390cp-32,\n-\t     0x1.332259185f1a0p-32,\n-\t     0x1.1d5b1f3793044p-32,\n-\t     0x1.0916f04b6e18bp-32,\n-\t     0x1.ec77101de6926p-33,\n-\t     0x1.c960bf23153e0p-33,\n-\t     0x1.a8bd20fc65ef7p-33,\n-\t     0x1.8a61745ec7d1dp-33,\n-\t     0x1.6e25d0e756261p-33,\n-\t     0x1.53e4f7d1666cbp-33,\n-\t     0x1.3b7c27a7ddb0ep-33,\n-\t     0x1.24caf2c32af14p-33,\n-\t     0x1.0fb3186804d0fp-33,\n-\t     0x1.f830c0bb41fd7p-34,\n-\t     0x1.d3c0f1a91c846p-34,\n-\t     0x1.b1e5acf351d87p-34,\n-\t     0x1.92712d259ce66p-34,\n-\t     0x1.7538c60a04476p-34,\n-\t     0x1.5a14b04b47879p-34,\n-\t     0x1.40dfd87456f4cp-34,\n-\t     0x1.2977b1172b9d5p-34,\n-\t     0x1.13bc07e891491p-34,\n-\t     0x1.ff1dbb4300811p-35,\n-\t     0x1.d9a880f306bd8p-35,\n-\t     0x1.b6e45220b55e0p-35,\n-\t     0x1.96a0b33f2c4dap-35,\n-\t     0x1.78b07e9e924acp-35,\n-\t     0x1.5ce9ab1670dd2p-35,\n-\t     0x1.4325167006bb0p-35,\n-\t     0x1.2b3e53538ff3fp-35,\n-\t     0x1.15137a7f44864p-35,\n-\t     0x1.0084ff125639dp-35,\n-\t     0x1.daeb0b7311ec7p-36,\n-\t     0x1.b7937d1c40c52p-36,\n-\t     0x1.96d082f59ab06p-36,\n-\t     0x1.7872d9fa10aadp-36,\n-\t     0x1.5c4e8e37bc7d0p-36,\n-\t     0x1.423ac0df49a40p-36,\n-\t     0x1.2a117230ad284p-36,\n-\t     0x1.13af4f04f9998p-36,\n-\t     0x1.fde703724e560p-37,\n-\t     0x1.d77f0c82e7641p-37,\n-\t     0x1.b3ee02611d7ddp-37,\n-\t     0x1.92ff33023d5bdp-37,\n-\t     0x1.7481a9e69f53fp-37,\n-\t     0x1.5847eda620959p-37,\n-\t     0x1.3e27c1fcc74bdp-37,\n-\t     0x1.25f9ee0b923dcp-37,\n-\t     0x1.0f9a0686531ffp-37,\n-\t     0x1.f5cc7718082afp-38,\n-\t     0x1.cf7e53d6a2ca5p-38,\n-\t     0x1.ac0f5f3229372p-38,\n-\t     0x1.8b498644847eap-38,\n-\t     0x1.6cfa9bcca59dcp-38,\n-\t     0x1.50f411d4fd2cdp-38,\n-\t     0x1.370ab8327af5ep-38,\n-\t     0x1.1f167f88c6b6ep-38,\n-\t     0x1.08f24085d4597p-38,\n-\t     0x1.e8f70e181d619p-39,\n-\t     0x1.c324c20e337dcp-39,\n-\t     0x1.a03261574b54ep-39,\n-\t     0x1.7fe903cdf5855p-39,\n-\t     0x1.6215c58da3450p-39,\n-\t     0x1.46897d4b69fc6p-39,\n-\t     0x1.2d1877d731b7bp-39,\n-\t     0x1.159a386b11517p-39,\n-\t     0x1.ffd27ae9393cep-40,\n-\t     0x1.d7c593130dd0bp-40,\n-\t     0x1.b2cd607c79bcfp-40,\n-\t     0x1.90ae4d3405651p-40,\n-\t     0x1.71312dd1759e2p-40,\n-\t     0x1.5422ef5d8949dp-40,\n-\t     0x1.39544b0ecc957p-40,\n-\t     0x1.20997f73e73ddp-40,\n-\t     0x1.09ca0eaacd277p-40,\n-\t     0x1.e9810295890ecp-41,\n-\t     0x1.c2b45b5aa4a1dp-41,\n-\t     0x1.9eee068fa7596p-41,\n-\t     0x1.7df2b399c10a8p-41,\n-\t     0x1.5f8b87a31bd85p-41,\n-\t     0x1.4385c96e9a2d9p-41,\n-\t     0x1.29b2933ef4cbcp-41,\n-\t     0x1.11e68a6378f8ap-41,\n-\t     0x1.f7f338086a86bp-42,\n-\t     0x1.cf8d7d9ce040ap-42,\n-\t     0x1.aa577251ae484p-42,\n-\t     0x1.8811d739efb5ep-42,\n-\t     0x1.68823e52970bep-42,\n-\t     0x1.4b72ae68e8b4cp-42,\n-\t     0x1.30b14dbe876bcp-42,\n-\t     0x1.181012ef86610p-42,\n-\t     0x1.01647ba798744p-42,\n-\t     0x1.d90e917701675p-43,\n-\t     0x1.b2a87e86d0c8ap-43,\n-\t     0x1.8f53dcb377293p-43,\n-\t     0x1.6ed2f2515e933p-43,\n-\t     0x1.50ecc9ed47f19p-43,\n-\t     0x1.356cd5ce7799ep-43,\n-\t     0x1.1c229a587ab78p-43,\n-\t     0x1.04e15ecc7f3f6p-43,\n-\t     0x1.deffc7e6a6017p-44,\n-\t     0x1.b7b040832f310p-44,\n-\t     0x1.938e021f36d76p-44,\n-\t     0x1.7258610b3b233p-44,\n-\t     0x1.53d3bfc82a909p-44,\n-\t     0x1.37c92babdc2fdp-44,\n-\t     0x1.1e06010120f6ap-44,\n-\t     0x1.065b9616170d4p-44,\n-\t     0x1.e13dd96b3753ap-45,\n-\t     0x1.b950d32467392p-45,\n-\t     0x1.94a72263259a5p-45,\n-\t     0x1.72fd93e036cdcp-45,\n-\t     0x1.54164576929abp-45,\n-\t     0x1.37b83c521fe96p-45,\n-\t     0x1.1daf033182e96p-45,\n-\t     0x1.05ca50205d26ap-45,\n-\t     0x1.dfbb6235639fap-46,\n-\t     0x1.b7807e294781fp-46,\n-\t     0x1.9298add70a734p-46,\n-\t     0x1.70beaf9c7ffb6p-46,\n-\t     0x1.51b2cd6709222p-46,\n-\t     0x1.353a6cf7f7fffp-46,\n-\t     0x1.1b1fa8cbe84a7p-46,\n-\t     0x1.0330f0fd69921p-46,\n-\t     0x1.da81670f96f9bp-47,\n-\t     0x1.b24a16b4d09aap-47,\n-\t     0x1.8d6eeb6efdbd6p-47,\n-\t     0x1.6ba91ac734785p-47,\n-\t     0x1.4cb7966770ab5p-47,\n-\t     0x1.305e9721d0981p-47,\n-\t     0x1.1667311fff70ap-47,\n-\t     0x1.fd3de10d62855p-48,\n-\t     0x1.d1aefbcd48d0cp-48,\n-\t     0x1.a9cc93c25aca9p-48,\n-\t     0x1.85487ee3ea735p-48,\n-\t     0x1.63daf8b4b1e0cp-48,\n-\t     0x1.45421e69a6ca1p-48,\n-\t     0x1.294175802d99ap-48,\n-\t     0x1.0fa17bf41068fp-48,\n-\t     0x1.f05e82aae2bb9p-49,\n-\t     0x1.c578101b29058p-49,\n-\t     0x1.9e39dc5dd2f7cp-49,\n-\t     0x1.7a553a728bbf2p-49,\n-\t     0x1.5982008db1304p-49,\n-\t     0x1.3b7e00422e51bp-49,\n-\t     0x1.200c898d9ee3ep-49,\n-\t     0x1.06f5f7eb65a56p-49,\n-\t     0x1.e00e9148a1d25p-50,\n-\t     0x1.b623734024e92p-50,\n-\t     0x1.8fd4e01891bf8p-50,\n-\t     0x1.6cd44c7470d89p-50,\n-\t     0x1.4cd9c04158cd7p-50,\n-\t     0x1.2fa34bf5c8344p-50,\n-\t     0x1.14f4890ff2461p-50,\n-\t     0x1.f92c49dfa4df5p-51,\n-\t     0x1.ccaaea71ab0dfp-51,\n-\t     0x1.a40829f001197p-51,\n-\t     0x1.7eef13b59e96cp-51,\n-\t     0x1.5d11e1a252bf5p-51,\n-\t     0x1.3e296303b2297p-51,\n-\t     0x1.21f47009f43cep-51,\n-\t     0x1.083768c5e4541p-51,\n-\t     0x1.e1777d831265ep-52,\n-\t     0x1.b69f10b0191b5p-52,\n-\t     0x1.8f8a3a05b5b52p-52,\n-\t     0x1.6be573c40c8e7p-52,\n-\t     0x1.4b645ba991fdbp-52,\n-\t     0x1.2dc119095729fp-52,\n-  },\n-};\ndiff --git a/sysdeps/aarch64/fpu/sv_erff_data.c b/sysdeps/aarch64/fpu/sv_erff_data.c\ndeleted file mode 100644\nindex 6dcd72af69..0000000000\n--- a/sysdeps/aarch64/fpu/sv_erff_data.c\n+++ /dev/null\n@@ -1,1058 +0,0 @@\n-/* Table for SVE erff approximation\n-\n-   Copyright (C) 2024 Free Software Foundation, Inc.\n-   This file is part of the GNU C Library.\n-\n-   The GNU C Library is free software; you can redistribute it and/or\n-   modify it under the terms of the GNU Lesser General Public\n-   License as published by the Free Software Foundation; either\n-   version 2.1 of the License, or (at your option) any later version.\n-\n-   The GNU C Library is distributed in the hope that it will be useful,\n-   but WITHOUT ANY WARRANTY; without even the implied warranty of\n-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n-   Lesser General Public License for more details.\n-\n-   You should have received a copy of the GNU Lesser General Public\n-   License along with the GNU C Library; if not, see\n-   <https://www.gnu.org/licenses/>.  */\n-\n-#include \"vecmath_config.h\"\n-\n-/* Lookup table used in SVE erff.\n-   For each possible rounded input r (multiples of 1/128), between\n-   r = 0.0 and r = 4.0 (513 values):\n-   - __erff_data.erf contains the values of erf(r),\n-   - __erff_data.scale contains the values of 2/sqrt(pi)*exp(-r^2).\n-   Note that indices 0 and 1 are never hit by the algorithm, since lookup is\n-   performed only for x >= 1/64-1/512.  */\n-const struct sv_erff_data __sv_erff_data = {\n-  .erf = { 0x0.000000p+0,\n-\t   0x1.20dbf4p-7,\n-\t   0x1.20d770p-6,\n-\t   0x1.b137e0p-6,\n-\t   0x1.20c564p-5,\n-\t   0x1.68e5d4p-5,\n-\t   0x1.b0fafep-5,\n-\t   0x1.f902a8p-5,\n-\t   0x1.207d48p-4,\n-\t   0x1.44703ep-4,\n-\t   0x1.68591ap-4,\n-\t   0x1.8c36bep-4,\n-\t   0x1.b00812p-4,\n-\t   0x1.d3cbf8p-4,\n-\t   0x1.f7815ap-4,\n-\t   0x1.0d9390p-3,\n-\t   0x1.1f5e1ap-3,\n-\t   0x1.311fc2p-3,\n-\t   0x1.42d7fcp-3,\n-\t   0x1.548642p-3,\n-\t   0x1.662a0cp-3,\n-\t   0x1.77c2d2p-3,\n-\t   0x1.895010p-3,\n-\t   0x1.9ad142p-3,\n-\t   0x1.ac45e4p-3,\n-\t   0x1.bdad72p-3,\n-\t   0x1.cf076ep-3,\n-\t   0x1.e05354p-3,\n-\t   0x1.f190aap-3,\n-\t   0x1.015f78p-2,\n-\t   0x1.09eed6p-2,\n-\t   0x1.127632p-2,\n-\t   0x1.1af54ep-2,\n-\t   0x1.236bf0p-2,\n-\t   0x1.2bd9dcp-2,\n-\t   0x1.343ed6p-2,\n-\t   0x1.3c9aa8p-2,\n-\t   0x1.44ed18p-2,\n-\t   0x1.4d35f0p-2,\n-\t   0x1.5574f4p-2,\n-\t   0x1.5da9f4p-2,\n-\t   0x1.65d4b8p-2,\n-\t   0x1.6df50ap-2,\n-\t   0x1.760abap-2,\n-\t   0x1.7e1594p-2,\n-\t   0x1.861566p-2,\n-\t   0x1.8e0a02p-2,\n-\t   0x1.95f336p-2,\n-\t   0x1.9dd0d2p-2,\n-\t   0x1.a5a2acp-2,\n-\t   0x1.ad6896p-2,\n-\t   0x1.b52264p-2,\n-\t   0x1.bccfecp-2,\n-\t   0x1.c47104p-2,\n-\t   0x1.cc0584p-2,\n-\t   0x1.d38d44p-2,\n-\t   0x1.db081cp-2,\n-\t   0x1.e275eap-2,\n-\t   0x1.e9d68ap-2,\n-\t   0x1.f129d4p-2,\n-\t   0x1.f86faap-2,\n-\t   0x1.ffa7eap-2,\n-\t   0x1.03693ap-1,\n-\t   0x1.06f794p-1,\n-\t   0x1.0a7ef6p-1,\n-\t   0x1.0dff50p-1,\n-\t   0x1.117894p-1,\n-\t   0x1.14eab4p-1,\n-\t   0x1.1855a6p-1,\n-\t   0x1.1bb95cp-1,\n-\t   0x1.1f15ccp-1,\n-\t   0x1.226ae8p-1,\n-\t   0x1.25b8a8p-1,\n-\t   0x1.28ff02p-1,\n-\t   0x1.2c3decp-1,\n-\t   0x1.2f755cp-1,\n-\t   0x1.32a54cp-1,\n-\t   0x1.35cdb4p-1,\n-\t   0x1.38ee8ap-1,\n-\t   0x1.3c07cap-1,\n-\t   0x1.3f196ep-1,\n-\t   0x1.42236ep-1,\n-\t   0x1.4525c8p-1,\n-\t   0x1.482074p-1,\n-\t   0x1.4b1372p-1,\n-\t   0x1.4dfebap-1,\n-\t   0x1.50e24cp-1,\n-\t   0x1.53be26p-1,\n-\t   0x1.569244p-1,\n-\t   0x1.595ea6p-1,\n-\t   0x1.5c2348p-1,\n-\t   0x1.5ee02ep-1,\n-\t   0x1.619556p-1,\n-\t   0x1.6442c0p-1,\n-\t   0x1.66e86ep-1,\n-\t   0x1.69865ep-1,\n-\t   0x1.6c1c98p-1,\n-\t   0x1.6eab18p-1,\n-\t   0x1.7131e6p-1,\n-\t   0x1.73b102p-1,\n-\t   0x1.762870p-1,\n-\t   0x1.789836p-1,\n-\t   0x1.7b0058p-1,\n-\t   0x1.7d60d8p-1,\n-\t   0x1.7fb9c0p-1,\n-\t   0x1.820b12p-1,\n-\t   0x1.8454d6p-1,\n-\t   0x1.869712p-1,\n-\t   0x1.88d1cep-1,\n-\t   0x1.8b050ep-1,\n-\t   0x1.8d30dep-1,\n-\t   0x1.8f5544p-1,\n-\t   0x1.91724ap-1,\n-\t   0x1.9387f6p-1,\n-\t   0x1.959652p-1,\n-\t   0x1.979d68p-1,\n-\t   0x1.999d42p-1,\n-\t   0x1.9b95e8p-1,\n-\t   0x1.9d8768p-1,\n-\t   0x1.9f71cap-1,\n-\t   0x1.a1551ap-1,\n-\t   0x1.a33162p-1,\n-\t   0x1.a506b0p-1,\n-\t   0x1.a6d50cp-1,\n-\t   0x1.a89c86p-1,\n-\t   0x1.aa5d26p-1,\n-\t   0x1.ac16fcp-1,\n-\t   0x1.adca14p-1,\n-\t   0x1.af767ap-1,\n-\t   0x1.b11c3cp-1,\n-\t   0x1.b2bb68p-1,\n-\t   0x1.b4540ap-1,\n-\t   0x1.b5e630p-1,\n-\t   0x1.b771e8p-1,\n-\t   0x1.b8f742p-1,\n-\t   0x1.ba764ap-1,\n-\t   0x1.bbef10p-1,\n-\t   0x1.bd61a2p-1,\n-\t   0x1.bece0ep-1,\n-\t   0x1.c03464p-1,\n-\t   0x1.c194b2p-1,\n-\t   0x1.c2ef08p-1,\n-\t   0x1.c44376p-1,\n-\t   0x1.c5920ap-1,\n-\t   0x1.c6dad2p-1,\n-\t   0x1.c81de2p-1,\n-\t   0x1.c95b46p-1,\n-\t   0x1.ca930ep-1,\n-\t   0x1.cbc54cp-1,\n-\t   0x1.ccf20cp-1,\n-\t   0x1.ce1962p-1,\n-\t   0x1.cf3b5cp-1,\n-\t   0x1.d0580cp-1,\n-\t   0x1.d16f7ep-1,\n-\t   0x1.d281c4p-1,\n-\t   0x1.d38ef0p-1,\n-\t   0x1.d49710p-1,\n-\t   0x1.d59a34p-1,\n-\t   0x1.d6986cp-1,\n-\t   0x1.d791cap-1,\n-\t   0x1.d8865ep-1,\n-\t   0x1.d97636p-1,\n-\t   0x1.da6162p-1,\n-\t   0x1.db47f4p-1,\n-\t   0x1.dc29fcp-1,\n-\t   0x1.dd0788p-1,\n-\t   0x1.dde0aap-1,\n-\t   0x1.deb570p-1,\n-\t   0x1.df85eap-1,\n-\t   0x1.e0522ap-1,\n-\t   0x1.e11a3ep-1,\n-\t   0x1.e1de36p-1,\n-\t   0x1.e29e22p-1,\n-\t   0x1.e35a12p-1,\n-\t   0x1.e41214p-1,\n-\t   0x1.e4c638p-1,\n-\t   0x1.e5768cp-1,\n-\t   0x1.e62322p-1,\n-\t   0x1.e6cc08p-1,\n-\t   0x1.e7714ap-1,\n-\t   0x1.e812fcp-1,\n-\t   0x1.e8b12ap-1,\n-\t   0x1.e94be4p-1,\n-\t   0x1.e9e336p-1,\n-\t   0x1.ea7730p-1,\n-\t   0x1.eb07e2p-1,\n-\t   0x1.eb9558p-1,\n-\t   0x1.ec1fa2p-1,\n-\t   0x1.eca6ccp-1,\n-\t   0x1.ed2ae6p-1,\n-\t   0x1.edabfcp-1,\n-\t   0x1.ee2a1ep-1,\n-\t   0x1.eea556p-1,\n-\t   0x1.ef1db4p-1,\n-\t   0x1.ef9344p-1,\n-\t   0x1.f00614p-1,\n-\t   0x1.f07630p-1,\n-\t   0x1.f0e3a6p-1,\n-\t   0x1.f14e82p-1,\n-\t   0x1.f1b6d0p-1,\n-\t   0x1.f21ca0p-1,\n-\t   0x1.f27ff8p-1,\n-\t   0x1.f2e0eap-1,\n-\t   0x1.f33f7ep-1,\n-\t   0x1.f39bc2p-1,\n-\t   0x1.f3f5c2p-1,\n-\t   0x1.f44d88p-1,\n-\t   0x1.f4a31ep-1,\n-\t   0x1.f4f694p-1,\n-\t   0x1.f547f2p-1,\n-\t   0x1.f59742p-1,\n-\t   0x1.f5e490p-1,\n-\t   0x1.f62fe8p-1,\n-\t   0x1.f67952p-1,\n-\t   0x1.f6c0dcp-1,\n-\t   0x1.f7068cp-1,\n-\t   0x1.f74a6ep-1,\n-\t   0x1.f78c8cp-1,\n-\t   0x1.f7cceep-1,\n-\t   0x1.f80ba2p-1,\n-\t   0x1.f848acp-1,\n-\t   0x1.f8841ap-1,\n-\t   0x1.f8bdf2p-1,\n-\t   0x1.f8f63ep-1,\n-\t   0x1.f92d08p-1,\n-\t   0x1.f96256p-1,\n-\t   0x1.f99634p-1,\n-\t   0x1.f9c8a8p-1,\n-\t   0x1.f9f9bap-1,\n-\t   0x1.fa2974p-1,\n-\t   0x1.fa57dep-1,\n-\t   0x1.fa84fep-1,\n-\t   0x1.fab0dep-1,\n-\t   0x1.fadb84p-1,\n-\t   0x1.fb04f6p-1,\n-\t   0x1.fb2d40p-1,\n-\t   0x1.fb5464p-1,\n-\t   0x1.fb7a6cp-1,\n-\t   0x1.fb9f60p-1,\n-\t   0x1.fbc344p-1,\n-\t   0x1.fbe61ep-1,\n-\t   0x1.fc07fap-1,\n-\t   0x1.fc28d8p-1,\n-\t   0x1.fc48c2p-1,\n-\t   0x1.fc67bcp-1,\n-\t   0x1.fc85d0p-1,\n-\t   0x1.fca2fep-1,\n-\t   0x1.fcbf52p-1,\n-\t   0x1.fcdaccp-1,\n-\t   0x1.fcf576p-1,\n-\t   0x1.fd0f54p-1,\n-\t   0x1.fd286ap-1,\n-\t   0x1.fd40bep-1,\n-\t   0x1.fd5856p-1,\n-\t   0x1.fd6f34p-1,\n-\t   0x1.fd8562p-1,\n-\t   0x1.fd9ae2p-1,\n-\t   0x1.fdafb8p-1,\n-\t   0x1.fdc3e8p-1,\n-\t   0x1.fdd77ap-1,\n-\t   0x1.fdea6ep-1,\n-\t   0x1.fdfcccp-1,\n-\t   0x1.fe0e96p-1,\n-\t   0x1.fe1fd0p-1,\n-\t   0x1.fe3080p-1,\n-\t   0x1.fe40a6p-1,\n-\t   0x1.fe504cp-1,\n-\t   0x1.fe5f70p-1,\n-\t   0x1.fe6e18p-1,\n-\t   0x1.fe7c46p-1,\n-\t   0x1.fe8a00p-1,\n-\t   0x1.fe9748p-1,\n-\t   0x1.fea422p-1,\n-\t   0x1.feb090p-1,\n-\t   0x1.febc96p-1,\n-\t   0x1.fec836p-1,\n-\t   0x1.fed374p-1,\n-\t   0x1.fede52p-1,\n-\t   0x1.fee8d4p-1,\n-\t   0x1.fef2fep-1,\n-\t   0x1.fefccep-1,\n-\t   0x1.ff064cp-1,\n-\t   0x1.ff0f76p-1,\n-\t   0x1.ff1852p-1,\n-\t   0x1.ff20e0p-1,\n-\t   0x1.ff2924p-1,\n-\t   0x1.ff3120p-1,\n-\t   0x1.ff38d6p-1,\n-\t   0x1.ff4048p-1,\n-\t   0x1.ff4778p-1,\n-\t   0x1.ff4e68p-1,\n-\t   0x1.ff551ap-1,\n-\t   0x1.ff5b90p-1,\n-\t   0x1.ff61ccp-1,\n-\t   0x1.ff67d0p-1,\n-\t   0x1.ff6d9ep-1,\n-\t   0x1.ff7338p-1,\n-\t   0x1.ff789ep-1,\n-\t   0x1.ff7dd4p-1,\n-\t   0x1.ff82dap-1,\n-\t   0x1.ff87b2p-1,\n-\t   0x1.ff8c5cp-1,\n-\t   0x1.ff90dcp-1,\n-\t   0x1.ff9532p-1,\n-\t   0x1.ff9960p-1,\n-\t   0x1.ff9d68p-1,\n-\t   0x1.ffa14ap-1,\n-\t   0x1.ffa506p-1,\n-\t   0x1.ffa8a0p-1,\n-\t   0x1.ffac18p-1,\n-\t   0x1.ffaf6ep-1,\n-\t   0x1.ffb2a6p-1,\n-\t   0x1.ffb5bep-1,\n-\t   0x1.ffb8b8p-1,\n-\t   0x1.ffbb98p-1,\n-\t   0x1.ffbe5ap-1,\n-\t   0x1.ffc102p-1,\n-\t   0x1.ffc390p-1,\n-\t   0x1.ffc606p-1,\n-\t   0x1.ffc862p-1,\n-\t   0x1.ffcaa8p-1,\n-\t   0x1.ffccd8p-1,\n-\t   0x1.ffcef4p-1,\n-\t   0x1.ffd0fap-1,\n-\t   0x1.ffd2eap-1,\n-\t   0x1.ffd4cap-1,\n-\t   0x1.ffd696p-1,\n-\t   0x1.ffd84ep-1,\n-\t   0x1.ffd9f8p-1,\n-\t   0x1.ffdb90p-1,\n-\t   0x1.ffdd18p-1,\n-\t   0x1.ffde90p-1,\n-\t   0x1.ffdffap-1,\n-\t   0x1.ffe154p-1,\n-\t   0x1.ffe2a2p-1,\n-\t   0x1.ffe3e2p-1,\n-\t   0x1.ffe514p-1,\n-\t   0x1.ffe63cp-1,\n-\t   0x1.ffe756p-1,\n-\t   0x1.ffe866p-1,\n-\t   0x1.ffe96ap-1,\n-\t   0x1.ffea64p-1,\n-\t   0x1.ffeb54p-1,\n-\t   0x1.ffec3ap-1,\n-\t   0x1.ffed16p-1,\n-\t   0x1.ffedeap-1,\n-\t   0x1.ffeeb4p-1,\n-\t   0x1.ffef76p-1,\n-\t   0x1.fff032p-1,\n-\t   0x1.fff0e4p-1,\n-\t   0x1.fff18ep-1,\n-\t   0x1.fff232p-1,\n-\t   0x1.fff2d0p-1,\n-\t   0x1.fff366p-1,\n-\t   0x1.fff3f6p-1,\n-\t   0x1.fff480p-1,\n-\t   0x1.fff504p-1,\n-\t   0x1.fff582p-1,\n-\t   0x1.fff5fcp-1,\n-\t   0x1.fff670p-1,\n-\t   0x1.fff6dep-1,\n-\t   0x1.fff74ap-1,\n-\t   0x1.fff7aep-1,\n-\t   0x1.fff810p-1,\n-\t   0x1.fff86cp-1,\n-\t   0x1.fff8c6p-1,\n-\t   0x1.fff91cp-1,\n-\t   0x1.fff96cp-1,\n-\t   0x1.fff9bap-1,\n-\t   0x1.fffa04p-1,\n-\t   0x1.fffa4cp-1,\n-\t   0x1.fffa90p-1,\n-\t   0x1.fffad0p-1,\n-\t   0x1.fffb0ep-1,\n-\t   0x1.fffb4ap-1,\n-\t   0x1.fffb82p-1,\n-\t   0x1.fffbb8p-1,\n-\t   0x1.fffbecp-1,\n-\t   0x1.fffc1ep-1,\n-\t   0x1.fffc4ep-1,\n-\t   0x1.fffc7ap-1,\n-\t   0x1.fffca6p-1,\n-\t   0x1.fffccep-1,\n-\t   0x1.fffcf6p-1,\n-\t   0x1.fffd1ap-1,\n-\t   0x1.fffd3ep-1,\n-\t   0x1.fffd60p-1,\n-\t   0x1.fffd80p-1,\n-\t   0x1.fffda0p-1,\n-\t   0x1.fffdbep-1,\n-\t   0x1.fffddap-1,\n-\t   0x1.fffdf4p-1,\n-\t   0x1.fffe0ep-1,\n-\t   0x1.fffe26p-1,\n-\t   0x1.fffe3ep-1,\n-\t   0x1.fffe54p-1,\n-\t   0x1.fffe68p-1,\n-\t   0x1.fffe7ep-1,\n-\t   0x1.fffe90p-1,\n-\t   0x1.fffea2p-1,\n-\t   0x1.fffeb4p-1,\n-\t   0x1.fffec4p-1,\n-\t   0x1.fffed4p-1,\n-\t   0x1.fffee4p-1,\n-\t   0x1.fffef2p-1,\n-\t   0x1.ffff00p-1,\n-\t   0x1.ffff0cp-1,\n-\t   0x1.ffff18p-1,\n-\t   0x1.ffff24p-1,\n-\t   0x1.ffff30p-1,\n-\t   0x1.ffff3ap-1,\n-\t   0x1.ffff44p-1,\n-\t   0x1.ffff4ep-1,\n-\t   0x1.ffff56p-1,\n-\t   0x1.ffff60p-1,\n-\t   0x1.ffff68p-1,\n-\t   0x1.ffff70p-1,\n-\t   0x1.ffff78p-1,\n-\t   0x1.ffff7ep-1,\n-\t   0x1.ffff84p-1,\n-\t   0x1.ffff8cp-1,\n-\t   0x1.ffff92p-1,\n-\t   0x1.ffff98p-1,\n-\t   0x1.ffff9cp-1,\n-\t   0x1.ffffa2p-1,\n-\t   0x1.ffffa6p-1,\n-\t   0x1.ffffacp-1,\n-\t   0x1.ffffb0p-1,\n-\t   0x1.ffffb4p-1,\n-\t   0x1.ffffb8p-1,\n-\t   0x1.ffffbcp-1,\n-\t   0x1.ffffc0p-1,\n-\t   0x1.ffffc4p-1,\n-\t   0x1.ffffc6p-1,\n-\t   0x1.ffffcap-1,\n-\t   0x1.ffffccp-1,\n-\t   0x1.ffffd0p-1,\n-\t   0x1.ffffd2p-1,\n-\t   0x1.ffffd4p-1,\n-\t   0x1.ffffd6p-1,\n-\t   0x1.ffffd8p-1,\n-\t   0x1.ffffdcp-1,\n-\t   0x1.ffffdep-1,\n-\t   0x1.ffffdep-1,\n-\t   0x1.ffffe0p-1,\n-\t   0x1.ffffe2p-1,\n-\t   0x1.ffffe4p-1,\n-\t   0x1.ffffe6p-1,\n-\t   0x1.ffffe8p-1,\n-\t   0x1.ffffe8p-1,\n-\t   0x1.ffffeap-1,\n-\t   0x1.ffffeap-1,\n-\t   0x1.ffffecp-1,\n-\t   0x1.ffffeep-1,\n-\t   0x1.ffffeep-1,\n-\t   0x1.fffff0p-1,\n-\t   0x1.fffff0p-1,\n-\t   0x1.fffff2p-1,\n-\t   0x1.fffff2p-1,\n-\t   0x1.fffff2p-1,\n-\t   0x1.fffff4p-1,\n-\t   0x1.fffff4p-1,\n-\t   0x1.fffff4p-1,\n-\t   0x1.fffff6p-1,\n-\t   0x1.fffff6p-1,\n-\t   0x1.fffff6p-1,\n-\t   0x1.fffff8p-1,\n-\t   0x1.fffff8p-1,\n-\t   0x1.fffff8p-1,\n-\t   0x1.fffff8p-1,\n-\t   0x1.fffffap-1,\n-\t   0x1.fffffap-1,\n-\t   0x1.fffffap-1,\n-\t   0x1.fffffap-1,\n-\t   0x1.fffffap-1,\n-\t   0x1.fffffap-1,\n-\t   0x1.fffffcp-1,\n-\t   0x1.fffffcp-1,\n-\t   0x1.fffffcp-1,\n-\t   0x1.fffffcp-1,\n-\t   0x1.fffffcp-1,\n-\t   0x1.fffffcp-1,\n-\t   0x1.fffffcp-1,\n-\t   0x1.fffffcp-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.000000p+0,\n-\t   0x1.000000p+0,\n-\t   0x1.000000p+0,\n-\t   0x1.000000p+0,\n-\t   0x1.000000p+0,\n-\t   0x1.000000p+0,\n-\t   0x1.000000p+0,\n-\t   0x1.000000p+0,\n-\t   0x1.000000p+0,\n-\t   0x1.000000p+0,\n-\t   0x1.000000p+0,\n-  },\n-  .scale = { 0x1.20dd76p+0,\n-\t     0x1.20d8f2p+0,\n-\t     0x1.20cb68p+0,\n-\t     0x1.20b4d8p+0,\n-\t     0x1.209546p+0,\n-\t     0x1.206cb4p+0,\n-\t     0x1.203b26p+0,\n-\t     0x1.2000a0p+0,\n-\t     0x1.1fbd28p+0,\n-\t     0x1.1f70c4p+0,\n-\t     0x1.1f1b7ap+0,\n-\t     0x1.1ebd56p+0,\n-\t     0x1.1e565cp+0,\n-\t     0x1.1de698p+0,\n-\t     0x1.1d6e14p+0,\n-\t     0x1.1cecdcp+0,\n-\t     0x1.1c62fap+0,\n-\t     0x1.1bd07cp+0,\n-\t     0x1.1b3572p+0,\n-\t     0x1.1a91e6p+0,\n-\t     0x1.19e5eap+0,\n-\t     0x1.19318cp+0,\n-\t     0x1.1874dep+0,\n-\t     0x1.17aff0p+0,\n-\t     0x1.16e2d8p+0,\n-\t     0x1.160da4p+0,\n-\t     0x1.153068p+0,\n-\t     0x1.144b3cp+0,\n-\t     0x1.135e30p+0,\n-\t     0x1.12695ep+0,\n-\t     0x1.116cd8p+0,\n-\t     0x1.1068bap+0,\n-\t     0x1.0f5d16p+0,\n-\t     0x1.0e4a08p+0,\n-\t     0x1.0d2fa6p+0,\n-\t     0x1.0c0e0ap+0,\n-\t     0x1.0ae550p+0,\n-\t     0x1.09b590p+0,\n-\t     0x1.087ee4p+0,\n-\t     0x1.07416cp+0,\n-\t     0x1.05fd3ep+0,\n-\t     0x1.04b27cp+0,\n-\t     0x1.036140p+0,\n-\t     0x1.0209a6p+0,\n-\t     0x1.00abd0p+0,\n-\t     0x1.fe8fb0p-1,\n-\t     0x1.fbbbbep-1,\n-\t     0x1.f8dc0ap-1,\n-\t     0x1.f5f0cep-1,\n-\t     0x1.f2fa4cp-1,\n-\t     0x1.eff8c4p-1,\n-\t     0x1.ecec78p-1,\n-\t     0x1.e9d5a8p-1,\n-\t     0x1.e6b498p-1,\n-\t     0x1.e38988p-1,\n-\t     0x1.e054bep-1,\n-\t     0x1.dd167cp-1,\n-\t     0x1.d9cf06p-1,\n-\t     0x1.d67ea2p-1,\n-\t     0x1.d32592p-1,\n-\t     0x1.cfc41ep-1,\n-\t     0x1.cc5a8ap-1,\n-\t     0x1.c8e91cp-1,\n-\t     0x1.c5701ap-1,\n-\t     0x1.c1efcap-1,\n-\t     0x1.be6872p-1,\n-\t     0x1.bada5ap-1,\n-\t     0x1.b745c6p-1,\n-\t     0x1.b3aafcp-1,\n-\t     0x1.b00a46p-1,\n-\t     0x1.ac63e8p-1,\n-\t     0x1.a8b828p-1,\n-\t     0x1.a5074ep-1,\n-\t     0x1.a1519ep-1,\n-\t     0x1.9d9762p-1,\n-\t     0x1.99d8dap-1,\n-\t     0x1.961650p-1,\n-\t     0x1.925008p-1,\n-\t     0x1.8e8646p-1,\n-\t     0x1.8ab950p-1,\n-\t     0x1.86e96ap-1,\n-\t     0x1.8316d6p-1,\n-\t     0x1.7f41dcp-1,\n-\t     0x1.7b6abcp-1,\n-\t     0x1.7791b8p-1,\n-\t     0x1.73b714p-1,\n-\t     0x1.6fdb12p-1,\n-\t     0x1.6bfdf0p-1,\n-\t     0x1.681ff2p-1,\n-\t     0x1.644156p-1,\n-\t     0x1.60625cp-1,\n-\t     0x1.5c8342p-1,\n-\t     0x1.58a446p-1,\n-\t     0x1.54c5a6p-1,\n-\t     0x1.50e79ep-1,\n-\t     0x1.4d0a68p-1,\n-\t     0x1.492e42p-1,\n-\t     0x1.455366p-1,\n-\t     0x1.417a0cp-1,\n-\t     0x1.3da26ep-1,\n-\t     0x1.39ccc2p-1,\n-\t     0x1.35f940p-1,\n-\t     0x1.32281ep-1,\n-\t     0x1.2e5992p-1,\n-\t     0x1.2a8dcep-1,\n-\t     0x1.26c508p-1,\n-\t     0x1.22ff72p-1,\n-\t     0x1.1f3d3cp-1,\n-\t     0x1.1b7e98p-1,\n-\t     0x1.17c3b6p-1,\n-\t     0x1.140cc4p-1,\n-\t     0x1.1059eep-1,\n-\t     0x1.0cab62p-1,\n-\t     0x1.09014cp-1,\n-\t     0x1.055bd6p-1,\n-\t     0x1.01bb2cp-1,\n-\t     0x1.fc3ee6p-2,\n-\t     0x1.f511aap-2,\n-\t     0x1.edeeeep-2,\n-\t     0x1.e6d700p-2,\n-\t     0x1.dfca26p-2,\n-\t     0x1.d8c8aap-2,\n-\t     0x1.d1d2d0p-2,\n-\t     0x1.cae8dap-2,\n-\t     0x1.c40b08p-2,\n-\t     0x1.bd3998p-2,\n-\t     0x1.b674c8p-2,\n-\t     0x1.afbcd4p-2,\n-\t     0x1.a911f0p-2,\n-\t     0x1.a27456p-2,\n-\t     0x1.9be438p-2,\n-\t     0x1.9561c8p-2,\n-\t     0x1.8eed36p-2,\n-\t     0x1.8886b2p-2,\n-\t     0x1.822e66p-2,\n-\t     0x1.7be47ap-2,\n-\t     0x1.75a91ap-2,\n-\t     0x1.6f7c6ap-2,\n-\t     0x1.695e8cp-2,\n-\t     0x1.634fa6p-2,\n-\t     0x1.5d4fd4p-2,\n-\t     0x1.575f34p-2,\n-\t     0x1.517de6p-2,\n-\t     0x1.4bac00p-2,\n-\t     0x1.45e99cp-2,\n-\t     0x1.4036d0p-2,\n-\t     0x1.3a93b2p-2,\n-\t     0x1.350052p-2,\n-\t     0x1.2f7cc4p-2,\n-\t     0x1.2a0916p-2,\n-\t     0x1.24a554p-2,\n-\t     0x1.1f518ap-2,\n-\t     0x1.1a0dc6p-2,\n-\t     0x1.14da0ap-2,\n-\t     0x1.0fb662p-2,\n-\t     0x1.0aa2d0p-2,\n-\t     0x1.059f5ap-2,\n-\t     0x1.00ac00p-2,\n-\t     0x1.f79184p-3,\n-\t     0x1.edeb40p-3,\n-\t     0x1.e46530p-3,\n-\t     0x1.daff4ap-3,\n-\t     0x1.d1b982p-3,\n-\t     0x1.c893cep-3,\n-\t     0x1.bf8e1cp-3,\n-\t     0x1.b6a856p-3,\n-\t     0x1.ade26cp-3,\n-\t     0x1.a53c42p-3,\n-\t     0x1.9cb5bep-3,\n-\t     0x1.944ec2p-3,\n-\t     0x1.8c0732p-3,\n-\t     0x1.83deeap-3,\n-\t     0x1.7bd5c8p-3,\n-\t     0x1.73eba4p-3,\n-\t     0x1.6c2056p-3,\n-\t     0x1.6473b6p-3,\n-\t     0x1.5ce596p-3,\n-\t     0x1.5575c8p-3,\n-\t     0x1.4e241ep-3,\n-\t     0x1.46f066p-3,\n-\t     0x1.3fda6cp-3,\n-\t     0x1.38e1fap-3,\n-\t     0x1.3206dcp-3,\n-\t     0x1.2b48dap-3,\n-\t     0x1.24a7b8p-3,\n-\t     0x1.1e233ep-3,\n-\t     0x1.17bb2cp-3,\n-\t     0x1.116f48p-3,\n-\t     0x1.0b3f52p-3,\n-\t     0x1.052b0cp-3,\n-\t     0x1.fe6460p-4,\n-\t     0x1.f2a902p-4,\n-\t     0x1.e72372p-4,\n-\t     0x1.dbd32ap-4,\n-\t     0x1.d0b7a0p-4,\n-\t     0x1.c5d04ap-4,\n-\t     0x1.bb1c98p-4,\n-\t     0x1.b09bfcp-4,\n-\t     0x1.a64de6p-4,\n-\t     0x1.9c31c6p-4,\n-\t     0x1.92470ap-4,\n-\t     0x1.888d1ep-4,\n-\t     0x1.7f036cp-4,\n-\t     0x1.75a960p-4,\n-\t     0x1.6c7e64p-4,\n-\t     0x1.6381e2p-4,\n-\t     0x1.5ab342p-4,\n-\t     0x1.5211ecp-4,\n-\t     0x1.499d48p-4,\n-\t     0x1.4154bcp-4,\n-\t     0x1.3937b2p-4,\n-\t     0x1.31458ep-4,\n-\t     0x1.297dbap-4,\n-\t     0x1.21df9ap-4,\n-\t     0x1.1a6a96p-4,\n-\t     0x1.131e14p-4,\n-\t     0x1.0bf97ep-4,\n-\t     0x1.04fc3ap-4,\n-\t     0x1.fc4b5ep-5,\n-\t     0x1.eeea8cp-5,\n-\t     0x1.e1d4d0p-5,\n-\t     0x1.d508fap-5,\n-\t     0x1.c885e0p-5,\n-\t     0x1.bc4a54p-5,\n-\t     0x1.b05530p-5,\n-\t     0x1.a4a54ap-5,\n-\t     0x1.99397ap-5,\n-\t     0x1.8e109cp-5,\n-\t     0x1.83298ep-5,\n-\t     0x1.78832cp-5,\n-\t     0x1.6e1c58p-5,\n-\t     0x1.63f3f6p-5,\n-\t     0x1.5a08e8p-5,\n-\t     0x1.505a18p-5,\n-\t     0x1.46e66cp-5,\n-\t     0x1.3dacd2p-5,\n-\t     0x1.34ac36p-5,\n-\t     0x1.2be38cp-5,\n-\t     0x1.2351c2p-5,\n-\t     0x1.1af5d2p-5,\n-\t     0x1.12ceb4p-5,\n-\t     0x1.0adb60p-5,\n-\t     0x1.031ad6p-5,\n-\t     0x1.f7182ap-6,\n-\t     0x1.e85c44p-6,\n-\t     0x1.da0006p-6,\n-\t     0x1.cc0180p-6,\n-\t     0x1.be5ecep-6,\n-\t     0x1.b1160ap-6,\n-\t     0x1.a4255ap-6,\n-\t     0x1.978ae8p-6,\n-\t     0x1.8b44e6p-6,\n-\t     0x1.7f5188p-6,\n-\t     0x1.73af0cp-6,\n-\t     0x1.685bb6p-6,\n-\t     0x1.5d55ccp-6,\n-\t     0x1.529b9ep-6,\n-\t     0x1.482b84p-6,\n-\t     0x1.3e03d8p-6,\n-\t     0x1.3422fep-6,\n-\t     0x1.2a875cp-6,\n-\t     0x1.212f62p-6,\n-\t     0x1.181984p-6,\n-\t     0x1.0f443ep-6,\n-\t     0x1.06ae14p-6,\n-\t     0x1.fcab14p-7,\n-\t     0x1.ec7262p-7,\n-\t     0x1.dcaf36p-7,\n-\t     0x1.cd5ecap-7,\n-\t     0x1.be7e5ap-7,\n-\t     0x1.b00b38p-7,\n-\t     0x1.a202bep-7,\n-\t     0x1.94624ep-7,\n-\t     0x1.87275ep-7,\n-\t     0x1.7a4f6ap-7,\n-\t     0x1.6dd7fep-7,\n-\t     0x1.61beaep-7,\n-\t     0x1.56011cp-7,\n-\t     0x1.4a9cf6p-7,\n-\t     0x1.3f8ff6p-7,\n-\t     0x1.34d7dcp-7,\n-\t     0x1.2a727ap-7,\n-\t     0x1.205dacp-7,\n-\t     0x1.169756p-7,\n-\t     0x1.0d1d6ap-7,\n-\t     0x1.03ede2p-7,\n-\t     0x1.f60d8ap-8,\n-\t     0x1.e4cc4ap-8,\n-\t     0x1.d4143ap-8,\n-\t     0x1.c3e1a6p-8,\n-\t     0x1.b430ecp-8,\n-\t     0x1.a4fe84p-8,\n-\t     0x1.9646f4p-8,\n-\t     0x1.8806d8p-8,\n-\t     0x1.7a3adep-8,\n-\t     0x1.6cdfccp-8,\n-\t     0x1.5ff276p-8,\n-\t     0x1.536fc2p-8,\n-\t     0x1.4754acp-8,\n-\t     0x1.3b9e40p-8,\n-\t     0x1.30499cp-8,\n-\t     0x1.2553eep-8,\n-\t     0x1.1aba78p-8,\n-\t     0x1.107a8cp-8,\n-\t     0x1.06918cp-8,\n-\t     0x1.f9f9d0p-9,\n-\t     0x1.e77448p-9,\n-\t     0x1.d58da6p-9,\n-\t     0x1.c4412cp-9,\n-\t     0x1.b38a3ap-9,\n-\t     0x1.a36454p-9,\n-\t     0x1.93cb12p-9,\n-\t     0x1.84ba30p-9,\n-\t     0x1.762d84p-9,\n-\t     0x1.682100p-9,\n-\t     0x1.5a90b0p-9,\n-\t     0x1.4d78bcp-9,\n-\t     0x1.40d564p-9,\n-\t     0x1.34a306p-9,\n-\t     0x1.28de12p-9,\n-\t     0x1.1d8318p-9,\n-\t     0x1.128ebap-9,\n-\t     0x1.07fdb4p-9,\n-\t     0x1.fb99b8p-10,\n-\t     0x1.e7f232p-10,\n-\t     0x1.d4fed8p-10,\n-\t     0x1.c2b9d0p-10,\n-\t     0x1.b11d70p-10,\n-\t     0x1.a02436p-10,\n-\t     0x1.8fc8c8p-10,\n-\t     0x1.8005f0p-10,\n-\t     0x1.70d6a4p-10,\n-\t     0x1.6235fcp-10,\n-\t     0x1.541f34p-10,\n-\t     0x1.468daep-10,\n-\t     0x1.397ceep-10,\n-\t     0x1.2ce898p-10,\n-\t     0x1.20cc76p-10,\n-\t     0x1.15246ep-10,\n-\t     0x1.09ec86p-10,\n-\t     0x1.fe41cep-11,\n-\t     0x1.e97ba4p-11,\n-\t     0x1.d57f52p-11,\n-\t     0x1.c245d4p-11,\n-\t     0x1.afc85ep-11,\n-\t     0x1.9e0058p-11,\n-\t     0x1.8ce75ep-11,\n-\t     0x1.7c7744p-11,\n-\t     0x1.6caa0ep-11,\n-\t     0x1.5d79ecp-11,\n-\t     0x1.4ee142p-11,\n-\t     0x1.40daa4p-11,\n-\t     0x1.3360ccp-11,\n-\t     0x1.266ea8p-11,\n-\t     0x1.19ff46p-11,\n-\t     0x1.0e0de8p-11,\n-\t     0x1.0295f0p-11,\n-\t     0x1.ef25d4p-12,\n-\t     0x1.da0110p-12,\n-\t     0x1.c5b542p-12,\n-\t     0x1.b23a5ap-12,\n-\t     0x1.9f8894p-12,\n-\t     0x1.8d986ap-12,\n-\t     0x1.7c629ap-12,\n-\t     0x1.6be022p-12,\n-\t     0x1.5c0a38p-12,\n-\t     0x1.4cda54p-12,\n-\t     0x1.3e4a24p-12,\n-\t     0x1.305390p-12,\n-\t     0x1.22f0b4p-12,\n-\t     0x1.161be4p-12,\n-\t     0x1.09cfa4p-12,\n-\t     0x1.fc0d56p-13,\n-\t     0x1.e577bcp-13,\n-\t     0x1.cfd4a6p-13,\n-\t     0x1.bb1a96p-13,\n-\t     0x1.a74068p-13,\n-\t     0x1.943d4ap-13,\n-\t     0x1.8208bcp-13,\n-\t     0x1.709a8ep-13,\n-\t     0x1.5feadap-13,\n-\t     0x1.4ff208p-13,\n-\t     0x1.40a8c2p-13,\n-\t     0x1.3207fcp-13,\n-\t     0x1.2408eap-13,\n-\t     0x1.16a502p-13,\n-\t     0x1.09d5f8p-13,\n-\t     0x1.fb2b7ap-14,\n-\t     0x1.e3bcf4p-14,\n-\t     0x1.cd5528p-14,\n-\t     0x1.b7e946p-14,\n-\t     0x1.a36eecp-14,\n-\t     0x1.8fdc1cp-14,\n-\t     0x1.7d2738p-14,\n-\t     0x1.6b4702p-14,\n-\t     0x1.5a329cp-14,\n-\t     0x1.49e178p-14,\n-\t     0x1.3a4b60p-14,\n-\t     0x1.2b6876p-14,\n-\t     0x1.1d3120p-14,\n-\t     0x1.0f9e1cp-14,\n-\t     0x1.02a868p-14,\n-\t     0x1.ec929ap-15,\n-\t     0x1.d4f4b4p-15,\n-\t     0x1.be6abcp-15,\n-\t     0x1.a8e8ccp-15,\n-\t     0x1.94637ep-15,\n-\t     0x1.80cfdcp-15,\n-\t     0x1.6e2368p-15,\n-\t     0x1.5c540cp-15,\n-\t     0x1.4b581cp-15,\n-\t     0x1.3b2652p-15,\n-\t     0x1.2bb5ccp-15,\n-\t     0x1.1cfe02p-15,\n-\t     0x1.0ef6c4p-15,\n-\t     0x1.019842p-15,\n-\t     0x1.e9b5e8p-16,\n-\t     0x1.d16f58p-16,\n-\t     0x1.ba4f04p-16,\n-\t     0x1.a447b8p-16,\n-\t     0x1.8f4cccp-16,\n-\t     0x1.7b5224p-16,\n-\t     0x1.684c22p-16,\n-\t     0x1.562facp-16,\n-\t     0x1.44f21ep-16,\n-\t     0x1.34894ap-16,\n-\t     0x1.24eb72p-16,\n-\t     0x1.160f44p-16,\n-\t     0x1.07ebd2p-16,\n-\t     0x1.f4f12ep-17,\n-\t     0x1.db5ad0p-17,\n-\t     0x1.c304f0p-17,\n-\t     0x1.abe09ep-17,\n-\t     0x1.95df98p-17,\n-\t     0x1.80f43ap-17,\n-\t     0x1.6d1178p-17,\n-\t     0x1.5a2ae0p-17,\n-\t     0x1.483488p-17,\n-\t     0x1.372310p-17,\n-\t     0x1.26eb9ep-17,\n-\t     0x1.1783cep-17,\n-\t     0x1.08e1bap-17,\n-\t     0x1.f5f7d8p-18,\n-\t     0x1.db92b6p-18,\n-\t     0x1.c282cep-18,\n-\t     0x1.aab7acp-18,\n-\t     0x1.94219cp-18,\n-\t     0x1.7eb1a2p-18,\n-\t     0x1.6a5972p-18,\n-\t     0x1.570b6ap-18,\n-\t     0x1.44ba86p-18,\n-\t     0x1.335a62p-18,\n-\t     0x1.22df2ap-18,\n-\t     0x1.133d96p-18,\n-\t     0x1.046aeap-18,\n-\t     0x1.ecb9d0p-19,\n-\t     0x1.d21398p-19,\n-\t     0x1.b8d094p-19,\n-\t     0x1.a0df10p-19,\n-\t     0x1.8a2e26p-19,\n-\t     0x1.74adc8p-19,\n-\t     0x1.604ea8p-19,\n-\t     0x1.4d0232p-19,\n-\t     0x1.3aba86p-19,\n-\t     0x1.296a70p-19,\n-\t     0x1.190562p-19,\n-\t     0x1.097f62p-19,\n-\t     0x1.f59a20p-20,\n-\t     0x1.d9c736p-20,\n-\t     0x1.bf716cp-20,\n-\t     0x1.a6852cp-20,\n-\t     0x1.8eefd8p-20,\n-\t     0x1.789fb8p-20,\n-\t     0x1.6383f8p-20,\n-\t     0x1.4f8c96p-20,\n-\t     0x1.3caa62p-20,\n-\t     0x1.2acee2p-20,\n-\t     0x1.19ec60p-20,\n-\t     0x1.09f5d0p-20,\n-\t     0x1.f5bd96p-21,\n-\t     0x1.d9371ep-21,\n-\t     0x1.be41dep-21,\n-\t     0x1.a4c89ep-21,\n-\t     0x1.8cb738p-21,\n-\t     0x1.75fa8ep-21,\n-\t     0x1.608078p-21,\n-\t     0x1.4c37c0p-21,\n-\t     0x1.39100ep-21,\n-\t     0x1.26f9e0p-21,\n-\t     0x1.15e682p-21,\n-\t     0x1.05c804p-21,\n-\t     0x1.ed2254p-22,\n-\t     0x1.d06ad6p-22,\n-\t     0x1.b551c8p-22,\n-\t     0x1.9bc0a0p-22,\n-\t     0x1.83a200p-22,\n-\t     0x1.6ce1aap-22,\n-\t     0x1.576c72p-22,\n-\t     0x1.43302cp-22,\n-\t     0x1.301ba2p-22,\n-\t     0x1.1e1e86p-22,\n-\t     0x1.0d2966p-22,\n-\t     0x1.fa5b50p-23,\n-\t     0x1.dc3ae4p-23,\n-\t     0x1.bfd756p-23,\n-\t     0x1.a517dap-23,\n-\t     0x1.8be4f8p-23,\n-\t     0x1.74287ep-23,\n-\t     0x1.5dcd66p-23,\n-\t     0x1.48bfd4p-23,\n-\t     0x1.34ecf8p-23,\n-\t     0x1.224310p-23,\n-\t     0x1.10b148p-23,\n-  },\n-};\ndiff --git a/sysdeps/aarch64/fpu/vecmath_config.h b/sysdeps/aarch64/fpu/vecmath_config.h\nindex 7f0a8aa5f2..862eefaf8f 100644\n--- a/sysdeps/aarch64/fpu/vecmath_config.h\n+++ b/sysdeps/aarch64/fpu/vecmath_config.h\n@@ -75,49 +75,37 @@ extern const struct v_log10_data\n   } table[1 << V_LOG10_TABLE_BITS];\n } __v_log10_data attribute_hidden;\n \n-extern const struct erff_data\n+extern const struct v_erff_data\n {\n   struct\n   {\n     float erf, scale;\n   } tab[513];\n-} __erff_data attribute_hidden;\n+} __v_erff_data attribute_hidden;\n \n-extern const struct sv_erff_data\n-{\n-  float erf[513];\n-  float scale[513];\n-} __sv_erff_data attribute_hidden;\n-\n-extern const struct erf_data\n+extern const struct v_erf_data\n {\n   struct\n   {\n     double erf, scale;\n   } tab[769];\n-} __erf_data attribute_hidden;\n-\n-extern const struct sv_erf_data\n-{\n-  double erf[769];\n-  double scale[769];\n-} __sv_erf_data attribute_hidden;\n+} __v_erf_data attribute_hidden;\n \n-extern const struct erfc_data\n+extern const struct v_erfc_data\n {\n   struct\n   {\n     double erfc, scale;\n   } tab[3488];\n-} __erfc_data attribute_hidden;\n+} __v_erfc_data attribute_hidden;\n \n-extern const struct erfcf_data\n+extern const struct v_erfcf_data\n {\n   struct\n   {\n     float erfc, scale;\n   } tab[645];\n-} __erfcf_data attribute_hidden;\n+} __v_erfcf_data attribute_hidden;\n \n /* Some data for AdvSIMD and SVE pow's internal exp and log.  */\n #define V_POW_EXP_TABLE_BITS 8\n\ncommit 4148940836eee07d1138da6f1805280eeb8217e3\nAuthor: Pierre Blanchard <pierre.blanchard@arm.com>\nDate:   Mon Dec 9 15:53:04 2024 +0000\n\n    AArch64: Improve codegen in AdvSIMD pow\n    \n    Remove spurious ADRP. Improve memory access by shuffling constants and\n    using more indexed MLAs.\n    \n    A few more optimisation with no impact on accuracy\n    - force fmas contraction\n    - switch from shift-aided rint to rint instruction\n    \n    Between 1 and 5% throughput improvement on Neoverse\n    V1 depending on benchmark.\n    \n    (cherry picked from commit 569cfaaf4984ae70b23c61ee28a609b5aef93fea)\n\ndiff --git a/sysdeps/aarch64/fpu/pow_advsimd.c b/sysdeps/aarch64/fpu/pow_advsimd.c\nindex 3c91e3e183..81e134ac2f 100644\n--- a/sysdeps/aarch64/fpu/pow_advsimd.c\n+++ b/sysdeps/aarch64/fpu/pow_advsimd.c\n@@ -22,9 +22,6 @@\n /* Defines parameters of the approximation and scalar fallback.  */\n #include \"finite_pow.h\"\n \n-#define VecSmallExp v_u64 (SmallExp)\n-#define VecThresExp v_u64 (ThresExp)\n-\n #define VecSmallPowX v_u64 (SmallPowX)\n #define VecThresPowX v_u64 (ThresPowX)\n #define VecSmallPowY v_u64 (SmallPowY)\n@@ -32,36 +29,48 @@\n \n static const struct data\n {\n-  float64x2_t log_poly[6];\n-  float64x2_t exp_poly[3];\n-  float64x2_t ln2_hi, ln2_lo;\n-  float64x2_t shift, inv_ln2_n, ln2_hi_n, ln2_lo_n, small_powx;\n   uint64x2_t inf;\n+  float64x2_t small_powx;\n+  uint64x2_t offset, mask;\n+  uint64x2_t mask_sub_0, mask_sub_1;\n+  float64x2_t log_c0, log_c2, log_c4, log_c5;\n+  double log_c1, log_c3;\n+  double ln2_lo, ln2_hi;\n+  uint64x2_t small_exp, thres_exp;\n+  double ln2_lo_n, ln2_hi_n;\n+  double inv_ln2_n, exp_c2;\n+  float64x2_t exp_c0, exp_c1;\n } data = {\n+  /* Power threshold.  */\n+  .inf = V2 (0x7ff0000000000000),\n+  .small_powx = V2 (0x1p-126),\n+  .offset = V2 (Off),\n+  .mask = V2 (0xfffULL << 52),\n+  .mask_sub_0 = V2 (1ULL << 52),\n+  .mask_sub_1 = V2 (52ULL << 52),\n   /* Coefficients copied from v_pow_log_data.c\n      relative error: 0x1.11922ap-70 in [-0x1.6bp-8, 0x1.6bp-8]\n      Coefficients are scaled to match the scaling during evaluation.  */\n-  .log_poly\n-  = { V2 (0x1.555555555556p-2 * -2), V2 (-0x1.0000000000006p-2 * -2),\n-      V2 (0x1.999999959554ep-3 * 4), V2 (-0x1.555555529a47ap-3 * 4),\n-      V2 (0x1.2495b9b4845e9p-3 * -8), V2 (-0x1.0002b8b263fc3p-3 * -8) },\n-  .ln2_hi = V2 (0x1.62e42fefa3800p-1),\n-  .ln2_lo = V2 (0x1.ef35793c76730p-45),\n+  .log_c0 = V2 (0x1.555555555556p-2 * -2),\n+  .log_c1 = -0x1.0000000000006p-2 * -2,\n+  .log_c2 = V2 (0x1.999999959554ep-3 * 4),\n+  .log_c3 = -0x1.555555529a47ap-3 * 4,\n+  .log_c4 = V2 (0x1.2495b9b4845e9p-3 * -8),\n+  .log_c5 = V2 (-0x1.0002b8b263fc3p-3 * -8),\n+  .ln2_hi = 0x1.62e42fefa3800p-1,\n+  .ln2_lo = 0x1.ef35793c76730p-45,\n   /* Polynomial coefficients: abs error: 1.43*2^-58, ulp error: 0.549\n      (0.550 without fma) if |x| < ln2/512.  */\n-  .exp_poly = { V2 (0x1.fffffffffffd4p-2), V2 (0x1.5555571d6ef9p-3),\n-\t\tV2 (0x1.5555576a5adcep-5) },\n-  .shift = V2 (0x1.8p52), /* round to nearest int. without intrinsics.  */\n-  .inv_ln2_n = V2 (0x1.71547652b82fep8), /* N/ln2.  */\n-  .ln2_hi_n = V2 (0x1.62e42fefc0000p-9), /* ln2/N.  */\n-  .ln2_lo_n = V2 (-0x1.c610ca86c3899p-45),\n-  .small_powx = V2 (0x1p-126),\n-  .inf = V2 (0x7ff0000000000000)\n+  .exp_c0 = V2 (0x1.fffffffffffd4p-2),\n+  .exp_c1 = V2 (0x1.5555571d6ef9p-3),\n+  .exp_c2 = 0x1.5555576a5adcep-5,\n+  .small_exp = V2 (0x3c90000000000000),\n+  .thres_exp = V2 (0x03f0000000000000),\n+  .inv_ln2_n = 0x1.71547652b82fep8, /* N/ln2.  */\n+  .ln2_hi_n = 0x1.62e42fefc0000p-9, /* ln2/N.  */\n+  .ln2_lo_n = -0x1.c610ca86c3899p-45,\n };\n \n-#define A(i) data.log_poly[i]\n-#define C(i) data.exp_poly[i]\n-\n /* This version implements an algorithm close to scalar pow but\n    - does not implement the trick in the exp's specialcase subroutine to avoid\n      double-rounding,\n@@ -91,10 +100,9 @@ v_log_inline (uint64x2_t ix, float64x2_t *tail, const struct data *d)\n   /* x = 2^k z; where z is in range [OFF,2*OFF) and exact.\n      The range is split into N subintervals.\n      The ith subinterval contains z and c is near its center.  */\n-  uint64x2_t tmp = vsubq_u64 (ix, v_u64 (Off));\n-  int64x2_t k\n-      = vshrq_n_s64 (vreinterpretq_s64_u64 (tmp), 52); /* arithmetic shift.  */\n-  uint64x2_t iz = vsubq_u64 (ix, vandq_u64 (tmp, v_u64 (0xfffULL << 52)));\n+  uint64x2_t tmp = vsubq_u64 (ix, d->offset);\n+  int64x2_t k = vshrq_n_s64 (vreinterpretq_s64_u64 (tmp), 52);\n+  uint64x2_t iz = vsubq_u64 (ix, vandq_u64 (tmp, d->mask));\n   float64x2_t z = vreinterpretq_f64_u64 (iz);\n   float64x2_t kd = vcvtq_f64_s64 (k);\n   /* log(x) = k*Ln2 + log(c) + log1p(z/c-1).  */\n@@ -105,9 +113,10 @@ v_log_inline (uint64x2_t ix, float64x2_t *tail, const struct data *d)\n      |z/c - 1| < 1/N, so r = z/c - 1 is exactly representible.  */\n   float64x2_t r = vfmaq_f64 (v_f64 (-1.0), z, invc);\n   /* k*Ln2 + log(c) + r.  */\n-  float64x2_t t1 = vfmaq_f64 (logc, kd, d->ln2_hi);\n+  float64x2_t ln2 = vld1q_f64 (&d->ln2_lo);\n+  float64x2_t t1 = vfmaq_laneq_f64 (logc, kd, ln2, 1);\n   float64x2_t t2 = vaddq_f64 (t1, r);\n-  float64x2_t lo1 = vfmaq_f64 (logctail, kd, d->ln2_lo);\n+  float64x2_t lo1 = vfmaq_laneq_f64 (logctail, kd, ln2, 0);\n   float64x2_t lo2 = vaddq_f64 (vsubq_f64 (t1, t2), r);\n   /* Evaluation is optimized assuming superscalar pipelined execution.  */\n   float64x2_t ar = vmulq_f64 (v_f64 (-0.5), r);\n@@ -118,9 +127,10 @@ v_log_inline (uint64x2_t ix, float64x2_t *tail, const struct data *d)\n   float64x2_t lo3 = vfmaq_f64 (vnegq_f64 (ar2), ar, r);\n   float64x2_t lo4 = vaddq_f64 (vsubq_f64 (t2, hi), ar2);\n   /* p = log1p(r) - r - A[0]*r*r.  */\n-  float64x2_t a56 = vfmaq_f64 (A (4), r, A (5));\n-  float64x2_t a34 = vfmaq_f64 (A (2), r, A (3));\n-  float64x2_t a12 = vfmaq_f64 (A (0), r, A (1));\n+  float64x2_t odd_coeffs = vld1q_f64 (&d->log_c1);\n+  float64x2_t a56 = vfmaq_f64 (d->log_c4, r, d->log_c5);\n+  float64x2_t a34 = vfmaq_laneq_f64 (d->log_c2, r, odd_coeffs, 1);\n+  float64x2_t a12 = vfmaq_laneq_f64 (d->log_c0, r, odd_coeffs, 0);\n   float64x2_t p = vfmaq_f64 (a34, ar2, a56);\n   p = vfmaq_f64 (a12, ar2, p);\n   p = vmulq_f64 (ar3, p);\n@@ -140,28 +150,28 @@ exp_special_case (float64x2_t x, float64x2_t xtail)\n \n /* Computes sign*exp(x+xtail) where |xtail| < 2^-8/N and |xtail| <= |x|.  */\n static inline float64x2_t\n-v_exp_inline (float64x2_t x, float64x2_t xtail, const struct data *d)\n+v_exp_inline (float64x2_t x, float64x2_t neg_xtail, const struct data *d)\n {\n   /* Fallback to scalar exp_inline for all lanes if any lane\n      contains value of x s.t. |x| <= 2^-54 or >= 512.  */\n-  uint64x2_t abstop\n-      = vshrq_n_u64 (vandq_u64 (vreinterpretq_u64_f64 (x), d->inf), 52);\n-  uint64x2_t uoflowx\n-      = vcgeq_u64 (vsubq_u64 (abstop, VecSmallExp), VecThresExp);\n+  uint64x2_t uoflowx = vcgeq_u64 (\n+      vsubq_u64 (vreinterpretq_u64_f64 (vabsq_f64 (x)), d->small_exp),\n+      d->thres_exp);\n   if (__glibc_unlikely (v_any_u64 (uoflowx)))\n-    return exp_special_case (x, xtail);\n+    return exp_special_case (x, vnegq_f64 (neg_xtail));\n \n   /* exp(x) = 2^(k/N) * exp(r), with exp(r) in [2^(-1/2N),2^(1/2N)].  */\n   /* x = ln2/N*k + r, with k integer and r in [-ln2/2N, ln2/2N].  */\n-  float64x2_t z = vmulq_f64 (d->inv_ln2_n, x);\n   /* z - kd is in [-1, 1] in non-nearest rounding modes.  */\n-  float64x2_t kd = vaddq_f64 (z, d->shift);\n-  uint64x2_t ki = vreinterpretq_u64_f64 (kd);\n-  kd = vsubq_f64 (kd, d->shift);\n-  float64x2_t r = vfmsq_f64 (x, kd, d->ln2_hi_n);\n-  r = vfmsq_f64 (r, kd, d->ln2_lo_n);\n+  float64x2_t exp_consts = vld1q_f64 (&d->inv_ln2_n);\n+  float64x2_t z = vmulq_laneq_f64 (x, exp_consts, 0);\n+  float64x2_t kd = vrndnq_f64 (z);\n+  uint64x2_t ki = vreinterpretq_u64_s64 (vcvtaq_s64_f64 (z));\n+  float64x2_t ln2_n = vld1q_f64 (&d->ln2_lo_n);\n+  float64x2_t r = vfmsq_laneq_f64 (x, kd, ln2_n, 1);\n+  r = vfmsq_laneq_f64 (r, kd, ln2_n, 0);\n   /* The code assumes 2^-200 < |xtail| < 2^-8/N.  */\n-  r = vaddq_f64 (r, xtail);\n+  r = vsubq_f64 (r, neg_xtail);\n   /* 2^(k/N) ~= scale.  */\n   uint64x2_t idx = vandq_u64 (ki, v_u64 (N_EXP - 1));\n   uint64x2_t top = vshlq_n_u64 (ki, 52 - V_POW_EXP_TABLE_BITS);\n@@ -170,8 +180,8 @@ v_exp_inline (float64x2_t x, float64x2_t xtail, const struct data *d)\n   sbits = vaddq_u64 (sbits, top);\n   /* exp(x) = 2^(k/N) * exp(r) ~= scale + scale * (exp(r) - 1).  */\n   float64x2_t r2 = vmulq_f64 (r, r);\n-  float64x2_t tmp = vfmaq_f64 (C (1), r, C (2));\n-  tmp = vfmaq_f64 (C (0), r, tmp);\n+  float64x2_t tmp = vfmaq_laneq_f64 (d->exp_c1, r, exp_consts, 1);\n+  tmp = vfmaq_f64 (d->exp_c0, r, tmp);\n   tmp = vfmaq_f64 (r, r2, tmp);\n   float64x2_t scale = vreinterpretq_f64_u64 (sbits);\n   /* Note: tmp == 0 or |tmp| > 2^-200 and scale > 2^-739, so there\n@@ -230,8 +240,8 @@ float64x2_t VPCS_ATTR V_NAME_D2 (pow) (float64x2_t x, float64x2_t y)\n \t{\n \t  /* Normalize subnormal x so exponent becomes negative.  */\n \t  uint64x2_t vix_norm = vreinterpretq_u64_f64 (\n-\t      vabsq_f64 (vmulq_f64 (x, vcvtq_f64_u64 (v_u64 (1ULL << 52)))));\n-\t  vix_norm = vsubq_u64 (vix_norm, v_u64 (52ULL << 52));\n+\t      vabsq_f64 (vmulq_f64 (x, vcvtq_f64_u64 (d->mask_sub_0))));\n+\t  vix_norm = vsubq_u64 (vix_norm, d->mask_sub_1);\n \t  vix = vbslq_u64 (sub_x, vix_norm, vix);\n \t}\n     }\n@@ -242,8 +252,7 @@ float64x2_t VPCS_ATTR V_NAME_D2 (pow) (float64x2_t x, float64x2_t y)\n \n   /* Vector Exp(y_loghi, y_loglo).  */\n   float64x2_t vehi = vmulq_f64 (y, vhi);\n-  float64x2_t velo = vmulq_f64 (y, vlo);\n   float64x2_t vemi = vfmsq_f64 (vehi, y, vhi);\n-  velo = vsubq_f64 (velo, vemi);\n-  return v_exp_inline (vehi, velo, d);\n+  float64x2_t neg_velo = vfmsq_f64 (vemi, y, vlo);\n+  return v_exp_inline (vehi, neg_velo, d);\n }\n\ncommit ae04f63087415eba9060143608b03db693854bb7\nAuthor: Pierre Blanchard <pierre.blanchard@arm.com>\nDate:   Mon Dec 9 15:54:34 2024 +0000\n\n    AArch64: Improve codegen in AdvSIMD logs\n    \n    Remove spurious ADRP and a few MOVs.\n    Reduce memory access by using more indexed MLAs in polynomial.\n    Align notation so that algorithms are easier to compare.\n    Speedup on Neoverse V1 for log10 (8%), log (8.5%), and log2 (10%).\n    Update error threshold in AdvSIMD log (now matches SVE log).\n    \n    (cherry picked from commit 8eb5ad2ebc94cc5bedbac57c226c02ec254479c7)\n\ndiff --git a/sysdeps/aarch64/fpu/log10_advsimd.c b/sysdeps/aarch64/fpu/log10_advsimd.c\nindex c065aaebae..f69ed21c39 100644\n--- a/sysdeps/aarch64/fpu/log10_advsimd.c\n+++ b/sysdeps/aarch64/fpu/log10_advsimd.c\n@@ -18,36 +18,36 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include \"v_math.h\"\n-#include \"poly_advsimd_f64.h\"\n-\n-#define N (1 << V_LOG10_TABLE_BITS)\n \n static const struct data\n {\n-  uint64x2_t min_norm;\n+  uint64x2_t off, sign_exp_mask, offset_lower_bound;\n   uint32x4_t special_bound;\n-  float64x2_t poly[5];\n-  float64x2_t invln10, log10_2, ln2;\n-  uint64x2_t sign_exp_mask;\n+  double invln10, log10_2;\n+  double c1, c3;\n+  float64x2_t c0, c2, c4;\n } data = {\n   /* Computed from log coefficients divided by log(10) then rounded to double\n      precision.  */\n-  .poly = { V2 (-0x1.bcb7b1526e506p-3), V2 (0x1.287a7636be1d1p-3),\n-\t    V2 (-0x1.bcb7b158af938p-4), V2 (0x1.63c78734e6d07p-4),\n-\t    V2 (-0x1.287461742fee4p-4) },\n-  .ln2 = V2 (0x1.62e42fefa39efp-1),\n-  .invln10 = V2 (0x1.bcb7b1526e50ep-2),\n-  .log10_2 = V2 (0x1.34413509f79ffp-2),\n-  .min_norm = V2 (0x0010000000000000), /* asuint64(0x1p-1022).  */\n-  .special_bound = V4 (0x7fe00000),    /* asuint64(inf) - min_norm.  */\n+  .c0 = V2 (-0x1.bcb7b1526e506p-3),\n+  .c1 = 0x1.287a7636be1d1p-3,\n+  .c2 = V2 (-0x1.bcb7b158af938p-4),\n+  .c3 = 0x1.63c78734e6d07p-4,\n+  .c4 = V2 (-0x1.287461742fee4p-4),\n+  .invln10 = 0x1.bcb7b1526e50ep-2,\n+  .log10_2 = 0x1.34413509f79ffp-2,\n+  .off = V2 (0x3fe6900900000000),\n   .sign_exp_mask = V2 (0xfff0000000000000),\n+  /* Lower bound is 0x0010000000000000. For\n+     optimised register use subnormals are detected after offset has been\n+     subtracted, so lower bound - offset (which wraps around).  */\n+  .offset_lower_bound = V2 (0x0010000000000000 - 0x3fe6900900000000),\n+  .special_bound = V4 (0x7fe00000), /* asuint64(inf) - 0x0010000000000000.  */\n };\n \n-#define Off v_u64 (0x3fe6900900000000)\n+#define N (1 << V_LOG10_TABLE_BITS)\n #define IndexMask (N - 1)\n \n-#define T(s, i) __v_log10_data.s[i]\n-\n struct entry\n {\n   float64x2_t invc;\n@@ -70,10 +70,11 @@ lookup (uint64x2_t i)\n }\n \n static float64x2_t VPCS_ATTR NOINLINE\n-special_case (float64x2_t x, float64x2_t y, float64x2_t hi, float64x2_t r2,\n-\t      uint32x2_t special)\n+special_case (float64x2_t hi, uint64x2_t u_off, float64x2_t y, float64x2_t r2,\n+\t      uint32x2_t special, const struct data *d)\n {\n-  return v_call_f64 (log10, x, vfmaq_f64 (hi, r2, y), vmovl_u32 (special));\n+  float64x2_t x = vreinterpretq_f64_u64 (vaddq_u64 (u_off, d->off));\n+  return v_call_f64 (log10, x, vfmaq_f64 (hi, y, r2), vmovl_u32 (special));\n }\n \n /* Fast implementation of double-precision vector log10\n@@ -85,19 +86,24 @@ special_case (float64x2_t x, float64x2_t y, float64x2_t hi, float64x2_t r2,\n float64x2_t VPCS_ATTR V_NAME_D1 (log10) (float64x2_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n-  uint64x2_t ix = vreinterpretq_u64_f64 (x);\n-  uint32x2_t special = vcge_u32 (vsubhn_u64 (ix, d->min_norm),\n-\t\t\t\t vget_low_u32 (d->special_bound));\n+\n+  /* To avoid having to mov x out of the way, keep u after offset has been\n+     applied, and recover x by adding the offset back in the special-case\n+     handler.  */\n+  uint64x2_t u = vreinterpretq_u64_f64 (x);\n+  uint64x2_t u_off = vsubq_u64 (u, d->off);\n \n   /* x = 2^k z; where z is in range [OFF,2*OFF) and exact.\n      The range is split into N subintervals.\n      The ith subinterval contains z and c is near its center.  */\n-  uint64x2_t tmp = vsubq_u64 (ix, Off);\n-  int64x2_t k = vshrq_n_s64 (vreinterpretq_s64_u64 (tmp), 52);\n-  uint64x2_t iz = vsubq_u64 (ix, vandq_u64 (tmp, d->sign_exp_mask));\n+  int64x2_t k = vshrq_n_s64 (vreinterpretq_s64_u64 (u_off), 52);\n+  uint64x2_t iz = vsubq_u64 (u, vandq_u64 (u_off, d->sign_exp_mask));\n   float64x2_t z = vreinterpretq_f64_u64 (iz);\n \n-  struct entry e = lookup (tmp);\n+  struct entry e = lookup (u_off);\n+\n+  uint32x2_t special = vcge_u32 (vsubhn_u64 (u_off, d->offset_lower_bound),\n+\t\t\t\t vget_low_u32 (d->special_bound));\n \n   /* log10(x) = log1p(z/c-1)/log(10) + log10(c) + k*log10(2).  */\n   float64x2_t r = vfmaq_f64 (v_f64 (-1.0), z, e.invc);\n@@ -105,17 +111,22 @@ float64x2_t VPCS_ATTR V_NAME_D1 (log10) (float64x2_t x)\n \n   /* hi = r / log(10) + log10(c) + k*log10(2).\n      Constants in v_log10_data.c are computed (in extended precision) as\n-     e.log10c := e.logc * ivln10.  */\n-  float64x2_t w = vfmaq_f64 (e.log10c, r, d->invln10);\n+     e.log10c := e.logc * invln10.  */\n+  float64x2_t cte = vld1q_f64 (&d->invln10);\n+  float64x2_t hi = vfmaq_laneq_f64 (e.log10c, r, cte, 0);\n \n   /* y = log10(1+r) + n * log10(2).  */\n-  float64x2_t hi = vfmaq_f64 (w, kd, d->log10_2);\n+  hi = vfmaq_laneq_f64 (hi, kd, cte, 1);\n \n   /* y = r2*(A0 + r*A1 + r2*(A2 + r*A3 + r2*A4)) + hi.  */\n   float64x2_t r2 = vmulq_f64 (r, r);\n-  float64x2_t y = v_pw_horner_4_f64 (r, r2, d->poly);\n+  float64x2_t odd_coeffs = vld1q_f64 (&d->c1);\n+  float64x2_t y = vfmaq_laneq_f64 (d->c2, r, odd_coeffs, 1);\n+  float64x2_t p = vfmaq_laneq_f64 (d->c0, r, odd_coeffs, 0);\n+  y = vfmaq_f64 (y, d->c4, r2);\n+  y = vfmaq_f64 (p, y, r2);\n \n   if (__glibc_unlikely (v_any_u32h (special)))\n-    return special_case (x, y, hi, r2, special);\n-  return vfmaq_f64 (hi, r2, y);\n+    return special_case (hi, u_off, y, r2, special, d);\n+  return vfmaq_f64 (hi, y, r2);\n }\ndiff --git a/sysdeps/aarch64/fpu/log2_advsimd.c b/sysdeps/aarch64/fpu/log2_advsimd.c\nindex 4057c552d8..1eea1f86eb 100644\n--- a/sysdeps/aarch64/fpu/log2_advsimd.c\n+++ b/sysdeps/aarch64/fpu/log2_advsimd.c\n@@ -18,31 +18,33 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include \"v_math.h\"\n-#include \"poly_advsimd_f64.h\"\n-\n-#define N (1 << V_LOG2_TABLE_BITS)\n \n static const struct data\n {\n-  uint64x2_t min_norm;\n+  uint64x2_t off, sign_exp_mask, offset_lower_bound;\n   uint32x4_t special_bound;\n-  float64x2_t poly[5];\n-  float64x2_t invln2;\n-  uint64x2_t sign_exp_mask;\n+  float64x2_t c0, c2;\n+  double c1, c3, invln2, c4;\n } data = {\n   /* Each coefficient was generated to approximate log(r) for |r| < 0x1.fp-9\n      and N = 128, then scaled by log2(e) in extended precision and rounded back\n      to double precision.  */\n-  .poly = { V2 (-0x1.71547652b83p-1), V2 (0x1.ec709dc340953p-2),\n-\t    V2 (-0x1.71547651c8f35p-2), V2 (0x1.2777ebe12dda5p-2),\n-\t    V2 (-0x1.ec738d616fe26p-3) },\n-  .invln2 = V2 (0x1.71547652b82fep0),\n-  .min_norm = V2 (0x0010000000000000), /* asuint64(0x1p-1022).  */\n-  .special_bound = V4 (0x7fe00000),    /* asuint64(inf) - min_norm.  */\n+  .c0 = V2 (-0x1.71547652b8300p-1),\n+  .c1 = 0x1.ec709dc340953p-2,\n+  .c2 = V2 (-0x1.71547651c8f35p-2),\n+  .c3 = 0x1.2777ebe12dda5p-2,\n+  .c4 = -0x1.ec738d616fe26p-3,\n+  .invln2 = 0x1.71547652b82fep0,\n+  .off = V2 (0x3fe6900900000000),\n   .sign_exp_mask = V2 (0xfff0000000000000),\n+  /* Lower bound is 0x0010000000000000. For\n+     optimised register use subnormals are detected after offset has been\n+     subtracted, so lower bound - offset (which wraps around).  */\n+  .offset_lower_bound = V2 (0x0010000000000000 - 0x3fe6900900000000),\n+  .special_bound = V4 (0x7fe00000), /* asuint64(inf) - asuint64(0x1p-1022).  */\n };\n \n-#define Off v_u64 (0x3fe6900900000000)\n+#define N (1 << V_LOG2_TABLE_BITS)\n #define IndexMask (N - 1)\n \n struct entry\n@@ -67,10 +69,11 @@ lookup (uint64x2_t i)\n }\n \n static float64x2_t VPCS_ATTR NOINLINE\n-special_case (float64x2_t x, float64x2_t y, float64x2_t w, float64x2_t r2,\n-\t      uint32x2_t special)\n+special_case (float64x2_t hi, uint64x2_t u_off, float64x2_t y, float64x2_t r2,\n+\t      uint32x2_t special, const struct data *d)\n {\n-  return v_call_f64 (log2, x, vfmaq_f64 (w, r2, y), vmovl_u32 (special));\n+  float64x2_t x = vreinterpretq_f64_u64 (vaddq_u64 (u_off, d->off));\n+  return v_call_f64 (log2, x, vfmaq_f64 (hi, y, r2), vmovl_u32 (special));\n }\n \n /* Double-precision vector log2 routine. Implements the same algorithm as\n@@ -81,31 +84,41 @@ special_case (float64x2_t x, float64x2_t y, float64x2_t w, float64x2_t r2,\n float64x2_t VPCS_ATTR V_NAME_D1 (log2) (float64x2_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n-  uint64x2_t ix = vreinterpretq_u64_f64 (x);\n-  uint32x2_t special = vcge_u32 (vsubhn_u64 (ix, d->min_norm),\n-\t\t\t\t vget_low_u32 (d->special_bound));\n+\n+  /* To avoid having to mov x out of the way, keep u after offset has been\n+     applied, and recover x by adding the offset back in the special-case\n+     handler.  */\n+  uint64x2_t u = vreinterpretq_u64_f64 (x);\n+  uint64x2_t u_off = vsubq_u64 (u, d->off);\n \n   /* x = 2^k z; where z is in range [Off,2*Off) and exact.\n      The range is split into N subintervals.\n      The ith subinterval contains z and c is near its center.  */\n-  uint64x2_t tmp = vsubq_u64 (ix, Off);\n-  int64x2_t k = vshrq_n_s64 (vreinterpretq_s64_u64 (tmp), 52);\n-  uint64x2_t iz = vsubq_u64 (ix, vandq_u64 (tmp, d->sign_exp_mask));\n+  int64x2_t k = vshrq_n_s64 (vreinterpretq_s64_u64 (u_off), 52);\n+  uint64x2_t iz = vsubq_u64 (u, vandq_u64 (u_off, d->sign_exp_mask));\n   float64x2_t z = vreinterpretq_f64_u64 (iz);\n \n-  struct entry e = lookup (tmp);\n+  struct entry e = lookup (u_off);\n \n-  /* log2(x) = log1p(z/c-1)/log(2) + log2(c) + k.  */\n+  uint32x2_t special = vcge_u32 (vsubhn_u64 (u_off, d->offset_lower_bound),\n+\t\t\t\t vget_low_u32 (d->special_bound));\n \n+  /* log2(x) = log1p(z/c-1)/log(2) + log2(c) + k.  */\n   float64x2_t r = vfmaq_f64 (v_f64 (-1.0), z, e.invc);\n   float64x2_t kd = vcvtq_f64_s64 (k);\n-  float64x2_t w = vfmaq_f64 (e.log2c, r, d->invln2);\n+\n+  float64x2_t invln2_and_c4 = vld1q_f64 (&d->invln2);\n+  float64x2_t hi\n+      = vfmaq_laneq_f64 (vaddq_f64 (e.log2c, kd), r, invln2_and_c4, 0);\n \n   float64x2_t r2 = vmulq_f64 (r, r);\n-  float64x2_t y = v_pw_horner_4_f64 (r, r2, d->poly);\n-  w = vaddq_f64 (kd, w);\n+  float64x2_t odd_coeffs = vld1q_f64 (&d->c1);\n+  float64x2_t y = vfmaq_laneq_f64 (d->c2, r, odd_coeffs, 1);\n+  float64x2_t p = vfmaq_laneq_f64 (d->c0, r, odd_coeffs, 0);\n+  y = vfmaq_laneq_f64 (y, r2, invln2_and_c4, 1);\n+  y = vfmaq_f64 (p, r2, y);\n \n   if (__glibc_unlikely (v_any_u32h (special)))\n-    return special_case (x, y, w, r2, special);\n-  return vfmaq_f64 (w, r2, y);\n+    return special_case (hi, u_off, y, r2, special, d);\n+  return vfmaq_f64 (hi, y, r2);\n }\ndiff --git a/sysdeps/aarch64/fpu/log_advsimd.c b/sysdeps/aarch64/fpu/log_advsimd.c\nindex 015a6da7d7..b1a27fbc29 100644\n--- a/sysdeps/aarch64/fpu/log_advsimd.c\n+++ b/sysdeps/aarch64/fpu/log_advsimd.c\n@@ -21,27 +21,29 @@\n \n static const struct data\n {\n-  uint64x2_t min_norm;\n+  uint64x2_t off, sign_exp_mask, offset_lower_bound;\n   uint32x4_t special_bound;\n-  float64x2_t poly[5];\n-  float64x2_t ln2;\n-  uint64x2_t sign_exp_mask;\n+  float64x2_t c0, c2;\n+  double c1, c3, ln2, c4;\n } data = {\n-  /* Worst-case error: 1.17 + 0.5 ulp.\n-     Rel error: 0x1.6272e588p-56 in [ -0x1.fc1p-9 0x1.009p-8 ].  */\n-  .poly = { V2 (-0x1.ffffffffffff7p-2), V2 (0x1.55555555170d4p-2),\n-\t    V2 (-0x1.0000000399c27p-2), V2 (0x1.999b2e90e94cap-3),\n-\t    V2 (-0x1.554e550bd501ep-3) },\n-  .ln2 = V2 (0x1.62e42fefa39efp-1),\n-  .min_norm = V2 (0x0010000000000000),\n-  .special_bound = V4 (0x7fe00000), /* asuint64(inf) - min_norm.  */\n-  .sign_exp_mask = V2 (0xfff0000000000000)\n+  /* Rel error: 0x1.6272e588p-56 in [ -0x1.fc1p-9 0x1.009p-8 ].  */\n+  .c0 = V2 (-0x1.ffffffffffff7p-2),\n+  .c1 = 0x1.55555555170d4p-2,\n+  .c2 = V2 (-0x1.0000000399c27p-2),\n+  .c3 = 0x1.999b2e90e94cap-3,\n+  .c4 = -0x1.554e550bd501ep-3,\n+  .ln2 = 0x1.62e42fefa39efp-1,\n+  .sign_exp_mask = V2 (0xfff0000000000000),\n+  .off = V2 (0x3fe6900900000000),\n+  /* Lower bound is 0x0010000000000000. For\n+     optimised register use subnormals are detected after offset has been\n+     subtracted, so lower bound - offset (which wraps around).  */\n+  .offset_lower_bound = V2 (0x0010000000000000 - 0x3fe6900900000000),\n+  .special_bound = V4 (0x7fe00000), /* asuint64(inf) -  asuint64(0x1p-126).  */\n };\n \n-#define A(i) d->poly[i]\n #define N (1 << V_LOG_TABLE_BITS)\n #define IndexMask (N - 1)\n-#define Off v_u64 (0x3fe6900900000000)\n \n struct entry\n {\n@@ -64,48 +66,56 @@ lookup (uint64x2_t i)\n }\n \n static float64x2_t VPCS_ATTR NOINLINE\n-special_case (float64x2_t x, float64x2_t y, float64x2_t hi, float64x2_t r2,\n-\t      uint32x2_t cmp)\n+special_case (float64x2_t hi, uint64x2_t u_off, float64x2_t y, float64x2_t r2,\n+\t      uint32x2_t special, const struct data *d)\n {\n-  return v_call_f64 (log, x, vfmaq_f64 (hi, y, r2), vmovl_u32 (cmp));\n+  float64x2_t x = vreinterpretq_f64_u64 (vaddq_u64 (u_off, d->off));\n+  return v_call_f64 (log, x, vfmaq_f64 (hi, y, r2), vmovl_u32 (special));\n }\n \n+/* Double-precision vector log routine.\n+   The maximum observed error is 2.17 ULP:\n+   _ZGVnN2v_log(0x1.a6129884398a3p+0) got 0x1.ffffff1cca043p-2\n+\t\t\t\t     want 0x1.ffffff1cca045p-2.  */\n float64x2_t VPCS_ATTR V_NAME_D1 (log) (float64x2_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n-  float64x2_t z, r, r2, p, y, kd, hi;\n-  uint64x2_t ix, iz, tmp;\n-  uint32x2_t cmp;\n-  int64x2_t k;\n-  struct entry e;\n \n-  ix = vreinterpretq_u64_f64 (x);\n-  cmp = vcge_u32 (vsubhn_u64 (ix, d->min_norm),\n-\t\t  vget_low_u32 (d->special_bound));\n+  /* To avoid having to mov x out of the way, keep u after offset has been\n+     applied, and recover x by adding the offset back in the special-case\n+     handler.  */\n+  uint64x2_t u = vreinterpretq_u64_f64 (x);\n+  uint64x2_t u_off = vsubq_u64 (u, d->off);\n \n   /* x = 2^k z; where z is in range [Off,2*Off) and exact.\n      The range is split into N subintervals.\n      The ith subinterval contains z and c is near its center.  */\n-  tmp = vsubq_u64 (ix, Off);\n-  k = vshrq_n_s64 (vreinterpretq_s64_u64 (tmp), 52); /* arithmetic shift.  */\n-  iz = vsubq_u64 (ix, vandq_u64 (tmp, d->sign_exp_mask));\n-  z = vreinterpretq_f64_u64 (iz);\n-  e = lookup (tmp);\n+  int64x2_t k = vshrq_n_s64 (vreinterpretq_s64_u64 (u_off), 52);\n+  uint64x2_t iz = vsubq_u64 (u, vandq_u64 (u_off, d->sign_exp_mask));\n+  float64x2_t z = vreinterpretq_f64_u64 (iz);\n+\n+  struct entry e = lookup (u_off);\n+\n+  uint32x2_t special = vcge_u32 (vsubhn_u64 (u_off, d->offset_lower_bound),\n+\t\t\t\t vget_low_u32 (d->special_bound));\n \n   /* log(x) = log1p(z/c-1) + log(c) + k*Ln2.  */\n-  r = vfmaq_f64 (v_f64 (-1.0), z, e.invc);\n-  kd = vcvtq_f64_s64 (k);\n+  float64x2_t r = vfmaq_f64 (v_f64 (-1.0), z, e.invc);\n+  float64x2_t kd = vcvtq_f64_s64 (k);\n \n   /* hi = r + log(c) + k*Ln2.  */\n-  hi = vfmaq_f64 (vaddq_f64 (e.logc, r), kd, d->ln2);\n+  float64x2_t ln2_and_c4 = vld1q_f64 (&d->ln2);\n+  float64x2_t hi = vfmaq_laneq_f64 (vaddq_f64 (e.logc, r), kd, ln2_and_c4, 0);\n+\n   /* y = r2*(A0 + r*A1 + r2*(A2 + r*A3 + r2*A4)) + hi.  */\n-  r2 = vmulq_f64 (r, r);\n-  y = vfmaq_f64 (A (2), A (3), r);\n-  p = vfmaq_f64 (A (0), A (1), r);\n-  y = vfmaq_f64 (y, A (4), r2);\n-  y = vfmaq_f64 (p, y, r2);\n-\n-  if (__glibc_unlikely (v_any_u32h (cmp)))\n-    return special_case (x, y, hi, r2, cmp);\n+  float64x2_t odd_coeffs = vld1q_f64 (&d->c1);\n+  float64x2_t r2 = vmulq_f64 (r, r);\n+  float64x2_t y = vfmaq_laneq_f64 (d->c2, r, odd_coeffs, 1);\n+  float64x2_t p = vfmaq_laneq_f64 (d->c0, r, odd_coeffs, 0);\n+  y = vfmaq_laneq_f64 (y, r2, ln2_and_c4, 1);\n+  y = vfmaq_f64 (p, r2, y);\n+\n+  if (__glibc_unlikely (v_any_u32h (special)))\n+    return special_case (hi, u_off, y, r2, special, d);\n   return vfmaq_f64 (hi, y, r2);\n }\n\ncommit 2aed9796bfb17b257e63b12cefdb7ff60be09626\nAuthor: Pierre Blanchard <pierre.blanchard@arm.com>\nDate:   Mon Dec 9 15:55:39 2024 +0000\n\n    AArch64: Improve codegen in users of ADVSIMD log1p helper\n    \n    Add inline helper for log1p and rearrange operations so MOV\n    is not necessary in reduction or around the special-case handler.\n    Reduce memory access by using more indexed MLAs in polynomial.\n    Speedup on Neoverse V1 for log1p (3.5%), acosh (7.5%) and atanh (10%).\n    \n    (cherry picked from commit ca0c0d0f26fbf75b9cacc65122b457e8fdec40b8)\n\ndiff --git a/sysdeps/aarch64/fpu/acosh_advsimd.c b/sysdeps/aarch64/fpu/acosh_advsimd.c\nindex c88283cf11..a98f4a2e4d 100644\n--- a/sysdeps/aarch64/fpu/acosh_advsimd.c\n+++ b/sysdeps/aarch64/fpu/acosh_advsimd.c\n@@ -54,9 +54,8 @@ VPCS_ATTR float64x2_t V_NAME_D1 (acosh) (float64x2_t x)\n     x = vbslq_f64 (special, vreinterpretq_f64_u64 (d->one), x);\n #endif\n \n-  float64x2_t xm1 = vsubq_f64 (x, v_f64 (1));\n-  float64x2_t y;\n-  y = vaddq_f64 (x, v_f64 (1));\n+  float64x2_t xm1 = vsubq_f64 (x, v_f64 (1.0));\n+  float64x2_t y = vaddq_f64 (x, v_f64 (1.0));\n   y = vmulq_f64 (y, xm1);\n   y = vsqrtq_f64 (y);\n   y = vaddq_f64 (xm1, y);\ndiff --git a/sysdeps/aarch64/fpu/atanh_advsimd.c b/sysdeps/aarch64/fpu/atanh_advsimd.c\nindex 3c3d0bd6ad..eb9769aeac 100644\n--- a/sysdeps/aarch64/fpu/atanh_advsimd.c\n+++ b/sysdeps/aarch64/fpu/atanh_advsimd.c\n@@ -23,15 +23,19 @@\n const static struct data\n {\n   struct v_log1p_data log1p_consts;\n-  uint64x2_t one, half;\n+  uint64x2_t one;\n+  uint64x2_t sign_mask;\n } data = { .log1p_consts = V_LOG1P_CONSTANTS_TABLE,\n \t   .one = V2 (0x3ff0000000000000),\n-\t   .half = V2 (0x3fe0000000000000) };\n+\t   .sign_mask = V2 (0x8000000000000000) };\n \n static float64x2_t VPCS_ATTR NOINLINE\n-special_case (float64x2_t x, float64x2_t y, uint64x2_t special)\n+special_case (float64x2_t x, float64x2_t halfsign, float64x2_t y,\n+\t      uint64x2_t special, const struct data *d)\n {\n-  return v_call_f64 (atanh, x, y, special);\n+  y = log1p_inline (y, &d->log1p_consts);\n+  return v_call_f64 (atanh, vbslq_f64 (d->sign_mask, halfsign, x),\n+\t\t     vmulq_f64 (halfsign, y), special);\n }\n \n /* Approximation for vector double-precision atanh(x) using modified log1p.\n@@ -43,11 +47,10 @@ float64x2_t V_NAME_D1 (atanh) (float64x2_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n \n+  float64x2_t halfsign = vbslq_f64 (d->sign_mask, x, v_f64 (0.5));\n   float64x2_t ax = vabsq_f64 (x);\n   uint64x2_t ia = vreinterpretq_u64_f64 (ax);\n-  uint64x2_t sign = veorq_u64 (vreinterpretq_u64_f64 (x), ia);\n   uint64x2_t special = vcgeq_u64 (ia, d->one);\n-  float64x2_t halfsign = vreinterpretq_f64_u64 (vorrq_u64 (sign, d->half));\n \n #if WANT_SIMD_EXCEPT\n   ax = v_zerofy_f64 (ax, special);\n@@ -55,10 +58,15 @@ float64x2_t V_NAME_D1 (atanh) (float64x2_t x)\n \n   float64x2_t y;\n   y = vaddq_f64 (ax, ax);\n-  y = vdivq_f64 (y, vsubq_f64 (v_f64 (1), ax));\n-  y = log1p_inline (y, &d->log1p_consts);\n+  y = vdivq_f64 (y, vsubq_f64 (vreinterpretq_f64_u64 (d->one), ax));\n \n   if (__glibc_unlikely (v_any_u64 (special)))\n-    return special_case (x, vmulq_f64 (y, halfsign), special);\n+#if WANT_SIMD_EXCEPT\n+    return special_case (x, halfsign, y, special, d);\n+#else\n+    return special_case (ax, halfsign, y, special, d);\n+#endif\n+\n+  y = log1p_inline (y, &d->log1p_consts);\n   return vmulq_f64 (y, halfsign);\n }\ndiff --git a/sysdeps/aarch64/fpu/log1p_advsimd.c b/sysdeps/aarch64/fpu/log1p_advsimd.c\nindex 114064c696..1263587201 100644\n--- a/sysdeps/aarch64/fpu/log1p_advsimd.c\n+++ b/sysdeps/aarch64/fpu/log1p_advsimd.c\n@@ -17,43 +17,26 @@\n    License along with the GNU C Library; if not, see\n    <https://www.gnu.org/licenses/>.  */\n \n-#include \"v_math.h\"\n-#include \"poly_advsimd_f64.h\"\n+#define WANT_V_LOG1P_K0_SHORTCUT 0\n+#include \"v_log1p_inline.h\"\n \n const static struct data\n {\n-  float64x2_t poly[19], ln2[2];\n-  uint64x2_t hf_rt2_top, one_m_hf_rt2_top, umask, inf, minus_one;\n-  int64x2_t one_top;\n-} data = {\n-  /* Generated using Remez, deg=20, in [sqrt(2)/2-1, sqrt(2)-1].  */\n-  .poly = { V2 (-0x1.ffffffffffffbp-2), V2 (0x1.55555555551a9p-2),\n-\t    V2 (-0x1.00000000008e3p-2), V2 (0x1.9999999a32797p-3),\n-\t    V2 (-0x1.555555552fecfp-3), V2 (0x1.249248e071e5ap-3),\n-\t    V2 (-0x1.ffffff8bf8482p-4), V2 (0x1.c71c8f07da57ap-4),\n-\t    V2 (-0x1.9999ca4ccb617p-4), V2 (0x1.7459ad2e1dfa3p-4),\n-\t    V2 (-0x1.554d2680a3ff2p-4), V2 (0x1.3b4c54d487455p-4),\n-\t    V2 (-0x1.2548a9ffe80e6p-4), V2 (0x1.0f389a24b2e07p-4),\n-\t    V2 (-0x1.eee4db15db335p-5), V2 (0x1.e95b494d4a5ddp-5),\n-\t    V2 (-0x1.15fdf07cb7c73p-4), V2 (0x1.0310b70800fcfp-4),\n-\t    V2 (-0x1.cfa7385bdb37ep-6) },\n-  .ln2 = { V2 (0x1.62e42fefa3800p-1), V2 (0x1.ef35793c76730p-45) },\n-  /* top32(asuint64(sqrt(2)/2)) << 32.  */\n-  .hf_rt2_top = V2 (0x3fe6a09e00000000),\n-  /* (top32(asuint64(1)) - top32(asuint64(sqrt(2)/2))) << 32.  */\n-  .one_m_hf_rt2_top = V2 (0x00095f6200000000),\n-  .umask = V2 (0x000fffff00000000),\n-  .one_top = V2 (0x3ff),\n-  .inf = V2 (0x7ff0000000000000),\n-  .minus_one = V2 (0xbff0000000000000)\n-};\n+  struct v_log1p_data d;\n+  uint64x2_t inf, minus_one;\n+} data = { .d = V_LOG1P_CONSTANTS_TABLE,\n+\t   .inf = V2 (0x7ff0000000000000),\n+\t   .minus_one = V2 (0xbff0000000000000) };\n \n #define BottomMask v_u64 (0xffffffff)\n \n-static float64x2_t VPCS_ATTR NOINLINE\n-special_case (float64x2_t x, float64x2_t y, uint64x2_t special)\n+static float64x2_t NOINLINE VPCS_ATTR\n+special_case (float64x2_t x, uint64x2_t cmp, const struct data *d)\n {\n-  return v_call_f64 (log1p, x, y, special);\n+  /* Side-step special lanes so fenv exceptions are not triggered\n+     inadvertently.  */\n+  float64x2_t x_nospecial = v_zerofy_f64 (x, cmp);\n+  return v_call_f64 (log1p, x, log1p_inline (x_nospecial, &d->d), cmp);\n }\n \n /* Vector log1p approximation using polynomial on reduced interval. Routine is\n@@ -66,66 +49,14 @@ VPCS_ATTR float64x2_t V_NAME_D1 (log1p) (float64x2_t x)\n   const struct data *d = ptr_barrier (&data);\n   uint64x2_t ix = vreinterpretq_u64_f64 (x);\n   uint64x2_t ia = vreinterpretq_u64_f64 (vabsq_f64 (x));\n-  uint64x2_t special = vcgeq_u64 (ia, d->inf);\n \n-#if WANT_SIMD_EXCEPT\n-  special = vorrq_u64 (special,\n-\t\t       vcgeq_u64 (ix, vreinterpretq_u64_f64 (v_f64 (-1))));\n-  if (__glibc_unlikely (v_any_u64 (special)))\n-    x = v_zerofy_f64 (x, special);\n-#else\n-  special = vorrq_u64 (special, vcleq_f64 (x, v_f64 (-1)));\n-#endif\n+  uint64x2_t special_cases\n+      = vorrq_u64 (vcgeq_u64 (ia, d->inf), vcgeq_u64 (ix, d->minus_one));\n \n-  /* With x + 1 = t * 2^k (where t = f + 1 and k is chosen such that f\n-\t\t\t   is in [sqrt(2)/2, sqrt(2)]):\n-     log1p(x) = k*log(2) + log1p(f).\n+  if (__glibc_unlikely (v_any_u64 (special_cases)))\n+    return special_case (x, special_cases, d);\n \n-     f may not be representable exactly, so we need a correction term:\n-     let m = round(1 + x), c = (1 + x) - m.\n-     c << m: at very small x, log1p(x) ~ x, hence:\n-     log(1+x) - log(m) ~ c/m.\n-\n-     We therefore calculate log1p(x) by k*log2 + log1p(f) + c/m.  */\n-\n-  /* Obtain correctly scaled k by manipulation in the exponent.\n-     The scalar algorithm casts down to 32-bit at this point to calculate k and\n-     u_red. We stay in double-width to obtain f and k, using the same constants\n-     as the scalar algorithm but shifted left by 32.  */\n-  float64x2_t m = vaddq_f64 (x, v_f64 (1));\n-  uint64x2_t mi = vreinterpretq_u64_f64 (m);\n-  uint64x2_t u = vaddq_u64 (mi, d->one_m_hf_rt2_top);\n-\n-  int64x2_t ki\n-      = vsubq_s64 (vreinterpretq_s64_u64 (vshrq_n_u64 (u, 52)), d->one_top);\n-  float64x2_t k = vcvtq_f64_s64 (ki);\n-\n-  /* Reduce x to f in [sqrt(2)/2, sqrt(2)].  */\n-  uint64x2_t utop = vaddq_u64 (vandq_u64 (u, d->umask), d->hf_rt2_top);\n-  uint64x2_t u_red = vorrq_u64 (utop, vandq_u64 (mi, BottomMask));\n-  float64x2_t f = vsubq_f64 (vreinterpretq_f64_u64 (u_red), v_f64 (1));\n-\n-  /* Correction term c/m.  */\n-  float64x2_t cm = vdivq_f64 (vsubq_f64 (x, vsubq_f64 (m, v_f64 (1))), m);\n-\n-  /* Approximate log1p(x) on the reduced input using a polynomial. Because\n-     log1p(0)=0 we choose an approximation of the form:\n-       x + C0*x^2 + C1*x^3 + C2x^4 + ...\n-     Hence approximation has the form f + f^2 * P(f)\n-      where P(x) = C0 + C1*x + C2x^2 + ...\n-     Assembling this all correctly is dealt with at the final step.  */\n-  float64x2_t f2 = vmulq_f64 (f, f);\n-  float64x2_t p = v_pw_horner_18_f64 (f, f2, d->poly);\n-\n-  float64x2_t ylo = vfmaq_f64 (cm, k, d->ln2[1]);\n-  float64x2_t yhi = vfmaq_f64 (f, k, d->ln2[0]);\n-  float64x2_t y = vaddq_f64 (ylo, yhi);\n-\n-  if (__glibc_unlikely (v_any_u64 (special)))\n-    return special_case (vreinterpretq_f64_u64 (ix), vfmaq_f64 (y, f2, p),\n-\t\t\t special);\n-\n-  return vfmaq_f64 (y, f2, p);\n+  return log1p_inline (x, &d->d);\n }\n \n strong_alias (V_NAME_D1 (log1p), V_NAME_D1 (logp1))\ndiff --git a/sysdeps/aarch64/fpu/v_log1p_inline.h b/sysdeps/aarch64/fpu/v_log1p_inline.h\nindex 242e43b6ee..834ff65adf 100644\n--- a/sysdeps/aarch64/fpu/v_log1p_inline.h\n+++ b/sysdeps/aarch64/fpu/v_log1p_inline.h\n@@ -21,29 +21,30 @@\n #define AARCH64_FPU_V_LOG1P_INLINE_H\n \n #include \"v_math.h\"\n-#include \"poly_advsimd_f64.h\"\n \n struct v_log1p_data\n {\n-  float64x2_t poly[19], ln2[2];\n+  float64x2_t c0, c2, c4, c6, c8, c10, c12, c14, c16;\n   uint64x2_t hf_rt2_top, one_m_hf_rt2_top, umask;\n   int64x2_t one_top;\n+  double c1, c3, c5, c7, c9, c11, c13, c15, c17, c18;\n+  double ln2[2];\n };\n \n /* Coefficients generated using Remez, deg=20, in [sqrt(2)/2-1, sqrt(2)-1].  */\n #define V_LOG1P_CONSTANTS_TABLE                                               \\\n   {                                                                           \\\n-    .poly = { V2 (-0x1.ffffffffffffbp-2), V2 (0x1.55555555551a9p-2),          \\\n-\t      V2 (-0x1.00000000008e3p-2), V2 (0x1.9999999a32797p-3),          \\\n-\t      V2 (-0x1.555555552fecfp-3), V2 (0x1.249248e071e5ap-3),          \\\n-\t      V2 (-0x1.ffffff8bf8482p-4), V2 (0x1.c71c8f07da57ap-4),          \\\n-\t      V2 (-0x1.9999ca4ccb617p-4), V2 (0x1.7459ad2e1dfa3p-4),          \\\n-\t      V2 (-0x1.554d2680a3ff2p-4), V2 (0x1.3b4c54d487455p-4),          \\\n-\t      V2 (-0x1.2548a9ffe80e6p-4), V2 (0x1.0f389a24b2e07p-4),          \\\n-\t      V2 (-0x1.eee4db15db335p-5), V2 (0x1.e95b494d4a5ddp-5),          \\\n-\t      V2 (-0x1.15fdf07cb7c73p-4), V2 (0x1.0310b70800fcfp-4),          \\\n-\t      V2 (-0x1.cfa7385bdb37ep-6) },                                   \\\n-    .ln2 = { V2 (0x1.62e42fefa3800p-1), V2 (0x1.ef35793c76730p-45) },         \\\n+    .c0 = V2 (-0x1.ffffffffffffbp-2), .c1 = 0x1.55555555551a9p-2,             \\\n+    .c2 = V2 (-0x1.00000000008e3p-2), .c3 = 0x1.9999999a32797p-3,             \\\n+    .c4 = V2 (-0x1.555555552fecfp-3), .c5 = 0x1.249248e071e5ap-3,             \\\n+    .c6 = V2 (-0x1.ffffff8bf8482p-4), .c7 = 0x1.c71c8f07da57ap-4,             \\\n+    .c8 = V2 (-0x1.9999ca4ccb617p-4), .c9 = 0x1.7459ad2e1dfa3p-4,             \\\n+    .c10 = V2 (-0x1.554d2680a3ff2p-4), .c11 = 0x1.3b4c54d487455p-4,           \\\n+    .c12 = V2 (-0x1.2548a9ffe80e6p-4), .c13 = 0x1.0f389a24b2e07p-4,           \\\n+    .c14 = V2 (-0x1.eee4db15db335p-5), .c15 = 0x1.e95b494d4a5ddp-5,           \\\n+    .c16 = V2 (-0x1.15fdf07cb7c73p-4), .c17 = 0x1.0310b70800fcfp-4,           \\\n+    .c18 = -0x1.cfa7385bdb37ep-6,                                             \\\n+    .ln2 = { 0x1.62e42fefa3800p-1, 0x1.ef35793c76730p-45 },                   \\\n     .hf_rt2_top = V2 (0x3fe6a09e00000000),                                    \\\n     .one_m_hf_rt2_top = V2 (0x00095f6200000000),                              \\\n     .umask = V2 (0x000fffff00000000), .one_top = V2 (0x3ff)                   \\\n@@ -51,19 +52,45 @@ struct v_log1p_data\n \n #define BottomMask v_u64 (0xffffffff)\n \n+static inline float64x2_t\n+eval_poly (float64x2_t m, float64x2_t m2, const struct v_log1p_data *d)\n+{\n+  /* Approximate log(1+m) on [-0.25, 0.5] using pairwise Horner.  */\n+  float64x2_t c13 = vld1q_f64 (&d->c1);\n+  float64x2_t c57 = vld1q_f64 (&d->c5);\n+  float64x2_t c911 = vld1q_f64 (&d->c9);\n+  float64x2_t c1315 = vld1q_f64 (&d->c13);\n+  float64x2_t c1718 = vld1q_f64 (&d->c17);\n+  float64x2_t p1617 = vfmaq_laneq_f64 (d->c16, m, c1718, 0);\n+  float64x2_t p1415 = vfmaq_laneq_f64 (d->c14, m, c1315, 1);\n+  float64x2_t p1213 = vfmaq_laneq_f64 (d->c12, m, c1315, 0);\n+  float64x2_t p1011 = vfmaq_laneq_f64 (d->c10, m, c911, 1);\n+  float64x2_t p89 = vfmaq_laneq_f64 (d->c8, m, c911, 0);\n+  float64x2_t p67 = vfmaq_laneq_f64 (d->c6, m, c57, 1);\n+  float64x2_t p45 = vfmaq_laneq_f64 (d->c4, m, c57, 0);\n+  float64x2_t p23 = vfmaq_laneq_f64 (d->c2, m, c13, 1);\n+  float64x2_t p01 = vfmaq_laneq_f64 (d->c0, m, c13, 0);\n+  float64x2_t p = vfmaq_laneq_f64 (p1617, m2, c1718, 1);\n+  p = vfmaq_f64 (p1415, m2, p);\n+  p = vfmaq_f64 (p1213, m2, p);\n+  p = vfmaq_f64 (p1011, m2, p);\n+  p = vfmaq_f64 (p89, m2, p);\n+  p = vfmaq_f64 (p67, m2, p);\n+  p = vfmaq_f64 (p45, m2, p);\n+  p = vfmaq_f64 (p23, m2, p);\n+  return vfmaq_f64 (p01, m2, p);\n+}\n+\n static inline float64x2_t\n log1p_inline (float64x2_t x, const struct v_log1p_data *d)\n {\n-  /* Helper for calculating log(x + 1). Copied from v_log1p_2u5.c, with several\n-     modifications:\n+  /* Helper for calculating log(x + 1):\n      - No special-case handling - this should be dealt with by the caller.\n-     - Pairwise Horner polynomial evaluation for improved accuracy.\n      - Optionally simulate the shortcut for k=0, used in the scalar routine,\n-       using v_sel, for improved accuracy when the argument to log1p is close to\n-       0. This feature is enabled by defining WANT_V_LOG1P_K0_SHORTCUT as 1 in\n-       the source of the caller before including this file.\n-     See v_log1pf_2u1.c for details of the algorithm.  */\n-  float64x2_t m = vaddq_f64 (x, v_f64 (1));\n+       using v_sel, for improved accuracy when the argument to log1p is close\n+       to 0. This feature is enabled by defining WANT_V_LOG1P_K0_SHORTCUT as 1\n+       in the source of the caller before including this file.  */\n+  float64x2_t m = vaddq_f64 (x, v_f64 (1.0));\n   uint64x2_t mi = vreinterpretq_u64_f64 (m);\n   uint64x2_t u = vaddq_u64 (mi, d->one_m_hf_rt2_top);\n \n@@ -74,14 +101,14 @@ log1p_inline (float64x2_t x, const struct v_log1p_data *d)\n   /* Reduce x to f in [sqrt(2)/2, sqrt(2)].  */\n   uint64x2_t utop = vaddq_u64 (vandq_u64 (u, d->umask), d->hf_rt2_top);\n   uint64x2_t u_red = vorrq_u64 (utop, vandq_u64 (mi, BottomMask));\n-  float64x2_t f = vsubq_f64 (vreinterpretq_f64_u64 (u_red), v_f64 (1));\n+  float64x2_t f = vsubq_f64 (vreinterpretq_f64_u64 (u_red), v_f64 (1.0));\n \n   /* Correction term c/m.  */\n-  float64x2_t cm = vdivq_f64 (vsubq_f64 (x, vsubq_f64 (m, v_f64 (1))), m);\n+  float64x2_t cm = vdivq_f64 (vsubq_f64 (x, vsubq_f64 (m, v_f64 (1.0))), m);\n \n #ifndef WANT_V_LOG1P_K0_SHORTCUT\n-#error                                                                         \\\n-  \"Cannot use v_log1p_inline.h without specifying whether you need the k0 shortcut for greater accuracy close to 0\"\n+# error                                                                       \\\n+      \"Cannot use v_log1p_inline.h without specifying whether you need the k0 shortcut for greater accuracy close to 0\"\n #elif WANT_V_LOG1P_K0_SHORTCUT\n   /* Shortcut if k is 0 - set correction term to 0 and f to x. The result is\n      that the approximation is solely the polynomial.  */\n@@ -92,11 +119,12 @@ log1p_inline (float64x2_t x, const struct v_log1p_data *d)\n \n   /* Approximate log1p(f) on the reduced input using a polynomial.  */\n   float64x2_t f2 = vmulq_f64 (f, f);\n-  float64x2_t p = v_pw_horner_18_f64 (f, f2, d->poly);\n+  float64x2_t p = eval_poly (f, f2, d);\n \n   /* Assemble log1p(x) = k * log2 + log1p(f) + c/m.  */\n-  float64x2_t ylo = vfmaq_f64 (cm, k, d->ln2[1]);\n-  float64x2_t yhi = vfmaq_f64 (f, k, d->ln2[0]);\n+  float64x2_t ln2 = vld1q_f64 (&d->ln2[0]);\n+  float64x2_t ylo = vfmaq_laneq_f64 (cm, k, ln2, 1);\n+  float64x2_t yhi = vfmaq_laneq_f64 (f, k, ln2, 0);\n   return vfmaq_f64 (vaddq_f64 (ylo, yhi), f2, p);\n }\n \n\ncommit 9170b921fa49d2ef37141506837baaae92c7d3f8\nAuthor: Joana Cruz <Joana.Cruz@arm.com>\nDate:   Tue Dec 17 14:47:31 2024 +0000\n\n    AArch64: Improve codegen of AdvSIMD logf function family\n    \n    Load the polynomial evaluation coefficients into 2 vectors and use lanewise MLAs.\n    8% improvement in throughput microbenchmark on Neoverse V1 for log2 and log,\n    and 2% for log10.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit d6e034f5b222a9ed1aeb5de0c0c7d0dda8b63da3)\n\ndiff --git a/sysdeps/aarch64/fpu/log10f_advsimd.c b/sysdeps/aarch64/fpu/log10f_advsimd.c\nindex 82228b599a..0d792c3df9 100644\n--- a/sysdeps/aarch64/fpu/log10f_advsimd.c\n+++ b/sysdeps/aarch64/fpu/log10f_advsimd.c\n@@ -18,21 +18,25 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include \"v_math.h\"\n-#include \"poly_advsimd_f32.h\"\n \n static const struct data\n {\n+  float32x4_t c0, c2, c4, c6, inv_ln10, ln2;\n   uint32x4_t off, offset_lower_bound;\n   uint16x8_t special_bound;\n   uint32x4_t mantissa_mask;\n-  float32x4_t poly[8];\n-  float32x4_t inv_ln10, ln2;\n+  float c1, c3, c5, c7;\n } data = {\n   /* Use order 9 for log10(1+x), i.e. order 8 for log10(1+x)/x, with x in\n       [-1/3, 1/3] (offset=2/3). Max. relative error: 0x1.068ee468p-25.  */\n-  .poly = { V4 (-0x1.bcb79cp-3f), V4 (0x1.2879c8p-3f), V4 (-0x1.bcd472p-4f),\n-\t    V4 (0x1.6408f8p-4f), V4 (-0x1.246f8p-4f), V4 (0x1.f0e514p-5f),\n-\t    V4 (-0x1.0fc92cp-4f), V4 (0x1.f5f76ap-5f) },\n+  .c0 = V4 (-0x1.bcb79cp-3f),\n+  .c1 = 0x1.2879c8p-3f,\n+  .c2 = V4 (-0x1.bcd472p-4f),\n+  .c3 = 0x1.6408f8p-4f,\n+  .c4 = V4 (-0x1.246f8p-4f),\n+  .c5 = 0x1.f0e514p-5f,\n+  .c6 = V4 (-0x1.0fc92cp-4f),\n+  .c7 = 0x1.f5f76ap-5f,\n   .ln2 = V4 (0x1.62e43p-1f),\n   .inv_ln10 = V4 (0x1.bcb7b2p-2f),\n   /* Lower bound is the smallest positive normal float 0x00800000. For\n@@ -62,7 +66,7 @@ special_case (float32x4_t y, uint32x4_t u_off, float32x4_t p, float32x4_t r2,\n float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (log10) (float32x4_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n-\n+  float32x4_t c1357 = vld1q_f32 (&d->c1);\n   /* To avoid having to mov x out of the way, keep u after offset has been\n      applied, and recover x by adding the offset back in the special-case\n      handler.  */\n@@ -81,7 +85,16 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (log10) (float32x4_t x)\n \n   /* y = log10(1+r) + n * log10(2).  */\n   float32x4_t r2 = vmulq_f32 (r, r);\n-  float32x4_t poly = v_pw_horner_7_f32 (r, r2, d->poly);\n+\n+  float32x4_t c01 = vfmaq_laneq_f32 (d->c0, r, c1357, 0);\n+  float32x4_t c23 = vfmaq_laneq_f32 (d->c2, r, c1357, 1);\n+  float32x4_t c45 = vfmaq_laneq_f32 (d->c4, r, c1357, 2);\n+  float32x4_t c67 = vfmaq_laneq_f32 (d->c6, r, c1357, 3);\n+\n+  float32x4_t p47 = vfmaq_f32 (c45, r2, c67);\n+  float32x4_t p27 = vfmaq_f32 (c23, r2, p47);\n+  float32x4_t poly = vfmaq_f32 (c01, r2, p27);\n+\n   /* y = Log10(2) * n + poly * InvLn(10).  */\n   float32x4_t y = vfmaq_f32 (r, d->ln2, n);\n   y = vmulq_f32 (y, d->inv_ln10);\ndiff --git a/sysdeps/aarch64/fpu/log2f_advsimd.c b/sysdeps/aarch64/fpu/log2f_advsimd.c\nindex 84effe4fe9..116c36c8e2 100644\n--- a/sysdeps/aarch64/fpu/log2f_advsimd.c\n+++ b/sysdeps/aarch64/fpu/log2f_advsimd.c\n@@ -18,22 +18,27 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include \"v_math.h\"\n-#include \"poly_advsimd_f32.h\"\n \n static const struct data\n {\n+  float32x4_t c0, c2, c4, c6, c8;\n   uint32x4_t off, offset_lower_bound;\n   uint16x8_t special_bound;\n   uint32x4_t mantissa_mask;\n-  float32x4_t poly[9];\n+  float c1, c3, c5, c7;\n } data = {\n   /* Coefficients generated using Remez algorithm approximate\n      log2(1+r)/r for r in [ -1/3, 1/3 ].\n      rel error: 0x1.c4c4b0cp-26.  */\n-  .poly = { V4 (0x1.715476p0f), /* (float)(1 / ln(2)).  */\n-\t    V4 (-0x1.715458p-1f), V4 (0x1.ec701cp-2f), V4 (-0x1.7171a4p-2f),\n-\t    V4 (0x1.27a0b8p-2f), V4 (-0x1.e5143ep-3f), V4 (0x1.9d8ecap-3f),\n-\t    V4 (-0x1.c675bp-3f), V4 (0x1.9e495p-3f) },\n+  .c0 = V4 (0x1.715476p0f), /* (float)(1 / ln(2)).  */\n+  .c1 = -0x1.715458p-1f,\n+  .c2 = V4 (0x1.ec701cp-2f),\n+  .c3 = -0x1.7171a4p-2f,\n+  .c4 = V4 (0x1.27a0b8p-2f),\n+  .c5 = -0x1.e5143ep-3f,\n+  .c6 = V4 (0x1.9d8ecap-3f),\n+  .c7 = -0x1.c675bp-3f,\n+  .c8 = V4 (0x1.9e495p-3f),\n   /* Lower bound is the smallest positive normal float 0x00800000. For\n      optimised register use subnormals are detected after offset has been\n      subtracted, so lower bound is 0x0080000 - offset (which wraps around).  */\n@@ -79,11 +84,21 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (log2) (float32x4_t x)\n \n   /* y = log2(1+r) + n.  */\n   float32x4_t r2 = vmulq_f32 (r, r);\n-  float32x4_t p = v_pw_horner_8_f32 (r, r2, d->poly);\n+\n+  float32x4_t c1357 = vld1q_f32 (&d->c1);\n+  float32x4_t c01 = vfmaq_laneq_f32 (d->c0, r, c1357, 0);\n+  float32x4_t c23 = vfmaq_laneq_f32 (d->c2, r, c1357, 1);\n+  float32x4_t c45 = vfmaq_laneq_f32 (d->c4, r, c1357, 2);\n+  float32x4_t c67 = vfmaq_laneq_f32 (d->c6, r, c1357, 3);\n+  float32x4_t p68 = vfmaq_f32 (c67, r2, d->c8);\n+  float32x4_t p48 = vfmaq_f32 (c45, r2, p68);\n+  float32x4_t p28 = vfmaq_f32 (c23, r2, p48);\n+  float32x4_t p = vfmaq_f32 (c01, r2, p28);\n \n   if (__glibc_unlikely (v_any_u16h (special)))\n     return special_case (n, u_off, p, r, special, d);\n   return vfmaq_f32 (n, p, r);\n }\n+\n libmvec_hidden_def (V_NAME_F1 (log2))\n HALF_WIDTH_ALIAS_F1 (log2)\ndiff --git a/sysdeps/aarch64/fpu/logf_advsimd.c b/sysdeps/aarch64/fpu/logf_advsimd.c\nindex c20dbfd6c0..d9e64c732d 100644\n--- a/sysdeps/aarch64/fpu/logf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/logf_advsimd.c\n@@ -21,16 +21,19 @@\n \n static const struct data\n {\n-  uint32x4_t off, offset_lower_bound;\n+  float32x4_t c2, c4, c6, ln2;\n+  uint32x4_t off, offset_lower_bound, mantissa_mask;\n   uint16x8_t special_bound;\n-  uint32x4_t mantissa_mask;\n-  float32x4_t poly[7];\n-  float32x4_t ln2;\n+  float c1, c3, c5, c0;\n } data = {\n   /* 3.34 ulp error.  */\n-  .poly = { V4 (-0x1.3e737cp-3f), V4 (0x1.5a9aa2p-3f), V4 (-0x1.4f9934p-3f),\n-\t    V4 (0x1.961348p-3f), V4 (-0x1.00187cp-2f), V4 (0x1.555d7cp-2f),\n-\t    V4 (-0x1.ffffc8p-2f) },\n+  .c0 = -0x1.3e737cp-3f,\n+  .c1 = 0x1.5a9aa2p-3f,\n+  .c2 = V4 (-0x1.4f9934p-3f),\n+  .c3 = 0x1.961348p-3f,\n+  .c4 = V4 (-0x1.00187cp-2f),\n+  .c5 = 0x1.555d7cp-2f,\n+  .c6 = V4 (-0x1.ffffc8p-2f),\n   .ln2 = V4 (0x1.62e43p-1f),\n   /* Lower bound is the smallest positive normal float 0x00800000. For\n      optimised register use subnormals are detected after offset has been\n@@ -41,8 +44,6 @@ static const struct data\n   .mantissa_mask = V4 (0x007fffff)\n };\n \n-#define P(i) d->poly[7 - i]\n-\n static float32x4_t VPCS_ATTR NOINLINE\n special_case (float32x4_t p, uint32x4_t u_off, float32x4_t y, float32x4_t r2,\n \t      uint16x4_t cmp, const struct data *d)\n@@ -55,33 +56,30 @@ special_case (float32x4_t p, uint32x4_t u_off, float32x4_t y, float32x4_t r2,\n float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (log) (float32x4_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n-  float32x4_t n, p, q, r, r2, y;\n-  uint32x4_t u, u_off;\n-  uint16x4_t cmp;\n+  float32x4_t c1350 = vld1q_f32 (&d->c1);\n \n   /* To avoid having to mov x out of the way, keep u after offset has been\n      applied, and recover x by adding the offset back in the special-case\n      handler.  */\n-  u_off = vreinterpretq_u32_f32 (x);\n+  uint32x4_t u_off = vsubq_u32 (vreinterpretq_u32_f32 (x), d->off);\n \n   /* x = 2^n * (1+r), where 2/3 < 1+r < 4/3.  */\n-  u_off = vsubq_u32 (u_off, d->off);\n-  n = vcvtq_f32_s32 (\n+  float32x4_t n = vcvtq_f32_s32 (\n       vshrq_n_s32 (vreinterpretq_s32_u32 (u_off), 23)); /* signextend.  */\n-  u = vandq_u32 (u_off, d->mantissa_mask);\n-  u = vaddq_u32 (u, d->off);\n-  r = vsubq_f32 (vreinterpretq_f32_u32 (u), v_f32 (1.0f));\n+  uint16x4_t cmp = vcge_u16 (vsubhn_u32 (u_off, d->offset_lower_bound),\n+\t\t\t     vget_low_u16 (d->special_bound));\n \n-  cmp = vcge_u16 (vsubhn_u32 (u_off, d->offset_lower_bound),\n-\t\t  vget_low_u16 (d->special_bound));\n+  uint32x4_t u = vaddq_u32 (vandq_u32 (u_off, d->mantissa_mask), d->off);\n+  float32x4_t r = vsubq_f32 (vreinterpretq_f32_u32 (u), v_f32 (1.0f));\n \n   /* y = log(1+r) + n*ln2.  */\n-  r2 = vmulq_f32 (r, r);\n+  float32x4_t r2 = vmulq_f32 (r, r);\n   /* n*ln2 + r + r2*(P1 + r*P2 + r2*(P3 + r*P4 + r2*(P5 + r*P6 + r2*P7))).  */\n-  p = vfmaq_f32 (P (5), P (6), r);\n-  q = vfmaq_f32 (P (3), P (4), r);\n-  y = vfmaq_f32 (P (1), P (2), r);\n-  p = vfmaq_f32 (p, P (7), r2);\n+  float32x4_t p = vfmaq_laneq_f32 (d->c2, r, c1350, 0);\n+  float32x4_t q = vfmaq_laneq_f32 (d->c4, r, c1350, 1);\n+  float32x4_t y = vfmaq_laneq_f32 (d->c6, r, c1350, 2);\n+  p = vfmaq_laneq_f32 (p, r2, c1350, 3);\n+\n   q = vfmaq_f32 (q, p, r2);\n   y = vfmaq_f32 (y, q, r2);\n   p = vfmaq_f32 (r, d->ln2, n);\n\ncommit 41dc9e7c2d80bc5e886950b8a7bd21f77c9793b3\nAuthor: Joana Cruz <Joana.Cruz@arm.com>\nDate:   Tue Dec 17 14:49:30 2024 +0000\n\n    AArch64: Improve codegen of AdvSIMD atan(2)(f)\n    \n    Load the polynomial evaluation coefficients into 2 vectors and use lanewise MLAs.\n    8% improvement in throughput microbenchmark on Neoverse V1.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit 6914774b9d3460876d9ad4482782213ec01a752e)\n\ndiff --git a/sysdeps/aarch64/fpu/atan2_advsimd.c b/sysdeps/aarch64/fpu/atan2_advsimd.c\nindex b1e7a9b8fc..1a8f02109f 100644\n--- a/sysdeps/aarch64/fpu/atan2_advsimd.c\n+++ b/sysdeps/aarch64/fpu/atan2_advsimd.c\n@@ -23,40 +23,57 @@\n \n static const struct data\n {\n+  float64x2_t c0, c2, c4, c6, c8, c10, c12, c14, c16, c18;\n   float64x2_t pi_over_2;\n-  float64x2_t poly[20];\n+  double c1, c3, c5, c7, c9, c11, c13, c15, c17, c19;\n+  uint64x2_t zeroinfnan, minustwo;\n } data = {\n   /* Coefficients of polynomial P such that atan(x)~x+x*P(x^2) on\n-     the interval [2**-1022, 1.0].  */\n-  .poly = { V2 (-0x1.5555555555555p-2),\t V2 (0x1.99999999996c1p-3),\n-\t    V2 (-0x1.2492492478f88p-3),\t V2 (0x1.c71c71bc3951cp-4),\n-\t    V2 (-0x1.745d160a7e368p-4),\t V2 (0x1.3b139b6a88ba1p-4),\n-\t    V2 (-0x1.11100ee084227p-4),\t V2 (0x1.e1d0f9696f63bp-5),\n-\t    V2 (-0x1.aebfe7b418581p-5),\t V2 (0x1.842dbe9b0d916p-5),\n-\t    V2 (-0x1.5d30140ae5e99p-5),\t V2 (0x1.338e31eb2fbbcp-5),\n-\t    V2 (-0x1.00e6eece7de8p-5),\t V2 (0x1.860897b29e5efp-6),\n-\t    V2 (-0x1.0051381722a59p-6),\t V2 (0x1.14e9dc19a4a4ep-7),\n-\t    V2 (-0x1.d0062b42fe3bfp-9),\t V2 (0x1.17739e210171ap-10),\n-\t    V2 (-0x1.ab24da7be7402p-13), V2 (0x1.358851160a528p-16), },\n+\t      [2**-1022, 1.0].  */\n+  .c0 = V2 (-0x1.5555555555555p-2),\n+  .c1 = 0x1.99999999996c1p-3,\n+  .c2 = V2 (-0x1.2492492478f88p-3),\n+  .c3 = 0x1.c71c71bc3951cp-4,\n+  .c4 = V2 (-0x1.745d160a7e368p-4),\n+  .c5 = 0x1.3b139b6a88ba1p-4,\n+  .c6 = V2 (-0x1.11100ee084227p-4),\n+  .c7 = 0x1.e1d0f9696f63bp-5,\n+  .c8 = V2 (-0x1.aebfe7b418581p-5),\n+  .c9 = 0x1.842dbe9b0d916p-5,\n+  .c10 = V2 (-0x1.5d30140ae5e99p-5),\n+  .c11 = 0x1.338e31eb2fbbcp-5,\n+  .c12 = V2 (-0x1.00e6eece7de8p-5),\n+  .c13 = 0x1.860897b29e5efp-6,\n+  .c14 = V2 (-0x1.0051381722a59p-6),\n+  .c15 = 0x1.14e9dc19a4a4ep-7,\n+  .c16 = V2 (-0x1.d0062b42fe3bfp-9),\n+  .c17 = 0x1.17739e210171ap-10,\n+  .c18 = V2 (-0x1.ab24da7be7402p-13),\n+  .c19 = 0x1.358851160a528p-16,\n   .pi_over_2 = V2 (0x1.921fb54442d18p+0),\n+  .zeroinfnan = V2 (2 * 0x7ff0000000000000ul - 1),\n+  .minustwo = V2 (0xc000000000000000),\n };\n \n #define SignMask v_u64 (0x8000000000000000)\n \n /* Special cases i.e. 0, infinity, NaN (fall back to scalar calls).  */\n static float64x2_t VPCS_ATTR NOINLINE\n-special_case (float64x2_t y, float64x2_t x, float64x2_t ret, uint64x2_t cmp)\n+special_case (float64x2_t y, float64x2_t x, float64x2_t ret,\n+\t      uint64x2_t sign_xy, uint64x2_t cmp)\n {\n+  /* Account for the sign of x and y.  */\n+  ret = vreinterpretq_f64_u64 (\n+      veorq_u64 (vreinterpretq_u64_f64 (ret), sign_xy));\n   return v_call2_f64 (atan2, y, x, ret, cmp);\n }\n \n /* Returns 1 if input is the bit representation of 0, infinity or nan.  */\n static inline uint64x2_t\n-zeroinfnan (uint64x2_t i)\n+zeroinfnan (uint64x2_t i, const struct data *d)\n {\n   /* (2 * i - 1) >= (2 * asuint64 (INFINITY) - 1).  */\n-  return vcgeq_u64 (vsubq_u64 (vaddq_u64 (i, i), v_u64 (1)),\n-\t\t    v_u64 (2 * asuint64 (INFINITY) - 1));\n+  return vcgeq_u64 (vsubq_u64 (vaddq_u64 (i, i), v_u64 (1)), d->zeroinfnan);\n }\n \n /* Fast implementation of vector atan2.\n@@ -66,12 +83,13 @@ zeroinfnan (uint64x2_t i)\n        want 0x1.92d628ab678cfp-1.  */\n float64x2_t VPCS_ATTR V_NAME_D2 (atan2) (float64x2_t y, float64x2_t x)\n {\n-  const struct data *data_ptr = ptr_barrier (&data);\n+  const struct data *d = ptr_barrier (&data);\n \n   uint64x2_t ix = vreinterpretq_u64_f64 (x);\n   uint64x2_t iy = vreinterpretq_u64_f64 (y);\n \n-  uint64x2_t special_cases = vorrq_u64 (zeroinfnan (ix), zeroinfnan (iy));\n+  uint64x2_t special_cases\n+      = vorrq_u64 (zeroinfnan (ix, d), zeroinfnan (iy, d));\n \n   uint64x2_t sign_x = vandq_u64 (ix, SignMask);\n   uint64x2_t sign_y = vandq_u64 (iy, SignMask);\n@@ -81,18 +99,18 @@ float64x2_t VPCS_ATTR V_NAME_D2 (atan2) (float64x2_t y, float64x2_t x)\n   float64x2_t ay = vabsq_f64 (y);\n \n   uint64x2_t pred_xlt0 = vcltzq_f64 (x);\n-  uint64x2_t pred_aygtax = vcgtq_f64 (ay, ax);\n+  uint64x2_t pred_aygtax = vcagtq_f64 (y, x);\n \n   /* Set up z for call to atan.  */\n   float64x2_t n = vbslq_f64 (pred_aygtax, vnegq_f64 (ax), ay);\n-  float64x2_t d = vbslq_f64 (pred_aygtax, ay, ax);\n-  float64x2_t z = vdivq_f64 (n, d);\n+  float64x2_t q = vbslq_f64 (pred_aygtax, ay, ax);\n+  float64x2_t z = vdivq_f64 (n, q);\n \n   /* Work out the correct shift.  */\n-  float64x2_t shift = vreinterpretq_f64_u64 (\n-      vandq_u64 (pred_xlt0, vreinterpretq_u64_f64 (v_f64 (-2.0))));\n+  float64x2_t shift\n+      = vreinterpretq_f64_u64 (vandq_u64 (pred_xlt0, d->minustwo));\n   shift = vbslq_f64 (pred_aygtax, vaddq_f64 (shift, v_f64 (1.0)), shift);\n-  shift = vmulq_f64 (shift, data_ptr->pi_over_2);\n+  shift = vmulq_f64 (shift, d->pi_over_2);\n \n   /* Calculate the polynomial approximation.\n      Use split Estrin scheme for P(z^2) with deg(P)=19. Use split instead of\n@@ -103,20 +121,52 @@ float64x2_t VPCS_ATTR V_NAME_D2 (atan2) (float64x2_t y, float64x2_t x)\n   float64x2_t x2 = vmulq_f64 (z2, z2);\n   float64x2_t x4 = vmulq_f64 (x2, x2);\n   float64x2_t x8 = vmulq_f64 (x4, x4);\n-  float64x2_t ret\n-      = vfmaq_f64 (v_estrin_7_f64 (z2, x2, x4, data_ptr->poly),\n-\t\t   v_estrin_11_f64 (z2, x2, x4, x8, data_ptr->poly + 8), x8);\n+\n+  float64x2_t c13 = vld1q_f64 (&d->c1);\n+  float64x2_t c57 = vld1q_f64 (&d->c5);\n+  float64x2_t c911 = vld1q_f64 (&d->c9);\n+  float64x2_t c1315 = vld1q_f64 (&d->c13);\n+  float64x2_t c1719 = vld1q_f64 (&d->c17);\n+\n+  /* estrin_7.  */\n+  float64x2_t p01 = vfmaq_laneq_f64 (d->c0, z2, c13, 0);\n+  float64x2_t p23 = vfmaq_laneq_f64 (d->c2, z2, c13, 1);\n+  float64x2_t p03 = vfmaq_f64 (p01, x2, p23);\n+\n+  float64x2_t p45 = vfmaq_laneq_f64 (d->c4, z2, c57, 0);\n+  float64x2_t p67 = vfmaq_laneq_f64 (d->c6, z2, c57, 1);\n+  float64x2_t p47 = vfmaq_f64 (p45, x2, p67);\n+\n+  float64x2_t p07 = vfmaq_f64 (p03, x4, p47);\n+\n+  /* estrin_11.  */\n+  float64x2_t p89 = vfmaq_laneq_f64 (d->c8, z2, c911, 0);\n+  float64x2_t p1011 = vfmaq_laneq_f64 (d->c10, z2, c911, 1);\n+  float64x2_t p811 = vfmaq_f64 (p89, x2, p1011);\n+\n+  float64x2_t p1213 = vfmaq_laneq_f64 (d->c12, z2, c1315, 0);\n+  float64x2_t p1415 = vfmaq_laneq_f64 (d->c14, z2, c1315, 1);\n+  float64x2_t p1215 = vfmaq_f64 (p1213, x2, p1415);\n+\n+  float64x2_t p1617 = vfmaq_laneq_f64 (d->c16, z2, c1719, 0);\n+  float64x2_t p1819 = vfmaq_laneq_f64 (d->c18, z2, c1719, 1);\n+  float64x2_t p1619 = vfmaq_f64 (p1617, x2, p1819);\n+\n+  float64x2_t p815 = vfmaq_f64 (p811, x4, p1215);\n+  float64x2_t p819 = vfmaq_f64 (p815, x8, p1619);\n+\n+  float64x2_t ret = vfmaq_f64 (p07, p819, x8);\n \n   /* Finalize. y = shift + z + z^3 * P(z^2).  */\n   ret = vfmaq_f64 (z, ret, vmulq_f64 (z2, z));\n   ret = vaddq_f64 (ret, shift);\n \n+  if (__glibc_unlikely (v_any_u64 (special_cases)))\n+    return special_case (y, x, ret, sign_xy, special_cases);\n+\n   /* Account for the sign of x and y.  */\n   ret = vreinterpretq_f64_u64 (\n       veorq_u64 (vreinterpretq_u64_f64 (ret), sign_xy));\n \n-  if (__glibc_unlikely (v_any_u64 (special_cases)))\n-    return special_case (y, x, ret, special_cases);\n-\n   return ret;\n }\ndiff --git a/sysdeps/aarch64/fpu/atan2f_advsimd.c b/sysdeps/aarch64/fpu/atan2f_advsimd.c\nindex 56e610caf1..88daacd76c 100644\n--- a/sysdeps/aarch64/fpu/atan2f_advsimd.c\n+++ b/sysdeps/aarch64/fpu/atan2f_advsimd.c\n@@ -22,34 +22,39 @@\n \n static const struct data\n {\n-  float32x4_t poly[8];\n-  float32x4_t pi_over_2;\n+  float32x4_t c0, pi_over_2, c4, c6, c2;\n+  float c1, c3, c5, c7;\n+  uint32x4_t comp_const;\n } data = {\n   /* Coefficients of polynomial P such that atan(x)~x+x*P(x^2) on\n      [2**-128, 1.0].\n      Generated using fpminimax between FLT_MIN and 1.  */\n-  .poly = { V4 (-0x1.55555p-2f), V4 (0x1.99935ep-3f), V4 (-0x1.24051ep-3f),\n-\t    V4 (0x1.bd7368p-4f), V4 (-0x1.491f0ep-4f), V4 (0x1.93a2c0p-5f),\n-\t    V4 (-0x1.4c3c60p-6f), V4 (0x1.01fd88p-8f) },\n-  .pi_over_2 = V4 (0x1.921fb6p+0f),\n+  .c0 = V4 (-0x1.55555p-2f),\t    .c1 = 0x1.99935ep-3f,\n+  .c2 = V4 (-0x1.24051ep-3f),\t    .c3 = 0x1.bd7368p-4f,\n+  .c4 = V4 (-0x1.491f0ep-4f),\t    .c5 = 0x1.93a2c0p-5f,\n+  .c6 = V4 (-0x1.4c3c60p-6f),\t    .c7 = 0x1.01fd88p-8f,\n+  .pi_over_2 = V4 (0x1.921fb6p+0f), .comp_const = V4 (2 * 0x7f800000lu - 1),\n };\n \n #define SignMask v_u32 (0x80000000)\n \n /* Special cases i.e. 0, infinity and nan (fall back to scalar calls).  */\n static float32x4_t VPCS_ATTR NOINLINE\n-special_case (float32x4_t y, float32x4_t x, float32x4_t ret, uint32x4_t cmp)\n+special_case (float32x4_t y, float32x4_t x, float32x4_t ret,\n+\t      uint32x4_t sign_xy, uint32x4_t cmp)\n {\n+  /* Account for the sign of y.  */\n+  ret = vreinterpretq_f32_u32 (\n+      veorq_u32 (vreinterpretq_u32_f32 (ret), sign_xy));\n   return v_call2_f32 (atan2f, y, x, ret, cmp);\n }\n \n /* Returns 1 if input is the bit representation of 0, infinity or nan.  */\n static inline uint32x4_t\n-zeroinfnan (uint32x4_t i)\n+zeroinfnan (uint32x4_t i, const struct data *d)\n {\n   /* 2 * i - 1 >= 2 * 0x7f800000lu - 1.  */\n-  return vcgeq_u32 (vsubq_u32 (vmulq_n_u32 (i, 2), v_u32 (1)),\n-\t\t    v_u32 (2 * 0x7f800000lu - 1));\n+  return vcgeq_u32 (vsubq_u32 (vmulq_n_u32 (i, 2), v_u32 (1)), d->comp_const);\n }\n \n /* Fast implementation of vector atan2f. Maximum observed error is\n@@ -58,12 +63,13 @@ zeroinfnan (uint32x4_t i)\n \t\t\t\t\t\t want 0x1.967f00p-1.  */\n float32x4_t VPCS_ATTR NOINLINE V_NAME_F2 (atan2) (float32x4_t y, float32x4_t x)\n {\n-  const struct data *data_ptr = ptr_barrier (&data);\n+  const struct data *d = ptr_barrier (&data);\n \n   uint32x4_t ix = vreinterpretq_u32_f32 (x);\n   uint32x4_t iy = vreinterpretq_u32_f32 (y);\n \n-  uint32x4_t special_cases = vorrq_u32 (zeroinfnan (ix), zeroinfnan (iy));\n+  uint32x4_t special_cases\n+      = vorrq_u32 (zeroinfnan (ix, d), zeroinfnan (iy, d));\n \n   uint32x4_t sign_x = vandq_u32 (ix, SignMask);\n   uint32x4_t sign_y = vandq_u32 (iy, SignMask);\n@@ -77,14 +83,14 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F2 (atan2) (float32x4_t y, float32x4_t x)\n \n   /* Set up z for call to atanf.  */\n   float32x4_t n = vbslq_f32 (pred_aygtax, vnegq_f32 (ax), ay);\n-  float32x4_t d = vbslq_f32 (pred_aygtax, ay, ax);\n-  float32x4_t z = vdivq_f32 (n, d);\n+  float32x4_t q = vbslq_f32 (pred_aygtax, ay, ax);\n+  float32x4_t z = vdivq_f32 (n, q);\n \n   /* Work out the correct shift.  */\n   float32x4_t shift = vreinterpretq_f32_u32 (\n       vandq_u32 (pred_xlt0, vreinterpretq_u32_f32 (v_f32 (-2.0f))));\n   shift = vbslq_f32 (pred_aygtax, vaddq_f32 (shift, v_f32 (1.0f)), shift);\n-  shift = vmulq_f32 (shift, data_ptr->pi_over_2);\n+  shift = vmulq_f32 (shift, d->pi_over_2);\n \n   /* Calculate the polynomial approximation.\n      Use 2-level Estrin scheme for P(z^2) with deg(P)=7. However,\n@@ -96,23 +102,27 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F2 (atan2) (float32x4_t y, float32x4_t x)\n   float32x4_t z2 = vmulq_f32 (z, z);\n   float32x4_t z4 = vmulq_f32 (z2, z2);\n \n-  float32x4_t ret = vfmaq_f32 (\n-      v_pairwise_poly_3_f32 (z2, z4, data_ptr->poly), z4,\n-      vmulq_f32 (z4, v_pairwise_poly_3_f32 (z2, z4, data_ptr->poly + 4)));\n+  float32x4_t c1357 = vld1q_f32 (&d->c1);\n+  float32x4_t p01 = vfmaq_laneq_f32 (d->c0, z2, c1357, 0);\n+  float32x4_t p23 = vfmaq_laneq_f32 (d->c2, z2, c1357, 1);\n+  float32x4_t p45 = vfmaq_laneq_f32 (d->c4, z2, c1357, 2);\n+  float32x4_t p67 = vfmaq_laneq_f32 (d->c6, z2, c1357, 3);\n+  float32x4_t p03 = vfmaq_f32 (p01, z4, p23);\n+  float32x4_t p47 = vfmaq_f32 (p45, z4, p67);\n+\n+  float32x4_t ret = vfmaq_f32 (p03, z4, vmulq_f32 (z4, p47));\n \n   /* y = shift + z * P(z^2).  */\n   ret = vaddq_f32 (vfmaq_f32 (z, ret, vmulq_f32 (z2, z)), shift);\n \n-  /* Account for the sign of y.  */\n-  ret = vreinterpretq_f32_u32 (\n-      veorq_u32 (vreinterpretq_u32_f32 (ret), sign_xy));\n-\n   if (__glibc_unlikely (v_any_u32 (special_cases)))\n     {\n-      return special_case (y, x, ret, special_cases);\n+      return special_case (y, x, ret, sign_xy, special_cases);\n     }\n \n-  return ret;\n+  /* Account for the sign of y.  */\n+  return vreinterpretq_f32_u32 (\n+      veorq_u32 (vreinterpretq_u32_f32 (ret), sign_xy));\n }\n libmvec_hidden_def (V_NAME_F2 (atan2))\n HALF_WIDTH_ALIAS_F2(atan2)\ndiff --git a/sysdeps/aarch64/fpu/atan_advsimd.c b/sysdeps/aarch64/fpu/atan_advsimd.c\nindex a962be0f78..14f1809796 100644\n--- a/sysdeps/aarch64/fpu/atan_advsimd.c\n+++ b/sysdeps/aarch64/fpu/atan_advsimd.c\n@@ -22,21 +22,22 @@\n \n static const struct data\n {\n+  float64x2_t c0, c2, c4, c6, c8, c10, c12, c14, c16, c18;\n   float64x2_t pi_over_2;\n-  float64x2_t poly[20];\n+  double c1, c3, c5, c7, c9, c11, c13, c15, c17, c19;\n } data = {\n   /* Coefficients of polynomial P such that atan(x)~x+x*P(x^2) on\n \t      [2**-1022, 1.0].  */\n-  .poly = { V2 (-0x1.5555555555555p-2),\t V2 (0x1.99999999996c1p-3),\n-\t    V2 (-0x1.2492492478f88p-3),\t V2 (0x1.c71c71bc3951cp-4),\n-\t    V2 (-0x1.745d160a7e368p-4),\t V2 (0x1.3b139b6a88ba1p-4),\n-\t    V2 (-0x1.11100ee084227p-4),\t V2 (0x1.e1d0f9696f63bp-5),\n-\t    V2 (-0x1.aebfe7b418581p-5),\t V2 (0x1.842dbe9b0d916p-5),\n-\t    V2 (-0x1.5d30140ae5e99p-5),\t V2 (0x1.338e31eb2fbbcp-5),\n-\t    V2 (-0x1.00e6eece7de8p-5),\t V2 (0x1.860897b29e5efp-6),\n-\t    V2 (-0x1.0051381722a59p-6),\t V2 (0x1.14e9dc19a4a4ep-7),\n-\t    V2 (-0x1.d0062b42fe3bfp-9),\t V2 (0x1.17739e210171ap-10),\n-\t    V2 (-0x1.ab24da7be7402p-13), V2 (0x1.358851160a528p-16), },\n+  .c0 = V2 (-0x1.5555555555555p-2),\t  .c1 = 0x1.99999999996c1p-3,\n+  .c2 = V2 (-0x1.2492492478f88p-3),\t  .c3 = 0x1.c71c71bc3951cp-4,\n+  .c4 = V2 (-0x1.745d160a7e368p-4),\t  .c5 = 0x1.3b139b6a88ba1p-4,\n+  .c6 = V2 (-0x1.11100ee084227p-4),\t  .c7 = 0x1.e1d0f9696f63bp-5,\n+  .c8 = V2 (-0x1.aebfe7b418581p-5),\t  .c9 = 0x1.842dbe9b0d916p-5,\n+  .c10 = V2 (-0x1.5d30140ae5e99p-5),\t  .c11 = 0x1.338e31eb2fbbcp-5,\n+  .c12 = V2 (-0x1.00e6eece7de8p-5),\t  .c13 = 0x1.860897b29e5efp-6,\n+  .c14 = V2 (-0x1.0051381722a59p-6),\t  .c15 = 0x1.14e9dc19a4a4ep-7,\n+  .c16 = V2 (-0x1.d0062b42fe3bfp-9),\t  .c17 = 0x1.17739e210171ap-10,\n+  .c18 = V2 (-0x1.ab24da7be7402p-13),\t  .c19 = 0x1.358851160a528p-16,\n   .pi_over_2 = V2 (0x1.921fb54442d18p+0),\n };\n \n@@ -52,6 +53,11 @@ static const struct data\n float64x2_t VPCS_ATTR V_NAME_D1 (atan) (float64x2_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n+  float64x2_t c13 = vld1q_f64 (&d->c1);\n+  float64x2_t c57 = vld1q_f64 (&d->c5);\n+  float64x2_t c911 = vld1q_f64 (&d->c9);\n+  float64x2_t c1315 = vld1q_f64 (&d->c13);\n+  float64x2_t c1719 = vld1q_f64 (&d->c17);\n \n   /* Small cases, infs and nans are supported by our approximation technique,\n      but do not set fenv flags correctly. Only trigger special case if we need\n@@ -90,9 +96,35 @@ float64x2_t VPCS_ATTR V_NAME_D1 (atan) (float64x2_t x)\n   float64x2_t x2 = vmulq_f64 (z2, z2);\n   float64x2_t x4 = vmulq_f64 (x2, x2);\n   float64x2_t x8 = vmulq_f64 (x4, x4);\n-  float64x2_t y\n-      = vfmaq_f64 (v_estrin_7_f64 (z2, x2, x4, d->poly),\n-\t\t   v_estrin_11_f64 (z2, x2, x4, x8, d->poly + 8), x8);\n+\n+  /* estrin_7.  */\n+  float64x2_t p01 = vfmaq_laneq_f64 (d->c0, z2, c13, 0);\n+  float64x2_t p23 = vfmaq_laneq_f64 (d->c2, z2, c13, 1);\n+  float64x2_t p03 = vfmaq_f64 (p01, x2, p23);\n+\n+  float64x2_t p45 = vfmaq_laneq_f64 (d->c4, z2, c57, 0);\n+  float64x2_t p67 = vfmaq_laneq_f64 (d->c6, z2, c57, 1);\n+  float64x2_t p47 = vfmaq_f64 (p45, x2, p67);\n+\n+  float64x2_t p07 = vfmaq_f64 (p03, x4, p47);\n+\n+  /* estrin_11.  */\n+  float64x2_t p89 = vfmaq_laneq_f64 (d->c8, z2, c911, 0);\n+  float64x2_t p1011 = vfmaq_laneq_f64 (d->c10, z2, c911, 1);\n+  float64x2_t p811 = vfmaq_f64 (p89, x2, p1011);\n+\n+  float64x2_t p1213 = vfmaq_laneq_f64 (d->c12, z2, c1315, 0);\n+  float64x2_t p1415 = vfmaq_laneq_f64 (d->c14, z2, c1315, 1);\n+  float64x2_t p1215 = vfmaq_f64 (p1213, x2, p1415);\n+\n+  float64x2_t p1617 = vfmaq_laneq_f64 (d->c16, z2, c1719, 0);\n+  float64x2_t p1819 = vfmaq_laneq_f64 (d->c18, z2, c1719, 1);\n+  float64x2_t p1619 = vfmaq_f64 (p1617, x2, p1819);\n+\n+  float64x2_t p815 = vfmaq_f64 (p811, x4, p1215);\n+  float64x2_t p819 = vfmaq_f64 (p815, x8, p1619);\n+\n+  float64x2_t y = vfmaq_f64 (p07, p819, x8);\n \n   /* Finalize. y = shift + z + z^3 * P(z^2).  */\n   y = vfmaq_f64 (az, y, vmulq_f64 (z2, az));\n\ncommit bf2b60a56036c951a798845223a2e04cc48507e4\nAuthor: Joana Cruz <Joana.Cruz@arm.com>\nDate:   Tue Dec 17 14:50:33 2024 +0000\n\n    AArch64: Improve codegen of AdvSIMD expf family\n    \n    Load the polynomial evaluation coefficients into 2 vectors and use lanewise MLAs.\n    Also use intrinsics instead of native operations.\n    expf: 3% improvement in throughput microbenchmark on Neoverse V1, exp2f: 5%,\n    exp10f: 13%, coshf: 14%.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit cff9648d0b50d19cdaf685f6767add040d4e1a8e)\n\ndiff --git a/sysdeps/aarch64/fpu/coshf_advsimd.c b/sysdeps/aarch64/fpu/coshf_advsimd.c\nindex c1ab4923b8..cd5c866521 100644\n--- a/sysdeps/aarch64/fpu/coshf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/coshf_advsimd.c\n@@ -23,19 +23,27 @@\n static const struct data\n {\n   struct v_expf_data expf_consts;\n-  uint32x4_t tiny_bound, special_bound;\n+  uint32x4_t tiny_bound;\n+  float32x4_t bound;\n+#if WANT_SIMD_EXCEPT\n+  uint32x4_t special_bound;\n+#endif\n } data = {\n   .expf_consts = V_EXPF_DATA,\n   .tiny_bound = V4 (0x20000000), /* 0x1p-63: Round to 1 below this.  */\n   /* 0x1.5a92d8p+6: expf overflows above this, so have to use special case.  */\n+  .bound = V4 (0x1.5a92d8p+6),\n+#if WANT_SIMD_EXCEPT\n   .special_bound = V4 (0x42ad496c),\n+#endif\n };\n \n #if !WANT_SIMD_EXCEPT\n static float32x4_t NOINLINE VPCS_ATTR\n-special_case (float32x4_t x, float32x4_t y, uint32x4_t special)\n+special_case (float32x4_t x, float32x4_t half_t, float32x4_t half_over_t,\n+\t      uint32x4_t special)\n {\n-  return v_call_f32 (coshf, x, y, special);\n+  return v_call_f32 (coshf, x, vaddq_f32 (half_t, half_over_t), special);\n }\n #endif\n \n@@ -47,14 +55,13 @@ float32x4_t VPCS_ATTR V_NAME_F1 (cosh) (float32x4_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n \n-  float32x4_t ax = vabsq_f32 (x);\n-  uint32x4_t iax = vreinterpretq_u32_f32 (ax);\n-  uint32x4_t special = vcgeq_u32 (iax, d->special_bound);\n-\n #if WANT_SIMD_EXCEPT\n   /* If fp exceptions are to be triggered correctly, fall back to the scalar\n      variant for all inputs if any input is a special value or above the bound\n      at which expf overflows.  */\n+  float32x4_t ax = vabsq_f32 (x);\n+  uint32x4_t iax = vreinterpretq_u32_f32 (ax);\n+  uint32x4_t special = vcgeq_u32 (iax, d->special_bound);\n   if (__glibc_unlikely (v_any_u32 (special)))\n     return v_call_f32 (coshf, x, x, v_u32 (-1));\n \n@@ -63,10 +70,13 @@ float32x4_t VPCS_ATTR V_NAME_F1 (cosh) (float32x4_t x)\n      input to 0, which will generate no exceptions.  */\n   if (__glibc_unlikely (v_any_u32 (tiny)))\n     ax = v_zerofy_f32 (ax, tiny);\n+  float32x4_t t = v_expf_inline (ax, &d->expf_consts);\n+#else\n+  uint32x4_t special = vcageq_f32 (x, d->bound);\n+  float32x4_t t = v_expf_inline (x, &d->expf_consts);\n #endif\n \n   /* Calculate cosh by exp(x) / 2 + exp(-x) / 2.  */\n-  float32x4_t t = v_expf_inline (ax, &d->expf_consts);\n   float32x4_t half_t = vmulq_n_f32 (t, 0.5);\n   float32x4_t half_over_t = vdivq_f32 (v_f32 (0.5), t);\n \n@@ -75,7 +85,7 @@ float32x4_t VPCS_ATTR V_NAME_F1 (cosh) (float32x4_t x)\n     return vbslq_f32 (tiny, v_f32 (1), vaddq_f32 (half_t, half_over_t));\n #else\n   if (__glibc_unlikely (v_any_u32 (special)))\n-    return special_case (x, vaddq_f32 (half_t, half_over_t), special);\n+    return special_case (x, half_t, half_over_t, special);\n #endif\n \n   return vaddq_f32 (half_t, half_over_t);\ndiff --git a/sysdeps/aarch64/fpu/exp10f_advsimd.c b/sysdeps/aarch64/fpu/exp10f_advsimd.c\nindex cf53e73290..55d9cd83f2 100644\n--- a/sysdeps/aarch64/fpu/exp10f_advsimd.c\n+++ b/sysdeps/aarch64/fpu/exp10f_advsimd.c\n@@ -18,16 +18,15 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include \"v_math.h\"\n-#include \"poly_advsimd_f32.h\"\n \n #define ScaleBound 192.0f\n \n static const struct data\n {\n-  float32x4_t poly[5];\n-  float log10_2_and_inv[4];\n-  float32x4_t shift;\n-\n+  float32x4_t c0, c1, c3;\n+  float log10_2_high, log10_2_low, c2, c4;\n+  float32x4_t inv_log10_2, special_bound;\n+  uint32x4_t exponent_bias, special_offset, special_bias;\n #if !WANT_SIMD_EXCEPT\n   float32x4_t scale_thresh;\n #endif\n@@ -37,19 +36,24 @@ static const struct data\n      rel error: 0x1.89dafa3p-24\n      abs error: 0x1.167d55p-23 in [-log10(2)/2, log10(2)/2]\n      maxerr: 1.85943 +0.5 ulp.  */\n-  .poly = { V4 (0x1.26bb16p+1f), V4 (0x1.5350d2p+1f), V4 (0x1.04744ap+1f),\n-\t    V4 (0x1.2d8176p+0f), V4 (0x1.12b41ap-1f) },\n-  .shift = V4 (0x1.8p23f),\n-\n-  /* Stores constants 1/log10(2), log10(2)_high, log10(2)_low, 0.  */\n-  .log10_2_and_inv = { 0x1.a934fp+1, 0x1.344136p-2, -0x1.ec10cp-27, 0 },\n+  .c0 = V4 (0x1.26bb16p+1f),\n+  .c1 = V4 (0x1.5350d2p+1f),\n+  .c2 = 0x1.04744ap+1f,\n+  .c3 = V4 (0x1.2d8176p+0f),\n+  .c4 = 0x1.12b41ap-1f,\n+  .inv_log10_2 = V4 (0x1.a934fp+1),\n+  .log10_2_high = 0x1.344136p-2,\n+  .log10_2_low = 0x1.ec10cp-27,\n+  /* rint (log2 (2^127 / (1 + sqrt (2)))).  */\n+  .special_bound = V4 (126.0f),\n+  .exponent_bias = V4 (0x3f800000),\n+  .special_offset = V4 (0x82000000),\n+  .special_bias = V4 (0x7f000000),\n #if !WANT_SIMD_EXCEPT\n   .scale_thresh = V4 (ScaleBound)\n #endif\n };\n \n-#define ExponentBias v_u32 (0x3f800000)\n-\n #if WANT_SIMD_EXCEPT\n \n # define SpecialBound 38.0f\t       /* rint(log10(2^127)).  */\n@@ -67,17 +71,15 @@ special_case (float32x4_t x, float32x4_t y, uint32x4_t cmp)\n \n #else\n \n-# define SpecialBound 126.0f /* rint (log2 (2^127 / (1 + sqrt (2)))).  */\n-# define SpecialOffset v_u32 (0x82000000)\n-# define SpecialBias v_u32 (0x7f000000)\n+# define SpecialBound 126.0f\n \n static float32x4_t VPCS_ATTR NOINLINE\n special_case (float32x4_t poly, float32x4_t n, uint32x4_t e, uint32x4_t cmp1,\n \t      float32x4_t scale, const struct data *d)\n {\n   /* 2^n may overflow, break it up into s1*s2.  */\n-  uint32x4_t b = vandq_u32 (vclezq_f32 (n), SpecialOffset);\n-  float32x4_t s1 = vreinterpretq_f32_u32 (vaddq_u32 (b, SpecialBias));\n+  uint32x4_t b = vandq_u32 (vclezq_f32 (n), d->special_offset);\n+  float32x4_t s1 = vreinterpretq_f32_u32 (vaddq_u32 (b, d->special_bias));\n   float32x4_t s2 = vreinterpretq_f32_u32 (vsubq_u32 (e, b));\n   uint32x4_t cmp2 = vcagtq_f32 (n, d->scale_thresh);\n   float32x4_t r2 = vmulq_f32 (s1, s1);\n@@ -112,23 +114,23 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (exp10) (float32x4_t x)\n   /* exp10(x) = 2^n * 10^r = 2^n * (1 + poly (r)),\n      with poly(r) in [1/sqrt(2), sqrt(2)] and\n      x = r + n * log10 (2), with r in [-log10(2)/2, log10(2)/2].  */\n-  float32x4_t log10_2_and_inv = vld1q_f32 (d->log10_2_and_inv);\n-  float32x4_t z = vfmaq_laneq_f32 (d->shift, x, log10_2_and_inv, 0);\n-  float32x4_t n = vsubq_f32 (z, d->shift);\n-  float32x4_t r = vfmsq_laneq_f32 (x, n, log10_2_and_inv, 1);\n-  r = vfmsq_laneq_f32 (r, n, log10_2_and_inv, 2);\n-  uint32x4_t e = vshlq_n_u32 (vreinterpretq_u32_f32 (z), 23);\n+  float32x4_t log10_2_c24 = vld1q_f32 (&d->log10_2_high);\n+  float32x4_t n = vrndaq_f32 (vmulq_f32 (x, d->inv_log10_2));\n+  float32x4_t r = vfmsq_laneq_f32 (x, n, log10_2_c24, 0);\n+  r = vfmaq_laneq_f32 (r, n, log10_2_c24, 1);\n+  uint32x4_t e = vshlq_n_u32 (vreinterpretq_u32_s32 (vcvtaq_s32_f32 (n)), 23);\n \n-  float32x4_t scale = vreinterpretq_f32_u32 (vaddq_u32 (e, ExponentBias));\n+  float32x4_t scale = vreinterpretq_f32_u32 (vaddq_u32 (e, d->exponent_bias));\n \n #if !WANT_SIMD_EXCEPT\n-  uint32x4_t cmp = vcagtq_f32 (n, v_f32 (SpecialBound));\n+  uint32x4_t cmp = vcagtq_f32 (n, d->special_bound);\n #endif\n \n   float32x4_t r2 = vmulq_f32 (r, r);\n-  float32x4_t poly\n-      = vfmaq_f32 (vmulq_f32 (r, d->poly[0]),\n-\t\t   v_pairwise_poly_3_f32 (r, r2, d->poly + 1), r2);\n+  float32x4_t p12 = vfmaq_laneq_f32 (d->c1, r, log10_2_c24, 2);\n+  float32x4_t p34 = vfmaq_laneq_f32 (d->c3, r, log10_2_c24, 3);\n+  float32x4_t p14 = vfmaq_f32 (p12, r2, p34);\n+  float32x4_t poly = vfmaq_f32 (vmulq_f32 (r, d->c0), p14, r2);\n \n   if (__glibc_unlikely (v_any_u32 (cmp)))\n #if WANT_SIMD_EXCEPT\ndiff --git a/sysdeps/aarch64/fpu/exp2f_advsimd.c b/sysdeps/aarch64/fpu/exp2f_advsimd.c\nindex 69e0b193a1..a4220da63c 100644\n--- a/sysdeps/aarch64/fpu/exp2f_advsimd.c\n+++ b/sysdeps/aarch64/fpu/exp2f_advsimd.c\n@@ -21,24 +21,28 @@\n \n static const struct data\n {\n-  float32x4_t poly[5];\n-  uint32x4_t exponent_bias;\n+  float32x4_t c1, c3;\n+  uint32x4_t exponent_bias, special_offset, special_bias;\n #if !WANT_SIMD_EXCEPT\n-  float32x4_t special_bound, scale_thresh;\n+  float32x4_t scale_thresh, special_bound;\n #endif\n+  float c0, c2, c4, zero;\n } data = {\n   /* maxerr: 1.962 ulp.  */\n-  .poly = { V4 (0x1.59977ap-10f), V4 (0x1.3ce9e4p-7f), V4 (0x1.c6bd32p-5f),\n-\t    V4 (0x1.ebf9bcp-3f), V4 (0x1.62e422p-1f) },\n+  .c0 = 0x1.59977ap-10f,\n+  .c1 = V4 (0x1.3ce9e4p-7f),\n+  .c2 = 0x1.c6bd32p-5f,\n+  .c3 = V4 (0x1.ebf9bcp-3f),\n+  .c4 = 0x1.62e422p-1f,\n   .exponent_bias = V4 (0x3f800000),\n+  .special_offset = V4 (0x82000000),\n+  .special_bias = V4 (0x7f000000),\n #if !WANT_SIMD_EXCEPT\n   .special_bound = V4 (126.0f),\n   .scale_thresh = V4 (192.0f),\n #endif\n };\n \n-#define C(i) d->poly[i]\n-\n #if WANT_SIMD_EXCEPT\n \n # define TinyBound v_u32 (0x20000000)\t  /* asuint (0x1p-63).  */\n@@ -55,16 +59,13 @@ special_case (float32x4_t x, float32x4_t y, uint32x4_t cmp)\n \n #else\n \n-# define SpecialOffset v_u32 (0x82000000)\n-# define SpecialBias v_u32 (0x7f000000)\n-\n static float32x4_t VPCS_ATTR NOINLINE\n special_case (float32x4_t poly, float32x4_t n, uint32x4_t e, uint32x4_t cmp1,\n \t      float32x4_t scale, const struct data *d)\n {\n   /* 2^n may overflow, break it up into s1*s2.  */\n-  uint32x4_t b = vandq_u32 (vclezq_f32 (n), SpecialOffset);\n-  float32x4_t s1 = vreinterpretq_f32_u32 (vaddq_u32 (b, SpecialBias));\n+  uint32x4_t b = vandq_u32 (vclezq_f32 (n), d->special_offset);\n+  float32x4_t s1 = vreinterpretq_f32_u32 (vaddq_u32 (b, d->special_bias));\n   float32x4_t s2 = vreinterpretq_f32_u32 (vsubq_u32 (e, b));\n   uint32x4_t cmp2 = vcagtq_f32 (n, d->scale_thresh);\n   float32x4_t r2 = vmulq_f32 (s1, s1);\n@@ -80,13 +81,11 @@ special_case (float32x4_t poly, float32x4_t n, uint32x4_t e, uint32x4_t cmp1,\n float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (exp2) (float32x4_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n-  float32x4_t n, r, r2, scale, p, q, poly;\n-  uint32x4_t cmp, e;\n \n #if WANT_SIMD_EXCEPT\n   /* asuint(|x|) - TinyBound >= BigBound - TinyBound.  */\n   uint32x4_t ia = vreinterpretq_u32_f32 (vabsq_f32 (x));\n-  cmp = vcgeq_u32 (vsubq_u32 (ia, TinyBound), SpecialBound);\n+  uint32x4_t cmp = vcgeq_u32 (vsubq_u32 (ia, TinyBound), SpecialBound);\n   float32x4_t xm = x;\n   /* If any lanes are special, mask them with 1 and retain a copy of x to allow\n      special_case to fix special lanes later. This is only necessary if fenv\n@@ -95,23 +94,24 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (exp2) (float32x4_t x)\n     x = vbslq_f32 (cmp, v_f32 (1), x);\n #endif\n \n-    /* exp2(x) = 2^n (1 + poly(r)), with 1 + poly(r) in [1/sqrt(2),sqrt(2)]\n-       x = n + r, with r in [-1/2, 1/2].  */\n-  n = vrndaq_f32 (x);\n-  r = vsubq_f32 (x, n);\n-  e = vshlq_n_u32 (vreinterpretq_u32_s32 (vcvtaq_s32_f32 (x)), 23);\n-  scale = vreinterpretq_f32_u32 (vaddq_u32 (e, d->exponent_bias));\n+  /* exp2(x) = 2^n (1 + poly(r)), with 1 + poly(r) in [1/sqrt(2),sqrt(2)]\n+     x = n + r, with r in [-1/2, 1/2].  */\n+  float32x4_t n = vrndaq_f32 (x);\n+  float32x4_t r = vsubq_f32 (x, n);\n+  uint32x4_t e = vshlq_n_u32 (vreinterpretq_u32_s32 (vcvtaq_s32_f32 (x)), 23);\n+  float32x4_t scale = vreinterpretq_f32_u32 (vaddq_u32 (e, d->exponent_bias));\n \n #if !WANT_SIMD_EXCEPT\n-  cmp = vcagtq_f32 (n, d->special_bound);\n+  uint32x4_t cmp = vcagtq_f32 (n, d->special_bound);\n #endif\n \n-  r2 = vmulq_f32 (r, r);\n-  p = vfmaq_f32 (C (1), C (0), r);\n-  q = vfmaq_f32 (C (3), C (2), r);\n+  float32x4_t c024 = vld1q_f32 (&d->c0);\n+  float32x4_t r2 = vmulq_f32 (r, r);\n+  float32x4_t p = vfmaq_laneq_f32 (d->c1, r, c024, 0);\n+  float32x4_t q = vfmaq_laneq_f32 (d->c3, r, c024, 1);\n   q = vfmaq_f32 (q, p, r2);\n-  p = vmulq_f32 (C (4), r);\n-  poly = vfmaq_f32 (p, q, r2);\n+  p = vmulq_laneq_f32 (r, c024, 2);\n+  float32x4_t poly = vfmaq_f32 (p, q, r2);\n \n   if (__glibc_unlikely (v_any_u32 (cmp)))\n #if WANT_SIMD_EXCEPT\ndiff --git a/sysdeps/aarch64/fpu/expf_advsimd.c b/sysdeps/aarch64/fpu/expf_advsimd.c\nindex 5c9cb72620..70f137e2e5 100644\n--- a/sysdeps/aarch64/fpu/expf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/expf_advsimd.c\n@@ -21,20 +21,25 @@\n \n static const struct data\n {\n-  float32x4_t poly[5];\n-  float32x4_t inv_ln2, ln2_hi, ln2_lo;\n-  uint32x4_t exponent_bias;\n+  float32x4_t c1, c3, c4, inv_ln2;\n+  float ln2_hi, ln2_lo, c0, c2;\n+  uint32x4_t exponent_bias, special_offset, special_bias;\n #if !WANT_SIMD_EXCEPT\n   float32x4_t special_bound, scale_thresh;\n #endif\n } data = {\n   /* maxerr: 1.45358 +0.5 ulp.  */\n-  .poly = { V4 (0x1.0e4020p-7f), V4 (0x1.573e2ep-5f), V4 (0x1.555e66p-3f),\n-\t    V4 (0x1.fffdb6p-2f), V4 (0x1.ffffecp-1f) },\n+  .c0 = 0x1.0e4020p-7f,\n+  .c1 = V4 (0x1.573e2ep-5f),\n+  .c2 = 0x1.555e66p-3f,\n+  .c3 = V4 (0x1.fffdb6p-2f),\n+  .c4 = V4 (0x1.ffffecp-1f),\n   .inv_ln2 = V4 (0x1.715476p+0f),\n-  .ln2_hi = V4 (0x1.62e4p-1f),\n-  .ln2_lo = V4 (0x1.7f7d1cp-20f),\n+  .ln2_hi = 0x1.62e4p-1f,\n+  .ln2_lo = 0x1.7f7d1cp-20f,\n   .exponent_bias = V4 (0x3f800000),\n+  .special_offset = V4 (0x82000000),\n+  .special_bias = V4 (0x7f000000),\n #if !WANT_SIMD_EXCEPT\n   .special_bound = V4 (126.0f),\n   .scale_thresh = V4 (192.0f),\n@@ -59,19 +64,17 @@ special_case (float32x4_t x, float32x4_t y, uint32x4_t cmp)\n \n #else\n \n-# define SpecialOffset v_u32 (0x82000000)\n-# define SpecialBias v_u32 (0x7f000000)\n-\n static float32x4_t VPCS_ATTR NOINLINE\n special_case (float32x4_t poly, float32x4_t n, uint32x4_t e, uint32x4_t cmp1,\n \t      float32x4_t scale, const struct data *d)\n {\n   /* 2^n may overflow, break it up into s1*s2.  */\n-  uint32x4_t b = vandq_u32 (vclezq_f32 (n), SpecialOffset);\n-  float32x4_t s1 = vreinterpretq_f32_u32 (vaddq_u32 (b, SpecialBias));\n+  uint32x4_t b = vandq_u32 (vclezq_f32 (n), d->special_offset);\n+  float32x4_t s1 = vreinterpretq_f32_u32 (vaddq_u32 (b, d->special_bias));\n   float32x4_t s2 = vreinterpretq_f32_u32 (vsubq_u32 (e, b));\n   uint32x4_t cmp2 = vcagtq_f32 (n, d->scale_thresh);\n   float32x4_t r2 = vmulq_f32 (s1, s1);\n+  // (s2 + p*s2)*s1 = s2(p+1)s1\n   float32x4_t r1 = vmulq_f32 (vfmaq_f32 (s2, poly, s2), s1);\n   /* Similar to r1 but avoids double rounding in the subnormal range.  */\n   float32x4_t r0 = vfmaq_f32 (scale, poly, scale);\n@@ -84,12 +87,11 @@ special_case (float32x4_t poly, float32x4_t n, uint32x4_t e, uint32x4_t cmp1,\n float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (exp) (float32x4_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n-  float32x4_t n, r, r2, scale, p, q, poly;\n-  uint32x4_t cmp, e;\n+  float32x4_t ln2_c02 = vld1q_f32 (&d->ln2_hi);\n \n #if WANT_SIMD_EXCEPT\n   /* asuint(x) - TinyBound >= BigBound - TinyBound.  */\n-  cmp = vcgeq_u32 (\n+  uint32x4_t cmp = vcgeq_u32 (\n       vsubq_u32 (vandq_u32 (vreinterpretq_u32_f32 (x), v_u32 (0x7fffffff)),\n \t\t TinyBound),\n       SpecialBound);\n@@ -103,22 +105,22 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (exp) (float32x4_t x)\n \n   /* exp(x) = 2^n (1 + poly(r)), with 1 + poly(r) in [1/sqrt(2),sqrt(2)]\n      x = ln2*n + r, with r in [-ln2/2, ln2/2].  */\n-  n = vrndaq_f32 (vmulq_f32 (x, d->inv_ln2));\n-  r = vfmsq_f32 (x, n, d->ln2_hi);\n-  r = vfmsq_f32 (r, n, d->ln2_lo);\n-  e = vshlq_n_u32 (vreinterpretq_u32_s32 (vcvtq_s32_f32 (n)), 23);\n-  scale = vreinterpretq_f32_u32 (vaddq_u32 (e, d->exponent_bias));\n+  float32x4_t n = vrndaq_f32 (vmulq_f32 (x, d->inv_ln2));\n+  float32x4_t r = vfmsq_laneq_f32 (x, n, ln2_c02, 0);\n+  r = vfmsq_laneq_f32 (r, n, ln2_c02, 1);\n+  uint32x4_t e = vshlq_n_u32 (vreinterpretq_u32_s32 (vcvtq_s32_f32 (n)), 23);\n+  float32x4_t scale = vreinterpretq_f32_u32 (vaddq_u32 (e, d->exponent_bias));\n \n #if !WANT_SIMD_EXCEPT\n-  cmp = vcagtq_f32 (n, d->special_bound);\n+  uint32x4_t cmp = vcagtq_f32 (n, d->special_bound);\n #endif\n \n-  r2 = vmulq_f32 (r, r);\n-  p = vfmaq_f32 (C (1), C (0), r);\n-  q = vfmaq_f32 (C (3), C (2), r);\n+  float32x4_t r2 = vmulq_f32 (r, r);\n+  float32x4_t p = vfmaq_laneq_f32 (d->c1, r, ln2_c02, 2);\n+  float32x4_t q = vfmaq_laneq_f32 (d->c3, r, ln2_c02, 3);\n   q = vfmaq_f32 (q, p, r2);\n-  p = vmulq_f32 (C (4), r);\n-  poly = vfmaq_f32 (p, q, r2);\n+  p = vmulq_f32 (d->c4, r);\n+  float32x4_t poly = vfmaq_f32 (p, q, r2);\n \n   if (__glibc_unlikely (v_any_u32 (cmp)))\n #if WANT_SIMD_EXCEPT\ndiff --git a/sysdeps/aarch64/fpu/v_expf_inline.h b/sysdeps/aarch64/fpu/v_expf_inline.h\nindex 08b06e0a6b..eacd2af241 100644\n--- a/sysdeps/aarch64/fpu/v_expf_inline.h\n+++ b/sysdeps/aarch64/fpu/v_expf_inline.h\n@@ -24,50 +24,45 @@\n \n struct v_expf_data\n {\n-  float32x4_t poly[5];\n-  float32x4_t shift;\n-  float invln2_and_ln2[4];\n+  float ln2_hi, ln2_lo, c0, c2;\n+  float32x4_t inv_ln2, c1, c3, c4;\n+  /* asuint(1.0f).  */\n+  uint32x4_t exponent_bias;\n };\n \n /* maxerr: 1.45358 +0.5 ulp.  */\n #define V_EXPF_DATA                                                           \\\n   {                                                                           \\\n-    .poly = { V4 (0x1.0e4020p-7f), V4 (0x1.573e2ep-5f), V4 (0x1.555e66p-3f),  \\\n-\t      V4 (0x1.fffdb6p-2f), V4 (0x1.ffffecp-1f) },                     \\\n-    .shift = V4 (0x1.8p23f),                                                  \\\n-    .invln2_and_ln2 = { 0x1.715476p+0f, 0x1.62e4p-1f, 0x1.7f7d1cp-20f, 0 },   \\\n+    .c0 = 0x1.0e4020p-7f, .c1 = V4 (0x1.573e2ep-5f), .c2 = 0x1.555e66p-3f,    \\\n+    .c3 = V4 (0x1.fffdb6p-2f), .c4 = V4 (0x1.ffffecp-1f),                     \\\n+    .ln2_hi = 0x1.62e4p-1f, .ln2_lo = 0x1.7f7d1cp-20f,                        \\\n+    .inv_ln2 = V4 (0x1.715476p+0f), .exponent_bias = V4 (0x3f800000),         \\\n   }\n \n-#define ExponentBias v_u32 (0x3f800000) /* asuint(1.0f).  */\n-#define C(i) d->poly[i]\n-\n static inline float32x4_t\n v_expf_inline (float32x4_t x, const struct v_expf_data *d)\n {\n-  /* Helper routine for calculating exp(x).\n+  /* Helper routine for calculating exp(ax).\n      Copied from v_expf.c, with all special-case handling removed - the\n      calling routine should handle special values if required.  */\n \n-  /* exp(x) = 2^n (1 + poly(r)), with 1 + poly(r) in [1/sqrt(2),sqrt(2)]\n-     x = ln2*n + r, with r in [-ln2/2, ln2/2].  */\n-  float32x4_t n, r, z;\n-  float32x4_t invln2_and_ln2 = vld1q_f32 (d->invln2_and_ln2);\n-  z = vfmaq_laneq_f32 (d->shift, x, invln2_and_ln2, 0);\n-  n = vsubq_f32 (z, d->shift);\n-  r = vfmsq_laneq_f32 (x, n, invln2_and_ln2, 1);\n-  r = vfmsq_laneq_f32 (r, n, invln2_and_ln2, 2);\n-  uint32x4_t e = vshlq_n_u32 (vreinterpretq_u32_f32 (z), 23);\n-  float32x4_t scale = vreinterpretq_f32_u32 (vaddq_u32 (e, ExponentBias));\n+  /* exp(ax) = 2^n (1 + poly(r)), with 1 + poly(r) in [1/sqrt(2),sqrt(2)]\n+     ax = ln2*n + r, with r in [-ln2/2, ln2/2].  */\n+  float32x4_t ax = vabsq_f32 (x);\n+  float32x4_t ln2_c02 = vld1q_f32 (&d->ln2_hi);\n+  float32x4_t n = vrndaq_f32 (vmulq_f32 (ax, d->inv_ln2));\n+  float32x4_t r = vfmsq_laneq_f32 (ax, n, ln2_c02, 0);\n+  r = vfmsq_laneq_f32 (r, n, ln2_c02, 1);\n+  uint32x4_t e = vshlq_n_u32 (vreinterpretq_u32_s32 (vcvtq_s32_f32 (n)), 23);\n+  float32x4_t scale = vreinterpretq_f32_u32 (vaddq_u32 (e, d->exponent_bias));\n \n   /* Custom order-4 Estrin avoids building high order monomial.  */\n   float32x4_t r2 = vmulq_f32 (r, r);\n-  float32x4_t p, q, poly;\n-  p = vfmaq_f32 (C (1), C (0), r);\n-  q = vfmaq_f32 (C (3), C (2), r);\n+  float32x4_t p = vfmaq_laneq_f32 (d->c1, r, ln2_c02, 2);\n+  float32x4_t q = vfmaq_laneq_f32 (d->c3, r, ln2_c02, 3);\n   q = vfmaq_f32 (q, p, r2);\n-  p = vmulq_f32 (C (4), r);\n-  poly = vfmaq_f32 (p, q, r2);\n+  p = vmulq_f32 (d->c4, r);\n+  float32x4_t poly = vfmaq_f32 (p, q, r2);\n   return vfmaq_f32 (scale, poly, scale);\n }\n-\n #endif\n\ncommit abfd20ebbd2883f2c6e5f16709f7b9781c3c8068\nAuthor: Luna Lamb <luna.lamb@arm.com>\nDate:   Fri Jan 3 19:00:12 2025 +0000\n\n    AArch64: Improve codegen in AdvSIMD asinh\n    \n    Improves memory access and removes spills.\n    Load the polynomial evaluation coefficients into 2 vectors and use lanewise\n    MLAs.  Reduces MOVs 6->3 , LDR 11->5, STR/STP 2->0, ADRP 3->2.\n    \n    (cherry picked from commit 140b985e5a2071000122b3cb63ebfe88cf21dd29)\n\ndiff --git a/sysdeps/aarch64/fpu/asinh_advsimd.c b/sysdeps/aarch64/fpu/asinh_advsimd.c\nindex 6207e7da95..2739f98b39 100644\n--- a/sysdeps/aarch64/fpu/asinh_advsimd.c\n+++ b/sysdeps/aarch64/fpu/asinh_advsimd.c\n@@ -20,41 +20,71 @@\n #include \"v_math.h\"\n #include \"poly_advsimd_f64.h\"\n \n-#define A(i) v_f64 (__v_log_data.poly[i])\n-#define N (1 << V_LOG_TABLE_BITS)\n-#define IndexMask (N - 1)\n-\n const static struct data\n {\n-  float64x2_t poly[18];\n-  uint64x2_t off, huge_bound, abs_mask;\n-  float64x2_t ln2, tiny_bound;\n+  uint64x2_t huge_bound, abs_mask, off, mask;\n+#if WANT_SIMD_EXCEPT\n+  float64x2_t tiny_bound;\n+#endif\n+  float64x2_t lc0, lc2;\n+  double lc1, lc3, ln2, lc4;\n+\n+  float64x2_t c0, c2, c4, c6, c8, c10, c12, c14, c16, c17;\n+  double c1, c3, c5, c7, c9, c11, c13, c15;\n+\n } data = {\n-  .off = V2 (0x3fe6900900000000),\n-  .ln2 = V2 (0x1.62e42fefa39efp-1),\n-  .huge_bound = V2 (0x5fe0000000000000),\n+\n+#if WANT_SIMD_EXCEPT\n   .tiny_bound = V2 (0x1p-26),\n-  .abs_mask = V2 (0x7fffffffffffffff),\n+#endif\n   /* Even terms of polynomial s.t. asinh(x) is approximated by\n      asinh(x) ~= x + x^3 * (C0 + C1 * x + C2 * x^2 + C3 * x^3 + ...).\n      Generated using Remez, f = (asinh(sqrt(x)) - sqrt(x))/x^(3/2).  */\n-  .poly = { V2 (-0x1.55555555554a7p-3), V2 (0x1.3333333326c7p-4),\n-\t    V2 (-0x1.6db6db68332e6p-5), V2 (0x1.f1c71b26fb40dp-6),\n-\t    V2 (-0x1.6e8b8b654a621p-6), V2 (0x1.1c4daa9e67871p-6),\n-\t    V2 (-0x1.c9871d10885afp-7), V2 (0x1.7a16e8d9d2ecfp-7),\n-\t    V2 (-0x1.3ddca533e9f54p-7), V2 (0x1.0becef748dafcp-7),\n-\t    V2 (-0x1.b90c7099dd397p-8), V2 (0x1.541f2bb1ffe51p-8),\n-\t    V2 (-0x1.d217026a669ecp-9), V2 (0x1.0b5c7977aaf7p-9),\n-\t    V2 (-0x1.e0f37daef9127p-11), V2 (0x1.388b5fe542a6p-12),\n-\t    V2 (-0x1.021a48685e287p-14), V2 (0x1.93d4ba83d34dap-18) },\n+\n+  .c0 = V2 (-0x1.55555555554a7p-3),\n+  .c1 = 0x1.3333333326c7p-4,\n+  .c2 = V2 (-0x1.6db6db68332e6p-5),\n+  .c3 = 0x1.f1c71b26fb40dp-6,\n+  .c4 = V2 (-0x1.6e8b8b654a621p-6),\n+  .c5 = 0x1.1c4daa9e67871p-6,\n+  .c6 = V2 (-0x1.c9871d10885afp-7),\n+  .c7 = 0x1.7a16e8d9d2ecfp-7,\n+  .c8 = V2 (-0x1.3ddca533e9f54p-7),\n+  .c9 = 0x1.0becef748dafcp-7,\n+  .c10 = V2 (-0x1.b90c7099dd397p-8),\n+  .c11 = 0x1.541f2bb1ffe51p-8,\n+  .c12 = V2 (-0x1.d217026a669ecp-9),\n+  .c13 = 0x1.0b5c7977aaf7p-9,\n+  .c14 = V2 (-0x1.e0f37daef9127p-11),\n+  .c15 = 0x1.388b5fe542a6p-12,\n+  .c16 = V2 (-0x1.021a48685e287p-14),\n+  .c17 = V2 (0x1.93d4ba83d34dap-18),\n+\n+  .lc0 = V2 (-0x1.ffffffffffff7p-2),\n+  .lc1 = 0x1.55555555170d4p-2,\n+  .lc2 = V2 (-0x1.0000000399c27p-2),\n+  .lc3 = 0x1.999b2e90e94cap-3,\n+  .lc4 = -0x1.554e550bd501ep-3,\n+  .ln2 = 0x1.62e42fefa39efp-1,\n+\n+  .off = V2 (0x3fe6900900000000),\n+  .huge_bound = V2 (0x5fe0000000000000),\n+  .abs_mask = V2 (0x7fffffffffffffff),\n+  .mask = V2 (0xfffULL << 52),\n };\n \n static float64x2_t NOINLINE VPCS_ATTR\n-special_case (float64x2_t x, float64x2_t y, uint64x2_t special)\n+special_case (float64x2_t x, float64x2_t y, uint64x2_t abs_mask,\n+\t      uint64x2_t special)\n {\n+  /* Copy sign.  */\n+  y = vbslq_f64 (abs_mask, y, x);\n   return v_call_f64 (asinh, x, y, special);\n }\n \n+#define N (1 << V_LOG_TABLE_BITS)\n+#define IndexMask (N - 1)\n+\n struct entry\n {\n   float64x2_t invc;\n@@ -76,27 +106,34 @@ lookup (uint64x2_t i)\n }\n \n static inline float64x2_t\n-log_inline (float64x2_t x, const struct data *d)\n+log_inline (float64x2_t xm, const struct data *d)\n {\n-  /* Double-precision vector log, copied from ordinary vector log with some\n-     cosmetic modification and special-cases removed.  */\n-  uint64x2_t ix = vreinterpretq_u64_f64 (x);\n-  uint64x2_t tmp = vsubq_u64 (ix, d->off);\n-  int64x2_t k = vshrq_n_s64 (vreinterpretq_s64_u64 (tmp), 52);\n-  uint64x2_t iz\n-      = vsubq_u64 (ix, vandq_u64 (tmp, vdupq_n_u64 (0xfffULL << 52)));\n+\n+  uint64x2_t u = vreinterpretq_u64_f64 (xm);\n+  uint64x2_t u_off = vsubq_u64 (u, d->off);\n+\n+  int64x2_t k = vshrq_n_s64 (vreinterpretq_s64_u64 (u_off), 52);\n+  uint64x2_t iz = vsubq_u64 (u, vandq_u64 (u_off, d->mask));\n   float64x2_t z = vreinterpretq_f64_u64 (iz);\n-  struct entry e = lookup (tmp);\n+\n+  struct entry e = lookup (u_off);\n+\n+  /* log(x) = log1p(z/c-1) + log(c) + k*Ln2.  */\n   float64x2_t r = vfmaq_f64 (v_f64 (-1.0), z, e.invc);\n   float64x2_t kd = vcvtq_f64_s64 (k);\n-  float64x2_t hi = vfmaq_f64 (vaddq_f64 (e.logc, r), kd, d->ln2);\n+\n+  /* hi = r + log(c) + k*Ln2.  */\n+  float64x2_t ln2_and_lc4 = vld1q_f64 (&d->ln2);\n+  float64x2_t hi = vfmaq_laneq_f64 (vaddq_f64 (e.logc, r), kd, ln2_and_lc4, 0);\n+\n+  /* y = r2*(A0 + r*A1 + r2*(A2 + r*A3 + r2*A4)) + hi.  */\n+  float64x2_t odd_coeffs = vld1q_f64 (&d->lc1);\n   float64x2_t r2 = vmulq_f64 (r, r);\n-  float64x2_t y = vfmaq_f64 (A (2), A (3), r);\n-  float64x2_t p = vfmaq_f64 (A (0), A (1), r);\n-  y = vfmaq_f64 (y, A (4), r2);\n-  y = vfmaq_f64 (p, y, r2);\n-  y = vfmaq_f64 (hi, y, r2);\n-  return y;\n+  float64x2_t y = vfmaq_laneq_f64 (d->lc2, r, odd_coeffs, 1);\n+  float64x2_t p = vfmaq_laneq_f64 (d->lc0, r, odd_coeffs, 0);\n+  y = vfmaq_laneq_f64 (y, r2, ln2_and_lc4, 1);\n+  y = vfmaq_f64 (p, r2, y);\n+  return vfmaq_f64 (hi, y, r2);\n }\n \n /* Double-precision implementation of vector asinh(x).\n@@ -106,23 +143,24 @@ log_inline (float64x2_t x, const struct data *d)\n    asinh(x) = sign(x) * log(|x| + sqrt(x^2 + 1)      if |x| >= 1\n \t    = sign(x) * (|x| + |x|^3 * P(x^2))       otherwise\n    where log(x) is an optimized log approximation, and P(x) is a polynomial\n-   shared with the scalar routine. The greatest observed error 3.29 ULP, in\n+   shared with the scalar routine. The greatest observed error 2.79 ULP, in\n    |x| >= 1:\n-   __v_asinh(0x1.2cd9d717e2c9bp+0) got 0x1.ffffcfd0e234fp-1\n-\t\t\t\t  want 0x1.ffffcfd0e2352p-1.  */\n+   _ZGVnN2v_asinh(0x1.2cd9d73ea76a6p+0) got 0x1.ffffd003219dap-1\n+\t\t\t\t       want  0x1.ffffd003219ddp-1.  */\n VPCS_ATTR float64x2_t V_NAME_D1 (asinh) (float64x2_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n-\n   float64x2_t ax = vabsq_f64 (x);\n-  uint64x2_t iax = vreinterpretq_u64_f64 (ax);\n \n   uint64x2_t gt1 = vcgeq_f64 (ax, v_f64 (1));\n-  uint64x2_t special = vcgeq_u64 (iax, d->huge_bound);\n \n #if WANT_SIMD_EXCEPT\n+  uint64x2_t iax = vreinterpretq_u64_f64 (ax);\n+  uint64x2_t special = vcgeq_u64 (iax, (d->huge_bound));\n   uint64x2_t tiny = vcltq_f64 (ax, d->tiny_bound);\n   special = vorrq_u64 (special, tiny);\n+#else\n+  uint64x2_t special = vcgeq_f64 (ax, vreinterpretq_f64_u64 (d->huge_bound));\n #endif\n \n   /* Option 1: |x| >= 1.\n@@ -147,19 +185,45 @@ VPCS_ATTR float64x2_t V_NAME_D1 (asinh) (float64x2_t x)\n      overflow, and tiny lanes, which will underflow, by setting them to 0. They\n      will be fixed later, either by selecting x or falling back to the scalar\n      special-case. The largest observed error in this region is 1.47 ULPs:\n-     __v_asinh(0x1.fdfcd00cc1e6ap-1) got 0x1.c1d6bf874019bp-1\n-\t\t\t\t    want 0x1.c1d6bf874019cp-1.  */\n+     _ZGVnN2v_asinh(0x1.fdfcd00cc1e6ap-1) got 0x1.c1d6bf874019bp-1\n+\t\t\t\t\t want 0x1.c1d6bf874019cp-1.  */\n   float64x2_t option_2 = v_f64 (0);\n+\n   if (__glibc_likely (v_any_u64 (vceqzq_u64 (gt1))))\n     {\n+\n #if WANT_SIMD_EXCEPT\n       ax = v_zerofy_f64 (ax, vorrq_u64 (tiny, gt1));\n #endif\n-      float64x2_t x2 = vmulq_f64 (ax, ax), x3 = vmulq_f64 (ax, x2),\n-\t\t  z2 = vmulq_f64 (x2, x2), z4 = vmulq_f64 (z2, z2),\n-\t\t  z8 = vmulq_f64 (z4, z4), z16 = vmulq_f64 (z8, z8);\n-      float64x2_t p = v_estrin_17_f64 (x2, z2, z4, z8, z16, d->poly);\n-      option_2 = vfmaq_f64 (ax, p, x3);\n+      float64x2_t x2 = vmulq_f64 (ax, ax), z2 = vmulq_f64 (x2, x2);\n+      /* Order-17 Pairwise Horner scheme.  */\n+      float64x2_t c13 = vld1q_f64 (&d->c1);\n+      float64x2_t c57 = vld1q_f64 (&d->c5);\n+      float64x2_t c911 = vld1q_f64 (&d->c9);\n+      float64x2_t c1315 = vld1q_f64 (&d->c13);\n+\n+      float64x2_t p01 = vfmaq_laneq_f64 (d->c0, x2, c13, 0);\n+      float64x2_t p23 = vfmaq_laneq_f64 (d->c2, x2, c13, 1);\n+      float64x2_t p45 = vfmaq_laneq_f64 (d->c4, x2, c57, 0);\n+      float64x2_t p67 = vfmaq_laneq_f64 (d->c6, x2, c57, 1);\n+      float64x2_t p89 = vfmaq_laneq_f64 (d->c8, x2, c911, 0);\n+      float64x2_t p1011 = vfmaq_laneq_f64 (d->c10, x2, c911, 1);\n+      float64x2_t p1213 = vfmaq_laneq_f64 (d->c12, x2, c1315, 0);\n+      float64x2_t p1415 = vfmaq_laneq_f64 (d->c14, x2, c1315, 1);\n+      float64x2_t p1617 = vfmaq_f64 (d->c16, x2, d->c17);\n+\n+      float64x2_t p = vfmaq_f64 (p1415, z2, p1617);\n+      p = vfmaq_f64 (p1213, z2, p);\n+      p = vfmaq_f64 (p1011, z2, p);\n+      p = vfmaq_f64 (p89, z2, p);\n+\n+      p = vfmaq_f64 (p67, z2, p);\n+      p = vfmaq_f64 (p45, z2, p);\n+\n+      p = vfmaq_f64 (p23, z2, p);\n+\n+      p = vfmaq_f64 (p01, z2, p);\n+      option_2 = vfmaq_f64 (ax, p, vmulq_f64 (ax, x2));\n #if WANT_SIMD_EXCEPT\n       option_2 = vbslq_f64 (tiny, x, option_2);\n #endif\n@@ -167,10 +231,10 @@ VPCS_ATTR float64x2_t V_NAME_D1 (asinh) (float64x2_t x)\n \n   /* Choose the right option for each lane.  */\n   float64x2_t y = vbslq_f64 (gt1, option_1, option_2);\n-  /* Copy sign.  */\n-  y = vbslq_f64 (d->abs_mask, y, x);\n-\n   if (__glibc_unlikely (v_any_u64 (special)))\n-    return special_case (x, y, special);\n-  return y;\n+    {\n+      return special_case (x, y, d->abs_mask, special);\n+    }\n+  /* Copy sign.  */\n+  return vbslq_f64 (d->abs_mask, y, x);\n }\n\ncommit 5f45c0f91eae99b7d49f5c63b900441eb3491213\nAuthor: Luna Lamb <luna.lamb@arm.com>\nDate:   Fri Jan 3 19:02:52 2025 +0000\n\n    AArch64: Improve codegen in SVE tans\n    \n    Improves memory access.\n    Tan: MOVPRFX 7 -> 2, LD1RD 12 -> 5, move MOV away from return.\n    Tanf: MOV 2 -> 1, MOVPRFX 6 -> 3, LD1RW 5 -> 4, move mov away from return.\n    \n    (cherry picked from commit aa6609feb20ebf8653db639dabe2a6afc77b02cc)\n\ndiff --git a/sysdeps/aarch64/fpu/tan_sve.c b/sysdeps/aarch64/fpu/tan_sve.c\nindex b2e4447316..a7318fd417 100644\n--- a/sysdeps/aarch64/fpu/tan_sve.c\n+++ b/sysdeps/aarch64/fpu/tan_sve.c\n@@ -22,24 +22,38 @@\n \n static const struct data\n {\n-  double poly[9];\n-  double half_pi_hi, half_pi_lo, inv_half_pi, range_val, shift;\n+  double c2, c4, c6, c8;\n+  double poly_1357[4];\n+  double c0, inv_half_pi;\n+  double half_pi_hi, half_pi_lo, range_val;\n } data = {\n   /* Polynomial generated with FPMinimax.  */\n-  .poly = { 0x1.5555555555556p-2, 0x1.1111111110a63p-3, 0x1.ba1ba1bb46414p-5,\n-\t    0x1.664f47e5b5445p-6, 0x1.226e5e5ecdfa3p-7, 0x1.d6c7ddbf87047p-9,\n-\t    0x1.7ea75d05b583ep-10, 0x1.289f22964a03cp-11,\n-\t    0x1.4e4fd14147622p-12, },\n+  .c2 = 0x1.ba1ba1bb46414p-5,\n+  .c4 = 0x1.226e5e5ecdfa3p-7,\n+  .c6 = 0x1.7ea75d05b583ep-10,\n+  .c8 = 0x1.4e4fd14147622p-12,\n+  .poly_1357 = { 0x1.1111111110a63p-3, 0x1.664f47e5b5445p-6,\n+\t\t 0x1.d6c7ddbf87047p-9, 0x1.289f22964a03cp-11 },\n+  .c0 = 0x1.5555555555556p-2,\n+  .inv_half_pi = 0x1.45f306dc9c883p-1,\n   .half_pi_hi = 0x1.921fb54442d18p0,\n   .half_pi_lo = 0x1.1a62633145c07p-54,\n-  .inv_half_pi = 0x1.45f306dc9c883p-1,\n   .range_val = 0x1p23,\n-  .shift = 0x1.8p52,\n };\n \n static svfloat64_t NOINLINE\n-special_case (svfloat64_t x, svfloat64_t y, svbool_t special)\n+special_case (svfloat64_t x, svfloat64_t p, svfloat64_t q, svbool_t pg,\n+\t      svbool_t special)\n {\n+  svbool_t use_recip = svcmpeq (\n+      pg, svand_x (pg, svreinterpret_u64 (svcvt_s64_x (pg, q)), 1), 0);\n+\n+  svfloat64_t n = svmad_x (pg, p, p, -1);\n+  svfloat64_t d = svmul_x (svptrue_b64 (), p, 2);\n+  svfloat64_t swap = n;\n+  n = svneg_m (n, use_recip, d);\n+  d = svsel (use_recip, swap, d);\n+  svfloat64_t y = svdiv_x (svnot_z (pg, special), n, d);\n   return sv_call_f64 (tan, x, y, special);\n }\n \n@@ -50,15 +64,10 @@ special_case (svfloat64_t x, svfloat64_t y, svbool_t special)\n svfloat64_t SV_NAME_D1 (tan) (svfloat64_t x, svbool_t pg)\n {\n   const struct data *dat = ptr_barrier (&data);\n-\n-  /* Invert condition to catch NaNs and Infs as well as large values.  */\n-  svbool_t special = svnot_z (pg, svaclt (pg, x, dat->range_val));\n-\n+  svfloat64_t half_pi_c0 = svld1rq (svptrue_b64 (), &dat->c0);\n   /* q = nearest integer to 2 * x / pi.  */\n-  svfloat64_t shift = sv_f64 (dat->shift);\n-  svfloat64_t q = svmla_x (pg, shift, x, dat->inv_half_pi);\n-  q = svsub_x (pg, q, shift);\n-  svint64_t qi = svcvt_s64_x (pg, q);\n+  svfloat64_t q = svmul_lane (x, half_pi_c0, 1);\n+  q = svrinta_x (pg, q);\n \n   /* Use q to reduce x to r in [-pi/4, pi/4], by:\n      r = x - q * pi/2, in extended precision.  */\n@@ -68,7 +77,7 @@ svfloat64_t SV_NAME_D1 (tan) (svfloat64_t x, svbool_t pg)\n   r = svmls_lane (r, q, half_pi, 1);\n   /* Further reduce r to [-pi/8, pi/8], to be reconstructed using double angle\n      formula.  */\n-  r = svmul_x (pg, r, 0.5);\n+  r = svmul_x (svptrue_b64 (), r, 0.5);\n \n   /* Approximate tan(r) using order 8 polynomial.\n      tan(x) is odd, so polynomial has the form:\n@@ -76,29 +85,51 @@ svfloat64_t SV_NAME_D1 (tan) (svfloat64_t x, svbool_t pg)\n      Hence we first approximate P(r) = C1 + C2 * r^2 + C3 * r^4 + ...\n      Then compute the approximation by:\n      tan(r) ~= r + r^3 * (C0 + r^2 * P(r)).  */\n-  svfloat64_t r2 = svmul_x (pg, r, r);\n-  svfloat64_t r4 = svmul_x (pg, r2, r2);\n-  svfloat64_t r8 = svmul_x (pg, r4, r4);\n+\n+  svfloat64_t r2 = svmul_x (svptrue_b64 (), r, r);\n+  svfloat64_t r4 = svmul_x (svptrue_b64 (), r2, r2);\n+  svfloat64_t r8 = svmul_x (svptrue_b64 (), r4, r4);\n   /* Use offset version coeff array by 1 to evaluate from C1 onwards.  */\n-  svfloat64_t p = sv_estrin_7_f64_x (pg, r2, r4, r8, dat->poly + 1);\n-  p = svmad_x (pg, p, r2, dat->poly[0]);\n-  p = svmla_x (pg, r, r2, svmul_x (pg, p, r));\n+  svfloat64_t C_24 = svld1rq (svptrue_b64 (), &dat->c2);\n+  svfloat64_t C_68 = svld1rq (svptrue_b64 (), &dat->c6);\n+\n+  /* Use offset version coeff array by 1 to evaluate from C1 onwards.  */\n+  svfloat64_t p01 = svmla_lane (sv_f64 (dat->poly_1357[0]), r2, C_24, 0);\n+  svfloat64_t p23 = svmla_lane_f64 (sv_f64 (dat->poly_1357[1]), r2, C_24, 1);\n+  svfloat64_t p03 = svmla_x (pg, p01, p23, r4);\n+\n+  svfloat64_t p45 = svmla_lane (sv_f64 (dat->poly_1357[2]), r2, C_68, 0);\n+  svfloat64_t p67 = svmla_lane (sv_f64 (dat->poly_1357[3]), r2, C_68, 1);\n+  svfloat64_t p47 = svmla_x (pg, p45, p67, r4);\n+\n+  svfloat64_t p = svmla_x (pg, p03, p47, r8);\n+\n+  svfloat64_t z = svmul_x (svptrue_b64 (), p, r);\n+  z = svmul_x (svptrue_b64 (), r2, z);\n+  z = svmla_lane (z, r, half_pi_c0, 0);\n+  p = svmla_x (pg, r, r2, z);\n \n   /* Recombination uses double-angle formula:\n      tan(2x) = 2 * tan(x) / (1 - (tan(x))^2)\n      and reciprocity around pi/2:\n      tan(x) = 1 / (tan(pi/2 - x))\n      to assemble result using change-of-sign and conditional selection of\n-     numerator/denominator dependent on odd/even-ness of q (hence quadrant).  */\n-  svbool_t use_recip\n-      = svcmpeq (pg, svand_x (pg, svreinterpret_u64 (qi), 1), 0);\n+     numerator/denominator dependent on odd/even-ness of q (quadrant).  */\n+\n+  /* Invert condition to catch NaNs and Infs as well as large values.  */\n+  svbool_t special = svnot_z (pg, svaclt (pg, x, dat->range_val));\n+\n+  if (__glibc_unlikely (svptest_any (pg, special)))\n+    {\n+      return special_case (x, p, q, pg, special);\n+    }\n+  svbool_t use_recip = svcmpeq (\n+      pg, svand_x (pg, svreinterpret_u64 (svcvt_s64_x (pg, q)), 1), 0);\n \n   svfloat64_t n = svmad_x (pg, p, p, -1);\n-  svfloat64_t d = svmul_x (pg, p, 2);\n+  svfloat64_t d = svmul_x (svptrue_b64 (), p, 2);\n   svfloat64_t swap = n;\n   n = svneg_m (n, use_recip, d);\n   d = svsel (use_recip, swap, d);\n-  if (__glibc_unlikely (svptest_any (pg, special)))\n-    return special_case (x, svdiv_x (svnot_z (pg, special), n, d), special);\n   return svdiv_x (pg, n, d);\n }\ndiff --git a/sysdeps/aarch64/fpu/tanf_sve.c b/sysdeps/aarch64/fpu/tanf_sve.c\nindex f342583241..e850fb4882 100644\n--- a/sysdeps/aarch64/fpu/tanf_sve.c\n+++ b/sysdeps/aarch64/fpu/tanf_sve.c\n@@ -60,21 +60,16 @@ svfloat32_t SV_NAME_F1 (tan) (svfloat32_t x, const svbool_t pg)\n {\n   const struct data *d = ptr_barrier (&data);\n \n-  /* Determine whether input is too large to perform fast regression.  */\n-  svbool_t cmp = svacge (pg, x, d->range_val);\n-\n   svfloat32_t odd_coeffs = svld1rq (svptrue_b32 (), &d->c1);\n   svfloat32_t pi_vals = svld1rq (svptrue_b32 (), &d->pio2_1);\n \n   /* n = rint(x/(pi/2)).  */\n-  svfloat32_t q = svmla_lane (sv_f32 (d->shift), x, pi_vals, 3);\n-  svfloat32_t n = svsub_x (pg, q, d->shift);\n+  svfloat32_t n = svrintn_x (pg, svmul_lane (x, pi_vals, 3));\n   /* n is already a signed integer, simply convert it.  */\n   svint32_t in = svcvt_s32_x (pg, n);\n   /* Determine if x lives in an interval, where |tan(x)| grows to infinity.  */\n   svint32_t alt = svand_x (pg, in, 1);\n   svbool_t pred_alt = svcmpne (pg, alt, 0);\n-\n   /* r = x - n * (pi/2)  (range reduction into 0 .. pi/4).  */\n   svfloat32_t r;\n   r = svmls_lane (x, n, pi_vals, 0);\n@@ -93,7 +88,7 @@ svfloat32_t SV_NAME_F1 (tan) (svfloat32_t x, const svbool_t pg)\n \n   /* Evaluate polynomial approximation of tangent on [-pi/4, pi/4],\n      using Estrin on z^2.  */\n-  svfloat32_t z2 = svmul_x (pg, z, z);\n+  svfloat32_t z2 = svmul_x (svptrue_b32 (), r, r);\n   svfloat32_t p01 = svmla_lane (sv_f32 (d->c0), z2, odd_coeffs, 0);\n   svfloat32_t p23 = svmla_lane (sv_f32 (d->c2), z2, odd_coeffs, 1);\n   svfloat32_t p45 = svmla_lane (sv_f32 (d->c4), z2, odd_coeffs, 2);\n@@ -106,13 +101,14 @@ svfloat32_t SV_NAME_F1 (tan) (svfloat32_t x, const svbool_t pg)\n \n   svfloat32_t y = svmla_x (pg, z, p, svmul_x (pg, z, z2));\n \n-  /* Transform result back, if necessary.  */\n-  svfloat32_t inv_y = svdivr_x (pg, y, 1.0f);\n-\n   /* No need to pass pg to specialcase here since cmp is a strict subset,\n      guaranteed by the cmpge above.  */\n+\n+  /* Determine whether input is too large to perform fast regression.  */\n+  svbool_t cmp = svacge (pg, x, d->range_val);\n   if (__glibc_unlikely (svptest_any (pg, cmp)))\n-    return special_case (x, svsel (pred_alt, inv_y, y), cmp);\n+    return special_case (x, svdivr_x (pg, y, 1.0f), cmp);\n \n+  svfloat32_t inv_y = svdivr_x (pg, y, 1.0f);\n   return svsel (pred_alt, inv_y, y);\n }\n\ncommit ab5ba6c188159bb5e12be95cd90458924c2fe592\nAuthor: Yat Long Poon <yatlong.poon@arm.com>\nDate:   Fri Jan 3 19:07:30 2025 +0000\n\n    AArch64: Improve codegen for SVE logs\n    \n    Reduce memory access by using lanewise MLA and moving constants to struct\n    and reduce number of MOVPRFXs.\n    Update maximum ULP error for double log_sve from 1 to 2.\n    Speedup on Neoverse V1 for log (3%), log2 (5%), and log10 (4%).\n    \n    (cherry picked from commit 32d193a372feb28f9da247bb7283d404b84429c6)\n\ndiff --git a/sysdeps/aarch64/fpu/log10_sve.c b/sysdeps/aarch64/fpu/log10_sve.c\nindex ab7362128d..f1cad2759a 100644\n--- a/sysdeps/aarch64/fpu/log10_sve.c\n+++ b/sysdeps/aarch64/fpu/log10_sve.c\n@@ -23,28 +23,49 @@\n #define Min 0x0010000000000000\n #define Max 0x7ff0000000000000\n #define Thres 0x7fe0000000000000 /* Max - Min.  */\n-#define Off 0x3fe6900900000000\n #define N (1 << V_LOG10_TABLE_BITS)\n \n+static const struct data\n+{\n+  double c0, c2;\n+  double c1, c3;\n+  double invln10, log10_2;\n+  double c4;\n+  uint64_t off;\n+} data = {\n+  .c0 = -0x1.bcb7b1526e506p-3,\n+  .c1 = 0x1.287a7636be1d1p-3,\n+  .c2 = -0x1.bcb7b158af938p-4,\n+  .c3 = 0x1.63c78734e6d07p-4,\n+  .c4 = -0x1.287461742fee4p-4,\n+  .invln10 = 0x1.bcb7b1526e50ep-2,\n+  .log10_2 = 0x1.34413509f79ffp-2,\n+  .off = 0x3fe6900900000000,\n+};\n+\n static svfloat64_t NOINLINE\n-special_case (svfloat64_t x, svfloat64_t y, svbool_t special)\n+special_case (svfloat64_t hi, svuint64_t tmp, svfloat64_t y, svfloat64_t r2,\n+\t      svbool_t special, const struct data *d)\n {\n-  return sv_call_f64 (log10, x, y, special);\n+  svfloat64_t x = svreinterpret_f64 (svadd_x (svptrue_b64 (), tmp, d->off));\n+  return sv_call_f64 (log10, x, svmla_x (svptrue_b64 (), hi, r2, y), special);\n }\n \n-/* SVE log10 algorithm.\n+/* Double-precision SVE log10 routine.\n    Maximum measured error is 2.46 ulps.\n    SV_NAME_D1 (log10)(0x1.131956cd4b627p+0) got 0x1.fffbdf6eaa669p-6\n \t\t\t\t\t   want 0x1.fffbdf6eaa667p-6.  */\n svfloat64_t SV_NAME_D1 (log10) (svfloat64_t x, const svbool_t pg)\n {\n+  const struct data *d = ptr_barrier (&data);\n+\n   svuint64_t ix = svreinterpret_u64 (x);\n   svbool_t special = svcmpge (pg, svsub_x (pg, ix, Min), Thres);\n \n   /* x = 2^k z; where z is in range [Off,2*Off) and exact.\n      The range is split into N subintervals.\n      The ith subinterval contains z and c is near its center.  */\n-  svuint64_t tmp = svsub_x (pg, ix, Off);\n+  svuint64_t tmp = svsub_x (pg, ix, d->off);\n   svuint64_t i = svlsr_x (pg, tmp, 51 - V_LOG10_TABLE_BITS);\n   i = svand_x (pg, i, (N - 1) << 1);\n   svfloat64_t k = svcvt_f64_x (pg, svasr_x (pg, svreinterpret_s64 (tmp), 52));\n@@ -62,15 +83,19 @@ svfloat64_t SV_NAME_D1 (log10) (svfloat64_t x, const svbool_t pg)\n   svfloat64_t r = svmad_x (pg, invc, z, -1.0);\n \n   /* hi = log(c) + k*log(2).  */\n-  svfloat64_t w = svmla_x (pg, logc, r, __v_log10_data.invln10);\n-  svfloat64_t hi = svmla_x (pg, w, k, __v_log10_data.log10_2);\n+  svfloat64_t invln10_log10_2 = svld1rq_f64 (svptrue_b64 (), &d->invln10);\n+  svfloat64_t w = svmla_lane_f64 (logc, r, invln10_log10_2, 0);\n+  svfloat64_t hi = svmla_lane_f64 (w, k, invln10_log10_2, 1);\n \n   /* y = r2*(A0 + r*A1 + r2*(A2 + r*A3 + r2*A4)) + hi.  */\n-  svfloat64_t r2 = svmul_x (pg, r, r);\n-  svfloat64_t y = sv_pw_horner_4_f64_x (pg, r, r2, __v_log10_data.poly);\n+  svfloat64_t odd_coeffs = svld1rq_f64 (svptrue_b64 (), &d->c1);\n+  svfloat64_t r2 = svmul_x (svptrue_b64 (), r, r);\n+  svfloat64_t y = svmla_lane_f64 (sv_f64 (d->c2), r, odd_coeffs, 1);\n+  svfloat64_t p = svmla_lane_f64 (sv_f64 (d->c0), r, odd_coeffs, 0);\n+  y = svmla_x (pg, y, r2, d->c4);\n+  y = svmla_x (pg, p, r2, y);\n \n   if (__glibc_unlikely (svptest_any (pg, special)))\n-    return special_case (x, svmla_x (svnot_z (pg, special), hi, r2, y),\n-\t\t\t special);\n+    return special_case (hi, tmp, y, r2, special, d);\n   return svmla_x (pg, hi, r2, y);\n }\ndiff --git a/sysdeps/aarch64/fpu/log2_sve.c b/sysdeps/aarch64/fpu/log2_sve.c\nindex 743fa2a913..908e638246 100644\n--- a/sysdeps/aarch64/fpu/log2_sve.c\n+++ b/sysdeps/aarch64/fpu/log2_sve.c\n@@ -21,15 +21,32 @@\n #include \"poly_sve_f64.h\"\n \n #define N (1 << V_LOG2_TABLE_BITS)\n-#define Off 0x3fe6900900000000\n #define Max (0x7ff0000000000000)\n #define Min (0x0010000000000000)\n #define Thresh (0x7fe0000000000000) /* Max - Min.  */\n \n+static const struct data\n+{\n+  double c0, c2;\n+  double c1, c3;\n+  double invln2, c4;\n+  uint64_t off;\n+} data = {\n+  .c0 = -0x1.71547652b83p-1,\n+  .c1 = 0x1.ec709dc340953p-2,\n+  .c2 = -0x1.71547651c8f35p-2,\n+  .c3 = 0x1.2777ebe12dda5p-2,\n+  .c4 = -0x1.ec738d616fe26p-3,\n+  .invln2 = 0x1.71547652b82fep0,\n+  .off = 0x3fe6900900000000,\n+};\n+\n static svfloat64_t NOINLINE\n-special_case (svfloat64_t x, svfloat64_t y, svbool_t cmp)\n+special_case (svfloat64_t w, svuint64_t tmp, svfloat64_t y, svfloat64_t r2,\n+\t      svbool_t special, const struct data *d)\n {\n-  return sv_call_f64 (log2, x, y, cmp);\n+  svfloat64_t x = svreinterpret_f64 (svadd_x (svptrue_b64 (), tmp, d->off));\n+  return sv_call_f64 (log2, x, svmla_x (svptrue_b64 (), w, r2, y), special);\n }\n \n /* Double-precision SVE log2 routine.\n@@ -40,13 +57,15 @@ special_case (svfloat64_t x, svfloat64_t y, svbool_t cmp)\n \t\t\t\t\t  want 0x1.fffb34198d9ddp-5.  */\n svfloat64_t SV_NAME_D1 (log2) (svfloat64_t x, const svbool_t pg)\n {\n+  const struct data *d = ptr_barrier (&data);\n+\n   svuint64_t ix = svreinterpret_u64 (x);\n   svbool_t special = svcmpge (pg, svsub_x (pg, ix, Min), Thresh);\n \n   /* x = 2^k z; where z is in range [Off,2*Off) and exact.\n      The range is split into N subintervals.\n      The ith subinterval contains z and c is near its center.  */\n-  svuint64_t tmp = svsub_x (pg, ix, Off);\n+  svuint64_t tmp = svsub_x (pg, ix, d->off);\n   svuint64_t i = svlsr_x (pg, tmp, 51 - V_LOG2_TABLE_BITS);\n   i = svand_x (pg, i, (N - 1) << 1);\n   svfloat64_t k = svcvt_f64_x (pg, svasr_x (pg, svreinterpret_s64 (tmp), 52));\n@@ -59,15 +78,19 @@ svfloat64_t SV_NAME_D1 (log2) (svfloat64_t x, const svbool_t pg)\n \n   /* log2(x) = log1p(z/c-1)/log(2) + log2(c) + k.  */\n \n+  svfloat64_t invln2_and_c4 = svld1rq_f64 (svptrue_b64 (), &d->invln2);\n   svfloat64_t r = svmad_x (pg, invc, z, -1.0);\n-  svfloat64_t w = svmla_x (pg, log2c, r, __v_log2_data.invln2);\n-\n-  svfloat64_t r2 = svmul_x (pg, r, r);\n-  svfloat64_t y = sv_pw_horner_4_f64_x (pg, r, r2, __v_log2_data.poly);\n+  svfloat64_t w = svmla_lane_f64 (log2c, r, invln2_and_c4, 0);\n   w = svadd_x (pg, k, w);\n \n+  svfloat64_t odd_coeffs = svld1rq_f64 (svptrue_b64 (), &d->c1);\n+  svfloat64_t r2 = svmul_x (svptrue_b64 (), r, r);\n+  svfloat64_t y = svmla_lane_f64 (sv_f64 (d->c2), r, odd_coeffs, 1);\n+  svfloat64_t p = svmla_lane_f64 (sv_f64 (d->c0), r, odd_coeffs, 0);\n+  y = svmla_lane_f64 (y, r2, invln2_and_c4, 1);\n+  y = svmla_x (pg, p, r2, y);\n+\n   if (__glibc_unlikely (svptest_any (pg, special)))\n-    return special_case (x, svmla_x (svnot_z (pg, special), w, r2, y),\n-\t\t\t special);\n+    return special_case (w, tmp, y, r2, special, d);\n   return svmla_x (pg, w, r2, y);\n }\ndiff --git a/sysdeps/aarch64/fpu/log_sve.c b/sysdeps/aarch64/fpu/log_sve.c\nindex 9b689f2ec7..044223400b 100644\n--- a/sysdeps/aarch64/fpu/log_sve.c\n+++ b/sysdeps/aarch64/fpu/log_sve.c\n@@ -19,39 +19,54 @@\n \n #include \"sv_math.h\"\n \n-#define P(i) sv_f64 (__v_log_data.poly[i])\n #define N (1 << V_LOG_TABLE_BITS)\n-#define Off (0x3fe6900900000000)\n-#define MaxTop (0x7ff)\n-#define MinTop (0x001)\n-#define ThreshTop (0x7fe) /* MaxTop - MinTop.  */\n+#define Max (0x7ff0000000000000)\n+#define Min (0x0010000000000000)\n+#define Thresh (0x7fe0000000000000) /* Max - Min.  */\n+\n+static const struct data\n+{\n+  double c0, c2;\n+  double c1, c3;\n+  double ln2, c4;\n+  uint64_t off;\n+} data = {\n+  .c0 = -0x1.ffffffffffff7p-2,\n+  .c1 = 0x1.55555555170d4p-2,\n+  .c2 = -0x1.0000000399c27p-2,\n+  .c3 = 0x1.999b2e90e94cap-3,\n+  .c4 = -0x1.554e550bd501ep-3,\n+  .ln2 = 0x1.62e42fefa39efp-1,\n+  .off = 0x3fe6900900000000,\n+};\n \n static svfloat64_t NOINLINE\n-special_case (svfloat64_t x, svfloat64_t y, svbool_t cmp)\n+special_case (svfloat64_t hi, svuint64_t tmp, svfloat64_t y, svfloat64_t r2,\n+\t      svbool_t special, const struct data *d)\n {\n-  return sv_call_f64 (log, x, y, cmp);\n+  svfloat64_t x = svreinterpret_f64 (svadd_x (svptrue_b64 (), tmp, d->off));\n+  return sv_call_f64 (log, x, svmla_x (svptrue_b64 (), hi, r2, y), special);\n }\n \n-/* SVE port of AdvSIMD log algorithm.\n-   Maximum measured error is 2.17 ulp:\n-   SV_NAME_D1 (log)(0x1.a6129884398a3p+0) got 0x1.ffffff1cca043p-2\n-\t\t\t\t\t want 0x1.ffffff1cca045p-2.  */\n+/* Double-precision SVE log routine.\n+   Maximum measured error is 2.64 ulp:\n+   SV_NAME_D1 (log)(0x1.95e54bc91a5e2p+184) got 0x1.fffffffe88cacp+6\n+\t\t\t\t\t   want 0x1.fffffffe88cafp+6.  */\n svfloat64_t SV_NAME_D1 (log) (svfloat64_t x, const svbool_t pg)\n {\n+  const struct data *d = ptr_barrier (&data);\n+\n   svuint64_t ix = svreinterpret_u64 (x);\n-  svuint64_t top = svlsr_x (pg, ix, 52);\n-  svbool_t cmp = svcmpge (pg, svsub_x (pg, top, MinTop), sv_u64 (ThreshTop));\n+  svbool_t special = svcmpge (pg, svsub_x (pg, ix, Min), Thresh);\n \n   /* x = 2^k z; where z is in range [Off,2*Off) and exact.\n      The range is split into N subintervals.\n      The ith subinterval contains z and c is near its center.  */\n-  svuint64_t tmp = svsub_x (pg, ix, Off);\n+  svuint64_t tmp = svsub_x (pg, ix, d->off);\n   /* Calculate table index = (tmp >> (52 - V_LOG_TABLE_BITS)) % N.\n      The actual value of i is double this due to table layout.  */\n   svuint64_t i\n       = svand_x (pg, svlsr_x (pg, tmp, (51 - V_LOG_TABLE_BITS)), (N - 1) << 1);\n-  svint64_t k\n-      = svasr_x (pg, svreinterpret_s64 (tmp), 52); /* Arithmetic shift.  */\n   svuint64_t iz = svsub_x (pg, ix, svand_x (pg, tmp, 0xfffULL << 52));\n   svfloat64_t z = svreinterpret_f64 (iz);\n   /* Lookup in 2 global lists (length N).  */\n@@ -59,18 +74,22 @@ svfloat64_t SV_NAME_D1 (log) (svfloat64_t x, const svbool_t pg)\n   svfloat64_t logc = svld1_gather_index (pg, &__v_log_data.table[0].logc, i);\n \n   /* log(x) = log1p(z/c-1) + log(c) + k*Ln2.  */\n-  svfloat64_t r = svmad_x (pg, invc, z, -1);\n-  svfloat64_t kd = svcvt_f64_x (pg, k);\n+  svfloat64_t kd = svcvt_f64_x (pg, svasr_x (pg, svreinterpret_s64 (tmp), 52));\n   /* hi = r + log(c) + k*Ln2.  */\n-  svfloat64_t hi = svmla_x (pg, svadd_x (pg, logc, r), kd, __v_log_data.ln2);\n+  svfloat64_t ln2_and_c4 = svld1rq_f64 (svptrue_b64 (), &d->ln2);\n+  svfloat64_t r = svmad_x (pg, invc, z, -1);\n+  svfloat64_t hi = svmla_lane_f64 (logc, kd, ln2_and_c4, 0);\n+  hi = svadd_x (pg, r, hi);\n+\n   /* y = r2*(A0 + r*A1 + r2*(A2 + r*A3 + r2*A4)) + hi.  */\n-  svfloat64_t r2 = svmul_x (pg, r, r);\n-  svfloat64_t y = svmla_x (pg, P (2), r, P (3));\n-  svfloat64_t p = svmla_x (pg, P (0), r, P (1));\n-  y = svmla_x (pg, y, r2, P (4));\n+  svfloat64_t odd_coeffs = svld1rq_f64 (svptrue_b64 (), &d->c1);\n+  svfloat64_t r2 = svmul_x (svptrue_b64 (), r, r);\n+  svfloat64_t y = svmla_lane_f64 (sv_f64 (d->c2), r, odd_coeffs, 1);\n+  svfloat64_t p = svmla_lane_f64 (sv_f64 (d->c0), r, odd_coeffs, 0);\n+  y = svmla_lane_f64 (y, r2, ln2_and_c4, 1);\n   y = svmla_x (pg, p, r2, y);\n \n-  if (__glibc_unlikely (svptest_any (pg, cmp)))\n-    return special_case (x, svmla_x (svnot_z (pg, cmp), hi, r2, y), cmp);\n+  if (__glibc_unlikely (svptest_any (pg, special)))\n+    return special_case (hi, tmp, y, r2, special, d);\n   return svmla_x (pg, hi, r2, y);\n }\ndiff --git a/sysdeps/aarch64/libm-test-ulps b/sysdeps/aarch64/libm-test-ulps\nindex 6c96304611..b76c38dac2 100644\n--- a/sysdeps/aarch64/libm-test-ulps\n+++ b/sysdeps/aarch64/libm-test-ulps\n@@ -1460,7 +1460,7 @@ float: 2\n ldouble: 1\n \n Function: \"log_sve\":\n-double: 1\n+double: 2\n float: 3\n \n Function: \"log_towardzero\":\n\ncommit aa7c61ea15e27ae14717e065a5d4c50baa472851\nAuthor: Yat Long Poon <yatlong.poon@arm.com>\nDate:   Fri Jan 3 19:09:05 2025 +0000\n\n    AArch64: Improve codegen for SVE log1pf users\n    \n    Reduce memory access by using lanewise MLA and reduce number of MOVPRFXs.\n    Move log1pf implementation to inline helper function.\n    Speedup on Neoverse V1 for log1pf (10%), acoshf (-1%), atanhf (2%), asinhf (2%).\n    \n    (cherry picked from commit 91c1fadba338752bf514cd4cca057b27b1b10eed)\n\ndiff --git a/sysdeps/aarch64/fpu/acoshf_sve.c b/sysdeps/aarch64/fpu/acoshf_sve.c\nindex 2110894e62..491365e24d 100644\n--- a/sysdeps/aarch64/fpu/acoshf_sve.c\n+++ b/sysdeps/aarch64/fpu/acoshf_sve.c\n@@ -17,23 +17,26 @@\n    License along with the GNU C Library; if not, see\n    <https://www.gnu.org/licenses/>.  */\n \n+#include \"sv_math.h\"\n+#include \"sv_log1pf_inline.h\"\n+\n #define One 0x3f800000\n #define Thres 0x20000000 /* asuint(0x1p64) - One.  */\n \n-#include \"sv_log1pf_inline.h\"\n-\n static svfloat32_t NOINLINE\n-special_case (svfloat32_t x, svfloat32_t y, svbool_t special)\n+special_case (svfloat32_t xm1, svfloat32_t tmp, svbool_t special)\n {\n+  svfloat32_t x = svadd_x (svptrue_b32 (), xm1, 1.0f);\n+  svfloat32_t y = sv_log1pf_inline (tmp, svptrue_b32 ());\n   return sv_call_f32 (acoshf, x, y, special);\n }\n \n /* Single-precision SVE acosh(x) routine. Implements the same algorithm as\n    vector acoshf and log1p.\n \n-   Maximum error is 2.78 ULPs:\n-   SV_NAME_F1 (acosh) (0x1.01e996p+0) got 0x1.f45b42p-4\n-\t\t\t\t     want 0x1.f45b3cp-4.  */\n+   Maximum error is 2.47 ULPs:\n+   SV_NAME_F1 (acosh) (0x1.01ca76p+0) got 0x1.e435a6p-4\n+\t\t\t\t     want 0x1.e435a2p-4.  */\n svfloat32_t SV_NAME_F1 (acosh) (svfloat32_t x, const svbool_t pg)\n {\n   svuint32_t ix = svreinterpret_u32 (x);\n@@ -41,9 +44,9 @@ svfloat32_t SV_NAME_F1 (acosh) (svfloat32_t x, const svbool_t pg)\n \n   svfloat32_t xm1 = svsub_x (pg, x, 1.0f);\n   svfloat32_t u = svmul_x (pg, xm1, svadd_x (pg, x, 1.0f));\n-  svfloat32_t y = sv_log1pf_inline (svadd_x (pg, xm1, svsqrt_x (pg, u)), pg);\n+  svfloat32_t tmp = svadd_x (pg, xm1, svsqrt_x (pg, u));\n \n   if (__glibc_unlikely (svptest_any (pg, special)))\n-    return special_case (x, y, special);\n-  return y;\n+    return special_case (xm1, tmp, special);\n+  return sv_log1pf_inline (tmp, pg);\n }\ndiff --git a/sysdeps/aarch64/fpu/asinhf_sve.c b/sysdeps/aarch64/fpu/asinhf_sve.c\nindex d85c3a685c..b7f253bf32 100644\n--- a/sysdeps/aarch64/fpu/asinhf_sve.c\n+++ b/sysdeps/aarch64/fpu/asinhf_sve.c\n@@ -20,20 +20,23 @@\n #include \"sv_math.h\"\n #include \"sv_log1pf_inline.h\"\n \n-#define BigBound (0x5f800000)  /* asuint(0x1p64).  */\n+#define BigBound 0x5f800000 /* asuint(0x1p64).  */\n \n static svfloat32_t NOINLINE\n-special_case (svfloat32_t x, svfloat32_t y, svbool_t special)\n+special_case (svuint32_t iax, svuint32_t sign, svfloat32_t y, svbool_t special)\n {\n+  svfloat32_t x = svreinterpret_f32 (sveor_x (svptrue_b32 (), iax, sign));\n+  y = svreinterpret_f32 (\n+      svorr_x (svptrue_b32 (), sign, svreinterpret_u32 (y)));\n   return sv_call_f32 (asinhf, x, y, special);\n }\n \n /* Single-precision SVE asinh(x) routine. Implements the same algorithm as\n    vector asinhf and log1p.\n \n-   Maximum error is 2.48 ULPs:\n-   SV_NAME_F1 (asinh) (0x1.008864p-3) got 0x1.ffbbbcp-4\n-\t\t\t\t     want 0x1.ffbbb8p-4.  */\n+   Maximum error is 1.92 ULPs:\n+   SV_NAME_F1 (asinh) (-0x1.0922ecp-1) got -0x1.fd0bccp-2\n+\t\t\t\t      want -0x1.fd0bc8p-2.  */\n svfloat32_t SV_NAME_F1 (asinh) (svfloat32_t x, const svbool_t pg)\n {\n   svfloat32_t ax = svabs_x (pg, x);\n@@ -49,8 +52,6 @@ svfloat32_t SV_NAME_F1 (asinh) (svfloat32_t x, const svbool_t pg)\n       = sv_log1pf_inline (svadd_x (pg, ax, svdiv_x (pg, ax2, d)), pg);\n \n   if (__glibc_unlikely (svptest_any (pg, special)))\n-    return special_case (\n-\tx, svreinterpret_f32 (svorr_x (pg, sign, svreinterpret_u32 (y))),\n-\tspecial);\n+    return special_case (iax, sign, y, special);\n   return svreinterpret_f32 (svorr_x (pg, sign, svreinterpret_u32 (y)));\n }\ndiff --git a/sysdeps/aarch64/fpu/atanhf_sve.c b/sysdeps/aarch64/fpu/atanhf_sve.c\nindex dae83041ef..2d3005bbc8 100644\n--- a/sysdeps/aarch64/fpu/atanhf_sve.c\n+++ b/sysdeps/aarch64/fpu/atanhf_sve.c\n@@ -17,21 +17,25 @@\n    License along with the GNU C Library; if not, see\n    <https://www.gnu.org/licenses/>.  */\n \n+#include \"sv_math.h\"\n #include \"sv_log1pf_inline.h\"\n \n #define One (0x3f800000)\n #define Half (0x3f000000)\n \n static svfloat32_t NOINLINE\n-special_case (svfloat32_t x, svfloat32_t y, svbool_t special)\n+special_case (svuint32_t iax, svuint32_t sign, svfloat32_t halfsign,\n+\t      svfloat32_t y, svbool_t special)\n {\n+  svfloat32_t x = svreinterpret_f32 (sveor_x (svptrue_b32 (), iax, sign));\n+  y = svmul_x (svptrue_b32 (), halfsign, y);\n   return sv_call_f32 (atanhf, x, y, special);\n }\n \n /* Approximation for vector single-precision atanh(x) using modified log1p.\n-   The maximum error is 2.28 ULP:\n-   _ZGVsMxv_atanhf(0x1.ff1194p-5) got 0x1.ffbbbcp-5\n-\t\t\t\t want 0x1.ffbbb6p-5.  */\n+   The maximum error is 1.99 ULP:\n+   _ZGVsMxv_atanhf(0x1.f1583p-5) got 0x1.f1f4fap-5\n+\t\t\t\twant 0x1.f1f4f6p-5.  */\n svfloat32_t SV_NAME_F1 (atanh) (svfloat32_t x, const svbool_t pg)\n {\n   svfloat32_t ax = svabs_x (pg, x);\n@@ -48,7 +52,7 @@ svfloat32_t SV_NAME_F1 (atanh) (svfloat32_t x, const svbool_t pg)\n   y = sv_log1pf_inline (y, pg);\n \n   if (__glibc_unlikely (svptest_any (pg, special)))\n-    return special_case (x, svmul_x (pg, halfsign, y), special);\n+    return special_case (iax, sign, halfsign, y, special);\n \n   return svmul_x (pg, halfsign, y);\n }\ndiff --git a/sysdeps/aarch64/fpu/log1pf_sve.c b/sysdeps/aarch64/fpu/log1pf_sve.c\nindex 5256d5e94c..18a185c838 100644\n--- a/sysdeps/aarch64/fpu/log1pf_sve.c\n+++ b/sysdeps/aarch64/fpu/log1pf_sve.c\n@@ -18,30 +18,13 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include \"sv_math.h\"\n-#include \"poly_sve_f32.h\"\n-\n-static const struct data\n-{\n-  float poly[8];\n-  float ln2, exp_bias;\n-  uint32_t four, three_quarters;\n-} data = {.poly = {/* Do not store first term of polynomial, which is -0.5, as\n-                      this can be fmov-ed directly instead of including it in\n-                      the main load-and-mla polynomial schedule.  */\n-\t\t   0x1.5555aap-2f, -0x1.000038p-2f, 0x1.99675cp-3f,\n-\t\t   -0x1.54ef78p-3f, 0x1.28a1f4p-3f, -0x1.0da91p-3f,\n-\t\t   0x1.abcb6p-4f, -0x1.6f0d5ep-5f},\n-\t  .ln2 = 0x1.62e43p-1f,\n-\t  .exp_bias = 0x1p-23f,\n-\t  .four = 0x40800000,\n-\t  .three_quarters = 0x3f400000};\n-\n-#define SignExponentMask 0xff800000\n+#include \"sv_log1pf_inline.h\"\n \n static svfloat32_t NOINLINE\n-special_case (svfloat32_t x, svfloat32_t y, svbool_t special)\n+special_case (svfloat32_t x, svbool_t special)\n {\n-  return sv_call_f32 (log1pf, x, y, special);\n+  return sv_call_f32 (log1pf, x, sv_log1pf_inline (x, svptrue_b32 ()),\n+\t\t      special);\n }\n \n /* Vector log1pf approximation using polynomial on reduced interval. Worst-case\n@@ -50,53 +33,14 @@ special_case (svfloat32_t x, svfloat32_t y, svbool_t special)\n \t\t\t\t want 0x1.9f323ep-2.  */\n svfloat32_t SV_NAME_F1 (log1p) (svfloat32_t x, svbool_t pg)\n {\n-  const struct data *d = ptr_barrier (&data);\n   /* x < -1, Inf/Nan.  */\n   svbool_t special = svcmpeq (pg, svreinterpret_u32 (x), 0x7f800000);\n   special = svorn_z (pg, special, svcmpge (pg, x, -1));\n \n-  /* With x + 1 = t * 2^k (where t = m + 1 and k is chosen such that m\n-\t\t\t   is in [-0.25, 0.5]):\n-     log1p(x) = log(t) + log(2^k) = log1p(m) + k*log(2).\n-\n-     We approximate log1p(m) with a polynomial, then scale by\n-     k*log(2). Instead of doing this directly, we use an intermediate\n-     scale factor s = 4*k*log(2) to ensure the scale is representable\n-     as a normalised fp32 number.  */\n-  svfloat32_t m = svadd_x (pg, x, 1);\n-\n-  /* Choose k to scale x to the range [-1/4, 1/2].  */\n-  svint32_t k\n-      = svand_x (pg, svsub_x (pg, svreinterpret_s32 (m), d->three_quarters),\n-\t\t sv_s32 (SignExponentMask));\n-\n-  /* Scale x by exponent manipulation.  */\n-  svfloat32_t m_scale = svreinterpret_f32 (\n-      svsub_x (pg, svreinterpret_u32 (x), svreinterpret_u32 (k)));\n-\n-  /* Scale up to ensure that the scale factor is representable as normalised\n-     fp32 number, and scale m down accordingly.  */\n-  svfloat32_t s = svreinterpret_f32 (svsubr_x (pg, k, d->four));\n-  m_scale = svadd_x (pg, m_scale, svmla_x (pg, sv_f32 (-1), s, 0.25));\n-\n-  /* Evaluate polynomial on reduced interval.  */\n-  svfloat32_t ms2 = svmul_x (pg, m_scale, m_scale),\n-\t      ms4 = svmul_x (pg, ms2, ms2);\n-  svfloat32_t p = sv_estrin_7_f32_x (pg, m_scale, ms2, ms4, d->poly);\n-  p = svmad_x (pg, m_scale, p, -0.5);\n-  p = svmla_x (pg, m_scale, m_scale, svmul_x (pg, m_scale, p));\n-\n-  /* The scale factor to be applied back at the end - by multiplying float(k)\n-     by 2^-23 we get the unbiased exponent of k.  */\n-  svfloat32_t scale_back = svmul_x (pg, svcvt_f32_x (pg, k), d->exp_bias);\n-\n-  /* Apply the scaling back.  */\n-  svfloat32_t y = svmla_x (pg, p, scale_back, d->ln2);\n-\n   if (__glibc_unlikely (svptest_any (pg, special)))\n-    return special_case (x, y, special);\n+    return special_case (x, special);\n \n-  return y;\n+  return sv_log1pf_inline (x, pg);\n }\n \n strong_alias (SV_NAME_F1 (log1p), SV_NAME_F1 (logp1))\ndiff --git a/sysdeps/aarch64/fpu/sv_log1pf_inline.h b/sysdeps/aarch64/fpu/sv_log1pf_inline.h\nindex b94b2da055..850297d615 100644\n--- a/sysdeps/aarch64/fpu/sv_log1pf_inline.h\n+++ b/sysdeps/aarch64/fpu/sv_log1pf_inline.h\n@@ -22,55 +22,76 @@\n \n #include \"sv_math.h\"\n #include \"vecmath_config.h\"\n-#include \"poly_sve_f32.h\"\n+\n+#define SignExponentMask 0xff800000\n \n static const struct sv_log1pf_data\n {\n-  float32_t poly[9];\n-  float32_t ln2;\n-  float32_t scale_back;\n+  float c0, c2, c4, c6;\n+  float c1, c3, c5, c7;\n+  float ln2, exp_bias, quarter;\n+  uint32_t four, three_quarters;\n } sv_log1pf_data = {\n-  /* Polynomial generated using FPMinimax in [-0.25, 0.5].  */\n-  .poly = { -0x1p-1f, 0x1.5555aap-2f, -0x1.000038p-2f, 0x1.99675cp-3f,\n-\t    -0x1.54ef78p-3f, 0x1.28a1f4p-3f, -0x1.0da91p-3f, 0x1.abcb6p-4f,\n-\t    -0x1.6f0d5ep-5f },\n-  .scale_back = 0x1.0p-23f,\n-  .ln2 = 0x1.62e43p-1f,\n+  /* Do not store first term of polynomial, which is -0.5, as\n+     this can be fmov-ed directly instead of including it in\n+     the main load-and-mla polynomial schedule.  */\n+  .c0 = 0x1.5555aap-2f,\t\t.c1 = -0x1.000038p-2f, .c2 = 0x1.99675cp-3f,\n+  .c3 = -0x1.54ef78p-3f,\t.c4 = 0x1.28a1f4p-3f,  .c5 = -0x1.0da91p-3f,\n+  .c6 = 0x1.abcb6p-4f,\t\t.c7 = -0x1.6f0d5ep-5f, .ln2 = 0x1.62e43p-1f,\n+  .exp_bias = 0x1p-23f,\t\t.quarter = 0x1p-2f,    .four = 0x40800000,\n+  .three_quarters = 0x3f400000,\n };\n \n-static inline svfloat32_t\n-eval_poly (svfloat32_t m, const float32_t *c, svbool_t pg)\n-{\n-  svfloat32_t p_12 = svmla_x (pg, sv_f32 (c[0]), m, sv_f32 (c[1]));\n-  svfloat32_t m2 = svmul_x (pg, m, m);\n-  svfloat32_t q = svmla_x (pg, m, m2, p_12);\n-  svfloat32_t p = sv_pw_horner_6_f32_x (pg, m, m2, c + 2);\n-  p = svmul_x (pg, m2, p);\n-\n-  return svmla_x (pg, q, m2, p);\n-}\n-\n static inline svfloat32_t\n sv_log1pf_inline (svfloat32_t x, svbool_t pg)\n {\n   const struct sv_log1pf_data *d = ptr_barrier (&sv_log1pf_data);\n \n-  svfloat32_t m = svadd_x (pg, x, 1.0f);\n-\n-  svint32_t ks = svsub_x (pg, svreinterpret_s32 (m),\n-\t\t\t  svreinterpret_s32 (svdup_f32 (0.75f)));\n-  ks = svand_x (pg, ks, 0xff800000);\n-  svuint32_t k = svreinterpret_u32 (ks);\n-  svfloat32_t s = svreinterpret_f32 (\n-      svsub_x (pg, svreinterpret_u32 (svdup_f32 (4.0f)), k));\n-\n-  svfloat32_t m_scale\n-      = svreinterpret_f32 (svsub_x (pg, svreinterpret_u32 (x), k));\n-  m_scale\n-      = svadd_x (pg, m_scale, svmla_x (pg, sv_f32 (-1.0f), sv_f32 (0.25f), s));\n-  svfloat32_t p = eval_poly (m_scale, d->poly, pg);\n-  svfloat32_t scale_back = svmul_x (pg, svcvt_f32_x (pg, k), d->scale_back);\n-  return svmla_x (pg, p, scale_back, d->ln2);\n+  /* With x + 1 = t * 2^k (where t = m + 1 and k is chosen such that m\n+\t\t\t is in [-0.25, 0.5]):\n+   log1p(x) = log(t) + log(2^k) = log1p(m) + k*log(2).\n+\n+   We approximate log1p(m) with a polynomial, then scale by\n+   k*log(2). Instead of doing this directly, we use an intermediate\n+   scale factor s = 4*k*log(2) to ensure the scale is representable\n+   as a normalised fp32 number.  */\n+  svfloat32_t m = svadd_x (pg, x, 1);\n+\n+  /* Choose k to scale x to the range [-1/4, 1/2].  */\n+  svint32_t k\n+      = svand_x (pg, svsub_x (pg, svreinterpret_s32 (m), d->three_quarters),\n+\t\t sv_s32 (SignExponentMask));\n+\n+  /* Scale x by exponent manipulation.  */\n+  svfloat32_t m_scale = svreinterpret_f32 (\n+      svsub_x (pg, svreinterpret_u32 (x), svreinterpret_u32 (k)));\n+\n+  /* Scale up to ensure that the scale factor is representable as normalised\n+     fp32 number, and scale m down accordingly.  */\n+  svfloat32_t s = svreinterpret_f32 (svsubr_x (pg, k, d->four));\n+  svfloat32_t fconst = svld1rq_f32 (svptrue_b32 (), &d->ln2);\n+  m_scale = svadd_x (pg, m_scale, svmla_lane_f32 (sv_f32 (-1), s, fconst, 2));\n+\n+  /* Evaluate polynomial on reduced interval.  */\n+  svfloat32_t ms2 = svmul_x (svptrue_b32 (), m_scale, m_scale);\n+\n+  svfloat32_t c1357 = svld1rq_f32 (svptrue_b32 (), &d->c1);\n+  svfloat32_t p01 = svmla_lane_f32 (sv_f32 (d->c0), m_scale, c1357, 0);\n+  svfloat32_t p23 = svmla_lane_f32 (sv_f32 (d->c2), m_scale, c1357, 1);\n+  svfloat32_t p45 = svmla_lane_f32 (sv_f32 (d->c4), m_scale, c1357, 2);\n+  svfloat32_t p67 = svmla_lane_f32 (sv_f32 (d->c6), m_scale, c1357, 3);\n+\n+  svfloat32_t p = svmla_x (pg, p45, p67, ms2);\n+  p = svmla_x (pg, p23, p, ms2);\n+  p = svmla_x (pg, p01, p, ms2);\n+\n+  p = svmad_x (pg, m_scale, p, -0.5);\n+  p = svmla_x (pg, m_scale, m_scale, svmul_x (pg, m_scale, p));\n+\n+  /* The scale factor to be applied back at the end - by multiplying float(k)\n+   by 2^-23 we get the unbiased exponent of k.  */\n+  svfloat32_t scale_back = svmul_lane_f32 (svcvt_f32_x (pg, k), fconst, 1);\n+  return svmla_lane_f32 (p, scale_back, fconst, 0);\n }\n \n #endif\n\ncommit d983f14c304df2d880c7b01e904e4a889064b9b3\nAuthor: Luna Lamb <luna.lamb@arm.com>\nDate:   Fri Jan 3 20:15:17 2025 +0000\n\n    AArch64: Improve codegen in SVE expm1f and users\n    \n    Use unpredicated muls, use absolute compare and improve memory access.\n    Expm1f, sinhf and tanhf show 7%, 5% and 1% improvement in throughput\n    microbenchmark on Neoverse V1.\n    \n    (cherry picked from commit f86b4cf87581cf1e45702b07880679ffa0b1f47a)\n\ndiff --git a/sysdeps/aarch64/fpu/expm1f_sve.c b/sysdeps/aarch64/fpu/expm1f_sve.c\nindex 7c852125cd..05a66400d4 100644\n--- a/sysdeps/aarch64/fpu/expm1f_sve.c\n+++ b/sysdeps/aarch64/fpu/expm1f_sve.c\n@@ -18,7 +18,6 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include \"sv_math.h\"\n-#include \"poly_sve_f32.h\"\n \n /* Largest value of x for which expm1(x) should round to -1.  */\n #define SpecialBound 0x1.5ebc4p+6f\n@@ -28,20 +27,17 @@ static const struct data\n   /* These 4 are grouped together so they can be loaded as one quadword, then\n      used with _lane forms of svmla/svmls.  */\n   float c2, c4, ln2_hi, ln2_lo;\n-  float c0, c1, c3, inv_ln2, special_bound, shift;\n+  float c0, inv_ln2, c1, c3, special_bound;\n } data = {\n   /* Generated using fpminimax.  */\n   .c0 = 0x1.fffffep-2,\t\t .c1 = 0x1.5554aep-3,\n   .c2 = 0x1.555736p-5,\t\t .c3 = 0x1.12287cp-7,\n-  .c4 = 0x1.6b55a2p-10,\n+  .c4 = 0x1.6b55a2p-10,\t\t .inv_ln2 = 0x1.715476p+0f,\n+  .special_bound = SpecialBound, .ln2_lo = 0x1.7f7d1cp-20f,\n+  .ln2_hi = 0x1.62e4p-1f,\n \n-  .special_bound = SpecialBound, .shift = 0x1.8p23f,\n-  .inv_ln2 = 0x1.715476p+0f,\t .ln2_hi = 0x1.62e4p-1f,\n-  .ln2_lo = 0x1.7f7d1cp-20f,\n };\n \n-#define C(i) sv_f32 (d->c##i)\n-\n static svfloat32_t NOINLINE\n special_case (svfloat32_t x, svbool_t pg)\n {\n@@ -71,9 +67,8 @@ svfloat32_t SV_NAME_F1 (expm1) (svfloat32_t x, svbool_t pg)\n      and f = x - i * ln2, then f is in [-ln2/2, ln2/2].\n      exp(x) - 1 = 2^i * (expm1(f) + 1) - 1\n      where 2^i is exact because i is an integer.  */\n-  svfloat32_t j = svmla_x (pg, sv_f32 (d->shift), x, d->inv_ln2);\n-  j = svsub_x (pg, j, d->shift);\n-  svint32_t i = svcvt_s32_x (pg, j);\n+  svfloat32_t j = svmul_x (svptrue_b32 (), x, d->inv_ln2);\n+  j = svrinta_x (pg, j);\n \n   svfloat32_t f = svmls_lane (x, j, lane_constants, 2);\n   f = svmls_lane (f, j, lane_constants, 3);\n@@ -83,17 +78,17 @@ svfloat32_t SV_NAME_F1 (expm1) (svfloat32_t x, svbool_t pg)\n \t x + ax^2 + bx^3 + cx^4 ....\n      So we calculate the polynomial P(f) = a + bf + cf^2 + ...\n      and assemble the approximation expm1(f) ~= f + f^2 * P(f).  */\n-  svfloat32_t p12 = svmla_lane (C (1), f, lane_constants, 0);\n-  svfloat32_t p34 = svmla_lane (C (3), f, lane_constants, 1);\n-  svfloat32_t f2 = svmul_x (pg, f, f);\n+  svfloat32_t p12 = svmla_lane (sv_f32 (d->c1), f, lane_constants, 0);\n+  svfloat32_t p34 = svmla_lane (sv_f32 (d->c3), f, lane_constants, 1);\n+  svfloat32_t f2 = svmul_x (svptrue_b32 (), f, f);\n   svfloat32_t p = svmla_x (pg, p12, f2, p34);\n-  p = svmla_x (pg, C (0), f, p);\n+\n+  p = svmla_x (pg, sv_f32 (d->c0), f, p);\n   p = svmla_x (pg, f, f2, p);\n \n   /* Assemble the result.\n      expm1(x) ~= 2^i * (p + 1) - 1\n      Let t = 2^i.  */\n-  svfloat32_t t = svreinterpret_f32 (\n-      svadd_x (pg, svreinterpret_u32 (svlsl_x (pg, i, 23)), 0x3f800000));\n-  return svmla_x (pg, svsub_x (pg, t, 1), p, t);\n+  svfloat32_t t = svscale_x (pg, sv_f32 (1.0f), svcvt_s32_x (pg, j));\n+  return svmla_x (pg, svsub_x (pg, t, 1.0f), p, t);\n }\ndiff --git a/sysdeps/aarch64/fpu/sinhf_sve.c b/sysdeps/aarch64/fpu/sinhf_sve.c\nindex 6c204b57a2..50dd386774 100644\n--- a/sysdeps/aarch64/fpu/sinhf_sve.c\n+++ b/sysdeps/aarch64/fpu/sinhf_sve.c\n@@ -63,5 +63,5 @@ svfloat32_t SV_NAME_F1 (sinh) (svfloat32_t x, const svbool_t pg)\n   if (__glibc_unlikely (svptest_any (pg, special)))\n     return special_case (x, svmul_x (pg, t, halfsign), special);\n \n-  return svmul_x (pg, t, halfsign);\n+  return svmul_x (svptrue_b32 (), t, halfsign);\n }\ndiff --git a/sysdeps/aarch64/fpu/sv_expm1f_inline.h b/sysdeps/aarch64/fpu/sv_expm1f_inline.h\nindex 5b72451222..e46ddda543 100644\n--- a/sysdeps/aarch64/fpu/sv_expm1f_inline.h\n+++ b/sysdeps/aarch64/fpu/sv_expm1f_inline.h\n@@ -27,21 +27,18 @@ struct sv_expm1f_data\n   /* These 4 are grouped together so they can be loaded as one quadword, then\n    used with _lane forms of svmla/svmls.  */\n   float32_t c2, c4, ln2_hi, ln2_lo;\n-  float32_t c0, c1, c3, inv_ln2, shift;\n+  float c0, inv_ln2, c1, c3, special_bound;\n };\n \n /* Coefficients generated using fpminimax.  */\n #define SV_EXPM1F_DATA                                                        \\\n   {                                                                           \\\n-    .c0 = 0x1.fffffep-2, .c1 = 0x1.5554aep-3, .c2 = 0x1.555736p-5,            \\\n-    .c3 = 0x1.12287cp-7, .c4 = 0x1.6b55a2p-10,                                \\\n+    .c0 = 0x1.fffffep-2, .c1 = 0x1.5554aep-3, .inv_ln2 = 0x1.715476p+0f,      \\\n+    .c2 = 0x1.555736p-5, .c3 = 0x1.12287cp-7,                                 \\\n                                                                               \\\n-    .shift = 0x1.8p23f, .inv_ln2 = 0x1.715476p+0f, .ln2_hi = 0x1.62e4p-1f,    \\\n-    .ln2_lo = 0x1.7f7d1cp-20f,                                                \\\n+    .c4 = 0x1.6b55a2p-10, .ln2_lo = 0x1.7f7d1cp-20f, .ln2_hi = 0x1.62e4p-1f,  \\\n   }\n \n-#define C(i) sv_f32 (d->c##i)\n-\n static inline svfloat32_t\n expm1f_inline (svfloat32_t x, svbool_t pg, const struct sv_expm1f_data *d)\n {\n@@ -55,9 +52,8 @@ expm1f_inline (svfloat32_t x, svbool_t pg, const struct sv_expm1f_data *d)\n      and f = x - i * ln2, then f is in [-ln2/2, ln2/2].\n      exp(x) - 1 = 2^i * (expm1(f) + 1) - 1\n      where 2^i is exact because i is an integer.  */\n-  svfloat32_t j = svmla_x (pg, sv_f32 (d->shift), x, d->inv_ln2);\n-  j = svsub_x (pg, j, d->shift);\n-  svint32_t i = svcvt_s32_x (pg, j);\n+  svfloat32_t j = svmul_x (svptrue_b32 (), x, d->inv_ln2);\n+  j = svrinta_x (pg, j);\n \n   svfloat32_t f = svmls_lane (x, j, lane_constants, 2);\n   f = svmls_lane (f, j, lane_constants, 3);\n@@ -67,18 +63,18 @@ expm1f_inline (svfloat32_t x, svbool_t pg, const struct sv_expm1f_data *d)\n \t x + ax^2 + bx^3 + cx^4 ....\n      So we calculate the polynomial P(f) = a + bf + cf^2 + ...\n      and assemble the approximation expm1(f) ~= f + f^2 * P(f).  */\n-  svfloat32_t p12 = svmla_lane (C (1), f, lane_constants, 0);\n-  svfloat32_t p34 = svmla_lane (C (3), f, lane_constants, 1);\n-  svfloat32_t f2 = svmul_x (pg, f, f);\n+  svfloat32_t p12 = svmla_lane (sv_f32 (d->c1), f, lane_constants, 0);\n+  svfloat32_t p34 = svmla_lane (sv_f32 (d->c3), f, lane_constants, 1);\n+  svfloat32_t f2 = svmul_x (svptrue_b32 (), f, f);\n   svfloat32_t p = svmla_x (pg, p12, f2, p34);\n-  p = svmla_x (pg, C (0), f, p);\n+  p = svmla_x (pg, sv_f32 (d->c0), f, p);\n   p = svmla_x (pg, f, f2, p);\n \n   /* Assemble the result.\n      expm1(x) ~= 2^i * (p + 1) - 1\n      Let t = 2^i.  */\n-  svfloat32_t t = svscale_x (pg, sv_f32 (1), i);\n-  return svmla_x (pg, svsub_x (pg, t, 1), p, t);\n+  svfloat32_t t = svscale_x (pg, sv_f32 (1.0f), svcvt_s32_x (pg, j));\n+  return svmla_x (pg, svsub_x (pg, t, 1.0f), p, t);\n }\n \n #endif\ndiff --git a/sysdeps/aarch64/fpu/tanhf_sve.c b/sysdeps/aarch64/fpu/tanhf_sve.c\nindex 0b94523cf5..80dd679346 100644\n--- a/sysdeps/aarch64/fpu/tanhf_sve.c\n+++ b/sysdeps/aarch64/fpu/tanhf_sve.c\n@@ -19,20 +19,27 @@\n \n #include \"sv_expm1f_inline.h\"\n \n+/* Largest value of x for which tanhf(x) rounds to 1 (or -1 for negative).  */\n+#define BoringBound 0x1.205966p+3f\n+\n static const struct data\n {\n   struct sv_expm1f_data expm1f_consts;\n-  uint32_t boring_bound, onef;\n+  uint32_t onef, special_bound;\n+  float boring_bound;\n } data = {\n   .expm1f_consts = SV_EXPM1F_DATA,\n-  /* 0x1.205966p+3, above which tanhf rounds to 1 (or -1 for negative).  */\n-  .boring_bound = 0x41102cb3,\n   .onef = 0x3f800000,\n+  .special_bound = 0x7f800000,\n+  .boring_bound = BoringBound,\n };\n \n static svfloat32_t NOINLINE\n-special_case (svfloat32_t x, svfloat32_t y, svbool_t special)\n+special_case (svfloat32_t x, svbool_t pg, svbool_t is_boring,\n+\t      svfloat32_t boring, svfloat32_t q, svbool_t special)\n {\n+  svfloat32_t y\n+      = svsel_f32 (is_boring, boring, svdiv_x (pg, q, svadd_x (pg, q, 2.0)));\n   return sv_call_f32 (tanhf, x, y, special);\n }\n \n@@ -47,15 +54,16 @@ svfloat32_t SV_NAME_F1 (tanh) (svfloat32_t x, const svbool_t pg)\n   svfloat32_t ax = svabs_x (pg, x);\n   svuint32_t iax = svreinterpret_u32 (ax);\n   svuint32_t sign = sveor_x (pg, svreinterpret_u32 (x), iax);\n-  svbool_t is_boring = svcmpgt (pg, iax, d->boring_bound);\n   svfloat32_t boring = svreinterpret_f32 (svorr_x (pg, sign, d->onef));\n-\n-  svbool_t special = svcmpgt (pg, iax, 0x7f800000);\n+  svbool_t special = svcmpgt (pg, iax, d->special_bound);\n+  svbool_t is_boring = svacgt (pg, x, d->boring_bound);\n \n   /* tanh(x) = (e^2x - 1) / (e^2x + 1).  */\n-  svfloat32_t q = expm1f_inline (svmul_x (pg, x, 2.0), pg, &d->expm1f_consts);\n-  svfloat32_t y = svdiv_x (pg, q, svadd_x (pg, q, 2.0));\n+  svfloat32_t q = expm1f_inline (svmul_x (svptrue_b32 (), x, 2.0), pg,\n+\t\t\t\t &d->expm1f_consts);\n+\n   if (__glibc_unlikely (svptest_any (pg, special)))\n-    return special_case (x, svsel_f32 (is_boring, boring, y), special);\n+    return special_case (x, pg, is_boring, boring, q, special);\n+  svfloat32_t y = svdiv_x (pg, q, svadd_x (pg, q, 2.0));\n   return svsel_f32 (is_boring, boring, y);\n }\n\ncommit 0ff6a9ff79bca9384ce4ba20e8942d39cc377a14\nAuthor: Luna Lamb <luna.lamb@arm.com>\nDate:   Thu Feb 13 17:52:09 2025 +0000\n\n    Aarch64: Improve codegen in SVE asinh\n    \n    Use unpredicated muls, use lanewise mla's and improve memory access.\n    1% regression in throughput microbenchmark on Neoverse V1.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit 8f0e7fe61e0a2ad5ed777933703ce09053810ec4)\n\ndiff --git a/sysdeps/aarch64/fpu/asinh_sve.c b/sysdeps/aarch64/fpu/asinh_sve.c\nindex 28dc5c4587..fe8715e06c 100644\n--- a/sysdeps/aarch64/fpu/asinh_sve.c\n+++ b/sysdeps/aarch64/fpu/asinh_sve.c\n@@ -18,36 +18,49 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include \"sv_math.h\"\n-#include \"poly_sve_f64.h\"\n \n #define SignMask (0x8000000000000000)\n #define One (0x3ff0000000000000)\n #define Thres (0x5fe0000000000000) /* asuint64 (0x1p511).  */\n+#define IndexMask (((1 << V_LOG_TABLE_BITS) - 1) << 1)\n \n static const struct data\n {\n-  double poly[18];\n-  double ln2, p3, p1, p4, p0, p2;\n-  uint64_t n;\n-  uint64_t off;\n+  double even_coeffs[9];\n+  double ln2, p3, p1, p4, p0, p2, c1, c3, c5, c7, c9, c11, c13, c15, c17;\n+  uint64_t off, mask;\n \n } data = {\n-  /* Polynomial generated using Remez on [2^-26, 1].  */\n-  .poly\n-  = { -0x1.55555555554a7p-3, 0x1.3333333326c7p-4, -0x1.6db6db68332e6p-5,\n-      0x1.f1c71b26fb40dp-6, -0x1.6e8b8b654a621p-6, 0x1.1c4daa9e67871p-6,\n-      -0x1.c9871d10885afp-7, 0x1.7a16e8d9d2ecfp-7, -0x1.3ddca533e9f54p-7,\n-      0x1.0becef748dafcp-7, -0x1.b90c7099dd397p-8, 0x1.541f2bb1ffe51p-8,\n-      -0x1.d217026a669ecp-9, 0x1.0b5c7977aaf7p-9, -0x1.e0f37daef9127p-11,\n-      0x1.388b5fe542a6p-12, -0x1.021a48685e287p-14, 0x1.93d4ba83d34dap-18 },\n+   /* Polynomial generated using Remez on [2^-26, 1].  */\n+  .even_coeffs ={\n+    -0x1.55555555554a7p-3,\n+    -0x1.6db6db68332e6p-5,\n+    -0x1.6e8b8b654a621p-6,\n+    -0x1.c9871d10885afp-7,\n+    -0x1.3ddca533e9f54p-7,\n+    -0x1.b90c7099dd397p-8,\n+    -0x1.d217026a669ecp-9,\n+    -0x1.e0f37daef9127p-11,\n+    -0x1.021a48685e287p-14, },\n+\n+  .c1 = 0x1.3333333326c7p-4,\n+  .c3 = 0x1.f1c71b26fb40dp-6,\n+  .c5 = 0x1.1c4daa9e67871p-6,\n+  .c7 = 0x1.7a16e8d9d2ecfp-7,\n+  .c9 = 0x1.0becef748dafcp-7,\n+  .c11 = 0x1.541f2bb1ffe51p-8,\n+  .c13 = 0x1.0b5c7977aaf7p-9,\n+  .c15 = 0x1.388b5fe542a6p-12,\n+  .c17 = 0x1.93d4ba83d34dap-18,\n+\n   .ln2 = 0x1.62e42fefa39efp-1,\n   .p0 = -0x1.ffffffffffff7p-2,\n   .p1 = 0x1.55555555170d4p-2,\n   .p2 = -0x1.0000000399c27p-2,\n   .p3 = 0x1.999b2e90e94cap-3,\n   .p4 = -0x1.554e550bd501ep-3,\n-  .n = 1 << V_LOG_TABLE_BITS,\n-  .off = 0x3fe6900900000000\n+  .off = 0x3fe6900900000000,\n+  .mask = 0xfffULL << 52,\n };\n \n static svfloat64_t NOINLINE\n@@ -64,11 +77,10 @@ __sv_log_inline (svfloat64_t x, const struct data *d, const svbool_t pg)\n      of the algorithm used.  */\n \n   svuint64_t ix = svreinterpret_u64 (x);\n-  svuint64_t tmp = svsub_x (pg, ix, d->off);\n-  svuint64_t i = svand_x (pg, svlsr_x (pg, tmp, (51 - V_LOG_TABLE_BITS)),\n-\t\t\t  (d->n - 1) << 1);\n-  svint64_t k = svasr_x (pg, svreinterpret_s64 (tmp), 52);\n-  svuint64_t iz = svsub_x (pg, ix, svand_x (pg, tmp, 0xfffULL << 52));\n+  svuint64_t i_off = svsub_x (pg, ix, d->off);\n+  svuint64_t i\n+      = svand_x (pg, svlsr_x (pg, i_off, (51 - V_LOG_TABLE_BITS)), IndexMask);\n+  svuint64_t iz = svsub_x (pg, ix, svand_x (pg, i_off, d->mask));\n   svfloat64_t z = svreinterpret_f64 (iz);\n \n   svfloat64_t invc = svld1_gather_index (pg, &__v_log_data.table[0].invc, i);\n@@ -78,14 +90,14 @@ __sv_log_inline (svfloat64_t x, const struct data *d, const svbool_t pg)\n   svfloat64_t p1_p4 = svld1rq (svptrue_b64 (), &d->p1);\n \n   svfloat64_t r = svmla_x (pg, sv_f64 (-1.0), invc, z);\n-  svfloat64_t kd = svcvt_f64_x (pg, k);\n+  svfloat64_t kd\n+      = svcvt_f64_x (pg, svasr_x (pg, svreinterpret_s64 (i_off), 52));\n \n   svfloat64_t hi = svmla_lane (svadd_x (pg, logc, r), kd, ln2_p3, 0);\n-  svfloat64_t r2 = svmul_x (pg, r, r);\n-\n+  svfloat64_t r2 = svmul_x (svptrue_b64 (), r, r);\n   svfloat64_t y = svmla_lane (sv_f64 (d->p2), r, ln2_p3, 1);\n-\n   svfloat64_t p = svmla_lane (sv_f64 (d->p0), r, p1_p4, 0);\n+\n   y = svmla_lane (y, r2, p1_p4, 1);\n   y = svmla_x (pg, p, r2, y);\n   y = svmla_x (pg, hi, r2, y);\n@@ -111,7 +123,6 @@ svfloat64_t SV_NAME_D1 (asinh) (svfloat64_t x, const svbool_t pg)\n   svuint64_t iax = svbic_x (pg, ix, SignMask);\n   svuint64_t sign = svand_x (pg, ix, SignMask);\n   svfloat64_t ax = svreinterpret_f64 (iax);\n-\n   svbool_t ge1 = svcmpge (pg, iax, One);\n   svbool_t special = svcmpge (pg, iax, Thres);\n \n@@ -120,7 +131,7 @@ svfloat64_t SV_NAME_D1 (asinh) (svfloat64_t x, const svbool_t pg)\n   svfloat64_t option_1 = sv_f64 (0);\n   if (__glibc_likely (svptest_any (pg, ge1)))\n     {\n-      svfloat64_t x2 = svmul_x (pg, ax, ax);\n+      svfloat64_t x2 = svmul_x (svptrue_b64 (), ax, ax);\n       option_1 = __sv_log_inline (\n \t  svadd_x (pg, ax, svsqrt_x (pg, svadd_x (pg, x2, 1))), d, pg);\n     }\n@@ -130,21 +141,53 @@ svfloat64_t SV_NAME_D1 (asinh) (svfloat64_t x, const svbool_t pg)\n      The largest observed error in this region is 1.51 ULPs:\n      _ZGVsMxv_asinh(0x1.fe12bf8c616a2p-1) got 0x1.c1e649ee2681bp-1\n \t\t\t\t\t want 0x1.c1e649ee2681dp-1.  */\n+\n   svfloat64_t option_2 = sv_f64 (0);\n   if (__glibc_likely (svptest_any (pg, svnot_z (pg, ge1))))\n     {\n-      svfloat64_t x2 = svmul_x (pg, ax, ax);\n-      svfloat64_t x4 = svmul_x (pg, x2, x2);\n-      svfloat64_t p = sv_pw_horner_17_f64_x (pg, x2, x4, d->poly);\n-      option_2 = svmla_x (pg, ax, p, svmul_x (pg, x2, ax));\n+      svfloat64_t x2 = svmul_x (svptrue_b64 (), ax, ax);\n+      svfloat64_t x4 = svmul_x (svptrue_b64 (), x2, x2);\n+      /* Order-17 Pairwise Horner scheme.  */\n+      svfloat64_t c13 = svld1rq (svptrue_b64 (), &d->c1);\n+      svfloat64_t c57 = svld1rq (svptrue_b64 (), &d->c5);\n+      svfloat64_t c911 = svld1rq (svptrue_b64 (), &d->c9);\n+      svfloat64_t c1315 = svld1rq (svptrue_b64 (), &d->c13);\n+\n+      svfloat64_t p01 = svmla_lane (sv_f64 (d->even_coeffs[0]), x2, c13, 0);\n+      svfloat64_t p23 = svmla_lane (sv_f64 (d->even_coeffs[1]), x2, c13, 1);\n+      svfloat64_t p45 = svmla_lane (sv_f64 (d->even_coeffs[2]), x2, c57, 0);\n+      svfloat64_t p67 = svmla_lane (sv_f64 (d->even_coeffs[3]), x2, c57, 1);\n+      svfloat64_t p89 = svmla_lane (sv_f64 (d->even_coeffs[4]), x2, c911, 0);\n+      svfloat64_t p1011 = svmla_lane (sv_f64 (d->even_coeffs[5]), x2, c911, 1);\n+      svfloat64_t p1213\n+\t  = svmla_lane (sv_f64 (d->even_coeffs[6]), x2, c1315, 0);\n+      svfloat64_t p1415\n+\t  = svmla_lane (sv_f64 (d->even_coeffs[7]), x2, c1315, 1);\n+      svfloat64_t p1617 = svmla_x (pg, sv_f64 (d->even_coeffs[8]), x2, d->c17);\n+\n+      svfloat64_t p = svmla_x (pg, p1415, x4, p1617);\n+      p = svmla_x (pg, p1213, x4, p);\n+      p = svmla_x (pg, p1011, x4, p);\n+      p = svmla_x (pg, p89, x4, p);\n+\n+      p = svmla_x (pg, p67, x4, p);\n+      p = svmla_x (pg, p45, x4, p);\n+\n+      p = svmla_x (pg, p23, x4, p);\n+\n+      p = svmla_x (pg, p01, x4, p);\n+\n+      option_2 = svmla_x (pg, ax, p, svmul_x (svptrue_b64 (), x2, ax));\n     }\n \n-  /* Choose the right option for each lane.  */\n-  svfloat64_t y = svsel (ge1, option_1, option_2);\n-\n   if (__glibc_unlikely (svptest_any (pg, special)))\n     return special_case (\n-\tx, svreinterpret_f64 (sveor_x (pg, svreinterpret_u64 (y), sign)),\n+\tx,\n+\tsvreinterpret_f64 (sveor_x (\n+\t    pg, svreinterpret_u64 (svsel (ge1, option_1, option_2)), sign)),\n \tspecial);\n+\n+  /* Choose the right option for each lane.  */\n+  svfloat64_t y = svsel (ge1, option_1, option_2);\n   return svreinterpret_f64 (sveor_x (pg, svreinterpret_u64 (y), sign));\n }\n\ncommit 4b0bb84eb7e52a135c873fd9d0fc6c30599aedf4\nAuthor: Luna Lamb <luna.lamb@arm.com>\nDate:   Thu Feb 13 17:54:46 2025 +0000\n\n    Aarch64: Improve codegen in SVE exp and users, and update expf_inline\n    \n    Use unpredicted muls, and improve memory access.\n    7%, 3% and 1% improvement in throughput microbenchmark on Neoverse V1,\n    for exp, exp2 and cosh respectively.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit c0ff447edf19bd4630fe79adf5e8b896405b059f)\n\ndiff --git a/sysdeps/aarch64/fpu/cosh_sve.c b/sysdeps/aarch64/fpu/cosh_sve.c\nindex 919f34604a..e375dd8a34 100644\n--- a/sysdeps/aarch64/fpu/cosh_sve.c\n+++ b/sysdeps/aarch64/fpu/cosh_sve.c\n@@ -23,7 +23,7 @@ static const struct data\n {\n   float64_t poly[3];\n   float64_t inv_ln2, ln2_hi, ln2_lo, shift, thres;\n-  uint64_t index_mask, special_bound;\n+  uint64_t special_bound;\n } data = {\n   .poly = { 0x1.fffffffffffd4p-2, 0x1.5555571d6b68cp-3,\n \t    0x1.5555576a59599p-5, },\n@@ -35,14 +35,16 @@ static const struct data\n   .shift = 0x1.8p+52,\n   .thres = 704.0,\n \n-  .index_mask = 0xff,\n   /* 0x1.6p9, above which exp overflows.  */\n   .special_bound = 0x4086000000000000,\n };\n \n static svfloat64_t NOINLINE\n-special_case (svfloat64_t x, svfloat64_t y, svbool_t special)\n+special_case (svfloat64_t x, svbool_t pg, svfloat64_t t, svbool_t special)\n {\n+  svfloat64_t half_t = svmul_x (svptrue_b64 (), t, 0.5);\n+  svfloat64_t half_over_t = svdivr_x (pg, t, 0.5);\n+  svfloat64_t y = svadd_x (pg, half_t, half_over_t);\n   return sv_call_f64 (cosh, x, y, special);\n }\n \n@@ -60,12 +62,12 @@ exp_inline (svfloat64_t x, const svbool_t pg, const struct data *d)\n \n   svuint64_t u = svreinterpret_u64 (z);\n   svuint64_t e = svlsl_x (pg, u, 52 - V_EXP_TAIL_TABLE_BITS);\n-  svuint64_t i = svand_x (pg, u, d->index_mask);\n+  svuint64_t i = svand_x (svptrue_b64 (), u, 0xff);\n \n   svfloat64_t y = svmla_x (pg, sv_f64 (d->poly[1]), r, d->poly[2]);\n   y = svmla_x (pg, sv_f64 (d->poly[0]), r, y);\n   y = svmla_x (pg, sv_f64 (1.0), r, y);\n-  y = svmul_x (pg, r, y);\n+  y = svmul_x (svptrue_b64 (), r, y);\n \n   /* s = 2^(n/N).  */\n   u = svld1_gather_index (pg, __v_exp_tail_data, i);\n@@ -94,12 +96,12 @@ svfloat64_t SV_NAME_D1 (cosh) (svfloat64_t x, const svbool_t pg)\n   /* Up to the point that exp overflows, we can use it to calculate cosh by\n      exp(|x|) / 2 + 1 / (2 * exp(|x|)).  */\n   svfloat64_t t = exp_inline (ax, pg, d);\n-  svfloat64_t half_t = svmul_x (pg, t, 0.5);\n-  svfloat64_t half_over_t = svdivr_x (pg, t, 0.5);\n \n   /* Fall back to scalar for any special cases.  */\n   if (__glibc_unlikely (svptest_any (pg, special)))\n-    return special_case (x, svadd_x (pg, half_t, half_over_t), special);\n+    return special_case (x, pg, t, special);\n \n+  svfloat64_t half_t = svmul_x (svptrue_b64 (), t, 0.5);\n+  svfloat64_t half_over_t = svdivr_x (pg, t, 0.5);\n   return svadd_x (pg, half_t, half_over_t);\n }\ndiff --git a/sysdeps/aarch64/fpu/exp10_sve.c b/sysdeps/aarch64/fpu/exp10_sve.c\nindex ddf64708cb..bfd3fb9e19 100644\n--- a/sysdeps/aarch64/fpu/exp10_sve.c\n+++ b/sysdeps/aarch64/fpu/exp10_sve.c\n@@ -18,21 +18,23 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include \"sv_math.h\"\n-#include \"poly_sve_f64.h\"\n \n #define SpecialBound 307.0 /* floor (log10 (2^1023)).  */\n \n static const struct data\n {\n-  double poly[5];\n+  double c1, c3, c2, c4, c0;\n   double shift, log10_2, log2_10_hi, log2_10_lo, scale_thres, special_bound;\n } data = {\n   /* Coefficients generated using Remez algorithm.\n      rel error: 0x1.9fcb9b3p-60\n      abs error: 0x1.a20d9598p-60 in [ -log10(2)/128, log10(2)/128 ]\n      max ulp err 0.52 +0.5.  */\n-  .poly = { 0x1.26bb1bbb55516p1, 0x1.53524c73cd32ap1, 0x1.0470591daeafbp1,\n-\t    0x1.2bd77b1361ef6p0, 0x1.142b5d54e9621p-1 },\n+  .c0 = 0x1.26bb1bbb55516p1,\n+  .c1 = 0x1.53524c73cd32ap1,\n+  .c2 = 0x1.0470591daeafbp1,\n+  .c3 = 0x1.2bd77b1361ef6p0,\n+  .c4 = 0x1.142b5d54e9621p-1,\n   /* 1.5*2^46+1023. This value is further explained below.  */\n   .shift = 0x1.800000000ffc0p+46,\n   .log10_2 = 0x1.a934f0979a371p1,     /* 1/log2(10).  */\n@@ -70,9 +72,9 @@ special_case (svbool_t pg, svfloat64_t s, svfloat64_t y, svfloat64_t n,\n   /* |n| > 1280 => 2^(n) overflows.  */\n   svbool_t p_cmp = svacgt (pg, n, d->scale_thres);\n \n-  svfloat64_t r1 = svmul_x (pg, s1, s1);\n+  svfloat64_t r1 = svmul_x (svptrue_b64 (), s1, s1);\n   svfloat64_t r2 = svmla_x (pg, s2, s2, y);\n-  svfloat64_t r0 = svmul_x (pg, r2, s1);\n+  svfloat64_t r0 = svmul_x (svptrue_b64 (), r2, s1);\n \n   return svsel (p_cmp, r1, r0);\n }\n@@ -103,11 +105,14 @@ svfloat64_t SV_NAME_D1 (exp10) (svfloat64_t x, svbool_t pg)\n      comes at significant performance cost.  */\n   svuint64_t u = svreinterpret_u64 (z);\n   svfloat64_t scale = svexpa (u);\n-\n+  svfloat64_t c24 = svld1rq (svptrue_b64 (), &d->c2);\n   /* Approximate exp10(r) using polynomial.  */\n-  svfloat64_t r2 = svmul_x (pg, r, r);\n-  svfloat64_t y = svmla_x (pg, svmul_x (pg, r, d->poly[0]), r2,\n-\t\t\t   sv_pairwise_poly_3_f64_x (pg, r, r2, d->poly + 1));\n+  svfloat64_t r2 = svmul_x (svptrue_b64 (), r, r);\n+  svfloat64_t p12 = svmla_lane (sv_f64 (d->c1), r, c24, 0);\n+  svfloat64_t p34 = svmla_lane (sv_f64 (d->c3), r, c24, 1);\n+  svfloat64_t p14 = svmla_x (pg, p12, p34, r2);\n+\n+  svfloat64_t y = svmla_x (pg, svmul_x (svptrue_b64 (), r, d->c0), r2, p14);\n \n   /* Assemble result as exp10(x) = 2^n * exp10(r).  If |x| > SpecialBound\n      multiplication may overflow, so use special case routine.  */\ndiff --git a/sysdeps/aarch64/fpu/exp2_sve.c b/sysdeps/aarch64/fpu/exp2_sve.c\nindex 22848ebfa5..5dfb77cdbc 100644\n--- a/sysdeps/aarch64/fpu/exp2_sve.c\n+++ b/sysdeps/aarch64/fpu/exp2_sve.c\n@@ -18,7 +18,6 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include \"sv_math.h\"\n-#include \"poly_sve_f64.h\"\n \n #define N (1 << V_EXP_TABLE_BITS)\n \n@@ -27,15 +26,15 @@\n \n static const struct data\n {\n-  double poly[4];\n+  double c0, c2;\n+  double c1, c3;\n   double shift, big_bound, uoflow_bound;\n } data = {\n   /* Coefficients are computed using Remez algorithm with\n      minimisation of the absolute error.  */\n-  .poly = { 0x1.62e42fefa3686p-1, 0x1.ebfbdff82c241p-3, 0x1.c6b09b16de99ap-5,\n-\t    0x1.3b2abf5571ad8p-7 },\n-  .shift = 0x1.8p52 / N,\n-  .uoflow_bound = UOFlowBound,\n+  .c0 = 0x1.62e42fefa3686p-1, .c1 = 0x1.ebfbdff82c241p-3,\n+  .c2 = 0x1.c6b09b16de99ap-5, .c3 = 0x1.3b2abf5571ad8p-7,\n+  .shift = 0x1.8p52 / N,      .uoflow_bound = UOFlowBound,\n   .big_bound = BigBound,\n };\n \n@@ -67,9 +66,9 @@ special_case (svbool_t pg, svfloat64_t s, svfloat64_t y, svfloat64_t n,\n   /* |n| > 1280 => 2^(n) overflows.  */\n   svbool_t p_cmp = svacgt (pg, n, d->uoflow_bound);\n \n-  svfloat64_t r1 = svmul_x (pg, s1, s1);\n+  svfloat64_t r1 = svmul_x (svptrue_b64 (), s1, s1);\n   svfloat64_t r2 = svmla_x (pg, s2, s2, y);\n-  svfloat64_t r0 = svmul_x (pg, r2, s1);\n+  svfloat64_t r0 = svmul_x (svptrue_b64 (), r2, s1);\n \n   return svsel (p_cmp, r1, r0);\n }\n@@ -99,11 +98,14 @@ svfloat64_t SV_NAME_D1 (exp2) (svfloat64_t x, svbool_t pg)\n   svuint64_t top = svlsl_x (pg, ki, 52 - V_EXP_TABLE_BITS);\n   svfloat64_t scale = svreinterpret_f64 (svadd_x (pg, sbits, top));\n \n+  svfloat64_t c13 = svld1rq (svptrue_b64 (), &d->c1);\n   /* Approximate exp2(r) using polynomial.  */\n-  svfloat64_t r2 = svmul_x (pg, r, r);\n-  svfloat64_t p = sv_pairwise_poly_3_f64_x (pg, r, r2, d->poly);\n-  svfloat64_t y = svmul_x (pg, r, p);\n-\n+  /* y = exp2(r) - 1 ~= C0 r + C1 r^2 + C2 r^3 + C3 r^4.  */\n+  svfloat64_t r2 = svmul_x (svptrue_b64 (), r, r);\n+  svfloat64_t p01 = svmla_lane (sv_f64 (d->c0), r, c13, 0);\n+  svfloat64_t p23 = svmla_lane (sv_f64 (d->c2), r, c13, 1);\n+  svfloat64_t p = svmla_x (pg, p01, p23, r2);\n+  svfloat64_t y = svmul_x (svptrue_b64 (), r, p);\n   /* Assemble exp2(x) = exp2(r) * scale.  */\n   if (__glibc_unlikely (svptest_any (pg, special)))\n     return special_case (pg, scale, y, kd, d);\ndiff --git a/sysdeps/aarch64/fpu/exp_sve.c b/sysdeps/aarch64/fpu/exp_sve.c\nindex aabaaa1d61..b2421d493f 100644\n--- a/sysdeps/aarch64/fpu/exp_sve.c\n+++ b/sysdeps/aarch64/fpu/exp_sve.c\n@@ -21,12 +21,15 @@\n \n static const struct data\n {\n-  double poly[4];\n+  double c0, c2;\n+  double c1, c3;\n   double ln2_hi, ln2_lo, inv_ln2, shift, thres;\n+\n } data = {\n-  .poly = { /* ulp error: 0.53.  */\n-\t    0x1.fffffffffdbcdp-2, 0x1.555555555444cp-3, 0x1.555573c6a9f7dp-5,\n-\t    0x1.1111266d28935p-7 },\n+  .c0 = 0x1.fffffffffdbcdp-2,\n+  .c1 = 0x1.555555555444cp-3,\n+  .c2 = 0x1.555573c6a9f7dp-5,\n+  .c3 = 0x1.1111266d28935p-7,\n   .ln2_hi = 0x1.62e42fefa3800p-1,\n   .ln2_lo = 0x1.ef35793c76730p-45,\n   /* 1/ln2.  */\n@@ -36,7 +39,6 @@ static const struct data\n   .thres = 704.0,\n };\n \n-#define C(i) sv_f64 (d->poly[i])\n #define SpecialOffset 0x6000000000000000 /* 0x1p513.  */\n /* SpecialBias1 + SpecialBias1 = asuint(1.0).  */\n #define SpecialBias1 0x7000000000000000 /* 0x1p769.  */\n@@ -56,20 +58,20 @@ special_case (svbool_t pg, svfloat64_t s, svfloat64_t y, svfloat64_t n)\n   svuint64_t b\n       = svdup_u64_z (p_sign, SpecialOffset); /* Inactive lanes set to 0.  */\n \n-  /* Set s1 to generate overflow depending on sign of exponent n.  */\n-  svfloat64_t s1 = svreinterpret_f64 (\n-      svsubr_x (pg, b, SpecialBias1)); /* 0x70...0 - b.  */\n-  /* Offset s to avoid overflow in final result if n is below threshold.  */\n+  /* Set s1 to generate overflow depending on sign of exponent n,\n+     ie. s1 = 0x70...0 - b.  */\n+  svfloat64_t s1 = svreinterpret_f64 (svsubr_x (pg, b, SpecialBias1));\n+  /* Offset s to avoid overflow in final result if n is below threshold.\n+     ie. s2 = as_u64 (s) - 0x3010...0 + b.  */\n   svfloat64_t s2 = svreinterpret_f64 (\n-      svadd_x (pg, svsub_x (pg, svreinterpret_u64 (s), SpecialBias2),\n-\t       b)); /* as_u64 (s) - 0x3010...0 + b.  */\n+      svadd_x (pg, svsub_x (pg, svreinterpret_u64 (s), SpecialBias2), b));\n \n   /* |n| > 1280 => 2^(n) overflows.  */\n   svbool_t p_cmp = svacgt (pg, n, 1280.0);\n \n-  svfloat64_t r1 = svmul_x (pg, s1, s1);\n+  svfloat64_t r1 = svmul_x (svptrue_b64 (), s1, s1);\n   svfloat64_t r2 = svmla_x (pg, s2, s2, y);\n-  svfloat64_t r0 = svmul_x (pg, r2, s1);\n+  svfloat64_t r0 = svmul_x (svptrue_b64 (), r2, s1);\n \n   return svsel (p_cmp, r1, r0);\n }\n@@ -103,16 +105,16 @@ svfloat64_t SV_NAME_D1 (exp) (svfloat64_t x, const svbool_t pg)\n   svfloat64_t z = svmla_x (pg, sv_f64 (d->shift), x, d->inv_ln2);\n   svuint64_t u = svreinterpret_u64 (z);\n   svfloat64_t n = svsub_x (pg, z, d->shift);\n-\n+  svfloat64_t c13 = svld1rq (svptrue_b64 (), &d->c1);\n   /* r = x - n * ln2, r is in [-ln2/(2N), ln2/(2N)].  */\n   svfloat64_t ln2 = svld1rq (svptrue_b64 (), &d->ln2_hi);\n   svfloat64_t r = svmls_lane (x, n, ln2, 0);\n   r = svmls_lane (r, n, ln2, 1);\n \n   /* y = exp(r) - 1 ~= r + C0 r^2 + C1 r^3 + C2 r^4 + C3 r^5.  */\n-  svfloat64_t r2 = svmul_x (pg, r, r);\n-  svfloat64_t p01 = svmla_x (pg, C (0), C (1), r);\n-  svfloat64_t p23 = svmla_x (pg, C (2), C (3), r);\n+  svfloat64_t r2 = svmul_x (svptrue_b64 (), r, r);\n+  svfloat64_t p01 = svmla_lane (sv_f64 (d->c0), r, c13, 0);\n+  svfloat64_t p23 = svmla_lane (sv_f64 (d->c2), r, c13, 1);\n   svfloat64_t p04 = svmla_x (pg, p01, p23, r2);\n   svfloat64_t y = svmla_x (pg, r, p04, r2);\n \ndiff --git a/sysdeps/aarch64/fpu/sv_expf_inline.h b/sysdeps/aarch64/fpu/sv_expf_inline.h\nindex 6166df6553..75781fb4dd 100644\n--- a/sysdeps/aarch64/fpu/sv_expf_inline.h\n+++ b/sysdeps/aarch64/fpu/sv_expf_inline.h\n@@ -61,7 +61,7 @@ expf_inline (svfloat32_t x, const svbool_t pg, const struct sv_expf_data *d)\n   /* scale = 2^(n/N).  */\n   svfloat32_t scale = svexpa (svreinterpret_u32 (z));\n \n-  /* y = exp(r) - 1 ~= r + C0 r^2 + C1 r^3 + C2 r^4 + C3 r^5 + C4 r^6.  */\n+  /* poly(r) = exp(r) - 1 ~= C0 r + C1 r^2 + C2 r^3 + C3 r^4 + C4 r^5.  */\n   svfloat32_t p12 = svmla_lane (sv_f32 (d->c1), r, lane_consts, 2);\n   svfloat32_t p34 = svmla_lane (sv_f32 (d->c3), r, lane_consts, 3);\n   svfloat32_t r2 = svmul_x (svptrue_b32 (), r, r);\n@@ -71,5 +71,4 @@ expf_inline (svfloat32_t x, const svbool_t pg, const struct sv_expf_data *d)\n \n   return svmla_x (pg, scale, scale, poly);\n }\n-\n #endif\n\ncommit 194185c28954dfa11a6ded8b32f34fee680d3218\nAuthor: Yat Long Poon <yatlong.poon@arm.com>\nDate:   Thu Feb 13 18:00:50 2025 +0000\n\n    AArch64: Improve codegen for SVE erfcf\n    \n    Reduce number of MOV/MOVPRFXs and use unpredicated FMUL.\n    Replace MUL with LSL.  Speedup on Neoverse V1: 6%.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit f5ff34cb3c75ec1061c75bb9188b3c1176426947)\n\ndiff --git a/sysdeps/aarch64/fpu/erfcf_sve.c b/sysdeps/aarch64/fpu/erfcf_sve.c\nindex ecacb933ac..e4869263e3 100644\n--- a/sysdeps/aarch64/fpu/erfcf_sve.c\n+++ b/sysdeps/aarch64/fpu/erfcf_sve.c\n@@ -76,7 +76,7 @@ svfloat32_t SV_NAME_F1 (erfc) (svfloat32_t x, const svbool_t pg)\n   svuint32_t i = svqadd (svreinterpret_u32 (z), dat->off_idx);\n \n   /* Lookup erfc(r) and 2/sqrt(pi)*exp(-r^2) in tables.  */\n-  i = svmul_x (pg, i, 2);\n+  i = svlsl_x (svptrue_b32 (), i, 1);\n   const float32_t *p = &__v_erfcf_data.tab[0].erfc - 2 * dat->off_arr;\n   svfloat32_t erfcr = svld1_gather_index (pg, p, i);\n   svfloat32_t scale = svld1_gather_index (pg, p + 1, i);\n@@ -84,15 +84,15 @@ svfloat32_t SV_NAME_F1 (erfc) (svfloat32_t x, const svbool_t pg)\n   /* erfc(x) ~ erfc(r) - scale * d * poly(r, d).  */\n   svfloat32_t r = svsub_x (pg, z, shift);\n   svfloat32_t d = svsub_x (pg, a, r);\n-  svfloat32_t d2 = svmul_x (pg, d, d);\n-  svfloat32_t r2 = svmul_x (pg, r, r);\n+  svfloat32_t d2 = svmul_x (svptrue_b32 (), d, d);\n+  svfloat32_t r2 = svmul_x (svptrue_b32 (), r, r);\n \n   svfloat32_t coeffs = svld1rq (svptrue_b32 (), &dat->third);\n-  svfloat32_t third = svdup_lane (coeffs, 0);\n \n   svfloat32_t p1 = r;\n-  svfloat32_t p2 = svmls_lane (third, r2, coeffs, 1);\n-  svfloat32_t p3 = svmul_x (pg, r, svmla_lane (sv_f32 (-0.5), r2, coeffs, 0));\n+  svfloat32_t p2 = svmls_lane (sv_f32 (dat->third), r2, coeffs, 1);\n+  svfloat32_t p3\n+      = svmul_x (svptrue_b32 (), r, svmla_lane (sv_f32 (-0.5), r2, coeffs, 0));\n   svfloat32_t p4 = svmla_lane (sv_f32 (dat->two_over_five), r2, coeffs, 2);\n   p4 = svmls_x (pg, sv_f32 (dat->tenth), r2, p4);\n \n\ncommit 7dc549c5a4af3c32689147550144397116404d22\nAuthor: Yat Long Poon <yatlong.poon@arm.com>\nDate:   Thu Feb 13 18:02:01 2025 +0000\n\n    AArch64: Improve codegen for SVE pow\n    \n    Move constants to struct.  Improve memory access with indexed/unpredicated\n    instructions.  Eliminate register spills.  Speedup on Neoverse V1: 24%.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit 0b195651db3ae793187c7dd6d78b5a7a8da9d5e6)\n\ndiff --git a/sysdeps/aarch64/fpu/pow_sve.c b/sysdeps/aarch64/fpu/pow_sve.c\nindex 4c0bf8956c..4242d22a49 100644\n--- a/sysdeps/aarch64/fpu/pow_sve.c\n+++ b/sysdeps/aarch64/fpu/pow_sve.c\n@@ -44,19 +44,18 @@\n \n /* Data is defined in v_pow_log_data.c.  */\n #define N_LOG (1 << V_POW_LOG_TABLE_BITS)\n-#define A __v_pow_log_data.poly\n #define Off 0x3fe6955500000000\n \n /* Data is defined in v_pow_exp_data.c.  */\n #define N_EXP (1 << V_POW_EXP_TABLE_BITS)\n #define SignBias (0x800 << V_POW_EXP_TABLE_BITS)\n-#define C __v_pow_exp_data.poly\n #define SmallExp 0x3c9 /* top12(0x1p-54).  */\n #define BigExp 0x408   /* top12(512.).  */\n #define ThresExp 0x03f /* BigExp - SmallExp.  */\n #define HugeExp 0x409  /* top12(1024.).  */\n \n /* Constants associated with pow.  */\n+#define SmallBoundX 0x1p-126\n #define SmallPowX 0x001 /* top12(0x1p-126).  */\n #define BigPowX 0x7ff\t/* top12(INFINITY).  */\n #define ThresPowX 0x7fe /* BigPowX - SmallPowX.  */\n@@ -64,6 +63,31 @@\n #define BigPowY 0x43e\t/* top12(0x1.749p62).  */\n #define ThresPowY 0x080 /* BigPowY - SmallPowY.  */\n \n+static const struct data\n+{\n+  double log_c0, log_c2, log_c4, log_c6, ln2_hi, ln2_lo;\n+  double log_c1, log_c3, log_c5, off;\n+  double n_over_ln2, exp_c2, ln2_over_n_hi, ln2_over_n_lo;\n+  double exp_c0, exp_c1;\n+} data = {\n+  .log_c0 = -0x1p-1,\n+  .log_c1 = -0x1.555555555556p-1,\n+  .log_c2 = 0x1.0000000000006p-1,\n+  .log_c3 = 0x1.999999959554ep-1,\n+  .log_c4 = -0x1.555555529a47ap-1,\n+  .log_c5 = -0x1.2495b9b4845e9p0,\n+  .log_c6 = 0x1.0002b8b263fc3p0,\n+  .off = Off,\n+  .exp_c0 = 0x1.fffffffffffd4p-2,\n+  .exp_c1 = 0x1.5555571d6ef9p-3,\n+  .exp_c2 = 0x1.5555576a5adcep-5,\n+  .ln2_hi = 0x1.62e42fefa3800p-1,\n+  .ln2_lo = 0x1.ef35793c76730p-45,\n+  .n_over_ln2 = 0x1.71547652b82fep0 * N_EXP,\n+  .ln2_over_n_hi = 0x1.62e42fefc0000p-9,\n+  .ln2_over_n_lo = -0x1.c610ca86c3899p-45,\n+};\n+\n /* Check if x is an integer.  */\n static inline svbool_t\n sv_isint (svbool_t pg, svfloat64_t x)\n@@ -82,7 +106,7 @@ sv_isnotint (svbool_t pg, svfloat64_t x)\n static inline svbool_t\n sv_isodd (svbool_t pg, svfloat64_t x)\n {\n-  svfloat64_t y = svmul_x (pg, x, 0.5);\n+  svfloat64_t y = svmul_x (svptrue_b64 (), x, 0.5);\n   return sv_isnotint (pg, y);\n }\n \n@@ -121,7 +145,7 @@ zeroinfnan (uint64_t i)\n static inline svbool_t\n sv_zeroinfnan (svbool_t pg, svuint64_t i)\n {\n-  return svcmpge (pg, svsub_x (pg, svmul_x (pg, i, 2), 1),\n+  return svcmpge (pg, svsub_x (pg, svadd_x (pg, i, i), 1),\n \t\t  2 * asuint64 (INFINITY) - 1);\n }\n \n@@ -174,16 +198,17 @@ sv_call_specialcase (svfloat64_t x1, svuint64_t u1, svuint64_t u2,\n    additional 15 bits precision.  IX is the bit representation of x, but\n    normalized in the subnormal range using the sign bit for the exponent.  */\n static inline svfloat64_t\n-sv_log_inline (svbool_t pg, svuint64_t ix, svfloat64_t *tail)\n+sv_log_inline (svbool_t pg, svuint64_t ix, svfloat64_t *tail,\n+\t       const struct data *d)\n {\n   /* x = 2^k z; where z is in range [Off,2*Off) and exact.\n      The range is split into N subintervals.\n      The ith subinterval contains z and c is near its center.  */\n-  svuint64_t tmp = svsub_x (pg, ix, Off);\n+  svuint64_t tmp = svsub_x (pg, ix, d->off);\n   svuint64_t i = svand_x (pg, svlsr_x (pg, tmp, 52 - V_POW_LOG_TABLE_BITS),\n \t\t\t  sv_u64 (N_LOG - 1));\n   svint64_t k = svasr_x (pg, svreinterpret_s64 (tmp), 52);\n-  svuint64_t iz = svsub_x (pg, ix, svand_x (pg, tmp, sv_u64 (0xfffULL << 52)));\n+  svuint64_t iz = svsub_x (pg, ix, svlsl_x (pg, svreinterpret_u64 (k), 52));\n   svfloat64_t z = svreinterpret_f64 (iz);\n   svfloat64_t kd = svcvt_f64_x (pg, k);\n \n@@ -199,40 +224,85 @@ sv_log_inline (svbool_t pg, svuint64_t ix, svfloat64_t *tail)\n      |z/c - 1| < 1/N, so r = z/c - 1 is exactly representible.  */\n   svfloat64_t r = svmad_x (pg, z, invc, -1.0);\n   /* k*Ln2 + log(c) + r.  */\n-  svfloat64_t t1 = svmla_x (pg, logc, kd, __v_pow_log_data.ln2_hi);\n+\n+  svfloat64_t ln2_hilo = svld1rq_f64 (svptrue_b64 (), &d->ln2_hi);\n+  svfloat64_t t1 = svmla_lane_f64 (logc, kd, ln2_hilo, 0);\n   svfloat64_t t2 = svadd_x (pg, t1, r);\n-  svfloat64_t lo1 = svmla_x (pg, logctail, kd, __v_pow_log_data.ln2_lo);\n+  svfloat64_t lo1 = svmla_lane_f64 (logctail, kd, ln2_hilo, 1);\n   svfloat64_t lo2 = svadd_x (pg, svsub_x (pg, t1, t2), r);\n \n   /* Evaluation is optimized assuming superscalar pipelined execution.  */\n-  svfloat64_t ar = svmul_x (pg, r, -0.5); /* A[0] = -0.5.  */\n-  svfloat64_t ar2 = svmul_x (pg, r, ar);\n-  svfloat64_t ar3 = svmul_x (pg, r, ar2);\n+\n+  svfloat64_t log_c02 = svld1rq_f64 (svptrue_b64 (), &d->log_c0);\n+  svfloat64_t ar = svmul_lane_f64 (r, log_c02, 0);\n+  svfloat64_t ar2 = svmul_x (svptrue_b64 (), r, ar);\n+  svfloat64_t ar3 = svmul_x (svptrue_b64 (), r, ar2);\n   /* k*Ln2 + log(c) + r + A[0]*r*r.  */\n   svfloat64_t hi = svadd_x (pg, t2, ar2);\n-  svfloat64_t lo3 = svmla_x (pg, svneg_x (pg, ar2), ar, r);\n+  svfloat64_t lo3 = svmls_x (pg, ar2, ar, r);\n   svfloat64_t lo4 = svadd_x (pg, svsub_x (pg, t2, hi), ar2);\n   /* p = log1p(r) - r - A[0]*r*r.  */\n   /* p = (ar3 * (A[1] + r * A[2] + ar2 * (A[3] + r * A[4] + ar2 * (A[5] + r *\n      A[6])))).  */\n-  svfloat64_t a56 = svmla_x (pg, sv_f64 (A[5]), r, A[6]);\n-  svfloat64_t a34 = svmla_x (pg, sv_f64 (A[3]), r, A[4]);\n-  svfloat64_t a12 = svmla_x (pg, sv_f64 (A[1]), r, A[2]);\n+\n+  svfloat64_t log_c46 = svld1rq_f64 (svptrue_b64 (), &d->log_c4);\n+  svfloat64_t a56 = svmla_lane_f64 (sv_f64 (d->log_c5), r, log_c46, 1);\n+  svfloat64_t a34 = svmla_lane_f64 (sv_f64 (d->log_c3), r, log_c46, 0);\n+  svfloat64_t a12 = svmla_lane_f64 (sv_f64 (d->log_c1), r, log_c02, 1);\n   svfloat64_t p = svmla_x (pg, a34, ar2, a56);\n   p = svmla_x (pg, a12, ar2, p);\n-  p = svmul_x (pg, ar3, p);\n+  p = svmul_x (svptrue_b64 (), ar3, p);\n   svfloat64_t lo = svadd_x (\n-      pg, svadd_x (pg, svadd_x (pg, svadd_x (pg, lo1, lo2), lo3), lo4), p);\n+      pg, svadd_x (pg, svsub_x (pg, svadd_x (pg, lo1, lo2), lo3), lo4), p);\n   svfloat64_t y = svadd_x (pg, hi, lo);\n   *tail = svadd_x (pg, svsub_x (pg, hi, y), lo);\n   return y;\n }\n \n+static inline svfloat64_t\n+sv_exp_core (svbool_t pg, svfloat64_t x, svfloat64_t xtail,\n+\t     svuint64_t sign_bias, svfloat64_t *tmp, svuint64_t *sbits,\n+\t     svuint64_t *ki, const struct data *d)\n+{\n+  /* exp(x) = 2^(k/N) * exp(r), with exp(r) in [2^(-1/2N),2^(1/2N)].  */\n+  /* x = ln2/N*k + r, with int k and r in [-ln2/2N, ln2/2N].  */\n+  svfloat64_t n_over_ln2_and_c2 = svld1rq_f64 (svptrue_b64 (), &d->n_over_ln2);\n+  svfloat64_t z = svmul_lane_f64 (x, n_over_ln2_and_c2, 0);\n+  /* z - kd is in [-1, 1] in non-nearest rounding modes.  */\n+  svfloat64_t kd = svrinta_x (pg, z);\n+  *ki = svreinterpret_u64 (svcvt_s64_x (pg, kd));\n+\n+  svfloat64_t ln2_over_n_hilo\n+      = svld1rq_f64 (svptrue_b64 (), &d->ln2_over_n_hi);\n+  svfloat64_t r = x;\n+  r = svmls_lane_f64 (r, kd, ln2_over_n_hilo, 0);\n+  r = svmls_lane_f64 (r, kd, ln2_over_n_hilo, 1);\n+  /* The code assumes 2^-200 < |xtail| < 2^-8/N.  */\n+  r = svadd_x (pg, r, xtail);\n+  /* 2^(k/N) ~= scale.  */\n+  svuint64_t idx = svand_x (pg, *ki, N_EXP - 1);\n+  svuint64_t top\n+      = svlsl_x (pg, svadd_x (pg, *ki, sign_bias), 52 - V_POW_EXP_TABLE_BITS);\n+  /* This is only a valid scale when -1023*N < k < 1024*N.  */\n+  *sbits = svld1_gather_index (pg, __v_pow_exp_data.sbits, idx);\n+  *sbits = svadd_x (pg, *sbits, top);\n+  /* exp(x) = 2^(k/N) * exp(r) ~= scale + scale * (exp(r) - 1).  */\n+  svfloat64_t r2 = svmul_x (svptrue_b64 (), r, r);\n+  *tmp = svmla_lane_f64 (sv_f64 (d->exp_c1), r, n_over_ln2_and_c2, 1);\n+  *tmp = svmla_x (pg, sv_f64 (d->exp_c0), r, *tmp);\n+  *tmp = svmla_x (pg, r, r2, *tmp);\n+  svfloat64_t scale = svreinterpret_f64 (*sbits);\n+  /* Note: tmp == 0 or |tmp| > 2^-200 and scale > 2^-739, so there\n+     is no spurious underflow here even without fma.  */\n+  z = svmla_x (pg, scale, scale, *tmp);\n+  return z;\n+}\n+\n /* Computes sign*exp(x+xtail) where |xtail| < 2^-8/N and |xtail| <= |x|.\n    The sign_bias argument is SignBias or 0 and sets the sign to -1 or 1.  */\n static inline svfloat64_t\n sv_exp_inline (svbool_t pg, svfloat64_t x, svfloat64_t xtail,\n-\t       svuint64_t sign_bias)\n+\t       svuint64_t sign_bias, const struct data *d)\n {\n   /* 3 types of special cases: tiny (uflow and spurious uflow), huge (oflow)\n      and other cases of large values of x (scale * (1 + TMP) oflow).  */\n@@ -240,73 +310,46 @@ sv_exp_inline (svbool_t pg, svfloat64_t x, svfloat64_t xtail,\n   /* |x| is large (|x| >= 512) or tiny (|x| <= 0x1p-54).  */\n   svbool_t uoflow = svcmpge (pg, svsub_x (pg, abstop, SmallExp), ThresExp);\n \n-  /* Conditions special, uflow and oflow are all expressed as uoflow &&\n-     something, hence do not bother computing anything if no lane in uoflow is\n-     true.  */\n-  svbool_t special = svpfalse_b ();\n-  svbool_t uflow = svpfalse_b ();\n-  svbool_t oflow = svpfalse_b ();\n+  svfloat64_t tmp;\n+  svuint64_t sbits, ki;\n   if (__glibc_unlikely (svptest_any (pg, uoflow)))\n     {\n+      svfloat64_t z\n+\t  = sv_exp_core (pg, x, xtail, sign_bias, &tmp, &sbits, &ki, d);\n+\n       /* |x| is tiny (|x| <= 0x1p-54).  */\n-      uflow = svcmpge (pg, svsub_x (pg, abstop, SmallExp), 0x80000000);\n+      svbool_t uflow\n+\t  = svcmpge (pg, svsub_x (pg, abstop, SmallExp), 0x80000000);\n       uflow = svand_z (pg, uoflow, uflow);\n       /* |x| is huge (|x| >= 1024).  */\n-      oflow = svcmpge (pg, abstop, HugeExp);\n+      svbool_t oflow = svcmpge (pg, abstop, HugeExp);\n       oflow = svand_z (pg, uoflow, svbic_z (pg, oflow, uflow));\n+\n       /* For large |x| values (512 < |x| < 1024) scale * (1 + TMP) can overflow\n-\t or underflow.  */\n-      special = svbic_z (pg, uoflow, svorr_z (pg, uflow, oflow));\n+    or underflow.  */\n+      svbool_t special = svbic_z (pg, uoflow, svorr_z (pg, uflow, oflow));\n+\n+      /* Update result with special and large cases.  */\n+      z = sv_call_specialcase (tmp, sbits, ki, z, special);\n+\n+      /* Handle underflow and overflow.  */\n+      svbool_t x_is_neg = svcmplt (pg, x, 0);\n+      svuint64_t sign_mask\n+\t  = svlsl_x (pg, sign_bias, 52 - V_POW_EXP_TABLE_BITS);\n+      svfloat64_t res_uoflow\n+\t  = svsel (x_is_neg, sv_f64 (0.0), sv_f64 (INFINITY));\n+      res_uoflow = svreinterpret_f64 (\n+\t  svorr_x (pg, svreinterpret_u64 (res_uoflow), sign_mask));\n+      /* Avoid spurious underflow for tiny x.  */\n+      svfloat64_t res_spurious_uflow\n+\t  = svreinterpret_f64 (svorr_x (pg, sign_mask, 0x3ff0000000000000));\n+\n+      z = svsel (oflow, res_uoflow, z);\n+      z = svsel (uflow, res_spurious_uflow, z);\n+      return z;\n     }\n \n-  /* exp(x) = 2^(k/N) * exp(r), with exp(r) in [2^(-1/2N),2^(1/2N)].  */\n-  /* x = ln2/N*k + r, with int k and r in [-ln2/2N, ln2/2N].  */\n-  svfloat64_t z = svmul_x (pg, x, __v_pow_exp_data.n_over_ln2);\n-  /* z - kd is in [-1, 1] in non-nearest rounding modes.  */\n-  svfloat64_t shift = sv_f64 (__v_pow_exp_data.shift);\n-  svfloat64_t kd = svadd_x (pg, z, shift);\n-  svuint64_t ki = svreinterpret_u64 (kd);\n-  kd = svsub_x (pg, kd, shift);\n-  svfloat64_t r = x;\n-  r = svmls_x (pg, r, kd, __v_pow_exp_data.ln2_over_n_hi);\n-  r = svmls_x (pg, r, kd, __v_pow_exp_data.ln2_over_n_lo);\n-  /* The code assumes 2^-200 < |xtail| < 2^-8/N.  */\n-  r = svadd_x (pg, r, xtail);\n-  /* 2^(k/N) ~= scale.  */\n-  svuint64_t idx = svand_x (pg, ki, N_EXP - 1);\n-  svuint64_t top\n-      = svlsl_x (pg, svadd_x (pg, ki, sign_bias), 52 - V_POW_EXP_TABLE_BITS);\n-  /* This is only a valid scale when -1023*N < k < 1024*N.  */\n-  svuint64_t sbits = svld1_gather_index (pg, __v_pow_exp_data.sbits, idx);\n-  sbits = svadd_x (pg, sbits, top);\n-  /* exp(x) = 2^(k/N) * exp(r) ~= scale + scale * (exp(r) - 1).  */\n-  svfloat64_t r2 = svmul_x (pg, r, r);\n-  svfloat64_t tmp = svmla_x (pg, sv_f64 (C[1]), r, C[2]);\n-  tmp = svmla_x (pg, sv_f64 (C[0]), r, tmp);\n-  tmp = svmla_x (pg, r, r2, tmp);\n-  svfloat64_t scale = svreinterpret_f64 (sbits);\n-  /* Note: tmp == 0 or |tmp| > 2^-200 and scale > 2^-739, so there\n-     is no spurious underflow here even without fma.  */\n-  z = svmla_x (pg, scale, scale, tmp);\n-\n-  /* Update result with special and large cases.  */\n-  if (__glibc_unlikely (svptest_any (pg, special)))\n-    z = sv_call_specialcase (tmp, sbits, ki, z, special);\n-\n-  /* Handle underflow and overflow.  */\n-  svuint64_t sign_bit = svlsr_x (pg, svreinterpret_u64 (x), 63);\n-  svbool_t x_is_neg = svcmpne (pg, sign_bit, 0);\n-  svuint64_t sign_mask = svlsl_x (pg, sign_bias, 52 - V_POW_EXP_TABLE_BITS);\n-  svfloat64_t res_uoflow = svsel (x_is_neg, sv_f64 (0.0), sv_f64 (INFINITY));\n-  res_uoflow = svreinterpret_f64 (\n-      svorr_x (pg, svreinterpret_u64 (res_uoflow), sign_mask));\n-  z = svsel (oflow, res_uoflow, z);\n-  /* Avoid spurious underflow for tiny x.  */\n-  svfloat64_t res_spurious_uflow\n-      = svreinterpret_f64 (svorr_x (pg, sign_mask, 0x3ff0000000000000));\n-  z = svsel (uflow, res_spurious_uflow, z);\n-\n-  return z;\n+  return sv_exp_core (pg, x, xtail, sign_bias, &tmp, &sbits, &ki, d);\n }\n \n static inline double\n@@ -341,47 +384,39 @@ pow_sc (double x, double y)\n \n svfloat64_t SV_NAME_D2 (pow) (svfloat64_t x, svfloat64_t y, const svbool_t pg)\n {\n+  const struct data *d = ptr_barrier (&data);\n+\n   /* This preamble handles special case conditions used in the final scalar\n      fallbacks. It also updates ix and sign_bias, that are used in the core\n      computation too, i.e., exp( y * log (x) ).  */\n   svuint64_t vix0 = svreinterpret_u64 (x);\n   svuint64_t viy0 = svreinterpret_u64 (y);\n-  svuint64_t vtopx0 = svlsr_x (svptrue_b64 (), vix0, 52);\n \n   /* Negative x cases.  */\n-  svuint64_t sign_bit = svlsr_m (pg, vix0, 63);\n-  svbool_t xisneg = svcmpeq (pg, sign_bit, 1);\n+  svbool_t xisneg = svcmplt (pg, x, 0);\n \n   /* Set sign_bias and ix depending on sign of x and nature of y.  */\n-  svbool_t yisnotint_xisneg = svpfalse_b ();\n+  svbool_t yint_or_xpos = pg;\n   svuint64_t sign_bias = sv_u64 (0);\n   svuint64_t vix = vix0;\n-  svuint64_t vtopx1 = vtopx0;\n   if (__glibc_unlikely (svptest_any (pg, xisneg)))\n     {\n       /* Determine nature of y.  */\n-      yisnotint_xisneg = sv_isnotint (xisneg, y);\n-      svbool_t yisint_xisneg = sv_isint (xisneg, y);\n+      yint_or_xpos = sv_isint (xisneg, y);\n       svbool_t yisodd_xisneg = sv_isodd (xisneg, y);\n       /* ix set to abs(ix) if y is integer.  */\n-      vix = svand_m (yisint_xisneg, vix0, 0x7fffffffffffffff);\n-      vtopx1 = svand_m (yisint_xisneg, vtopx0, 0x7ff);\n+      vix = svand_m (yint_or_xpos, vix0, 0x7fffffffffffffff);\n       /* Set to SignBias if x is negative and y is odd.  */\n       sign_bias = svsel (yisodd_xisneg, sv_u64 (SignBias), sv_u64 (0));\n     }\n \n-  /* Special cases of x or y: zero, inf and nan.  */\n-  svbool_t xspecial = sv_zeroinfnan (pg, vix0);\n-  svbool_t yspecial = sv_zeroinfnan (pg, viy0);\n-  svbool_t special = svorr_z (pg, xspecial, yspecial);\n-\n   /* Small cases of x: |x| < 0x1p-126.  */\n-  svuint64_t vabstopx0 = svand_x (pg, vtopx0, 0x7ff);\n-  svbool_t xsmall = svcmplt (pg, vabstopx0, SmallPowX);\n-  if (__glibc_unlikely (svptest_any (pg, xsmall)))\n+  svbool_t xsmall = svaclt (yint_or_xpos, x, SmallBoundX);\n+  if (__glibc_unlikely (svptest_any (yint_or_xpos, xsmall)))\n     {\n       /* Normalize subnormal x so exponent becomes negative.  */\n-      svbool_t topx_is_null = svcmpeq (xsmall, vtopx1, 0);\n+      svuint64_t vtopx = svlsr_x (svptrue_b64 (), vix, 52);\n+      svbool_t topx_is_null = svcmpeq (xsmall, vtopx, 0);\n \n       svuint64_t vix_norm = svreinterpret_u64 (svmul_m (xsmall, x, 0x1p52));\n       vix_norm = svand_m (xsmall, vix_norm, 0x7fffffffffffffff);\n@@ -391,20 +426,24 @@ svfloat64_t SV_NAME_D2 (pow) (svfloat64_t x, svfloat64_t y, const svbool_t pg)\n \n   /* y_hi = log(ix, &y_lo).  */\n   svfloat64_t vlo;\n-  svfloat64_t vhi = sv_log_inline (pg, vix, &vlo);\n+  svfloat64_t vhi = sv_log_inline (yint_or_xpos, vix, &vlo, d);\n \n   /* z = exp(y_hi, y_lo, sign_bias).  */\n-  svfloat64_t vehi = svmul_x (pg, y, vhi);\n-  svfloat64_t velo = svmul_x (pg, y, vlo);\n-  svfloat64_t vemi = svmls_x (pg, vehi, y, vhi);\n-  velo = svsub_x (pg, velo, vemi);\n-  svfloat64_t vz = sv_exp_inline (pg, vehi, velo, sign_bias);\n+  svfloat64_t vehi = svmul_x (svptrue_b64 (), y, vhi);\n+  svfloat64_t vemi = svmls_x (yint_or_xpos, vehi, y, vhi);\n+  svfloat64_t velo = svnmls_x (yint_or_xpos, vemi, y, vlo);\n+  svfloat64_t vz = sv_exp_inline (yint_or_xpos, vehi, velo, sign_bias, d);\n \n   /* Cases of finite y and finite negative x.  */\n-  vz = svsel (yisnotint_xisneg, sv_f64 (__builtin_nan (\"\")), vz);\n+  vz = svsel (yint_or_xpos, vz, sv_f64 (__builtin_nan (\"\")));\n+\n+  /* Special cases of x or y: zero, inf and nan.  */\n+  svbool_t xspecial = sv_zeroinfnan (svptrue_b64 (), vix0);\n+  svbool_t yspecial = sv_zeroinfnan (svptrue_b64 (), viy0);\n+  svbool_t special = svorr_z (svptrue_b64 (), xspecial, yspecial);\n \n   /* Cases of zero/inf/nan x or y.  */\n-  if (__glibc_unlikely (svptest_any (pg, special)))\n+  if (__glibc_unlikely (svptest_any (svptrue_b64 (), special)))\n     vz = sv_call2_f64 (pow_sc, x, y, vz, special);\n \n   return vz;\n\ncommit 06fd8ad78f35a6cc65dc7c6c08ce55faf6ad079d\nAuthor: Yat Long Poon <yatlong.poon@arm.com>\nDate:   Thu Feb 13 18:03:04 2025 +0000\n\n    AArch64: Improve codegen for SVE powf\n    \n    Improve memory access with indexed/unpredicated instructions.\n    Eliminate register spills.  Speedup on Neoverse V1: 3%.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit 95e807209b680257a9afe81a507754f1565dbb4d)\n\ndiff --git a/sysdeps/aarch64/fpu/powf_sve.c b/sysdeps/aarch64/fpu/powf_sve.c\nindex 4f6a142325..08d7019a18 100644\n--- a/sysdeps/aarch64/fpu/powf_sve.c\n+++ b/sysdeps/aarch64/fpu/powf_sve.c\n@@ -26,7 +26,6 @@\n #define Tlogc __v_powf_data.logc\n #define Texp __v_powf_data.scale\n #define SignBias (1 << (V_POWF_EXP2_TABLE_BITS + 11))\n-#define Shift 0x1.8p52\n #define Norm 0x1p23f /* 0x4b000000.  */\n \n /* Overall ULP error bound for pow is 2.6 ulp\n@@ -36,7 +35,7 @@ static const struct data\n   double log_poly[4];\n   double exp_poly[3];\n   float uflow_bound, oflow_bound, small_bound;\n-  uint32_t sign_bias, sign_mask, subnormal_bias, off;\n+  uint32_t sign_bias, subnormal_bias, off;\n } data = {\n   /* rel err: 1.5 * 2^-30. Each coefficients is multiplied the value of\n      V_POWF_EXP2_N.  */\n@@ -53,7 +52,6 @@ static const struct data\n   .small_bound = 0x1p-126f,\n   .off = 0x3f35d000,\n   .sign_bias = SignBias,\n-  .sign_mask = 0x80000000,\n   .subnormal_bias = 0x0b800000, /* 23 << 23.  */\n };\n \n@@ -86,7 +84,7 @@ svisodd (svbool_t pg, svfloat32_t x)\n static inline svbool_t\n sv_zeroinfnan (svbool_t pg, svuint32_t i)\n {\n-  return svcmpge (pg, svsub_x (pg, svmul_x (pg, i, 2u), 1),\n+  return svcmpge (pg, svsub_x (pg, svadd_x (pg, i, i), 1),\n \t\t  2u * 0x7f800000 - 1);\n }\n \n@@ -150,9 +148,14 @@ powf_specialcase (float x, float y, float z)\n }\n \n /* Scalar fallback for special case routines with custom signature.  */\n-static inline svfloat32_t\n-sv_call_powf_sc (svfloat32_t x1, svfloat32_t x2, svfloat32_t y, svbool_t cmp)\n+static svfloat32_t NOINLINE\n+sv_call_powf_sc (svfloat32_t x1, svfloat32_t x2, svfloat32_t y)\n {\n+  /* Special cases of x or y: zero, inf and nan.  */\n+  svbool_t xspecial = sv_zeroinfnan (svptrue_b32 (), svreinterpret_u32 (x1));\n+  svbool_t yspecial = sv_zeroinfnan (svptrue_b32 (), svreinterpret_u32 (x2));\n+  svbool_t cmp = svorr_z (svptrue_b32 (), xspecial, yspecial);\n+\n   svbool_t p = svpfirst (cmp, svpfalse ());\n   while (svptest_any (cmp, p))\n     {\n@@ -182,30 +185,30 @@ sv_powf_core_ext (const svbool_t pg, svuint64_t i, svfloat64_t z, svint64_t k,\n \n   /* Polynomial to approximate log1p(r)/ln2.  */\n   svfloat64_t logx = A (0);\n-  logx = svmla_x (pg, A (1), r, logx);\n-  logx = svmla_x (pg, A (2), r, logx);\n-  logx = svmla_x (pg, A (3), r, logx);\n-  logx = svmla_x (pg, y0, r, logx);\n+  logx = svmad_x (pg, r, logx, A (1));\n+  logx = svmad_x (pg, r, logx, A (2));\n+  logx = svmad_x (pg, r, logx, A (3));\n+  logx = svmad_x (pg, r, logx, y0);\n   *pylogx = svmul_x (pg, y, logx);\n \n   /* z - kd is in [-1, 1] in non-nearest rounding modes.  */\n-  svfloat64_t kd = svadd_x (pg, *pylogx, Shift);\n-  svuint64_t ki = svreinterpret_u64 (kd);\n-  kd = svsub_x (pg, kd, Shift);\n+  svfloat64_t kd = svrinta_x (svptrue_b64 (), *pylogx);\n+  svuint64_t ki = svreinterpret_u64 (svcvt_s64_x (svptrue_b64 (), kd));\n \n   r = svsub_x (pg, *pylogx, kd);\n \n   /* exp2(x) = 2^(k/N) * 2^r ~= s * (C0*r^3 + C1*r^2 + C2*r + 1).  */\n-  svuint64_t t\n-      = svld1_gather_index (pg, Texp, svand_x (pg, ki, V_POWF_EXP2_N - 1));\n-  svuint64_t ski = svadd_x (pg, ki, sign_bias);\n-  t = svadd_x (pg, t, svlsl_x (pg, ski, 52 - V_POWF_EXP2_TABLE_BITS));\n+  svuint64_t t = svld1_gather_index (\n+      svptrue_b64 (), Texp, svand_x (svptrue_b64 (), ki, V_POWF_EXP2_N - 1));\n+  svuint64_t ski = svadd_x (svptrue_b64 (), ki, sign_bias);\n+  t = svadd_x (svptrue_b64 (), t,\n+\t       svlsl_x (svptrue_b64 (), ski, 52 - V_POWF_EXP2_TABLE_BITS));\n   svfloat64_t s = svreinterpret_f64 (t);\n \n   svfloat64_t p = C (0);\n   p = svmla_x (pg, C (1), p, r);\n   p = svmla_x (pg, C (2), p, r);\n-  p = svmla_x (pg, s, p, svmul_x (pg, s, r));\n+  p = svmla_x (pg, s, p, svmul_x (svptrue_b64 (), s, r));\n \n   return p;\n }\n@@ -219,19 +222,16 @@ sv_powf_core (const svbool_t pg, svuint32_t i, svuint32_t iz, svint32_t k,\n {\n   const svbool_t ptrue = svptrue_b64 ();\n \n-  /* Unpack and promote input vectors (pg, y, z, i, k and sign_bias) into two in\n-     order to perform core computation in double precision.  */\n+  /* Unpack and promote input vectors (pg, y, z, i, k and sign_bias) into two\n+   * in order to perform core computation in double precision.  */\n   const svbool_t pg_lo = svunpklo (pg);\n   const svbool_t pg_hi = svunpkhi (pg);\n-  svfloat64_t y_lo = svcvt_f64_x (\n-      ptrue, svreinterpret_f32 (svunpklo (svreinterpret_u32 (y))));\n-  svfloat64_t y_hi = svcvt_f64_x (\n-      ptrue, svreinterpret_f32 (svunpkhi (svreinterpret_u32 (y))));\n-  svfloat32_t z = svreinterpret_f32 (iz);\n-  svfloat64_t z_lo = svcvt_f64_x (\n-      ptrue, svreinterpret_f32 (svunpklo (svreinterpret_u32 (z))));\n-  svfloat64_t z_hi = svcvt_f64_x (\n-      ptrue, svreinterpret_f32 (svunpkhi (svreinterpret_u32 (z))));\n+  svfloat64_t y_lo\n+      = svcvt_f64_x (pg, svreinterpret_f32 (svunpklo (svreinterpret_u32 (y))));\n+  svfloat64_t y_hi\n+      = svcvt_f64_x (pg, svreinterpret_f32 (svunpkhi (svreinterpret_u32 (y))));\n+  svfloat64_t z_lo = svcvt_f64_x (pg, svreinterpret_f32 (svunpklo (iz)));\n+  svfloat64_t z_hi = svcvt_f64_x (pg, svreinterpret_f32 (svunpkhi (iz)));\n   svuint64_t i_lo = svunpklo (i);\n   svuint64_t i_hi = svunpkhi (i);\n   svint64_t k_lo = svunpklo (k);\n@@ -258,9 +258,9 @@ sv_powf_core (const svbool_t pg, svuint32_t i, svuint32_t iz, svint32_t k,\n /* Implementation of SVE powf.\n    Provides the same accuracy as AdvSIMD powf, since it relies on the same\n    algorithm. The theoretical maximum error is under 2.60 ULPs.\n-   Maximum measured error is 2.56 ULPs:\n-   SV_NAME_F2 (pow) (0x1.004118p+0, 0x1.5d14a4p+16) got 0x1.fd4bp+127\n-\t\t\t\t\t\t   want 0x1.fd4b06p+127.  */\n+   Maximum measured error is 2.57 ULPs:\n+   SV_NAME_F2 (pow) (0x1.031706p+0, 0x1.ce2ec2p+12) got 0x1.fff868p+127\n+\t\t\t\t\t\t   want 0x1.fff862p+127.  */\n svfloat32_t SV_NAME_F2 (pow) (svfloat32_t x, svfloat32_t y, const svbool_t pg)\n {\n   const struct data *d = ptr_barrier (&data);\n@@ -269,21 +269,19 @@ svfloat32_t SV_NAME_F2 (pow) (svfloat32_t x, svfloat32_t y, const svbool_t pg)\n   svuint32_t viy0 = svreinterpret_u32 (y);\n \n   /* Negative x cases.  */\n-  svuint32_t sign_bit = svand_m (pg, vix0, d->sign_mask);\n-  svbool_t xisneg = svcmpeq (pg, sign_bit, d->sign_mask);\n+  svbool_t xisneg = svcmplt (pg, x, sv_f32 (0));\n \n   /* Set sign_bias and ix depending on sign of x and nature of y.  */\n-  svbool_t yisnotint_xisneg = svpfalse_b ();\n+  svbool_t yint_or_xpos = pg;\n   svuint32_t sign_bias = sv_u32 (0);\n   svuint32_t vix = vix0;\n   if (__glibc_unlikely (svptest_any (pg, xisneg)))\n     {\n       /* Determine nature of y.  */\n-      yisnotint_xisneg = svisnotint (xisneg, y);\n-      svbool_t yisint_xisneg = svisint (xisneg, y);\n+      yint_or_xpos = svisint (xisneg, y);\n       svbool_t yisodd_xisneg = svisodd (xisneg, y);\n       /* ix set to abs(ix) if y is integer.  */\n-      vix = svand_m (yisint_xisneg, vix0, 0x7fffffff);\n+      vix = svand_m (yint_or_xpos, vix0, 0x7fffffff);\n       /* Set to SignBias if x is negative and y is odd.  */\n       sign_bias = svsel (yisodd_xisneg, sv_u32 (d->sign_bias), sv_u32 (0));\n     }\n@@ -294,8 +292,8 @@ svfloat32_t SV_NAME_F2 (pow) (svfloat32_t x, svfloat32_t y, const svbool_t pg)\n   svbool_t cmp = svorr_z (pg, xspecial, yspecial);\n \n   /* Small cases of x: |x| < 0x1p-126.  */\n-  svbool_t xsmall = svaclt (pg, x, d->small_bound);\n-  if (__glibc_unlikely (svptest_any (pg, xsmall)))\n+  svbool_t xsmall = svaclt (yint_or_xpos, x, d->small_bound);\n+  if (__glibc_unlikely (svptest_any (yint_or_xpos, xsmall)))\n     {\n       /* Normalize subnormal x so exponent becomes negative.  */\n       svuint32_t vix_norm = svreinterpret_u32 (svmul_x (xsmall, x, Norm));\n@@ -304,32 +302,35 @@ svfloat32_t SV_NAME_F2 (pow) (svfloat32_t x, svfloat32_t y, const svbool_t pg)\n       vix = svsel (xsmall, vix_norm, vix);\n     }\n   /* Part of core computation carried in working precision.  */\n-  svuint32_t tmp = svsub_x (pg, vix, d->off);\n-  svuint32_t i = svand_x (pg, svlsr_x (pg, tmp, (23 - V_POWF_LOG2_TABLE_BITS)),\n-\t\t\t  V_POWF_LOG2_N - 1);\n-  svuint32_t top = svand_x (pg, tmp, 0xff800000);\n-  svuint32_t iz = svsub_x (pg, vix, top);\n-  svint32_t k\n-      = svasr_x (pg, svreinterpret_s32 (top), (23 - V_POWF_EXP2_TABLE_BITS));\n-\n-  /* Compute core in extended precision and return intermediate ylogx results to\n-      handle cases of underflow and underflow in exp.  */\n+  svuint32_t tmp = svsub_x (yint_or_xpos, vix, d->off);\n+  svuint32_t i = svand_x (\n+      yint_or_xpos, svlsr_x (yint_or_xpos, tmp, (23 - V_POWF_LOG2_TABLE_BITS)),\n+      V_POWF_LOG2_N - 1);\n+  svuint32_t top = svand_x (yint_or_xpos, tmp, 0xff800000);\n+  svuint32_t iz = svsub_x (yint_or_xpos, vix, top);\n+  svint32_t k = svasr_x (yint_or_xpos, svreinterpret_s32 (top),\n+\t\t\t (23 - V_POWF_EXP2_TABLE_BITS));\n+\n+  /* Compute core in extended precision and return intermediate ylogx results\n+   * to handle cases of underflow and underflow in exp.  */\n   svfloat32_t ylogx;\n-  svfloat32_t ret = sv_powf_core (pg, i, iz, k, y, sign_bias, &ylogx, d);\n+  svfloat32_t ret\n+      = sv_powf_core (yint_or_xpos, i, iz, k, y, sign_bias, &ylogx, d);\n \n   /* Handle exp special cases of underflow and overflow.  */\n-  svuint32_t sign = svlsl_x (pg, sign_bias, 20 - V_POWF_EXP2_TABLE_BITS);\n+  svuint32_t sign\n+      = svlsl_x (yint_or_xpos, sign_bias, 20 - V_POWF_EXP2_TABLE_BITS);\n   svfloat32_t ret_oflow\n-      = svreinterpret_f32 (svorr_x (pg, sign, asuint (INFINITY)));\n+      = svreinterpret_f32 (svorr_x (yint_or_xpos, sign, asuint (INFINITY)));\n   svfloat32_t ret_uflow = svreinterpret_f32 (sign);\n-  ret = svsel (svcmple (pg, ylogx, d->uflow_bound), ret_uflow, ret);\n-  ret = svsel (svcmpgt (pg, ylogx, d->oflow_bound), ret_oflow, ret);\n+  ret = svsel (svcmple (yint_or_xpos, ylogx, d->uflow_bound), ret_uflow, ret);\n+  ret = svsel (svcmpgt (yint_or_xpos, ylogx, d->oflow_bound), ret_oflow, ret);\n \n   /* Cases of finite y and finite negative x.  */\n-  ret = svsel (yisnotint_xisneg, sv_f32 (__builtin_nanf (\"\")), ret);\n+  ret = svsel (yint_or_xpos, ret, sv_f32 (__builtin_nanf (\"\")));\n \n-  if (__glibc_unlikely (svptest_any (pg, cmp)))\n-    return sv_call_powf_sc (x, y, ret, cmp);\n+  if (__glibc_unlikely (svptest_any (cmp, cmp)))\n+    return sv_call_powf_sc (x, y, ret);\n \n   return ret;\n }\n\ncommit fd9a3a36fdcf14d1678c469e8b9033a46aa6c6fb\nAuthor: Wilco Dijkstra <wilco.dijkstra@arm.com>\nDate:   Thu Feb 27 20:34:34 2025 +0000\n\n    Revert \"AArch64: Add vector logp1 alias for log1p\"\n    \n    This reverts commit a991a0fc7c051d7ef2ea7778e0a699f22d4e53d7.\n\ndiff --git a/bits/libm-simd-decl-stubs.h b/bits/libm-simd-decl-stubs.h\nindex 5019e8e25c..08a41c46ad 100644\n--- a/bits/libm-simd-decl-stubs.h\n+++ b/bits/libm-simd-decl-stubs.h\n@@ -253,17 +253,6 @@\n #define __DECL_SIMD_log1pf64x\n #define __DECL_SIMD_log1pf128x\n \n-#define __DECL_SIMD_logp1\n-#define __DECL_SIMD_logp1f\n-#define __DECL_SIMD_logp1l\n-#define __DECL_SIMD_logp1f16\n-#define __DECL_SIMD_logp1f32\n-#define __DECL_SIMD_logp1f64\n-#define __DECL_SIMD_logp1f128\n-#define __DECL_SIMD_logp1f32x\n-#define __DECL_SIMD_logp1f64x\n-#define __DECL_SIMD_logp1f128x\n-\n #define __DECL_SIMD_atanh\n #define __DECL_SIMD_atanhf\n #define __DECL_SIMD_atanhl\ndiff --git a/math/bits/mathcalls.h b/math/bits/mathcalls.h\nindex 92856becc4..6cb594b6ff 100644\n--- a/math/bits/mathcalls.h\n+++ b/math/bits/mathcalls.h\n@@ -126,7 +126,7 @@ __MATHCALL (log2p1,, (_Mdouble_ __x));\n __MATHCALL (log10p1,, (_Mdouble_ __x));\n \n /* Return log(1 + X).  */\n-__MATHCALL_VEC (logp1,, (_Mdouble_ __x));\n+__MATHCALL (logp1,, (_Mdouble_ __x));\n #endif\n \n #if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99\ndiff --git a/sysdeps/aarch64/fpu/Versions b/sysdeps/aarch64/fpu/Versions\nindex 015211f5f4..cc15ce2d1e 100644\n--- a/sysdeps/aarch64/fpu/Versions\n+++ b/sysdeps/aarch64/fpu/Versions\n@@ -135,11 +135,4 @@ libmvec {\n     _ZGVsMxv_tanh;\n     _ZGVsMxv_tanhf;\n   }\n-  GLIBC_2.41 {\n-    _ZGVnN2v_logp1;\n-    _ZGVnN2v_logp1f;\n-    _ZGVnN4v_logp1f;\n-    _ZGVsMxv_logp1;\n-    _ZGVsMxv_logp1f;\n-  }\n }\ndiff --git a/sysdeps/aarch64/fpu/advsimd_f32_protos.h b/sysdeps/aarch64/fpu/advsimd_f32_protos.h\nindex 5909bb4ce9..097d403ffe 100644\n--- a/sysdeps/aarch64/fpu/advsimd_f32_protos.h\n+++ b/sysdeps/aarch64/fpu/advsimd_f32_protos.h\n@@ -36,7 +36,6 @@ libmvec_hidden_proto (V_NAME_F2(hypot));\n libmvec_hidden_proto (V_NAME_F1(log10));\n libmvec_hidden_proto (V_NAME_F1(log1p));\n libmvec_hidden_proto (V_NAME_F1(log2));\n-libmvec_hidden_proto (V_NAME_F1(logp1));\n libmvec_hidden_proto (V_NAME_F1(log));\n libmvec_hidden_proto (V_NAME_F2(pow));\n libmvec_hidden_proto (V_NAME_F1(sin));\ndiff --git a/sysdeps/aarch64/fpu/bits/math-vector.h b/sysdeps/aarch64/fpu/bits/math-vector.h\nindex f295fe185d..7484150131 100644\n--- a/sysdeps/aarch64/fpu/bits/math-vector.h\n+++ b/sysdeps/aarch64/fpu/bits/math-vector.h\n@@ -113,10 +113,6 @@\n # define __DECL_SIMD_log2 __DECL_SIMD_aarch64\n # undef __DECL_SIMD_log2f\n # define __DECL_SIMD_log2f __DECL_SIMD_aarch64\n-# undef __DECL_SIMD_logp1\n-# define __DECL_SIMD_logp1 __DECL_SIMD_aarch64\n-# undef __DECL_SIMD_logp1f\n-# define __DECL_SIMD_logp1f __DECL_SIMD_aarch64\n # undef __DECL_SIMD_pow\n # define __DECL_SIMD_pow __DECL_SIMD_aarch64\n # undef __DECL_SIMD_powf\n@@ -184,7 +180,6 @@ __vpcs __f32x4_t _ZGVnN4v_logf (__f32x4_t);\n __vpcs __f32x4_t _ZGVnN4v_log10f (__f32x4_t);\n __vpcs __f32x4_t _ZGVnN4v_log1pf (__f32x4_t);\n __vpcs __f32x4_t _ZGVnN4v_log2f (__f32x4_t);\n-__vpcs __f32x4_t _ZGVnN4v_logp1f (__f32x4_t);\n __vpcs __f32x4_t _ZGVnN4vv_powf (__f32x4_t, __f32x4_t);\n __vpcs __f32x4_t _ZGVnN4v_sinf (__f32x4_t);\n __vpcs __f32x4_t _ZGVnN4v_sinhf (__f32x4_t);\n@@ -212,7 +207,6 @@ __vpcs __f64x2_t _ZGVnN2v_log (__f64x2_t);\n __vpcs __f64x2_t _ZGVnN2v_log10 (__f64x2_t);\n __vpcs __f64x2_t _ZGVnN2v_log1p (__f64x2_t);\n __vpcs __f64x2_t _ZGVnN2v_log2 (__f64x2_t);\n-__vpcs __f64x2_t _ZGVnN2v_logp1 (__f64x2_t);\n __vpcs __f64x2_t _ZGVnN2vv_pow (__f64x2_t, __f64x2_t);\n __vpcs __f64x2_t _ZGVnN2v_sin (__f64x2_t);\n __vpcs __f64x2_t _ZGVnN2v_sinh (__f64x2_t);\n@@ -245,7 +239,6 @@ __sv_f32_t _ZGVsMxv_logf (__sv_f32_t, __sv_bool_t);\n __sv_f32_t _ZGVsMxv_log10f (__sv_f32_t, __sv_bool_t);\n __sv_f32_t _ZGVsMxv_log1pf (__sv_f32_t, __sv_bool_t);\n __sv_f32_t _ZGVsMxv_log2f (__sv_f32_t, __sv_bool_t);\n-__sv_f32_t _ZGVsMxv_logp1f (__sv_f32_t, __sv_bool_t);\n __sv_f32_t _ZGVsMxvv_powf (__sv_f32_t, __sv_f32_t, __sv_bool_t);\n __sv_f32_t _ZGVsMxv_sinf (__sv_f32_t, __sv_bool_t);\n __sv_f32_t _ZGVsMxv_sinhf (__sv_f32_t, __sv_bool_t);\n@@ -273,7 +266,6 @@ __sv_f64_t _ZGVsMxv_log (__sv_f64_t, __sv_bool_t);\n __sv_f64_t _ZGVsMxv_log10 (__sv_f64_t, __sv_bool_t);\n __sv_f64_t _ZGVsMxv_log1p (__sv_f64_t, __sv_bool_t);\n __sv_f64_t _ZGVsMxv_log2 (__sv_f64_t, __sv_bool_t);\n-__sv_f64_t _ZGVsMxv_logp1 (__sv_f64_t, __sv_bool_t);\n __sv_f64_t _ZGVsMxvv_pow (__sv_f64_t, __sv_f64_t, __sv_bool_t);\n __sv_f64_t _ZGVsMxv_sin (__sv_f64_t, __sv_bool_t);\n __sv_f64_t _ZGVsMxv_sinh (__sv_f64_t, __sv_bool_t);\ndiff --git a/sysdeps/aarch64/fpu/log1p_advsimd.c b/sysdeps/aarch64/fpu/log1p_advsimd.c\nindex 1263587201..9d18578ce6 100644\n--- a/sysdeps/aarch64/fpu/log1p_advsimd.c\n+++ b/sysdeps/aarch64/fpu/log1p_advsimd.c\n@@ -58,5 +58,3 @@ VPCS_ATTR float64x2_t V_NAME_D1 (log1p) (float64x2_t x)\n \n   return log1p_inline (x, &d->d);\n }\n-\n-strong_alias (V_NAME_D1 (log1p), V_NAME_D1 (logp1))\ndiff --git a/sysdeps/aarch64/fpu/log1p_sve.c b/sysdeps/aarch64/fpu/log1p_sve.c\nindex b21cfb2c90..04f7e5720e 100644\n--- a/sysdeps/aarch64/fpu/log1p_sve.c\n+++ b/sysdeps/aarch64/fpu/log1p_sve.c\n@@ -116,5 +116,3 @@ svfloat64_t SV_NAME_D1 (log1p) (svfloat64_t x, svbool_t pg)\n \n   return y;\n }\n-\n-strong_alias (SV_NAME_D1 (log1p), SV_NAME_D1 (logp1))\ndiff --git a/sysdeps/aarch64/fpu/log1pf_advsimd.c b/sysdeps/aarch64/fpu/log1pf_advsimd.c\nindex 00006fc703..f2d47962fe 100644\n--- a/sysdeps/aarch64/fpu/log1pf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/log1pf_advsimd.c\n@@ -93,6 +93,3 @@ VPCS_ATTR float32x4_t V_NAME_F1 (log1p) (float32x4_t x)\n \n libmvec_hidden_def (V_NAME_F1 (log1p))\n HALF_WIDTH_ALIAS_F1 (log1p)\n-strong_alias (V_NAME_F1 (log1p), V_NAME_F1 (logp1))\n-libmvec_hidden_def (V_NAME_F1 (logp1))\n-HALF_WIDTH_ALIAS_F1 (logp1)\ndiff --git a/sysdeps/aarch64/fpu/log1pf_sve.c b/sysdeps/aarch64/fpu/log1pf_sve.c\nindex 18a185c838..4f17c44e2d 100644\n--- a/sysdeps/aarch64/fpu/log1pf_sve.c\n+++ b/sysdeps/aarch64/fpu/log1pf_sve.c\n@@ -42,5 +42,3 @@ svfloat32_t SV_NAME_F1 (log1p) (svfloat32_t x, svbool_t pg)\n \n   return sv_log1pf_inline (x, pg);\n }\n-\n-strong_alias (SV_NAME_F1 (log1p), SV_NAME_F1 (logp1))\ndiff --git a/sysdeps/unix/sysv/linux/aarch64/libmvec.abilist b/sysdeps/unix/sysv/linux/aarch64/libmvec.abilist\nindex 98687cae0d..b685106954 100644\n--- a/sysdeps/unix/sysv/linux/aarch64/libmvec.abilist\n+++ b/sysdeps/unix/sysv/linux/aarch64/libmvec.abilist\n@@ -128,8 +128,3 @@ GLIBC_2.40 _ZGVsMxvv_hypot F\n GLIBC_2.40 _ZGVsMxvv_hypotf F\n GLIBC_2.40 _ZGVsMxvv_pow F\n GLIBC_2.40 _ZGVsMxvv_powf F\n-GLIBC_2.41 _ZGVnN2v_logp1 F\n-GLIBC_2.41 _ZGVnN2v_logp1f F\n-GLIBC_2.41 _ZGVnN4v_logp1f F\n-GLIBC_2.41 _ZGVsMxv_logp1 F\n-GLIBC_2.41 _ZGVsMxv_logp1f F\n\ncommit 64896b7d329809127035fde42768a6f7eeffed75\nAuthor: Wilco Dijkstra <wilco.dijkstra@arm.com>\nDate:   Wed Aug 7 14:43:47 2024 +0100\n\n    AArch64: Improve generic strlen\n    \n    Improve performance by handling another 16 bytes before entering the loop.\n    Use ADDHN in the loop to avoid SHRN+FMOV when it terminates.  Change final\n    size computation to avoid increasing latency.  On Neoverse V1 performance\n    of the random strlen benchmark improves by 4.6%.\n    \n    Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>\n    (cherry picked from commit 3dc426b642dcafdbc11a99f2767e081d086f5fc7)\n\ndiff --git a/sysdeps/aarch64/strlen.S b/sysdeps/aarch64/strlen.S\nindex ab2a576cdb..352fb40d3a 100644\n--- a/sysdeps/aarch64/strlen.S\n+++ b/sysdeps/aarch64/strlen.S\n@@ -1,4 +1,5 @@\n-/* Copyright (C) 2012-2024 Free Software Foundation, Inc.\n+/* Generic optimized strlen using SIMD.\n+   Copyright (C) 2012-2024 Free Software Foundation, Inc.\n \n    This file is part of the GNU C Library.\n \n@@ -56,36 +57,50 @@ ENTRY (STRLEN)\n \tshrn\tvend.8b, vhas_nul.8h, 4\t\t/* 128->64 */\n \tfmov\tsynd, dend\n \tlsr\tsynd, synd, shift\n-\tcbz\tsynd, L(loop)\n+\tcbz\tsynd, L(next16)\n \n \trbit\tsynd, synd\n \tclz\tresult, synd\n \tlsr\tresult, result, 2\n \tret\n \n+L(next16):\n+\tldr\tdata, [src, 16]\n+\tcmeq\tvhas_nul.16b, vdata.16b, 0\n+\tshrn\tvend.8b, vhas_nul.8h, 4\t\t/* 128->64 */\n+\tfmov\tsynd, dend\n+\tcbz\tsynd, L(loop)\n+\tadd\tsrc, src, 16\n+#ifndef __AARCH64EB__\n+\trbit\tsynd, synd\n+#endif\n+\tsub\tresult, src, srcin\n+\tclz\ttmp, synd\n+\tadd\tresult, result, tmp, lsr 2\n+\tret\n+\n \t.p2align 5\n L(loop):\n-\tldr\tdata, [src, 16]\n+\tldr\tdata, [src, 32]!\n \tcmeq\tvhas_nul.16b, vdata.16b, 0\n-\tumaxp\tvend.16b, vhas_nul.16b, vhas_nul.16b\n+\taddhn\tvend.8b, vhas_nul.8h, vhas_nul.8h\n \tfmov\tsynd, dend\n \tcbnz\tsynd, L(loop_end)\n-\tldr\tdata, [src, 32]!\n+\tldr\tdata, [src, 16]\n \tcmeq\tvhas_nul.16b, vdata.16b, 0\n-\tumaxp\tvend.16b, vhas_nul.16b, vhas_nul.16b\n+\taddhn\tvend.8b, vhas_nul.8h, vhas_nul.8h\n \tfmov\tsynd, dend\n \tcbz\tsynd, L(loop)\n-\tsub\tsrc, src, 16\n+\tadd\tsrc, src, 16\n L(loop_end):\n-\tshrn\tvend.8b, vhas_nul.8h, 4\t\t/* 128->64 */\n-\tsub\tresult, src, srcin\n-\tfmov\tsynd, dend\n+\tsub\tresult, shift, src, lsl 2\t/* (srcin - src) << 2.  */\n #ifndef __AARCH64EB__\n \trbit\tsynd, synd\n+\tsub\tresult, result, 3\n #endif\n-\tadd\tresult, result, 16\n \tclz\ttmp, synd\n-\tadd\tresult, result, tmp, lsr 2\n+\tsub\tresult, tmp, result\n+\tlsr\tresult, result, 2\n \tret\n \n END (STRLEN)\n\ncommit 544fb349d35efd5f86ed7e482759ff21496a32fd\nAuthor: Wilco Dijkstra <wilco.dijkstra@arm.com>\nDate:   Mon Sep 9 15:26:47 2024 +0100\n\n    AArch64: Optimize memset\n    \n    Improve small memsets by avoiding branches and use overlapping stores.\n    Use DC ZVA for copies over 128 bytes.  Remove unnecessary code for ZVA sizes\n    other than 64 and 128.  Performance of random memset benchmark improves by 24%\n    on Neoverse N1.\n    \n    Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>\n    (cherry picked from commit cec3aef32412779e207f825db0d057ebb4628ae8)\n\ndiff --git a/sysdeps/aarch64/memset.S b/sysdeps/aarch64/memset.S\nindex 7ef77ee8c9..caafb019e2 100644\n--- a/sysdeps/aarch64/memset.S\n+++ b/sysdeps/aarch64/memset.S\n@@ -1,4 +1,5 @@\n-/* Copyright (C) 2012-2024 Free Software Foundation, Inc.\n+/* Generic optimized memset using SIMD.\n+   Copyright (C) 2012-2024 Free Software Foundation, Inc.\n \n    This file is part of the GNU C Library.\n \n@@ -17,7 +18,6 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include <sysdep.h>\n-#include \"memset-reg.h\"\n \n #ifndef MEMSET\n # define MEMSET memset\n@@ -25,130 +25,132 @@\n \n /* Assumptions:\n  *\n- * ARMv8-a, AArch64, unaligned accesses\n+ * ARMv8-a, AArch64, Advanced SIMD, unaligned accesses.\n  *\n  */\n \n-ENTRY (MEMSET)\n+#define dstin\tx0\n+#define val\tx1\n+#define valw\tw1\n+#define count\tx2\n+#define dst\tx3\n+#define dstend\tx4\n+#define zva_val\tx5\n+#define off\tx3\n+#define dstend2\tx5\n \n+ENTRY (MEMSET)\n \tPTR_ARG (0)\n \tSIZE_ARG (2)\n \n \tdup\tv0.16B, valw\n+\tcmp\tcount, 16\n+\tb.lo\tL(set_small)\n+\n \tadd\tdstend, dstin, count\n+\tcmp\tcount, 64\n+\tb.hs\tL(set_128)\n \n-\tcmp\tcount, 96\n-\tb.hi\tL(set_long)\n-\tcmp\tcount, 16\n-\tb.hs\tL(set_medium)\n-\tmov\tval, v0.D[0]\n+\t/* Set 16..63 bytes.  */\n+\tmov\toff, 16\n+\tand\toff, off, count, lsr 1\n+\tsub\tdstend2, dstend, off\n+\tstr\tq0, [dstin]\n+\tstr\tq0, [dstin, off]\n+\tstr\tq0, [dstend2, -16]\n+\tstr\tq0, [dstend, -16]\n+\tret\n \n+\t.p2align 4\n \t/* Set 0..15 bytes.  */\n-\ttbz\tcount, 3, 1f\n-\tstr\tval, [dstin]\n-\tstr\tval, [dstend, -8]\n-\tret\n-\tnop\n-1:\ttbz\tcount, 2, 2f\n-\tstr\tvalw, [dstin]\n-\tstr\tvalw, [dstend, -4]\n+L(set_small):\n+\tadd\tdstend, dstin, count\n+\tcmp\tcount, 4\n+\tb.lo\t2f\n+\tlsr\toff, count, 3\n+\tsub\tdstend2, dstend, off, lsl 2\n+\tstr\ts0, [dstin]\n+\tstr\ts0, [dstin, off, lsl 2]\n+\tstr\ts0, [dstend2, -4]\n+\tstr\ts0, [dstend, -4]\n \tret\n+\n+\t/* Set 0..3 bytes.  */\n 2:\tcbz\tcount, 3f\n+\tlsr\toff, count, 1\n \tstrb\tvalw, [dstin]\n-\ttbz\tcount, 1, 3f\n-\tstrh\tvalw, [dstend, -2]\n+\tstrb\tvalw, [dstin, off]\n+\tstrb\tvalw, [dstend, -1]\n 3:\tret\n \n-\t/* Set 17..96 bytes.  */\n-L(set_medium):\n-\tstr\tq0, [dstin]\n-\ttbnz\tcount, 6, L(set96)\n-\tstr\tq0, [dstend, -16]\n-\ttbz\tcount, 5, 1f\n-\tstr\tq0, [dstin, 16]\n-\tstr\tq0, [dstend, -32]\n-1:\tret\n-\n \t.p2align 4\n-\t/* Set 64..96 bytes.  Write 64 bytes from the start and\n-\t   32 bytes from the end.  */\n-L(set96):\n-\tstr\tq0, [dstin, 16]\n+L(set_128):\n+\tbic\tdst, dstin, 15\n+\tcmp\tcount, 128\n+\tb.hi\tL(set_long)\n+\tstp\tq0, q0, [dstin]\n \tstp\tq0, q0, [dstin, 32]\n+\tstp\tq0, q0, [dstend, -64]\n \tstp\tq0, q0, [dstend, -32]\n \tret\n \n-\t.p2align 3\n-\tnop\n+\t.p2align 4\n L(set_long):\n-\tand\tvalw, valw, 255\n-\tbic\tdst, dstin, 15\n \tstr\tq0, [dstin]\n-\tcmp\tcount, 256\n-\tccmp\tvalw, 0, 0, cs\n-\tb.eq\tL(try_zva)\n-L(no_zva):\n-\tsub\tcount, dstend, dst\t/* Count is 16 too large.  */\n-\tsub\tdst, dst, 16\t\t/* Dst is biased by -32.  */\n-\tsub\tcount, count, 64 + 16\t/* Adjust count and bias for loop.  */\n-1:\tstp\tq0, q0, [dst, 32]\n-\tstp\tq0, q0, [dst, 64]!\n-L(tail64):\n-\tsubs\tcount, count, 64\n-\tb.hi\t1b\n-2:\tstp\tq0, q0, [dstend, -64]\n+\tstr\tq0, [dst, 16]\n+\ttst\tvalw, 255\n+\tb.ne\tL(no_zva)\n+#ifndef ZVA64_ONLY\n+\tmrs\tzva_val, dczid_el0\n+\tand\tzva_val, zva_val, 31\n+\tcmp\tzva_val, 4\t\t/* ZVA size is 64 bytes.  */\n+\tb.ne\tL(zva_128)\n+#endif\n+\tstp\tq0, q0, [dst, 32]\n+\tbic\tdst, dstin, 63\n+\tsub\tcount, dstend, dst\t/* Count is now 64 too large.  */\n+\tsub\tcount, count, 64 + 64\t/* Adjust count and bias for loop.  */\n+\n+\t/* Write last bytes before ZVA loop.  */\n+\tstp\tq0, q0, [dstend, -64]\n \tstp\tq0, q0, [dstend, -32]\n+\n+\t.p2align 4\n+L(zva64_loop):\n+\tadd\tdst, dst, 64\n+\tdc\tzva, dst\n+\tsubs\tcount, count, 64\n+\tb.hi\tL(zva64_loop)\n \tret\n \n-L(try_zva):\n-#ifndef ZVA64_ONLY\n \t.p2align 3\n-\tmrs\ttmp1, dczid_el0\n-\ttbnz\ttmp1w, 4, L(no_zva)\n-\tand\ttmp1w, tmp1w, 15\n-\tcmp\ttmp1w, 4\t/* ZVA size is 64 bytes.  */\n-\tb.ne\t L(zva_128)\n-\tnop\n-#endif\n-\t/* Write the first and last 64 byte aligned block using stp rather\n-\t   than using DC ZVA.  This is faster on some cores.\n-\t */\n-\t.p2align 4\n-L(zva_64):\n-\tstr\tq0, [dst, 16]\n+L(no_zva):\n+\tsub\tcount, dstend, dst\t/* Count is 32 too large.  */\n+\tsub\tcount, count, 64 + 32\t/* Adjust count and bias for loop.  */\n+L(no_zva_loop):\n \tstp\tq0, q0, [dst, 32]\n-\tbic\tdst, dst, 63\n \tstp\tq0, q0, [dst, 64]\n-\tstp\tq0, q0, [dst, 96]\n-\tsub\tcount, dstend, dst\t/* Count is now 128 too large.\t*/\n-\tsub\tcount, count, 128+64+64\t/* Adjust count and bias for loop.  */\n-\tadd\tdst, dst, 128\n-1:\tdc\tzva, dst\n \tadd\tdst, dst, 64\n \tsubs\tcount, count, 64\n-\tb.hi\t1b\n-\tstp\tq0, q0, [dst, 0]\n-\tstp\tq0, q0, [dst, 32]\n+\tb.hi\tL(no_zva_loop)\n \tstp\tq0, q0, [dstend, -64]\n \tstp\tq0, q0, [dstend, -32]\n \tret\n \n #ifndef ZVA64_ONLY\n-\t.p2align 3\n+\t.p2align 4\n L(zva_128):\n-\tcmp\ttmp1w, 5\t/* ZVA size is 128 bytes.  */\n-\tb.ne\tL(zva_other)\n+\tcmp\tzva_val, 5\t\t/* ZVA size is 128 bytes.  */\n+\tb.ne\tL(no_zva)\n \n-\tstr\tq0, [dst, 16]\n \tstp\tq0, q0, [dst, 32]\n \tstp\tq0, q0, [dst, 64]\n \tstp\tq0, q0, [dst, 96]\n \tbic\tdst, dst, 127\n \tsub\tcount, dstend, dst\t/* Count is now 128 too large.\t*/\n-\tsub\tcount, count, 128+128\t/* Adjust count and bias for loop.  */\n-\tadd\tdst, dst, 128\n-1:\tdc\tzva, dst\n-\tadd\tdst, dst, 128\n+\tsub\tcount, count, 128 + 128\t/* Adjust count and bias for loop.  */\n+1:\tadd\tdst, dst, 128\n+\tdc\tzva, dst\n \tsubs\tcount, count, 128\n \tb.hi\t1b\n \tstp\tq0, q0, [dstend, -128]\n@@ -156,35 +158,6 @@ L(zva_128):\n \tstp\tq0, q0, [dstend, -64]\n \tstp\tq0, q0, [dstend, -32]\n \tret\n-\n-L(zva_other):\n-\tmov\ttmp2w, 4\n-\tlsl\tzva_lenw, tmp2w, tmp1w\n-\tadd\ttmp1, zva_len, 64\t/* Max alignment bytes written.\t */\n-\tcmp\tcount, tmp1\n-\tblo\tL(no_zva)\n-\n-\tsub\ttmp2, zva_len, 1\n-\tadd\ttmp1, dst, zva_len\n-\tadd\tdst, dst, 16\n-\tsubs\tcount, tmp1, dst\t/* Actual alignment bytes to write.  */\n-\tbic\ttmp1, tmp1, tmp2\t/* Aligned dc zva start address.  */\n-\tbeq\t2f\n-1:\tstp\tq0, q0, [dst], 64\n-\tstp\tq0, q0, [dst, -32]\n-\tsubs\tcount, count, 64\n-\tb.hi\t1b\n-2:\tmov\tdst, tmp1\n-\tsub\tcount, dstend, tmp1\t/* Remaining bytes to write.  */\n-\tsubs\tcount, count, zva_len\n-\tb.lo\t4f\n-3:\tdc\tzva, dst\n-\tadd\tdst, dst, zva_len\n-\tsubs\tcount, count, zva_len\n-\tb.hs\t3b\n-4:\tadd\tcount, count, zva_len\n-\tsub\tdst, dst, 32\t\t/* Bias dst for tail loop.  */\n-\tb\tL(tail64)\n #endif\n \n END (MEMSET)\n\ncommit 41eb2f8b5847079caca90a74659456adbb80ec29\nAuthor: Wilco Dijkstra <wilco.dijkstra@arm.com>\nDate:   Mon Nov 25 18:43:08 2024 +0000\n\n    AArch64: Remove zva_128 from memset\n    \n    Remove ZVA 128 support from memset - the new memset no longer\n    guarantees count >= 256, which can result in underflow and a\n    crash if ZVA size is 128 ([1]).  Since only one CPU uses a ZVA\n    size of 128 and its memcpy implementation was removed in commit\n    e162ab2bf1b82c40f29e1925986582fa07568ce8, remove this special\n    case too.\n    \n    [1] https://sourceware.org/pipermail/libc-alpha/2024-November/161626.html\n    \n    Reviewed-by: Andrew Pinski <quic_apinski@quicinc.com>\n    (cherry picked from commit a08d9a52f967531a77e1824c23b5368c6434a72d)\n\ndiff --git a/sysdeps/aarch64/memset.S b/sysdeps/aarch64/memset.S\nindex caafb019e2..71814d0b2f 100644\n--- a/sysdeps/aarch64/memset.S\n+++ b/sysdeps/aarch64/memset.S\n@@ -104,7 +104,7 @@ L(set_long):\n \tmrs\tzva_val, dczid_el0\n \tand\tzva_val, zva_val, 31\n \tcmp\tzva_val, 4\t\t/* ZVA size is 64 bytes.  */\n-\tb.ne\tL(zva_128)\n+\tb.ne\tL(no_zva)\n #endif\n \tstp\tq0, q0, [dst, 32]\n \tbic\tdst, dstin, 63\n@@ -137,28 +137,5 @@ L(no_zva_loop):\n \tstp\tq0, q0, [dstend, -32]\n \tret\n \n-#ifndef ZVA64_ONLY\n-\t.p2align 4\n-L(zva_128):\n-\tcmp\tzva_val, 5\t\t/* ZVA size is 128 bytes.  */\n-\tb.ne\tL(no_zva)\n-\n-\tstp\tq0, q0, [dst, 32]\n-\tstp\tq0, q0, [dst, 64]\n-\tstp\tq0, q0, [dst, 96]\n-\tbic\tdst, dst, 127\n-\tsub\tcount, dstend, dst\t/* Count is now 128 too large.\t*/\n-\tsub\tcount, count, 128 + 128\t/* Adjust count and bias for loop.  */\n-1:\tadd\tdst, dst, 128\n-\tdc\tzva, dst\n-\tsubs\tcount, count, 128\n-\tb.hi\t1b\n-\tstp\tq0, q0, [dstend, -128]\n-\tstp\tq0, q0, [dstend, -96]\n-\tstp\tq0, q0, [dstend, -64]\n-\tstp\tq0, q0, [dstend, -32]\n-\tret\n-#endif\n-\n END (MEMSET)\n libc_hidden_builtin_def (MEMSET)\n\ncommit 27fa0268ead054810a5e2669d0b5bb88ceb05b05\nAuthor: Wilco Dijkstra <wilco.dijkstra@arm.com>\nDate:   Wed Jul 24 15:17:47 2024 +0100\n\n    math: Improve layout of expf data\n    \n    GCC aligns global data to 16 bytes if their size is >= 16 bytes.  This patch\n    changes the exp2f_data struct slightly so that the fields are better aligned.\n    As a result on targets that support them, load-pair instructions accessing\n    poly_scaled and invln2_scaled are now 16-byte aligned.\n    \n    Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>\n    (cherry picked from commit 44fa9c1080fe6a9539f0d2345b9d2ae37b8ee57a)\n\ndiff --git a/sysdeps/ieee754/flt-32/math_config.h b/sysdeps/ieee754/flt-32/math_config.h\nindex 729f22cd4f..dc07ebd459 100644\n--- a/sysdeps/ieee754/flt-32/math_config.h\n+++ b/sysdeps/ieee754/flt-32/math_config.h\n@@ -166,9 +166,9 @@ extern const struct exp2f_data\n   uint64_t tab[1 << EXP2F_TABLE_BITS];\n   double shift_scaled;\n   double poly[EXP2F_POLY_ORDER];\n-  double shift;\n   double invln2_scaled;\n   double poly_scaled[EXP2F_POLY_ORDER];\n+  double shift;\n } __exp2f_data attribute_hidden;\n \n #define LOGF_TABLE_BITS 4\n\ncommit 7038970f1f485fb660606f0c596f432fdef250f6\nAuthor: Wilco Dijkstra <wilco.dijkstra@arm.com>\nDate:   Tue Dec 24 18:01:59 2024 +0000\n\n    AArch64: Add SVE memset\n    \n    Add SVE memset based on the generic memset with predicated load for sizes < 16.\n    Unaligned memsets of 128-1024 are improved by ~20% on average by using aligned\n    stores for the last 64 bytes.  Performance of random memset benchmark improves\n    by ~2% on Neoverse V1.\n    \n    Reviewed-by: Yury Khrustalev <yury.khrustalev@arm.com>\n    (cherry picked from commit 163b1bbb76caba4d9673c07940c5930a1afa7548)\n\ndiff --git a/sysdeps/aarch64/multiarch/Makefile b/sysdeps/aarch64/multiarch/Makefile\nindex 3e251cc234..6880ebc035 100644\n--- a/sysdeps/aarch64/multiarch/Makefile\n+++ b/sysdeps/aarch64/multiarch/Makefile\n@@ -16,6 +16,7 @@ sysdep_routines += \\\n   memset_kunpeng \\\n   memset_mops \\\n   memset_oryon1 \\\n+  memset_sve_zva64 \\\n   memset_zva64 \\\n   strlen_asimd \\\n   strlen_generic \\\ndiff --git a/sysdeps/aarch64/multiarch/ifunc-impl-list.c b/sysdeps/aarch64/multiarch/ifunc-impl-list.c\nindex b2fda541f9..1f101a719b 100644\n--- a/sysdeps/aarch64/multiarch/ifunc-impl-list.c\n+++ b/sysdeps/aarch64/multiarch/ifunc-impl-list.c\n@@ -61,6 +61,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,\n \t      IFUNC_IMPL_ADD (array, i, memset, 1, __memset_kunpeng)\n #if HAVE_AARCH64_SVE_ASM\n \t      IFUNC_IMPL_ADD (array, i, memset, sve && !bti && zva_size == 256, __memset_a64fx)\n+\t      IFUNC_IMPL_ADD (array, i, memset, sve && zva_size == 64, __memset_sve_zva64)\n #endif\n \t      IFUNC_IMPL_ADD (array, i, memset, mops, __memset_mops)\n \t      IFUNC_IMPL_ADD (array, i, memset, 1, __memset_generic))\ndiff --git a/sysdeps/aarch64/multiarch/memset.c b/sysdeps/aarch64/multiarch/memset.c\nindex bd063c16c9..4f65295e77 100644\n--- a/sysdeps/aarch64/multiarch/memset.c\n+++ b/sysdeps/aarch64/multiarch/memset.c\n@@ -36,6 +36,7 @@ extern __typeof (__redirect_memset) __memset_a64fx attribute_hidden;\n extern __typeof (__redirect_memset) __memset_generic attribute_hidden;\n extern __typeof (__redirect_memset) __memset_mops attribute_hidden;\n extern __typeof (__redirect_memset) __memset_oryon1 attribute_hidden;\n+extern __typeof (__redirect_memset) __memset_sve_zva64 attribute_hidden;\n \n static inline __typeof (__redirect_memset) *\n select_memset_ifunc (void)\n@@ -49,6 +50,9 @@ select_memset_ifunc (void)\n     {\n       if (IS_A64FX (midr) && zva_size == 256)\n \treturn __memset_a64fx;\n+\n+      if (zva_size == 64)\n+\treturn __memset_sve_zva64;\n     }\n \n   if (IS_ORYON1 (midr) && zva_size == 64)\ndiff --git a/sysdeps/aarch64/multiarch/memset_sve_zva64.S b/sysdeps/aarch64/multiarch/memset_sve_zva64.S\nnew file mode 100644\nindex 0000000000..7fb40fdd9e\n--- /dev/null\n+++ b/sysdeps/aarch64/multiarch/memset_sve_zva64.S\n@@ -0,0 +1,123 @@\n+/* Optimized memset for SVE.\n+   Copyright (C) 2025 Free Software Foundation, Inc.\n+\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library.  If not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <sysdep.h>\n+\n+/* Assumptions:\n+ *\n+ * ARMv8-a, AArch64, Advanced SIMD, SVE, unaligned accesses.\n+ * ZVA size is 64.\n+ */\n+\n+#if HAVE_AARCH64_SVE_ASM\n+\n+.arch armv8.2-a+sve\n+\n+#define dstin\tx0\n+#define val\tx1\n+#define valw\tw1\n+#define count\tx2\n+#define dst\tx3\n+#define dstend\tx4\n+#define zva_val\tx5\n+#define vlen\tx5\n+#define off\tx3\n+#define dstend2 x5\n+\n+ENTRY (__memset_sve_zva64)\n+\tdup\tv0.16B, valw\n+\tcmp\tcount, 16\n+\tb.lo\tL(set_16)\n+\n+\tadd\tdstend, dstin, count\n+\tcmp\tcount, 64\n+\tb.hs\tL(set_128)\n+\n+\t/* Set 16..63 bytes.  */\n+\tmov\toff, 16\n+\tand\toff, off, count, lsr 1\n+\tsub\tdstend2, dstend, off\n+\tstr\tq0, [dstin]\n+\tstr\tq0, [dstin, off]\n+\tstr\tq0, [dstend2, -16]\n+\tstr\tq0, [dstend, -16]\n+\tret\n+\n+\t.p2align 4\n+L(set_16):\n+\twhilelo p0.b, xzr, count\n+\tst1b\tz0.b, p0, [dstin]\n+\tret\n+\n+\t.p2align 4\n+L(set_128):\n+\tbic\tdst, dstin, 15\n+\tcmp\tcount, 128\n+\tb.hi\tL(set_long)\n+\tstp\tq0, q0, [dstin]\n+\tstp\tq0, q0, [dstin, 32]\n+\tstp\tq0, q0, [dstend, -64]\n+\tstp\tq0, q0, [dstend, -32]\n+\tret\n+\n+\t.p2align 4\n+L(set_long):\n+\tcmp\tcount, 256\n+\tb.lo\tL(no_zva)\n+\ttst\tvalw, 255\n+\tb.ne\tL(no_zva)\n+\n+\tstr\tq0, [dstin]\n+\tstr\tq0, [dst, 16]\n+\tbic\tdst, dstin, 31\n+\tstp\tq0, q0, [dst, 32]\n+\tbic\tdst, dstin, 63\n+\tsub\tcount, dstend, dst\t/* Count is now 64 too large.  */\n+\tsub\tcount, count, 128\t/* Adjust count and bias for loop.  */\n+\n+\tsub\tx8, dstend, 1\t\t/* Write last bytes before ZVA loop.  */\n+\tbic\tx8, x8, 15\n+\tstp\tq0, q0, [x8, -48]\n+\tstr\tq0, [x8, -16]\n+\tstr\tq0, [dstend, -16]\n+\n+\t.p2align 4\n+L(zva64_loop):\n+\tadd\tdst, dst, 64\n+\tdc\tzva, dst\n+\tsubs\tcount, count, 64\n+\tb.hi\tL(zva64_loop)\n+\tret\n+\n+L(no_zva):\n+\tstr\tq0, [dstin]\n+\tsub\tcount, dstend, dst\t/* Count is 16 too large.  */\n+\tsub\tcount, count, 64 + 16\t/* Adjust count and bias for loop.  */\n+L(no_zva_loop):\n+\tstp\tq0, q0, [dst, 16]\n+\tstp\tq0, q0, [dst, 48]\n+\tadd\tdst, dst, 64\n+\tsubs\tcount, count, 64\n+\tb.hi\tL(no_zva_loop)\n+\tstp\tq0, q0, [dstend, -64]\n+\tstp\tq0, q0, [dstend, -32]\n+\tret\n+\n+END (__memset_sve_zva64)\n+#endif\n\ncommit d6175a44e95fe443d0fbfed37a9ff7424f1e2661\nAuthor: Wilco Dijkstra <wilco.dijkstra@arm.com>\nDate:   Thu Feb 27 16:28:52 2025 +0000\n\n    AArch64: Use prefer_sve_ifuncs for SVE memset\n    \n    Use prefer_sve_ifuncs for SVE memset just like memcpy.\n    \n    Reviewed-by: Yury Khrustalev <yury.khrustalev@arm.com>\n    (cherry picked from commit 0f044be1dae5169d0e57f8d487b427863aeadab4)\n\ndiff --git a/sysdeps/aarch64/multiarch/memset.c b/sysdeps/aarch64/multiarch/memset.c\nindex 4f65295e77..bb1e865c97 100644\n--- a/sysdeps/aarch64/multiarch/memset.c\n+++ b/sysdeps/aarch64/multiarch/memset.c\n@@ -51,7 +51,7 @@ select_memset_ifunc (void)\n       if (IS_A64FX (midr) && zva_size == 256)\n \treturn __memset_a64fx;\n \n-      if (zva_size == 64)\n+      if (prefer_sve_ifuncs && zva_size == 64)\n \treturn __memset_sve_zva64;\n     }\n \n\ncommit d8e8342369831808b00324790c8809ba33408ee7\nAuthor: Wilco Dijkstra <wilco.dijkstra@arm.com>\nDate:   Fri Dec 13 15:43:07 2024 +0000\n\n    math: Improve layout of exp/exp10 data\n    \n    GCC aligns global data to 16 bytes if their size is >= 16 bytes.  This patch\n    changes the exp_data struct slightly so that the fields are better aligned\n    and without gaps.  As a result on targets that support them, more load-pair\n    instructions are used in exp.  Exp10 is improved by moving invlog10_2N later\n    so that neglog10_2hiN and neglog10_2loN can be loaded using load-pair.\n    \n    The exp benchmark improves 2.5%, \"144bits\" by 7.2%, \"768bits\" by 12.7% on\n    Neoverse V2.  Exp10 improves by 1.5%.\n    \n    Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>\n    (cherry picked from commit 5afaf99edb326fd9f36eb306a828d129a3a1d7f7)\n\ndiff --git a/sysdeps/ieee754/dbl-64/math_config.h b/sysdeps/ieee754/dbl-64/math_config.h\nindex ef87cfa6be..05515fd95a 100644\n--- a/sysdeps/ieee754/dbl-64/math_config.h\n+++ b/sysdeps/ieee754/dbl-64/math_config.h\n@@ -195,16 +195,18 @@ check_uflow (double x)\n extern const struct exp_data\n {\n   double invln2N;\n-  double shift;\n   double negln2hiN;\n   double negln2loN;\n   double poly[4]; /* Last four coefficients.  */\n+  double shift;\n+\n   double exp2_shift;\n   double exp2_poly[EXP2_POLY_ORDER];\n-  double invlog10_2N;\n+\n   double neglog10_2hiN;\n   double neglog10_2loN;\n   double exp10_poly[5];\n+  double invlog10_2N;\n   uint64_t tab[2*(1 << EXP_TABLE_BITS)];\n } __exp_data attribute_hidden;\n \n\ncommit 3e820e17a8cef84645d83b67abcbc3f88c7fd268\nAuthor: Michael Jeanson <mjeanson@efficios.com>\nDate:   Fri Feb 14 13:54:22 2025 -0500\n\n    nptl: clear the whole rseq area before registration\n    \n    Due to the extensible nature of the rseq area we can't explictly\n    initialize fields that are not part of the ABI yet. It was agreed with\n    upstream that all new fields will be documented as zero initialized by\n    userspace. Future kernels configured with CONFIG_DEBUG_RSEQ will\n    validate the content of all fields during registration.\n    \n    Replace the explicit field initialization with a memset of the whole\n    rseq area which will cover fields as they are added to future kernels.\n    \n    Signed-off-by: Michael Jeanson <mjeanson@efficios.com>\n    Reviewed-by: Florian Weimer <fweimer@redhat.com>\n    (cherry picked from commit 689a62a4217fae78b9ce0db781dc2a421f2b1ab4)\n\ndiff --git a/sysdeps/nptl/dl-tls_init_tp.c b/sysdeps/nptl/dl-tls_init_tp.c\nindex 7803e19fd1..ed10185e37 100644\n--- a/sysdeps/nptl/dl-tls_init_tp.c\n+++ b/sysdeps/nptl/dl-tls_init_tp.c\n@@ -23,6 +23,7 @@\n #include <tls.h>\n #include <rseq-internal.h>\n #include <thread_pointer.h>\n+#include <dl-symbol-redir-ifunc.h>\n \n #define TUNABLE_NAMESPACE pthread\n #include <dl-tunables.h>\ndiff --git a/sysdeps/unix/sysv/linux/rseq-internal.h b/sysdeps/unix/sysv/linux/rseq-internal.h\nindex ef3eab1fef..76de2b7ff0 100644\n--- a/sysdeps/unix/sysv/linux/rseq-internal.h\n+++ b/sysdeps/unix/sysv/linux/rseq-internal.h\n@@ -52,13 +52,12 @@ rseq_register_current_thread (struct pthread *self, bool do_rseq)\n            but still expected size 32.  */\n         size = RSEQ_AREA_SIZE_INITIAL;\n \n-      /* Initialize the rseq fields that are read by the kernel on\n-         registration, there is no guarantee that struct pthread is\n-         cleared on all architectures.  */\n+      /* Initialize the whole rseq area to zero prior to registration.  */\n+      memset (&self->rseq_area, 0, size);\n+\n+      /* Set the cpu_id field to RSEQ_CPU_ID_UNINITIALIZED, this is checked by\n+         the kernel at registration when CONFIG_DEBUG_RSEQ is enabled.  */\n       THREAD_SETMEM (self, rseq_area.cpu_id, RSEQ_CPU_ID_UNINITIALIZED);\n-      THREAD_SETMEM (self, rseq_area.cpu_id_start, 0);\n-      THREAD_SETMEM (self, rseq_area.rseq_cs, 0);\n-      THREAD_SETMEM (self, rseq_area.flags, 0);\n \n       int ret = INTERNAL_SYSCALL_CALL (rseq, &self->rseq_area,\n                                        size, 0, RSEQ_SIG);\n\ncommit ee1ab9302363066b49cf8862b96664ed35eda81c\nAuthor: Sunil K Pandey <skpgkp2@gmail.com>\nDate:   Mon Mar 10 10:24:07 2025 -0700\n\n    x86_64: Add tanh with FMA\n    \n    On Skylake, it improves tanh bench performance by:\n    \n            Before          After           Improvement\n    max     110.89          95.826          14%\n    min     20.966          20.157          4%\n    mean    30.9601         29.8431         4%\n    \n    Reviewed-by: H.J. Lu <hjl.tools@gmail.com>\n    (cherry picked from commit c6352111c72a20b3588ae304dd99b63e25dd6d85)\n\ndiff --git a/sysdeps/ieee754/dbl-64/s_tanh.c b/sysdeps/ieee754/dbl-64/s_tanh.c\nindex 673a97102d..13063db04e 100644\n--- a/sysdeps/ieee754/dbl-64/s_tanh.c\n+++ b/sysdeps/ieee754/dbl-64/s_tanh.c\n@@ -46,6 +46,11 @@ static char rcsid[] = \"$NetBSD: s_tanh.c,v 1.7 1995/05/10 20:48:22 jtc Exp $\";\n \n static const double one = 1.0, two = 2.0, tiny = 1.0e-300;\n \n+#ifndef SECTION\n+# define SECTION\n+#endif\n+\n+SECTION\n double\n __tanh (double x)\n {\ndiff --git a/sysdeps/x86_64/fpu/multiarch/Makefile b/sysdeps/x86_64/fpu/multiarch/Makefile\nindex cbe09d49f4..0f69f7089c 100644\n--- a/sysdeps/x86_64/fpu/multiarch/Makefile\n+++ b/sysdeps/x86_64/fpu/multiarch/Makefile\n@@ -10,6 +10,7 @@ CFLAGS-s_expm1-fma.c = -mfma -mavx2\n CFLAGS-s_log1p-fma.c = -mfma -mavx2\n CFLAGS-s_sin-fma.c = -mfma -mavx2\n CFLAGS-s_tan-fma.c = -mfma -mavx2\n+CFLAGS-s_tanh-fma.c = -mfma -mavx2\n CFLAGS-s_sincos-fma.c = -mfma -mavx2\n \n CFLAGS-e_exp2f-fma.c = -mfma -mavx2\n@@ -92,6 +93,7 @@ libm-sysdep_routines += \\\n   s_sinf-sse2 \\\n   s_tan-avx \\\n   s_tan-fma \\\n+  s_tanh-fma \\\n   s_trunc-sse4_1 \\\n   s_truncf-sse4_1 \\\n # libm-sysdep_routines\ndiff --git a/sysdeps/x86_64/fpu/multiarch/s_tanh-fma.c b/sysdeps/x86_64/fpu/multiarch/s_tanh-fma.c\nnew file mode 100644\nindex 0000000000..1b808b1227\n--- /dev/null\n+++ b/sysdeps/x86_64/fpu/multiarch/s_tanh-fma.c\n@@ -0,0 +1,11 @@\n+#define __tanh __tanh_fma\n+#define __expm1 __expm1_fma\n+\n+/* NB: __expm1 may be expanded to __expm1_fma in the following\n+   prototypes.  */\n+extern long double __expm1l (long double);\n+extern long double __expm1f128 (long double);\n+\n+#define SECTION __attribute__ ((section (\".text.fma\")))\n+\n+#include <sysdeps/ieee754/dbl-64/s_tanh.c>\ndiff --git a/sysdeps/x86_64/fpu/multiarch/s_tanh.c b/sysdeps/x86_64/fpu/multiarch/s_tanh.c\nnew file mode 100644\nindex 0000000000..5539b6c61c\n--- /dev/null\n+++ b/sysdeps/x86_64/fpu/multiarch/s_tanh.c\n@@ -0,0 +1,31 @@\n+/* Multiple versions of tanh.\n+   Copyright (C) 2025 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <sysdeps/x86/isa-level.h>\n+#if MINIMUM_X86_ISA_LEVEL < AVX2_X86_ISA_LEVEL\n+\n+extern double __redirect_tanh (double);\n+\n+# define SYMBOL_NAME tanh\n+# include \"ifunc-fma.h\"\n+\n+libc_ifunc_redirected (__redirect_tanh, __tanh, IFUNC_SELECTOR ());\n+\n+# define __tanh __tanh_sse2\n+#endif\n+#include <sysdeps/ieee754/dbl-64/s_tanh.c>\n\ncommit e854f6d37cbeabb9130fed74b587befad8b4ba08\nAuthor: Sunil K Pandey <skpgkp2@gmail.com>\nDate:   Sat Mar 8 08:51:10 2025 -0800\n\n    x86_64: Add sinh with FMA\n    \n    On SPR, it improves sinh bench performance by:\n    \n                            Before          After           Improvement\n    reciprocal-throughput   14.2017         11.815          17%\n    latency                 36.4917         35.2114         4%\n    \n    Reviewed-by: H.J. Lu <hjl.tools@gmail.com>\n    (cherry picked from commit dded0d20f67ba1925ccbcb9cf28f0c75febe0dbe)\n\ndiff --git a/benchtests/sinh-inputs b/benchtests/sinh-inputs\nindex 7b1ac46a39..2fcb2fabf8 100644\n--- a/benchtests/sinh-inputs\n+++ b/benchtests/sinh-inputs\n@@ -1,6 +1,7 @@\n ## args: double\n ## ret: double\n ## includes: math.h\n+## name: workload-random\n 0x1.bcb6129b5ff2bp8\n -0x1.63057386325ebp9\n 0x1.62f1d7dc4e8bfp9\ndiff --git a/sysdeps/ieee754/dbl-64/e_sinh.c b/sysdeps/ieee754/dbl-64/e_sinh.c\nindex b4b5857ddd..3f787967f9 100644\n--- a/sysdeps/ieee754/dbl-64/e_sinh.c\n+++ b/sysdeps/ieee754/dbl-64/e_sinh.c\n@@ -41,6 +41,11 @@ static char rcsid[] = \"$NetBSD: e_sinh.c,v 1.7 1995/05/10 20:46:13 jtc Exp $\";\n \n static const double one = 1.0, shuge = 1.0e307;\n \n+#ifndef SECTION\n+# define SECTION\n+#endif\n+\n+SECTION\n double\n __ieee754_sinh (double x)\n {\n@@ -90,4 +95,7 @@ __ieee754_sinh (double x)\n   /* |x| > overflowthresold, sinh(x) overflow */\n   return math_narrow_eval (x * shuge);\n }\n+\n+#ifndef __ieee754_sinh\n libm_alias_finite (__ieee754_sinh, __sinh)\n+#endif\ndiff --git a/sysdeps/x86_64/fpu/multiarch/Makefile b/sysdeps/x86_64/fpu/multiarch/Makefile\nindex 0f69f7089c..b527cab8d1 100644\n--- a/sysdeps/x86_64/fpu/multiarch/Makefile\n+++ b/sysdeps/x86_64/fpu/multiarch/Makefile\n@@ -5,6 +5,7 @@ CFLAGS-e_exp-fma.c = -mfma -mavx2\n CFLAGS-e_log-fma.c = -mfma -mavx2\n CFLAGS-e_log2-fma.c = -mfma -mavx2\n CFLAGS-e_pow-fma.c = -mfma -mavx2\n+CFLAGS-e_sinh-fma.c = -mfma -mavx2\n CFLAGS-s_atan-fma.c = -mfma -mavx2\n CFLAGS-s_expm1-fma.c = -mfma -mavx2\n CFLAGS-s_log1p-fma.c = -mfma -mavx2\n@@ -67,6 +68,7 @@ libm-sysdep_routines += \\\n   e_logf-fma \\\n   e_pow-fma \\\n   e_powf-fma \\\n+  e_sinh-fma \\\n   s_atan-avx \\\n   s_atan-fma \\\n   s_ceil-sse4_1 \\\ndiff --git a/sysdeps/x86_64/fpu/multiarch/e_sinh-fma.c b/sysdeps/x86_64/fpu/multiarch/e_sinh-fma.c\nnew file mode 100644\nindex 0000000000..e0e1e39a7a\n--- /dev/null\n+++ b/sysdeps/x86_64/fpu/multiarch/e_sinh-fma.c\n@@ -0,0 +1,12 @@\n+#define __ieee754_sinh __ieee754_sinh_fma\n+#define __ieee754_exp __ieee754_exp_fma\n+#define __expm1 __expm1_fma\n+\n+/* NB: __expm1 may be expanded to __expm1_fma in the following\n+   prototypes.  */\n+extern long double __expm1l (long double);\n+extern long double __expm1f128 (long double);\n+\n+#define SECTION __attribute__ ((section (\".text.fma\")))\n+\n+#include <sysdeps/ieee754/dbl-64/e_sinh.c>\ndiff --git a/sysdeps/x86_64/fpu/multiarch/e_sinh.c b/sysdeps/x86_64/fpu/multiarch/e_sinh.c\nnew file mode 100644\nindex 0000000000..3d3c18ccdf\n--- /dev/null\n+++ b/sysdeps/x86_64/fpu/multiarch/e_sinh.c\n@@ -0,0 +1,35 @@\n+/* Multiple versions of sinh.\n+   Copyright (C) 2025 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <sysdeps/x86/isa-level.h>\n+#if MINIMUM_X86_ISA_LEVEL < AVX2_X86_ISA_LEVEL\n+# include <libm-alias-finite.h>\n+\n+extern double __redirect_ieee754_sinh (double);\n+\n+# define SYMBOL_NAME ieee754_sinh\n+# include \"ifunc-fma.h\"\n+\n+libc_ifunc_redirected (__redirect_ieee754_sinh, __ieee754_sinh,\n+\t\t       IFUNC_SELECTOR ());\n+\n+libm_alias_finite (__ieee754_sinh, __sinh)\n+\n+# define __ieee754_sinh __ieee754_sinh_sse2\n+#endif\n+#include <sysdeps/ieee754/dbl-64/e_sinh.c>\n\ncommit e5f5dfdda28def8362896bdb1748bb27dfc8be73\nAuthor: Sunil K Pandey <skpgkp2@gmail.com>\nDate:   Wed Mar 5 16:13:38 2025 -0800\n\n    x86_64: Add atanh with FMA\n    \n    On SPR, it improves atanh bench performance by:\n    \n                            Before          After           Improvement\n    reciprocal-throughput   15.1715         14.8628         2%\n    latency                 57.1941         56.1883         2%\n    \n    Reviewed-by: H.J. Lu <hjl.tools@gmail.com>\n    (cherry picked from commit c7c4a5906f326f1290b1c2413a83c530564ec4b8)\n\ndiff --git a/benchtests/atanh-inputs b/benchtests/atanh-inputs\nindex 455aa65b65..4985293254 100644\n--- a/benchtests/atanh-inputs\n+++ b/benchtests/atanh-inputs\n@@ -1,6 +1,7 @@\n ## args: double\n ## ret: double\n ## includes: math.h\n+## name: workload-random\n 0x1.5a2730bacd94ap-1\n -0x1.b57eb40fc048ep-21\n -0x1.c0b185fb450e2p-17\ndiff --git a/sysdeps/ieee754/dbl-64/e_atanh.c b/sysdeps/ieee754/dbl-64/e_atanh.c\nindex 11a2a45799..05ac0a1b30 100644\n--- a/sysdeps/ieee754/dbl-64/e_atanh.c\n+++ b/sysdeps/ieee754/dbl-64/e_atanh.c\n@@ -44,6 +44,11 @@\n \n static const double huge = 1e300;\n \n+#ifndef SECTION\n+# define SECTION\n+#endif\n+\n+SECTION\n double\n __ieee754_atanh (double x)\n {\n@@ -73,4 +78,7 @@ __ieee754_atanh (double x)\n \n   return copysign (t, x);\n }\n+\n+#ifndef __ieee754_atanh\n libm_alias_finite (__ieee754_atanh, __atanh)\n+#endif\ndiff --git a/sysdeps/x86_64/fpu/multiarch/Makefile b/sysdeps/x86_64/fpu/multiarch/Makefile\nindex b527cab8d1..bc479b42d2 100644\n--- a/sysdeps/x86_64/fpu/multiarch/Makefile\n+++ b/sysdeps/x86_64/fpu/multiarch/Makefile\n@@ -1,6 +1,7 @@\n ifeq ($(subdir),math)\n CFLAGS-e_asin-fma.c = -mfma -mavx2\n CFLAGS-e_atan2-fma.c = -mfma -mavx2\n+CFLAGS-e_atanh-fma.c = -mfma -mavx2\n CFLAGS-e_exp-fma.c = -mfma -mavx2\n CFLAGS-e_log-fma.c = -mfma -mavx2\n CFLAGS-e_log2-fma.c = -mfma -mavx2\n@@ -57,6 +58,7 @@ libm-sysdep_routines += \\\n   e_asin-fma \\\n   e_atan2-avx \\\n   e_atan2-fma \\\n+  e_atanh-fma \\\n   e_exp-avx \\\n   e_exp-fma \\\n   e_exp2f-fma \\\ndiff --git a/sysdeps/x86_64/fpu/multiarch/e_atanh-fma.c b/sysdeps/x86_64/fpu/multiarch/e_atanh-fma.c\nnew file mode 100644\nindex 0000000000..c3f2f9e550\n--- /dev/null\n+++ b/sysdeps/x86_64/fpu/multiarch/e_atanh-fma.c\n@@ -0,0 +1,6 @@\n+#define __ieee754_atanh __ieee754_atanh_fma\n+#define __log1p __log1p_fma\n+\n+#define SECTION __attribute__ ((section (\".text.fma\")))\n+\n+#include <sysdeps/ieee754/dbl-64/e_atanh.c>\ndiff --git a/sysdeps/x86_64/fpu/multiarch/e_atanh.c b/sysdeps/x86_64/fpu/multiarch/e_atanh.c\nnew file mode 100644\nindex 0000000000..d2b785dfc0\n--- /dev/null\n+++ b/sysdeps/x86_64/fpu/multiarch/e_atanh.c\n@@ -0,0 +1,34 @@\n+/* Multiple versions of atanh.\n+   Copyright (C) 2025 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <sysdeps/x86/isa-level.h>\n+#if MINIMUM_X86_ISA_LEVEL < AVX2_X86_ISA_LEVEL\n+# include <libm-alias-finite.h>\n+\n+extern double __redirect_ieee754_atanh (double);\n+\n+# define SYMBOL_NAME ieee754_atanh\n+# include \"ifunc-fma.h\"\n+\n+libc_ifunc_redirected (__redirect_ieee754_atanh, __ieee754_atanh, IFUNC_SELECTOR ());\n+\n+libm_alias_finite (__ieee754_atanh, __atanh)\n+\n+# define __ieee754_atanh __ieee754_atanh_sse2\n+#endif\n+#include <sysdeps/ieee754/dbl-64/e_atanh.c>\n\ncommit 8fc492bb4234edc1a5e8c3b7f76ba345ea7109ec\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Fri Mar 28 09:26:06 2025 +0100\n\n    x86: Skip XSAVE state size reset if ISA level requires XSAVE\n    \n    If we have to use XSAVE or XSAVEC trampolines, do not adjust the size\n    information they need.  Technically, it is an operator error to try to\n    run with -XSAVE,-XSAVEC on such builds, but this change here disables\n    some unnecessary code with higher ISA levels and simplifies testing.\n    \n    Related to commit befe2d3c4dec8be2cdd01a47132e47bdb7020922\n    (\"x86-64: Don't use SSE resolvers for ISA level 3 or above\").\n    \n    Reviewed-by: H.J. Lu <hjl.tools@gmail.com>\n    (cherry picked from commit 59585ddaa2d44f22af04bb4b8bd4ad1e302c4c02)\n\ndiff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c\nindex c096dd390a..b5b264db7f 100644\n--- a/sysdeps/x86/cpu-features.c\n+++ b/sysdeps/x86/cpu-features.c\n@@ -24,6 +24,7 @@\n #include <dl-cacheinfo.h>\n #include <dl-minsigstacksize.h>\n #include <dl-hwcap2.h>\n+#include <gcc-macros.h>\n \n extern void TUNABLE_CALLBACK (set_hwcaps) (tunable_val_t *)\n   attribute_hidden;\n@@ -1119,6 +1120,9 @@ no_cpuid:\n \t       TUNABLE_CALLBACK (set_prefer_map_32bit_exec));\n #endif\n \n+  /* Do not add the logic to disable XSAVE/XSAVEC if this glibc build\n+     requires AVX and therefore XSAVE or XSAVEC support.  */\n+#ifndef GCCMACRO__AVX__\n   bool disable_xsave_features = false;\n \n   if (!CPU_FEATURE_USABLE_P (cpu_features, OSXSAVE))\n@@ -1172,6 +1176,7 @@ no_cpuid:\n \n       CPU_FEATURE_UNSET (cpu_features, FMA4);\n     }\n+#endif\n \n #ifdef __x86_64__\n   GLRO(dl_hwcap) = HWCAP_X86_64;\n\ncommit df22af58f66e6815c054b1c56249356c2994935a\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Fri Mar 28 09:26:59 2025 +0100\n\n    x86: Use separate variable for TLSDESC XSAVE/XSAVEC state size (bug 32810)\n    \n    Previously, the initialization code reused the xsave_state_full_size\n    member of struct cpu_features for the TLSDESC state size.  However,\n    the tunable processing code assumes that this member has the\n    original XSAVE (non-compact) state size, so that it can use its\n    value if XSAVEC is disabled via tunable.\n    \n    This change uses a separate variable and not a struct member because\n    the value is only needed in ld.so and the static libc, but not in\n    libc.so.  As a result, struct cpu_features layout does not change,\n    helping a future backport of this change.\n    \n    Fixes commit 9b7091415af47082664717210ac49d51551456ab (\"x86-64:\n    Update _dl_tlsdesc_dynamic to preserve AMX registers\").\n    \n    Reviewed-by: H.J. Lu <hjl.tools@gmail.com>\n    (cherry picked from commit 145097dff170507fe73190e8e41194f5b5f7e6bf)\n\ndiff --git a/NEWS b/NEWS\nindex 57feba81cd..7a6985f5dd 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -22,6 +22,7 @@ The following bugs are resolved with this release:\n   [32231] elf: Change ldconfig auxcache magic number\n   [32245] glibc -Wstringop-overflow= build failure on hppa\n   [32470] x86: Avoid integer truncation with large cache sizes\n+  [32810] Crash on x86-64 if XSAVEC disable via tunable\n \f\n Version 2.40\n \ndiff --git a/sysdeps/x86/Makefile b/sysdeps/x86/Makefile\nindex 5311b594af..8819fba1b7 100644\n--- a/sysdeps/x86/Makefile\n+++ b/sysdeps/x86/Makefile\n@@ -21,6 +21,9 @@ tests += \\\n   tst-cpu-features-supports-static \\\n   tst-get-cpu-features \\\n   tst-get-cpu-features-static \\\n+  tst-gnu2-tls2-x86-noxsave \\\n+  tst-gnu2-tls2-x86-noxsavec \\\n+  tst-gnu2-tls2-x86-noxsavexsavec \\\n   tst-hwcap-tunables \\\n # tests\n tests-static += \\\n@@ -91,6 +94,22 @@ CFLAGS-tst-gnu2-tls2.c += -msse\n CFLAGS-tst-gnu2-tls2mod0.c += -msse2 -mtune=haswell\n CFLAGS-tst-gnu2-tls2mod1.c += -msse2 -mtune=haswell\n CFLAGS-tst-gnu2-tls2mod2.c += -msse2 -mtune=haswell\n+\n+LDFLAGS-tst-gnu2-tls2-x86-noxsave += -Wl,-z,lazy\n+LDFLAGS-tst-gnu2-tls2-x86-noxsavec += -Wl,-z,lazy\n+LDFLAGS-tst-gnu2-tls2-x86-noxsavexsavec += -Wl,-z,lazy\n+\n+# Test for bug 32810: incorrect XSAVE state size if XSAVEC is disabled\n+# via tunable.\n+tst-gnu2-tls2-x86-noxsave-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-XSAVE\n+tst-gnu2-tls2-x86-noxsavec-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-XSAVEC\n+tst-gnu2-tls2-x86-noxsavexsavec-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-XSAVE,-XSAVEC\n+$(objpfx)tst-gnu2-tls2-x86-noxsave.out \\\n+$(objpfx)tst-gnu2-tls2-x86-noxsavec.out \\\n+$(objpfx)tst-gnu2-tls2-x86-noxsavexsavec.out: \\\n+  $(objpfx)tst-gnu2-tls2mod0.so \\\n+  $(objpfx)tst-gnu2-tls2mod1.so \\\n+  $(objpfx)tst-gnu2-tls2mod2.so\n endif\n \n ifeq ($(subdir),math)\ndiff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c\nindex b5b264db7f..ec27337337 100644\n--- a/sysdeps/x86/cpu-features.c\n+++ b/sysdeps/x86/cpu-features.c\n@@ -84,6 +84,8 @@ extern void TUNABLE_CALLBACK (set_x86_shstk) (tunable_val_t *)\n # include <dl-cet.h>\n #endif\n \n+unsigned long int _dl_x86_features_tlsdesc_state_size;\n+\n static void\n update_active (struct cpu_features *cpu_features)\n {\n@@ -318,6 +320,7 @@ update_active (struct cpu_features *cpu_features)\n \t\t= xsave_state_full_size;\n \t      cpu_features->xsave_state_full_size\n \t\t= xsave_state_full_size;\n+\t      _dl_x86_features_tlsdesc_state_size = xsave_state_full_size;\n \n \t      /* Check if XSAVEC is available.  */\n \t      if (CPU_FEATURES_CPU_P (cpu_features, XSAVEC))\n@@ -406,11 +409,9 @@ update_active (struct cpu_features *cpu_features)\n \t\t\t= ALIGN_UP ((amx_size\n \t\t\t\t     + TLSDESC_CALL_REGISTER_SAVE_AREA),\n \t\t\t\t    64);\n-\t\t      /* Set xsave_state_full_size to the compact AMX\n-\t\t\t state size for XSAVEC.  NB: xsave_state_full_size\n-\t\t\t is only used in _dl_tlsdesc_dynamic_xsave and\n-\t\t\t _dl_tlsdesc_dynamic_xsavec.  */\n-\t\t      cpu_features->xsave_state_full_size = amx_size;\n+\t\t      /* Set TLSDESC state size to the compact AMX\n+\t\t\t state size for XSAVEC.  */\n+\t\t      _dl_x86_features_tlsdesc_state_size = amx_size;\n #endif\n \t\t      cpu_features->xsave_state_size\n \t\t\t= ALIGN_UP (size + TLSDESC_CALL_REGISTER_SAVE_AREA,\ndiff --git a/sysdeps/x86/cpu-tunables.c b/sysdeps/x86/cpu-tunables.c\nindex ccc6b64dc2..a0b31d80f6 100644\n--- a/sysdeps/x86/cpu-tunables.c\n+++ b/sysdeps/x86/cpu-tunables.c\n@@ -164,6 +164,8 @@ TUNABLE_CALLBACK (set_hwcaps) (tunable_val_t *valp)\n \t\t  /* Update xsave_state_size to XSAVE state size.  */\n \t\t  cpu_features->xsave_state_size\n \t\t    = cpu_features->xsave_state_full_size;\n+\t\t  _dl_x86_features_tlsdesc_state_size\n+\t\t    = cpu_features->xsave_state_full_size;\n \t\t  CPU_FEATURE_UNSET (cpu_features, XSAVEC);\n \t\t}\n \t    }\ndiff --git a/sysdeps/x86/dl-diagnostics-cpu.c b/sysdeps/x86/dl-diagnostics-cpu.c\nindex 49eeb5f70a..41100a908a 100644\n--- a/sysdeps/x86/dl-diagnostics-cpu.c\n+++ b/sysdeps/x86/dl-diagnostics-cpu.c\n@@ -89,6 +89,8 @@ _dl_diagnostics_cpu (void)\n                             cpu_features->xsave_state_size);\n   print_cpu_features_value (\"xsave_state_full_size\",\n                             cpu_features->xsave_state_full_size);\n+  print_cpu_features_value (\"tlsdesc_state_full_size\",\n+                            _dl_x86_features_tlsdesc_state_size);\n   print_cpu_features_value (\"data_cache_size\", cpu_features->data_cache_size);\n   print_cpu_features_value (\"shared_cache_size\",\n                             cpu_features->shared_cache_size);\ndiff --git a/sysdeps/x86/include/cpu-features.h b/sysdeps/x86/include/cpu-features.h\nindex aaae44f0e1..03c71387dd 100644\n--- a/sysdeps/x86/include/cpu-features.h\n+++ b/sysdeps/x86/include/cpu-features.h\n@@ -934,8 +934,6 @@ struct cpu_features\n   /* The full state size for XSAVE when XSAVEC is disabled by\n \n      GLIBC_TUNABLES=glibc.cpu.hwcaps=-XSAVEC\n-\n-     and the AMX state size when XSAVEC is available.\n    */\n   unsigned int xsave_state_full_size;\n   /* Data cache size for use in memory and string routines, typically\n@@ -989,6 +987,13 @@ extern const struct cpu_features *_dl_x86_get_cpu_features (void)\n \n #define __get_cpu_features() _dl_x86_get_cpu_features()\n \n+#if IS_IN (rtld) || IS_IN (libc)\n+/* XSAVE/XSAVEC state size used by TLS descriptors.  Compared to\n+   xsave_state_size from struct cpu_features, this includes additional\n+   registers.  */\n+extern unsigned long int _dl_x86_features_tlsdesc_state_size attribute_hidden;\n+#endif\n+\n #if defined (_LIBC) && !IS_IN (nonlib)\n /* Unused for x86.  */\n # define INIT_ARCH()\ndiff --git a/sysdeps/x86/tst-gnu2-tls2-x86-noxsave.c b/sysdeps/x86/tst-gnu2-tls2-x86-noxsave.c\nnew file mode 100644\nindex 0000000000..f0024c143d\n--- /dev/null\n+++ b/sysdeps/x86/tst-gnu2-tls2-x86-noxsave.c\n@@ -0,0 +1 @@\n+#include <elf/tst-gnu2-tls2.c>\ndiff --git a/sysdeps/x86/tst-gnu2-tls2-x86-noxsavec.c b/sysdeps/x86/tst-gnu2-tls2-x86-noxsavec.c\nnew file mode 100644\nindex 0000000000..f0024c143d\n--- /dev/null\n+++ b/sysdeps/x86/tst-gnu2-tls2-x86-noxsavec.c\n@@ -0,0 +1 @@\n+#include <elf/tst-gnu2-tls2.c>\ndiff --git a/sysdeps/x86/tst-gnu2-tls2-x86-noxsavexsavec.c b/sysdeps/x86/tst-gnu2-tls2-x86-noxsavexsavec.c\nnew file mode 100644\nindex 0000000000..f0024c143d\n--- /dev/null\n+++ b/sysdeps/x86/tst-gnu2-tls2-x86-noxsavexsavec.c\n@@ -0,0 +1 @@\n+#include <elf/tst-gnu2-tls2.c>\ndiff --git a/sysdeps/x86_64/dl-tlsdesc-dynamic.h b/sysdeps/x86_64/dl-tlsdesc-dynamic.h\nindex 9f02cfc3eb..44d948696f 100644\n--- a/sysdeps/x86_64/dl-tlsdesc-dynamic.h\n+++ b/sysdeps/x86_64/dl-tlsdesc-dynamic.h\n@@ -99,7 +99,7 @@ _dl_tlsdesc_dynamic:\n # endif\n #else\n \t/* Allocate stack space of the required size to save the state.  */\n-\tsub\t_rtld_local_ro+RTLD_GLOBAL_RO_DL_X86_CPU_FEATURES_OFFSET+XSAVE_STATE_FULL_SIZE_OFFSET(%rip), %RSP_LP\n+\tsub\t_dl_x86_features_tlsdesc_state_size(%rip), %RSP_LP\n #endif\n \t/* Besides rdi and rsi, saved above, save rcx, rdx, r8, r9,\n \t   r10 and r11.  */\n\ncommit a87d9a2c2cc17a3b22fd3be8d106336f4dcf2042\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Mon Mar 31 21:33:18 2025 +0200\n\n    x86: Link tst-gnu2-tls2-x86-noxsave{,c,xsavec} with libpthread\n    \n    This fixes a test build failure on Hurd.\n    \n    Fixes commit 145097dff170507fe73190e8e41194f5b5f7e6bf (\"x86: Use separate\n    variable for TLSDESC XSAVE/XSAVEC state size (bug 32810)\").\n    \n    Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>\n    (cherry picked from commit c6e2895695118ab59c7b17feb0fcb75a53e3478c)\n\ndiff --git a/sysdeps/x86/Makefile b/sysdeps/x86/Makefile\nindex 8819fba1b7..01b0192ddf 100644\n--- a/sysdeps/x86/Makefile\n+++ b/sysdeps/x86/Makefile\n@@ -104,6 +104,9 @@ LDFLAGS-tst-gnu2-tls2-x86-noxsavexsavec += -Wl,-z,lazy\n tst-gnu2-tls2-x86-noxsave-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-XSAVE\n tst-gnu2-tls2-x86-noxsavec-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-XSAVEC\n tst-gnu2-tls2-x86-noxsavexsavec-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-XSAVE,-XSAVEC\n+$(objpfx)tst-gnu2-tls2-x86-noxsave: $(shared-thread-library)\n+$(objpfx)tst-gnu2-tls2-x86-noxsavec: $(shared-thread-library)\n+$(objpfx)tst-gnu2-tls2-x86-noxsavexsavec: $(shared-thread-library)\n $(objpfx)tst-gnu2-tls2-x86-noxsave.out \\\n $(objpfx)tst-gnu2-tls2-x86-noxsavec.out \\\n $(objpfx)tst-gnu2-tls2-x86-noxsavexsavec.out: \\\n\ncommit 8fe27af20c8b25b84e12bcd52353862a95044aa2\nAuthor: Noah Goldstein <goldstein.w.n@gmail.com>\nDate:   Wed Aug 14 14:37:30 2024 +0800\n\n    x86: Use `Avoid_Non_Temporal_Memset` to control non-temporal path\n    \n    This is just a refactor and there should be no behavioral change from\n    this commit.\n    \n    The goal is to make `Avoid_Non_Temporal_Memset` a more universal knob\n    for controlling whether we use non-temporal memset rather than having\n    extra logic based on vendor.\n    Reviewed-by: H.J. Lu <hjl.tools@gmail.com>\n    \n    (cherry picked from commit b93dddfaf440aa12f45d7c356f6ffe9f27d35577)\n\ndiff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c\nindex ec27337337..8841020b36 100644\n--- a/sysdeps/x86/cpu-features.c\n+++ b/sysdeps/x86/cpu-features.c\n@@ -758,6 +758,12 @@ init_cpu_features (struct cpu_features *cpu_features)\n   unsigned int stepping = 0;\n   enum cpu_features_kind kind;\n \n+  /* Default is avoid non-temporal memset for non Intel/AMD hardware. This is,\n+     as of writing this, we only have benchmarks indicatings it profitability\n+     on Intel/AMD.  */\n+  cpu_features->preferred[index_arch_Avoid_Non_Temporal_Memset]\n+      |= bit_arch_Avoid_Non_Temporal_Memset;\n+\n   cpu_features->cachesize_non_temporal_divisor = 4;\n #if !HAS_CPUID\n   if (__get_cpuid_max (0, 0) == 0)\n@@ -783,6 +789,11 @@ init_cpu_features (struct cpu_features *cpu_features)\n \n       update_active (cpu_features);\n \n+      /* Benchmarks indicate non-temporal memset can be profitable on Intel\n+\thardware.  */\n+      cpu_features->preferred[index_arch_Avoid_Non_Temporal_Memset]\n+\t  &= ~bit_arch_Avoid_Non_Temporal_Memset;\n+\n       if (family == 0x06)\n \t{\n \t  model += extended_model;\n@@ -993,6 +1004,11 @@ https://www.intel.com/content/www/us/en/support/articles/000059422/processors.ht\n \n       ecx = cpu_features->features[CPUID_INDEX_1].cpuid.ecx;\n \n+      /* Benchmarks indicate non-temporal memset can be profitable on AMD\n+\thardware.  */\n+      cpu_features->preferred[index_arch_Avoid_Non_Temporal_Memset]\n+\t  &= ~bit_arch_Avoid_Non_Temporal_Memset;\n+\n       if (CPU_FEATURE_USABLE_P (cpu_features, AVX))\n \t{\n \t  /* Since the FMA4 bit is in CPUID_INDEX_80000001 and\ndiff --git a/sysdeps/x86/dl-cacheinfo.h b/sysdeps/x86/dl-cacheinfo.h\nindex ac97414b5b..7b1b61c096 100644\n--- a/sysdeps/x86/dl-cacheinfo.h\n+++ b/sysdeps/x86/dl-cacheinfo.h\n@@ -988,14 +988,6 @@ dl_init_cacheinfo (struct cpu_features *cpu_features)\n   if (CPU_FEATURE_USABLE_P (cpu_features, FSRM))\n     rep_movsb_threshold = 2112;\n \n-  /* Non-temporal stores are more performant on Intel and AMD hardware above\n-     non_temporal_threshold. Enable this for both Intel and AMD hardware. */\n-  unsigned long int memset_non_temporal_threshold = SIZE_MAX;\n-  if (!CPU_FEATURES_ARCH_P (cpu_features, Avoid_Non_Temporal_Memset)\n-      && (cpu_features->basic.kind == arch_kind_intel\n-\t  || cpu_features->basic.kind == arch_kind_amd))\n-    memset_non_temporal_threshold = non_temporal_threshold;\n-\n   /* For AMD CPUs that support ERMS (Zen3+), REP MOVSB is in a lot of\n      cases slower than the vectorized path (and for some alignments,\n      it is really slow, check BZ #30994).  */\n@@ -1017,6 +1009,13 @@ dl_init_cacheinfo (struct cpu_features *cpu_features)\n   if (tunable_size != 0)\n     shared = tunable_size;\n \n+  /* Non-temporal stores are more performant on some hardware above\n+     non_temporal_threshold. Currently Prefer_Non_Temporal is set for for both\n+     Intel and AMD hardware. */\n+  unsigned long int memset_non_temporal_threshold = SIZE_MAX;\n+  if (!CPU_FEATURES_ARCH_P (cpu_features, Avoid_Non_Temporal_Memset))\n+    memset_non_temporal_threshold = non_temporal_threshold;\n+\n   tunable_size = TUNABLE_GET (x86_non_temporal_threshold, long int, NULL);\n   if (tunable_size > minimum_non_temporal_threshold\n       && tunable_size <= maximum_non_temporal_threshold)\n\ncommit 7c6bd71b4dbdadab34e4fd21ec09b86b32daf443\nAuthor: Sunil K Pandey <skpgkp2@gmail.com>\nDate:   Thu Apr 3 13:00:45 2025 -0700\n\n    x86: Optimize xstate size calculation\n    \n    Scan xstate IDs up to the maximum supported xstate ID.  Remove the\n    separate AMX xstate calculation.  Instead, exclude the AMX space from\n    the start of TILECFG to the end of TILEDATA in xsave_state_size.\n    \n    Completed validation on SKL/SKX/SPR/SDE and compared xsave state size\n    with \"ld.so --list-diagnostics\" option, no regression.\n    \n    Co-Authored-By: H.J. Lu <hjl.tools@gmail.com>\n    Reviewed-by: Sunil K Pandey <skpgkp2@gmail.com>\n    (cherry picked from commit 70b648855185e967e54668b101d24704c3fb869d)\n\ndiff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c\nindex 8841020b36..1d5e2a0072 100644\n--- a/sysdeps/x86/cpu-features.c\n+++ b/sysdeps/x86/cpu-features.c\n@@ -325,13 +325,8 @@ update_active (struct cpu_features *cpu_features)\n \t      /* Check if XSAVEC is available.  */\n \t      if (CPU_FEATURES_CPU_P (cpu_features, XSAVEC))\n \t\t{\n-\t\t  unsigned int xstate_comp_offsets[32];\n-\t\t  unsigned int xstate_comp_sizes[32];\n-#ifdef __x86_64__\n-\t\t  unsigned int xstate_amx_comp_offsets[32];\n-\t\t  unsigned int xstate_amx_comp_sizes[32];\n-\t\t  unsigned int amx_ecx;\n-#endif\n+\t\t  unsigned int xstate_comp_offsets[X86_XSTATE_MAX_ID + 1];\n+\t\t  unsigned int xstate_comp_sizes[X86_XSTATE_MAX_ID + 1];\n \t\t  unsigned int i;\n \n \t\t  xstate_comp_offsets[0] = 0;\n@@ -339,39 +334,16 @@ update_active (struct cpu_features *cpu_features)\n \t\t  xstate_comp_offsets[2] = 576;\n \t\t  xstate_comp_sizes[0] = 160;\n \t\t  xstate_comp_sizes[1] = 256;\n-#ifdef __x86_64__\n-\t\t  xstate_amx_comp_offsets[0] = 0;\n-\t\t  xstate_amx_comp_offsets[1] = 160;\n-\t\t  xstate_amx_comp_offsets[2] = 576;\n-\t\t  xstate_amx_comp_sizes[0] = 160;\n-\t\t  xstate_amx_comp_sizes[1] = 256;\n-#endif\n \n-\t\t  for (i = 2; i < 32; i++)\n+\t\t  for (i = 2; i <= X86_XSTATE_MAX_ID; i++)\n \t\t    {\n \t\t      if ((FULL_STATE_SAVE_MASK & (1 << i)) != 0)\n \t\t\t{\n \t\t\t  __cpuid_count (0xd, i, eax, ebx, ecx, edx);\n-#ifdef __x86_64__\n-\t\t\t  /* Include this in xsave_state_full_size.  */\n-\t\t\t  amx_ecx = ecx;\n-\t\t\t  xstate_amx_comp_sizes[i] = eax;\n-\t\t\t  if ((AMX_STATE_SAVE_MASK & (1 << i)) != 0)\n-\t\t\t    {\n-\t\t\t      /* Exclude this from xsave_state_size.  */\n-\t\t\t      ecx = 0;\n-\t\t\t      xstate_comp_sizes[i] = 0;\n-\t\t\t    }\n-\t\t\t  else\n-#endif\n-\t\t\t    xstate_comp_sizes[i] = eax;\n+\t\t\t  xstate_comp_sizes[i] = eax;\n \t\t\t}\n \t\t      else\n \t\t\t{\n-#ifdef __x86_64__\n-\t\t\t  amx_ecx = 0;\n-\t\t\t  xstate_amx_comp_sizes[i] = 0;\n-#endif\n \t\t\t  ecx = 0;\n \t\t\t  xstate_comp_sizes[i] = 0;\n \t\t\t}\n@@ -380,42 +352,32 @@ update_active (struct cpu_features *cpu_features)\n \t\t\t{\n \t\t\t  xstate_comp_offsets[i]\n \t\t\t    = (xstate_comp_offsets[i - 1]\n-\t\t\t       + xstate_comp_sizes[i -1]);\n+\t\t\t       + xstate_comp_sizes[i - 1]);\n \t\t\t  if ((ecx & (1 << 1)) != 0)\n \t\t\t    xstate_comp_offsets[i]\n \t\t\t      = ALIGN_UP (xstate_comp_offsets[i], 64);\n-#ifdef __x86_64__\n-\t\t\t  xstate_amx_comp_offsets[i]\n-\t\t\t    = (xstate_amx_comp_offsets[i - 1]\n-\t\t\t       + xstate_amx_comp_sizes[i - 1]);\n-\t\t\t  if ((amx_ecx & (1 << 1)) != 0)\n-\t\t\t    xstate_amx_comp_offsets[i]\n-\t\t\t      = ALIGN_UP (xstate_amx_comp_offsets[i],\n-\t\t\t\t\t  64);\n-#endif\n \t\t\t}\n \t\t    }\n \n \t\t  /* Use XSAVEC.  */\n \t\t  unsigned int size\n-\t\t    = xstate_comp_offsets[31] + xstate_comp_sizes[31];\n+\t\t    = (xstate_comp_offsets[X86_XSTATE_MAX_ID]\n+\t\t       + xstate_comp_sizes[X86_XSTATE_MAX_ID]);\n \t\t  if (size)\n \t\t    {\n+\t\t      size = ALIGN_UP (size + TLSDESC_CALL_REGISTER_SAVE_AREA,\n+\t\t\t\t       64);\n #ifdef __x86_64__\n-\t\t      unsigned int amx_size\n-\t\t\t= (xstate_amx_comp_offsets[31]\n-\t\t\t   + xstate_amx_comp_sizes[31]);\n-\t\t      amx_size\n-\t\t\t= ALIGN_UP ((amx_size\n-\t\t\t\t     + TLSDESC_CALL_REGISTER_SAVE_AREA),\n-\t\t\t\t    64);\n-\t\t      /* Set TLSDESC state size to the compact AMX\n-\t\t\t state size for XSAVEC.  */\n-\t\t      _dl_x86_features_tlsdesc_state_size = amx_size;\n+\t\t      _dl_x86_features_tlsdesc_state_size = size;\n+\t\t      /* Exclude the AMX space from the start of TILECFG\n+\t\t\t space to the end of TILEDATA space.  If CPU\n+\t\t\t doesn't support AMX, TILECFG offset is the same\n+\t\t\t as TILEDATA + 1 offset.  Otherwise, they are\n+\t\t\t multiples of 64.  */\n+\t\t      size -= (xstate_comp_offsets[X86_XSTATE_TILEDATA_ID + 1]\n+\t\t\t       - xstate_comp_offsets[X86_XSTATE_TILECFG_ID]);\n #endif\n-\t\t      cpu_features->xsave_state_size\n-\t\t\t= ALIGN_UP (size + TLSDESC_CALL_REGISTER_SAVE_AREA,\n-\t\t\t\t    64);\n+\t\t      cpu_features->xsave_state_size = size;\n \t\t      CPU_FEATURE_SET (cpu_features, XSAVEC);\n \t\t    }\n \t\t}\ndiff --git a/sysdeps/x86/sysdep.h b/sysdeps/x86/sysdep.h\nindex 7359149e17..1d6cabd816 100644\n--- a/sysdeps/x86/sysdep.h\n+++ b/sysdeps/x86/sysdep.h\n@@ -102,6 +102,9 @@\n    | (1 << X86_XSTATE_ZMM_ID)\t\t\\\n    | (1 << X86_XSTATE_APX_F_ID))\n \n+/* The maximum supported xstate ID.  */\n+# define X86_XSTATE_MAX_ID\tX86_XSTATE_APX_F_ID\n+\n /* AMX state mask.  */\n # define AMX_STATE_SAVE_MASK\t\t\\\n   ((1 << X86_XSTATE_TILECFG_ID) | (1 << X86_XSTATE_TILEDATA_ID))\n@@ -123,6 +126,9 @@\n    | (1 << X86_XSTATE_K_ID)\t\t\\\n    | (1 << X86_XSTATE_ZMM_H_ID))\n \n+/* The maximum supported xstate ID.  */\n+# define X86_XSTATE_MAX_ID\tX86_XSTATE_ZMM_H_ID\n+\n /* States to be included in xsave_state_size.  */\n # define FULL_STATE_SAVE_MASK\t\tSTATE_SAVE_MASK\n #endif\n\ncommit 44f92df8007d57f82b1518e219a0dbb60389ef2c\nAuthor: Sunil K Pandey <skpgkp2@gmail.com>\nDate:   Thu Apr 3 18:14:20 2025 -0700\n\n    x86: Add ARL/PTL/CWF model detection support\n    \n    - Add ARROWLAKE model detection.\n    - Add PANTHERLAKE model detection.\n    - Add CLEARWATERFOREST model detection.\n    \n    Intel® Architecture Instruction Set Extensions Programming Reference\n    https://cdrdv2.intel.com/v1/dl/getContent/671368 Section 1.2.\n    \n    No regression, validated model detection on SDE.\n    \n    Reviewed-by: H.J. Lu <hjl.tools@gmail.com>\n    (cherry picked from commit e53eb952b970ac94c97d74fb447418fb327ca096)\n\ndiff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c\nindex 1d5e2a0072..7f21a8227e 100644\n--- a/sysdeps/x86/cpu-features.c\n+++ b/sysdeps/x86/cpu-features.c\n@@ -512,6 +512,7 @@ enum\n   INTEL_ATOM_GOLDMONT,\n   INTEL_ATOM_GOLDMONT_PLUS,\n   INTEL_ATOM_SIERRAFOREST,\n+  INTEL_ATOM_CLEARWATERFOREST,\n   INTEL_ATOM_GRANDRIDGE,\n   INTEL_ATOM_TREMONT,\n \n@@ -539,6 +540,7 @@ enum\n   INTEL_BIGCORE_METEORLAKE,\n   INTEL_BIGCORE_LUNARLAKE,\n   INTEL_BIGCORE_ARROWLAKE,\n+  INTEL_BIGCORE_PANTHERLAKE,\n   INTEL_BIGCORE_GRANITERAPIDS,\n \n   /* Mixed (bigcore + atom SOC).  */\n@@ -584,6 +586,8 @@ intel_get_fam6_microarch (unsigned int model,\n       return INTEL_ATOM_GOLDMONT_PLUS;\n     case 0xAF:\n       return INTEL_ATOM_SIERRAFOREST;\n+    case 0xDD:\n+      return INTEL_ATOM_CLEARWATERFOREST;\n     case 0xB6:\n       return INTEL_ATOM_GRANDRIDGE;\n     case 0x86:\n@@ -691,8 +695,12 @@ intel_get_fam6_microarch (unsigned int model,\n       return INTEL_BIGCORE_METEORLAKE;\n     case 0xbd:\n       return INTEL_BIGCORE_LUNARLAKE;\n+    case 0xb5:\n+    case 0xc5:\n     case 0xc6:\n       return INTEL_BIGCORE_ARROWLAKE;\n+    case 0xCC:\n+      return INTEL_BIGCORE_PANTHERLAKE;\n     case 0xAD:\n     case 0xAE:\n       return INTEL_BIGCORE_GRANITERAPIDS;\n@@ -808,6 +816,7 @@ init_cpu_features (struct cpu_features *cpu_features)\n \t    Default tuned atom microarch.\n \t    case INTEL_ATOM_SIERRAFOREST:\n \t    case INTEL_ATOM_GRANDRIDGE:\n+\t    case INTEL_ATOM_CLEARWATERFOREST:\n \t   */\n \n \t      /* Bigcore/Default Tuning.  */\n@@ -864,6 +873,7 @@ init_cpu_features (struct cpu_features *cpu_features)\n \t    case INTEL_BIGCORE_METEORLAKE:\n \t    case INTEL_BIGCORE_LUNARLAKE:\n \t    case INTEL_BIGCORE_ARROWLAKE:\n+\t    case INTEL_BIGCORE_PANTHERLAKE:\n \t    case INTEL_BIGCORE_SAPPHIRERAPIDS:\n \t    case INTEL_BIGCORE_EMERALDRAPIDS:\n \t    case INTEL_BIGCORE_GRANITERAPIDS:\n\ncommit 9ee8083c4edbe5e92af7aabb23261309f03ef05c\nAuthor: Sunil K Pandey <sunil.k.pandey@intel.com>\nDate:   Fri Apr 11 08:52:52 2025 -0700\n\n    x86: Handle unknown Intel processor with default tuning\n    \n    Enable default tuning for unknown Intel processor.\n    \n    Tested on x86, no regression.\n    \n    Co-Authored-By: H.J. Lu <hjl.tools@gmail.com>\n    Reviewed-by: H.J. Lu <hjl.tools@gmail.com>\n    (cherry picked from commit 9f0deff558d1d6b08c425c157f50de85013ada9c)\n\ndiff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c\nindex 7f21a8227e..1a6e694abf 100644\n--- a/sysdeps/x86/cpu-features.c\n+++ b/sysdeps/x86/cpu-features.c\n@@ -502,8 +502,8 @@ _Static_assert (((index_arch_Fast_Unaligned_Load\n \t\t\"Incorrect index_arch_Fast_Unaligned_Load\");\n \n \n-/* Intel Family-6 microarch list.  */\n-enum\n+/* Intel microarch list.  */\n+enum intel_microarch\n {\n   /* Atom processors.  */\n   INTEL_ATOM_BONNELL,\n@@ -555,7 +555,7 @@ enum\n   INTEL_UNKNOWN,\n };\n \n-static unsigned int\n+static enum intel_microarch\n intel_get_fam6_microarch (unsigned int model,\n \t\t\t  __attribute__ ((unused)) unsigned int stepping)\n {\n@@ -764,134 +764,20 @@ init_cpu_features (struct cpu_features *cpu_features)\n       cpu_features->preferred[index_arch_Avoid_Non_Temporal_Memset]\n \t  &= ~bit_arch_Avoid_Non_Temporal_Memset;\n \n+      enum intel_microarch microarch = INTEL_UNKNOWN;\n       if (family == 0x06)\n \t{\n \t  model += extended_model;\n-\t  unsigned int microarch\n-\t      = intel_get_fam6_microarch (model, stepping);\n+\t  microarch = intel_get_fam6_microarch (model, stepping);\n \n+\t  /* Disable TSX on some processors to avoid TSX on kernels that\n+\t     weren't updated with the latest microcode package (which\n+\t     disables broken feature by default).  */\n \t  switch (microarch)\n \t    {\n-\t      /* Atom / KNL tuning.  */\n-\t    case INTEL_ATOM_BONNELL:\n-\t      /* BSF is slow on Bonnell.  */\n-\t      cpu_features->preferred[index_arch_Slow_BSF]\n-\t\t  |= bit_arch_Slow_BSF;\n-\t      break;\n-\n-\t      /* Unaligned load versions are faster than SSSE3\n-\t\t     on Airmont, Silvermont, Goldmont, and Goldmont Plus.  */\n-\t    case INTEL_ATOM_AIRMONT:\n-\t    case INTEL_ATOM_SILVERMONT:\n-\t    case INTEL_ATOM_GOLDMONT:\n-\t    case INTEL_ATOM_GOLDMONT_PLUS:\n-\n-          /* Knights Landing.  Enable Silvermont optimizations.  */\n-\t    case INTEL_KNIGHTS_LANDING:\n-\n-\t      cpu_features->preferred[index_arch_Fast_Unaligned_Load]\n-\t\t  |= (bit_arch_Fast_Unaligned_Load\n-\t\t      | bit_arch_Fast_Unaligned_Copy\n-\t\t      | bit_arch_Prefer_PMINUB_for_stringop\n-\t\t      | bit_arch_Slow_SSE4_2);\n-\t      break;\n-\n-\t    case INTEL_ATOM_TREMONT:\n-\t      /* Enable rep string instructions, unaligned load, unaligned\n-\t\t copy, pminub and avoid SSE 4.2 on Tremont.  */\n-\t      cpu_features->preferred[index_arch_Fast_Rep_String]\n-\t\t  |= (bit_arch_Fast_Rep_String\n-\t\t      | bit_arch_Fast_Unaligned_Load\n-\t\t      | bit_arch_Fast_Unaligned_Copy\n-\t\t      | bit_arch_Prefer_PMINUB_for_stringop\n-\t\t      | bit_arch_Slow_SSE4_2);\n-\t      break;\n-\n-\t   /*\n-\t    Default tuned Knights microarch.\n-\t    case INTEL_KNIGHTS_MILL:\n-        */\n-\n-\t   /*\n-\t    Default tuned atom microarch.\n-\t    case INTEL_ATOM_SIERRAFOREST:\n-\t    case INTEL_ATOM_GRANDRIDGE:\n-\t    case INTEL_ATOM_CLEARWATERFOREST:\n-\t   */\n-\n-\t      /* Bigcore/Default Tuning.  */\n \t    default:\n-\t    default_tuning:\n-\t      /* Unknown family 0x06 processors.  Assuming this is one\n-\t\t of Core i3/i5/i7 processors if AVX is available.  */\n-\t      if (!CPU_FEATURES_CPU_P (cpu_features, AVX))\n-\t\tbreak;\n-\n-\t    enable_modern_features:\n-\t      /* Rep string instructions, unaligned load, unaligned copy,\n-\t\t and pminub are fast on Intel Core i3, i5 and i7.  */\n-\t      cpu_features->preferred[index_arch_Fast_Rep_String]\n-\t\t  |= (bit_arch_Fast_Rep_String\n-\t\t      | bit_arch_Fast_Unaligned_Load\n-\t\t      | bit_arch_Fast_Unaligned_Copy\n-\t\t      | bit_arch_Prefer_PMINUB_for_stringop);\n \t      break;\n \n-\t    case INTEL_BIGCORE_NEHALEM:\n-\t    case INTEL_BIGCORE_WESTMERE:\n-\t      /* Older CPUs prefer non-temporal stores at lower threshold.  */\n-\t      cpu_features->cachesize_non_temporal_divisor = 8;\n-\t      goto enable_modern_features;\n-\n-\t      /* Older Bigcore microarch (smaller non-temporal store\n-\t\t threshold).  */\n-\t    case INTEL_BIGCORE_SANDYBRIDGE:\n-\t    case INTEL_BIGCORE_IVYBRIDGE:\n-\t    case INTEL_BIGCORE_HASWELL:\n-\t    case INTEL_BIGCORE_BROADWELL:\n-\t      cpu_features->cachesize_non_temporal_divisor = 8;\n-\t      goto default_tuning;\n-\n-\t      /* Newer Bigcore microarch (larger non-temporal store\n-\t\t threshold).  */\n-\t    case INTEL_BIGCORE_SKYLAKE_AVX512:\n-\t    case INTEL_BIGCORE_CANNONLAKE:\n-\t      /* Benchmarks indicate non-temporal memset is not\n-\t\t     necessarily profitable on SKX (and in some cases much\n-\t\t     worse). This is likely unique to SKX due its it unique\n-\t\t     mesh interconnect (not present on ICX or BWD). Disable\n-\t\t     non-temporal on all Skylake servers. */\n-\t      cpu_features->preferred[index_arch_Avoid_Non_Temporal_Memset]\n-\t\t  |= bit_arch_Avoid_Non_Temporal_Memset;\n-\t    case INTEL_BIGCORE_COMETLAKE:\n-\t    case INTEL_BIGCORE_SKYLAKE:\n-\t    case INTEL_BIGCORE_KABYLAKE:\n-\t    case INTEL_BIGCORE_ICELAKE:\n-\t    case INTEL_BIGCORE_TIGERLAKE:\n-\t    case INTEL_BIGCORE_ROCKETLAKE:\n-\t    case INTEL_BIGCORE_RAPTORLAKE:\n-\t    case INTEL_BIGCORE_METEORLAKE:\n-\t    case INTEL_BIGCORE_LUNARLAKE:\n-\t    case INTEL_BIGCORE_ARROWLAKE:\n-\t    case INTEL_BIGCORE_PANTHERLAKE:\n-\t    case INTEL_BIGCORE_SAPPHIRERAPIDS:\n-\t    case INTEL_BIGCORE_EMERALDRAPIDS:\n-\t    case INTEL_BIGCORE_GRANITERAPIDS:\n-\t      cpu_features->cachesize_non_temporal_divisor = 2;\n-\t      goto default_tuning;\n-\n-\t      /* Default tuned Mixed (bigcore + atom SOC). */\n-\t    case INTEL_MIXED_LAKEFIELD:\n-\t    case INTEL_MIXED_ALDERLAKE:\n-\t      cpu_features->cachesize_non_temporal_divisor = 2;\n-\t      goto default_tuning;\n-\t    }\n-\n-\t      /* Disable TSX on some processors to avoid TSX on kernels that\n-\t\t weren't updated with the latest microcode package (which\n-\t\t disables broken feature by default).  */\n-\t  switch (microarch)\n-\t    {\n \t    case INTEL_BIGCORE_SKYLAKE_AVX512:\n \t      /* 0x55 (Skylake-avx512) && stepping <= 5 disable TSX. */\n \t      if (stepping <= 5)\n@@ -900,38 +786,152 @@ init_cpu_features (struct cpu_features *cpu_features)\n \n \t    case INTEL_BIGCORE_KABYLAKE:\n \t      /* NB: Although the errata documents that for model == 0x8e\n-\t\t     (kabylake skylake client), only 0xb stepping or lower are\n-\t\t     impacted, the intention of the errata was to disable TSX on\n-\t\t     all client processors on all steppings.  Include 0xc\n-\t\t     stepping which is an Intel Core i7-8665U, a client mobile\n-\t\t     processor.  */\n+\t\t (kabylake skylake client), only 0xb stepping or lower are\n+\t\t impacted, the intention of the errata was to disable TSX on\n+\t\t all client processors on all steppings.  Include 0xc\n+\t\t stepping which is an Intel Core i7-8665U, a client mobile\n+\t\t processor.  */\n \t      if (stepping > 0xc)\n \t\tbreak;\n \t      /* Fall through.  */\n \t    case INTEL_BIGCORE_SKYLAKE:\n-\t\t/* Disable Intel TSX and enable RTM_ALWAYS_ABORT for\n-\t\t   processors listed in:\n-\n-https://www.intel.com/content/www/us/en/support/articles/000059422/processors.html\n-\t\t */\n-\t    disable_tsx:\n-\t\tCPU_FEATURE_UNSET (cpu_features, HLE);\n-\t\tCPU_FEATURE_UNSET (cpu_features, RTM);\n-\t\tCPU_FEATURE_SET (cpu_features, RTM_ALWAYS_ABORT);\n-\t\tbreak;\n+\t      /* Disable Intel TSX and enable RTM_ALWAYS_ABORT for\n+\t\t processors listed in:\n+\n+\t\t https://www.intel.com/content/www/us/en/support/articles/000059422/processors.html\n+\t       */\n+disable_tsx:\n+\t      CPU_FEATURE_UNSET (cpu_features, HLE);\n+\t      CPU_FEATURE_UNSET (cpu_features, RTM);\n+\t      CPU_FEATURE_SET (cpu_features, RTM_ALWAYS_ABORT);\n+\t      break;\n \n \t    case INTEL_BIGCORE_HASWELL:\n-\t\t/* Xeon E7 v3 (model == 0x3f) with stepping >= 4 has working\n-\t\t   TSX.  Haswell also include other model numbers that have\n-\t\t   working TSX.  */\n-\t\tif (model == 0x3f && stepping >= 4)\n+\t      /* Xeon E7 v3 (model == 0x3f) with stepping >= 4 has working\n+\t\t TSX.  Haswell also includes other model numbers that have\n+\t\t working TSX.  */\n+\t      if (model == 0x3f && stepping >= 4)\n \t\tbreak;\n \n-\t\tCPU_FEATURE_UNSET (cpu_features, RTM);\n-\t\tbreak;\n+\t      CPU_FEATURE_UNSET (cpu_features, RTM);\n+\t      break;\n \t    }\n \t}\n \n+      switch (microarch)\n+\t{\n+\t  /* Atom / KNL tuning.  */\n+\tcase INTEL_ATOM_BONNELL:\n+\t  /* BSF is slow on Bonnell.  */\n+\t  cpu_features->preferred[index_arch_Slow_BSF]\n+\t    |= bit_arch_Slow_BSF;\n+\t  break;\n+\n+\t  /* Unaligned load versions are faster than SSSE3\n+\t     on Airmont, Silvermont, Goldmont, and Goldmont Plus.  */\n+\tcase INTEL_ATOM_AIRMONT:\n+\tcase INTEL_ATOM_SILVERMONT:\n+\tcase INTEL_ATOM_GOLDMONT:\n+\tcase INTEL_ATOM_GOLDMONT_PLUS:\n+\n+\t  /* Knights Landing.  Enable Silvermont optimizations.  */\n+\tcase INTEL_KNIGHTS_LANDING:\n+\n+\t  cpu_features->preferred[index_arch_Fast_Unaligned_Load]\n+\t    |= (bit_arch_Fast_Unaligned_Load\n+\t\t| bit_arch_Fast_Unaligned_Copy\n+\t\t| bit_arch_Prefer_PMINUB_for_stringop\n+\t\t| bit_arch_Slow_SSE4_2);\n+\t  break;\n+\n+\tcase INTEL_ATOM_TREMONT:\n+\t  /* Enable rep string instructions, unaligned load, unaligned\n+\t     copy, pminub and avoid SSE 4.2 on Tremont.  */\n+\t  cpu_features->preferred[index_arch_Fast_Rep_String]\n+\t    |= (bit_arch_Fast_Rep_String\n+\t\t| bit_arch_Fast_Unaligned_Load\n+\t\t| bit_arch_Fast_Unaligned_Copy\n+\t\t| bit_arch_Prefer_PMINUB_for_stringop\n+\t\t| bit_arch_Slow_SSE4_2);\n+\t  break;\n+\n+\t  /*\n+\t     Default tuned Knights microarch.\n+\t     case INTEL_KNIGHTS_MILL:\n+\t     */\n+\n+\t  /*\n+\t     Default tuned atom microarch.\n+\t     case INTEL_ATOM_SIERRAFOREST:\n+\t     case INTEL_ATOM_GRANDRIDGE:\n+\t     case INTEL_ATOM_CLEARWATERFOREST:\n+\t     */\n+\n+\t  /* Bigcore/Default Tuning.  */\n+\tdefault:\n+\tdefault_tuning:\n+\t  /* Unknown Intel processors.  Assuming this is one of Core\n+\t     i3/i5/i7 processors if AVX is available.  */\n+\t  if (!CPU_FEATURES_CPU_P (cpu_features, AVX))\n+\t    break;\n+\n+\tenable_modern_features:\n+\t  /* Rep string instructions, unaligned load, unaligned copy,\n+\t     and pminub are fast on Intel Core i3, i5 and i7.  */\n+\t  cpu_features->preferred[index_arch_Fast_Rep_String]\n+\t    |= (bit_arch_Fast_Rep_String\n+\t\t| bit_arch_Fast_Unaligned_Load\n+\t\t| bit_arch_Fast_Unaligned_Copy\n+\t\t| bit_arch_Prefer_PMINUB_for_stringop);\n+\t  break;\n+\n+\tcase INTEL_BIGCORE_NEHALEM:\n+\tcase INTEL_BIGCORE_WESTMERE:\n+\t  /* Older CPUs prefer non-temporal stores at lower threshold.  */\n+\t  cpu_features->cachesize_non_temporal_divisor = 8;\n+\t  goto enable_modern_features;\n+\n+\t  /* Older Bigcore microarch (smaller non-temporal store\n+\t     threshold).  */\n+\tcase INTEL_BIGCORE_SANDYBRIDGE:\n+\tcase INTEL_BIGCORE_IVYBRIDGE:\n+\tcase INTEL_BIGCORE_HASWELL:\n+\tcase INTEL_BIGCORE_BROADWELL:\n+\t  cpu_features->cachesize_non_temporal_divisor = 8;\n+\t  goto default_tuning;\n+\n+\t  /* Newer Bigcore microarch (larger non-temporal store\n+\t     threshold).  */\n+\tcase INTEL_BIGCORE_SKYLAKE_AVX512:\n+\tcase INTEL_BIGCORE_CANNONLAKE:\n+\t  /* Benchmarks indicate non-temporal memset is not\n+\t     necessarily profitable on SKX (and in some cases much\n+\t     worse). This is likely unique to SKX due to its unique\n+\t     mesh interconnect (not present on ICX or BWD). Disable\n+\t     non-temporal on all Skylake servers. */\n+\t  cpu_features->preferred[index_arch_Avoid_Non_Temporal_Memset]\n+\t    |= bit_arch_Avoid_Non_Temporal_Memset;\n+\t  /* fallthrough */\n+\tcase INTEL_BIGCORE_COMETLAKE:\n+\tcase INTEL_BIGCORE_SKYLAKE:\n+\tcase INTEL_BIGCORE_KABYLAKE:\n+\tcase INTEL_BIGCORE_ICELAKE:\n+\tcase INTEL_BIGCORE_TIGERLAKE:\n+\tcase INTEL_BIGCORE_ROCKETLAKE:\n+\tcase INTEL_BIGCORE_RAPTORLAKE:\n+\tcase INTEL_BIGCORE_METEORLAKE:\n+\tcase INTEL_BIGCORE_LUNARLAKE:\n+\tcase INTEL_BIGCORE_ARROWLAKE:\n+\tcase INTEL_BIGCORE_PANTHERLAKE:\n+\tcase INTEL_BIGCORE_SAPPHIRERAPIDS:\n+\tcase INTEL_BIGCORE_EMERALDRAPIDS:\n+\tcase INTEL_BIGCORE_GRANITERAPIDS:\n+\t  /* Default tuned Mixed (bigcore + atom SOC). */\n+\tcase INTEL_MIXED_LAKEFIELD:\n+\tcase INTEL_MIXED_ALDERLAKE:\n+\t  cpu_features->cachesize_non_temporal_divisor = 2;\n+\t  goto default_tuning;\n+\t}\n \n       /* Since AVX512ER is unique to Xeon Phi, set Prefer_No_VZEROUPPER\n          if AVX512ER is available.  Don't use AVX512 to avoid lower CPU\n\ncommit d8a1a1aef7a58b991505b9a1349a40736dec3abf\nAuthor: H.J. Lu <hjl.tools@gmail.com>\nDate:   Sat Apr 12 08:37:29 2025 -0700\n\n    x86: Detect Intel Diamond Rapids\n    \n    Detect Intel Diamond Rapids and tune it similar to Intel Granite Rapids.\n    \n    Signed-off-by: H.J. Lu <hjl.tools@gmail.com>\n    Reviewed-by: Sunil K Pandey <skpgkp2@gmail.com>\n    (cherry picked from commit de14f1959ee5f9b845a7cae43bee03068b8136f0)\n\ndiff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c\nindex 1a6e694abf..52a2f03bdd 100644\n--- a/sysdeps/x86/cpu-features.c\n+++ b/sysdeps/x86/cpu-features.c\n@@ -542,6 +542,7 @@ enum intel_microarch\n   INTEL_BIGCORE_ARROWLAKE,\n   INTEL_BIGCORE_PANTHERLAKE,\n   INTEL_BIGCORE_GRANITERAPIDS,\n+  INTEL_BIGCORE_DIAMONDRAPIDS,\n \n   /* Mixed (bigcore + atom SOC).  */\n   INTEL_MIXED_LAKEFIELD,\n@@ -817,6 +818,16 @@ disable_tsx:\n \t      break;\n \t    }\n \t}\n+      else if (family == 19)\n+\tswitch (model)\n+\t  {\n+\t  case 0x01:\n+\t    microarch = INTEL_BIGCORE_DIAMONDRAPIDS;\n+\t    break;\n+\n+\t  default:\n+\t    break;\n+\t  }\n \n       switch (microarch)\n \t{\n@@ -926,6 +937,7 @@ disable_tsx:\n \tcase INTEL_BIGCORE_SAPPHIRERAPIDS:\n \tcase INTEL_BIGCORE_EMERALDRAPIDS:\n \tcase INTEL_BIGCORE_GRANITERAPIDS:\n+\tcase INTEL_BIGCORE_DIAMONDRAPIDS:\n \t  /* Default tuned Mixed (bigcore + atom SOC). */\n \tcase INTEL_MIXED_LAKEFIELD:\n \tcase INTEL_MIXED_ALDERLAKE:\n\ncommit 736e6735053f12181d3d287898dd5fdb9e8baf59\nAuthor: Frank Barrus <frankbarrus_sw@shaggy.cc>\nDate:   Wed Dec 4 07:55:02 2024 -0500\n\n    pthreads NPTL: lost wakeup fix 2\n    \n    This fixes the lost wakeup (from a bug in signal stealing) with a change\n    in the usage of g_signals[] in the condition variable internal state.\n    It also completely eliminates the concept and handling of signal stealing,\n    as well as the need for signalers to block to wait for waiters to wake\n    up every time there is a G1/G2 switch.  This greatly reduces the average\n    and maximum latency for pthread_cond_signal.\n    \n    The g_signals[] field now contains a signal count that is relative to\n    the current g1_start value.  Since it is a 32-bit field, and the LSB is\n    still reserved (though not currently used anymore), it has a 31-bit value\n    that corresponds to the low 31 bits of the sequence number in g1_start.\n    (since g1_start also has an LSB flag, this means bits 31:1 in g_signals\n    correspond to bits 31:1 in g1_start, plus the current signal count)\n    \n    By making the signal count relative to g1_start, there is no longer\n    any ambiguity or A/B/A issue, and thus any checks before blocking,\n    including the futex call itself, are guaranteed not to block if the G1/G2\n    switch occurs, even if the signal count remains the same.  This allows\n    initially safely blocking in G2 until the switch to G1 occurs, and\n    then transitioning from G1 to a new G1 or G2, and always being able to\n    distinguish the state change.  This removes the race condition and A/B/A\n    problems that otherwise ocurred if a late (pre-empted) waiter were to\n    resume just as the futex call attempted to block on g_signal since\n    otherwise there was no last opportunity to re-check things like whether\n    the current G1 group was already closed.\n    \n    By fixing these issues, the signal stealing code can be eliminated,\n    since there is no concept of signal stealing anymore.  The code to block\n    for all waiters to exit g_refs can also be removed, since any waiters\n    that are still in the g_refs region can be guaranteed to safely wake\n    up and exit.  If there are still any left at this time, they are all\n    sent one final futex wakeup to ensure that they are not blocked any\n    longer, but there is no need for the signaller to block and wait for\n    them to wake up and exit the g_refs region.\n    \n    The signal count is then effectively \"zeroed\" but since it is now\n    relative to g1_start, this is done by advancing it to a new value that\n    can be observed by any pending blocking waiters.  Any late waiters can\n    always tell the difference, and can thus just cleanly exit if they are\n    in a stale G1 or G2.  They can never steal a signal from the current\n    G1 if they are not in the current G1, since the signal value that has\n    to match in the cmpxchg has the low 31 bits of the g1_start value\n    contained in it, and that's first checked, and then it won't match if\n    there's a G1/G2 change.\n    \n    Note: the 31-bit sequence number used in g_signals is designed to\n    handle wrap-around when checking the signal count, but if the entire\n    31-bit wraparound (2 billion signals) occurs while there is still a\n    late waiter that has not yet resumed, and it happens to then match\n    the current g1_start low bits, and the pre-emption occurs after the\n    normal \"closed group\" checks (which are 64-bit) but then hits the\n    futex syscall and signal consuming code, then an A/B/A issue could\n    still result and cause an incorrect assumption about whether it\n    should block.  This particular scenario seems unlikely in practice.\n    Note that once awake from the futex, the waiter would notice the\n    closed group before consuming the signal (since that's still a 64-bit\n    check that would not be aliased in the wrap-around in g_signals),\n    so the biggest impact would be blocking on the futex until the next\n    full wakeup from a G1/G2 switch.\n    \n    Signed-off-by: Frank Barrus <frankbarrus_sw@shaggy.cc>\n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit 1db84775f831a1494993ce9c118deaf9537cc50a)\n\ndiff --git a/nptl/pthread_cond_common.c b/nptl/pthread_cond_common.c\nindex 3487557bb8..4855b8899f 100644\n--- a/nptl/pthread_cond_common.c\n+++ b/nptl/pthread_cond_common.c\n@@ -201,7 +201,6 @@ static bool __attribute__ ((unused))\n __condvar_quiesce_and_switch_g1 (pthread_cond_t *cond, uint64_t wseq,\n     unsigned int *g1index, int private)\n {\n-  const unsigned int maxspin = 0;\n   unsigned int g1 = *g1index;\n \n   /* If there is no waiter in G2, we don't do anything.  The expression may\n@@ -222,84 +221,46 @@ __condvar_quiesce_and_switch_g1 (pthread_cond_t *cond, uint64_t wseq,\n      * New waiters arriving concurrently with the group switching will all go\n        into G2 until we atomically make the switch.  Waiters existing in G2\n        are not affected.\n-     * Waiters in G1 will be closed out immediately by setting a flag in\n-       __g_signals, which will prevent waiters from blocking using a futex on\n-       __g_signals and also notifies them that the group is closed.  As a\n-       result, they will eventually remove their group reference, allowing us\n-       to close switch group roles.  */\n-\n-  /* First, set the closed flag on __g_signals.  This tells waiters that are\n-     about to wait that they shouldn't do that anymore.  This basically\n-     serves as an advance notification of the upcoming change to __g1_start;\n-     waiters interpret it as if __g1_start was larger than their waiter\n-     sequence position.  This allows us to change __g1_start after waiting\n-     for all existing waiters with group references to leave, which in turn\n-     makes recovery after stealing a signal simpler because it then can be\n-     skipped if __g1_start indicates that the group is closed (otherwise,\n-     we would have to recover always because waiters don't know how big their\n-     groups are).  Relaxed MO is fine.  */\n-  atomic_fetch_or_relaxed (cond->__data.__g_signals + g1, 1);\n-\n-  /* Wait until there are no group references anymore.  The fetch-or operation\n-     injects us into the modification order of __g_refs; release MO ensures\n-     that waiters incrementing __g_refs after our fetch-or see the previous\n-     changes to __g_signals and to __g1_start that had to happen before we can\n-     switch this G1 and alias with an older group (we have two groups, so\n-     aliasing requires switching group roles twice).  Note that nobody else\n-     can have set the wake-request flag, so we do not have to act upon it.\n-\n-     Also note that it is harmless if older waiters or waiters from this G1\n-     get a group reference after we have quiesced the group because it will\n-     remain closed for them either because of the closed flag in __g_signals\n-     or the later update to __g1_start.  New waiters will never arrive here\n-     but instead continue to go into the still current G2.  */\n-  unsigned r = atomic_fetch_or_release (cond->__data.__g_refs + g1, 0);\n-  while ((r >> 1) > 0)\n-    {\n-      for (unsigned int spin = maxspin; ((r >> 1) > 0) && (spin > 0); spin--)\n-\t{\n-\t  /* TODO Back off.  */\n-\t  r = atomic_load_relaxed (cond->__data.__g_refs + g1);\n-\t}\n-      if ((r >> 1) > 0)\n-\t{\n-\t  /* There is still a waiter after spinning.  Set the wake-request\n-\t     flag and block.  Relaxed MO is fine because this is just about\n-\t     this futex word.\n-\n-\t     Update r to include the set wake-request flag so that the upcoming\n-\t     futex_wait only blocks if the flag is still set (otherwise, we'd\n-\t     violate the basic client-side futex protocol).  */\n-\t  r = atomic_fetch_or_relaxed (cond->__data.__g_refs + g1, 1) | 1;\n-\n-\t  if ((r >> 1) > 0)\n-\t    futex_wait_simple (cond->__data.__g_refs + g1, r, private);\n-\t  /* Reload here so we eventually see the most recent value even if we\n-\t     do not spin.   */\n-\t  r = atomic_load_relaxed (cond->__data.__g_refs + g1);\n-\t}\n-    }\n-  /* Acquire MO so that we synchronize with the release operation that waiters\n-     use to decrement __g_refs and thus happen after the waiters we waited\n-     for.  */\n-  atomic_thread_fence_acquire ();\n+     * Waiters in G1 will be closed out immediately by the advancing of\n+       __g_signals to the next \"lowseq\" (low 31 bits of the new g1_start),\n+       which will prevent waiters from blocking using a futex on\n+       __g_signals since it provides enough signals for all possible\n+       remaining waiters.  As a result, they can each consume a signal\n+       and they will eventually remove their group reference.  */\n \n   /* Update __g1_start, which finishes closing this group.  The value we add\n      will never be negative because old_orig_size can only be zero when we\n      switch groups the first time after a condvar was initialized, in which\n-     case G1 will be at index 1 and we will add a value of 1.  See above for\n-     why this takes place after waiting for quiescence of the group.\n+     case G1 will be at index 1 and we will add a value of 1.\n      Relaxed MO is fine because the change comes with no additional\n      constraints that others would have to observe.  */\n   __condvar_add_g1_start_relaxed (cond,\n       (old_orig_size << 1) + (g1 == 1 ? 1 : - 1));\n \n-  /* Now reopen the group, thus enabling waiters to again block using the\n-     futex controlled by __g_signals.  Release MO so that observers that see\n-     no signals (and thus can block) also see the write __g1_start and thus\n-     that this is now a new group (see __pthread_cond_wait_common for the\n-     matching acquire MO loads).  */\n-  atomic_store_release (cond->__data.__g_signals + g1, 0);\n+  unsigned int lowseq = ((old_g1_start + old_orig_size) << 1) & ~1U;\n+\n+  /* If any waiters still hold group references (and thus could be blocked),\n+     then wake them all up now and prevent any running ones from blocking.\n+     This is effectively a catch-all for any possible current or future\n+     bugs that can allow the group size to reach 0 before all G1 waiters\n+     have been awakened or at least given signals to consume, or any\n+     other case that can leave blocked (or about to block) older waiters..  */\n+  if ((atomic_fetch_or_release (cond->__data.__g_refs + g1, 0) >> 1) > 0)\n+   {\n+    /* First advance signals to the end of the group (i.e. enough signals\n+       for the entire G1 group) to ensure that waiters which have not\n+       yet blocked in the futex will not block.\n+       Note that in the vast majority of cases, this should never\n+       actually be necessary, since __g_signals will have enough\n+       signals for the remaining g_refs waiters.  As an optimization,\n+       we could check this first before proceeding, although that\n+       could still leave the potential for futex lost wakeup bugs\n+       if the signal count was non-zero but the futex wakeup\n+       was somehow lost.  */\n+    atomic_store_release (cond->__data.__g_signals + g1, lowseq);\n+\n+    futex_wake (cond->__data.__g_signals + g1, INT_MAX, private);\n+   }\n \n   /* At this point, the old G1 is now a valid new G2 (but not in use yet).\n      No old waiter can neither grab a signal nor acquire a reference without\n@@ -311,6 +272,10 @@ __condvar_quiesce_and_switch_g1 (pthread_cond_t *cond, uint64_t wseq,\n   g1 ^= 1;\n   *g1index ^= 1;\n \n+  /* Now advance the new G1 g_signals to the new lowseq, giving it\n+     an effective signal count of 0 to start.  */\n+  atomic_store_release (cond->__data.__g_signals + g1, lowseq);\n+\n   /* These values are just observed by signalers, and thus protected by the\n      lock.  */\n   unsigned int orig_size = wseq - (old_g1_start + old_orig_size);\ndiff --git a/nptl/pthread_cond_wait.c b/nptl/pthread_cond_wait.c\nindex 66786c7b90..3d290e39c8 100644\n--- a/nptl/pthread_cond_wait.c\n+++ b/nptl/pthread_cond_wait.c\n@@ -238,9 +238,7 @@ __condvar_cleanup_waiting (void *arg)\n    signaled), and a reference count.\n \n    The group reference count is used to maintain the number of waiters that\n-   are using the group's futex.  Before a group can change its role, the\n-   reference count must show that no waiters are using the futex anymore; this\n-   prevents ABA issues on the futex word.\n+   are using the group's futex.\n \n    To represent which intervals in the waiter sequence the groups cover (and\n    thus also which group slot contains G1 or G2), we use a 64b counter to\n@@ -300,11 +298,12 @@ __condvar_cleanup_waiting (void *arg)\n        last reference.\n      * Reference count used by waiters concurrently with signalers that have\n        acquired the condvar-internal lock.\n-   __g_signals: The number of signals that can still be consumed.\n+   __g_signals: The number of signals that can still be consumed, relative to\n+     the current g1_start.  (i.e. bits 31 to 1 of __g_signals are bits\n+     31 to 1 of g1_start with the signal count added)\n      * Used as a futex word by waiters.  Used concurrently by waiters and\n        signalers.\n-     * LSB is true iff this group has been completely signaled (i.e., it is\n-       closed).\n+     * LSB is currently reserved and 0.\n    __g_size: Waiters remaining in this group (i.e., which have not been\n      signaled yet.\n      * Accessed by signalers and waiters that cancel waiting (both do so only\n@@ -328,18 +327,6 @@ __condvar_cleanup_waiting (void *arg)\n    sufficient because if a waiter can see a sufficiently large value, it could\n    have also consume a signal in the waiters group.\n \n-   Waiters try to grab a signal from __g_signals without holding a reference\n-   count, which can lead to stealing a signal from a more recent group after\n-   their own group was already closed.  They cannot always detect whether they\n-   in fact did because they do not know when they stole, but they can\n-   conservatively add a signal back to the group they stole from; if they\n-   did so unnecessarily, all that happens is a spurious wake-up.  To make this\n-   even less likely, __g1_start contains the index of the current g2 too,\n-   which allows waiters to check if there aliasing on the group slots; if\n-   there wasn't, they didn't steal from the current G1, which means that the\n-   G1 they stole from must have been already closed and they do not need to\n-   fix anything.\n-\n    It is essential that the last field in pthread_cond_t is __g_signals[1]:\n    The previous condvar used a pointer-sized field in pthread_cond_t, so a\n    PTHREAD_COND_INITIALIZER from that condvar implementation might only\n@@ -435,6 +422,9 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n     {\n       while (1)\n \t{\n+          uint64_t g1_start = __condvar_load_g1_start_relaxed (cond);\n+          unsigned int lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n+\n \t  /* Spin-wait first.\n \t     Note that spinning first without checking whether a timeout\n \t     passed might lead to what looks like a spurious wake-up even\n@@ -446,35 +436,45 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n \t     having to compare against the current time seems to be the right\n \t     choice from a performance perspective for most use cases.  */\n \t  unsigned int spin = maxspin;\n-\t  while (signals == 0 && spin > 0)\n+\t  while (spin > 0 && ((int)(signals - lowseq) < 2))\n \t    {\n \t      /* Check that we are not spinning on a group that's already\n \t\t closed.  */\n-\t      if (seq < (__condvar_load_g1_start_relaxed (cond) >> 1))\n-\t\tgoto done;\n+\t      if (seq < (g1_start >> 1))\n+\t\tbreak;\n \n \t      /* TODO Back off.  */\n \n \t      /* Reload signals.  See above for MO.  */\n \t      signals = atomic_load_acquire (cond->__data.__g_signals + g);\n+              g1_start = __condvar_load_g1_start_relaxed (cond);\n+              lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n \t      spin--;\n \t    }\n \n-\t  /* If our group will be closed as indicated by the flag on signals,\n-\t     don't bother grabbing a signal.  */\n-\t  if (signals & 1)\n-\t    goto done;\n-\n-\t  /* If there is an available signal, don't block.  */\n-\t  if (signals != 0)\n+          if (seq < (g1_start >> 1))\n+\t    {\n+              /* If the group is closed already,\n+\t         then this waiter originally had enough extra signals to\n+\t         consume, up until the time its group was closed.  */\n+\t       goto done;\n+            }\n+\n+\t  /* If there is an available signal, don't block.\n+             If __g1_start has advanced at all, then we must be in G1\n+\t     by now, perhaps in the process of switching back to an older\n+\t     G2, but in either case we're allowed to consume the available\n+\t     signal and should not block anymore.  */\n+\t  if ((int)(signals - lowseq) >= 2)\n \t    break;\n \n \t  /* No signals available after spinning, so prepare to block.\n \t     We first acquire a group reference and use acquire MO for that so\n \t     that we synchronize with the dummy read-modify-write in\n \t     __condvar_quiesce_and_switch_g1 if we read from that.  In turn,\n-\t     in this case this will make us see the closed flag on __g_signals\n-\t     that designates a concurrent attempt to reuse the group's slot.\n+\t     in this case this will make us see the advancement of __g_signals\n+\t     to the upcoming new g1_start that occurs with a concurrent\n+\t     attempt to reuse the group's slot.\n \t     We use acquire MO for the __g_signals check to make the\n \t     __g1_start check work (see spinning above).\n \t     Note that the group reference acquisition will not mask the\n@@ -482,15 +482,24 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n \t     an atomic read-modify-write operation and thus extend the release\n \t     sequence.  */\n \t  atomic_fetch_add_acquire (cond->__data.__g_refs + g, 2);\n-\t  if (((atomic_load_acquire (cond->__data.__g_signals + g) & 1) != 0)\n-\t      || (seq < (__condvar_load_g1_start_relaxed (cond) >> 1)))\n+\t  signals = atomic_load_acquire (cond->__data.__g_signals + g);\n+          g1_start = __condvar_load_g1_start_relaxed (cond);\n+          lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n+\n+          if (seq < (g1_start >> 1))\n \t    {\n-\t      /* Our group is closed.  Wake up any signalers that might be\n-\t\t waiting.  */\n+              /* group is closed already, so don't block */\n \t      __condvar_dec_grefs (cond, g, private);\n \t      goto done;\n \t    }\n \n+\t  if ((int)(signals - lowseq) >= 2)\n+\t    {\n+\t      /* a signal showed up or G1/G2 switched after we grabbed the refcount */\n+\t      __condvar_dec_grefs (cond, g, private);\n+\t      break;\n+            }\n+\n \t  // Now block.\n \t  struct _pthread_cleanup_buffer buffer;\n \t  struct _condvar_cleanup_buffer cbuffer;\n@@ -501,7 +510,7 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n \t  __pthread_cleanup_push (&buffer, __condvar_cleanup_waiting, &cbuffer);\n \n \t  err = __futex_abstimed_wait_cancelable64 (\n-\t    cond->__data.__g_signals + g, 0, clockid, abstime, private);\n+\t    cond->__data.__g_signals + g, signals, clockid, abstime, private);\n \n \t  __pthread_cleanup_pop (&buffer, 0);\n \n@@ -524,6 +533,8 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n \t  signals = atomic_load_acquire (cond->__data.__g_signals + g);\n \t}\n \n+       if (seq < (__condvar_load_g1_start_relaxed (cond) >> 1))\n+\t goto done;\n     }\n   /* Try to grab a signal.  Use acquire MO so that we see an up-to-date value\n      of __g1_start below (see spinning above for a similar case).  In\n@@ -532,69 +543,6 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n   while (!atomic_compare_exchange_weak_acquire (cond->__data.__g_signals + g,\n \t\t\t\t\t\t&signals, signals - 2));\n \n-  /* We consumed a signal but we could have consumed from a more recent group\n-     that aliased with ours due to being in the same group slot.  If this\n-     might be the case our group must be closed as visible through\n-     __g1_start.  */\n-  uint64_t g1_start = __condvar_load_g1_start_relaxed (cond);\n-  if (seq < (g1_start >> 1))\n-    {\n-      /* We potentially stole a signal from a more recent group but we do not\n-\t know which group we really consumed from.\n-\t We do not care about groups older than current G1 because they are\n-\t closed; we could have stolen from these, but then we just add a\n-\t spurious wake-up for the current groups.\n-\t We will never steal a signal from current G2 that was really intended\n-\t for G2 because G2 never receives signals (until it becomes G1).  We\n-\t could have stolen a signal from G2 that was conservatively added by a\n-\t previous waiter that also thought it stole a signal -- but given that\n-\t that signal was added unnecessarily, it's not a problem if we steal\n-\t it.\n-\t Thus, the remaining case is that we could have stolen from the current\n-\t G1, where \"current\" means the __g1_start value we observed.  However,\n-\t if the current G1 does not have the same slot index as we do, we did\n-\t not steal from it and do not need to undo that.  This is the reason\n-\t for putting a bit with G2's index into__g1_start as well.  */\n-      if (((g1_start & 1) ^ 1) == g)\n-\t{\n-\t  /* We have to conservatively undo our potential mistake of stealing\n-\t     a signal.  We can stop trying to do that when the current G1\n-\t     changes because other spinning waiters will notice this too and\n-\t     __condvar_quiesce_and_switch_g1 has checked that there are no\n-\t     futex waiters anymore before switching G1.\n-\t     Relaxed MO is fine for the __g1_start load because we need to\n-\t     merely be able to observe this fact and not have to observe\n-\t     something else as well.\n-\t     ??? Would it help to spin for a little while to see whether the\n-\t     current G1 gets closed?  This might be worthwhile if the group is\n-\t     small or close to being closed.  */\n-\t  unsigned int s = atomic_load_relaxed (cond->__data.__g_signals + g);\n-\t  while (__condvar_load_g1_start_relaxed (cond) == g1_start)\n-\t    {\n-\t      /* Try to add a signal.  We don't need to acquire the lock\n-\t\t because at worst we can cause a spurious wake-up.  If the\n-\t\t group is in the process of being closed (LSB is true), this\n-\t\t has an effect similar to us adding a signal.  */\n-\t      if (((s & 1) != 0)\n-\t\t  || atomic_compare_exchange_weak_relaxed\n-\t\t       (cond->__data.__g_signals + g, &s, s + 2))\n-\t\t{\n-\t\t  /* If we added a signal, we also need to add a wake-up on\n-\t\t     the futex.  We also need to do that if we skipped adding\n-\t\t     a signal because the group is being closed because\n-\t\t     while __condvar_quiesce_and_switch_g1 could have closed\n-\t\t     the group, it might still be waiting for futex waiters to\n-\t\t     leave (and one of those waiters might be the one we stole\n-\t\t     the signal from, which cause it to block using the\n-\t\t     futex).  */\n-\t\t  futex_wake (cond->__data.__g_signals + g, 1, private);\n-\t\t  break;\n-\t\t}\n-\t      /* TODO Back off.  */\n-\t    }\n-\t}\n-    }\n-\n  done:\n \n   /* Confirm that we have been woken.  We do that before acquiring the mutex\n\ncommit 88d999d840e77c9917f08870094a23ce42294848\nAuthor: Malte Skarupke <malteskarupke@fastmail.fm>\nDate:   Wed Dec 4 07:55:22 2024 -0500\n\n    nptl: Update comments and indentation for new condvar implementation\n    \n    Some comments were wrong after the most recent commit. This fixes that.\n    \n    Also fixing indentation where it was using spaces instead of tabs.\n    \n    Signed-off-by: Malte Skarupke <malteskarupke@fastmail.fm>\n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit 0cc973160c23bb67f895bc887dd6942d29f8fee3)\n\ndiff --git a/nptl/pthread_cond_common.c b/nptl/pthread_cond_common.c\nindex 4855b8899f..3475d15123 100644\n--- a/nptl/pthread_cond_common.c\n+++ b/nptl/pthread_cond_common.c\n@@ -221,8 +221,9 @@ __condvar_quiesce_and_switch_g1 (pthread_cond_t *cond, uint64_t wseq,\n      * New waiters arriving concurrently with the group switching will all go\n        into G2 until we atomically make the switch.  Waiters existing in G2\n        are not affected.\n-     * Waiters in G1 will be closed out immediately by the advancing of\n-       __g_signals to the next \"lowseq\" (low 31 bits of the new g1_start),\n+     * Waiters in G1 have already received a signal and been woken. If they\n+       haven't woken yet, they will be closed out immediately by the advancing\n+       of __g_signals to the next \"lowseq\" (low 31 bits of the new g1_start),\n        which will prevent waiters from blocking using a futex on\n        __g_signals since it provides enough signals for all possible\n        remaining waiters.  As a result, they can each consume a signal\ndiff --git a/nptl/pthread_cond_wait.c b/nptl/pthread_cond_wait.c\nindex 3d290e39c8..ad2cee7d59 100644\n--- a/nptl/pthread_cond_wait.c\n+++ b/nptl/pthread_cond_wait.c\n@@ -249,7 +249,7 @@ __condvar_cleanup_waiting (void *arg)\n    figure out whether they are in a group that has already been completely\n    signaled (i.e., if the current G1 starts at a later position that the\n    waiter's position).  Waiters cannot determine whether they are currently\n-   in G2 or G1 -- but they do not have too because all they are interested in\n+   in G2 or G1 -- but they do not have to because all they are interested in\n    is whether there are available signals, and they always start in G2 (whose\n    group slot they know because of the bit in the waiter sequence.  Signalers\n    will simply fill the right group until it is completely signaled and can\n@@ -412,7 +412,7 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n     }\n \n   /* Now wait until a signal is available in our group or it is closed.\n-     Acquire MO so that if we observe a value of zero written after group\n+     Acquire MO so that if we observe (signals == lowseq) after group\n      switching in __condvar_quiesce_and_switch_g1, we synchronize with that\n      store and will see the prior update of __g1_start done while switching\n      groups too.  */\n@@ -422,8 +422,8 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n     {\n       while (1)\n \t{\n-          uint64_t g1_start = __condvar_load_g1_start_relaxed (cond);\n-          unsigned int lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n+\t  uint64_t g1_start = __condvar_load_g1_start_relaxed (cond);\n+\t  unsigned int lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n \n \t  /* Spin-wait first.\n \t     Note that spinning first without checking whether a timeout\n@@ -447,21 +447,21 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n \n \t      /* Reload signals.  See above for MO.  */\n \t      signals = atomic_load_acquire (cond->__data.__g_signals + g);\n-              g1_start = __condvar_load_g1_start_relaxed (cond);\n-              lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n+\t      g1_start = __condvar_load_g1_start_relaxed (cond);\n+\t      lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n \t      spin--;\n \t    }\n \n-          if (seq < (g1_start >> 1))\n+\t  if (seq < (g1_start >> 1))\n \t    {\n-              /* If the group is closed already,\n+\t      /* If the group is closed already,\n \t         then this waiter originally had enough extra signals to\n \t         consume, up until the time its group was closed.  */\n \t       goto done;\n-            }\n+\t    }\n \n \t  /* If there is an available signal, don't block.\n-             If __g1_start has advanced at all, then we must be in G1\n+\t     If __g1_start has advanced at all, then we must be in G1\n \t     by now, perhaps in the process of switching back to an older\n \t     G2, but in either case we're allowed to consume the available\n \t     signal and should not block anymore.  */\n@@ -483,22 +483,23 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n \t     sequence.  */\n \t  atomic_fetch_add_acquire (cond->__data.__g_refs + g, 2);\n \t  signals = atomic_load_acquire (cond->__data.__g_signals + g);\n-          g1_start = __condvar_load_g1_start_relaxed (cond);\n-          lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n+\t  g1_start = __condvar_load_g1_start_relaxed (cond);\n+\t  lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n \n-          if (seq < (g1_start >> 1))\n+\t  if (seq < (g1_start >> 1))\n \t    {\n-              /* group is closed already, so don't block */\n+\t      /* group is closed already, so don't block */\n \t      __condvar_dec_grefs (cond, g, private);\n \t      goto done;\n \t    }\n \n \t  if ((int)(signals - lowseq) >= 2)\n \t    {\n-\t      /* a signal showed up or G1/G2 switched after we grabbed the refcount */\n+\t      /* a signal showed up or G1/G2 switched after we grabbed the\n+\t         refcount */\n \t      __condvar_dec_grefs (cond, g, private);\n \t      break;\n-            }\n+\t    }\n \n \t  // Now block.\n \t  struct _pthread_cleanup_buffer buffer;\n@@ -536,10 +537,8 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n        if (seq < (__condvar_load_g1_start_relaxed (cond) >> 1))\n \t goto done;\n     }\n-  /* Try to grab a signal.  Use acquire MO so that we see an up-to-date value\n-     of __g1_start below (see spinning above for a similar case).  In\n-     particular, if we steal from a more recent group, we will also see a\n-     more recent __g1_start below.  */\n+  /* Try to grab a signal.  See above for MO.  (if we do another loop\n+     iteration we need to see the correct value of g1_start)  */\n   while (!atomic_compare_exchange_weak_acquire (cond->__data.__g_signals + g,\n \t\t\t\t\t\t&signals, signals - 2));\n \n\ncommit 136a29f9d0a3924828d5a16be82d054637517c95\nAuthor: Malte Skarupke <malteskarupke@fastmail.fm>\nDate:   Wed Dec 4 07:55:50 2024 -0500\n\n    nptl: Remove unnecessary catch-all-wake in condvar group switch\n    \n    This wake is unnecessary. We only switch groups after every sleeper in a group\n    has been woken. Sure, they may take a while to actually wake up and may still\n    hold a reference, but waking them a second time doesn't speed that up. Instead\n    this just makes the code more complicated and may hide problems.\n    \n    In particular this safety wake wouldn't even have helped with the bug that was\n    fixed by Barrus' patch: The bug there was that pthread_cond_signal would not\n    switch g1 when it should, so we wouldn't even have entered this code path.\n    \n    Signed-off-by: Malte Skarupke <malteskarupke@fastmail.fm>\n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit b42cc6af11062c260c7dfa91f1c89891366fed3e)\n\ndiff --git a/nptl/pthread_cond_common.c b/nptl/pthread_cond_common.c\nindex 3475d15123..30b8eee149 100644\n--- a/nptl/pthread_cond_common.c\n+++ b/nptl/pthread_cond_common.c\n@@ -221,13 +221,7 @@ __condvar_quiesce_and_switch_g1 (pthread_cond_t *cond, uint64_t wseq,\n      * New waiters arriving concurrently with the group switching will all go\n        into G2 until we atomically make the switch.  Waiters existing in G2\n        are not affected.\n-     * Waiters in G1 have already received a signal and been woken. If they\n-       haven't woken yet, they will be closed out immediately by the advancing\n-       of __g_signals to the next \"lowseq\" (low 31 bits of the new g1_start),\n-       which will prevent waiters from blocking using a futex on\n-       __g_signals since it provides enough signals for all possible\n-       remaining waiters.  As a result, they can each consume a signal\n-       and they will eventually remove their group reference.  */\n+     * Waiters in G1 have already received a signal and been woken.  */\n \n   /* Update __g1_start, which finishes closing this group.  The value we add\n      will never be negative because old_orig_size can only be zero when we\n@@ -240,29 +234,6 @@ __condvar_quiesce_and_switch_g1 (pthread_cond_t *cond, uint64_t wseq,\n \n   unsigned int lowseq = ((old_g1_start + old_orig_size) << 1) & ~1U;\n \n-  /* If any waiters still hold group references (and thus could be blocked),\n-     then wake them all up now and prevent any running ones from blocking.\n-     This is effectively a catch-all for any possible current or future\n-     bugs that can allow the group size to reach 0 before all G1 waiters\n-     have been awakened or at least given signals to consume, or any\n-     other case that can leave blocked (or about to block) older waiters..  */\n-  if ((atomic_fetch_or_release (cond->__data.__g_refs + g1, 0) >> 1) > 0)\n-   {\n-    /* First advance signals to the end of the group (i.e. enough signals\n-       for the entire G1 group) to ensure that waiters which have not\n-       yet blocked in the futex will not block.\n-       Note that in the vast majority of cases, this should never\n-       actually be necessary, since __g_signals will have enough\n-       signals for the remaining g_refs waiters.  As an optimization,\n-       we could check this first before proceeding, although that\n-       could still leave the potential for futex lost wakeup bugs\n-       if the signal count was non-zero but the futex wakeup\n-       was somehow lost.  */\n-    atomic_store_release (cond->__data.__g_signals + g1, lowseq);\n-\n-    futex_wake (cond->__data.__g_signals + g1, INT_MAX, private);\n-   }\n-\n   /* At this point, the old G1 is now a valid new G2 (but not in use yet).\n      No old waiter can neither grab a signal nor acquire a reference without\n      noticing that __g1_start is larger.\n\ncommit 2a259b6d77dc5bdab5c8f4ee0e69572d5699d4bf\nAuthor: Malte Skarupke <malteskarupke@fastmail.fm>\nDate:   Wed Dec 4 07:56:13 2024 -0500\n\n    nptl: Remove unnecessary quadruple check in pthread_cond_wait\n    \n    pthread_cond_wait was checking whether it was in a closed group no less than\n    four times. Checking once is enough. Here are the four checks:\n    \n    1. While spin-waiting. This was dead code: maxspin is set to 0 and has been\n       for years.\n    2. Before deciding to go to sleep, and before incrementing grefs: I kept this\n    3. After incrementing grefs. There is no reason to think that the group would\n       close while we do an atomic increment. Obviously it could close at any\n       point, but that doesn't mean we have to recheck after every step. This\n       check was equally good as check 2, except it has to do more work.\n    4. When we find ourselves in a group that has a signal. We only get here after\n       we check that we're not in a closed group. There is no need to check again.\n       The check would only have helped in cases where the compare_exchange in the\n       next line would also have failed. Relying on the compare_exchange is fine.\n    \n    Removing the duplicate checks clarifies the code.\n    \n    Signed-off-by: Malte Skarupke <malteskarupke@fastmail.fm>\n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit 4f7b051f8ee3feff1b53b27a906f245afaa9cee1)\n\ndiff --git a/nptl/pthread_cond_wait.c b/nptl/pthread_cond_wait.c\nindex ad2cee7d59..cfdd13bb87 100644\n--- a/nptl/pthread_cond_wait.c\n+++ b/nptl/pthread_cond_wait.c\n@@ -366,7 +366,6 @@ static __always_inline int\n __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n     clockid_t clockid, const struct __timespec64 *abstime)\n {\n-  const int maxspin = 0;\n   int err;\n   int result = 0;\n \n@@ -425,33 +424,6 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n \t  uint64_t g1_start = __condvar_load_g1_start_relaxed (cond);\n \t  unsigned int lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n \n-\t  /* Spin-wait first.\n-\t     Note that spinning first without checking whether a timeout\n-\t     passed might lead to what looks like a spurious wake-up even\n-\t     though we should return ETIMEDOUT (e.g., if the caller provides\n-\t     an absolute timeout that is clearly in the past).  However,\n-\t     (1) spurious wake-ups are allowed, (2) it seems unlikely that a\n-\t     user will (ab)use pthread_cond_wait as a check for whether a\n-\t     point in time is in the past, and (3) spinning first without\n-\t     having to compare against the current time seems to be the right\n-\t     choice from a performance perspective for most use cases.  */\n-\t  unsigned int spin = maxspin;\n-\t  while (spin > 0 && ((int)(signals - lowseq) < 2))\n-\t    {\n-\t      /* Check that we are not spinning on a group that's already\n-\t\t closed.  */\n-\t      if (seq < (g1_start >> 1))\n-\t\tbreak;\n-\n-\t      /* TODO Back off.  */\n-\n-\t      /* Reload signals.  See above for MO.  */\n-\t      signals = atomic_load_acquire (cond->__data.__g_signals + g);\n-\t      g1_start = __condvar_load_g1_start_relaxed (cond);\n-\t      lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n-\t      spin--;\n-\t    }\n-\n \t  if (seq < (g1_start >> 1))\n \t    {\n \t      /* If the group is closed already,\n@@ -482,24 +454,6 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n \t     an atomic read-modify-write operation and thus extend the release\n \t     sequence.  */\n \t  atomic_fetch_add_acquire (cond->__data.__g_refs + g, 2);\n-\t  signals = atomic_load_acquire (cond->__data.__g_signals + g);\n-\t  g1_start = __condvar_load_g1_start_relaxed (cond);\n-\t  lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n-\n-\t  if (seq < (g1_start >> 1))\n-\t    {\n-\t      /* group is closed already, so don't block */\n-\t      __condvar_dec_grefs (cond, g, private);\n-\t      goto done;\n-\t    }\n-\n-\t  if ((int)(signals - lowseq) >= 2)\n-\t    {\n-\t      /* a signal showed up or G1/G2 switched after we grabbed the\n-\t         refcount */\n-\t      __condvar_dec_grefs (cond, g, private);\n-\t      break;\n-\t    }\n \n \t  // Now block.\n \t  struct _pthread_cleanup_buffer buffer;\n@@ -533,9 +487,6 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n \t  /* Reload signals.  See above for MO.  */\n \t  signals = atomic_load_acquire (cond->__data.__g_signals + g);\n \t}\n-\n-       if (seq < (__condvar_load_g1_start_relaxed (cond) >> 1))\n-\t goto done;\n     }\n   /* Try to grab a signal.  See above for MO.  (if we do another loop\n      iteration we need to see the correct value of g1_start)  */\n\ncommit a2465f4293ecc37ac4650fbd02e517bc6fd801c6\nAuthor: Malte Skarupke <malteskarupke@fastmail.fm>\nDate:   Wed Dec 4 07:56:38 2024 -0500\n\n    nptl: Remove g_refs from condition variables\n    \n    This variable used to be needed to wait in group switching until all sleepers\n    have confirmed that they have woken. This is no longer needed. Nothing waits\n    on this variable so there is no need to track how many threads are currently\n    asleep in each group.\n    \n    Signed-off-by: Malte Skarupke <malteskarupke@fastmail.fm>\n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit c36fc50781995e6758cae2b6927839d0157f213c)\n\ndiff --git a/nptl/pthread_cond_wait.c b/nptl/pthread_cond_wait.c\nindex cfdd13bb87..411fc0380b 100644\n--- a/nptl/pthread_cond_wait.c\n+++ b/nptl/pthread_cond_wait.c\n@@ -143,23 +143,6 @@ __condvar_cancel_waiting (pthread_cond_t *cond, uint64_t seq, unsigned int g,\n     }\n }\n \n-/* Wake up any signalers that might be waiting.  */\n-static void\n-__condvar_dec_grefs (pthread_cond_t *cond, unsigned int g, int private)\n-{\n-  /* Release MO to synchronize-with the acquire load in\n-     __condvar_quiesce_and_switch_g1.  */\n-  if (atomic_fetch_add_release (cond->__data.__g_refs + g, -2) == 3)\n-    {\n-      /* Clear the wake-up request flag before waking up.  We do not need more\n-\t than relaxed MO and it doesn't matter if we apply this for an aliased\n-\t group because we wake all futex waiters right after clearing the\n-\t flag.  */\n-      atomic_fetch_and_relaxed (cond->__data.__g_refs + g, ~(unsigned int) 1);\n-      futex_wake (cond->__data.__g_refs + g, INT_MAX, private);\n-    }\n-}\n-\n /* Clean-up for cancellation of waiters waiting for normal signals.  We cancel\n    our registration as a waiter, confirm we have woken up, and re-acquire the\n    mutex.  */\n@@ -171,8 +154,6 @@ __condvar_cleanup_waiting (void *arg)\n   pthread_cond_t *cond = cbuffer->cond;\n   unsigned g = cbuffer->wseq & 1;\n \n-  __condvar_dec_grefs (cond, g, cbuffer->private);\n-\n   __condvar_cancel_waiting (cond, cbuffer->wseq >> 1, g, cbuffer->private);\n   /* FIXME With the current cancellation implementation, it is possible that\n      a thread is cancelled after it has returned from a syscall.  This could\n@@ -327,15 +308,6 @@ __condvar_cleanup_waiting (void *arg)\n    sufficient because if a waiter can see a sufficiently large value, it could\n    have also consume a signal in the waiters group.\n \n-   It is essential that the last field in pthread_cond_t is __g_signals[1]:\n-   The previous condvar used a pointer-sized field in pthread_cond_t, so a\n-   PTHREAD_COND_INITIALIZER from that condvar implementation might only\n-   initialize 4 bytes to zero instead of the 8 bytes we need (i.e., 44 bytes\n-   in total instead of the 48 we need).  __g_signals[1] is not accessed before\n-   the first group switch (G2 starts at index 0), which will set its value to\n-   zero after a harmless fetch-or whose return value is ignored.  This\n-   effectively completes initialization.\n-\n \n    Limitations:\n    * This condvar isn't designed to allow for more than\n@@ -440,21 +412,6 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n \t  if ((int)(signals - lowseq) >= 2)\n \t    break;\n \n-\t  /* No signals available after spinning, so prepare to block.\n-\t     We first acquire a group reference and use acquire MO for that so\n-\t     that we synchronize with the dummy read-modify-write in\n-\t     __condvar_quiesce_and_switch_g1 if we read from that.  In turn,\n-\t     in this case this will make us see the advancement of __g_signals\n-\t     to the upcoming new g1_start that occurs with a concurrent\n-\t     attempt to reuse the group's slot.\n-\t     We use acquire MO for the __g_signals check to make the\n-\t     __g1_start check work (see spinning above).\n-\t     Note that the group reference acquisition will not mask the\n-\t     release MO when decrementing the reference count because we use\n-\t     an atomic read-modify-write operation and thus extend the release\n-\t     sequence.  */\n-\t  atomic_fetch_add_acquire (cond->__data.__g_refs + g, 2);\n-\n \t  // Now block.\n \t  struct _pthread_cleanup_buffer buffer;\n \t  struct _condvar_cleanup_buffer cbuffer;\n@@ -471,18 +428,11 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n \n \t  if (__glibc_unlikely (err == ETIMEDOUT || err == EOVERFLOW))\n \t    {\n-\t      __condvar_dec_grefs (cond, g, private);\n-\t      /* If we timed out, we effectively cancel waiting.  Note that\n-\t\t we have decremented __g_refs before cancellation, so that a\n-\t\t deadlock between waiting for quiescence of our group in\n-\t\t __condvar_quiesce_and_switch_g1 and us trying to acquire\n-\t\t the lock during cancellation is not possible.  */\n+\t      /* If we timed out, we effectively cancel waiting.  */\n \t      __condvar_cancel_waiting (cond, seq, g, private);\n \t      result = err;\n \t      goto done;\n \t    }\n-\t  else\n-\t    __condvar_dec_grefs (cond, g, private);\n \n \t  /* Reload signals.  See above for MO.  */\n \t  signals = atomic_load_acquire (cond->__data.__g_signals + g);\ndiff --git a/nptl/tst-cond22.c b/nptl/tst-cond22.c\nindex 1336e9c79d..bdcb45c536 100644\n--- a/nptl/tst-cond22.c\n+++ b/nptl/tst-cond22.c\n@@ -106,13 +106,13 @@ do_test (void)\n       status = 1;\n     }\n \n-  printf (\"cond = { 0x%x:%x, 0x%x:%x, %u/%u/%u, %u/%u/%u, %u, %u }\\n\",\n+  printf (\"cond = { 0x%x:%x, 0x%x:%x, %u/%u, %u/%u, %u, %u }\\n\",\n \t  c.__data.__wseq.__value32.__high,\n \t  c.__data.__wseq.__value32.__low,\n \t  c.__data.__g1_start.__value32.__high,\n \t  c.__data.__g1_start.__value32.__low,\n-\t  c.__data.__g_signals[0], c.__data.__g_refs[0], c.__data.__g_size[0],\n-\t  c.__data.__g_signals[1], c.__data.__g_refs[1], c.__data.__g_size[1],\n+\t  c.__data.__g_signals[0], c.__data.__g_size[0],\n+\t  c.__data.__g_signals[1], c.__data.__g_size[1],\n \t  c.__data.__g1_orig_size, c.__data.__wrefs);\n \n   if (pthread_create (&th, NULL, tf, (void *) 1l) != 0)\n@@ -152,13 +152,13 @@ do_test (void)\n       status = 1;\n     }\n \n-  printf (\"cond = { 0x%x:%x, 0x%x:%x, %u/%u/%u, %u/%u/%u, %u, %u }\\n\",\n+  printf (\"cond = { 0x%x:%x, 0x%x:%x, %u/%u, %u/%u, %u, %u }\\n\",\n \t  c.__data.__wseq.__value32.__high,\n \t  c.__data.__wseq.__value32.__low,\n \t  c.__data.__g1_start.__value32.__high,\n \t  c.__data.__g1_start.__value32.__low,\n-\t  c.__data.__g_signals[0], c.__data.__g_refs[0], c.__data.__g_size[0],\n-\t  c.__data.__g_signals[1], c.__data.__g_refs[1], c.__data.__g_size[1],\n+\t  c.__data.__g_signals[0], c.__data.__g_size[0],\n+\t  c.__data.__g_signals[1], c.__data.__g_size[1],\n \t  c.__data.__g1_orig_size, c.__data.__wrefs);\n \n   return status;\ndiff --git a/sysdeps/nptl/bits/thread-shared-types.h b/sysdeps/nptl/bits/thread-shared-types.h\nindex df54eef6f7..a3d482f80f 100644\n--- a/sysdeps/nptl/bits/thread-shared-types.h\n+++ b/sysdeps/nptl/bits/thread-shared-types.h\n@@ -95,8 +95,7 @@ struct __pthread_cond_s\n {\n   __atomic_wide_counter __wseq;\n   __atomic_wide_counter __g1_start;\n-  unsigned int __g_refs[2] __LOCK_ALIGNMENT;\n-  unsigned int __g_size[2];\n+  unsigned int __g_size[2] __LOCK_ALIGNMENT;\n   unsigned int __g1_orig_size;\n   unsigned int __wrefs;\n   unsigned int __g_signals[2];\ndiff --git a/sysdeps/nptl/pthread.h b/sysdeps/nptl/pthread.h\nindex 3d4f4a756c..9af75d6eae 100644\n--- a/sysdeps/nptl/pthread.h\n+++ b/sysdeps/nptl/pthread.h\n@@ -152,7 +152,7 @@ enum\n \n \n /* Conditional variable handling.  */\n-#define PTHREAD_COND_INITIALIZER { { {0}, {0}, {0, 0}, {0, 0}, 0, 0, {0, 0} } }\n+#define PTHREAD_COND_INITIALIZER { { {0}, {0}, {0, 0}, 0, 0, {0, 0} } }\n \n \n /* Cleanup buffers */\n\ncommit fa110993a6390ae5c97dff613ef02b59ec78c5da\nAuthor: Malte Skarupke <malteskarupke@fastmail.fm>\nDate:   Wed Dec 4 08:03:44 2024 -0500\n\n    nptl: Use a single loop in pthread_cond_wait instaed of a nested loop\n    \n    The loop was a little more complicated than necessary. There was only one\n    break statement out of the inner loop, and the outer loop was nearly empty.\n    So just remove the outer loop, moving its code to the one break statement in\n    the inner loop. This allows us to replace all gotos with break statements.\n    \n    Signed-off-by: Malte Skarupke <malteskarupke@fastmail.fm>\n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit 929a4764ac90382616b6a21f099192b2475da674)\n\ndiff --git a/nptl/pthread_cond_wait.c b/nptl/pthread_cond_wait.c\nindex 411fc0380b..683cb2b133 100644\n--- a/nptl/pthread_cond_wait.c\n+++ b/nptl/pthread_cond_wait.c\n@@ -382,17 +382,15 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n       return err;\n     }\n \n-  /* Now wait until a signal is available in our group or it is closed.\n-     Acquire MO so that if we observe (signals == lowseq) after group\n-     switching in __condvar_quiesce_and_switch_g1, we synchronize with that\n-     store and will see the prior update of __g1_start done while switching\n-     groups too.  */\n-  unsigned int signals = atomic_load_acquire (cond->__data.__g_signals + g);\n-\n-  do\n-    {\n+\n       while (1)\n \t{\n+\t  /* Now wait until a signal is available in our group or it is closed.\n+\t     Acquire MO so that if we observe (signals == lowseq) after group\n+\t     switching in __condvar_quiesce_and_switch_g1, we synchronize with that\n+\t     store and will see the prior update of __g1_start done while switching\n+\t     groups too.  */\n+\t  unsigned int signals = atomic_load_acquire (cond->__data.__g_signals + g);\n \t  uint64_t g1_start = __condvar_load_g1_start_relaxed (cond);\n \t  unsigned int lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n \n@@ -401,7 +399,7 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n \t      /* If the group is closed already,\n \t         then this waiter originally had enough extra signals to\n \t         consume, up until the time its group was closed.  */\n-\t       goto done;\n+\t       break;\n \t    }\n \n \t  /* If there is an available signal, don't block.\n@@ -410,7 +408,16 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n \t     G2, but in either case we're allowed to consume the available\n \t     signal and should not block anymore.  */\n \t  if ((int)(signals - lowseq) >= 2)\n-\t    break;\n+\t    {\n+\t      /* Try to grab a signal.  See above for MO.  (if we do another loop\n+\t\t iteration we need to see the correct value of g1_start)  */\n+\t\t      if (atomic_compare_exchange_weak_acquire (\n+\t\t      \t\tcond->__data.__g_signals + g,\n+\t\t\t&signals, signals - 2))\n+\t\t      \tbreak;\n+\t\t      else\n+\t\t      \tcontinue;\n+\t    }\n \n \t  // Now block.\n \t  struct _pthread_cleanup_buffer buffer;\n@@ -431,19 +438,9 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n \t      /* If we timed out, we effectively cancel waiting.  */\n \t      __condvar_cancel_waiting (cond, seq, g, private);\n \t      result = err;\n-\t      goto done;\n+\t      break;\n \t    }\n-\n-\t  /* Reload signals.  See above for MO.  */\n-\t  signals = atomic_load_acquire (cond->__data.__g_signals + g);\n \t}\n-    }\n-  /* Try to grab a signal.  See above for MO.  (if we do another loop\n-     iteration we need to see the correct value of g1_start)  */\n-  while (!atomic_compare_exchange_weak_acquire (cond->__data.__g_signals + g,\n-\t\t\t\t\t\t&signals, signals - 2));\n-\n- done:\n \n   /* Confirm that we have been woken.  We do that before acquiring the mutex\n      to allow for execution of pthread_cond_destroy while having acquired the\n\ncommit afbf0d46850dcd1b626d892ad8fde2162067ddc7\nAuthor: Malte Skarupke <malteskarupke@fastmail.fm>\nDate:   Wed Dec 4 08:04:10 2024 -0500\n\n    nptl: Fix indentation\n    \n    In my previous change I turned a nested loop into a simple loop. I'm doing\n    the resulting indentation changes in a separate commit to make the diff on\n    the previous commit easier to review.\n    \n    Signed-off-by: Malte Skarupke <malteskarupke@fastmail.fm>\n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit ee6c14ed59d480720721aaacc5fb03213dc153da)\n\ndiff --git a/nptl/pthread_cond_wait.c b/nptl/pthread_cond_wait.c\nindex 683cb2b133..7fc9dadf15 100644\n--- a/nptl/pthread_cond_wait.c\n+++ b/nptl/pthread_cond_wait.c\n@@ -383,65 +383,65 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n     }\n \n \n-      while (1)\n-\t{\n-\t  /* Now wait until a signal is available in our group or it is closed.\n-\t     Acquire MO so that if we observe (signals == lowseq) after group\n-\t     switching in __condvar_quiesce_and_switch_g1, we synchronize with that\n-\t     store and will see the prior update of __g1_start done while switching\n-\t     groups too.  */\n-\t  unsigned int signals = atomic_load_acquire (cond->__data.__g_signals + g);\n-\t  uint64_t g1_start = __condvar_load_g1_start_relaxed (cond);\n-\t  unsigned int lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n-\n-\t  if (seq < (g1_start >> 1))\n-\t    {\n-\t      /* If the group is closed already,\n-\t         then this waiter originally had enough extra signals to\n-\t         consume, up until the time its group was closed.  */\n-\t       break;\n-\t    }\n-\n-\t  /* If there is an available signal, don't block.\n-\t     If __g1_start has advanced at all, then we must be in G1\n-\t     by now, perhaps in the process of switching back to an older\n-\t     G2, but in either case we're allowed to consume the available\n-\t     signal and should not block anymore.  */\n-\t  if ((int)(signals - lowseq) >= 2)\n-\t    {\n-\t      /* Try to grab a signal.  See above for MO.  (if we do another loop\n-\t\t iteration we need to see the correct value of g1_start)  */\n-\t\t      if (atomic_compare_exchange_weak_acquire (\n-\t\t      \t\tcond->__data.__g_signals + g,\n+  while (1)\n+    {\n+      /* Now wait until a signal is available in our group or it is closed.\n+         Acquire MO so that if we observe (signals == lowseq) after group\n+         switching in __condvar_quiesce_and_switch_g1, we synchronize with that\n+         store and will see the prior update of __g1_start done while switching\n+         groups too.  */\n+      unsigned int signals = atomic_load_acquire (cond->__data.__g_signals + g);\n+      uint64_t g1_start = __condvar_load_g1_start_relaxed (cond);\n+      unsigned int lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n+\n+      if (seq < (g1_start >> 1))\n+        {\n+          /* If the group is closed already,\n+             then this waiter originally had enough extra signals to\n+             consume, up until the time its group was closed.  */\n+           break;\n+        }\n+\n+      /* If there is an available signal, don't block.\n+         If __g1_start has advanced at all, then we must be in G1\n+         by now, perhaps in the process of switching back to an older\n+         G2, but in either case we're allowed to consume the available\n+         signal and should not block anymore.  */\n+      if ((int)(signals - lowseq) >= 2)\n+        {\n+\t  /* Try to grab a signal.  See above for MO.  (if we do another loop\n+\t     iteration we need to see the correct value of g1_start)  */\n+\t    if (atomic_compare_exchange_weak_acquire (\n+\t\t\tcond->__data.__g_signals + g,\n \t\t\t&signals, signals - 2))\n-\t\t      \tbreak;\n-\t\t      else\n-\t\t      \tcontinue;\n-\t    }\n-\n-\t  // Now block.\n-\t  struct _pthread_cleanup_buffer buffer;\n-\t  struct _condvar_cleanup_buffer cbuffer;\n-\t  cbuffer.wseq = wseq;\n-\t  cbuffer.cond = cond;\n-\t  cbuffer.mutex = mutex;\n-\t  cbuffer.private = private;\n-\t  __pthread_cleanup_push (&buffer, __condvar_cleanup_waiting, &cbuffer);\n-\n-\t  err = __futex_abstimed_wait_cancelable64 (\n-\t    cond->__data.__g_signals + g, signals, clockid, abstime, private);\n-\n-\t  __pthread_cleanup_pop (&buffer, 0);\n-\n-\t  if (__glibc_unlikely (err == ETIMEDOUT || err == EOVERFLOW))\n-\t    {\n-\t      /* If we timed out, we effectively cancel waiting.  */\n-\t      __condvar_cancel_waiting (cond, seq, g, private);\n-\t      result = err;\n \t      break;\n-\t    }\n+\t    else\n+\t      continue;\n \t}\n \n+      // Now block.\n+      struct _pthread_cleanup_buffer buffer;\n+      struct _condvar_cleanup_buffer cbuffer;\n+      cbuffer.wseq = wseq;\n+      cbuffer.cond = cond;\n+      cbuffer.mutex = mutex;\n+      cbuffer.private = private;\n+      __pthread_cleanup_push (&buffer, __condvar_cleanup_waiting, &cbuffer);\n+\n+      err = __futex_abstimed_wait_cancelable64 (\n+        cond->__data.__g_signals + g, signals, clockid, abstime, private);\n+\n+      __pthread_cleanup_pop (&buffer, 0);\n+\n+      if (__glibc_unlikely (err == ETIMEDOUT || err == EOVERFLOW))\n+        {\n+          /* If we timed out, we effectively cancel waiting.  */\n+          __condvar_cancel_waiting (cond, seq, g, private);\n+          result = err;\n+          break;\n+        }\n+    }\n+\n   /* Confirm that we have been woken.  We do that before acquiring the mutex\n      to allow for execution of pthread_cond_destroy while having acquired the\n      mutex.  */\n\ncommit 2ad69497346cc20ef4d568108f1de49b2f451c55\nAuthor: Malte Skarupke <malteskarupke@fastmail.fm>\nDate:   Wed Dec 4 08:04:54 2024 -0500\n\n    nptl: rename __condvar_quiesce_and_switch_g1\n    \n    This function no longer waits for threads to leave g1, so rename it to\n    __condvar_switch_g1\n    \n    Signed-off-by: Malte Skarupke <malteskarupke@fastmail.fm>\n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit 4b79e27a5073c02f6bff9aa8f4791230a0ab1867)\n\ndiff --git a/nptl/pthread_cond_broadcast.c b/nptl/pthread_cond_broadcast.c\nindex aada91639a..38bba17bfc 100644\n--- a/nptl/pthread_cond_broadcast.c\n+++ b/nptl/pthread_cond_broadcast.c\n@@ -60,7 +60,7 @@ ___pthread_cond_broadcast (pthread_cond_t *cond)\n \t\t\t\tcond->__data.__g_size[g1] << 1);\n       cond->__data.__g_size[g1] = 0;\n \n-      /* We need to wake G1 waiters before we quiesce G1 below.  */\n+      /* We need to wake G1 waiters before we switch G1 below.  */\n       /* TODO Only set it if there are indeed futex waiters.  We could\n \t also try to move this out of the critical section in cases when\n \t G2 is empty (and we don't need to quiesce).  */\n@@ -69,7 +69,7 @@ ___pthread_cond_broadcast (pthread_cond_t *cond)\n \n   /* G1 is complete.  Step (2) is next unless there are no waiters in G2, in\n      which case we can stop.  */\n-  if (__condvar_quiesce_and_switch_g1 (cond, wseq, &g1, private))\n+  if (__condvar_switch_g1 (cond, wseq, &g1, private))\n     {\n       /* Step (3): Send signals to all waiters in the old G2 / new G1.  */\n       atomic_fetch_add_relaxed (cond->__data.__g_signals + g1,\ndiff --git a/nptl/pthread_cond_common.c b/nptl/pthread_cond_common.c\nindex 30b8eee149..5044273cc2 100644\n--- a/nptl/pthread_cond_common.c\n+++ b/nptl/pthread_cond_common.c\n@@ -189,16 +189,15 @@ __condvar_get_private (int flags)\n     return FUTEX_SHARED;\n }\n \n-/* This closes G1 (whose index is in G1INDEX), waits for all futex waiters to\n-   leave G1, converts G1 into a fresh G2, and then switches group roles so that\n-   the former G2 becomes the new G1 ending at the current __wseq value when we\n-   eventually make the switch (WSEQ is just an observation of __wseq by the\n-   signaler).\n+/* This closes G1 (whose index is in G1INDEX), converts G1 into a fresh G2,\n+   and then switches group roles so that the former G2 becomes the new G1\n+   ending at the current __wseq value when we eventually make the switch\n+   (WSEQ is just an observation of __wseq by the signaler).\n    If G2 is empty, it will not switch groups because then it would create an\n    empty G1 which would require switching groups again on the next signal.\n    Returns false iff groups were not switched because G2 was empty.  */\n static bool __attribute__ ((unused))\n-__condvar_quiesce_and_switch_g1 (pthread_cond_t *cond, uint64_t wseq,\n+__condvar_switch_g1 (pthread_cond_t *cond, uint64_t wseq,\n     unsigned int *g1index, int private)\n {\n   unsigned int g1 = *g1index;\n@@ -214,8 +213,7 @@ __condvar_quiesce_and_switch_g1 (pthread_cond_t *cond, uint64_t wseq,\n \t  + cond->__data.__g_size[g1 ^ 1]) == 0)\n \treturn false;\n \n-  /* Now try to close and quiesce G1.  We have to consider the following kinds\n-     of waiters:\n+  /* We have to consider the following kinds of waiters:\n      * Waiters from less recent groups than G1 are not affected because\n        nothing will change for them apart from __g1_start getting larger.\n      * New waiters arriving concurrently with the group switching will all go\n@@ -223,12 +221,12 @@ __condvar_quiesce_and_switch_g1 (pthread_cond_t *cond, uint64_t wseq,\n        are not affected.\n      * Waiters in G1 have already received a signal and been woken.  */\n \n-  /* Update __g1_start, which finishes closing this group.  The value we add\n-     will never be negative because old_orig_size can only be zero when we\n-     switch groups the first time after a condvar was initialized, in which\n-     case G1 will be at index 1 and we will add a value of 1.\n-     Relaxed MO is fine because the change comes with no additional\n-     constraints that others would have to observe.  */\n+  /* Update __g1_start, which closes this group.  The value we add will never\n+     be negative because old_orig_size can only be zero when we switch groups\n+     the first time after a condvar was initialized, in which case G1 will be\n+     at index 1 and we will add a value of 1. Relaxed MO is fine because the\n+     change comes with no additional constraints that others would have to\n+     observe.  */\n   __condvar_add_g1_start_relaxed (cond,\n       (old_orig_size << 1) + (g1 == 1 ? 1 : - 1));\n \ndiff --git a/nptl/pthread_cond_signal.c b/nptl/pthread_cond_signal.c\nindex 43d6286ecd..f095497142 100644\n--- a/nptl/pthread_cond_signal.c\n+++ b/nptl/pthread_cond_signal.c\n@@ -69,18 +69,17 @@ ___pthread_cond_signal (pthread_cond_t *cond)\n   bool do_futex_wake = false;\n \n   /* If G1 is still receiving signals, we put the signal there.  If not, we\n-     check if G2 has waiters, and if so, quiesce and switch G1 to the former\n-     G2; if this results in a new G1 with waiters (G2 might have cancellations\n-     already, see __condvar_quiesce_and_switch_g1), we put the signal in the\n-     new G1.  */\n+     check if G2 has waiters, and if so, switch G1 to the former G2; if this\n+     results in a new G1 with waiters (G2 might have cancellations already,\n+     see __condvar_switch_g1), we put the signal in the new G1. */\n   if ((cond->__data.__g_size[g1] != 0)\n-      || __condvar_quiesce_and_switch_g1 (cond, wseq, &g1, private))\n+      || __condvar_switch_g1 (cond, wseq, &g1, private))\n     {\n       /* Add a signal.  Relaxed MO is fine because signaling does not need to\n-\t establish a happens-before relation (see above).  We do not mask the\n-\t release-MO store when initializing a group in\n-\t __condvar_quiesce_and_switch_g1 because we use an atomic\n-\t read-modify-write and thus extend that store's release sequence.  */\n+         establish a happens-before relation (see above).  We do not mask the\n+         release-MO store when initializing a group in __condvar_switch_g1\n+         because we use an atomic read-modify-write and thus extend that\n+         store's release sequence.  */\n       atomic_fetch_add_relaxed (cond->__data.__g_signals + g1, 2);\n       cond->__data.__g_size[g1]--;\n       /* TODO Only set it if there are indeed futex waiters.  */\ndiff --git a/nptl/pthread_cond_wait.c b/nptl/pthread_cond_wait.c\nindex 7fc9dadf15..80bb728211 100644\n--- a/nptl/pthread_cond_wait.c\n+++ b/nptl/pthread_cond_wait.c\n@@ -354,8 +354,7 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n      because we do not need to establish any happens-before relation with\n      signalers (see __pthread_cond_signal); modification order alone\n      establishes a total order of waiters/signals.  We do need acquire MO\n-     to synchronize with group reinitialization in\n-     __condvar_quiesce_and_switch_g1.  */\n+     to synchronize with group reinitialization in __condvar_switch_g1.  */\n   uint64_t wseq = __condvar_fetch_add_wseq_acquire (cond, 2);\n   /* Find our group's index.  We always go into what was G2 when we acquired\n      our position.  */\n@@ -387,9 +386,9 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n     {\n       /* Now wait until a signal is available in our group or it is closed.\n          Acquire MO so that if we observe (signals == lowseq) after group\n-         switching in __condvar_quiesce_and_switch_g1, we synchronize with that\n-         store and will see the prior update of __g1_start done while switching\n-         groups too.  */\n+         switching in __condvar_switch_g1, we synchronize with that store and\n+         will see the prior update of __g1_start done while switching groups\n+         too.  */\n       unsigned int signals = atomic_load_acquire (cond->__data.__g_signals + g);\n       uint64_t g1_start = __condvar_load_g1_start_relaxed (cond);\n       unsigned int lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n\ncommit 7f71824b8039b8afc150dd5c881b61faf10675ef\nAuthor: Malte Skarupke <malteskarupke@fastmail.fm>\nDate:   Wed Dec 4 08:05:40 2024 -0500\n\n    nptl: Use all of g1_start and g_signals\n    \n    The LSB of g_signals was unused. The LSB of g1_start was used to indicate\n    which group is G2. This was used to always go to sleep in pthread_cond_wait\n    if a waiter is in G2. A comment earlier in the file says that this is not\n    correct to do:\n    \n     \"Waiters cannot determine whether they are currently in G2 or G1 -- but they\n      do not have to because all they are interested in is whether there are\n      available signals\"\n    \n    I either would have had to update the comment, or get rid of the check. I\n    chose to get rid of the check. In fact I don't quite know why it was there.\n    There will never be available signals for group G2, so we didn't need the\n    special case. Even if there were, this would just be a spurious wake. This\n    might have caught some cases where the count has wrapped around, but it\n    wouldn't reliably do that, (and even if it did, why would you want to force a\n    sleep in that case?) and we don't support that many concurrent waiters\n    anyway. Getting rid of it allows us to use one more bit, making us more\n    robust to wraparound.\n    \n    Signed-off-by: Malte Skarupke <malteskarupke@fastmail.fm>\n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit 91bb902f58264a2fd50fbce8f39a9a290dd23706)\n\ndiff --git a/nptl/pthread_cond_broadcast.c b/nptl/pthread_cond_broadcast.c\nindex 38bba17bfc..51afa62adf 100644\n--- a/nptl/pthread_cond_broadcast.c\n+++ b/nptl/pthread_cond_broadcast.c\n@@ -57,7 +57,7 @@ ___pthread_cond_broadcast (pthread_cond_t *cond)\n     {\n       /* Add as many signals as the remaining size of the group.  */\n       atomic_fetch_add_relaxed (cond->__data.__g_signals + g1,\n-\t\t\t\tcond->__data.__g_size[g1] << 1);\n+\t\t\t\tcond->__data.__g_size[g1]);\n       cond->__data.__g_size[g1] = 0;\n \n       /* We need to wake G1 waiters before we switch G1 below.  */\n@@ -73,7 +73,7 @@ ___pthread_cond_broadcast (pthread_cond_t *cond)\n     {\n       /* Step (3): Send signals to all waiters in the old G2 / new G1.  */\n       atomic_fetch_add_relaxed (cond->__data.__g_signals + g1,\n-\t\t\t\tcond->__data.__g_size[g1] << 1);\n+\t\t\t\tcond->__data.__g_size[g1]);\n       cond->__data.__g_size[g1] = 0;\n       /* TODO Only set it if there are indeed futex waiters.  */\n       do_futex_wake = true;\ndiff --git a/nptl/pthread_cond_common.c b/nptl/pthread_cond_common.c\nindex 5044273cc2..389402913c 100644\n--- a/nptl/pthread_cond_common.c\n+++ b/nptl/pthread_cond_common.c\n@@ -208,9 +208,9 @@ __condvar_switch_g1 (pthread_cond_t *cond, uint64_t wseq,\n      behavior.\n      Note that this works correctly for a zero-initialized condvar too.  */\n   unsigned int old_orig_size = __condvar_get_orig_size (cond);\n-  uint64_t old_g1_start = __condvar_load_g1_start_relaxed (cond) >> 1;\n-  if (((unsigned) (wseq - old_g1_start - old_orig_size)\n-\t  + cond->__data.__g_size[g1 ^ 1]) == 0)\n+  uint64_t old_g1_start = __condvar_load_g1_start_relaxed (cond);\n+  uint64_t new_g1_start = old_g1_start + old_orig_size;\n+  if (((unsigned) (wseq - new_g1_start) + cond->__data.__g_size[g1 ^ 1]) == 0)\n \treturn false;\n \n   /* We have to consider the following kinds of waiters:\n@@ -221,16 +221,10 @@ __condvar_switch_g1 (pthread_cond_t *cond, uint64_t wseq,\n        are not affected.\n      * Waiters in G1 have already received a signal and been woken.  */\n \n-  /* Update __g1_start, which closes this group.  The value we add will never\n-     be negative because old_orig_size can only be zero when we switch groups\n-     the first time after a condvar was initialized, in which case G1 will be\n-     at index 1 and we will add a value of 1. Relaxed MO is fine because the\n-     change comes with no additional constraints that others would have to\n-     observe.  */\n-  __condvar_add_g1_start_relaxed (cond,\n-      (old_orig_size << 1) + (g1 == 1 ? 1 : - 1));\n-\n-  unsigned int lowseq = ((old_g1_start + old_orig_size) << 1) & ~1U;\n+  /* Update __g1_start, which closes this group.  Relaxed MO is fine because\n+     the change comes with no additional constraints that others would have\n+     to observe.  */\n+  __condvar_add_g1_start_relaxed (cond, old_orig_size);\n \n   /* At this point, the old G1 is now a valid new G2 (but not in use yet).\n      No old waiter can neither grab a signal nor acquire a reference without\n@@ -242,13 +236,13 @@ __condvar_switch_g1 (pthread_cond_t *cond, uint64_t wseq,\n   g1 ^= 1;\n   *g1index ^= 1;\n \n-  /* Now advance the new G1 g_signals to the new lowseq, giving it\n+  /* Now advance the new G1 g_signals to the new g1_start, giving it\n      an effective signal count of 0 to start.  */\n-  atomic_store_release (cond->__data.__g_signals + g1, lowseq);\n+  atomic_store_release (cond->__data.__g_signals + g1, (unsigned)new_g1_start);\n \n   /* These values are just observed by signalers, and thus protected by the\n      lock.  */\n-  unsigned int orig_size = wseq - (old_g1_start + old_orig_size);\n+  unsigned int orig_size = wseq - new_g1_start;\n   __condvar_set_orig_size (cond, orig_size);\n   /* Use and addition to not loose track of cancellations in what was\n      previously G2.  */\ndiff --git a/nptl/pthread_cond_signal.c b/nptl/pthread_cond_signal.c\nindex f095497142..fa3a5c3d8f 100644\n--- a/nptl/pthread_cond_signal.c\n+++ b/nptl/pthread_cond_signal.c\n@@ -80,7 +80,7 @@ ___pthread_cond_signal (pthread_cond_t *cond)\n          release-MO store when initializing a group in __condvar_switch_g1\n          because we use an atomic read-modify-write and thus extend that\n          store's release sequence.  */\n-      atomic_fetch_add_relaxed (cond->__data.__g_signals + g1, 2);\n+      atomic_fetch_add_relaxed (cond->__data.__g_signals + g1, 1);\n       cond->__data.__g_size[g1]--;\n       /* TODO Only set it if there are indeed futex waiters.  */\n       do_futex_wake = true;\ndiff --git a/nptl/pthread_cond_wait.c b/nptl/pthread_cond_wait.c\nindex 80bb728211..0f1dfcb595 100644\n--- a/nptl/pthread_cond_wait.c\n+++ b/nptl/pthread_cond_wait.c\n@@ -84,7 +84,7 @@ __condvar_cancel_waiting (pthread_cond_t *cond, uint64_t seq, unsigned int g,\n      not hold a reference on the group.  */\n   __condvar_acquire_lock (cond, private);\n \n-  uint64_t g1_start = __condvar_load_g1_start_relaxed (cond) >> 1;\n+  uint64_t g1_start = __condvar_load_g1_start_relaxed (cond);\n   if (g1_start > seq)\n     {\n       /* Our group is closed, so someone provided enough signals for it.\n@@ -259,7 +259,6 @@ __condvar_cleanup_waiting (void *arg)\n      * Waiters fetch-add while having acquire the mutex associated with the\n        condvar.  Signalers load it and fetch-xor it concurrently.\n    __g1_start: Starting position of G1 (inclusive)\n-     * LSB is index of current G2.\n      * Modified by signalers while having acquired the condvar-internal lock\n        and observed concurrently by waiters.\n    __g1_orig_size: Initial size of G1\n@@ -280,11 +279,9 @@ __condvar_cleanup_waiting (void *arg)\n      * Reference count used by waiters concurrently with signalers that have\n        acquired the condvar-internal lock.\n    __g_signals: The number of signals that can still be consumed, relative to\n-     the current g1_start.  (i.e. bits 31 to 1 of __g_signals are bits\n-     31 to 1 of g1_start with the signal count added)\n+     the current g1_start.  (i.e. g1_start with the signal count added)\n      * Used as a futex word by waiters.  Used concurrently by waiters and\n        signalers.\n-     * LSB is currently reserved and 0.\n    __g_size: Waiters remaining in this group (i.e., which have not been\n      signaled yet.\n      * Accessed by signalers and waiters that cancel waiting (both do so only\n@@ -391,9 +388,8 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n          too.  */\n       unsigned int signals = atomic_load_acquire (cond->__data.__g_signals + g);\n       uint64_t g1_start = __condvar_load_g1_start_relaxed (cond);\n-      unsigned int lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n \n-      if (seq < (g1_start >> 1))\n+      if (seq < g1_start)\n         {\n           /* If the group is closed already,\n              then this waiter originally had enough extra signals to\n@@ -406,13 +402,13 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n          by now, perhaps in the process of switching back to an older\n          G2, but in either case we're allowed to consume the available\n          signal and should not block anymore.  */\n-      if ((int)(signals - lowseq) >= 2)\n+      if ((int)(signals - (unsigned int)g1_start) > 0)\n         {\n \t  /* Try to grab a signal.  See above for MO.  (if we do another loop\n \t     iteration we need to see the correct value of g1_start)  */\n \t    if (atomic_compare_exchange_weak_acquire (\n \t\t\tcond->__data.__g_signals + g,\n-\t\t\t&signals, signals - 2))\n+\t\t\t&signals, signals - 1))\n \t      break;\n \t    else\n \t      continue;\n\ncommit 8d3dd23e3de8b4c6e4b94f8bbfab971c3b8a55be\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Thu Mar 13 06:07:07 2025 +0100\n\n    nptl: PTHREAD_COND_INITIALIZER compatibility with pre-2.41 versions (bug 32786)\n    \n    The new initializer and struct layout does not initialize the\n    __g_signals field in the old struct layout before the change in\n    commit c36fc50781995e6758cae2b6927839d0157f213c (\"nptl: Remove\n    g_refs from condition variables\").  Bring back fields at the end\n    of struct __pthread_cond_s, so that they are again zero-initialized.\n    \n    Reviewed-by: Sam James <sam@gentoo.org>\n\ndiff --git a/sysdeps/nptl/bits/thread-shared-types.h b/sysdeps/nptl/bits/thread-shared-types.h\nindex a3d482f80f..bccc2003ec 100644\n--- a/sysdeps/nptl/bits/thread-shared-types.h\n+++ b/sysdeps/nptl/bits/thread-shared-types.h\n@@ -99,6 +99,8 @@ struct __pthread_cond_s\n   unsigned int __g1_orig_size;\n   unsigned int __wrefs;\n   unsigned int __g_signals[2];\n+  unsigned int __unused_initialized_1;\n+  unsigned int __unused_initialized_2;\n };\n \n typedef unsigned int __tss_t;\ndiff --git a/sysdeps/nptl/pthread.h b/sysdeps/nptl/pthread.h\nindex 9af75d6eae..e0f24418fe 100644\n--- a/sysdeps/nptl/pthread.h\n+++ b/sysdeps/nptl/pthread.h\n@@ -152,7 +152,7 @@ enum\n \n \n /* Conditional variable handling.  */\n-#define PTHREAD_COND_INITIALIZER { { {0}, {0}, {0, 0}, 0, 0, {0, 0} } }\n+#define PTHREAD_COND_INITIALIZER { { {0}, {0}, {0, 0}, 0, 0, {0, 0}, 0, 0 } }\n \n \n /* Cleanup buffers */\n\ncommit 33b33e9dd0ff26158b1b83cc4347a39c073e490e\nAuthor: Arjun Shankar <arjun@redhat.com>\nDate:   Fri Oct 18 16:03:25 2024 +0200\n\n    libio: Fix a deadlock after fork in popen\n    \n    popen modifies its file handler book-keeping under a lock that wasn't\n    being taken during fork.  This meant that a concurrent popen and fork\n    could end up copying the lock in a \"locked\" state into the fork child,\n    where subsequently calling popen would lead to a deadlock due to the\n    already (spuriously) held lock.\n    \n    This commit fixes the deadlock by appropriately taking the lock before\n    fork, and releasing/resetting it in the parent/child after the fork.\n    \n    A new test for concurrent popen and fork is also added.  It consistently\n    hangs (and therefore fails via timeout) without the fix applied.\n    Reviewed-by: Florian Weimer <fweimer@redhat.com>\n    \n    (cherry picked from commit 9f0d2c0ee6c728643fcf9a4879e9f20f5e45ce5f)\n\ndiff --git a/libio/Makefile b/libio/Makefile\nindex 5292baa4e0..7faba230ac 100644\n--- a/libio/Makefile\n+++ b/libio/Makefile\n@@ -117,6 +117,7 @@ tests = \\\n   tst-mmap-offend \\\n   tst-mmap-setvbuf \\\n   tst-mmap2-eofsync \\\n+  tst-popen-fork \\\n   tst-popen1 \\\n   tst-setvbuf1 \\\n   tst-sprintf-chk-ub \\\ndiff --git a/libio/iopopen.c b/libio/iopopen.c\nindex d01cb0648e..352513a291 100644\n--- a/libio/iopopen.c\n+++ b/libio/iopopen.c\n@@ -57,6 +57,26 @@ unlock (void *not_used)\n }\n #endif\n \n+/* These lock/unlock/resetlock functions are used during fork.  */\n+\n+void\n+_IO_proc_file_chain_lock (void)\n+{\n+  _IO_lock_lock (proc_file_chain_lock);\n+}\n+\n+void\n+_IO_proc_file_chain_unlock (void)\n+{\n+  _IO_lock_unlock (proc_file_chain_lock);\n+}\n+\n+void\n+_IO_proc_file_chain_resetlock (void)\n+{\n+  _IO_lock_init (proc_file_chain_lock);\n+}\n+\n /* POSIX states popen shall ensure that any streams from previous popen()\n    calls that remain open in the parent process should be closed in the new\n    child process.\ndiff --git a/libio/libioP.h b/libio/libioP.h\nindex 616253fcd0..a83a411fdf 100644\n--- a/libio/libioP.h\n+++ b/libio/libioP.h\n@@ -429,6 +429,12 @@ libc_hidden_proto (_IO_list_resetlock)\n extern void _IO_enable_locks (void) __THROW;\n libc_hidden_proto (_IO_enable_locks)\n \n+/* Functions for operating popen's proc_file_chain_lock during fork.  */\n+\n+extern void _IO_proc_file_chain_lock (void) __THROW attribute_hidden;\n+extern void _IO_proc_file_chain_unlock (void) __THROW attribute_hidden;\n+extern void _IO_proc_file_chain_resetlock (void) __THROW attribute_hidden;\n+\n /* Default jumptable functions. */\n \n extern int _IO_default_underflow (FILE *) __THROW;\ndiff --git a/libio/tst-popen-fork.c b/libio/tst-popen-fork.c\nnew file mode 100644\nindex 0000000000..1df30fc6c0\n--- /dev/null\n+++ b/libio/tst-popen-fork.c\n@@ -0,0 +1,80 @@\n+/* Test concurrent popen and fork.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <stdio.h>\n+#include <stdatomic.h>\n+#include <pthread.h>\n+#include <unistd.h>\n+#include <sys/wait.h>\n+\n+#include <support/check.h>\n+#include <support/xthread.h>\n+#include <support/xunistd.h>\n+\n+static void\n+popen_and_pclose (void)\n+{\n+  FILE *f = popen (\"true\", \"r\");\n+  TEST_VERIFY_EXIT (f != NULL);\n+  pclose (f);\n+  return;\n+}\n+\n+static atomic_bool done = ATOMIC_VAR_INIT (0);\n+\n+static void *\n+popen_and_pclose_forever (__attribute__ ((unused))\n+                          void *arg)\n+{\n+  while (!atomic_load_explicit (&done, memory_order_acquire))\n+    popen_and_pclose ();\n+  return NULL;\n+}\n+\n+static int\n+do_test (void)\n+{\n+\n+  /* Repeatedly call popen in a loop during the entire test.  */\n+  pthread_t t = xpthread_create (NULL, popen_and_pclose_forever, NULL);\n+\n+  /* Repeatedly fork off and reap child processes one-by-one.\n+     Each child calls popen once, then exits, leading to the possibility\n+     that a child forks *during* our own popen call, thus inheriting any\n+     intermediate popen state, possibly including lock state(s).  */\n+  for (int i = 0; i < 100; i++)\n+    {\n+      int cpid = xfork ();\n+\n+      if (cpid == 0)\n+        {\n+          popen_and_pclose ();\n+          _exit (0);\n+        }\n+      else\n+        xwaitpid (cpid, NULL, 0);\n+    }\n+\n+  /* Stop calling popen.  */\n+  atomic_store_explicit (&done, 1, memory_order_release);\n+  xpthread_join (t);\n+\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\ndiff --git a/posix/fork.c b/posix/fork.c\nindex 298765a1ff..cf9b80e7c0 100644\n--- a/posix/fork.c\n+++ b/posix/fork.c\n@@ -62,6 +62,7 @@ __libc_fork (void)\n       call_function_static_weak (__nss_database_fork_prepare_parent,\n \t\t\t\t &nss_database_data);\n \n+      _IO_proc_file_chain_lock ();\n       _IO_list_lock ();\n \n       /* Acquire malloc locks.  This needs to come last because fork\n@@ -92,6 +93,7 @@ __libc_fork (void)\n \n \t  /* Reset locks in the I/O code.  */\n \t  _IO_list_resetlock ();\n+\t  _IO_proc_file_chain_resetlock ();\n \n \t  call_function_static_weak (__nss_database_fork_subprocess,\n \t\t\t\t     &nss_database_data);\n@@ -121,6 +123,7 @@ __libc_fork (void)\n \n \t  /* We execute this even if the 'fork' call failed.  */\n \t  _IO_list_unlock ();\n+\t  _IO_proc_file_chain_unlock ();\n \t}\n \n       /* Run the handlers registered for the parent.  */\n\ncommit 7c3c9ae28685a9142a8cfa3521bbca74c1007d0b\nAuthor: Arjun Shankar <arjun@redhat.com>\nDate:   Fri Oct 25 09:33:45 2024 +0200\n\n    libio: Correctly link tst-popen-fork against libpthread\n    \n    tst-popen-fork failed to build for Hurd due to not being linked with\n    libpthread.  This commit fixes that.\n    \n    Tested with build-many-glibcs.py for i686-gnu.\n    \n    Reviewed-by: Florian Weimer <fweimer@redhat.com>\n    (cherry picked from commit 6a290b2895b77be839fcb7c44a6a9879560097ad)\n\ndiff --git a/libio/Makefile b/libio/Makefile\nindex 7faba230ac..f2e98f96eb 100644\n--- a/libio/Makefile\n+++ b/libio/Makefile\n@@ -142,6 +142,8 @@ tests = \\\n   tst_wscanf \\\n   # tests\n \n+$(objpfx)tst-popen-fork: $(shared-thread-library)\n+\n tests-internal = tst-vtables tst-vtables-interposed\n \n ifeq (yes,$(build-shared))\n\ncommit 8667345b83c8ca528a093d4db53f57a1bb1688e4\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Thu Feb 13 21:56:52 2025 +0100\n\n    elf: Keep using minimal malloc after early DTV resize (bug 32412)\n    \n    If an auditor loads many TLS-using modules during startup, it is\n    possible to trigger DTV resizing.  Previously, the DTV was marked\n    as allocated by the main malloc afterwards, even if the minimal\n    malloc was still in use.  With this change, _dl_resize_dtv marks\n    the resized DTV as allocated with the minimal malloc.\n    \n    The new test reuses TLS-using modules from other auditing tests.\n    \n    Reviewed-by: DJ Delorie <dj@redhat.com>\n    (cherry picked from commit aa3d7bd5299b33bffc118aa618b59bfa66059bcb)\n\ndiff --git a/elf/Makefile b/elf/Makefile\nindex dc686c3bff..be64c59887 100644\n--- a/elf/Makefile\n+++ b/elf/Makefile\n@@ -378,6 +378,7 @@ tests += \\\n   tst-align3 \\\n   tst-audit-tlsdesc \\\n   tst-audit-tlsdesc-dlopen \\\n+  tst-audit-tlsdesc-dlopen2 \\\n   tst-audit1 \\\n   tst-audit2 \\\n   tst-audit8 \\\n@@ -817,6 +818,7 @@ modules-names += \\\n   tst-auditmanymod8 \\\n   tst-auditmanymod9 \\\n   tst-auditmod-tlsdesc  \\\n+  tst-auditmod-tlsdesc2 \\\n   tst-auditmod1 \\\n   tst-auditmod11 \\\n   tst-auditmod12 \\\n@@ -3040,6 +3042,9 @@ $(objpfx)tst-audit-tlsdesc.out: $(objpfx)tst-auditmod-tlsdesc.so\n tst-audit-tlsdesc-ENV = LD_AUDIT=$(objpfx)tst-auditmod-tlsdesc.so\n $(objpfx)tst-audit-tlsdesc-dlopen.out: $(objpfx)tst-auditmod-tlsdesc.so\n tst-audit-tlsdesc-dlopen-ENV = LD_AUDIT=$(objpfx)tst-auditmod-tlsdesc.so\n+$(objpfx)tst-audit-tlsdesc-dlopen2.out: $(objpfx)tst-auditmod-tlsdesc2.so \\\n+  $(patsubst %, $(objpfx)%.so, $(tlsmod17a-modules))\n+tst-audit-tlsdesc-dlopen2-ENV = LD_AUDIT=$(objpfx)tst-auditmod-tlsdesc2.so\n \n $(objpfx)tst-dlmopen-twice.out: \\\n   $(objpfx)tst-dlmopen-twice-mod1.so \\\ndiff --git a/elf/dl-tls.c b/elf/dl-tls.c\nindex 3d529b722c..b13e752358 100644\n--- a/elf/dl-tls.c\n+++ b/elf/dl-tls.c\n@@ -528,6 +528,13 @@ _dl_resize_dtv (dtv_t *dtv, size_t max_modid)\n       if (newp == NULL)\n \toom ();\n       memcpy (newp, &dtv[-1], (2 + oldsize) * sizeof (dtv_t));\n+#ifdef SHARED\n+      /* Auditors can trigger a DTV resize event while the full malloc\n+\t is not yet in use.  Mark the new DTV allocation as the\n+\t initial allocation.  */\n+      if (!__rtld_malloc_is_complete ())\n+\tGL(dl_initial_dtv) = &newp[1];\n+#endif\n     }\n   else\n     {\ndiff --git a/elf/tst-audit-tlsdesc-dlopen2.c b/elf/tst-audit-tlsdesc-dlopen2.c\nnew file mode 100644\nindex 0000000000..7ba2c4129a\n--- /dev/null\n+++ b/elf/tst-audit-tlsdesc-dlopen2.c\n@@ -0,0 +1,46 @@\n+/* Loading TLS-using modules from auditors (bug 32412).  Main program.\n+   Copyright (C) 2021-2025 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <support/xdlfcn.h>\n+#include <stdio.h>\n+\n+static int\n+do_test (void)\n+{\n+  puts (\"info: start of main program\");\n+\n+  /* Load TLS-using modules, to trigger DTV resizing.  The dynamic\n+     linker will load them again (requiring their own TLS) because the\n+     dlopen calls from the auditor were in the auditing namespace.  */\n+  for (int i = 1; i <= 19; ++i)\n+    {\n+      char dso[30];\n+      snprintf (dso, sizeof (dso), \"tst-tlsmod17a%d.so\", i);\n+      char sym[30];\n+      snprintf (sym, sizeof(sym), \"tlsmod17a%d\", i);\n+\n+      void *handle = xdlopen (dso, RTLD_LAZY);\n+      int (*func) (void) = xdlsym (handle, sym);\n+      /* Trigger TLS allocation.  */\n+      func ();\n+    }\n+\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\ndiff --git a/elf/tst-auditmod-tlsdesc2.c b/elf/tst-auditmod-tlsdesc2.c\nnew file mode 100644\nindex 0000000000..50275cd34d\n--- /dev/null\n+++ b/elf/tst-auditmod-tlsdesc2.c\n@@ -0,0 +1,59 @@\n+/* Loading TLS-using modules from auditors (bug 32412).  Audit module.\n+   Copyright (C) 2021-2025 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <dlfcn.h>\n+#include <link.h>\n+#include <stdbool.h>\n+#include <stdio.h>\n+#include <unistd.h>\n+\n+unsigned int\n+la_version (unsigned int version)\n+{\n+  /* Open some modules, to trigger DTV resizing before the switch to\n+     the main malloc.  */\n+  for (int i = 1; i <= 19; ++i)\n+    {\n+      char dso[30];\n+      snprintf (dso, sizeof (dso), \"tst-tlsmod17a%d.so\", i);\n+      char sym[30];\n+      snprintf (sym, sizeof(sym), \"tlsmod17a%d\", i);\n+\n+      void *handle = dlopen (dso, RTLD_LAZY);\n+      if (handle == NULL)\n+        {\n+          printf (\"error: dlmopen from auditor: %s\\n\", dlerror  ());\n+          fflush (stdout);\n+          _exit (1);\n+        }\n+      int (*func) (void) = dlsym (handle, sym);\n+      if (func == NULL)\n+        {\n+          printf (\"error: dlsym from auditor: %s\\n\", dlerror  ());\n+          fflush (stdout);\n+          _exit (1);\n+        }\n+      /* Trigger TLS allocation.  */\n+      func ();\n+    }\n+\n+  puts (\"info: TLS-using modules loaded from auditor\");\n+  fflush (stdout);\n+\n+  return LAV_CURRENT;\n+}\n\ncommit b3002f303cedb8262cbc1ec22999ea36482efa0e\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Tue May 20 19:36:02 2025 +0200\n\n    support: Use const char * argument in support_capture_subprogram_self_sgid\n    \n    The function does not modify the passed-in string, so make this clear\n    via the prototype.\n    \n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit f0c09fe61678df6f7f18fe1ebff074e62fa5ca7a)\n\ndiff --git a/support/capture_subprocess.h b/support/capture_subprocess.h\nindex 93b7245d2a..5406d9f6c0 100644\n--- a/support/capture_subprocess.h\n+++ b/support/capture_subprocess.h\n@@ -45,8 +45,7 @@ struct support_capture_subprocess support_capture_subprogram\n /* Copy the running program into a setgid binary and run it with CHILD_ID\n    argument.  If execution is successful, return the exit status of the child\n    program, otherwise return a non-zero failure exit code.  */\n-int support_capture_subprogram_self_sgid\n-  (char *child_id);\n+int support_capture_subprogram_self_sgid (const char *child_id);\n \n /* Deallocate the subprocess data captured by\n    support_capture_subprocess.  */\ndiff --git a/support/support_capture_subprocess.c b/support/support_capture_subprocess.c\nindex 53847194cb..2383481911 100644\n--- a/support/support_capture_subprocess.c\n+++ b/support/support_capture_subprocess.c\n@@ -110,7 +110,7 @@ support_capture_subprogram (const char *file, char *const argv[],\n    safely make it SGID with the TARGET group ID.  Then runs the\n    executable.  */\n static int\n-copy_and_spawn_sgid (char *child_id, gid_t gid)\n+copy_and_spawn_sgid (const char *child_id, gid_t gid)\n {\n   char *dirname = xasprintf (\"%s/tst-tunables-setuid.%jd\",\n \t\t\t     test_dir, (intmax_t) getpid ());\n@@ -182,7 +182,7 @@ copy_and_spawn_sgid (char *child_id, gid_t gid)\n   ret = 0;\n   infd = outfd = -1;\n \n-  char * const args[] = {execname, child_id, NULL};\n+  char * const args[] = {execname, (char *) child_id, NULL};\n \n   status = support_subprogram_wait (args[0], args);\n \n@@ -211,7 +211,7 @@ err:\n }\n \n int\n-support_capture_subprogram_self_sgid (char *child_id)\n+support_capture_subprogram_self_sgid (const char *child_id)\n {\n   gid_t target = 0;\n   const int count = 64;\n\ncommit 61dcce21e06834f7248a8d516c9ec20788fc728c\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Mon Dec 23 13:57:55 2024 +0100\n\n    support: Add support_record_failure_barrier\n    \n    This can be used to stop execution after a TEST_COMPARE_BLOB\n    failure, for example.\n    \n    (cherry picked from commit d0b8aa6de4529231fadfe604ac2c434e559c2d9e)\n\ndiff --git a/support/check.h b/support/check.h\nindex 7ea22c7a2c..8f41e5b99f 100644\n--- a/support/check.h\n+++ b/support/check.h\n@@ -207,6 +207,9 @@ void support_record_failure_reset (void);\n    failures or not.  */\n int support_record_failure_is_failed (void);\n \n+/* Terminate the process if any failures have been encountered so far.  */\n+void support_record_failure_barrier (void);\n+\n __END_DECLS\n \n #endif /* SUPPORT_CHECK_H */\ndiff --git a/support/support_record_failure.c b/support/support_record_failure.c\nindex 978123701d..72ee2b232f 100644\n--- a/support/support_record_failure.c\n+++ b/support/support_record_failure.c\n@@ -112,3 +112,13 @@ support_record_failure_is_failed (void)\n      synchronization for reliable test error reporting anyway.  */\n   return __atomic_load_n (&state->failed, __ATOMIC_RELAXED);\n }\n+\n+void\n+support_record_failure_barrier (void)\n+{\n+  if (__atomic_load_n (&state->failed, __ATOMIC_RELAXED))\n+    {\n+      puts (\"error: exiting due to previous errors\");\n+      exit (1);\n+    }\n+}\n\ncommit 079ac4a172a8f6ba37acf1e80e57f5042d2c7561\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Tue May 20 19:45:06 2025 +0200\n\n    elf: Test case for bug 32976 (CVE-2025-4802)\n    \n    Check that LD_LIBRARY_PATH is ignored for AT_SECURE statically\n    linked binaries, using support_capture_subprogram_self_sgid.\n    \n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit d8f7a79335b0d861c12c42aec94c04cd5bb181e2)\n\ndiff --git a/elf/Makefile b/elf/Makefile\nindex be64c59887..afd4eb6fdd 100644\n--- a/elf/Makefile\n+++ b/elf/Makefile\n@@ -266,6 +266,7 @@ tests-static-normal := \\\n   tst-array1-static \\\n   tst-array5-static \\\n   tst-dl-iter-static \\\n+  tst-dlopen-sgid \\\n   tst-dst-static \\\n   tst-env-setuid-static \\\n   tst-getauxval-static \\\n@@ -859,6 +860,7 @@ modules-names += \\\n   tst-dlmopen-twice-mod1 \\\n   tst-dlmopen-twice-mod2 \\\n   tst-dlmopen1mod \\\n+  tst-dlopen-sgid-mod \\\n   tst-dlopen-tlsreinitmod1 \\\n   tst-dlopen-tlsreinitmod2 \\\n   tst-dlopen-tlsreinitmod3 \\\n@@ -3153,3 +3155,5 @@ $(objpfx)tst-dlopen-tlsreinit3.out: $(objpfx)tst-auditmod1.so\n tst-dlopen-tlsreinit3-ENV = LD_AUDIT=$(objpfx)tst-auditmod1.so\n $(objpfx)tst-dlopen-tlsreinit4.out: $(objpfx)tst-auditmod1.so\n tst-dlopen-tlsreinit4-ENV = LD_AUDIT=$(objpfx)tst-auditmod1.so\n+\n+$(objpfx)tst-dlopen-sgid.out: $(objpfx)tst-dlopen-sgid-mod.so\ndiff --git a/elf/tst-dlopen-sgid-mod.c b/elf/tst-dlopen-sgid-mod.c\nnew file mode 100644\nindex 0000000000..5eb79eef48\n--- /dev/null\n+++ b/elf/tst-dlopen-sgid-mod.c\n@@ -0,0 +1 @@\n+/* Opening this object should not succeed.  */\ndiff --git a/elf/tst-dlopen-sgid.c b/elf/tst-dlopen-sgid.c\nnew file mode 100644\nindex 0000000000..47829a405e\n--- /dev/null\n+++ b/elf/tst-dlopen-sgid.c\n@@ -0,0 +1,104 @@\n+/* Test case for ignored LD_LIBRARY_PATH in static startug (bug 32976).\n+   Copyright (C) 2025 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <dlfcn.h>\n+#include <gnu/lib-names.h>\n+#include <stddef.h>\n+#include <stdint.h>\n+#include <stdlib.h>\n+#include <string.h>\n+#include <support/capture_subprocess.h>\n+#include <support/check.h>\n+#include <support/support.h>\n+#include <support/temp_file.h>\n+#include <unistd.h>\n+\n+/* This is the name of our test object.  Use a custom module for\n+   testing, so that this object does not get picked up from the system\n+   path.  */\n+static const char dso_name[] = \"tst-dlopen-sgid-mod.so\";\n+\n+/* Used to mark the recursive invocation.  */\n+static const char magic_argument[] = \"run-actual-test\";\n+\n+static int\n+do_test (void)\n+{\n+/* Pathname of the directory that receives the shared objects this\n+   test attempts to load.  */\n+  char *libdir = support_create_temp_directory (\"tst-dlopen-sgid-\");\n+\n+  /* This is supposed to be ignored and stripped.  */\n+  TEST_COMPARE (setenv (\"LD_LIBRARY_PATH\", libdir, 1), 0);\n+\n+  /* Copy of libc.so.6.  */\n+  {\n+    char *from = xasprintf (\"%s/%s\", support_objdir_root, LIBC_SO);\n+    char *to = xasprintf (\"%s/%s\", libdir, LIBC_SO);\n+    add_temp_file (to);\n+    support_copy_file (from, to);\n+    free (to);\n+    free (from);\n+  }\n+\n+  /* Copy of the test object.   */\n+  {\n+    char *from = xasprintf (\"%s/elf/%s\", support_objdir_root, dso_name);\n+    char *to = xasprintf (\"%s/%s\", libdir, dso_name);\n+    add_temp_file (to);\n+    support_copy_file (from, to);\n+    free (to);\n+    free (from);\n+  }\n+\n+  TEST_COMPARE (support_capture_subprogram_self_sgid (magic_argument), 0);\n+\n+  free (libdir);\n+\n+  return 0;\n+}\n+\n+static void\n+alternative_main (int argc, char **argv)\n+{\n+  if (argc == 2 && strcmp (argv[1], magic_argument) == 0)\n+    {\n+      if (getgid () == getegid ())\n+        /* This can happen if the file system is mounted nosuid.  */\n+        FAIL_UNSUPPORTED (\"SGID failed: GID and EGID match (%jd)\\n\",\n+                          (intmax_t) getgid ());\n+\n+      /* Should be removed due to SGID.  */\n+      TEST_COMPARE_STRING (getenv (\"LD_LIBRARY_PATH\"), NULL);\n+\n+      TEST_VERIFY (dlopen (dso_name, RTLD_NOW) == NULL);\n+      {\n+        const char *message = dlerror ();\n+        TEST_COMPARE_STRING (message,\n+                             \"tst-dlopen-sgid-mod.so:\"\n+                             \" cannot open shared object file:\"\n+                             \" No such file or directory\");\n+      }\n+\n+      support_record_failure_barrier ();\n+      exit (EXIT_SUCCESS);\n+    }\n+}\n+\n+#define PREPARE alternative_main\n+#include <support/test-driver.c>\n\ncommit 56e75b810ac39b0e390be5b66397dca0cdfa4d80\nAuthor: Sunil K Pandey <sunil.k.pandey@intel.com>\nDate:   Tue May 20 10:07:27 2025 -0700\n\n    x86_64: Fix typo in ifunc-impl-list.c.\n    \n    Fix wcsncpy and wcpncpy typo in ifunc-impl-list.c.\n    \n    Reviewed-by: H.J. Lu <hjl.tools@gmail.com>\n    (cherry picked from commit f2aeb6ff941dccc4c777b5621e77addea6cc076c)\n\ndiff --git a/sysdeps/x86_64/multiarch/ifunc-impl-list.c b/sysdeps/x86_64/multiarch/ifunc-impl-list.c\nindex 0bbb71bbbf..3db45db39b 100644\n--- a/sysdeps/x86_64/multiarch/ifunc-impl-list.c\n+++ b/sysdeps/x86_64/multiarch/ifunc-impl-list.c\n@@ -922,7 +922,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,\n \t\t\t\t     (CPU_FEATURE_USABLE (AVX2)\n \t\t\t\t      && CPU_FEATURE_USABLE (BMI2)),\n \t\t\t\t     __wcsncpy_avx2)\n-\t      X86_IFUNC_IMPL_ADD_V2 (array, i, wcpncpy,\n+\t      X86_IFUNC_IMPL_ADD_V2 (array, i, wcsncpy,\n \t\t\t\t     1,\n \t\t\t\t     __wcsncpy_generic))\n \n@@ -952,7 +952,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,\n \t\t\t\t     (CPU_FEATURE_USABLE (AVX2)\n \t\t\t\t      && CPU_FEATURE_USABLE (BMI2)),\n \t\t\t\t     __wcpncpy_avx2)\n-\t      X86_IFUNC_IMPL_ADD_V2 (array, i, wcsncpy,\n+\t      X86_IFUNC_IMPL_ADD_V2 (array, i, wcpncpy,\n \t\t\t\t     1,\n \t\t\t\t     __wcpncpy_generic))\n \n\ncommit c8e10f14328518954072df64aafd574e67cfdde5\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Wed May 21 08:43:32 2025 +0200\n\n    elf: Fix subprocess status handling for tst-dlopen-sgid (bug 32987)\n    \n    This should really move into support_capture_subprogram_self_sgid.\n    \n    Reviewed-by: Sam James <sam@gentoo.org>\n    (cherry picked from commit 35fc356fa3b4f485bd3ba3114c9f774e5df7d3c2)\n\ndiff --git a/NEWS b/NEWS\nindex 7a6985f5dd..4b290ad4bf 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -23,6 +23,7 @@ The following bugs are resolved with this release:\n   [32245] glibc -Wstringop-overflow= build failure on hppa\n   [32470] x86: Avoid integer truncation with large cache sizes\n   [32810] Crash on x86-64 if XSAVEC disable via tunable\n+  [32987] elf: Fix subprocess status handling for tst-dlopen-sgid\n \f\n Version 2.40\n \ndiff --git a/elf/tst-dlopen-sgid.c b/elf/tst-dlopen-sgid.c\nindex 47829a405e..5688b79f2e 100644\n--- a/elf/tst-dlopen-sgid.c\n+++ b/elf/tst-dlopen-sgid.c\n@@ -26,6 +26,8 @@\n #include <support/check.h>\n #include <support/support.h>\n #include <support/temp_file.h>\n+#include <support/test-driver.h>\n+#include <sys/wait.h>\n #include <unistd.h>\n \n /* This is the name of our test object.  Use a custom module for\n@@ -66,10 +68,16 @@ do_test (void)\n     free (from);\n   }\n \n-  TEST_COMPARE (support_capture_subprogram_self_sgid (magic_argument), 0);\n-\n   free (libdir);\n \n+  int status = support_capture_subprogram_self_sgid (magic_argument);\n+\n+  if (WEXITSTATUS (status) == EXIT_UNSUPPORTED)\n+    return EXIT_UNSUPPORTED;\n+\n+  if (!WIFEXITED (status))\n+    FAIL_EXIT1 (\"Unexpected exit status %d from child process\\n\", status);\n+\n   return 0;\n }\n \n\ncommit 42a5a940c974d02540c8da26d6374c744d148cb9\nAuthor: Carlos O'Donell <carlos@redhat.com>\nDate:   Wed Jun 11 09:19:17 2025 -0400\n\n    ppc64le: Revert \"powerpc: Optimized strncmp for power10\" (CVE-2025-5745)\n    \n    This reverts commit 23f0d81608d0ca6379894ef81670cf30af7fd081\n    \n    Reason for revert: Power10 strncmp clobbers non-volatile vector\n    registers (Bug 33060)\n    \n    Tested on ppc64le with no regressions.\n    \n    (cherry picked from commit 63c60101ce7c5eac42be90f698ba02099b41b965)\n\ndiff --git a/sysdeps/powerpc/powerpc64/le/power10/strncmp.S b/sysdeps/powerpc/powerpc64/le/power10/strncmp.S\ndeleted file mode 100644\nindex d4ba76acae..0000000000\n--- a/sysdeps/powerpc/powerpc64/le/power10/strncmp.S\n+++ /dev/null\n@@ -1,271 +0,0 @@\n-/* Optimized strncmp implementation for PowerPC64/POWER10.\n-   Copyright (C) 2024 Free Software Foundation, Inc.\n-   This file is part of the GNU C Library.\n-\n-   The GNU C Library is free software; you can redistribute it and/or\n-   modify it under the terms of the GNU Lesser General Public\n-   License as published by the Free Software Foundation; either\n-   version 2.1 of the License, or (at your option) any later version.\n-\n-   The GNU C Library is distributed in the hope that it will be useful,\n-   but WITHOUT ANY WARRANTY; without even the implied warranty of\n-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n-   Lesser General Public License for more details.\n-\n-   You should have received a copy of the GNU Lesser General Public\n-   License along with the GNU C Library; if not, see\n-   <https://www.gnu.org/licenses/>.  */\n-\n-#include <sysdep.h>\n-\n-/* Implements the function\n-\n-   int [r3] strncmp (const char *s1 [r3], const char *s2 [r4], size_t [r5] n)\n-\n-   The implementation uses unaligned doubleword access to avoid specialized\n-   code paths depending of data alignment for first 32 bytes and uses\n-   vectorised loops after that.  */\n-\n-#ifndef STRNCMP\n-# define STRNCMP strncmp\n-#endif\n-\n-/* TODO: Change this to actual instructions when minimum binutils is upgraded\n-   to 2.27.  Macros are defined below for these newer instructions in order\n-   to maintain compatibility.  */\n-\n-#define LXVP(xtp,dq,ra)              \\\n-\t.long(((6)<<(32-6))          \\\n-\t| ((((xtp)-32)>>1)<<(32-10)) \\\n-\t| ((1)<<(32-11))             \\\n-\t| ((ra)<<(32-16))            \\\n-\t| dq)\n-\n-#define COMPARE_16(vreg1,vreg2,offset) \\\n-\tlxv\t  vreg1+32,offset(r3); \\\n-\tlxv\t  vreg2+32,offset(r4); \\\n-\tvcmpnezb. v7,vreg1,vreg2;      \\\n-\tbne\t  cr6,L(different);    \\\n-\tcmpldi\t  cr7,r5,16;           \\\n-\tble\t  cr7,L(ret0);         \\\n-\taddi\t  r5,r5,-16;\n-\n-#define COMPARE_32(vreg1,vreg2,offset,label1,label2) \\\n-\tLXVP(vreg1+32,offset,r3);                    \\\n-\tLXVP(vreg2+32,offset,r4);                    \\\n-\tvcmpnezb. v7,vreg1+1,vreg2+1;                \\\n-\tbne\t  cr6,L(label1);                     \\\n-\tvcmpnezb. v7,vreg1,vreg2;                    \\\n-\tbne\t  cr6,L(label2);                     \\\n-\tcmpldi\t  cr7,r5,32;                         \\\n-\tble\t  cr7,L(ret0);                       \\\n-\taddi\t  r5,r5,-32;\n-\n-#define TAIL_FIRST_16B(vreg1,vreg2) \\\n-\tvctzlsbb r6,v7;             \\\n-\tcmpld\t cr7,r5,r6;         \\\n-\tble\t cr7,L(ret0);       \\\n-\tvextubrx r5,r6,vreg1;       \\\n-\tvextubrx r4,r6,vreg2;       \\\n-\tsubf\t r3,r4,r5;          \\\n-\tblr;\n-\n-#define TAIL_SECOND_16B(vreg1,vreg2) \\\n-\tvctzlsbb r6,v7;              \\\n-\taddi\t r0,r6,16;           \\\n-\tcmpld\t cr7,r5,r0;          \\\n-\tble\t cr7,L(ret0);        \\\n-\tvextubrx r5,r6,vreg1;        \\\n-\tvextubrx r4,r6,vreg2;        \\\n-\tsubf\t r3,r4,r5;           \\\n-\tblr;\n-\n-#define CHECK_N_BYTES(reg1,reg2,len_reg) \\\n-\tsldi\t  r6,len_reg,56;\t \\\n-\tlxvl\t  32+v4,reg1,r6;\t \\\n-\tlxvl\t  32+v5,reg2,r6;\t \\\n-\tadd\t  reg1,reg1,len_reg;\t \\\n-\tadd\t  reg2,reg2,len_reg;\t \\\n-\tvcmpnezb  v7,v4,v5;\t\t \\\n-\tvctzlsbb  r6,v7;\t\t \\\n-\tcmpld\t  cr7,r6,len_reg;\t \\\n-\tblt\t  cr7,L(different);\t \\\n-\tcmpld\t  cr7,r5,len_reg;\t \\\n-\tble\t  cr7,L(ret0);\t\t \\\n-\tsub\t  r5,r5,len_reg;\t \\\n-\n-\t/* TODO: change this to .machine power10 when the minimum required\n-\t binutils allows it.  */\n-\t.machine  power9\n-ENTRY_TOCLESS (STRNCMP, 4)\n-\t/* Check if size is 0.  */\n-\tcmpdi\t cr0,r5,0\n-\tbeq\t cr0,L(ret0)\n-\tandi.   r7,r3,4095\n-\tandi.   r8,r4,4095\n-\tcmpldi  cr0,r7,4096-16\n-\tcmpldi  cr1,r8,4096-16\n-\tbgt     cr0,L(crosses)\n-\tbgt     cr1,L(crosses)\n-\tCOMPARE_16(v4,v5,0)\n-\taddi\tr3,r3,16\n-\taddi\tr4,r4,16\n-\n-L(crosses):\n-\tandi.\t r7,r3,15\n-\tsubfic\t r7,r7,16\t/* r7(nalign1) = 16 - (str1 & 15).  */\n-\tandi.\t r9,r4,15\n-\tsubfic\t r8,r9,16\t/* r8(nalign2) = 16 - (str2 & 15).  */\n-\tcmpld\t cr7,r7,r8\n-\tbeq\t cr7,L(same_aligned)\n-\tblt\t cr7,L(nalign1_min)\n-\n-\t/* nalign2 is minimum and s2 pointer is aligned.  */\n-\tCHECK_N_BYTES(r3,r4,r8)\n-\t/* Are we on the 64B hunk which crosses a page?  */\n-\tandi.   r10,r3,63       /* Determine offset into 64B hunk.  */\n-\tandi.   r8,r3,15        /* The offset into the 16B hunk.  */\n-\tneg     r7,r3\n-\tandi.   r9,r7,15        /* Number of bytes after a 16B cross.  */\n-\trlwinm. r7,r7,26,0x3F   /* ((r4-4096))>>6&63.  */\n-\tbeq     L(compare_64_pagecross)\n-\tmtctr   r7\n-\tb       L(compare_64B_unaligned)\n-\n-\t/* nalign1 is minimum and s1 pointer is aligned.  */\n-L(nalign1_min):\n-\tCHECK_N_BYTES(r3,r4,r7)\n-\t/* Are we on the 64B hunk which crosses a page?  */\n-\tandi.   r10,r4,63       /* Determine offset into 64B hunk.  */\n-\tandi.   r8,r4,15        /* The offset into the 16B hunk.  */\n-\tneg     r7,r4\n-\tandi.   r9,r7,15        /* Number of bytes after a 16B cross.  */\n-\trlwinm. r7,r7,26,0x3F   /* ((r4-4096))>>6&63.  */\n-\tbeq     L(compare_64_pagecross)\n-\tmtctr   r7\n-\n-\t.p2align 5\n-L(compare_64B_unaligned):\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\tCOMPARE_16(v4,v5,32)\n-\tCOMPARE_16(v4,v5,48)\n-\taddi    r3,r3,64\n-\taddi    r4,r4,64\n-\tbdnz    L(compare_64B_unaligned)\n-\n-\t/* Cross the page boundary of s2, carefully. Only for first\n-\titeration we have to get the count of 64B blocks to be checked.\n-\tFrom second iteration and beyond, loop counter is always 63.  */\n-L(compare_64_pagecross):\n-\tli      r11, 63\n-\tmtctr   r11\n-\tcmpldi  r10,16\n-\tble     L(cross_4)\n-\tcmpldi  r10,32\n-\tble     L(cross_3)\n-\tcmpldi  r10,48\n-\tble     L(cross_2)\n-L(cross_1):\n-\tCHECK_N_BYTES(r3,r4,r9)\n-\tCHECK_N_BYTES(r3,r4,r8)\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\tCOMPARE_16(v4,v5,32)\n-\taddi    r3,r3,48\n-\taddi    r4,r4,48\n-\tb       L(compare_64B_unaligned)\n-L(cross_2):\n-\tCOMPARE_16(v4,v5,0)\n-\taddi    r3,r3,16\n-\taddi    r4,r4,16\n-\tCHECK_N_BYTES(r3,r4,r9)\n-\tCHECK_N_BYTES(r3,r4,r8)\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\taddi    r3,r3,32\n-\taddi    r4,r4,32\n-\tb       L(compare_64B_unaligned)\n-L(cross_3):\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\taddi    r3,r3,32\n-\taddi    r4,r4,32\n-\tCHECK_N_BYTES(r3,r4,r9)\n-\tCHECK_N_BYTES(r3,r4,r8)\n-\tCOMPARE_16(v4,v5,0)\n-\taddi    r3,r3,16\n-\taddi    r4,r4,16\n-\tb       L(compare_64B_unaligned)\n-L(cross_4):\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\tCOMPARE_16(v4,v5,32)\n-\taddi    r3,r3,48\n-\taddi    r4,r4,48\n-\tCHECK_N_BYTES(r3,r4,r9)\n-\tCHECK_N_BYTES(r3,r4,r8)\n-\tb       L(compare_64B_unaligned)\n-\n-L(same_aligned):\n-\tCHECK_N_BYTES(r3,r4,r7)\n-\t/* Align s1 to 32B and adjust s2 address.\n-\t   Use lxvp only if both s1 and s2 are 32B aligned.  */\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\tCOMPARE_16(v4,v5,32)\n-\tCOMPARE_16(v4,v5,48)\n-\taddi\tr3,r3,64\n-\taddi\tr4,r4,64\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\taddi\tr5,r5,32\n-\n-\tclrldi  r6,r3,59\n-\tsubfic\tr7,r6,32\n-\tadd\tr3,r3,r7\n-\tadd\tr4,r4,r7\n-\tsubf\tr5,r7,r5\n-\tandi.\tr7,r4,0x1F\n-\tbeq\tcr0,L(32B_aligned_loop)\n-\n-\t.p2align 5\n-L(16B_aligned_loop):\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\tCOMPARE_16(v4,v5,32)\n-\tCOMPARE_16(v4,v5,48)\n-\taddi\tr3,r3,64\n-\taddi\tr4,r4,64\n-\tb\tL(16B_aligned_loop)\n-\n-\t/* Calculate and return the difference.  */\n-L(different):\n-\tTAIL_FIRST_16B(v4,v5)\n-\n-\t.p2align 5\n-L(32B_aligned_loop):\n-\tCOMPARE_32(v14,v16,0,tail1,tail2)\n-\tCOMPARE_32(v18,v20,32,tail3,tail4)\n-\tCOMPARE_32(v22,v24,64,tail5,tail6)\n-\tCOMPARE_32(v26,v28,96,tail7,tail8)\n-\taddi\tr3,r3,128\n-\taddi\tr4,r4,128\n-\tb\tL(32B_aligned_loop)\n-\n-L(tail1): TAIL_FIRST_16B(v15,v17)\n-L(tail2): TAIL_SECOND_16B(v14,v16)\n-L(tail3): TAIL_FIRST_16B(v19,v21)\n-L(tail4): TAIL_SECOND_16B(v18,v20)\n-L(tail5): TAIL_FIRST_16B(v23,v25)\n-L(tail6): TAIL_SECOND_16B(v22,v24)\n-L(tail7): TAIL_FIRST_16B(v27,v29)\n-L(tail8): TAIL_SECOND_16B(v26,v28)\n-\n-\t.p2align 5\n-L(ret0):\n-\tli\tr3,0\n-\tblr\n-\n-END(STRNCMP)\n-libc_hidden_builtin_def(strncmp)\ndiff --git a/sysdeps/powerpc/powerpc64/multiarch/Makefile b/sysdeps/powerpc/powerpc64/multiarch/Makefile\nindex b847c19049..a38ff46448 100644\n--- a/sysdeps/powerpc/powerpc64/multiarch/Makefile\n+++ b/sysdeps/powerpc/powerpc64/multiarch/Makefile\n@@ -34,7 +34,7 @@ ifneq (,$(filter %le,$(config-machine)))\n sysdep_routines += memchr-power10 memcmp-power10 memcpy-power10 \\\n \t\t   memmove-power10 memset-power10 rawmemchr-power9 \\\n \t\t   rawmemchr-power10 strcmp-power9 strcmp-power10 \\\n-\t\t   strncmp-power9 strncmp-power10 strcpy-power9 stpcpy-power9 \\\n+\t\t   strncmp-power9 strcpy-power9 stpcpy-power9 \\\n \t\t   strlen-power9 strncpy-power9 stpncpy-power9 strlen-power10\n endif\n CFLAGS-strncase-power7.c += -mcpu=power7 -funroll-loops\ndiff --git a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c\nindex 2bb47d3527..30fd89e109 100644\n--- a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c\n+++ b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c\n@@ -164,9 +164,6 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,\n   /* Support sysdeps/powerpc/powerpc64/multiarch/strncmp.c.  */\n   IFUNC_IMPL (i, name, strncmp,\n #ifdef __LITTLE_ENDIAN__\n-\t      IFUNC_IMPL_ADD (array, i, strncmp, hwcap2 & PPC_FEATURE2_ARCH_3_1\n-\t\t\t      && hwcap & PPC_FEATURE_HAS_VSX,\n-\t\t\t      __strncmp_power10)\n \t      IFUNC_IMPL_ADD (array, i, strncmp, hwcap2 & PPC_FEATURE2_ARCH_3_00\n \t\t\t      && hwcap & PPC_FEATURE_HAS_ALTIVEC,\n \t\t\t      __strncmp_power9)\ndiff --git a/sysdeps/powerpc/powerpc64/multiarch/strncmp-power10.S b/sysdeps/powerpc/powerpc64/multiarch/strncmp-power10.S\ndeleted file mode 100644\nindex d7026c12e2..0000000000\n--- a/sysdeps/powerpc/powerpc64/multiarch/strncmp-power10.S\n+++ /dev/null\n@@ -1,25 +0,0 @@\n-/* Copyright (C) 2024 Free Software Foundation, Inc.\n-   This file is part of the GNU C Library.\n-\n-   The GNU C Library is free software; you can redistribute it and/or\n-   modify it under the terms of the GNU Lesser General Public\n-   License as published by the Free Software Foundation; either\n-   version 2.1 of the License, or (at your option) any later version.\n-\n-   The GNU C Library is distributed in the hope that it will be useful,\n-   but WITHOUT ANY WARRANTY; without even the implied warranty of\n-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n-   Lesser General Public License for more details.\n-\n-   You should have received a copy of the GNU Lesser General Public\n-   License along with the GNU C Library; if not, see\n-   <https://www.gnu.org/licenses/>.  */\n-\n-#if defined __LITTLE_ENDIAN__ && IS_IN (libc)\n-#define STRNCMP __strncmp_power10\n-\n-#undef libc_hidden_builtin_def\n-#define libc_hidden_builtin_def(name)\n-\n-#include <sysdeps/powerpc/powerpc64/le/power10/strncmp.S>\n-#endif\ndiff --git a/sysdeps/powerpc/powerpc64/multiarch/strncmp.c b/sysdeps/powerpc/powerpc64/multiarch/strncmp.c\nindex a5ed67f766..6178f4a432 100644\n--- a/sysdeps/powerpc/powerpc64/multiarch/strncmp.c\n+++ b/sysdeps/powerpc/powerpc64/multiarch/strncmp.c\n@@ -29,7 +29,6 @@ extern __typeof (strncmp) __strncmp_ppc attribute_hidden;\n extern __typeof (strncmp) __strncmp_power8 attribute_hidden;\n # ifdef __LITTLE_ENDIAN__\n extern __typeof (strncmp) __strncmp_power9 attribute_hidden;\n-extern __typeof (strncmp) __strncmp_power10 attribute_hidden;\n # endif\n # undef strncmp\n \n@@ -37,9 +36,6 @@ extern __typeof (strncmp) __strncmp_power10 attribute_hidden;\n    ifunc symbol properly.  */\n libc_ifunc_redirected (__redirect_strncmp, strncmp,\n # ifdef __LITTLE_ENDIAN__\n-\t\t\t(hwcap2 & PPC_FEATURE2_ARCH_3_1\n-\t\t\t && hwcap & PPC_FEATURE_HAS_VSX)\n-\t\t\t? __strncmp_power10 :\n \t\t\t(hwcap2 & PPC_FEATURE2_ARCH_3_00\n \t\t\t && hwcap & PPC_FEATURE_HAS_ALTIVEC)\n \t\t\t? __strncmp_power9 :\n\ncommit 2ad6e55ea5cb23af5af7af35d5f80cd93032f96a\nAuthor: Carlos O'Donell <carlos@redhat.com>\nDate:   Wed Jun 11 09:43:50 2025 -0400\n\n    ppc64le: Revert \"powerpc: Fix performance issues of strcmp power10\" (CVE-2025-5702)\n    \n    This reverts commit 90bcc8721ef82b7378d2b080141228660e862d56\n    \n    This change is in the chain of the final revert that fixes the CVE\n    i.e. 3367d8e180848030d1646f088759f02b8dfe0d6f\n    \n    Reason for revert: Power10 strcmp clobbers non-volatile vector\n    registers (Bug 33056)\n    \n    Tested on ppc64le with no regressions.\n    \n    (cherry picked from commit c22de63588df7a8a0edceea9bb02534064c9d201)\n\ndiff --git a/sysdeps/powerpc/powerpc64/le/power10/strcmp.S b/sysdeps/powerpc/powerpc64/le/power10/strcmp.S\nindex f0d6732a25..00f1e9c170 100644\n--- a/sysdeps/powerpc/powerpc64/le/power10/strcmp.S\n+++ b/sysdeps/powerpc/powerpc64/le/power10/strcmp.S\n@@ -62,7 +62,7 @@\n \tlxvl\t  32+v5,reg2,r0;         \\\n \tadd\t  reg1,reg1,len_reg;     \\\n \tadd\t  reg2,reg2,len_reg;     \\\n-\tvcmpnezb  v7,v4,v5;              \\\n+\tvcmpnezb. v7,v4,v5;              \\\n \tvctzlsbb  r6,v7;                 \\\n \tcmpld\t  cr7,r6,len_reg;        \\\n \tblt\t  cr7,L(different);      \\\n@@ -72,110 +72,70 @@\n \n \t.machine  power9\n ENTRY_TOCLESS (STRCMP, 4)\n-\tandi.\tr7,r3,4095\n-\tandi.\tr8,r4,4095\n-\tcmpldi\tcr0,r7,4096-16\n-\tcmpldi\tcr1,r8,4096-16\n-\tbgt\tcr0,L(crosses)\n-\tbgt\tcr1,L(crosses)\n-\tCOMPARE_16(v4,v5,0)\n-\n-L(crosses):\n-\tandi.\tr7,r3,15\n-\tsubfic\tr7,r7,16\t/* r7(nalign1) = 16 - (str1 & 15).  */\n-\tandi.\tr9,r4,15\n-\tsubfic\tr5,r9,16\t/* r5(nalign2) = 16 - (str2 & 15).  */\n-\tcmpld\tcr7,r7,r5\n-\tbeq\tcr7,L(same_aligned)\n-\tblt\tcr7,L(nalign1_min)\n+\tli\t r11,16\n+\t/* eq bit of cr1 used as swap status flag to indicate if\n+\tsource pointers were swapped.  */\n+\tcrclr\t 4*cr1+eq\n+\tvspltisb v19,-1\n+\tandi.\t r7,r3,15\n+\tsub\t r7,r11,r7\t/* r7(nalign1) = 16 - (str1 & 15).  */\n+\tandi.\t r9,r4,15\n+\tsub\t r5,r11,r9\t/* r5(nalign2) = 16 - (str2 & 15).  */\n+\tcmpld\t cr7,r7,r5\n+\tbeq\t cr7,L(same_aligned)\n+\tblt\t cr7,L(nalign1_min)\n+\t/* Swap r3 and r4, and r7 and r5 such that r3 and r7 hold the\n+\tpointer which is closer to the next 16B boundary so that only\n+\tone CHECK_N_BYTES is needed before entering the loop below.  */\n+\tmr\t r8,r4\n+\tmr\t r4,r3\n+\tmr\t r3,r8\n+\tmr\t r12,r7\n+\tmr\t r7,r5\n+\tmr\t r5,r12\n+\tcrset\t 4*cr1+eq\t/* Set bit on swapping source pointers.  */\n \n-\t/* nalign2 is minimum and s2 pointer is aligned.  */\n-\tCHECK_N_BYTES(r3,r4,r5)\n-\t/* Are we on the 64B hunk which crosses a page?  */\n-\tandi.\tr10,r3,63\t/* Determine offset into 64B hunk.  */\n-\tandi.\tr8,r3,15        /* The offset into the 16B hunk.  */\n-\tneg\tr7,r3\n-\tandi.\tr9,r7,15\t/* Number of bytes after a 16B cross.  */\n-\trlwinm.\tr7,r7,26,0x3F\t/* ((r3-4096))>>6&63.  */\n-\tbeq\tL(compare_64_pagecross)\n-\tmtctr\tr7\n-\tb\tL(compare_64B_unaligned)\n-\n-\t/* nalign1 is minimum and s1 pointer is aligned.  */\n+\t.p2align 5\n L(nalign1_min):\n \tCHECK_N_BYTES(r3,r4,r7)\n-\t/* Are we on the 64B hunk which crosses a page?  */\n-\tandi.\tr10,r4,63\t/* Determine offset into 64B hunk.  */\n-\tandi.\tr8,r4,15\t/* The offset into the 16B hunk.  */\n-\tneg\tr7,r4\n-\tandi.\tr9,r7,15\t/* Number of bytes after a 16B cross.  */\n-\trlwinm. r7,r7,26,0x3F\t/* ((r4-4096))>>6&63.  */\n-\tbeq\tL(compare_64_pagecross)\n-\tmtctr\tr7\n \n \t.p2align 5\n-L(compare_64B_unaligned):\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\tCOMPARE_16(v4,v5,32)\n-\tCOMPARE_16(v4,v5,48)\n-\taddi\tr3,r3,64\n-\taddi\tr4,r4,64\n-\tbdnz\tL(compare_64B_unaligned)\n+L(s1_aligned):\n+\t/* r9 and r5 is number of bytes to be read after and before\n+\t page boundary correspondingly.  */\n+\tsub \tr5,r5,r7\n+\tsubfic\tr9,r5,16\n+\t/* Now let r7 hold the count of quadwords which can be\n+\tchecked without crossing a page boundary. quadword offset is\n+\t(str2>>4)&0xFF.  */\n+\trlwinm\tr7,r4,28,0xFF\n+\t/* Below check is required only for first iteration. For second\n+\titeration and beyond, the new loop counter is always 255.  */\n+\tcmpldi\tr7,255\n+\tbeq\tL(L3)\n+\t/* Get the initial loop count by 255-((str2>>4)&0xFF).  */\n+\tsubfic  r11,r7,255\n \n-\t/* Cross the page boundary of s2, carefully. Only for first\n-\titeration we have to get the count of 64B blocks to be checked.\n-\tFrom second iteration and beyond, loop counter is always 63.  */\n-L(compare_64_pagecross):\n-\tli\tr11, 63\n+\t.p2align 5\n+L(L1):\n \tmtctr\tr11\n-\tcmpldi\tr10,16\n-\tble\tL(cross_4)\n-\tcmpldi\tr10,32\n-\tble\tL(cross_3)\n-\tcmpldi\tr10,48\n-\tble\tL(cross_2)\n-L(cross_1):\n-\tCHECK_N_BYTES(r3,r4,r9)\n-\tCHECK_N_BYTES(r3,r4,r8)\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\tCOMPARE_16(v4,v5,32)\n-\taddi\tr3,r3,48\n-\taddi\tr4,r4,48\n-\tb\tL(compare_64B_unaligned)\n-L(cross_2):\n-\tCOMPARE_16(v4,v5,0)\n-\taddi\tr3,r3,16\n-\taddi\tr4,r4,16\n-\tCHECK_N_BYTES(r3,r4,r9)\n-\tCHECK_N_BYTES(r3,r4,r8)\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\taddi\tr3,r3,32\n-\taddi\tr4,r4,32\n-\tb\tL(compare_64B_unaligned)\n-L(cross_3):\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\taddi\tr3,r3,32\n-\taddi\tr4,r4,32\n-\tCHECK_N_BYTES(r3,r4,r9)\n-\tCHECK_N_BYTES(r3,r4,r8)\n-\tCOMPARE_16(v4,v5,0)\n+\n+\t.p2align 5\n+L(L2):\n+\tCOMPARE_16(v4,v5,0)\t/* Load 16B blocks using lxv.  */\n \taddi\tr3,r3,16\n \taddi\tr4,r4,16\n-\tb\tL(compare_64B_unaligned)\n-L(cross_4):\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\tCOMPARE_16(v4,v5,32)\n-\taddi\tr3,r3,48\n-\taddi\tr4,r4,48\n+\tbdnz\tL(L2)\n+\t/* Cross the page boundary of s2, carefully.  */\n+\n+\t.p2align 5\n+L(L3):\n+\tCHECK_N_BYTES(r3,r4,r5)\n \tCHECK_N_BYTES(r3,r4,r9)\n-\tCHECK_N_BYTES(r3,r4,r8)\n-\tb\tL(compare_64B_unaligned)\n+\tli \tr11,255\t\t/* Load the new loop counter.  */\n+\tb\tL(L1)\n \n+\t.p2align 5\n L(same_aligned):\n \tCHECK_N_BYTES(r3,r4,r7)\n         /* Align s1 to 32B and adjust s2 address.\n@@ -208,7 +168,18 @@ L(16B_aligned_loop):\n \n \t/* Calculate and return the difference.  */\n L(different):\n-\tTAIL(v4,v5)\n+\tvctzlsbb r6,v7\n+\tvextubrx r5,r6,v4\n+\tvextubrx r4,r6,v5\n+\tbt  \t 4*cr1+eq,L(swapped)\n+\tsubf\t r3,r4,r5\n+\tblr\n+\n+\t/* If src pointers were swapped, then swap the\n+\tindices and calculate the return value.  */\n+L(swapped):\n+\tsubf     r3,r5,r4\n+\tblr\n \n \t.p2align 5\n L(32B_aligned_loop):\n\ncommit 672f31b90e501b4ba10ba12ab4c6051f77589912\nAuthor: Carlos O'Donell <carlos@redhat.com>\nDate:   Wed Jun 11 09:33:45 2025 -0400\n\n    ppc64le: Revert \"powerpc : Add optimized memchr for POWER10\" (Bug 33059)\n    \n    This reverts commit b9182c793caa05df5d697427c0538936e6396d4b\n    \n    Reason for revert: Power10 memchr clobbers v20 vector register\n    (Bug 33059)\n    \n    This is not a security issue, unlike CVE-2025-5745 and\n    CVE-2025-5702.\n    \n    Tested on ppc64le without regression.\n    \n    (cherry picked from commit a7877bb6685300f159fa095c9f50b22b112cddb8)\n\ndiff --git a/sysdeps/powerpc/powerpc64/le/power10/memchr.S b/sysdeps/powerpc/powerpc64/le/power10/memchr.S\ndeleted file mode 100644\nindex 53e5716d72..0000000000\n--- a/sysdeps/powerpc/powerpc64/le/power10/memchr.S\n+++ /dev/null\n@@ -1,315 +0,0 @@\n-/* Optimized memchr implementation for POWER10 LE.\n-   Copyright (C) 2021-2024 Free Software Foundation, Inc.\n-   This file is part of the GNU C Library.\n-\n-   The GNU C Library is free software; you can redistribute it and/or\n-   modify it under the terms of the GNU Lesser General Public\n-   License as published by the Free Software Foundation; either\n-   version 2.1 of the License, or (at your option) any later version.\n-\n-   The GNU C Library is distributed in the hope that it will be useful,\n-   but WITHOUT ANY WARRANTY; without even the implied warranty of\n-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\t See the GNU\n-   Lesser General Public License for more details.\n-\n-   You should have received a copy of the GNU Lesser General Public\n-   License along with the GNU C Library; if not, see\n-   <https://www.gnu.org/licenses/>.  */\n-\n-#include <sysdep.h>\n-\n-# ifndef MEMCHR\n-#  define MEMCHR __memchr\n-# endif\n-# define M_VREG_ZERO v20\n-# define M_OFF_START_LOOP 256\n-# define MEMCHR_SUBTRACT_VECTORS \\\n-\tvsububm   v4,v4,v18;\t    \\\n-\tvsububm   v5,v5,v18;\t    \\\n-\tvsububm   v6,v6,v18;\t    \\\n-\tvsububm   v7,v7,v18;\n-# define M_TAIL(vreg,increment)\t   \\\n-\tvctzlsbb  r4,vreg;\t   \\\n-\tcmpld     r5,r4;\t   \\\n-\tble       L(null);\t   \\\n-\taddi\t  r4,r4,increment; \\\n-\tadd\t  r3,r6,r4;\t   \\\n-\tblr\n-\n-/* TODO: Replace macros by the actual instructions when minimum binutils becomes\n-   >= 2.35.  This is used to keep compatibility with older versions.  */\n-#define M_VEXTRACTBM(rt,vrb)\t \\\n-\t.long(((4)<<(32-6))\t \\\n-\t      | ((rt)<<(32-11))\t \\\n-\t      | ((8)<<(32-16))\t \\\n-\t      | ((vrb)<<(32-21)) \\\n-\t      | 1602)\n-\n-#define M_LXVP(xtp,dq,ra)\t\t   \\\n-\t.long(((6)<<(32-6))\t\t   \\\n-\t      | ((((xtp)-32)>>1)<<(32-10)) \\\n-\t      | ((1)<<(32-11))\t\t   \\\n-\t      | ((ra)<<(32-16))\t\t   \\\n-\t      | dq)\n-\n-#define CHECK16B(vreg,offset,addr,label) \\\n-\tlxv\t  vreg+32,offset(addr);\t\\\n-\tvcmpequb. vreg,vreg,v18;\t\\\n-\tbne\t  cr6,L(label);\t\t\\\n-\tcmpldi\t  r5,16;\t\t\\\n-\tble\t  L(null);\t\t\\\n-\taddi\t  r5,r5,-16;\n-\n-/* Load 4 quadwords, merge into one VR for speed and check for NULLs.  r6 has #\n-   of bytes already checked.  */\n-#define CHECK64B(offset,addr,label)\t    \\\n-\tM_LXVP(v4+32,offset,addr);\t    \\\n-\tM_LXVP(v6+32,offset+32,addr);\t    \\\n-\tMEMCHR_SUBTRACT_VECTORS;\t    \\\n-\tvminub\t  v14,v4,v5;\t\t    \\\n-\tvminub\t  v15,v6,v7;\t\t    \\\n-\tvminub\t  v16,v14,v15;\t\t    \\\n-\tvcmpequb. v0,v16,M_VREG_ZERO;\t    \\\n-\tbeq\t  cr6,$+12;\t\t    \\\n-\tli\t  r7,offset;\t\t    \\\n-\tb     \t  L(label);          \t    \\\n-\tcmpldi\t  r5,64;\t\t    \\\n-\tble\t  L(null);\t\t    \\\n-\taddi\t  r5,r5,-64\n-\n-/* Implements the function\n-   void *[r3] memchr (const void *s [r3], int c [r4], size_t n [r5]).  */\n-\n-\t.machine power9\n-\n-ENTRY_TOCLESS (MEMCHR)\n-\tCALL_MCOUNT 3\n-\n-\tcmpldi\tr5,0\n-\tbeq\tL(null)\n-\tmr\tr0,r5\n-\txori\tr6,r4,0xff\n-\n-\tmtvsrd\tv18+32,r4\t/* matching char in v18  */\n-\tmtvsrd\tv19+32,r6\t/* non matching char in v19  */\n-\n-\tvspltb\tv18,v18,7\t/* replicate  */\n-\tvspltb\tv19,v19,7\t/* replicate  */\n-\tvspltisb  M_VREG_ZERO,0\n-\n-\t/* Next 16B-aligned address. Prepare address for L(aligned).  */\n-\taddi\t  r6,r3,16\n-\tclrrdi\t  r6,r6,4\n-\n-\t/* Align data and fill bytes not loaded with non matching char.\t */\n-\tlvx\t  v0,0,r3\n-\tlvsr\t  v1,0,r3\n-\tvperm\t  v0,v19,v0,v1\n-\n-\tvcmpequb. v6,v0,v18\n-\tbne\t  cr6,L(found)\n-\tsub\t  r4,r6,r3\n-\tcmpld\t  r5,r4\n-\tble\t  L(null)\n-\tsub\t  r5,r5,r4\n-\n-\t/* Test up to OFF_START_LOOP-16 bytes in 16B chunks.  The main loop is\n-\t   optimized for longer strings, so checking the first bytes in 16B\n-\t   chunks benefits a lot small strings.  */\n-\t.p2align 5\n-L(aligned):\n-\tcmpldi\tr5,0\n-\tbeq     L(null)\n-\n-\tCHECK16B(v0,0,r6,tail1)\n-\tCHECK16B(v1,16,r6,tail2)\n-\tCHECK16B(v2,32,r6,tail3)\n-\tCHECK16B(v3,48,r6,tail4)\n-\tCHECK16B(v4,64,r6,tail5)\n-\tCHECK16B(v5,80,r6,tail6)\n-\tCHECK16B(v6,96,r6,tail7)\n-\tCHECK16B(v7,112,r6,tail8)\n-\tCHECK16B(v8,128,r6,tail9)\n-\tCHECK16B(v9,144,r6,tail10)\n-\tCHECK16B(v10,160,r6,tail11)\n-\tCHECK16B(v0,176,r6,tail12)\n-\tCHECK16B(v1,192,r6,tail13)\n-\tCHECK16B(v2,208,r6,tail14)\n-\tCHECK16B(v3,224,r6,tail15)\n-\n-\tcmpdi\tcr5,r4,0\t/* Check if c == 0.  This will be useful to\n-\t\t\t\t   choose how we will perform the main loop.  */\n-\n-\t/* Prepare address for the loop.  */\n-\taddi\t  r4,r3,M_OFF_START_LOOP\n-\tclrrdi\t  r4,r4,6\n-\tsub\t  r6,r4,r3\n-\tsub\t  r5,r0,r6\n-\taddi\t  r6,r4,128\n-\n-\t/* If c == 0, use the loop without the vsububm.  */\n-\tbeq\tcr5,L(loop)\n-\n-\t/* This is very similar to the block after L(loop), the difference is\n-\t   that here MEMCHR_SUBTRACT_VECTORS is not empty, and we subtract\n-\t   each byte loaded by the char we are looking for, this way we can keep\n-\t   using vminub to merge the results and checking for nulls.  */\n-\t.p2align 5\n-L(memchr_loop):\n-\tCHECK64B(0,r4,pre_tail_64b)\n-\tCHECK64B(64,r4,pre_tail_64b)\n-\taddi\tr4,r4,256\n-\n-\tCHECK64B(0,r6,tail_64b)\n-\tCHECK64B(64,r6,tail_64b)\n-\taddi\tr6,r6,256\n-\n-\tCHECK64B(0,r4,pre_tail_64b)\n-\tCHECK64B(64,r4,pre_tail_64b)\n-\taddi\tr4,r4,256\n-\n-\tCHECK64B(0,r6,tail_64b)\n-\tCHECK64B(64,r6,tail_64b)\n-\taddi\tr6,r6,256\n-\n-\tb\tL(memchr_loop)\n-\t/* Switch to a more aggressive approach checking 64B each time.  Use 2\n-\t   pointers 128B apart and unroll the loop once to make the pointer\n-\t   updates and usages separated enough to avoid stalls waiting for\n-\t   address calculation.  */\n-\t.p2align 5\n-L(loop):\n-#undef MEMCHR_SUBTRACT_VECTORS\n-#define MEMCHR_SUBTRACT_VECTORS /* nothing */\n-\tCHECK64B(0,r4,pre_tail_64b)\n-\tCHECK64B(64,r4,pre_tail_64b)\n-\taddi\t  r4,r4,256\n-\n-\tCHECK64B(0,r6,tail_64b)\n-\tCHECK64B(64,r6,tail_64b)\n-\taddi\t  r6,r6,256\n-\n-\tCHECK64B(0,r4,pre_tail_64b)\n-\tCHECK64B(64,r4,pre_tail_64b)\n-\taddi      r4,r4,256\n-\n-\tCHECK64B(0,r6,tail_64b)\n-\tCHECK64B(64,r6,tail_64b)\n-\taddi      r6,r6,256\n-\n-\tb\t  L(loop)\n-\n-\t.p2align  5\n-L(pre_tail_64b):\n-\tmr\tr6,r4\n-L(tail_64b):\n-\t/* OK, we found a null byte.  Let's look for it in the current 64-byte\n-\t   block and mark it in its corresponding VR.  lxvp vx,0(ry) puts the\n-\t   low 16B bytes into vx+1, and the high into vx, so the order here is\n-\t   v5, v4, v7, v6.  */\n-\tvcmpequb  v1,v5,M_VREG_ZERO\n-\tvcmpequb  v2,v4,M_VREG_ZERO\n-\tvcmpequb  v3,v7,M_VREG_ZERO\n-\tvcmpequb  v4,v6,M_VREG_ZERO\n-\n-\t/* Take into account the other 64B blocks we had already checked.  */\n-\tadd\tr6,r6,r7\n-\t/* Extract first bit of each byte.  */\n-\tM_VEXTRACTBM(r8,v1)\n-\tM_VEXTRACTBM(r9,v2)\n-\tM_VEXTRACTBM(r10,v3)\n-\tM_VEXTRACTBM(r11,v4)\n-\n-\t/* Shift each value into their corresponding position.  */\n-\tsldi\t  r9,r9,16\n-\tsldi\t  r10,r10,32\n-\tsldi\t  r11,r11,48\n-\n-\t/* Merge the results.  */\n-\tor\t  r8,r8,r9\n-\tor\t  r9,r10,r11\n-\tor\t  r11,r9,r8\n-\n-\tcnttzd\t  r0,r11\t  /* Count trailing zeros before the match.  */\n-\tcmpld     r5,r0\n-\tble\t  L(null)\n-\tadd\t  r3,r6,r0\t  /* Compute final address.  */\n-\tblr\n-\n-\t.p2align  5\n-L(tail1):\n-\tM_TAIL(v0,0)\n-\n-\t.p2align  5\n-L(tail2):\n-\tM_TAIL(v1,16)\n-\n-\t.p2align  5\n-L(tail3):\n-\tM_TAIL(v2,32)\n-\n-\t.p2align  5\n-L(tail4):\n-\tM_TAIL(v3,48)\n-\n-\t.p2align  5\n-L(tail5):\n-\tM_TAIL(v4,64)\n-\n-\t.p2align  5\n-L(tail6):\n-\tM_TAIL(v5,80)\n-\n-\t.p2align  5\n-L(tail7):\n-\tM_TAIL(v6,96)\n-\n-\t.p2align  5\n-L(tail8):\n-\tM_TAIL(v7,112)\n-\n-\t.p2align  5\n-L(tail9):\n-\tM_TAIL(v8,128)\n-\n-\t.p2align  5\n-L(tail10):\n-\tM_TAIL(v9,144)\n-\n-\t.p2align  5\n-L(tail11):\n-\tM_TAIL(v10,160)\n-\n-\t.p2align  5\n-L(tail12):\n-\tM_TAIL(v0,176)\n-\n-\t.p2align  5\n-L(tail13):\n-\tM_TAIL(v1,192)\n-\n-\t.p2align  5\n-L(tail14):\n-\tM_TAIL(v2,208)\n-\n-\t.p2align  5\n-L(tail15):\n-\tM_TAIL(v3,224)\n-\n-\t.p2align  5\n-L(found):\n-\tvctzlsbb  r7,v6\n-\tcmpld     r5,r7\n-\tble       L(null)\n-\tadd       r3,r3,r7\n-\tblr\n-\n-\t.p2align  5\n-L(null):\n-\tli\tr3,0\n-\tblr\n-\n-END (MEMCHR)\n-\n-weak_alias (__memchr, memchr)\n-libc_hidden_builtin_def (memchr)\ndiff --git a/sysdeps/powerpc/powerpc64/multiarch/Makefile b/sysdeps/powerpc/powerpc64/multiarch/Makefile\nindex a38ff46448..fa1107dfd9 100644\n--- a/sysdeps/powerpc/powerpc64/multiarch/Makefile\n+++ b/sysdeps/powerpc/powerpc64/multiarch/Makefile\n@@ -31,10 +31,10 @@ sysdep_routines += memcpy-power8-cached memcpy-power7 memcpy-a2 memcpy-power6 \\\n \t\t   strncase-power8\n \n ifneq (,$(filter %le,$(config-machine)))\n-sysdep_routines += memchr-power10 memcmp-power10 memcpy-power10 \\\n-\t\t   memmove-power10 memset-power10 rawmemchr-power9 \\\n-\t\t   rawmemchr-power10 strcmp-power9 strcmp-power10 \\\n-\t\t   strncmp-power9 strcpy-power9 stpcpy-power9 \\\n+sysdep_routines += memcmp-power10 memcpy-power10 memmove-power10 memset-power10 \\\n+\t\t   rawmemchr-power9 rawmemchr-power10 \\\n+\t\t   strcmp-power9 strcmp-power10 strncmp-power9 \\\n+\t\t   strcpy-power9 stpcpy-power9 \\\n \t\t   strlen-power9 strncpy-power9 stpncpy-power9 strlen-power10\n endif\n CFLAGS-strncase-power7.c += -mcpu=power7 -funroll-loops\ndiff --git a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c\nindex 30fd89e109..9b3e617306 100644\n--- a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c\n+++ b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c\n@@ -226,12 +226,6 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,\n \n   /* Support sysdeps/powerpc/powerpc64/multiarch/memchr.c.  */\n   IFUNC_IMPL (i, name, memchr,\n-#ifdef __LITTLE_ENDIAN__\n-\t      IFUNC_IMPL_ADD (array, i, memchr,\n-\t\t              hwcap2 & PPC_FEATURE2_ARCH_3_1\n-\t\t\t      && hwcap & PPC_FEATURE_HAS_VSX,\n-\t\t\t      __memchr_power10)\n-#endif\n \t      IFUNC_IMPL_ADD (array, i, memchr,\n \t\t\t      hwcap2 & PPC_FEATURE2_ARCH_2_07\n \t\t\t      && hwcap & PPC_FEATURE_HAS_ALTIVEC,\ndiff --git a/sysdeps/powerpc/powerpc64/multiarch/memchr-power10.S b/sysdeps/powerpc/powerpc64/multiarch/memchr-power10.S\ndeleted file mode 100644\nindex 7d35ef28a9..0000000000\n--- a/sysdeps/powerpc/powerpc64/multiarch/memchr-power10.S\n+++ /dev/null\n@@ -1,28 +0,0 @@\n-/* Optimized memchr implementation for POWER10/PPC64.\n-   Copyright (C) 2016-2024 Free Software Foundation, Inc.\n-   This file is part of the GNU C Library.\n-\n-   The GNU C Library is free software; you can redistribute it and/or\n-   modify it under the terms of the GNU Lesser General Public\n-   License as published by the Free Software Foundation; either\n-   version 2.1 of the License, or (at your option) any later version.\n-\n-   The GNU C Library is distributed in the hope that it will be useful,\n-   but WITHOUT ANY WARRANTY; without even the implied warranty of\n-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n-   Lesser General Public License for more details.\n-\n-   You should have received a copy of the GNU Lesser General Public\n-   License along with the GNU C Library; if not, see\n-   <https://www.gnu.org/licenses/>.  */\n-\n-#if defined __LITTLE_ENDIAN__ && IS_IN (libc)\n-#define MEMCHR __memchr_power10\n-\n-#undef libc_hidden_builtin_def\n-#define libc_hidden_builtin_def(name)\n-#undef weak_alias\n-#define weak_alias(name,alias)\n-\n-#include <sysdeps/powerpc/powerpc64/le/power10/memchr.S>\n-#endif\ndiff --git a/sysdeps/powerpc/powerpc64/multiarch/memchr.c b/sysdeps/powerpc/powerpc64/multiarch/memchr.c\nindex 57d23e7b18..b4655dfcaa 100644\n--- a/sysdeps/powerpc/powerpc64/multiarch/memchr.c\n+++ b/sysdeps/powerpc/powerpc64/multiarch/memchr.c\n@@ -25,23 +25,15 @@ extern __typeof (__memchr) __memchr_ppc attribute_hidden;\n extern __typeof (__memchr) __memchr_power7 attribute_hidden;\n extern __typeof (__memchr) __memchr_power8 attribute_hidden;\n \n-# ifdef __LITTLE_ENDIAN__\n-extern __typeof (__memchr) __memchr_power10 attribute_hidden;\n-# endif\n /* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle\n    ifunc symbol properly.  */\n libc_ifunc (__memchr,\n-# ifdef __LITTLE_ENDIAN__\n-\t    (hwcap2 & PPC_FEATURE2_ARCH_3_1\n-\t     && hwcap & PPC_FEATURE_HAS_VSX)\n-\t    ? __memchr_power10 :\n-# endif\n-\t      (hwcap2 & PPC_FEATURE2_ARCH_2_07\n-\t      && hwcap & PPC_FEATURE_HAS_ALTIVEC)\n-\t      ? __memchr_power8 :\n-\t        (hwcap & PPC_FEATURE_ARCH_2_06)\n-\t        ? __memchr_power7\n-\t        : __memchr_ppc);\n+\t    (hwcap2 & PPC_FEATURE2_ARCH_2_07\n+\t     && hwcap & PPC_FEATURE_HAS_ALTIVEC)\n+\t    ? __memchr_power8 :\n+\t    (hwcap & PPC_FEATURE_ARCH_2_06)\n+            ? __memchr_power7\n+            : __memchr_ppc);\n \n weak_alias (__memchr, memchr)\n libc_hidden_builtin_def (memchr)\n\ncommit 7e12550b8e3a11764a4a9090ce6bd3fc23fc8a8e\nAuthor: Carlos O'Donell <carlos@redhat.com>\nDate:   Mon Jun 16 13:09:57 2025 -0400\n\n    ppc64le: Revert \"powerpc: Optimized strcmp for power10\" (CVE-2025-5702)\n    \n    This reverts commit 3367d8e180848030d1646f088759f02b8dfe0d6f\n    \n    Reason for revert: Power10 strcmp clobbers non-volatile vector\n    registers (Bug 33056)\n    \n    Tested on ppc64le without regression.\n    \n    (cherry picked from commit 15808c77b35319e67ee0dc8f984a9a1a434701bc)\n\ndiff --git a/sysdeps/powerpc/powerpc64/le/power10/strcmp.S b/sysdeps/powerpc/powerpc64/le/power10/strcmp.S\ndeleted file mode 100644\nindex 00f1e9c170..0000000000\n--- a/sysdeps/powerpc/powerpc64/le/power10/strcmp.S\n+++ /dev/null\n@@ -1,204 +0,0 @@\n-/* Optimized strcmp implementation for PowerPC64/POWER10.\n-   Copyright (C) 2021-2024 Free Software Foundation, Inc.\n-   This file is part of the GNU C Library.\n-\n-   The GNU C Library is free software; you can redistribute it and/or\n-   modify it under the terms of the GNU Lesser General Public\n-   License as published by the Free Software Foundation; either\n-   version 2.1 of the License, or (at your option) any later version.\n-\n-   The GNU C Library is distributed in the hope that it will be useful,\n-   but WITHOUT ANY WARRANTY; without even the implied warranty of\n-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n-   Lesser General Public License for more details.\n-\n-   You should have received a copy of the GNU Lesser General Public\n-   License along with the GNU C Library; if not, see\n-   <https://www.gnu.org/licenses/>.  */\n-#include <sysdep.h>\n-\n-#ifndef STRCMP\n-# define STRCMP strcmp\n-#endif\n-\n-/* Implements the function\n-   int [r3] strcmp (const char *s1 [r3], const char *s2 [r4]).  */\n-\n-/* TODO: Change this to actual instructions when minimum binutils is upgraded\n-   to 2.27.  Macros are defined below for these newer instructions in order\n-   to maintain compatibility.  */\n-\n-#define LXVP(xtp,dq,ra)\t\t     \\\n-\t.long(((6)<<(32-6))\t     \\\n-\t| ((((xtp)-32)>>1)<<(32-10)) \\\n-\t| ((1)<<(32-11))\t     \\\n-\t| ((ra)<<(32-16))\t     \\\n-\t| dq)\n-\n-#define COMPARE_16(vreg1,vreg2,offset)  \\\n-\tlxv       vreg1+32,offset(r3);  \\\n-\tlxv       vreg2+32,offset(r4);\t\\\n-\tvcmpnezb. v7,vreg1,vreg2;\t\\\n-\tbne       cr6,L(different);     \\\n-\n-#define COMPARE_32(vreg1,vreg2,offset,label1,label2) \\\n-\tLXVP(vreg1+32,offset,r3);                    \\\n-\tLXVP(vreg2+32,offset,r4);                    \\\n-\tvcmpnezb. v7,vreg1+1,vreg2+1;                \\\n-\tbne\t  cr6,L(label1);                     \\\n-\tvcmpnezb. v7,vreg1,vreg2;                    \\\n-\tbne\t  cr6,L(label2);                     \\\n-\n-#define TAIL(vreg1,vreg2)     \\\n-\tvctzlsbb r6,v7;\t      \\\n-\tvextubrx r5,r6,vreg1; \\\n-\tvextubrx r4,r6,vreg2; \\\n-\tsubf\t r3,r4,r5;    \\\n-\tblr;                  \\\n-\n-#define CHECK_N_BYTES(reg1,reg2,len_reg) \\\n-\tsldi\t  r0,len_reg,56;         \\\n-\tlxvl\t  32+v4,reg1,r0;         \\\n-\tlxvl\t  32+v5,reg2,r0;         \\\n-\tadd\t  reg1,reg1,len_reg;     \\\n-\tadd\t  reg2,reg2,len_reg;     \\\n-\tvcmpnezb. v7,v4,v5;              \\\n-\tvctzlsbb  r6,v7;                 \\\n-\tcmpld\t  cr7,r6,len_reg;        \\\n-\tblt\t  cr7,L(different);      \\\n-\n-\t/* TODO: change this to .machine power10 when the minimum required\n-\tbinutils allows it.  */\n-\n-\t.machine  power9\n-ENTRY_TOCLESS (STRCMP, 4)\n-\tli\t r11,16\n-\t/* eq bit of cr1 used as swap status flag to indicate if\n-\tsource pointers were swapped.  */\n-\tcrclr\t 4*cr1+eq\n-\tvspltisb v19,-1\n-\tandi.\t r7,r3,15\n-\tsub\t r7,r11,r7\t/* r7(nalign1) = 16 - (str1 & 15).  */\n-\tandi.\t r9,r4,15\n-\tsub\t r5,r11,r9\t/* r5(nalign2) = 16 - (str2 & 15).  */\n-\tcmpld\t cr7,r7,r5\n-\tbeq\t cr7,L(same_aligned)\n-\tblt\t cr7,L(nalign1_min)\n-\t/* Swap r3 and r4, and r7 and r5 such that r3 and r7 hold the\n-\tpointer which is closer to the next 16B boundary so that only\n-\tone CHECK_N_BYTES is needed before entering the loop below.  */\n-\tmr\t r8,r4\n-\tmr\t r4,r3\n-\tmr\t r3,r8\n-\tmr\t r12,r7\n-\tmr\t r7,r5\n-\tmr\t r5,r12\n-\tcrset\t 4*cr1+eq\t/* Set bit on swapping source pointers.  */\n-\n-\t.p2align 5\n-L(nalign1_min):\n-\tCHECK_N_BYTES(r3,r4,r7)\n-\n-\t.p2align 5\n-L(s1_aligned):\n-\t/* r9 and r5 is number of bytes to be read after and before\n-\t page boundary correspondingly.  */\n-\tsub \tr5,r5,r7\n-\tsubfic\tr9,r5,16\n-\t/* Now let r7 hold the count of quadwords which can be\n-\tchecked without crossing a page boundary. quadword offset is\n-\t(str2>>4)&0xFF.  */\n-\trlwinm\tr7,r4,28,0xFF\n-\t/* Below check is required only for first iteration. For second\n-\titeration and beyond, the new loop counter is always 255.  */\n-\tcmpldi\tr7,255\n-\tbeq\tL(L3)\n-\t/* Get the initial loop count by 255-((str2>>4)&0xFF).  */\n-\tsubfic  r11,r7,255\n-\n-\t.p2align 5\n-L(L1):\n-\tmtctr\tr11\n-\n-\t.p2align 5\n-L(L2):\n-\tCOMPARE_16(v4,v5,0)\t/* Load 16B blocks using lxv.  */\n-\taddi\tr3,r3,16\n-\taddi\tr4,r4,16\n-\tbdnz\tL(L2)\n-\t/* Cross the page boundary of s2, carefully.  */\n-\n-\t.p2align 5\n-L(L3):\n-\tCHECK_N_BYTES(r3,r4,r5)\n-\tCHECK_N_BYTES(r3,r4,r9)\n-\tli \tr11,255\t\t/* Load the new loop counter.  */\n-\tb\tL(L1)\n-\n-\t.p2align 5\n-L(same_aligned):\n-\tCHECK_N_BYTES(r3,r4,r7)\n-        /* Align s1 to 32B and adjust s2 address.\n-\t   Use lxvp only if both s1 and s2 are 32B aligned.  */\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\tCOMPARE_16(v4,v5,32)\n-\tCOMPARE_16(v4,v5,48)\n-\taddi\tr3,r3,64\n-\taddi\tr4,r4,64\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\n-\tclrldi\tr6,r3,59\n-\tsubfic\tr5,r6,32\n-\tadd\tr3,r3,r5\n-\tadd\tr4,r4,r5\n-\tandi.\tr5,r4,0x1F\n-\tbeq\tcr0,L(32B_aligned_loop)\n-\n-\t.p2align 5\n-L(16B_aligned_loop):\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\tCOMPARE_16(v4,v5,32)\n-\tCOMPARE_16(v4,v5,48)\n-\taddi\tr3,r3,64\n-\taddi\tr4,r4,64\n-\tb\tL(16B_aligned_loop)\n-\n-\t/* Calculate and return the difference.  */\n-L(different):\n-\tvctzlsbb r6,v7\n-\tvextubrx r5,r6,v4\n-\tvextubrx r4,r6,v5\n-\tbt  \t 4*cr1+eq,L(swapped)\n-\tsubf\t r3,r4,r5\n-\tblr\n-\n-\t/* If src pointers were swapped, then swap the\n-\tindices and calculate the return value.  */\n-L(swapped):\n-\tsubf     r3,r5,r4\n-\tblr\n-\n-\t.p2align 5\n-L(32B_aligned_loop):\n-\tCOMPARE_32(v14,v16,0,tail1,tail2)\n-\tCOMPARE_32(v18,v20,32,tail3,tail4)\n-\tCOMPARE_32(v22,v24,64,tail5,tail6)\n-\tCOMPARE_32(v26,v28,96,tail7,tail8)\n-\taddi\tr3,r3,128\n-\taddi\tr4,r4,128\n-\tb\tL(32B_aligned_loop)\n-\n-L(tail1): TAIL(v15,v17)\n-L(tail2): TAIL(v14,v16)\n-L(tail3): TAIL(v19,v21)\n-L(tail4): TAIL(v18,v20)\n-L(tail5): TAIL(v23,v25)\n-L(tail6): TAIL(v22,v24)\n-L(tail7): TAIL(v27,v29)\n-L(tail8): TAIL(v26,v28)\n-\n-END (STRCMP)\n-libc_hidden_builtin_def (strcmp)\ndiff --git a/sysdeps/powerpc/powerpc64/multiarch/Makefile b/sysdeps/powerpc/powerpc64/multiarch/Makefile\nindex fa1107dfd9..9f15f3207f 100644\n--- a/sysdeps/powerpc/powerpc64/multiarch/Makefile\n+++ b/sysdeps/powerpc/powerpc64/multiarch/Makefile\n@@ -33,8 +33,7 @@ sysdep_routines += memcpy-power8-cached memcpy-power7 memcpy-a2 memcpy-power6 \\\n ifneq (,$(filter %le,$(config-machine)))\n sysdep_routines += memcmp-power10 memcpy-power10 memmove-power10 memset-power10 \\\n \t\t   rawmemchr-power9 rawmemchr-power10 \\\n-\t\t   strcmp-power9 strcmp-power10 strncmp-power9 \\\n-\t\t   strcpy-power9 stpcpy-power9 \\\n+\t\t   strcmp-power9 strncmp-power9 strcpy-power9 stpcpy-power9 \\\n \t\t   strlen-power9 strncpy-power9 stpncpy-power9 strlen-power10\n endif\n CFLAGS-strncase-power7.c += -mcpu=power7 -funroll-loops\ndiff --git a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c\nindex 9b3e617306..78443b7f34 100644\n--- a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c\n+++ b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c\n@@ -377,10 +377,6 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,\n   /* Support sysdeps/powerpc/powerpc64/multiarch/strcmp.c.  */\n   IFUNC_IMPL (i, name, strcmp,\n #ifdef __LITTLE_ENDIAN__\n-\t      IFUNC_IMPL_ADD (array, i, strcmp,\n-\t\t\t      (hwcap2 & PPC_FEATURE2_ARCH_3_1)\n-\t\t\t      && (hwcap & PPC_FEATURE_HAS_VSX),\n-\t\t\t      __strcmp_power10)\n \t      IFUNC_IMPL_ADD (array, i, strcmp,\n \t\t\t      hwcap2 & PPC_FEATURE2_ARCH_3_00\n \t\t\t      && hwcap & PPC_FEATURE_HAS_ALTIVEC,\ndiff --git a/sysdeps/powerpc/powerpc64/multiarch/strcmp-power10.S b/sysdeps/powerpc/powerpc64/multiarch/strcmp-power10.S\ndeleted file mode 100644\nindex 1a9f6069f5..0000000000\n--- a/sysdeps/powerpc/powerpc64/multiarch/strcmp-power10.S\n+++ /dev/null\n@@ -1,26 +0,0 @@\n-/* Optimized strcmp implementation for POWER10/PPC64.\n-   Copyright (C) 2021-2024 Free Software Foundation, Inc.\n-   This file is part of the GNU C Library.\n-\n-   The GNU C Library is free software; you can redistribute it and/or\n-   modify it under the terms of the GNU Lesser General Public\n-   License as published by the Free Software Foundation; either\n-   version 2.1 of the License, or (at your option) any later version.\n-\n-   The GNU C Library is distributed in the hope that it will be useful,\n-   but WITHOUT ANY WARRANTY; without even the implied warranty of\n-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n-   Lesser General Public License for more details.\n-\n-   You should have received a copy of the GNU Lesser General Public\n-   License along with the GNU C Library; if not, see\n-   <https://www.gnu.org/licenses/>.  */\n-\n-#if defined __LITTLE_ENDIAN__ && IS_IN (libc)\n-#define STRCMP __strcmp_power10\n-\n-#undef libc_hidden_builtin_def\n-#define libc_hidden_builtin_def(name)\n-\n-#include <sysdeps/powerpc/powerpc64/le/power10/strcmp.S>\n-#endif /* __LITTLE_ENDIAN__ && IS_IN (libc) */\ndiff --git a/sysdeps/powerpc/powerpc64/multiarch/strcmp.c b/sysdeps/powerpc/powerpc64/multiarch/strcmp.c\nindex ff32496fab..06b9b4090f 100644\n--- a/sysdeps/powerpc/powerpc64/multiarch/strcmp.c\n+++ b/sysdeps/powerpc/powerpc64/multiarch/strcmp.c\n@@ -29,16 +29,12 @@ extern __typeof (strcmp) __strcmp_power7 attribute_hidden;\n extern __typeof (strcmp) __strcmp_power8 attribute_hidden;\n # ifdef __LITTLE_ENDIAN__\n extern __typeof (strcmp) __strcmp_power9 attribute_hidden;\n-extern __typeof (strcmp) __strcmp_power10 attribute_hidden;\n # endif\n \n # undef strcmp\n \n libc_ifunc_redirected (__redirect_strcmp, strcmp,\n # ifdef __LITTLE_ENDIAN__\n-\t\t        (hwcap2 & PPC_FEATURE2_ARCH_3_1\n-\t\t\t && hwcap & PPC_FEATURE_HAS_VSX)\n-\t\t\t? __strcmp_power10 :\n \t\t\t(hwcap2 & PPC_FEATURE2_ARCH_3_00\n \t\t\t && hwcap & PPC_FEATURE_HAS_ALTIVEC)\n \t\t\t? __strcmp_power9 :\n\ncommit 23a02e382c8ffebfed00a082d8898f1aa468b5da\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Wed May 21 16:47:34 2025 +0200\n\n    support: Pick group in support_capture_subprogram_self_sgid if UID == 0\n    \n    When running as root, it is likely that we can run under any group.\n    Pick a harmless group from /etc/group in this case.\n    \n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit 2f769cec448d84a62b7dd0d4ff56978fe22c0cd6)\n\ndiff --git a/support/support_capture_subprocess.c b/support/support_capture_subprocess.c\nindex 2383481911..1cb344eb04 100644\n--- a/support/support_capture_subprocess.c\n+++ b/support/support_capture_subprocess.c\n@@ -21,7 +21,11 @@\n \n #include <errno.h>\n #include <fcntl.h>\n+#include <grp.h>\n+#include <scratch_buffer.h>\n+#include <stdio_ext.h>\n #include <stdlib.h>\n+#include <string.h>\n #include <support/check.h>\n #include <support/xunistd.h>\n #include <support/xsocket.h>\n@@ -210,10 +214,48 @@ err:\n   return status;\n }\n \n+/* Returns true if a group with NAME has been found, and writes its\n+   GID to *TARGET.  */\n+static bool\n+find_sgid_group (gid_t *target, const char *name)\n+{\n+  /* Do not use getgrname_r because it does not work in statically\n+     linked binaries if the system libc is different.  */\n+  FILE *fp = fopen (\"/etc/group\", \"rce\");\n+  if (fp == NULL)\n+    return false;\n+  __fsetlocking (fp, FSETLOCKING_BYCALLER);\n+\n+  bool ok = false;\n+  struct scratch_buffer buf;\n+  scratch_buffer_init (&buf);\n+  while (true)\n+    {\n+      struct group grp;\n+      struct group *result = NULL;\n+      int status = fgetgrent_r (fp, &grp, buf.data, buf.length, &result);\n+      if (status == 0 && result != NULL)\n+\t{\n+\t  if (strcmp (result->gr_name, name) == 0)\n+\t    {\n+\t      *target = result->gr_gid;\n+\t      ok = true;\n+\t      break;\n+\t    }\n+\t}\n+      else if (errno != ERANGE)\n+\tbreak;\n+      else if (!scratch_buffer_grow (&buf))\n+\tbreak;\n+    }\n+  scratch_buffer_free (&buf);\n+  fclose (fp);\n+  return ok;\n+}\n+\n int\n support_capture_subprogram_self_sgid (const char *child_id)\n {\n-  gid_t target = 0;\n   const int count = 64;\n   gid_t groups[count];\n \n@@ -225,6 +267,7 @@ support_capture_subprogram_self_sgid (const char *child_id)\n \t\t     (intmax_t) getuid ());\n \n   gid_t current = getgid ();\n+  gid_t target = current;\n   for (int i = 0; i < ret; ++i)\n     {\n       if (groups[i] != current)\n@@ -234,9 +277,16 @@ support_capture_subprogram_self_sgid (const char *child_id)\n \t}\n     }\n \n-  if (target == 0)\n-    FAIL_UNSUPPORTED(\"Could not find a suitable GID for user %jd\\n\",\n-\t\t     (intmax_t) getuid ());\n+  if (target == current)\n+    {\n+      /* If running as root, try to find a harmless group for SGID.  */\n+      if (getuid () != 0\n+\t  || (!find_sgid_group (&target, \"nogroup\")\n+\t      && !find_sgid_group (&target, \"bin\")\n+\t      && !find_sgid_group (&target, \"daemon\")))\n+\tFAIL_UNSUPPORTED(\"Could not find a suitable GID for user %jd\\n\",\n+\t\t\t (intmax_t) getuid ());\n+    }\n \n   return copy_and_spawn_sgid (child_id, target);\n }\n\ncommit dbc83657e290bdad3245259be80fb84cbe10304c\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Thu May 22 14:36:37 2025 +0200\n\n    Fix error reporting (false negatives) in SGID tests\n    \n    And simplify the interface of support_capture_subprogram_self_sgid.\n    \n    Use the existing framework for temporary directories (now with\n    mode 0700) and directory/file deletion.  Handle all execution\n    errors within support_capture_subprogram_self_sgid.  In particular,\n    this includes test failures because the invoked program did not\n    exit with exit status zero.  Existing tests that expect exit\n    status 42 are adjusted to use zero instead.\n    \n    In addition, fix callers not to call exit (0) with test failures\n    pending (which may mask them, especially when running with --direct).\n    \n    Fixes commit 35fc356fa3b4f485bd3ba3114c9f774e5df7d3c2\n    (\"elf: Fix subprocess status handling for tst-dlopen-sgid (bug 32987)\").\n    \n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit 3a3fb2ed83f79100c116c824454095ecfb335ad7)\n\ndiff --git a/elf/tst-dlopen-sgid.c b/elf/tst-dlopen-sgid.c\nindex 5688b79f2e..8aec52e19f 100644\n--- a/elf/tst-dlopen-sgid.c\n+++ b/elf/tst-dlopen-sgid.c\n@@ -70,13 +70,7 @@ do_test (void)\n \n   free (libdir);\n \n-  int status = support_capture_subprogram_self_sgid (magic_argument);\n-\n-  if (WEXITSTATUS (status) == EXIT_UNSUPPORTED)\n-    return EXIT_UNSUPPORTED;\n-\n-  if (!WIFEXITED (status))\n-    FAIL_EXIT1 (\"Unexpected exit status %d from child process\\n\", status);\n+  support_capture_subprogram_self_sgid (magic_argument);\n \n   return 0;\n }\ndiff --git a/elf/tst-env-setuid-tunables.c b/elf/tst-env-setuid-tunables.c\nindex a47219047f..233eec7631 100644\n--- a/elf/tst-env-setuid-tunables.c\n+++ b/elf/tst-env-setuid-tunables.c\n@@ -105,10 +105,7 @@ do_test (int argc, char **argv)\n \n       if (ret != 0)\n \texit (1);\n-\n-      /* Special return code to make sure that the child executed all the way\n-\t through.  */\n-      exit (42);\n+      return 0;\n     }\n   else\n     {\n@@ -127,18 +124,7 @@ do_test (int argc, char **argv)\n \t      continue;\n \t    }\n \n-\t  int status = support_capture_subprogram_self_sgid (buf);\n-\n-\t  /* Bail out early if unsupported.  */\n-\t  if (WEXITSTATUS (status) == EXIT_UNSUPPORTED)\n-\t    return EXIT_UNSUPPORTED;\n-\n-\t  if (WEXITSTATUS (status) != 42)\n-\t    {\n-\t      printf (\"    [%d] child failed with status %d\\n\", i,\n-\t\t      WEXITSTATUS (status));\n-\t      support_record_failure ();\n-\t    }\n+\t  support_capture_subprogram_self_sgid (buf);\n \t}\n       return 0;\n     }\ndiff --git a/elf/tst-env-setuid.c b/elf/tst-env-setuid.c\nindex 59f2ffeb88..ee3f058468 100644\n--- a/elf/tst-env-setuid.c\n+++ b/elf/tst-env-setuid.c\n@@ -147,10 +147,7 @@ do_test (int argc, char **argv)\n \n       if (ret != 0)\n \texit (1);\n-\n-      /* Special return code to make sure that the child executed all the way\n-\t through.  */\n-      exit (42);\n+      return 0;\n     }\n   else\n     {\n@@ -174,17 +171,7 @@ do_test (int argc, char **argv)\n \tfree (profilepath);\n       }\n \n-      int status = support_capture_subprogram_self_sgid (SETGID_CHILD);\n-\n-      if (WEXITSTATUS (status) == EXIT_UNSUPPORTED)\n-\texit (EXIT_UNSUPPORTED);\n-\n-      if (WEXITSTATUS (status) != 42)\n-\t{\n-\t  printf (\"    child failed with status %d\\n\",\n-\t\t  WEXITSTATUS (status));\n-\t  support_record_failure ();\n-\t}\n+      support_capture_subprogram_self_sgid (SETGID_CHILD);\n \n       return 0;\n     }\ndiff --git a/stdlib/tst-secure-getenv.c b/stdlib/tst-secure-getenv.c\nindex cc26ed6d15..cefee58d46 100644\n--- a/stdlib/tst-secure-getenv.c\n+++ b/stdlib/tst-secure-getenv.c\n@@ -57,13 +57,7 @@ do_test (void)\n       exit (1);\n     }\n \n-  int status = support_capture_subprogram_self_sgid (MAGIC_ARGUMENT);\n-\n-  if (WEXITSTATUS (status) == EXIT_UNSUPPORTED)\n-    return EXIT_UNSUPPORTED;\n-\n-  if (!WIFEXITED (status))\n-    FAIL_EXIT1 (\"Unexpected exit status %d from child process\\n\", status);\n+  support_capture_subprogram_self_sgid (MAGIC_ARGUMENT);\n \n   return 0;\n }\n@@ -82,6 +76,7 @@ alternative_main (int argc, char **argv)\n       if (secure_getenv (\"PATH\") != NULL)\n \tFAIL_EXIT (4, \"PATH variable not filtered out\\n\");\n \n+      support_record_failure_barrier ();\n       exit (EXIT_SUCCESS);\n     }\n }\ndiff --git a/support/capture_subprocess.h b/support/capture_subprocess.h\nindex 5406d9f6c0..57bb941e7d 100644\n--- a/support/capture_subprocess.h\n+++ b/support/capture_subprocess.h\n@@ -42,10 +42,12 @@ struct support_capture_subprocess support_capture_subprocess\n struct support_capture_subprocess support_capture_subprogram\n   (const char *file, char *const argv[], char *const envp[]);\n \n-/* Copy the running program into a setgid binary and run it with CHILD_ID\n-   argument.  If execution is successful, return the exit status of the child\n-   program, otherwise return a non-zero failure exit code.  */\n-int support_capture_subprogram_self_sgid (const char *child_id);\n+/* Copy the running program into a setgid binary and run it with\n+   CHILD_ID argument.  If the program exits with a non-zero status,\n+   exit with that exit status (or status 1 if the program did not exit\n+   normally).  If the test cannot be performed, exit with\n+   EXIT_UNSUPPORTED.  */\n+void support_capture_subprogram_self_sgid (const char *child_id);\n \n /* Deallocate the subprocess data captured by\n    support_capture_subprocess.  */\ndiff --git a/support/support_capture_subprocess.c b/support/support_capture_subprocess.c\nindex 1cb344eb04..cbc6951064 100644\n--- a/support/support_capture_subprocess.c\n+++ b/support/support_capture_subprocess.c\n@@ -31,6 +31,7 @@\n #include <support/xsocket.h>\n #include <support/xspawn.h>\n #include <support/support.h>\n+#include <support/temp_file.h>\n #include <support/test-driver.h>\n \n static void\n@@ -113,105 +114,44 @@ support_capture_subprogram (const char *file, char *const argv[],\n /* Copies the executable into a restricted directory, so that we can\n    safely make it SGID with the TARGET group ID.  Then runs the\n    executable.  */\n-static int\n+static void\n copy_and_spawn_sgid (const char *child_id, gid_t gid)\n {\n-  char *dirname = xasprintf (\"%s/tst-tunables-setuid.%jd\",\n-\t\t\t     test_dir, (intmax_t) getpid ());\n+  char *dirname = support_create_temp_directory (\"tst-glibc-sgid-\");\n   char *execname = xasprintf (\"%s/bin\", dirname);\n-  int infd = -1;\n-  int outfd = -1;\n-  int ret = 1, status = 1;\n-\n-  TEST_VERIFY (mkdir (dirname, 0700) == 0);\n-  if (support_record_failure_is_failed ())\n-    goto err;\n+  add_temp_file (execname);\n \n-  infd = open (\"/proc/self/exe\", O_RDONLY);\n-  if (infd < 0)\n+  if (access (\"/proc/self/exe\", R_OK) != 0)\n     FAIL_UNSUPPORTED (\"unsupported: Cannot read binary from procfs\\n\");\n \n-  outfd = open (execname, O_WRONLY | O_CREAT | O_EXCL, 0700);\n-  TEST_VERIFY (outfd >= 0);\n-  if (support_record_failure_is_failed ())\n-    goto err;\n-\n-  char buf[4096];\n-  for (;;)\n-    {\n-      ssize_t rdcount = read (infd, buf, sizeof (buf));\n-      TEST_VERIFY (rdcount >= 0);\n-      if (support_record_failure_is_failed ())\n-\tgoto err;\n-      if (rdcount == 0)\n-\tbreak;\n-      char *p = buf;\n-      char *end = buf + rdcount;\n-      while (p != end)\n-\t{\n-\t  ssize_t wrcount = write (outfd, buf, end - p);\n-\t  if (wrcount == 0)\n-\t    errno = ENOSPC;\n-\t  TEST_VERIFY (wrcount > 0);\n-\t  if (support_record_failure_is_failed ())\n-\t    goto err;\n-\t  p += wrcount;\n-\t}\n-    }\n+  support_copy_file (\"/proc/self/exe\", execname);\n \n-  bool chowned = false;\n-  TEST_VERIFY ((chowned = fchown (outfd, getuid (), gid) == 0)\n-\t       || errno == EPERM);\n-  if (support_record_failure_is_failed ())\n-    goto err;\n-  else if (!chowned)\n-    {\n-      ret = 77;\n-      goto err;\n-    }\n+  if (chown (execname, getuid (), gid) != 0)\n+    FAIL_UNSUPPORTED (\"cannot change group of \\\"%s\\\" to %jd: %m\",\n+\t\t      execname, (intmax_t) gid);\n \n-  TEST_VERIFY (fchmod (outfd, 02750) == 0);\n-  if (support_record_failure_is_failed ())\n-    goto err;\n-  TEST_VERIFY (close (outfd) == 0);\n-  if (support_record_failure_is_failed ())\n-    goto err;\n-  TEST_VERIFY (close (infd) == 0);\n-  if (support_record_failure_is_failed ())\n-    goto err;\n+  if (chmod (execname, 02750) != 0)\n+    FAIL_UNSUPPORTED (\"cannot make \\\"%s\\\" SGID: %m \", execname);\n \n   /* We have the binary, now spawn the subprocess.  Avoid using\n      support_subprogram because we only want the program exit status, not the\n      contents.  */\n-  ret = 0;\n-  infd = outfd = -1;\n \n   char * const args[] = {execname, (char *) child_id, NULL};\n+  int status = support_subprogram_wait (args[0], args);\n \n-  status = support_subprogram_wait (args[0], args);\n+  free (execname);\n+  free (dirname);\n \n-err:\n-  if (outfd >= 0)\n-    close (outfd);\n-  if (infd >= 0)\n-    close (infd);\n-  if (execname != NULL)\n-    {\n-      unlink (execname);\n-      free (execname);\n-    }\n-  if (dirname != NULL)\n+  if (WIFEXITED (status))\n     {\n-      rmdir (dirname);\n-      free (dirname);\n+      if (WEXITSTATUS (status) == 0)\n+\treturn;\n+      else\n+\texit (WEXITSTATUS (status));\n     }\n-\n-  if (ret == 77)\n-    FAIL_UNSUPPORTED (\"Failed to make sgid executable for test\\n\");\n-  if (ret != 0)\n-    FAIL_EXIT1 (\"Failed to make sgid executable for test\\n\");\n-\n-  return status;\n+  else\n+    FAIL_EXIT1 (\"subprogram failed with status %d\", status);\n }\n \n /* Returns true if a group with NAME has been found, and writes its\n@@ -253,7 +193,7 @@ find_sgid_group (gid_t *target, const char *name)\n   return ok;\n }\n \n-int\n+void\n support_capture_subprogram_self_sgid (const char *child_id)\n {\n   const int count = 64;\n@@ -288,7 +228,7 @@ support_capture_subprogram_self_sgid (const char *child_id)\n \t\t\t (intmax_t) getuid ());\n     }\n \n-  return copy_and_spawn_sgid (child_id, target);\n+  copy_and_spawn_sgid (child_id, target);\n }\n \n void\n\ncommit 2eb180377b96771b8368b0915669c8c7b267e739\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Mon Jul 21 21:43:49 2025 +0200\n\n    posix: Fix double-free after allocation failure in regcomp (bug 33185)\n    \n    If a memory allocation failure occurs during bracket expression\n    parsing in regcomp, a double-free error may result.\n    \n    Reported-by: Anastasia Belova <abelova@astralinux.ru>\n    Co-authored-by: Paul Eggert <eggert@cs.ucla.edu>\n    Reviewed-by: Andreas K. Huettel <dilfridge@gentoo.org>\n    (cherry picked from commit 7ea06e994093fa0bcca0d0ee2c1db271d8d7885d)\n\ndiff --git a/NEWS b/NEWS\nindex 4b290ad4bf..253b07ae99 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -24,6 +24,7 @@ The following bugs are resolved with this release:\n   [32470] x86: Avoid integer truncation with large cache sizes\n   [32810] Crash on x86-64 if XSAVEC disable via tunable\n   [32987] elf: Fix subprocess status handling for tst-dlopen-sgid\n+  [33185] Fix double-free after allocation failure in regcomp\n \f\n Version 2.40\n \ndiff --git a/posix/Makefile b/posix/Makefile\nindex 2c598cd20a..830278a423 100644\n--- a/posix/Makefile\n+++ b/posix/Makefile\n@@ -303,6 +303,7 @@ tests := \\\n   tst-posix_spawn-setsid \\\n   tst-preadwrite \\\n   tst-preadwrite64 \\\n+  tst-regcomp-bracket-free \\\n   tst-regcomp-truncated \\\n   tst-regex \\\n   tst-regex2 \\\ndiff --git a/posix/regcomp.c b/posix/regcomp.c\nindex 5380d3c7b9..6595bb3c0d 100644\n--- a/posix/regcomp.c\n+++ b/posix/regcomp.c\n@@ -3384,6 +3384,7 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token,\n     {\n #ifdef RE_ENABLE_I18N\n       free_charset (mbcset);\n+      mbcset = NULL;\n #endif\n       /* Build a tree for simple bracket.  */\n       br_token.type = SIMPLE_BRACKET;\n@@ -3399,7 +3400,8 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token,\n  parse_bracket_exp_free_return:\n   re_free (sbcset);\n #ifdef RE_ENABLE_I18N\n-  free_charset (mbcset);\n+  if (__glibc_likely (mbcset != NULL))\n+    free_charset (mbcset);\n #endif /* RE_ENABLE_I18N */\n   return NULL;\n }\ndiff --git a/posix/tst-regcomp-bracket-free.c b/posix/tst-regcomp-bracket-free.c\nnew file mode 100644\nindex 0000000000..3c091d8c44\n--- /dev/null\n+++ b/posix/tst-regcomp-bracket-free.c\n@@ -0,0 +1,176 @@\n+/* Test regcomp bracket parsing with injected allocation failures (bug 33185).\n+   Copyright (C) 2025 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+/* This test invokes regcomp multiple times, failing one memory\n+   allocation in each call.  The function call should fail with\n+   REG_ESPACE (or succeed if it can recover from the allocation\n+   failure).  Previously, there was double-free bug.  */\n+\n+#include <errno.h>\n+#include <regex.h>\n+#include <stdio.h>\n+#include <string.h>\n+#include <support/check.h>\n+#include <support/namespace.h>\n+#include <support/support.h>\n+\n+/* Data structure allocated via MAP_SHARED, so that writes from the\n+   subprocess are visible.  */\n+struct shared_data\n+{\n+  /* Number of tracked allocations performed so far.  */\n+  volatile unsigned int allocation_count;\n+\n+  /* If this number is reached, one allocation fails.  */\n+  volatile unsigned int failing_allocation;\n+\n+  /* The subprocess stores the expected name here.  */\n+  char name[100];\n+};\n+\n+/* Allocation count in shared mapping.  */\n+static struct shared_data *shared;\n+\n+/* Returns true if a failure should be injected for this allocation.  */\n+static bool\n+fail_this_allocation (void)\n+{\n+  if (shared != NULL)\n+    {\n+      unsigned int count = shared->allocation_count;\n+      shared->allocation_count = count + 1;\n+      return count == shared->failing_allocation;\n+    }\n+  else\n+    return false;\n+}\n+\n+/* Failure-injecting wrappers for allocation functions used by glibc.  */\n+\n+void *\n+malloc (size_t size)\n+{\n+  if (fail_this_allocation ())\n+    {\n+      errno = ENOMEM;\n+      return NULL;\n+    }\n+  extern __typeof (malloc) __libc_malloc;\n+  return __libc_malloc (size);\n+}\n+\n+void *\n+calloc (size_t a, size_t b)\n+{\n+  if (fail_this_allocation ())\n+    {\n+      errno = ENOMEM;\n+      return NULL;\n+    }\n+  extern __typeof (calloc) __libc_calloc;\n+  return __libc_calloc (a, b);\n+}\n+\n+void *\n+realloc (void *ptr, size_t size)\n+{\n+  if (fail_this_allocation ())\n+    {\n+      errno = ENOMEM;\n+      return NULL;\n+    }\n+  extern __typeof (realloc) __libc_realloc;\n+  return __libc_realloc (ptr, size);\n+}\n+\n+/* No-op subprocess to verify that support_isolate_in_subprocess does\n+   not perform any heap allocations.  */\n+static void\n+no_op (void *ignored)\n+{\n+}\n+\n+/* Perform a regcomp call in a subprocess.  Used to count its\n+   allocations.  */\n+static void\n+initialize (void *regexp1)\n+{\n+  const char *regexp = regexp1;\n+\n+  shared->allocation_count = 0;\n+\n+  regex_t reg;\n+  TEST_COMPARE (regcomp (&reg, regexp, 0), 0);\n+}\n+\n+/* Perform regcomp in a subprocess with fault injection.  */\n+static void\n+test_in_subprocess (void *regexp1)\n+{\n+  const char *regexp = regexp1;\n+  unsigned int inject_at = shared->failing_allocation;\n+\n+  regex_t reg;\n+  int ret = regcomp (&reg, regexp, 0);\n+\n+  if (ret != 0)\n+    {\n+      TEST_COMPARE (ret, REG_ESPACE);\n+      printf (\"info: allocation %u failure results in return value %d,\"\n+              \" error %s (%d)\\n\",\n+              inject_at, ret, strerrorname_np (errno), errno);\n+    }\n+}\n+\n+static int\n+do_test (void)\n+{\n+  char regexp[] = \"[:alpha:]\";\n+\n+  shared = support_shared_allocate (sizeof (*shared));\n+\n+  /* Disable fault injection.  */\n+  shared->failing_allocation = ~0U;\n+\n+  support_isolate_in_subprocess (no_op, NULL);\n+  TEST_COMPARE (shared->allocation_count, 0);\n+\n+  support_isolate_in_subprocess (initialize, regexp);\n+\n+  /* The number of allocations in the successful case, plus some\n+     slack.  Once the number of expected allocations is exceeded,\n+     injecting further failures does not make a difference.  */\n+  unsigned int maximum_allocation_count = shared->allocation_count;\n+  printf (\"info: successful call performs %u allocations\\n\",\n+          maximum_allocation_count);\n+  maximum_allocation_count += 10;\n+\n+  for (unsigned int inject_at = 0; inject_at <= maximum_allocation_count;\n+       ++inject_at)\n+    {\n+      shared->allocation_count = 0;\n+      shared->failing_allocation = inject_at;\n+      support_isolate_in_subprocess (test_in_subprocess, regexp);\n+    }\n+\n+  support_shared_free (shared);\n+\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/locale/loadarchive.c b/locale/loadarchive.c\nindex 452e3eb6e3..e2016a8aab 100644\n--- a/locale/loadarchive.c\n+++ b/locale/loadarchive.c\n@@ -123,6 +123,25 @@ calculate_head_size (const struct locarhead *h)\n   return MAX (namehash_end, MAX (string_end, locrectab_end));\n }\n \n+static int\n+open_locale_archive (void)\n+{\n+  int fd = -1;\n+  char *versioned_path = secure_getenv (\"LOCALE_ARCHIVE_2_27\");\n+  char *path = secure_getenv (\"LOCALE_ARCHIVE\");\n+  if (versioned_path)\n+    fd = __open_nocancel (versioned_path, O_RDONLY|O_LARGEFILE|O_CLOEXEC);\n+  if (path && fd < 0)\n+    fd = __open_nocancel (path, O_RDONLY|O_LARGEFILE|O_CLOEXEC);\n+  if (fd < 0)\n+    fd = __open_nocancel(\"/run/current-system/sw/lib/locale/locale-archive\", O_RDONLY|O_LARGEFILE|O_CLOEXEC);\n+  if (fd < 0)\n+    fd = __open_nocancel (\"/usr/lib/locale/locale-archive\", O_RDONLY|O_LARGEFILE|O_CLOEXEC);\n+  if (fd < 0)\n+    fd = __open_nocancel (archfname, O_RDONLY|O_LARGEFILE|O_CLOEXEC);\n+  return fd;\n+}\n+\n \n /* Find the locale *NAMEP in the locale archive, and return the\n    internalized data structure for its CATEGORY data.  If this locale has\n@@ -202,7 +221,7 @@ _nl_load_locale_from_archive (int category, const char **namep)\n       archmapped = &headmap;\n \n       /* The archive has never been opened.  */\n-      fd = __open_nocancel (archfname, O_RDONLY|O_LARGEFILE|O_CLOEXEC);\n+      fd = open_locale_archive ();\n       if (fd < 0)\n \t/* Cannot open the archive, for whatever reason.  */\n \treturn NULL;\n@@ -397,8 +416,7 @@ _nl_load_locale_from_archive (int category, const char **namep)\n \t  if (fd == -1)\n \t    {\n \t      struct __stat64_t64 st;\n-\t      fd = __open_nocancel (archfname,\n-\t\t\t\t    O_RDONLY|O_LARGEFILE|O_CLOEXEC);\n+\t      fd = open_locale_archive();\n \t      if (fd == -1)\n \t\t/* Cannot open the archive, for whatever reason.  */\n \t\treturn NULL;\ndiff --git a/locale/programs/locale.c b/locale/programs/locale.c\nindex c7ee1874e8..af20fbac3e 100644\n--- a/locale/programs/locale.c\n+++ b/locale/programs/locale.c\n@@ -632,6 +632,26 @@ nameentcmp (const void *a, const void *b)\n }\n \n \n+static int\n+open_locale_archive (void)\n+{\n+  int fd = -1;\n+  char *versioned_path = secure_getenv (\"LOCALE_ARCHIVE_2_27\");\n+  char *path = secure_getenv (\"LOCALE_ARCHIVE\");\n+  if (versioned_path)\n+    fd = open64 (versioned_path, O_RDONLY);\n+  if (path && fd < 0)\n+    fd = open64 (path, O_RDONLY);\n+  if (fd < 0)\n+    fd = open64 (\"/run/current-system/sw/lib/locale/locale-archive\", O_RDONLY|O_LARGEFILE|O_CLOEXEC);\n+  if (fd < 0)\n+    fd = open64 (\"/usr/lib/locale/locale-archive\", O_RDONLY);\n+  if (fd < 0)\n+    fd = open64 (ARCHIVE_NAME, O_RDONLY);\n+  return fd;\n+}\n+\n+\n static int\n write_archive_locales (void **all_datap, char *linebuf)\n {\n@@ -644,7 +664,7 @@ write_archive_locales (void **all_datap, char *linebuf)\n   int fd, ret = 0;\n   uint32_t cnt;\n \n-  fd = open64 (ARCHIVE_NAME, O_RDONLY);\n+  fd = open_locale_archive ();\n   if (fd < 0)\n     return 0;\n \ndiff --git a/locale/programs/locarchive.c b/locale/programs/locarchive.c\nindex 8d79a1b6d1..93118c52e3 100644\n--- a/locale/programs/locarchive.c\n+++ b/locale/programs/locarchive.c\n@@ -116,6 +116,22 @@ prepare_address_space (int fd, size_t total, size_t *reserved, int *xflags,\n }\n \n \n+static int\n+open_locale_archive (const char * archivefname, int flags)\n+{\n+  int fd = -1;\n+  char *versioned_path = secure_getenv (\"LOCALE_ARCHIVE_2_27\");\n+  char *path = secure_getenv (\"LOCALE_ARCHIVE\");\n+  if (versioned_path)\n+    fd = open64 (versioned_path, flags);\n+  if (path && fd < 0)\n+    fd = open64 (path, flags);\n+  if (fd < 0)\n+    fd = open64 (archivefname, flags);\n+  return fd;\n+}\n+\n+\n static void\n create_archive (const char *archivefname, struct locarhandle *ah)\n {\n@@ -577,7 +593,7 @@ open_archive (struct locarhandle *ah, bool readonly)\n   while (1)\n     {\n       /* Open the archive.  We must have exclusive write access.  */\n-      fd = open64 (archivefname, readonly ? O_RDONLY : O_RDWR);\n+      fd = open_locale_archive (archivefname, readonly ? O_RDONLY : O_RDWR);\n       if (fd == -1)\n \t{\n \t  /* Maybe the file does not yet exist? If we are opening\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/elf/Makefile b/elf/Makefile\nindex 5d666b1b..a5017e9c 100644\n--- a/elf/Makefile\n+++ b/elf/Makefile\n@@ -669,14 +669,14 @@ $(objpfx)sln: $(sln-modules:%=$(objpfx)%.o)\n \n $(objpfx)ldconfig: $(ldconfig-modules:%=$(objpfx)%.o)\n \n-SYSCONF-FLAGS := -D'SYSCONFDIR=\"$(sysconfdir)\"'\n-CFLAGS-ldconfig.c += $(SYSCONF-FLAGS) -D'LIBDIR=\"$(libdir)\"' \\\n+PREFIX-FLAGS := -D'PREFIX=\"$(prefix)\"'\n+CFLAGS-ldconfig.c += $(PREFIX-FLAGS) -D'LIBDIR=\"$(libdir)\"' \\\n \t\t    -D'SLIBDIR=\"$(slibdir)\"'\n libof-ldconfig = ldconfig\n-CFLAGS-dl-cache.c += $(SYSCONF-FLAGS)\n-CFLAGS-cache.c += $(SYSCONF-FLAGS)\n-CFLAGS-rtld.c += $(SYSCONF-FLAGS)\n-CFLAGS-dl-usage.c += $(SYSCONF-FLAGS) \\\n+CFLAGS-dl-cache.c += $(PREFIX-FLAGS)\n+CFLAGS-cache.c += $(PREFIX-FLAGS)\n+CFLAGS-rtld.c += $(PREFIX-FLAGS)\n+CFLAGS-dl-usage.c += $(PREFIX-FLAGS) \\\n   -D'RTLD=\"$(rtlddir)/$(rtld-installed-name)\"'\n \n cpp-srcs-left := $(all-rtld-routines:=.os)\ndiff --git a/elf/dl-diagnostics.c b/elf/dl-diagnostics.c\nindex bef224b3..8e166b12 100644\n--- a/elf/dl-diagnostics.c\n+++ b/elf/dl-diagnostics.c\n@@ -205,7 +205,7 @@ print_paths (void)\n {\n   _dl_diagnostics_print_labeled_string (\"path.prefix\", PREFIX);\n   _dl_diagnostics_print_labeled_string (\"path.rtld\", RTLD);\n-  _dl_diagnostics_print_labeled_string (\"path.sysconfdir\", SYSCONFDIR);\n+  _dl_diagnostics_print_labeled_string (\"path.sysconfdir\", PREFIX \"/etc\");\n\n   unsigned int index = 0;\n   static const char *system_dirs = SYSTEM_DIRS \"\\0\";\ndiff --git a/elf/ldconfig.c b/elf/ldconfig.c\nindex 28ed637a..6f07b79a 100644\n--- a/elf/ldconfig.c\n+++ b/elf/ldconfig.c\n@@ -57,7 +57,7 @@\n #define TLS_HWCAP_BIT 63\n \n #ifndef LD_SO_CONF\n-# define LD_SO_CONF SYSCONFDIR \"/ld.so.conf\"\n+# define LD_SO_CONF PREFIX \"/etc/ld.so.conf\"\n #endif\n \n /* Get libc version number.  */\ndiff --git a/sysdeps/generic/dl-cache.h b/sysdeps/generic/dl-cache.h\nindex 964d50a4..2224d651 100644\n--- a/sysdeps/generic/dl-cache.h\n+++ b/sysdeps/generic/dl-cache.h\n@@ -35,7 +35,7 @@\n #endif\n \n #ifndef LD_SO_CACHE\n-# define LD_SO_CACHE SYSCONFDIR \"/ld.so.cache\"\n+# define LD_SO_CACHE PREFIX \"/etc/ld.so.cache\"\n #endif\n \n #ifndef add_system_dir\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff -ru glibc-2.20-orig/elf/rtld.c glibc-2.20/elf/rtld.c\n--- glibc-2.20-orig/elf/rtld.c\t2014-09-07 10:09:09.000000000 +0200\n+++ glibc-2.20/elf/rtld.c\t2014-10-27 11:32:25.203043157 +0100\n@@ -1513,7 +1513,7 @@\n      open().  So we do this first.  If it succeeds we do almost twice\n      the work but this does not matter, since it is not for production\n      use.  */\n-  static const char preload_file[] = \"/etc/ld.so.preload\";\n+  static const char preload_file[] = \"/etc/ld-nix.so.preload\";\n   if (__glibc_unlikely (__access (preload_file, R_OK) == 0))\n     {\n       /* Read the contents of the file.  */\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff -ubr glibc-2.17-orig/sysdeps/unix/confstr.h glibc-2.17/sysdeps/unix/confstr.h\n--- glibc-2.17-orig/sysdeps/unix/confstr.h\t2013-06-03 22:01:44.829726968 +0200\n+++ glibc-2.17/sysdeps/unix/confstr.h\t2013-06-03 22:04:39.469376740 +0200\n@@ -1 +1 @@\n-#define\tCS_PATH\t\"/bin:/usr/bin\"\n+#define\tCS_PATH\t\"/run/current-system/sw/bin:/bin:/usr/bin\"\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 3288c6da64add3b4561b8c10fff522027caea01c Mon Sep 17 00:00:00 2001\nFrom: Nicholas Miell <nmiell@gmail.com>\nDate: Sat, 17 Jun 2017 18:21:07 -0700\nSubject: [PATCH] Align the stack on entry to __tls_get_addr()\n\nOld versions of gcc (4 & 5) didn't align the stack according to the\nAMD64 psABI when calling __tls_get_addr(). Apparently new versions of\ngcc (7) got much more aggressive about vectorizing and generating MOVAPS\ninstructions, which means old binaries built with the buggy versions of\ngcc are much more likely to crash when using versions of glibc built\nusing gcc 7.\n\nFor example, a large number of Linux games built using the Unity game\nengine and available for purchase on Steam.\n---\n elf/dl-tls.c | 4 ++++\n 1 file changed, 4 insertions(+)\n\ndiff --git a/elf/dl-tls.c b/elf/dl-tls.c\nindex 5aba33b3fa..3f3cb917de 100644\n--- a/elf/dl-tls.c\n+++ b/elf/dl-tls.c\n@@ -827,6 +827,10 @@ rtld_hidden_proto (__tls_get_addr)\n rtld_hidden_def (__tls_get_addr)\n #endif\n\n+#ifdef __x86_64__\n+/* Old versions of gcc didn't align the stack. */\n+__attribute__((force_align_arg_pointer))\n+#endif\n /* The generic dynamic and local dynamic model cannot be used in\n    statically linked applications.  */\n void *\n--\n2.13.0\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/nss/nss_files/files-XXX.c b/nss/nss_files/files-XXX.c\nindex 1db9e46127..3a567e0224 100644\n--- a/nss/nss_files/files-XXX.c\n+++ b/nss/nss_files/files-XXX.c\n@@ -75,8 +75,20 @@ internal_setent (FILE **stream)\n \n   if (*stream == NULL)\n     {\n-      *stream = __nss_files_fopen (DATAFILE);\n-\n+      const char *file = DATAFILE;\n+\n+      #ifdef NIX_DATAFILE\n+      // use the Nix environment variable such as `NIX_ETC_PROTOCOLS`\n+      char *path = secure_getenv (NIX_DATAFILE);\n+\n+      // if the environment variable is set, then read from the /nix/store entry instead\n+      if (path && path[0]) {\n+        file = path;\n+      }\n+      #endif\n+      \n+      *stream = __nss_files_fopen (file);\n+    \n       if (*stream == NULL)\n \tstatus = errno == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL;\n     }\ndiff --git a/nss/nss_files/files-proto.c b/nss/nss_files/files-proto.c\nindex c30bedc0aa..b321e68d3c 100644\n--- a/nss/nss_files/files-proto.c\n+++ b/nss/nss_files/files-proto.c\n@@ -23,6 +23,7 @@ NSS_DECLARE_MODULE_FUNCTIONS (files)\n \n #define ENTNAME\t\tprotoent\n #define DATABASE\t\"protocols\"\n+#define NIX_DATAFILE \"NIX_ETC_PROTOCOLS\"\n \n struct protoent_data {};\n \ndiff --git a/nss/nss_files/files-service.c b/nss/nss_files/files-service.c\nindex bfc2590699..0bff36aee5 100644\n--- a/nss/nss_files/files-service.c\n+++ b/nss/nss_files/files-service.c\n@@ -24,6 +24,7 @@ NSS_DECLARE_MODULE_FUNCTIONS (files)\n \n #define ENTNAME\t\tservent\n #define DATABASE\t\"services\"\n+#define NIX_DATAFILE \"NIX_ETC_SERVICES\"\n \n struct servent_data {};\n \n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From e207c3dbcff1d3d09c60eec99b6fec2a698b01bd Mon Sep 17 00:00:00 2001\nFrom: Bernardo Meurer <bernardo@meurer.org>\nDate: Fri, 22 Jul 2022 22:11:07 -0700\nSubject: [PATCH] Revert \"Remove all usage of @BASH@ or ${BASH} in installed\n files, and hardcode /bin/bash instead\"\n\nWe need the ability to override to use `/bin/sh` here to avoid having\nsome bootstrap tools in a final build product.\n\nThis reverts commit 5188a9d0265cc6f7235a8af1d31ab02e4a24853d.\n\nCo-authored-by: Maximilian Bosch <maximilian@mbosch.me>\n---\n debug/Makefile     | 5 +++--\n debug/xtrace.sh    | 2 +-\n elf/Makefile       | 4 +++-\n elf/ldd.bash.in    | 2 +-\n elf/sotruss.sh     | 2 +-\n malloc/Makefile    | 5 +++--\n malloc/memusage.sh | 2 +-\n timezone/Makefile  | 3 ++-\n 8 files changed, 15 insertions(+), 10 deletions(-)\n\ndiff --git a/debug/Makefile b/debug/Makefile\nindex 3903cc97a3..b041acca71 100644\n--- a/debug/Makefile\n+++ b/debug/Makefile\n@@ -343,8 +343,9 @@ $(objpfx)pcprofiledump: $(objpfx)pcprofiledump.o\n \n $(objpfx)xtrace: xtrace.sh\n \trm -f $@.new\n-\tsed -e 's|@VERSION@|$(version)|' -e 's|@SLIBDIR@|$(sLIBdir)|' \\\n-\t    -e 's|@BINDIR@|$(bindir)|' -e 's|@PKGVERSION@|$(PKGVERSION)|' \\\n+\tsed -e 's|@BASH@|$(BASH)|' -e 's|@VERSION@|$(version)|' \\\n+\t    -e 's|@SLIBDIR@|$(sLIBdir)|' -e 's|@BINDIR@|$(bindir)|' \\\n+\t    -e 's|@PKGVERSION@|$(PKGVERSION)|' \\\n \t    -e 's|@REPORT_BUGS_TO@|$(REPORT_BUGS_TO)|' $^ > $@.new \\\n \t&& rm -f $@ && mv $@.new $@ && chmod +x $@\n \ndiff --git a/debug/xtrace.sh b/debug/xtrace.sh\nindex 77ec1d84df..5614404a71 100755\n--- a/debug/xtrace.sh\n+++ b/debug/xtrace.sh\n@@ -1,4 +1,4 @@\n-#!/bin/bash\n+#! @BASH@\n # Copyright (C) 1999-2024 Free Software Foundation, Inc.\n # This file is part of the GNU C Library.\n \ndiff --git a/elf/Makefile b/elf/Makefile\nindex 5d78b659ce..a2145d7b64 100644\n--- a/elf/Makefile\n+++ b/elf/Makefile\n@@ -249,7 +249,8 @@ $(objpfx)sotruss-lib.so: $(common-objpfx)libc.so $(objpfx)ld.so \\\n \t$(common-objpfx)libc_nonshared.a\n \n $(objpfx)sotruss: sotruss.sh $(common-objpfx)config.make\n-\tsed -e 's%@VERSION@%$(version)%g' \\\n+\tsed -e 's%@BASH@%$(BASH)%g' \\\n+\t    -e 's%@VERSION@%$(version)%g' \\\n \t    -e 's%@TEXTDOMAINDIR@%$(localedir)%g' \\\n \t    -e 's%@PREFIX@%$(prefix)%g' \\\n \t    -e 's|@PKGVERSION@|$(PKGVERSION)|g' \\\n@@ -1392,6 +1393,7 @@ ldd-rewrite = -e 's%@RTLD@%$(rtlddir)/$(rtld-installed-name)%g' \\\n \t      -e 's%@VERSION@%$(version)%g' \\\n \t      -e 's|@PKGVERSION@|$(PKGVERSION)|g' \\\n \t      -e 's|@REPORT_BUGS_TO@|$(REPORT_BUGS_TO)|g' \\\n+\t      -e 's%@BASH@%$(BASH)%g' \\\n \t      -e 's%@TEXTDOMAINDIR@%$(localedir)%g'\n \n ifeq ($(ldd-rewrite-script),no)\ndiff --git a/elf/ldd.bash.in b/elf/ldd.bash.in\nindex d6b640df66..46111670cd 100644\n--- a/elf/ldd.bash.in\n+++ b/elf/ldd.bash.in\n@@ -1,4 +1,4 @@\n-#!/bin/bash\n+#! @BASH@\n # Copyright (C) 1996-2024 Free Software Foundation, Inc.\n # This file is part of the GNU C Library.\n \ndiff --git a/elf/sotruss.sh b/elf/sotruss.sh\nindex ac1a83984e..2bf17c518e 100755\n--- a/elf/sotruss.sh\n+++ b/elf/sotruss.sh\n@@ -1,4 +1,4 @@\n-#!/bin/bash\n+#! @BASH@\n # Copyright (C) 2011-2024 Free Software Foundation, Inc.\n # This file is part of the GNU C Library.\n \ndiff --git a/malloc/Makefile b/malloc/Makefile\nindex c83ade5f10..8dd9174b79 100644\n--- a/malloc/Makefile\n+++ b/malloc/Makefile\n@@ -312,8 +312,9 @@ $(objpfx)mtrace: mtrace.pl\n \n $(objpfx)memusage: memusage.sh\n \trm -f $@.new\n-\tsed -e 's|@VERSION@|$(version)|' -e 's|@SLIBDIR@|$(sLIBdir)|' \\\n-\t    -e 's|@BINDIR@|$(bindir)|' -e 's|@PKGVERSION@|$(PKGVERSION)|' \\\n+\tsed -e 's|@BASH@|$(BASH)|' -e 's|@VERSION@|$(version)|' \\\n+\t    -e 's|@SLIBDIR@|$(sLIBdir)|' -e 's|@BINDIR@|$(bindir)|' \\\n+\t    -e 's|@PKGVERSION@|$(PKGVERSION)|' \\\n \t    -e 's|@REPORT_BUGS_TO@|$(REPORT_BUGS_TO)|' $^ > $@.new \\\n \t&& rm -f $@ && mv $@.new $@ && chmod +x $@\n \ndiff --git a/malloc/memusage.sh b/malloc/memusage.sh\nindex d2d9d17ea8..2e7efc9049 100755\n--- a/malloc/memusage.sh\n+++ b/malloc/memusage.sh\n@@ -1,4 +1,4 @@\n-#!/bin/bash\n+#! @BASH@\n # Copyright (C) 1999-2024 Free Software Foundation, Inc.\n # This file is part of the GNU C Library.\n \ndiff --git a/timezone/Makefile b/timezone/Makefile\nindex d7acb387ba..c8e203ea3a 100644\n--- a/timezone/Makefile\n+++ b/timezone/Makefile\n@@ -132,7 +132,8 @@ $(testdata)/XT5: testdata/gen-XT5.sh\n \tmv $@.tmp $@\n \n $(objpfx)tzselect: tzselect.ksh $(common-objpfx)config.make\n-\tsed -e 's|TZDIR=[^}]*|TZDIR=$(zonedir)|' \\\n+\tsed -e 's|/bin/bash|$(BASH)|' \\\n+\t    -e 's|TZDIR=[^}]*|TZDIR=$(zonedir)|' \\\n \t    -e '/TZVERSION=/s|see_Makefile|\"$(version)\"|' \\\n \t    -e '/PKGVERSION=/s|=.*|=\"$(PKGVERSION)\"|' \\\n \t    -e '/REPORT_BUGS_TO=/s|=.*|=\"$(REPORT_BUGS_TO)\"|' \\\n-- \n2.42.0\n\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 31915e55f9c34f6137ab1c5ac002375a2d5d4589 Mon Sep 17 00:00:00 2001\nFrom: Frederik Schwan <frederik.schwan@linux.com>\nDate: Fri, 4 Aug 2023 15:19:57 +0200\nSubject: [PATCH] force --hash-style=both to keep compatibility with old niche\n software\n\n---\n Makeconfig | 4 ++++\n 1 file changed, 4 insertions(+)\n\ndiff --git a/Makeconfig b/Makeconfig\nindex 77d7fd14df..2ae67c4beb 100644\n--- a/Makeconfig\n+++ b/Makeconfig\n@@ -378,6 +378,10 @@ relro-LDFLAGS = -Wl,-z,relro\n LDFLAGS.so += $(relro-LDFLAGS)\n LDFLAGS-rtld += $(relro-LDFLAGS)\n \n+hashstyle-LDFLAGS = -Wl,--hash-style=both\n+LDFLAGS.so += $(hashstyle-LDFLAGS)\n+LDFLAGS-rtld += $(hashstyle-LDFLAGS)\n+\n # Linker options to enable and disable DT_RELR.\n ifeq ($(have-dt-relr),yes)\n dt-relr-ldflag = -Wl,-z,pack-relative-relocs\n-- \n2.41.0\n\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 38e9742ed794febbc8caa4177df14d097607a2d9 Mon Sep 17 00:00:00 2001\nFrom: Maximilian Bosch <maximilian@mbosch.me>\nDate: Sun, 5 Oct 2025 12:45:25 +0200\nSubject: [PATCH 1/2] localedata: allow reproducible & parallel install of\n locale-archive\n\nThe problem with the current approach is that N processes are compiling\na locale and updating the locale-archive at the same time. Hence,\nthere's a race which process gets to update the archive first and thus\nthe build is not reproducible[1].\n\nThis patch changes that by adding the `--no-archive` flag to the\n`$(LOCALEDEF)` invocation in `build-one-locale` to parallelize the build\nprocess in a race-free manner. A single `localedef --add-to-archive`\nthen adds all previously built locales to the archive.\n\n[1] https://github.com/NixOS/nixpkgs/issues/245360\n---\n localedata/Makefile | 6 ++++++\n 1 file changed, 6 insertions(+)\n\ndiff --git a/localedata/Makefile b/localedata/Makefile\nindex 01b32348d4..13f7d3a2c4 100644\n--- a/localedata/Makefile\n+++ b/localedata/Makefile\n@@ -538,8 +538,13 @@ LOCALEDEF=I18NPATH=. GCONV_PATH=$(common-objpfx)iconvdata LC_ALL=C \\\n $(rtld-prefix) $(common-objpfx)locale/localedef\n install-locales: install-locale-archive\n \n+define install-all-locales\n+  $(LOCALEDEF) $$flags --add-to-archive `find $(inst_complocaledir) -maxdepth 1 -mindepth 1 -type d | sort`\n+endef\n+\n # Create and install the locale-archive file.\n install-locale-archive: $(INSTALL-SUPPORTED-LOCALE-ARCHIVE)\n+\t$(install-all-locales)\n # Create and install the locales individually (no archive).\n install-locale-files: $(INSTALL-SUPPORTED-LOCALE-FILES)\n \n@@ -565,6 +570,7 @@ define build-one-locale\n \t$(LOCALEDEF) $$flags --alias-file=../intl/locale.alias \\\n \t\t     -i locales/$$input -f charmaps/$$charset \\\n \t\t     $(addprefix --prefix=,$(install_root)) $$locale \\\n+\t\t     --no-archive \\\n \t&& echo ' done';\n endef\n \n-- \n2.50.1\n\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 887cb6906afa2b2d8abf35ccfc33ce7b8dc902f8 Mon Sep 17 00:00:00 2001\nFrom: Maximilian Bosch <maximilian@mbosch.me>\nDate: Sun, 5 Oct 2025 12:48:43 +0200\nSubject: [PATCH 2/2] Makeconfig: make inst_complocaledir overridable\n\nOn NixOS, we build the locales in a separate package from glibc itself.\nAlso, packages aren't installed into a common location such as `/usr`,\nbut each package has its own unique prefix below `/nix/store`.\n\nFor us, the current state is a problem because `localedef` is built\nin a different package and expects DESTDIR to be the unique\npackage-prefix of `glibc` itself. Our current workaround is to\ninvoke `localedef` with `--prefix=$TMPDIR` and copy the contents\nto the correct prefix. This was doable without patching when\n`localedef` was doing build & locale-archive creation at the\nsame time.\n\nWith the previous patch, the Makefile uses `$(inst_complocaledir)` to\ntell localedef where the previously built locales are. In NixOS, we now\nneed to override `$(inst_complocaledir)` to point to\n`$TMPDIR/$(glibc.out)`. Hence, this patch makes the variable overridable\nfrom env.\n---\n Makeconfig | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/Makeconfig b/Makeconfig\nindex 9eda4fa528..43d88325bc 100644\n--- a/Makeconfig\n+++ b/Makeconfig\n@@ -197,7 +197,7 @@ inst_zonedir = $(install_root)$(zonedir)\n ifndef complocaledir\n complocaledir = $(libdir)/locale\n endif\n-inst_complocaledir = $(install_root)$(complocaledir)\n+inst_complocaledir ?= $(install_root)$(complocaledir)\n \n # Where to install the message catalog data files (which are\n # machine-independent).\n-- \n2.50.1\n\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://ftpmirror.gnu.org/glibc/glibc-2.40.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "19a890175e9263d748f627993de6f4b1af9cd21e03f080e4bfb3a1fac10205a2"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/libc/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "yijhn548p2589pkybgvbhll09bqsxy0q-ncurses-6.5",
      "name": "ncurses",
      "version": "6.5",
      "description": "Free software emulation of curses in SVR4 and more",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/ncurses@6.5",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff '--color=auto' -ruN a/aclocal.m4 b/aclocal.m4\n--- a/aclocal.m4\t2025-07-19 18:19:51.000000000 +0200\n+++ b/aclocal.m4\t2025-07-25 14:11:19.900876172 +0200\n@@ -10290,7 +10290,7 @@\n \tcf_xopen_source=\"-D_SGI_SOURCE\"\n \tcf_XOPEN_SOURCE=\n \t;;\n-(linux*gnu|linux*gnuabi64|linux*gnuabin32|linux*gnueabi|linux*gnueabihf|linux*gnux32|uclinux*|gnu*|mint*|k*bsd*-gnu|cygwin|msys|mingw*|linux*uclibc)\n+(linux*gnu|linux*gnuabi64|linux*gnuabin32|linux*gnuabielfv*|linux*gnueabi|linux*gnueabihf|linux*gnux32|uclinux*|gnu*|mint*|k*bsd*-gnu|cygwin|msys|mingw*|linux*uclibc)\n \tCF_GNU_SOURCE($cf_XOPEN_SOURCE)\n \t;;\n linux*musl)\ndiff '--color=auto' -ruN a/Ada95/aclocal.m4 b/Ada95/aclocal.m4\n--- a/Ada95/aclocal.m4\t2025-07-19 18:38:31.000000000 +0200\n+++ b/Ada95/aclocal.m4\t2025-07-25 14:11:57.495783459 +0200\n@@ -5430,7 +5430,7 @@\n \tcf_xopen_source=\"-D_SGI_SOURCE\"\n \tcf_XOPEN_SOURCE=\n \t;;\n-(linux*gnu|linux*gnuabi64|linux*gnuabin32|linux*gnueabi|linux*gnueabihf|linux*gnux32|uclinux*|gnu*|mint*|k*bsd*-gnu|cygwin|msys|mingw*|linux*uclibc)\n+(linux*gnu|linux*gnuabi64|linux*gnuabin32|linux*gnuabielfv*|linux*gnueabi|linux*gnueabihf|linux*gnux32|uclinux*|gnu*|mint*|k*bsd*-gnu|cygwin|msys|mingw*|linux*uclibc)\n \tCF_GNU_SOURCE($cf_XOPEN_SOURCE)\n \t;;\n linux*musl)\ndiff '--color=auto' -ruN a/Ada95/configure b/Ada95/configure\n--- a/Ada95/configure\t2025-07-19 18:40:05.000000000 +0200\n+++ b/Ada95/configure\t2025-07-25 14:11:49.981449762 +0200\n@@ -13955,7 +13955,7 @@\n \tcf_xopen_source=\"-D_SGI_SOURCE\"\n \tcf_XOPEN_SOURCE=\n \t;;\n-(linux*gnu|linux*gnuabi64|linux*gnuabin32|linux*gnueabi|linux*gnueabihf|linux*gnux32|uclinux*|gnu*|mint*|k*bsd*-gnu|cygwin|msys|mingw*|linux*uclibc)\n+(linux*gnu|linux*gnuabi64|linux*gnuabin32|linux*gnuabielfv*|linux*gnueabi|linux*gnueabihf|linux*gnux32|uclinux*|gnu*|mint*|k*bsd*-gnu|cygwin|msys|mingw*|linux*uclibc)\n \n cf_gnu_xopen_source=$cf_XOPEN_SOURCE\n \ndiff '--color=auto' -ruN a/configure b/configure\n--- a/configure\t2025-07-19 19:00:40.000000000 +0200\n+++ b/configure\t2025-07-25 14:11:02.884551699 +0200\n@@ -10737,7 +10737,7 @@\n \tcf_xopen_source=\"-D_SGI_SOURCE\"\n \tcf_XOPEN_SOURCE=\n \t;;\n-(linux*gnu|linux*gnuabi64|linux*gnuabin32|linux*gnueabi|linux*gnueabihf|linux*gnux32|uclinux*|gnu*|mint*|k*bsd*-gnu|cygwin|msys|mingw*|linux*uclibc)\n+(linux*gnu|linux*gnuabi64|linux*gnuabin32|linux*gnuabielfv*|linux*gnueabi|linux*gnueabihf|linux*gnux32|uclinux*|gnu*|mint*|k*bsd*-gnu|cygwin|msys|mingw*|linux*uclibc)\n \n cf_gnu_xopen_source=$cf_XOPEN_SOURCE\n \ndiff '--color=auto' -ruN a/test/aclocal.m4 b/test/aclocal.m4\n--- a/test/aclocal.m4\t2025-07-19 18:42:37.000000000 +0200\n+++ b/test/aclocal.m4\t2025-07-25 14:11:41.551475534 +0200\n@@ -4658,7 +4658,7 @@\n \tcf_xopen_source=\"-D_SGI_SOURCE\"\n \tcf_XOPEN_SOURCE=\n \t;;\n-(linux*gnu|linux*gnuabi64|linux*gnuabin32|linux*gnueabi|linux*gnueabihf|linux*gnux32|uclinux*|gnu*|mint*|k*bsd*-gnu|cygwin|msys|mingw*|linux*uclibc)\n+(linux*gnu|linux*gnuabi64|linux*gnuabin32|linux*gnuabielfv*|linux*gnueabi|linux*gnueabihf|linux*gnux32|uclinux*|gnu*|mint*|k*bsd*-gnu|cygwin|msys|mingw*|linux*uclibc)\n \tCF_GNU_SOURCE($cf_XOPEN_SOURCE)\n \t;;\n linux*musl)\ndiff '--color=auto' -ruN a/test/configure b/test/configure\n--- a/test/configure\t2025-06-14 15:40:22.000000000 +0200\n+++ b/test/configure\t2025-07-25 14:11:34.529155110 +0200\n@@ -4183,7 +4183,7 @@\n \tcf_xopen_source=\"-D_SGI_SOURCE\"\n \tcf_XOPEN_SOURCE=\n \t;;\n-(linux*gnu|linux*gnuabi64|linux*gnuabin32|linux*gnueabi|linux*gnueabihf|linux*gnux32|uclinux*|gnu*|mint*|k*bsd*-gnu|cygwin|msys|mingw*|linux*uclibc)\n+(linux*gnu|linux*gnuabi64|linux*gnuabin32|linux*gnuabielfv*|linux*gnueabi|linux*gnueabihf|linux*gnux32|uclinux*|gnu*|mint*|k*bsd*-gnu|cygwin|msys|mingw*|linux*uclibc)\n \n cf_gnu_xopen_source=$cf_XOPEN_SOURCE\n \n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://invisible-island.net/archives/ncurses/ncurses-6.5.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "136d91bc269a9a5785e5f9e980bc76ab57428f604ce3e5a5a90cebc767971cc6"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/ncurses/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "00pqk64n9r6rmkbyssmrj13j1j0ysqnd-autoconf-archive-2024.10.16",
      "name": "autoconf-archive",
      "version": "2024.10.16",
      "description": "Archive of autoconf m4 macros",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0"
          }
        }
      ],
      "purl": "pkg:nix/autoconf-archive@2024.10.16",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 427e226a2fe3980388abffd6de25ed6b9591cce3 Mon Sep 17 00:00:00 2001\nFrom: Eli Schwartz <eschwartz93@gmail.com>\nDate: Sat, 19 Oct 2024 21:51:30 -0400\nSubject: [PATCH 1/3] ax_check_gl.m4: properly quote m4_fatal\n\nIt needs to only run as an argument of m4_if, not all the time.\n\nFixes: 753493bf7e251997f02559b98fc599d4a337d8cd\nBug: https://bugs.gentoo.org/941845\n---\n m4/ax_check_gl.m4 | 4 ++--\n 1 file changed, 2 insertions(+), 2 deletions(-)\n\ndiff --git a/m4/ax_check_gl.m4 b/m4/ax_check_gl.m4\nindex 850d407..4c2e4ef 100644\n--- a/m4/ax_check_gl.m4\n+++ b/m4/ax_check_gl.m4\n@@ -85,7 +85,7 @@\n #   modified version of the Autoconf Macro, you may extend this special\n #   exception to the GPL to apply to your modified version as well.\n \n-#serial 23\n+#serial 24\n \n # example gl program\n m4_define([_AX_CHECK_GL_PROGRAM],\n@@ -187,7 +187,7 @@ AC_DEFUN([_AX_CHECK_GL_LINK_CV],\n AC_DEFUN([_AX_CHECK_GL_MANUAL_LIBS_GENERIC], [\n   AS_IF([test -n \"$GL_LIBS\"],[], [\n     ax_check_gl_manual_libs_generic_extra_libs=\"$1\"\n-    m4_if($1, [], m4_fatal([$0: argument must not be empty]))\n+    m4_if($1, [], [m4_fatal([$0: argument must not be empty])])\n \n     _AX_CHECK_GL_SAVE_FLAGS([CFLAGS])\n     AC_SEARCH_LIBS([glBegin],[$ax_check_gl_manual_libs_generic_extra_libs], [\n-- \n2.46.1\n\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From e25f8d9e3ead52f998535b86c763065c5b45cc59 Mon Sep 17 00:00:00 2001\nFrom: Eli Schwartz <eschwartz93@gmail.com>\nDate: Sat, 19 Oct 2024 21:57:16 -0400\nSubject: [PATCH 2/3] ax_check_glx.m4: properly quote m4_fatal\n\nIt needs to only run as an argument of m4_if, not all the time.\n\nFixes: 40ca66e7e52bb63e3eee2514855fcf3ad2df7673\n---\n m4/ax_check_glx.m4 | 4 ++--\n 1 file changed, 2 insertions(+), 2 deletions(-)\n\ndiff --git a/m4/ax_check_glx.m4 b/m4/ax_check_glx.m4\nindex c7890d9..b5027f9 100644\n--- a/m4/ax_check_glx.m4\n+++ b/m4/ax_check_glx.m4\n@@ -61,7 +61,7 @@\n #   modified version of the Autoconf Macro, you may extend this special\n #   exception to the GPL to apply to your modified version as well.\n \n-#serial 9\n+#serial 10\n \n # example program\n m4_define([_AX_CHECK_GLX_PROGRAM],\n@@ -183,7 +183,7 @@ AC_DEFUN([_AX_CHECK_GLX_HEADERS],\n AC_DEFUN([_AX_CHECK_GLX_MANUAL_LIBS_GENERIC],\n [dnl\n  ax_check_glx_manual_libs_generic_extra_libs=\"$1\"\n- m4_if($1, [], m4_fatal([$0: argument must not be empty]))\n+ m4_if($1, [], [m4_fatal([$0: argument must not be empty])])\n \n  AC_LANG_PUSH([C])\n  _AX_CHECK_GLX_SAVE_FLAGS()\n-- \n2.46.1\n\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 3a23daa3da0eb1a256fda631867e19345d5f6e3a Mon Sep 17 00:00:00 2001\nFrom: Eli Schwartz <eschwartz93@gmail.com>\nDate: Sat, 19 Oct 2024 21:58:52 -0400\nSubject: [PATCH 3/3] ax_switch_flags.m4: properly quote m4_fatal\n\nIt needs to only run as an argument of m4_if, not all the time.\n\nFixes: 2adff78e224c908fd58df91852c8301c25777a8f\n---\n m4/ax_switch_flags.m4 | 4 ++--\n 1 file changed, 2 insertions(+), 2 deletions(-)\n\ndiff --git a/m4/ax_switch_flags.m4 b/m4/ax_switch_flags.m4\nindex dc79d1e..777aeb0 100644\n--- a/m4/ax_switch_flags.m4\n+++ b/m4/ax_switch_flags.m4\n@@ -36,10 +36,10 @@\n #   and this notice are preserved. This file is offered as-is, without any\n #   warranty.\n \n-#serial 5\n+#serial 6\n \n AC_DEFUN([AX_SWITCH_FLAGS], [\n-  m4_if($1, [], m4_fatal([$0: namespace is empty]))\n+  m4_if($1, [], [m4_fatal([$0: namespace is empty])])\n   AC_REQUIRE(AX_SAVE_FLAGS)\n   AC_REQUIRE(AX_RESTORE_FLAGS)\n   AX_SAVE_FLAGS($1[])\n-- \n2.46.1\n\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://gnu/autoconf-archive/autoconf-archive-2024.10.16.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "7bcd5d001916f3a50ed7436f4f700e3d2b1bade3ed803219c592d62502a57363"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/autoconf-archive/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "00xpncfcvafhr6vx9q05hkhazm70zw5g-zlib-ng-2.2.5",
      "name": "zlib-ng",
      "version": "2.2.5",
      "description": "Zlib data compression library for the next generation systems",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "Zlib"
          }
        }
      ],
      "purl": "pkg:nix/zlib-ng@2.2.5",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/zlib-ng/zlib-ng/archive/2.2.5.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "736458a878b7863fd5881cc97185a83626f6ec601babf07548951fbc6ec23c6e"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/zlib-ng/zlib-ng"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "03b4rm7xnjvix12j32dmi44k8jxz6px1-util-linux-minimal-2.41.2-swap",
      "name": "util-linux-minimal",
      "version": "2.41.2",
      "description": "Set of system utilities for Linux",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-2.0-only"
          }
        },
        {
          "license": {
            "id": "GPL-2.0-or-later"
          }
        },
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        },
        {
          "license": {
            "id": "LGPL-2.1-or-later"
          }
        },
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        },
        {
          "license": {
            "id": "BSD-4-Clause-UC"
          }
        },
        {
          "license": {
            "name": "Public Domain"
          }
        }
      ],
      "purl": "pkg:nix/util-linux-minimal@2.41.2",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "Search $PATH for the shutdown binary instead of hard-coding /sbin/shutdown,\nwhich isn't valid on NixOS (and a compatibility link on most other modern\ndistros anyway).\n\n--- a/include/pathnames.h\n+++ b/include/pathnames.h\n@@ -50,8 +50,8 @@\n #ifndef _PATH_LOGIN\n # define _PATH_LOGIN\t\t\"/bin/login\"\n #endif\n-#define _PATH_SHUTDOWN\t\t\"/sbin/shutdown\"\n-#define _PATH_POWEROFF\t\t\"/sbin/poweroff\"\n+#define _PATH_SHUTDOWN\t\t\"shutdown\"\n+#define _PATH_POWEROFF\t\t\"poweroff\"\n \n #define _PATH_TERMCOLORS_DIRNAME \"terminal-colors.d\"\n #define _PATH_TERMCOLORS_DIR\t\"/etc/\" _PATH_TERMCOLORS_DIRNAME\n--- a/sys-utils/rtcwake.c\n+++ b/sys-utils/rtcwake.c\n@@ -587,29 +587,29 @@ int main(int argc, char **argv)\n \t\tchar *arg[5];\n \t\tint i = 0;\n \n-\t\tif (!access(_PATH_SHUTDOWN, X_OK)) {\n-\t\t\targ[i++] = _PATH_SHUTDOWN;\n-\t\t\targ[i++] = \"-h\";\n-\t\t\targ[i++] = \"-P\";\n-\t\t\targ[i++] = \"now\";\n-\t\t\targ[i]   = NULL;\n-\t\t} else if (!access(_PATH_POWEROFF, X_OK)) {\n-\t\t\targ[i++] = _PATH_POWEROFF;\n-\t\t\targ[i]   = NULL;\n-\t\t} else {\n-\t\t\targ[i] \t = NULL;\n-\t\t}\n+\t\targ[i++] = _PATH_SHUTDOWN;\n+\t\targ[i++] = \"-h\";\n+\t\targ[i++] = \"-P\";\n+\t\targ[i++] = \"now\";\n+\t\targ[i]   = NULL;\n \n-\t\tif (arg[0]) {\n-\t\t\tif (ctl.verbose)\n-\t\t\t\tprintf(_(\"suspend mode: off; executing %s\\n\"),\n-\t\t\t\t\t\targ[0]);\n-\t\t\tif (!ctl.dryrun) {\n-\t\t\t\texecv(arg[0], arg);\n+\t\tif (ctl.verbose)\n+\t\t\tprintf(_(\"suspend mode: off; executing %s\\n\"),\n+\t\t\t\t\targ[0]);\n+\n+\t\tif (!ctl.dryrun) {\n+\t\t\texecvp(arg[0], arg);\n+\t\t\tif (ctl.verbose) {\n \t\t\t\twarn(_(\"failed to execute %s\"), arg[0]);\n-\t\t\t\trc = EX_EXEC_ENOENT;\n+\t\t\t\t// Reuse translations.\n+\t\t\t\tprintf(_(\"suspend mode: off; executing %s\\n\"),\n+\t\t\t\t\t\t_PATH_POWEROFF);\n \t\t\t}\n-\t\t} else {\n+\n+\t\t\ti = 0;\n+\t\t\targ[i++] = _PATH_POWEROFF;\n+\t\t\targ[i]   = NULL;\n+\t\t\texecvp(arg[0], arg);\n \t\t\t/* Failed to find shutdown command */\n \t\t\twarn(_(\"failed to find shutdown command\"));\n \t\t\trc = EX_EXEC_ENOENT;\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From mboxrd@z Thu Jan  1 00:00:00 1970\nReceived: from fhigh-a1-smtp.messagingengine.com (fhigh-a1-smtp.messagingengine.com [103.168.172.152])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 4B7691A3179\n\tfor <util-linux@vger.kernel.org>; Thu,  1 May 2025 07:58:42 +0000 (UTC)\nAuthentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.168.172.152\nARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1746086327; cv=none; b=KC+6gSdvTufeajvtSGNTxGQDyEzKZTkrdXCfWAk/7Ka4x6/Dql56gsLInMVIeOhZhEqRqU50OC7xRVzTh0LxNB9w/R+6Wp3IjwPCMamYrU0RbmESmna7Dxj6AaZ7ah5Yui5tLbNbHMi/YlCgB2kNLQkzCi5Ks1P1n3GKQNEyTeo=\nARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1746086327; c=relaxed/simple;\n\tbh=j3rUntPj5sMkYvslrT2HnVIXLnWPv+KtqgvsPNfyLjA=;\n\th=From:To:Subject:Date:Message-ID:MIME-Version; b=YE2qSlVarxSGcqgbV5kGORvLHNBN9UAvIp2OyVASjPREiAkWLuPTI5NeI8IZkWqP2diivhMyJQsaKRRtuV6ROyKQ6qvgFfmKq1h8ng3MvCDz13NH2LnWd6K0dV8Gvtm/hSckjYBiRi5aSbIwO83MpW7aonYJg6CypjwNBicj2GY=\nARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=alyssa.is; spf=pass smtp.mailfrom=alyssa.is; dkim=pass (2048-bit key) header.d=alyssa.is header.i=@alyssa.is header.b=mNlNmHFy; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=g9SrIubz; arc=none smtp.client-ip=103.168.172.152\nAuthentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=alyssa.is\nAuthentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=alyssa.is\nAuthentication-Results: smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=alyssa.is header.i=@alyssa.is header.b=\"mNlNmHFy\";\n\tdkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=\"g9SrIubz\"\nReceived: from phl-compute-11.internal (phl-compute-11.phl.internal [10.202.2.51])\n\tby mailfhigh.phl.internal (Postfix) with ESMTP id 178E7114016C\n\tfor <util-linux@vger.kernel.org>; Thu,  1 May 2025 03:58:42 -0400 (EDT)\nReceived: from phl-mailfrontend-01 ([10.202.2.162])\n  by phl-compute-11.internal (MEProxy); Thu, 01 May 2025 03:58:42 -0400\nDKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=alyssa.is; h=cc\n\t:content-transfer-encoding:content-type:date:date:from:from\n\t:in-reply-to:message-id:mime-version:reply-to:subject:subject:to\n\t:to; s=fm2; t=1746086322; x=1746172722; bh=Rnw3fgvQNHSJUSKVtVgyd\n\t5axY2/yyxCQRpc+pFH3Bm8=; b=mNlNmHFyuBN7q8yG+2Zl2vurYzCoNVyzm3pXt\n\t1rbFVDNCFdiD7RTF0R7vQ8iNRvODhHUf2nbTD2TWVT7nRTvlmH9QujRnhI4uDo1Q\n\tbvlhju5zoJfH2t9uHCsgE+NDk12GMI6zXzb9IOhyPXaWdJ+jFoxXItOkbuqPYxxn\n\t3q48hRCgKgc2NO6U9tP8QF/tbxt5/kE8qNdz2NNKnh70AMfoiabythfcVQV65d/N\n\tT1JC1MDlId4QNw8hmml7U9saxHuc2TmaS4yaj2gB/IcX7I6TGuiXzUUEDhAh91iO\n\tyieWpJxS+lWsCrenHbOZGs5tBBt8sOWH3Akr1n4zlNNu1ylGg==\nDKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=\n\tmessagingengine.com; h=cc:content-transfer-encoding:content-type\n\t:date:date:feedback-id:feedback-id:from:from:in-reply-to\n\t:message-id:mime-version:reply-to:subject:subject:to:to\n\t:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=\n\t1746086322; x=1746172722; bh=Rnw3fgvQNHSJUSKVtVgyd5axY2/yyxCQRpc\n\t+pFH3Bm8=; b=g9SrIubz/98pHJAthRu9UozFqtGxRQafa+kHuVBPVFwe50Jsskc\n\tRaD9YM3FL2aEJFewS6SDPqCLij8ZvpiBIz2hyf7l4SKeWdGKyWgU9Dgv7I4FX/bu\n\tzHENdQOCT4XGyRTzIu5mtqukKFUd/UfYxAdoEtFbnuOTcHmZzmk6uaqFPWLdu7SX\n\tGy1TBLNEoUocIpSTFCd8FJ2x2H8+erJaigKSjZ+l/MlI+lLxx7QV27sp9Xx0H5Lm\n\tnbCZjSwYRpdDLdy2Z7jGJ7udj9qCDAHGU9oA2R9u1QxVnK1UFxbKeZfUSjzPjn3x\n\tPBEfv0STqVvlr0iyhrFw2bpGqGG1wVGyPJQ==\nX-ME-Sender: <xms:sSkTaHhfJeM-f2KuCMKhLoQbkyYysBeZ93a4eDOg9b2P9cBp4oOr7Q>\n    <xme:sSkTaECSRaUAgiIyE6PadO2IyxYgvmGV_6G8Z4hd2bNBUD8isZke0IG_v__edmVWB\n    L53lHutr66HIOIovQ>\nX-ME-Received: <xmr:sSkTaHEdZSol1xfWLgqaEJ1cUgve7d4ymhea0_QI-cXVaISDKQ8U5Q5AUwy38udx>\nX-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgddvieeltdegucetufdoteggodetrf\n    dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggv\n    pdfurfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucenucfjughrpefhvf\n    fufffkofgggfestdekredtredttdenucfhrhhomheptehlhihsshgrucftohhsshcuoehh\n    ihesrghlhihsshgrrdhisheqnecuggftrfgrthhtvghrnhephedvfffghfetieejgfetfe\n    dtgffhvdehueehvdejudfggefgleejgfelfeevgfefnecuvehluhhsthgvrhfuihiivgep\n    tdenucfrrghrrghmpehmrghilhhfrhhomhephhhisegrlhihshhsrgdrihhspdhnsggprh\n    gtphhtthhopedupdhmohguvgepshhmthhpohhuthdprhgtphhtthhopehuthhilhdqlhhi\n    nhhugiesvhhgvghrrdhkvghrnhgvlhdrohhrgh\nX-ME-Proxy: <xmx:sSkTaER7kEyyW10vOAQ1vui5G7_D0GifliYeMLQz4JLNa4iZ080L4g>\n    <xmx:sSkTaExYNz-p85jteQ0H_ZdOnMBHHOBw1SWAfHjbsvgAoh2frm4WDw>\n    <xmx:sSkTaK5823IqxISExUdhL3R-uUXRNdNzVYC1UTJq_WdFgkjIGg3J6A>\n    <xmx:sSkTaJz7fWBQWiLK91l4YKB-yK9BqQ1_OGFj9sfWfirayzCZpvZAxw>\n    <xmx:sikTaAf1iglYzSo8hd9L0hoHaKUrAOU5zfTby77wB17InHIakt2GmKkJ>\nFeedback-ID: i12284293:Fastmail\nReceived: by mail.messagingengine.com (Postfix) with ESMTPA for\n <util-linux@vger.kernel.org>; Thu, 1 May 2025 03:58:41 -0400 (EDT)\nReceived: by mbp.qyliss.net (Postfix, from userid 1000)\n\tid 4863811F83; Thu, 01 May 2025 09:58:35 +0200 (CEST)\nFrom: Alyssa Ross <hi@alyssa.is>\nTo: util-linux@vger.kernel.org\nSubject: [PATCH] bits: only build when cpu_set_t is available\nDate: Thu,  1 May 2025 09:58:06 +0200\nMessage-ID: <20250501075806.88759-1-hi@alyssa.is>\nX-Mailer: git-send-email 2.47.2\nPrecedence: bulk\nX-Mailing-List: util-linux@vger.kernel.org\nList-Id: <util-linux.vger.kernel.org>\nList-Subscribe: <mailto:util-linux+subscribe@vger.kernel.org>\nList-Unsubscribe: <mailto:util-linux+unsubscribe@vger.kernel.org>\nMIME-Version: 1.0\nContent-Transfer-Encoding: 8bit\n\nDoesn't build on macOS.\n\nFixes: 6e1301d59 (\"text-utils: add bits command\")\nSigned-off-by: Alyssa Ross <hi@alyssa.is>\n---\n configure.ac | 6 +++++-\n meson.build  | 2 +-\n 2 files changed, 6 insertions(+), 2 deletions(-)\n\ndiff --git a/configure.ac b/configure.ac\nindex a5d910204..ac043d856 100644\n--- a/configure.ac\n+++ b/configure.ac\n@@ -2309,7 +2309,11 @@ UL_REQUIRES_HAVE([scriptlive], [pty], [openpty function (libutil)])\n AM_CONDITIONAL([BUILD_SCRIPTLIVE], [test \"x$build_scriptlive\" = xyes])\n \n \n-UL_BUILD_INIT([bits], [yes])\n+AC_ARG_ENABLE([bits],\n+  AS_HELP_STRING([--disable-bits], [do not build bits]),\n+  [], [UL_DEFAULT_ENABLE([bits], [check])])\n+UL_BUILD_INIT([bits])\n+UL_REQUIRES_HAVE([bits], [cpu_set_t], [cpu_set_t type])\n AM_CONDITIONAL([BUILD_BITS], [test \"x$build_bits\" = xyes])\n \n UL_BUILD_INIT([col], [check])\ndiff --git a/meson.build b/meson.build\nindex 1537f5e61..6e0381646 100644\n--- a/meson.build\n+++ b/meson.build\n@@ -1248,7 +1248,7 @@ endif\n \n ############################################################\n \n-opt = not get_option('build-bits').disabled()\n+opt = not get_option('build-bits').require(have_cpu_set_t).disabled()\n exe = executable(\n   'bits',\n   bits_sources,\n\nbase-commit: caa26876bc75041833c9644491cc2670d623f750\n-- \n2.47.2\n\n\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://cdn.kernel.org/pub/linux/utils/util-linux/v2.41/util-linux-2.41.2.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "6062a1d89b571a61932e6fc0211f36060c4183568b81ee866cf363bce9f6583e"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.kernel.org/pub/linux/utils/util-linux/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "06dqjacsjv5gdgfhva8k3jjzsx8hx9nq-libxcrypt-4.5.2",
      "name": "libxcrypt",
      "version": "4.5.2",
      "description": "Extended crypt library for descrypt, md5crypt, bcrypt, and others",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "LGPL-2.1-or-later"
          }
        }
      ],
      "purl": "pkg:nix/libxcrypt@4.5.2",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/besser82/libxcrypt/releases/download/v4.5.2/libxcrypt-4.5.2.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "71513a31c01a428bccd5367a32fd95f115d6dac50fb5b60c779d5c7942aec071"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/besser82/libxcrypt/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "075b6j43x9hvl1d565xgicgdjkd4qw3m-libxslt-1.1.43",
      "name": "libxslt",
      "version": "1.1.43",
      "description": "C library and tools to do XSL transformations",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/libxslt@1.1.43",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From afbaf5fcf0a92973ffaeb38fe4ab3e8a818f4c5a Mon Sep 17 00:00:00 2001\nFrom: Daniel Cheng <zetafunction@gmail.com>\nDate: Thu, 5 Jun 2025 09:43:53 -0700\nSubject: [PATCH] Use a dedicated node type to maintain the list of cached RVTs\n\nWhile evaluating a stylesheet, result value trees (result tree fragments\nin the XSLT spec) are represented as xmlDocs and cached on the transform\ncontext in a linked list, using xmlDoc's prev and next pointers to\nmaintain the list.\n\nHowever, XPath evaluations can inadvertently traverse these links, which\nare an implementation detail and do not reflect the actual document\nstructure. Using a dedicated node type avoids these unintended\ntraversals.\n---\n libxslt/transform.c     |  87 ++++++++--------\n libxslt/variables.c     | 219 +++++++++++++++++++++++++---------------\n libxslt/xsltInternals.h |  23 +++--\n 3 files changed, 199 insertions(+), 130 deletions(-)\n\ndiff --git a/libxslt/transform.c b/libxslt/transform.c\nindex 54ef821b..2d06ae77 100644\n--- a/libxslt/transform.c\n+++ b/libxslt/transform.c\n@@ -518,19 +518,20 @@ xsltTransformCacheFree(xsltTransformCachePtr cache)\n     /*\n     * Free tree fragments.\n     */\n-    if (cache->RVT) {\n-\txmlDocPtr tmp, cur = cache->RVT;\n+    if (cache->rvtList) {\n+\txsltRVTListPtr tmp, cur = cache->rvtList;\n \twhile (cur) {\n \t    tmp = cur;\n-\t    cur = (xmlDocPtr) cur->next;\n-\t    if (tmp->_private != NULL) {\n+\t    cur = cur->next;\n+\t    if (tmp->RVT->_private != NULL) {\n \t\t/*\n-\t\t* Tree the document info.\n+\t\t* Free the document info.\n \t\t*/\n-\t\txsltFreeDocumentKeys((xsltDocumentPtr) tmp->_private);\n-\t\txmlFree(tmp->_private);\n+\t\txsltFreeDocumentKeys((xsltDocumentPtr) tmp->RVT->_private);\n+\t\txmlFree(tmp->RVT->_private);\n \t    }\n-\t    xmlFreeDoc(tmp);\n+            xmlFreeDoc(tmp->RVT);\n+            xmlFree(tmp);\n \t}\n     }\n     /*\n@@ -2263,38 +2264,36 @@ xsltLocalVariablePush(xsltTransformContextPtr ctxt,\n  * are preserved; all other fragments are freed/cached.\n  */\n static void\n-xsltReleaseLocalRVTs(xsltTransformContextPtr ctxt, xmlDocPtr base)\n+xsltReleaseLocalRVTs(xsltTransformContextPtr ctxt, xsltRVTListPtr base)\n {\n-    xmlDocPtr cur = ctxt->localRVT, tmp;\n+    xsltRVTListPtr cur = ctxt->localRVTList, tmp;\n \n     if (cur == base)\n         return;\n-    if (cur->prev != NULL)\n-        xsltTransformError(ctxt, NULL, NULL, \"localRVT not head of list\\n\");\n \n-    /* Reset localRVT early because some RVTs might be registered again. */\n-    ctxt->localRVT = base;\n-    if (base != NULL)\n-        base->prev = NULL;\n+    /* Reset localRVTList early because some RVTs might be registered again. */\n+    ctxt->localRVTList = base;\n \n     do {\n         tmp = cur;\n-        cur = (xmlDocPtr) cur->next;\n-        if (tmp->compression == XSLT_RVT_LOCAL) {\n-            xsltReleaseRVT(ctxt, tmp);\n-        } else if (tmp->compression == XSLT_RVT_GLOBAL) {\n-            xsltRegisterPersistRVT(ctxt, tmp);\n-        } else if (tmp->compression == XSLT_RVT_FUNC_RESULT) {\n+        cur = cur->next;\n+        if (tmp->RVT->compression == XSLT_RVT_LOCAL) {\n+            xsltReleaseRVTList(ctxt, tmp);\n+        } else if (tmp->RVT->compression == XSLT_RVT_GLOBAL) {\n+            xsltRegisterPersistRVT(ctxt, tmp->RVT);\n+            xmlFree(tmp);\n+        } else if (tmp->RVT->compression == XSLT_RVT_FUNC_RESULT) {\n             /*\n              * This will either register the RVT again or move it to the\n              * context variable.\n              */\n-            xsltRegisterLocalRVT(ctxt, tmp);\n-            tmp->compression = XSLT_RVT_FUNC_RESULT;\n+            xsltRegisterLocalRVT(ctxt, tmp->RVT);\n+            tmp->RVT->compression = XSLT_RVT_FUNC_RESULT;\n+            xmlFree(tmp);\n         } else {\n             xmlGenericError(xmlGenericErrorContext,\n-                    \"xsltReleaseLocalRVTs: Unexpected RVT flag %p\\n\",\n-                    tmp->psvi);\n+                    \"xsltReleaseLocalRVTs: Unexpected RVT flag %d\\n\",\n+                    tmp->RVT->compression);\n         }\n     } while (cur != base);\n }\n@@ -2322,7 +2321,7 @@ xsltApplySequenceConstructor(xsltTransformContextPtr ctxt,\n     xmlNodePtr oldInsert, oldInst, oldCurInst, oldContextNode;\n     xmlNodePtr cur, insert, copy = NULL;\n     int level = 0, oldVarsNr;\n-    xmlDocPtr oldLocalFragmentTop;\n+    xsltRVTListPtr oldLocalFragmentTop;\n \n #ifdef XSLT_REFACTORED\n     xsltStylePreCompPtr info;\n@@ -2368,7 +2367,7 @@ xsltApplySequenceConstructor(xsltTransformContextPtr ctxt,\n     }\n     ctxt->depth++;\n \n-    oldLocalFragmentTop = ctxt->localRVT;\n+    oldLocalFragmentTop = ctxt->localRVTList;\n     oldInsert = insert = ctxt->insert;\n     oldInst = oldCurInst = ctxt->inst;\n     oldContextNode = ctxt->node;\n@@ -2602,7 +2601,7 @@ xsltApplySequenceConstructor(xsltTransformContextPtr ctxt,\n \t\t    /*\n \t\t    * Cleanup temporary tree fragments.\n \t\t    */\n-\t\t    if (oldLocalFragmentTop != ctxt->localRVT)\n+\t\t    if (oldLocalFragmentTop != ctxt->localRVTList)\n \t\t\txsltReleaseLocalRVTs(ctxt, oldLocalFragmentTop);\n \n \t\t    ctxt->insert = oldInsert;\n@@ -2697,7 +2696,7 @@ xsltApplySequenceConstructor(xsltTransformContextPtr ctxt,\n \t\t    /*\n \t\t    * Cleanup temporary tree fragments.\n \t\t    */\n-\t\t    if (oldLocalFragmentTop != ctxt->localRVT)\n+\t\t    if (oldLocalFragmentTop != ctxt->localRVTList)\n \t\t\txsltReleaseLocalRVTs(ctxt, oldLocalFragmentTop);\n \n \t\t    ctxt->insert = oldInsert;\n@@ -2763,7 +2762,7 @@ xsltApplySequenceConstructor(xsltTransformContextPtr ctxt,\n \t\t/*\n \t\t* Cleanup temporary tree fragments.\n \t\t*/\n-\t\tif (oldLocalFragmentTop != ctxt->localRVT)\n+\t\tif (oldLocalFragmentTop != ctxt->localRVTList)\n \t\t    xsltReleaseLocalRVTs(ctxt, oldLocalFragmentTop);\n \n                 ctxt->insert = oldInsert;\n@@ -2893,7 +2892,7 @@ xsltApplySequenceConstructor(xsltTransformContextPtr ctxt,\n \t\t/*\n \t\t* Cleanup temporary tree fragments.\n \t\t*/\n-\t\tif (oldLocalFragmentTop != ctxt->localRVT)\n+\t\tif (oldLocalFragmentTop != ctxt->localRVTList)\n \t\t    xsltReleaseLocalRVTs(ctxt, oldLocalFragmentTop);\n \n                 ctxt->insert = oldInsert;\n@@ -3072,7 +3071,7 @@ xsltApplyXSLTTemplate(xsltTransformContextPtr ctxt,\n     int oldVarsBase = 0;\n     xmlNodePtr cur;\n     xsltStackElemPtr tmpParam = NULL;\n-    xmlDocPtr oldUserFragmentTop;\n+    xsltRVTListPtr oldUserFragmentTop;\n #ifdef WITH_PROFILER\n     long start = 0;\n #endif\n@@ -3120,8 +3119,8 @@ xsltApplyXSLTTemplate(xsltTransformContextPtr ctxt,\n         return;\n \t}\n \n-    oldUserFragmentTop = ctxt->tmpRVT;\n-    ctxt->tmpRVT = NULL;\n+    oldUserFragmentTop = ctxt->tmpRVTList;\n+    ctxt->tmpRVTList = NULL;\n \n     /*\n     * Initiate a distinct scope of local params/variables.\n@@ -3232,16 +3231,16 @@ xsltApplyXSLTTemplate(xsltTransformContextPtr ctxt,\n     * user code should now use xsltRegisterLocalRVT() instead\n     * of the obsolete xsltRegisterTmpRVT().\n     */\n-    if (ctxt->tmpRVT) {\n-\txmlDocPtr curdoc = ctxt->tmpRVT, tmp;\n+    if (ctxt->tmpRVTList) {\n+\txsltRVTListPtr curRVTList = ctxt->tmpRVTList, tmp;\n \n-\twhile (curdoc != NULL) {\n-\t    tmp = curdoc;\n-\t    curdoc = (xmlDocPtr) curdoc->next;\n-\t    xsltReleaseRVT(ctxt, tmp);\n+\twhile (curRVTList != NULL) {\n+\t    tmp = curRVTList;\n+\t    curRVTList = curRVTList->next;\n+\t    xsltReleaseRVTList(ctxt, tmp);\n \t}\n     }\n-    ctxt->tmpRVT = oldUserFragmentTop;\n+    ctxt->tmpRVTList = oldUserFragmentTop;\n \n     /*\n     * Pop the xsl:template declaration from the stack.\n@@ -5319,7 +5318,7 @@ xsltIf(xsltTransformContextPtr ctxt, xmlNodePtr contextNode,\n \n #ifdef XSLT_FAST_IF\n     {\n-\txmlDocPtr oldLocalFragmentTop = ctxt->localRVT;\n+\txsltRVTListPtr oldLocalFragmentTop = ctxt->localRVTList;\n \n \tres = xsltPreCompEvalToBoolean(ctxt, contextNode, comp);\n \n@@ -5327,7 +5326,7 @@ xsltIf(xsltTransformContextPtr ctxt, xmlNodePtr contextNode,\n \t* Cleanup fragments created during evaluation of the\n \t* \"select\" expression.\n \t*/\n-\tif (oldLocalFragmentTop != ctxt->localRVT)\n+\tif (oldLocalFragmentTop != ctxt->localRVTList)\n \t    xsltReleaseLocalRVTs(ctxt, oldLocalFragmentTop);\n     }\n \ndiff --git a/libxslt/variables.c b/libxslt/variables.c\nindex eb98aab2..6696d9a1 100644\n--- a/libxslt/variables.c\n+++ b/libxslt/variables.c\n@@ -47,6 +47,21 @@ static const xmlChar *xsltComputingGlobalVarMarker =\n #define XSLT_VAR_IN_SELECT (1<<1)\n #define XSLT_TCTXT_VARIABLE(c) ((xsltStackElemPtr) (c)->contextVariable)\n \n+static xsltRVTListPtr\n+xsltRVTListCreate(void)\n+{\n+    xsltRVTListPtr ret;\n+\n+    ret = (xsltRVTListPtr) xmlMalloc(sizeof(xsltRVTList));\n+    if (ret == NULL) {\n+\txsltTransformError(NULL, NULL, NULL,\n+\t    \"xsltRVTListCreate: malloc failed\\n\");\n+\treturn(NULL);\n+    }\n+    memset(ret, 0, sizeof(xsltRVTList));\n+    return(ret);\n+}\n+\n /************************************************************************\n  *\t\t\t\t\t\t\t\t\t*\n  *  Result Value Tree (Result Tree Fragment) interfaces\t\t\t*\n@@ -64,6 +79,7 @@ static const xmlChar *xsltComputingGlobalVarMarker =\n xmlDocPtr\n xsltCreateRVT(xsltTransformContextPtr ctxt)\n {\n+    xsltRVTListPtr rvtList;\n     xmlDocPtr container;\n \n     /*\n@@ -76,12 +92,11 @@ xsltCreateRVT(xsltTransformContextPtr ctxt)\n     /*\n     * Reuse a RTF from the cache if available.\n     */\n-    if (ctxt->cache->RVT) {\n-\tcontainer = ctxt->cache->RVT;\n-\tctxt->cache->RVT = (xmlDocPtr) container->next;\n-\t/* clear the internal pointers */\n-\tcontainer->next = NULL;\n-\tcontainer->prev = NULL;\n+    if (ctxt->cache->rvtList) {\n+        rvtList = ctxt->cache->rvtList;\n+\tcontainer = ctxt->cache->rvtList->RVT;\n+\tctxt->cache->rvtList = rvtList->next;\n+        xmlFree(rvtList);\n \tif (ctxt->cache->nbRVT > 0)\n \t    ctxt->cache->nbRVT--;\n #ifdef XSLT_DEBUG_PROFILE_CACHE\n@@ -119,11 +134,16 @@ xsltCreateRVT(xsltTransformContextPtr ctxt)\n int\n xsltRegisterTmpRVT(xsltTransformContextPtr ctxt, xmlDocPtr RVT)\n {\n+    xsltRVTListPtr list;\n+\n     if ((ctxt == NULL) || (RVT == NULL))\n \treturn(-1);\n \n-    RVT->prev = NULL;\n+    list = xsltRVTListCreate();\n+    if (list == NULL) return(-1);\n+\n     RVT->compression = XSLT_RVT_LOCAL;\n+    list->RVT = RVT;\n \n     /*\n     * We'll restrict the lifetime of user-created fragments\n@@ -131,15 +151,13 @@ xsltRegisterTmpRVT(xsltTransformContextPtr ctxt, xmlDocPtr RVT)\n     * var/param itself.\n     */\n     if (ctxt->contextVariable != NULL) {\n-\tRVT->next = (xmlNodePtr) XSLT_TCTXT_VARIABLE(ctxt)->fragment;\n-\tXSLT_TCTXT_VARIABLE(ctxt)->fragment = RVT;\n+\tlist->next = XSLT_TCTXT_VARIABLE(ctxt)->fragment;\n+\tXSLT_TCTXT_VARIABLE(ctxt)->fragment = list;\n \treturn(0);\n     }\n \n-    RVT->next = (xmlNodePtr) ctxt->tmpRVT;\n-    if (ctxt->tmpRVT != NULL)\n-\tctxt->tmpRVT->prev = (xmlNodePtr) RVT;\n-    ctxt->tmpRVT = RVT;\n+    list->next = ctxt->tmpRVTList;\n+    ctxt->tmpRVTList = list;\n     return(0);\n }\n \n@@ -159,11 +177,16 @@ int\n xsltRegisterLocalRVT(xsltTransformContextPtr ctxt,\n \t\t     xmlDocPtr RVT)\n {\n+    xsltRVTListPtr list;\n+\n     if ((ctxt == NULL) || (RVT == NULL))\n \treturn(-1);\n \n-    RVT->prev = NULL;\n+    list = xsltRVTListCreate();\n+    if (list == NULL) return(-1);\n+\n     RVT->compression = XSLT_RVT_LOCAL;\n+    list->RVT = RVT;\n \n     /*\n     * When evaluating \"select\" expressions of xsl:variable\n@@ -174,8 +197,8 @@ xsltRegisterLocalRVT(xsltTransformContextPtr ctxt,\n     if ((ctxt->contextVariable != NULL) &&\n \t(XSLT_TCTXT_VARIABLE(ctxt)->flags & XSLT_VAR_IN_SELECT))\n     {\n-\tRVT->next = (xmlNodePtr) XSLT_TCTXT_VARIABLE(ctxt)->fragment;\n-\tXSLT_TCTXT_VARIABLE(ctxt)->fragment = RVT;\n+\tlist->next = XSLT_TCTXT_VARIABLE(ctxt)->fragment;\n+\tXSLT_TCTXT_VARIABLE(ctxt)->fragment = list;\n \treturn(0);\n     }\n     /*\n@@ -183,10 +206,8 @@ xsltRegisterLocalRVT(xsltTransformContextPtr ctxt,\n     * If not reference by a returning instruction (like EXSLT's function),\n     * then this fragment will be freed, when the instruction exits.\n     */\n-    RVT->next = (xmlNodePtr) ctxt->localRVT;\n-    if (ctxt->localRVT != NULL)\n-\tctxt->localRVT->prev = (xmlNodePtr) RVT;\n-    ctxt->localRVT = RVT;\n+    list->next = ctxt->localRVTList;\n+    ctxt->localRVTList = list;\n     return(0);\n }\n \n@@ -344,8 +365,9 @@ xsltFlagRVTs(xsltTransformContextPtr ctxt, xmlXPathObjectPtr obj, int val) {\n  * @ctxt:  an XSLT transformation context\n  * @RVT:  a result value tree (Result Tree Fragment)\n  *\n- * Either frees the RVT (which is an xmlDoc) or stores\n- * it in the context's cache for later reuse.\n+ * Either frees the RVT (which is an xmlDoc) or stores it in the context's\n+ * cache for later reuse. Preserved for ABI/API compatibility; internal use\n+ * has all migrated to xsltReleaseRVTList().\n  */\n void\n xsltReleaseRVT(xsltTransformContextPtr ctxt, xmlDocPtr RVT)\n@@ -353,36 +375,64 @@ xsltReleaseRVT(xsltTransformContextPtr ctxt, xmlDocPtr RVT)\n     if (RVT == NULL)\n \treturn;\n \n+    xsltRVTListPtr list = xsltRVTListCreate();\n+    if (list == NULL) {\n+        if (RVT->_private != NULL) {\n+            xsltFreeDocumentKeys((xsltDocumentPtr) RVT->_private);\n+            xmlFree(RVT->_private);\n+        }\n+        xmlFreeDoc(RVT);\n+        return;\n+    }\n+\n+    xsltReleaseRVTList(ctxt, list);\n+}\n+\n+/**\n+ * xsltReleaseRVTList:\n+ * @ctxt:  an XSLT transformation context\n+ * @list:  a list node containing a result value tree (Result Tree Fragment)\n+ *\n+ * Either frees the list node or stores it in the context's cache for later\n+ * reuse. Optimization to avoid adding a fallible allocation path when the\n+ * caller already has a RVT list node.\n+ */\n+void\n+xsltReleaseRVTList(xsltTransformContextPtr ctxt, xsltRVTListPtr list)\n+{\n+    if (list == NULL)\n+\treturn;\n+\n     if (ctxt && (ctxt->cache->nbRVT < 40)) {\n \t/*\n \t* Store the Result Tree Fragment.\n \t* Free the document info.\n \t*/\n-\tif (RVT->_private != NULL) {\n-\t    xsltFreeDocumentKeys((xsltDocumentPtr) RVT->_private);\n-\t    xmlFree(RVT->_private);\n-\t    RVT->_private = NULL;\n+\tif (list->RVT->_private != NULL) {\n+\t    xsltFreeDocumentKeys((xsltDocumentPtr) list->RVT->_private);\n+\t    xmlFree(list->RVT->_private);\n+\t    list->RVT->_private = NULL;\n \t}\n \t/*\n \t* Clear the document tree.\n \t*/\n-\tif (RVT->children != NULL) {\n-\t    xmlFreeNodeList(RVT->children);\n-\t    RVT->children = NULL;\n-\t    RVT->last = NULL;\n+\tif (list->RVT->children != NULL) {\n+\t    xmlFreeNodeList(list->RVT->children);\n+\t    list->RVT->children = NULL;\n+\t    list->RVT->last = NULL;\n \t}\n-\tif (RVT->ids != NULL) {\n-\t    xmlFreeIDTable((xmlIDTablePtr) RVT->ids);\n-\t    RVT->ids = NULL;\n+\tif (list->RVT->ids != NULL) {\n+\t    xmlFreeIDTable((xmlIDTablePtr) list->RVT->ids);\n+\t    list->RVT->ids = NULL;\n \t}\n \n \t/*\n \t* Reset the ownership information.\n \t*/\n-\tRVT->compression = 0;\n+\tlist->RVT->compression = 0;\n \n-\tRVT->next = (xmlNodePtr) ctxt->cache->RVT;\n-\tctxt->cache->RVT = RVT;\n+\tlist->next = ctxt->cache->rvtList;\n+\tctxt->cache->rvtList = list;\n \n \tctxt->cache->nbRVT++;\n \n@@ -394,11 +444,12 @@ xsltReleaseRVT(xsltTransformContextPtr ctxt, xmlDocPtr RVT)\n     /*\n     * Free it.\n     */\n-    if (RVT->_private != NULL) {\n-\txsltFreeDocumentKeys((xsltDocumentPtr) RVT->_private);\n-\txmlFree(RVT->_private);\n+    if (list->RVT->_private != NULL) {\n+\txsltFreeDocumentKeys((xsltDocumentPtr) list->RVT->_private);\n+\txmlFree(list->RVT->_private);\n     }\n-    xmlFreeDoc(RVT);\n+    xmlFreeDoc(list->RVT);\n+    xmlFree(list);\n }\n \n /**\n@@ -416,14 +467,17 @@ xsltReleaseRVT(xsltTransformContextPtr ctxt, xmlDocPtr RVT)\n int\n xsltRegisterPersistRVT(xsltTransformContextPtr ctxt, xmlDocPtr RVT)\n {\n+    xsltRVTListPtr list;\n+\n     if ((ctxt == NULL) || (RVT == NULL)) return(-1);\n \n+    list = xsltRVTListCreate();\n+    if (list == NULL) return(-1);\n+\n     RVT->compression = XSLT_RVT_GLOBAL;\n-    RVT->prev = NULL;\n-    RVT->next = (xmlNodePtr) ctxt->persistRVT;\n-    if (ctxt->persistRVT != NULL)\n-\tctxt->persistRVT->prev = (xmlNodePtr) RVT;\n-    ctxt->persistRVT = RVT;\n+    list->RVT = RVT;\n+    list->next = ctxt->persistRVTList;\n+    ctxt->persistRVTList = list;\n     return(0);\n }\n \n@@ -438,52 +492,55 @@ xsltRegisterPersistRVT(xsltTransformContextPtr ctxt, xmlDocPtr RVT)\n void\n xsltFreeRVTs(xsltTransformContextPtr ctxt)\n {\n-    xmlDocPtr cur, next;\n+    xsltRVTListPtr cur, next;\n \n     if (ctxt == NULL)\n \treturn;\n     /*\n     * Local fragments.\n     */\n-    cur = ctxt->localRVT;\n+    cur = ctxt->localRVTList;\n     while (cur != NULL) {\n-        next = (xmlDocPtr) cur->next;\n-\tif (cur->_private != NULL) {\n-\t    xsltFreeDocumentKeys(cur->_private);\n-\t    xmlFree(cur->_private);\n+        next = cur->next;\n+\tif (cur->RVT->_private != NULL) {\n+\t    xsltFreeDocumentKeys(cur->RVT->_private);\n+\t    xmlFree(cur->RVT->_private);\n \t}\n-\txmlFreeDoc(cur);\n+\txmlFreeDoc(cur->RVT);\n+        xmlFree(cur);\n \tcur = next;\n     }\n-    ctxt->localRVT = NULL;\n+    ctxt->localRVTList = NULL;\n     /*\n     * User-created per-template fragments.\n     */\n-    cur = ctxt->tmpRVT;\n+    cur = ctxt->tmpRVTList;\n     while (cur != NULL) {\n-        next = (xmlDocPtr) cur->next;\n-\tif (cur->_private != NULL) {\n-\t    xsltFreeDocumentKeys(cur->_private);\n-\t    xmlFree(cur->_private);\n+        next = cur->next;\n+\tif (cur->RVT->_private != NULL) {\n+\t    xsltFreeDocumentKeys(cur->RVT->_private);\n+\t    xmlFree(cur->RVT->_private);\n \t}\n-\txmlFreeDoc(cur);\n+\txmlFreeDoc(cur->RVT);\n+        xmlFree(cur);\n \tcur = next;\n     }\n-    ctxt->tmpRVT = NULL;\n+    ctxt->tmpRVTList = NULL;\n     /*\n     * Global fragments.\n     */\n-    cur = ctxt->persistRVT;\n+    cur = ctxt->persistRVTList;\n     while (cur != NULL) {\n-        next = (xmlDocPtr) cur->next;\n-\tif (cur->_private != NULL) {\n-\t    xsltFreeDocumentKeys(cur->_private);\n-\t    xmlFree(cur->_private);\n+        next = cur->next;\n+\tif (cur->RVT->_private != NULL) {\n+\t    xsltFreeDocumentKeys(cur->RVT->_private);\n+\t    xmlFree(cur->RVT->_private);\n \t}\n-\txmlFreeDoc(cur);\n+\txmlFreeDoc(cur->RVT);\n+        xmlFree(cur);\n \tcur = next;\n     }\n-    ctxt->persistRVT = NULL;\n+    ctxt->persistRVTList = NULL;\n }\n \n /************************************************************************\n@@ -571,21 +628,22 @@ xsltFreeStackElem(xsltStackElemPtr elem) {\n     * Release the list of temporary Result Tree Fragments.\n     */\n     if (elem->context) {\n-\txmlDocPtr cur;\n+\txsltRVTListPtr cur;\n \n \twhile (elem->fragment != NULL) {\n \t    cur = elem->fragment;\n-\t    elem->fragment = (xmlDocPtr) cur->next;\n-\n-            if (cur->compression == XSLT_RVT_LOCAL) {\n-\t\txsltReleaseRVT(elem->context, cur);\n-            } else if (cur->compression == XSLT_RVT_FUNC_RESULT) {\n-                xsltRegisterLocalRVT(elem->context, cur);\n-                cur->compression = XSLT_RVT_FUNC_RESULT;\n+\t    elem->fragment = cur->next;\n+\n+            if (cur->RVT->compression == XSLT_RVT_LOCAL) {\n+\t\txsltReleaseRVTList(elem->context, cur);\n+            } else if (cur->RVT->compression == XSLT_RVT_FUNC_RESULT) {\n+                xsltRegisterLocalRVT(elem->context, cur->RVT);\n+                cur->RVT->compression = XSLT_RVT_FUNC_RESULT;\n+                xmlFree(cur);\n             } else {\n                 xmlGenericError(xmlGenericErrorContext,\n                         \"xsltFreeStackElem: Unexpected RVT flag %d\\n\",\n-                        cur->compression);\n+                        cur->RVT->compression);\n             }\n \t}\n     }\n@@ -944,6 +1002,7 @@ xsltEvalVariable(xsltTransformContextPtr ctxt, xsltStackElemPtr variable,\n \t} else {\n \t    if (variable->tree) {\n \t\txmlDocPtr container;\n+                xsltRVTListPtr rvtList;\n \t\txmlNodePtr oldInsert;\n \t\txmlDocPtr  oldOutput;\n                 const xmlChar *oldLastText;\n@@ -968,7 +1027,11 @@ xsltEvalVariable(xsltTransformContextPtr ctxt, xsltStackElemPtr variable,\n \t\t* when the variable is freed, it will also free\n \t\t* the Result Tree Fragment.\n \t\t*/\n-\t\tvariable->fragment = container;\n+                rvtList = xsltRVTListCreate();\n+                if (rvtList == NULL)\n+                    goto error;\n+                rvtList->RVT = container;\n+\t\tvariable->fragment = rvtList;\n                 container->compression = XSLT_RVT_LOCAL;\n \n \t\toldOutput = ctxt->output;\n@@ -2361,5 +2424,3 @@ local_variable_found:\n \n     return(valueObj);\n }\n-\n-\ndiff --git a/libxslt/xsltInternals.h b/libxslt/xsltInternals.h\nindex 6faa07db..ec84e1df 100644\n--- a/libxslt/xsltInternals.h\n+++ b/libxslt/xsltInternals.h\n@@ -1410,6 +1410,8 @@ struct _xsltStylePreComp {\n \n #endif /* XSLT_REFACTORED */\n \n+typedef struct _xsltRVTList xsltRVTList;\n+typedef xsltRVTList *xsltRVTListPtr;\n \n /*\n  * The in-memory structure corresponding to an XSLT Variable\n@@ -1427,7 +1429,7 @@ struct _xsltStackElem {\n     xmlNodePtr tree;\t\t/* the sequence constructor if no eval\n \t\t\t\t    string or the location */\n     xmlXPathObjectPtr value;\t/* The value if computed */\n-    xmlDocPtr fragment;\t\t/* The Result Tree Fragments (needed for XSLT 1.0)\n+    xsltRVTListPtr fragment;\t/* The Result Tree Fragments (needed for XSLT 1.0)\n \t\t\t\t   which are bound to the variable's lifetime. */\n     int level;                  /* the depth in the tree;\n                                    -1 if persistent (e.g. a given xsl:with-param) */\n@@ -1639,10 +1641,15 @@ struct _xsltStylesheet {\n     unsigned long opCount;\n };\n \n+struct _xsltRVTList {\n+  xmlDocPtr RVT;\n+  xsltRVTListPtr next;\n+};\n+\n typedef struct _xsltTransformCache xsltTransformCache;\n typedef xsltTransformCache *xsltTransformCachePtr;\n struct _xsltTransformCache {\n-    xmlDocPtr RVT;\n+    xsltRVTListPtr rvtList;\n     int nbRVT;\n     xsltStackElemPtr stackItems;\n     int nbStackItems;\n@@ -1749,8 +1756,8 @@ struct _xsltTransformContext {\n      * handling of temporary Result Value Tree\n      * (XSLT 1.0 term: \"Result Tree Fragment\")\n      */\n-    xmlDocPtr       tmpRVT;\t\t/* list of RVT without persistance */\n-    xmlDocPtr       persistRVT;\t\t/* list of persistant RVTs */\n+    xsltRVTListPtr  tmpRVTList;\t        /* list of RVT without persistance */\n+    xsltRVTListPtr  persistRVTList;     /* list of persistant RVTs */\n     int             ctxtflags;          /* context processing flags */\n \n     /*\n@@ -1783,7 +1790,7 @@ struct _xsltTransformContext {\n     xmlDocPtr initialContextDoc;\n     xsltTransformCachePtr cache;\n     void *contextVariable; /* the current variable item */\n-    xmlDocPtr localRVT; /* list of local tree fragments; will be freed when\n+    xsltRVTListPtr localRVTList; /* list of local tree fragments; will be freed when\n \t\t\t   the instruction which created the fragment\n                            exits */\n     xmlDocPtr localRVTBase; /* Obsolete */\n@@ -1932,8 +1939,11 @@ XSLTPUBFUN int XSLTCALL\n XSLTPUBFUN void XSLTCALL\n \t\t\txsltFreeRVTs\t\t(xsltTransformContextPtr ctxt);\n XSLTPUBFUN void XSLTCALL\n-\t\t\txsltReleaseRVT\t\t(xsltTransformContextPtr ctxt,\n+\t\t\txsltReleaseRVT          (xsltTransformContextPtr ctxt,\n \t\t\t\t\t\t xmlDocPtr RVT);\n+XSLTPUBFUN void XSLTCALL\n+\t\t\txsltReleaseRVTList\t(xsltTransformContextPtr ctxt,\n+\t\t\t\t\t\t xsltRVTListPtr list);\n /*\n  * Extra functions for Attribute Value Templates\n  */\n@@ -1992,4 +2002,3 @@ XSLTPUBFUN int XSLTCALL\n #endif\n \n #endif /* __XML_XSLT_H__ */\n-\n-- \nGitLab\n\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://gnome/sources/libxslt/1.1/libxslt-1.1.43.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "5a3d6b383ca5afc235b171118e90f5ff6aa27e9fea3303065231a6d403f0183a"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://gitlab.gnome.org/GNOME/libxslt"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "084z0az33fpli83kchv6n42pa064708r-python3.13-packaging-25.0",
      "name": "packaging",
      "version": "25.0",
      "description": "Core utilities for Python packages",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-2-Clause"
          }
        },
        {
          "license": {
            "id": "Apache-2.0"
          }
        }
      ],
      "purl": "pkg:nix/packaging@25.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/p/packaging/packaging-25.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://packaging.pypa.io/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "0888cb13fkvr2ic132bd5xx81drfjngv-libselinux-3.8.1-bin",
      "name": "libselinux",
      "version": "3.8.1",
      "description": "SELinux core library",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-2.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/libselinux@3.8.1",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- libselinux/src/Makefile\n+++ libselinux/src/Makefile\n@@ -147,7 +147,10 @@ endif\n \n SWIGRUBY = swig -Wall -ruby -o $(SWIGRUBYCOUT) -outdir ./ $(DISABLE_FLAGS)\n \n-all: $(LIBA) $(LIBSO) $(LIBPC)\n+all: $(LIBA) $(LIBPC)\n+ifneq ($(DISABLE_SHARED),y)\n+all: $(LIBSO)\n+endif\n \n pywrap: all selinuxswig_python_exception.i\n \tCFLAGS=\"$(CPPFLAGS) $(CFLAGS) $(SWIG_CFLAGS)\" $(PYTHON) setup.py build_ext\n@@ -186,11 +189,13 @@ $(SWIGRUBYCOUT): $(SWIGRUBYIF)\n install: all \n \ttest -d $(DESTDIR)$(LIBDIR) || install -m 755 -d $(DESTDIR)$(LIBDIR)\n \tinstall -m 644 $(LIBA) $(DESTDIR)$(LIBDIR)\n-\ttest -d $(DESTDIR)$(SHLIBDIR) || install -m 755 -d $(DESTDIR)$(SHLIBDIR)\n-\tinstall -m 755 $(LIBSO) $(DESTDIR)$(SHLIBDIR)\n \ttest -d $(DESTDIR)$(LIBDIR)/pkgconfig || install -m 755 -d $(DESTDIR)$(LIBDIR)/pkgconfig\n \tinstall -m 644 $(LIBPC) $(DESTDIR)$(LIBDIR)/pkgconfig\n+ifneq ($(DISABLE_SHARED),y)\n+\ttest -d $(DESTDIR)$(SHLIBDIR) || install -m 755 -d $(DESTDIR)$(SHLIBDIR)\n+\tinstall -m 755 $(LIBSO) $(DESTDIR)$(SHLIBDIR)\n \tln -sf --relative $(DESTDIR)$(SHLIBDIR)/$(LIBSO) $(DESTDIR)$(LIBDIR)/$(TARGET)\n+endif\n \n install-pywrap: pywrap\n \tCFLAGS=\"$(CPPFLAGS) $(CFLAGS) $(SWIG_CFLAGS)\" $(PYTHON) -m pip install --prefix=$(PREFIX) `test -n \"$(DESTDIR)\" && echo --root $(DESTDIR) --ignore-installed --no-deps` $(PYTHON_SETUP_ARGS) .\n--- libselinux/utils/Makefile\n+++ libselinux/utils/Makefile\n@@ -53,7 +53,13 @@ else\n TARGETS=$(patsubst %.c,%,$(sort $(wildcard *.c)))\n endif\n \n-sefcontext_compile: LDLIBS += ../src/libselinux.a $(PCRE_LDLIBS) -lsepol\n+sefcontext_compile: LDLIBS += ../src/libselinux.a -lsepol\n+\n+PCRE_USERS = matchpathcon sefcontext_compile selabel_compare \\\n+\tselabel_digest selabel_get_digests_all_partial_matches \\\n+\tselabel_lookup selabel_lookup_best_match \\\n+\tselabel_partial_match\n+$(PCRE_USERS): LDLIBS += $(PCRE_LDLIBS)\n \n all: $(TARGETS)\n \n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 6c2af45ec8cff9b282d599dc098db0ca127bdc59 Mon Sep 17 00:00:00 2001\nFrom: Renato Caldas <renato@calgera.com>\nDate: Thu, 29 Jun 2023 13:59:11 +0100\nSubject: [PATCH] libselinux: restore: drop the obsolete LSF transitional API.\n\nThe preferred way to enable LSF support on 32 bit systems is to define\n_FILE_OFFSET_BITS=64 when building selinux.\n\nUpstream-Status: Submitted [https://github.com/SELinuxProject/selinux/pull/401]\n\nSigned-off-by: Renato Caldas <renato@calgera.com>\n---\n src/selinux_restorecon.c | 4 ++--\n 1 file changed, 2 insertions(+), 2 deletions(-)\n\ndiff --git a/src/selinux_restorecon.c b/src/selinux_restorecon.c\nindex 38f10f1..5b3d035 100644\n--- a/src/selinux_restorecon.c\n+++ b/src/selinux_restorecon.c\n@@ -436,7 +436,7 @@ static int filespec_add(ino_t ino, const char *con, const char *file,\n \tfile_spec_t *prevfl, *fl;\n \tuint32_t h;\n \tint ret;\n-\tstruct stat64 sb;\n+\tstruct stat sb;\n \n \t__pthread_mutex_lock(&fl_mutex);\n \n@@ -450,7 +450,7 @@ static int filespec_add(ino_t ino, const char *con, const char *file,\n \tfor (prevfl = &fl_head[h], fl = fl_head[h].next; fl;\n \t     prevfl = fl, fl = fl->next) {\n \t\tif (ino == fl->ino) {\n-\t\t\tret = lstat64(fl->file, &sb);\n+\t\t\tret = lstat(fl->file, &sb);\n \t\t\tif (ret < 0 || sb.st_ino != ino) {\n \t\t\t\tfreecon(fl->con);\n \t\t\t\tfree(fl->file);\n-- \n2.25.1\n\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git libselinux/include/selinux/selinux.h libselinux/include/selinux/selinux.h\nindex f3cf5a209..f64896b7a 100644\n--- libselinux/include/selinux/selinux.h\n+++ libselinux/include/selinux/selinux.h\n@@ -537,7 +537,7 @@ extern int matchpathcon_index(const char *path,\n    with the same inode (e.g. due to multiple hard links).  If so, then\n    use the latter of the two specifications based on their order in the \n    file contexts configuration.  Return the used specification index. */\n-#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64 && __BITS_PER_LONG < 64\n+#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64 && defined(__INO64_T_TYPE) && !defined(__INO_T_MATCHES_INO64_T)\n #define matchpathcon_filespec_add matchpathcon_filespec_add64\n #endif\n extern int matchpathcon_filespec_add(ino_t ino, int specind, const char *file);\ndiff --git libselinux/src/matchpathcon.c libselinux/src/matchpathcon.c\nindex 51f0e4ff9..ab7c3090a 100644\n--- libselinux/src/matchpathcon.c\n+++ libselinux/src/matchpathcon.c\n@@ -261,7 +261,7 @@ int matchpathcon_filespec_add(ino_t ino, int specind, const char *file)\n \treturn -1;\n }\n \n-#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64 && __BITS_PER_LONG < 64\n+#if (defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64) && defined(__INO64_T_TYPE) && !defined(__INO_T_MATCHES_INO64_T)\n /* alias defined in the public header but we undefine it here */\n #undef matchpathcon_filespec_add\n \n@@ -280,9 +280,13 @@ int matchpathcon_filespec_add(unsigned long ino, int specind,\n {\n \treturn matchpathcon_filespec_add64(ino, specind, file);\n }\n+#elif (defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64) || defined(__INO_T_MATCHES_INO64_T)\n+\n+static_assert(sizeof(uint64_t) == sizeof(ino_t), \"inode size mismatch\");\n+\n #else\n \n-static_assert(sizeof(unsigned long) == sizeof(ino_t), \"inode size mismatch\");\n+static_assert(sizeof(uint32_t) == sizeof(ino_t), \"inode size mismatch\");\n \n #endif\n \n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/SELinuxProject/selinux/releases/download/3.8.1/libselinux-3.8.1.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "ec2d2789f931152d21c1db1eb4bc202ce4eccede34d9be9e360e3b45243cee2c"
            }
          ]
        },
        {
          "type": "website",
          "url": "http://userspace.selinuxproject.org"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "092z0kc1a92hlyvdmlcsbzm04320rjqn-pcre2-10.46-bin",
      "name": "pcre2",
      "version": "10.46",
      "description": "Perl Compatible Regular Expressions",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/pcre2@10.46",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/PhilipHazel/pcre2/releases/download/pcre2-10.46/pcre2-10.46.tar.bz2",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "15fbc5aba6beee0b17aecb04602ae39432393aba1ebd8e39b7cabf7db883299f"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.pcre.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "096dj4ivcmakn8h358dqgwr126wjvdc5-libgpg-error-1.55-info",
      "name": "libgpg-error",
      "version": "1.55",
      "description": "Small library that defines common error values for all GnuPG components",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "LGPL-2.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/libgpg-error@1.55",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://gnupg/libgpg-error/libgpg-error-1.55.tar.bz2",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "95b178148863f07d45df0cea67e880a79b9ef71f5d230baddc0071128516ef78"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnupg.org/software/libgpg-error/index.html"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "0a184ki65w8ra3qmn2qc8clamfjmxdfz-autoconf-2.72",
      "name": "autoconf",
      "version": "2.72",
      "description": "Part of the GNU Build System",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/autoconf@2.72",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://gnu/autoconf/autoconf-2.72.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "ba885c1319578d6c94d46e9b0dceb4014caafe2490e437a0dbca3f270a223f5a"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/autoconf/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "0b9fbgidfigw937mm1h8bzgnq5lbg9ss-libtool-2.5.4",
      "name": "libtool",
      "version": "2.5.4",
      "description": "GNU Libtool, a generic library support script",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-2.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/libtool@2.5.4",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://ftpmirror.gnu.org/libtool/libtool-2.5.4.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "da8ebb2ce4dcf46b90098daf962cffa68f4b4f62ea60f798d0ef12929ede6adf"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/libtool/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "0brgyni03z8ghp0x8w2d9k00nv876vbz-libffi-3.5.2-info",
      "name": "libffi",
      "version": "3.5.2",
      "description": "Foreign function call interface library",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/libffi@3.5.2",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From e52a0790a9b80492cba2907c27d0a9e4248b6608 Mon Sep 17 00:00:00 2001\nFrom: Jon Hermansen <jon@jh86.org>\nDate: Tue, 28 Oct 2025 18:02:39 -0400\nSubject: [PATCH] fix tsan tests on FreeBSD by linking to pthread\n\n---\n testsuite/lib/libffi.exp | 4 ++++\n 1 file changed, 4 insertions(+)\n\ndiff --git a/testsuite/lib/libffi.exp b/testsuite/lib/libffi.exp\nindex 81eff7752..308db6f8d 100644\n--- a/testsuite/lib/libffi.exp\n+++ b/testsuite/lib/libffi.exp\n@@ -407,6 +407,10 @@ proc libffi_target_compile { source dest type options } {\n             lappend options \"libs= -lpthread\"\n         }\n \n+        if { [string match \"*-*-freebsd*\" $target_triplet] } {\n+            lappend options \"libs= -lpthread\"\n+        }\n+\n         lappend options \"libs= -lffi\"\n \n         if { [string match \"aarch64*-*-linux*\" $target_triplet] } {\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/libffi/libffi/releases/download/v3.5.2/libffi-3.5.2.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "f3a3082a23b37c293a4fcd1053147b371f2ff91fa7ea1b2a52e335676bac82dc"
            }
          ]
        },
        {
          "type": "website",
          "url": "http://sourceware.org/libffi/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "0ci3da6db19gckz0i5j3br992cspvlz1-cairo-1.18.4",
      "name": "cairo",
      "version": "1.18.4",
      "description": "2D graphics library with support for multiple output devices",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "LGPL-2.0-or-later"
          }
        },
        {
          "license": {
            "id": "MPL-1.0"
          }
        }
      ],
      "purl": "pkg:nix/cairo@1.18.4",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://cairographics.org/releases/cairo-1.18.4.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "445ed8208a6e4823de1226a74ca319d3600e83f6369f99b14265006599c32ccb"
            }
          ]
        },
        {
          "type": "website",
          "url": "http://cairographics.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "0dwpxnrhfw71dwm2x3nkc357w5cr3jx9-python3.13-trove-classifiers-2025.9.11.17-dist",
      "name": "trove-classifiers",
      "version": "2025.9.11.17",
      "description": "Canonical source for classifiers on PyPI",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "Apache-2.0"
          }
        }
      ],
      "purl": "pkg:nix/trove-classifiers@2025.9.11.17",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/t/trove_classifiers/trove_classifiers-2025.9.11.17.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "931ca9841a5e9c9408bc2ae67b50d28acf85bef56219b56860876dd1f2d024dd"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/pypa/trove-classifiers"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "0h44xmkblgg5imipi7qpf9ss7cl9wfqx-curl-8.17.0",
      "name": "curl",
      "version": "8.17.0",
      "description": "Command line tool for transferring files with URL syntax",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "curl"
          }
        }
      ],
      "purl": "pkg:nix/curl@8.17.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://curl.haxx.se/download/curl-8.17.0.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "955f6e729ad6b3566260e8fef68620e76ba3c31acf0a18524416a185acf77992"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://curl.se/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "0i6mlcgkv08hips4rmqd1fksjd0adsbb-python3.13-sphinxcontrib-applehelp-2.0.0-dist",
      "name": "sphinxcontrib-applehelp",
      "version": "2.0.0",
      "description": "Sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-2-Clause"
          }
        }
      ],
      "purl": "pkg:nix/sphinxcontrib-applehelp@2.0.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/s/sphinxcontrib_applehelp/sphinxcontrib_applehelp-2.0.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/sphinx-doc/sphinxcontrib-applehelp"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "0ig1pjbqhsnl0zv2mmvi1zdybbcrmcka-tzdata-2025b-bin",
      "name": "tzdata",
      "version": "2025b",
      "description": "Database of current and historical time zones",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        },
        {
          "license": {
            "name": "Public Domain"
          }
        }
      ],
      "purl": "pkg:nix/tzdata@2025b",
      "externalReferences": [
        {
          "type": "website",
          "url": "http://www.iana.org/time-zones"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "0iz8c9d6dyq3fy9f9shk3fj7y085f7i1-gnu-config-2024-01-01",
      "name": "gnu-config",
      "version": "2024-01-01",
      "description": "Attempt to guess a canonical system name",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0"
          }
        }
      ],
      "purl": "pkg:nix/gnu-config@2024-01-01",
      "externalReferences": [
        {
          "type": "website",
          "url": "https://savannah.gnu.org/projects/config"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "0jbhd25lfag1yicjisiyhx7cpkk2za40-python3.13-pycparser-2.23-dist",
      "name": "pycparser",
      "version": "2.23",
      "description": "C parser in Python",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/pycparser@2.23",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/eliben/pycparser/archive/refs/tags/release_v2.23.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "764b5e33c562cd87fd64b3ce7bca1de4266083b6b77ece07cbeb7c6c62d5fc62"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/eliben/pycparser"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "0k23p960xrgxha5qas25jzvb9nfgsl6h-zlib-1.3.1-static",
      "name": "zlib",
      "version": "1.3.1",
      "description": "Lossless data-compression library",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "Zlib"
          }
        }
      ],
      "purl": "pkg:nix/zlib@1.3.1",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/madler/zlib/releases/download/v1.3.1/zlib-1.3.1.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "9a93b2b7dfdac77ceba5a558a580e74667dd6fede4585b91eefb60f03b72df23"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://zlib.net"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "0l61kmfjbxb2hj5cmyyfzsm38h8cya7g-python3.13-webencodings-0.5.1",
      "name": "webencodings",
      "version": "0.5.1",
      "description": "Character encoding aliases for legacy web content",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/webencodings@0.5.1",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/w/webencodings/webencodings-0.5.1.tar.gz"
        },
        {
          "type": "website",
          "url": "https://github.com/SimonSapin/python-webencodings"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "0lrgmvfxz91jxbjsikkzwwblcp7xmrc8-libev-4.33",
      "name": "libev",
      "version": "4.33",
      "description": "High-performance event loop/event model with lots of features",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-2-Clause"
          }
        }
      ],
      "purl": "pkg:nix/libev@4.33",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "http://dist.schmorp.de/libev/Attic/libev-4.33.tar.gz"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "0ncar1h0x9mlv74sjmx1ggh70f04vk4b-readline-8.3p1-info",
      "name": "readline",
      "version": "8.3p1",
      "description": "Library for interactive line editing",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/readline@8.3p1",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "This patch is to make sure that `libncurses' is among the `NEEDED'\ndependencies of `libreadline.so' and `libhistory.so'.\n\nFailing to do that, applications linking against Readline are\nforced to explicitly link against libncurses as well; in addition,\nthis trick doesn't work when using GNU ld's `--as-needed'.\n\n--- shlib/Makefile.in\t2009-01-06 18:03:22.000000000 +0100\n+++ shlib/Makefile.in\t2009-07-27 14:43:25.000000000 +0200\n@@ -84,7 +84,7 @@ SHOBJ_LDFLAGS = @SHOBJ_LDFLAGS@\n SHOBJ_XLDFLAGS = @SHOBJ_XLDFLAGS@\n SHOBJ_LIBS = @SHOBJ_LIBS@\n \n-SHLIB_XLDFLAGS = @LDFLAGS@ @SHLIB_XLDFLAGS@\n+SHLIB_XLDFLAGS = @LDFLAGS@ @SHLIB_XLDFLAGS@ -lncurses\n SHLIB_LIBS = @SHLIB_LIBS@\n \n SHLIB_DOT = @SHLIB_DOT@\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff -ru -x '*~' readline-6.3-orig/support/shobj-conf readline-6.3/support/shobj-conf\n--- support/shobj-conf\t2014-02-24 03:06:29.000000000 +0100\n+++ support/shobj-conf\t2014-07-22 11:18:52.000000000 +0200\n@@ -159,9 +159,6 @@\n \t# Darwin 8 == Mac OS X 10.4; Mac OS X 10.N == Darwin N+4\n \t*)\n \t\tcase \"${host_os}\" in\n-\t\tdarwin[89]*|darwin1[012]*)\n-\t\t\tSHOBJ_ARCHFLAGS=\n-\t\t\t;;\n \t\t *) \t# Mac OS X 10.9 (Mavericks) and later\n \t\t\tSHOBJ_ARCHFLAGS=\n \t\t\t# for 32 and 64bit universal library\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "\t\t\t   READLINE PATCH REPORT\n\t\t\t   =====================\n\nReadline-Release: 8.3\nPatch-ID: readline83-001\n\nBug-Reported-by:\tDmitri A. Sergatskov <dasergatskov@gmail.com>\nBug-Reference-ID:\t<CAO+XyQ+ipUzFiXvRrDbTstfm1heZrerjvZGVaC60y=txMgyP+g@mail.gmail.com>\nBug-Reference-URL:\t\n\nBug-Description:\n\nIf an application uses readline's event hook, it is called while waiting for\ninput. There is a bug in the function that waits for available input that\ncauses it not to read that input under certain circumstances, resulting in\na loop where the event hook continues to be called, but there is no input\nto stop it.\n\nPatch (apply with `patch -p0'):\n\n*** ../readline-8.3/input.c\tFri May  2 09:29:05 2025\n--- input.c\tTue Jul  8 15:37:13 2025\n***************\n*** 262,266 ****\n    tty = fileno (rl_instream);\n  \n!   /* Move this up here to give it first shot, but it can't set chars_avail */\n    /* XXX - need rl_chars_available_hook? */\n    if (rl_input_available_hook)\n--- 262,267 ----\n    tty = fileno (rl_instream);\n  \n!   /* Move this up here to give it first shot, but it can't set chars_avail,\n!      so we assume a single character is available. */\n    /* XXX - need rl_chars_available_hook? */\n    if (rl_input_available_hook)\n***************\n*** 269,272 ****\n--- 270,275 ----\n        if (result == 0)\n          result = -1;\n+       else\n+         chars_avail = 1;\n      }\n  \n***************\n*** 286,289 ****\n--- 289,293 ----\n        if (result <= 0)\n  \treturn 0;\t/* Nothing to read. */\n+       result = -1;\t/* there is something, so check how many chars below */\n      }\n  #endif\n*** ../readline-8.3/patchlevel\t2013-11-15 08:11:11.000000000 -0500\n--- patchlevel\t2014-03-21 08:28:40.000000000 -0400\n***************\n*** 1,3 ****\n  # Do not edit -- exists only for use by patch\n  \n! 0\n--- 1,3 ----\n  # Do not edit -- exists only for use by patch\n  \n! 1\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://gnu/readline/readline-8.3.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "fe5383204467828cd495ee8d1d3c037a7eba1389c22bc6a041f627976f9061cc"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://savannah.gnu.org/projects/readline/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "0p62bhqhfj38m9xiv9kmdgsawhgyq63h-patchelf-0.15.2",
      "name": "patchelf",
      "version": "0.15.2",
      "description": "Small utility to modify the dynamic linker and RPATH of ELF executables",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/patchelf@0.15.2",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/NixOS/patchelf/releases/download/0.15.2/patchelf-0.15.2.tar.bz2",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "17745f564159c8e228fc412da65a2048b846c4b6b4220b77cbf22416e02f2d7c"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/NixOS/patchelf"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "0ph7gsjvhg5xzq3nwxld7h4cfx3gjb87-python3.13-zipp-3.23.0",
      "name": "zipp",
      "version": "3.23.0",
      "description": "Pathlib-compatible object wrapper for zip files",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/zipp@3.23.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/jaraco/zipp/archive/refs/tags/v3.23.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "89aa3b01ca352adbf2b75b90083fe57b8b40772569c5f28f8b74d14f5d981ee5"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/jaraco/zipp"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "0qasqh94g41x608zx2qy5mykygvg6wnk-python3.13-sphinxcontrib-jsmath-1.0.1",
      "name": "sphinxcontrib-jsmath",
      "version": "1.0.1",
      "description": "Sphinx extension which renders display math in HTML via JavaScript",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "0BSD"
          }
        }
      ],
      "purl": "pkg:nix/sphinxcontrib-jsmath@1.0.1",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/s/sphinxcontrib-jsmath/sphinxcontrib-jsmath-1.0.1.tar.gz"
        },
        {
          "type": "website",
          "url": "https://github.com/sphinx-doc/sphinxcontrib-jsmath"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "0rxahp0ckjwz7kmnh8vzwfs8ir8yrf5r-gmp-6.3.0",
      "name": "gmp",
      "version": "6.3.0",
      "description": "GNU multiple precision arithmetic library",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "LGPL-3.0-only"
          }
        },
        {
          "license": {
            "id": "GPL-2.0-only"
          }
        }
      ],
      "purl": "pkg:nix/gmp@6.3.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://ftpmirror.gnu.org/gmp/gmp-6.3.0.tar.bz2",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "ac28211a7cfb609bae2e2c8d6058d66c8fe96434f740cf6fe2e47b000d1c20cb"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://gmplib.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "0sf11lcbcbsqbj18sx26rg352m08rk7y-ed-1.22.2",
      "name": "ed",
      "version": "1.22.2",
      "description": "GNU implementation of the standard Unix editor",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/ed@1.22.2",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://ftpmirror.gnu.org/ed/ed-1.22.2.tar.lz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "f58d15242056e15af76f13f34c60d890fa2a2d5cb0abef91c115e4d83794ffe3"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/ed/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "0slqjacbil9syf08gigwxc08qxiaxm47-asciidoc-10.2.1-dist",
      "name": "asciidoc",
      "version": "10.2.1",
      "description": "Text-based document generation system",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-2.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/asciidoc@10.2.1",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/asciidoc-py/asciidoc-py/archive/10.2.1.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "b5ddc2ef14d67d2cdda3d05bcf47475b6a0f68241899413d1f6b1415f8391c7d"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://asciidoc-py.github.io/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "0zlnq9s84q2im6fcjm4kvgp74s7mck6l-libsepol-3.8.1-dev",
      "name": "libsepol",
      "version": "3.8.1",
      "description": "SELinux binary policy manipulation library",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-2.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/libsepol@3.8.1",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/SELinuxProject/selinux/releases/download/3.8.1/libsepol-3.8.1.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "0e78705305f955abd4c0654d37a5477ee26349ab74db9e2b03a7868897ae1ddf"
            }
          ]
        },
        {
          "type": "website",
          "url": "http://userspace.selinuxproject.org"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "102sjxyq7cgwpqmk1rbnqxzf1hdryj5m-perl5.40.0-gettext-1.07-devdoc",
      "name": "gettext",
      "version": "1.07",
      "description": "Perl extension for emulating gettext-related API",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "Artistic-1.0"
          }
        },
        {
          "license": {
            "id": "GPL-1.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/gettext@1.07",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://cpan/authors/id/P/PV/PVANDRY/gettext-1.07.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "909d47954697e7c04218f972915b787bd1244d75e3bd01620bc167d5bbc49c15"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://metacpan.org/dist/gettext"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "1067wd13z800ikk53x47f77v2k37983d-c-ares-1.34.5",
      "name": "c-ares",
      "version": "1.34.5",
      "description": "C library for asynchronous DNS requests",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/c-ares@1.34.5",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/c-ares/c-ares/releases/download/v1.34.5/c-ares-1.34.5.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "7d935790e9af081c25c495fd13c2cfcda4792983418e96358ef6e7320ee06346"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://c-ares.haxx.se"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "12qcfbv6bgmxi1jd2dcddy25ijpcgj60-attr-2.5.2",
      "name": "attr",
      "version": "2.5.2",
      "description": "Library and tools for manipulating extended attributes",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-2.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/attr@2.5.2",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 8a80d895dfd779373363c3a4b62ecce5a549efb2 Mon Sep 17 00:00:00 2001\nFrom: \"Haelwenn (lanodan) Monnier\" <contact@hacktivis.me>\nDate: Sat, 30 Mar 2024 10:17:10 +0100\nSubject: tools/attr.c: Add missing libgen.h include for basename(3)\n\nFixes compilation issue with musl and modern C99 compilers.\n\nSee: https://bugs.gentoo.org/926294\n---\n tools/attr.c | 1 +\n 1 file changed, 1 insertion(+)\n\ndiff --git a/tools/attr.c b/tools/attr.c\nindex f12e4af..6a3c1e9 100644\n--- a/tools/attr.c\n+++ b/tools/attr.c\n@@ -28,6 +28,7 @@\n #include <errno.h>\n #include <string.h>\n #include <locale.h>\n+#include <libgen.h>\n \n #include <attr/attributes.h>\n \n-- \ncgit v1.1\n\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://download.savannah.gnu.org/releases/attr/attr-2.5.2.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "39bf67452fa41d0948c2197601053f48b3d78a029389734332a6309a680c6c87"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://savannah.nongnu.org/projects/attr/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "1315vzcs2vm98pgsdzwsxm7i2mzjc0g7-libxext-1.3.6-dev",
      "name": "libxext",
      "version": "1.3.6",
      "description": "Xlib-based library for common extensions to the X11 protocol",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT-open-group"
          }
        },
        {
          "license": {
            "id": "X11"
          }
        },
        {
          "license": {
            "id": "HPND"
          }
        },
        {
          "license": {
            "id": "HPND-sell-variant"
          }
        },
        {
          "license": {
            "id": "HPND-doc-sell"
          }
        },
        {
          "license": {
            "id": "HPND-doc"
          }
        },
        {
          "license": {
            "id": "MIT"
          }
        },
        {
          "license": {
            "id": "ISC"
          }
        }
      ],
      "purl": "pkg:nix/libxext@1.3.6",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://xorg/individual/lib/libXext-1.3.6.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "edb59fa23994e405fdc5b400afdf5820ae6160b94f35e3dc3da4457a16e89753"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://gitlab.freedesktop.org/xorg/lib/libxext"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "14crsps8ws2wb3l25lczywjydryrlzm5-python3.13-iniconfig-2.1.0",
      "name": "iniconfig",
      "version": "2.1.0",
      "description": "Brain-dead simple parsing of ini files",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/iniconfig@2.1.0",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/pyproject.toml b/pyproject.toml\nindex 05cd96e..eb2000f 100644\n--- a/pyproject.toml\n+++ b/pyproject.toml\n@@ -1,12 +1,12 @@\n [build-system]\n build-backend = \"hatchling.build\"\n requires = [\n-  \"hatch-vcs\",\n   \"hatchling>=1.26\",\n ]\n \n [project]\n name = \"iniconfig\"\n+version = \"2.1.0\"\n description = \"brain-dead simple config-ini parsing\"\n readme = \"README.rst\"\n license = \"MIT\"\n@@ -15,9 +15,6 @@ authors = [\n     { name = \"Holger Krekel\", email = \"holger.krekel@gmail.com\" },\n ]\n requires-python = \">=3.8\"\n-dynamic = [\n-  \"version\",\n-]\n classifiers = [\n     \"Development Status :: 4 - Beta\",\n     \"Intended Audience :: Developers\",\n@@ -40,12 +37,6 @@ classifiers = [\n Homepage = \"https://github.com/pytest-dev/iniconfig\"\n \n \n-[tool.hatch.version]\n-source = \"vcs\"\n-\n-[tool.hatch.build.hooks.vcs]\n-version-file = \"src/iniconfig/_version.py\"\n-\n [tool.hatch.build.targets.sdist]\n include = [\n     \"/src\",\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/i/iniconfig/iniconfig-2.1.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/pytest-dev/iniconfig"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "17djp5v30333dlf5g70i4hs1mb4qlxbd-libtiff-4.7.1",
      "name": "libtiff",
      "version": "4.7.1",
      "description": "Library and utilities for working with the TIFF image file format",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "libtiff"
          }
        }
      ],
      "purl": "pkg:nix/libtiff@4.7.1",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/cmake/AutotoolsVersion.cmake b/cmake/AutotoolsVersion.cmake\nindex f93f5cf0..fd33df59 100644\n--- a/cmake/AutotoolsVersion.cmake\n+++ b/cmake/AutotoolsVersion.cmake\n@@ -41,7 +41,7 @@ set(LIBTIFF_VERSION \"${LIBTIFF_MAJOR_VERSION}.${LIBTIFF_MINOR_VERSION}.${LIBTIFF\n set(LIBTIFF_VERSION_FULL \"${LIBTIFF_VERSION}${LIBTIFF_ALPHA_VERSION}\")\n \n # Get release version from file VERSION\n-FILE(STRINGS \"${CMAKE_CURRENT_SOURCE_DIR}/VERSION\" LIBTIFF_RELEASE_VERSION)\n+FILE(STRINGS \"${CMAKE_CURRENT_SOURCE_DIR}/VERSION.txt\" LIBTIFF_RELEASE_VERSION)\n \n # Package date - get it from file RELEASE-DATE\n FILE(STRINGS \"${CMAKE_CURRENT_SOURCE_DIR}/RELEASE-DATE\" LIBTIFF_RELEASE_DATE)\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://gitlab.com/api/v4/projects/libtiff%2Flibtiff/repository/archive.tar.gz?sha=v4.7.1",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "5220bab3cea2ed46af5bce842a6ef8a0f56511a72fa0a9b05bb2844e3a6735a2"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://libtiff.gitlab.io/libtiff"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "1amh23481gd0d8604d5mlxj3fiba3sg3-python3.13-pytest-8.4.2",
      "name": "pytest",
      "version": "8.4.2",
      "description": "Framework for writing tests",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/pytest@8.4.2",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/p/pytest/pytest-8.4.2.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://docs.pytest.org"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "1byrgs1ziv2v030i1z46plpqdn7w0483-krb5-1.22.1",
      "name": "krb5",
      "version": "1.22.1",
      "description": "MIT Kerberos 5",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/krb5@1.22.1",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://kerberos.org/dist/krb5/1.22/krb5-1.22.1.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "1a8832b8cad923ebbf1394f67e2efcf41e3a49f460285a66e35adec8fa0053af"
            }
          ]
        },
        {
          "type": "website",
          "url": "http://web.mit.edu/kerberos/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "1f04jnp0kfpl3cdb37c50dkgygrj07kn-elfutils-0.194-dev",
      "name": "elfutils",
      "version": "0.194",
      "description": "Set of utilities to handle ELF objects",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-2.0-only"
          }
        },
        {
          "license": {
            "id": "LGPL-3.0-or-later"
          }
        },
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/elfutils@0.194",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "Look up .build-id files relative to the directories in the\ncolon-separated environment variable NIX_DEBUG_INFO_DIRS, unless\noverriden by --debuginfo-path.\n\ndiff -ru elfutils-0.169-orig/libdwfl/argp-std.c elfutils-0.169/libdwfl/argp-std.c\n--- elfutils-0.169-orig/libdwfl/argp-std.c\t2017-05-02 23:05:52.000000000 +0200\n+++ elfutils-0.169/libdwfl/argp-std.c\t2017-07-28 16:08:06.739558106 +0200\n@@ -376,5 +376,7 @@\n const struct argp *\n dwfl_standard_argp (void)\n {\n+  debuginfo_path = getenv(\"NIX_DEBUG_INFO_DIRS\");\n+\n   return &libdwfl_argp;\n }\ndiff -ru elfutils-0.169-orig/src/stack.c elfutils-0.169/src/stack.c\n--- elfutils-0.169-orig/src/stack.c\t2017-02-24 11:55:28.000000000 +0100\n+++ elfutils-0.169/src/stack.c\t2017-07-28 15:50:06.743196696 +0200\n@@ -631,6 +631,8 @@\n   /* Set locale.  */\n   (void) setlocale (LC_ALL, \"\");\n \n+  debuginfo_path = getenv(\"NIX_DEBUG_INFO_DIRS\");\n+\n   const struct argp_option options[] =\n     {\n       { NULL, 0, NULL, 0, N_(\"Input selection options:\"), 0 },\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/backends/aarch64_initreg.c\t2015-11-27 14:36:29.000000000 +0100\n+++ b/backends/aarch64_initreg.c\t2016-08-09 03:47:25.428560159 +0200\n@@ -82,7 +82,7 @@\n \n   Dwarf_Word dwarf_fregs[32];\n   for (int r = 0; r < 32; r++)\n-    dwarf_fregs[r] = fregs.vregs[r] & 0xFFFFFFFF;\n+    dwarf_fregs[r] = (Dwarf_Word)fregs.vregs[r];\n \n   if (! setfunc (64, 32, dwarf_fregs, arg))\n     return false;\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/backends/ppc_initreg.c\t2019-11-26 23:48:42.000000000 +0100\n+++ b/backends/ppc_initreg.c\t2019-12-08 16:57:58.334872602 +0100\n@@ -32,6 +32,7 @@\n \n #include <stdlib.h>\n #if defined(__powerpc__) && defined(__linux__)\n+# include <asm/ptrace.h>\n # include <sys/ptrace.h>\n # include <sys/user.h>\n #endif\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/lib/libeu.h\n+++ b/lib/libeu.h\n@@ -31,6 +31,27 @@\n \n #include <stddef.h>\n #include <stdint.h>\n+#include <unistd.h>\n+#include <alloca.h>\n+#include <string.h>\n+\n+#ifndef TEMP_FAILURE_RETRY\n+#define TEMP_FAILURE_RETRY(expression) \\\n+  (__extension__                                                              \\\n+   ({ long int __result;                                                     \\\n+       do __result = (long int) (expression);                                 \\\n+       while (__result == -1L && errno == EINTR);                             \\\n+       __result; }))\n+#endif\n+\n+#ifndef strndupa\n+#define strndupa(s, n) \\\n+       (__extension__ ({const char *__in = (s); \\\n+                        size_t __len = strnlen (__in, (n)) + 1; \\\n+                        char *__out = (char *) alloca (__len); \\\n+                        __out[__len-1] = '\\0'; \\\n+                        (char *) memcpy (__out, __in, __len-1);}))\n+#endif\n \n extern void *xmalloc (size_t) __attribute__ ((__malloc__));\n extern void *xcalloc (size_t, size_t) __attribute__ ((__malloc__));\n--- a/src/arlib.h\t2015-08-21 14:22:37.000000000 +0200\n+++ b/src/arlib.h\t2015-11-20 08:02:55.153199611 +0100\n@@ -29,6 +29,16 @@\n #include <stdint.h>\n #include <sys/types.h>\n \n+#if !defined(ACCESSPERMS)\n+# define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO) /* 0777 */\n+#endif\n+#if !defined(ALLPERMS)\n+# define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO) /* 07777 */\n+#endif\n+#if !defined(DEFFILEMODE)\n+# define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)/* 0666*/\n+#endif\n+\n \n /* State of -D/-U flags.  */\n extern bool arlib_deterministic_output;\n--- a/src/strip.c\n+++ b/src/strip.c\n@@ -46,6 +46,14 @@\n #include <system.h>\n #include <printversion.h>\n \n+#if !defined(FNM_EXTMATCH)\n+# define FNM_EXTMATCH 0\n+#endif\n+\n+#if !defined(ACCESSPERMS)\n+#define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO)\n+#endif\n+\n typedef uint8_t GElf_Byte;\n \n /* Name and version of program.  */\n--- a/src/elfcompress.c.orig\t2016-04-02 12:51:26.903848894 +0200\n+++ b/src/elfcompress.c\t2016-04-02 12:55:15.076996338 +0200\n@@ -35,6 +35,14 @@\n #include <gelf.h>\n #include \"system.h\"\n \n+#if !defined(FNM_EXTMATCH)\n+# define FNM_EXTMATCH 0\n+#endif\n+\n+#if !defined(ALLPERMS)\n+# define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO) /* 07777 */\n+#endif\n+\n /* Name and version of program.  */\n static void print_version (FILE *stream, struct argp_state *state);\n ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/src/unstrip.c.orig\t2017-04-27 14:26:26.000000000 +0000\n+++ b/src/unstrip.c\t2017-05-05 15:51:33.515154220 +0000\n@@ -56,6 +56,15 @@\n # define _(str) gettext (str)\n #endif\n \n+#ifndef strndupa\n+#define strndupa(s, n) \\\n+       (__extension__ ({const char *__in = (s);                    \\\n+                        size_t __len = strnlen (__in, (n)) + 1;    \\\n+                        char *__out = (char *) alloca (__len);     \\\n+                        __out[__len-1] = '\\0';                     \\\n+                        (char *) memcpy (__out, __in, __len-1);}))\n+#endif\n+\n /* Name and version of program.  */\n ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;\n \n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://sourceware.org/elfutils/ftp/0.194/elfutils-0.194.tar.bz2",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "09e2ff033d39baa8b388a2d7fbc5390bfde99ae3b7c67c7daaf7433fbcf0f01e"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://sourceware.org/elfutils/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "1ghpcxwjqb4prf8ql6in7ccklgil5sfp-python3.13-urllib3-2.5.0",
      "name": "urllib3",
      "version": "2.5.0",
      "description": "Powerful, user-friendly HTTP client for Python",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/urllib3@2.5.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/u/urllib3/urllib3-2.5.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/urllib3/urllib3"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "1lm9qdndfww39v4vwvzcjbas70i49qvd-sqlite-3.50.4-debug",
      "name": "sqlite",
      "version": "3.50.4",
      "description": "Self-contained, serverless, zero-configuration, transactional SQL database engine",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "name": "Public Domain"
          }
        }
      ],
      "purl": "pkg:nix/sqlite@3.50.4",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://sqlite.org/2025/sqlite-autoconf-3500400.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "a3db587a1b92ee5ddac2f66b3edb41b26f9c867275782d46c3a088977d6a5b18"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.sqlite.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "1m2hgwaar1fmvjkr9jl992yg95h79yw7-python3.13-typing-extensions-4.15.0",
      "name": "typing-extensions",
      "version": "4.15.0",
      "description": "Backported and Experimental Type Hints for Python",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "Python-2.0"
          }
        }
      ],
      "purl": "pkg:nix/typing-extensions@4.15.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/python/typing_extensions/archive/refs/tags/4.15.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "de8025c2f35227b3613e21de921e12248f7d70f161dbd282091f77d78433b2f4"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/python/typing"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "1pxrhjxrcxnvs9xcqmkq928gvq5r2vzf-bash-5.3p3-debug",
      "name": "bash",
      "version": "5.3p3",
      "description": "GNU Bourne-Again Shell, the de facto standard shell on Linux",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        }
      ],
      "cpe": "cpe:2.3:a:gnu:bash:5.3:3:*:*:*:*:*:*",
      "purl": "pkg:nix/bash@5.3p3",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "\t\t\t     BASH PATCH REPORT\n\t\t\t     =================\n\nBash-Release:\t5.3\nPatch-ID:\tbash53-001\n\nBug-Reported-by:\tJohn Sidles <jasidles@gmail.com>\nBug-Reference-ID:\t<CAHOxHhRKa86FtRpsq-FBVciAxZ9kbo5PvfQBovBDXDFySbxj7A@mail.gmail.com>\nBug-Reference-URL:\thttps://lists.gnu.org/archive/html/bug-bash/2025-07/msg00035.html\n\nBug-Description:\n\nIn posix mode, `wait -n' with pid arguments does not restrict the set of\nprocesses it considers to those arguments.\n\nPatch (apply with `patch -p0'):\n\n*** ../bash-5.3/jobs.c\tFri Mar  7 18:48:44 2025\n--- jobs.c\tMon Jul 14 10:25:13 2025\n***************\n*** 3539,3543 ****\n       one in bgpids. We can do this in posix mode because we'll remove any\n       one we find from the table, preserving existing semantics. */\n!   if (posixly_correct && (t = bgp_findone ()))\n      {\n        pid = t->pid;\n--- 3539,3543 ----\n       one in bgpids. We can do this in posix mode because we'll remove any\n       one we find from the table, preserving existing semantics. */\n!   if (posixly_correct && (flags & JWAIT_WAITING) == 0 && (t = bgp_findone ()))\n      {\n        pid = t->pid;\n\n*** ../bash-5.3/patchlevel.h\t2020-06-22 14:51:03.000000000 -0400\n--- patchlevel.h\t2020-10-01 11:01:28.000000000 -0400\n***************\n*** 26,30 ****\n     looks for to find the patch level (for the sccs version string). */\n  \n! #define PATCHLEVEL 0\n  \n  #endif /* _PATCHLEVEL_H_ */\n--- 26,30 ----\n     looks for to find the patch level (for the sccs version string). */\n  \n! #define PATCHLEVEL 1\n  \n  #endif /* _PATCHLEVEL_H_ */\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "\t\t\t     BASH PATCH REPORT\n\t\t\t     =================\n\nBash-Release:\t5.3\nPatch-ID:\tbash53-002\n\nBug-Reported-by:\t\nBug-Reference-ID:\nBug-Reference-URL:\thttps://savannah.gnu.org/bugs/?67326\n\nBug-Description:\n\nThere are too many differences in the various implementations of shm_open(2)\nto rely on it for bash's use.\n\nPatch (apply with `patch -p0'):\n\n*** ../bash-5.3-patched/lib/sh/anonfile.c\tTue Jul  9 11:41:57 2024\n--- lib/sh/anonfile.c\tThu Jul 17 11:03:23 2025\n***************\n*** 26,30 ****\n  #include <bashtypes.h>\n  \n! #if defined (HAVE_MEMFD_CREATE) || defined (HAVE_SHM_OPEN) || defined (HAVE_SHM_MKSTEMP)\n  #  include <sys/mman.h>\n  #endif\n--- 26,30 ----\n  #include <bashtypes.h>\n  \n! #if defined (HAVE_MEMFD_CREATE) || defined (HAVE_SHM_MKSTEMP)\n  #  include <sys/mman.h>\n  #endif\n***************\n*** 42,57 ****\n  #endif\n  \n! #if defined (HAVE_SHM_OPEN)\n! #ifndef O_NOFOLLOW\n! #  define O_NOFOLLOW 0\n! #endif\n! \n  static int\n- anonshmunlink (const char *fn)\n- {\n-   return (shm_unlink (fn));\n- }\n- \n- static int\n  anonshmopen (const char *name, int flags, char **fn)\n  {\n--- 42,47 ----\n  #endif\n  \n! #if defined (HAVE_SHM_MKSTEMP)\n  static int\n  anonshmopen (const char *name, int flags, char **fn)\n  {\n***************\n*** 63,95 ****\n      *fn = 0;\n  \n- #if defined (HAVE_SHM_MKSTEMP)\n    fname = savestring (\"/shm-XXXXXXXXXX\");\n    fd = shm_mkstemp (fname);\n    if (fd < 0)\n-     free (fname);\n- #endif\n- \n-   if (fd < 0)\n      {\n-       fname = sh_mktmpname (name, flags);\n-       fd = shm_open (fname, O_RDWR|O_CREAT|O_EXCL|O_NOFOLLOW, 0600);\n-     }\n- \n-   if (fd < 0)\n-     {\n        free (fname);\n        return fd;\n      }\n  \n-   if (shm_unlink (fname) < 0)\n-     {\n-       int o;\n-       o = errno;\n-       free (fname);\n-       close (fd);\n-       errno = o;\n-       return -1;\n-     }\n- \n    if (fn)\n      *fn = fname;\n--- 53,64 ----\n***************\n*** 123,127 ****\n    flag = (name && *name == '/') ? MT_TEMPLATE : MT_USETMPDIR;\n  \n! #if defined (HAVE_SHM_OPEN)\n    fd = anonshmopen (name, flag, fn);\n    if (fd >= 0)\n--- 92,96 ----\n    flag = (name && *name == '/') ? MT_TEMPLATE : MT_USETMPDIR;\n  \n! #if defined (HAVE_SHM_MKSTEMP)\n    fd = anonshmopen (name, flag, fn);\n    if (fd >= 0)\n\n*** ../bash-5.3/patchlevel.h\t2020-06-22 14:51:03.000000000 -0400\n--- patchlevel.h\t2020-10-01 11:01:28.000000000 -0400\n***************\n*** 26,30 ****\n     looks for to find the patch level (for the sccs version string). */\n  \n! #define PATCHLEVEL 1\n  \n  #endif /* _PATCHLEVEL_H_ */\n--- 26,30 ----\n     looks for to find the patch level (for the sccs version string). */\n  \n! #define PATCHLEVEL 2\n  \n  #endif /* _PATCHLEVEL_H_ */\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "\t\t\t     BASH PATCH REPORT\n\t\t\t     =================\n\nBash-Release:\t5.3\nPatch-ID:\tbash53-003\n\nBug-Reported-by:\tIsabella Bosia <izaberina@gmail.com>\nBug-Reference-ID:\t<CAAZkfoJhQ1BJ7BGk3-ObctvCJJrW3rp_tWQXT=9rY7kGDvz4uw@mail.gmail.com>\nBug-Reference-URL:\thttps://lists.gnu.org/archive/html/bug-bash/2025-06/msg00173.html\n\nBug-Description:\n\nBash leaves internal quoting in place when expanding array subscripts\nthat appear inside array subscripts in an arithmetic context, causing\nexpansion failures.\n\nPatch (apply with `patch -p0'):\n\n*** ../bash-5.3-patched/subst.c\tSun May 18 15:00:13 2025\n--- subst.c\tFri Jul 11 09:48:44 2025\n***************\n*** 3796,3802 ****\n  #endif\n  \n! /* We don't perform process substitution in arithmetic expressions, so don't\n!    bother checking for it. */\n! #define ARITH_EXP_CHAR(s) (s == '$' || s == '`' || s == CTLESC || s == '~')\n  \n  /* If there are any characters in STRING that require full expansion,\n--- 3796,3802 ----\n  #endif\n  \n! /* We don't perform process substitution or tilde expansion in arithmetic\n!    expressions, so don't bother checking for them. */\n! #define ARITH_EXP_CHAR(s) (s == '$' || s == '`' || s == CTLESC)\n  \n  /* If there are any characters in STRING that require full expansion,\n***************\n*** 12216,12219 ****\n--- 12216,12227 ----\n  \t      break;\n  \t    }\n+ #if defined (ARRAY_VARS)\n+ \t  /* The only special characters that matter here are []~, since those\n+ \t     are backslash-quoted in expand_array_subscript but not dequoted\n+ \t     by the statement following this one. */\n+ \t  if ((quoted & Q_ARITH) && (c == LBRACK || c == RBRACK || c == '~'))\n+ \t    ;\t\t/* placeholder here */\n+ \t  else\n+ #endif\n  \t  if (((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || dquote) && (sh_syntaxtab[c] & CBSDQUOTE) == 0)\n  \t    *r++ = '\\\\';\n*** ../bash-5.3/tests/quotearray.right\tThu Nov 10 10:39:56 2022\n--- tests/quotearray.right\tThu Jul 10 15:40:27 2025\n***************\n*** 45,49 ****\n  0\n  0\n! ./quotearray1.sub: line 68: 0\\],b\\[1: arithmetic syntax error: invalid arithmetic operator (error token is \"\\],b\\[1\")\n  declare -a array\n  0\n--- 45,49 ----\n  0\n  0\n! ./quotearray1.sub: line 68: 0],b[1: arithmetic syntax error: invalid arithmetic operator (error token is \"],b[1\")\n  declare -a array\n  0\n*** ../bash-5.3/patchlevel.h\t2020-06-22 14:51:03.000000000 -0400\n--- patchlevel.h\t2020-10-01 11:01:28.000000000 -0400\n***************\n*** 26,30 ****\n     looks for to find the patch level (for the sccs version string). */\n  \n! #define PATCHLEVEL 2\n  \n  #endif /* _PATCHLEVEL_H_ */\n--- 26,30 ----\n     looks for to find the patch level (for the sccs version string). */\n  \n! #define PATCHLEVEL 3\n  \n  #endif /* _PATCHLEVEL_H_ */\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- ./configure\t2022-12-20 17:13:17.804045620 +0100\n+++ ./configure-fixed\t2022-12-20 17:16:00.444114824 +0100\n@@ -21723,11 +21723,7 @@\n solaris2*)\tLOCAL_CFLAGS=-DSOLARIS ;;\n lynxos*)\tLOCAL_CFLAGS=-DRECYCLES_PIDS ;;\n linux*)\t\tLOCAL_LDFLAGS=-rdynamic\t\t # allow dynamic loading\n-\t\tcase \"`uname -r`\" in\n-\t\t1.*|2.[0123]*)\t: ;;\n-\t\t*)\tprintf \"%s\\n\" \"#define PGRP_PIPE 1\" >>confdefs.h\n- ;;\n-\t\tesac ;;\n+\t\tprintf \"%s\\n\" \"#define PGRP_PIPE 1\" >>confdefs.h ;;\n netbsd*|openbsd*)\tLOCAL_CFLAGS=\"-DDEV_FD_STAT_BROKEN\" ;;\n freebsd*|midnightbsd*)\tLOCAL_CFLAGS='-DHEREDOC_PIPESIZE=4096' ;;\n *qnx[67]*)\tLOCAL_LIBS=\"-lncurses\" ;;\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://ftpmirror.gnu.org/bash/bash-5.3.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "0d5cd86965f869a26cf64f4b71be7b96f90a3ba8b3d74e27e8e9d9d5550f31ba"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/bash/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "1rd1dikwmy9gnlk5911gf2wf5r8k9wdg-publicsuffix-list-0-unstable-2025-10-08",
      "name": "publicsuffix-list",
      "version": "0-unstable-2025-10-08",
      "description": "Cross-vendor public domain suffix database",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MPL-2.0"
          }
        }
      ],
      "purl": "pkg:nix/publicsuffix-list@0-unstable-2025-10-08",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/publicsuffix/list/archive/ee7dec4a99602baaf51879dd8469b6642881a494.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "22547774809a77d1197a2cc8dd5d00d5809066257fc60d86c6d9932c6e040125"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://publicsuffix.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "1z80a5hayzszdshcm7x84gbnzswk0q7b-python3.13-types-setuptools-80.9.0.20250822-dist",
      "name": "types-setuptools",
      "version": "80.9.0.20250822",
      "description": "Typing stubs for setuptools",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "Apache-2.0"
          }
        }
      ],
      "purl": "pkg:nix/types-setuptools@80.9.0.20250822",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/t/types_setuptools/types_setuptools-80.9.0.20250822.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "070ea7716968ec67a84c7f7768d9952ff24d28b65b6594797a464f1b3066f965"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/python/typeshed"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "20axvl7mgj15m23jgmnq97hx37fgz7bk-diffutils-3.12",
      "name": "diffutils",
      "version": "3.12",
      "description": "Commands for showing the differences between files (diff, cmp, etc.)",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0"
          }
        }
      ],
      "purl": "pkg:nix/diffutils@3.12",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "Applies the following incremental gnulib commits:\n\n- 55a366a06fbd98bf13adc531579e3513cee97a32\n- 65ed9d3b24ad09fd61d326c83e7f1b05f6e9d65f\n- ce8e9de0bf34bc63dffc67ab384334c509175f64\n- 6164b4cb0887b5331a4e64449107decd37d32735\n\nWith adjustments specific to the structure & differences in diffutils:\n\n- gnulib code is completely contained in gnulib-tests (flat, no separate lib directory)\n- A Makefile.in is used for the test flags instead of the fancy automake modules\n  in the upstream gnulib project, so we add -lm to the float test there.\n  Surrounding texts in this file are slightly different in every project.\n---\ndiff '--color=auto' -ruN a/gnulib-tests/float.c b/gnulib-tests/float.c\n--- a/gnulib-tests/float.c\t2025-01-02 03:33:12.000000000 +0100\n+++ b/gnulib-tests/float.c\t2025-07-09 21:20:34.116794411 +0200\n@@ -23,7 +23,7 @@\n #if GNULIB_defined_long_double_union\n # if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__\n const union gl_long_double_union gl_LDBL_MAX =\n-  { { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL } };\n+  { { DBL_MAX, DBL_MAX / 0x1p53 } };\n # elif defined __i386__\n const union gl_long_double_union gl_LDBL_MAX =\n   { { 0xFFFFFFFF, 0xFFFFFFFF, 32766 } };\ndiff '--color=auto' -ruN a/gnulib-tests/float.in.h b/gnulib-tests/float.in.h\n--- a/gnulib-tests/float.in.h\t2025-01-02 03:33:12.000000000 +0100\n+++ b/gnulib-tests/float.in.h\t2025-07-09 21:20:34.117010190 +0200\n@@ -113,44 +113,38 @@\n # define LDBL_MAX_10_EXP 4932\n #endif\n \n-/* On AIX 7.1 with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_MAX are\n-   wrong.\n-   On Linux/PowerPC with gcc 4.4, the value of LDBL_MAX is wrong.  */\n-#if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__\n+/* On PowerPC with gcc 15 when using __ibm128 long double, the value of\n+   LDBL_MIN_EXP, LDBL_MIN, LDBL_MAX, and LDBL_NORM_MAX are wrong.  */\n+#if ((defined _ARCH_PPC || defined _POWER) && LDBL_MANT_DIG == 106 \\\n+     && defined __GNUC__)\n # undef LDBL_MIN_EXP\n # define LDBL_MIN_EXP DBL_MIN_EXP\n # undef LDBL_MIN_10_EXP\n # define LDBL_MIN_10_EXP DBL_MIN_10_EXP\n # undef LDBL_MIN\n # define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */\n-#endif\n-#if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__\n # undef LDBL_MAX\n-/* LDBL_MAX is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xFFFFFFFF }.\n-   It is not easy to define:\n-     #define LDBL_MAX 1.79769313486231580793728971405302307166e308L\n-   is too small, whereas\n-     #define LDBL_MAX 1.79769313486231580793728971405302307167e308L\n-   is too large.  Apparently a bug in GCC decimal-to-binary conversion.\n-   Also, I can't get values larger than\n-     #define LDBL63 ((long double) (1ULL << 63))\n-     #define LDBL882 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63)\n-     #define LDBL945 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63)\n-     #define LDBL1008 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63)\n-     #define LDBL_MAX (LDBL1008 * 65535.0L + LDBL945 * (long double) 9223372036821221375ULL + LDBL882 * (long double) 4611686018427387904ULL)\n-   which is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xF8000000 }.\n-   So, define it like this through a reference to an external variable\n+/* LDBL_MAX is 2**1024 - 2**918, represented as: { 0x7FEFFFFF, 0xFFFFFFFF,\n+                                                   0x7C9FFFFF, 0xFFFFFFFF }.\n+\n+   Do not write it as a constant expression, as GCC would likely treat\n+   that as infinity due to the vagaries of this platform's funky arithmetic.\n+   Instead, define it through a reference to an external variable.\n+   Like the following, but using a union to avoid type mismatches:\n \n-     const double LDBL_MAX[2] = { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL };\n+     const double LDBL_MAX[2] = { DBL_MAX, DBL_MAX / 0x1p53 };\n      extern const long double LDBL_MAX;\n \n-   or through a pointer cast\n+   The following alternative would not work as well when GCC is optimizing:\n+\n+     #define LDBL_MAX (*(long double const *) (double[])\n+                       { DBL_MAX, DBL_MAX / 0x1p53 })\n \n-     #define LDBL_MAX \\\n-       (*(const long double *) (double[]) { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL })\n+   The following alternative would require GCC 6 or later:\n \n-   Unfortunately, this is not a constant expression, and the latter expression\n-   does not work well when GCC is optimizing..  */\n+     #define LDBL_MAX __builtin_pack_longdouble (DBL_MAX, DBL_MAX / 0x1p53)\n+\n+   Unfortunately none of the alternatives are constant expressions.  */\n # if !GNULIB_defined_long_double_union\n union gl_long_double_union\n   {\n@@ -161,6 +155,8 @@\n # endif\n extern const union gl_long_double_union gl_LDBL_MAX;\n # define LDBL_MAX (gl_LDBL_MAX.ld)\n+# undef LDBL_NORM_MAX\n+# define LDBL_NORM_MAX LDBL_MAX\n #endif\n \n /* On IRIX 6.5, with cc, the value of LDBL_MANT_DIG is wrong.\n@@ -181,6 +177,21 @@\n # endif\n #endif\n \n+/* On PowerPC platforms, 'long double' has a double-double representation.\n+   Up to ISO C 17, this was outside the scope of ISO C because it can represent\n+   numbers with mantissas of the form 1.<52 bits><many zeroes><52 bits>, such as\n+   1.0L + 4.94065645841246544176568792868221e-324L = 1 + 2^-1074; see\n+   ISO C 17 § 5.2.4.2.2.(3).\n+   In ISO C 23, wording has been included that makes this 'long double'\n+   representation compliant; see ISO C 23 § 5.2.5.3.3.(8)-(9).  In this setting,\n+   numbers with mantissas of the form 1.<52 bits><many zeroes><52 bits> are\n+   called \"unnormalized\".  And since LDBL_EPSILON must be normalized (per\n+   ISO C 23 § 5.2.5.3.3.(33)), it must be 2^-105.  */\n+#if defined __powerpc__ && LDBL_MANT_DIG == 106\n+# undef LDBL_EPSILON\n+# define LDBL_EPSILON 2.46519032881566189191165176650870696773e-32L /* 2^-105 */\n+#endif\n+\n /* ============================ ISO C11 support ============================ */\n \n /* 'float' properties */\n@@ -309,7 +320,11 @@\n # endif\n #endif\n #ifndef LDBL_NORM_MAX\n-# define LDBL_NORM_MAX LDBL_MAX\n+# ifdef __LDBL_NORM_MAX__\n+#  define LDBL_NORM_MAX __LDBL_NORM_MAX__\n+# else\n+#  define LDBL_NORM_MAX LDBL_MAX\n+# endif\n #endif\n #ifndef LDBL_SNAN\n /* For sh, beware of <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111814>.  */\ndiff '--color=auto' -ruN a/gnulib-tests/Makefile.in b/gnulib-tests/Makefile.in\n--- a/gnulib-tests/Makefile.in\t2025-04-09 04:36:30.000000000 +0200\n+++ b/gnulib-tests/Makefile.in\t2025-07-09 21:20:45.260378342 +0200\n@@ -1059,7 +1059,7 @@\n test_filenamecat_DEPENDENCIES = $(am__DEPENDENCIES_2)\n test_float_h_SOURCES = test-float-h.c\n test_float_h_OBJECTS = test-float-h.$(OBJEXT)\n-test_float_h_LDADD = $(LDADD)\n+test_float_h_LDADD = $(LDADD) -lm\n test_float_h_DEPENDENCIES = libtests.a ../lib/libdiffutils.a \\\n \tlibtests.a ../lib/libdiffutils.a libtests.a \\\n \t$(am__DEPENDENCIES_1)\ndiff '--color=auto' -ruN a/gnulib-tests/test-float-h.c b/gnulib-tests/test-float-h.c\n--- a/gnulib-tests/test-float-h.c\t2025-01-02 03:33:12.000000000 +0100\n+++ b/gnulib-tests/test-float-h.c\t2025-07-09 21:20:34.117248712 +0200\n@@ -101,6 +101,8 @@\n \n /* ------------------------------------------------------------------------- */\n \n+#include <math.h>\n+\n #include \"fpucw.h\"\n #include \"isnanf-nolibm.h\"\n #include \"isnand-nolibm.h\"\n@@ -396,6 +398,44 @@\n \n /* -------------------- Check macros for 'long double' -------------------- */\n \n+static int\n+test_isfinitel (long double volatile x)\n+{\n+  if (x != x)\n+    return 0;\n+  long double volatile zero = x * 0;\n+  return zero == 0;\n+}\n+\n+/* Return X after normalization.  This makes a difference on platforms\n+   where long double can represent unnormalized values.  For example,\n+   suppose x = 1 + 2**-106 on PowerPC with IBM long double where\n+   FLT_RADIX = 2, LDBL_MANT_DIG = 106, and LDBL_EPSILON = 2**-105.\n+   Then 1 < x < 1 + LDBL_EPSILON, and normalize_long_double (x) returns 1.  */\n+static long double\n+normalize_long_double (long double volatile x)\n+{\n+  if (FLT_RADIX == 2 && test_isfinitel (x))\n+    {\n+      int xexp;\n+      long double volatile\n+        frac = frexpl (x, &xexp),\n+        significand = frac * pow2l (LDBL_MANT_DIG),\n+        normalized_significand = truncl (significand),\n+        normalized_x = normalized_significand * pow2l (xexp - LDBL_MANT_DIG);\n+\n+      /* The test_isfinitel defends against PowerPC with IBM long double,\n+         which fritzes out near LDBL_MAX.  */\n+      if (test_isfinitel (normalized_x))\n+        x = normalized_x;\n+    }\n+  else\n+    {\n+      /* Hope that X is already normalized.  */\n+    }\n+  return x;\n+}\n+\n static void\n test_long_double (void)\n {\n@@ -455,7 +495,7 @@\n     for (n = 0; n <= 2 * LDBL_MANT_DIG; n++)\n       {\n         volatile long double half_n = pow2l (- n); /* 2^-n */\n-        volatile long double x = me - half_n;\n+        volatile long double x = normalize_long_double (me - half_n);\n         if (x < me)\n           ASSERT (x <= 1.0L);\n       }\n@@ -483,8 +523,12 @@\n   ASSERT (!LDBL_IS_IEC_60559);\n #endif\n \n+  printf(\"LDBL_NORM_MAX: %LF\\n\", LDBL_NORM_MAX);\n+  printf(\"LDBL_MAX: %LF\\n\", LDBL_MAX);\n+  printf(\"normalize_long_double(LDBL_MAX): %LF\\n\", normalize_long_double(LDBL_MAX));\n+\n   /* Check the value of LDBL_NORM_MAX.  */\n-  ASSERT (LDBL_NORM_MAX == LDBL_MAX);\n+  ASSERT (LDBL_NORM_MAX == normalize_long_double (LDBL_MAX));\n \n   /* Check the value of LDBL_SNAN.  */\n   ASSERT (isnanl (LDBL_SNAN));\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "---\n gnulib-tests/test-c32ispunct.c | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\n--- a/gnulib-tests/test-c32ispunct.c\n+++ b/gnulib-tests/test-c32ispunct.c\n@@ -255,7 +255,7 @@ main (int argc, char *argv[])\n           is = for_character (\"\\360\\235\\204\\200\", 4);\n           ASSERT (is != 0);\n         #endif\n-        #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__ || defined _AIX || defined __sun || defined __CYGWIN__ || (defined _WIN32 && !defined __CYGWIN__) || defined __ANDROID__)\n+        #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__ || defined _AIX || defined __sun || defined __CYGWIN__ || (defined _WIN32 && !defined __CYGWIN__) || defined __ANDROID__)\n           /* U+E003A TAG COLON */\n           is = for_character (\"\\363\\240\\200\\272\", 4);\n           ASSERT (is == 0);\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://ftpmirror.gnu.org/diffutils/diffutils-3.12.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "7c8b7f9fc8609141fdea9cece85249d308624391ff61dedaf528fcb337727dfd"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/diffutils/diffutils.html"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "251366801cw3qn4bqka2pp21hlpzwj1v-libpng-apng-1.6.50-dev",
      "name": "libpng-apng",
      "version": "1.6.50",
      "description": "Official reference implementation for the PNG file format with animation patch",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "libpng-2.0"
          }
        }
      ],
      "purl": "pkg:nix/libpng-apng@1.6.50",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://sourceforge/libpng/libpng-1.6.50.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "4df396518620a7aa3651443e87d1b2862e4e88cad135a8b93423e01706232307"
            }
          ]
        },
        {
          "type": "website",
          "url": "http://www.libpng.org/pub/png/libpng.html"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "2a6v0lgs0c0wg2vsjiard70fl85ly98x-python3.13-buildcatrust-0.4.0-dist",
      "name": "buildcatrust",
      "version": "0.4.0",
      "description": "Build SSL/TLS trust stores",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/buildcatrust@0.4.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/b/buildcatrust/buildcatrust-0.4.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "198c3f44dd4e2b97eaa377a6f2189ada5fc8c0defa8673e716e629aea797d78e"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/lukegb/buildcatrust"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "2djfq4zfh31dnnr9lqhg8mdq800akii1-automake-1.18.1",
      "name": "automake",
      "version": "1.18.1",
      "description": "GNU standard-compliant makefile generator",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-2.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/automake@1.18.1",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://ftpmirror.gnu.org/automake/automake-1.18.1.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "168aa363278351b89af56684448f525a5bce5079d0b6842bd910fdd3f1646887"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/automake/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "2f7yzmvcsydw38zr369l9xpk63v1ld5q-gmp-with-cxx-6.3.0",
      "name": "gmp-with-cxx",
      "version": "6.3.0",
      "description": "GNU multiple precision arithmetic library",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "LGPL-3.0-only"
          }
        },
        {
          "license": {
            "id": "GPL-2.0-only"
          }
        }
      ],
      "purl": "pkg:nix/gmp-with-cxx@6.3.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://ftpmirror.gnu.org/gmp/gmp-6.3.0.tar.bz2",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "ac28211a7cfb609bae2e2c8d6058d66c8fe96434f740cf6fe2e47b000d1c20cb"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://gmplib.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "2l4f0paypz6nnk91w70sasw6yx8bpxpc-pango-1.57.0-bin",
      "name": "pango",
      "version": "1.57.0",
      "description": "Library for laying out and rendering of text, with an emphasis on internationalization",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "LGPL-2.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/pango@1.57.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://gnome/sources/pango/1.57/pango-1.57.0.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "890640c841dae77d3ae3d8fe8953784b930fa241b17423e6120c7bfdf8b891e7"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.pango.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "2m2vvf6j8s3jvpd82fpdi3jnsbcvvd5b-libxpm-3.5.17-bin",
      "name": "libxpm",
      "version": "3.5.17",
      "description": "X Pixmap (XPM) image file format library",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "X11"
          }
        },
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/libxpm@3.5.17",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://xorg/individual/lib/libXpm-3.5.17.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "64b31f81019e7d388c822b0b28af8d51c4622b83f1f0cb6fa3fc95e271226e43"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://gitlab.freedesktop.org/xorg/lib/libxpm"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "2qrbffg8d1d6fzalckz53r1ph3vc7iwa-python3.13-zope-event-5.0-dist",
      "name": "zope-event",
      "version": "5.0",
      "description": "Event publishing system",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "ZPL-2.1"
          }
        }
      ],
      "purl": "pkg:nix/zope-event@5.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/zopefoundation/zope.event/archive/refs/tags/5.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "f398d74aba65a1372c91d38123ce0a1867fd067a38d594ed4ff4eb6e0993c620"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/zopefoundation/zope.event"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "2qvdyrzmm8ziilrxfq0adbqq7ijzz1i6-python3.13-markupsafe-3.0.3",
      "name": "markupsafe",
      "version": "3.0.3",
      "description": "Implements a XML/HTML/XHTML Markup safe string",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/markupsafe@3.0.3",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/pallets/markupsafe/archive/refs/tags/3.0.3.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "d9deb8708b5e9aa54cdb958920aae31312b3eafe145b6c15c4cea9847d60d6c1"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://palletsprojects.com/p/markupsafe/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "2x46ik889d584fmdjp8ywz545rq2a9jz-xz-5.8.1-bin",
      "name": "xz",
      "version": "5.8.1",
      "description": "General-purpose data compression software, successor of LZMA",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-2.0-or-later"
          }
        },
        {
          "license": {
            "id": "LGPL-2.1-or-later"
          }
        }
      ],
      "purl": "pkg:nix/xz@5.8.1",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/tukaani-project/xz/releases/download/v5.8.1/xz-5.8.1.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "0b54f79df85912504de0b14aec7971e3f964491af1812d83447005807513cd9e"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://tukaani.org/xz/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "2zd739m6hb0nqg3s3crq2k3n78h2916f-python3.13-editables-0.5",
      "name": "editables",
      "version": "0.5",
      "description": "Editable installations",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/editables@0.5",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/e/editables/editables-0.5.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "309627d9b5c4adc0e668d8c6fa7bac1ba7c8c5d415c2d27f60f081f8e80d1de2"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/pfmoore/editables"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "34w4yk1wxh0rbyvsy01pga9h927h5h8d-python3.13-installer-0.7.0-dist",
      "name": "installer",
      "version": "0.7.0",
      "description": "Low-level library for installing a Python package from a wheel distribution",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/installer@0.7.0",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From b23f89b10cf5d179bd6b0bad195ee36f43a5fb9e Mon Sep 17 00:00:00 2001\nFrom: =?UTF-8?q?Edgar=20Ram=C3=ADrez=20Mondrag=C3=B3n?=\n <16805946+edgarrmondragon@users.noreply.github.com>\nDate: Tue, 19 Dec 2023 06:09:41 -0600\nSubject: [PATCH] Fix removed `importlib.resources.read_binary` in Python 3.13\n (#201)\n\ndiff --git a/noxfile.py b/noxfile.py\nindex a690c59..6a69cce 100644\n--- a/noxfile.py\n+++ b/noxfile.py\n@@ -22,7 +22,7 @@ def lint(session):\n     session.run(\"pre-commit\", \"run\", \"--all-files\", *args)\n \n \n-@nox.session(python=[\"3.7\", \"3.8\", \"3.9\", \"3.10\", \"3.11\", \"pypy3\"])\n+@nox.session(python=[\"3.7\", \"3.8\", \"3.9\", \"3.10\", \"3.11\", \"3.12\", \"3.13\", \"pypy3\"])\n def test(session):\n     session.install(\".\")\n     session.install(\"-r\", \"tests/requirements.txt\")\n@@ -42,7 +42,7 @@ def test(session):\n     )\n \n \n-@nox.session(python=[\"3.7\", \"3.8\", \"3.9\", \"3.10\", \"3.11\", \"pypy3\"])\n+@nox.session(python=[\"3.7\", \"3.8\", \"3.9\", \"3.10\", \"3.11\", \"3.12\", \"3.13\", \"pypy3\"])\n def doctest(session):\n     session.install(\".\")\n     session.install(\"-r\", \"docs/requirements.txt\")\ndiff --git a/src/installer/scripts.py b/src/installer/scripts.py\nindex d18060b..c9f96b4 100644\n--- a/src/installer/scripts.py\n+++ b/src/installer/scripts.py\n@@ -3,9 +3,19 @@\n import io\n import os\n import shlex\n+import sys\n import zipfile\n-from importlib.resources import read_binary\n-from typing import TYPE_CHECKING, Mapping, Optional, Tuple\n+from types import ModuleType\n+from typing import TYPE_CHECKING, Mapping, Optional, Tuple, Union\n+\n+if sys.version_info >= (3, 9):  # pragma: no cover\n+    from importlib.resources import files\n+\n+    def read_binary(package: Union[str, ModuleType], file_path: str) -> bytes:\n+        return (files(package) / file_path).read_bytes()\n+\n+else:  # pragma: no cover\n+    from importlib.resources import read_binary\n \n from installer import _scripts\n \n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/pypa/installer/archive/0.7.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "b611e0854fb5025a5acb9afd0dcdefec04d115f60a57c97da91d276c638e5ff0"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/pypa/installer"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "3b62m9y45l3na95fl09jn7f5gdqgr9nj-graphite2-1.3.14-dev",
      "name": "graphite2",
      "version": "1.3.14",
      "description": "Advanced font engine",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "LGPL-2.1"
          }
        }
      ],
      "purl": "pkg:nix/graphite2@1.3.14",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- graphite2-1.3.14.orig/tests/featuremap/featuremaptest.cpp\t2020-04-01 08:23:13.000000000 +0530\n+++ graphite2-1.3.14/tests/featuremap/featuremaptest.cpp\t2025-01-23 16:27:12.648804481 +0530\n@@ -25,6 +25,7 @@\n #include <iostream>\n #include <map>\n #include <memory>\n+#include <stdint.h>\n #include <string>\n #include <vector>\n \n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/silnrsi/graphite/releases/download/1.3.14/graphite2-1.3.14.tgz"
        },
        {
          "type": "website",
          "url": "https://graphite.sil.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "3cilgifl43vi073g9f7v8lw6gpd82zsp-libmpc-1.3.1",
      "name": "libmpc",
      "version": "1.3.1",
      "description": "Library for multiprecision complex arithmetic with exact rounding",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "LGPL-2.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/libmpc@1.3.1",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://ftpmirror.gnu.org/mpc/mpc-1.3.1.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "ab642492f5cf882b74aa0cb730cd410a81edcdbec895183ce930e706c1c759b8"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.multiprecision.org/mpc/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "3fmzbq9y4m9nk235il7scmvwn8j9zy3p-gnumake-4.4.1",
      "name": "gnumake",
      "version": "4.4.1",
      "description": "Tool to control the generation of non-source files from sources",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/gnumake@4.4.1",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From b69e3740e68afaec97b9957d40b9c135db87eaab Mon Sep 17 00:00:00 2001\nFrom: =?UTF-8?q?J=C3=B6rg=20Thalheim?= <joerg@thalheim.io>\nDate: Sat, 24 Apr 2021 10:11:40 +0200\nSubject: [PATCH 1/3] No impure bin sh\n\ndefault_shell is used to populuate default shell used to execute jobs.\nUnless SHELL is set to a different value this would be /bin/sh.\nOur stdenv provides sh in form of bash anyway. Having this value not\nhard-coded has some advantages:\n\n- It would ensure that on all systems it uses sh from its PATH rather\n  than /bin/sh, which helps as different systems might have different\n  shells there (bash vs. dash)\n- In the past I had issues with LD_PRELOAD with BEAR, where /bin/sh\n  used a different glibc than BEAR which came from my development shell.\n---\n src/job.c | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/src/job.c b/src/job.c\nindex ea885614..8a9bd8e0 100644\n--- a/src/job.c\n+++ b/src/job.c\n@@ -76,7 +76,7 @@ char * vms_strsignal (int status);\n \n #else\n \n-const char *default_shell = \"/bin/sh\";\n+const char *default_shell = \"sh\";\n int batch_mode_shell = 0;\n \n #endif\n-- \n2.44.1\n\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 2db52008be2e2d504889f4f19318c2ba5a2a4797 Mon Sep 17 00:00:00 2001\nFrom: =?UTF-8?q?J=C3=B6rg=20Thalheim?= <joerg@thalheim.io>\nDate: Sat, 24 Apr 2021 10:20:16 +0200\nSubject: [PATCH 2/3] Remove impure dirs\n\nPurity: don't look for library dependencies (of the form `-lfoo') in\n/lib and /usr/lib. It's a stupid feature anyway. Likewise, when\nsearching for included Makefiles, don't look in /usr/include and\nfriends.\n---\n src/read.c   | 3 ---\n src/remake.c | 2 --\n 2 files changed, 5 deletions(-)\n\ndiff --git a/src/read.c b/src/read.c\nindex b0fc1e1f..d6b41c17 100644\n--- a/src/read.c\n+++ b/src/read.c\n@@ -111,9 +111,6 @@ static const char *default_include_directories[] =\n     INCLUDEDIR,\n #endif\n #ifndef _AMIGA\n-    \"/usr/gnu/include\",\n-    \"/usr/local/include\",\n-    \"/usr/include\",\n #endif\n     0\n   };\ndiff --git a/src/remake.c b/src/remake.c\nindex fe67ab28..1b76560c 100644\n--- a/src/remake.c\n+++ b/src/remake.c\n@@ -1690,8 +1690,6 @@ library_search (const char *lib, FILE_TIMESTAMP *mtime_ptr)\n   static const char *dirs[] =\n     {\n #ifndef _AMIGA\n-      \"/lib\",\n-      \"/usr/lib\",\n #endif\n #if defined(WINDOWS32) && !defined(LIBDIR)\n /*\n-- \n2.44.1\n\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 3317b3a78666e6073c63f62a322176e3dc680461 Mon Sep 17 00:00:00 2001\nFrom: Ivan Trubach <mr.trubach@icloud.com>\nDate: Sat, 17 Aug 2024 22:35:03 +0300\nSubject: [PATCH 3/3] Do not search for a C++ compiler and set MAKE_CXX\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\n\nRemoves unnecessary reference to C++ compiler if CXX is set to an\nabsolute path. If CXX is not an absolute path, we avoid defaulting CXX\nto a compiler name that was used to build the package.\n\nContext: GNU Make defines default values for CC, CXX and other\nenvironment variables. For CXX, it usually defaults to g++, however,\nFreeBSD and OpenBSD no longer ship GCC as a system compiler (and use\nClang instead). For C compiler, POSIX standardizes the name to be \"cc\",\nbut there is no such standard for C++ compiler name. As a fix, GNU Make\nuses CXX set for build as a default (via MAKE_CXX preprocessor macro in\nthe source code).\n\nWe revert the change that added this behavior and set the default to c++\nor g++ that does not depend on the build platform.\n\nIn stdenv, CXX environment variable is always defined and overrides the\ndefault value.\n\nReferences:\n • https://savannah.gnu.org/bugs/?63668\n • https://git.savannah.gnu.org/cgit/make.git/commit/?id=ffa28f3914ff402b3915f75e4fed86ac6fb1449d\n---\n configure.ac  |  2 --\n src/default.c | 19 ++++++-------------\n 2 files changed, 6 insertions(+), 15 deletions(-)\n\ndiff --git a/configure.ac b/configure.ac\nindex cd785754..41a65307 100644\n--- a/configure.ac\n+++ b/configure.ac\n@@ -37,8 +37,6 @@ AM_INIT_AUTOMAKE([1.16.1 foreign -Werror -Wall])\n # Checks for programs.\n AC_USE_SYSTEM_EXTENSIONS\n AC_PROG_CC\n-AC_PROG_CXX\n-AC_DEFINE_UNQUOTED(MAKE_CXX, [\"$CXX\"], [Default C++ compiler.])\n \n # Configure gnulib\n gl_EARLY\ndiff --git a/src/default.c b/src/default.c\nindex e396269b..78ba402f 100644\n--- a/src/default.c\n+++ b/src/default.c\n@@ -528,22 +528,15 @@ static const char *default_variables[] =\n #ifdef GCC_IS_NATIVE\n     \"CC\", \"gcc\",\n     \"OBJC\", \"gcc\",\n+# ifdef __MSDOS__\n+    \"CXX\", \"gpp\",       /* g++ is an invalid name on MSDOS */\n+# else\n+    \"CXX\", \"g++\",\n+# endif /* __MSDOS__ */\n #else\n     \"CC\", \"cc\",\n     \"OBJC\", \"cc\",\n-#endif\n-#ifdef MAKE_CXX\n-    \"CXX\", MAKE_CXX,\n-#else\n-# ifdef GCC_IS_NATIVE\n-#  ifdef __MSDOS__\n-    \"CXX\", \"gpp\",       /* g++ is an invalid name on MSDOS */\n-#  else\n-    \"CXX\", \"gcc\",\n-#  endif /* __MSDOS__ */\n-# else\n-    \"CXX\", \"g++\",\n-# endif\n+    \"CXX\", \"c++\",\n #endif\n     /* This expands to $(CO) $(COFLAGS) $< $@ if $@ does not exist,\n        and to the empty string if $@ does exist.  */\n-- \n2.44.1\n\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://ftpmirror.gnu.org/make/make-4.4.1.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "dd16fb1d67bfab79a72f5e8390735c49e3e8e70b4945a15ab1f81ddb78658fb3"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/make/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "3h2hinqls9rnhzlypdfd9261lms7dggi-mpfr-4.2.2-info",
      "name": "mpfr",
      "version": "4.2.2",
      "description": "Library for multiple-precision floating-point arithmetic",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "LGPL-2.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/mpfr@4.2.2",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://www.mpfr.org/mpfr-4.2.2/mpfr-4.2.2.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "b67ba0383ef7e8a8563734e2e889ef5ec3c3b898a01d00fa0a6869ad81c6ce01"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.mpfr.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "3hlg2yp6wyj78ynhh99hs7ja94yhb4ng-pkg-config-wrapper-0.29.2",
      "name": "pkg-config-wrapper",
      "version": "0.29.2",
      "description": "Tool that allows packages to find out information about other packages (wrapper script)",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-2.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/pkg-config-wrapper@0.29.2",
      "externalReferences": [
        {
          "type": "website",
          "url": "http://pkg-config.freedesktop.org/wiki/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "3icqx4vccaw83pzjryz45jdp8kggi5lh-gnutls-3.8.10-devdoc",
      "name": "gnutls",
      "version": "3.8.10",
      "description": "GNU Transport Layer Security Library",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "LGPL-2.1-or-later"
          }
        }
      ],
      "purl": "pkg:nix/gnutls@3.8.10",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "allow overriding system trust store location via $NIX_SSL_CERT_FILE\n\n--- a/lib/system/certs.c\n+++ b/lib/system/certs.c\n@@ -381,6 +381,10 @@ int gnutls_x509_trust_list_add_system_trust(gnutls_x509_trust_list_t list,\n \t\t\t\t\t    unsigned int tl_flags,\n \t\t\t\t\t    unsigned int tl_vflags)\n {\n-\treturn add_system_trust(list, tl_flags | GNUTLS_TL_NO_DUPLICATES,\n-\t\t\t\ttl_vflags);\n+\ttl_flags = tl_flags|GNUTLS_TL_NO_DUPLICATES;\n+\tconst char *file = secure_getenv(\"NIX_SSL_CERT_FILE\");\n+\treturn file\n+\t\t? gnutls_x509_trust_list_add_trust_file(\n+\t\t\tlist, file, NULL/*CRL*/, GNUTLS_X509_FMT_PEM, tl_flags, tl_vflags)\n+\t\t: add_system_trust(list, tl_flags, tl_vflags);\n }\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://gnupg/gnutls/v3.8/gnutls-3.8.10.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "db7fab7cce791e7727ebbef2334301c821d79a550ec55c9ef096b610b03eb6b7"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://gnutls.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "3iwswhi35fs21givnlm0bqlnyakm9xpj-dejagnu-1.6.3",
      "name": "dejagnu",
      "version": "1.6.3",
      "description": "Framework for testing other programs",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-2.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/dejagnu@1.6.3",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://gnu/dejagnu/dejagnu-1.6.3.tar.gz"
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/dejagnu/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "3lll9y925zz9393sa59h653xik66srjb-python3-3.13.9",
      "name": "python3",
      "version": "3.13.9",
      "description": "High-level dynamically-typed programming language",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "Python-2.0"
          }
        }
      ],
      "purl": "pkg:nix/python3@3.13.9",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 5330b6af9f832af59aa5c61d9ef6971053a8e709 Mon Sep 17 00:00:00 2001\nFrom: Jonathan Ringer <jonringer117@gmail.com>\nDate: Mon, 9 Nov 2020 10:24:35 -0800\nSubject: [PATCH] CPython: Don't use ldconfig\n\n---\n Lib/ctypes/util.py | 77 ++--------------------------------------------\n 1 file changed, 2 insertions(+), 75 deletions(-)\n\ndiff --git a/Lib/ctypes/util.py b/Lib/ctypes/util.py\nindex 0c2510e161..7fb98af308 100644\n--- a/Lib/ctypes/util.py\n+++ b/Lib/ctypes/util.py\n@@ -268,34 +222,7 @@ def find_library(name, is64 = False):\n     else:\n \n         def _findSoname_ldconfig(name):\n-            import struct\n-            if struct.calcsize('l') == 4:\n-                machine = os.uname().machine + '-32'\n-            else:\n-                machine = os.uname().machine + '-64'\n-            mach_map = {\n-                'x86_64-64': 'libc6,x86-64',\n-                'ppc64-64': 'libc6,64bit',\n-                'sparc64-64': 'libc6,64bit',\n-                's390x-64': 'libc6,64bit',\n-                'ia64-64': 'libc6,IA-64',\n-                }\n-            abi_type = mach_map.get(machine, 'libc6')\n-\n-            # XXX assuming GLIBC's ldconfig (with option -p)\n-            regex = r'\\s+(lib%s\\.[^\\s]+)\\s+\\(%s'\n-            regex = os.fsencode(regex % (re.escape(name), abi_type))\n-            try:\n-                with subprocess.Popen(['/sbin/ldconfig', '-p'],\n-                                      stdin=subprocess.DEVNULL,\n-                                      stderr=subprocess.DEVNULL,\n-                                      stdout=subprocess.PIPE,\n-                                      env={'LC_ALL': 'C', 'LANG': 'C'}) as p:\n-                    res = re.search(regex, p.stdout.read())\n-                    if res:\n-                        return os.fsdecode(res.group(1))\n-            except OSError:\n-                pass\n+            return None\n \n         def _findLib_ld(name):\n             # See issue #9998 for why this is needed\n-- \n2.33.1\n\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/Lib/venv/__init__.py b/Lib/venv/__init__.py\nindex 4856594755..6769ab8026 100644\n--- a/Lib/venv/__init__.py\n+++ b/Lib/venv/__init__.py\n@@ -522,6 +522,7 @@ def skip_file(f):\n                     with open(dstfile, 'wb') as f:\n                         f.write(new_data)\n                     shutil.copymode(srcfile, dstfile)\n+                os.chmod(dstfile, 0o644)\n \n     def upgrade_dependencies(self, context):\n         logger.debug(\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git i/Lib/mimetypes.py w/Lib/mimetypes.py\nindex f3343c8..ab5b886 100644\n--- i/Lib/mimetypes.py\n+++ w/Lib/mimetypes.py\n@@ -40,16 +40,8 @@\n ]\n \n knownfiles = [\n-    \"/etc/mime.types\",\n-    \"/etc/httpd/mime.types\",                    # Mac OS X\n-    \"/etc/httpd/conf/mime.types\",               # Apache\n-    \"/etc/apache/mime.types\",                   # Apache 1\n-    \"/etc/apache2/mime.types\",                  # Apache 2\n-    \"/usr/local/etc/httpd/conf/mime.types\",\n-    \"/usr/local/lib/netscape/mime.types\",\n-    \"/usr/local/etc/httpd/conf/mime.types\",     # Apache 1.2\n-    \"/usr/local/etc/mime.types\",                # Apache 1.3\n-    ]\n+    \"@mime-types@/etc/mime.types\",\n+]\n \n inited = False\n _db = None\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://www.python.org/ftp/python/3.13.9/Python-3.13.9.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "ed5ef34cda36cfa2f3a340f07cac7e7814f91c7f3c411f6d3562323a866c5c66"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.python.org"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "3m6ykzf5ibhhgmdvy5mqx9zayb6qlbs1-bootstrap-stage4-gcc-wrapper-14.3.0",
      "name": "bootstrap-stage4-gcc-wrapper",
      "version": "14.3.0",
      "description": "GNU Compiler Collection, version 14.3.0 (wrapper script)",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/bootstrap-stage4-gcc-wrapper@14.3.0",
      "externalReferences": [
        {
          "type": "website",
          "url": "https://gcc.gnu.org/"
        }
      ],
      "evidence": {
        "identity": {
          "field": "cpe",
          "methods": [
            {
              "technique": "manifest-analysis",
              "confidence": 0.5,
              "value": "cpe:2.3:a:gnu:gcc:14.3.0:*:*:*:*:*:*:*"
            },
            {
              "technique": "manifest-analysis",
              "confidence": 0.5,
              "value": "cpe:2.3:a:gnu:gcc:14.3:0:*:*:*:*:*:*"
            }
          ]
        }
      }
    },
    {
      "type": "application",
      "bom-ref": "3rfwb68rg2nna0b4cj222wyz5iwkgkww-gcc-wrapper-14.3.0-info",
      "name": "gcc-wrapper",
      "version": "14.3.0",
      "description": "GNU Compiler Collection, version 14.3.0 (wrapper script)",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/gcc-wrapper@14.3.0",
      "externalReferences": [
        {
          "type": "website",
          "url": "https://gcc.gnu.org/"
        }
      ],
      "evidence": {
        "identity": {
          "field": "cpe",
          "methods": [
            {
              "technique": "manifest-analysis",
              "confidence": 0.5,
              "value": "cpe:2.3:a:gnu:gcc:14.3.0:*:*:*:*:*:*:*"
            },
            {
              "technique": "manifest-analysis",
              "confidence": 0.5,
              "value": "cpe:2.3:a:gnu:gcc:14.3:0:*:*:*:*:*:*"
            }
          ]
        }
      }
    },
    {
      "type": "application",
      "bom-ref": "3s1qqffk3frmlzfr1iwvdd0l9z5gld9f-python3-minimal-3.13.9-debug",
      "name": "python3-minimal",
      "version": "3.13.9",
      "description": "High-level dynamically-typed programming language",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "Python-2.0"
          }
        }
      ],
      "purl": "pkg:nix/python3-minimal@3.13.9",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 5330b6af9f832af59aa5c61d9ef6971053a8e709 Mon Sep 17 00:00:00 2001\nFrom: Jonathan Ringer <jonringer117@gmail.com>\nDate: Mon, 9 Nov 2020 10:24:35 -0800\nSubject: [PATCH] CPython: Don't use ldconfig\n\n---\n Lib/ctypes/util.py | 77 ++--------------------------------------------\n 1 file changed, 2 insertions(+), 75 deletions(-)\n\ndiff --git a/Lib/ctypes/util.py b/Lib/ctypes/util.py\nindex 0c2510e161..7fb98af308 100644\n--- a/Lib/ctypes/util.py\n+++ b/Lib/ctypes/util.py\n@@ -268,34 +222,7 @@ def find_library(name, is64 = False):\n     else:\n \n         def _findSoname_ldconfig(name):\n-            import struct\n-            if struct.calcsize('l') == 4:\n-                machine = os.uname().machine + '-32'\n-            else:\n-                machine = os.uname().machine + '-64'\n-            mach_map = {\n-                'x86_64-64': 'libc6,x86-64',\n-                'ppc64-64': 'libc6,64bit',\n-                'sparc64-64': 'libc6,64bit',\n-                's390x-64': 'libc6,64bit',\n-                'ia64-64': 'libc6,IA-64',\n-                }\n-            abi_type = mach_map.get(machine, 'libc6')\n-\n-            # XXX assuming GLIBC's ldconfig (with option -p)\n-            regex = r'\\s+(lib%s\\.[^\\s]+)\\s+\\(%s'\n-            regex = os.fsencode(regex % (re.escape(name), abi_type))\n-            try:\n-                with subprocess.Popen(['/sbin/ldconfig', '-p'],\n-                                      stdin=subprocess.DEVNULL,\n-                                      stderr=subprocess.DEVNULL,\n-                                      stdout=subprocess.PIPE,\n-                                      env={'LC_ALL': 'C', 'LANG': 'C'}) as p:\n-                    res = re.search(regex, p.stdout.read())\n-                    if res:\n-                        return os.fsdecode(res.group(1))\n-            except OSError:\n-                pass\n+            return None\n \n         def _findLib_ld(name):\n             # See issue #9998 for why this is needed\n-- \n2.33.1\n\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/Lib/venv/__init__.py b/Lib/venv/__init__.py\nindex 4856594755..6769ab8026 100644\n--- a/Lib/venv/__init__.py\n+++ b/Lib/venv/__init__.py\n@@ -522,6 +522,7 @@ def skip_file(f):\n                     with open(dstfile, 'wb') as f:\n                         f.write(new_data)\n                     shutil.copymode(srcfile, dstfile)\n+                os.chmod(dstfile, 0o644)\n \n     def upgrade_dependencies(self, context):\n         logger.debug(\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://www.python.org/ftp/python/3.13.9/Python-3.13.9.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "ed5ef34cda36cfa2f3a340f07cac7e7814f91c7f3c411f6d3562323a866c5c66"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.python.org"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "3v1kbi48nc1hxq8b27sgcsaa094lalz5-libdeflate-1.25",
      "name": "libdeflate",
      "version": "1.25",
      "description": "Fast DEFLATE/zlib/gzip compressor and decompressor",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/libdeflate@1.25",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/ebiggers/libdeflate/archive/v1.25.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "d93895de4985b3d8f86987ada18796837f8ca19e78dbfd33683d21c27f5bf190"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/ebiggers/libdeflate"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "3z2g6kbamvxsgzgkrxww6zcyi2d3cmgk-python3.13-greenlet-3.2.3",
      "name": "greenlet",
      "version": "3.2.3",
      "description": "Module for lightweight in-process concurrent programming",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "Python-2.0"
          }
        },
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/greenlet@3.2.3",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/g/greenlet/greenlet-3.2.3.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "8b0dd8ae4c0d6f5e54ee55ba935eeb3d735a9b58a8a1e5b5cbab64e01a39f365"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/python-greenlet/greenlet"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "406b79klgsd5s9hz3qbdp9xbcbpn0in6-python3.13-flit-core-3.12.0",
      "name": "flit-core",
      "version": "3.12.0",
      "description": "Distribution-building parts of Flit. See flit package for more information",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/flit-core@3.12.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/pypa/flit/archive/3.12.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "a1657e28adb6fa22bdf6208e08a095d4e08bab611fd5b71844a5d3e461f088bf"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/pypa/flit"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "41aj9k3h856ikl17hwqjd6js74panv64-python3.13-mypy-extensions-1.1.0",
      "name": "mypy-extensions",
      "version": "1.1.0",
      "description": "Experimental type system extensions for programs checked with the mypy typechecker",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/mypy-extensions@1.1.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/python/mypy_extensions/archive/refs/tags/1.1.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "1cd005b165f8b54f617d990ac4b3499f527e1f7b937ac41f95b44f968dc64389"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.mypy-lang.org"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "4424mzk2pyia5v1j33zjgrjaivrdy03y-icu4c-76.1",
      "name": "icu4c",
      "version": "76.1",
      "description": "Unicode and globalization support library",
      "scope": "required",
      "purl": "pkg:nix/icu4c@76.1",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/unicode-org/icu/releases/download/release-76-1/icu4c-76_1-src.tgz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "dfacb46bfe4747410472ce3e1144bf28a102feeaa4e3875bac9b4c6cf30f4f3e"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://icu.unicode.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "49jajz5qx6v8dad3fhkr1nrzw9lk8a6p-libice-1.1.2",
      "name": "libice",
      "version": "1.1.2",
      "description": "Inter-Client Exchange Library",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT-open-group"
          }
        }
      ],
      "purl": "pkg:nix/libice@1.1.2",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://xorg/individual/lib/libICE-1.1.2.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "974e4ed414225eb3c716985df9709f4da8d22a67a2890066bc6dfc89ad298625"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://gitlab.freedesktop.org/xorg/lib/libice"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "4cvkj82hclh2p0srirhjvx9l08zmplkw-libthai-0.1.29-dev",
      "name": "libthai",
      "version": "0.1.29",
      "description": "Set of Thai language support routines",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "LGPL-2.1-or-later"
          }
        }
      ],
      "purl": "pkg:nix/libthai@0.1.29",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/tlwg/libthai/releases/download/v0.1.29/libthai-0.1.29.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "fc80cc7dcb50e11302b417cebd24f2d30a8b987292e77e003267b9100d0f4bcd"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://linux.thai.net/projects/libthai/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "4flh81qrbfck9g0zh7m1za0hs26q5pmg-gobject-introspection-wrapped-1.86.0-dev",
      "name": "gobject-introspection-wrapped",
      "version": "1.86.0",
      "description": "Middleware layer between C libraries and language bindings",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-2.0"
          }
        },
        {
          "license": {
            "id": "LGPL-2.0"
          }
        }
      ],
      "purl": "pkg:nix/gobject-introspection-wrapped@1.86.0",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/giscanner/scannermain.py b/giscanner/scannermain.py\nindex 64575557..1eb0a2b4 100644\n--- a/giscanner/scannermain.py\n+++ b/giscanner/scannermain.py\n@@ -95,6 +95,39 @@ def get_windows_option_group(parser):\n     return group\n \n \n+def _get_default_fallback_libpath():\n+    # Newer multiple-output-optimized stdenv has an environment variable\n+    # $outputLib which in turn specifies another variable which then is used as\n+    # the destination for the library contents (${!outputLib}/lib).\n+    store_path = os.environ.get(os.environ.get(\"outputLib\")) if \"outputLib\" in os.environ else None\n+    if store_path is None:\n+        outputs = os.environ.get(\"outputs\", \"out\").split()\n+        if \"lib\" in outputs:\n+            # For multiple output derivations let's try whether there is a $lib\n+            # environment variable and use that as the base store path.\n+            store_path = os.environ.get(\"lib\")\n+        elif \"out\" in outputs:\n+            # Otherwise we have a single output derivation, so the libraries\n+            # most certainly will end up in \"$out/lib\".\n+            store_path = os.environ.get(\"out\")\n+\n+    if store_path is not None:\n+        # Even if we have a $lib as output, there still should be a $lib/lib\n+        # directory.\n+        return os.path.join(store_path, 'lib')\n+    else:\n+        # If we haven't found a possible scenario, let's return an empty string\n+        # so that the shared library won't be prepended with a path.\n+        #\n+        # Note that this doesn't mean that all hope is lost, because after all\n+        # we can still use --fallback-library-path to set one.\n+        #\n+        # Also, we're not returning None, because that would make it very\n+        # difficult to disable adding fallback paths altogether using something\n+        # like: --fallback-library-path=\"\"\n+        return \"\"\n+\n+\n def _get_option_parser():\n     parser = optparse.OptionParser('%prog [options] sources',\n                                    version='%prog ' + giscanner.__version__)\n@@ -214,6 +247,10 @@ match the namespace prefix.\"\"\")\n     parser.add_option(\"\", \"--c-include\",\n                       action=\"append\", dest=\"c_includes\", default=[],\n                       help=\"headers which should be included in C programs\")\n+    parser.add_option(\"\", \"--fallback-library-path\",\n+                      action=\"store\", dest=\"fallback_libpath\",\n+                      default=_get_default_fallback_libpath(),\n+                      help=\"Path to prepend to unknown shared libraries\")\n     parser.add_option(\"\", \"--filelist\",\n                       action=\"store\", dest=\"filelist\", default=[],\n                       help=\"file containing headers and sources to be scanned\")\ndiff --git a/giscanner/shlibs.py b/giscanner/shlibs.py\nindex 9f8ab5df..af325022 100644\n--- a/giscanner/shlibs.py\n+++ b/giscanner/shlibs.py\n@@ -57,6 +57,12 @@ def _ldd_library_pattern(library_name):\n     $\"\"\" % re.escape(library_name), re.VERBOSE)\n \n \n+def _ldd_library_nix_pattern(library_name):\n+    nix_store_dir = re.escape('/nix/store'.rstrip('/'))\n+    pattern = r'(%s(?:/[^/]*)+lib%s[^A-Za-z0-9_-][^\\s\\(\\)]*)'\n+    return re.compile(pattern % (nix_store_dir, re.escape(library_name)))\n+\n+\n # This is a what we do for non-la files. We assume that we are on an\n # ELF-like system where ldd exists and the soname extracted with ldd is\n # a filename that can be opened with dlopen().\n@@ -108,7 +114,8 @@ def _resolve_non_libtool(options, binary, libraries):\n             output = output.decode(\"utf-8\", \"replace\")\n \n         shlibs = resolve_from_ldd_output(libraries, output)\n-        return list(map(sanitize_shlib_path, shlibs))\n+        fallback_libpath = options.fallback_libpath or \"\";\n+        return list(map(lambda p: os.path.join(fallback_libpath, p), map(sanitize_shlib_path, shlibs)))\n \n \n def sanitize_shlib_path(lib):\n@@ -117,19 +124,18 @@ def sanitize_shlib_path(lib):\n     # In case we get relative paths on macOS (like @rpath) then we fall\n     # back to the basename as well:\n     # https://gitlab.gnome.org/GNOME/gobject-introspection/issues/222\n-    if sys.platform == \"darwin\":\n-        if not os.path.isabs(lib):\n-            return os.path.basename(lib)\n-        return lib\n-    else:\n+\n+    # Always use absolute paths if available\n+    if not os.path.isabs(lib):\n         return os.path.basename(lib)\n+    return lib\n \n \n def resolve_from_ldd_output(libraries, output):\n     patterns = {}\n     for library in libraries:\n         if not os.path.isfile(library):\n-            patterns[library] = _ldd_library_pattern(library)\n+            patterns[library] = (_ldd_library_pattern(library), _ldd_library_nix_pattern(library))\n     if len(patterns) == 0:\n         return []\n \n@@ -141,8 +147,11 @@ def resolve_from_ldd_output(libraries, output):\n         if line.endswith(':'):\n             continue\n         for word in line.split():\n-            for library, pattern in patterns.items():\n-                m = pattern.match(word)\n+            for library, (pattern, nix_pattern) in patterns.items():\n+                if line.find('/nix/store') != -1:\n+                    m = nix_pattern.match(word)\n+                else:\n+                    m = pattern.match(word)\n                 if m:\n                     del patterns[library]\n                     shlibs.append(m.group())\ndiff --git a/giscanner/utils.py b/giscanner/utils.py\nindex 31c7ea48..630002a8 100644\n--- a/giscanner/utils.py\n+++ b/giscanner/utils.py\n@@ -114,16 +114,11 @@ def extract_libtool_shlib(la_file):\n     if dlname is None:\n         return None\n \n-    # Darwin uses absolute paths where possible; since the libtool files never\n-    # contain absolute paths, use the libdir field\n-    if platform.system() == 'Darwin':\n-        dlbasename = os.path.basename(dlname)\n-        libdir = _extract_libdir_field(la_file)\n-        if libdir is None:\n-            return dlbasename\n-        return libdir + '/' + dlbasename\n-    # Older libtools had a path rather than the raw dlname\n-    return os.path.basename(dlname)\n+    dlbasename = os.path.basename(dlname)\n+    libdir = _extract_libdir_field(la_file)\n+    if libdir is None:\n+        return dlbasename\n+    return libdir + '/' + dlbasename\n \n \n # Returns arguments for invoking libtool, if applicable, otherwise None\ndiff --git a/tests/scanner/test_shlibs.py b/tests/scanner/test_shlibs.py\nindex a8337c60..72789d76 100644\n--- a/tests/scanner/test_shlibs.py\n+++ b/tests/scanner/test_shlibs.py\n@@ -7,6 +7,30 @@ from giscanner.shlibs import resolve_from_ldd_output, sanitize_shlib_path\n \n class TestLddParser(unittest.TestCase):\n \n+    def test_resolve_from_ldd_output_nix(self):\n+        output = '''\\\n+            libglib-2.0.so.0 => /nix/store/gmrf09y7sfxrr0mcx90dba7w41jj2kzk-glib-2.58.1/lib/libglib-2.0.so.0 (0x00007f0ee1b28000)\n+            libgobject-2.0.so.0 => /nix/store/gmrf09y7sfxrr0mcx90dba7w41jj2kzk-glib-2.58.1/lib/libgobject-2.0.so.0 (0x00007f0ee18cf000)\n+            libgio-2.0.so.0 => /nix/store/gmrf09y7sfxrr0mcx90dba7w41jj2kzk-glib-2.58.1/lib/libgio-2.0.so.0 (0x00007f0ee1502000)\n+            libxml2.so.2 => /nix/store/72mxkk74cv266snkjpz1kwl1i2rg8rpc-libxml2-2.9.8/lib/libxml2.so.2 (0x00007f0ee119c000)\n+            libsqlite3.so.0 => /nix/store/ck5ay23hsmlc67pg3m34kzd1k2hhvww0-sqlite-3.24.0/lib/libsqlite3.so.0 (0x00007f0ee0e98000)\n+            libpsl.so.5 => /nix/store/qn3l2gn7m76f318676wflrs2z6d4rrkj-libpsl-0.20.2-list-2017-02-03/lib/libpsl.so.5 (0x00007f0ee0c88000)\n+            libc.so.6 => /nix/store/g2yk54hifqlsjiha3szr4q3ccmdzyrdv-glibc-2.27/lib/libc.so.6 (0x00007f0ee08d4000)\n+            libpcre.so.1 => /nix/store/hxbq8lpc53qsf1bc0dfcsm47wmcxzjvh-pcre-8.42/lib/libpcre.so.1 (0x00007f0ee0662000)\n+            /nix/store/g2yk54hifqlsjiha3szr4q3ccmdzyrdv-glibc-2.27/lib64/ld-linux-x86-64.so.2 (0x00007f0ee20ff000)\n+            libblkid.so.1 => /nix/store/q0kgnq21j0l2yd77gdlld371246cwghh-util-linux-2.32.1/lib/libblkid.so.1 (0x00007f0edd0cd000)\n+            libuuid.so.1 => /nix/store/q0kgnq21j0l2yd77gdlld371246cwghh-util-linux-2.32.1/lib/libuuid.so.1 (0x00007f0edcec5000)\n+            librt.so.1 => /nix/store/g2yk54hifqlsjiha3szr4q3ccmdzyrdv-glibc-2.27/lib/librt.so.1 (0x00007f0edccbd000)\n+            libstdc++.so.6 => /nix/store/3v5r7fkrbkw2qajadvjbf6p6qriz9p1i-gcc-7.3.0-lib/lib/libstdc++.so.6 (0x00007f0edc936000)\n+            libgcc_s.so.1 => /nix/store/g2yk54hifqlsjiha3szr4q3ccmdzyrdv-glibc-2.27/lib/libgcc_s.so.1 (0x00007f0edc720000)\n+        '''\n+        libraries = ['glib-2.0', 'gio-2.0']\n+\n+        self.assertEqual(\n+            ['/nix/store/gmrf09y7sfxrr0mcx90dba7w41jj2kzk-glib-2.58.1/lib/libglib-2.0.so.0',\n+             '/nix/store/gmrf09y7sfxrr0mcx90dba7w41jj2kzk-glib-2.58.1/lib/libgio-2.0.so.0'],\n+            resolve_from_ldd_output(libraries, output))\n+\n     def test_resolve_from_ldd_output(self):\n         output = '''\\\n             libglib-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fbe12d68000)\n@@ -40,7 +64,8 @@ class TestLddParser(unittest.TestCase):\n \n         self.assertEqual(\n             sanitize_shlib_path('/foo/bar'),\n-            '/foo/bar' if sys.platform == 'darwin' else 'bar')\n+            # NixOS always want the absolute path\n+            '/foo/bar')\n \n     def test_unresolved_library(self):\n         output = ''\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://gnome/sources/gobject-introspection/1.86/gobject-introspection-1.86.0.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "920d1a3fcedeadc32acff95c2e203b319039dd4b4a08dd1a2dfd283d19c0b9ae"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://gi.readthedocs.io/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "4gnl4jyf9c07yzapz8sahiw9y0xisshp-docbook-xsl-nons-1.79.2",
      "name": "docbook-xsl-nons",
      "version": "1.79.2",
      "description": "XSL stylesheets for transforming DocBook documents into HTML and various other formats",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/docbook-xsl-nons@1.79.2",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- docbook-xsl/lib/lib.xsl\n+++ docbook-xsl/lib/lib.xsl\n@@ -10,7 +10,10 @@\n \n      This module implements DTD-independent functions\n \n-     ******************************************************************** --><xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\n+     ******************************************************************** --><xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"\n+                xmlns:str=\"http://exslt.org/strings\"\n+                exclude-result-prefixes=\"str\"\n+                version=\"1.0\">\n \n <xsl:template name=\"dot.count\">\n   <!-- Returns the number of \".\" characters in a string -->\n@@ -56,6 +59,9 @@\n   <xsl:param name=\"replacement\"/>\n \n   <xsl:choose>\n+    <xsl:when test=\"function-available('str:replace')\">\n+      <xsl:value-of select=\"str:replace($string, string($target), string($replacement))\"/>\n+    </xsl:when>\n     <xsl:when test=\"contains($string, $target)\">\n       <xsl:variable name=\"rest\">\n         <xsl:call-template name=\"string.subst\">\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- xsl/fo/autoidx.xsl\n+++ xsl/fo/autoidx.xsl\n@@ -296,7 +296,8 @@\n   <fo:block>\n     <xsl:if test=\"$autolink.index.see != 0\">\n       <xsl:attribute name=\"id\">\n-        <xsl:value-of select=\"concat('ientry-', generate-id())\"/>\n+        <xsl:text>ientry-</xsl:text>\n+        <xsl:call-template name=\"object.id\"/>\n       </xsl:attribute>\n     </xsl:if>\n     <xsl:if test=\"$axf.extensions != 0\">\n@@ -791,7 +792,10 @@\n \n   <xsl:variable name=\"linkend\">\n     <xsl:if test=\"$seetarget\">\n-      <xsl:value-of select=\"concat('ientry-', generate-id($seetarget))\"/>\n+      <xsl:text>ientry-</xsl:text>\n+      <xsl:call-template name=\"object.id\">\n+        <xsl:with-param name=\"object\" select=\"$seetarget\"/>\n+      </xsl:call-template>\n     </xsl:if>\n   </xsl:variable>\n   \n@@ -853,7 +857,10 @@\n \n     <xsl:variable name=\"linkend\">\n       <xsl:if test=\"$seealsotarget\">\n-        <xsl:value-of select=\"concat('ientry-', generate-id($seealsotarget))\"/>\n+        <xsl:text>ientry-</xsl:text>\n+        <xsl:call-template name=\"object.id\">\n+          <xsl:with-param name=\"object\" select=\"$seealsotarget\"/>\n+        </xsl:call-template>\n       </xsl:if>\n     </xsl:variable>\n \n--- xsl/html/autoidx.xsl\n+++ xsl/html/autoidx.xsl\n@@ -307,7 +307,8 @@\n     <xsl:if test=\"$autolink.index.see != 0\">\n       <!-- add internal id attribute to form see and seealso links -->\n       <xsl:attribute name=\"id\">\n-        <xsl:value-of select=\"concat('ientry-', generate-id())\"/>\n+        <xsl:text>ientry-</xsl:text>\n+        <xsl:call-template name=\"object.id\"/>\n       </xsl:attribute>\n     </xsl:if>\n     <xsl:for-each select=\"$refs/d:primary\">\n@@ -730,7 +731,10 @@\n \n   <xsl:variable name=\"linkend\">\n     <xsl:if test=\"$seetarget\">\n-      <xsl:value-of select=\"concat('#ientry-', generate-id($seetarget))\"/>\n+      <xsl:text>#ientry-</xsl:text>\n+      <xsl:call-template name=\"object.id\">\n+        <xsl:with-param name=\"object\" select=\"$seetarget\"/>\n+      </xsl:call-template>\n     </xsl:if>\n   </xsl:variable>\n \n@@ -789,7 +793,10 @@\n \n     <xsl:variable name=\"linkend\">\n       <xsl:if test=\"$seealsotarget\">\n-        <xsl:value-of select=\"concat('#ientry-', generate-id($seealsotarget))\"/>\n+        <xsl:text>#ientry-</xsl:text>\n+        <xsl:call-template name=\"object.id\">\n+          <xsl:with-param name=\"object\" select=\"$seealsotarget\"/>\n+        </xsl:call-template>\n       </xsl:if>\n     </xsl:variable>\n \n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/catalog.xml\n+++ b/catalog.xml\n@@ -5,4 +5,7 @@\n   <rewriteSystem systemIdStartString=\"http://cdn.docbook.org/release/xsl-nons/current/\" rewritePrefix=\"./\"/>\n   <rewriteURI uriStartString=\"http://cdn.docbook.org/release/xsl-nons/1.79.2/\" rewritePrefix=\"./\"/>\n   <rewriteSystem systemIdStartString=\"http://cdn.docbook.org/release/xsl-nons/1.79.2/\" rewritePrefix=\"./\"/>\n+  <!-- legacy URIs -->\n+  <rewriteURI uriStartString=\"http://docbook.sourceforge.net/release/xsl/current/\" rewritePrefix=\"./\"/>\n+  <rewriteSystem systemIdStartString=\"http://docbook.sourceforge.net/release/xsl/current/\" rewritePrefix=\"./\"/>\n </catalog>\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/docbook/xslt10-stylesheets/releases/download/release%2F1.79.2/docbook-xsl-nons-1.79.2.tar.bz2"
        },
        {
          "type": "website",
          "url": "https://github.com/docbook/wiki/wiki/DocBookXslStylesheets"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "4qg3ak60iyzdkpkj5jnb9djagyy8yhxq-cmake-minimal-4.1.2-debug",
      "name": "cmake-minimal",
      "version": "4.1.2",
      "description": "Cross-platform, open-source build system generator",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/cmake-minimal@4.1.2",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/Source/cmFindBase.cxx b/Source/cmFindBase.cxx\nindex b8d4765692..902c1e5290 100644\n--- a/Source/cmFindBase.cxx\n+++ b/Source/cmFindBase.cxx\n@@ -312,6 +312,11 @@ void cmFindBase::FillCMakeEnvironmentPath()\n   // Add CMAKE_*_PATH environment variables\n   std::string var = cmStrCat(\"CMAKE_\", this->CMakePathName, \"_PATH\");\n   paths.AddEnvPrefixPath(\"CMAKE_PREFIX_PATH\");\n+  if (this->CMakePathName != \"PROGRAM\") {\n+    // Like CMAKE_PREFIX_PATH except when searching for programs. Programs need\n+    // to be located via PATH\n+    paths.AddEnvPrefixPath(\"NIXPKGS_CMAKE_PREFIX_PATH\");\n+  }\n   paths.AddEnvPath(var);\n \n   if (this->CMakePathName == \"PROGRAM\") {\ndiff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx\nindex 6201894fd1..9533862a2b 100644\n--- a/Source/cmFindPackageCommand.cxx\n+++ b/Source/cmFindPackageCommand.cxx\n@@ -2467,6 +2467,7 @@ void cmFindPackageCommand::FillPrefixesCMakeEnvironment()\n \n   // And now the general CMake environment variables\n   paths.AddEnvPath(\"CMAKE_PREFIX_PATH\");\n+  paths.AddEnvPath(\"NIXPKGS_CMAKE_PREFIX_PATH\");\n   if (this->DebugModeEnabled()) {\n     debugBuffer = cmStrCat(debugBuffer,\n                            \"CMAKE_PREFIX_PATH env variable \"\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/Modules/Platform/UnixPaths.cmake b/Modules/Platform/UnixPaths.cmake\nindex e95da44ea4..bdf4155232 100644\n--- a/Modules/Platform/UnixPaths.cmake\n+++ b/Modules/Platform/UnixPaths.cmake\n@@ -71,28 +71,38 @@\n   /lib /lib32 /lib64 /usr/lib /usr/lib32 /usr/lib64\n   )\n \n-if(CMAKE_SYSROOT_COMPILE)\n-  set(_cmake_sysroot_compile \"${CMAKE_SYSROOT_COMPILE}\")\n+# Add the Nix C library paths.\n+if(DEFINED ENV{NIX_CC}\n+  AND IS_DIRECTORY \"$ENV{NIX_CC}\"\n+  AND EXISTS \"$ENV{NIX_CC}/nix-support/orig-libc\"\n+  AND EXISTS \"$ENV{NIX_CC}/nix-support/orig-libc-dev\")\n+  file(STRINGS \"$ENV{NIX_CC}/nix-support/orig-libc\" _nix_cmake_libc)\n+  file(STRINGS \"$ENV{NIX_CC}/nix-support/orig-libc-dev\" _nix_cmake_libc_dev)\n else()\n-  set(_cmake_sysroot_compile \"${CMAKE_SYSROOT}\")\n+  set(_nix_cmake_libc @libc_lib@)\n+  set(_nix_cmake_libc_dev @libc_dev@)\n endif()\n+list(APPEND CMAKE_SYSTEM_INCLUDE_PATH \"${_nix_cmake_libc_dev}/include\")\n+list(APPEND CMAKE_SYSTEM_LIBRARY_PATH \"${_nix_cmake_libc}/lib\")\n+list(APPEND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES \"${_nix_cmake_libc}/lib\")\n \n # Default per-language values.  These may be later replaced after\n # parsing the implicit directory information from compiler output.\n set(_CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES_INIT\n   ${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}\n-  \"${_cmake_sysroot_compile}/usr/include\"\n+  \"${_nix_cmake_libc_dev}/include\"\n   )\n set(_CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES_INIT\n   ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}\n-  \"${_cmake_sysroot_compile}/usr/include\"\n+  \"${_nix_cmake_libc_dev}/include\"\n   )\n set(_CMAKE_CUDA_IMPLICIT_INCLUDE_DIRECTORIES_INIT\n   ${CMAKE_CUDA_IMPLICIT_INCLUDE_DIRECTORIES}\n-  \"${_cmake_sysroot_compile}/usr/include\"\n+  \"${_nix_cmake_libc_dev}/include\"\n   )\n \n-unset(_cmake_sysroot_compile)\n+unset(_nix_cmake_libc)\n+unset(_nix_cmake_libc_dev)\n \n # Reminder when adding new locations computed from environment variables\n # please make sure to keep Help/variable/CMAKE_SYSTEM_PREFIX_PATH.rst\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/Modules/CMakeDetermineJavaCompiler.cmake b/Modules/CMakeDetermineJavaCompiler.cmake\nindex b20a255621..bc67fdf4aa 100644\n--- a/Modules/CMakeDetermineJavaCompiler.cmake\n+++ b/Modules/CMakeDetermineJavaCompiler.cmake\n@@ -42,19 +42,6 @@\n     \"[HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\JavaSoft\\\\Java Development Kit\\\\1.4;JavaHome]/bin\"\n     \"[HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\JavaSoft\\\\Java Development Kit\\\\1.3;JavaHome]/bin\"\n     $ENV{JAVA_HOME}/bin\n-    /usr/bin\n-    /usr/lib/java/bin\n-    /usr/share/java/bin\n-    /usr/local/bin\n-    /usr/local/java/bin\n-    /usr/local/java/share/bin\n-    /usr/java/j2sdk1.4.2_04\n-    /usr/lib/j2sdk1.4-sun/bin\n-    /usr/java/j2sdk1.4.2_09/bin\n-    /usr/lib/j2sdk1.5-sun/bin\n-    /opt/sun-jdk-1.5.0.04/bin\n-    /usr/local/jdk-1.7.0/bin\n-    /usr/local/jdk-1.6.0/bin\n     )\n   # if no compiler has been specified yet, then look for one\n   if(CMAKE_Java_COMPILER_INIT)\ndiff --git a/Modules/CMakeDetermineSystem.cmake b/Modules/CMakeDetermineSystem.cmake\nindex dd8d30e3d9..d500364ba5 100644\n--- a/Modules/CMakeDetermineSystem.cmake\n+++ b/Modules/CMakeDetermineSystem.cmake\n@@ -9,7 +9,7 @@\n \n # find out on which system cmake runs\n if(CMAKE_HOST_UNIX)\n-  find_program(CMAKE_UNAME NAMES uname PATHS /bin /usr/bin /usr/local/bin)\n+  find_program(CMAKE_UNAME NAMES uname)\n   if(CMAKE_UNAME)\n     if(CMAKE_HOST_SYSTEM_NAME STREQUAL \"AIX\")\n       execute_process(COMMAND ${CMAKE_UNAME} -v\ndiff --git a/Modules/CMakeFindFrameworks.cmake b/Modules/CMakeFindFrameworks.cmake\nindex 87ad38b46b..95f226be40 100644\n--- a/Modules/CMakeFindFrameworks.cmake\n+++ b/Modules/CMakeFindFrameworks.cmake\n@@ -39,22 +39,10 @@\n   macro(CMAKE_FIND_FRAMEWORKS fwk)\n     set(${fwk}_FRAMEWORKS)\n     if(APPLE)\n-      # 'Frameworks' directory from Brew (Apple Silicon and Intel)\n-      if(CMAKE_SYSTEM_PROCESSOR STREQUAL \"arm64\")\n-        set(_brew_framework_path /opt/homebrew/Frameworks)\n-      else()\n-        set(_brew_framework_path /usr/local/Frameworks)\n-      endif()\n-\n       file(TO_CMAKE_PATH \"$ENV{CMAKE_FRAMEWORK_PATH}\" _cmff_CMAKE_FRAMEWORK_PATH)\n       set(_cmff_search_paths\n             ${CMAKE_FRAMEWORK_PATH}\n             ${_cmff_CMAKE_FRAMEWORK_PATH}\n-            ~/Library/Frameworks\n-            ${_brew_framework_path}\n-            /Library/Frameworks\n-            /System/Library/Frameworks\n-            /Network/Library/Frameworks\n             ${CMAKE_SYSTEM_FRAMEWORK_PATH})\n \n       # For backwards compatibility reasons,\ndiff --git a/Modules/CMakeFindJavaCommon.cmake b/Modules/CMakeFindJavaCommon.cmake\nindex 95ca9b57b6..616295e031 100644\n--- a/Modules/CMakeFindJavaCommon.cmake\n+++ b/Modules/CMakeFindJavaCommon.cmake\n@@ -15,20 +15,6 @@\n   if(_ENV_JAVA_HOME AND IS_DIRECTORY \"${_ENV_JAVA_HOME}\")\n     set(_JAVA_HOME \"${_ENV_JAVA_HOME}\")\n     set(_JAVA_HOME_EXPLICIT 1)\n-  else()\n-    set(_CMD_JAVA_HOME \"\")\n-    if(APPLE AND EXISTS /usr/libexec/java_home)\n-      execute_process(COMMAND /usr/libexec/java_home\n-        OUTPUT_VARIABLE _CMD_JAVA_HOME\n-        OUTPUT_STRIP_TRAILING_WHITESPACE\n-        ERROR_QUIET\n-      )\n-    endif()\n-    if(_CMD_JAVA_HOME AND IS_DIRECTORY \"${_CMD_JAVA_HOME}\")\n-      set(_JAVA_HOME \"${_CMD_JAVA_HOME}\")\n-      set(_JAVA_HOME_EXPLICIT 0)\n-    endif()\n-    unset(_CMD_JAVA_HOME)\n   endif()\n   unset(_ENV_JAVA_HOME)\n endif()\ndiff --git a/Modules/CMakeFindPackageMode.cmake b/Modules/CMakeFindPackageMode.cmake\nindex 6e2762cf41..f88cf2f7c1 100644\n--- a/Modules/CMakeFindPackageMode.cmake\n+++ b/Modules/CMakeFindPackageMode.cmake\n@@ -64,7 +64,7 @@\n   # from the outside\n   if(NOT CMAKE_SIZEOF_VOID_P)\n     set(CMAKE_SIZEOF_VOID_P 4)\n-    if(EXISTS ${CMAKE_SYSROOT}/usr/lib64)\n+    if(FALSE)\n       set(CMAKE_SIZEOF_VOID_P 8)\n     else()\n       # use the file utility to check whether itself is 64 bit:\n@@ -79,22 +79,6 @@\n     endif()\n   endif()\n \n-  # guess Debian multiarch if it has not been set:\n-  if(EXISTS /etc/debian_version)\n-    if(NOT CMAKE_${LANGUAGE}_LIBRARY_ARCHITECTURE )\n-      file(GLOB filesInLib RELATIVE /lib /lib/*-linux-gnu* )\n-      foreach(file ${filesInLib})\n-        if(\"${file}\" MATCHES \"${CMAKE_LIBRARY_ARCHITECTURE_REGEX}\")\n-          set(CMAKE_${LANGUAGE}_LIBRARY_ARCHITECTURE ${file})\n-          break()\n-        endif()\n-      endforeach()\n-    endif()\n-    if(NOT CMAKE_LIBRARY_ARCHITECTURE)\n-      set(CMAKE_LIBRARY_ARCHITECTURE ${CMAKE_${LANGUAGE}_LIBRARY_ARCHITECTURE})\n-    endif()\n-  endif()\n-\n endif()\n \n set(CMAKE_${LANGUAGE}_COMPILER \"dummy\")\ndiff --git a/Modules/CMakeFindSublimeText2.cmake b/Modules/CMakeFindSublimeText2.cmake\nindex fc0ec313b8..46d8418d2c 100644\n--- a/Modules/CMakeFindSublimeText2.cmake\n+++ b/Modules/CMakeFindSublimeText2.cmake\n@@ -7,15 +7,6 @@\n \n find_program(CMAKE_SUBLIMETEXT_EXECUTABLE\n     NAMES subl3 subl sublime_text\n-    PATHS\n-        \"/Applications/Sublime Text.app/Contents/SharedSupport/bin\"\n-        \"/Applications/Sublime Text 3.app/Contents/SharedSupport/bin\"\n-        \"/Applications/Sublime Text 2.app/Contents/SharedSupport/bin\"\n-        \"$ENV{HOME}/Applications/Sublime Text.app/Contents/SharedSupport/bin\"\n-        \"$ENV{HOME}/Applications/Sublime Text 3.app/Contents/SharedSupport/bin\"\n-        \"$ENV{HOME}/Applications/Sublime Text 2.app/Contents/SharedSupport/bin\"\n-        \"/opt/sublime_text\"\n-        \"/opt/sublime_text_3\"\n     DOC \"The Sublime Text executable\")\n \n if(CMAKE_SUBLIMETEXT_EXECUTABLE)\ndiff --git a/Modules/CPackIFW.cmake b/Modules/CPackIFW.cmake\nindex 2a2f478fd7..f22281bdca 100644\n--- a/Modules/CPackIFW.cmake\n+++ b/Modules/CPackIFW.cmake\n@@ -426,7 +426,7 @@\n else()\n   list(APPEND _CPACK_IFW_PATHS\n     \"$ENV{HOME}/Qt\"\n-    \"/opt/Qt\")\n+    )\n endif()\n list(REMOVE_DUPLICATES _CPACK_IFW_PATHS)\n \ndiff --git a/Modules/FindBLAS.cmake b/Modules/FindBLAS.cmake\nindex b45a279b94..884ccc0e32 100644\n--- a/Modules/FindBLAS.cmake\n+++ b/Modules/FindBLAS.cmake\n@@ -1098,16 +1098,8 @@\n     ((BLA_VENDOR STREQUAL \"ACML_GPU\") AND (NOT BLAS_ACML_GPU_LIB_DIRS))\n     )\n   # try to find acml in \"standard\" paths\n-  if(WIN32)\n-    file(GLOB _ACML_ROOT \"C:/AMD/acml*/ACML-EULA.txt\")\n-  else()\n-    file(GLOB _ACML_ROOT \"/opt/acml*/ACML-EULA.txt\")\n-  endif()\n-  if(WIN32)\n-    file(GLOB _ACML_GPU_ROOT \"C:/AMD/acml*/GPGPUexamples\")\n-  else()\n-    file(GLOB _ACML_GPU_ROOT \"/opt/acml*/GPGPUexamples\")\n-  endif()\n+  set(_ACML_ROOT)\n+  set(_ACML_GPU_ROOT)\n   list(GET _ACML_ROOT 0 _ACML_ROOT)\n   list(GET _ACML_GPU_ROOT 0 _ACML_GPU_ROOT)\n   if(_ACML_ROOT)\ndiff --git a/Modules/FindCUDA.cmake b/Modules/FindCUDA.cmake\nindex bceb615ca0..2350b15655 100644\n--- a/Modules/FindCUDA.cmake\n+++ b/Modules/FindCUDA.cmake\n@@ -854,7 +854,6 @@\n   # Now search default paths\n   find_program(CUDA_TOOLKIT_ROOT_DIR_NVCC\n     NAMES nvcc nvcc.exe\n-    PATHS /opt/cuda/bin\n     PATH_SUFFIXES cuda/bin\n     DOC \"Toolkit location.\"\n     )\n@@ -1014,7 +1013,6 @@\n     # Search default search paths, after we search our own set of paths.\n     find_library(${_var}\n       NAMES ${_names}\n-      PATHS \"/usr/lib/nvidia-current\"\n       DOC ${_doc}\n       )\n   endif()\n@@ -1114,11 +1112,6 @@\n   if (CUDA_rt_LIBRARY)\n     list(APPEND CUDA_LIBRARIES ${CUDA_rt_LIBRARY})\n   endif()\n-  if(APPLE)\n-    # We need to add the default path to the driver (libcuda.dylib) as an rpath, so that\n-    # the static cuda runtime can find it at runtime.\n-    list(APPEND CUDA_LIBRARIES -Wl,-rpath,/usr/local/cuda/lib)\n-  endif()\n else()\n   list(APPEND CUDA_LIBRARIES ${CUDA_CUDART_LIBRARY})\n endif()\n@@ -1223,8 +1216,6 @@\n   \"$ENV{NVSDKCOMPUTE_ROOT}/C\"\n   ENV NVSDKCUDA_ROOT\n   \"[HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\NVIDIA Corporation\\\\Installed Products\\\\NVIDIA SDK 10\\\\Compute;InstallDir]\"\n- PATHS\n-  \"/Developer/GPU\\ Computing/C\"\n   )\n \n # Keep the CUDA_SDK_ROOT_DIR first in order to be able to override the\n@@ -1236,7 +1227,6 @@\n   \"${CUDA_TOOLKIT_ROOT_DIR}/NV_CUDA_SDK\"\n   \"$ENV{HOME}/NVIDIA_CUDA_SDK\"\n   \"$ENV{HOME}/NVIDIA_CUDA_SDK_MACOSX\"\n-  \"/Developer/CUDA\"\n   )\n \n # Example of how to find an include file from the CUDA_SDK_ROOT_DIR\ndiff --git a/Modules/FindCUDAToolkit.cmake b/Modules/FindCUDAToolkit.cmake\nindex b00cd26b7e..f5f74ebe1d 100644\n--- a/Modules/FindCUDAToolkit.cmake\n+++ b/Modules/FindCUDAToolkit.cmake\n@@ -776,12 +776,6 @@\n       elseif(CUDAToolkit_ROOT_DIR AND EXISTS \"${CUDAToolkit_ROOT_DIR}/${vf}\")\n         set(${result_variable} \"${CUDAToolkit_ROOT_DIR}/${vf}\" PARENT_SCOPE)\n         break()\n-      elseif(CMAKE_SYSROOT_LINK AND EXISTS \"${CMAKE_SYSROOT_LINK}/usr/lib/cuda/${vf}\")\n-        set(${result_variable} \"${CMAKE_SYSROOT_LINK}/usr/lib/cuda/${vf}\" PARENT_SCOPE)\n-        break()\n-      elseif(EXISTS \"${CMAKE_SYSROOT}/usr/lib/cuda/${vf}\")\n-        set(${result_variable} \"${CMAKE_SYSROOT}/usr/lib/cuda/${vf}\" PARENT_SCOPE)\n-        break()\n       endif()\n     endforeach()\n   endfunction()\n@@ -864,18 +858,8 @@\n   # if CUDAToolkit_ROOT is not specified, it is assumed that the symlinked\n   # directory is the desired location.\n   if(NOT CUDAToolkit_ROOT_DIR)\n-    if(UNIX)\n-      if(NOT APPLE)\n-        set(platform_base \"/usr/local/cuda-\")\n-      else()\n-        set(platform_base \"/Developer/NVIDIA/CUDA-\")\n-      endif()\n-    else()\n-      set(platform_base \"C:\\\\Program Files\\\\NVIDIA GPU Computing Toolkit\\\\CUDA\\\\v\")\n-    endif()\n-\n     # Build out a descending list of possible cuda installations, e.g.\n-    file(GLOB possible_paths \"${platform_base}*\")\n+    set(possible_paths)\n     # Iterate the glob results and create a descending list.\n     set(versions)\n     foreach(p ${possible_paths})\n@@ -891,14 +875,6 @@\n \n     # With a descending list of versions, populate possible paths to search.\n     set(search_paths)\n-    foreach(v ${versions})\n-      list(APPEND search_paths \"${platform_base}${v}\")\n-    endforeach()\n-\n-    # Force the global default /usr/local/cuda to the front on Unix.\n-    if(UNIX)\n-      list(INSERT search_paths 0 \"/usr/local/cuda\")\n-    endif()\n \n     # Now search for the toolkit again using the platform default search paths.\n     _CUDAToolkit_find_root_dir(SEARCH_PATHS \"${search_paths}\" FIND_FLAGS PATH_SUFFIXES bin)\ndiff --git a/Modules/FindCoin3D.cmake b/Modules/FindCoin3D.cmake\nindex 1d89c604e0..5b70e71a87 100644\n--- a/Modules/FindCoin3D.cmake\n+++ b/Modules/FindCoin3D.cmake\n@@ -76,10 +76,8 @@\n else ()\n   if(APPLE)\n     find_path(COIN3D_INCLUDE_DIRS Inventor/So.h\n-     /Library/Frameworks/Inventor.framework/Headers\n     )\n     find_library(COIN3D_LIBRARIES Coin\n-      /Library/Frameworks/Inventor.framework/Libraries\n     )\n     set(COIN3D_LIBRARIES \"-framework Coin3d\" CACHE STRING \"Coin3D library for OSX\")\n   else()\ndiff --git a/Modules/FindCurses.cmake b/Modules/FindCurses.cmake\nindex 64600c6c64..de6af241a1 100644\n--- a/Modules/FindCurses.cmake\n+++ b/Modules/FindCurses.cmake\n@@ -136,15 +136,7 @@\n # message.  Cygwin is an ncurses package, so force ncurses on\n # cygwin if the curses.h is missing\n if(CURSES_NCURSES_LIBRARY AND CYGWIN)\n-  if (CURSES_NEED_WIDE)\n-    if(NOT EXISTS /usr/include/ncursesw/curses.h)\n-      set(CURSES_USE_NCURSES TRUE)\n-    endif()\n-  else()\n-    if(NOT EXISTS /usr/include/curses.h)\n-      set(CURSES_USE_NCURSES TRUE)\n-    endif()\n-  endif()\n+  set(CURSES_USE_NCURSES TRUE)\n endif()\n \n \ndiff --git a/Modules/FindDCMTK.cmake b/Modules/FindDCMTK.cmake\nindex 4e0ff47f52..6db26cb855 100644\n--- a/Modules/FindDCMTK.cmake\n+++ b/Modules/FindDCMTK.cmake\n@@ -88,14 +88,7 @@\n \n set(_dcmtk_dir_description \"The directory of DCMTK build or install tree.\")\n \n-# Ensure that DCMTK_DIR is set to a reasonable default value\n-# so that DCMTK libraries can be found on a standard Unix distribution.\n-# It also overwrite the value of DCMTK_DIR after this one has been\n-# set by a successful discovery of DCMTK by the unpatched FindDCMTK.cmake module\n-# distributed with CMake (as of 0167cea)\n-if(NOT DCMTK_DIR OR DCMTK_DIR STREQUAL \"/usr/include/dcmtk\")\n-  set(DCMTK_DIR \"/usr\" CACHE PATH ${_dcmtk_dir_description} FORCE)\n-endif()\n+set(DCMTK_DIR CACHE PATH ${_dcmtk_dir_description})\n \n set(_SAVED_DCMTK_DIR ${DCMTK_DIR})\n \ndiff --git a/Modules/FindDart.cmake b/Modules/FindDart.cmake\nindex 96cce45590..245dffaf21 100644\n--- a/Modules/FindDart.cmake\n+++ b/Modules/FindDart.cmake\n@@ -24,7 +24,6 @@\n       ENV DART_ROOT\n     PATHS\n       ${PROJECT_SOURCE_DIR}\n-      /usr/share\n       C:/\n       \"C:/Program Files\"\n       ${PROJECT_SOURCE_DIR}/..\ndiff --git a/Modules/FindDoxygen.cmake b/Modules/FindDoxygen.cmake\nindex 2d430994e8..335c733150 100644\n--- a/Modules/FindDoxygen.cmake\n+++ b/Modules/FindDoxygen.cmake\n@@ -755,10 +755,6 @@\n         NAMES doxygen\n         PATHS\n             \"[HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Uninstall\\\\doxygen_is1;Inno Setup: App Path]/bin\"\n-            /Applications/Doxygen.app/Contents/Resources\n-            /Applications/Doxygen.app/Contents/MacOS\n-            /Applications/Utilities/Doxygen.app/Contents/Resources\n-            /Applications/Utilities/Doxygen.app/Contents/MacOS\n         DOC \"Doxygen documentation generation tool (https://www.doxygen.nl)\"\n         VALIDATOR _Doxygen_version_validator\n     )\n@@ -845,12 +841,6 @@\n             \"$ENV{ProgramFiles}/ATT/Graphviz/bin\"\n             \"C:/Program Files/ATT/Graphviz/bin\"\n             [HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\ATT\\\\Graphviz;InstallPath]/bin\n-            /Applications/Graphviz.app/Contents/MacOS\n-            /Applications/Utilities/Graphviz.app/Contents/MacOS\n-            /Applications/Doxygen.app/Contents/Resources\n-            /Applications/Doxygen.app/Contents/MacOS\n-            /Applications/Utilities/Doxygen.app/Contents/Resources\n-            /Applications/Utilities/Doxygen.app/Contents/MacOS\n         DOC \"Dot tool for use with Doxygen\"\n     )\n     mark_as_advanced(DOXYGEN_DOT_EXECUTABLE)\ndiff --git a/Modules/FindFontconfig.cmake b/Modules/FindFontconfig.cmake\nindex 218ad2fbfa..94e6052564 100644\n--- a/Modules/FindFontconfig.cmake\n+++ b/Modules/FindFontconfig.cmake\n@@ -64,7 +64,6 @@\n     fontconfig/fontconfig.h\n   HINTS\n     ${PKG_FONTCONFIG_INCLUDE_DIRS}\n-    /usr/X11/include\n )\n \n find_library( Fontconfig_LIBRARY\ndiff --git a/Modules/FindGLUT.cmake b/Modules/FindGLUT.cmake\nindex e29758dc1c..d6255f98c2 100644\n--- a/Modules/FindGLUT.cmake\n+++ b/Modules/FindGLUT.cmake\n@@ -120,12 +120,10 @@\n     set(_GLUT_glut_LIB_DIR /boot/develop/lib/x86)\n   else()\n     find_library( GLUT_Xi_LIBRARY Xi\n-      /usr/openwin/lib\n       )\n     mark_as_advanced(GLUT_Xi_LIBRARY)\n \n     find_library( GLUT_Xmu_LIBRARY Xmu\n-      /usr/openwin/lib\n       )\n     mark_as_advanced(GLUT_Xmu_LIBRARY)\n \n@@ -145,11 +143,6 @@\n \n   find_path( GLUT_INCLUDE_DIR GL/glut.h\n     PATHS\n-    /usr/include/GL\n-    /usr/openwin/share/include\n-    /usr/openwin/include\n-    /opt/graphics/OpenGL/include\n-    /opt/graphics/OpenGL/contrib/libglut\n     ${_GLUT_INC_DIR}\n     HINTS\n     ${PC_GLUT_INCLUDE_DIRS}\n@@ -158,7 +151,6 @@\n \n   find_library( GLUT_glut_LIBRARY glut\n     PATHS\n-    /usr/openwin/lib\n     ${_GLUT_glut_LIB_DIR}\n     HINTS\n     ${PC_GLUT_LIBRARY_DIRS}\ndiff --git a/Modules/FindGTK.cmake b/Modules/FindGTK.cmake\nindex 6e39f5a989..df231de76e 100644\n--- a/Modules/FindGTK.cmake\n+++ b/Modules/FindGTK.cmake\n@@ -71,9 +71,6 @@\n   find_path( GTK_gtk_INCLUDE_PATH NAMES gtk/gtk.h\n     PATH_SUFFIXES gtk-1.2 gtk12\n     PATHS\n-    /usr/openwin/share/include\n-    /usr/openwin/include\n-    /opt/gnome/include\n   )\n \n   # Some Linux distributions (e.g. Red Hat) have glibconfig.h\n@@ -84,26 +81,17 @@\n   find_path( GTK_glibconfig_INCLUDE_PATH NAMES glibconfig.h\n     PATH_SUFFIXES glib/include lib/glib/include include/glib12\n     PATHS\n-    /usr/openwin/share/include\n-    /opt/gnome/include\n-    /opt/gnome/lib/glib/include\n   )\n \n   find_path( GTK_glib_INCLUDE_PATH NAMES glib.h\n     PATH_SUFFIXES gtk-1.2 glib-1.2 glib12 glib/include lib/glib/include\n     PATHS\n-    /usr/openwin/share/include\n-    /opt/gnome/include\n   )\n \n   find_path( GTK_gtkgl_INCLUDE_PATH NAMES gtkgl/gtkglarea.h\n-    PATHS /usr/openwin/share/include\n-          /opt/gnome/include\n   )\n \n   find_library( GTK_gtkgl_LIBRARY gtkgl\n-    /usr/openwin/lib\n-    /opt/gnome/lib\n   )\n \n   #\n@@ -112,38 +100,26 @@\n \n   find_library( GTK_gtk_LIBRARY\n     NAMES  gtk gtk12\n-    PATHS /usr/openwin/lib\n-          /opt/gnome/lib\n   )\n \n   find_library( GTK_gdk_LIBRARY\n     NAMES  gdk gdk12\n-    PATHS  /usr/openwin/lib\n-           /opt/gnome/lib\n   )\n \n   find_library( GTK_gmodule_LIBRARY\n     NAMES  gmodule gmodule12\n-    PATHS  /usr/openwin/lib\n-           /opt/gnome/lib\n   )\n \n   find_library( GTK_glib_LIBRARY\n     NAMES  glib glib12\n-    PATHS  /usr/openwin/lib\n-           /opt/gnome/lib\n   )\n \n   find_library( GTK_Xi_LIBRARY\n     NAMES Xi\n-    PATHS /usr/openwin/lib\n-          /opt/gnome/lib\n     )\n \n   find_library( GTK_gthread_LIBRARY\n     NAMES  gthread gthread12\n-    PATHS  /usr/openwin/lib\n-           /opt/gnome/lib\n   )\n \n   if(GTK_gtk_INCLUDE_PATH\ndiff --git a/Modules/FindGTK2.cmake b/Modules/FindGTK2.cmake\nindex 9c5bc63272..87f8f81149 100644\n--- a/Modules/FindGTK2.cmake\n+++ b/Modules/FindGTK2.cmake\n@@ -377,34 +377,12 @@\n                        \"include suffixes = ${_suffixes}\")\n     endif()\n \n-    if(CMAKE_LIBRARY_ARCHITECTURE)\n-      set(_gtk2_arch_dir /usr/lib/${CMAKE_LIBRARY_ARCHITECTURE})\n-      if(GTK2_DEBUG)\n-        message(STATUS \"Adding ${_gtk2_arch_dir} to search path for multiarch support\")\n-      endif()\n-    endif()\n     find_path(GTK2_${_var}_INCLUDE_DIR ${_hdr}\n         PATHS\n             ${PC_GLIB2_INCLUDEDIR}\n             ${PC_GLIB2_LIBDIR}\n             ${PC_GTK2_INCLUDEDIR}\n             ${PC_GTK2_LIBDIR}\n-            ${_gtk2_arch_dir}\n-            /usr/local/libx32\n-            /usr/local/lib64\n-            /usr/local/lib\n-            /usr/libx32\n-            /usr/lib64\n-            /usr/lib\n-            /opt/gnome/include\n-            /opt/gnome/lib\n-            /opt/openwin/include\n-            /usr/openwin/lib\n-            /sw/lib\n-            /opt/local/lib\n-            /opt/homebrew/lib\n-            /usr/pkg/lib\n-            /usr/pkg/include/glib\n             $ENV{GTKMM_BASEPATH}/include\n             $ENV{GTKMM_BASEPATH}/lib\n             [HKEY_CURRENT_USER\\\\SOFTWARE\\\\gtkmm\\\\2.4;Path]/include\n@@ -509,8 +487,6 @@\n     find_library(GTK2_${_var}_LIBRARY_RELEASE\n         NAMES ${_lib_list}\n         PATHS\n-            /opt/gnome/lib\n-            /usr/openwin/lib\n             $ENV{GTKMM_BASEPATH}/lib\n             [HKEY_CURRENT_USER\\\\SOFTWARE\\\\gtkmm\\\\2.4;Path]/lib\n             [HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\gtkmm\\\\2.4;Path]/lib\ndiff --git a/Modules/FindIce.cmake b/Modules/FindIce.cmake\nindex 82156747d3..cc3f2a64af 100644\n--- a/Modules/FindIce.cmake\n+++ b/Modules/FindIce.cmake\n@@ -629,11 +629,6 @@\n         list(APPEND ice_roots \"${ice_location}\")\n       endif()\n     endforeach()\n-  else()\n-    foreach(ice_version ${ice_versions})\n-      # Prefer 64-bit variants if present (and using a 64-bit compiler)\n-      list(APPEND ice_roots \"/opt/Ice-${ice_version}\")\n-    endforeach()\n   endif()\n \n   # Find all Ice programs\n@@ -689,7 +684,7 @@\n   # In common use on Linux, MacOS X (homebrew) and FreeBSD; prefer\n   # version-specific dir\n   list(APPEND ice_slice_paths\n-       /usr/local/share /usr/share)\n+       )\n   list(APPEND ice_slice_suffixes\n        \"Ice-${Ice_VERSION_SLICE2CPP_FULL}/slice\"\n        \"Ice-${Ice_VERSION_SLICE2CPP_SHORT}/slice\"\ndiff --git a/Modules/FindJNI.cmake b/Modules/FindJNI.cmake\nindex 10dcc51776..e272bd9583 100644\n--- a/Modules/FindJNI.cmake\n+++ b/Modules/FindJNI.cmake\n@@ -363,51 +363,6 @@\n endif()\n \n set(_JNI_JAVA_DIRECTORIES_BASE\n-  /usr/lib/jvm/java\n-  /usr/lib/java\n-  /usr/lib/jvm\n-  /usr/local/lib/java\n-  /usr/local/share/java\n-  /usr/lib/j2sdk1.4-sun\n-  /usr/lib/j2sdk1.5-sun\n-  /opt/sun-jdk-1.5.0.04\n-  /usr/lib/jvm/java-6-sun\n-  /usr/lib/jvm/java-1.5.0-sun\n-  /usr/lib/jvm/java-6-sun-1.6.0.00       # can this one be removed according to #8821 ? Alex\n-  /usr/lib/jvm/java-6-openjdk\n-  /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0        # fedora\n-  # Debian specific paths for default JVM\n-  /usr/lib/jvm/default-java\n-  # Arch Linux specific paths for default JVM\n-  /usr/lib/jvm/default\n-  # Ubuntu specific paths for default JVM\n-  /usr/lib/jvm/java-21-openjdk-{libarch}    # Ubuntu 23.04\n-  /usr/lib/jvm/java-20-openjdk-{libarch}    # Ubuntu 22.10\n-  /usr/lib/jvm/java-19-openjdk-{libarch}    # Ubuntu 22.04 LTS\n-  /usr/lib/jvm/java-18-openjdk-{libarch}    # Ubuntu 22.04 LTS\n-  /usr/lib/jvm/java-17-openjdk-{libarch}    # Ubuntu 18.04 LTS\n-  /usr/lib/jvm/java-16-openjdk-{libarch}    # Ubuntu 20.04 LTS\n-  /usr/lib/jvm/java-13-openjdk-{libarch}    # Ubuntu 20.04 LTS\n-  /usr/lib/jvm/java-11-openjdk-{libarch}    # Ubuntu 18.04 LTS\n-  /usr/lib/jvm/java-8-openjdk-{libarch}     # Ubuntu 15.10\n-  /usr/lib/jvm/java-7-openjdk-{libarch}     # Ubuntu 15.10\n-  /usr/lib/jvm/java-6-openjdk-{libarch}     # Ubuntu 15.10\n-  # OpenBSD specific paths for default JVM\n-  /usr/local/jdk-1.7.0\n-  /usr/local/jre-1.7.0\n-  /usr/local/jdk-1.6.0\n-  /usr/local/jre-1.6.0\n-  # FreeBSD specific paths for default JVM\n-  /usr/local/openjdk15\n-  /usr/local/openjdk14\n-  /usr/local/openjdk13\n-  /usr/local/openjdk12\n-  /usr/local/openjdk11\n-  /usr/local/openjdk8\n-  /usr/local/openjdk7\n-  # SuSE specific paths for default JVM\n-  /usr/lib64/jvm/java\n-  /usr/lib64/jvm/jre\n   )\n \n set(_JNI_JAVA_AWT_LIBRARY_TRIES)\ndiff --git a/Modules/FindJava.cmake b/Modules/FindJava.cmake\nindex 1587ce648b..e92213cba7 100644\n--- a/Modules/FindJava.cmake\n+++ b/Modules/FindJava.cmake\n@@ -199,17 +199,6 @@\n # Hard-coded guesses should still go in PATHS. This ensures that the user\n # environment can always override hard guesses.\n set(_JAVA_PATHS\n-  /usr/lib/java/bin\n-  /usr/share/java/bin\n-  /usr/local/java/bin\n-  /usr/local/java/share/bin\n-  /usr/java/j2sdk1.4.2_04\n-  /usr/lib/j2sdk1.4-sun/bin\n-  /usr/java/j2sdk1.4.2_09/bin\n-  /usr/lib/j2sdk1.5-sun/bin\n-  /opt/sun-jdk-1.5.0.04/bin\n-  /usr/local/jdk-1.7.0/bin\n-  /usr/local/jdk-1.6.0/bin\n   )\n find_program(Java_JAVA_EXECUTABLE\n   NAMES java\ndiff --git a/Modules/FindKDE3.cmake b/Modules/FindKDE3.cmake\nindex ccfad5e7fb..265e99eb1a 100644\n--- a/Modules/FindKDE3.cmake\n+++ b/Modules/FindKDE3.cmake\n@@ -234,9 +234,6 @@\n find_program(KDECONFIG_EXECUTABLE NAMES kde-config\n   HINTS\n     $ENV{KDEDIR}/bin\n-  PATHS\n-    /opt/kde3/bin\n-    /opt/kde/bin\n   )\n \n set(KDE3PREFIX)\n@@ -261,9 +258,6 @@\n   HINTS\n     $ENV{KDEDIR}/include\n     ${KDE3PREFIX}/include\n-  PATHS\n-    /opt/kde3/include\n-    /opt/kde/include\n   PATH_SUFFIXES include/kde\n   )\n \n@@ -272,9 +266,6 @@\n   HINTS\n     $ENV{KDEDIR}/lib\n     ${KDE3PREFIX}/lib\n-  PATHS\n-    /opt/kde3/lib\n-    /opt/kde/lib\n )\n \n set(QT_AND_KDECORE_LIBS ${QT_LIBRARIES} ${KDE3_KDECORE_LIBRARY})\n@@ -296,27 +287,18 @@\n   HINTS\n     $ENV{KDEDIR}/bin\n     ${KDE3PREFIX}/bin\n-  PATHS\n-    /opt/kde3/bin\n-    /opt/kde/bin\n   )\n \n find_program(KDE3_DCOPIDL2CPP_EXECUTABLE NAMES dcopidl2cpp\n   HINTS\n     $ENV{KDEDIR}/bin\n     ${KDE3PREFIX}/bin\n-  PATHS\n-    /opt/kde3/bin\n-    /opt/kde/bin\n   )\n \n find_program(KDE3_KCFGC_EXECUTABLE NAMES kconfig_compiler\n   HINTS\n     $ENV{KDEDIR}/bin\n     ${KDE3PREFIX}/bin\n-  PATHS\n-    /opt/kde3/bin\n-    /opt/kde/bin\n   )\n \n \ndiff --git a/Modules/FindKDE4.cmake b/Modules/FindKDE4.cmake\nindex 220906b2de..7eb7b692d8 100644\n--- a/Modules/FindKDE4.cmake\n+++ b/Modules/FindKDE4.cmake\n@@ -52,7 +52,6 @@\n    HINTS\n    ${CMAKE_INSTALL_PREFIX}\n    ${_KDEDIRS}\n-   /opt/kde4\n    ONLY_CMAKE_FIND_ROOT_PATH\n    )\n \ndiff --git a/Modules/FindLATEX.cmake b/Modules/FindLATEX.cmake\nindex e272770af3..9f702c3f6d 100644\n--- a/Modules/FindLATEX.cmake\n+++ b/Modules/FindLATEX.cmake\n@@ -203,14 +203,12 @@\n find_program(LATEX_COMPILER\n   NAMES latex\n   PATHS ${MIKTEX_BINARY_PATH}\n-        /usr/bin\n )\n \n # find pdflatex\n find_program(PDFLATEX_COMPILER\n   NAMES pdflatex\n   PATHS ${MIKTEX_BINARY_PATH}\n-        /usr/bin\n )\n if (PDFLATEX_COMPILER)\n   set(LATEX_PDFLATEX_FOUND TRUE)\n@@ -222,7 +220,6 @@\n find_program(XELATEX_COMPILER\n   NAMES xelatex\n   PATHS ${MIKTEX_BINARY_PATH}\n-        /usr/bin\n )\n if (XELATEX_COMPILER)\n   set(LATEX_XELATEX_FOUND TRUE)\n@@ -234,7 +231,6 @@\n find_program(LUALATEX_COMPILER\n   NAMES lualatex\n   PATHS ${MIKTEX_BINARY_PATH}\n-        /usr/bin\n )\n if (LUALATEX_COMPILER)\n   set(LATEX_LUALATEX_FOUND TRUE)\n@@ -246,7 +242,6 @@\n find_program(BIBTEX_COMPILER\n   NAMES bibtex\n   PATHS ${MIKTEX_BINARY_PATH}\n-        /usr/bin\n )\n if (BIBTEX_COMPILER)\n   set(LATEX_BIBTEX_FOUND TRUE)\n@@ -258,7 +253,6 @@\n find_program(BIBER_COMPILER\n   NAMES biber\n   PATHS ${MIKTEX_BINARY_PATH}\n-        /usr/bin\n )\n if (BIBER_COMPILER)\n   set(LATEX_BIBER_FOUND TRUE)\n@@ -270,7 +264,6 @@\n find_program(MAKEINDEX_COMPILER\n   NAMES makeindex\n   PATHS ${MIKTEX_BINARY_PATH}\n-        /usr/bin\n )\n if (MAKEINDEX_COMPILER)\n   set(LATEX_MAKEINDEX_FOUND TRUE)\n@@ -282,7 +275,6 @@\n find_program(XINDY_COMPILER\n   NAMES xindy\n   PATHS ${MIKTEX_BINARY_PATH}\n-        /usr/bin\n )\n if (XINDY_COMPILER)\n   set(LATEX_XINDY_FOUND TRUE)\n@@ -294,7 +286,6 @@\n find_program(DVIPS_CONVERTER\n   NAMES dvips\n   PATHS ${MIKTEX_BINARY_PATH}\n-        /usr/bin\n )\n if (DVIPS_CONVERTER)\n   set(LATEX_DVIPS_FOUND TRUE)\n@@ -306,7 +297,6 @@\n find_program(DVIPDF_CONVERTER\n   NAMES dvipdfm dvipdft dvipdf\n   PATHS ${MIKTEX_BINARY_PATH}\n-        /usr/bin\n )\n if (DVIPDF_CONVERTER)\n   set(LATEX_DVIPDF_FOUND TRUE)\n@@ -336,7 +326,6 @@\n find_program(PDFTOPS_CONVERTER\n   NAMES pdftops\n   PATHS ${MIKTEX_BINARY_PATH}\n-        /usr/bin\n )\n if (PDFTOPS_CONVERTER)\n   set(LATEX_PDFTOPS_FOUND TRUE)\n@@ -348,7 +337,6 @@\n find_program(LATEX2HTML_CONVERTER\n   NAMES latex2html\n   PATHS ${MIKTEX_BINARY_PATH}\n-        /usr/bin\n )\n if (LATEX2HTML_CONVERTER)\n   set(LATEX_LATEX2HTML_FOUND TRUE)\n@@ -360,7 +348,6 @@\n find_program(HTLATEX_COMPILER\n   NAMES htlatex\n   PATHS ${MIKTEX_BINARY_PATH}\n-        /usr/bin\n )\n if (HTLATEX_COMPILER)\n   set(LATEX_HTLATEX_FOUND TRUE)\ndiff --git a/Modules/FindLua50.cmake b/Modules/FindLua50.cmake\nindex ac36c86640..fe5d2147e8 100644\n--- a/Modules/FindLua50.cmake\n+++ b/Modules/FindLua50.cmake\n@@ -84,10 +84,6 @@\n   HINTS\n     ENV LUA_DIR\n   PATH_SUFFIXES lua50 lua5.0 lua5 lua\n-  PATHS\n-  ~/Library/Frameworks\n-  /Library/Frameworks\n-  /opt\n )\n \n find_library(LUA_LIBRARY_lua\n@@ -95,10 +91,6 @@\n   HINTS\n     ENV LUA_DIR\n   PATH_SUFFIXES lib\n-  PATHS\n-  ~/Library/Frameworks\n-  /Library/Frameworks\n-  /opt\n )\n \n # In an OS X framework, lualib is usually included as part of the framework\n@@ -113,7 +105,6 @@\n       ENV LUA_DIR\n     PATH_SUFFIXES lib\n     PATHS\n-    /opt\n   )\n   if(LUA_LIBRARY_lualib AND LUA_LIBRARY_lua)\n     # include the math library for Unix\ndiff --git a/Modules/FindLua51.cmake b/Modules/FindLua51.cmake\nindex cba30e4b58..21a95cb89f 100644\n--- a/Modules/FindLua51.cmake\n+++ b/Modules/FindLua51.cmake\n@@ -87,10 +87,6 @@\n   HINTS\n     ENV LUA_DIR\n   PATH_SUFFIXES lua51 lua5.1 lua-5.1 lua\n-  PATHS\n-  ~/Library/Frameworks\n-  /Library/Frameworks\n-  /opt\n )\n \n find_library(LUA_LIBRARY\n@@ -98,10 +94,6 @@\n   HINTS\n     ENV LUA_DIR\n   PATH_SUFFIXES lib\n-  PATHS\n-  ~/Library/Frameworks\n-  /Library/Frameworks\n-  /opt\n )\n \n if(LUA_LIBRARY)\ndiff --git a/Modules/FindMPI.cmake b/Modules/FindMPI.cmake\nindex 78b1c5c915..741f86aaef 100644\n--- a/Modules/FindMPI.cmake\n+++ b/Modules/FindMPI.cmake\n@@ -1349,15 +1349,6 @@\n endmacro()\n \n set(MPI_HINT_DIRS ${MPI_HOME} $ENV{MPI_HOME} $ENV{I_MPI_ROOT})\n-if(CMAKE_HOST_SYSTEM_NAME STREQUAL \"Linux\")\n-  # SUSE Linux Enterprise Server stores its MPI implementations under /usr/lib64/mpi/gcc/<name>\n-  # We enumerate the subfolders and append each as a prefix\n-  MPI_search_mpi_prefix_folder(\"/usr/lib64/mpi/gcc\")\n-elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL \"FreeBSD\")\n-  # FreeBSD ships mpich under the normal system paths - but available openmpi implementations\n-  # will be found in /usr/local/mpi/<name>\n-  MPI_search_mpi_prefix_folder(\"/usr/local/mpi\")\n-endif()\n \n # Most MPI distributions have some form of mpiexec or mpirun which gives us something we can look for.\n # The MPI standard does not mandate the existence of either, but instead only makes requirements if a distribution\ndiff --git a/Modules/FindMatlab.cmake b/Modules/FindMatlab.cmake\nindex 8a7bd80957..74009fbebc 100644\n--- a/Modules/FindMatlab.cmake\n+++ b/Modules/FindMatlab.cmake\n@@ -1529,7 +1529,7 @@\n   endif()\n \n   foreach(_matlab_current_release IN LISTS _matlab_releases)\n-    foreach(_macos_app_base IN ITEMS \"$ENV{HOME}/Applications\" \"/Applications\")\n+    foreach(_macos_app_base IN ITEMS)\n       matlab_get_version_from_release_name(\"${_matlab_current_release}\" _matlab_current_version)\n       string(REPLACE \".\" \"\" _matlab_current_version_without_dot \"${_matlab_current_version}\")\n       set(_matlab_base_path \"${_macos_app_base}/MATLAB_${_matlab_current_release}.app\")\ndiff --git a/Modules/FindMotif.cmake b/Modules/FindMotif.cmake\nindex d72b19309e..5753e5c3dc 100644\n--- a/Modules/FindMotif.cmake\n+++ b/Modules/FindMotif.cmake\n@@ -39,12 +39,10 @@\n if(UNIX)\n   find_path(MOTIF_INCLUDE_DIR\n     Xm/Xm.h\n-    /usr/openwin/include\n     )\n \n   find_library(MOTIF_LIBRARIES\n     Xm\n-    /usr/openwin/lib\n     )\n \n endif()\ndiff --git a/Modules/FindOpenAL.cmake b/Modules/FindOpenAL.cmake\nindex dad9ada128..32d02db7c3 100644\n--- a/Modules/FindOpenAL.cmake\n+++ b/Modules/FindOpenAL.cmake\n@@ -95,9 +95,6 @@\n   HINTS\n     ENV OPENALDIR\n   PATHS\n-    ~/Library/Frameworks\n-    /Library/Frameworks\n-    /opt\n     [HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Creative\\ Labs\\\\OpenAL\\ 1.1\\ Software\\ Development\\ Kit\\\\1.00.0000;InstallDir]\n   PATH_SUFFIXES include/AL include/OpenAL include AL OpenAL\n   )\n@@ -113,9 +110,6 @@\n   HINTS\n     ENV OPENALDIR\n   PATHS\n-    ~/Library/Frameworks\n-    /Library/Frameworks\n-    /opt\n     [HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Creative\\ Labs\\\\OpenAL\\ 1.1\\ Software\\ Development\\ Kit\\\\1.00.0000;InstallDir]\n   PATH_SUFFIXES libx32 lib64 lib libs64 libs ${_OpenAL_ARCH_DIR}\n   )\ndiff --git a/Modules/FindOpenCL.cmake b/Modules/FindOpenCL.cmake\nindex 3be945ba1b..4086ebe2f2 100644\n--- a/Modules/FindOpenCL.cmake\n+++ b/Modules/FindOpenCL.cmake\n@@ -113,8 +113,6 @@\n     ENV CUDA_PATH\n     ENV ATISTREAMSDKROOT\n     ENV OCL_ROOT\n-    /usr/local/cuda\n-    /opt/cuda\n   PATH_SUFFIXES\n     include\n     OpenCL/common/inc\n@@ -170,8 +168,6 @@\n       PATHS\n         ENV AMDAPPSDKROOT\n         ENV CUDA_PATH\n-        /usr/local/cuda\n-        /opt/cuda\n       PATH_SUFFIXES\n         lib/x86\n         lib)\n@@ -181,8 +177,6 @@\n       PATHS\n         ENV AMDAPPSDKROOT\n         ENV CUDA_PATH\n-        /usr/local/cuda\n-        /opt/cuda\n       PATH_SUFFIXES\n         lib/x86_64\n         lib/x64\ndiff --git a/Modules/FindOpenGL.cmake b/Modules/FindOpenGL.cmake\nindex a842756fcf..a02a66eb60 100644\n--- a/Modules/FindOpenGL.cmake\n+++ b/Modules/FindOpenGL.cmake\n@@ -271,12 +271,7 @@\n     set(_OPENGL_INCLUDE_PATH\n       /boot/develop/headers/os/opengl)\n   elseif (CMAKE_SYSTEM_NAME STREQUAL \"Linux\")\n-    # CMake doesn't support arbitrary globs in search paths.\n-    file(GLOB _OPENGL_LIB_PATH\n-      # The NVidia driver installation tool on Linux installs libraries to a\n-      # `nvidia-<version>` subdirectory.\n-      \"/usr/lib/nvidia-*\"\n-      \"/usr/lib32/nvidia-*\")\n+    set(_OPENGL_LIB_PATH)\n   endif()\n \n   # The first line below is to make sure that the proper headers\n@@ -287,9 +282,6 @@\n   # Make sure the NVIDIA directory comes BEFORE the others.\n   #  - Atanas Georgiev <atanas@cs.columbia.edu>\n   find_path(OPENGL_INCLUDE_DIR GL/gl.h\n-    /usr/share/doc/NVIDIA_GLX-1.0/include\n-    /usr/openwin/share/include\n-    /opt/graphics/OpenGL/include\n     ${_OPENGL_INCLUDE_PATH}\n   )\n   find_path(OPENGL_GLX_INCLUDE_DIR GL/glx.h ${_OPENGL_INCLUDE_PATH})\n@@ -297,9 +289,6 @@\n   find_path(OPENGL_GLES2_INCLUDE_DIR GLES2/gl2.h ${_OPENGL_INCLUDE_PATH})\n   find_path(OPENGL_GLES3_INCLUDE_DIR GLES3/gl3.h ${_OPENGL_INCLUDE_PATH})\n   find_path(OPENGL_xmesa_INCLUDE_DIR GL/xmesa.h\n-    /usr/share/doc/NVIDIA_GLX-1.0/include\n-    /usr/openwin/share/include\n-    /opt/graphics/OpenGL/include\n   )\n \n   find_path(OPENGL_GLU_INCLUDE_DIR GL/glu.h ${_OPENGL_INCLUDE_PATH})\n@@ -347,9 +336,6 @@\n   find_library(OPENGL_glu_LIBRARY\n     NAMES GLU MesaGLU\n     PATHS ${OPENGL_gl_LIBRARY}\n-          /opt/graphics/OpenGL/lib\n-          /usr/openwin/lib\n-          /usr/shlib\n   )\n \n   list(APPEND _OpenGL_CACHE_VARS\n@@ -401,10 +387,7 @@\n     # Search for the legacy GL library.\n     find_library(OPENGL_gl_LIBRARY\n       NAMES GL MesaGL\n-      PATHS /opt/graphics/OpenGL/lib\n-            /usr/openwin/lib\n-            /usr/shlib\n-            ${_OPENGL_LIB_PATH}\n+      PATHS ${_OPENGL_LIB_PATH}\n       PATH_SUFFIXES libglvnd\n       )\n     list(APPEND _OpenGL_CACHE_VARS OPENGL_gl_LIBRARY)\n@@ -513,9 +496,6 @@\n   find_library(OPENGL_glu_LIBRARY\n     NAMES GLU MesaGLU\n     PATHS ${OPENGL_gl_LIBRARY}\n-          /opt/graphics/OpenGL/lib\n-          /usr/openwin/lib\n-          /usr/shlib\n   )\n endif ()\n \ndiff --git a/Modules/FindPHP4.cmake b/Modules/FindPHP4.cmake\nindex edef791cb8..5515f44710 100644\n--- a/Modules/FindPHP4.cmake\n+++ b/Modules/FindPHP4.cmake\n@@ -36,15 +36,9 @@\n #]=======================================================================]\n \n set(PHP4_POSSIBLE_INCLUDE_PATHS\n-  /usr/include/php4\n-  /usr/local/include/php4\n-  /usr/include/php\n-  /usr/local/include/php\n-  /usr/local/apache/php\n   )\n \n set(PHP4_POSSIBLE_LIB_PATHS\n-  /usr/lib\n   )\n \n find_path(PHP4_FOUND_INCLUDE_PATH main/php.h\ndiff --git a/Modules/FindPerlLibs.cmake b/Modules/FindPerlLibs.cmake\nindex 330700e183..7fc89df6eb 100644\n--- a/Modules/FindPerlLibs.cmake\n+++ b/Modules/FindPerlLibs.cmake\n@@ -141,10 +141,6 @@\n     PATHS\n       \"${PERL_UPDATE_ARCHLIB}/CORE\"\n       \"${PERL_ARCHLIB}/CORE\"\n-      /usr/lib/perl5/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE\n-      /usr/lib/perl/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE\n-      /usr/lib/perl5/${PERL_VERSION_STRING}/CORE\n-      /usr/lib/perl/${PERL_VERSION_STRING}/CORE\n   )\n \n   ### PERL_LIBRARY\n@@ -154,10 +150,6 @@\n     PATHS\n       \"${PERL_UPDATE_ARCHLIB}/CORE\"\n       \"${PERL_ARCHLIB}/CORE\"\n-      /usr/lib/perl5/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE\n-      /usr/lib/perl/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE\n-      /usr/lib/perl5/${PERL_VERSION_STRING}/CORE\n-      /usr/lib/perl/${PERL_VERSION_STRING}/CORE\n   )\n \n endif ()\ndiff --git a/Modules/FindPhysFS.cmake b/Modules/FindPhysFS.cmake\nindex 1894498d9d..03c6e61853 100644\n--- a/Modules/FindPhysFS.cmake\n+++ b/Modules/FindPhysFS.cmake\n@@ -52,10 +52,6 @@\n   HINTS\n     ENV PHYSFSDIR\n   PATH_SUFFIXES include/physfs include\n-  PATHS\n-  ~/Library/Frameworks\n-  /Library/Frameworks\n-  /opt\n )\n \n find_library(PHYSFS_LIBRARY\n@@ -63,10 +59,6 @@\n   HINTS\n     ENV PHYSFSDIR\n   PATH_SUFFIXES lib\n-  PATHS\n-  ~/Library/Frameworks\n-  /Library/Frameworks\n-  /opt\n )\n \n include(FindPackageHandleStandardArgs)\ndiff --git a/Modules/FindPkgConfig.cmake b/Modules/FindPkgConfig.cmake\nindex b230eb5ef5..bf7b204406 100644\n--- a/Modules/FindPkgConfig.cmake\n+++ b/Modules/FindPkgConfig.cmake\n@@ -391,7 +391,7 @@\n     if(NOT DEFINED CMAKE_SYSTEM_NAME\n         OR (CMAKE_SYSTEM_NAME MATCHES \"^(Linux|GNU)$\"\n             AND NOT CMAKE_CROSSCOMPILING))\n-      if(EXISTS \"/etc/debian_version\") # is this a debian system ?\n+      if(FALSE) # is this a debian system ?\n         if(CMAKE_LIBRARY_ARCHITECTURE)\n           list(APPEND _lib_dirs \"lib/${CMAKE_LIBRARY_ARCHITECTURE}/pkgconfig\")\n         endif()\ndiff --git a/Modules/FindProducer.cmake b/Modules/FindProducer.cmake\nindex 1d034bc207..d176655f46 100644\n--- a/Modules/FindProducer.cmake\n+++ b/Modules/FindProducer.cmake\n@@ -100,9 +100,6 @@\n     ENV OSGDIR\n   PATH_SUFFIXES include\n   PATHS\n-    ~/Library/Frameworks\n-    /Library/Frameworks\n-    /opt\n     [HKEY_LOCAL_MACHINE\\\\SYSTEM\\\\CurrentControlSet\\\\Control\\\\Session\\ Manager\\\\Environment;OpenThreads_ROOT]\n     [HKEY_LOCAL_MACHINE\\\\SYSTEM\\\\CurrentControlSet\\\\Control\\\\Session\\ Manager\\\\Environment;OSG_ROOT]\n )\n@@ -114,8 +111,6 @@\n     ENV OSG_DIR\n     ENV OSGDIR\n   PATH_SUFFIXES lib\n-  PATHS\n-  /opt\n )\n \n include(FindPackageHandleStandardArgs)\ndiff --git a/Modules/FindPython/Support.cmake b/Modules/FindPython/Support.cmake\nindex a9441646d1..28ba743f60 100644\n--- a/Modules/FindPython/Support.cmake\n+++ b/Modules/FindPython/Support.cmake\n@@ -162,9 +162,6 @@\n     file(TO_CMAKE_PATH \"$ENV{CMAKE_FRAMEWORK_PATH}\" _pff_CMAKE_FRAMEWORK_PATH)\n     set (_pff_frameworks ${CMAKE_FRAMEWORK_PATH}\n                          ${_pff_CMAKE_FRAMEWORK_PATH}\n-                         ~/Library/Frameworks\n-                         /usr/local/Frameworks\n-                         /opt/homebrew/Frameworks\n                          ${CMAKE_SYSTEM_FRAMEWORK_PATH})\n     list (REMOVE_DUPLICATES _pff_frameworks)\n     foreach (_pff_implementation IN LISTS _${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS)\ndiff --git a/Modules/FindQt.cmake b/Modules/FindQt.cmake\nindex 98cd1e2abf..90ad88365d 100644\n--- a/Modules/FindQt.cmake\n+++ b/Modules/FindQt.cmake\n@@ -63,44 +63,6 @@\n   return()\n endif()\n \n-# look for signs of qt3 installations\n-file(GLOB GLOB_TEMP_VAR /usr/lib*/qt-3*/bin/qmake /usr/lib*/qt3*/bin/qmake)\n-if(GLOB_TEMP_VAR)\n-  set(QT3_INSTALLED TRUE)\n-endif()\n-set(GLOB_TEMP_VAR)\n-\n-file(GLOB GLOB_TEMP_VAR /usr/local/qt-x11-commercial-3*/bin/qmake)\n-if(GLOB_TEMP_VAR)\n-  set(QT3_INSTALLED TRUE)\n-endif()\n-set(GLOB_TEMP_VAR)\n-\n-file(GLOB GLOB_TEMP_VAR /usr/local/lib/qt3/bin/qmake)\n-if(GLOB_TEMP_VAR)\n-  set(QT3_INSTALLED TRUE)\n-endif()\n-set(GLOB_TEMP_VAR)\n-\n-# look for qt4 installations\n-file(GLOB GLOB_TEMP_VAR /usr/local/qt-x11-commercial-4*/bin/qmake)\n-if(GLOB_TEMP_VAR)\n-  set(QT4_INSTALLED TRUE)\n-endif()\n-set(GLOB_TEMP_VAR)\n-\n-file(GLOB GLOB_TEMP_VAR /usr/local/Trolltech/Qt-4*/bin/qmake)\n-if(GLOB_TEMP_VAR)\n-  set(QT4_INSTALLED TRUE)\n-endif()\n-set(GLOB_TEMP_VAR)\n-\n-file(GLOB GLOB_TEMP_VAR /usr/local/lib/qt4/bin/qmake)\n-if(GLOB_TEMP_VAR)\n-  set(QT4_INSTALLED TRUE)\n-endif()\n-set(GLOB_TEMP_VAR)\n-\n if (Qt_FIND_VERSION)\n   if (Qt_FIND_VERSION MATCHES \"^([34])(\\\\.[0-9]+.*)?$\")\n     set(DESIRED_QT_VERSION ${CMAKE_MATCH_1})\n@@ -135,9 +97,6 @@\n   \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Versions\\\\4.0.0;InstallDir]/include/Qt\"\n   ${qt_headers}/Qt\n   $ENV{QTDIR}/include/Qt\n-  /usr/lib/qt/include/Qt\n-  /usr/share/qt4/include/Qt\n-  /usr/local/include/X11/qt4/Qt\n   C:/Progra~1/qt/include/Qt\n   PATH_SUFFIXES qt/include/Qt include/Qt)\n \n@@ -152,9 +111,6 @@\n   \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.1.0;InstallDir]/include/Qt\"\n   C:/Qt/3.3.3Educational/include\n   $ENV{QTDIR}/include\n-  /usr/include/qt3/Qt\n-  /usr/share/qt3/include\n-  /usr/local/include/X11/qt3\n   C:/Progra~1/qt/include\n   PATH_SUFFIXES qt/include include/qt3)\n \ndiff --git a/Modules/FindQt3.cmake b/Modules/FindQt3.cmake\nindex 2c62a5f17f..772a8d88f6 100644\n--- a/Modules/FindQt3.cmake\n+++ b/Modules/FindQt3.cmake\n@@ -101,10 +101,6 @@\n endif()\n \n \n-file(GLOB GLOB_PATHS /usr/lib/qt-3*)\n-foreach(GLOB_PATH ${GLOB_PATHS})\n-  list(APPEND GLOB_PATHS_BIN \"${GLOB_PATH}/bin\")\n-endforeach()\n find_path(QT_INCLUDE_DIR\n   NAMES qt.h\n   PATHS\n@@ -112,10 +108,7 @@\n   \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.2.0;InstallDir]/include/Qt\"\n   \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.1.0;InstallDir]/include/Qt\"\n   $ENV{QTDIR}/include\n-  ${GLOB_PATHS}\n-  /usr/share/qt3/include\n   C:/Progra~1/qt/include\n-  /usr/local/include/X11/qt3\n   PATH_SUFFIXES lib/qt/include lib/qt3/include include/qt include/qt3 qt/include qt3/include\n   )\n \n@@ -137,7 +130,6 @@\n   set(QT_VERSION_STRING \"${qt_version_str}\")\n endif()\n \n-file(GLOB GLOB_PATHS_LIB /usr/lib/qt-3*/lib/)\n if (QT_MT_REQUIRED)\n   find_library(QT_QT_LIBRARY\n     NAMES\n@@ -148,8 +140,6 @@\n       \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.2.0;InstallDir]\"\n       \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.1.0;InstallDir]\"\n       ENV QTDIR\n-      ${GLOB_PATHS_LIB}\n-      /usr/share/qt3\n       C:/Progra~1/qt\n     PATH_SUFFIXES\n       lib lib/qt lib/qt3 qt qt3 qt/lib qt3/lib\n@@ -166,8 +156,6 @@\n       \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.2.0;InstallDir]\"\n       \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.1.0;InstallDir]\"\n       ENV QTDIR\n-      ${GLOB_PATHS_LIB}\n-      /usr/share/qt3\n       C:/Progra~1/qt/lib\n     PATH_SUFFIXES\n       lib lib/qt lib/qt3 qt qt3 qt/lib qt3/lib\n@@ -182,8 +170,6 @@\n     \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.2.0;InstallDir]\"\n     \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.1.0;InstallDir]\"\n     ENV QTDIR\n-    ${GLOB_PATHS_LIB}\n-    /usr/share/qt3\n     C:/Progra~1/qt\n   PATH_SUFFIXES\n     lib lib/qt lib/qt3 qt qt3 qt/lib qt3/lib\n@@ -198,8 +184,6 @@\n   \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.2.1;InstallDir]/include/Qt\"\n   \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.2.0;InstallDir]/include/Qt\"\n   \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.1.0;InstallDir]/include/Qt\"\n-  ${GLOB_PATHS_BIN}\n-    /usr/share/qt3\n     C:/Progra~1/qt\n   PATH_SUFFIXES\n     bin lib/qt lib/qt3 qt qt3 qt/bin qt3/bin lib/qt/bin lib/qt3/bin\n@@ -218,8 +202,6 @@\n   \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.2.1;InstallDir]/include/Qt\"\n   \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.2.0;InstallDir]/include/Qt\"\n   \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.1.0;InstallDir]/include/Qt\"\n-  ${GLOB_PATHS_BIN}\n-    /usr/share/qt3\n     C:/Progra~1/qt\n   PATH_SUFFIXES\n     bin lib/qt lib/qt3 qt qt3 qt/bin qt3/bin lib/qt/bin lib/qt3/bin\ndiff --git a/Modules/FindRuby.cmake b/Modules/FindRuby.cmake\nindex 18b9e35855..dba9976565 100644\n--- a/Modules/FindRuby.cmake\n+++ b/Modules/FindRuby.cmake\n@@ -367,7 +367,6 @@\n           HINTS\n           ${Ruby_HDR_DIR}\n           ${Ruby_ARCH_DIR}\n-          /usr/lib/ruby/${_Ruby_VERSION_SHORT}/i586-linux-gnu/\n )\n \n set(Ruby_INCLUDE_DIRS ${Ruby_INCLUDE_DIR})\ndiff --git a/Modules/FindSDL.cmake b/Modules/FindSDL.cmake\nindex a720dcc3df..73e222a27c 100644\n--- a/Modules/FindSDL.cmake\n+++ b/Modules/FindSDL.cmake\n@@ -214,8 +214,6 @@\n       HINTS\n         ENV SDLDIR\n       PATH_SUFFIXES lib ${VC_LIB_PATH_SUFFIX}\n-      PATHS\n-      /opt\n     )\n   endif()\n endif()\ndiff --git a/Modules/FindSDL_sound.cmake b/Modules/FindSDL_sound.cmake\nindex 954303f3d3..26a5781e2a 100644\n--- a/Modules/FindSDL_sound.cmake\n+++ b/Modules/FindSDL_sound.cmake\n@@ -292,7 +292,6 @@\n           ENV MIKMODDIR\n           ENV SDLSOUNDDIR\n           ENV SDLDIR\n-          /opt\n         PATH_SUFFIXES\n           lib\n       )\n@@ -309,7 +308,6 @@\n           ENV MODPLUGDIR\n           ENV SDLSOUNDDIR\n           ENV SDLDIR\n-          /opt\n         PATH_SUFFIXES\n           lib\n       )\n@@ -328,7 +326,6 @@\n           ENV OGGDIR\n           ENV SDLSOUNDDIR\n           ENV SDLDIR\n-          /opt\n         PATH_SUFFIXES\n           lib\n         )\n@@ -343,7 +340,6 @@\n           ENV VORBISDIR\n           ENV SDLSOUNDDIR\n           ENV SDLDIR\n-          /opt\n         PATH_SUFFIXES\n           lib\n          )\n@@ -361,7 +357,6 @@\n           ENV SMPEGDIR\n           ENV SDLSOUNDDIR\n           ENV SDLDIR\n-          /opt\n         PATH_SUFFIXES\n           lib\n         )\n@@ -379,7 +374,6 @@\n           ENV FLACDIR\n           ENV SDLSOUNDDIR\n           ENV SDLDIR\n-          /opt\n         PATH_SUFFIXES\n           lib\n         )\n@@ -400,7 +394,6 @@\n           ENV SPEEXDIR\n           ENV SDLSOUNDDIR\n           ENV SDLDIR\n-          /opt\n         PATH_SUFFIXES\n           lib\n         )\n@@ -419,7 +412,6 @@\n             ENV SPEEXDIR\n             ENV SDLSOUNDDIR\n             ENV SDLDIR\n-            /opt\n           PATH_SUFFIXES lib\n           )\n         if(OGG_LIBRARY)\ndiff --git a/Modules/FindX11.cmake b/Modules/FindX11.cmake\nindex b2f23bd1dd..9a94529589 100644\n--- a/Modules/FindX11.cmake\n+++ b/Modules/FindX11.cmake\n@@ -138,22 +138,9 @@\n   set(CMAKE_REQUIRED_QUIET_SAVE ${CMAKE_REQUIRED_QUIET})\n   set(CMAKE_REQUIRED_QUIET ${X11_FIND_QUIETLY})\n   set(X11_INC_SEARCH_PATH\n-    /usr/pkg/xorg/include\n-    /usr/X11R6/include\n-    /usr/X11R7/include\n-    /usr/include/X11\n-    /usr/openwin/include\n-    /usr/openwin/share/include\n-    /opt/graphics/OpenGL/include\n-    /opt/X11/include\n   )\n \n   set(X11_LIB_SEARCH_PATH\n-    /usr/pkg/xorg/lib\n-    /usr/X11R6/lib\n-    /usr/X11R7/lib\n-    /usr/openwin/lib\n-    /opt/X11/lib\n   )\n \n   find_path(X11_X11_INCLUDE_PATH X11/X.h                             ${X11_INC_SEARCH_PATH})\ndiff --git a/Modules/GNUInstallDirs.cmake b/Modules/GNUInstallDirs.cmake\nindex ff9c11a9d7..706b34b087 100644\n--- a/Modules/GNUInstallDirs.cmake\n+++ b/Modules/GNUInstallDirs.cmake\n@@ -336,17 +336,6 @@\n       set(${out_var} \"conda\")\n     endif()\n   endif()\n-  # If we didn't detect conda from the previous step, check\n-  # for the linux variant\n-  if(NOT ${out_var})\n-    if (EXISTS \"/etc/alpine-release\")\n-      set(${out_var} \"alpine\")\n-    elseif (EXISTS \"/etc/arch-release\")\n-      set(${out_var} \"arch linux\")\n-    elseif (EXISTS \"/etc/debian_version\")\n-      set(${out_var} \"debian\")\n-    endif()\n-  endif()\n   return(PROPAGATE ${out_var})\n endfunction()\n \ndiff --git a/Modules/GetPrerequisites.cmake b/Modules/GetPrerequisites.cmake\nindex f1f5db7b7b..9b4bdddb36 100644\n--- a/Modules/GetPrerequisites.cmake\n+++ b/Modules/GetPrerequisites.cmake\n@@ -458,11 +458,9 @@\n   if(NOT resolved)\n     set(ri \"ri-NOTFOUND\")\n     find_file(ri \"${item}\" ${exepath} ${dirs} NO_DEFAULT_PATH)\n-    find_file(ri \"${item}\" ${exepath} ${dirs} /usr/lib)\n \n     get_filename_component(basename_item \"${item}\" NAME)\n     find_file(ri \"${basename_item}\" PATHS ${exepath} ${dirs} NO_DEFAULT_PATH)\n-    find_file(ri \"${basename_item}\" PATHS /usr/lib)\n \n     if(ri)\n       #message(STATUS \"info: 'find_file' in exepath/dirs (${ri})\")\n@@ -472,23 +470,6 @@\n     endif()\n   endif()\n \n-  if(NOT resolved)\n-    if(item MATCHES \"[^/]+\\\\.framework/\")\n-      set(fw \"fw-NOTFOUND\")\n-      find_file(fw \"${item}\"\n-        \"~/Library/Frameworks\"\n-        \"/Library/Frameworks\"\n-        \"/System/Library/Frameworks\"\n-      )\n-      if(fw)\n-        #message(STATUS \"info: 'find_file' found framework (${fw})\")\n-        set(resolved 1)\n-        set(resolved_item \"${fw}\")\n-        set(fw \"fw-NOTFOUND\")\n-      endif()\n-    endif()\n-  endif()\n-\n   # Using find_program on Windows will find dll files that are in the PATH.\n   # (Converting simple file names into full path names if found.)\n   #\ndiff --git a/Modules/Internal/CMakeCUDAFindToolkit.cmake b/Modules/Internal/CMakeCUDAFindToolkit.cmake\nindex 8fd408994f..61894813a2 100644\n--- a/Modules/Internal/CMakeCUDAFindToolkit.cmake\n+++ b/Modules/Internal/CMakeCUDAFindToolkit.cmake\n@@ -50,18 +50,8 @@\n     # if CUDAToolkit_ROOT is not specified, it is assumed that the symlinked\n     # directory is the desired location.\n     if(NOT _CUDA_NVCC_EXECUTABLE)\n-      if(UNIX)\n-        if(NOT APPLE)\n-          set(platform_base \"/usr/local/cuda-\")\n-        else()\n-          set(platform_base \"/Developer/NVIDIA/CUDA-\")\n-        endif()\n-      else()\n-        set(platform_base \"C:\\\\Program Files\\\\NVIDIA GPU Computing Toolkit\\\\CUDA\\\\v\")\n-      endif()\n-\n       # Build out a descending list of possible cuda installations, e.g.\n-      file(GLOB possible_paths \"${platform_base}*\")\n+      set(possible_paths)\n       # Iterate the glob results and create a descending list.\n       set(versions)\n       foreach(p ${possible_paths})\n@@ -77,14 +67,6 @@\n \n       # With a descending list of versions, populate possible paths to search.\n       set(search_paths)\n-      foreach(v ${versions})\n-        list(APPEND search_paths \"${platform_base}${v}\")\n-      endforeach()\n-\n-      # Force the global default /usr/local/cuda to the front on Unix.\n-      if(UNIX)\n-        list(INSERT search_paths 0 \"/usr/local/cuda\")\n-      endif()\n \n       # Now search for nvcc again using the platform default search paths.\n       find_program(_CUDA_NVCC_EXECUTABLE\n@@ -140,23 +122,13 @@\n     set(${lang_var_}LIBRARY_ROOT \"${_CUDA_COMPILER_LIBRARY_ROOT_FROM_NVVMIR_LIBRARY_DIR}\")\n   elseif(EXISTS \"${${lang_var_}TOOLKIT_ROOT}/nvvm/libdevice\")\n     set(${lang_var_}LIBRARY_ROOT \"${${lang_var_}TOOLKIT_ROOT}\")\n-  elseif(CMAKE_SYSROOT_LINK AND EXISTS \"${CMAKE_SYSROOT_LINK}/usr/lib/cuda/nvvm/libdevice\")\n-    set(${lang_var_}LIBRARY_ROOT \"${CMAKE_SYSROOT_LINK}/usr/lib/cuda\")\n-  elseif(EXISTS \"${CMAKE_SYSROOT}/usr/lib/cuda/nvvm/libdevice\")\n-    set(${lang_var_}LIBRARY_ROOT \"${CMAKE_SYSROOT}/usr/lib/cuda\")\n   else()\n     message(FATAL_ERROR \"Couldn't find CUDA library root.\")\n   endif()\n   unset(_CUDA_COMPILER_LIBRARY_ROOT_FROM_NVVMIR_LIBRARY_DIR)\n \n   # ${lang_var_}TOOLKIT_LIBRARY_ROOT contains the linking stubs necessary for device linking and other low-level library files.\n-  if(CMAKE_SYSROOT_LINK AND EXISTS \"${CMAKE_SYSROOT_LINK}/usr/lib/nvidia-cuda-toolkit/bin/crt/link.stub\")\n-    set(${lang_var_}TOOLKIT_LIBRARY_ROOT \"${CMAKE_SYSROOT_LINK}/usr/lib/nvidia-cuda-toolkit\")\n-  elseif(EXISTS \"${CMAKE_SYSROOT}/usr/lib/nvidia-cuda-toolkit/bin/crt/link.stub\")\n-    set(${lang_var_}TOOLKIT_LIBRARY_ROOT \"${CMAKE_SYSROOT}/usr/lib/nvidia-cuda-toolkit\")\n-  else()\n-    set(${lang_var_}TOOLKIT_LIBRARY_ROOT \"${${lang_var_}TOOLKIT_ROOT}\")\n-  endif()\n+  set(${lang_var_}TOOLKIT_LIBRARY_ROOT \"${${lang_var_}TOOLKIT_ROOT}\")\n \n   # For regular nvcc we the toolkit version is the same as the compiler version and we can parse it from the vendor test output.\n   # For Clang we need to invoke nvcc to get version output.\ndiff --git a/Modules/Internal/CPack/CPackRPM.cmake b/Modules/Internal/CPack/CPackRPM.cmake\nindex b733cfe964..90709f48e8 100644\n--- a/Modules/Internal/CPack/CPackRPM.cmake\n+++ b/Modules/Internal/CPack/CPackRPM.cmake\n@@ -640,7 +640,7 @@\n   endif()\n \n   # With debugedit we prepare source files list\n-  find_program(DEBUGEDIT_EXECUTABLE debugedit \"/usr/lib/rpm/\")\n+  find_program(DEBUGEDIT_EXECUTABLE debugedit)\n   if(NOT DEBUGEDIT_EXECUTABLE)\n     message(FATAL_ERROR \"CPackRPM: debugedit binary could not be found!\"\n       \" Required for debuginfo packaging. See documentation of\"\ndiff --git a/Modules/Platform/CYGWIN.cmake b/Modules/Platform/CYGWIN.cmake\nindex cf5e732833..1bbbfeca54 100644\n--- a/Modules/Platform/CYGWIN.cmake\n+++ b/Modules/Platform/CYGWIN.cmake\n@@ -15,13 +15,3 @@\n set(CMAKE_SHARED_LIBRARY_NAME_WITH_VERSION 1)\n \n include(Platform/UnixPaths)\n-\n-# Windows API on Cygwin\n-list(APPEND CMAKE_SYSTEM_INCLUDE_PATH\n-  /usr/include/w32api\n-  )\n-\n-# Windows API on Cygwin\n-list(APPEND CMAKE_SYSTEM_LIBRARY_PATH\n-  /usr/lib/w32api\n-  )\ndiff --git a/Modules/Platform/Darwin-Initialize.cmake b/Modules/Platform/Darwin-Initialize.cmake\nindex 7c4f123a1d..4cfd53de9f 100644\n--- a/Modules/Platform/Darwin-Initialize.cmake\n+++ b/Modules/Platform/Darwin-Initialize.cmake\n@@ -1,19 +1,7 @@\n set(APPLE 1)\n set(UNIX 1)\n \n-# Ask xcode-select where to find /Developer or fall back to ancient location.\n-execute_process(COMMAND xcode-select -print-path\n-  OUTPUT_VARIABLE _stdout\n-  OUTPUT_STRIP_TRAILING_WHITESPACE\n-  ERROR_VARIABLE _stderr\n-  RESULT_VARIABLE _failed)\n-if(NOT _failed AND IS_DIRECTORY ${_stdout})\n-  set(OSX_DEVELOPER_ROOT ${_stdout})\n-elseif(IS_DIRECTORY \"/Developer\")\n-  set(OSX_DEVELOPER_ROOT \"/Developer\")\n-else()\n-  set(OSX_DEVELOPER_ROOT \"\")\n-endif()\n+set(OSX_DEVELOPER_ROOT \"\")\n \n if(NOT CMAKE_CROSSCOMPILING)\n   execute_process(COMMAND @sw_vers@ -productVersion\ndiff --git a/Modules/Platform/Darwin.cmake b/Modules/Platform/Darwin.cmake\nindex 42c6b35424..f2985f3765 100644\n--- a/Modules/Platform/Darwin.cmake\n+++ b/Modules/Platform/Darwin.cmake\n@@ -166,7 +166,6 @@\n \n # set up the default search directories for frameworks\n set(CMAKE_SYSTEM_FRAMEWORK_PATH\n-  ~/Library/Frameworks\n   )\n if(_CMAKE_OSX_SYSROOT_PATH)\n   list(APPEND CMAKE_SYSTEM_FRAMEWORK_PATH\n@@ -201,10 +200,6 @@\n   list(APPEND CMAKE_SYSTEM_FRAMEWORK_PATH\n     ${OSX_DEVELOPER_ROOT}/Library/Frameworks)\n endif()\n-list(APPEND CMAKE_SYSTEM_FRAMEWORK_PATH\n-  /Library/Frameworks\n-  /Network/Library/Frameworks\n-  /System/Library/Frameworks)\n \n # Warn about known system misconfiguration case.\n if(CMAKE_OSX_SYSROOT)\n@@ -230,10 +225,6 @@\n # set up the default search directories for application bundles\n set(_apps_paths)\n foreach(_path\n-  \"~/Applications\"\n-  \"/Applications\"\n-  \"${OSX_DEVELOPER_ROOT}/../Applications\" # Xcode 4.3+\n-  \"${OSX_DEVELOPER_ROOT}/Applications\"    # pre-4.3\n   )\n   get_filename_component(_apps \"${_path}\" ABSOLUTE)\n   if(EXISTS \"${_apps}\")\n@@ -249,28 +240,6 @@\n \n include(Platform/UnixPaths)\n \n-if(CMAKE_SYSTEM_NAME STREQUAL \"Darwin\")\n-  execute_process(\n-    COMMAND brew --prefix\n-    OUTPUT_VARIABLE _cmake_homebrew_prefix\n-    RESULT_VARIABLE _brew_result\n-    OUTPUT_STRIP_TRAILING_WHITESPACE\n-  )\n-  if (_brew_result EQUAL 0 AND IS_DIRECTORY \"${_cmake_homebrew_prefix}\")\n-    list(PREPEND CMAKE_SYSTEM_PREFIX_PATH \"${_cmake_homebrew_prefix}\")\n-  elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL \"arm64\")\n-    list(PREPEND CMAKE_SYSTEM_PREFIX_PATH\n-      /opt/homebrew # Brew on Apple Silicon\n-      )\n-  else()\n-    list(PREPEND CMAKE_SYSTEM_PREFIX_PATH\n-      /usr/local # Brew on Intel\n-      )\n-  endif()\n-  unset(_cmake_homebrew_prefix)\n-  unset(_brew_result)\n-endif()\n-\n if(_CMAKE_OSX_SYSROOT_PATH)\n   if(EXISTS ${_CMAKE_OSX_SYSROOT_PATH}/usr/include)\n     list(INSERT CMAKE_SYSTEM_PREFIX_PATH 0 ${_CMAKE_OSX_SYSROOT_PATH}/usr)\n@@ -285,7 +254,3 @@\n     endforeach()\n   endif()\n endif()\n-list(APPEND CMAKE_SYSTEM_PREFIX_PATH\n-  /sw        # Fink\n-  /opt/local # MacPorts\n-  )\ndiff --git a/Modules/Platform/GNU.cmake b/Modules/Platform/GNU.cmake\nindex 6a25b00b81..2430bdb7e4 100644\n--- a/Modules/Platform/GNU.cmake\n+++ b/Modules/Platform/GNU.cmake\n@@ -48,13 +48,8 @@\n   # checking the platform every time.  This option is advanced enough\n   # that only package maintainers should need to adjust it.  They are\n   # capable of providing a setting on the command line.\n-  if(EXISTS \"/etc/debian_version\")\n-    set(CMAKE_INSTALL_SO_NO_EXE 1 CACHE INTERNAL\n-      \"Install .so files without execute permission.\")\n-  else()\n-    set(CMAKE_INSTALL_SO_NO_EXE 0 CACHE INTERNAL\n-      \"Install .so files without execute permission.\")\n-  endif()\n+  set(CMAKE_INSTALL_SO_NO_EXE 0 CACHE INTERNAL\n+    \"Install .so files without execute permission.\")\n endif()\n \n include(Platform/UnixPaths)\ndiff --git a/Modules/Platform/Linux.cmake b/Modules/Platform/Linux.cmake\nindex 5b61dd6b61..d324b903ed 100644\n--- a/Modules/Platform/Linux.cmake\n+++ b/Modules/Platform/Linux.cmake\n@@ -45,25 +45,8 @@\n   # checking the platform every time.  This option is advanced enough\n   # that only package maintainers should need to adjust it.  They are\n   # capable of providing a setting on the command line.\n-  if(EXISTS \"/etc/debian_version\")\n-    set(CMAKE_INSTALL_SO_NO_EXE 1 CACHE INTERNAL\n-      \"Install .so files without execute permission.\")\n-  else()\n-    set(CMAKE_INSTALL_SO_NO_EXE 0 CACHE INTERNAL\n-      \"Install .so files without execute permission.\")\n-  endif()\n+  set(CMAKE_INSTALL_SO_NO_EXE 0 CACHE INTERNAL\n+    \"Install .so files without execute permission.\")\n endif()\n \n include(Platform/UnixPaths)\n-\n-# Debian has lib32 and lib64 paths only for compatibility so they should not be\n-# searched.\n-if(NOT CMAKE_CROSSCOMPILING AND NOT CMAKE_COMPILER_SYSROOT)\n-  if (EXISTS \"/etc/debian_version\")\n-    set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB32_PATHS FALSE)\n-    set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS FALSE)\n-  endif()\n-  if (EXISTS \"/etc/arch-release\")\n-    set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS FALSE)\n-  endif()\n-endif()\ndiff --git a/Modules/Platform/OpenBSD.cmake b/Modules/Platform/OpenBSD.cmake\nindex 97e2a6a83e..02c607618c 100644\n--- a/Modules/Platform/OpenBSD.cmake\n+++ b/Modules/Platform/OpenBSD.cmake\n@@ -31,13 +31,9 @@\n \n if($ENV{LOCALBASE})\n   set(OPENBSD_LOCALBASE $ENV{LOCALBASE})\n-else()\n-  set(OPENBSD_LOCALBASE /usr/local)\n endif()\n if($ENV{X11BASE})\n   set(OPENBSD_X11BASE $ENV{X11BASE})\n-else()\n-  set(OPENBSD_X11BASE /usr/X11R6)\n endif()\n \n list(APPEND CMAKE_SYSTEM_PREFIX_PATH ${OPENBSD_LOCALBASE})\ndiff --git a/Modules/Platform/SunOS.cmake b/Modules/Platform/SunOS.cmake\nindex e01e892283..d044d81c88 100644\n--- a/Modules/Platform/SunOS.cmake\n+++ b/Modules/Platform/SunOS.cmake\n@@ -19,11 +19,6 @@\n \n include(Platform/UnixPaths)\n \n-list(APPEND CMAKE_SYSTEM_PREFIX_PATH\n-  /opt/csw\n-  /opt/openwin\n-  )\n-\n # The Sun linker needs to find transitive shared library dependencies\n # in the -L path.\n set(CMAKE_LINK_DEPENDENT_LIBRARY_DIRS 1)\ndiff --git a/Modules/Platform/UnixPaths.cmake b/Modules/Platform/UnixPaths.cmake\nindex bdf4155232..588064821d 100644\n--- a/Modules/Platform/UnixPaths.cmake\n+++ b/Modules/Platform/UnixPaths.cmake\n@@ -29,9 +29,6 @@\n # please make sure to keep Help/variable/CMAKE_SYSTEM_PREFIX_PATH.rst\n # synchronized\n list(APPEND CMAKE_SYSTEM_PREFIX_PATH\n-  # Standard\n-  /usr/local /usr /\n-\n   # CMake install location\n   \"${_CMAKE_INSTALL_DIR}\"\n   )\n@@ -49,28 +46,6 @@\n endif()\n _cmake_record_install_prefix()\n \n-# Non \"standard\" but common install prefixes\n-list(APPEND CMAKE_SYSTEM_PREFIX_PATH\n-  /usr/X11R6\n-  /usr/pkg\n-  /opt\n-  )\n-\n-# List common include file locations not under the common prefixes.\n-list(APPEND CMAKE_SYSTEM_INCLUDE_PATH\n-  # X11\n-  /usr/include/X11\n-  )\n-\n-list(APPEND CMAKE_SYSTEM_LIBRARY_PATH\n-  # X11\n-  /usr/lib/X11\n-  )\n-\n-list(APPEND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES\n-  /lib /lib32 /lib64 /usr/lib /usr/lib32 /usr/lib64\n-  )\n-\n # Add the Nix C library paths.\n if(DEFINED ENV{NIX_CC}\n   AND IS_DIRECTORY \"$ENV{NIX_CC}\"\ndiff --git a/Modules/Platform/WindowsPaths.cmake b/Modules/Platform/WindowsPaths.cmake\nindex c56dfaf9ac..4e0b250c1a 100644\n--- a/Modules/Platform/WindowsPaths.cmake\n+++ b/Modules/Platform/WindowsPaths.cmake\n@@ -69,11 +69,6 @@\n endif()\n _cmake_record_install_prefix()\n \n-if(CMAKE_CROSSCOMPILING AND NOT CMAKE_HOST_SYSTEM_NAME MATCHES \"Windows\")\n-  # MinGW (useful when cross compiling from linux with CMAKE_FIND_ROOT_PATH set)\n-  list(APPEND CMAKE_SYSTEM_PREFIX_PATH /)\n-endif()\n-\n list(APPEND CMAKE_SYSTEM_INCLUDE_PATH\n   )\n \ndiff --git a/Modules/ProcessorCount.cmake b/Modules/ProcessorCount.cmake\nindex ffb8fcd8d2..6b8fcf87dc 100644\n--- a/Modules/ProcessorCount.cmake\n+++ b/Modules/ProcessorCount.cmake\n@@ -128,7 +128,7 @@\n   if(NOT count)\n     # HPUX (systems with machinfo):\n     find_program(ProcessorCount_cmd_machinfo machinfo\n-      PATHS /usr/contrib/bin)\n+      )\n     mark_as_advanced(ProcessorCount_cmd_machinfo)\n     if(ProcessorCount_cmd_machinfo)\n       execute_process(COMMAND ${ProcessorCount_cmd_machinfo}\n@@ -160,7 +160,7 @@\n   if(NOT count)\n     # AIX (systems with lsconf):\n     find_program(ProcessorCount_cmd_lsconf lsconf\n-      PATHS /usr/sbin)\n+      )\n     mark_as_advanced(ProcessorCount_cmd_lsconf)\n     if(ProcessorCount_cmd_lsconf)\n       execute_process(COMMAND ${ProcessorCount_cmd_lsconf}\n@@ -190,7 +190,7 @@\n \n   if(NOT count)\n     # Sun (systems where psrinfo tool is available)\n-    find_program(ProcessorCount_cmd_psrinfo psrinfo PATHS /usr/sbin /sbin)\n+    find_program(ProcessorCount_cmd_psrinfo psrinfo)\n     mark_as_advanced(ProcessorCount_cmd_psrinfo)\n     if (ProcessorCount_cmd_psrinfo)\n       execute_process(COMMAND ${ProcessorCount_cmd_psrinfo} -p -v\ndiff --git a/Modules/UseJava.cmake b/Modules/UseJava.cmake\nindex b977d955ca..5ff835298d 100644\n--- a/Modules/UseJava.cmake\n+++ b/Modules/UseJava.cmake\n@@ -1125,8 +1125,6 @@\n     set(_jar_files)\n     set(_jar_versions)\n     set(_jar_paths\n-        /usr/share/java/\n-        /usr/local/share/java/\n         ${Java_JAR_PATHS})\n     set(_jar_doc \"NOTSET\")\n \ndiff --git a/Utilities/cmcurl/CMakeLists.txt b/Utilities/cmcurl/CMakeLists.txt\nindex 8ff651fd90..9659deedf5 100644\n--- a/Utilities/cmcurl/CMakeLists.txt\n+++ b/Utilities/cmcurl/CMakeLists.txt\n@@ -1826,43 +1826,6 @@\n   endif()\n   mark_as_advanced(CURL_CA_PATH_SET)\n \n-  if(CURL_CA_BUNDLE_SET AND _curl_ca_path_autodetect)\n-    # Skip auto-detection of unset CA path because CA bundle is set explicitly\n-  elseif(CURL_CA_PATH_SET AND _curl_ca_bundle_autodetect)\n-    # Skip auto-detection of unset CA bundle because CA path is set explicitly\n-  elseif(_curl_ca_bundle_autodetect OR _curl_ca_path_autodetect)\n-    # First try auto-detecting a CA bundle, then a CA path\n-\n-    if(_curl_ca_bundle_autodetect)\n-      foreach(_search_ca_bundle_path IN ITEMS\n-          \"/etc/ssl/certs/ca-certificates.crt\"\n-          \"/etc/pki/tls/certs/ca-bundle.crt\"\n-          \"/usr/share/ssl/certs/ca-bundle.crt\"\n-          \"/usr/local/share/certs/ca-root-nss.crt\"\n-          \"/etc/ssl/cert.pem\")\n-        if(EXISTS \"${_search_ca_bundle_path}\")\n-          message(STATUS \"Found CA bundle: ${_search_ca_bundle_path}\")\n-          set(CURL_CA_BUNDLE \"${_search_ca_bundle_path}\" CACHE\n-            STRING \"Path to the CA bundle. Set 'none' to disable or 'auto' for auto-detection. Defaults to 'auto'.\")\n-          set(CURL_CA_BUNDLE_SET TRUE CACHE BOOL \"Path to the CA bundle has been set\")\n-          break()\n-        endif()\n-      endforeach()\n-    endif()\n-\n-    if(_curl_ca_path_autodetect AND NOT CURL_CA_PATH_SET)\n-      set(_search_ca_path \"/etc/ssl/certs\")\n-      file(GLOB _curl_ca_files_found \"${_search_ca_path}/[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f].0\")\n-      if(_curl_ca_files_found)\n-        unset(_curl_ca_files_found)\n-        message(STATUS \"Found CA path: ${_search_ca_path}\")\n-        set(CURL_CA_PATH \"${_search_ca_path}\" CACHE\n-          STRING \"Location of default CA path. Set 'none' to disable or 'auto' for auto-detection. Defaults to 'auto'.\")\n-        set(CURL_CA_PATH_SET TRUE CACHE BOOL \"Path to the CA bundle has been set\")\n-      endif()\n-    endif()\n-  endif()\n-\n   set(CURL_CA_EMBED_SET FALSE)\n   if(BUILD_CURL_EXE AND NOT CURL_CA_EMBED STREQUAL \"\")\n     if(EXISTS \"${CURL_CA_EMBED}\")\ndiff --git a/Utilities/cmlibarchive/CMakeLists.txt b/Utilities/cmlibarchive/CMakeLists.txt\nindex e6ab5de99b..158a407c3e 100644\n--- a/Utilities/cmlibarchive/CMakeLists.txt\n+++ b/Utilities/cmlibarchive/CMakeLists.txt\n@@ -39,9 +39,6 @@\n        MATCHES \"^(DEBUG|RELEASE|RELWITHDEBINFO|MINSIZEREL|NONE)\\$\")\n ENDIF()\n \n-# On MacOS, prefer MacPorts libraries to system libraries.\n-# I haven't come up with a compelling argument for this to be conditional.\n-list(APPEND CMAKE_PREFIX_PATH /opt/local)\n # Enable @rpath in the install name.\n # detail in \"cmake  --help-policy CMP0042\"\n SET(CMAKE_MACOSX_RPATH ON)\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://cmake.org/files/v4.1/cmake-4.1.2.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "643f04182b7ba323ab31f526f785134fb79cba3188a852206ef0473fee282a15"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://cmake.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "4r1hvzwfw90p9qj27b9rf3sb8p9jwc5b-python3.13-pytest-mock-3.15.1",
      "name": "pytest-mock",
      "version": "3.15.1",
      "description": "Thin wrapper around the mock package for easier use with pytest",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/pytest-mock@3.15.1",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/pytest-dev/pytest-mock/archive/refs/tags/v3.15.1.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "f61e7f72cb16b381742ca9c52e3583b048c1d8061cccbbe74a389476c6847014"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/pytest-dev/pytest-mock"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "4s20vjw7n3162r7q0ag7ghchjgsd03q5-re2c-4.3",
      "name": "re2c",
      "version": "4.3",
      "description": "Tool for writing very fast and very flexible scanners",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "name": "Public Domain"
          }
        }
      ],
      "purl": "pkg:nix/re2c@4.3",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/skvadrik/re2c/archive/4.3.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "ccf38434c7d75e04f076cd6df8bae6cfdf864c725fdb246942c193ee72d1bdc8"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://re2c.org"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "4xg4brpnnnrpihg4364vpy49wibzkyq8-python3.13-freezegun-1.5.4",
      "name": "freezegun",
      "version": "1.5.4",
      "description": "Library that allows your Python tests to travel through time",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "Apache-2.0"
          }
        }
      ],
      "purl": "pkg:nix/freezegun@1.5.4",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/f/freezegun/freezegun-1.5.4.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "798b9372fdd4d907f33e8b6a58bc64e682d9ffa8d494ce60f780197ee81faed1"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/spulec/freezegun"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "4zyyiz43wiqlvzfsg0ws0sigapin2akv-glib-2.86.1-devdoc",
      "name": "glib",
      "version": "2.86.1",
      "description": "C library of programming buildings blocks",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "LGPL-2.1-or-later"
          }
        }
      ],
      "purl": "pkg:nix/glib@2.86.1",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/gio/gdesktopappinfo.c b/gio/gdesktopappinfo.c\nindex 87db7a97a..2e1689ed7 100644\n--- a/gio/gdesktopappinfo.c\n+++ b/gio/gdesktopappinfo.c\n@@ -147,6 +147,7 @@ typedef struct\n   gchar                      *alternatively_watching;\n   gboolean                    is_config;\n   gboolean                    is_setup;\n+  gchar                      *nix_profile_watch_dir;\n   GFileMonitor               *monitor;\n   GHashTable                 *app_names;\n   GHashTable                 *mime_tweaks;\n@@ -179,6 +180,7 @@ desktop_file_dir_unref (DesktopFileDir *dir)\n     {\n       desktop_file_dir_reset (dir);\n       g_free (dir->path);\n+      g_free (dir->nix_profile_watch_dir);\n       g_free (dir);\n     }\n }\n@@ -203,6 +205,14 @@ desktop_file_dir_get_alternative_dir (DesktopFileDir *dir)\n {\n   gchar *parent;\n \n+  /* If DIR is a profile, watch the specified directory--e.g.,\n+   * /nix/var/nix/profiles/per-user/$USER/ for the user profile.  Do not watch\n+   * ~/.nix-profile or /run/current-system/sw because GFileMonitor does\n+   * not pass IN_DONT_FOLLOW and thus cannot notice any change.\n+   * /etc/profiles/per-user is monitored directly for the same reason. */\n+  if (dir->nix_profile_watch_dir != NULL)\n+    return g_strdup (dir->nix_profile_watch_dir);\n+\n   /* If the directory itself exists then we need no alternative. */\n   if (g_access (dir->path, R_OK | X_OK) == 0)\n     return NULL;\n@@ -248,11 +258,11 @@ desktop_file_dir_changed (GFileMonitor      *monitor,\n    *\n    * If this is a notification for a parent directory (because the\n    * desktop directory didn't exist) then we shouldn't fire the signal\n-   * unless something actually changed.\n+   * unless something actually changed or it's part of a Nix profile.\n    */\n   g_mutex_lock (&desktop_file_dir_lock);\n \n-  if (dir->alternatively_watching)\n+  if (dir->alternatively_watching && dir->nix_profile_watch_dir == NULL)\n     {\n       gchar *alternative_dir;\n \n@@ -1650,6 +1660,40 @@ desktop_file_dirs_lock (void)\n       for (i = 0; dirs[i]; i++)\n         g_ptr_array_add (desktop_file_dirs, desktop_file_dir_new (dirs[i]));\n \n+      {\n+        /* Monitor the system and user profile under /nix/var/nix/profiles and\n+         * treat modifications to them as if they were modifications to their\n+         * /share sub-directory.  */\n+        const gchar *user;\n+        DesktopFileDir *system_profile_dir, *user_profile_dir, *user_env_dir;\n+\n+        system_profile_dir =\n+          desktop_file_dir_new (\"/nix/var/nix/profiles/system/sw/share\");\n+        system_profile_dir->nix_profile_watch_dir = g_strdup (\"/nix/var/nix/profiles\");\n+        g_ptr_array_add (desktop_file_dirs, desktop_file_dir_ref (system_profile_dir));\n+\n+        user = g_get_user_name ();\n+        if (user != NULL)\n+          {\n+            gchar *profile_dir, *user_data_dir, *env_dir, *env_data_dir;\n+\n+            profile_dir = g_build_filename (\"/nix/var/nix/profiles/per-user\", user, NULL);\n+            user_data_dir = g_build_filename (profile_dir, \"profile\", \"share\", NULL);\n+            user_profile_dir = desktop_file_dir_new (user_data_dir);\n+            user_profile_dir->nix_profile_watch_dir = profile_dir;\n+\n+            env_dir = g_build_filename (\"/etc/profiles/per-user\", NULL);\n+            env_data_dir = g_build_filename (env_dir, user, \"share\", NULL);\n+            user_env_dir = desktop_file_dir_new (env_data_dir);\n+            user_env_dir->nix_profile_watch_dir = env_dir;\n+\n+            g_ptr_array_add (desktop_file_dirs, desktop_file_dir_ref (user_profile_dir));\n+            g_ptr_array_add (desktop_file_dirs, desktop_file_dir_ref (user_env_dir));\n+            g_free (user_data_dir);\n+            g_free (env_data_dir);\n+          }\n+      }\n+\n       /* The list of directories will never change after this, unless\n        * g_get_user_config_dir() changes due to %G_TEST_OPTION_ISOLATE_DIRS. */\n       desktop_file_dirs_config_dir = user_config_dir;\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/gio/gsettingsschema.c b/gio/gsettingsschema.c\nindex b1918657d..504ff97c4 100644\n--- a/gio/gsettingsschema.c\n+++ b/gio/gsettingsschema.c\n@@ -356,6 +356,9 @@ initialise_schema_sources (void)\n \n       try_prepend_data_dir (g_get_user_data_dir ());\n \n+      if (!is_setuid && (path = g_getenv (\"NIX_GSETTINGS_OVERRIDES_DIR\")) != NULL)\n+        try_prepend_dir (path);\n+\n       /* Disallow loading extra schemas if running as setuid, as that could\n        * allow reading privileged files. */\n       if (!is_setuid && (path = g_getenv (\"GSETTINGS_SCHEMA_DIR\")) != NULL)\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/gio/gdesktopappinfo.c b/gio/gdesktopappinfo.c\nindex 87db7a97a..bf01fb6b6 100644\n--- a/gio/gdesktopappinfo.c\n+++ b/gio/gdesktopappinfo.c\n@@ -2697,6 +2697,7 @@ prepend_terminal_to_vector (int          *argc,\n     { \"gnome-terminal\", \"--\" },\n     { \"mate-terminal\", \"-x\" },\n     { \"xfce4-terminal\", \"-x\" },\n+    { \"io.elementary.terminal\", \"-x\" },\n     { \"tilix\", \"-e\" },\n     { \"konsole\", \"-e\" },\n     { \"nxterm\", \"-e\" },\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/gio/gdbus-2.0/codegen/meson.build b/gio/gdbus-2.0/codegen/meson.build\nindex 6d19cd4ba..0205e5074 100644\n--- a/gio/gdbus-2.0/codegen/meson.build\n+++ b/gio/gdbus-2.0/codegen/meson.build\n@@ -20,7 +20,7 @@ gdbus_codegen_conf.set('DATADIR', glib_datadir)\n # Install gdbus-codegen executable\n gdbus_codegen = configure_file(input : 'gdbus-codegen.in',\n   output : 'gdbus-codegen',\n-  install_dir : get_option('bindir'),\n+  install_dir : get_option('devbindir'),\n   install_tag : 'bin-devel',\n   configuration : gdbus_codegen_conf\n )\ndiff --git a/gio/meson.build b/gio/meson.build\nindex 59c2b0fc0..87cbb8229 100644\n--- a/gio/meson.build\n+++ b/gio/meson.build\n@@ -885,14 +885,15 @@ pkg.generate(libgio,\n   variables : [\n     'schemasdir=' + '${datadir}' / schemas_subdir,\n     'dtdsdir=' + '${datadir}' / dtds_subdir,\n+    'devbindir=' + get_option('devbindir'),\n     'giomoduledir=' + pkgconfig_giomodulesdir,\n     'gio=' + '${bindir}' / 'gio',\n-    'gio_querymodules=' + pkgconfig_multiarch_bindir / 'gio-querymodules',\n-    'glib_compile_schemas=' + pkgconfig_multiarch_bindir / 'glib-compile-schemas',\n-    'glib_compile_resources=' + '${bindir}' / 'glib-compile-resources',\n+    'gio_querymodules=' + '${devbindir}' / 'gio-querymodules',\n+    'glib_compile_schemas=' + '${devbindir}' / 'glib-compile-schemas',\n+    'glib_compile_resources=' + '${devbindir}' / 'glib-compile-resources',\n     'gdbus=' + '${bindir}' /'gdbus',\n-    'gdbus_codegen=' + '${bindir}' / 'gdbus-codegen',\n-    'gresource=' + '${bindir}' / 'gresource',\n+    'gdbus_codegen=' + '${devbindir}' / 'gdbus-codegen',\n+    'gresource=' + '${devbindir}' / 'gresource',\n     'gsettings=' + '${bindir}' / 'gsettings',\n   ],\n   version : glib_version,\n@@ -995,6 +996,7 @@ gio_tool = executable('gio', gio_tool_sources,\n \n executable('gresource', 'gresource-tool.c',\n   install : true,\n+  install_dir : get_option('devbindir'),\n   install_tag : 'bin',\n   # intl.lib is not compatible with SAFESEH\n   link_args : noseh_link_args,\n@@ -1002,7 +1004,7 @@ executable('gresource', 'gresource-tool.c',\n \n gio_querymodules = executable('gio-querymodules', 'gio-querymodules.c', 'giomodule-priv.c',\n   install : true,\n-  install_dir : multiarch_bindir,\n+  install_dir : get_option('devbindir'),\n   install_tag : 'bin',\n   c_args : gio_c_args,\n   # intl.lib is not compatible with SAFESEH\n@@ -1012,7 +1014,7 @@ gio_querymodules = executable('gio-querymodules', 'gio-querymodules.c', 'giomodu\n glib_compile_schemas = executable('glib-compile-schemas',\n   ['glib-compile-schemas.c'],\n   install : true,\n-  install_dir : multiarch_bindir,\n+  install_dir : get_option('devbindir'),\n   install_tag : 'bin',\n   # intl.lib is not compatible with SAFESEH\n   link_args : noseh_link_args,\n@@ -1021,6 +1023,7 @@ glib_compile_schemas = executable('glib-compile-schemas',\n glib_compile_resources = executable('glib-compile-resources',\n   [gconstructor_as_data_h, 'glib-compile-resources.c'],\n   install : true,\n+  install_dir : get_option('devbindir'),\n   install_tag : 'bin-devel',\n   c_args : gio_c_args,\n   # intl.lib is not compatible with SAFESEH\ndiff --git a/gio/tests/meson.build b/gio/tests/meson.build\nindex 232ecca5e..e292927ac 100644\n--- a/gio/tests/meson.build\n+++ b/gio/tests/meson.build\n@@ -1182,16 +1182,18 @@ if have_bash and have_pkg_config\n \n   gio_binaries = [\n     'gio',\n-    'glib-compile-resources',\n     'gdbus',\n-    'gdbus-codegen',\n-    'gresource',\n     'gsettings',\n   ]\n-  gio_multiarch_binaries = [\n+  gio_dev_binaries = [\n+    'glib-compile-resources',\n+    'gdbus-codegen',\n+    'gresource',\n     'gio-querymodules',\n     'glib-compile-schemas',\n   ]\n+  gio_multiarch_binaries = [\n+  ]\n \n   foreach binary: gio_binaries\n     pkg_config_tests += [\n@@ -1200,6 +1202,13 @@ if have_bash and have_pkg_config\n         prefix / get_option('bindir') / binary)\n     ]\n   endforeach\n+  foreach binary: gio_dev_binaries\n+    pkg_config_tests += [\n+      'test \"$(pkg-config --variable=@0@ gio-2.0)\" = \"@1@\"'.format(\n+        binary.underscorify(),\n+        prefix / get_option('devbindir') / binary)\n+    ]\n+  endforeach\n \n   foreach binary: gio_multiarch_binaries\n     pkg_config_tests += [\ndiff --git a/glib/meson.build b/glib/meson.build\nindex d2efebadc..eb9fa5b2f 100644\n--- a/glib/meson.build\n+++ b/glib/meson.build\n@@ -447,9 +447,10 @@ pkg.generate(libglib,\n   subdirs : ['glib-2.0'],\n   extra_cflags : ['-I${libdir}/glib-2.0/include'] + win32_cflags,\n   variables : [\n-    'glib_genmarshal=' + '${bindir}' / 'glib-genmarshal',\n-    'gobject_query=' + '${bindir}' / 'gobject-query',\n-    'glib_mkenums=' + '${bindir}' / 'glib-mkenums',\n+    'devbindir=' + get_option('devbindir'),\n+    'glib_genmarshal=' + '${devbindir}' / 'glib-genmarshal',\n+    'gobject_query=' + '${devbindir}' / 'gobject-query',\n+    'glib_mkenums=' + '${devbindir}' / 'glib-mkenums',\n     'glib_valgrind_suppressions=' + '${datadir}' /\n       valgrind_suppression_file_install_subdir /\n       fs.name(valgrind_suppression_file),\n@@ -490,6 +491,7 @@ if host_system == 'windows'\n else\n   gtester = executable('gtester', 'gtester.c',\n     install : true,\n+    install_dir : get_option('devbindir'),\n     install_tag : 'bin-devel',\n     c_args : ['-UG_DISABLE_ASSERT'],\n     include_directories : configinc,\n@@ -505,7 +507,7 @@ report_conf.set('PYTHON', python_name)\n configure_file(\n   input: 'gtester-report.in',\n   output: 'gtester-report',\n-  install_dir: get_option('bindir'),\n+  install_dir: get_option('devbindir'),\n   install_tag : 'bin-devel',\n   configuration: report_conf,\n   install_mode: 'rwxr-xr-x'\ndiff --git a/glib/tests/meson.build b/glib/tests/meson.build\nindex f6efc593a..5522dcb96 100644\n--- a/glib/tests/meson.build\n+++ b/glib/tests/meson.build\n@@ -568,9 +568,9 @@ if have_bash and have_pkg_config\n         'test \"$(pkg-config --variable=datadir glib-2.0)\" = \"@0@\"'.format(\n           prefix / get_option('datadir')),\n         'test \"$(pkg-config --variable=gobject_query glib-2.0)\" = \"@0@\"'.format(\n-          prefix / get_option('bindir') / 'gobject-query'),\n+          prefix / get_option('devbindir') / 'gobject-query'),\n         'test \"$(pkg-config --variable=glib_mkenums glib-2.0)\" = \"@0@\"'.format(\n-          prefix / get_option('bindir') / 'glib-mkenums'),\n+          prefix / get_option('devbindir') / 'glib-mkenums'),\n         'test \"$(pkg-config --variable=glib_valgrind_suppressions glib-2.0)\" = \"@0@\"'.format(\n           prefix / get_option('datadir') /\n           valgrind_suppression_file_install_subdir / fs.name(valgrind_suppression_file)),\ndiff --git a/gobject/meson.build b/gobject/meson.build\nindex 2129aaf8a..da8462428 100644\n--- a/gobject/meson.build\n+++ b/gobject/meson.build\n@@ -94,7 +94,7 @@ foreach tool: python_tools\n     input : tool + '.in',\n     output : tool,\n     configuration : python_tools_conf,\n-    install_dir : glib_bindir,\n+    install_dir : get_option('devbindir'),\n     install_tag : 'bin-devel',\n   )\n \n@@ -172,6 +172,7 @@ meson.override_dependency('gobject-2.0', libgobject_dep)\n \n gobject_query = executable('gobject-query', 'gobject-query.c',\n   install : true,\n+  install_dir : get_option('devbindir'),\n   install_tag : 'bin-devel',\n   dependencies : [libglib_dep, libgobject_dep])\n \ndiff --git a/meson.options b/meson.options\nindex 69a2135bc..cfe14bb09 100644\n--- a/meson.options\n+++ b/meson.options\n@@ -4,6 +4,11 @@ option('runtime_libdir',\n        description : 'install runtime libraries relative to libdir',\n        deprecated: true)\n \n+option('devbindir',\n+       type : 'string',\n+       value : '',\n+       description : 'bindir for development tools')\n+\n option('charsetalias_dir',\n        type : 'string',\n        value : '',\ndiff --git a/tools/meson.build b/tools/meson.build\nindex 257312ebf..f8315392b 100644\n--- a/tools/meson.build\n+++ b/tools/meson.build\n@@ -8,7 +8,7 @@ if have_sh\n   gettextize_conf.set('datarootdir', glib_datadir)\n   gettextize_conf.set('datadir', glib_datadir)\n   configure_file(input : 'glib-gettextize.in',\n-    install_dir : glib_bindir,\n+    install_dir : get_option('devbindir'),\n     install_tag : 'bin-devel',\n     output : 'glib-gettextize',\n     configuration : gettextize_conf)\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/glib/meson.build b/glib/meson.build\nindex b2dd569e1..b013991a1 100644\n--- a/glib/meson.build\n+++ b/glib/meson.build\n@@ -541,7 +540,7 @@ configure_file(\n   input: 'libglib-gdb.py.in',\n   output: 'libglib-2.0.so.@0@-gdb.py'.format(library_version),\n   configuration: gdb_conf,\n-  install_dir: gdb_install_dir,\n+  install_dir: glib_libdir,\n   install_tag: 'devel',\n   install: gdb_install,\n )\ndiff --git a/gobject/meson.build b/gobject/meson.build\n@@ -185,7 +184,7 @@ configure_file(\n   input: 'libgobject-gdb.py.in',\n   output: 'libgobject-2.0.so.@0@-gdb.py'.format(library_version),\n   configuration: gdb_conf,\n-  install_dir: gdb_install_dir,\n+  install_dir: glib_libdir,\n   install_tag: 'devel',\n   install: gdb_install,\n )\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://gnome/sources/glib/2.86/glib-2.86.1.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "119d1708ca022556d6d2989ee90ad1b82bd9c0d1667e066944a6d0020e2d5e57"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://gitlab.gnome.org/GNOME/glib"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "50b381c1c7h4ll8a40wqh3fcknwpnnck-ngtcp2-1.17.0",
      "name": "ngtcp2",
      "version": "1.17.0",
      "description": "Implementation of the QUIC protocol (RFC9000)",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/ngtcp2@1.17.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/ngtcp2/ngtcp2/releases/download/v1.17.0/ngtcp2-1.17.0.tar.bz2",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "8fc85819d169e62978a4e0db3655482ce74951a7eab0c766737b57a31418da61"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/ngtcp2/ngtcp2"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "51y1h0zc9gxdkfsmiyis4l7h986j34ly-gnum4-1.4.20",
      "name": "gnum4",
      "version": "1.4.20",
      "description": "GNU M4, a macro processor",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/gnum4@1.4.20",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://ftpmirror.gnu.org/m4/m4-1.4.20.tar.bz2",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "ac6989ee5d2aed81739780630cc2ce097e2a6546feb96a4a54db37d46a1452e4"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/m4/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "543fcj44fgrazby9im48n4rzhi2x7rq2-boost-1.87.0",
      "name": "boost",
      "version": "1.87.0",
      "description": "Collection of C++ libraries",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSL-1.0"
          }
        }
      ],
      "purl": "pkg:nix/boost@1.87.0",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/tools/boost_install/boost-install.jam b/tools/boost_install/boost-install.jam\nindex 4238f921e..8fc1ea269 100644\n--- a/tools/boost_install/boost-install.jam\n+++ b/tools/boost_install/boost-install.jam\n@@ -649,7 +649,7 @@ rule generate-cmake-config- ( target : sources * : properties * )\n         \"\"\n         \"# Compute the include and library directories relative to this file.\"\n         \"\"\n-        \"get_filename_component(_BOOST_CMAKEDIR \\\"${CMAKE_CURRENT_LIST_DIR}/../\\\" REALPATH)\"\n+        \"get_filename_component(_BOOST_REAL_CMAKEDIR \\\"${CMAKE_CURRENT_LIST_DIR}/../\\\" REALPATH)\"\n         : true ;\n \n     if [ path.is-rooted $(cmakedir) ]\n@@ -668,6 +668,8 @@ rule generate-cmake-config- ( target : sources * : properties * )\n             \"  unset(_BOOST_CMAKEDIR_ORIGINAL)\"\n             \"endif()\"\n             \"\"\n+\t    \"# Assume that the installer actually did know where the libs were to be installed\"\n+            \"get_filename_component(_BOOST_CMAKEDIR \\\"$(cmakedir-native)\\\" REALPATH)\"\n             : true ;\n     }\n \n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/boost/smart_ptr/intrusive_ptr.hpp\n+++ b/boost/smart_ptr/intrusive_ptr.hpp\n@@ -285,7 +285,7 @@\n \n // operator<<\n \n-template<class Y> std::ostream & operator<< (std::ostream & os, intrusive_ptr<Y> const & p)\n+template<class E, class T, class Y> std::basic_ostream<E, T> & operator<< (std::basic_ostream<E, T> & os, intrusive_ptr<Y> const & p)\n {\n     os << p.get();\n     return os;\n--- a/boost/smart_ptr/shared_ptr.hpp\n+++ b/boost/smart_ptr/shared_ptr.hpp\n@@ -775,7 +775,7 @@\n \n // operator<<\n \n-template<class Y> std::ostream & operator<< (std::ostream & os, shared_ptr<Y> const & p)\n+template<class E, class T, class Y> std::basic_ostream<E, T> & operator<< (std::basic_ostream<E, T> & os, shared_ptr<Y> const & p)\n {\n     os << p.get();\n     return os;\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/libs/context/boost-context-features.jam\n+++ b/libs/context/boost-context-features.jam\n@@ -37,9 +37,14 @@\n local rule default_abi ( )\n {\n     local tmp = sysv ;\n+\n+    # Avoid using \"in\" operator here: it returns true if its left\n+    # part is empty, which happens e.g. with os.platform on\n+    # some uncommon architectures.\n     if [ os.name ] = \"NT\" { tmp = ms ; }\n     else if [ os.name ] = \"CYGWIN\" { tmp = ms ; }\n-    else if [ os.platform ] in \"ARM\" \"ARM64\" { tmp = aapcs ; }\n+    else if [ os.platform ] = \"ARM\" { tmp = aapcs ; }\n+    else if [ os.platform ] = \"ARM64\" { tmp = aapcs ; }\n     else if [ os.platform ] = \"MIPS32\" { tmp = o32 ; }\n     else if [ os.platform ] = \"MIPS64\" { tmp = n64 ; }\n     return $(tmp) ;\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://sourceforge/boost/boost_1_87_0.tar.bz2"
        },
        {
          "type": "vcs",
          "url": "https://boostorg.jfrog.io/artifactory/main/release/1.87.0/source/boost_1_87_0.tar.bz2"
        },
        {
          "type": "website",
          "url": "http://boost.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "54rrraasls3cass3hzry95wb8hm75vqq-libjpeg-turbo-3.1.2-bin",
      "name": "libjpeg-turbo",
      "version": "3.1.2",
      "description": "Faster (using SIMD) libjpeg implementation",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "IJG"
          }
        }
      ],
      "purl": "pkg:nix/libjpeg-turbo@3.1.2",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/libjpeg-turbo/libjpeg-turbo/archive/refs/tags/3.1.2.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "b667962c9c62795e367fd9634a9289a0b111e1039840bb0b142ee35b9e186409"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://libjpeg-turbo.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "586m17rh3and42f2pyqvmsmrxaz6bdkn-libuv-1.51.0",
      "name": "libuv",
      "version": "1.51.0",
      "description": "Multi-platform support library with a focus on asynchronous I/O",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        },
        {
          "license": {
            "id": "ISC"
          }
        },
        {
          "license": {
            "id": "BSD-2-Clause"
          }
        },
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        },
        {
          "license": {
            "id": "CC-BY-4.0"
          }
        }
      ],
      "purl": "pkg:nix/libuv@1.51.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/libuv/libuv/archive/v1.51.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "6b24e4dea91e7808eb1a3e5a6fbc05eefa5623c5d64b511e28a52acda0ff2d8d"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://libuv.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "58lnfa43dm43r4wy8mppqxh6n5xgwqpc-libevent-2.1.12",
      "name": "libevent",
      "version": "2.1.12",
      "description": "Event notification library",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/libevent@2.1.12",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/openssl-compat.h\n+++ b/openssl-compat.h\n@@ -40,7 +40,8 @@\n #endif /* (OPENSSL_VERSION_NUMBER < 0x10100000L) || \\\n \t(defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x20700000L) */\n \n-#if defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER >= 0x20700000L\n+#if defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER >= 0x20700000L && \\\n+\tLIBRESSL_VERSION_NUMBER < 0x30500000L\n #define BIO_get_init(b) (b)->init\n #endif\n \n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz"
        },
        {
          "type": "website",
          "url": "https://libevent.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "5bzaw01200k1cbbcs8gazjklmw076ddx-python3.13-pathspec-0.12.1-dist",
      "name": "pathspec",
      "version": "0.12.1",
      "description": "Utility library for gitignore-style pattern matching of file paths",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MPL-2.0"
          }
        }
      ],
      "purl": "pkg:nix/pathspec@0.12.1",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/p/pathspec/pathspec-0.12.1.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/cpburnz/python-path-specification"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "5f0q4dv7xx2z8xmhn51xa20skggvn1iv-python3.13-build-1.3.0",
      "name": "build",
      "version": "1.3.0",
      "description": "Simple, correct PEP517 package builder",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/build@1.3.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/pypa/build/archive/refs/tags/1.3.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "c3660a4339e2f1eeaba674091f62746c7cd18a08d63a55a223c3e8e5ddd9a92f"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/pypa/build"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "5jbx0nr2y3b0hr0gv4np4wplzigrxhjw-zstd-1.5.7-dev",
      "name": "zstd",
      "version": "1.5.7",
      "description": "Zstandard real-time compression algorithm",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/zstd@1.5.7",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/tests/playTests.sh\n+++ b/tests/playTests.sh\n@@ -119,16 +119,10 @@ case \"$OS\" in\n esac\n \n case \"$UNAME\" in\n-  Darwin) MD5SUM=\"md5 -r\" ;;\n-  NetBSD) MD5SUM=\"md5 -n\" ;;\n-  OpenBSD) MD5SUM=\"md5\" ;;\n   *) MD5SUM=\"md5sum\" ;;\n esac\n \n MTIME=\"stat -c %Y\"\n-case \"$UNAME\" in\n-    Darwin | FreeBSD | OpenBSD | NetBSD) MTIME=\"stat -f %m\" ;;\n-esac\n \n assertSameMTime() {\n     MT1=$($MTIME \"$1\")\n@@ -138,9 +132,6 @@ assertSameMTime() {\n }\n \n GET_PERMS=\"stat -c %a\"\n-case \"$UNAME\" in\n-    Darwin | FreeBSD | OpenBSD | NetBSD) GET_PERMS=\"stat -f %Lp\" ;;\n-esac\n \n assertFilePermissions() {\n     STAT1=$($GET_PERMS \"$1\")\n@@ -1155,7 +1146,6 @@ $MD5SUM dirTestDict/* > tmph1\n zstd -f --rm dirTestDict/* -D tmpDictC\n zstd -d --rm dirTestDict/*.zst -D tmpDictC  # note : use internal checksum by default\n case \"$UNAME\" in\n-  Darwin) println \"md5sum -c not supported on OS-X : test skipped\" ;;  # not compatible with OS-X's md5\n   *) $MD5SUM -c tmph1 ;;\n esac\n rm -rf dirTestDict\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/doc/zstd_manual.html\n+++ b/doc/zstd_manual.html\n@@ -110,6 +110,7 @@\n            - ZSTD_CONTENTSIZE_UNKNOWN if the size cannot be determined\n            - ZSTD_CONTENTSIZE_ERROR if an error occurred (e.g. invalid magic number, srcSize too small)\n   note 1 : a 0 return value means the frame is valid but \"empty\".\n+           When invoking this method on a skippable frame, it will return 0.\n   note 2 : decompressed size is an optional field, it may not be present (typically in streaming mode).\n            When `return==ZSTD_CONTENTSIZE_UNKNOWN`, data to decompress could be any size.\n            In which case, it's necessary to use streaming mode to decompress data.\n@@ -128,9 +129,8 @@\n </p></pre><BR>\n \n <pre><b>ZSTD_DEPRECATED(\"Replaced by ZSTD_getFrameContentSize\")\n-ZSTDLIB_API\n unsigned long long ZSTD_getDecompressedSize(const void* src, size_t srcSize);\n-</b><p>  NOTE: This function is now obsolete, in favor of ZSTD_getFrameContentSize().\n+</b><p>  This function is now obsolete, in favor of ZSTD_getFrameContentSize().\n   Both functions work the same way, but ZSTD_getDecompressedSize() blends\n   \"empty\", \"unknown\" and \"error\" results to the same return value (0),\n   while ZSTD_getFrameContentSize() gives them separate return values.\n@@ -142,7 +142,12 @@\n  `srcSize` must be >= first frame size\n  @return : the compressed size of the first frame starting at `src`,\n            suitable to pass as `srcSize` to `ZSTD_decompress` or similar,\n-        or an error code if input is invalid \n+           or an error code if input is invalid\n+  Note 1: this method is called _find*() because it's not enough to read the header,\n+          it may have to scan through the frame's content, to reach its end.\n+  Note 2: this method also works with Skippable Frames. In which case,\n+          it returns the size of the complete skippable frame,\n+          which is always equal to its content size + 8 bytes for headers. \n </p></pre><BR>\n \n <h3>Compression helper functions</h3><pre></pre><b><pre></pre></b><BR>\n@@ -166,8 +171,7 @@\n  \n </p></pre><BR>\n \n-<h3>Error helper functions</h3><pre></pre><b><pre>#include \"zstd_errors.h\" </b>/* list of errors */<b>\n-</b>/* ZSTD_isError() :<b>\n+<h3>Error helper functions</h3><pre></pre><b><pre></b>/* ZSTD_isError() :<b>\n  * Most ZSTD_* functions returning a size_t value can be tested for error,\n  * using ZSTD_isError().\n  * @return 1 if error, 0 otherwise\n@@ -1239,7 +1243,7 @@\n </p></pre><BR>\n \n <pre><b>ZSTDLIB_STATIC_API size_t ZSTD_frameHeaderSize(const void* src, size_t srcSize);\n-</b><p>  srcSize must be >= ZSTD_FRAMEHEADERSIZE_PREFIX.\n+</b><p>  srcSize must be large enough, aka >= ZSTD_FRAMEHEADERSIZE_PREFIX.\n  @return : size of the Frame Header,\n            or an error code (if srcSize is too small) \n </p></pre><BR>\n@@ -1252,20 +1256,20 @@\n     unsigned blockSizeMax;\n     ZSTD_FrameType_e frameType;          </b>/* if == ZSTD_skippableFrame, frameContentSize is the size of skippable content */<b>\n     unsigned headerSize;\n-    unsigned dictID;\n+    unsigned dictID;                     </b>/* for ZSTD_skippableFrame, contains the skippable magic variant [0-15] */<b>\n     unsigned checksumFlag;\n     unsigned _reserved1;\n     unsigned _reserved2;\n-} ZSTD_frameHeader;\n+} ZSTD_FrameHeader;\n </b></pre><BR>\n-<pre><b>ZSTDLIB_STATIC_API size_t ZSTD_getFrameHeader(ZSTD_FrameHeader* zfhPtr, const void* src, size_t srcSize);   </b>/**< doesn't consume input */<b>\n+<pre><b>ZSTDLIB_STATIC_API size_t ZSTD_getFrameHeader(ZSTD_FrameHeader* zfhPtr, const void* src, size_t srcSize);\n </b>/*! ZSTD_getFrameHeader_advanced() :<b>\n  *  same as ZSTD_getFrameHeader(),\n  *  with added capability to select a format (like ZSTD_f_zstd1_magicless) */\n ZSTDLIB_STATIC_API size_t ZSTD_getFrameHeader_advanced(ZSTD_FrameHeader* zfhPtr, const void* src, size_t srcSize, ZSTD_format_e format);\n-</b><p>  decode Frame Header, or requires larger `srcSize`.\n- @return : 0, `zfhPtr` is correctly filled,\n-          >0, `srcSize` is too small, value is wanted `srcSize` amount,\n+</b><p>  decode Frame Header into `zfhPtr`, or requires larger `srcSize`.\n+ @return : 0 => header is complete, `zfhPtr` is correctly filled,\n+          >0 => `srcSize` is too small, @return value is the wanted `srcSize` amount, `zfhPtr` is not filled,\n            or an error code, which can be tested using ZSTD_isError() \n </p></pre><BR>\n \n@@ -1421,7 +1425,7 @@\n ZSTD_compressSequencesAndLiterals(ZSTD_CCtx* cctx,\n                       void* dst, size_t dstCapacity,\n                 const ZSTD_Sequence* inSeqs, size_t nbSequences,\n-                const void* literals, size_t litSize, size_t litCapacity,\n+                const void* literals, size_t litSize, size_t litBufCapacity,\n                 size_t decompressedSize);\n </b><p> This is a variant of ZSTD_compressSequences() which,\n  instead of receiving (src,srcSize) as input parameter, receives (literals,litSize),\n@@ -1435,20 +1439,22 @@\n  - Not compatible with frame checksum, which must be disabled\n  - If any block is incompressible, will fail and return an error\n  - @litSize must be == sum of all @.litLength fields in @inSeqs. Any discrepancy will generate an error.\n- - the buffer @literals must have a size @litCapacity which is larger than @litSize by at least 8 bytes.\n+ - @litBufCapacity is the size of the underlying buffer into which literals are written, starting at address @literals.\n+   @litBufCapacity must be at least 8 bytes larger than @litSize.\n  - @decompressedSize must be correct, and correspond to the sum of all Sequences. Any discrepancy will generate an error.\n  @return : final compressed size, or a ZSTD error code.\n  \n </p></pre><BR>\n \n <pre><b>ZSTDLIB_STATIC_API size_t ZSTD_writeSkippableFrame(void* dst, size_t dstCapacity,\n-                                const void* src, size_t srcSize, unsigned magicVariant);\n+                                 const void* src, size_t srcSize,\n+                                       unsigned magicVariant);\n </b><p> Generates a zstd skippable frame containing data given by src, and writes it to dst buffer.\n \n  Skippable frames begin with a 4-byte magic number. There are 16 possible choices of magic number,\n  ranging from ZSTD_MAGIC_SKIPPABLE_START to ZSTD_MAGIC_SKIPPABLE_START+15.\n- As such, the parameter magicVariant controls the exact skippable frame magic number variant used, so\n- the magic number used will be ZSTD_MAGIC_SKIPPABLE_START + magicVariant.\n+ As such, the parameter magicVariant controls the exact skippable frame magic number variant used,\n+ so the magic number used will be ZSTD_MAGIC_SKIPPABLE_START + magicVariant.\n \n  Returns an error if destination buffer is not large enough, if the source size is not representable\n  with a 4-byte unsigned int, or if the parameter magicVariant is greater than 15 (and therefore invalid).\n@@ -1457,13 +1463,14 @@\n  \n </p></pre><BR>\n \n-<pre><b>size_t ZSTD_readSkippableFrame(void* dst, size_t dstCapacity, unsigned* magicVariant,\n-                                const void* src, size_t srcSize);\n-</b><p> Retrieves a zstd skippable frame containing data given by src, and writes it to dst buffer.\n+<pre><b>ZSTDLIB_STATIC_API size_t ZSTD_readSkippableFrame(void* dst, size_t dstCapacity,\n+                                      unsigned* magicVariant,\n+                                      const void* src, size_t srcSize);\n+</b><p> Retrieves the content of a zstd skippable frame starting at @src, and writes it to @dst buffer.\n \n- The parameter magicVariant will receive the magicVariant that was supplied when the frame was written,\n- i.e. magicNumber - ZSTD_MAGIC_SKIPPABLE_START.  This can be NULL if the caller is not interested\n- in the magicVariant.\n+ The parameter @magicVariant will receive the magicVariant that was supplied when the frame was written,\n+ i.e. magicNumber - ZSTD_MAGIC_SKIPPABLE_START.\n+ This can be NULL if the caller is not interested in the magicVariant.\n \n  Returns an error if destination buffer is not large enough, or if the frame is not skippable.\n \n@@ -1471,7 +1478,7 @@\n  \n </p></pre><BR>\n \n-<pre><b>unsigned ZSTD_isSkippableFrame(const void* buffer, size_t size);\n+<pre><b>ZSTDLIB_STATIC_API unsigned ZSTD_isSkippableFrame(const void* buffer, size_t size);\n </b><p>  Tells if the content of `buffer` starts with a valid Frame Identifier for a skippable frame.\n  \n </p></pre><BR>\n--- a/programs/zstd.1\n+++ b/programs/zstd.1\n@@ -1,392 +1,580 @@\n-.TH \"ZSTD\" \"1\" \"October 2024\" \"zstd 1.5.6\" \"User Commands\"\n+.\n+.TH \"ZSTD\" \"1\" \"February 2025\" \"zstd 1.5.7\" \"User Commands\"\n+.\n .SH \"NAME\"\n \\fBzstd\\fR \\- zstd, zstdmt, unzstd, zstdcat \\- Compress or decompress \\.zst files\n+.\n .SH \"SYNOPSIS\"\n-.TS\n-allbox;\n-\\fBzstd\\fR [\\fIOPTIONS\\fR] [\\-\t\\fIINPUT\\-FILE\\fR] [\\-o \\fIOUTPUT\\-FILE\\fR]\n-.TE\n+\\fBzstd\\fR [\\fIOPTIONS\\fR] [\\-|\\fIINPUT\\-FILE\\fR] [\\-o \\fIOUTPUT\\-FILE\\fR]\n+.\n .P\n \\fBzstdmt\\fR is equivalent to \\fBzstd \\-T0\\fR\n+.\n .P\n \\fBunzstd\\fR is equivalent to \\fBzstd \\-d\\fR\n+.\n .P\n \\fBzstdcat\\fR is equivalent to \\fBzstd \\-dcf\\fR\n+.\n .SH \"DESCRIPTION\"\n \\fBzstd\\fR is a fast lossless compression algorithm and data compression tool, with command line syntax similar to \\fBgzip\\fR(1) and \\fBxz\\fR(1)\\. It is based on the \\fBLZ77\\fR family, with further FSE & huff0 entropy stages\\. \\fBzstd\\fR offers highly configurable compression speed, from fast modes at > 200 MB/s per core, to strong modes with excellent compression ratios\\. It also features a very fast decoder, with speeds > 500 MB/s per core, which remains roughly stable at all compression settings\\.\n+.\n .P\n \\fBzstd\\fR command line syntax is generally similar to gzip, but features the following few differences:\n+.\n .IP \"\\(bu\" 4\n-Source files are preserved by default\\. It's possible to remove them automatically by using the \\fB\\-\\-rm\\fR command\\.\n+Source files are preserved by default\\. It\\'s possible to remove them automatically by using the \\fB\\-\\-rm\\fR command\\.\n+.\n .IP \"\\(bu\" 4\n When compressing a single file, \\fBzstd\\fR displays progress notifications and result summary by default\\. Use \\fB\\-q\\fR to turn them off\\.\n+.\n .IP \"\\(bu\" 4\n \\fBzstd\\fR displays a short help page when command line is an error\\. Use \\fB\\-q\\fR to turn it off\\.\n+.\n .IP \"\\(bu\" 4\n-\\fBzstd\\fR does not accept input from console, though it does accept \\fBstdin\\fR when it's not the console\\.\n+\\fBzstd\\fR does not accept input from console, though it does accept \\fBstdin\\fR when it\\'s not the console\\.\n+.\n .IP \"\\(bu\" 4\n-\\fBzstd\\fR does not store the input's filename or attributes, only its contents\\.\n+\\fBzstd\\fR does not store the input\\'s filename or attributes, only its contents\\.\n+.\n .IP \"\" 0\n+.\n .P\n \\fBzstd\\fR processes each \\fIfile\\fR according to the selected operation mode\\. If no \\fIfiles\\fR are given or \\fIfile\\fR is \\fB\\-\\fR, \\fBzstd\\fR reads from standard input and writes the processed data to standard output\\. \\fBzstd\\fR will refuse to write compressed data to standard output if it is a terminal: it will display an error message and skip the file\\. Similarly, \\fBzstd\\fR will refuse to read compressed data from standard input if it is a terminal\\.\n+.\n .P\n Unless \\fB\\-\\-stdout\\fR or \\fB\\-o\\fR is specified, \\fIfiles\\fR are written to a new file whose name is derived from the source \\fIfile\\fR name:\n+.\n .IP \"\\(bu\" 4\n When compressing, the suffix \\fB\\.zst\\fR is appended to the source filename to get the target filename\\.\n+.\n .IP \"\\(bu\" 4\n When decompressing, the \\fB\\.zst\\fR suffix is removed from the source filename to get the target filename\n+.\n .IP \"\" 0\n+.\n .SS \"Concatenation with \\.zst Files\"\n It is possible to concatenate multiple \\fB\\.zst\\fR files\\. \\fBzstd\\fR will decompress such agglomerated file as if it was a single \\fB\\.zst\\fR file\\.\n+.\n .SH \"OPTIONS\"\n+.\n .SS \"Integer Suffixes and Special Values\"\n In most places where an integer argument is expected, an optional suffix is supported to easily indicate large integers\\. There must be no space between the integer and the suffix\\.\n+.\n .TP\n \\fBKiB\\fR\n-Multiply the integer by 1,024 (2\\e^10)\\. \\fBKi\\fR, \\fBK\\fR, and \\fBKB\\fR are accepted as synonyms for \\fBKiB\\fR\\.\n+Multiply the integer by 1,024 (2^10)\\. \\fBKi\\fR, \\fBK\\fR, and \\fBKB\\fR are accepted as synonyms for \\fBKiB\\fR\\.\n+.\n .TP\n \\fBMiB\\fR\n-Multiply the integer by 1,048,576 (2\\e^20)\\. \\fBMi\\fR, \\fBM\\fR, and \\fBMB\\fR are accepted as synonyms for \\fBMiB\\fR\\.\n+Multiply the integer by 1,048,576 (2^20)\\. \\fBMi\\fR, \\fBM\\fR, and \\fBMB\\fR are accepted as synonyms for \\fBMiB\\fR\\.\n+.\n .SS \"Operation Mode\"\n If multiple operation mode options are given, the last one takes effect\\.\n+.\n .TP\n \\fB\\-z\\fR, \\fB\\-\\-compress\\fR\n Compress\\. This is the default operation mode when no operation mode option is specified and no other operation mode is implied from the command name (for example, \\fBunzstd\\fR implies \\fB\\-\\-decompress\\fR)\\.\n+.\n .TP\n \\fB\\-d\\fR, \\fB\\-\\-decompress\\fR, \\fB\\-\\-uncompress\\fR\n Decompress\\.\n+.\n .TP\n \\fB\\-t\\fR, \\fB\\-\\-test\\fR\n Test the integrity of compressed \\fIfiles\\fR\\. This option is equivalent to \\fB\\-\\-decompress \\-\\-stdout > /dev/null\\fR, decompressed data is discarded and checksummed for errors\\. No files are created or removed\\.\n+.\n .TP\n \\fB\\-b#\\fR\n Benchmark file(s) using compression level \\fI#\\fR\\. See \\fIBENCHMARK\\fR below for a description of this operation\\.\n+.\n .TP\n \\fB\\-\\-train FILES\\fR\n Use \\fIFILES\\fR as a training set to create a dictionary\\. The training set should contain a lot of small files (> 100)\\. See \\fIDICTIONARY BUILDER\\fR below for a description of this operation\\.\n+.\n .TP\n \\fB\\-l\\fR, \\fB\\-\\-list\\fR\n-Display information related to a zstd compressed file, such as size, ratio, and checksum\\. Some of these fields may not be available\\. This command's output can be augmented with the \\fB\\-v\\fR modifier\\.\n+Display information related to a zstd compressed file, such as size, ratio, and checksum\\. Some of these fields may not be available\\. This command\\'s output can be augmented with the \\fB\\-v\\fR modifier\\.\n+.\n .SS \"Operation Modifiers\"\n+.\n .IP \"\\(bu\" 4\n-\\fB\\-#\\fR: selects \\fB#\\fR compression level [1\\-19] (default: 3)\\. Higher compression levels \\fIgenerally\\fR produce higher compression ratio at the expense of speed and memory\\. A rough rule of thumb is that compression speed is expected to be divided by 2 every 2 levels\\. Technically, each level is mapped to a set of advanced parameters (that can also be modified individually, see below)\\. Because the compressor's behavior highly depends on the content to compress, there's no guarantee of a smooth progression from one level to another\\.\n+\\fB\\-#\\fR: selects \\fB#\\fR compression level [1\\-19] (default: 3)\\. Higher compression levels \\fIgenerally\\fR produce higher compression ratio at the expense of speed and memory\\. A rough rule of thumb is that compression speed is expected to be divided by 2 every 2 levels\\. Technically, each level is mapped to a set of advanced parameters (that can also be modified individually, see below)\\. Because the compressor\\'s behavior highly depends on the content to compress, there\\'s no guarantee of a smooth progression from one level to another\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-\\-ultra\\fR: unlocks high compression levels 20+ (maximum 22), using a lot more memory\\. Note that decompression will also require more memory when using these levels\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-\\-fast[=#]\\fR: switch to ultra\\-fast compression levels\\. If \\fB=#\\fR is not present, it defaults to \\fB1\\fR\\. The higher the value, the faster the compression speed, at the cost of some compression ratio\\. This setting overwrites compression level if one was set previously\\. Similarly, if a compression level is set after \\fB\\-\\-fast\\fR, it overrides it\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-T#\\fR, \\fB\\-\\-threads=#\\fR: Compress using \\fB#\\fR working threads (default: 1)\\. If \\fB#\\fR is 0, attempt to detect and use the number of physical CPU cores\\. In all cases, the nb of threads is capped to \\fBZSTDMT_NBWORKERS_MAX\\fR, which is either 64 in 32\\-bit mode, or 256 for 64\\-bit environments\\. This modifier does nothing if \\fBzstd\\fR is compiled without multithread support\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-\\-single\\-thread\\fR: Use a single thread for both I/O and compression\\. As compression is serialized with I/O, this can be slightly slower\\. Single\\-thread mode features significantly lower memory usage, which can be useful for systems with limited amount of memory, such as 32\\-bit systems\\.\n+.\n .IP\n Note 1: this mode is the only available one when multithread support is disabled\\.\n+.\n .IP\n Note 2: this mode is different from \\fB\\-T1\\fR, which spawns 1 compression thread in parallel with I/O\\. Final compressed result is also slightly different from \\fB\\-T1\\fR\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-\\-auto\\-threads={physical,logical} (default: physical)\\fR: When using a default amount of threads via \\fB\\-T0\\fR, choose the default based on the number of detected physical or logical cores\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-\\-adapt[=min=#,max=#]\\fR: \\fBzstd\\fR will dynamically adapt compression level to perceived I/O conditions\\. Compression level adaptation can be observed live by using command \\fB\\-v\\fR\\. Adaptation can be constrained between supplied \\fBmin\\fR and \\fBmax\\fR levels\\. The feature works when combined with multi\\-threading and \\fB\\-\\-long\\fR mode\\. It does not work with \\fB\\-\\-single\\-thread\\fR\\. It sets window size to 8 MiB by default (can be changed manually, see \\fBwlog\\fR)\\. Due to the chaotic nature of dynamic adaptation, compressed result is not reproducible\\.\n+.\n .IP\n \\fINote\\fR: at the time of this writing, \\fB\\-\\-adapt\\fR can remain stuck at low speed when combined with multiple worker threads (>=2)\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-\\-long[=#]\\fR: enables long distance matching with \\fB#\\fR \\fBwindowLog\\fR, if \\fB#\\fR is not present it defaults to \\fB27\\fR\\. This increases the window size (\\fBwindowLog\\fR) and memory usage for both the compressor and decompressor\\. This setting is designed to improve the compression ratio for files with long matches at a large distance\\.\n+.\n .IP\n Note: If \\fBwindowLog\\fR is set to larger than 27, \\fB\\-\\-long=windowLog\\fR or \\fB\\-\\-memory=windowSize\\fR needs to be passed to the decompressor\\.\n+.\n+.IP \"\\(bu\" 4\n+\\fB\\-\\-max\\fR: set advanced parameters to maximum compression\\. warning: this setting is very slow and uses a lot of resources\\. It\\'s inappropriate for 32\\-bit mode and therefore disabled in this mode\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-D DICT\\fR: use \\fBDICT\\fR as Dictionary to compress or decompress FILE(s)\n+.\n .IP \"\\(bu\" 4\n-\\fB\\-\\-patch\\-from FILE\\fR: Specify the file to be used as a reference point for zstd's diff engine\\. This is effectively dictionary compression with some convenient parameter selection, namely that \\fIwindowSize\\fR > \\fIsrcSize\\fR\\.\n+\\fB\\-\\-patch\\-from FILE\\fR: Specify the file to be used as a reference point for zstd\\'s diff engine\\. This is effectively dictionary compression with some convenient parameter selection, namely that \\fIwindowSize\\fR > \\fIsrcSize\\fR\\.\n+.\n .IP\n Note: cannot use both this and \\fB\\-D\\fR together\\.\n+.\n .IP\n Note: \\fB\\-\\-long\\fR mode will be automatically activated if \\fIchainLog\\fR < \\fIfileLog\\fR (\\fIfileLog\\fR being the \\fIwindowLog\\fR required to cover the whole file)\\. You can also manually force it\\.\n+.\n .IP\n-Note: up to level 15, you can use \\fB\\-\\-patch\\-from\\fR in \\fB\\-\\-single\\-thread\\fR mode to improve compression ratio marginally at the cost of speed\\. Using '\\-\\-single\\-thread' above level 15 will lead to lower compression ratios\\.\n+Note: up to level 15, you can use \\fB\\-\\-patch\\-from\\fR in \\fB\\-\\-single\\-thread\\fR mode to improve compression ratio marginally at the cost of speed\\. Using \\'\\-\\-single\\-thread\\' above level 15 will lead to lower compression ratios\\.\n+.\n .IP\n Note: for level 19, you can get increased compression ratio at the cost of speed by specifying \\fB\\-\\-zstd=targetLength=\\fR to be something large (i\\.e\\. 4096), and by setting a large \\fB\\-\\-zstd=chainLog=\\fR\\.\n+.\n .IP \"\\(bu\" 4\n-\\fB\\-\\-rsyncable\\fR: \\fBzstd\\fR will periodically synchronize the compression state to make the compressed file more rsync\\-friendly\\. There is a negligible impact to compression ratio, and a potential impact to compression speed, perceptible at higher speeds, for example when combining \\fB\\-\\-rsyncable\\fR with many parallel worker threads\\. This feature does not work with \\fB\\-\\-single\\-thread\\fR\\. You probably don't want to use it with long range mode, since it will decrease the effectiveness of the synchronization points, but your mileage may vary\\.\n+\\fB\\-\\-rsyncable\\fR: \\fBzstd\\fR will periodically synchronize the compression state to make the compressed file more rsync\\-friendly\\. There is a negligible impact to compression ratio, and a potential impact to compression speed, perceptible at higher speeds, for example when combining \\fB\\-\\-rsyncable\\fR with many parallel worker threads\\. This feature does not work with \\fB\\-\\-single\\-thread\\fR\\. You probably don\\'t want to use it with long range mode, since it will decrease the effectiveness of the synchronization points, but your mileage may vary\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-C\\fR, \\fB\\-\\-[no\\-]check\\fR: add integrity check computed from uncompressed data (default: enabled)\n+.\n .IP \"\\(bu\" 4\n \\fB\\-\\-[no\\-]content\\-size\\fR: enable / disable whether or not the original size of the file is placed in the header of the compressed file\\. The default option is \\fB\\-\\-content\\-size\\fR (meaning that the original size will be placed in the header)\\.\n+.\n .IP \"\\(bu\" 4\n-\\fB\\-\\-no\\-dictID\\fR: do not store dictionary ID within frame header (dictionary compression)\\. The decoder will have to rely on implicit knowledge about which dictionary to use, it won't be able to check if it's correct\\.\n+\\fB\\-\\-no\\-dictID\\fR: do not store dictionary ID within frame header (dictionary compression)\\. The decoder will have to rely on implicit knowledge about which dictionary to use, it won\\'t be able to check if it\\'s correct\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-M#\\fR, \\fB\\-\\-memory=#\\fR: Set a memory usage limit\\. By default, \\fBzstd\\fR uses 128 MiB for decompression as the maximum amount of memory the decompressor is allowed to use, but you can override this manually if need be in either direction (i\\.e\\. you can increase or decrease it)\\.\n+.\n .IP\n This is also used during compression when using with \\fB\\-\\-patch\\-from=\\fR\\. In this case, this parameter overrides that maximum size allowed for a dictionary\\. (128 MiB)\\.\n+.\n .IP\n Additionally, this can be used to limit memory for dictionary training\\. This parameter overrides the default limit of 2 GiB\\. zstd will load training samples up to the memory limit and ignore the rest\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-\\-stream\\-size=#\\fR: Sets the pledged source size of input coming from a stream\\. This value must be exact, as it will be included in the produced frame header\\. Incorrect stream sizes will cause an error\\. This information will be used to better optimize compression parameters, resulting in better and potentially faster compression, especially for smaller source sizes\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-\\-size\\-hint=#\\fR: When handling input from a stream, \\fBzstd\\fR must guess how large the source size will be when optimizing compression parameters\\. If the stream size is relatively small, this guess may be a poor one, resulting in a higher compression ratio than expected\\. This feature allows for controlling the guess when needed\\. Exact guesses result in better compression ratios\\. Overestimates result in slightly degraded compression ratios, while underestimates may result in significant degradation\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-\\-target\\-compressed\\-block\\-size=#\\fR: Attempt to produce compressed blocks of approximately this size\\. This will split larger blocks in order to approach this target\\. This feature is notably useful for improved latency, when the receiver can leverage receiving early incomplete data\\. This parameter defines a loose target: compressed blocks will target this size \"on average\", but individual blocks can still be larger or smaller\\. Enabling this feature can decrease compression speed by up to ~10% at level 1\\. Higher levels will see smaller relative speed regression, becoming invisible at higher settings\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-f\\fR, \\fB\\-\\-force\\fR: disable input and output checks\\. Allows overwriting existing files, input from console, output to stdout, operating on links, block devices, etc\\. During decompression and when the output destination is stdout, pass\\-through unrecognized formats as\\-is\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-c\\fR, \\fB\\-\\-stdout\\fR: write to standard output (even if it is the console); keep original files (disable \\fB\\-\\-rm\\fR)\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-o FILE\\fR: save result into \\fBFILE\\fR\\. Note that this operation is in conflict with \\fB\\-c\\fR\\. If both operations are present on the command line, the last expressed one wins\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-\\-[no\\-]sparse\\fR: enable / disable sparse FS support, to make files with many zeroes smaller on disk\\. Creating sparse files may save disk space and speed up decompression by reducing the amount of disk I/O\\. default: enabled when output is into a file, and disabled when output is stdout\\. This setting overrides default and can force sparse mode over stdout\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-\\-[no\\-]pass\\-through\\fR enable / disable passing through uncompressed files as\\-is\\. During decompression when pass\\-through is enabled, unrecognized formats will be copied as\\-is from the input to the output\\. By default, pass\\-through will occur when the output destination is stdout and the force (\\fB\\-f\\fR) option is set\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-\\-rm\\fR: remove source file(s) after successful compression or decompression\\. This command is silently ignored if output is \\fBstdout\\fR\\. If used in combination with \\fB\\-o\\fR, triggers a confirmation prompt (which can be silenced with \\fB\\-f\\fR), as this is a destructive operation\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-k\\fR, \\fB\\-\\-keep\\fR: keep source file(s) after successful compression or decompression\\. This is the default behavior\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-r\\fR: operate recursively on directories\\. It selects all files in the named directory and all its subdirectories\\. This can be useful both to reduce command line typing, and to circumvent shell expansion limitations, when there are a lot of files and naming breaks the maximum size of a command line\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-\\-filelist FILE\\fR read a list of files to process as content from \\fBFILE\\fR\\. Format is compatible with \\fBls\\fR output, with one file per line\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-\\-output\\-dir\\-flat DIR\\fR: resulting files are stored into target \\fBDIR\\fR directory, instead of same directory as origin file\\. Be aware that this command can introduce name collision issues, if multiple files, from different directories, end up having the same name\\. Collision resolution ensures first file with a given name will be present in \\fBDIR\\fR, while in combination with \\fB\\-f\\fR, the last file will be present instead\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-\\-output\\-dir\\-mirror DIR\\fR: similar to \\fB\\-\\-output\\-dir\\-flat\\fR, the output files are stored underneath target \\fBDIR\\fR directory, but this option will replicate input directory hierarchy into output \\fBDIR\\fR\\.\n+.\n .IP\n If input directory contains \"\\.\\.\", the files in this directory will be ignored\\. If input directory is an absolute directory (i\\.e\\. \"/var/tmp/abc\"), it will be stored into the \"output\\-dir/var/tmp/abc\"\\. If there are multiple input files or directories, name collision resolution will follow the same rules as \\fB\\-\\-output\\-dir\\-flat\\fR\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-\\-format=FORMAT\\fR: compress and decompress in other formats\\. If compiled with support, zstd can compress to or decompress from other compression algorithm formats\\. Possibly available options are \\fBzstd\\fR, \\fBgzip\\fR, \\fBxz\\fR, \\fBlzma\\fR, and \\fBlz4\\fR\\. If no such format is provided, \\fBzstd\\fR is the default\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-h\\fR/\\fB\\-H\\fR, \\fB\\-\\-help\\fR: display help/long help and exit\n+.\n .IP \"\\(bu\" 4\n \\fB\\-V\\fR, \\fB\\-\\-version\\fR: display version number and immediately exit\\. note that, since it exits, flags specified after \\fB\\-V\\fR are effectively ignored\\. Advanced: \\fB\\-vV\\fR also displays supported formats\\. \\fB\\-vvV\\fR also displays POSIX support\\. \\fB\\-qV\\fR will only display the version number, suitable for machine reading\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-v\\fR, \\fB\\-\\-verbose\\fR: verbose mode, display more information\n+.\n .IP \"\\(bu\" 4\n \\fB\\-q\\fR, \\fB\\-\\-quiet\\fR: suppress warnings, interactivity, and notifications\\. specify twice to suppress errors too\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-\\-no\\-progress\\fR: do not display the progress bar, but keep all other messages\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-\\-show\\-default\\-cparams\\fR: shows the default compression parameters that will be used for a particular input file, based on the provided compression level and the input size\\. If the provided file is not a regular file (e\\.g\\. a pipe), this flag will output the parameters used for inputs of unknown size\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-\\-exclude\\-compressed\\fR: only compress files that are not already compressed\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-\\-\\fR: All arguments after \\fB\\-\\-\\fR are treated as files\n+.\n .IP \"\" 0\n+.\n .SS \"gzip Operation Modifiers\"\n When invoked via a \\fBgzip\\fR symlink, \\fBzstd\\fR will support further options that intend to mimic the \\fBgzip\\fR behavior:\n+.\n .TP\n \\fB\\-n\\fR, \\fB\\-\\-no\\-name\\fR\n do not store the original filename and timestamps when compressing a file\\. This is the default behavior and hence a no\\-op\\.\n+.\n .TP\n \\fB\\-\\-best\\fR\n alias to the option \\fB\\-9\\fR\\.\n+.\n .SS \"Environment Variables\"\n Employing environment variables to set parameters has security implications\\. Therefore, this avenue is intentionally limited\\. Only \\fBZSTD_CLEVEL\\fR and \\fBZSTD_NBTHREADS\\fR are currently supported\\. They set the default compression level and number of threads to use during compression, respectively\\.\n+.\n .P\n \\fBZSTD_CLEVEL\\fR can be used to set the level between 1 and 19 (the \"normal\" range)\\. If the value of \\fBZSTD_CLEVEL\\fR is not a valid integer, it will be ignored with a warning message\\. \\fBZSTD_CLEVEL\\fR just replaces the default compression level (\\fB3\\fR)\\.\n+.\n .P\n-\\fBZSTD_NBTHREADS\\fR can be used to set the number of threads \\fBzstd\\fR will attempt to use during compression\\. If the value of \\fBZSTD_NBTHREADS\\fR is not a valid unsigned integer, it will be ignored with a warning message\\. \\fBZSTD_NBTHREADS\\fR has a default value of (\\fB1\\fR), and is capped at ZSTDMT_NBWORKERS_MAX==200\\. \\fBzstd\\fR must be compiled with multithread support for this variable to have any effect\\.\n+\\fBZSTD_NBTHREADS\\fR can be used to set the number of threads \\fBzstd\\fR will attempt to use during compression\\. If the value of \\fBZSTD_NBTHREADS\\fR is not a valid unsigned integer, it will be ignored with a warning message\\. \\fBZSTD_NBTHREADS\\fR has a default value of \\fBmax(1, min(4, nbCores/4))\\fR, and is capped at ZSTDMT_NBWORKERS_MAX==200\\. \\fBzstd\\fR must be compiled with multithread support for this variable to have any effect\\.\n+.\n .P\n They can both be overridden by corresponding command line arguments: \\fB\\-#\\fR for compression level and \\fB\\-T#\\fR for number of compression threads\\.\n+.\n .SH \"ADVANCED COMPRESSION OPTIONS\"\n \\fBzstd\\fR provides 22 predefined regular compression levels plus the fast levels\\. A compression level is translated internally into multiple advanced parameters that control the behavior of the compressor (one can observe the result of this translation with \\fB\\-\\-show\\-default\\-cparams\\fR)\\. These advanced parameters can be overridden using advanced compression options\\.\n+.\n .SS \"\\-\\-zstd[=options]:\"\n The \\fIoptions\\fR are provided as a comma\\-separated list\\. You may specify only the options you want to change and the rest will be taken from the selected or default compression level\\. The list of available \\fIoptions\\fR:\n+.\n .TP\n \\fBstrategy\\fR=\\fIstrat\\fR, \\fBstrat\\fR=\\fIstrat\\fR\n Specify a strategy used by a match finder\\.\n+.\n .IP\n There are 9 strategies numbered from 1 to 9, from fastest to strongest: 1=\\fBZSTD_fast\\fR, 2=\\fBZSTD_dfast\\fR, 3=\\fBZSTD_greedy\\fR, 4=\\fBZSTD_lazy\\fR, 5=\\fBZSTD_lazy2\\fR, 6=\\fBZSTD_btlazy2\\fR, 7=\\fBZSTD_btopt\\fR, 8=\\fBZSTD_btultra\\fR, 9=\\fBZSTD_btultra2\\fR\\.\n+.\n .TP\n \\fBwindowLog\\fR=\\fIwlog\\fR, \\fBwlog\\fR=\\fIwlog\\fR\n Specify the maximum number of bits for a match distance\\.\n+.\n .IP\n The higher number of increases the chance to find a match which usually improves compression ratio\\. It also increases memory requirements for the compressor and decompressor\\. The minimum \\fIwlog\\fR is 10 (1 KiB) and the maximum is 30 (1 GiB) on 32\\-bit platforms and 31 (2 GiB) on 64\\-bit platforms\\.\n+.\n .IP\n Note: If \\fBwindowLog\\fR is set to larger than 27, \\fB\\-\\-long=windowLog\\fR or \\fB\\-\\-memory=windowSize\\fR needs to be passed to the decompressor\\.\n+.\n .TP\n \\fBhashLog\\fR=\\fIhlog\\fR, \\fBhlog\\fR=\\fIhlog\\fR\n Specify the maximum number of bits for a hash table\\.\n+.\n .IP\n Bigger hash tables cause fewer collisions which usually makes compression faster, but requires more memory during compression\\.\n+.\n .IP\n The minimum \\fIhlog\\fR is 6 (64 entries / 256 B) and the maximum is 30 (1B entries / 4 GiB)\\.\n+.\n .TP\n \\fBchainLog\\fR=\\fIclog\\fR, \\fBclog\\fR=\\fIclog\\fR\n Specify the maximum number of bits for the secondary search structure, whose form depends on the selected \\fBstrategy\\fR\\.\n+.\n .IP\n Higher numbers of bits increases the chance to find a match which usually improves compression ratio\\. It also slows down compression speed and increases memory requirements for compression\\. This option is ignored for the \\fBZSTD_fast\\fR \\fBstrategy\\fR, which only has the primary hash table\\.\n+.\n .IP\n The minimum \\fIclog\\fR is 6 (64 entries / 256 B) and the maximum is 29 (512M entries / 2 GiB) on 32\\-bit platforms and 30 (1B entries / 4 GiB) on 64\\-bit platforms\\.\n+.\n .TP\n \\fBsearchLog\\fR=\\fIslog\\fR, \\fBslog\\fR=\\fIslog\\fR\n Specify the maximum number of searches in a hash chain or a binary tree using logarithmic scale\\.\n+.\n .IP\n More searches increases the chance to find a match which usually increases compression ratio but decreases compression speed\\.\n+.\n .IP\n-The minimum \\fIslog\\fR is 1 and the maximum is 'windowLog' \\- 1\\.\n+The minimum \\fIslog\\fR is 1 and the maximum is \\'windowLog\\' \\- 1\\.\n+.\n .TP\n \\fBminMatch\\fR=\\fImml\\fR, \\fBmml\\fR=\\fImml\\fR\n Specify the minimum searched length of a match in a hash table\\.\n+.\n .IP\n Larger search lengths usually decrease compression ratio but improve decompression speed\\.\n+.\n .IP\n The minimum \\fImml\\fR is 3 and the maximum is 7\\.\n+.\n .TP\n \\fBtargetLength\\fR=\\fItlen\\fR, \\fBtlen\\fR=\\fItlen\\fR\n The impact of this field vary depending on selected strategy\\.\n+.\n .IP\n For \\fBZSTD_btopt\\fR, \\fBZSTD_btultra\\fR and \\fBZSTD_btultra2\\fR, it specifies the minimum match length that causes match finder to stop searching\\. A larger \\fBtargetLength\\fR usually improves compression ratio but decreases compression speed\\.\n+.\n .IP\n For \\fBZSTD_fast\\fR, it triggers ultra\\-fast mode when > 0\\. The value represents the amount of data skipped between match sampling\\. Impact is reversed: a larger \\fBtargetLength\\fR increases compression speed but decreases compression ratio\\.\n+.\n .IP\n For all other strategies, this field has no impact\\.\n+.\n .IP\n The minimum \\fItlen\\fR is 0 and the maximum is 128 KiB\\.\n+.\n .TP\n \\fBoverlapLog\\fR=\\fIovlog\\fR, \\fBovlog\\fR=\\fIovlog\\fR\n Determine \\fBoverlapSize\\fR, amount of data reloaded from previous job\\. This parameter is only available when multithreading is enabled\\. Reloading more data improves compression ratio, but decreases speed\\.\n+.\n .IP\n The minimum \\fIovlog\\fR is 0, and the maximum is 9\\. 1 means \"no overlap\", hence completely independent jobs\\. 9 means \"full overlap\", meaning up to \\fBwindowSize\\fR is reloaded from previous job\\. Reducing \\fIovlog\\fR by 1 reduces the reloaded amount by a factor 2\\. For example, 8 means \"windowSize/2\", and 6 means \"windowSize/8\"\\. Value 0 is special and means \"default\": \\fIovlog\\fR is automatically determined by \\fBzstd\\fR\\. In which case, \\fIovlog\\fR will range from 6 to 9, depending on selected \\fIstrat\\fR\\.\n+.\n+.TP\n+\\fBldmHashRateLog\\fR=\\fIlhrlog\\fR, \\fBlhrlog\\fR=\\fIlhrlog\\fR\n+Specify the frequency of inserting entries into the long distance matching hash table\\.\n+.\n+.IP\n+This option is ignored unless long distance matching is enabled\\.\n+.\n+.IP\n+Larger values will improve compression speed\\. Deviating far from the default value will likely result in a decrease in compression ratio\\.\n+.\n+.IP\n+The default value varies between 4 and 7, depending on \\fBstrategy\\fR\\.\n+.\n .TP\n \\fBldmHashLog\\fR=\\fIlhlog\\fR, \\fBlhlog\\fR=\\fIlhlog\\fR\n Specify the maximum size for a hash table used for long distance matching\\.\n+.\n .IP\n This option is ignored unless long distance matching is enabled\\.\n+.\n .IP\n Bigger hash tables usually improve compression ratio at the expense of more memory during compression and a decrease in compression speed\\.\n+.\n .IP\n-The minimum \\fIlhlog\\fR is 6 and the maximum is 30 (default: 20)\\.\n+The minimum \\fIlhlog\\fR is 6 and the maximum is 30 (default: \\fBwindowLog \\- ldmHashRateLog\\fR)\\.\n+.\n .TP\n \\fBldmMinMatch\\fR=\\fIlmml\\fR, \\fBlmml\\fR=\\fIlmml\\fR\n Specify the minimum searched length of a match for long distance matching\\.\n+.\n .IP\n This option is ignored unless long distance matching is enabled\\.\n+.\n .IP\n Larger/very small values usually decrease compression ratio\\.\n+.\n .IP\n-The minimum \\fIlmml\\fR is 4 and the maximum is 4096 (default: 64)\\.\n+The minimum \\fIlmml\\fR is 4 and the maximum is 4096 (default: 32 to 64, depending on \\fBstrategy\\fR)\\.\n+.\n .TP\n \\fBldmBucketSizeLog\\fR=\\fIlblog\\fR, \\fBlblog\\fR=\\fIlblog\\fR\n Specify the size of each bucket for the hash table used for long distance matching\\.\n+.\n .IP\n This option is ignored unless long distance matching is enabled\\.\n+.\n .IP\n Larger bucket sizes improve collision resolution but decrease compression speed\\.\n+.\n .IP\n-The minimum \\fIlblog\\fR is 1 and the maximum is 8 (default: 3)\\.\n-.TP\n-\\fBldmHashRateLog\\fR=\\fIlhrlog\\fR, \\fBlhrlog\\fR=\\fIlhrlog\\fR\n-Specify the frequency of inserting entries into the long distance matching hash table\\.\n-.IP\n-This option is ignored unless long distance matching is enabled\\.\n-.IP\n-Larger values will improve compression speed\\. Deviating far from the default value will likely result in a decrease in compression ratio\\.\n-.IP\n-The default value is \\fBwlog \\- lhlog\\fR\\.\n+The minimum \\fIlblog\\fR is 1 and the maximum is 8 (default: 4 to 8, depending on \\fBstrategy\\fR)\\.\n+.\n .SS \"Example\"\n The following parameters sets advanced compression options to something similar to predefined level 19 for files bigger than 256 KB:\n+.\n .P\n \\fB\\-\\-zstd\\fR=wlog=23,clog=23,hlog=22,slog=6,mml=3,tlen=48,strat=6\n+.\n .SS \"\\-B#:\"\n Specify the size of each compression job\\. This parameter is only available when multi\\-threading is enabled\\. Each compression job is run in parallel, so this value indirectly impacts the nb of active threads\\. Default job size varies depending on compression level (generally \\fB4 * windowSize\\fR)\\. \\fB\\-B#\\fR makes it possible to manually select a custom size\\. Note that job size must respect a minimum value which is enforced transparently\\. This minimum is either 512 KB, or \\fBoverlapSize\\fR, whichever is largest\\. Different job sizes will lead to non\\-identical compressed frames\\.\n+.\n .SH \"DICTIONARY BUILDER\"\n-\\fBzstd\\fR offers \\fIdictionary\\fR compression, which greatly improves efficiency on small files and messages\\. It's possible to train \\fBzstd\\fR with a set of samples, the result of which is saved into a file called a \\fBdictionary\\fR\\. Then, during compression and decompression, reference the same dictionary, using command \\fB\\-D dictionaryFileName\\fR\\. Compression of small files similar to the sample set will be greatly improved\\.\n+\\fBzstd\\fR offers \\fIdictionary\\fR compression, which greatly improves efficiency on small files and messages\\. It\\'s possible to train \\fBzstd\\fR with a set of samples, the result of which is saved into a file called a \\fBdictionary\\fR\\. Then, during compression and decompression, reference the same dictionary, using command \\fB\\-D dictionaryFileName\\fR\\. Compression of small files similar to the sample set will be greatly improved\\.\n+.\n .TP\n \\fB\\-\\-train FILEs\\fR\n Use FILEs as training set to create a dictionary\\. The training set should ideally contain a lot of samples (> 100), and weight typically 100x the target dictionary size (for example, ~10 MB for a 100 KB dictionary)\\. \\fB\\-\\-train\\fR can be combined with \\fB\\-r\\fR to indicate a directory rather than listing all the files, which can be useful to circumvent shell expansion limits\\.\n+.\n .IP\n Since dictionary compression is mostly effective for small files, the expectation is that the training set will only contain small files\\. In the case where some samples happen to be large, only the first 128 KiB of these samples will be used for training\\.\n+.\n .IP\n \\fB\\-\\-train\\fR supports multithreading if \\fBzstd\\fR is compiled with threading support (default)\\. Additional advanced parameters can be specified with \\fB\\-\\-train\\-fastcover\\fR\\. The legacy dictionary builder can be accessed with \\fB\\-\\-train\\-legacy\\fR\\. The slower cover dictionary builder can be accessed with \\fB\\-\\-train\\-cover\\fR\\. Default \\fB\\-\\-train\\fR is equivalent to \\fB\\-\\-train\\-fastcover=d=8,steps=4\\fR\\.\n+.\n .TP\n \\fB\\-o FILE\\fR\n Dictionary saved into \\fBFILE\\fR (default name: dictionary)\\.\n+.\n .TP\n \\fB\\-\\-maxdict=#\\fR\n-Limit dictionary to specified size (default: 112640 bytes)\\. As usual, quantities are expressed in bytes by default, and it's possible to employ suffixes (like \\fBKB\\fR or \\fBMB\\fR) to specify larger values\\.\n+Limit dictionary to specified size (default: 112640 bytes)\\. As usual, quantities are expressed in bytes by default, and it\\'s possible to employ suffixes (like \\fBKB\\fR or \\fBMB\\fR) to specify larger values\\.\n+.\n .TP\n \\fB\\-#\\fR\n Use \\fB#\\fR compression level during training (optional)\\. Will generate statistics more tuned for selected compression level, resulting in a \\fIsmall\\fR compression ratio improvement for this level\\.\n+.\n .TP\n \\fB\\-B#\\fR\n Split input files into blocks of size # (default: no split)\n+.\n .TP\n \\fB\\-M#\\fR, \\fB\\-\\-memory=#\\fR\n Limit the amount of sample data loaded for training (default: 2 GB)\\. Note that the default (2 GB) is also the maximum\\. This parameter can be useful in situations where the training set size is not well controlled and could be potentially very large\\. Since speed of the training process is directly correlated to the size of the training sample set, a smaller sample set leads to faster training\\.\n+.\n .IP\n In situations where the training set is larger than maximum memory, the CLI will randomly select samples among the available ones, up to the maximum allowed memory budget\\. This is meant to improve dictionary relevance by mitigating the potential impact of clustering, such as selecting only files from the beginning of a list sorted by modification date, or sorted by alphabetical order\\. The randomization process is deterministic, so training of the same list of files with the same parameters will lead to the creation of the same dictionary\\.\n+.\n .TP\n \\fB\\-\\-dictID=#\\fR\n-A dictionary ID is a locally unique ID\\. The decoder will use this value to verify it is using the right dictionary\\. By default, zstd will create a 4\\-bytes random number ID\\. It's possible to provide an explicit number ID instead\\. It's up to the dictionary manager to not assign twice the same ID to 2 different dictionaries\\. Note that short numbers have an advantage: an ID < 256 will only need 1 byte in the compressed frame header, and an ID < 65536 will only need 2 bytes\\. This compares favorably to 4 bytes default\\.\n+A dictionary ID is a locally unique ID\\. The decoder will use this value to verify it is using the right dictionary\\. By default, zstd will create a 4\\-bytes random number ID\\. It\\'s possible to provide an explicit number ID instead\\. It\\'s up to the dictionary manager to not assign twice the same ID to 2 different dictionaries\\. Note that short numbers have an advantage: an ID < 256 will only need 1 byte in the compressed frame header, and an ID < 65536 will only need 2 bytes\\. This compares favorably to 4 bytes default\\.\n+.\n .IP\n-Note that RFC8878 reserves IDs less than 32768 and greater than or equal to 2\\e^31, so they should not be used in public\\.\n+Note that RFC8878 reserves IDs less than 32768 and greater than or equal to 2^31, so they should not be used in public\\.\n+.\n .TP\n \\fB\\-\\-train\\-cover[=k#,d=#,steps=#,split=#,shrink[=#]]\\fR\n Select parameters for the default dictionary builder algorithm named cover\\. If \\fId\\fR is not specified, then it tries \\fId\\fR = 6 and \\fId\\fR = 8\\. If \\fIk\\fR is not specified, then it tries \\fIsteps\\fR values in the range [50, 2000]\\. If \\fIsteps\\fR is not specified, then the default value of 40 is used\\. If \\fIsplit\\fR is not specified or split <= 0, then the default value of 100 is used\\. Requires that \\fId\\fR <= \\fIk\\fR\\. If \\fIshrink\\fR flag is not used, then the default value for \\fIshrinkDict\\fR of 0 is used\\. If \\fIshrink\\fR is not specified, then the default value for \\fIshrinkDictMaxRegression\\fR of 1 is used\\.\n+.\n .IP\n Selects segments of size \\fIk\\fR with highest score to put in the dictionary\\. The score of a segment is computed by the sum of the frequencies of all the subsegments of size \\fId\\fR\\. Generally \\fId\\fR should be in the range [6, 8], occasionally up to 16, but the algorithm will run faster with d <= \\fI8\\fR\\. Good values for \\fIk\\fR vary widely based on the input data, but a safe range is [2 * \\fId\\fR, 2000]\\. If \\fIsplit\\fR is 100, all input samples are used for both training and testing to find optimal \\fId\\fR and \\fIk\\fR to build dictionary\\. Supports multithreading if \\fBzstd\\fR is compiled with threading support\\. Having \\fIshrink\\fR enabled takes a truncated dictionary of minimum size and doubles in size until compression ratio of the truncated dictionary is at most \\fIshrinkDictMaxRegression%\\fR worse than the compression ratio of the largest dictionary\\.\n+.\n .IP\n Examples:\n+.\n .IP\n \\fBzstd \\-\\-train\\-cover FILEs\\fR\n+.\n .IP\n \\fBzstd \\-\\-train\\-cover=k=50,d=8 FILEs\\fR\n+.\n .IP\n \\fBzstd \\-\\-train\\-cover=d=8,steps=500 FILEs\\fR\n+.\n .IP\n \\fBzstd \\-\\-train\\-cover=k=50 FILEs\\fR\n+.\n .IP\n \\fBzstd \\-\\-train\\-cover=k=50,split=60 FILEs\\fR\n+.\n .IP\n \\fBzstd \\-\\-train\\-cover=shrink FILEs\\fR\n+.\n .IP\n \\fBzstd \\-\\-train\\-cover=shrink=2 FILEs\\fR\n+.\n .TP\n \\fB\\-\\-train\\-fastcover[=k#,d=#,f=#,steps=#,split=#,accel=#]\\fR\n Same as cover but with extra parameters \\fIf\\fR and \\fIaccel\\fR and different default value of split If \\fIsplit\\fR is not specified, then it tries \\fIsplit\\fR = 75\\. If \\fIf\\fR is not specified, then it tries \\fIf\\fR = 20\\. Requires that 0 < \\fIf\\fR < 32\\. If \\fIaccel\\fR is not specified, then it tries \\fIaccel\\fR = 1\\. Requires that 0 < \\fIaccel\\fR <= 10\\. Requires that \\fId\\fR = 6 or \\fId\\fR = 8\\.\n+.\n .IP\n \\fIf\\fR is log of size of array that keeps track of frequency of subsegments of size \\fId\\fR\\. The subsegment is hashed to an index in the range [0,2^\\fIf\\fR \\- 1]\\. It is possible that 2 different subsegments are hashed to the same index, and they are considered as the same subsegment when computing frequency\\. Using a higher \\fIf\\fR reduces collision but takes longer\\.\n+.\n .IP\n Examples:\n+.\n .IP\n \\fBzstd \\-\\-train\\-fastcover FILEs\\fR\n+.\n .IP\n \\fBzstd \\-\\-train\\-fastcover=d=8,f=15,accel=2 FILEs\\fR\n+.\n .TP\n \\fB\\-\\-train\\-legacy[=selectivity=#]\\fR\n Use legacy dictionary builder algorithm with the given dictionary \\fIselectivity\\fR (default: 9)\\. The smaller the \\fIselectivity\\fR value, the denser the dictionary, improving its efficiency but reducing its achievable maximum size\\. \\fB\\-\\-train\\-legacy=s=#\\fR is also accepted\\.\n+.\n .IP\n Examples:\n+.\n .IP\n \\fBzstd \\-\\-train\\-legacy FILEs\\fR\n+.\n .IP\n \\fBzstd \\-\\-train\\-legacy=selectivity=8 FILEs\\fR\n+.\n .SH \"BENCHMARK\"\n-The \\fBzstd\\fR CLI provides a benchmarking mode that can be used to easily find suitable compression parameters, or alternatively to benchmark a computer's performance\\. \\fBzstd \\-b [FILE(s)]\\fR will benchmark \\fBzstd\\fR for both compression and decompression using default compression level\\. Note that results are very dependent on the content being compressed\\. It's possible to pass multiple files to the benchmark, and even a directory with \\fB\\-r DIRECTORY\\fR\\. When no \\fBFILE\\fR is provided, the benchmark will use a procedurally generated \\fBlorem ipsum\\fR text\\.\n+The \\fBzstd\\fR CLI provides a benchmarking mode that can be used to easily find suitable compression parameters, or alternatively to benchmark a computer\\'s performance\\. \\fBzstd \\-b [FILE(s)]\\fR will benchmark \\fBzstd\\fR for both compression and decompression using default compression level\\. Note that results are very dependent on the content being compressed\\.\n+.\n+.P\n+It\\'s possible to pass multiple files to the benchmark, and even a directory with \\fB\\-r DIRECTORY\\fR\\. When no \\fBFILE\\fR is provided, the benchmark will use a procedurally generated \\fBlorem ipsum\\fR text\\.\n+.\n+.P\n+Benchmarking will employ \\fBmax(1, min(4, nbCores/4))\\fR worker threads by default in order to match the behavior of the normal CLI I/O\\.\n+.\n .IP \"\\(bu\" 4\n \\fB\\-b#\\fR: benchmark file(s) using compression level #\n+.\n .IP \"\\(bu\" 4\n \\fB\\-e#\\fR: benchmark file(s) using multiple compression levels, from \\fB\\-b#\\fR to \\fB\\-e#\\fR (inclusive)\n+.\n .IP \"\\(bu\" 4\n \\fB\\-d\\fR: benchmark decompression speed only (requires providing a zstd\\-compressed content)\n+.\n .IP \"\\(bu\" 4\n \\fB\\-i#\\fR: minimum evaluation time, in seconds (default: 3s), benchmark mode only\n+.\n .IP \"\\(bu\" 4\n \\fB\\-B#\\fR, \\fB\\-\\-block\\-size=#\\fR: cut file(s) into independent chunks of size # (default: no chunking)\n+.\n .IP \"\\(bu\" 4\n \\fB\\-S\\fR: output one benchmark result per input file (default: consolidated result)\n+.\n .IP \"\\(bu\" 4\n \\fB\\-D dictionary\\fR benchmark using dictionary\n+.\n .IP \"\\(bu\" 4\n \\fB\\-\\-priority=rt\\fR: set process priority to real\\-time (Windows)\n+.\n .IP \"\" 0\n+.\n .P\n Beyond compression levels, benchmarking is also compatible with other parameters, such as number of threads (\\fB\\-T#\\fR), advanced compression parameters (\\fB\\-\\-zstd=###\\fR), dictionary compression (\\fB\\-D dictionary\\fR), or even disabling checksum verification for example\\.\n+.\n .P\n \\fBOutput Format:\\fR CompressionLevel#Filename: InputSize \\-> OutputSize (CompressionRatio), CompressionSpeed, DecompressionSpeed\n+.\n .P\n \\fBMethodology:\\fR For speed measurement, the entire input is compressed/decompressed in\\-memory to measure speed\\. A run lasts at least 1 sec, so when files are small, they are compressed/decompressed several times per run, in order to improve measurement accuracy\\.\n+.\n .SH \"SEE ALSO\"\n \\fBzstdgrep\\fR(1), \\fBzstdless\\fR(1), \\fBgzip\\fR(1), \\fBxz\\fR(1)\n+.\n .P\n-The \\fIzstandard\\fR format is specified in Y\\. Collet, \"Zstandard Compression and the 'application/zstd' Media Type\", https://www\\.ietf\\.org/rfc/rfc8878\\.txt, Internet RFC 8878 (February 2021)\\.\n+The \\fIzstandard\\fR format is specified in Y\\. Collet, \"Zstandard Compression and the \\'application/zstd\\' Media Type\", https://www\\.ietf\\.org/rfc/rfc8878\\.txt, Internet RFC 8878 (February 2021)\\.\n+.\n .SH \"BUGS\"\n Report bugs at: https://github\\.com/facebook/zstd/issues\n+.\n .SH \"AUTHOR\"\n Yann Collet\n--- a/programs/zstdgrep.1\n+++ b/programs/zstdgrep.1\n@@ -1,5 +1,5 @@\n .\n-.TH \"ZSTDGREP\" \"1\" \"March 2024\" \"zstd 1.5.6\" \"User Commands\"\n+.TH \"ZSTDGREP\" \"1\" \"February 2025\" \"zstd 1.5.7\" \"User Commands\"\n .\n .SH \"NAME\"\n \\fBzstdgrep\\fR \\- print lines matching a pattern in zstandard\\-compressed files\n--- a/programs/zstdless.1\n+++ b/programs/zstdless.1\n@@ -1,5 +1,5 @@\n .\n-.TH \"ZSTDLESS\" \"1\" \"March 2024\" \"zstd 1.5.6\" \"User Commands\"\n+.TH \"ZSTDLESS\" \"1\" \"February 2025\" \"zstd 1.5.7\" \"User Commands\"\n .\n .SH \"NAME\"\n \\fBzstdless\\fR \\- view zstandard\\-compressed files\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/facebook/zstd/archive/v1.5.7.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "b4d156213f7275fa3307c7567264ccb992c242642e7531492244abd1a1bb4b8e"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://facebook.github.io/zstd/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "5l5wsn4qxkw90h6sxxz43gbnar7w5x8s-fontconfig-2.17.1-lib",
      "name": "fontconfig",
      "version": "2.17.1",
      "description": "Library for font customization and configuration",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-2-Clause"
          }
        }
      ],
      "purl": "pkg:nix/fontconfig@2.17.1",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://gitlab.freedesktop.org/api/v4/projects/890/packages/generic/fontconfig/2.17.1/fontconfig-2.17.1.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "9f5cae93f4fffc1fbc05ae99cdfc708cd60dfd6612ffc0512827025c026fa541"
            }
          ]
        },
        {
          "type": "website",
          "url": "http://fontconfig.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "5p0in9g3yw91h0if38ixsw5gq3frj92b-python3.13-babel-2.17.0-dist",
      "name": "babel",
      "version": "2.17.0",
      "description": "Collection of internationalizing tools",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/babel@2.17.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/b/babel/babel-2.17.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://babel.pocoo.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "5pb7ssvz54sg23ah8f1s0psvg1di3lr3-python3.13-setuptools-80.9.0-dist",
      "name": "setuptools",
      "version": "80.9.0",
      "description": "Utilities to facilitate the installation of Python packages",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/setuptools@80.9.0",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/setup.cfg b/setup.cfg\nindex 38922089a..a743a2467 100644\n--- a/setup.cfg\n+++ b/setup.cfg\n@@ -1,3 +1,3 @@\n [egg_info]\n tag_build = .post\n-tag_date = 1\n+tag_date = 0\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/pypa/setuptools/archive/refs/tags/v80.9.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "c2e79542c5748dafe23c544aece295dbb150ee160a17c70fdd61f9c097885e72"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/pypa/setuptools"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "5xkvb4nim9zclvnxrhqaz7ds8qgwjd0y-python3.13-filelock-3.20.0-dist",
      "name": "filelock",
      "version": "3.20.0",
      "description": "Platform independent file lock for Python",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "Unlicense"
          }
        }
      ],
      "purl": "pkg:nix/filelock@3.20.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/f/filelock/filelock-3.20.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "711e943b4ec6be42e1d4e6690b48dc175c822967466bb31c0c293f34334c13f4"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/benediktschmitt/py-filelock"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "60jfr6wg7rjam0a0l4xc8xgh9k07fyz6-python3.13-wheel-0.46.1-dist",
      "name": "wheel",
      "version": "0.46.1",
      "description": "Built-package format for Python",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/wheel@0.46.1",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/pypa/wheel/archive/refs/tags/0.46.1.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "8b219f1abde92d56521081deb63b0f6c821792e5eb9883e24aaa8ec37d65f50c"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/pypa/wheel"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "61i74yjkj9p1qphfl7018ja4sdwkipx0-openssl-3.6.0",
      "name": "openssl",
      "version": "3.6.0",
      "description": "Cryptographic library that implements the SSL and TLS protocols",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "Apache-2.0"
          }
        }
      ],
      "purl": "pkg:nix/openssl@3.6.0",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/crypto/x509/by_file.c b/crypto/x509/by_file.c\nindex 37d73ca84c..e328896234 100644\n--- a/crypto/x509/by_file.c\n+++ b/crypto/x509/by_file.c\n@@ -54,7 +54,9 @@ static int by_file_ctrl_ex(X509_LOOKUP *ctx, int cmd, const char *argp,\n     switch (cmd) {\n     case X509_L_FILE_LOAD:\n         if (argl == X509_FILETYPE_DEFAULT) {\n-            file = ossl_safe_getenv(X509_get_default_cert_file_env());\n+            file = ossl_safe_getenv(\"NIX_SSL_CERT_FILE\");\n+            if (!file)\n+                file = ossl_safe_getenv(X509_get_default_cert_file_env());\n             if (file)\n                 ok = (X509_load_cert_crl_file_ex(ctx, file, X509_FILETYPE_PEM,\n                                                  libctx, propq) != 0);\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/Configure b/Configure\nindex a558e5ab1a..9a884f0b0f 100755\n--- a/Configure\n+++ b/Configure\n@@ -1714,20 +1714,6 @@ unless ($disabled{devcryptoeng}) {\n \n unless ($disabled{ktls}) {\n     $config{ktls}=\"\";\n-    my $cc = $config{CROSS_COMPILE}.$config{CC};\n-    if ($target =~ m/^linux/) {\n-        system(\"printf '#include <sys/types.h>\\n#include <linux/tls.h>' | $cc -E - >/dev/null 2>&1\");\n-        if ($? != 0) {\n-            disable('too-old-kernel', 'ktls');\n-        }\n-    } elsif ($target =~ m/^BSD/) {\n-        system(\"printf '#include <sys/types.h>\\n#include <sys/ktls.h>' | $cc -E - >/dev/null 2>&1\");\n-        if ($? != 0) {\n-            disable('too-old-freebsd', 'ktls');\n-        }\n-    } else {\n-        disable('not-linux-or-freebsd', 'ktls');\n-    }\n }\n \n push @{$config{openssl_other_defines}}, \"OPENSSL_NO_KTLS\" if ($disabled{ktls});\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/include/internal/common.h b/include/internal/common.h\nindex 15666f1..d91e25b 100644\n--- a/include/internal/common.h\n+++ b/include/internal/common.h\n@@ -83,7 +83,7 @@ __owur static ossl_inline int ossl_assert_int(int expr, const char *exprstr,\n # ifndef OPENSSL_SYS_VMS\n #  define X509_CERT_AREA          OPENSSLDIR\n #  define X509_CERT_DIR           OPENSSLDIR \"/certs\"\n-#  define X509_CERT_FILE          OPENSSLDIR \"/cert.pem\"\n+#  define X509_CERT_FILE          \"/etc/ssl/certs/ca-certificates.crt\"\n #  define X509_PRIVATE_DIR        OPENSSLDIR \"/private\"\n #  define CTLOG_FILE              OPENSSLDIR \"/ct_log_list.cnf\"\n # else\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/openssl/openssl/releases/download/openssl-3.6.0/openssl-3.6.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "b6a5f44b7eb69e3fa35dbf15524405b44837a481d43d81daddde3ff21fcbb8e9"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.openssl.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "631psvvfhdhsw5z9s3qj9m00nd6c2lbr-nss-cacert-3.115-unbundled",
      "name": "nss-cacert",
      "version": "3.115",
      "description": "Bundle of X.509 certificates of public Certificate Authorities (CA)",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MPL-2.0"
          }
        }
      ],
      "purl": "pkg:nix/nss-cacert@3.115",
      "externalReferences": [
        {
          "type": "website",
          "url": "https://curl.haxx.se/docs/caextract.html"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "64q3424klqaq5bq409nrmjmiyrs04k2a-json-c-0.18",
      "name": "json-c",
      "version": "0.18",
      "description": "JSON implementation in C",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/json-c@0.18",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/json-c/json-c/archive/json-c-0.18-20240915.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "532317afc55cea40cec75fe50f660a3e21dd693a2d5c017d6a4d3242ec2b4940"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/json-c/json-c/wiki"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "64rrdphwm91r90l4dzqrp7fpna0jjb1i-libgcrypt-1.11.2-dev",
      "name": "libgcrypt",
      "version": "1.11.2",
      "description": "General-purpose cryptographic library",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "LGPL-2.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/libgcrypt@1.11.2",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://gnupg/libgcrypt/libgcrypt-1.11.2.tar.bz2",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "6ba59dd192270e8c1d22ddb41a07d95dcdbc1f0fb02d03c4b54b235814330aac"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/libgcrypt/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "6arq9kyipiqn1azwh1fgrr5adia7sp9q-binutils-2.44-info",
      "name": "binutils",
      "version": "2.44",
      "description": "Tools for manipulating binaries (linker, assembler, etc.)",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/binutils@2.44",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff -ur orig/binutils-2.23.1/ld/ldlang.c binutils-2.23.1/ld/ldlang.c\n--- orig/ld/ldlang.c\n+++ new/ld/ldlang.c\n@@ -3095,6 +3095,8 @@\n                           ldfile_output_machine))\n     einfo (_(\"%P%F:%s: can not set architecture: %E\\n\"), name);\n \n+  link_info.output_bfd->flags |= BFD_DETERMINISTIC_OUTPUT;\n+\n   link_info.hash = bfd_link_hash_table_create (link_info.output_bfd);\n   if (link_info.hash == NULL)\n     einfo (_(\"%P%F: can not create hash table: %E\\n\"));\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "This reverts upstream commit caf606c90d55305967b9253447dda93d2f1835ab\nuntil https://sourceware.org/PR29547 is fixed.\n\n--- a/libtool.m4\n+++ b/libtool.m4\n@@ -3214,31 +3214,25 @@ AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,\n      lt_nm_to_check=\"$lt_nm_to_check nm\"\n    fi\n  fi\n- for lt_tmp_nm in \"$lt_nm_to_check\"; do\n+ for lt_tmp_nm in $lt_nm_to_check; do\n    lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do\n      IFS=\"$lt_save_ifs\"\n      test -z \"$ac_dir\" && ac_dir=.\n-     # Strip out any user-provided options from the nm to test twice,\n-     # the first time to test to see if nm (rather than its options) has\n-     # an explicit path, the second time to yield a file which can be\n-     # nm'ed itself.\n-     tmp_nm_path=\"`$ECHO \"$lt_tmp_nm\" | sed 's, -.*$,,'`\"\n-     case \"$tmp_nm_path\" in\n+     case \"$lt_tmp_nm\" in\n      */*|*\\\\*) tmp_nm=\"$lt_tmp_nm\";;\n      *) tmp_nm=\"$ac_dir/$lt_tmp_nm\";;\n      esac\n-     tmp_nm_to_nm=\"`$ECHO \"$tmp_nm\" | sed 's, -.*$,,'`\"\n-     if test -f \"$tmp_nm_to_nm\" || test -f \"$tmp_nm_to_nm$ac_exeext\" ; then\n+     if test -f \"$tmp_nm\" || test -f \"$tmp_nm$ac_exeext\" ; then\n        # Check to see if the nm accepts a BSD-compat flag.\n        # Adding the `sed 1q' prevents false positives on HP-UX, which says:\n        #   nm: unknown option \"B\" ignored\n-       case `\"$tmp_nm\" -B \"$tmp_nm_to_nm\" 2>&1 | grep -v '^ *$' | sed '1q'` in\n+       case `\"$tmp_nm\" -B \"$tmp_nm\" 2>&1 | grep -v '^ *$' | sed '1q'` in\n        *$tmp_nm*) lt_cv_path_NM=\"$tmp_nm -B\"\n \t break\n \t ;;\n        *)\n-\t case `\"$tmp_nm\" -p \"$tmp_nm_to_nm\" 2>&1 | grep -v '^ *$' | sed '1q'` in\n+\t case `\"$tmp_nm\" -p \"$tmp_nm\" 2>&1 | grep -v '^ *$' | sed '1q'` in\n \t *$tmp_nm*)\n \t   lt_cv_path_NM=\"$tmp_nm -p\"\n \t   break\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From beca4a2c25ee86e4020f8b8bddc4d8e0ed3430b3 Mon Sep 17 00:00:00 2001\nFrom: Andrew Childs <andrew.childs@bibo.com.ph>\nDate: Tue, 22 Feb 2022 11:28:04 +0900\nSubject: [PATCH] Revert \"libtool.m4: fix nm BSD flag detection\"\n\nThis reverts commit bef9ef8ca0f941d743c77cc55b5fe7985990b2a7.\n---\n ChangeLog  |  9 ------\n libtool.m4 | 88 ++++++++++++++++++++++++++----------------------------\n 2 files changed, 43 insertions(+), 54 deletions(-)\n\ndiff --git a/ChangeLog b/ChangeLog\nindex 18e8b6835da..c12f07403c3 100644\n--- a/ChangeLog\n+++ b/ChangeLog\n@@ -375,15 +375,6 @@\n \n \t* src-release.sh (GDB_SUPPPORT_DIRS): Add libbacktrace.\n \n-2021-09-27  Nick Alcock  <nick.alcock@oracle.com>\n-\n-\tPR libctf/27967\n-\t* libtool.m4 (LT_PATH_NM): Try BSDization flags with a user-provided\n-\tNM, if there is one.  Run nm on itself, not on /dev/null, to avoid\n-\terrors from nms that refuse to work on non-regular files.  Remove\n-\tother workarounds for this problem.  Strip out blank lines from the\n-\tnm output.\n-\n 2021-09-27  Nick Alcock  <nick.alcock@oracle.com>\n \n \tPR libctf/27967\ndiff --git a/libtool.m4 b/libtool.m4\nindex a216bb14e99..7a711249304 100644\n--- a/libtool.m4\n+++ b/libtool.m4\n@@ -3200,55 +3200,53 @@ _LT_DECL([], [file_magic_cmd], [1],\n \n # LT_PATH_NM\n # ----------\n-# find the pathname to a BSD- or MS-compatible name lister, and any flags\n-# needed to make it compatible\n+# find the pathname to a BSD- or MS-compatible name lister\n AC_DEFUN([LT_PATH_NM],\n [AC_REQUIRE([AC_PROG_CC])dnl\n AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,\n [if test -n \"$NM\"; then\n-   # Let the user override the nm to test.\n-   lt_nm_to_check=\"$NM\"\n- else\n-   lt_nm_to_check=\"${ac_tool_prefix}nm\"\n-   if test -n \"$ac_tool_prefix\" && test \"$build\" = \"$host\"; then\n-     lt_nm_to_check=\"$lt_nm_to_check nm\"\n-   fi\n- fi\n- for lt_tmp_nm in $lt_nm_to_check; do\n-   lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n-   for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do\n-     IFS=\"$lt_save_ifs\"\n-     test -z \"$ac_dir\" && ac_dir=.\n-     case \"$lt_tmp_nm\" in\n-     */*|*\\\\*) tmp_nm=\"$lt_tmp_nm\";;\n-     *) tmp_nm=\"$ac_dir/$lt_tmp_nm\";;\n-     esac\n-     if test -f \"$tmp_nm\" || test -f \"$tmp_nm$ac_exeext\" ; then\n-       # Check to see if the nm accepts a BSD-compat flag.\n-       # Adding the `sed 1q' prevents false positives on HP-UX, which says:\n-       #   nm: unknown option \"B\" ignored\n-       case `\"$tmp_nm\" -B \"$tmp_nm\" 2>&1 | grep -v '^ *$' | sed '1q'` in\n-       *$tmp_nm*) lt_cv_path_NM=\"$tmp_nm -B\"\n-\t break\n-\t ;;\n-       *)\n-\t case `\"$tmp_nm\" -p \"$tmp_nm\" 2>&1 | grep -v '^ *$' | sed '1q'` in\n-\t *$tmp_nm*)\n-\t   lt_cv_path_NM=\"$tmp_nm -p\"\n-\t   break\n-\t   ;;\n-\t *)\n-\t   lt_cv_path_NM=${lt_cv_path_NM=\"$tmp_nm\"} # keep the first match, but\n-\t   continue # so that we can try to find one that supports BSD flags\n-\t   ;;\n-\t esac\n-\t ;;\n-       esac\n-     fi\n-   done\n-   IFS=\"$lt_save_ifs\"\n- done\n- : ${lt_cv_path_NM=no}])\n+  # Let the user override the test.\n+  lt_cv_path_NM=\"$NM\"\n+else\n+  lt_nm_to_check=\"${ac_tool_prefix}nm\"\n+  if test -n \"$ac_tool_prefix\" && test \"$build\" = \"$host\"; then\n+    lt_nm_to_check=\"$lt_nm_to_check nm\"\n+  fi\n+  for lt_tmp_nm in $lt_nm_to_check; do\n+    lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do\n+      IFS=\"$lt_save_ifs\"\n+      test -z \"$ac_dir\" && ac_dir=.\n+      tmp_nm=\"$ac_dir/$lt_tmp_nm\"\n+      if test -f \"$tmp_nm\" || test -f \"$tmp_nm$ac_exeext\" ; then\n+\t# Check to see if the nm accepts a BSD-compat flag.\n+\t# Adding the `sed 1q' prevents false positives on HP-UX, which says:\n+\t#   nm: unknown option \"B\" ignored\n+\t# Tru64's nm complains that /dev/null is an invalid object file\n+\tcase `\"$tmp_nm\" -B /dev/null 2>&1 | sed '1q'` in\n+\t*/dev/null* | *'Invalid file or object type'*)\n+\t  lt_cv_path_NM=\"$tmp_nm -B\"\n+\t  break\n+\t  ;;\n+\t*)\n+\t  case `\"$tmp_nm\" -p /dev/null 2>&1 | sed '1q'` in\n+\t  */dev/null*)\n+\t    lt_cv_path_NM=\"$tmp_nm -p\"\n+\t    break\n+\t    ;;\n+\t  *)\n+\t    lt_cv_path_NM=${lt_cv_path_NM=\"$tmp_nm\"} # keep the first match, but\n+\t    continue # so that we can try to find one that supports BSD flags\n+\t    ;;\n+\t  esac\n+\t  ;;\n+\tesac\n+      fi\n+    done\n+    IFS=\"$lt_save_ifs\"\n+  done\n+  : ${lt_cv_path_NM=no}\n+fi])\n if test \"$lt_cv_path_NM\" != \"no\"; then\n   NM=\"$lt_cv_path_NM\"\n else\n-- \n2.34.1\n\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/ld/genscripts.sh b/ld/genscripts.sh\nindex b6940d376d..0feb1adfd0 100755\n--- a/ld/genscripts.sh\n+++ b/ld/genscripts.sh\n@@ -125,6 +125,9 @@ if test \"x$NATIVE\" = \"xyes\" ; then\n   USE_LIBPATH=yes\n fi\n \n+# TODO: why is this needed?\n+USE_LIBPATH=yes\n+\n # Set the library search path, for libraries named by -lfoo.\n # If LIB_PATH is defined (e.g., by Makefile) and non-empty, it is used.\n # Otherwise, the default is set here.\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "Avoid `lib -> out -> lib` reference. Normally `bfd-plugins` does not\nneed to know binutils' BINDIR at all. It's an absolute path where\nlibraries are stored.\n--- a/bfd/plugin.c\n+++ b/bfd/plugin.c\n@@ -493,7 +493,7 @@ build_plugin_list (bfd *abfd)\n      when configuring binutils using --libdir.  Search in the proper\n      path first, then the old one for backwards compatibility.  */\n   static const char *path[]\n-    = { LIBDIR \"/bfd-plugins\", BINDIR \"/../lib/bfd-plugins\" };\n+    = { LIBDIR \"/bfd-plugins\", };\n   struct stat last_st;\n   unsigned int i;\n \n@@ -508,9 +508,7 @@ build_plugin_list (bfd *abfd)\n   last_st.st_ino = 0;\n   for (i = 0; i < sizeof (path) / sizeof (path[0]); i++)\n     {\n-      char *plugin_dir = make_relative_prefix (plugin_program_name,\n-\t\t\t\t\t       BINDIR,\n-\t\t\t\t\t       path[i]);\n+      char *plugin_dir = xstrdup (path[i]);\n       if (plugin_dir)\n \t{\n \t  struct stat st;\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 368f26bfece3899a8c992cfec66427266918ab80 Mon Sep 17 00:00:00 2001\nFrom: Randy Eckenrode <randy@largeandhighquality.com>\nDate: Thu, 4 Jul 2024 12:20:34 -0400\nSubject: [PATCH] libtool.m4: update macos version detection block\n\n---\n libtool.m4 | 1 +\n 1 file changed, 1 insertion(+)\n\ndiff --git a/libtool.m4 b/libtool.m4\nindex e36fdd3c0e2..dd4725f8cd1 100644\n--- a/libtool.m4\n+++ b/libtool.m4\n@@ -1011,6 +1011,7 @@ _LT_EOF\n \t  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'\n \t  ;;\n \t*)\n+\t  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}dynamic_lookup'\n \t  ;;\n      esac\n     ;;\n-- \n2.45.1\n\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/binutils/size.c b/binutils/size.c\nindex 3697087714..f99d45a6bf 100644\n--- a/binutils/size.c\n+++ b/binutils/size.c\n@@ -51,7 +51,8 @@ enum output_format\n   {\n    FORMAT_BERKLEY,\n    FORMAT_SYSV,\n-   FORMAT_GNU\n+   FORMAT_GNU,\n+   FORMAT_AVR\n   };\n static enum output_format selected_output_format =\n #if BSD_DEFAULT\n@@ -74,6 +75,246 @@ static bfd_size_type total_textsize;\n /* Program exit status.  */\n static int return_code = 0;\n \n+\n+/* AVR Size specific stuff */\n+\n+#define AVR64 64UL\n+#define AVR128 128UL\n+#define AVR256 256UL\n+#define AVR512 512UL\n+#define AVR1K 1024UL\n+#define AVR2K 2048UL\n+#define AVR4K 4096UL\n+#define AVR8K 8192UL\n+#define AVR16K 16384UL\n+#define AVR20K 20480UL\n+#define AVR24K 24576UL\n+#define AVR32K 32768UL\n+#define AVR36K 36864UL\n+#define AVR40K 40960UL\n+#define AVR64K 65536UL\n+#define AVR68K 69632UL\n+#define AVR128K 131072UL\n+#define AVR136K 139264UL\n+#define AVR200K 204800UL\n+#define AVR256K 262144UL\n+#define AVR264K 270336UL\n+\n+typedef struct\n+{\n+    char *name;\n+\tlong flash;\n+\tlong ram;\n+\tlong eeprom;\n+} avr_device_t;\n+\n+avr_device_t avr[] =\n+{\n+\t{\"atxmega256a3\",  AVR264K, AVR16K, AVR4K},\n+\t{\"atxmega256a3b\", AVR264K, AVR16K, AVR4K},\n+\t{\"atxmega256d3\",  AVR264K, AVR16K, AVR4K},\n+\n+\t{\"atmega2560\",    AVR256K, AVR8K,  AVR4K},\n+\t{\"atmega2561\",    AVR256K, AVR8K,  AVR4K},\n+\n+\t{\"atxmega192a3\",  AVR200K, AVR16K, AVR2K},\n+\t{\"atxmega192d3\",  AVR200K, AVR16K, AVR2K},\n+\n+\t{\"atxmega128a1\",  AVR136K, AVR8K,  AVR2K},\n+\t{\"atxmega128a1u\", AVR136K, AVR8K,  AVR2K},\n+\t{\"atxmega128a3\",  AVR136K, AVR8K,  AVR2K},\n+\t{\"atxmega128d3\",  AVR136K, AVR8K,  AVR2K},\n+\n+\t{\"at43usb320\",    AVR128K, 608UL,  0UL},\n+\t{\"at90can128\",    AVR128K, AVR4K,  AVR4K},\n+\t{\"at90usb1286\",   AVR128K, AVR8K,  AVR4K},\n+\t{\"at90usb1287\",   AVR128K, AVR8K,  AVR4K},\n+\t{\"atmega128\",     AVR128K, AVR4K,  AVR4K},\n+\t{\"atmega1280\",    AVR128K, AVR8K,  AVR4K},\n+\t{\"atmega1281\",    AVR128K, AVR8K,  AVR4K},\n+\t{\"atmega1284p\",   AVR128K, AVR16K, AVR4K},\n+\t{\"atmega128rfa1\", AVR128K, AVR16K, AVR4K},\n+\t{\"atmega103\",     AVR128K, 4000UL, AVR4K},\n+\n+\t{\"atxmega64a1\",   AVR68K,  AVR4K,  AVR2K},\n+\t{\"atxmega64a1u\",  AVR68K,  AVR4K,  AVR2K},\n+\t{\"atxmega64a3\",   AVR68K,  AVR4K,  AVR2K},\n+\t{\"atxmega64d3\",   AVR68K,  AVR4K,  AVR2K},\n+\n+\t{\"at90can64\",     AVR64K,  AVR4K,  AVR2K},\n+\t{\"at90scr100\",    AVR64K,  AVR4K,  AVR2K},\n+\t{\"at90usb646\",    AVR64K,  AVR4K,  AVR2K},\n+\t{\"at90usb647\",    AVR64K,  AVR4K,  AVR2K},\n+\t{\"atmega64\",      AVR64K,  AVR4K,  AVR2K},\n+\t{\"atmega640\",     AVR64K,  AVR8K,  AVR4K},\n+\t{\"atmega644\",     AVR64K,  AVR4K,  AVR2K},\n+\t{\"atmega644a\",    AVR64K,  AVR4K,  AVR2K},\n+\t{\"atmega644p\",    AVR64K,  AVR4K,  AVR2K},\n+\t{\"atmega644pa\",   AVR64K,  AVR4K,  AVR2K},\n+\t{\"atmega645\",     AVR64K,  AVR4K,  AVR2K},\n+\t{\"atmega645a\",    AVR64K,  AVR4K,  AVR2K},\n+\t{\"atmega645p\",    AVR64K,  AVR4K,  AVR2K},\n+\t{\"atmega6450\",    AVR64K,  AVR4K,  AVR2K},\n+\t{\"atmega6450a\",   AVR64K,  AVR4K,  AVR2K},\n+\t{\"atmega6450p\",   AVR64K,  AVR4K,  AVR2K},\n+\t{\"atmega649\",     AVR64K,  AVR4K,  AVR2K},\n+\t{\"atmega649a\",    AVR64K,  AVR4K,  AVR2K},\n+\t{\"atmega649p\",    AVR64K,  AVR4K,  AVR2K},\n+\t{\"atmega6490\",    AVR64K,  AVR4K,  AVR2K},\n+\t{\"atmega6490a\",   AVR64K,  AVR4K,  AVR2K},\n+\t{\"atmega6490p\",   AVR64K,  AVR4K,  AVR2K},\n+\t{\"atmega64c1\",    AVR64K,  AVR4K,  AVR2K},\n+\t{\"atmega64hve\",   AVR64K,  AVR4K,  AVR1K},\n+\t{\"atmega64m1\",    AVR64K,  AVR4K,  AVR2K},\n+\t{\"m3000\",         AVR64K,  AVR4K,  0UL},\n+\n+\t{\"atmega406\",     AVR40K,  AVR2K,  AVR512},\n+\n+\t{\"atxmega32a4\",   AVR36K,  AVR4K,  AVR1K},\n+\t{\"atxmega32d4\",   AVR36K,  AVR4K,  AVR1K},\n+\n+\t{\"at90can32\",     AVR32K,  AVR2K,  AVR1K},\n+\t{\"at94k\",         AVR32K,  AVR4K,  0UL},\n+\t{\"atmega32\",      AVR32K,  AVR2K,  AVR1K},\n+\t{\"atmega323\",     AVR32K,  AVR2K,  AVR1K},\n+\t{\"atmega324a\",    AVR32K,  AVR2K,  AVR1K},\n+\t{\"atmega324p\",    AVR32K,  AVR2K,  AVR1K},\n+\t{\"atmega324pa\",   AVR32K,  AVR2K,  AVR1K},\n+\t{\"atmega325\",     AVR32K,  AVR2K,  AVR1K},\n+\t{\"atmega325a\",    AVR32K,  AVR2K,  AVR1K},\n+\t{\"atmega325p\",    AVR32K,  AVR2K,  AVR1K},\n+\t{\"atmega3250\",    AVR32K,  AVR2K,  AVR1K},\n+\t{\"atmega3250a\",   AVR32K,  AVR2K,  AVR1K},\n+\t{\"atmega3250p\",   AVR32K,  AVR2K,  AVR1K},\n+\t{\"atmega328\",     AVR32K,  AVR2K,  AVR1K},\n+\t{\"atmega328p\",    AVR32K,  AVR2K,  AVR1K},\n+\t{\"atmega329\",     AVR32K,  AVR2K,  AVR1K},\n+\t{\"atmega329a\",    AVR32K,  AVR2K,  AVR1K},\n+\t{\"atmega329p\",    AVR32K,  AVR2K,  AVR1K},\n+\t{\"atmega329pa\",   AVR32K,  AVR2K,  AVR1K},\n+\t{\"atmega3290\",    AVR32K,  AVR2K,  AVR1K},\n+\t{\"atmega3290a\",   AVR32K,  AVR2K,  AVR1K},\n+\t{\"atmega3290p\",   AVR32K,  AVR2K,  AVR1K},\n+\t{\"atmega32hvb\",   AVR32K,  AVR2K,  AVR1K},\n+\t{\"atmega32c1\",    AVR32K,  AVR2K,  AVR1K},\n+\t{\"atmega32hvb\",   AVR32K,  AVR2K,  AVR1K},\n+\t{\"atmega32m1\",    AVR32K,  AVR2K,  AVR1K},\n+\t{\"atmega32u2\",    AVR32K,  AVR1K,  AVR1K},\n+\t{\"atmega32u4\",    AVR32K,  2560UL, AVR1K},\n+\t{\"atmega32u6\",    AVR32K,  2560UL, AVR1K},\n+\n+\t{\"at43usb355\",    AVR24K,  1120UL,   0UL},\n+\n+\t{\"atxmega16a4\",   AVR20K,  AVR2K,  AVR1K},\n+\t{\"atxmega16d4\",   AVR20K,  AVR2K,  AVR1K},\n+\n+\t{\"at76c711\",      AVR16K,  AVR2K,  0UL},\n+\t{\"at90pwm216\",    AVR16K,  AVR1K,  AVR512},\n+\t{\"at90pwm316\",    AVR16K,  AVR1K,  AVR512},\n+\t{\"at90usb162\",    AVR16K,  AVR512, AVR512},\n+\t{\"atmega16\",      AVR16K,  AVR1K,  AVR512},\n+\t{\"atmega16a\",     AVR16K,  AVR1K,  AVR512},\n+\t{\"atmega161\",     AVR16K,  AVR1K,  AVR512},\n+\t{\"atmega162\",     AVR16K,  AVR1K,  AVR512},\n+\t{\"atmega163\",     AVR16K,  AVR1K,  AVR512},\n+\t{\"atmega164\",     AVR16K,  AVR1K,  AVR512},\n+\t{\"atmega164a\",    AVR16K,  AVR1K,  AVR512},\n+\t{\"atmega164p\",    AVR16K,  AVR1K,  AVR512},\n+\t{\"atmega165a\",    AVR16K,  AVR1K,  AVR512},\n+\t{\"atmega165\",     AVR16K,  AVR1K,  AVR512},\n+\t{\"atmega165p\",    AVR16K,  AVR1K,  AVR512},\n+\t{\"atmega168\",     AVR16K,  AVR1K,  AVR512},\n+\t{\"atmega168a\",    AVR16K,  AVR1K,  AVR512},\n+\t{\"atmega168p\",    AVR16K,  AVR1K,  AVR512},\n+\t{\"atmega169\",     AVR16K,  AVR1K,  AVR512},\n+\t{\"atmega169a\",    AVR16K,  AVR1K,  AVR512},\n+\t{\"atmega169p\",    AVR16K,  AVR1K,  AVR512},\n+\t{\"atmega169pa\",   AVR16K,  AVR1K,  AVR512},\n+\t{\"atmega16hva\",   AVR16K,  768UL,  AVR256},\n+\t{\"atmega16hva2\",  AVR16K,  AVR1K,  AVR256},\n+\t{\"atmega16hvb\",   AVR16K,  AVR1K,  AVR512},\n+\t{\"atmega16m1\",    AVR16K,  AVR1K,  AVR512},\n+\t{\"atmega16u2\",    AVR16K,  AVR512, AVR512},\n+\t{\"atmega16u4\",    AVR16K,  1280UL, AVR512},\n+\t{\"attiny167\",     AVR16K,  AVR512, AVR512},\n+\n+\t{\"at90c8534\",     AVR8K,   352UL,  AVR512},\n+\t{\"at90pwm1\",      AVR8K,   AVR512, AVR512},\n+\t{\"at90pwm2\",      AVR8K,   AVR512, AVR512},\n+\t{\"at90pwm2b\",     AVR8K,   AVR512, AVR512},\n+\t{\"at90pwm3\",      AVR8K,   AVR512, AVR512},\n+\t{\"at90pwm3b\",     AVR8K,   AVR512, AVR512},\n+\t{\"at90pwm81\",     AVR8K,   AVR256, AVR512},\n+\t{\"at90s8515\",     AVR8K,   AVR512, AVR512},\n+\t{\"at90s8535\",     AVR8K,   AVR512, AVR512},\n+\t{\"at90usb82\",     AVR8K,   AVR512, AVR512},\n+\t{\"ata6289\",       AVR8K,   AVR512, 320UL},\n+\t{\"atmega8\",       AVR8K,   AVR1K,  AVR512},\n+\t{\"atmega8515\",    AVR8K,   AVR512, AVR512},\n+\t{\"atmega8535\",    AVR8K,   AVR512, AVR512},\n+\t{\"atmega88\",      AVR8K,   AVR1K,  AVR512},\n+\t{\"atmega88a\",     AVR8K,   AVR1K,  AVR512},\n+\t{\"atmega88p\",     AVR8K,   AVR1K,  AVR512},\n+\t{\"atmega88pa\",    AVR8K,   AVR1K,  AVR512},\n+\t{\"atmega8hva\",    AVR8K,   768UL,  AVR256},\n+\t{\"atmega8u2\",     AVR8K,   AVR512, AVR512},\n+\t{\"attiny84\",      AVR8K,   AVR512, AVR512},\n+\t{\"attiny84a\",     AVR8K,   AVR512, AVR512},\n+\t{\"attiny85\",      AVR8K,   AVR512, AVR512},\n+\t{\"attiny861\",     AVR8K,   AVR512, AVR512},\n+\t{\"attiny861a\",    AVR8K,   AVR512, AVR512},\n+\t{\"attiny87\",      AVR8K,   AVR512, AVR512},\n+\t{\"attiny88\",      AVR8K,   AVR512, AVR64},\n+\n+\t{\"at90s4414\",     AVR4K,   352UL,  AVR256},\n+\t{\"at90s4433\",     AVR4K,   AVR128, AVR256},\n+\t{\"at90s4434\",     AVR4K,   352UL,  AVR256},\n+\t{\"atmega48\",      AVR4K,   AVR512, AVR256},\n+\t{\"atmega48a\",     AVR4K,   AVR512, AVR256},\n+\t{\"atmega48p\",     AVR4K,   AVR512, AVR256},\n+\t{\"attiny4313\",    AVR4K,   AVR256, AVR256},\n+\t{\"attiny43u\",     AVR4K,   AVR256, AVR64},\n+\t{\"attiny44\",      AVR4K,   AVR256, AVR256},\n+\t{\"attiny44a\",     AVR4K,   AVR256, AVR256},\n+\t{\"attiny45\",      AVR4K,   AVR256, AVR256},\n+\t{\"attiny461\",     AVR4K,   AVR256, AVR256},\n+\t{\"attiny461a\",    AVR4K,   AVR256, AVR256},\n+\t{\"attiny48\",      AVR4K,   AVR256, AVR64},\n+\n+\t{\"at86rf401\",     AVR2K,   224UL,  AVR128},\n+\t{\"at90s2313\",     AVR2K,   AVR128, AVR128},\n+\t{\"at90s2323\",     AVR2K,   AVR128, AVR128},\n+\t{\"at90s2333\",     AVR2K,   224UL,  AVR128},\n+\t{\"at90s2343\",     AVR2K,   AVR128, AVR128},\n+\t{\"attiny20\",      AVR2K,   AVR128, 0UL},\n+\t{\"attiny22\",      AVR2K,   224UL,  AVR128},\n+\t{\"attiny2313\",    AVR2K,   AVR128, AVR128},\n+\t{\"attiny2313a\",   AVR2K,   AVR128, AVR128},\n+\t{\"attiny24\",      AVR2K,   AVR128, AVR128},\n+\t{\"attiny24a\",     AVR2K,   AVR128, AVR128},\n+\t{\"attiny25\",      AVR2K,   AVR128, AVR128},\n+\t{\"attiny26\",      AVR2K,   AVR128, AVR128},\n+\t{\"attiny261\",     AVR2K,   AVR128, AVR128},\n+\t{\"attiny261a\",    AVR2K,   AVR128, AVR128},\n+\t{\"attiny28\",      AVR2K,   0UL,    0UL},\n+\t{\"attiny40\",      AVR2K,   AVR256, 0UL},\n+\n+\t{\"at90s1200\",     AVR1K,   0UL,    AVR64},\n+\t{\"attiny9\",       AVR1K,   32UL,   0UL},\n+\t{\"attiny10\",      AVR1K,   32UL,   0UL},\n+\t{\"attiny11\",      AVR1K,   0UL,    AVR64},\n+\t{\"attiny12\",      AVR1K,   0UL,    AVR64},\n+\t{\"attiny13\",      AVR1K,   AVR64,  AVR64},\n+\t{\"attiny13a\",     AVR1K,   AVR64,  AVR64},\n+\t{\"attiny15\",      AVR1K,   0UL,    AVR64},\n+\n+\t{\"attiny4\",       AVR512,  32UL,   0UL},\n+\t{\"attiny5\",       AVR512,  32UL,   0UL},\n+};\n+\n+static char *avrmcu = NULL;\n+\n+\n static char *target = NULL;\n \n /* Forward declarations.  */\n@@ -89,7 +330,8 @@ usage (FILE *stream, int status)\n   fprintf (stream, _(\" Displays the sizes of sections inside binary files\\n\"));\n   fprintf (stream, _(\" If no input file(s) are specified, a.out is assumed\\n\"));\n   fprintf (stream, _(\" The options are:\\n\\\n-  -A|-B|-G  --format={sysv|berkeley|gnu}  Select output style (default is %s)\\n\\\n+  -A|-B|-G|-C  --format={sysv|berkeley|gnu|avr}  Select output style (default is %s)\\n\\\n+            --mcu=<avrmcu>            MCU name for AVR format only\\n\\\n   -o|-d|-x  --radix={8|10|16}         Display numbers in octal, decimal or hex\\n\\\n   -t        --totals                  Display the total sizes (Berkeley only)\\n\\\n             --common                  Display total size for *COM* syms\\n\\\n@@ -113,6 +355,7 @@ usage (FILE *stream, int status)\n #define OPTION_FORMAT (200)\n #define OPTION_RADIX (OPTION_FORMAT + 1)\n #define OPTION_TARGET (OPTION_RADIX + 1)\n+#define OPTION_MCU (OPTION_TARGET + 1)\n \n static struct option long_options[] =\n {\n@@ -120,6 +363,7 @@ static struct option long_options[] =\n   {\"format\", required_argument, 0, OPTION_FORMAT},\n   {\"radix\", required_argument, 0, OPTION_RADIX},\n   {\"target\", required_argument, 0, OPTION_TARGET},\n+  {\"mcu\", required_argument, 0, 203},\n   {\"totals\", no_argument, &show_totals, 1},\n   {\"version\", no_argument, &show_version, 1},\n   {\"help\", no_argument, &show_help, 1},\n@@ -153,7 +397,7 @@ main (int argc, char **argv)\n     fatal (_(\"fatal error: libbfd ABI mismatch\"));\n   set_default_bfd_target ();\n \n-  while ((c = getopt_long (argc, argv, \"ABGHhVvdfotx\", long_options,\n+  while ((c = getopt_long (argc, argv, \"ABCGHhVvdfotx\", long_options,\n \t\t\t   (int *) 0)) != EOF)\n     switch (c)\n       {\n@@ -172,12 +416,20 @@ main (int argc, char **argv)\n \t  case 'g':\n \t    selected_output_format = FORMAT_GNU;\n \t    break;\n+\t  case 'A':\n+\t  case 'a':\n+\t    selected_output_format = FORMAT_AVR;\n+\t    break;\n \t  default:\n \t    non_fatal (_(\"invalid argument to --format: %s\"), optarg);\n \t    usage (stderr, 1);\n \t  }\n \tbreak;\n \n+      case OPTION_MCU:\n+\tavrmcu = optarg;\n+\tbreak;\n+\n       case OPTION_TARGET:\n \ttarget = optarg;\n \tbreak;\n@@ -214,6 +466,9 @@ main (int argc, char **argv)\n       case 'G':\n \tselected_output_format = FORMAT_GNU;\n \tbreak;\n+      case 'C':\n+\tselected_output_format = FORMAT_AVR;\n+    break;\n       case 'v':\n       case 'V':\n \tshow_version = 1;\n@@ -656,6 +911,98 @@ print_sysv_format (bfd *file)\n   printf (\"\\n\\n\");\n }\n \n+static avr_device_t *\n+avr_find_device (void)\n+{\n+  unsigned int i;\n+  if (avrmcu != NULL)\n+  {\n+    for (i = 0; i < sizeof(avr) / sizeof(avr[0]); i++)\n+    {\n+      if (strcmp(avr[i].name, avrmcu) == 0)\n+      {\n+        /* Match found */\n+        return (&avr[i]);\n+      }\n+    }\n+  }\n+  return (NULL);\n+}\n+\n+static void\n+print_avr_format (bfd *file)\n+{\n+  char *avr_name = \"Unknown\";\n+  int flashmax = 0;\n+  int rammax = 0;\n+  int eeprommax = 0;\n+  asection *section;\n+  bfd_size_type my_datasize = 0;\n+  bfd_size_type my_textsize = 0;\n+  bfd_size_type my_bsssize = 0;\n+  bfd_size_type bootloadersize = 0;\n+  bfd_size_type noinitsize = 0;\n+  bfd_size_type eepromsize = 0;\n+\n+  avr_device_t *avrdevice = avr_find_device();\n+  if (avrdevice != NULL)\n+  {\n+    avr_name = avrdevice->name;\n+    flashmax = avrdevice->flash;\n+    rammax = avrdevice->ram;\n+    eeprommax = avrdevice->eeprom;\n+  }\n+\n+  if ((section = bfd_get_section_by_name (file, \".data\")) != NULL)\n+    my_datasize = bfd_section_size (section);\n+  if ((section = bfd_get_section_by_name (file, \".text\")) != NULL)\n+    my_textsize = bfd_section_size (section);\n+  if ((section = bfd_get_section_by_name (file, \".bss\")) != NULL)\n+    my_bsssize = bfd_section_size (section);\n+  if ((section = bfd_get_section_by_name (file, \".bootloader\")) != NULL)\n+    bootloadersize = bfd_section_size (section);\n+  if ((section = bfd_get_section_by_name (file, \".noinit\")) != NULL)\n+    noinitsize = bfd_section_size (section);\n+  if ((section = bfd_get_section_by_name (file, \".eeprom\")) != NULL)\n+    eepromsize = bfd_section_size (section);\n+\n+  bfd_size_type text = my_textsize + my_datasize + bootloadersize;\n+  bfd_size_type data = my_datasize + my_bsssize + noinitsize;\n+  bfd_size_type eeprom = eepromsize;\n+\n+  printf (\"AVR Memory Usage\\n\"\n+          \"----------------\\n\"\n+          \"Device: %s\\n\\n\", avr_name);\n+\n+  /* Text size */\n+  printf (\"Program:%8ld bytes\", text);\n+  if (flashmax > 0)\n+  {\n+    printf (\" (%2.1f%% Full)\", ((float)text / flashmax) * 100);\n+  }\n+  printf (\"\\n(.text + .data + .bootloader)\\n\\n\");\n+\n+  /* Data size */\n+  printf (\"Data:   %8ld bytes\", data);\n+  if (rammax > 0)\n+  {\n+    printf (\" (%2.1f%% Full)\", ((float)data / rammax) * 100);\n+  }\n+  printf (\"\\n(.data + .bss + .noinit)\\n\\n\");\n+\n+  /* EEPROM size */\n+  if (eeprom > 0)\n+  {\n+    printf (\"EEPROM: %8ld bytes\", eeprom);\n+    if (eeprommax > 0)\n+    {\n+      printf (\" (%2.1f%% Full)\", ((float)eeprom / eeprommax) * 100);\n+    }\n+    printf (\"\\n(.eeprom)\\n\\n\");\n+  }\n+}\n+\n+\n static void\n print_sizes (bfd *file)\n {\n@@ -663,6 +1010,8 @@ print_sizes (bfd *file)\n     calculate_common_size (file);\n   if (selected_output_format == FORMAT_SYSV)\n     print_sysv_format (file);\n+  else if (selected_output_format == FORMAT_AVR)\n+    print_avr_format (file);\n   else\n     print_berkeley_or_gnu_format (file);\n }\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/binutils/resrc.c b/binutils/resrc.c\nindex a875c3a4..0411d047 100644\n--- a/binutils/resrc.c\n+++ b/binutils/resrc.c\n@@ -521,7 +521,13 @@ read_rc_file (const char *filename, const char *preprocessor,\n \n       cpp_pipe = 0;\n \n-      if (dash)\n+      /* Nixpkgs specific : look first at the prefixed path\n+        ( there should be no gcc in the binutils folder ) */\n+      if (slash && dash) {\n+        cpp_pipe = look_for_default(cmd, slash + 1, dash - slash, preprocargs, filename);\n+      }\n+\n+      if (dash && ! cpp_pipe)\n \t{\n \t  /* First, try looking for a prefixed gcc in the windres\n \t     directory, with the same prefix as windres */\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "Backported patch originally targeted against 2.45.\n--- a/bfd/elflink.c\n+++ b/bfd/elflink.c\n@@ -14356,5 +14356,6 @@ elf_gc_sweep (bfd *abfd, struct bfd_link_info *info)\n\t  if (o->flags & SEC_GROUP)\n\t    {\n\t      asection *first = elf_next_in_group (o);\n-\t      o->gc_mark = first->gc_mark;\n+\t      if (first != NULL)\n+\t        o->gc_mark = first->gc_mark;\n\t    }\n\n\t  if (o->gc_mark)\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "Backported patch originally targeted against 2.45.\n--- a/binutils/debug.c\n+++ b/binutils/debug.c\n@@ -2554,9 +2554,6 @@ debug_write_type (struct debug_handle *info,\n     case DEBUG_KIND_UNION_CLASS:\n       return debug_write_class_type (info, fns, fhandle, type, tag);\n     case DEBUG_KIND_ENUM:\n-      if (type->u.kenum == NULL)\n-\treturn (*fns->enum_type) (fhandle, tag, (const char **) NULL,\n-\t\t\t\t  (bfd_signed_vma *) NULL);\n       return (*fns->enum_type) (fhandle, tag, type->u.kenum->names,\n \t\t\t\ttype->u.kenum->values);\n     case DEBUG_KIND_POINTER:\n@@ -3097,9 +3094,9 @@ debug_type_samep (struct debug_handle *info, struct debug_type_s *t1,\n       break;\n\n     case DEBUG_KIND_ENUM:\n-      if (t1->u.kenum == NULL)\n-\tret = t2->u.kenum == NULL;\n-      else if (t2->u.kenum == NULL)\n+      if (t1->u.kenum->names == NULL)\n+\tret = t2->u.kenum->names == NULL;\n+      else if (t2->u.kenum->names == NULL)\n \tret = false;\n       else\n \t{\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://ftpmirror.gnu.org/binutils/binutils-with-gold-2.44.tar.bz2",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "34733ea495cc0e50e70db4e5890dec28ac41f0e14c4a165e69cf27fb99a8c4c8"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/binutils/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "6b249f65yvn45irgjbps1s2f33i9if6w-libarchive-3.8.2-lib",
      "name": "libarchive",
      "version": "3.8.2",
      "description": "Multi-format archive and compression library",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/libarchive@3.8.2",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/libarchive/libarchive/archive/v3.8.2.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "b3b76ec2e345c98abca1b4d2dea73a25ec09f5ff0b26122d944c7cc319cc8309"
            }
          ]
        },
        {
          "type": "website",
          "url": "http://libarchive.org"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "6f36gkcggal36h77jij89km1fzafa5wi-flex-2.6.4",
      "name": "flex",
      "version": "2.6.4",
      "description": "Fast lexical analyser generator",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-2-Clause"
          }
        }
      ],
      "purl": "pkg:nix/flex@2.6.4",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 24fd0551333e7eded87b64dd36062da3df2f6380 Mon Sep 17 00:00:00 2001\nFrom: Explorer09 <explorer09@gmail.com>\nDate: Mon, 4 Sep 2017 10:47:33 +0800\nSubject: [PATCH] build: AC_USE_SYSTEM_EXTENSIONS in configure.ac.\n\nThis would, e.g. define _GNU_SOURCE in config.h, enabling the\nreallocarray() prototype in glibc 2.26+ on Linux systems with that\nversion of glibc.\n\nFixes #241.\n---\n configure.ac | 2 ++\n 1 file changed, 2 insertions(+)\n\n--- a/configure.ac\n+++ b/configure.ac\n@@ -25,8 +25,10 @@\n # autoconf requirements and initialization\n \n AC_INIT([the fast lexical analyser generator],[2.6.4],[flex-help@lists.sourceforge.net],[flex])\n+AC_PREREQ([2.60])\n AC_CONFIG_SRCDIR([src/scan.l])\n AC_CONFIG_AUX_DIR([build-aux])\n+AC_USE_SYSTEM_EXTENSIONS\n LT_INIT\n AM_INIT_AUTOMAKE([1.11.3 -Wno-portability foreign check-news std-options dist-lzip parallel-tests subdir-objects])\n AC_CONFIG_HEADER([src/config.h])\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/westes/flex/releases/download/v2.6.4/flex-2.6.4.tar.gz"
        },
        {
          "type": "website",
          "url": "https://github.com/westes/flex"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "6gp1npnskqxkyfr73isk0vf2ygm976h7-python3.13-requests-2.32.5",
      "name": "requests",
      "version": "2.32.5",
      "description": "HTTP library for Python",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "Apache-2.0"
          }
        }
      ],
      "purl": "pkg:nix/requests@2.32.5",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/psf/requests/archive/refs/tags/v2.32.5.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "70405a94c1686056861bc338f24f8e101bf32de833ad334fd4dc47da58cfeaa8"
            }
          ]
        },
        {
          "type": "website",
          "url": "http://docs.python-requests.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "6j9dzkwcmk4am74b3337dn37dbxnj746-python3.13-hatch-vcs-0.5.0",
      "name": "hatch-vcs",
      "version": "0.5.0",
      "description": "Plugin for Hatch that uses your preferred version control system (like Git) to determine project versions",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/hatch-vcs@0.5.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/h/hatch_vcs/hatch_vcs-0.5.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "0395fa126940340215090c344a2bf4e2a77bcbe7daab16f41b37b98c95809ff9"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/ofek/hatch-vcs"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "6k1nbxj714601kwf2vn7kvlkrdrasm5m-python3.13-ptyprocess-0.7.0-dist",
      "name": "ptyprocess",
      "version": "0.7.0",
      "description": "Run a subprocess in a pseudo terminal",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "ISC"
          }
        }
      ],
      "purl": "pkg:nix/ptyprocess@0.7.0",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/tests/test_spawn.py\n+++ b/tests/test_spawn.py\n@@ -142,6 +142,7 @@\n                                   '-c',\n                                   'printf bye >&{}'.format(temp_file_fd)],\n                                  echo=True)\n+            p.read() # Read error off child to allow it to terminate nicely\n             p.wait()\n             assert p.status != 0\n \n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/tests/test_invalid_binary.py\n+++ b/tests/test_invalid_binary.py\n@@ -69,6 +69,3 @@\n \n if __name__ == '__main__':\n     unittest.main()\n-\n-suite = unittest.makeSuite(InvalidBinaryChars,'test')\n-\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/p/ptyprocess/ptyprocess-0.7.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/pexpect/ptyprocess"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "6mjb746bdn828kybiv3z89ir1dvfgvbz-python3.13-calver-2025.10.20-dist",
      "name": "calver",
      "version": "2025.10.20",
      "description": "Setuptools extension for CalVer package versions",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "Apache-2.0"
          }
        }
      ],
      "purl": "pkg:nix/calver@2025.10.20",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/di/calver/archive/refs/tags/2025.10.20.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "f027cf438b8c80a0ea30c82eb4b76c8e7fcc680541250029d4aa947f1ccd310c"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/di/calver"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "6pdsm52b8axzqj233grpyd5i6qk5qhm1-python3.13-typogrify-2.1.0",
      "name": "typogrify",
      "version": "2.1.0",
      "description": "Filters to enhance web typography, including support for Django & Jinja templates",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/typogrify@2.1.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/t/typogrify/typogrify-2.1.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "f0aa004e98032a6e6be4c9da65e7eb7150e36ca3bf508adbcda82b4d003e61ee"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/justinmayer/typogrify"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "6rb1fk7blbmbv5mj6frwkqhfc952pc4i-byacc-20241231",
      "name": "byacc",
      "version": "20241231",
      "description": "Berkeley YACC",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "name": "Public Domain"
          }
        }
      ],
      "purl": "pkg:nix/byacc@20241231",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://invisible-mirror.net/archives/byacc/byacc-20241231.tgz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "192c2fae048d4e7f514ba451627f9c4e612765099f819c19191f9fde3e609673"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://invisible-island.net/byacc/byacc.html"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "716gdlabwjvimi2jv0x2cavf8xljfmjp-expect-5.45.4",
      "name": "expect",
      "version": "5.45.4",
      "description": "Tool for automating interactive applications",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "name": "Public Domain"
          }
        }
      ],
      "purl": "pkg:nix/expect@5.45.4",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/Makefile.in\t2022-09-07 21:46:37.090519258 +0200\n+++ b/Makefile.in\t2022-09-07 21:46:21.462592279 +0200\n@@ -380,7 +380,7 @@\n \tcp $(DIST_ROOT)/$(PKG_DIR).tar.gz $(top_builddir)\n \n $(SCRIPTS):\n-\t$(TCLSH) $(srcdir)/fixline1 $(SHORT_BINDIR) < $(srcdir)/example/$@ > $@\n+\t/nix/store/biz055ybc5x1vxar1dqlrjsw7w9axgc2-tcl-8.6.16/bin/tclsh $(srcdir)/fixline1 $(SHORT_BINDIR) < $(srcdir)/example/$@ > $@\n \n ## We cannot use TCL_LIBS below (after TCL_LIB_SPEC) because its\n ## expansion references the contents of LIBS, which contains linker\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/exp_chan.c\n+++ b/exp_chan.c\n@@ -35,6 +35,7 @@\n #include \"exp_prog.h\"\n #include \"exp_command.h\"\n #include \"exp_log.h\"\n+#include \"exp_event.h\" /* exp_background_channelhandler */\n #include \"tcldbg.h\" /* Dbg_StdinMode */\n \n extern int\t\texpSetBlockModeProc _ANSI_ARGS_((int fd, int mode));\n@@ -631,7 +632,7 @@\n }\n \n void\n-exp_background_channelhandlers_run_all()\n+exp_background_channelhandlers_run_all(void)\n {\n     ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);\n     ExpState *esPtr;\n@@ -760,7 +761,7 @@\n }\n \n void\n-expChannelInit() {\n+expChannelInit(void) {\n     ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);\n \n     tsdPtr->channelCount = 0;\n--- a/exp_clib.c\n+++ b/exp_clib.c\n@@ -9,13 +9,14 @@\n \n #include \"expect_cf.h\"\n #include <stdio.h>\n+#include <unistd.h>\n #include <setjmp.h>\n #ifdef HAVE_INTTYPES_H\n #  include <inttypes.h>\n #endif\n #include <sys/types.h>\n #include <sys/ioctl.h>\n-\n+#include <sys/wait.h>\n #ifdef TIME_WITH_SYS_TIME\n # include <sys/time.h>\n # include <time.h>\n@@ -1738,6 +1739,7 @@\n #define sysreturn(x)\treturn(errno = x, -1)\n \n void exp_init_pty();\n+void exp_init_tty();\n \n /*\n    The following functions are linked from the Tcl library.  They\n--- a/exp_main_sub.c\n+++ b/exp_main_sub.c\n@@ -61,6 +61,11 @@\n int exp_interactive =  FALSE;\n int exp_buffer_command_input = FALSE;/* read in entire cmdfile at once */\n int exp_fgets();\n+int exp_tty_cooked_echo(\n+    Tcl_Interp *interp,\n+    exp_tty *tty_old,\n+    int *was_raw,\n+    int *was_echo);\n \n Tcl_Interp *exp_interp;\t/* for use by signal handlers who can't figure out */\n \t\t\t/* the interpreter directly */\n--- a/pty_termios.c\n+++ b/pty_termios.c\n@@ -7,6 +7,7 @@\n \n */\n \n+#include <pty.h> /* openpty */\n #include <stdio.h>\n #include <signal.h>\n \n@@ -15,6 +16,9 @@\n #endif\n \n #include \"expect_cf.h\"\n+#include \"tclInt.h\"\n+\n+extern char * expErrnoMsg    _ANSI_ARGS_((int));\n \n /*\n    The following functions are linked from the Tcl library.  They\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/configure.in\n+++ b/configure.in\n@@ -452,7 +452,11 @@\n # because Unixware 2.0 handles it specially and refuses to compile\n # autoconf's automatic test that is a call with no arguments\n AC_MSG_CHECKING([for memcpy])\n-AC_TRY_LINK(,[\n+AC_TRY_LINK([\n+#ifdef HAVE_STRING_H\n+#include <string.h>\n+#endif\n+],[\n char *s1, *s2;\n memcpy(s1,s2,0);\n ],\n@@ -469,6 +473,7 @@\n AC_MSG_CHECKING([if WNOHANG requires _POSIX_SOURCE])\n AC_TRY_RUN([\n #include <sys/wait.h>\n+int\n main() {\n #ifndef WNOHANG\n \treturn 0;\n@@ -489,6 +494,7 @@\n AC_TRY_RUN([\n #include <stdio.h>\n #include <sys/wait.h>\n+int\n main() {\n #ifdef WNOHANG\n \tFILE *fp = fopen(\"wnohang\",\"w\");\n@@ -527,16 +533,21 @@\n   AC_DEFINE(SELECT_MASK_TYPE, fd_set)\n fi\n \n-dnl # Check for the data type of the function used in signal(). This\n-dnl # must be before the test for rearming.\n-dnl # echo checking return type of signal handlers\n-dnl AC_HEADER_EGREP([(void|sighandler_t).*signal], signal.h, retsigtype=void,AC_DEFINE(RETSIGTYPE, int) retsigtype=int)\n+AC_TYPE_SIGNAL\n \n # FIXME: check if alarm exists\n AC_MSG_CHECKING([if signals need to be re-armed])\n AC_TRY_RUN([\n #include <signal.h>\n-#define RETSIGTYPE $retsigtype\n+#ifdef HAVE_STDLIB_H\n+# include <stdlib.h>\n+#endif\n+#ifdef HAVE_UNISTD_H\n+# include <unistd.h>\n+#endif\n+#ifndef NO_SYS_WAIT_H\n+# include <sys/wait.h>\n+#endif\n \n int signal_rearms = 0;\n \n@@ -553,6 +564,7 @@\n signal_rearms++;\n }\n \n+int\n main()\n {\n \tsignal(SIGINT,parent_sigint_handler);\n@@ -714,10 +726,11 @@\n AC_MSG_CHECKING([for struct sgttyb])\n AC_TRY_RUN([\n #include <sgtty.h>\n+int\n main()\n {\n   struct sgttyb tmp;\n-  exit(0);\n+  return 0;\n }],\n         AC_MSG_RESULT(yes)\n         AC_DEFINE(HAVE_SGTTYB)\n@@ -738,10 +751,11 @@\n   # pty_termios.c is set up to handle pty_termio.\n   AC_MSG_CHECKING([for struct termio])\n   AC_TRY_RUN([#include <termio.h>\n+  int\n   main()\n   {\n     struct termio tmp;\n-    exit(0);\n+    return 0;\n   }],\n         AC_DEFINE(HAVE_TERMIO)\n         PTY_TYPE=termios\n@@ -760,10 +774,11 @@\n #  include <inttypes.h>\n #  endif\n #  include <termios.h>\n+  int\n   main()\n   {\n     struct termios tmp;\n-    exit(0);\n+    return 0;\n   }],\n         AC_DEFINE(HAVE_TERMIOS)\n         PTY_TYPE=termios\n@@ -782,6 +797,7 @@\n #include <inttypes.h>\n #endif\n #include <termios.h>\n+int\n main() {\n #if defined(TCGETS) || defined(TCGETA)\n \treturn 0;\n@@ -804,6 +820,7 @@\n #include <inttypes.h>\n #endif\n #include <termios.h>\n+int\n main() {\n #ifdef TIOCGWINSZ\n \treturn 0;\n@@ -823,6 +840,7 @@\n AC_MSG_CHECKING([for Cray-style ptys])\n SETUID=\":\"\n AC_TRY_RUN([\n+int\n main(){\n #ifdef CRAY\n \treturn 0;\n@@ -878,12 +896,13 @@\n AC_TRY_RUN([\n extern char *tzname[2];\n extern int daylight;\n+int\n main()\n {\n   int *x = &daylight;\n   char **y = tzname;\n \n-  exit(0);\n+  return 0;\n }],\n \tAC_DEFINE(HAVE_SV_TIMEZONE)\n \tAC_MSG_RESULT(yes),\n--- a/tclconfig/tcl.m4\n+++ b/tclconfig/tcl.m4\n@@ -2400,7 +2400,7 @@\n \tAC_TRY_COMPILE([#include <time.h>],\n \t    [extern long timezone;\n \t    timezone += 1;\n-\t    exit (0);],\n+\t    return 0;],\n \t    tcl_cv_timezone_long=yes, tcl_cv_timezone_long=no)])\n     if test $tcl_cv_timezone_long = yes ; then\n \tAC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?])\n@@ -2412,7 +2412,7 @@\n \t    AC_TRY_COMPILE([#include <time.h>],\n \t\t[extern time_t timezone;\n \t\ttimezone += 1;\n-\t\texit (0);],\n+\t\treturn 0;],\n \t\ttcl_cv_timezone_time=yes, tcl_cv_timezone_time=no)])\n \tif test $tcl_cv_timezone_time = yes ; then\n \t    AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?])\n@@ -2452,17 +2452,17 @@\n \t\t    double value;\n \t\t    value = strtod(infString, &term);\n \t\t    if ((term != infString) && (term[-1] == 0)) {\n-\t\t\texit(1);\n+\t\t\treturn 1;\n \t\t    }\n \t\t    value = strtod(nanString, &term);\n \t\t    if ((term != nanString) && (term[-1] == 0)) {\n-\t\t\texit(1);\n+\t\t\treturn 1;\n \t\t    }\n \t\t    value = strtod(spaceString, &term);\n \t\t    if (term == (spaceString+1)) {\n-\t\t\texit(1);\n+\t\t\treturn 1;\n \t\t    }\n-\t\t    exit(0);\n+\t\t    return 0;\n \t\t}], tcl_cv_strtod_buggy=ok, tcl_cv_strtod_buggy=buggy,\n \t\t    tcl_cv_strtod_buggy=buggy)])\n \tif test \"$tcl_cv_strtod_buggy\" = buggy; then\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From: Andrew Ruder <andrew.ruder@elecsyscorp.com>\nSubject: [PATCH] enable cross compilation for expect\n\nThis patch was created by running ./configure on a modern Linux machine\nand inserting the results into the cross compilation section of\neach AC_MSG_CHECKING that bombed out with an error.\n\nSigned-off-by: Andrew Ruder <andrew.ruder@elecsyscorp.com>\n\n--\n\nThe original patch, and description above, is originally from\nhttps://github.com/buildroot/buildroot/blob/master/package/expect/0001-enable-cross-compilation.patch\n\nThis patch has been further modified to not hard-code Linux assumptions.\n\n---\n\nIndex: expect-5.45/configure.in\n===================================================================\n--- expect-5.45.orig/configure.in\t2013-11-14 07:59:58.732100595 -0600\n+++ expect-5.45/configure.in\t2013-11-14 07:59:58.732100595 -0600\n@@ -6,10 +6,12 @@\n AC_INIT([expect],[5.45.4])\n \n TEA_INIT([3.9])\n \n AC_CONFIG_AUX_DIR(tclconfig)\n+\n+AC_LANG([C])\n \n #--------------------------------------------------------------------\n # Configure script for package 'Expect'.\n # TEA compliant.\n #--------------------------------------------------------------------\n@@ -465,26 +467,20 @@\n # Some systems only define WNOHANG if _POSIX_SOURCE is defined\n # The following merely tests that sys/wait.h can be included\n # and if so that WNOHANG is not defined.  The only place I've\n # seen this is ISC.\n AC_MSG_CHECKING([if WNOHANG requires _POSIX_SOURCE])\n-AC_TRY_RUN([\n+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[\n #include <sys/wait.h>\n-int\n-main() {\n #ifndef WNOHANG\n-\treturn 0;\n-#else\n-\treturn 1;\n+#  error \"WNOHANG requires _POSIX_SOURCE to be defined\"\n #endif\n-}],\n+]])],\n \tAC_MSG_RESULT(yes)\n \tAC_DEFINE(WNOHANG_REQUIRES_POSIX_SOURCE)\n ,\n \tAC_MSG_RESULT(no)\n-,\n-\tAC_MSG_ERROR([Expect can't be cross compiled])\n )\n \n AC_MSG_CHECKING([if any value exists for WNOHANG])\n rm -rf wnohang\n AC_TRY_RUN([\n@@ -504,11 +501,12 @@\n \trm -f wnohang\n ,\n \tAC_MSG_RESULT(no)\n \tAC_DEFINE(WNOHANG_BACKUP_VALUE, 1)\n ,\n-\tAC_MSG_ERROR([Expect can't be cross compiled])\n+\tAC_MSG_RESULT(yes)\n+\tAC_DEFINE(WNOHANG_BACKUP_VALUE, 1)\n )\n \n #\n # check how signals work\n #\n@@ -572,11 +570,11 @@\n }],\n \tAC_MSG_RESULT(yes)\n \tAC_DEFINE(REARM_SIG)\n ,\n \tAC_MSG_RESULT(no)\n-, AC_MSG_WARN([Expect can't be cross compiled])\n+, AC_MSG_RESULT(no)\n )\n \n # HPUX7 has trouble with the big cat so split it\n # Owen Rees <rtor@ansa.co.uk> 29Mar93 \n SEDDEFS=\"${SEDDEFS}CONFEOF\n@@ -710,25 +708,19 @@\n     AC_DEFINE(POSIX)\n fi\n \n # first check for the pure bsd\n AC_MSG_CHECKING([for struct sgttyb])\n-AC_TRY_RUN([\n+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[\n #include <sgtty.h>\n-int\n-main()\n-{\n-  struct sgttyb tmp;\n-  return 0;\n-}],\n+static struct sgttyb tmp;\n+]])],\n         AC_MSG_RESULT(yes)\n         AC_DEFINE(HAVE_SGTTYB)\n         PTY_TYPE=sgttyb\n ,\n         AC_MSG_RESULT(no)\n-,\n-\tAC_MSG_ERROR([Expect can't be cross compiled])\n )\n \n # mach systems have include files for unimplemented features\n # so avoid doing following test on those systems\n if test $mach -eq 0 ; then\n@@ -735,116 +728,88 @@\n   # next check for the older style ttys\n   # note that if we detect termio.h (only), we still set PTY_TYPE=termios\n   # since that just controls which of pty_XXXX.c file is use and\n   # pty_termios.c is set up to handle pty_termio.\n   AC_MSG_CHECKING([for struct termio])\n-  AC_TRY_RUN([#include <termio.h>\n-  int\n-  main()\n-  {\n-    struct termio tmp;\n-    return 0;\n-  }],\n+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[\n+#include <termio.h>\n+static struct termio tmp;\n+]])],\n         AC_DEFINE(HAVE_TERMIO)\n         PTY_TYPE=termios\n         AC_MSG_RESULT(yes)\n ,\n         AC_MSG_RESULT(no)\n-,\n-\tAC_MSG_ERROR([Expect can't be cross compiled])\n )\n \n   # now check for the new style ttys (not yet posix)\n   AC_MSG_CHECKING([for struct termios])\n-  AC_TRY_RUN([\n-  /* including termios.h on Solaris 5.6 fails unless inttypes.h included */\n-#  ifdef HAVE_INTTYPES_H\n+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[\n+/* including termios.h on Solaris 5.6 fails unless inttypes.h included */\n+#ifdef HAVE_INTTYPES_H\n #  include <inttypes.h>\n-#  endif\n-#  include <termios.h>\n-  int\n-  main()\n-  {\n-    struct termios tmp;\n-    return 0;\n-  }],\n+#endif\n+#include <termios.h>\n+static struct termios tmp;\n+]])],\n         AC_DEFINE(HAVE_TERMIOS)\n         PTY_TYPE=termios\n         AC_MSG_RESULT(yes)\n   ,\n         AC_MSG_RESULT(no)\n-  ,\n-\tAC_MSG_ERROR([Expect can't be cross compiled])\n   )\n fi\n \n AC_MSG_CHECKING([if TCGETS or TCGETA in termios.h])\n-AC_TRY_RUN([\n+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[\n /* including termios.h on Solaris 5.6 fails unless inttypes.h included */\n #ifdef HAVE_INTTYPES_H\n-#include <inttypes.h>\n+#  include <inttypes.h>\n #endif\n #include <termios.h>\n-int\n-main() {\n-#if defined(TCGETS) || defined(TCGETA)\n-\treturn 0;\n-#else\n-\treturn 1;\n+#\n+#if !(defined(TCGETS) || defined(TCGETA))\n+#  error \"missing both of TCGETS and TCGETA\"\n #endif\n-}],\n+]])],\n \tAC_DEFINE(HAVE_TCGETS_OR_TCGETA_IN_TERMIOS_H)\n \tAC_MSG_RESULT(yes)\n ,\n \tAC_MSG_RESULT(no)\n-,\n-\tAC_MSG_ERROR([Expect can't be cross compiled])\n )\n \n AC_MSG_CHECKING([if TIOCGWINSZ in termios.h])\n-AC_TRY_RUN([\n+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[\n /* including termios.h on Solaris 5.6 fails unless inttypes.h included */\n #ifdef HAVE_INTTYPES_H\n-#include <inttypes.h>\n+#  include <inttypes.h>\n #endif\n #include <termios.h>\n-int\n-main() {\n-#ifdef TIOCGWINSZ\n-\treturn 0;\n-#else\n-\treturn 1;\n+\n+#ifndef TIOCGWINSZ\n+#  error \"missing TIOCGWINSZ\"\n #endif\n-}],\n+]])],\n \tAC_DEFINE(HAVE_TIOCGWINSZ_IN_TERMIOS_H)\n \tAC_MSG_RESULT(yes)\n ,\n \tAC_MSG_RESULT(no)\n-,\n-\tAC_MSG_ERROR([Expect can't be cross compiled])\n )\n \n # finally check for Cray style ttys\n AC_MSG_CHECKING([for Cray-style ptys])\n SETUID=\":\"\n-AC_TRY_RUN([\n-int\n-main(){\n-#ifdef CRAY\n-\treturn 0;\n-#else\n-\treturn 1;\n+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[\n+#ifndef CRAY\n+#  error \"CRAY is not defined\"\n #endif\n-}\n-],\n+]])],\n \tPTY_TYPE=unicos\n \tSETUID=\"chmod u+s\"\n \tAC_MSG_RESULT(yes)\n ,\n \tAC_MSG_RESULT(no)\n-,\n-\tAC_MSG_ERROR([Expect can't be cross compiled])\n )\n \n #\n # Check for select and/or poll. If both exist, we prefer select.\n # if neither exists, define SIMPLE_EVENT.\n@@ -873,26 +842,24 @@\n \n #\n # check for timezones\n #\n AC_MSG_CHECKING([for SV-style timezone])\n-AC_TRY_RUN([\n+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[\n extern char *tzname[2];\n extern int daylight;\n int\n main()\n {\n   int *x = &daylight;\n   char **y = tzname;\n \n   return 0;\n-}],\n+}]])],\n \tAC_DEFINE(HAVE_SV_TIMEZONE)\n \tAC_MSG_RESULT(yes),\n \tAC_MSG_RESULT(no)\n-,\n-\tAC_MSG_ERROR([Expect can't be cross compiled])\n )\n \n \n # Following comment stolen from Tcl's configure.in:\n #   Note:  in the following variable, it's important to use the absolute\n\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff -ur a/exp_win.c b/exp_win.c\n--- a/exp_win.c\t2018-02-02 14:15:52.000000000 -0500\n+++ b/exp_win.c\t2023-10-10 07:47:33.082690432 -0400\n@@ -39,7 +39,8 @@\n /* Sigh.  On AIX 2.3, termios.h exists but does not define TIOCGWINSZ */\n /* Instead, it has to come from ioctl.h.  However, As I said above, this */\n /* can't be cavalierly included on all machines, even when it exists. */\n-#if defined(HAVE_TERMIOS) && !defined(HAVE_TIOCGWINSZ_IN_TERMIOS_H)\n+/* Darwin also has termios.h, but it requires ioctl.h for `ioctl`. */\n+#if defined(HAVE_TERMIOS) && (defined(__APPLE__) || !defined(HAVE_TIOCGWINSZ_IN_TERMIOS_H))\n #  include <sys/ioctl.h>\n #endif\n \ndiff -ur d/pty_termios.c c/pty_termios.c\n--- d/pty_termios.c\t2023-10-10 07:59:23.244452442 -0400\n+++ c/pty_termios.c\t2023-10-10 08:00:35.303231582 -0400\n@@ -7,7 +7,18 @@\n \n */\n \n-#include <pty.h> /* openpty */\n+/* openpty */\n+#if defined(__APPLE__)\n+#  include <util.h>\n+#elif defined(__FreeBSD__)\n+#  include <sys/types.h>\n+#  include <sys/ioctl.h>\n+#  include <termios.h>\n+#  include <libutil.h>\n+#else /* pty.h is Linux-specific */\n+#  include <pty.h>\n+#endif\n+\n #include <stdio.h>\n #include <signal.h>\n \n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- expect5.45.4/tclconfig/tcl.m4.orig\t2024-05-29 11:24:56.150656190 -0700\n+++ expect5.45.4/tclconfig/tcl.m4\t2024-05-29 11:25:22.850790934 -0700\n@@ -1643,11 +1643,6 @@\n \t\tLIBS=`echo $LIBS | sed s/-pthread//`\n \t\tCFLAGS=\"$CFLAGS $PTHREAD_CFLAGS\"\n \t\tLDFLAGS=\"$LDFLAGS $PTHREAD_LIBS\"])\n-\t    # Version numbers are dot-stripped by system policy.\n-\t    TCL_TRIM_DOTS=`echo ${VERSION} | tr -d .`\n-\t    UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a'\n-\t    SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\\$\\{DBGX\\}.so.1'\n-\t    TCL_LIB_VERSIONS_OK=nodots\n \t    ;;\n \tDarwin-*)\n \t    CFLAGS_OPTIMIZE=\"-Os\"\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://sourceforge/expect/Expect/5.45.4/expect5.45.4.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "49a7da83b0bdd9f46d04a04deec19c7767bb9a323e40c4781f89caf760b92c34"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://expect.sourceforge.net/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "725vzhibf52zxbik5ylyzwi4lzmjkl38-gperf-3.3",
      "name": "gperf",
      "version": "3.3",
      "description": "Perfect hash function generator",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/gperf@3.3",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://gnu/gperf/gperf-3.3.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "fd87e0aba7e43ae054837afd6cd4db03a3f2693deb3619085e6ed9d8d9604ad8"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/gperf/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "793ckp67jri2sdksr5a51g1wvv58y4hw-nettle-3.10.2",
      "name": "nettle",
      "version": "3.10.2",
      "description": "Cryptographic library",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-2.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/nettle@3.10.2",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://gnu/nettle/nettle-3.10.2.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "fe9ff51cb1f2abb5e65a6b8c10a92da0ab5ab6eaf26e7fc2b675c45f1fb519b5"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.lysator.liu.se/~nisse/nettle/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "79i958sq2mwjkn9w5214mab3b1yx637f-python3.13-cffi-2.0.0",
      "name": "cffi",
      "version": "2.0.0",
      "description": "Foreign Function Interface for Python calling C code",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT-0"
          }
        }
      ],
      "purl": "pkg:nix/cffi@2.0.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/python-cffi/cffi/archive/refs/tags/v2.0.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "ecccf3dca9a6984db142bbb5180e1a6340d9aa7eafc72916884c50be70356e33"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://cffi.readthedocs.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "7cnpymm1j29rf39asdh1ivwbnifk5nwr-xtrans-1.6.0",
      "name": "xtrans",
      "version": "1.6.0",
      "description": "X Window System Protocols Transport layer shared code",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT-open-group"
          }
        },
        {
          "license": {
            "id": "HPND"
          }
        },
        {
          "license": {
            "id": "MIT"
          }
        },
        {
          "license": {
            "id": "X11"
          }
        },
        {
          "license": {
            "id": "HPND-sell-variant"
          }
        }
      ],
      "purl": "pkg:nix/xtrans@1.6.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://xorg/individual/lib/xtrans-1.6.0.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "faafea166bf2451a173d9d593352940ec6404145c5d1da5c213423ce4d359e92"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://gitlab.freedesktop.org/xorg/lib/libxtrans"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "7iwv8dcgsjmkrnn752hnfdxh3f7wahmd-linux-headers-6.16.7",
      "name": "linux-headers",
      "version": "6.16.7",
      "description": "Header files and scripts for Linux kernel",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-2.0-only"
          }
        }
      ],
      "purl": "pkg:nix/linux-headers@6.16.7",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/arch/x86/Makefile\n+++ b/arch/x86/Makefile\n@@ -231,3 +231,3 @@ endif\n archscripts: scripts_basic\n-\t$(Q)$(MAKE) $(build)=arch/x86/tools relocs\n+\t$(Q)$(MAKE) $(build)=arch/x86/tools\n \n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.16.7.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "5be3daa1f9427b1bdb34c4894d9c1adfac38cff674376fe0611a3065729a1a81"
            }
          ]
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "7xp1k2ghn26ycg4yhlrqyma6vl68m9kl-gd-2.3.3-dev",
      "name": "gd",
      "version": "2.3.3",
      "description": "Dynamic image creation library",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "name": "Unspecified free software license"
          }
        }
      ],
      "purl": "pkg:nix/gd@2.3.3",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/src/gd.h\n+++ b/src/gd.h\n@@ -1604,6 +1604,11 @@\n BGD_DECLARE(void) gdImageFlipVertical(gdImagePtr im);\n BGD_DECLARE(void) gdImageFlipBoth(gdImagePtr im);\n \n+#define GD_FLIP_HORINZONTAL 1 /* typo, kept for BC */\n+#define GD_FLIP_HORIZONTAL 1\n+#define GD_FLIP_VERTICAL 2\n+#define GD_FLIP_BOTH 3\n+\n /**\n  * Group: Crop\n  *\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/libgd/libgd/releases/download/gd-2.3.3/libgd-2.3.3.tar.xz"
        },
        {
          "type": "website",
          "url": "https://libgd.github.io/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "7zbigzd1c07fr50yfmsk0jyvlfvi8cn5-dav1d-1.5.2-dev",
      "name": "dav1d",
      "version": "1.5.2",
      "description": "Cross-platform AV1 decoder focused on speed and correctness",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-2-Clause"
          }
        }
      ],
      "purl": "pkg:nix/dav1d@1.5.2",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/videolan/dav1d/archive/1.5.2.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "af144ee445a3ace52c0985dddab0c385f70465b7d2b8c7e3ba34401d3a946212"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/videolan/dav1d"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "80xrlrpp31mffa9i5jjasw59lpm9mvgi-gdk-pixbuf-2.44.4-debug",
      "name": "gdk-pixbuf",
      "version": "2.44.4",
      "description": "Library for image loading and manipulation",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "LGPL-2.1-or-later"
          }
        }
      ],
      "purl": "pkg:nix/gdk-pixbuf@2.44.4",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/tests/meson.build\n+++ b/tests/meson.build\n@@ -85,8 +85,8 @@\n   'aero.gif',\n ]\n \n-installed_test_bindir = join_paths(gdk_pixbuf_libexecdir, 'installed-tests', meson.project_name())\n-installed_test_datadir = join_paths(gdk_pixbuf_datadir, 'installed-tests', meson.project_name())\n+installed_test_bindir = join_paths('@installedtestsprefix@', 'libexec', 'installed-tests', meson.project_name())\n+installed_test_datadir = join_paths('@installedtestsprefix@', 'share', 'installed-tests', meson.project_name())\n \n install_data(test_data, install_dir: installed_test_bindir)\n install_subdir('test-images', install_dir: installed_test_bindir)\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://gnome/sources/gdk-pixbuf/2.44/gdk-pixbuf-2.44.4.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "93a1aac3f1427ae73457397582a2c38d049638a801788ccbd5f48ca607bdbd17"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://gitlab.gnome.org/GNOME/gdk-pixbuf"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "86cgx64hm1pnhnyq5y8139bkkyimagvz-nss-cacert-certdata-3.115",
      "name": "nss-cacert-certdata",
      "version": "3.115",
      "description": "Bundle of X.509 certificates of public Certificate Authorities (CA)",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MPL-2.0"
          }
        }
      ],
      "purl": "pkg:nix/nss-cacert-certdata@3.115",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/nss-dev/nss/archive/NSS_3_115_RTM.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "f0f78579a20eb6305924b071dce3706652b949a2e78ca105a195af56cbbfded0"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://curl.haxx.se/docs/caextract.html"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "87jbfz30hi740lp322y0z1gbkw307bqb-freefont-ttf-20120503",
      "name": "freefont-ttf",
      "version": "20120503",
      "description": "GNU Free UCS Outline Fonts",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/freefont-ttf@20120503",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://gnu/freefont/freefont-ttf-20120503.zip",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "2b79151c67034f143b37b5ea49dc1139bae25640680583ca1dbc98ad8be6ed55"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/freefont/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "89kp5ww3adl1fgcm41k357ky6vnqsy92-python3.13-six-1.17.0",
      "name": "six",
      "version": "1.17.0",
      "description": "Python 2 and 3 compatibility library",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/six@1.17.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/benjaminp/six/archive/refs/tags/1.17.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "b73f7d0be773e71261ba7a02e396e5d0d752755f4d5d6c9af6d8b8f19fca6876"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/benjaminp/six"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "8m2ddm6jplmw8gf8v5nnigjz2rqy827a-python3.13-roman-numerals-py-3.1.0",
      "name": "roman-numerals-py",
      "version": "3.1.0",
      "description": "Manipulate roman numerals",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "CC0-1.0"
          }
        }
      ],
      "purl": "pkg:nix/roman-numerals-py@3.1.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/AA-Turner/roman-numerals/archive/refs/tags/v3.1.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "60b174f636305eae3c88cbe6a9b8ff72871824fa7b46c097cdb3740d5f60a62b"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/AA-Turner/roman-numerals/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "8mk1lafnnrx0a6lvjh69afm8w3i4pvqx-harfbuzz-12.1.0",
      "name": "harfbuzz",
      "version": "12.1.0",
      "description": "OpenType text shaping engine",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/harfbuzz@12.1.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/harfbuzz/harfbuzz/releases/download/12.1.0/harfbuzz-12.1.0.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "e5c81b7f6e0b102dfb000cfa424538b8e896ab78a2f4b8a5ec8cae62ab43369e"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://harfbuzz.github.io/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "8spbwg31c7x2i6hpak8ay0d7blwbrzl9-bison-3.8.2",
      "name": "bison",
      "version": "3.8.2",
      "description": "Yacc-compatible parser generator",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/bison@3.8.2",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://gnu/bison/bison-3.8.2.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "06c9e13bdf7eb24d4ceb6b59205a4f67c2c7e7213119644430fe82fbd14a0abb"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/bison/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "8x173g5045yc28n7db2r23lgcql197g9-python3.13-sphinxcontrib-devhelp-2.0.0-dist",
      "name": "sphinxcontrib-devhelp",
      "version": "2.0.0",
      "description": "Sphinx extension which outputs Devhelp document",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-2-Clause"
          }
        }
      ],
      "purl": "pkg:nix/sphinxcontrib-devhelp@2.0.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/s/sphinxcontrib_devhelp/sphinxcontrib_devhelp-2.0.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/sphinx-doc/sphinxcontrib-devhelp"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "8ylha09ii5asrj464244fmkb5x0lga4d-python3.13-markdown-3.9.0",
      "name": "markdown",
      "version": "3.9.0",
      "description": "Python implementation of John Gruber's Markdown",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/markdown@3.9.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/Python-Markdown/markdown/archive/refs/tags/3.9.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "c2b0d2eda8cfd37d5829e8c3f58f37c60e5b325f228413125591a8bfed58eca8"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/Python-Markdown/markdown"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "94960sngigrxkp9c4xf1w5kkp99fn41j-coreutils-9.8-debug",
      "name": "coreutils",
      "version": "9.8",
      "description": "GNU Core Utilities",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/coreutils@9.8",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "(NB: we omit the new test, in order to avoid rerunning autoconf.)\n\nFrom 914972e80dbf82aac9ffe3ff1f67f1028e1a788b Mon Sep 17 00:00:00 2001\nFrom: Hannes Braun <hannes@hannesbraun.net>\nDate: Wed, 24 Sep 2025 21:20:49 +0200\nSubject: [PATCH] tail: fix tailing larger number of lines in regular files\n\n* src/tail.c (file_lines): Seek to the previous block instead of the\nbeginning (or a little before) of the block that was just scanned.\nOtherwise, the same block is read and scanned (at least partially)\nagain. This bug was introduced by commit v9.7-219-g976f8abc1.\n* tests/tail/basic-seek.sh: Add a new test.\n* tests/local.mk: Reference the new test.\n* NEWS: mention the bug fix.\n---\n NEWS                     |  4 ++++\n src/tail.c               |  2 +-\n tests/local.mk           |  1 +\n tests/tail/basic-seek.sh | 28 ++++++++++++++++++++++++++++\n 4 files changed, 34 insertions(+), 1 deletion(-)\n create mode 100755 tests/tail/basic-seek.sh\n\ndiff --git a/NEWS b/NEWS\nindex 7a1a73113e839f010aa6c734e6f07da68827b953..dc1d26879327761d35499815776477771758edd4 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -7,6 +7,10 @@ GNU coreutils NEWS                                    -*- outline -*-\n   `basenc --base58` would not operate correctly with input > 15561475 bytes.\n   [bug introduced with --base58 in coreutils-9.8]\n \n+  'tail' outputs the correct number of lines again for non-small -n values.\n+  Previously it may have output too few lines.\n+  [bug introduced in coreutils-9.8]\n+\n \n * Noteworthy changes in release 9.8 (2025-09-22) [stable]\n \ndiff --git a/src/tail.c b/src/tail.c\nindex b8bef1d91cdb6cde2b666b6c1575376e075eaeb8..c7779c77dfe4cf5a672a265b6e796c7153590170 100644\n--- a/src/tail.c\n+++ b/src/tail.c\n@@ -596,7 +596,7 @@ file_lines (char const *prettyname, int fd, struct stat const *sb,\n           goto free_buffer;\n         }\n \n-      pos = xlseek (fd, -bufsize, SEEK_CUR, prettyname);\n+      pos = xlseek (fd, -(bufsize + bytes_read), SEEK_CUR, prettyname);\n       bytes_read = read (fd, buffer, bufsize);\n       if (bytes_read < 0)\n         {\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 231cc20195294c9774ab68f523dd06059f4b0a5c Mon Sep 17 00:00:00 2001\nFrom: =?UTF-8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com>\nDate: Wed, 29 Oct 2025 23:41:55 +0000\nSubject: [PATCH] copy: avoid posix_fadvise bypassing copy offload behavior\n\n* src/copy-file-data.c (): pass 0 to posix_fadvise to indicate to EOF.\ncoreutils 9.8 used OFF_T_MAX instead, which triggered OpenZFS 2.2.2\nat least to synchronously (decompress and) populate the page cache.\nAddresses https://github.com/coreutils/coreutils/issues/122\n---\n src/copy-file-data.c | 7 +++++--\n 1 file changed, 5 insertions(+), 2 deletions(-)\n\ndiff --git a/src/copy-file-data.c b/src/copy-file-data.c\nindex 1eefd3071f58a54f725c96dfcd2fd352012398c5..9eb6f47244f0a62c2f4934c7663794fd4dcf21bf 100644\n--- a/src/copy-file-data.c\n+++ b/src/copy-file-data.c\n@@ -536,9 +536,12 @@ copy_file_data (int ifd, struct stat const *ist, off_t ipos, char const *iname,\n                && scantype != PLAIN_SCANTYPE)));\n \n   /* Don't bother calling fadvise for small copies, as it is not\n-     likely to help performance and might even hurt it.  */\n+     likely to help performance and might even hurt it.\n+     Note it's important to use a 0 length to indicate the whole file\n+     as OpenZFS 2.2.2 at least will otherwise synchronously\n+     (decompress and) populate the cache when given a specific length.  */\n   if (IO_BUFSIZE < ibytes)\n-    fdadvise (ifd, ipos, ibytes <= OFF_T_MAX - ipos ? ibytes : 0,\n+    fdadvise (ifd, ipos, ibytes < OFF_T_MAX - ipos ? ibytes : 0,\n               FADVISE_SEQUENTIAL);\n \n   /* If not making a sparse file, try to use a more-efficient\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "(NB: we drop the NEWS change to avoid conflicts)\n\nFrom 64b8fdb5b4767e0f833486507c3eae46ed1b40f8 Mon Sep 17 00:00:00 2001\nFrom: =?UTF-8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com>\nDate: Thu, 30 Oct 2025 13:02:48 +0000\nSubject: [PATCH] copy: don't avoid copy-offload upon SEEK_HOLE indicating\n non-sparse\n\n* src/copy-file-data.c (infer_scantype): Fall back to a plain copy\nif SEEK_HOLE indicates non-sparse, as zero copy avoids copy offload.\nThis was seen with transparently compressed files on OpenZFS.\n* tests/cp/sparse-perf.sh: Add a test case even though it might\nonly trigger on compressed file systems that don't support reflink.\n* NEWS: Mention the bug fix.\nAddresses https://github.com/coreutils/coreutils/issues/122\n---\n NEWS                    |  8 ++++++++\n src/copy-file-data.c    | 11 +++++++++--\n tests/cp/sparse-perf.sh | 10 ++++++++++\n 3 files changed, 27 insertions(+), 2 deletions(-)\n\ndiff --git a/src/copy-file-data.c b/src/copy-file-data.c\nindex 9eb6f47244f0a62c2f4934c7663794fd4dcf21bf..8fd25fee9201eda7bd0a8caf01f02821a3390448 100644\n--- a/src/copy-file-data.c\n+++ b/src/copy-file-data.c\n@@ -481,12 +481,19 @@ infer_scantype (int fd, struct stat const *sb, off_t pos,\n           if (scan_inference->hole_start < sb->st_size)\n             return LSEEK_SCANTYPE;\n \n-          /* Though the file likely has holes, SEEK_DATA and SEEK_HOLE\n+          /* Though the file may have holes, SEEK_DATA and SEEK_HOLE\n              didn't find any.  This can happen with file systems like\n              circa-2025 squashfs that support SEEK_HOLE only trivially.\n-             Fall back on ZERO_SCANTYPE.  */\n+             This can also happen due to transparent file compression,\n+             which can also indicate fewer than the usual number of blocks.  */\n+\n           if (lseek (fd, pos, SEEK_SET) < 0)\n             return ERROR_SCANTYPE;\n+\n+          /* we prefer to return PLAIN_SCANTYPE here so that copy offload\n+             continues to be used.  Falling through to ZERO_SCANTYPE would be\n+             less performant in the compressed file case.  */\n+          return PLAIN_SCANTYPE;\n         }\n     }\n   else if (pos < scan_inference->ext_start || errno == ENXIO)\ndiff --git a/tests/cp/sparse-perf.sh b/tests/cp/sparse-perf.sh\nindex 5a283c1fe65816a36342d9f583c1ed787947bf10..5ee984c527d7d8b6395d4193fcf81804b1135b8a 100755\n--- a/tests/cp/sparse-perf.sh\n+++ b/tests/cp/sparse-perf.sh\n@@ -35,6 +35,16 @@ cmp $other_partition_sparse k2 || fail=1\n grep ': avoided' cp.out && { cat cp.out; fail=1; }\n \n \n+# Create a large-non-sparse-but-compressible file\n+# Ensure we don't avoid copy offload which we saw with\n+# transparent compression on OpenZFS at least\n+# (as that triggers our sparse heuristic).\n+mls='might-look-sparse'\n+yes | head -n1M > \"$mls\" || framework_failure_\n+cp --debug \"$mls\" \"$mls.cp\" >cp.out || fail=1\n+cmp \"$mls\" \"$mls.cp\" || fail=1\n+grep ': avoided' cp.out && { cat cp.out; fail=1; }\n+\n \n # Create a large-but-sparse file on the current partition.\n # We disable relinking below, thus verifying SEEK_HOLE support\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 2c5754649e08a664f3d43f7bc1df08f498bc1554 Mon Sep 17 00:00:00 2001\nFrom: =?UTF-8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com>\nDate: Fri, 31 Oct 2025 15:37:55 +0000\nSubject: [PATCH] copy: be more defensive/restrictive with posix_fadvise\n\n* src/copy-file-data.c (copy_file_data): Only give the\nPOSIX_FADV_SEQUENTIAL hint when we _know_ we'll definitely\nuse a read/write loop to copy the data.  Also only apply\nthe hint to the whole file, as we've seen OpenZFS at least\nspecial case that.\n(sparse_copy): Update stale comment.\n---\n src/copy-file-data.c | 17 +++++++++--------\n 1 file changed, 9 insertions(+), 8 deletions(-)\n\ndiff --git a/src/copy-file-data.c b/src/copy-file-data.c\nindex 8fd25fee9201eda7bd0a8caf01f02821a3390448..c46b7edc5228f5f1e9c398d8ad7ff20b6fa60fb6 100644\n--- a/src/copy-file-data.c\n+++ b/src/copy-file-data.c\n@@ -105,8 +105,6 @@ is_CLONENOTSUP (int err)\n    If HOLE_SIZE, look for holes in the input; *HOLE_SIZE contains\n    the size of the current hole so far, and update *HOLE_SIZE\n    at end to be the size of the hole at the end of the copy.\n-   Set *TOTAL_N_READ to the number of bytes read; this counts\n-   the trailing hole, which has not yet been output.\n    Read and update *DEBUG as needed.\n    If successful, return the number of bytes copied,\n    otherwise diagnose the failure and return -1.  */\n@@ -542,14 +540,17 @@ copy_file_data (int ifd, struct stat const *ist, off_t ipos, char const *iname,\n            || (x->sparse_mode == SPARSE_AUTO\n                && scantype != PLAIN_SCANTYPE)));\n \n-  /* Don't bother calling fadvise for small copies, as it is not\n-     likely to help performance and might even hurt it.\n-     Note it's important to use a 0 length to indicate the whole file\n+  /* If we _know_ we're going to read data sequentially into the process,\n+     i.e., --reflink or --sparse are not in auto mode,\n+     give that hint to the kernel so it can tune caching behavior.\n+     Also we don't bother calling fadvise for small copies,\n+     as it is not likely to help performance and might even hurt it.\n+     Also we only apply this hint for the whole file (0 length)\n      as OpenZFS 2.2.2 at least will otherwise synchronously\n      (decompress and) populate the cache when given a specific length.  */\n-  if (IO_BUFSIZE < ibytes)\n-    fdadvise (ifd, ipos, ibytes < OFF_T_MAX - ipos ? ibytes : 0,\n-              FADVISE_SEQUENTIAL);\n+  if (ipos == 0 && ibytes == COUNT_MAX\n+      && (x->reflink_mode != REFLINK_AUTO || x->sparse_mode != SPARSE_AUTO))\n+    fdadvise (ifd, 0, 0, FADVISE_SEQUENTIAL);\n \n   /* If not making a sparse file, try to use a more-efficient\n      buffer size.  */\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://ftpmirror.gnu.org/coreutils/coreutils-9.8.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "e6d4fd2d852c9141a1c2a18a13d146a0cd7e45195f72293a4e4c044ec6ccca15"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/coreutils/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "94j5bdf27k7f95hdw1ppqwggwxjw76jk-expat-2.7.3-dev",
      "name": "expat",
      "version": "2.7.3",
      "description": "Stream-oriented XML parser library written in C",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/expat@2.7.3",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/libexpat/libexpat/releases/download/R_2_7_3/expat-2.7.3.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "71df8f40706a7bb0a80a5367079ea75d91da4f8c65c58ec59bcdfbf7decdab9f"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://libexpat.github.io/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "981drckismr9lm8znsk0gdmid0byhkqm-python3.13-pytest-xdist-3.8.0-dist",
      "name": "pytest-xdist",
      "version": "3.8.0",
      "description": "Pytest plugin for distributed testing",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/pytest-xdist@3.8.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/pytest-dev/pytest-xdist/archive/refs/tags/v3.8.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "db1df39e6f76c28f030ac85fe6c60ad2cb67112834a155dbc6c59101a4e3ea84"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/pytest-dev/pytest-xdist"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "99phdy1nm4h5765rvj143k51hl3kwq3s-python3.13-charset-normalizer-3.4.3-dist",
      "name": "charset-normalizer",
      "version": "3.4.3",
      "description": "Python module for encoding and language detection",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/charset-normalizer@3.4.3",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/jawah/charset_normalizer/archive/refs/tags/3.4.3.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "6441f1044ae38efa1fa9edeb92482212e10972896ec28fb69d9acb7ebb079f94"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://charset-normalizer.readthedocs.io/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "9akmc7jifcs1di42bchv8zfx98i6sx1f-python3.13-pytest-timeout-2.4.0",
      "name": "pytest-timeout",
      "version": "2.4.0",
      "description": "Pytest plugin to abort hanging tests",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/pytest-timeout@2.4.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/pytest-dev/pytest-timeout/archive/refs/tags/2.4.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "3464f2dc7b9aeb210c5974032503b66790c3ddc9574d95c41fa0cd4013121ad4"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/pytest-dev/pytest-timeout/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "9babi8y8p9crps6l8sz5gr5xm5fljw1h-libxcb-1.17.0",
      "name": "libxcb",
      "version": "1.17.0",
      "description": "C interface to the X Window System protocol",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "X11"
          }
        }
      ],
      "purl": "pkg:nix/libxcb@1.17.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://xorg/individual/lib/libxcb-1.17.0.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "599ebf9996710fea71622e6e184f3a8ad5b43d0e5fa8c4e407123c88a59a6d55"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://gitlab.freedesktop.org/xorg/lib/libxcb"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "9c86vkfs0idys4vhp35bjvz276g0mfmc-python3.13-mypy-1.17.1",
      "name": "mypy",
      "version": "1.17.1",
      "description": "Optional static typing for Python",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/mypy@1.17.1",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/mypy/test/testcheck.py\n+++ b/mypy/test/testcheck.py\n@@ -5,6 +5,8 @@\n import os\n import re\n import sys\n+import tempfile\n+from pathlib import Path\n \n from mypy import build\n from mypy.build import Graph\n@@ -46,15 +48,16 @@\n if sys.version_info < (3, 13):\n     typecheck_files.remove(\"check-python313.test\")\n \n-# Special tests for platforms with case-insensitive filesystems.\n-if sys.platform not in (\"darwin\", \"win32\"):\n-    typecheck_files.remove(\"check-modules-case.test\")\n-\n \n class TypeCheckSuite(DataSuite):\n     files = typecheck_files\n \n     def run_case(self, testcase: DataDrivenTestCase) -> None:\n+        if os.path.basename(testcase.file) == \"check-modules-case.test\":\n+            with tempfile.NamedTemporaryFile(prefix=\"test\", dir=\".\") as temp_file:\n+                temp_path = Path(temp_file.name)\n+                if not temp_path.with_name(temp_path.name.upper()).exists():\n+                    pytest.skip(\"File system is not case‐insensitive\")\n         if lxml is None and os.path.basename(testcase.file) == \"check-reports.test\":\n             pytest.skip(\"Cannot import lxml. Is it installed?\")\n         incremental = (\n--- a/mypy/test/testfscache.py\n+++ b/mypy/test/testfscache.py\n@@ -4,7 +4,6 @@\n \n import os\n import shutil\n-import sys\n import tempfile\n import unittest\n \n@@ -83,7 +82,7 @@\n             assert self.isfile_case(os.path.join(other, \"other_dir.py\"))\n             assert not self.isfile_case(os.path.join(other, \"Other_Dir.py\"))\n             assert not self.isfile_case(os.path.join(other, \"bar.py\"))\n-            if sys.platform in (\"win32\", \"darwin\"):\n+            if os.path.exists(os.path.join(other, \"PKG/other_dir.py\")):\n                 # We only check case for directories under our prefix, and since\n                 # this path is not under the prefix, case difference is fine.\n                 assert self.isfile_case(os.path.join(other, \"PKG/other_dir.py\"))\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/python/mypy/archive/refs/tags/v1.17.1.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "15f38d50208c5356c95c7c771871f8e93bbec1853914b3cea9e0920a2d5b452b"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.mypy-lang.org"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "9jixqayj11r1b2r4ikrwb3kc51innr6j-brotli-1.1.0-dev",
      "name": "brotli",
      "version": "1.1.0",
      "description": "General-purpose lossless compression library with CLI",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/brotli@1.1.0",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "reverted:\n--- b/CMakeLists.txt\n+++ a/CMakeLists.txt\n@@ -146,8 +146,6 @@\n   add_definitions(-DOS_FREEBSD)\n elseif(${CMAKE_SYSTEM_NAME} MATCHES \"Darwin\")\n   add_definitions(-DOS_MACOSX)\n-  set(CMAKE_MACOS_RPATH TRUE)\n-  set(CMAKE_INSTALL_NAME_DIR \"${CMAKE_INSTALL_PREFIX}/lib\")\n endif()\n \n function(transform_sources_list INPUT_FILE OUTPUT_FILE)\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/google/brotli/archive/v1.1.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "32f71e45c95ed9d4a492e702d8f96c0a2cec21ff22bfde5df178ea7b0dbaeb07"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/google/brotli"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "9klmcwb3fd1b1gv4yxl02y7cxv21m84f-python3.13-pysocks-1.7.1",
      "name": "pysocks",
      "version": "1.7.1",
      "description": "SOCKS module for Python",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/pysocks@1.7.1",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/P/PySocks/PySocks-1.7.1.tar.gz"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "9lvmgjwhra5s9swb1v0mfb4i6kb8wvjk-bootstrap-stage1-gcc-wrapper-",
      "name": "bootstrap-stage1-gcc-wrapper",
      "version": "",
      "description": "System C compiler (wrapper script)",
      "scope": "required",
      "purl": "pkg:nix/bootstrap-stage1-gcc-wrapper"
    },
    {
      "type": "application",
      "bom-ref": "9syvjaiiq2yj98bdzfxqdki1v47hvah9-python3.13-setuptools-scm-9.0.1-dist",
      "name": "setuptools-scm",
      "version": "9.0.1",
      "description": "Handles managing your python package versions in scm metadata",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/setuptools-scm@9.0.1",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/s/setuptools_scm/setuptools_scm-9.0.1.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "46e1cf7e8a09652b613f9ba4fe9b55f2f496e7a233e4e00d25a7cb41f94c3c0b"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/pypa/setuptools_scm/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "9znmwb4l7bs1pfphc7b65qfmsr4as2pi-python3.13-bootstrap-packaging-25.0",
      "name": "python3.13-bootstrap-packaging",
      "version": "25.0",
      "description": "Core utilities for Python packages",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-2-Clause"
          }
        },
        {
          "license": {
            "id": "Apache-2.0"
          }
        }
      ],
      "purl": "pkg:nix/python3.13-bootstrap-packaging@25.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/p/packaging/packaging-25.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://packaging.pypa.io/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "a2v4hzavi1ms7j5f7pkx4m0yh8a1kr8f-libmicrohttpd-1.0.2",
      "name": "libmicrohttpd",
      "version": "1.0.2",
      "description": "Embeddable HTTP server library",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "LGPL-2.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/libmicrohttpd@1.0.2",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://gnu/libmicrohttpd/libmicrohttpd-1.0.2.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "df324fcd0834175dab07483133902d9774a605bfa298025f69883288fd20a8c7"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/libmicrohttpd/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "a9zjkxa2lhxfczxh7rbv1gg92ssinpq2-findutils-4.10.0-info",
      "name": "findutils",
      "version": "4.10.0",
      "description": "GNU Find Utilities, the basic directory searching utilities of the GNU operating system",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/findutils@4.10.0",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/locate/Makefile.in\n+++ b/locate/Makefile.in\n@@ -2357,7 +2357,7 @@ updatedb: updatedb.sh Makefile\n \tchmod +x $@\n \n install-data-hook:\n-\t$(top_srcdir)/build-aux/mkinstalldirs $(DESTDIR)$(localstatedir)\n+\t#$(top_srcdir)/build-aux/mkinstalldirs $(DESTDIR)$(localstatedir)\n \n dblocation.texi:\n \techo '@set LOCATE_DB $(LOCATE_DB)' > $@.tmp\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://ftpmirror.gnu.org/findutils/findutils-4.10.0.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "1387e0b67ff247d2abde998f90dfbf70c1491391a59ddfecb8ae698789f0a4f5"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/findutils/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "alqgk8hwknn9yd6c9x7vz4wnya9lch3s-python3.13-sphinxcontrib-qthelp-2.0.0-dist",
      "name": "sphinxcontrib-qthelp",
      "version": "2.0.0",
      "description": "Sphinx extension which outputs QtHelp document",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-2-Clause"
          }
        }
      ],
      "purl": "pkg:nix/sphinxcontrib-qthelp@2.0.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/s/sphinxcontrib_qthelp/sphinxcontrib_qthelp-2.0.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/sphinx-doc/sphinxcontrib-qthelp"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "apbwfc86q79h698lki1xk1di3sz739lx-libedit-20251016-3.1-dev",
      "name": "libedit",
      "version": "20251016-3.1",
      "description": "Port of the NetBSD Editline library (libedit)",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/libedit@20251016-3.1",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- libedit-20120311-3.0/src/chartype.h\t2012-03-11 10:54:58.000000000 +0100\n+++ libedit-20120311-3.0/src/chartype.h\t2012-05-03 19:00:20.651847423 +0200\n@@ -56,9 +56,11 @@\n /* Oh for a <uchar.h> with char32_t and __STDC_UTF_32__ in it...\n  * ref: ISO/IEC DTR 19769\n  */\n+#ifndef __CYGWIN__\n #if WCHAR_MAX < INT32_MAX\n #warning Build environment does not support non-BMP characters\n #endif\n+#endif\n \n #ifndef HAVE_WCSDUP\n wchar_t *wcsdup(const wchar_t *s);\n--- libedit-20120311-3.0/src/editline/readline.h\t2011-02-26 23:42:59.000000000 +0100\n+++ libedit-20120311-3.0/src/editline/readline.h\t2012-05-03 19:00:49.211244803 +0200\n@@ -75,7 +75,7 @@ typedef KEYMAP_ENTRY *Keymap;\n \n #ifndef CTRL\n #include <sys/ioctl.h>\n-#if !defined(__sun) && !defined(__hpux) && !defined(_AIX)\n+#if !defined(__sun) && !defined(__hpux) && !defined(_AIX) && !defined(__CYGWIN__)\n #include <sys/ttydefaults.h>\n #endif\n #ifndef CTRL\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://thrysoee.dk/editline/libedit-20251016-3.1.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "21362b00653bbfc1c71f71a7578da66b5b5203559d43134d2dd7719e313ce041"
            }
          ]
        },
        {
          "type": "website",
          "url": "http://www.thrysoee.dk/editline/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "aprmzm3zhnzxbsh644apphykbpl0ybbg-yasm-1.3.0",
      "name": "yasm",
      "version": "1.3.0",
      "description": "Complete rewrite of the NASM assembler",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-2-Clause"
          }
        }
      ],
      "purl": "pkg:nix/yasm@1.3.0",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/libyasm/bitvect.h b/libyasm/bitvect.h\nindex 3aee3a53..a13470ad 100644\n--- a/libyasm/bitvect.h\n+++ b/libyasm/bitvect.h\n@@ -83,7 +83,11 @@ typedef  Z_longword         *Z_longwordptr;\n     #ifdef MACOS_TRADITIONAL\n         #define boolean Boolean\n     #else\n-        typedef enum boolean { false = FALSE, true = TRUE } boolean;\n+        #if __STDC_VERSION__ < 202311L\n+             typedef enum boolean { false = FALSE, true = TRUE } boolean;\n+        #else\n+             typedef bool boolean;\n+        #endif\n     #endif\n #endif\n \n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz"
        },
        {
          "type": "website",
          "url": "http://www.tortall.net/projects/yasm/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "asjc9fnc5x1qlfyfixrh5gr5rkjaa5rw-python3.13-html5lib-1.1",
      "name": "html5lib",
      "version": "1.1",
      "description": "HTML parser based on WHAT-WG HTML5 specification",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/html5lib@1.1",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/html5lib/tests/conftest.py\n+++ b/html5lib/tests/conftest.py\n@@ -99,10 +99,19 @@\n \n     if _tree_construction in dir_and_parents:\n         if path.ext == \".dat\":\n-            return TreeConstructionFile(path, parent)\n+            return TreeConstructionFile.from_parent(parent, fspath=path)\n     elif _tokenizer in dir_and_parents:\n         if path.ext == \".test\":\n-            return TokenizerFile(path, parent)\n+            return TokenizerFile.from_parent(parent, fspath=path)\n     elif _sanitizer_testdata in dir_and_parents:\n         if path.ext == \".dat\":\n-            return SanitizerFile(path, parent)\n+            return SanitizerFile.from_parent(parent, fspath=path)\n+\n+\n+# Tiny wrapper to allow .from_parent constructors on older pytest for PY27\n+if not hasattr(pytest.Item.__base__, \"from_parent\"):\n+    @classmethod\n+    def from_parent(cls, parent, **kwargs):\n+        return cls(parent=parent, **kwargs)\n+\n+    pytest.Item.__base__.from_parent = from_parent\n--- a/html5lib/tests/sanitizer.py\n+++ b/html5lib/tests/sanitizer.py\n@@ -13,7 +13,7 @@\n         with codecs.open(str(self.fspath), \"r\", encoding=\"utf-8\") as fp:\n             tests = json.load(fp)\n         for i, test in enumerate(tests):\n-            yield SanitizerTest(str(i), self, test=test)\n+            yield SanitizerTest.from_parent(self, name=str(i), test=test)\n \n \n class SanitizerTest(pytest.Item):\n--- a/html5lib/tests/tokenizer.py\n+++ b/html5lib/tests/tokenizer.py\n@@ -192,7 +192,7 @@\n             tests = json.load(fp)\n         if 'tests' in tests:\n             for i, test in enumerate(tests['tests']):\n-                yield TokenizerTestCollector(str(i), self, testdata=test)\n+                yield TokenizerTestCollector.from_parent(self, name=str(i), testdata=test)\n \n \n class TokenizerTestCollector(pytest.Collector):\n@@ -207,10 +207,10 @@\n     def collect(self):\n         for initialState in self.testdata[\"initialStates\"]:\n             initialState = capitalize(initialState)\n-            item = TokenizerTest(initialState,\n-                                 self,\n-                                 self.testdata,\n-                                 initialState)\n+            item = TokenizerTest.from_parent(self,\n+                                             name=initialState,\n+                                             test=self.testdata,\n+                                             initialState=initialState)\n             if self.testdata[\"input\"] is None:\n                 item.add_marker(pytest.mark.skipif(True, reason=\"Relies on lone surrogates\"))\n             yield item\n--- a/html5lib/tests/tree_construction.py\n+++ b/html5lib/tests/tree_construction.py\n@@ -26,7 +26,7 @@\n     def collect(self):\n         tests = TestData(str(self.fspath), \"data\")\n         for i, test in enumerate(tests):\n-            yield TreeConstructionTest(str(i), self, testdata=test)\n+            yield TreeConstructionTest.from_parent(self, name=str(i), testdata=test)\n \n \n class TreeConstructionTest(pytest.Collector):\n@@ -48,11 +48,11 @@\n                 nodeid = \"%s::parser::namespaced\" % treeName\n             else:\n                 nodeid = \"%s::parser::void-namespace\" % treeName\n-            item = ParserTest(nodeid,\n-                              self,\n-                              self.testdata,\n-                              treeAPIs[\"builder\"] if treeAPIs is not None else None,\n-                              namespaceHTMLElements)\n+            item = ParserTest.from_parent(self,\n+                                          name=nodeid,\n+                                          test=self.testdata,\n+                                          treeClass=treeAPIs[\"builder\"] if treeAPIs is not None else None,\n+                                          namespaceHTMLElements=namespaceHTMLElements)\n             item.add_marker(getattr(pytest.mark, treeName))\n             item.add_marker(pytest.mark.parser)\n             if namespaceHTMLElements:\n@@ -61,10 +61,10 @@\n \n     def _getTreeWalkerTests(self, treeName, treeAPIs):\n         nodeid = \"%s::treewalker\" % treeName\n-        item = TreeWalkerTest(nodeid,\n-                              self,\n-                              self.testdata,\n-                              treeAPIs)\n+        item = TreeWalkerTest.from_parent(self,\n+                                          name=nodeid,\n+                                          test=self.testdata,\n+                                          treeAPIs=treeAPIs)\n         item.add_marker(getattr(pytest.mark, treeName))\n         item.add_marker(pytest.mark.treewalker)\n         yield item\n--- a/requirements-test.txt\n+++ b/requirements-test.txt\n@@ -3,7 +3,7 @@\n tox>=3.15.1,<4\n flake8>=3.8.1,<3.9\n pytest>=4.6.10,<5 ; python_version < '3'\n-pytest>=5.4.2,<6 ; python_version >= '3'\n+pytest>=5.4.2,<7 ; python_version >= '3'\n coverage>=5.1,<6\n pytest-expect>=1.1.0,<2\n mock>=3.0.5,<4 ; python_version < '3.6'\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/h/html5lib/html5lib-1.1.tar.gz"
        },
        {
          "type": "website",
          "url": "https://github.com/html5lib/html5lib-python"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "b1s12hvv9nsynn6w0pvid8g4gfv5yak7-python3.13-jinja2-3.1.6",
      "name": "jinja2",
      "version": "3.1.6",
      "description": "Very fast and expressive template engine",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/jinja2@3.1.6",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/j/jinja2/jinja2-3.1.6.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://jinja.palletsprojects.com"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "b6rhgkvrwzq0bzfpaw79b60i1bfbhk3w-freetype-2.13.3",
      "name": "freetype",
      "version": "2.13.3",
      "description": "Font rendering engine",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-2.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/freetype@2.13.3",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "Index: freetype-2.10.0/modules.cfg\n===================================================================\n--- freetype-2.10.0.orig/modules.cfg\n+++ freetype-2.10.0/modules.cfg\n@@ -120,6 +120,6 @@ AUX_MODULES += cache\n # TrueType GX/AAT table validation.  Needs ftgxval.c below.\n #\n-# AUX_MODULES += gxvalid\n+AUX_MODULES += gxvalid\n \n # Support for streams compressed with gzip (files with suffix .gz).\n #\n@@ -143,6 +143,6 @@ AUX_MODULES += bzip2\n # OpenType table validation.  Needs ftotval.c below.\n #\n-# AUX_MODULES += otvalid\n+AUX_MODULES += otvalid\n \n # Auxiliary PostScript driver component to share common code.\n #\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "Index: freetype-2.10.0/include/freetype/config/ftoption.h\n--- a/include/freetype/config/ftoption.h\n+++ b/include/freetype/config/ftoption.h\n@@ -126,7 +126,7 @@ FT_BEGIN_HEADER\n    * macro is not defined, FreeType offers alternative LCD rendering\n    * technology that produces excellent output without LCD filtering.\n    */\n-/* #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING */\n+#define FT_CONFIG_OPTION_SUBPIXEL_RENDERING\n \n \n   /**************************************************************************\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://savannah/freetype/freetype-2.13.3.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "0550350666d427c74daeb85d5ac7bb353acba5f76956395995311a9c6f063289"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.freetype.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "bcv98jffnvqxvyncf1bayz50r9wj7g3q-libwebp-1.6.0",
      "name": "libwebp",
      "version": "1.6.0",
      "description": "Tools and library for the WebP image format",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/libwebp@1.6.0",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/CMakeLists.txt\n+++ b/CMakeLists.txt\n@@ -149,6 +149,16 @@\n   add_definitions(-DWEBP_DLL)\n endif()\n \n+# Compatibility with autoconf configure script's way of setting this\n+if(CMAKE_C_BYTE_ORDER STREQUAL \"BIG_ENDIAN\")\n+  set(WORDS_BIGENDIAN TRUE)\n+elseif(CMAKE_C_BYTE_ORDER STREQUAL \"LITTLE_ENDIAN\")\n+  set(WORDS_BIGENDIAN FALSE)\n+else()\n+  set(WORDS_BIGENDIAN FALSE)\n+  message(WARNING \"Endianness could not be determined.\")\n+endif()\n+\n # pkg-config variables used by *.pc.in.\n set(prefix ${CMAKE_INSTALL_PREFIX})\n set(exec_prefix \"\\${prefix}\")\n--- a/cmake/config.h.in\n+++ b/cmake/config.h.in\n@@ -108,12 +108,4 @@\n \n /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most\n    significant byte first (like Motorola and SPARC, unlike Intel). */\n-#if defined AC_APPLE_UNIVERSAL_BUILD\n-# if defined __BIG_ENDIAN__\n-#  define WORDS_BIGENDIAN 1\n-# endif\n-#else\n-# ifndef WORDS_BIGENDIAN\n-#  undef WORDS_BIGENDIAN\n-# endif\n-#endif\n+#cmakedefine WORDS_BIGENDIAN 1\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/webmproject/libwebp/archive/v1.6.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "ee2e1f1814ec4e30240730a356a5ea5f89f6da3e9d2e017fd26cf86a3340e395"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://developers.google.com/speed/webp/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "bf4lwr2cxcwzxgi7ww08v831f01sxr8f-python3.13-cython-3.1.4",
      "name": "cython",
      "version": "3.1.4",
      "description": "Optimising static compiler for both the Python and the extended Cython programming languages",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "Apache-2.0"
          }
        }
      ],
      "purl": "pkg:nix/cython@3.1.4",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/cython/cython/archive/refs/tags/3.1.4.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "a858fbc347d063a5f5a000cbb0083015e7f3c7ddbf3e682ff63e52eafd2c74f8"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://cython.org"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "bhl88ddg6ggn44afpyaans65w77q0w2j-python3.13-pygments-2.19.2-dist",
      "name": "pygments",
      "version": "2.19.2",
      "description": "Generic syntax highlighter",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-2-Clause"
          }
        }
      ],
      "purl": "pkg:nix/pygments@2.19.2",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/p/pygments/pygments-2.19.2.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://pygments.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "biz055ybc5x1vxar1dqlrjsw7w9axgc2-tcl-8.6.16",
      "name": "tcl",
      "version": "8.6.16",
      "description": "Tcl scripting language",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "TCL"
          }
        }
      ],
      "purl": "pkg:nix/tcl@8.6.16",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://sourceforge/tcl/tcl8.6.16-src.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "91cb8fa61771c63c262efb553059b7c7ad6757afa5857af6265e4b0bdc2a14a5"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.tcl.tk/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "bjp0l4kpk690mi30bpfx2pjw1nhwibr9-python3.13-pluggy-1.6.0",
      "name": "pluggy",
      "version": "1.6.0",
      "description": "Plugin and hook calling mechanisms for Python",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/pluggy@1.6.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/pytest-dev/pluggy/archive/refs/tags/1.6.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "a644233c9b920125a6cf0ce9f47fd44c90500ebdabd918a87f1a45d77e650207"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/pytest-dev/pluggy"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "bkjfh4f71d24blykcljpg6gcrkqyx29j-texinfo-7.2",
      "name": "texinfo",
      "version": "7.2",
      "description": "GNU documentation system",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/texinfo@7.2",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://ftpmirror.gnu.org/texinfo/texinfo-7.2.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "0329d7788fbef113fa82cb80889ca197a344ce0df7646fe000974c5d714363a6"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/texinfo/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "bs1i28xzj6hm9m24kvz8xgv2wq6n0knc-libtasn1-4.20.0",
      "name": "libtasn1",
      "version": "4.20.0",
      "description": "ASN.1 library",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "LGPL-2.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/libtasn1@4.20.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://gnu/libtasn1/libtasn1-4.20.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "92e0e3bd4c02d4aeee76036b2ddd83f0c732ba4cda5cb71d583272b23587a76c"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/libtasn1/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "bvc05rwiim4jm0pb96l2603jsli56yc0-python3.13-attrs-25.3.0-dist",
      "name": "attrs",
      "version": "25.3.0",
      "description": "Python attributes without boilerplate",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/attrs@25.3.0",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/pyproject.toml b/pyproject.toml\nindex 0b59809..8811148 100644\n--- a/pyproject.toml\n+++ b/pyproject.toml\n@@ -1,7 +1,7 @@\n # SPDX-License-Identifier: MIT\n \n [build-system]\n-requires = [\"hatchling\", \"hatch-vcs\", \"hatch-fancy-pypi-readme>=23.2.0\"]\n+requires = [\"hatchling\"]\n build-backend = \"hatchling.build\"\n \n \n@@ -26,7 +26,8 @@ classifiers = [\n   \"Typing :: Typed\",\n ]\n dependencies = []\n-dynamic = [\"version\", \"readme\"]\n+dynamic = [\"readme\"]\n+version = \"25.3.0\"\n \n [project.optional-dependencies]\n tests-mypy = [\n@@ -72,53 +73,9 @@ Funding = \"https://github.com/sponsors/hynek\"\n Tidelift = \"https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi\"\n \n \n-[tool.hatch.version]\n-source = \"vcs\"\n-raw-options = { local_scheme = \"no-local-version\" }\n-\n [tool.hatch.build.targets.wheel]\n packages = [\"src/attr\", \"src/attrs\"]\n \n-[tool.hatch.metadata.hooks.fancy-pypi-readme]\n-content-type = \"text/markdown\"\n-\n-# PyPI doesn't support the <picture> tag.\n-[[tool.hatch.metadata.hooks.fancy-pypi-readme.fragments]]\n-text = \"\"\"<p align=\"center\">\n-  <a href=\"https://www.attrs.org/\">\n-    <img src=\"https://raw.githubusercontent.com/python-attrs/attrs/main/docs/_static/attrs_logo.svg\" width=\"35%\" alt=\"attrs\" />\n-  </a>\n-</p>\n-\"\"\"\n-\n-[[tool.hatch.metadata.hooks.fancy-pypi-readme.fragments]]\n-path = \"README.md\"\n-start-after = \"<!-- teaser-begin -->\"\n-\n-[[tool.hatch.metadata.hooks.fancy-pypi-readme.fragments]]\n-text = \"\"\"\n-\n-## Release Information\n-\n-\"\"\"\n-\n-[[tool.hatch.metadata.hooks.fancy-pypi-readme.fragments]]\n-path = \"CHANGELOG.md\"\n-pattern = \"\\n(###.+?\\n)## \"\n-\n-[[tool.hatch.metadata.hooks.fancy-pypi-readme.fragments]]\n-text = \"\"\"\n-\n----\n-\n-[Full changelog →](https://www.attrs.org/en/stable/changelog.html)\n-\"\"\"\n-\n-# Point sponsor image URLs to versions.\n-[[tool.hatch.metadata.hooks.fancy-pypi-readme.substitutions]]\n-pattern = 'docs\\/_static\\/sponsors'\n-replacement = 'https://www.attrs.org/en/$HFPR_VERSION/_static/sponsors'\n-\n [[tool.sponcon.sponsors]]\n title = \"Variomedia AG\"\n url = \"https://www.variomedia.de/\"\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/a/attrs/attrs-25.3.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/python-attrs/attrs"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "c00ad9jxnhb7kbpdgvp2mf609s3m65mc-git-minimal-2.51.2-debug",
      "name": "git-minimal",
      "version": "2.51.2",
      "description": "Distributed version control system",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-2.0"
          }
        }
      ],
      "purl": "pkg:nix/git-minimal@2.51.2",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "This patch does two things: (1) use the right name for `docbook2texi',\nand (2) make sure `gitman.info' isn't produced since it's broken (duplicate\nnode names).\n\ndiff --git a/Documentation/Makefile b/Documentation/Makefile\nindex 26a2342bea..ceccd67ebb 100644\n--- a/Documentation/Makefile\n+++ b/Documentation/Makefile\n@@ -132,7 +132,7 @@ HTML_REPO = ../../git-htmldocs\n \n MAKEINFO = makeinfo\n INSTALL_INFO = install-info\n-DOCBOOK2X_TEXI = docbook2x-texi\n+DOCBOOK2X_TEXI = docbook2texi\n DBLATEX = dblatex\n ASCIIDOC_DBLATEX_DIR = /etc/asciidoc/dblatex\n DBLATEX_COMMON = -p $(ASCIIDOC_DBLATEX_DIR)/asciidoc-dblatex.xsl -s $(ASCIIDOC_DBLATEX_DIR)/asciidoc-dblatex.sty\n@@ -250,7 +250,7 @@ man1: $(DOC_MAN1)\n man5: $(DOC_MAN5)\n man7: $(DOC_MAN7)\n \n-info: git.info gitman.info\n+info: git.info\n \n pdf: user-manual.pdf\n \n@@ -266,10 +266,9 @@ install-man: man\n \n install-info: info\n \t$(INSTALL) -d -m 755 $(DESTDIR)$(infodir)\n-\t$(INSTALL) -m 644 git.info gitman.info $(DESTDIR)$(infodir)\n+\t$(INSTALL) -m 644 git.info $(DESTDIR)$(infodir)\n \tif test -r $(DESTDIR)$(infodir)/dir; then \\\n \t  $(INSTALL_INFO) --info-dir=$(DESTDIR)$(infodir) git.info ;\\\n-\t  $(INSTALL_INFO) --info-dir=$(DESTDIR)$(infodir) gitman.info ;\\\n \telse \\\n \t  echo \"No directory found in $(DESTDIR)$(infodir)\" >&2 ; \\\n \tfi\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/git-sh-i18n.sh b/git-sh-i18n.sh\nindex e1d917fd27..e90f8e1414 100644\n--- a/git-sh-i18n.sh\n+++ b/git-sh-i18n.sh\n@@ -26,7 +26,7 @@ then\n elif test -n \"$GIT_INTERNAL_GETTEXT_TEST_FALLBACKS\"\n then\n \t: no probing necessary\n-elif type gettext.sh >/dev/null 2>&1\n+elif type @gettext@/bin/gettext.sh >/dev/null 2>&1\n then\n \t# GNU libintl's gettext.sh\n \tGIT_INTERNAL_GETTEXT_SH_SCHEME=gnu\n@@ -43,7 +43,8 @@ export GIT_INTERNAL_GETTEXT_SH_SCHEME\n case \"$GIT_INTERNAL_GETTEXT_SH_SCHEME\" in\n gnu)\n \t# Use libintl's gettext.sh, or fall back to English if we can't.\n-\t. gettext.sh\n+\t. @gettext@/bin/gettext.sh\n+\texport PATH=@gettext@/bin:$PATH\n \t;;\n gettext_without_eval_gettext)\n \t# Solaris has a gettext(1) but no eval_gettext(1)\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/Documentation/git-send-email.adoc b/Documentation/git-send-email.adoc\nindex 5d13a856a7..5c9978c1e4 100644\n--- a/Documentation/git-send-email.adoc\n+++ b/Documentation/git-send-email.adoc\n@@ -190,7 +190,7 @@ Sending\n \tThe command will be executed in the shell if necessary.  Default\n \tis the value of `sendemail.sendmailCmd`.  If unspecified, and if\n \t`--smtp-server` is also unspecified, `git send-email` will search\n-\tfor `sendmail` in `/usr/sbin`, `/usr/lib` and `$PATH`.\n+\tfor `sendmail` in `$PATH`.\n \n --smtp-encryption=<encryption>::\n \tSpecify in what way encrypting begins for the SMTP connection.\n@@ -247,7 +247,7 @@ a password is obtained using linkgit:git-credential[1].\n \tIf set, specifies the outgoing SMTP server to use (e.g.\n \t`smtp.example.com` or a raw IP address).  If unspecified, and if\n \t`--sendmail-cmd` is also unspecified, the default is to search\n-\tfor `sendmail` in `/usr/sbin`, `/usr/lib` and `$PATH` if such a\n+\tfor `sendmail` in `$PATH` if such a\n \tprogram is available, falling back to `localhost` otherwise.\n +\n For backward compatibility, this option can also specify a full pathname\ndiff --git a/git-send-email.perl b/git-send-email.perl\nindex 798d59b84f..69c9cc2a7d 100755\n--- a/git-send-email.perl\n+++ b/git-send-email.perl\n@@ -1091,8 +1091,7 @@ sub expand_one_alias {\n }\n \n if (!defined $sendmail_cmd && !defined $smtp_server) {\n-\tmy @sendmail_paths = qw( /usr/sbin/sendmail /usr/lib/sendmail );\n-\tpush @sendmail_paths, map {\"$_/sendmail\"} split /:/, $ENV{PATH};\n+\tmy @sendmail_paths = map {\"$_/sendmail\"} split /:/, $ENV{PATH};\n \tforeach (@sendmail_paths) {\n \t\tif (-x $_) {\n \t\t\t$sendmail_cmd = $_;\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://www.kernel.org/pub/software/scm/git/git-2.51.2.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "233d7143a2d58e60755eee9b76f559ec73ea2b3c297f5b503162ace95966b4e3"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://git-scm.com/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "c6n2rxd7cwci4i490hpmr7bnhck7jb06-python3.13-sphinx-8.2.3",
      "name": "sphinx",
      "version": "8.2.3",
      "description": "Python documentation generator",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/sphinx@8.2.3",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/sphinx-doc/sphinx/archive/refs/tags/v8.2.3.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "168c82a4318328d37618c844ee00e924b99645685b30262571511a0537d7484c"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.sphinx-doc.org"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "cbrdpb8q8vmbw46b5gi6rbdsgdy7970a-python3.13-snowballstemmer-3.0.1-dist",
      "name": "snowballstemmer",
      "version": "3.0.1",
      "description": "16 stemmer algorithms (15 + Poerter English stemmer) generated from Snowball algorithms",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/snowballstemmer@3.0.1",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/s/snowballstemmer/snowballstemmer-3.0.1.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895"
            }
          ]
        },
        {
          "type": "website",
          "url": "http://sigal.saimon.org/en/latest/index.html"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "cbwl3p8df29wmwbldh7z5pb9935a7l7m-python3.13-sphinxcontrib-serializinghtml-2.0.0",
      "name": "sphinxcontrib-serializinghtml",
      "version": "2.0.0",
      "description": "Sphinx extension which outputs \"serialized\" HTML files (json and pickle)",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-2-Clause"
          }
        }
      ],
      "purl": "pkg:nix/sphinxcontrib-serializinghtml@2.0.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/s/sphinxcontrib_serializinghtml/sphinxcontrib_serializinghtml-2.0.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/sphinx-doc/sphinxcontrib-serializinghtml"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "cdppaa2izwlwcddcghshd58n0armz0cd-libavif-1.3.0",
      "name": "libavif",
      "version": "1.3.0",
      "description": "C implementation of the AV1 Image File Format",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-2-Clause"
          }
        }
      ],
      "purl": "pkg:nix/libavif@1.3.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/AOMediaCodec/libavif/archive/v1.3.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "d09e7ac295dad80561f49529e546369335a28cd1378b6e7744a8691b9a031491"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/AOMediaCodec/libavif"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "cndryingbipjlbwqgj5dqmsqgc3pychc-gobject-introspection-1.86.0-dev",
      "name": "gobject-introspection",
      "version": "1.86.0",
      "description": "Middleware layer between C libraries and language bindings",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-2.0"
          }
        },
        {
          "license": {
            "id": "LGPL-2.0"
          }
        }
      ],
      "purl": "pkg:nix/gobject-introspection@1.86.0",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/giscanner/scannermain.py b/giscanner/scannermain.py\nindex 64575557..1eb0a2b4 100644\n--- a/giscanner/scannermain.py\n+++ b/giscanner/scannermain.py\n@@ -95,6 +95,39 @@ def get_windows_option_group(parser):\n     return group\n \n \n+def _get_default_fallback_libpath():\n+    # Newer multiple-output-optimized stdenv has an environment variable\n+    # $outputLib which in turn specifies another variable which then is used as\n+    # the destination for the library contents (${!outputLib}/lib).\n+    store_path = os.environ.get(os.environ.get(\"outputLib\")) if \"outputLib\" in os.environ else None\n+    if store_path is None:\n+        outputs = os.environ.get(\"outputs\", \"out\").split()\n+        if \"lib\" in outputs:\n+            # For multiple output derivations let's try whether there is a $lib\n+            # environment variable and use that as the base store path.\n+            store_path = os.environ.get(\"lib\")\n+        elif \"out\" in outputs:\n+            # Otherwise we have a single output derivation, so the libraries\n+            # most certainly will end up in \"$out/lib\".\n+            store_path = os.environ.get(\"out\")\n+\n+    if store_path is not None:\n+        # Even if we have a $lib as output, there still should be a $lib/lib\n+        # directory.\n+        return os.path.join(store_path, 'lib')\n+    else:\n+        # If we haven't found a possible scenario, let's return an empty string\n+        # so that the shared library won't be prepended with a path.\n+        #\n+        # Note that this doesn't mean that all hope is lost, because after all\n+        # we can still use --fallback-library-path to set one.\n+        #\n+        # Also, we're not returning None, because that would make it very\n+        # difficult to disable adding fallback paths altogether using something\n+        # like: --fallback-library-path=\"\"\n+        return \"\"\n+\n+\n def _get_option_parser():\n     parser = optparse.OptionParser('%prog [options] sources',\n                                    version='%prog ' + giscanner.__version__)\n@@ -214,6 +247,10 @@ match the namespace prefix.\"\"\")\n     parser.add_option(\"\", \"--c-include\",\n                       action=\"append\", dest=\"c_includes\", default=[],\n                       help=\"headers which should be included in C programs\")\n+    parser.add_option(\"\", \"--fallback-library-path\",\n+                      action=\"store\", dest=\"fallback_libpath\",\n+                      default=_get_default_fallback_libpath(),\n+                      help=\"Path to prepend to unknown shared libraries\")\n     parser.add_option(\"\", \"--filelist\",\n                       action=\"store\", dest=\"filelist\", default=[],\n                       help=\"file containing headers and sources to be scanned\")\ndiff --git a/giscanner/shlibs.py b/giscanner/shlibs.py\nindex 9f8ab5df..af325022 100644\n--- a/giscanner/shlibs.py\n+++ b/giscanner/shlibs.py\n@@ -57,6 +57,12 @@ def _ldd_library_pattern(library_name):\n     $\"\"\" % re.escape(library_name), re.VERBOSE)\n \n \n+def _ldd_library_nix_pattern(library_name):\n+    nix_store_dir = re.escape('/nix/store'.rstrip('/'))\n+    pattern = r'(%s(?:/[^/]*)+lib%s[^A-Za-z0-9_-][^\\s\\(\\)]*)'\n+    return re.compile(pattern % (nix_store_dir, re.escape(library_name)))\n+\n+\n # This is a what we do for non-la files. We assume that we are on an\n # ELF-like system where ldd exists and the soname extracted with ldd is\n # a filename that can be opened with dlopen().\n@@ -108,7 +114,8 @@ def _resolve_non_libtool(options, binary, libraries):\n             output = output.decode(\"utf-8\", \"replace\")\n \n         shlibs = resolve_from_ldd_output(libraries, output)\n-        return list(map(sanitize_shlib_path, shlibs))\n+        fallback_libpath = options.fallback_libpath or \"\";\n+        return list(map(lambda p: os.path.join(fallback_libpath, p), map(sanitize_shlib_path, shlibs)))\n \n \n def sanitize_shlib_path(lib):\n@@ -117,19 +124,18 @@ def sanitize_shlib_path(lib):\n     # In case we get relative paths on macOS (like @rpath) then we fall\n     # back to the basename as well:\n     # https://gitlab.gnome.org/GNOME/gobject-introspection/issues/222\n-    if sys.platform == \"darwin\":\n-        if not os.path.isabs(lib):\n-            return os.path.basename(lib)\n-        return lib\n-    else:\n+\n+    # Always use absolute paths if available\n+    if not os.path.isabs(lib):\n         return os.path.basename(lib)\n+    return lib\n \n \n def resolve_from_ldd_output(libraries, output):\n     patterns = {}\n     for library in libraries:\n         if not os.path.isfile(library):\n-            patterns[library] = _ldd_library_pattern(library)\n+            patterns[library] = (_ldd_library_pattern(library), _ldd_library_nix_pattern(library))\n     if len(patterns) == 0:\n         return []\n \n@@ -141,8 +147,11 @@ def resolve_from_ldd_output(libraries, output):\n         if line.endswith(':'):\n             continue\n         for word in line.split():\n-            for library, pattern in patterns.items():\n-                m = pattern.match(word)\n+            for library, (pattern, nix_pattern) in patterns.items():\n+                if line.find('/nix/store') != -1:\n+                    m = nix_pattern.match(word)\n+                else:\n+                    m = pattern.match(word)\n                 if m:\n                     del patterns[library]\n                     shlibs.append(m.group())\ndiff --git a/giscanner/utils.py b/giscanner/utils.py\nindex 31c7ea48..630002a8 100644\n--- a/giscanner/utils.py\n+++ b/giscanner/utils.py\n@@ -114,16 +114,11 @@ def extract_libtool_shlib(la_file):\n     if dlname is None:\n         return None\n \n-    # Darwin uses absolute paths where possible; since the libtool files never\n-    # contain absolute paths, use the libdir field\n-    if platform.system() == 'Darwin':\n-        dlbasename = os.path.basename(dlname)\n-        libdir = _extract_libdir_field(la_file)\n-        if libdir is None:\n-            return dlbasename\n-        return libdir + '/' + dlbasename\n-    # Older libtools had a path rather than the raw dlname\n-    return os.path.basename(dlname)\n+    dlbasename = os.path.basename(dlname)\n+    libdir = _extract_libdir_field(la_file)\n+    if libdir is None:\n+        return dlbasename\n+    return libdir + '/' + dlbasename\n \n \n # Returns arguments for invoking libtool, if applicable, otherwise None\ndiff --git a/tests/scanner/test_shlibs.py b/tests/scanner/test_shlibs.py\nindex a8337c60..72789d76 100644\n--- a/tests/scanner/test_shlibs.py\n+++ b/tests/scanner/test_shlibs.py\n@@ -7,6 +7,30 @@ from giscanner.shlibs import resolve_from_ldd_output, sanitize_shlib_path\n \n class TestLddParser(unittest.TestCase):\n \n+    def test_resolve_from_ldd_output_nix(self):\n+        output = '''\\\n+            libglib-2.0.so.0 => /nix/store/gmrf09y7sfxrr0mcx90dba7w41jj2kzk-glib-2.58.1/lib/libglib-2.0.so.0 (0x00007f0ee1b28000)\n+            libgobject-2.0.so.0 => /nix/store/gmrf09y7sfxrr0mcx90dba7w41jj2kzk-glib-2.58.1/lib/libgobject-2.0.so.0 (0x00007f0ee18cf000)\n+            libgio-2.0.so.0 => /nix/store/gmrf09y7sfxrr0mcx90dba7w41jj2kzk-glib-2.58.1/lib/libgio-2.0.so.0 (0x00007f0ee1502000)\n+            libxml2.so.2 => /nix/store/72mxkk74cv266snkjpz1kwl1i2rg8rpc-libxml2-2.9.8/lib/libxml2.so.2 (0x00007f0ee119c000)\n+            libsqlite3.so.0 => /nix/store/ck5ay23hsmlc67pg3m34kzd1k2hhvww0-sqlite-3.24.0/lib/libsqlite3.so.0 (0x00007f0ee0e98000)\n+            libpsl.so.5 => /nix/store/qn3l2gn7m76f318676wflrs2z6d4rrkj-libpsl-0.20.2-list-2017-02-03/lib/libpsl.so.5 (0x00007f0ee0c88000)\n+            libc.so.6 => /nix/store/g2yk54hifqlsjiha3szr4q3ccmdzyrdv-glibc-2.27/lib/libc.so.6 (0x00007f0ee08d4000)\n+            libpcre.so.1 => /nix/store/hxbq8lpc53qsf1bc0dfcsm47wmcxzjvh-pcre-8.42/lib/libpcre.so.1 (0x00007f0ee0662000)\n+            /nix/store/g2yk54hifqlsjiha3szr4q3ccmdzyrdv-glibc-2.27/lib64/ld-linux-x86-64.so.2 (0x00007f0ee20ff000)\n+            libblkid.so.1 => /nix/store/q0kgnq21j0l2yd77gdlld371246cwghh-util-linux-2.32.1/lib/libblkid.so.1 (0x00007f0edd0cd000)\n+            libuuid.so.1 => /nix/store/q0kgnq21j0l2yd77gdlld371246cwghh-util-linux-2.32.1/lib/libuuid.so.1 (0x00007f0edcec5000)\n+            librt.so.1 => /nix/store/g2yk54hifqlsjiha3szr4q3ccmdzyrdv-glibc-2.27/lib/librt.so.1 (0x00007f0edccbd000)\n+            libstdc++.so.6 => /nix/store/3v5r7fkrbkw2qajadvjbf6p6qriz9p1i-gcc-7.3.0-lib/lib/libstdc++.so.6 (0x00007f0edc936000)\n+            libgcc_s.so.1 => /nix/store/g2yk54hifqlsjiha3szr4q3ccmdzyrdv-glibc-2.27/lib/libgcc_s.so.1 (0x00007f0edc720000)\n+        '''\n+        libraries = ['glib-2.0', 'gio-2.0']\n+\n+        self.assertEqual(\n+            ['/nix/store/gmrf09y7sfxrr0mcx90dba7w41jj2kzk-glib-2.58.1/lib/libglib-2.0.so.0',\n+             '/nix/store/gmrf09y7sfxrr0mcx90dba7w41jj2kzk-glib-2.58.1/lib/libgio-2.0.so.0'],\n+            resolve_from_ldd_output(libraries, output))\n+\n     def test_resolve_from_ldd_output(self):\n         output = '''\\\n             libglib-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fbe12d68000)\n@@ -40,7 +64,8 @@ class TestLddParser(unittest.TestCase):\n \n         self.assertEqual(\n             sanitize_shlib_path('/foo/bar'),\n-            '/foo/bar' if sys.platform == 'darwin' else 'bar')\n+            # NixOS always want the absolute path\n+            '/foo/bar')\n \n     def test_unresolved_library(self):\n         output = ''\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/gir/cairo-1.0.gir.in b/gir/cairo-1.0.gir.in\nindex e4c9fb3d..3351b184 100644\n--- a/gir/cairo-1.0.gir.in\n+++ b/gir/cairo-1.0.gir.in\n@@ -6,7 +6,7 @@\n   <package name=\"@CAIRO_GIR_PACKAGE@\"/>\n   <c:include name=\"cairo-gobject.h\"/>\n   <namespace name=\"cairo\" version=\"1.0\"\n-\t     shared-library=\"@CAIRO_SHARED_LIBRARY@\"\n+\t     shared-library=\"/nix/store/0ci3da6db19gckz0i5j3br992cspvlz1-cairo-1.18.4/lib/@CAIRO_SHARED_LIBRARY@\"\n \t     c:identifier-prefixes=\"cairo\"\n \t     c:symbol-prefixes=\"cairo\">\n     <record name=\"Context\" c:type=\"cairo_t\" foreign=\"1\"\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://gnome/sources/gobject-introspection/1.86/gobject-introspection-1.86.0.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "920d1a3fcedeadc32acff95c2e203b319039dd4b4a08dd1a2dfd283d19c0b9ae"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://gi.readthedocs.io/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "d3fj7k3aya8slkgm72gn5izyvnlkgx73-libpsl-0.21.5",
      "name": "libpsl",
      "version": "0.21.5",
      "description": "C library for the Publix Suffix List",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/libpsl@0.21.5",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/libpsl.pc.in\n+++ b/libpsl.pc.in\n@@ -8,4 +8,5 @@\n Version: @PACKAGE_VERSION@\n URL: @PACKAGE_URL@\n Libs: -L${libdir} -lpsl\n+Libs.private: @LIBS@\n Cflags: -I${includedir}\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/rockdaboot/libpsl/releases/download/0.21.5/libpsl-0.21.5.tar.lz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "9a9f6a8c6edba650cf9ea55475cd172dd28487316804e9c73202d97572cd3a2d"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://rockdaboot.github.io/libpsl/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "d471xb7sfbah076s8rx02i68zpxc2r5n-gzip-1.14",
      "name": "gzip",
      "version": "1.14",
      "description": "GNU zip compression program",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/gzip@1.14",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://ftpmirror.gnu.org/gzip/gzip-1.14.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "01a7b881bd220bfdf615f97b8718f80bdfd3f6add385b993dcf6efd14e8c0ac6"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/gzip/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "d7xya49n755888xvg3v4qgf2a022s7g3-doxygen-1.15.0-examples",
      "name": "doxygen",
      "version": "1.15.0",
      "description": "Source code documentation generator tool",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-2.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/doxygen@1.15.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/doxygen/doxygen/archive/refs/tags/Release_1_15_0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "1db50021f91f3f44ef6f634b49ead348bf00fbc3b1dad86018bdbfcc62e465d7"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.doxygen.nl"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "d98hncrshrqh4z28kj3bn9x5bqfqcahx-libxt-1.3.1",
      "name": "libxt",
      "version": "1.3.1",
      "description": "X Toolkit Intrinsics library",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        },
        {
          "license": {
            "id": "HPND-sell-variant"
          }
        },
        {
          "license": {
            "id": "HPND"
          }
        },
        {
          "license": {
            "id": "MIT-open-group"
          }
        },
        {
          "license": {
            "id": "X11"
          }
        }
      ],
      "purl": "pkg:nix/libxt@1.3.1",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://xorg/individual/lib/libXt-1.3.1.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "e0a774b33324f4d4c05b199ea45050f87206586d81655f8bef4dba434d931288"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://gitlab.freedesktop.org/xorg/lib/libxt"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "da2xbkyi3abhqk1vlr5rjlq5n6rjqbiw-unbound-1.24.1",
      "name": "unbound",
      "version": "1.24.1",
      "description": "Validating, recursive, and caching DNS resolver",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/unbound@1.24.1",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/NLnetLabs/unbound/archive/refs/tags/release-1.24.1.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "99e5a0bb5506851f5df3055bf20baa6e7184dd41eceae247476d220c59c84e14"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.unbound.net"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "dgjd3hf8ny62vbjg10w64x4jwm7cv81k-libxrender-0.9.12",
      "name": "libxrender",
      "version": "0.9.12",
      "description": "Xlib library for the Render Extension to the X11 protocol",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "HPND-sell-variant"
          }
        }
      ],
      "purl": "pkg:nix/libxrender@0.9.12",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://xorg/individual/lib/libXrender-0.9.12.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "b832128da48b39c8d608224481743403ad1691bf4e554e4be9c174df171d1b97"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://gitlab.freedesktop.org/xorg/lib/libxrender"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "drc7kang929jaza6cy9zdx10s4gw1z5p-gnused-4.9",
      "name": "gnused",
      "version": "4.9",
      "description": "GNU sed, a batch stream editor",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/gnused@4.9",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://ftpmirror.gnu.org/sed/sed-4.9.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "6e226b732e1cd739464ad6862bd1a1aba42d7982922da7a53519631d24975181"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/sed/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "dy3w4sk9jfmmg6y2yshgdz1y7pzdvdkk-rhash-1.4.4",
      "name": "rhash",
      "version": "1.4.4",
      "description": "Console utility and library for computing and verifying hash sums of files",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "0BSD"
          }
        }
      ],
      "purl": "pkg:nix/rhash@1.4.4",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 9ef90b958b7ae50aeeb5c269468034d73d6e2efe Mon Sep 17 00:00:00 2001\nFrom: Aleksey Kravchenko <rhash.admin@gmail.com>\nDate: Mon, 31 Jul 2023 02:48:15 +0300\nSubject: [PATCH] Fix #238: Build on *BSD\n\n---\n configure         | 3 ++-\n librhash/Makefile | 8 ++++----\n 2 files changed, 6 insertions(+), 5 deletions(-)\n\ndiff --git a/configure b/configure\nindex dae76d5..39ef8c1 100755\n--- a/configure\n+++ b/configure\n@@ -567,6 +567,7 @@ qnx()       { test \"$OS_LC\" = \"qnx\"; }\n sunos()     { test \"$OS_LC\" = \"sunos\"; }\n wine()      { test \"$OS_LC\" = \"wine\"; }\n win32()     { cygwin || mingw32 || mingw64 || msys || wine; }\n+bsd()       { dragonfly || freebsd || netbsd || openbsd ; }\n posix_make() { aix || bsdos || hpux || irix || qnx || sunos; }\n \n #####################################################################\n@@ -713,7 +714,7 @@ if win32; then\n elif darwin; then\n   SHARED_EXT=\".${RHASH_VERSION_MAJOR}.dylib\"\n   SOLINK_EXT=\".dylib\"\n-elif linux; then\n+elif linux || bsd; then\n   # use the full library version for the library file extension\n   SHARED_EXT=\".so.${RHASH_VERSION}\"\n fi\ndiff --git a/librhash/Makefile b/librhash/Makefile\nindex d48e06e..e8ee862 100644\n--- a/librhash/Makefile\n+++ b/librhash/Makefile\n@@ -27,9 +27,9 @@ install-lib-static: $(LIBRHASH_STATIC)\n install-lib-shared: $(LIBRHASH_SHARED) $(EXTRA_INSTALL_LIBSHARED)\n \t$(INSTALL) -d $(SO_DIR)\n \t$(INSTALL_SHARED) $(LIBRHASH_SHARED) $(SO_DIR)/\n-\ttest \"x$(LIBRHASH_SO_MAJ)\" != \"x$(LIBRHASH_SHARED)\" && \\\n+\ttest \"x$(LIBRHASH_SO_MAJ)\" != \"x$(LIBRHASH_SHARED)\" || ( \\\n \t  rm -f $(LIBDIR)/$(LIBRHASH_SO_MAJ) && \\\n-\t  ln -s $(LIBRHASH_SHARED) $(LIBDIR)/$(LIBRHASH_SO_MAJ)\n+\t  ln -s $(LIBRHASH_SHARED) $(LIBDIR)/$(LIBRHASH_SO_MAJ) )\n \n install-implib:\n \t$(INSTALL) -d $(LIBDIR)\n@@ -175,9 +175,9 @@ $(EXPORTS_FILE): $(LIB_HEADERS)\n \t  $(LIB_HEADERS) | grep -v \"$(EXPORTS_SKIP)\" > $@\n \n $(LIBRHASH_SOLINK):\n-\ttest \"x$(LIBRHASH_SO_MAJ)\" != \"x$(LIBRHASH_SHARED)\" && \\\n+\ttest \"x$(LIBRHASH_SO_MAJ)\" = \"x$(LIBRHASH_SHARED)\" || ( \\\n \t  rm -f $(LIBRHASH_SO_MAJ) && \\\n-\t  ln -s $(LIBRHASH_SHARED) $(LIBRHASH_SO_MAJ)\n+\t  ln -s $(LIBRHASH_SHARED) $(LIBRHASH_SO_MAJ) )\n \trm -f $(LIBRHASH_SOLINK)\n \tln -s $(LIBRHASH_SO_MAJ) $(LIBRHASH_SOLINK)\n \n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From b8c91ea6551e99e10352386cd46ea26973bb4a4d Mon Sep 17 00:00:00 2001\nFrom: Aleksey Kravchenko <rhash.admin@gmail.com>\nDate: Mon, 11 Sep 2023 03:49:20 +0300\nSubject: [PATCH] Fix #238: Build on Unix\n\n---\n librhash/Makefile | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/librhash/Makefile b/librhash/Makefile\nindex e8ee862..34f1263 100644\n--- a/librhash/Makefile\n+++ b/librhash/Makefile\n@@ -27,7 +27,7 @@ install-lib-static: $(LIBRHASH_STATIC)\n install-lib-shared: $(LIBRHASH_SHARED) $(EXTRA_INSTALL_LIBSHARED)\n \t$(INSTALL) -d $(SO_DIR)\n \t$(INSTALL_SHARED) $(LIBRHASH_SHARED) $(SO_DIR)/\n-\ttest \"x$(LIBRHASH_SO_MAJ)\" != \"x$(LIBRHASH_SHARED)\" || ( \\\n+\ttest \"x$(LIBRHASH_SO_MAJ)\" = \"x$(LIBRHASH_SHARED)\" || ( \\\n \t  rm -f $(LIBDIR)/$(LIBRHASH_SO_MAJ) && \\\n \t  ln -s $(LIBRHASH_SHARED) $(LIBDIR)/$(LIBRHASH_SO_MAJ) )\n \n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/rhash/RHash/archive/v1.4.4.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "dc25b8d542dd5e8203e1c3a0adc1b68fce6d80827fb33e6153b03cdeaa6ec5fe"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://rhash.sourceforge.net/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "f33ss2f1kqwpj9i5iwa24hz2a76nabjb-libsystemtap-5.3",
      "name": "libsystemtap",
      "version": "5.3",
      "description": "Statically defined probes development files",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/libsystemtap@5.3",
      "externalReferences": [
        {
          "type": "website",
          "url": "https://sourceware.org/systemtap/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "f554mh8ypc7n4ywzcgj81mlrq6ilh84r-patchutils-0.4.2",
      "name": "patchutils",
      "version": "0.4.2",
      "description": "Tools to manipulate patch files",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-2.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/patchutils@0.4.2",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 1208a632aaeca43f3846116197d645394fbae45d Mon Sep 17 00:00:00 2001\nFrom: Tim Waugh <twaugh@redhat.com>\nDate: Wed, 27 Aug 2025 09:36:01 +0100\nSubject: [PATCH] Make grepdiff1 test-case pcre-aware\n\nThe test case needs a different pattern when configured with/without pcre2.\n\nFixed: #61\n\nAssisted-by: Cursor\n---\n tests/grepdiff1/run-test | 11 ++++++++++-\n 1 file changed, 10 insertions(+), 1 deletion(-)\n\ndiff --git a/tests/grepdiff1/run-test b/tests/grepdiff1/run-test\nindex c4311f8..ebb6023 100755\n--- a/tests/grepdiff1/run-test\n+++ b/tests/grepdiff1/run-test\n@@ -20,7 +20,16 @@ cat << EOF > diff\n +b\n EOF\n \n-${GREPDIFF} '\\+a' diff 2>errors >index || exit 1\n+# Check if PCRE2 is being used by examining the help output\n+if ${GREPDIFF} --help 2>&1 | grep -q \"PCRE regexes are used by default\"; then\n+    # PCRE2 is enabled - need to escape the plus sign\n+    PATTERN='\\+a'\n+else\n+    # Standard regex - plus sign doesn't need escaping\n+    PATTERN='+a'\n+fi\n+\n+${GREPDIFF} \"$PATTERN\" diff 2>errors >index || exit 1\n [ -s errors ] && exit 1\n \n cat << EOF | cmp - index || exit 1\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "http://cyberelk.net/tim/data/patchutils/stable/patchutils-0.4.2.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "8875b0965fe33de62b890f6cd793be7fafe41a4e552edbf641f1fed5ebbf45ed"
            }
          ]
        },
        {
          "type": "website",
          "url": "http://cyberelk.net/tim/software/patchutils"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "f8gicbns4hymkc8k82h6c1cnz4pjs7ip-meson-1.9.1",
      "name": "meson",
      "version": "1.9.1",
      "description": "Open source, fast and friendly build system made in Python",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "Apache-2.0"
          }
        }
      ],
      "purl": "pkg:nix/meson@1.9.1",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/mesonbuild/dependencies/data/CMakePathInfo.txt b/mesonbuild/dependencies/data/CMakePathInfo.txt\nindex 662ec58..4d5f4e4 100644\n--- a/mesonbuild/dependencies/data/CMakePathInfo.txt\n+++ b/mesonbuild/dependencies/data/CMakePathInfo.txt\n@@ -5,6 +5,7 @@ list(APPEND TMP_PATHS_LIST ${CMAKE_PREFIX_PATH})\n list(APPEND TMP_PATHS_LIST ${CMAKE_FRAMEWORK_PATH})\n list(APPEND TMP_PATHS_LIST ${CMAKE_APPBUNDLE_PATH})\n list(APPEND TMP_PATHS_LIST $ENV{CMAKE_PREFIX_PATH})\n+list(APPEND TMP_PATHS_LIST $ENV{NIXPKGS_CMAKE_PREFIX_PATH})\n list(APPEND TMP_PATHS_LIST $ENV{CMAKE_FRAMEWORK_PATH})\n list(APPEND TMP_PATHS_LIST $ENV{CMAKE_APPBUNDLE_PATH})\n list(APPEND TMP_PATHS_LIST ${CMAKE_SYSTEM_PREFIX_PATH})\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/mesonbuild/build.py b/mesonbuild/build.py\nindex 9014d09fb..4dda63a96 100644\n--- a/mesonbuild/build.py\n+++ b/mesonbuild/build.py\n@@ -1888,6 +1888,20 @@ class BuildTarget(Target):\n     def get_rpath_dirs_from_link_args(cls, args: T.List[str]) -> T.Set[str]:\n         dirs: T.Set[str] = set()\n \n+        nix_ldflags = os.environ.get('NIX_LDFLAGS', '').split()\n+        next_is_path = False\n+        # Try to add rpaths set by user or ld-wrapper so that they are not removed.\n+        # Based on https://github.com/NixOS/nixpkgs/blob/69711a2f5ffe8cda208163be5258266172ff527f/pkgs/build-support/bintools-wrapper/ld-wrapper.sh#L148-L177\n+        for flag in nix_ldflags:\n+            if flag == '-rpath' or flag == '-L':\n+                next_is_path = True\n+            elif next_is_path or flag.startswith('-L/'):\n+                if flag.startswith('-L/'):\n+                    flag = flag[2:]\n+                if flag.startswith('/nix/store'):\n+                    dirs.add(flag)\n+                next_is_path = False\n+\n         for arg in args:\n             if not arg.startswith('-Wl,'):\n                 continue\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/mesonbuild/scripts/depfixer.py b/mesonbuild/scripts/depfixer.py\nindex 4176b9a03..faaabf616 100644\n--- a/mesonbuild/scripts/depfixer.py\n+++ b/mesonbuild/scripts/depfixer.py\n@@ -336,6 +336,15 @@ class Elf(DataSizes):\n         if not new_rpath:\n             self.remove_rpath_entry(entrynum)\n         else:\n+            # Clear old rpath to avoid stale references,\n+            # not heeding the warning above about de-duplication\n+            # since it does not seem to cause issues for us\n+            # and not doing so trips up Nix’s reference checker.\n+            # See https://github.com/NixOS/nixpkgs/pull/46020\n+            # and https://github.com/NixOS/nixpkgs/issues/95163\n+            self.bf.seek(rp_off)\n+            self.bf.write(b'\\0'*len(old_rpath))\n+\n             self.bf.seek(rp_off)\n             self.bf.write(new_rpath)\n             self.bf.write(b'\\0')\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff -Naur meson-0.60.2-old/mesonbuild/environment.py meson-0.60.2-new/mesonbuild/environment.py\n--- meson-0.60.2-old/mesonbuild/environment.py\t2021-11-02 16:58:13.000000000 -0300\n+++ meson-0.60.2-new/mesonbuild/environment.py\t2021-12-12 17:44:00.350499307 -0300\n@@ -68,7 +68,7 @@\n         # compiling we fall back on the unprefixed host version. This\n         # allows native builds to never need to worry about the 'BUILD_*'\n         # ones.\n-        ([var_name + '_FOR_BUILD'] if is_cross else [var_name]),\n+        [var_name + '_FOR_BUILD'] + ([] if is_cross else [var_name]),\n         # Always just the unprefixed host versions\n         [var_name]\n     )[for_machine]\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py\nindex 1c6952df7..9466a0b7d 100644\n--- a/mesonbuild/modules/gnome.py\n+++ b/mesonbuild/modules/gnome.py\n@@ -923,6 +923,16 @@ class GnomeModule(ExtensionModule):\n         if fatal_warnings:\n             scan_command.append('--warn-error')\n\n+        if len(set(girtarget.get_custom_install_dir()[0] for girtarget in girtargets if girtarget.get_custom_install_dir())) > 1:\n+            raise MesonException('generate_gir tries to build multiple libraries with different install_dir at once: {}'.format(','.join([str(girtarget) for girtarget in girtargets])))\n+\n+        if girtargets[0].get_custom_install_dir():\n+            fallback_libpath = girtargets[0].get_custom_install_dir()[0]\n+        else:\n+            fallback_libpath = None\n+        if fallback_libpath is not None and isinstance(fallback_libpath, str) and len(fallback_libpath) > 0 and fallback_libpath[0] == \"/\":\n+            scan_command += ['--fallback-library-path=' + fallback_libpath]\n+\n         generated_files = [f for f in libsources if isinstance(f, (GeneratedList, CustomTarget, CustomTargetIndex))]\n \n         scan_target = self._make_gir_target(state, girfile, scan_command, generated_files, depends, kwargs)\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/mesonbuild/dependencies/boost.py b/mesonbuild/dependencies/boost.py\nindex 11cf0beca..80f950866 100644\n--- a/mesonbuild/dependencies/boost.py\n+++ b/mesonbuild/dependencies/boost.py\n@@ -687,20 +687,7 @@ class BoostDependency(SystemDependency):\n         else:\n             tmp: T.List[Path] = []\n \n-            # Add some default system paths\n-            if m.is_darwin():\n-                tmp.extend([\n-                    Path('/opt/homebrew/'),        # for Apple Silicon MacOS\n-                    Path('/usr/local/opt/boost'),  # for Intel Silicon MacOS\n-                ])\n-            tmp += [Path('/opt/local')]\n-            tmp += [Path('/usr/local')]\n-            tmp += [Path('/usr')]\n-\n-            # Cleanup paths\n-            tmp = [x for x in tmp if x.is_dir()]\n-            tmp = [x.resolve() for x in tmp]\n-            roots += tmp\n+            # Remove such spurious, non-explicit \"system\" paths for Nix&Nixpkgs\n \n         self.check_and_set_roots(roots, use_system=True)\n \n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/mesonbuild/modules/pkgconfig.py b/mesonbuild/modules/pkgconfig.py\nindex cc0450a52..183555c48 100644\n--- a/mesonbuild/modules/pkgconfig.py\n+++ b/mesonbuild/modules/pkgconfig.py\n@@ -702,10 +702,7 @@ class PkgConfigModule(NewExtensionModule):\n         pkgroot = pkgroot_name = kwargs['install_dir'] or default_install_dir\n         if pkgroot is None:\n             m = state.environment.machines.host\n-            if m.is_freebsd():\n-                pkgroot = os.path.join(_as_str(state.environment.coredata.optstore.get_value_for(OptionKey('prefix'))), 'libdata', 'pkgconfig')\n-                pkgroot_name = os.path.join('{prefix}', 'libdata', 'pkgconfig')\n-            elif m.is_haiku():\n+            if m.is_haiku():\n                 pkgroot = os.path.join(_as_str(state.environment.coredata.optstore.get_value_for(OptionKey('prefix'))), 'develop', 'lib', 'pkgconfig')\n                 pkgroot_name = os.path.join('{prefix}', 'develop', 'lib', 'pkgconfig')\n             else:\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/mesonbuild/meson/archive/refs/tags/1.9.1.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "b786bf669f2b0be0cc8ec91dc15bd821f603013e7bcc655f56eec8029c113460"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://mesonbuild.com"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "fb502ifnvs88bgdyabjxw9swjg3m30jp-python3.13-bootstrap-installer-0.7.0",
      "name": "python3.13-bootstrap-installer",
      "version": "0.7.0",
      "description": "Low-level library for installing a Python package from a wheel distribution",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/python3.13-bootstrap-installer@0.7.0",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From b23f89b10cf5d179bd6b0bad195ee36f43a5fb9e Mon Sep 17 00:00:00 2001\nFrom: =?UTF-8?q?Edgar=20Ram=C3=ADrez=20Mondrag=C3=B3n?=\n <16805946+edgarrmondragon@users.noreply.github.com>\nDate: Tue, 19 Dec 2023 06:09:41 -0600\nSubject: [PATCH] Fix removed `importlib.resources.read_binary` in Python 3.13\n (#201)\n\ndiff --git a/noxfile.py b/noxfile.py\nindex a690c59..6a69cce 100644\n--- a/noxfile.py\n+++ b/noxfile.py\n@@ -22,7 +22,7 @@ def lint(session):\n     session.run(\"pre-commit\", \"run\", \"--all-files\", *args)\n \n \n-@nox.session(python=[\"3.7\", \"3.8\", \"3.9\", \"3.10\", \"3.11\", \"pypy3\"])\n+@nox.session(python=[\"3.7\", \"3.8\", \"3.9\", \"3.10\", \"3.11\", \"3.12\", \"3.13\", \"pypy3\"])\n def test(session):\n     session.install(\".\")\n     session.install(\"-r\", \"tests/requirements.txt\")\n@@ -42,7 +42,7 @@ def test(session):\n     )\n \n \n-@nox.session(python=[\"3.7\", \"3.8\", \"3.9\", \"3.10\", \"3.11\", \"pypy3\"])\n+@nox.session(python=[\"3.7\", \"3.8\", \"3.9\", \"3.10\", \"3.11\", \"3.12\", \"3.13\", \"pypy3\"])\n def doctest(session):\n     session.install(\".\")\n     session.install(\"-r\", \"docs/requirements.txt\")\ndiff --git a/src/installer/scripts.py b/src/installer/scripts.py\nindex d18060b..c9f96b4 100644\n--- a/src/installer/scripts.py\n+++ b/src/installer/scripts.py\n@@ -3,9 +3,19 @@\n import io\n import os\n import shlex\n+import sys\n import zipfile\n-from importlib.resources import read_binary\n-from typing import TYPE_CHECKING, Mapping, Optional, Tuple\n+from types import ModuleType\n+from typing import TYPE_CHECKING, Mapping, Optional, Tuple, Union\n+\n+if sys.version_info >= (3, 9):  # pragma: no cover\n+    from importlib.resources import files\n+\n+    def read_binary(package: Union[str, ModuleType], file_path: str) -> bytes:\n+        return (files(package) / file_path).read_bytes()\n+\n+else:  # pragma: no cover\n+    from importlib.resources import read_binary\n \n from installer import _scripts\n \n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/pypa/installer/archive/0.7.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "b611e0854fb5025a5acb9afd0dcdefec04d115f60a57c97da91d276c638e5ff0"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/pypa/installer"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "fcpsfy0mc54rbhdy2rsfcwm147q9ij3g-bluez-headers-5.84",
      "name": "bluez-headers",
      "version": "5.84",
      "description": "Official Linux Bluetooth protocol stack",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-2-Clause"
          }
        },
        {
          "license": {
            "id": "GPL-2.0-or-later"
          }
        },
        {
          "license": {
            "id": "LGPL-2.1-or-later"
          }
        },
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/bluez-headers@5.84",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://kernel/linux/bluetooth/bluez-5.84.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "5ba73d030f7b00087d67800b0e321601aec0f892827c72e5a2c8390d8c886b11"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.bluez.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "ffknkiv2bdl7f74xh79s63kvmiz5c2rz-help2man-1.49.3",
      "name": "help2man",
      "version": "1.49.3",
      "description": "Generate man pages from `--help' output",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/help2man@1.49.3",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://gnu/help2man/help2man-1.49.3.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "4d7e4fdef2eca6afe07a2682151cea78781e0a4e8f9622142d9f70c083a2fd4f"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/help2man/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "fgp3b5rswrc6p21mgj6nghl0xdnpvy79-libcap-ng-0.8.5-dev",
      "name": "libcap-ng",
      "version": "0.8.5",
      "description": "Library for working with POSIX capabilities",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "LGPL-2.1"
          }
        }
      ],
      "purl": "pkg:nix/libcap-ng@0.8.5",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/stevegrubb/libcap-ng/archive/refs/tags/v0.8.5.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "a9c1c81c6e7d3c33df3ec5c0d6be211b84212b6ab213b0205cec140e3232ee51"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://people.redhat.com/sgrubb/libcap-ng/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "fm3575308n2s8n6vzvavx8sh8cp97pcb-python3.13-pytest-asyncio-1.2.0",
      "name": "pytest-asyncio",
      "version": "1.2.0",
      "description": "Library for testing asyncio code with pytest",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "Apache-2.0"
          }
        }
      ],
      "purl": "pkg:nix/pytest-asyncio@1.2.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/pytest-dev/pytest-asyncio/archive/refs/tags/v1.2.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "dbb14257bce01467bf4347e4632879674e5fa151a16ca0513d31f850afed5b90"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/pytest-dev/pytest-asyncio"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "fpysm0xjsxbrl6wh0svx71w0bvyk6qk2-automake-1.16.5",
      "name": "automake",
      "version": "1.16.5",
      "description": "GNU standard-compliant makefile generator",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-2.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/automake@1.16.5",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://gnu/automake/automake-1.16.5.tar.xz"
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/automake/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "fwr1fa8shn9p2c2f4r96d7l5393bvn5y-libaom-3.12.1-dev",
      "name": "libaom",
      "version": "3.12.1",
      "description": "Alliance for Open Media AV1 codec library",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-2-Clause"
          }
        }
      ],
      "purl": "pkg:nix/libaom@3.12.1",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/build/cmake/aom_install.cmake b/build/cmake/aom_install.cmake\nindex 0bd2bf035..5cf5acea8 100644\n--- a/build/cmake/aom_install.cmake\n+++ b/build/cmake/aom_install.cmake\n@@ -42,8 +42,8 @@ macro(setup_aom_install_targets)\n               -DAOM_ROOT=${AOM_ROOT}\n               -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}\n               -DCMAKE_INSTALL_BINDIR=${CMAKE_INSTALL_BINDIR}\n-              -DCMAKE_INSTALL_INCLUDEDIR=${CMAKE_INSTALL_INCLUDEDIR}\n-              -DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR}\n+              -DCMAKE_INSTALL_FULL_INCLUDEDIR=${CMAKE_INSTALL_FULL_INCLUDEDIR}\n+              -DCMAKE_INSTALL_FULL_LIBDIR=${CMAKE_INSTALL_FULL_LIBDIR}\n               -DCMAKE_PROJECT_NAME=${CMAKE_PROJECT_NAME}\n               -DCONFIG_MULTITHREAD=${CONFIG_MULTITHREAD}\n               -DCONFIG_TUNE_VMAF=${CONFIG_TUNE_VMAF}\n@@ -84,12 +84,12 @@ macro(setup_aom_install_targets)\n     # Setup the install rules. install() will automatically prepend\n     # CMAKE_INSTALL_PREFIX to relative paths\n     install(FILES ${AOM_INSTALL_INCS}\n-            DESTINATION \"${CMAKE_INSTALL_INCLUDEDIR}/aom\")\n+            DESTINATION \"${CMAKE_INSTALL_FULL_INCLUDEDIR}/aom\")\n     install(FILES \"${AOM_PKG_CONFIG_FILE}\"\n-            DESTINATION \"${CMAKE_INSTALL_LIBDIR}/pkgconfig\")\n+            DESTINATION \"${CMAKE_INSTALL_FULL_LIBDIR}/pkgconfig\")\n     install(TARGETS ${AOM_INSTALL_LIBS};${AOM_INSTALL_BINS}\n-            RUNTIME DESTINATION \"${CMAKE_INSTALL_BINDIR}\"\n-            LIBRARY DESTINATION \"${CMAKE_INSTALL_LIBDIR}\"\n-            ARCHIVE DESTINATION \"${CMAKE_INSTALL_LIBDIR}\")\n+            RUNTIME DESTINATION \"${CMAKE_INSTALL_FULL_BINDIR}\"\n+            LIBRARY DESTINATION \"${CMAKE_INSTALL_FULL_LIBDIR}\"\n+            ARCHIVE DESTINATION \"${CMAKE_INSTALL_FULL_LIBDIR}\")\n   endif()\n endmacro()\ndiff --git a/build/cmake/pkg_config.cmake b/build/cmake/pkg_config.cmake\nindex e8fff2e77..b8a73aad4 100644\n--- a/build/cmake/pkg_config.cmake\n+++ b/build/cmake/pkg_config.cmake\n@@ -11,8 +11,8 @@\n cmake_minimum_required(VERSION 3.5)\n \n set(REQUIRED_ARGS \"AOM_ROOT\" \"AOM_CONFIG_DIR\" \"CMAKE_INSTALL_PREFIX\"\n-                  \"CMAKE_INSTALL_BINDIR\" \"CMAKE_INSTALL_INCLUDEDIR\"\n-                  \"CMAKE_INSTALL_LIBDIR\" \"CMAKE_PROJECT_NAME\"\n+                  \"CMAKE_INSTALL_BINDIR\" \"CMAKE_INSTALL_FULL_INCLUDEDIR\"\n+                  \"CMAKE_INSTALL_FULL_LIBDIR\" \"CMAKE_PROJECT_NAME\"\n                   \"CONFIG_MULTITHREAD\")\n \n foreach(arg ${REQUIRED_ARGS})\n@@ -35,15 +35,15 @@ else()\n endif()\n \n # Write pkg-config info.\n-set(prefix \"${CMAKE_INSTALL_PREFIX}\")\n-set(bindir \"${CMAKE_INSTALL_BINDIR}\")\n-set(includedir \"${CMAKE_INSTALL_INCLUDEDIR}\")\n-set(libdir \"${CMAKE_INSTALL_LIBDIR}\")\n+get_filename_component(prefix \"${CMAKE_INSTALL_FULL_INCLUDEDIR}\" DIRECTORY)\n+get_filename_component(exec_prefix \"${CMAKE_INSTALL_FULL_LIBDIR}\" DIRECTORY)\n+get_filename_component(includedir \"${CMAKE_INSTALL_FULL_INCLUDEDIR}\" NAME)\n+get_filename_component(libdir \"${CMAKE_INSTALL_FULL_LIBDIR}\" NAME)\n set(pkgconfig_file \"${AOM_CONFIG_DIR}/aom.pc\")\n string(TOLOWER ${CMAKE_PROJECT_NAME} pkg_name)\n file(WRITE \"${pkgconfig_file}\" \"# libaom pkg-config.\\n\")\n file(APPEND \"${pkgconfig_file}\" \"prefix=${prefix}\\n\")\n-file(APPEND \"${pkgconfig_file}\" \"exec_prefix=\\${prefix}\\n\")\n+file(APPEND \"${pkgconfig_file}\" \"exec_prefix=${exec_prefix}\\n\")\n file(APPEND \"${pkgconfig_file}\" \"includedir=\\${prefix}/${includedir}\\n\")\n file(APPEND \"${pkgconfig_file}\" \"libdir=\\${exec_prefix}/${libdir}\\n\\n\")\n file(APPEND \"${pkgconfig_file}\" \"Name: ${pkg_name}\\n\")\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "https://bugs.gentoo.org/869419\n\nPOSIX_C_SOURCE is needed for ftello.\n--- a/CMakeLists.txt\n+++ b/CMakeLists.txt\n@@ -266,6 +266,7 @@ add_library(aom_rtcd OBJECT ${AOM_RTCD_SOURCES})\n add_dependencies(aom_rtcd aom_version)\n \n if(ENABLE_EXAMPLES)\n+  add_definitions(-D_POSIX_C_SOURCE=200112L)\n   add_library(aom_encoder_stats OBJECT ${AOM_ENCODER_STATS_SOURCES})\n   set(AOM_LIB_TARGETS ${AOM_LIB_TARGETS} aom_encoder_stats)\n endif()\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://aomedia.googlesource.com/aom/+archive/v3.12.1.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "0004bac1fab8ad9e1fae6ebe8302a8212dfe355ccf8617d6e36f165c9436b50f"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://aomedia.org/av1-features/get-started/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "fzm80chs5pj02mdl9gl6j62bqlb8ivan-python3.13-pystemmer-2.2.0.1",
      "name": "pystemmer",
      "version": "2.2.0.1",
      "description": "Snowball stemming algorithms, for information retrieval",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        },
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/pystemmer@2.2.0.1",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/setup.py b/setup.py\nindex 75d61d0..0068429 100644\n--- a/setup.py\n+++ b/setup.py\n@@ -208,7 +208,7 @@\n           \"Topic :: Text Processing :: Indexing\",\n           \"Topic :: Text Processing :: Linguistic\",\n       ],\n-      setup_requires=['Cython>=0.28.5,<1.0', 'setuptools>=18.0'],\n+      setup_requires=['Cython>=0.28.5', 'setuptools>=18.0'],\n       ext_modules=[\n           C_EXTENSION\n       ],\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/snowballstem/pystemmer/archive/refs/tags/v2.2.0.1.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "9e03f1f79c9b8099a776934f07009adc108db28cd183e765130fa7865230239f"
            }
          ]
        },
        {
          "type": "website",
          "url": "http://snowball.tartarus.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "g5yhbd8hh41q3wi8pvfsv44bpizlwm37-python3.13-hatchling-1.27.0-dist",
      "name": "hatchling",
      "version": "1.27.0",
      "description": "Modern, extensible Python build backend",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/hatchling@1.27.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/h/hatchling/hatchling-1.27.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "971c296d9819abb3811112fc52c7a9751c8d381898f36533bb16f9791e941fd6"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://hatch.pypa.io/latest/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "gb3wkqlf3cg79cgf6cdgqvxvh5w1vzck-gts-0.7.6-dev",
      "name": "gts",
      "version": "0.7.6",
      "description": "GNU Triangulated Surface Library",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "LGPL-2.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/gts@0.7.6",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://sourceforge/gts/gts-0.7.6.tar.gz"
        },
        {
          "type": "website",
          "url": "https://gts.sourceforge.net/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "gc0h08kbjvhgk60y0q26v54rs1g9mn5d-python3.13-imagesize-1.4.1-dist",
      "name": "imagesize",
      "version": "1.4.1",
      "description": "Getting image size from png/jpeg/jpeg2000/gif file",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/imagesize@1.4.1",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/i/imagesize/imagesize-1.4.1.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/shibukawa/imagesize_py"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "gcpas4gm11l16lmrwrwwmj8zlmi6pm1g-python3.13-importlib-metadata-8.7.0-dist",
      "name": "importlib-metadata",
      "version": "8.7.0",
      "description": "Read metadata from Python packages",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "Apache-2.0"
          }
        }
      ],
      "purl": "pkg:nix/importlib-metadata@8.7.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/i/importlib_metadata/importlib_metadata-8.7.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://importlib-metadata.readthedocs.io/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "ggxfzhsmd3m54fac5xph7kva38k44mc2-nghttp3-1.12.0",
      "name": "nghttp3",
      "version": "1.12.0",
      "description": "Implementation of HTTP/3 mapping over QUIC and QPACK in C",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/nghttp3@1.12.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/ngtcp2/nghttp3/releases/download/v1.12.0/nghttp3-1.12.0.tar.bz2",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "2859783537af213d67a5ce4277ddb79c8941ad45edbfa5ccdd52d9cf4ffa422d"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/ngtcp2/nghttp3"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "gll8xrkj4z6p3xj3np06wygcj1z85jv2-xxHash-0.8.3",
      "name": "xxHash",
      "version": "0.8.3",
      "description": "Extremely fast hash algorithm",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-2-Clause"
          }
        },
        {
          "license": {
            "id": "GPL-2.0"
          }
        }
      ],
      "purl": "pkg:nix/xxHash@0.8.3",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/Cyan4973/xxHash/archive/v0.8.3.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "87a92884cf8dc6f43cf51f4d11765c6011b6c0f3ae07899cc8f7e87caaf1f704"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/Cyan4973/xxHash"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "gqryfjnhxrksmv6wsh6xgch7fy4rqm6l-gnutar-1.35-info",
      "name": "gnutar",
      "version": "1.35",
      "description": "GNU implementation of the `tar' archiver",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/gnutar@1.35",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 8632df398b2f548465ebe68b8f494c0d6f8d913d Mon Sep 17 00:00:00 2001\nFrom: Sergey Poznyakoff <gray@gnu.org>\nDate: Tue, 18 Jul 2023 17:02:23 +0300\nSubject: Fix savannah bug #64441\n\n* src/Makefile.am (tar_LDADD): Add libiconv libraries.\n---\n src/Makefile.am | 3 ++-\n 1 file changed, 2 insertions(+), 1 deletion(-)\n\ndiff --git a/src/Makefile.am b/src/Makefile.am\nindex 36c9543..e2ec58d 100644\n--- a/src/Makefile.am\n+++ b/src/Makefile.am\n@@ -52,4 +52,5 @@ AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)\n tar_LDADD = $(LIBS) ../lib/libtar.a ../gnu/libgnu.a\\\n  $(LIB_ACL) $(LIB_CLOCK_GETTIME) $(LIB_EACCESS)\\\n  $(LIB_GETRANDOM) $(LIB_HARD_LOCALE) $(FILE_HAS_ACL_LIB) $(LIB_MBRTOWC)\\\n- $(LIB_SELINUX) $(LIB_SETLOCALE_NULL)\n+ $(LIB_SELINUX) $(LIB_SETLOCALE_NULL) \\\n+ $(LIBINTL) $(LIBICONV)\n-- \ncgit v1.1\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://ftpmirror.gnu.org/tar/tar-1.35.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "4d62ff37342ec7aed748535323930c7cf94acf71c3591882b26a7ea50f3edc16"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/tar/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "h6f8n3198gjcv61kk0bayrzcgg3dzm8s-libxml2-2.15.1-bin",
      "name": "libxml2",
      "version": "2.15.1",
      "description": "XML parsing library for C",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/libxml2@2.15.1",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://gitlab.gnome.org/api/v4/projects/GNOME%2Flibxml2/repository/archive.tar.gz?sha=refs%2Ftags%2Fv2.15.1",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "1547d832ae714f68bcf09748c3d3ad4a87eb6942f7ca3b32395ba777e99f24a4"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://gitlab.gnome.org/GNOME/libxml2"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "h7fgzg0gkpar781i0vj423sq8zyr24a5-unzip-6.0",
      "name": "unzip",
      "version": "6.0",
      "description": "Extraction utility for archives compressed in .zip format",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "Info-ZIP"
          }
        }
      ],
      "purl": "pkg:nix/unzip@6.0",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From RedHat: https://bugzilla.redhat.com/attachment.cgi?id=971984&action=diff&context=patch&collapsed=&headers=1&format=raw\n\n--- unzip60/extract.c\t2010-04-03 14:41:55 -0500\n+++ unzip60/extract.c\t2014-12-03 15:33:35 -0600\n@@ -1,5 +1,5 @@ \n /*\n-  Copyright (c) 1990-2009 Info-ZIP.  All rights reserved.\n+  Copyright (c) 1990-2014 Info-ZIP.  All rights reserved.\n \n   See the accompanying file LICENSE, version 2009-Jan-02 or later\n   (the contents of which are also included in unzip.h) for terms of use.\n@@ -298,6 +298,8 @@ \n #ifndef SFX\n    static ZCONST char Far InconsistEFlength[] = \"bad extra-field entry:\\n \\\n      EF block length (%u bytes) exceeds remaining EF data (%u bytes)\\n\";\n+   static ZCONST char Far TooSmallEFlength[] = \"bad extra-field entry:\\n \\\n+     EF block length (%u bytes) invalid (< %d)\\n\";\n    static ZCONST char Far InvalidComprDataEAs[] =\n      \" invalid compressed data for EAs\\n\";\n #  if (defined(WIN32) && defined(NTSD_EAS))\n@@ -2023,7 +2025,8 @@ \n         ebID = makeword(ef);\n         ebLen = (unsigned)makeword(ef+EB_LEN);\n \n-        if (ebLen > (ef_len - EB_HEADSIZE)) {\n+        if (ebLen > (ef_len - EB_HEADSIZE))\n+        {\n            /* Discovered some extra field inconsistency! */\n             if (uO.qflag)\n                 Info(slide, 1, ((char *)slide, \"%-22s \",\n@@ -2032,6 +2035,16 @@ \n               ebLen, (ef_len - EB_HEADSIZE)));\n             return PK_ERR;\n         }\n+        else if (ebLen < EB_HEADSIZE)\n+        {\n+            /* Extra block length smaller than header length. */\n+            if (uO.qflag)\n+                Info(slide, 1, ((char *)slide, \"%-22s \",\n+                  FnFilter1(G.filename)));\n+            Info(slide, 1, ((char *)slide, LoadFarString(TooSmallEFlength),\n+              ebLen, EB_HEADSIZE));\n+            return PK_ERR;\n+        }\n \n         switch (ebID) {\n             case EF_OS2:\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From RedHat: https://bugzilla.redhat.com/attachment.cgi?id=969621&action=diff\n(unzip60/ path prefix added)\n\n--- unzip60/extract.c\t2009-03-14 02:32:52.000000000 +0100\n+++ unzip60/extract.c\t2014-12-05 22:43:13.000000000 +0100\n@@ -2221,10 +2234,17 @@ static int test_compr_eb(__G__ eb, eb_si\n     if (compr_offset < 4)                /* field is not compressed: */\n         return PK_OK;                    /* do nothing and signal OK */\n \n+    /* Return no/bad-data error status if any problem is found:\n+     *    1. eb_size is too small to hold the uncompressed size\n+     *       (eb_ucsize).  (Else extract eb_ucsize.)\n+     *    2. eb_ucsize is zero (invalid).  2014-12-04 SMS.\n+     *    3. eb_ucsize is positive, but eb_size is too small to hold\n+     *       the compressed data header.\n+     */\n     if ((eb_size < (EB_UCSIZE_P + 4)) ||\n-        ((eb_ucsize = makelong(eb+(EB_HEADSIZE+EB_UCSIZE_P))) > 0L &&\n-         eb_size <= (compr_offset + EB_CMPRHEADLEN)))\n-        return IZ_EF_TRUNC;               /* no compressed data! */\n+     ((eb_ucsize = makelong( eb+ (EB_HEADSIZE+ EB_UCSIZE_P))) == 0L) ||\n+     ((eb_ucsize > 0L) && (eb_size <= (compr_offset + EB_CMPRHEADLEN))))\n+        return IZ_EF_TRUNC;             /* no/bad compressed data! */\n \n     if (\n #ifdef INT_16BIT\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From RedHat: https://bugzilla.redhat.com/attachment.cgi?id=969625&action=diff\n(unzip60/ path prefix added)\n\n--- unzip60/process.c\t2009-03-06 02:25:10.000000000 +0100\n+++ unzip60/process.c\t2014-12-05 22:42:39.000000000 +0100\n@@ -1,5 +1,5 @@ \n /*\n-  Copyright (c) 1990-2009 Info-ZIP.  All rights reserved.\n+  Copyright (c) 1990-2014 Info-ZIP.  All rights reserved.\n \n   See the accompanying file LICENSE, version 2009-Jan-02 or later\n   (the contents of which are also included in unzip.h) for terms of use.\n@@ -1888,48 +1888,82 @@ int getZip64Data(__G__ ef_buf, ef_len)\n     and a 4-byte version of disk start number.\n     Sets both local header and central header fields.  Not terribly clever,\n     but it means that this procedure is only called in one place.\n+\n+    2014-12-05 SMS.\n+    Added checks to ensure that enough data are available before calling\n+    makeint64() or makelong().  Replaced various sizeof() values with\n+    simple (\"4\" or \"8\") constants.  (The Zip64 structures do not depend\n+    on our variable sizes.)  Error handling is crude, but we should now\n+    stay within the buffer.\n   ---------------------------------------------------------------------------*/\n \n+#define Z64FLGS 0xffff\n+#define Z64FLGL 0xffffffff\n+\n     if (ef_len == 0 || ef_buf == NULL)\n         return PK_COOL;\n \n     Trace((stderr,\"\\ngetZip64Data: scanning extra field of length %u\\n\",\n       ef_len));\n \n-    while (ef_len >= EB_HEADSIZE) {\n+    while (ef_len >= EB_HEADSIZE)\n+    {\n         eb_id = makeword(EB_ID + ef_buf);\n         eb_len = makeword(EB_LEN + ef_buf);\n \n-        if (eb_len > (ef_len - EB_HEADSIZE)) {\n-            /* discovered some extra field inconsistency! */\n+        if (eb_len > (ef_len - EB_HEADSIZE))\n+        {\n+            /* Extra block length exceeds remaining extra field length. */\n             Trace((stderr,\n               \"getZip64Data: block length %u > rest ef_size %u\\n\", eb_len,\n               ef_len - EB_HEADSIZE));\n             break;\n         }\n-        if (eb_id == EF_PKSZ64) {\n-\n+        if (eb_id == EF_PKSZ64)\n+        {\n           int offset = EB_HEADSIZE;\n \n-          if (G.crec.ucsize == 0xffffffff || G.lrec.ucsize == 0xffffffff){\n-            G.lrec.ucsize = G.crec.ucsize = makeint64(offset + ef_buf);\n-            offset += sizeof(G.crec.ucsize);\n+          if ((G.crec.ucsize == Z64FLGL) || (G.lrec.ucsize == Z64FLGL))\n+          {\n+            if (offset+ 8 > ef_len)\n+              return PK_ERR;\n+\n+            G.crec.ucsize = G.lrec.ucsize = makeint64(offset + ef_buf);\n+            offset += 8;\n           }\n-          if (G.crec.csize == 0xffffffff || G.lrec.csize == 0xffffffff){\n-            G.csize = G.lrec.csize = G.crec.csize = makeint64(offset + ef_buf);\n-            offset += sizeof(G.crec.csize);\n+\n+          if ((G.crec.csize == Z64FLGL) || (G.lrec.csize == Z64FLGL))\n+          {\n+            if (offset+ 8 > ef_len)\n+              return PK_ERR;\n+\n+            G.csize = G.crec.csize = G.lrec.csize = makeint64(offset + ef_buf);\n+            offset += 8;\n           }\n-          if (G.crec.relative_offset_local_header == 0xffffffff){\n+\n+          if (G.crec.relative_offset_local_header == Z64FLGL)\n+          {\n+            if (offset+ 8 > ef_len)\n+              return PK_ERR;\n+\n             G.crec.relative_offset_local_header = makeint64(offset + ef_buf);\n-            offset += sizeof(G.crec.relative_offset_local_header);\n+            offset += 8;\n           }\n-          if (G.crec.disk_number_start == 0xffff){\n+\n+          if (G.crec.disk_number_start == Z64FLGS)\n+          {\n+            if (offset+ 4 > ef_len)\n+              return PK_ERR;\n+\n             G.crec.disk_number_start = (zuvl_t)makelong(offset + ef_buf);\n-            offset += sizeof(G.crec.disk_number_start);\n+            offset += 4;\n           }\n+#if 0\n+          break;                /* Expect only one EF_PKSZ64 block. */\n+#endif /* 0 */\n         }\n \n-        /* Skip this extra field block */\n+        /* Skip this extra field block. */\n         ef_buf += (eb_len + EB_HEADSIZE);\n         ef_len -= (eb_len + EB_HEADSIZE);\n     }\n--- unzip60/fileio.c\t2009-04-20 02:03:44.000000000 +0200\n+++ unzip60/fileio.c\t2014-12-05 22:44:16.000000000 +0100\n@@ -176,6 +176,8 @@ static ZCONST char Far FilenameTooLongTr\n #endif\n static ZCONST char Far ExtraFieldTooLong[] =\n   \"warning:  extra field too long (%d).  Ignoring...\\n\";\n+static ZCONST char Far ExtraFieldCorrupt[] =\n+  \"warning:  extra field (type: 0x%04x) corrupt.  Continuing...\\n\";\n \n #ifdef WINDLL\n    static ZCONST char Far DiskFullQuery[] =\n@@ -2295,7 +2297,12 @@ int do_string(__G__ length, option)   /*\n             if (readbuf(__G__ (char *)G.extra_field, length) == 0)\n                 return PK_EOF;\n             /* Looks like here is where extra fields are read */\n-            getZip64Data(__G__ G.extra_field, length);\n+            if (getZip64Data(__G__ G.extra_field, length) != PK_COOL)\n+            {\n+                Info(slide, 0x401, ((char *)slide,\n+                 LoadFarString( ExtraFieldCorrupt), EF_PKSZ64));\n+                error = PK_WARN;\n+            }\n #ifdef UNICODE_SUPPORT\n             G.unipath_filename = NULL;\n             if (G.UzO.U_flag < 2) {\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 190040ebfcf5395a6ccedede2cc9343d34f0a108 Mon Sep 17 00:00:00 2001\nFrom: mancha <mancha1 AT zoho DOT com>\nDate: Wed, 11 Feb 2015\nSubject: Info-ZIP UnZip buffer overflow\n\nBy carefully crafting a corrupt ZIP archive with \"extra fields\" that\npurport to have compressed blocks larger than the corresponding\nuncompressed blocks in STORED no-compression mode, an attacker can\ntrigger a heap overflow that can result in application crash or\npossibly have other unspecified impact.\n\nThis patch ensures that when extra fields use STORED mode, the\n\"compressed\" and uncompressed block sizes match.\n\n---\n extract.c |    8 ++++++++\n 1 file changed, 8 insertions(+)\n\n--- a/extract.c\n+++ b/extract.c\n@@ -2217,6 +2217,7 @@ static int test_compr_eb(__G__ eb, eb_si\n     ulg eb_ucsize;\n     uch *eb_ucptr;\n     int r;\n+    ush method;\n \n     if (compr_offset < 4)                /* field is not compressed: */\n         return PK_OK;                    /* do nothing and signal OK */\n@@ -2226,6 +2227,13 @@ static int test_compr_eb(__G__ eb, eb_si\n          eb_size <= (compr_offset + EB_CMPRHEADLEN)))\n         return IZ_EF_TRUNC;               /* no compressed data! */\n \n+    method = makeword(eb + (EB_HEADSIZE + compr_offset));\n+    if ((method == STORED) &&\n+        (eb_size - compr_offset - EB_CMPRHEADLEN != eb_ucsize))\n+\treturn PK_ERR;\t\t\t  /* compressed & uncompressed\n+\t\t\t\t\t   * should match in STORED\n+\t\t\t\t\t   * method */\n+\n     if (\n #ifdef INT_16BIT\n         (((ulg)(extent)eb_ucsize) != eb_ucsize) ||\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 68efed87fabddd450c08f3112f62a73f61d493c9 Mon Sep 17 00:00:00 2001\nFrom: Petr Stodulka <pstodulk@redhat.com>\nDate: Mon, 14 Sep 2015 18:23:17 +0200\nSubject: [PATCH 1/2] upstream fix for heap overflow\n\nhttps://bugzilla.redhat.com/attachment.cgi?id=1073002\n---\n crypt.c | 12 +++++++++++-\n 1 file changed, 11 insertions(+), 1 deletion(-)\n\ndiff --git a/crypt.c b/crypt.c\nindex 784e411..a8975f2 100644\n--- a/crypt.c\n+++ b/crypt.c\n@@ -465,7 +465,17 @@ int decrypt(__G__ passwrd)\n     GLOBAL(pInfo->encrypted) = FALSE;\n     defer_leftover_input(__G);\n     for (n = 0; n < RAND_HEAD_LEN; n++) {\n-        b = NEXTBYTE;\n+        /* 2012-11-23 SMS.  (OUSPG report.)\n+         * Quit early if compressed size < HEAD_LEN.  The resulting\n+         * error message (\"unable to get password\") could be improved,\n+         * but it's better than trying to read nonexistent data, and\n+         * then continuing with a negative G.csize.  (See\n+         * fileio.c:readbyte()).\n+         */\n+        if ((b = NEXTBYTE) == (ush)EOF)\n+        {\n+            return PK_ERR;\n+        }\n         h[n] = (uch)b;\n         Trace((stdout, \" (%02x)\", h[n]));\n     }\n-- \n2.4.6\n\n\nFrom bd8a743ee0a77e65ad07ef4196c4cd366add3f26 Mon Sep 17 00:00:00 2001\nFrom: Kamil Dudka <kdudka@redhat.com>\nDate: Mon, 14 Sep 2015 18:24:56 +0200\nSubject: [PATCH 2/2] fix infinite loop when extracting empty bzip2 data\n\n---\n extract.c | 6 ++++++\n 1 file changed, 6 insertions(+)\n\ndiff --git a/extract.c b/extract.c\nindex 7134bfe..29db027 100644\n--- a/extract.c\n+++ b/extract.c\n@@ -2733,6 +2733,12 @@ __GDEF\n     int repeated_buf_err;\n     bz_stream bstrm;\n \n+    if (G.incnt <= 0 && G.csize <= 0L) {\n+        /* avoid an infinite loop */\n+        Trace((stderr, \"UZbunzip2() got empty input\\n\"));\n+        return 2;\n+    }\n+\n #if (defined(DLL) && !defined(NO_SLIDE_REDIR))\n     if (G.redirect_slide)\n         wsize = G.redirect_size, redirSlide = G.redirect_buffer;\n-- \n2.4.6\n\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From bd150334fb4084f5555a6be26b015a0671cb5b74 Mon Sep 17 00:00:00 2001\nFrom: Kamil Dudka <kdudka@redhat.com>\nDate: Tue, 22 Sep 2015 18:52:23 +0200\nSubject: [PATCH] extract: prevent unsigned overflow on invalid input\n\nSuggested-by: Stefan Cornelius\n---\n extract.c | 11 ++++++++++-\n 1 file changed, 10 insertions(+), 1 deletion(-)\n\ndiff --git a/extract.c b/extract.c\nindex 29db027..b9ae667 100644\n--- a/extract.c\n+++ b/extract.c\n@@ -1257,8 +1257,17 @@ static int extract_or_test_entrylist(__G__ numchunk,\n         if (G.lrec.compression_method == STORED) {\n             zusz_t csiz_decrypted = G.lrec.csize;\n \n-            if (G.pInfo->encrypted)\n+            if (G.pInfo->encrypted) {\n+                if (csiz_decrypted <= 12) {\n+                    /* handle the error now to prevent unsigned overflow */\n+                    Info(slide, 0x401, ((char *)slide,\n+                      LoadFarStringSmall(ErrUnzipNoFile),\n+                      LoadFarString(InvalidComprData),\n+                      LoadFarStringSmall2(Inflate)));\n+                    return PK_ERR;\n+                }\n                 csiz_decrypted -= 12;\n+            }\n             if (G.lrec.ucsize != csiz_decrypted) {\n                 Info(slide, 0x401, ((char *)slide,\n                   LoadFarStringSmall2(WrnStorUCSizCSizDiff),\n-- \n2.5.2\n\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From: \"Steven M. Schweda\" <sms@antinode.info>\nSubject: Fix CVE-2014-9913, buffer overflow in unzip\nBug: https://sourceforge.net/p/infozip/bugs/27/\nBug-Debian: https://bugs.debian.org/847485\nBug-Ubuntu: https://launchpad.net/bugs/387350\nX-Debian-version: 6.0-21\n\n--- a/list.c\n+++ b/list.c\n@@ -339,7 +339,18 @@\n                 G.crec.compression_method == ENHDEFLATED) {\n                 methbuf[5] = dtype[(G.crec.general_purpose_bit_flag>>1) & 3];\n             } else if (methnum >= NUM_METHODS) {\n-                sprintf(&methbuf[4], \"%03u\", G.crec.compression_method);\n+                /* 2013-02-26 SMS.\n+                 * http://sourceforge.net/p/infozip/bugs/27/  CVE-2014-9913.\n+                 * Unexpectedly large compression methods overflow\n+                 * &methbuf[].  Use the old, three-digit decimal format\n+                 * for values which fit.  Otherwise, sacrifice the\n+                 * colon, and use four-digit hexadecimal.\n+                 */\n+                if (G.crec.compression_method <= 999) {\n+                    sprintf( &methbuf[ 4], \"%03u\", G.crec.compression_method);\n+                } else {\n+                    sprintf( &methbuf[ 3], \"%04X\", G.crec.compression_method);\n+                }\n             }\n \n #if 0       /* GRR/Euro:  add this? */\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From: \"Steven M. Schweda\" <sms@antinode.info>\nSubject: Fix CVE-2016-9844, buffer overflow in zipinfo\nBug-Debian: https://bugs.debian.org/847486\nBug-Ubuntu: https://launchpad.net/bugs/1643750\nX-Debian-version: 6.0-21\n\n--- a/zipinfo.c\n+++ b/zipinfo.c\n@@ -1921,7 +1921,18 @@\n         ush  dnum=(ush)((G.crec.general_purpose_bit_flag>>1) & 3);\n         methbuf[3] = dtype[dnum];\n     } else if (methnum >= NUM_METHODS) {   /* unknown */\n-        sprintf(&methbuf[1], \"%03u\", G.crec.compression_method);\n+        /* 2016-12-05 SMS.\n+         * https://launchpad.net/bugs/1643750\n+         * Unexpectedly large compression methods overflow\n+         * &methbuf[].  Use the old, three-digit decimal format\n+         * for values which fit.  Otherwise, sacrifice the \"u\",\n+         * and use four-digit hexadecimal.\n+         */\n+        if (G.crec.compression_method <= 999) {\n+            sprintf( &methbuf[ 1], \"%03u\", G.crec.compression_method);\n+        } else {\n+            sprintf( &methbuf[ 0], \"%04X\", G.crec.compression_method);\n+        }\n     }\n \n     for (k = 0;  k < 15;  ++k)\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- unzip60/list.c\t\n+++ unzip60/list.c\t\n@@ -97,7 +97,7 @@ int list_files(__G)    /* return PK-type\n {\n     int do_this_file=FALSE, cfactor, error, error_in_archive=PK_COOL;\n #ifndef WINDLL\n-    char sgn, cfactorstr[10];\n+    char sgn, cfactorstr[1+10+1+1];\t/* <sgn><int>%NUL */\n     int longhdr=(uO.vflag>1);\n #endif\n     int date_format;\n@@ -389,9 +389,9 @@ int list_files(__G)    /* return PK-type\n             }\n #else /* !WINDLL */\n             if (cfactor == 100)\n-                sprintf(cfactorstr, LoadFarString(CompFactor100));\n+                snprintf(cfactorstr, sizeof(cfactorstr), LoadFarString(CompFactor100));\n             else\n-                sprintf(cfactorstr, LoadFarString(CompFactorStr), sgn, cfactor);\n+                snprintf(cfactorstr, sizeof(cfactorstr), LoadFarString(CompFactorStr), sgn, cfactor);\n             if (longhdr)\n                 Info(slide, 0, ((char *)slide, LoadFarString(LongHdrStats),\n                   FmZofft(G.crec.ucsize, \"8\", \"u\"), methbuf,\n@@ -471,9 +471,9 @@ int list_files(__G)    /* return PK-type\n \n #else /* !WINDLL */\n         if (cfactor == 100)\n-            sprintf(cfactorstr, LoadFarString(CompFactor100));\n+            snprintf(cfactorstr, sizeof(cfactorstr), LoadFarString(CompFactor100));\n         else\n-            sprintf(cfactorstr, LoadFarString(CompFactorStr), sgn, cfactor);\n+            snprintf(cfactorstr, sizeof(cfactorstr), LoadFarString(CompFactorStr), sgn, cfactor);\n         if (longhdr) {\n             Info(slide, 0, ((char *)slide, LoadFarString(LongFileTrailer),\n               FmZofft(tot_ucsize, \"8\", \"u\"), FmZofft(tot_csize, \"8\", \"u\"),\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/unix/Makefile\n+++ b/unix/Makefile\n@@ -42,9 +42,9 @@\n # such as -DDOSWILD).\n \n # UnZip flags\n-CC = cc#\ttry using \"gcc\" target rather than changing this (CC and LD\n+CC ?= cc#\ttry using \"gcc\" target rather than changing this (CC and LD\n LD = $(CC)#\tmust match, else \"unresolved symbol:  ___main\" is possible)\n-AS = as\n+AS ?= as\n LOC = $(D_USE_BZ2) $(LOCAL_UNZIP)\n AF = $(LOC)\n CFLAGS = -O\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 41beb477c5744bc396fa1162ee0c14218ec12213 Mon Sep 17 00:00:00 2001\nFrom: Mark Adler <madler@alumni.caltech.edu>\nDate: Mon, 27 May 2019 08:20:32 -0700\nSubject: [PATCH] Fix bug in undefer_input() that misplaced the input state.\n\n---\n fileio.c | 4 +++-\n 1 file changed, 3 insertions(+), 1 deletion(-)\n\ndiff --git a/fileio.c b/fileio.c\nindex c042987..bc00d74 100644\n--- a/fileio.c\n+++ b/fileio.c\n@@ -530,8 +530,10 @@ void undefer_input(__G)\n          * This condition was checked when G.incnt_leftover was set > 0 in\n          * defer_leftover_input(), and it is NOT allowed to touch G.csize\n          * before calling undefer_input() when (G.incnt_leftover > 0)\n-         * (single exception: see read_byte()'s  \"G.csize <= 0\" handling) !!\n+         * (single exception: see readbyte()'s  \"G.csize <= 0\" handling) !!\n          */\n+        if (G.csize < 0L)\n+            G.csize = 0L;\n         G.incnt = G.incnt_leftover + (int)G.csize;\n         G.inptr = G.inptr_leftover - (int)G.csize;\n         G.incnt_leftover = 0;\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 47b3ceae397d21bf822bc2ac73052a4b1daf8e1c Mon Sep 17 00:00:00 2001\nFrom: Mark Adler <madler@alumni.caltech.edu>\nDate: Tue, 11 Jun 2019 22:01:18 -0700\nSubject: [PATCH] Detect and reject a zip bomb using overlapped entries.\n\nThis detects an invalid zip file that has at least one entry that\noverlaps with another entry or with the central directory to the\nend of the file. A Fifield zip bomb uses overlapped local entries\nto vastly increase the potential inflation ratio. Such an invalid\nzip file is rejected.\n\nSee https://www.bamsoftware.com/hacks/zipbomb/ for David Fifield's\nanalysis, construction, and examples of such zip bombs.\n\nThe detection maintains a list of covered spans of the zip files\nso far, where the central directory to the end of the file and any\nbytes preceding the first entry at zip file offset zero are\nconsidered covered initially. Then as each entry is decompressed\nor tested, it is considered covered. When a new entry is about to\nbe processed, its initial offset is checked to see if it is\ncontained by a covered span. If so, the zip file is rejected as\ninvalid.\n\nThis commit depends on a preceding commit: \"Fix bug in\nundefer_input() that misplaced the input state.\"\n---\n extract.c | 190 +++++++++++++++++++++++++++++++++++++++++++++++++++++-\n globals.c |   1 +\n globals.h |   3 +\n process.c |  11 ++++\n unzip.h   |   1 +\n 5 files changed, 205 insertions(+), 1 deletion(-)\n\ndiff --git a/extract.c b/extract.c\nindex 1acd769..0973a33 100644\n--- a/extract.c\n+++ b/extract.c\n@@ -319,6 +319,125 @@ static ZCONST char Far UnsupportedExtraField[] =\n   \"\\nerror:  unsupported extra-field compression type (%u)--skipping\\n\";\n static ZCONST char Far BadExtraFieldCRC[] =\n   \"error [%s]:  bad extra-field CRC %08lx (should be %08lx)\\n\";\n+static ZCONST char Far NotEnoughMemCover[] =\n+  \"error: not enough memory for bomb detection\\n\";\n+static ZCONST char Far OverlappedComponents[] =\n+  \"error: invalid zip file with overlapped components (possible zip bomb)\\n\";\n+\n+\n+\n+\n+\n+/* A growable list of spans. */\n+typedef zoff_t bound_t;\n+typedef struct {\n+    bound_t beg;        /* start of the span */\n+    bound_t end;        /* one past the end of the span */\n+} span_t;\n+typedef struct {\n+    span_t *span;       /* allocated, distinct, and sorted list of spans */\n+    size_t num;         /* number of spans in the list */\n+    size_t max;         /* allocated number of spans (num <= max) */\n+} cover_t;\n+\n+/*\n+ * Return the index of the first span in cover whose beg is greater than val.\n+ * If there is no such span, then cover->num is returned.\n+ */\n+static size_t cover_find(cover, val)\n+    cover_t *cover;\n+    bound_t val;\n+{\n+    size_t lo = 0, hi = cover->num;\n+    while (lo < hi) {\n+        size_t mid = (lo + hi) >> 1;\n+        if (val < cover->span[mid].beg)\n+            hi = mid;\n+        else\n+            lo = mid + 1;\n+    }\n+    return hi;\n+}\n+\n+/* Return true if val lies within any one of the spans in cover. */\n+static int cover_within(cover, val)\n+    cover_t *cover;\n+    bound_t val;\n+{\n+    size_t pos = cover_find(cover, val);\n+    return pos > 0 && val < cover->span[pos - 1].end;\n+}\n+\n+/*\n+ * Add a new span to the list, but only if the new span does not overlap any\n+ * spans already in the list. The new span covers the values beg..end-1. beg\n+ * must be less than end.\n+ *\n+ * Keep the list sorted and merge adjacent spans. Grow the allocated space for\n+ * the list as needed. On success, 0 is returned. If the new span overlaps any\n+ * existing spans, then 1 is returned and the new span is not added to the\n+ * list. If the new span is invalid because beg is greater than or equal to\n+ * end, then -1 is returned. If the list needs to be grown but the memory\n+ * allocation fails, then -2 is returned.\n+ */\n+static int cover_add(cover, beg, end)\n+    cover_t *cover;\n+    bound_t beg;\n+    bound_t end;\n+{\n+    size_t pos;\n+    int prec, foll;\n+\n+    if (beg >= end)\n+    /* The new span is invalid. */\n+        return -1;\n+\n+    /* Find where the new span should go, and make sure that it does not\n+       overlap with any existing spans. */\n+    pos = cover_find(cover, beg);\n+    if ((pos > 0 && beg < cover->span[pos - 1].end) ||\n+        (pos < cover->num && end > cover->span[pos].beg))\n+        return 1;\n+\n+    /* Check for adjacencies. */\n+    prec = pos > 0 && beg == cover->span[pos - 1].end;\n+    foll = pos < cover->num && end == cover->span[pos].beg;\n+    if (prec && foll) {\n+        /* The new span connects the preceding and following spans. Merge the\n+           following span into the preceding span, and delete the following\n+           span. */\n+        cover->span[pos - 1].end = cover->span[pos].end;\n+        cover->num--;\n+        memmove(cover->span + pos, cover->span + pos + 1,\n+                (cover->num - pos) * sizeof(span_t));\n+    }\n+    else if (prec)\n+        /* The new span is adjacent only to the preceding span. Extend the end\n+           of the preceding span. */\n+        cover->span[pos - 1].end = end;\n+    else if (foll)\n+        /* The new span is adjacent only to the following span. Extend the\n+           beginning of the following span. */\n+        cover->span[pos].beg = beg;\n+    else {\n+        /* The new span has gaps between both the preceding and the following\n+           spans. Assure that there is room and insert the span.  */\n+        if (cover->num == cover->max) {\n+            size_t max = cover->max == 0 ? 16 : cover->max << 1;\n+            span_t *span = realloc(cover->span, max * sizeof(span_t));\n+            if (span == NULL)\n+                return -2;\n+            cover->span = span;\n+            cover->max = max;\n+        }\n+        memmove(cover->span + pos + 1, cover->span + pos,\n+                (cover->num - pos) * sizeof(span_t));\n+        cover->num++;\n+        cover->span[pos].beg = beg;\n+        cover->span[pos].end = end;\n+    }\n+    return 0;\n+}\n \n \n \n@@ -374,6 +493,29 @@ int extract_or_test_files(__G)    /* return PK-type error code */\n     }\n #endif /* !SFX || SFX_EXDIR */\n \n+    /* One more: initialize cover structure for bomb detection. Start with a\n+       span that covers the central directory though the end of the file. */\n+    if (G.cover == NULL) {\n+        G.cover = malloc(sizeof(cover_t));\n+        if (G.cover == NULL) {\n+            Info(slide, 0x401, ((char *)slide,\n+              LoadFarString(NotEnoughMemCover)));\n+            return PK_MEM;\n+        }\n+        ((cover_t *)G.cover)->span = NULL;\n+        ((cover_t *)G.cover)->max = 0;\n+    }\n+    ((cover_t *)G.cover)->num = 0;\n+    if ((G.extra_bytes != 0 &&\n+         cover_add((cover_t *)G.cover, 0, G.extra_bytes) != 0) ||\n+        cover_add((cover_t *)G.cover,\n+                  G.extra_bytes + G.ecrec.offset_start_central_directory,\n+                  G.ziplen) != 0) {\n+        Info(slide, 0x401, ((char *)slide,\n+          LoadFarString(NotEnoughMemCover)));\n+        return PK_MEM;\n+    }\n+\n /*---------------------------------------------------------------------------\n     The basic idea of this function is as follows.  Since the central di-\n     rectory lies at the end of the zipfile and the member files lie at the\n@@ -591,7 +733,8 @@ int extract_or_test_files(__G)    /* return PK-type error code */\n             if (error > error_in_archive)\n                 error_in_archive = error;\n             /* ...and keep going (unless disk full or user break) */\n-            if (G.disk_full > 1 || error_in_archive == IZ_CTRLC) {\n+            if (G.disk_full > 1 || error_in_archive == IZ_CTRLC ||\n+                error == PK_BOMB) {\n                 /* clear reached_end to signal premature stop ... */\n                 reached_end = FALSE;\n                 /* ... and cancel scanning the central directory */\n@@ -1060,6 +1203,11 @@ static int extract_or_test_entrylist(__G__ numchunk,\n \n         /* seek_zipf(__G__ pInfo->offset);  */\n         request = G.pInfo->offset + G.extra_bytes;\n+        if (cover_within((cover_t *)G.cover, request)) {\n+            Info(slide, 0x401, ((char *)slide,\n+              LoadFarString(OverlappedComponents)));\n+            return PK_BOMB;\n+        }\n         inbuf_offset = request % INBUFSIZ;\n         bufstart = request - inbuf_offset;\n \n@@ -1591,6 +1739,18 @@ static int extract_or_test_entrylist(__G__ numchunk,\n             return IZ_CTRLC;        /* cancel operation by user request */\n         }\n #endif\n+        error = cover_add((cover_t *)G.cover, request,\n+                          G.cur_zipfile_bufstart + (G.inptr - G.inbuf));\n+        if (error < 0) {\n+            Info(slide, 0x401, ((char *)slide,\n+              LoadFarString(NotEnoughMemCover)));\n+            return PK_MEM;\n+        }\n+        if (error != 0) {\n+            Info(slide, 0x401, ((char *)slide,\n+              LoadFarString(OverlappedComponents)));\n+            return PK_BOMB;\n+        }\n #ifdef MACOS  /* MacOS is no preemptive OS, thus call event-handling by hand */\n         UserStop();\n #endif\n@@ -1992,6 +2152,34 @@ static int extract_or_test_member(__G)    /* return PK-type error code */\n     }\n \n     undefer_input(__G);\n+\n+    if ((G.lrec.general_purpose_bit_flag & 8) != 0) {\n+        /* skip over data descriptor (harder than it sounds, due to signature\n+         * ambiguity)\n+         */\n+#       define SIG 0x08074b50\n+#       define LOW 0xffffffff\n+        uch buf[12];\n+        unsigned shy = 12 - readbuf((char *)buf, 12);\n+        ulg crc = shy ? 0 : makelong(buf);\n+        ulg clen = shy ? 0 : makelong(buf + 4);\n+        ulg ulen = shy ? 0 : makelong(buf + 8); /* or high clen if ZIP64 */\n+        if (crc == SIG &&                       /* if not SIG, no signature */\n+            (G.lrec.crc32 != SIG ||             /* if not SIG, have signature */\n+             (clen == SIG &&                    /* if not SIG, no signature */\n+              ((G.lrec.csize & LOW) != SIG ||   /* if not SIG, have signature */\n+               (ulen == SIG &&                  /* if not SIG, no signature */\n+                (G.zip64 ? G.lrec.csize >> 32 : G.lrec.ucsize) != SIG\n+                                                /* if not SIG, have signature */\n+                )))))\n+                   /* skip four more bytes to account for signature */\n+                   shy += 4 - readbuf((char *)buf, 4);\n+        if (G.zip64)\n+            shy += 8 - readbuf((char *)buf, 8); /* skip eight more for ZIP64 */\n+        if (shy)\n+            error = PK_ERR;\n+    }\n+\n     return error;\n \n } /* end function extract_or_test_member() */\ndiff --git a/globals.c b/globals.c\nindex fa8cca5..1e0f608 100644\n--- a/globals.c\n+++ b/globals.c\n@@ -181,6 +181,7 @@ Uz_Globs *globalsCtor()\n # if (!defined(NO_TIMESTAMPS))\n     uO.D_flag=1;    /* default to '-D', no restoration of dir timestamps */\n # endif\n+    G.cover = NULL;     /* not allocated yet */\n #endif\n \n     uO.lflag=(-1);\ndiff --git a/globals.h b/globals.h\nindex 11b7215..2bdcdeb 100644\n--- a/globals.h\n+++ b/globals.h\n@@ -260,12 +260,15 @@ typedef struct Globals {\n     ecdir_rec       ecrec;         /* used in unzip.c, extract.c */\n     z_stat   statbuf;              /* used by main, mapname, check_for_newer */\n \n+    int zip64;                     /* true if Zip64 info in extra field */\n+\n     int      mem_mode;\n     uch      *outbufptr;           /* extract.c static */\n     ulg      outsize;              /* extract.c static */\n     int      reported_backslash;   /* extract.c static */\n     int      disk_full;\n     int      newfile;\n+    void     **cover;              /* used in extract.c for bomb detection */\n \n     int      didCRlast;            /* fileio static */\n     ulg      numlines;             /* fileio static: number of lines printed */\ndiff --git a/process.c b/process.c\nindex 1e9a1e1..d2e4dc3 100644\n--- a/process.c\n+++ b/process.c\n@@ -637,6 +637,13 @@ void free_G_buffers(__G)     /* releases all memory allocated in global vars */\n     }\n #endif\n \n+    /* Free the cover span list and the cover structure. */\n+    if (G.cover != NULL) {\n+        free(*(G.cover));\n+        free(G.cover);\n+        G.cover = NULL;\n+    }\n+\n } /* end function free_G_buffers() */\n \n \n@@ -1890,6 +1897,8 @@ int getZip64Data(__G__ ef_buf, ef_len)\n     but it means that this procedure is only called in one place.\n   ---------------------------------------------------------------------------*/\n \n+    G.zip64 = FALSE;\n+\n     if (ef_len == 0 || ef_buf == NULL)\n         return PK_COOL;\n \n@@ -1927,6 +1936,8 @@ int getZip64Data(__G__ ef_buf, ef_len)\n             G.crec.disk_number_start = (zuvl_t)makelong(offset + ef_buf);\n             offset += sizeof(G.crec.disk_number_start);\n           }\n+\n+          G.zip64 = TRUE;\n         }\n \n         /* Skip this extra field block */\ndiff --git a/unzip.h b/unzip.h\nindex 5b2a326..ed24a5b 100644\n--- a/unzip.h\n+++ b/unzip.h\n@@ -645,6 +645,7 @@ typedef struct _Uzp_cdir_Rec {\n #define PK_NOZIP           9   /* zipfile not found */\n #define PK_PARAM          10   /* bad or illegal parameters specified */\n #define PK_FIND           11   /* no files found */\n+#define PK_BOMB           12   /* likely zip bomb */\n #define PK_DISK           50   /* disk full */\n #define PK_EOF            51   /* unexpected EOF */\n \n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 6d351831be705cc26d897db44f878a978f4138fc Mon Sep 17 00:00:00 2001\nFrom: Mark Adler <madler@alumni.caltech.edu>\nDate: Thu, 25 Jul 2019 20:43:17 -0700\nSubject: [PATCH] Do not raise a zip bomb alert for a misplaced central\n directory.\n\nThere is a zip-like file in the Firefox distribution, omni.ja,\nwhich is a zip container with the central directory placed at the\nstart of the file instead of after the local entries as required\nby the zip standard. This commit marks the actual location of the\ncentral directory, as well as the end of central directory records,\nas disallowed locations. This now permits such containers to not\nraise a zip bomb alert, where in fact there are no overlaps.\n---\n extract.c | 25 +++++++++++++++++++------\n process.c |  6 ++++++\n unzpriv.h | 10 ++++++++++\n 3 files changed, 35 insertions(+), 6 deletions(-)\n\ndiff --git a/extract.c b/extract.c\nindex 0973a33..1b73cb0 100644\n--- a/extract.c\n+++ b/extract.c\n@@ -493,8 +493,11 @@ int extract_or_test_files(__G)    /* return PK-type error code */\n     }\n #endif /* !SFX || SFX_EXDIR */\n \n-    /* One more: initialize cover structure for bomb detection. Start with a\n-       span that covers the central directory though the end of the file. */\n+    /* One more: initialize cover structure for bomb detection. Start with\n+       spans that cover any extra bytes at the start, the central directory,\n+       the end of central directory record (including the Zip64 end of central\n+       directory locator, if present), and the Zip64 end of central directory\n+       record, if present. */\n     if (G.cover == NULL) {\n         G.cover = malloc(sizeof(cover_t));\n         if (G.cover == NULL) {\n@@ -506,15 +509,25 @@ int extract_or_test_files(__G)    /* return PK-type error code */\n         ((cover_t *)G.cover)->max = 0;\n     }\n     ((cover_t *)G.cover)->num = 0;\n-    if ((G.extra_bytes != 0 &&\n-         cover_add((cover_t *)G.cover, 0, G.extra_bytes) != 0) ||\n-        cover_add((cover_t *)G.cover,\n+    if (cover_add((cover_t *)G.cover,\n                   G.extra_bytes + G.ecrec.offset_start_central_directory,\n-                  G.ziplen) != 0) {\n+                  G.extra_bytes + G.ecrec.offset_start_central_directory +\n+                  G.ecrec.size_central_directory) != 0) {\n         Info(slide, 0x401, ((char *)slide,\n           LoadFarString(NotEnoughMemCover)));\n         return PK_MEM;\n     }\n+    if ((G.extra_bytes != 0 &&\n+         cover_add((cover_t *)G.cover, 0, G.extra_bytes) != 0) ||\n+        (G.ecrec.have_ecr64 &&\n+         cover_add((cover_t *)G.cover, G.ecrec.ec64_start,\n+                   G.ecrec.ec64_end) != 0) ||\n+        cover_add((cover_t *)G.cover, G.ecrec.ec_start,\n+                  G.ecrec.ec_end) != 0) {\n+        Info(slide, 0x401, ((char *)slide,\n+          LoadFarString(OverlappedComponents)));\n+        return PK_BOMB;\n+    }\n \n /*---------------------------------------------------------------------------\n     The basic idea of this function is as follows.  Since the central di-\ndiff --git a/process.c b/process.c\nindex d2e4dc3..d75d405 100644\n--- a/process.c\n+++ b/process.c\n@@ -1408,6 +1408,10 @@ static int find_ecrec64(__G__ searchlen)         /* return PK-class error */\n \n     /* Now, we are (almost) sure that we have a Zip64 archive. */\n     G.ecrec.have_ecr64 = 1;\n+    G.ecrec.ec_start -= ECLOC64_SIZE+4;\n+    G.ecrec.ec64_start = ecrec64_start_offset;\n+    G.ecrec.ec64_end = ecrec64_start_offset +\n+                       12 + makeint64(&byterec[ECREC64_LENGTH]);\n \n     /* Update the \"end-of-central-dir offset\" for later checks. */\n     G.real_ecrec_offset = ecrec64_start_offset;\n@@ -1542,6 +1546,8 @@ static int find_ecrec(__G__ searchlen)          /* return PK-class error */\n       makelong(&byterec[OFFSET_START_CENTRAL_DIRECTORY]);\n     G.ecrec.zipfile_comment_length =\n       makeword(&byterec[ZIPFILE_COMMENT_LENGTH]);\n+    G.ecrec.ec_start = G.real_ecrec_offset;\n+    G.ecrec.ec_end = G.ecrec.ec_start + 22 + G.ecrec.zipfile_comment_length;\n \n     /* Now, we have to read the archive comment, BEFORE the file pointer\n        is moved away backwards to seek for a Zip64 ECLOC64 structure.\ndiff --git a/unzpriv.h b/unzpriv.h\nindex dc9eff5..297b3c7 100644\n--- a/unzpriv.h\n+++ b/unzpriv.h\n@@ -2185,6 +2185,16 @@ typedef struct VMStimbuf {\n        int have_ecr64;                  /* valid Zip64 ecdir-record exists */\n        int is_zip64_archive;            /* Zip64 ecdir-record is mandatory */\n        ush zipfile_comment_length;\n+       zusz_t ec_start, ec_end;         /* offsets of start and end of the\n+                                           end of central directory record,\n+                                           including if present the Zip64\n+                                           end of central directory locator,\n+                                           which immediately precedes the\n+                                           end of central directory record */\n+       zusz_t ec64_start, ec64_end;     /* if have_ecr64 is true, then these\n+                                           are the offsets of the start and\n+                                           end of the Zip64 end of central\n+                                           directory record */\n    } ecdir_rec;\n \n \n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From: Andreas Schwab <schwab@linux-m68k.org>\nSubject: Initialize the symlink flag\nBug-Debian: https://bugs.debian.org/717029\nX-Debian-version: 6.0-10\n\n--- a/process.c\n+++ b/process.c\n@@ -1758,6 +1758,12 @@\n         = (G.crec.general_purpose_bit_flag & (1 << 11)) == (1 << 11);\n #endif\n \n+#ifdef SYMLINKS\n+    /* Initialize the symlink flag, may be set by the platform-specific\n+       mapattr function.  */\n+    G.pInfo->symlink = 0;\n+#endif\n+\n     return PK_COOL;\n \n } /* end function process_cdir_file_hdr() */\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From: Steven M. Schweda <sms@antinode.info>\nSubject: Fix for CVE-2022-0529 and CVE-2022-0530\nBug-Debian: https://bugs.debian.org/1010355\nX-Debian-version: 6.0-27\n\n--- a/fileio.c\n+++ b/fileio.c\n@@ -171,8 +171,10 @@\n static ZCONST char Far FilenameTooLongTrunc[] =\n   \"warning:  filename too long--truncating.\\n\";\n #ifdef UNICODE_SUPPORT\n+   static ZCONST char Far UFilenameCorrupt[] =\n+     \"error: Unicode filename corrupt.\\n\";\n    static ZCONST char Far UFilenameTooLongTrunc[] =\n-     \"warning:  Converted unicode filename too long--truncating.\\n\";\n+     \"warning:  Converted Unicode filename too long--truncating.\\n\";\n #endif\n static ZCONST char Far ExtraFieldTooLong[] =\n   \"warning:  extra field too long (%d).  Ignoring...\\n\";\n@@ -2361,16 +2363,30 @@\n                   /* convert UTF-8 to local character set */\n                   fn = utf8_to_local_string(G.unipath_filename,\n                                             G.unicode_escape_all);\n-                  /* make sure filename is short enough */\n-                  if (strlen(fn) >= FILNAMSIZ) {\n-                    fn[FILNAMSIZ - 1] = '\\0';\n+\n+                  /* 2022-07-22 SMS, et al.  CVE-2022-0530\n+                   * Detect conversion failure, emit message.\n+                   * Continue with unconverted name.\n+                   */\n+                  if (fn == NULL)\n+                  {\n                     Info(slide, 0x401, ((char *)slide,\n-                      LoadFarString(UFilenameTooLongTrunc)));\n-                    error = PK_WARN;\n+                     LoadFarString(UFilenameCorrupt)));\n+                    error = PK_ERR;\n+                  }\n+                  else\n+                  {\n+                    /* make sure filename is short enough */\n+                    if (strlen(fn) >= FILNAMSIZ) {\n+                      fn[FILNAMSIZ - 1] = '\\0';\n+                      Info(slide, 0x401, ((char *)slide,\n+                        LoadFarString(UFilenameTooLongTrunc)));\n+                      error = PK_WARN;\n+                    }\n+                    /* replace filename with converted UTF-8 */\n+                    strcpy(G.filename, fn);\n+                    free(fn);\n                   }\n-                  /* replace filename with converted UTF-8 */\n-                  strcpy(G.filename, fn);\n-                  free(fn);\n                 }\n # endif /* UNICODE_WCHAR */\n                 if (G.unipath_filename != G.filename_full)\n--- a/process.c\n+++ b/process.c\n@@ -222,6 +222,8 @@\n      \"\\nwarning:  Unicode Path version > 1\\n\";\n    static ZCONST char Far UnicodeMismatchError[] =\n      \"\\nwarning:  Unicode Path checksum invalid\\n\";\n+   static ZCONST char Far UFilenameTooLongTrunc[] =\n+     \"warning:  filename too long (P1) -- truncating.\\n\";\n #endif\n \n \n@@ -1915,7 +1917,7 @@\n     Sets both local header and central header fields.  Not terribly clever,\n     but it means that this procedure is only called in one place.\n \n-    2014-12-05 SMS.\n+    2014-12-05 SMS.  (oCERT.org report.)  CVE-2014-8141.\n     Added checks to ensure that enough data are available before calling\n     makeint64() or makelong().  Replaced various sizeof() values with\n     simple (\"4\" or \"8\") constants.  (The Zip64 structures do not depend\n@@ -1947,9 +1949,10 @@\n               ef_len - EB_HEADSIZE));\n             break;\n         }\n+\n         if (eb_id == EF_PKSZ64)\n         {\n-          int offset = EB_HEADSIZE;\n+          unsigned offset = EB_HEADSIZE;\n \n           if ((G.crec.ucsize == Z64FLGL) || (G.lrec.ucsize == Z64FLGL))\n           {\n@@ -2046,7 +2049,7 @@\n         }\n         if (eb_id == EF_UNIPATH) {\n \n-          int offset = EB_HEADSIZE;\n+          unsigned offset = EB_HEADSIZE;\n           ush ULen = eb_len - 5;\n           ulg chksum = CRCVAL_INITIAL;\n \n@@ -2504,16 +2507,17 @@\n   int state_dependent;\n   int wsize = 0;\n   int max_bytes = MB_CUR_MAX;\n-  char buf[9];\n+  char buf[ MB_CUR_MAX+ 1];             /* (\"+1\" not really needed?) */\n   char *buffer = NULL;\n   char *local_string = NULL;\n+  size_t buffer_size;                   /* CVE-2022-0529 */\n \n   for (wsize = 0; wide_string[wsize]; wsize++) ;\n \n   if (max_bytes < MAX_ESCAPE_BYTES)\n     max_bytes = MAX_ESCAPE_BYTES;\n-\n-  if ((buffer = (char *)malloc(wsize * max_bytes + 1)) == NULL) {\n+  buffer_size = wsize * max_bytes + 1;          /* Reused below. */\n+  if ((buffer = (char *)malloc( buffer_size)) == NULL) {\n     return NULL;\n   }\n \n@@ -2551,8 +2555,28 @@\n     } else {\n       /* no MB for this wide */\n         /* use escape for wide character */\n-        char *escape_string = wide_to_escape_string(wide_string[i]);\n-        strcat(buffer, escape_string);\n+        size_t buffer_len;\n+        size_t escape_string_len;\n+        char *escape_string;\n+        int err_msg = 0;\n+\n+        escape_string = wide_to_escape_string(wide_string[i]);\n+        buffer_len = strlen( buffer);\n+        escape_string_len = strlen( escape_string);\n+\n+        /* Append escape string, as space allows. */\n+        /* 2022-07-18 SMS, et al.  CVE-2022-0529 */\n+        if (escape_string_len > buffer_size- buffer_len- 1)\n+        {\n+            escape_string_len = buffer_size- buffer_len- 1;\n+            if (err_msg == 0)\n+            {\n+                err_msg = 1;\n+                Info(slide, 0x401, ((char *)slide,\n+                 LoadFarString( UFilenameTooLongTrunc)));\n+            }\n+        }\n+        strncat( buffer, escape_string, escape_string_len);\n         free(escape_string);\n     }\n   }\n@@ -2604,9 +2628,18 @@\n   ZCONST char *utf8_string;\n   int escape_all;\n {\n-  zwchar *wide = utf8_to_wide_string(utf8_string);\n-  char *loc = wide_to_local_string(wide, escape_all);\n-  free(wide);\n+  zwchar *wide;\n+  char *loc = NULL;\n+\n+  wide = utf8_to_wide_string( utf8_string);\n+\n+  /* 2022-07-25 SMS, et al.  CVE-2022-0530 */\n+  if (wide != NULL)\n+  {\n+    loc = wide_to_local_string( wide, escape_all);\n+    free( wide);\n+  }\n+\n   return loc;\n }\n \n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/unix/configure\t2009-04-16 15:25:12.000000000 -0400\n+++ b/unix/configure\t2023-05-30 15:18:33.670321348 -0400\n@@ -408,7 +408,7 @@\n echo Check for errno declaration\n cat > conftest.c << _EOF_\n #include <errno.h>\n-main()\n+int main()\n {\n   errno = 0;\n   return 0;\n@@ -419,6 +419,8 @@\n \n echo Check for directory libraries\n cat > conftest.c << _EOF_\n+#include <sys/types.h>\n+#include <dirent.h>\n int main() { return closedir(opendir(\".\")); }\n _EOF_\n \n\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 731d698377dbd1f5b1b90efeb8094602ed59fc40 Mon Sep 17 00:00:00 2001\nFrom: Nils Bars <nils.bars@t-online.de>\nDate: Mon, 17 Jan 2022 16:53:16 +0000\nSubject: [PATCH] Fix null pointer dereference and use of uninitialized data\n\nThis fixes a bug that causes use of uninitialized heap data if `readbuf` fails\nto read as many bytes as indicated by the extra field length attribute.\nFurthermore, this fixes a null pointer dereference if an archive contains an\n`EF_UNIPATH` extra field but does not have a filename set.\n---\n fileio.c  | 5 ++++-\n process.c | 6 +++++-\n 2 files changed, 9 insertions(+), 2 deletions(-)\n\n--- a/fileio.c\n+++ b/fileio.c\n@@ -2310,8 +2310,11 @@ int do_string(__G__ length, option)   /*\n             seek_zipf(__G__ G.cur_zipfile_bufstart - G.extra_bytes +\n                       (G.inptr-G.inbuf) + length);\n         } else {\n-            if (readbuf(__G__ (char *)G.extra_field, length) == 0)\n+            unsigned bytes_read = readbuf(__G__ (char *)G.extra_field, length);\n+            if (bytes_read == 0)\n                 return PK_EOF;\n+            if (bytes_read != length)\n+                return PK_ERR;\n             /* Looks like here is where extra fields are read */\n             if (getZip64Data(__G__ G.extra_field, length) != PK_COOL)\n             {\n--- a/process.c\n+++ b/process.c\n@@ -2067,10 +2067,14 @@ int getUnicodeData(__G__ ef_buf, ef_len)\n           G.unipath_checksum = makelong(offset + ef_buf);\n           offset += 4;\n \n+          if (!G.filename_full) {\n+            /* Check if we have a unicode extra section but no filename set */\n+            return PK_ERR;\n+          }\n+\n           /*\n            * Compute 32-bit crc\n            */\n-\n           chksum = crc32(chksum, (uch *)(G.filename_full),\n                          strlen(G.filename_full));\n \n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://sourceforge/infozip/unzip60.tar.gz"
        },
        {
          "type": "website",
          "url": "http://www.info-zip.org"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "hbi1sqgbm3ypjlv8y2iwx14lhnnjx84l-python3.13-pytz-2025.2-dist",
      "name": "pytz",
      "version": "2025.2",
      "description": "World timezone definitions, modern and historical",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/pytz@2025.2",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/p/pytz/pytz-2025.2.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://pythonhosted.org/pytz"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "hc5l8w9z4q8b2y3169fldd94m73da1q6-python3.13-pyproject-hooks-1.2.0-dist",
      "name": "pyproject-hooks",
      "version": "1.2.0",
      "description": "Low-level library for calling build-backends in `pyproject.toml`-based project",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/pyproject-hooks@1.2.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/p/pyproject_hooks/pyproject_hooks-1.2.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/pypa/pyproject-hooks"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "hd3iksydg19pcs3x1cyllfqd35rls55j-systemtap-5.2",
      "name": "systemtap",
      "version": "5.2",
      "description": "Provides a scripting language for instrumentation on a live kernel plus user-space",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-2.0"
          }
        }
      ],
      "purl": "pkg:nix/systemtap@5.2",
      "externalReferences": [
        {
          "type": "website",
          "url": "https://sourceware.org/systemtap/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "hjlkypp9lpxwzsjycpy7nqg2mnl7qhzv-glibc-locales-2.40-66",
      "name": "glibc-locales",
      "version": "2.40",
      "description": "Locale information for the GNU C Library",
      "scope": "required",
      "purl": "pkg:nix/glibc-locales@2.40",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "commit 6daa77104520ca992a9369bd01cccd4d98c82984\nAuthor: Andreas K. Hüttel <dilfridge@gentoo.org>\nDate:   Sun Jul 21 19:02:10 2024 +0200\n\n    Replace advisories directory\n    \n    Signed-off-by: Andreas K. Hüttel <dilfridge@gentoo.org>\n\ndiff --git a/advisories/GLIBC-SA-2023-0001 b/advisories/GLIBC-SA-2023-0001\ndeleted file mode 100644\nindex 3d19c91b6a..0000000000\n--- a/advisories/GLIBC-SA-2023-0001\n+++ /dev/null\n@@ -1,14 +0,0 @@\n-printf: incorrect output for integers with thousands separator and width field\n-\n-When the printf family of functions is called with a format specifier\n-that uses an <apostrophe> (enable grouping) and a minimum width\n-specifier, the resulting output could be larger than reasonably expected\n-by a caller that computed a tight bound on the buffer size.  The\n-resulting larger than expected output could result in a buffer overflow\n-in the printf family of functions.\n-\n-CVE-Id: CVE-2023-25139\n-Public-Date: 2023-02-02\n-Vulnerable-Commit: e88b9f0e5cc50cab57a299dc7efe1a4eb385161d (2.37)\n-Fix-Commit: c980549cc6a1c03c23cc2fe3e7b0fe626a0364b0 (2.38)\n-Fix-Commit: 07b9521fc6369d000216b96562ff7c0ed32a16c4 (2.37-4)\ndiff --git a/advisories/GLIBC-SA-2023-0002 b/advisories/GLIBC-SA-2023-0002\ndeleted file mode 100644\nindex 5122669a64..0000000000\n--- a/advisories/GLIBC-SA-2023-0002\n+++ /dev/null\n@@ -1,15 +0,0 @@\n-getaddrinfo: Stack read overflow in no-aaaa mode\n-\n-If the system is configured in no-aaaa mode via /etc/resolv.conf,\n-getaddrinfo is called for the AF_UNSPEC address family, and a DNS\n-response is received over TCP that is larger than 2048 bytes,\n-getaddrinfo may potentially disclose stack contents via the returned\n-address data, or crash.\n-\n-CVE-Id: CVE-2023-4527\n-Public-Date: 2023-09-12\n-Vulnerable-Commit: f282cdbe7f436c75864e5640a409a10485e9abb2 (2.36)\n-Fix-Commit: bd77dd7e73e3530203be1c52c8a29d08270cb25d (2.39)\n-Fix-Commit: 4ea972b7edd7e36610e8cde18bf7a8149d7bac4f (2.36-113)\n-Fix-Commit: b7529346025a130fee483d42178b5c118da971bb (2.37-38)\n-Fix-Commit: b25508dd774b617f99419bdc3cf2ace4560cd2d6 (2.38-19)\ndiff --git a/advisories/GLIBC-SA-2023-0003 b/advisories/GLIBC-SA-2023-0003\ndeleted file mode 100644\nindex d3aef80348..0000000000\n--- a/advisories/GLIBC-SA-2023-0003\n+++ /dev/null\n@@ -1,15 +0,0 @@\n-getaddrinfo: Potential use-after-free\n-\n-When an NSS plugin only implements the _gethostbyname2_r and\n-_getcanonname_r callbacks, getaddrinfo could use memory that was freed\n-during buffer resizing, potentially causing a crash or read or write to\n-arbitrary memory.\n-\n-CVE-Id: CVE-2023-4806\n-Public-Date: 2023-09-12\n-Fix-Commit: 973fe93a5675c42798b2161c6f29c01b0e243994 (2.39)\n-Fix-Commit: e09ee267c03e3150c2c9ba28625ab130705a485e (2.34-420)\n-Fix-Commit: e3ccb230a961b4797510e6a1f5f21fd9021853e7 (2.35-270)\n-Fix-Commit: a9728f798ec7f05454c95637ee6581afaa9b487d (2.36-115)\n-Fix-Commit: 6529a7466c935f36e9006b854d6f4e1d4876f942 (2.37-39)\n-Fix-Commit: 00ae4f10b504bc4564e9f22f00907093f1ab9338 (2.38-20)\ndiff --git a/advisories/GLIBC-SA-2023-0004 b/advisories/GLIBC-SA-2023-0004\ndeleted file mode 100644\nindex 5286a7aa54..0000000000\n--- a/advisories/GLIBC-SA-2023-0004\n+++ /dev/null\n@@ -1,16 +0,0 @@\n-tunables: local privilege escalation through buffer overflow\n-\n-If a tunable of the form NAME=NAME=VAL is passed in the environment of a\n-setuid program and NAME is valid, it may result in a buffer overflow,\n-which could be exploited to achieve escalated privileges.  This flaw was\n-introduced in glibc 2.34.\n-\n-CVE-Id: CVE-2023-4911\n-Public-Date: 2023-10-03\n-Vulnerable-Commit: 2ed18c5b534d9e92fc006202a5af0df6b72e7aca (2.34)\n-Fix-Commit: 1056e5b4c3f2d90ed2b4a55f96add28da2f4c8fa (2.39)\n-Fix-Commit: dcc367f148bc92e7f3778a125f7a416b093964d9 (2.34-423)\n-Fix-Commit: c84018a05aec80f5ee6f682db0da1130b0196aef (2.35-274)\n-Fix-Commit: 22955ad85186ee05834e47e665056148ca07699c (2.36-118)\n-Fix-Commit: b4e23c75aea756b4bddc4abcf27a1c6dca8b6bd3 (2.37-45)\n-Fix-Commit: 750a45a783906a19591fb8ff6b7841470f1f5701 (2.38-27)\ndiff --git a/advisories/GLIBC-SA-2023-0005 b/advisories/GLIBC-SA-2023-0005\ndeleted file mode 100644\nindex cc4eb90b82..0000000000\n--- a/advisories/GLIBC-SA-2023-0005\n+++ /dev/null\n@@ -1,18 +0,0 @@\n-getaddrinfo: DoS due to memory leak\n-\n-The fix for CVE-2023-4806 introduced a memory leak when an application\n-calls getaddrinfo for AF_INET6 with AI_CANONNAME, AI_ALL and AI_V4MAPPED\n-flags set.\n-\n-CVE-Id: CVE-2023-5156\n-Public-Date: 2023-09-25\n-Vulnerable-Commit: e09ee267c03e3150c2c9ba28625ab130705a485e (2.34-420)\n-Vulnerable-Commit: e3ccb230a961b4797510e6a1f5f21fd9021853e7 (2.35-270)\n-Vulnerable-Commit: a9728f798ec7f05454c95637ee6581afaa9b487d (2.36-115)\n-Vulnerable-Commit: 6529a7466c935f36e9006b854d6f4e1d4876f942 (2.37-39)\n-Vulnerable-Commit: 00ae4f10b504bc4564e9f22f00907093f1ab9338 (2.38-20)\n-Fix-Commit: 8006457ab7e1cd556b919f477348a96fe88f2e49 (2.34-421)\n-Fix-Commit: 17092c0311f954e6f3c010f73ce3a78c24ac279a (2.35-272)\n-Fix-Commit: 856bac55f98dc840e7c27cfa82262b933385de90 (2.36-116)\n-Fix-Commit: 4473d1b87d04b25cdd0e0354814eeaa421328268 (2.37-42)\n-Fix-Commit: 5ee59ca371b99984232d7584fe2b1a758b4421d3 (2.38-24)\ndiff --git a/advisories/GLIBC-SA-2024-0001 b/advisories/GLIBC-SA-2024-0001\ndeleted file mode 100644\nindex 28931c75ae..0000000000\n--- a/advisories/GLIBC-SA-2024-0001\n+++ /dev/null\n@@ -1,15 +0,0 @@\n-syslog: Heap buffer overflow in __vsyslog_internal\n-\n-__vsyslog_internal did not handle a case where printing a SYSLOG_HEADER\n-containing a long program name failed to update the required buffer\n-size, leading to the allocation and overflow of a too-small buffer on\n-the heap.\n-\n-CVE-Id: CVE-2023-6246\n-Public-Date: 2024-01-30\n-Vulnerable-Commit: 52a5be0df411ef3ff45c10c7c308cb92993d15b1 (2.37)\n-Fix-Commit: 6bd0e4efcc78f3c0115e5ea9739a1642807450da (2.39)\n-Fix-Commit: 23514c72b780f3da097ecf33a793b7ba9c2070d2 (2.38-42)\n-Fix-Commit: 97a4292aa4a2642e251472b878d0ec4c46a0e59a (2.37-57)\n-Vulnerable-Commit: b0e7888d1fa2dbd2d9e1645ec8c796abf78880b9 (2.36-16)\n-Fix-Commit: d1a83b6767f68b3cb5b4b4ea2617254acd040c82 (2.36-126)\ndiff --git a/advisories/GLIBC-SA-2024-0002 b/advisories/GLIBC-SA-2024-0002\ndeleted file mode 100644\nindex 940bfcf2fc..0000000000\n--- a/advisories/GLIBC-SA-2024-0002\n+++ /dev/null\n@@ -1,15 +0,0 @@\n-syslog: Heap buffer overflow in __vsyslog_internal\n-\n-__vsyslog_internal used the return value of snprintf/vsnprintf to\n-calculate buffer sizes for memory allocation.  If these functions (for\n-any reason) failed and returned -1, the resulting buffer would be too\n-small to hold output.\n-\n-CVE-Id: CVE-2023-6779\n-Public-Date: 2024-01-30\n-Vulnerable-Commit: 52a5be0df411ef3ff45c10c7c308cb92993d15b1 (2.37)\n-Fix-Commit: 7e5a0c286da33159d47d0122007aac016f3e02cd (2.39)\n-Fix-Commit: d0338312aace5bbfef85e03055e1212dd0e49578 (2.38-43)\n-Fix-Commit: 67062eccd9a65d7fda9976a56aeaaf6c25a80214 (2.37-58)\n-Vulnerable-Commit: b0e7888d1fa2dbd2d9e1645ec8c796abf78880b9 (2.36-16)\n-Fix-Commit: 2bc9d7c002bdac38b5c2a3f11b78e309d7765b83 (2.36-127)\ndiff --git a/advisories/GLIBC-SA-2024-0003 b/advisories/GLIBC-SA-2024-0003\ndeleted file mode 100644\nindex b43a5150ab..0000000000\n--- a/advisories/GLIBC-SA-2024-0003\n+++ /dev/null\n@@ -1,13 +0,0 @@\n-syslog: Integer overflow in __vsyslog_internal\n-\n-__vsyslog_internal calculated a buffer size by adding two integers, but\n-did not first check if the addition would overflow.\n-\n-CVE-Id: CVE-2023-6780\n-Public-Date: 2024-01-30\n-Vulnerable-Commit: 52a5be0df411ef3ff45c10c7c308cb92993d15b1 (2.37)\n-Fix-Commit: ddf542da94caf97ff43cc2875c88749880b7259b (2.39)\n-Fix-Commit: d37c2b20a4787463d192b32041c3406c2bd91de0 (2.38-44)\n-Fix-Commit: 2b58cba076e912961ceaa5fa58588e4b10f791c0 (2.37-59)\n-Vulnerable-Commit: b0e7888d1fa2dbd2d9e1645ec8c796abf78880b9 (2.36-16)\n-Fix-Commit: b9b7d6a27aa0632f334352fa400771115b3c69b7 (2.36-128)\ndiff --git a/advisories/GLIBC-SA-2024-0004 b/advisories/GLIBC-SA-2024-0004\ndeleted file mode 100644\nindex 08df2b3118..0000000000\n--- a/advisories/GLIBC-SA-2024-0004\n+++ /dev/null\n@@ -1,28 +0,0 @@\n-ISO-2022-CN-EXT: fix out-of-bound writes when writing escape sequence\n-\n-The iconv() function in the GNU C Library versions 2.39 and older may \n-overflow the output buffer passed to it by up to 4 bytes when converting \n-strings to the ISO-2022-CN-EXT character set, which may be used to \n-crash an application or overwrite a neighbouring variable.\n-\n-ISO-2022-CN-EXT uses escape sequences to indicate character set changes\n-(as specified by RFC 1922).  While the SOdesignation has the expected\n-bounds checks, neither SS2designation nor SS3designation have its;\n-allowing a write overflow of 1, 2, or 3 bytes with fixed values:\n-'$+I', '$+J', '$+K', '$+L', '$+M', or '$*H'.\n-\n-CVE-Id: CVE-2024-2961\n-Public-Date: 2024-04-17\n-Vulnerable-Commit: 755104edc75c53f4a0e7440334e944ad3c6b32fc (2.1.93-169)\n-Fix-Commit: f9dc609e06b1136bb0408be9605ce7973a767ada (2.40)\n-Fix-Commit: 31da30f23cddd36db29d5b6a1c7619361b271fb4 (2.39-31)\n-Fix-Commit: e1135387deded5d73924f6ca20c72a35dc8e1bda (2.38-66)\n-Fix-Commit: 89ce64b269a897a7780e4c73a7412016381c6ecf (2.37-89)\n-Fix-Commit: 4ed98540a7fd19f458287e783ae59c41e64df7b5 (2.36-164)\n-Fix-Commit: 36280d1ce5e245aabefb877fe4d3c6cff95dabfa (2.35-315)\n-Fix-Commit: a8b0561db4b9847ebfbfec20075697d5492a363c (2.34-459)\n-Fix-Commit: ed4f16ff6bed3037266f1fa682ebd32a18fce29c (2.33-263)\n-Fix-Commit: 682ad4c8623e611a971839990ceef00346289cc9 (2.32-140)\n-Fix-Commit: 3703c32a8d304c1ee12126134ce69be965f38000 (2.31-154)\n-\n-Reported-By: Charles Fol\ndiff --git a/advisories/GLIBC-SA-2024-0005 b/advisories/GLIBC-SA-2024-0005\ndeleted file mode 100644\nindex a59596610a..0000000000\n--- a/advisories/GLIBC-SA-2024-0005\n+++ /dev/null\n@@ -1,22 +0,0 @@\n-nscd: Stack-based buffer overflow in netgroup cache\n-\n-If the Name Service Cache Daemon's (nscd) fixed size cache is exhausted\n-by client requests then a subsequent client request for netgroup data\n-may result in a stack-based buffer overflow.  This flaw was introduced\n-in glibc 2.15 when the cache was added to nscd.\n-\n-This vulnerability is only present in the nscd binary.\n-\n-CVE-Id: CVE-2024-33599\n-Public-Date: 2024-04-23\n-Vulnerable-Commit: 684ae515993269277448150a1ca70db3b94aa5bd (2.15)\n-Fix-Commit: 69c58d5ef9f584ea198bd00f7964d364d0e6b921 (2.31-155)\n-Fix-Commit: a77064893bfe8a701770e2f53a4d33805bc47a5a (2.32-141)\n-Fix-Commit: 5c75001a96abcd50cbdb74df24c3f013188d076e (2.33-264)\n-Fix-Commit: 52f73e5c4e29b14e79167272297977f360ae1e97 (2.34-460)\n-Fix-Commit: 7a95873543ce225376faf13bb71c43dea6d24f86 (2.35-316)\n-Fix-Commit: caa3151ca460bdd9330adeedd68c3112d97bffe4 (2.36-165)\n-Fix-Commit: f75c298e747b2b8b41b1c2f551c011a52c41bfd1 (2.37-91)\n-Fix-Commit: 5968aebb86164034b8f8421b4abab2f837a5bdaf (2.38-72)\n-Fix-Commit: 1263d583d2e28afb8be53f8d6922f0842036f35d (2.39-35)\n-Fix-Commit: 87801a8fd06db1d654eea3e4f7626ff476a9bdaa (2.40)\ndiff --git a/advisories/GLIBC-SA-2024-0006 b/advisories/GLIBC-SA-2024-0006\ndeleted file mode 100644\nindex d44148d3d9..0000000000\n--- a/advisories/GLIBC-SA-2024-0006\n+++ /dev/null\n@@ -1,32 +0,0 @@\n-nscd: Null pointer crash after notfound response\n-\n-If the Name Service Cache Daemon's (nscd) cache fails to add a not-found\n-netgroup response to the cache, the client request can result in a null\n-pointer dereference.  This flaw was introduced in glibc 2.15 when the\n-cache was added to nscd.\n-\n-This vulnerability is only present in the nscd binary.\n-\n-CVE-Id: CVE-2024-33600\n-Public-Date: 2024-04-24\n-Vulnerable-Commit: 684ae515993269277448150a1ca70db3b94aa5bd (2.15)\n-Fix-Commit: b048a482f088e53144d26a61c390bed0210f49f2 (2.40)\n-Fix-Commit: 7835b00dbce53c3c87bbbb1754a95fb5e58187aa (2.40)\n-Fix-Commit: c99f886de54446cd4447db6b44be93dabbdc2f8b (2.39-37)\n-Fix-Commit: 5a508e0b508c8ad53bd0d2fb48fd71b242626341 (2.39-36)\n-Fix-Commit: 2ae9446c1b7a3064743b4a51c0bbae668ee43e4c (2.38-74)\n-Fix-Commit: 541ea5172aa658c4bd5c6c6d6fd13903c3d5bb0a (2.38-73)\n-Fix-Commit: a8070b31043c7585c36ba68a74298c4f7af075c3 (2.37-93)\n-Fix-Commit: 5eea50c4402e39588de98aa1d4469a79774703d4 (2.37-92)\n-Fix-Commit: f205b3af56740e3b014915b1bd3b162afe3407ef (2.36-167)\n-Fix-Commit: c34f470a615b136170abd16142da5dd0c024f7d1 (2.36-166)\n-Fix-Commit: bafadc589fbe21ae330e8c2af74db9da44a17660 (2.35-318)\n-Fix-Commit: 4370bef52b0f3f3652c6aa13d7a9bb3ac079746d (2.35-317)\n-Fix-Commit: 1f94122289a9bf7dba573f5d60327aaa2b85cf2e (2.34-462)\n-Fix-Commit: 966d6ac9e40222b84bb21674cc4f83c8d72a5a26 (2.34-461)\n-Fix-Commit: e3eef1b8fbdd3a7917af466ca9c4b7477251ca79 (2.33-266)\n-Fix-Commit: f20a8d696b13c6261b52a6434899121f8b19d5a7 (2.33-265)\n-Fix-Commit: be602180146de37582a3da3a0caa4b719645de9c (2.32-143)\n-Fix-Commit: 394eae338199078b7961b051c191539870742d7b (2.32-142)\n-Fix-Commit: 8d7949183760170c61e55def723c1d8050187874 (2.31-157)\n-Fix-Commit: 304ce5fe466c4762b21b36c26926a4657b59b53e (2.31-156)\ndiff --git a/advisories/GLIBC-SA-2024-0007 b/advisories/GLIBC-SA-2024-0007\ndeleted file mode 100644\nindex b6928fa27a..0000000000\n--- a/advisories/GLIBC-SA-2024-0007\n+++ /dev/null\n@@ -1,28 +0,0 @@\n-nscd: netgroup cache may terminate daemon on memory allocation failure\n-\n-The Name Service Cache Daemon's (nscd) netgroup cache uses xmalloc or\n-xrealloc and these functions may terminate the process due to a memory\n-allocation failure resulting in a denial of service to the clients.  The\n-flaw was introduced in glibc 2.15 when the cache was added to nscd.\n-\n-This vulnerability is only present in the nscd binary.\n-\n-Subsequent refactoring of the netgroup cache only added more uses of\n-xmalloc and xrealloc. Uses of xmalloc and xrealloc in other parts of\n-nscd only occur during startup of the daemon and so are not affected by\n-client requests that could trigger an out of memory followed by\n-termination.\n-\n-CVE-Id: CVE-2024-33601\n-Public-Date: 2024-04-24\n-Vulnerable-Commit: 684ae515993269277448150a1ca70db3b94aa5bd (2.15)\n-Fix-Commit: c04a21e050d64a1193a6daab872bca2528bda44b (2.40)\n-Fix-Commit: a9a8d3eebb145779a18d90e3966009a1daa63cd8 (2.39-38)\n-Fix-Commit: 71af8ca864345d39b746d5cee84b94b430fad5db (2.38-75)\n-Fix-Commit: 6e106dc214d6a033a4e945d1c6cf58061f1c5f1f (2.37-94)\n-Fix-Commit: b6742463694b1dfdd5120b91ee21cf05d15ec2e2 (2.36-168)\n-Fix-Commit: 7a5864cac60e06000394128a5a2817b03542f5a3 (2.35-319)\n-Fix-Commit: 86f1d5f4129c373ac6fb6df5bcf38273838843cb (2.34-463)\n-Fix-Commit: 4d27d4b9a188786fc6a56745506cec2acfc51f83 (2.33-267)\n-Fix-Commit: 3ed195a8ec89da281e3c4bf887a13d281b72d8f4 (2.32-144)\n-Fix-Commit: bbf5a58ccb55679217f94de706164d15372fbbc0 (2.31-158)\ndiff --git a/advisories/GLIBC-SA-2024-0008 b/advisories/GLIBC-SA-2024-0008\ndeleted file mode 100644\nindex d93e2a6f0b..0000000000\n--- a/advisories/GLIBC-SA-2024-0008\n+++ /dev/null\n@@ -1,26 +0,0 @@\n-nscd: netgroup cache assumes NSS callback uses in-buffer strings\n-\n-The Name Service Cache Daemon's (nscd) netgroup cache can corrupt memory\n-when the NSS callback does not store all strings in the provided buffer.\n-The flaw was introduced in glibc 2.15 when the cache was added to nscd.\n-\n-This vulnerability is only present in the nscd binary.\n-\n-There is no guarantee from the NSS callback API that the returned\n-strings are all within the buffer. However, the netgroup cache code\n-assumes that the NSS callback uses in-buffer strings and if it doesn't\n-the buffer resizing logic could lead to potential memory corruption.\n-\n-CVE-Id: CVE-2024-33602\n-Public-Date: 2024-04-24\n-Vulnerable-Commit: 684ae515993269277448150a1ca70db3b94aa5bd (2.15)\n-Fix-Commit: c04a21e050d64a1193a6daab872bca2528bda44b (2.40)\n-Fix-Commit: a9a8d3eebb145779a18d90e3966009a1daa63cd8 (2.39-38)\n-Fix-Commit: 71af8ca864345d39b746d5cee84b94b430fad5db (2.38-75)\n-Fix-Commit: 6e106dc214d6a033a4e945d1c6cf58061f1c5f1f (2.37-94)\n-Fix-Commit: b6742463694b1dfdd5120b91ee21cf05d15ec2e2 (2.36-168)\n-Fix-Commit: 7a5864cac60e06000394128a5a2817b03542f5a3 (2.35-319)\n-Fix-Commit: 86f1d5f4129c373ac6fb6df5bcf38273838843cb (2.34-463)\n-Fix-Commit: 4d27d4b9a188786fc6a56745506cec2acfc51f83 (2.33-267)\n-Fix-Commit: 3ed195a8ec89da281e3c4bf887a13d281b72d8f4 (2.32-144)\n-Fix-Commit: bbf5a58ccb55679217f94de706164d15372fbbc0 (2.31-158)\ndiff --git a/advisories/README b/advisories/README\ndeleted file mode 100644\nindex b8f8a829ca..0000000000\n--- a/advisories/README\n+++ /dev/null\n@@ -1,77 +0,0 @@\n-GNU C Library Security Advisory Format\n-======================================\n-\n-Security advisories in this directory follow a simple git commit log\n-format, with a heading and free-format description augmented with tags\n-to allow parsing key information.  References to code changes are\n-specific to the glibc repository and follow a specific format:\n-\n-  Tag-name: <commit-ref> (release-version)\n-\n-The <commit-ref> indicates a specific commit in the repository.  The\n-release-version indicates the publicly consumable release in which this\n-commit is known to exist.  The release-version is derived from the\n-git-describe format, (i.e. stripped out from glibc-2.34.NNN-gxxxx) and\n-is of the form 2.34-NNN.  If the -NNN suffix is absent, it means that\n-the change is in that release tarball, otherwise the change is on the\n-release/2.YY/master branch and not in any released tarball.\n-\n-The following tags are currently being used:\n-\n-CVE-Id:\n-This is the CVE-Id assigned under the CVE Program\n-(https://www.cve.org/).\n-\n-Public-Date:\n-The date this issue became publicly known.\n-\n-Vulnerable-Commit:\n-The commit that introduced this vulnerability.  There could be multiple\n-entries, one for each release branch in the glibc repository; the\n-release-version portion of this tag should tell you which branch this is\n-on.\n-\n-Fix-Commit:\n-The commit that fixed this vulnerability.  There could be multiple\n-entries for each release branch in the glibc repository, indicating that\n-all of those commits contributed to fixing that issue in each of those\n-branches.\n-\n-Reported-By:\n-The entity that reported this issue. There could be multiple entries, one for\n-each reporter.\n-\n-Adding an Advisory\n-------------------\n-\n-An advisory for a CVE needs to be added on the master branch in two steps:\n-\n-1. Add the text of the advisory without any Fix-Commit tags along with\n-   the fix for the CVE.  Add the Vulnerable-Commit tag, if applicable.\n-   The advisories directory does not exist in release branches, so keep\n-   the advisory text commit distinct from the code changes, to ease\n-   backports.  Ask for the GLIBC-SA advisory number from the security\n-   team.\n-\n-2. Finish all backports on release branches and then back on the msater\n-   branch, add all commit refs to the advisory using the Fix-Commit\n-   tags.  Don't bother adding the release-version subscript since the\n-   next step will overwrite it.\n-\n-3. Run the process-advisories.sh script in the scripts directory on the\n-   advisory:\n-\n-     scripts/process-advisories.sh update GLIBC-SA-YYYY-NNNN\n-\n-   (replace YYYY-NNNN with the actual advisory number).\n-\n-4. Verify the updated advisory and push the result.\n-\n-Getting a NEWS snippet from advisories\n---------------------------------------\n-\n-Run:\n-\n-  scripts/process-advisories.sh news\n-\n-and copy the content into the NEWS file.\n\ncommit 8bbb8d7b16cae777eed06bc9d2e059fc00be24e9\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Wed Jul 24 12:06:47 2024 +0200\n\n    resolv: Allow short error responses to match any query (bug 31890)\n    \n    Reviewed-by: DJ Delorie <dj@redhat.com>\n    (cherry picked from commit 691a3b2e9bfaba842e46a5ccb7f5e6ea144c3ade)\n\ndiff --git a/NEWS b/NEWS\nindex 31281ac408..66b755ed34 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -5,6 +5,12 @@ See the end for copying conditions.\n Please send GNU C library bug reports via <https://sourceware.org/bugzilla/>\n using `glibc' in the \"product\" field.\n \f\n+Version 2.41\n+\n+The following bugs are resolved with this release:\n+\n+  [31890] resolv: Allow short error responses to match any DNS query\n+\f\n Version 2.40\n \n Major new features:\ndiff --git a/resolv/Makefile b/resolv/Makefile\nindex 5f44f5896b..d927e337d9 100644\n--- a/resolv/Makefile\n+++ b/resolv/Makefile\n@@ -106,6 +106,7 @@ tests += \\\n   tst-resolv-nondecimal \\\n   tst-resolv-res_init-multi \\\n   tst-resolv-search \\\n+  tst-resolv-short-response \\\n   tst-resolv-trailing \\\n \n # This test calls __res_context_send directly, which is not exported\n@@ -299,6 +300,8 @@ $(objpfx)tst-resolv-nondecimal: $(objpfx)libresolv.so $(shared-thread-library)\n $(objpfx)tst-resolv-qtypes: $(objpfx)libresolv.so $(shared-thread-library)\n $(objpfx)tst-resolv-rotate: $(objpfx)libresolv.so $(shared-thread-library)\n $(objpfx)tst-resolv-search: $(objpfx)libresolv.so $(shared-thread-library)\n+$(objpfx)tst-resolv-short-response: $(objpfx)libresolv.so \\\n+  $(shared-thread-library)\n $(objpfx)tst-resolv-trailing: $(objpfx)libresolv.so $(shared-thread-library)\n $(objpfx)tst-resolv-threads: $(objpfx)libresolv.so $(shared-thread-library)\n $(objpfx)tst-resolv-txnid-collision: $(objpfx)libresolv.a \\\ndiff --git a/resolv/res_send.c b/resolv/res_send.c\nindex ea7cf192b2..572e72c32f 100644\n--- a/resolv/res_send.c\n+++ b/resolv/res_send.c\n@@ -1199,19 +1199,30 @@ send_dg(res_state statp,\n \t\t}\n \n \t\t/* Check for the correct header layout and a matching\n-\t\t   question.  */\n+\t\t   question.  Some recursive resolvers send REFUSED\n+\t\t   without copying back the question section\n+\t\t   (producing a response that is only HFIXEDSZ bytes\n+\t\t   long).  Skip query matching in this case.  */\n+\t\tbool thisansp_error = (anhp->rcode == SERVFAIL ||\n+\t\t\t\t       anhp->rcode == NOTIMP ||\n+\t\t\t\t       anhp->rcode == REFUSED);\n+\t\tbool skip_query_match = (*thisresplenp == HFIXEDSZ\n+\t\t\t\t\t && ntohs (anhp->qdcount) == 0\n+\t\t\t\t\t && thisansp_error);\n \t\tint matching_query = 0; /* Default to no matching query.  */\n \t\tif (!recvresp1\n \t\t    && anhp->id == hp->id\n-\t\t    && __libc_res_queriesmatch (buf, buf + buflen,\n-\t\t\t\t\t\t*thisansp,\n-\t\t\t\t\t\t*thisansp + *thisanssizp))\n+\t\t    && (skip_query_match\n+\t\t\t|| __libc_res_queriesmatch (buf, buf + buflen,\n+\t\t\t\t\t\t    *thisansp,\n+\t\t\t\t\t\t    *thisansp + *thisanssizp)))\n \t\t  matching_query = 1;\n \t\tif (!recvresp2\n \t\t    && anhp->id == hp2->id\n-\t\t    && __libc_res_queriesmatch (buf2, buf2 + buflen2,\n-\t\t\t\t\t\t*thisansp,\n-\t\t\t\t\t\t*thisansp + *thisanssizp))\n+\t\t    && (skip_query_match\n+\t\t\t|| __libc_res_queriesmatch (buf2, buf2 + buflen2,\n+\t\t\t\t\t\t    *thisansp,\n+\t\t\t\t\t\t    *thisansp + *thisanssizp)))\n \t\t  matching_query = 2;\n \t\tif (matching_query == 0)\n \t\t  /* Spurious UDP packet.  Drop it and continue\n@@ -1221,9 +1232,7 @@ send_dg(res_state statp,\n \t\t    goto wait;\n \t\t  }\n \n-\t\tif (anhp->rcode == SERVFAIL ||\n-\t\t    anhp->rcode == NOTIMP ||\n-\t\t    anhp->rcode == REFUSED) {\n+\t\tif (thisansp_error) {\n \t\tnext_ns:\n \t\t\tif (recvresp1 || (buf2 != NULL && recvresp2)) {\n \t\t\t  *resplen2 = 0;\ndiff --git a/resolv/tst-resolv-short-response.c b/resolv/tst-resolv-short-response.c\nnew file mode 100644\nindex 0000000000..cf1e39876f\n--- /dev/null\n+++ b/resolv/tst-resolv-short-response.c\n@@ -0,0 +1,112 @@\n+/* Test for spurious timeouts with short 12-byte responses (bug 31890).\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <resolv.h>\n+#include <support/check.h>\n+#include <support/resolv_test.h>\n+#include <support/check_nss.h>\n+\n+/* The rcode in the initial response.  */\n+static volatile int rcode;\n+\n+static void\n+response (const struct resolv_response_context *ctx,\n+          struct resolv_response_builder *b,\n+          const char *qname, uint16_t qclass, uint16_t qtype)\n+{\n+  switch (ctx->server_index)\n+    {\n+    case 0:\n+      /* First server times out.  */\n+      struct resolv_response_flags flags = {.rcode = rcode};\n+      resolv_response_init (b, flags);\n+      break;\n+    case 1:\n+      /* Second server sends reply.  */\n+      resolv_response_init (b, (struct resolv_response_flags) {});\n+      resolv_response_add_question (b, qname, qclass, qtype);\n+      resolv_response_section (b, ns_s_an);\n+      resolv_response_open_record (b, qname, qclass, qtype, 0);\n+      switch (qtype)\n+        {\n+        case T_A:\n+          {\n+            char ipv4[4] = {192, 0, 2, 17};\n+            resolv_response_add_data (b, &ipv4, sizeof (ipv4));\n+          }\n+          break;\n+        case T_AAAA:\n+          {\n+            char ipv6[16]\n+              = {0x20, 0x01, 0xd, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};\n+            resolv_response_add_data (b, &ipv6, sizeof (ipv6));\n+          }\n+          break;\n+        default:\n+          FAIL_EXIT1 (\"unexpected TYPE%d query\", qtype);\n+        }\n+      resolv_response_close_record (b);\n+      break;\n+    default:\n+      FAIL_EXIT1 (\"unexpected query to server %d\", ctx->server_index);\n+    }\n+}\n+\n+static void\n+check_one (void)\n+{\n+\n+  /* The buggy 1-second query timeout results in 30 seconds of delay,\n+     which triggers a test timeout failure.  */\n+  for (int i = 0;  i < 10; ++i)\n+    {\n+      check_hostent (\"www.example\", gethostbyname (\"www.example\"),\n+                     \"name: www.example\\n\"\n+                     \"address: 192.0.2.17\\n\");\n+      check_hostent (\"www.example\", gethostbyname2 (\"www.example\", AF_INET6),\n+                     \"name: www.example\\n\"\n+                     \"address: 2001:db8::1\\n\");\n+    }\n+}\n+\n+static int\n+do_test (void)\n+{\n+  struct resolv_test *aux = resolv_test_start\n+    ((struct resolv_redirect_config)\n+     {\n+       .response_callback = response,\n+     });\n+\n+  _res.options |= RES_SNGLKUP;\n+\n+  rcode = 2; /* SERVFAIL.  */\n+  check_one ();\n+\n+  rcode = 4; /* NOTIMP.  */\n+  check_one ();\n+\n+  rcode = 5; /* REFUSED.  */\n+  check_one ();\n+\n+  resolv_test_end (aux);\n+\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\n\ncommit ef141426630da0946f0af8732eddce9b9a52b2d3\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Wed Jul 24 12:06:47 2024 +0200\n\n    resolv: Do not wait for non-existing second DNS response after error (bug 30081)\n    \n    In single-request mode, there is no second response after an error\n    because the second query has not been sent yet.  Waiting for it\n    introduces an unnecessary timeout.\n    \n    Reviewed-by: DJ Delorie <dj@redhat.com>\n    (cherry picked from commit af625987d619388a100b153520d3ee308bda9889)\n\ndiff --git a/NEWS b/NEWS\nindex 66b755ed34..4d7100b21c 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -9,6 +9,7 @@ Version 2.41\n \n The following bugs are resolved with this release:\n \n+  [30081] resolv: Do not wait for non-existing second DNS response after error\n   [31890] resolv: Allow short error responses to match any DNS query\n \f\n Version 2.40\ndiff --git a/resolv/Makefile b/resolv/Makefile\nindex d927e337d9..abff7fc007 100644\n--- a/resolv/Makefile\n+++ b/resolv/Makefile\n@@ -106,6 +106,7 @@ tests += \\\n   tst-resolv-nondecimal \\\n   tst-resolv-res_init-multi \\\n   tst-resolv-search \\\n+  tst-resolv-semi-failure \\\n   tst-resolv-short-response \\\n   tst-resolv-trailing \\\n \n@@ -300,6 +301,8 @@ $(objpfx)tst-resolv-nondecimal: $(objpfx)libresolv.so $(shared-thread-library)\n $(objpfx)tst-resolv-qtypes: $(objpfx)libresolv.so $(shared-thread-library)\n $(objpfx)tst-resolv-rotate: $(objpfx)libresolv.so $(shared-thread-library)\n $(objpfx)tst-resolv-search: $(objpfx)libresolv.so $(shared-thread-library)\n+$(objpfx)tst-resolv-semi-failure: $(objpfx)libresolv.so \\\n+  $(shared-thread-library)\n $(objpfx)tst-resolv-short-response: $(objpfx)libresolv.so \\\n   $(shared-thread-library)\n $(objpfx)tst-resolv-trailing: $(objpfx)libresolv.so $(shared-thread-library)\ndiff --git a/resolv/res_send.c b/resolv/res_send.c\nindex 572e72c32f..9c77613f37 100644\n--- a/resolv/res_send.c\n+++ b/resolv/res_send.c\n@@ -1238,7 +1238,7 @@ send_dg(res_state statp,\n \t\t\t  *resplen2 = 0;\n \t\t\t  return resplen;\n \t\t\t}\n-\t\t\tif (buf2 != NULL)\n+\t\t\tif (buf2 != NULL && !single_request)\n \t\t\t  {\n \t\t\t    /* No data from the first reply.  */\n \t\t\t    resplen = 0;\ndiff --git a/resolv/tst-resolv-semi-failure.c b/resolv/tst-resolv-semi-failure.c\nnew file mode 100644\nindex 0000000000..aa9798b5a7\n--- /dev/null\n+++ b/resolv/tst-resolv-semi-failure.c\n@@ -0,0 +1,133 @@\n+/* Test parallel failure/success responses (bug 30081).\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <resolv.h>\n+#include <support/check.h>\n+#include <support/resolv_test.h>\n+#include <support/check_nss.h>\n+\n+/* The rcode in the initial response.  */\n+static volatile int rcode;\n+\n+/* Whether to fail the initial A query (!fail_aaaa) or the initial\n+   AAAA query (fail_aaaa).  */\n+static volatile bool fail_aaaa;\n+\n+static void\n+response (const struct resolv_response_context *ctx,\n+          struct resolv_response_builder *b,\n+          const char *qname, uint16_t qclass, uint16_t qtype)\n+{\n+  /* Handle the failing query.  */\n+  if ((fail_aaaa && qtype == T_AAAA) && ctx->server_index == 0)\n+    {\n+      struct resolv_response_flags flags = {.rcode = rcode};\n+      resolv_response_init (b, flags);\n+      return;\n+    }\n+\n+  /* Otherwise produce a response.  */\n+  resolv_response_init (b, (struct resolv_response_flags) {});\n+  resolv_response_add_question (b, qname, qclass, qtype);\n+  resolv_response_section (b, ns_s_an);\n+  resolv_response_open_record (b, qname, qclass, qtype, 0);\n+  switch (qtype)\n+    {\n+    case T_A:\n+      {\n+        char ipv4[4] = {192, 0, 2, 17};\n+        resolv_response_add_data (b, &ipv4, sizeof (ipv4));\n+      }\n+      break;\n+    case T_AAAA:\n+      {\n+        char ipv6[16]\n+          = {0x20, 0x01, 0xd, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};\n+        resolv_response_add_data (b, &ipv6, sizeof (ipv6));\n+      }\n+      break;\n+    default:\n+      FAIL_EXIT1 (\"unexpected TYPE%d query\", qtype);\n+    }\n+  resolv_response_close_record (b);\n+}\n+\n+static void\n+check_one (void)\n+{\n+\n+  /* The buggy 1-second query timeout results in 30 seconds of delay,\n+     which triggers are test timeout failure.  */\n+  for (int i = 0;  i < 30; ++i)\n+    {\n+      static const struct addrinfo hints =\n+        {\n+          .ai_family = AF_UNSPEC,\n+          .ai_socktype = SOCK_STREAM,\n+        };\n+      struct addrinfo *ai;\n+      int ret = getaddrinfo (\"www.example\", \"80\", &hints, &ai);\n+      const char *expected;\n+      if (ret == 0 && ai->ai_next != NULL)\n+        expected = (\"address: STREAM/TCP 192.0.2.17 80\\n\"\n+                    \"address: STREAM/TCP 2001:db8::1 80\\n\");\n+      else\n+        /* Only one response because the AAAA lookup failure is\n+           treated as an ignoreable error.  */\n+        expected = \"address: STREAM/TCP 192.0.2.17 80\\n\";\n+      check_addrinfo (\"www.example\", ai, ret, expected);\n+      if (ret == 0)\n+        freeaddrinfo (ai);\n+    }\n+}\n+\n+static int\n+do_test (void)\n+{\n+  for (int do_single_lookup = 0; do_single_lookup < 2; ++do_single_lookup)\n+    {\n+      struct resolv_test *aux = resolv_test_start\n+        ((struct resolv_redirect_config)\n+         {\n+           .response_callback = response,\n+         });\n+\n+      if (do_single_lookup)\n+        _res.options |= RES_SNGLKUP;\n+\n+      for (int do_fail_aaaa = 0; do_fail_aaaa < 2; ++do_fail_aaaa)\n+        {\n+          fail_aaaa = do_fail_aaaa;\n+\n+          rcode = 2; /* SERVFAIL.  */\n+          check_one ();\n+\n+          rcode = 4; /* NOTIMP.  */\n+          check_one ();\n+\n+          rcode = 5; /* REFUSED.  */\n+          check_one ();\n+        }\n+\n+      resolv_test_end (aux);\n+    }\n+\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\ndiff --git a/resolv/tst-resolv-short-response.c b/resolv/tst-resolv-short-response.c\nindex cf1e39876f..be354ae1c7 100644\n--- a/resolv/tst-resolv-short-response.c\n+++ b/resolv/tst-resolv-short-response.c\n@@ -81,6 +81,18 @@ check_one (void)\n       check_hostent (\"www.example\", gethostbyname2 (\"www.example\", AF_INET6),\n                      \"name: www.example\\n\"\n                      \"address: 2001:db8::1\\n\");\n+      static const struct addrinfo hints =\n+        {\n+          .ai_family = AF_UNSPEC,\n+          .ai_socktype = SOCK_STREAM,\n+        };\n+      struct addrinfo *ai;\n+      int ret = getaddrinfo (\"www.example\", \"80\", &hints, &ai);\n+      check_addrinfo (\"www.example\", ai, ret,\n+                      \"address: STREAM/TCP 192.0.2.17 80\\n\"\n+                      \"address: STREAM/TCP 2001:db8::1 80\\n\");\n+      if (ret == 0)\n+        freeaddrinfo (ai);\n     }\n }\n \n\ncommit b6aeba2de157ba0cdc8fb0aed67b632b3490f383\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Wed Jul 24 12:50:17 2024 +0200\n\n    manual: Do not mention STATIC_TLS in dynamic linker hardening recommendations\n    \n    The current toolchain does not consistently generate it, and\n    glibc does not use it.\n    \n    Reviewed-by: Szabolcs Nagy <szabolcs.nagy@arm.com>\n    (cherry picked from commit 90842d3980064ef410b998b22170ad409b76b9fd)\n\ndiff --git a/manual/dynlink.texi b/manual/dynlink.texi\nindex 03565d4fb0..1500a53de6 100644\n--- a/manual/dynlink.texi\n+++ b/manual/dynlink.texi\n@@ -993,21 +993,21 @@ The dynamic segment should also mention @code{BIND_NOW} on the\n enough).\n \n @item\n-For shared objects (not main programs), if the program header has a\n-@code{PT_TLS} segment, the dynamic segment (as shown by @samp{readelf\n--dW}) should contain the @code{STATIC_TLS} flag on the @code{FLAGS}\n-line.\n-\n-If @code{STATIC_TLS} is missing in shared objects, ensure that the\n-appropriate relocations for GNU2 TLS descriptors are used (for example,\n+Ensure that only static TLS relocations (thread-pointer relative offset\n+locations) are used, for example @code{R_AARCH64_TLS_TPREL} and\n+@code{X86_64_TPOFF64}.  As the second-best option, and only if\n+compatibility with non-hardened applications using @code{dlopen} is\n+needed, GNU2 TLS descriptor relocations can be used (for example,\n @code{R_AARCH64_TLSDESC} or @code{R_X86_64_TLSDESC}).\n \n @item\n-There should not be a reference to the symbols @code{__tls_get_addr},\n-@code{__tls_get_offset}, @code{__tls_get_addr_opt} in the dynamic symbol\n-table (in the @samp{readelf -sDW} output).  Thread-local storage must be\n-accessed using the initial-exec (static) model, or using GNU2 TLS\n-descriptors.\n+There should not be references to the traditional TLS function symbols\n+@code{__tls_get_addr}, @code{__tls_get_offset},\n+@code{__tls_get_addr_opt} in the dynamic symbol table (in the\n+@samp{readelf -sDW} output).  Supporting global dynamic TLS relocations\n+(such as @code{R_AARCH64_TLS_DTPMOD}, @code{R_AARCH64_TLS_DTPREL},\n+@code{R_X86_64_DTPMOD64}, @code{R_X86_64_DTPOFF64}) should not be used,\n+either.\n \n @item\n Likewise, the functions @code{dlopen}, @code{dlmopen}, @code{dlclose}\n\ncommit 145b5886379c8de4f0a1bca3556a4c3d7b6c24b2\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Wed Jul 24 13:42:16 2024 +0200\n\n    Fix version number in NEWS file\n\ndiff --git a/NEWS b/NEWS\nindex 4d7100b21c..6b62f55658 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -5,7 +5,7 @@ See the end for copying conditions.\n Please send GNU C library bug reports via <https://sourceware.org/bugzilla/>\n using `glibc' in the \"product\" field.\n \f\n-Version 2.41\n+Version 2.40.1\n \n The following bugs are resolved with this release:\n \n\ncommit 2aebac5e158277d852b87b0cbd4af2b2d10ac387\nAuthor: Miguel Martín <mmartinv@redhat.com>\nDate:   Tue Jul 16 17:14:56 2024 +0200\n\n    malloc: avoid global locks in tst-aligned_alloc-lib.c\n    \n    Make sure the DSO used by aligned_alloc/calloc/malloc tests does not get\n    a global lock on multithreaded tests.\n    Reviewed-by: Arjun Shankar <arjun@redhat.com>\n    \n    (cherry picked from commit 9a27b566b2048f599048f2f4afe1cce06c4ef43d)\n\ndiff --git a/malloc/tst-aligned_alloc-lib.c b/malloc/tst-aligned_alloc-lib.c\nindex 0205df5acf..9ef1f839c1 100644\n--- a/malloc/tst-aligned_alloc-lib.c\n+++ b/malloc/tst-aligned_alloc-lib.c\n@@ -17,37 +17,38 @@\n    License along with the GNU C Library; see the file COPYING.LIB.  If\n    not, see <https://www.gnu.org/licenses/>.  */\n \n-#include <array_length.h>\n #include <libc-symbols.h>\n #include <stdlib.h>\n+#include <time.h>\n \n extern void *__libc_malloc (size_t size);\n extern void *__libc_calloc (size_t n, size_t size);\n \n+__thread unsigned int seed = 0;\n+\n int aligned_alloc_count = 0;\n int libc_malloc_count = 0;\n int libc_calloc_count = 0;\n \n-/* Get a random alignment value.  Biased towards the smaller values.  Must be\n-   a power of 2. */\n-static size_t get_random_alignment (void)\n-{\n-  size_t aligns[] = {\n-    1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384\n-  };\n-\n-  return aligns[random () % array_length (aligns)];\n-}\n-\n-static void *get_random_alloc (size_t size)\n+static void *\n+get_random_alloc (size_t size)\n {\n   void *retval;\n   size_t align;\n+  struct timespec tp;\n+\n+  if (seed == 0)\n+    {\n+      clock_gettime (CLOCK_REALTIME, &tp);\n+      seed = tp.tv_nsec;\n+    }\n \n-  switch (random() % 3)\n-  {\n+  switch (rand_r (&seed) % 3)\n+    {\n     case 1:\n-      align = get_random_alignment ();\n+      /* Get a random alignment value.  Biased towards the smaller\n+       * values up to 16384. Must be a power of 2. */\n+      align = 1 << rand_r (&seed) % 15;\n       retval = aligned_alloc (align, size);\n       aligned_alloc_count++;\n       break;\n@@ -59,13 +60,13 @@ static void *get_random_alloc (size_t size)\n       retval = __libc_malloc (size);\n       libc_malloc_count++;\n       break;\n-  }\n+    }\n \n   return retval;\n }\n \n-\n-void * __random_malloc (size_t size)\n+void *\n+__random_malloc (size_t size)\n {\n   return get_random_alloc (size);\n }\n\ncommit 5d2a931a8167a288374c3a38dc10fe0492ab5ffe\nAuthor: Miguel Martín <mmartinv@redhat.com>\nDate:   Tue Jul 16 17:14:57 2024 +0200\n\n    malloc: add multi-threaded tests for aligned_alloc/calloc/malloc\n    \n    Improve aligned_alloc/calloc/malloc test coverage by adding\n    multi-threaded tests with random memory allocations and with/without\n    cross-thread memory deallocations.\n    \n    Perform a number of memory allocation calls with random sizes limited\n    to 0xffff.\n    \n    Use the existing DSO ('malloc/tst-aligned_alloc-lib.c') to randomize\n    allocator selection.\n    \n    The multi-threaded allocation/deallocation is staged as described below:\n    \n    - Stage 1: Half of the threads will be allocating memory and the\n      other half will be waiting for them to finish the allocation.\n    - Stage 2: Half of the threads will be allocating memory and the\n      other half will be deallocating memory.\n    - Stage 3: Half of the threads will be deallocating memory and the\n      second half waiting on them to finish.\n    \n    Add 'malloc/tst-aligned-alloc-random-thread.c' where each thread will\n    deallocate only the memory that was previously allocated by itself.\n    \n    Add 'malloc/tst-aligned-alloc-random-thread-cross.c' where each thread\n    will deallocate memory that was previously allocated by another thread.\n    \n    The intention is to be able to utilize existing malloc testing to ensure\n    that similar allocation APIs are also exposed to the same rigors.\n    Reviewed-by: Arjun Shankar <arjun@redhat.com>\n    \n    (cherry picked from commit b0fbcb7d0051a68baf26b2aed51a8a31c34d68e5)\n\ndiff --git a/malloc/Makefile b/malloc/Makefile\nindex 02aff1bd1d..98d507a6eb 100644\n--- a/malloc/Makefile\n+++ b/malloc/Makefile\n@@ -28,6 +28,8 @@ tests := \\\n   mallocbug \\\n   tst-aligned-alloc \\\n   tst-aligned-alloc-random \\\n+  tst-aligned-alloc-random-thread \\\n+  tst-aligned-alloc-random-thread-cross \\\n   tst-alloc_buffer \\\n   tst-calloc \\\n   tst-free-errno \\\n@@ -151,6 +153,8 @@ ifeq ($(have-GLIBC_2.23)$(build-shared),yesyes)\n # the tests expect specific internal behavior that is changed due to linking to\n # libmcheck.a.\n tests-exclude-mcheck = \\\n+  tst-aligned-alloc-random-thread \\\n+  tst-aligned-alloc-random-thread-cross \\\n   tst-compathooks-off \\\n   tst-compathooks-on \\\n   tst-malloc-backtrace \\\n@@ -415,7 +419,11 @@ $(objpfx)tst-mallocstate: $(objpfx)libc_malloc_debug.so\n $(objpfx)tst-mallocstate-malloc-check: $(objpfx)libc_malloc_debug.so\n \n $(objpfx)tst-aligned-alloc-random.out: $(objpfx)tst-aligned_alloc-lib.so\n+$(objpfx)tst-aligned-alloc-random-thread.out: $(objpfx)tst-aligned_alloc-lib.so\n+$(objpfx)tst-aligned-alloc-random-thread-cross.out: $(objpfx)tst-aligned_alloc-lib.so\n $(objpfx)tst-malloc-random.out: $(objpfx)tst-aligned_alloc-lib.so\n \n tst-aligned-alloc-random-ENV = LD_PRELOAD=$(objpfx)tst-aligned_alloc-lib.so\n+tst-aligned-alloc-random-thread-ENV = LD_PRELOAD=$(objpfx)tst-aligned_alloc-lib.so\n+tst-aligned-alloc-random-thread-cross-ENV = LD_PRELOAD=$(objpfx)tst-aligned_alloc-lib.so\n tst-malloc-random-ENV = LD_PRELOAD=$(objpfx)tst-aligned_alloc-lib.so\ndiff --git a/malloc/tst-aligned-alloc-random-thread-cross.c b/malloc/tst-aligned-alloc-random-thread-cross.c\nnew file mode 100644\nindex 0000000000..360ecc56ee\n--- /dev/null\n+++ b/malloc/tst-aligned-alloc-random-thread-cross.c\n@@ -0,0 +1,19 @@\n+/* multi-threaded memory allocation and cross-thread deallocation test.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public License as\n+   published by the Free Software Foundation; either version 2.1 of the\n+   License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; see the file COPYING.LIB.  If\n+   not, see <https://www.gnu.org/licenses/>.  */\n+#define CROSS_THREAD_DEALLOC\n+#include \"tst-aligned-alloc-random-thread.c\"\ndiff --git a/malloc/tst-aligned-alloc-random-thread.c b/malloc/tst-aligned-alloc-random-thread.c\nnew file mode 100644\nindex 0000000000..e95f79250a\n--- /dev/null\n+++ b/malloc/tst-aligned-alloc-random-thread.c\n@@ -0,0 +1,145 @@\n+/* multi-threaded memory allocation/deallocation test.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public License as\n+   published by the Free Software Foundation; either version 2.1 of the\n+   License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; see the file COPYING.LIB.  If\n+   not, see <https://www.gnu.org/licenses/>.  */\n+\n+#include <stdio.h>\n+#include <stdlib.h>\n+#include <string.h>\n+#include <support/check.h>\n+#include <support/support.h>\n+#include <support/xthread.h>\n+#include <support/test-driver.h>\n+#include <sys/sysinfo.h>\n+#include <unistd.h>\n+\n+#ifndef ITERATIONS\n+#  define ITERATIONS 16\n+#endif\n+\n+#ifndef NUM_THREADS\n+#  define NUM_THREADS 8\n+#endif\n+\n+#ifndef NUM_ALLOCATIONS\n+#  define NUM_ALLOCATIONS 2048\n+#endif\n+\n+static pthread_barrier_t barrier;\n+\n+__thread unsigned int seed;\n+\n+typedef struct\n+{\n+  int id;\n+  pthread_t thread;\n+} thread;\n+\n+thread threads[NUM_THREADS];\n+\n+void *allocations[NUM_THREADS][NUM_ALLOCATIONS];\n+\n+void\n+run_thread_dealloc (int id)\n+{\n+  for (int i = 0; i < NUM_ALLOCATIONS; i++)\n+    {\n+      free (allocations[id][i]);\n+      allocations[id][i] = NULL;\n+    }\n+}\n+\n+void\n+run_thread_alloc (int id)\n+{\n+  size_t msb, size;\n+  for (int i = 0; i < NUM_ALLOCATIONS; i++)\n+    {\n+      msb = 1 << rand_r (&seed) % 16;\n+      size = msb + rand_r (&seed) % msb;\n+      allocations[id][i] = malloc (size);\n+      TEST_VERIFY_EXIT (allocations[id][i] != NULL);\n+    }\n+}\n+\n+void *\n+run_allocations (void *arg)\n+{\n+  int id = *((int *) arg);\n+  seed = time (NULL) + id;\n+\n+  /* Stage 1: First half o the threads allocating memory and the second\n+   * half waiting for them to finish\n+   */\n+  if (id < NUM_THREADS / 2)\n+    run_thread_alloc (id);\n+\n+  xpthread_barrier_wait (&barrier);\n+\n+  /* Stage 2: Half of the threads allocationg memory and the other\n+   * half deallocating:\n+   * - In the non cross-thread dealloc scenario the first half will be\n+   *   deallocating the memory allocated by themselves in stage 1 and the\n+   *   second half will be allocating memory.\n+   * - In the cross-thread dealloc scenario the first half will continue\n+   *   to allocate memory and the second half will deallocate the memory\n+   *   allocated by the first half in stage 1.\n+   */\n+  if (id < NUM_THREADS / 2)\n+#ifndef CROSS_THREAD_DEALLOC\n+    run_thread_dealloc (id);\n+#else\n+    run_thread_alloc (id + NUM_THREADS / 2);\n+#endif\n+  else\n+#ifndef CROSS_THREAD_DEALLOC\n+    run_thread_alloc (id);\n+#else\n+    run_thread_dealloc (id - NUM_THREADS / 2);\n+#endif\n+\n+  xpthread_barrier_wait (&barrier);\n+\n+  // Stage 3: Second half of the threads deallocating and the first half\n+  // waiting for them to finish.\n+  if (id >= NUM_THREADS / 2)\n+    run_thread_dealloc (id);\n+\n+  return NULL;\n+}\n+\n+static int\n+do_test (void)\n+{\n+  xpthread_barrier_init (&barrier, NULL, NUM_THREADS);\n+\n+  for (int i = 0; i < ITERATIONS; i++)\n+    {\n+      for (int t = 0; t < NUM_THREADS; t++)\n+\t{\n+\t  threads[t].id = t;\n+\t  threads[t].thread\n+\t      = xpthread_create (NULL, run_allocations, &threads[t].id);\n+\t}\n+\n+      for (int t = 0; t < NUM_THREADS; t++)\n+\txpthread_join (threads[t].thread);\n+    }\n+\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\n\ncommit 65fbcfe58991194301a7e4fb9c53ab936573e711\nAuthor: Arjun Shankar <arjun@redhat.com>\nDate:   Mon Jul 29 14:30:59 2024 +0200\n\n    manual/stdio: Clarify putc and putwc\n    \n    The manual entry for `putc' described what \"most systems\" do instead of\n    describing the glibc implementation and its guarantees.  This commit\n    fixes that by warning that putc may be implemented as a macro that\n    double-evaluates `stream', and removing the performance claim.\n    \n    Even though the current `putc' implementation does not double-evaluate\n    `stream', offering this obscure guarantee as an extension to what\n    POSIX allows does not seem very useful.\n    \n    The entry for `putwc' is also edited to bring it in line with `putc'.\n    Reviewed-by: Florian Weimer <fweimer@redhat.com>\n    \n    (cherry picked from commit 10de4a47ef3f481592e3c62eb07bcda23e9fde4d)\n\ndiff --git a/manual/stdio.texi b/manual/stdio.texi\nindex f5e289d58a..f9529a098d 100644\n--- a/manual/stdio.texi\n+++ b/manual/stdio.texi\n@@ -903,21 +903,21 @@ This function is a GNU extension.\n @deftypefun int putc (int @var{c}, FILE *@var{stream})\n @standards{ISO, stdio.h}\n @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}\n-This is just like @code{fputc}, except that most systems implement it as\n+This is just like @code{fputc}, except that it may be implemented as\n a macro, making it faster.  One consequence is that it may evaluate the\n @var{stream} argument more than once, which is an exception to the\n-general rule for macros.  @code{putc} is usually the best function to\n-use for writing a single character.\n+general rule for macros.  Therefore, @var{stream} should never be an\n+expression with side-effects.\n @end deftypefun\n \n @deftypefun wint_t putwc (wchar_t @var{wc}, FILE *@var{stream})\n @standards{ISO, wchar.h}\n @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}\n-This is just like @code{fputwc}, except that it can be implement as\n+This is just like @code{fputwc}, except that it may be implemented as\n a macro, making it faster.  One consequence is that it may evaluate the\n @var{stream} argument more than once, which is an exception to the\n-general rule for macros.  @code{putwc} is usually the best function to\n-use for writing a single wide character.\n+general rule for macros.  Therefore, @var{stream} should never be an\n+expression with side-effects.\n @end deftypefun\n \n @deftypefun int putc_unlocked (int @var{c}, FILE *@var{stream})\n\ncommit 132a72f93cb4ad9f16b8469dc061de5f75f6a44e\nAuthor: Lukas Bulwahn <lukas.bulwahn@redhat.com>\nDate:   Mon Jul 29 11:08:17 2024 +0200\n\n    manual: make setrlimit() description less ambiguous\n    \n    The existing description for setrlimit() has some ambiguity. It could be\n    understood to have the semantics of getrlimit(), i.e., the limits from the\n    process are stored in the provided rlp pointer.\n    \n    Make the description more explicit that rlp are the input values, and that\n    the limits of the process is changed with this function.\n    \n    Reviewed-by: Florian Weimer <fweimer@redhat.com>\n    (cherry picked from commit aedbf08891069fc029ed021e4dba933eb877b394)\n\ndiff --git a/manual/resource.texi b/manual/resource.texi\nindex c9b21dedeb..25966bcb64 100644\n--- a/manual/resource.texi\n+++ b/manual/resource.texi\n@@ -192,8 +192,8 @@ If the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a\n @standards{BSD, sys/resource.h}\n @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}\n @c Direct syscall on most systems; lock-taking critical section on HURD.\n-Store the current and maximum limits for the resource @var{resource}\n-in @code{*@var{rlp}}.\n+Change the current and maximum limits of the process for the resource\n+@var{resource} to the values provided in @code{*@var{rlp}}.\n \n The return value is @code{0} on success and @code{-1} on failure.  The\n following @code{errno} error condition is possible:\n\ncommit 509166c9a53ad81217a28cc67ba2a688f02fc477\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Wed Jun 26 11:27:54 2024 +0200\n\n    Enhance test coverage for strnlen, wcsnlen\n    \n    This commit adds string/test-strnlen-nonarray and\n    wcsmbs/test-wcsnlen-nonarray.\n    \n    Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>\n    (cherry picked from commit 783d4c0b81889c39a9ddf13b60d0fde4040fb1c0)\n\ndiff --git a/string/Makefile b/string/Makefile\nindex 8f31fa49e6..2e20fc00fd 100644\n--- a/string/Makefile\n+++ b/string/Makefile\n@@ -184,6 +184,7 @@ tests := \\\n   test-strncpy \\\n   test-strndup \\\n   test-strnlen \\\n+  test-strnlen-nonarray \\\n   test-strpbrk \\\n   test-strrchr \\\n   test-strspn \\\ndiff --git a/string/test-Xnlen-nonarray.c b/string/test-Xnlen-nonarray.c\nnew file mode 100644\nindex 0000000000..499bef2041\n--- /dev/null\n+++ b/string/test-Xnlen-nonarray.c\n@@ -0,0 +1,133 @@\n+/* Test non-array inputs to string length functions.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+/* This skeleton file is included from string/test-strnlen-nonarray.c\n+   and wcsmbs/test-wcsnlen-nonarray.c to test that reading of the array\n+   stops at the first null character.\n+\n+   TEST_IDENTIFIER must be the test function identifier.  TEST_NAME is\n+   the same as a string.\n+\n+   CHAR must be defined as the character type.  */\n+\n+#include <array_length.h>\n+#include <string.h>\n+#include <support/check.h>\n+#include <support/next_to_fault.h>\n+#include <support/test-driver.h>\n+#include <sys/param.h>\n+#include <unistd.h>\n+\n+typedef __typeof (TEST_IDENTIFIER) *proto_t;\n+\n+#define TEST_MAIN\n+#include \"test-string.h\"\n+\n+IMPL (TEST_IDENTIFIER, 1)\n+\n+static int\n+test_main (void)\n+{\n+  enum { buffer_length = 256 };\n+  TEST_VERIFY_EXIT (sysconf (_SC_PAGESIZE) >= buffer_length);\n+\n+  test_init ();\n+\n+  /* Buffer layout: There are a_count 'A' character followed by\n+     zero_count null character, for a total of buffer_length\n+     character:\n+\n+     AAAAA...AAAAA 00000 ... 00000 (unmapped page follows)\n+     \\           / \\             /\n+       (a_count)     (zero_count)\n+       \\___ (buffer_length) ___/\n+          ^\n+          |\n+          start_offset\n+\n+    The buffer length does not change, but a_count (and thus _zero)\n+    and start_offset vary.\n+\n+    If start_offset == buffer_length, only 0 is a valid length\n+    argument.  The result is 0.\n+\n+    Otherwwise, if zero_count > 0 (if there a null characters in the\n+    buffer), then any length argument is valid.  If start_offset <\n+    a_count (i.e., there is a non-null character at start_offset), the\n+    result is the minimum of a_count - start_offset and the length\n+    argument.  Otherwise the result is 0.\n+\n+    Otherwise, there are no null characters before the unmapped page.\n+    The length argument must not be greater than buffer_length -\n+    start_offset, and the result is the length argument.  */\n+\n+  struct support_next_to_fault ntf\n+    = support_next_to_fault_allocate (buffer_length * sizeof (CHAR));\n+  CHAR *buffer = (CHAR *) ntf.buffer;\n+\n+  FOR_EACH_IMPL (impl, 0)\n+    {\n+      printf (\"info: testing %s\\n\", impl->name);\n+      for (size_t i = 0; i < buffer_length; ++i)\n+        buffer[i] = 'A';\n+\n+      for (int zero_count = 0; zero_count <= buffer_length; ++zero_count)\n+        {\n+          if (zero_count > 0)\n+            buffer[buffer_length - zero_count] = 0;\n+          int a_count = buffer_length - zero_count;\n+          for (int start_offset = 0; start_offset <= buffer_length;\n+               ++start_offset)\n+            {\n+              CHAR *start_pointer = buffer + start_offset;\n+              if (start_offset == buffer_length)\n+                TEST_COMPARE (CALL (impl, buffer + start_offset, 0), 0);\n+              else if (zero_count > 0)\n+                for (int length_argument = 0;\n+                     length_argument <= 2 * buffer_length;\n+                     ++length_argument)\n+                  {\n+                    if (test_verbose)\n+                      printf (\"zero_count=%d a_count=%d start_offset=%d\"\n+                              \" length_argument=%d\\n\",\n+                              zero_count, a_count, start_offset,\n+                              length_argument);\n+                    if (start_offset < a_count)\n+                      TEST_COMPARE (CALL (impl, start_pointer, length_argument),\n+                                    MIN (a_count - start_offset,\n+                                         length_argument));\n+                    else\n+                      TEST_COMPARE (CALL (impl, start_pointer, length_argument),\n+                                    0);\n+                  }\n+              else\n+                for (int length_argument = 0;\n+                     length_argument <= buffer_length - start_offset;\n+                     ++length_argument)\n+                  TEST_COMPARE (CALL (impl, start_pointer, length_argument),\n+                                length_argument);\n+            }\n+        }\n+    }\n+\n+  support_next_to_fault_free (&ntf);\n+\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\ndiff --git a/string/test-strnlen-nonarray.c b/string/test-strnlen-nonarray.c\nnew file mode 100644\nindex 0000000000..0ad05756d9\n--- /dev/null\n+++ b/string/test-strnlen-nonarray.c\n@@ -0,0 +1,4 @@\n+#define TEST_IDENTIFIER strnlen\n+#define TEST_NAME \"strnlen\"\n+typedef char CHAR;\n+#include \"test-Xnlen-nonarray.c\"\ndiff --git a/wcsmbs/Makefile b/wcsmbs/Makefile\nindex 1cddd8cc6d..c51c9b4f1f 100644\n--- a/wcsmbs/Makefile\n+++ b/wcsmbs/Makefile\n@@ -160,6 +160,7 @@ tests := \\\n   test-wcsncmp \\\n   test-wcsncpy \\\n   test-wcsnlen \\\n+  test-wcsnlen-nonarray \\\n   test-wcspbrk \\\n   test-wcsrchr \\\n   test-wcsspn \\\ndiff --git a/wcsmbs/test-wcsnlen-nonarray.c b/wcsmbs/test-wcsnlen-nonarray.c\nnew file mode 100644\nindex 0000000000..a4b21fecd3\n--- /dev/null\n+++ b/wcsmbs/test-wcsnlen-nonarray.c\n@@ -0,0 +1,5 @@\n+#include <wchar.h>\n+#define TEST_IDENTIFIER wcsnlen\n+#define TEST_NAME \"wcsnlen\"\n+typedef wchar_t CHAR;\n+#include \"../string/test-Xnlen-nonarray.c\"\n\ncommit 46f19b234244f4654b9e3898ac1c27de86068222\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Thu Jun 27 16:26:56 2024 +0200\n\n    Enhanced test coverage for strncmp, wcsncmp\n    \n    Add string/test-strncmp-nonarray and\n    wcsmbs/test-wcsncmp-nonarray.\n    \n    This is the test that uncovered bug 31934.  Test run time\n    is more than one minute on a fairly current system, so turn\n    these into xtests that do not run automatically.\n    \n    Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>\n    (cherry picked from commit 54252394c25ddf0062e288d4a6ab7a885f8ae009)\n\ndiff --git a/string/Makefile b/string/Makefile\nindex 2e20fc00fd..1dff405c27 100644\n--- a/string/Makefile\n+++ b/string/Makefile\n@@ -236,7 +236,10 @@ tests-unsupported += $(tests-translation)\n endif\n \n # This test allocates a lot of memory and can run for a long time.\n-xtests = tst-strcoll-overflow\n+xtests += tst-strcoll-overflow\n+\n+# This test runs for a long time.\n+xtests += test-strncmp-nonarray\n \n # This test needs libdl.\n ifeq (yes,$(build-shared))\ndiff --git a/string/test-Xncmp-nonarray.c b/string/test-Xncmp-nonarray.c\nnew file mode 100644\nindex 0000000000..9f3a3ca75d\n--- /dev/null\n+++ b/string/test-Xncmp-nonarray.c\n@@ -0,0 +1,183 @@\n+/* Test non-array inputs to string comparison functions.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+/* This skeleton file is included from string/test-strncmp-nonarray.c and\n+   wcsmbs/test-wcsncmp-nonarray.c to test that reading of the arrays stops\n+   at the first null character.\n+\n+   TEST_IDENTIFIER must be the test function identifier.  TEST_NAME is\n+   the same as a string.\n+\n+   CHAR must be defined as the character type.  */\n+\n+#include <array_length.h>\n+#include <string.h>\n+#include <support/check.h>\n+#include <support/next_to_fault.h>\n+#include <support/test-driver.h>\n+#include <sys/param.h>\n+#include <unistd.h>\n+\n+/* Much shorter than test-Xnlen-nonarray.c because of deeply nested loops.  */\n+enum { buffer_length = 80 };\n+\n+/* The test buffer layout follows what is described test-Xnlen-nonarray.c,\n+   except that there two buffers, left and right.  The variables\n+   a_count, zero_count, start_offset are all duplicated.  */\n+\n+/* Return the maximum string length for a string that starts at\n+   start_offset.  */\n+static int\n+string_length (int a_count, int start_offset)\n+{\n+  if (start_offset == buffer_length || start_offset >= a_count)\n+    return 0;\n+  else\n+    return a_count - start_offset;\n+}\n+\n+/* This is the valid maximum length argument computation for\n+   strnlen/wcsnlen.  See text-Xnlen-nonarray.c.  */\n+static int\n+maximum_length (int start_offset, int zero_count)\n+{\n+  if (start_offset == buffer_length)\n+    return 0;\n+  else if (zero_count > 0)\n+    /* Effectively unbounded, but we need to stop fairly low,\n+       otherwise testing takes too long.  */\n+    return buffer_length + 32;\n+  else\n+    return buffer_length - start_offset;\n+}\n+\n+typedef __typeof (TEST_IDENTIFIER) *proto_t;\n+\n+#define TEST_MAIN\n+#include \"test-string.h\"\n+\n+IMPL (TEST_IDENTIFIER, 1)\n+\n+static int\n+test_main (void)\n+{\n+  TEST_VERIFY_EXIT (sysconf (_SC_PAGESIZE) >= buffer_length);\n+  test_init ();\n+\n+  struct support_next_to_fault left_ntf\n+    = support_next_to_fault_allocate (buffer_length * sizeof (CHAR));\n+  CHAR *left_buffer = (CHAR *) left_ntf.buffer;\n+  struct support_next_to_fault right_ntf\n+    = support_next_to_fault_allocate (buffer_length * sizeof (CHAR));\n+  CHAR *right_buffer = (CHAR *) right_ntf.buffer;\n+\n+  FOR_EACH_IMPL (impl, 0)\n+    {\n+      printf (\"info: testing %s\\n\", impl->name);\n+      for (size_t i = 0; i < buffer_length; ++i)\n+        left_buffer[i] = 'A';\n+\n+      for (int left_zero_count = 0; left_zero_count <= buffer_length;\n+           ++left_zero_count)\n+        {\n+          if (left_zero_count > 0)\n+            left_buffer[buffer_length - left_zero_count] = 0;\n+          int left_a_count = buffer_length - left_zero_count;\n+          for (size_t i = 0; i < buffer_length; ++i)\n+            right_buffer[i] = 'A';\n+          for (int right_zero_count = 0; right_zero_count <= buffer_length;\n+               ++right_zero_count)\n+            {\n+              if (right_zero_count > 0)\n+                right_buffer[buffer_length - right_zero_count] = 0;\n+              int right_a_count = buffer_length - right_zero_count;\n+              for (int left_start_offset = 0;\n+                   left_start_offset <= buffer_length;\n+                   ++left_start_offset)\n+                {\n+                  CHAR *left_start_pointer = left_buffer + left_start_offset;\n+                  int left_maxlen\n+                    = maximum_length (left_start_offset, left_zero_count);\n+                  int left_length\n+                    = string_length (left_a_count, left_start_offset);\n+                  for (int right_start_offset = 0;\n+                       right_start_offset <= buffer_length;\n+                       ++right_start_offset)\n+                    {\n+                      CHAR *right_start_pointer\n+                        = right_buffer + right_start_offset;\n+                      int right_maxlen\n+                        = maximum_length (right_start_offset, right_zero_count);\n+                      int right_length\n+                        = string_length (right_a_count, right_start_offset);\n+\n+                      /* Maximum length is modelled after strnlen/wcsnlen,\n+                         and must be valid for both pointer arguments at\n+                         the same time.  */\n+                      int maxlen = MIN (left_maxlen, right_maxlen);\n+\n+                      for (int length_argument = 0; length_argument <= maxlen;\n+                           ++length_argument)\n+                        {\n+                          if (test_verbose)\n+                            {\n+                              printf (\"left: zero_count=%d\"\n+                                      \" a_count=%d start_offset=%d\\n\",\n+                                      left_zero_count, left_a_count,\n+                                      left_start_offset);\n+                              printf (\"right: zero_count=%d\"\n+                                      \" a_count=%d start_offset=%d\\n\",\n+                                      right_zero_count, right_a_count,\n+                                      right_start_offset);\n+                              printf (\"length argument: %d\\n\",\n+                                      length_argument);\n+                            }\n+\n+                          /* Effective lengths bounded by length argument.\n+                             The effective length determines the\n+                             outcome of the comparison.  */\n+                          int left_effective\n+                            = MIN (left_length, length_argument);\n+                          int right_effective\n+                            = MIN (right_length, length_argument);\n+                          if (left_effective == right_effective)\n+                            TEST_COMPARE (CALL (impl,\n+                                                left_start_pointer,\n+                                                right_start_pointer,\n+                                                length_argument), 0);\n+                          else if (left_effective < right_effective)\n+                            TEST_COMPARE (CALL (impl,\n+                                                left_start_pointer,\n+                                                right_start_pointer,\n+                                                length_argument) < 0, 1);\n+                          else\n+                            TEST_COMPARE (CALL (impl,\n+                                                left_start_pointer,\n+                                                right_start_pointer,\n+                                                length_argument) > 0, 1);\n+                        }\n+                    }\n+                }\n+            }\n+        }\n+    }\n+\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\ndiff --git a/string/test-strncmp-nonarray.c b/string/test-strncmp-nonarray.c\nnew file mode 100644\nindex 0000000000..581e52d01b\n--- /dev/null\n+++ b/string/test-strncmp-nonarray.c\n@@ -0,0 +1,4 @@\n+#define TEST_IDENTIFIER strncmp\n+#define TEST_NAME \"strncmp\"\n+typedef char CHAR;\n+#include \"test-Xncmp-nonarray.c\"\ndiff --git a/wcsmbs/Makefile b/wcsmbs/Makefile\nindex c51c9b4f1f..63adf0e8ef 100644\n--- a/wcsmbs/Makefile\n+++ b/wcsmbs/Makefile\n@@ -206,6 +206,10 @@ tests := \\\n   wcsmbs-tst1 \\\n   # tests\n \n+# This test runs for a long time.\n+xtests += test-wcsncmp-nonarray\n+\n+\n include ../Rules\n \n ifeq ($(run-built-tests),yes)\ndiff --git a/wcsmbs/test-wcsncmp-nonarray.c b/wcsmbs/test-wcsncmp-nonarray.c\nnew file mode 100644\nindex 0000000000..1ad9ebd8fd\n--- /dev/null\n+++ b/wcsmbs/test-wcsncmp-nonarray.c\n@@ -0,0 +1,5 @@\n+#include <wchar.h>\n+#define TEST_IDENTIFIER wcsncmp\n+#define TEST_NAME \"wcsncmp\"\n+typedef wchar_t CHAR;\n+#include \"../string/test-Xncmp-nonarray.c\"\n\ncommit 3433a358428bcec2d203fa408b85f442c9a465ca\nAuthor: H.J. Lu <hjl.tools@gmail.com>\nDate:   Wed Jul 24 14:05:13 2024 -0700\n\n    linux: Update the mremap C implementation [BZ #31968]\n    \n    Update the mremap C implementation to support the optional argument for\n    MREMAP_DONTUNMAP added in Linux 5.7 since it may not always be correct\n    to implement a variadic function as a non-variadic function on all Linux\n    targets.  Return MAP_FAILED and set errno to EINVAL for unknown flag bits.\n    This fixes BZ #31968.\n    \n    Note: A test must be added when a new flag bit is introduced.\n    \n    Signed-off-by: H.J. Lu <hjl.tools@gmail.com>\n    Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>\n    (cherry picked from commit 6c40cb0e9f893d49dc7caee580a055de53562206)\n\ndiff --git a/NEWS b/NEWS\nindex 6b62f55658..5948704ef9 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -11,6 +11,7 @@ The following bugs are resolved with this release:\n \n   [30081] resolv: Do not wait for non-existing second DNS response after error\n   [31890] resolv: Allow short error responses to match any DNS query\n+  [31968] mremap implementation in C does not handle arguments correctly\n \f\n Version 2.40\n \ndiff --git a/sysdeps/unix/sysv/linux/mremap.c b/sysdeps/unix/sysv/linux/mremap.c\nindex 4f770799c4..1ada5c1f40 100644\n--- a/sysdeps/unix/sysv/linux/mremap.c\n+++ b/sysdeps/unix/sysv/linux/mremap.c\n@@ -20,6 +20,12 @@\n #include <sysdep.h>\n #include <stdarg.h>\n #include <stddef.h>\n+#include <errno.h>\n+\n+#define MREMAP_KNOWN_BITS \\\n+  (MREMAP_MAYMOVE \\\n+   | MREMAP_FIXED \\\n+   | MREMAP_DONTUNMAP)\n \n void *\n __mremap (void *addr, size_t old_len, size_t new_len, int flags, ...)\n@@ -27,7 +33,13 @@ __mremap (void *addr, size_t old_len, size_t new_len, int flags, ...)\n   va_list va;\n   void *new_addr = NULL;\n \n-  if (flags & MREMAP_FIXED)\n+  if (flags & ~(MREMAP_KNOWN_BITS))\n+    {\n+      __set_errno (EINVAL);\n+      return MAP_FAILED;\n+    }\n+\n+  if (flags & (MREMAP_FIXED | MREMAP_DONTUNMAP))\n     {\n       va_start (va, flags);\n       new_addr = va_arg (va, void *);\n\ncommit 2eb2d78ca75d7432bd1d11d227f4c899554ea02e\nAuthor: H.J. Lu <hjl.tools@gmail.com>\nDate:   Wed Jul 24 14:05:14 2024 -0700\n\n    mremap: Update manual entry\n    \n    Update mremap manual entry:\n    \n    1. Change mremap to variadic.\n    2. Document MREMAP_FIXED and MREMAP_DONTUNMAP.\n    \n    Signed-off-by: H.J. Lu <hjl.tools@gmail.com>\n    Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>\n    (cherry picked from commit cb2dee4eccf46642eef588bee64f9c875c408f1c)\n\ndiff --git a/NEWS b/NEWS\nindex 5948704ef9..8da0408ad9 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -10,6 +10,7 @@ Version 2.40.1\n The following bugs are resolved with this release:\n \n   [30081] resolv: Do not wait for non-existing second DNS response after error\n+  [31968] mremap implementation in C does not handle arguments correctly\n   [31890] resolv: Allow short error responses to match any DNS query\n   [31968] mremap implementation in C does not handle arguments correctly\n \f\ndiff --git a/manual/llio.texi b/manual/llio.texi\nindex 6f0a48609b..ea84196abd 100644\n--- a/manual/llio.texi\n+++ b/manual/llio.texi\n@@ -1892,7 +1892,7 @@ There is no existing mapping in at least part of the given region.\n \n @end deftypefun\n \n-@deftypefun {void *} mremap (void *@var{address}, size_t @var{length}, size_t @var{new_length}, int @var{flag})\n+@deftypefun {void *} mremap (void *@var{address}, size_t @var{length}, size_t @var{new_length}, int @var{flag}, ... /* void *@var{new_address} */)\n @standards{GNU, sys/mman.h}\n @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}\n \n@@ -1901,12 +1901,40 @@ area. @var{address} and @var{length} must cover a region entirely mapped\n in the same @code{mmap} statement.  A new mapping with the same\n characteristics will be returned with the length @var{new_length}.\n \n-One option is possible, @code{MREMAP_MAYMOVE}.  If it is given in\n-@var{flags}, the system may remove the existing mapping and create a new\n-one of the desired length in another location.\n+Possible flags are\n \n-The address of the resulting mapping is returned, or @math{-1}.  Possible\n-error codes include:\n+@table @code\n+\n+@item MREMAP_MAYMOVE\n+If it is given in @var{flags}, the system may remove the existing mapping\n+and create a new one of the desired length in another location.\n+\n+@item MREMAP_FIXED\n+If it is given in @var{flags}, @code{mremap} accepts a fifth argument,\n+@code{void *new_address}, which specifies a page-aligned address to\n+which the mapping must be moved.  Any previous mapping at the address\n+range specified by @var{new_address} and @var{new_size} is unmapped.\n+\n+@code{MREMAP_FIXED} must be used together with @code{MREMAP_MAYMOVE}.\n+\n+@item MREMAP_DONTUNMAP\n+If it is given in @var{flags}, @code{mremap} accepts a fifth argument,\n+@code{void *new_address}, which specifies a page-aligned address.  Any\n+previous mapping at the address range specified by @var{new_address} and\n+@var{new_size} is unmapped.  If @var{new_address} is @code{NULL}, the\n+kernel chooses the page-aligned address at which to create the mapping.\n+Otherwise, the kernel takes it as a hint about where to place the mapping.\n+The mapping at the address range specified by @var{old_address} and\n+@var{old_size} isn't unmapped.\n+\n+@code{MREMAP_DONTUNMAP} must be used together with @code{MREMAP_MAYMOVE}.\n+@var{old_size} must be the same as @var{new_size}.  This flag bit is\n+Linux-specific.\n+\n+@end table\n+\n+The address of the resulting mapping is returned, or @code{MAP_FAILED}.\n+Possible error codes include:\n \n @table @code\n \n@@ -1915,7 +1943,7 @@ There is no existing mapping in at least part of the original region, or\n the region covers two or more distinct mappings.\n \n @item EINVAL\n-The address given is misaligned or inappropriate.\n+Any arguments are inappropriate, including unknown @var{flags} values.\n \n @item EAGAIN\n The region has pages locked, and if extended it would exceed the\n\ncommit ca53bc68ab92ab413a7d53e951227d380a85ebd8\nAuthor: H.J. Lu <hjl.tools@gmail.com>\nDate:   Wed Jul 24 14:05:15 2024 -0700\n\n    Add mremap tests\n    \n    Add tests for MREMAP_MAYMOVE and MREMAP_FIXED.  On Linux, also test\n    MREMAP_DONTUNMAP.\n    \n    Signed-off-by: H.J. Lu <hjl.tools@gmail.com>\n    Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>\n    (cherry picked from commit ff0320bec2810192d453c579623482fab87bfa01)\n\ndiff --git a/misc/Makefile b/misc/Makefile\nindex 5d17c562fe..7b7f8351bf 100644\n--- a/misc/Makefile\n+++ b/misc/Makefile\n@@ -257,6 +257,8 @@ tests := \\\n   tst-mntent-blank-passno \\\n   tst-mntent-escape \\\n   tst-mntent2 \\\n+  tst-mremap1 \\\n+  tst-mremap2 \\\n   tst-preadvwritev \\\n   tst-preadvwritev2 \\\n   tst-preadvwritev64 \\\ndiff --git a/misc/tst-mremap1.c b/misc/tst-mremap1.c\nnew file mode 100644\nindex 0000000000..0469991a6c\n--- /dev/null\n+++ b/misc/tst-mremap1.c\n@@ -0,0 +1,46 @@\n+/* Test mremap with MREMAP_MAYMOVE.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <errno.h>\n+#include <sys/mman.h>\n+#include <support/xstdlib.h>\n+#include <support/xunistd.h>\n+#include <support/check.h>\n+#include <support/test-driver.h>\n+\n+static int\n+do_test (void)\n+{\n+  size_t old_size = getpagesize ();\n+  char *old_addr = xmmap (NULL, old_size, PROT_READ | PROT_WRITE,\n+\t\t\t  MAP_PRIVATE | MAP_ANONYMOUS, -1);\n+  old_addr[0] = 1;\n+  old_addr[old_size - 1] = 2;\n+\n+  /* Test MREMAP_MAYMOVE.  */\n+  size_t new_size = old_size + old_size;\n+  char *new_addr = mremap (old_addr, old_size, new_size, MREMAP_MAYMOVE);\n+  TEST_VERIFY_EXIT (new_addr != MAP_FAILED);\n+  new_addr[0] = 1;\n+  new_addr[new_size - 1] = 2;\n+  xmunmap (new_addr, new_size);\n+\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\ndiff --git a/misc/tst-mremap2.c b/misc/tst-mremap2.c\nnew file mode 100644\nindex 0000000000..45be7f0369\n--- /dev/null\n+++ b/misc/tst-mremap2.c\n@@ -0,0 +1,54 @@\n+/* Test mremap with MREMAP_FIXED.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <errno.h>\n+#include <sys/mman.h>\n+#include <support/xstdlib.h>\n+#include <support/xunistd.h>\n+#include <support/test-driver.h>\n+#include <mremap-failure.h>\n+\n+static int\n+do_test (void)\n+{\n+  size_t old_size = getpagesize ();\n+  size_t new_size = old_size + old_size;\n+  char *old_addr = xmmap (NULL, old_size, PROT_READ | PROT_WRITE,\n+\t\t\t  MAP_PRIVATE | MAP_ANONYMOUS, -1);\n+  old_addr[0] = 1;\n+  old_addr[old_size - 1] = 2;\n+\n+  char *fixed_addr = xmmap (NULL, new_size, PROT_READ | PROT_WRITE,\n+\t\t\t    MAP_PRIVATE | MAP_ANONYMOUS, -1);\n+  fixed_addr[0] = 1;\n+  fixed_addr[new_size - 1] = 2;\n+\n+  /* Test MREMAP_FIXED.  */\n+  char *new_addr = mremap (old_addr, old_size, new_size,\n+\t\t\t   MREMAP_FIXED | MREMAP_MAYMOVE,\n+\t\t\t   fixed_addr);\n+  if (new_addr == MAP_FAILED)\n+    return mremap_failure_exit (errno);\n+  new_addr[0] = 1;\n+  new_addr[new_size - 1] = 2;\n+  xmunmap (new_addr, new_size);\n+\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\ndiff --git a/sysdeps/generic/mremap-failure.h b/sysdeps/generic/mremap-failure.h\nnew file mode 100644\nindex 0000000000..bc0d476368\n--- /dev/null\n+++ b/sysdeps/generic/mremap-failure.h\n@@ -0,0 +1,25 @@\n+/* mremap failure handling.  Generic version.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+/* Return exit value on mremap failure with errno ERR.  */\n+\n+static int\n+mremap_failure_exit (int err)\n+{\n+  return EXIT_FAILURE;\n+}\ndiff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile\nindex 097b5a26fc..59998c7af4 100644\n--- a/sysdeps/unix/sysv/linux/Makefile\n+++ b/sysdeps/unix/sysv/linux/Makefile\n@@ -206,6 +206,7 @@ tests += \\\n   tst-getauxval \\\n   tst-gettid \\\n   tst-gettid-kill \\\n+  tst-linux-mremap1 \\\n   tst-memfd_create \\\n   tst-misalign-clone \\\n   tst-mlock2 \\\ndiff --git a/sysdeps/unix/sysv/linux/mremap-failure.h b/sysdeps/unix/sysv/linux/mremap-failure.h\nnew file mode 100644\nindex 0000000000..c99ab30ca9\n--- /dev/null\n+++ b/sysdeps/unix/sysv/linux/mremap-failure.h\n@@ -0,0 +1,30 @@\n+/* mremap failure handling.  Linux version.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <support/check.h>\n+\n+/* Return exit value on mremap failure with errno ERR.  */\n+\n+static int\n+mremap_failure_exit (int err)\n+{\n+  if (err != EINVAL)\n+    return EXIT_FAILURE;\n+\n+  return EXIT_UNSUPPORTED;\n+}\ndiff --git a/sysdeps/unix/sysv/linux/tst-linux-mremap1.c b/sysdeps/unix/sysv/linux/tst-linux-mremap1.c\nnew file mode 100644\nindex 0000000000..408e8af2ab\n--- /dev/null\n+++ b/sysdeps/unix/sysv/linux/tst-linux-mremap1.c\n@@ -0,0 +1,63 @@\n+/* Test mremap with MREMAP_DONTUNMAP.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <errno.h>\n+#include <sys/mman.h>\n+#include <support/xstdlib.h>\n+#include <support/xunistd.h>\n+#include <support/check.h>\n+#include <support/test-driver.h>\n+#include <mremap-failure.h>\n+\n+static int\n+do_test (void)\n+{\n+  size_t old_size = getpagesize ();\n+  size_t new_size = old_size;\n+  char *old_addr = xmmap (NULL, old_size, PROT_READ | PROT_WRITE,\n+\t\t\t  MAP_PRIVATE | MAP_ANONYMOUS, -1);\n+  old_addr[0] = 1;\n+  old_addr[old_size - 1] = 2;\n+\n+  /* Create an available 64-page mmap region.  */\n+  size_t fixed_size = old_size * 64;\n+  char *fixed_addr = xmmap (NULL, fixed_size, PROT_READ | PROT_WRITE,\n+\t\t\t    MAP_PRIVATE | MAP_ANONYMOUS, -1);\n+  xmunmap (fixed_addr, fixed_size);\n+\n+  /* Add 3 * pagesize.  */\n+  fixed_size += 3 * old_size;\n+\n+  /* Test MREMAP_DONTUNMAP.  It should return FIXED_ADDR created above.  */\n+  char *new_addr = mremap (old_addr, old_size, new_size,\n+\t\t\t   MREMAP_DONTUNMAP | MREMAP_MAYMOVE,\n+\t\t\t   fixed_addr);\n+  if (new_addr == MAP_FAILED)\n+    return mremap_failure_exit (errno);\n+  TEST_VERIFY_EXIT (fixed_addr == new_addr);\n+  old_addr[0] = 3;\n+  old_addr[old_size - 1] = 4;\n+  new_addr[0] = 1;\n+  new_addr[new_size - 1] = 2;\n+  xmunmap (new_addr, new_size);\n+  xmunmap (old_addr, old_size);\n+\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\n\ncommit 928769737c8f0cbb51dfa2a02de0594c2395d802\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Thu Aug 1 10:46:10 2024 +0200\n\n    resolv: Fix tst-resolv-short-response for older GCC (bug 32042)\n    \n    Previous GCC versions do not support the C23 change that\n    allows labels on declarations.\n    \n    Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>\n    (cherry picked from commit ec119972cb2598c04ec7d4219e20506006836f64)\n\ndiff --git a/resolv/tst-resolv-short-response.c b/resolv/tst-resolv-short-response.c\nindex be354ae1c7..9b06b0c176 100644\n--- a/resolv/tst-resolv-short-response.c\n+++ b/resolv/tst-resolv-short-response.c\n@@ -33,8 +33,10 @@ response (const struct resolv_response_context *ctx,\n     {\n     case 0:\n       /* First server times out.  */\n-      struct resolv_response_flags flags = {.rcode = rcode};\n-      resolv_response_init (b, flags);\n+      {\n+        struct resolv_response_flags flags = {.rcode = rcode};\n+        resolv_response_init (b, flags);\n+      }\n       break;\n     case 1:\n       /* Second server sends reply.  */\n\ncommit aa533d58ff12e27771d9c960a727d74992a3f2a3\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Fri Aug 2 15:22:14 2024 +0200\n\n    x86: Tunables may incorrectly set Prefer_PMINUB_for_stringop (bug 32047)\n    \n    Fixes commit 5bcf6265f215326d14dfacdce8532792c2c7f8f8 (\"x86:\n    Disable non-temporal memset on Skylake Server\").\n    \n    Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>\n    (cherry picked from commit 7a630f7d3392ca391a399486ce2846f9e4b4ee63)\n\ndiff --git a/sysdeps/x86/cpu-tunables.c b/sysdeps/x86/cpu-tunables.c\nindex ae9dcd6180..ccc6b64dc2 100644\n--- a/sysdeps/x86/cpu-tunables.c\n+++ b/sysdeps/x86/cpu-tunables.c\n@@ -248,6 +248,7 @@ TUNABLE_CALLBACK (set_hwcaps) (tunable_val_t *valp)\n \t    CHECK_GLIBC_IFUNC_PREFERRED_BOTH (n, cpu_features,\n \t\t\t\t\t      Avoid_Non_Temporal_Memset, 25);\n \t  }\n+\t  break;\n \tcase 26:\n \t    {\n \t      CHECK_GLIBC_IFUNC_PREFERRED_NEED_BOTH\n\ncommit 6a97e2ba144a554809161d488f25e4bae07c9405\nAuthor: Andreas Schwab <schwab@suse.de>\nDate:   Mon Aug 5 10:55:51 2024 +0200\n\n    Fix name space violation in fortify wrappers (bug 32052)\n    \n    Rename the identifier sz to __sz everywhere.\n    \n    Fixes: a643f60c53 (\"Make sure that the fortified function conditionals are constant\")\n    (cherry picked from commit 39ca997ab378990d5ac1aadbaa52aaf1db6d526f)\n\ndiff --git a/NEWS b/NEWS\nindex 8da0408ad9..b9eb4a558b 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -13,6 +13,7 @@ The following bugs are resolved with this release:\n   [31968] mremap implementation in C does not handle arguments correctly\n   [31890] resolv: Allow short error responses to match any DNS query\n   [31968] mremap implementation in C does not handle arguments correctly\n+  [32052] Name space violation in fortify wrappers\n \f\n Version 2.40\n \ndiff --git a/libio/bits/stdio2.h b/libio/bits/stdio2.h\nindex 91a80dd7c6..4b8bc35bdf 100644\n--- a/libio/bits/stdio2.h\n+++ b/libio/bits/stdio2.h\n@@ -308,14 +308,14 @@ fgets (__fortify_clang_overload_arg (char *, __restrict, __s), int __n,\n \t\t\t      \"fgets called with bigger size than length of \"\n \t\t\t      \"destination buffer\")\n {\n-  size_t sz = __glibc_objsize (__s);\n-  if (__glibc_safe_or_unknown_len (__n, sizeof (char), sz))\n+  size_t __sz = __glibc_objsize (__s);\n+  if (__glibc_safe_or_unknown_len (__n, sizeof (char), __sz))\n     return __fgets_alias (__s, __n, __stream);\n #if !__fortify_use_clang\n-  if (__glibc_unsafe_len (__n, sizeof (char), sz))\n-    return __fgets_chk_warn (__s, sz, __n, __stream);\n+  if (__glibc_unsafe_len (__n, sizeof (char), __sz))\n+    return __fgets_chk_warn (__s, __sz, __n, __stream);\n #endif\n-  return __fgets_chk (__s, sz, __n, __stream);\n+  return __fgets_chk (__s, __sz, __n, __stream);\n }\n \n __fortify_function __wur __nonnull ((4)) __attribute_overloadable__ size_t\n@@ -326,14 +326,14 @@ fread (__fortify_clang_overload_arg (void *, __restrict, __ptr),\n \t\t\t      \"fread called with bigger size * n than length \"\n \t\t\t      \"of destination buffer\")\n {\n-  size_t sz = __glibc_objsize0 (__ptr);\n-  if (__glibc_safe_or_unknown_len (__n, __size, sz))\n+  size_t __sz = __glibc_objsize0 (__ptr);\n+  if (__glibc_safe_or_unknown_len (__n, __size, __sz))\n     return __fread_alias (__ptr, __size, __n, __stream);\n #if !__fortify_use_clang\n-  if (__glibc_unsafe_len (__n, __size, sz))\n-    return __fread_chk_warn (__ptr, sz, __size, __n, __stream);\n+  if (__glibc_unsafe_len (__n, __size, __sz))\n+    return __fread_chk_warn (__ptr, __sz, __size, __n, __stream);\n #endif\n-  return __fread_chk (__ptr, sz, __size, __n, __stream);\n+  return __fread_chk (__ptr, __sz, __size, __n, __stream);\n }\n \n #ifdef __USE_GNU\n@@ -345,14 +345,14 @@ fgets_unlocked (__fortify_clang_overload_arg (char *, __restrict, __s),\n \t\t\t      \"fgets called with bigger size than length of \"\n \t\t\t      \"destination buffer\")\n {\n-  size_t sz = __glibc_objsize (__s);\n-  if (__glibc_safe_or_unknown_len (__n, sizeof (char), sz))\n+  size_t __sz = __glibc_objsize (__s);\n+  if (__glibc_safe_or_unknown_len (__n, sizeof (char), __sz))\n     return __fgets_unlocked_alias (__s, __n, __stream);\n #if !__fortify_use_clang\n-  if (__glibc_unsafe_len (__n, sizeof (char), sz))\n-    return __fgets_unlocked_chk_warn (__s, sz, __n, __stream);\n+  if (__glibc_unsafe_len (__n, sizeof (char), __sz))\n+    return __fgets_unlocked_chk_warn (__s, __sz, __n, __stream);\n #endif\n-  return __fgets_unlocked_chk (__s, sz, __n, __stream);\n+  return __fgets_unlocked_chk (__s, __sz, __n, __stream);\n }\n #endif\n \n@@ -366,8 +366,8 @@ fread_unlocked (__fortify_clang_overload_arg0 (void *, __restrict, __ptr),\n \t\t\t      \"fread_unlocked called with bigger size * n than \"\n \t\t\t      \"length of destination buffer\")\n {\n-  size_t sz = __glibc_objsize0 (__ptr);\n-  if (__glibc_safe_or_unknown_len (__n, __size, sz))\n+  size_t __sz = __glibc_objsize0 (__ptr);\n+  if (__glibc_safe_or_unknown_len (__n, __size, __sz))\n     {\n # ifdef __USE_EXTERN_INLINES\n       if (__builtin_constant_p (__size)\n@@ -393,10 +393,10 @@ fread_unlocked (__fortify_clang_overload_arg0 (void *, __restrict, __ptr),\n       return __fread_unlocked_alias (__ptr, __size, __n, __stream);\n     }\n # if !__fortify_use_clang\n-  if (__glibc_unsafe_len (__n, __size, sz))\n-    return __fread_unlocked_chk_warn (__ptr, sz, __size, __n, __stream);\n+  if (__glibc_unsafe_len (__n, __size, __sz))\n+    return __fread_unlocked_chk_warn (__ptr, __sz, __size, __n, __stream);\n # endif\n-  return __fread_unlocked_chk (__ptr, sz, __size, __n, __stream);\n+  return __fread_unlocked_chk (__ptr, __sz, __size, __n, __stream);\n \n }\n #endif\ndiff --git a/socket/bits/socket2.h b/socket/bits/socket2.h\nindex 04780f320e..bd91647f37 100644\n--- a/socket/bits/socket2.h\n+++ b/socket/bits/socket2.h\n@@ -37,14 +37,14 @@ recv (int __fd, __fortify_clang_overload_arg0 (void *, ,__buf), size_t __n,\n \t\t\t\t\t      \"recv called with bigger length than \"\n \t\t\t\t\t      \"size of destination buffer\")\n {\n-  size_t sz = __glibc_objsize0 (__buf);\n-  if (__glibc_safe_or_unknown_len (__n, sizeof (char), sz))\n+  size_t __sz = __glibc_objsize0 (__buf);\n+  if (__glibc_safe_or_unknown_len (__n, sizeof (char), __sz))\n     return __recv_alias (__fd, __buf, __n, __flags);\n #if !__fortify_use_clang\n-  if (__glibc_unsafe_len (__n, sizeof (char), sz))\n-    return __recv_chk_warn (__fd, __buf, __n, sz, __flags);\n+  if (__glibc_unsafe_len (__n, sizeof (char), __sz))\n+    return __recv_chk_warn (__fd, __buf, __n, __sz, __flags);\n #endif\n-  return __recv_chk (__fd, __buf, __n, sz, __flags);\n+  return __recv_chk (__fd, __buf, __n, __sz, __flags);\n }\n \n extern ssize_t __recvfrom_chk (int __fd, void *__restrict __buf, size_t __n,\n@@ -71,13 +71,13 @@ recvfrom (int __fd, __fortify_clang_overload_arg0 (void *, __restrict, __buf),\n \t\t\t\t\t      \"recvfrom called with bigger length \"\n \t\t\t\t\t      \"than size of destination buffer\")\n {\n-  size_t sz = __glibc_objsize0 (__buf);\n-  if (__glibc_safe_or_unknown_len (__n, sizeof (char), sz))\n+  size_t __sz = __glibc_objsize0 (__buf);\n+  if (__glibc_safe_or_unknown_len (__n, sizeof (char), __sz))\n     return __recvfrom_alias (__fd, __buf, __n, __flags, __addr, __addr_len);\n #if !__fortify_use_clang\n-  if (__glibc_unsafe_len (__n, sizeof (char), sz))\n-    return __recvfrom_chk_warn (__fd, __buf, __n, sz, __flags, __addr,\n+  if (__glibc_unsafe_len (__n, sizeof (char), __sz))\n+    return __recvfrom_chk_warn (__fd, __buf, __n, __sz, __flags, __addr,\n \t\t\t\t__addr_len);\n #endif\n-  return __recvfrom_chk (__fd, __buf, __n, sz, __flags, __addr, __addr_len);\n+  return __recvfrom_chk (__fd, __buf, __n, __sz, __flags, __addr, __addr_len);\n }\ndiff --git a/stdlib/bits/stdlib.h b/stdlib/bits/stdlib.h\nindex 1557b862b1..9c78ecf458 100644\n--- a/stdlib/bits/stdlib.h\n+++ b/stdlib/bits/stdlib.h\n@@ -43,16 +43,16 @@ __NTH (realpath (const char *__restrict __name,\n \t\t\t\t\t     \"bytes long buffer\")\n #endif\n {\n-  size_t sz = __glibc_objsize (__resolved);\n+  size_t __sz = __glibc_objsize (__resolved);\n \n-  if (sz == (size_t) -1)\n+  if (__sz == (size_t) -1)\n     return __realpath_alias (__name, __resolved);\n \n #if !__fortify_use_clang && defined _LIBC_LIMITS_H_ && defined PATH_MAX\n-  if (__glibc_unsafe_len (PATH_MAX, sizeof (char), sz))\n-    return __realpath_chk_warn (__name, __resolved, sz);\n+  if (__glibc_unsafe_len (PATH_MAX, sizeof (char), __sz))\n+    return __realpath_chk_warn (__name, __resolved, __sz);\n #endif\n-  return __realpath_chk (__name, __resolved, sz);\n+  return __realpath_chk (__name, __resolved, __sz);\n }\n \n \ndiff --git a/wcsmbs/bits/wchar2.h b/wcsmbs/bits/wchar2.h\nindex 9fdff47ee2..43c6b63027 100644\n--- a/wcsmbs/bits/wchar2.h\n+++ b/wcsmbs/bits/wchar2.h\n@@ -74,9 +74,9 @@ __fortify_function __attribute_overloadable__ wchar_t *\n __NTH (wcscpy (__fortify_clang_overload_arg (wchar_t *, __restrict, __dest),\n \t       const wchar_t *__restrict __src))\n {\n-  size_t sz = __glibc_objsize (__dest);\n-  if (sz != (size_t) -1)\n-    return __wcscpy_chk (__dest, __src, sz / sizeof (wchar_t));\n+  size_t __sz = __glibc_objsize (__dest);\n+  if (__sz != (size_t) -1)\n+    return __wcscpy_chk (__dest, __src, __sz / sizeof (wchar_t));\n   return __wcscpy_alias (__dest, __src);\n }\n \n@@ -84,9 +84,9 @@ __fortify_function __attribute_overloadable__ wchar_t *\n __NTH (wcpcpy (__fortify_clang_overload_arg (wchar_t *, __restrict, __dest),\n \t       const wchar_t *__restrict __src))\n {\n-  size_t sz = __glibc_objsize (__dest);\n-  if (sz != (size_t) -1)\n-    return __wcpcpy_chk (__dest, __src, sz / sizeof (wchar_t));\n+  size_t __sz = __glibc_objsize (__dest);\n+  if (__sz != (size_t) -1)\n+    return __wcpcpy_chk (__dest, __src, __sz / sizeof (wchar_t));\n   return __wcpcpy_alias (__dest, __src);\n }\n \n@@ -118,9 +118,9 @@ __fortify_function __attribute_overloadable__ wchar_t *\n __NTH (wcscat (__fortify_clang_overload_arg (wchar_t *, __restrict, __dest),\n \t       const wchar_t *__restrict __src))\n {\n-  size_t sz = __glibc_objsize (__dest);\n-  if (sz != (size_t) -1)\n-    return __wcscat_chk (__dest, __src, sz / sizeof (wchar_t));\n+  size_t __sz = __glibc_objsize (__dest);\n+  if (__sz != (size_t) -1)\n+    return __wcscat_chk (__dest, __src, __sz / sizeof (wchar_t));\n   return __wcscat_alias (__dest, __src);\n }\n \n@@ -128,9 +128,9 @@ __fortify_function __attribute_overloadable__ wchar_t *\n __NTH (wcsncat (__fortify_clang_overload_arg (wchar_t *, __restrict, __dest),\n \t       const wchar_t *__restrict __src, size_t __n))\n {\n-  size_t sz = __glibc_objsize (__dest);\n-  if (sz != (size_t) -1)\n-    return __wcsncat_chk (__dest, __src, __n, sz / sizeof (wchar_t));\n+  size_t __sz = __glibc_objsize (__dest);\n+  if (__sz != (size_t) -1)\n+    return __wcsncat_chk (__dest, __src, __n, __sz / sizeof (wchar_t));\n   return __wcsncat_alias (__dest, __src, __n);\n }\n \n@@ -170,10 +170,10 @@ __fortify_function int\n __NTH (swprintf (wchar_t *__restrict __s, size_t __n,\n \t\t const wchar_t *__restrict __fmt, ...))\n {\n-  size_t sz = __glibc_objsize (__s);\n-  if (sz != (size_t) -1 || __USE_FORTIFY_LEVEL > 1)\n+  size_t __sz = __glibc_objsize (__s);\n+  if (__sz != (size_t) -1 || __USE_FORTIFY_LEVEL > 1)\n     return __swprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,\n-\t\t\t   sz / sizeof (wchar_t), __fmt, __va_arg_pack ());\n+\t\t\t   __sz / sizeof (wchar_t), __fmt, __va_arg_pack ());\n   return __swprintf_alias (__s, __n, __fmt, __va_arg_pack ());\n }\n #elif __fortify_use_clang\n@@ -206,10 +206,10 @@ __fortify_function int\n __NTH (vswprintf (wchar_t *__restrict __s, size_t __n,\n \t\t  const wchar_t *__restrict __fmt, __gnuc_va_list __ap))\n {\n-  size_t sz = __glibc_objsize (__s);\n-  if (sz != (size_t) -1 || __USE_FORTIFY_LEVEL > 1)\n+  size_t __sz = __glibc_objsize (__s);\n+  if (__sz != (size_t) -1 || __USE_FORTIFY_LEVEL > 1)\n     return __vswprintf_chk (__s, __n,  __USE_FORTIFY_LEVEL - 1,\n-\t\t\t    sz / sizeof (wchar_t), __fmt, __ap);\n+\t\t\t    __sz / sizeof (wchar_t), __fmt, __ap);\n   return __vswprintf_alias (__s, __n, __fmt, __ap);\n }\n \n@@ -257,14 +257,14 @@ fgetws (__fortify_clang_overload_arg (wchar_t *, __restrict, __s), int __n,\n \t\t\t\t\t      \"fgetws called with length bigger \"\n \t\t\t\t\t      \"than size of destination buffer\")\n {\n-  size_t sz = __glibc_objsize (__s);\n-  if (__glibc_safe_or_unknown_len (__n, sizeof (wchar_t), sz))\n+  size_t __sz = __glibc_objsize (__s);\n+  if (__glibc_safe_or_unknown_len (__n, sizeof (wchar_t), __sz))\n     return __fgetws_alias (__s, __n, __stream);\n #if !__fortify_use_clang\n-  if (__glibc_unsafe_len (__n, sizeof (wchar_t), sz))\n-    return __fgetws_chk_warn (__s, sz / sizeof (wchar_t), __n, __stream);\n+  if (__glibc_unsafe_len (__n, sizeof (wchar_t), __sz))\n+    return __fgetws_chk_warn (__s, __sz / sizeof (wchar_t), __n, __stream);\n #endif\n-  return __fgetws_chk (__s, sz / sizeof (wchar_t), __n, __stream);\n+  return __fgetws_chk (__s, __sz / sizeof (wchar_t), __n, __stream);\n }\n \n #ifdef __USE_GNU\n@@ -275,15 +275,15 @@ fgetws_unlocked (__fortify_clang_overload_arg (wchar_t *, __restrict, __s),\n \t\t\t\t\t      \"fgetws_unlocked called with length bigger \"\n \t\t\t\t\t      \"than size of destination buffer\")\n {\n-  size_t sz = __glibc_objsize (__s);\n-  if (__glibc_safe_or_unknown_len (__n, sizeof (wchar_t), sz))\n+  size_t __sz = __glibc_objsize (__s);\n+  if (__glibc_safe_or_unknown_len (__n, sizeof (wchar_t), __sz))\n     return __fgetws_unlocked_alias (__s, __n, __stream);\n # if !__fortify_use_clang\n-  if (__glibc_unsafe_len (__n, sizeof (wchar_t), sz))\n-    return __fgetws_unlocked_chk_warn (__s, sz / sizeof (wchar_t), __n,\n+  if (__glibc_unsafe_len (__n, sizeof (wchar_t), __sz))\n+    return __fgetws_unlocked_chk_warn (__s, __sz / sizeof (wchar_t), __n,\n \t\t\t\t       __stream);\n # endif\n-  return __fgetws_unlocked_chk (__s, sz / sizeof (wchar_t), __n, __stream);\n+  return __fgetws_unlocked_chk (__s, __sz / sizeof (wchar_t), __n, __stream);\n }\n #endif\n \n\ncommit 5641780762723156b0d20a0b9f7df1d76831bab0\nAuthor: Arjun Shankar <arjun@redhat.com>\nDate:   Tue Jul 30 11:37:57 2024 +0200\n\n    manual/stdio: Further clarify putc, putwc, getc, and getwc\n    \n    This is a follow-up to 10de4a47ef3f481592e3c62eb07bcda23e9fde4d that\n    reworded the manual entries for putc and putwc and removed any\n    performance claims.\n    \n    This commit further clarifies these entries and brings getc and getwc in\n    line with the descriptions of putc and putwc, removing any performance\n    claims from them as well.\n    Reviewed-by: Florian Weimer <fweimer@redhat.com>\n    \n    (cherry picked from commit 942670c81dc8071dd75d6213e771daa5d2084cb6)\n\ndiff --git a/manual/stdio.texi b/manual/stdio.texi\nindex f9529a098d..8517653507 100644\n--- a/manual/stdio.texi\n+++ b/manual/stdio.texi\n@@ -904,20 +904,16 @@ This function is a GNU extension.\n @standards{ISO, stdio.h}\n @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}\n This is just like @code{fputc}, except that it may be implemented as\n-a macro, making it faster.  One consequence is that it may evaluate the\n-@var{stream} argument more than once, which is an exception to the\n-general rule for macros.  Therefore, @var{stream} should never be an\n-expression with side-effects.\n+a macro and may evaluate the @var{stream} argument more than once.\n+Therefore, @var{stream} should never be an expression with side-effects.\n @end deftypefun\n \n @deftypefun wint_t putwc (wchar_t @var{wc}, FILE *@var{stream})\n @standards{ISO, wchar.h}\n @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}\n This is just like @code{fputwc}, except that it may be implemented as\n-a macro, making it faster.  One consequence is that it may evaluate the\n-@var{stream} argument more than once, which is an exception to the\n-general rule for macros.  Therefore, @var{stream} should never be an\n-expression with side-effects.\n+a macro and may evaluate the @var{stream} argument more than once.\n+Therefore, @var{stream} should never be an expression with side-effects.\n @end deftypefun\n \n @deftypefun int putc_unlocked (int @var{c}, FILE *@var{stream})\n@@ -1110,20 +1106,17 @@ This function is a GNU extension.\n @deftypefun int getc (FILE *@var{stream})\n @standards{ISO, stdio.h}\n @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}\n-This is just like @code{fgetc}, except that it is permissible (and\n-typical) for it to be implemented as a macro that evaluates the\n-@var{stream} argument more than once.  @code{getc} is often highly\n-optimized, so it is usually the best function to use to read a single\n-character.\n+This is just like @code{fgetc}, except that it may be implemented as\n+a macro and may evaluate the @var{stream} argument more than once.\n+Therefore, @var{stream} should never be an expression with side-effects.\n @end deftypefun\n \n @deftypefun wint_t getwc (FILE *@var{stream})\n @standards{ISO, wchar.h}\n @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}\n-This is just like @code{fgetwc}, except that it is permissible for it to\n-be implemented as a macro that evaluates the @var{stream} argument more\n-than once.  @code{getwc} can be highly optimized, so it is usually the\n-best function to use to read a single wide character.\n+This is just like @code{fgetwc}, except that it may be implemented as\n+a macro and may evaluate the @var{stream} argument more than once.\n+Therefore, @var{stream} should never be an expression with side-effects.\n @end deftypefun\n \n @deftypefun int getc_unlocked (FILE *@var{stream})\n\ncommit 39ee60a719eb6ffde76ccc232d79273c473d7a93\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Fri Aug 9 17:01:17 2024 +0200\n\n    support: Add options list terminator to the test driver\n    \n    This avoids crashes if a test is passed unknown options.\n    \n    Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>\n    (cherry picked from commit c2a474f4617ede7a8bf56b7257acb37dc757b2d1)\n\ndiff --git a/support/test-driver.c b/support/test-driver.c\nindex f4c3e4d666..04ceebc08f 100644\n--- a/support/test-driver.c\n+++ b/support/test-driver.c\n@@ -155,6 +155,7 @@ main (int argc, char **argv)\n     {\n       CMDLINE_OPTIONS\n       TEST_DEFAULT_OPTIONS\n+      { 0, }\n     };\n   test_config.options = &options;\n #endif\n\ncommit e3556937c2402b8acf2e586bf53168e9f482ba91\nAuthor: H.J. Lu <hjl.tools@gmail.com>\nDate:   Mon Jul 22 17:47:21 2024 -0700\n\n    x86-64: Remove sysdeps/x86_64/x32/dl-machine.h\n    \n    Remove sysdeps/x86_64/x32/dl-machine.h by folding x32 ARCH_LA_PLTENTER,\n    ARCH_LA_PLTEXIT and RTLD_START into sysdeps/x86_64/dl-machine.h.  There\n    are no regressions on x86-64 nor x32.  There are no changes in x86-64\n    _dl_start_user.  On x32, _dl_start_user changes are\n    \n     <_dl_start_user>:\n            mov    %eax,%r12d\n    +       mov    %esp,%r13d\n            mov    (%rsp),%edx\n            mov    %edx,%esi\n    -       mov    %esp,%r13d\n            and    $0xfffffff0,%esp\n            mov    0x0(%rip),%edi        # <_dl_start_user+0x14>\n            lea    0x8(%r13,%rdx,4),%ecx\n    \n    Signed-off-by: H.J. Lu <hjl.tools@gmail.com>\n    Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>\n    (cherry picked from commit 652c6cf26927352fc0e37e4e60c6fc98ddf6d3b4)\n\ndiff --git a/sysdeps/x86_64/dl-machine.h b/sysdeps/x86_64/dl-machine.h\nindex a6de3793e4..4f12955875 100644\n--- a/sysdeps/x86_64/dl-machine.h\n+++ b/sysdeps/x86_64/dl-machine.h\n@@ -139,37 +139,37 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],\n .globl _start\\n\\\n .globl _dl_start_user\\n\\\n _start:\\n\\\n-\tmovq %rsp, %rdi\\n\\\n+\tmov %\" RSP_LP \", %\" RDI_LP \"\\n\\\n \tcall _dl_start\\n\\\n _dl_start_user:\\n\\\n \t# Save the user entry point address in %r12.\\n\\\n-\tmovq %rax, %r12\\n\\\n+\tmov %\" RAX_LP \", %\" R12_LP \"\\n\\\n \t# Save %rsp value in %r13.\\n\\\n-\tmovq %rsp, %r13\\n\\\n+\tmov %\" RSP_LP \", % \" R13_LP \"\\n\\\n \"\\\n \tRTLD_START_ENABLE_X86_FEATURES \\\n \"\\\n \t# Read the original argument count.\\n\\\n-\tmovq (%rsp), %rdx\\n\\\n+\tmov (%rsp), %\" RDX_LP \"\\n\\\n \t# Call _dl_init (struct link_map *main_map, int argc, char **argv, char **env)\\n\\\n \t# argc -> rsi\\n\\\n-\tmovq %rdx, %rsi\\n\\\n+\tmov %\" RDX_LP \", %\" RSI_LP \"\\n\\\n \t# And align stack for the _dl_init call. \\n\\\n-\tandq $-16, %rsp\\n\\\n+\tand $-16, %\" RSP_LP \"\\n\\\n \t# _dl_loaded -> rdi\\n\\\n-\tmovq _rtld_local(%rip), %rdi\\n\\\n+\tmov _rtld_local(%rip), %\" RDI_LP \"\\n\\\n \t# env -> rcx\\n\\\n-\tleaq 16(%r13,%rdx,8), %rcx\\n\\\n+\tlea 2*\" LP_SIZE \"(%r13,%rdx,\" LP_SIZE \"), %\" RCX_LP \"\\n\\\n \t# argv -> rdx\\n\\\n-\tleaq 8(%r13), %rdx\\n\\\n+\tlea \" LP_SIZE \"(%r13), %\" RDX_LP \"\\n\\\n \t# Clear %rbp to mark outermost frame obviously even for constructors.\\n\\\n \txorl %ebp, %ebp\\n\\\n \t# Call the function to run the initializers.\\n\\\n \tcall _dl_init\\n\\\n \t# Pass our finalizer function to the user in %rdx, as per ELF ABI.\\n\\\n-\tleaq _dl_fini(%rip), %rdx\\n\\\n+\tlea _dl_fini(%rip), %\" RDX_LP \"\\n\\\n \t# And make sure %rsp points to argc stored on the stack.\\n\\\n-\tmovq %r13, %rsp\\n\\\n+\tmov %\" R13_LP \", %\" RSP_LP \"\\n\\\n \t# Jump to the user's entry point.\\n\\\n \tjmp *%r12\\n\\\n .previous\\n\\\n@@ -234,8 +234,13 @@ elf_machine_plt_value (struct link_map *map, const ElfW(Rela) *reloc,\n \n \n /* Names of the architecture-specific auditing callback functions.  */\n+#ifdef __LP64__\n #define ARCH_LA_PLTENTER x86_64_gnu_pltenter\n #define ARCH_LA_PLTEXIT x86_64_gnu_pltexit\n+#else\n+#define ARCH_LA_PLTENTER x32_gnu_pltenter\n+#define ARCH_LA_PLTEXIT x32_gnu_pltexit\n+#endif\n \n #endif /* !dl_machine_h */\n \ndiff --git a/sysdeps/x86_64/x32/dl-machine.h b/sysdeps/x86_64/x32/dl-machine.h\ndeleted file mode 100644\nindex c35cee9261..0000000000\n--- a/sysdeps/x86_64/x32/dl-machine.h\n+++ /dev/null\n@@ -1,76 +0,0 @@\n-/* Machine-dependent ELF dynamic relocation inline functions.  x32 version.\n-   Copyright (C) 2012-2024 Free Software Foundation, Inc.\n-   This file is part of the GNU C Library.\n-\n-   The GNU C Library is free software; you can redistribute it and/or\n-   modify it under the terms of the GNU Lesser General Public\n-   License as published by the Free Software Foundation; either\n-   version 2.1 of the License, or (at your option) any later version.\n-\n-   The GNU C Library is distributed in the hope that it will be useful,\n-   but WITHOUT ANY WARRANTY; without even the implied warranty of\n-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n-   Lesser General Public License for more details.\n-\n-   You should have received a copy of the GNU Lesser General Public\n-   License along with the GNU C Library; if not, see\n-   <https://www.gnu.org/licenses/>.  */\n-\n-/* Must allow <sysdeps/x86_64/dl-machine.h> to be included more than once.\n-   See #ifdef RESOLVE_MAP in sysdeps/x86_64/dl-machine.h.  */\n-#include <sysdeps/x86_64/dl-machine.h>\n-\n-#ifndef _X32_DL_MACHINE_H\n-#define _X32_DL_MACHINE_H\n-\n-#undef ARCH_LA_PLTENTER\n-#undef ARCH_LA_PLTEXIT\n-#undef RTLD_START\n-\n-/* Names of the architecture-specific auditing callback functions.  */\n-#define ARCH_LA_PLTENTER x32_gnu_pltenter\n-#define ARCH_LA_PLTEXIT x32_gnu_pltexit\n-\n-/* Initial entry point code for the dynamic linker.\n-   The C function `_dl_start' is the real entry point;\n-   its return value is the user program's entry point.  */\n-#define RTLD_START asm (\"\\n\\\n-.text\\n\\\n-\t.p2align 4\\n\\\n-.globl _start\\n\\\n-.globl _dl_start_user\\n\\\n-_start:\\n\\\n-\tmovl %esp, %edi\\n\\\n-\tcall _dl_start\\n\\\n-_dl_start_user:\\n\\\n-\t# Save the user entry point address in %r12.\\n\\\n-\tmovl %eax, %r12d\\n\\\n-\t# Read the original argument count.\\n\\\n-\tmovl (%rsp), %edx\\n\\\n-\t# Call _dl_init (struct link_map *main_map, int argc, char **argv, char **env)\\n\\\n-\t# argc -> rsi\\n\\\n-\tmovl %edx, %esi\\n\\\n-\t# Save %rsp value in %r13.\\n\\\n-\tmovl %esp, %r13d\\n\\\n-\t# And align stack for the _dl_init call.\\n\\\n-\tand $-16, %esp\\n\\\n-\t# _dl_loaded -> rdi\\n\\\n-\tmovl _rtld_local(%rip), %edi\\n\\\n-\t# env -> rcx\\n\\\n-\tlea 8(%r13,%rdx,4), %ecx\\n\\\n-\t# argv -> rdx\\n\\\n-\tlea 4(%r13), %edx\\n\\\n-\t# Clear %rbp to mark outermost frame obviously even for constructors.\\n\\\n-\txorl %ebp, %ebp\\n\\\n-\t# Call the function to run the initializers.\\n\\\n-\tcall _dl_init\\n\\\n-\t# Pass our finalizer function to the user in %rdx, as per ELF ABI.\\n\\\n-\tlea _dl_fini(%rip), %edx\\n\\\n-\t# And make sure %rsp points to argc stored on the stack.\\n\\\n-\tmovl %r13d, %esp\\n\\\n-\t# Jump to the user's entry point.\\n\\\n-\tjmp *%r12\\n\\\n-.previous\\n\\\n-\");\n-\n-#endif /* !_X32_DL_MACHINE_H */\n\ncommit 898f25e0b1026be5701d05715600be646e9d0714\nAuthor: H.J. Lu <hjl.tools@gmail.com>\nDate:   Mon Jul 22 17:47:22 2024 -0700\n\n    x32/cet: Support shadow stack during startup for Linux 6.10\n    \n    Use RXX_LP in RTLD_START_ENABLE_X86_FEATURES.  Support shadow stack during\n    startup for Linux 6.10:\n    \n    commit 2883f01ec37dd8668e7222dfdb5980c86fdfe277\n    Author: H.J. Lu <hjl.tools@gmail.com>\n    Date:   Fri Mar 15 07:04:33 2024 -0700\n    \n        x86/shstk: Enable shadow stacks for x32\n    \n        1. Add shadow stack support to x32 signal.\n        2. Use the 64-bit map_shadow_stack syscall for x32.\n        3. Set up shadow stack for x32.\n    \n    Add the map_shadow_stack system call to <fixup-asm-unistd.h> and regenerate\n    arch-syscall.h.  Tested on Intel Tiger Lake with CET enabled x32.  There\n    are no regressions with CET enabled x86-64.  There are no changes in CET\n    enabled x86-64 _dl_start_user.\n    \n    Signed-off-by: H.J. Lu <hjl.tools@gmail.com>\n    Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>\n    (cherry picked from commit 8344c1f5514b1b5b1c8c6e48f4b802653bd23b71)\n\ndiff --git a/sysdeps/unix/sysv/linux/x86_64/dl-cet.h b/sysdeps/unix/sysv/linux/x86_64/dl-cet.h\nindex 1fe3133406..b4f7e6c9cd 100644\n--- a/sysdeps/unix/sysv/linux/x86_64/dl-cet.h\n+++ b/sysdeps/unix/sysv/linux/x86_64/dl-cet.h\n@@ -92,9 +92,9 @@ dl_cet_ibt_enabled (void)\n \t# Pass GL(dl_x86_feature_1) to _dl_cet_setup_features.\\n\\\n \tmovl %edx, %edi\\n\\\n \t# Align stack for the _dl_cet_setup_features call.\\n\\\n-\tandq $-16, %rsp\\n\\\n+\tand $-16, %\" RSP_LP \"\\n\\\n \tcall _dl_cet_setup_features\\n\\\n \t# Restore %rax and %rsp from %r12 and %r13.\\n\\\n-\tmovq %r12, %rax\\n\\\n-\tmovq %r13, %rsp\\n\\\n+\tmov %\" R12_LP \", %\" RAX_LP \"\\n\\\n+\tmov %\" R13_LP \", %\" RSP_LP \"\\n\\\n \"\ndiff --git a/sysdeps/unix/sysv/linux/x86_64/x32/arch-syscall.h b/sysdeps/unix/sysv/linux/x86_64/x32/arch-syscall.h\nindex 3040a47d72..df3e22236d 100644\n--- a/sysdeps/unix/sysv/linux/x86_64/x32/arch-syscall.h\n+++ b/sysdeps/unix/sysv/linux/x86_64/x32/arch-syscall.h\n@@ -155,6 +155,7 @@\n #define __NR_lsm_set_self_attr 1073742284\n #define __NR_lstat 1073741830\n #define __NR_madvise 1073741852\n+#define __NR_map_shadow_stack 1073742277\n #define __NR_mbind 1073742061\n #define __NR_membarrier 1073742148\n #define __NR_memfd_create 1073742143\ndiff --git a/sysdeps/unix/sysv/linux/x86_64/x32/fixup-asm-unistd.h b/sysdeps/unix/sysv/linux/x86_64/x32/fixup-asm-unistd.h\nindex 98124169e6..47fa8af4ce 100644\n--- a/sysdeps/unix/sysv/linux/x86_64/x32/fixup-asm-unistd.h\n+++ b/sysdeps/unix/sysv/linux/x86_64/x32/fixup-asm-unistd.h\n@@ -15,6 +15,10 @@\n    License along with the GNU C Library; if not, see\n    <http://www.gnu.org/licenses/>.  */\n \n+#ifndef __NR_map_shadow_stack\n+# define __NR_map_shadow_stack 1073742277\n+#endif\n+\n /* X32 uses the same 64-bit syscall interface for set_thread_area.   */\n #ifndef __NR_set_thread_area\n # define __NR_set_thread_area 1073742029\n\ncommit c0af0c2ba016030c778bc22c55f5f9498f96b8b9\nAuthor: Noah Goldstein <goldstein.w.n@gmail.com>\nDate:   Tue Aug 13 23:29:14 2024 +0800\n\n    x86: Fix bug in strchrnul-evex512 [BZ #32078]\n    \n    Issue was we were expecting not matches with CHAR before the start of\n    the string in the page cross case.\n    \n    The check code in the page cross case:\n    ```\n        and    $0xffffffffffffffc0,%rax\n        vmovdqa64 (%rax),%zmm17\n        vpcmpneqb %zmm17,%zmm16,%k1\n        vptestmb %zmm17,%zmm17,%k0{%k1}\n        kmovq  %k0,%rax\n        inc    %rax\n        shr    %cl,%rax\n        je     L(continue)\n    ```\n    \n    expects that all characters that neither match null nor CHAR will be\n    1s in `rax` prior to the `inc`. Then the `inc` will overflow all of\n    the 1s where no relevant match was found.\n    \n    This is incorrect in the page-cross case, as the\n    `vmovdqa64 (%rax),%zmm17` loads from before the start of the input\n    string.\n    \n    If there are matches with CHAR before the start of the string, `rax`\n    won't properly overflow.\n    \n    The fix is quite simple. Just replace:\n    \n    ```\n        inc    %rax\n        shr    %cl,%rax\n    ```\n    With:\n    ```\n        sar    %cl,%rax\n        inc    %rax\n    ```\n    \n    The arithmetic shift will clear any matches prior to the start of the\n    string while maintaining the signbit so the 1s can properly overflow\n    to zero in the case of no matches.\n    Reviewed-by: H.J. Lu <hjl.tools@gmail.com>\n    \n    (cherry picked from commit 7da08862471dfec6fdae731c2a5f351ad485c71f)\n\ndiff --git a/string/test-strchr.c b/string/test-strchr.c\nindex c795eac6fa..72b17af687 100644\n--- a/string/test-strchr.c\n+++ b/string/test-strchr.c\n@@ -255,6 +255,69 @@ check1 (void)\n     check_result (impl, s, c, exp_result);\n }\n \n+static void\n+check2 (void)\n+{\n+  CHAR *s = (CHAR *) (buf1 + getpagesize () - 4 * sizeof (CHAR));\n+  CHAR *s_begin = (CHAR *) (buf1 + getpagesize () - 64);\n+#ifndef USE_FOR_STRCHRNUL\n+  CHAR *exp_result = NULL;\n+#else\n+  CHAR *exp_result = s + 1;\n+#endif\n+  CHAR val = 0x12;\n+  for (; s_begin != s; ++s_begin)\n+    *s_begin = val;\n+\n+  s[0] = val + 1;\n+  s[1] = 0;\n+  s[2] = val + 1;\n+  s[3] = val + 1;\n+\n+  {\n+    FOR_EACH_IMPL (impl, 0)\n+      check_result (impl, s, val, exp_result);\n+  }\n+  s[3] = val;\n+  {\n+    FOR_EACH_IMPL (impl, 0)\n+      check_result (impl, s, val, exp_result);\n+  }\n+  exp_result = s;\n+  s[0] = val;\n+  {\n+    FOR_EACH_IMPL (impl, 0)\n+      check_result (impl, s, val, exp_result);\n+  }\n+\n+  s[3] = val + 1;\n+  {\n+    FOR_EACH_IMPL (impl, 0)\n+      check_result (impl, s, val, exp_result);\n+  }\n+\n+  s[0] = val + 1;\n+  s[1] = val + 1;\n+  s[2] = val + 1;\n+  s[3] = val + 1;\n+  s[4] = val;\n+  exp_result = s + 4;\n+  {\n+    FOR_EACH_IMPL (impl, 0)\n+      check_result (impl, s, val, exp_result);\n+  }\n+  s[4] = 0;\n+#ifndef USE_FOR_STRCHRNUL\n+  exp_result = NULL;\n+#else\n+  exp_result = s + 4;\n+#endif\n+  {\n+    FOR_EACH_IMPL (impl, 0)\n+      check_result (impl, s, val, exp_result);\n+  }\n+}\n+\n int\n test_main (void)\n {\n@@ -263,7 +326,7 @@ test_main (void)\n   test_init ();\n \n   check1 ();\n-\n+  check2 ();\n   printf (\"%20s\", \"\");\n   FOR_EACH_IMPL (impl, 0)\n     printf (\"\\t%s\", impl->name);\ndiff --git a/sysdeps/x86_64/multiarch/strchr-evex-base.S b/sysdeps/x86_64/multiarch/strchr-evex-base.S\nindex 04e2c0e79e..3a0b7c9d64 100644\n--- a/sysdeps/x86_64/multiarch/strchr-evex-base.S\n+++ b/sysdeps/x86_64/multiarch/strchr-evex-base.S\n@@ -124,13 +124,13 @@ L(page_cross):\n \tVPCMPNE\t%VMM(1), %VMM(0), %k1\n \tVPTEST\t%VMM(1), %VMM(1), %k0{%k1}\n \tKMOV\t%k0, %VRAX\n-# ifdef USE_AS_WCSCHR\n+\tsar\t%cl, %VRAX\n+#ifdef USE_AS_WCSCHR\n \tsub\t$VEC_MATCH_MASK, %VRAX\n-# else\n+#else\n \tinc\t%VRAX\n-# endif\n+#endif\n \t/* Ignore number of character for alignment adjustment.  */\n-\tshr\t%cl, %VRAX\n \tjz\tL(align_more)\n \n \tbsf\t%VRAX, %VRAX\n\ncommit 586e4cd8c67df95ebb0bfecea3d007bff618d6d9\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Fri Aug 9 16:17:14 2024 +0200\n\n    Define __libc_initial for the static libc\n    \n    Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>\n    (cherry picked from commit eb0e50e9a1cf80a2ba6f33f990a08ef37a3267fb)\n\ndiff --git a/include/libc-internal.h b/include/libc-internal.h\nindex 87ac591835..1ef43ffe67 100644\n--- a/include/libc-internal.h\n+++ b/include/libc-internal.h\n@@ -53,6 +53,9 @@ extern __typeof (__profile_frequency) __profile_frequency attribute_hidden;\n    is not for an audit module, not loaded via dlmopen, and not loaded\n    via static dlopen either).  */\n extern _Bool __libc_initial attribute_hidden;\n+#else\n+/* The static libc is always the initial namespace.  */\n+# define __libc_initial ((_Bool) 1)\n #endif\n \n #endif /* _LIBC_INTERNAL  */\n\ncommit 709319f9de6f976f9feceb623cb2c96769e9d78b\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Mon Aug 19 15:48:03 2024 +0200\n\n    string: strerror, strsignal cannot use buffer after dlmopen (bug 32026)\n    \n    Secondary namespaces have a different malloc.  Allocating the\n    buffer in one namespace and freeing it another results in\n    heap corruption.  Fix this by using a static string (potentially\n    translated) in secondary namespaces.  It would also be possible\n    to use the malloc from the initial namespace to manage the\n    buffer, but these functions would still not be safe to use in\n    auditors etc. because a call to strerror could still free a\n    buffer while it is used by the application.  Another approach\n    could use proper initial-exec TLS, duplicated in secondary\n    namespaces, but that would need a callback interface for freeing\n    libc resources in namespaces on thread exit, which does not exist\n    today.\n    \n    Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>\n    (cherry picked from commit 25a5eb4010df94b412c67db9e346029de316d06b)\n\ndiff --git a/NEWS b/NEWS\nindex b9eb4a558b..10a125bc66 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -13,6 +13,7 @@ The following bugs are resolved with this release:\n   [31968] mremap implementation in C does not handle arguments correctly\n   [31890] resolv: Allow short error responses to match any DNS query\n   [31968] mremap implementation in C does not handle arguments correctly\n+  [32026] strerror/strsignal TLS not handled correctly for secondary namespaces\n   [32052] Name space violation in fortify wrappers\n \f\n Version 2.40\ndiff --git a/string/strerror_l.c b/string/strerror_l.c\nindex 15cce261e6..70456e5bb4 100644\n--- a/string/strerror_l.c\n+++ b/string/strerror_l.c\n@@ -20,7 +20,7 @@\n #include <stdio.h>\n #include <string.h>\n #include <tls-internal.h>\n-\n+#include <libc-internal.h>\n \n static const char *\n translate (const char *str, locale_t loc)\n@@ -31,6 +31,12 @@ translate (const char *str, locale_t loc)\n   return res;\n }\n \n+static char *\n+unknown_error (locale_t loc)\n+{\n+  return (char *) translate (\"Unknown error\", loc);\n+}\n+\n \n /* Return a string describing the errno code in ERRNUM.  */\n char *\n@@ -40,18 +46,25 @@ __strerror_l (int errnum, locale_t loc)\n   char *err = (char *) __get_errlist (errnum);\n   if (__glibc_unlikely (err == NULL))\n     {\n-      struct tls_internal_t *tls_internal = __glibc_tls_internal ();\n-      free (tls_internal->strerror_l_buf);\n-      if (__asprintf (&tls_internal->strerror_l_buf, \"%s%d\",\n-\t\t      translate (\"Unknown error \", loc), errnum) > 0)\n-\terr = tls_internal->strerror_l_buf;\n-      else\n+      if (__libc_initial)\n \t{\n-\t  /* The memory was freed above.  */\n-\t  tls_internal->strerror_l_buf = NULL;\n-\t  /* Provide a fallback translation.  */\n-\t  err = (char *) translate (\"Unknown error\", loc);\n+\t  struct tls_internal_t *tls_internal = __glibc_tls_internal ();\n+\t  free (tls_internal->strerror_l_buf);\n+\t  if (__asprintf (&tls_internal->strerror_l_buf, \"%s%d\",\n+\t\t\t  translate (\"Unknown error \", loc), errnum) > 0)\n+\t    err = tls_internal->strerror_l_buf;\n+\t  else\n+\t    {\n+\t      /* The memory was freed above.  */\n+\t      tls_internal->strerror_l_buf = NULL;\n+\t      /* Provide a fallback translation.  */\n+\t      err = unknown_error (loc);\n+\t    }\n \t}\n+      else\n+\t/* Secondary namespaces use a different malloc, so cannot\n+\t   participate in the buffer management.  */\n+\terr = unknown_error (loc);\n     }\n   else\n     err = (char *) translate (err, loc);\ndiff --git a/string/strsignal.c b/string/strsignal.c\nindex 3114601564..d9b0365468 100644\n--- a/string/strsignal.c\n+++ b/string/strsignal.c\n@@ -21,6 +21,7 @@\n #include <string.h>\n #include <libintl.h>\n #include <tls-internal.h>\n+#include <libc-internal.h>\n \n /* Return a string describing the meaning of the signal number SIGNUM.  */\n char *\n@@ -30,21 +31,28 @@ strsignal (int signum)\n   if (desc != NULL)\n     return _(desc);\n \n-  struct tls_internal_t *tls_internal = __glibc_tls_internal ();\n-  free (tls_internal->strsignal_buf);\n+  if (__libc_initial)\n+    {\n+      struct tls_internal_t *tls_internal = __glibc_tls_internal ();\n+      free (tls_internal->strsignal_buf);\n \n-  int r;\n+      int r;\n #ifdef SIGRTMIN\n-  if (signum >= SIGRTMIN && signum <= SIGRTMAX)\n-    r = __asprintf (&tls_internal->strsignal_buf, _(\"Real-time signal %d\"),\n-\t\t    signum - SIGRTMIN);\n-  else\n+      if (signum >= SIGRTMIN && signum <= SIGRTMAX)\n+\tr = __asprintf (&tls_internal->strsignal_buf, _(\"Real-time signal %d\"),\n+\t\t\tsignum - SIGRTMIN);\n+      else\n #endif\n-    r = __asprintf (&tls_internal->strsignal_buf, _(\"Unknown signal %d\"),\n-\t\t    signum);\n-\n-  if (r == -1)\n-    tls_internal->strsignal_buf = NULL;\n-\n-  return tls_internal->strsignal_buf;\n+\tr = __asprintf (&tls_internal->strsignal_buf, _(\"Unknown signal %d\"),\n+\t\t\tsignum);\n+\n+      if (r >= 0)\n+\treturn tls_internal->strsignal_buf;\n+      else\n+\ttls_internal->strsignal_buf = NULL;\n+    }\n+  /* Fall through on asprintf error, and for !__libc_initial:\n+     secondary namespaces use a different malloc and cannot\n+     participate in the buffer management.  */\n+  return _(\"Unknown signal\");\n }\n\ncommit bc240ba7c86a74bc64d4234feadb49bb8e36e1c9\nAuthor: Maciej W. Rozycki <macro@redhat.com>\nDate:   Fri Jul 26 13:21:34 2024 +0100\n\n    support: Add FAIL test failure helper\n    \n    Add a FAIL test failure helper analogous to FAIL_RET, that does not\n    cause the current function to return, providing a standardized way to\n    report a test failure with a message supplied while permitting the\n    caller to continue executing, for further reporting, cleaning up, etc.\n    \n    Update existing test cases that provide a conflicting definition of FAIL\n    by removing the local FAIL definition and then as follows:\n    \n    - tst-fortify-syslog: provide a meaningful message in addition to the\n      file name already added by <support/check.h>; 'support_record_failure'\n      is already called by 'support_print_failure_impl' invoked by the new\n      FAIL test failure helper.\n    \n    - tst-ctype: no update to FAIL calls required, with the name of the file\n      and the line number within of the failure site additionally included\n      by the new FAIL test failure helper, and error counting plus count\n      reporting upon test program termination also already provided by\n      'support_record_failure' and 'support_report_failure' respectively,\n      called by 'support_print_failure_impl' and 'adjust_exit_status' also\n      respectively.  However in a number of places 'printf' is called and\n      the error count adjusted by hand, so update these places to make use\n      of FAIL instead.  And last but not least adjust the final summary just\n      to report completion, with any error count following as reported by\n      the test driver.\n    \n    - test-tgmath2: no update to FAIL calls required, with the name of the\n      file of the failure site additionally included by the new FAIL test\n      failure helper.  Also there is no need to track the return status by\n      hand as any call to FAIL will eventually cause the test case to return\n      an unsuccesful exit status regardless of the return status from the\n      test function, via a call to 'adjust_exit_status' made by the test\n      driver.\n    \n    Reviewed-by: DJ Delorie <dj@redhat.com>\n    (cherry picked from commit 1b97a9f23bf605ca608162089c94187573fb2a9e)\n\ndiff --git a/debug/tst-fortify-syslog.c b/debug/tst-fortify-syslog.c\nindex a7ddbf7c6b..2712acf689 100644\n--- a/debug/tst-fortify-syslog.c\n+++ b/debug/tst-fortify-syslog.c\n@@ -22,7 +22,6 @@\n #include <syslog.h>\n #include <string.h>\n #include <unistd.h>\n-#include <stdio.h>\n \n #include <support/check.h>\n #include <support/support.h>\n@@ -46,18 +45,13 @@ handler (int sig)\n     _exit (127);\n }\n \n-#define FAIL()\t\t\t\t\t\t\\\n-  do {\t\t\t\t\t\t\t\\\n-      printf (\"Failure on line %d\\n\", __LINE__);\t\\\n-      support_record_failure ();\t\t\t\\\n-  } while (0)\n #define CHK_FAIL_START\t\t\t\t\t\\\n   chk_fail_ok = 1;\t\t\t\t\t\\\n   if (! setjmp (chk_fail_buf))\t\t\t\t\\\n     {\n #define CHK_FAIL_END\t\t\t\t\t\\\n       chk_fail_ok = 0;\t\t\t\t\t\\\n-      FAIL ();\t\t\t\t\t\t\\\n+      FAIL (\"not supposed to reach here\");\t\t\\\n     }\n \n static void\ndiff --git a/localedata/tst-ctype.c b/localedata/tst-ctype.c\nindex 9de979a2d7..a23689719c 100644\n--- a/localedata/tst-ctype.c\n+++ b/localedata/tst-ctype.c\n@@ -21,6 +21,8 @@\n #include <stdio.h>\n #include <string.h>\n \n+#include <support/check.h>\n+\n \n static const char lower[] = \"abcdefghijklmnopqrstuvwxyz\";\n static const char upper[] = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n@@ -53,19 +55,11 @@ static struct classes\n #define nclasses (sizeof (classes) / sizeof (classes[0]))\n \n \n-#define FAIL(str, args...) \\\n-  {\t\t\t\t\t\t\t\t\t      \\\n-    printf (\"      \" str \"\\n\", ##args);\t\t\t\t\t      \\\n-    ++errors;\t\t\t\t\t\t\t\t      \\\n-  }\n-\n-\n static int\n do_test (void)\n {\n   const char *cp;\n   const char *cp2;\n-  int errors = 0;\n   char *inpline = NULL;\n   size_t inplinelen = 0;\n   char *resline = NULL;\n@@ -394,11 +388,8 @@ punct = %04x  alnum = %04x\\n\",\n \t    {\n \t      if (((__ctype_b[(unsigned int) *inp] & classes[n].mask) != 0)\n \t\t  != (*resp != '0'))\n-\t\t{\n-\t\t  printf (\"    is%s('%c' = '\\\\x%02x') %s true\\n\", inpline,\n-\t\t\t  *inp, *inp, *resp == '1' ? \"not\" : \"is\");\n-\t\t  ++errors;\n-\t\t}\n+\t\tFAIL (\"    is%s('%c' = '\\\\x%02x') %s true\\n\", inpline,\n+\t\t      *inp, *inp, *resp == '1' ? \"not\" : \"is\");\n \t      ++inp;\n \t      ++resp;\n \t    }\n@@ -408,11 +399,8 @@ punct = %04x  alnum = %04x\\n\",\n \t  while (*inp != '\\0')\n \t    {\n \t      if (tolower (*inp) != *resp)\n-\t\t{\n-\t\t  printf (\"    tolower('%c' = '\\\\x%02x') != '%c'\\n\",\n-\t\t\t  *inp, *inp, *resp);\n-\t\t  ++errors;\n-\t\t}\n+\t\tFAIL (\"    tolower('%c' = '\\\\x%02x') != '%c'\\n\",\n+\t\t      *inp, *inp, *resp);\n \t      ++inp;\n \t      ++resp;\n \t    }\n@@ -422,11 +410,8 @@ punct = %04x  alnum = %04x\\n\",\n \t  while (*inp != '\\0')\n \t    {\n \t      if (toupper (*inp) != *resp)\n-\t\t{\n-\t\t  printf (\"    toupper('%c' = '\\\\x%02x') != '%c'\\n\",\n-\t\t\t  *inp, *inp, *resp);\n-\t\t  ++errors;\n-\t\t}\n+\t\tFAIL (\"    toupper('%c' = '\\\\x%02x') != '%c'\\n\",\n+\t\t      *inp, *inp, *resp);\n \t      ++inp;\n \t      ++resp;\n \t    }\n@@ -436,14 +421,7 @@ punct = %04x  alnum = %04x\\n\",\n     }\n \n \n-  if (errors != 0)\n-    {\n-      printf (\"  %d error%s for `%s' locale\\n\\n\\n\", errors,\n-\t      errors == 1 ? \"\" : \"s\", setlocale (LC_ALL, NULL));\n-      return 1;\n-    }\n-\n-  printf (\"  No errors for `%s' locale\\n\\n\\n\", setlocale (LC_ALL, NULL));\n+  printf (\"Completed testing for `%s' locale\\n\\n\\n\", setlocale (LC_ALL, NULL));\n   return 0;\n }\n \ndiff --git a/math/test-tgmath2.c b/math/test-tgmath2.c\nindex 37afa8a08a..4aeb877b8e 100644\n--- a/math/test-tgmath2.c\n+++ b/math/test-tgmath2.c\n@@ -24,6 +24,8 @@\n #include <string.h>\n #include <tgmath.h>\n \n+#include <support/check.h>\n+\n //#define DEBUG\n \n typedef complex float cfloat;\n@@ -87,13 +89,6 @@ enum\n int count;\n int counts[Tlast][C_last];\n \n-#define FAIL(str) \\\n-  do\t\t\t\t\t\t\t\t\\\n-    {\t\t\t\t\t\t\t\t\\\n-      printf (\"%s failure on line %d\\n\", (str), __LINE__);\t\\\n-      result = 1;\t\t\t\t\t\t\\\n-    }\t\t\t\t\t\t\t\t\\\n-  while (0)\n #define TEST_TYPE_ONLY(expr, rettype) \\\n   do\t\t\t\t\t\t\t\t\\\n     {\t\t\t\t\t\t\t\t\\\n@@ -133,8 +128,6 @@ int counts[Tlast][C_last];\n int\n test_cos (const int Vint4, const long long int Vllong4)\n {\n-  int result = 0;\n-\n   TEST (cos (vfloat1), float, cos);\n   TEST (cos (vdouble1), double, cos);\n   TEST (cos (vldouble1), ldouble, cos);\n@@ -152,7 +145,7 @@ test_cos (const int Vint4, const long long int Vllong4)\n   TEST (cos (Vcdouble1), cdouble, cos);\n   TEST (cos (Vcldouble1), cldouble, cos);\n \n-  return result;\n+  return 0;\n }\n \n int\ndiff --git a/support/check.h b/support/check.h\nindex 711f34b83b..7ea22c7a2c 100644\n--- a/support/check.h\n+++ b/support/check.h\n@@ -24,6 +24,11 @@\n \n __BEGIN_DECLS\n \n+/* Record a test failure, print the failure message to standard output\n+   and pass the result of 1 through.  */\n+#define FAIL(...) \\\n+  support_print_failure_impl (__FILE__, __LINE__, __VA_ARGS__)\n+\n /* Record a test failure, print the failure message to standard output\n    and return 1.  */\n #define FAIL_RET(...) \\\n\ncommit 27fb563bfee521239316142fa4968282bffa86a6\nAuthor: Maciej W. Rozycki <macro@redhat.com>\nDate:   Fri Jul 26 13:21:34 2024 +0100\n\n    stdio-common: Add test for vfscanf with matches longer than INT_MAX [BZ #27650]\n    \n    Complement commit b03e4d7bd25b (\"stdio: fix vfscanf with matches longer\n    than INT_MAX (bug 27650)\") and add a test case for the issue, inspired\n    by the reproducer provided with the bug report.\n    \n    This has been verified to succeed as from the commit referred and fail\n    beforehand.\n    \n    As the test requires 2GiB of data to be passed around its performance\n    has been evaluated using a choice of systems and the execution time\n    determined to be respectively in the range of 9s for POWER9@2.166GHz,\n    24s for FU740@1.2GHz, and 40s for 74Kf@950MHz.  As this is on the verge\n    of and beyond the default timeout it has been increased by the factor of\n    8.  Regardless, following recent practice the test has been added to the\n    standard rather than extended set.\n    \n    Reviewed-by: DJ Delorie <dj@redhat.com>\n    (cherry picked from commit 89cddc8a7096f3d9225868304d2bc0a1aaf07d63)\n\ndiff --git a/stdio-common/Makefile b/stdio-common/Makefile\nindex a63c05a120..e4f0146d2c 100644\n--- a/stdio-common/Makefile\n+++ b/stdio-common/Makefile\n@@ -240,6 +240,7 @@ tests := \\\n   tst-scanf-binary-c23 \\\n   tst-scanf-binary-gnu11 \\\n   tst-scanf-binary-gnu89 \\\n+  tst-scanf-bz27650 \\\n   tst-scanf-intn \\\n   tst-scanf-round \\\n   tst-scanf-to_inpunct \\\n@@ -328,6 +329,7 @@ generated += \\\n   tst-printf-fp-free.mtrace \\\n   tst-printf-fp-leak-mem.out \\\n   tst-printf-fp-leak.mtrace \\\n+  tst-scanf-bz27650.mtrace \\\n   tst-vfprintf-width-prec-mem.out \\\n   tst-vfprintf-width-prec.mtrace \\\n   # generated\n@@ -419,6 +421,9 @@ tst-printf-fp-free-ENV = \\\n tst-printf-fp-leak-ENV = \\\n   MALLOC_TRACE=$(objpfx)tst-printf-fp-leak.mtrace \\\n   LD_PRELOAD=$(common-objpfx)/malloc/libc_malloc_debug.so\n+tst-scanf-bz27650-ENV = \\\n+  MALLOC_TRACE=$(objpfx)tst-scanf-bz27650.mtrace \\\n+  LD_PRELOAD=$(common-objpfx)malloc/libc_malloc_debug.so\n \n $(objpfx)tst-unbputc.out: tst-unbputc.sh $(objpfx)tst-unbputc\n \t$(SHELL) $< $(common-objpfx) '$(test-program-prefix)'; \\\ndiff --git a/stdio-common/tst-scanf-bz27650.c b/stdio-common/tst-scanf-bz27650.c\nnew file mode 100644\nindex 0000000000..3a742bc865\n--- /dev/null\n+++ b/stdio-common/tst-scanf-bz27650.c\n@@ -0,0 +1,108 @@\n+/* Test for BZ #27650, formatted input matching beyond INT_MAX.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <error.h>\n+#include <errno.h>\n+#include <limits.h>\n+#include <mcheck.h>\n+#include <stddef.h>\n+#include <stdio.h>\n+#include <stdlib.h>\n+#include <string.h>\n+\n+#include <sys/types.h>\n+\n+#include <support/check.h>\n+#include <support/test-driver.h>\n+\n+/* Produce a stream of more than INT_MAX characters via buffer BUF of\n+   size SIZE according to bookkeeping in COOKIE and then return EOF.  */\n+\n+static ssize_t\n+io_read (void *cookie, char *buf, size_t size)\n+{\n+  unsigned int *written = cookie;\n+  unsigned int w = *written;\n+\n+  if (w > INT_MAX)\n+    return 0;\n+\n+  memset (buf, 'a', size);\n+  *written = w + size;\n+  return size;\n+}\n+\n+/* Consume a stream of more than INT_MAX characters from an artificial\n+   input stream of which none is the new line character.  The call to\n+   fscanf is supposed to complete upon the EOF condition of input,\n+   however in the presence of BZ #27650 it will terminate prematurely\n+   with characters still outstanding in input.  Diagnose the condition\n+   and return status accordingly.  */\n+\n+int\n+do_test (void)\n+{\n+  static cookie_io_functions_t io_funcs = { .read = io_read };\n+  unsigned int written = 0;\n+  FILE *in;\n+  int v;\n+\n+  mtrace ();\n+\n+  in = fopencookie (&written, \"r\", io_funcs);\n+  if (in == NULL)\n+    {\n+      FAIL (\"fopencookie: %m\");\n+      goto out;\n+    }\n+\n+  v = fscanf (in, \"%*[^\\n]\");\n+  if (ferror (in))\n+    {\n+      FAIL (\"fscanf: input failure, at %u: %m\", written);\n+      goto out_close;\n+    }\n+  else if (v == EOF)\n+    {\n+      FAIL (\"fscanf: unexpected end of file, at %u\", written);\n+      goto out_close;\n+    }\n+\n+  if (!feof (in))\n+    {\n+      v = fgetc (in);\n+      if (ferror (in))\n+\tFAIL (\"fgetc: input failure: %m\");\n+      else if (v == EOF)\n+\tFAIL (\"fgetc: unexpected end of file after missing end of file\");\n+      else if (v == '\\n')\n+\tFAIL (\"unexpected new line character received\");\n+      else\n+\tFAIL (\"character received after end of file expected: \\\\x%02x\", v);\n+    }\n+\n+out_close:\n+  if (fclose (in) != 0)\n+    FAIL (\"fclose: %m\");\n+\n+out:\n+  return EXIT_SUCCESS;\n+}\n+\n+#define TIMEOUT (DEFAULT_TIMEOUT * 8)\n+#include <support/test-driver.c>\n\ncommit 2f749d2b15cbc82268d7f8735f21ae1e3b68754f\nAuthor: Siddhesh Poyarekar <siddhesh@sourceware.org>\nDate:   Wed Aug 14 19:20:04 2024 -0400\n\n    Make tst-ungetc use libsupport\n    \n    Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>\n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit 3f7df7e757f4efec38e45d4068e5492efcac4856)\n\ndiff --git a/stdio-common/tst-ungetc.c b/stdio-common/tst-ungetc.c\nindex 1344b2b591..5c808f0734 100644\n--- a/stdio-common/tst-ungetc.c\n+++ b/stdio-common/tst-ungetc.c\n@@ -1,70 +1,72 @@\n-/* Test for ungetc bugs.  */\n+/* Test for ungetc bugs.\n+   Copyright (C) 1996-2024 Free Software Foundation, Inc.\n+   Copyright The GNU Toolchain Authors.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n \n #include <stdio.h>\n #include <stdlib.h>\n-#include <unistd.h>\n-\n-#undef assert\n-#define assert(x) \\\n-  if (!(x)) \\\n-    { \\\n-      fputs (\"test failed: \" #x \"\\n\", stderr); \\\n-      retval = 1; \\\n-      goto the_end; \\\n-    }\n+#include <support/check.h>\n+#include <support/support.h>\n+#include <support/temp_file.h>\n+#include <support/xstdio.h>\n+#include <support/xunistd.h>\n \n-int\n-main (int argc, char *argv[])\n+static int\n+do_test (void)\n {\n-  char name[] = \"/tmp/tst-ungetc.XXXXXX\";\n+  char *name = NULL;\n   FILE *fp = NULL;\n-  int retval = 0;\n   int c;\n   char buffer[64];\n \n-  int fd = mkstemp (name);\n+  int fd = create_temp_file (\"tst-ungetc.\", &name);\n   if (fd == -1)\n-    {\n-      printf (\"mkstemp failed: %m\\n\");\n-      return 1;\n-    }\n-  close (fd);\n-  fp = fopen (name, \"w\");\n-  assert (fp != NULL)\n-  fputs (\"bla\", fp);\n-  fclose (fp);\n-  fp = NULL;\n+    FAIL_EXIT1 (\"cannot create temporary file: %m\");\n+  xclose (fd);\n \n-  fp = fopen (name, \"r\");\n-  assert (fp != NULL);\n-  assert (ungetc ('z', fp) == 'z');\n-  assert (getc (fp) == 'z');\n-  assert (getc (fp) == 'b');\n-  assert (getc (fp) == 'l');\n-  assert (ungetc ('m', fp) == 'm');\n-  assert (getc (fp) == 'm');\n-  assert ((c = getc (fp)) == 'a');\n-  assert (getc (fp) == EOF);\n-  assert (ungetc (c, fp) == c);\n-  assert (feof (fp) == 0);\n-  assert (getc (fp) == c);\n-  assert (getc (fp) == EOF);\n-  fclose (fp);\n-  fp = NULL;\n+  fp = xfopen (name, \"w\");\n+  fputs (\"bla\", fp);\n+  xfclose (fp);\n \n-  fp = fopen (name, \"r\");\n-  assert (fp != NULL);\n-  assert (getc (fp) == 'b');\n-  assert (getc (fp) == 'l');\n-  assert (ungetc ('b', fp) == 'b');\n-  assert (fread (buffer, 1, 64, fp) == 2);\n-  assert (buffer[0] == 'b');\n-  assert (buffer[1] == 'a');\n+  fp = xfopen (name, \"r\");\n+  TEST_VERIFY_EXIT (ungetc ('z', fp) == 'z');\n+  TEST_VERIFY_EXIT (getc (fp) == 'z');\n+  TEST_VERIFY_EXIT (getc (fp) == 'b');\n+  TEST_VERIFY_EXIT (getc (fp) == 'l');\n+  TEST_VERIFY_EXIT (ungetc ('m', fp) == 'm');\n+  TEST_VERIFY_EXIT (getc (fp) == 'm');\n+  TEST_VERIFY_EXIT ((c = getc (fp)) == 'a');\n+  TEST_VERIFY_EXIT (getc (fp) == EOF);\n+  TEST_VERIFY_EXIT (ungetc (c, fp) == c);\n+  TEST_VERIFY_EXIT (feof (fp) == 0);\n+  TEST_VERIFY_EXIT (getc (fp) == c);\n+  TEST_VERIFY_EXIT (getc (fp) == EOF);\n+  xfclose (fp);\n \n-the_end:\n-  if (fp != NULL)\n-    fclose (fp);\n-  unlink (name);\n+  fp = xfopen (name, \"r\");\n+  TEST_VERIFY_EXIT (getc (fp) == 'b');\n+  TEST_VERIFY_EXIT (getc (fp) == 'l');\n+  TEST_VERIFY_EXIT (ungetc ('b', fp) == 'b');\n+  TEST_VERIFY_EXIT (fread (buffer, 1, 64, fp) == 2);\n+  TEST_VERIFY_EXIT (buffer[0] == 'b');\n+  TEST_VERIFY_EXIT (buffer[1] == 'a');\n+  xfclose (fp);\n \n-  return retval;\n+  return 0;\n }\n+\n+#include <support/test-driver.c>\n\ncommit dac7a0694b5e853f08be518cd5a133ac5804666d\nAuthor: Siddhesh Poyarekar <siddhesh@sourceware.org>\nDate:   Tue Aug 13 21:00:06 2024 -0400\n\n    ungetc: Fix uninitialized read when putting into unused streams [BZ #27821]\n    \n    When ungetc is called on an unused stream, the backup buffer is\n    allocated without the main get area being present.  This results in\n    every subsequent ungetc (as the stream remains in the backup area)\n    checking uninitialized memory in the backup buffer when trying to put a\n    character back into the stream.\n    \n    Avoid comparing the input character with buffer contents when in backup\n    to avoid this uninitialized read.  The uninitialized read is harmless in\n    this context since the location is promptly overwritten with the input\n    character, thus fulfilling ungetc functionality.\n    \n    Also adjust wording in the manual to drop the paragraph that says glibc\n    cannot do multiple ungetc back to back since with this change, ungetc\n    can actually do this.\n    \n    Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>\n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit cdf0f88f97b0aaceb894cc02b21159d148d7065c)\n\ndiff --git a/libio/genops.c b/libio/genops.c\nindex 99f5e80f20..b012fa33d2 100644\n--- a/libio/genops.c\n+++ b/libio/genops.c\n@@ -662,7 +662,7 @@ _IO_sputbackc (FILE *fp, int c)\n {\n   int result;\n \n-  if (fp->_IO_read_ptr > fp->_IO_read_base\n+  if (fp->_IO_read_ptr > fp->_IO_read_base && !_IO_in_backup (fp)\n       && (unsigned char)fp->_IO_read_ptr[-1] == (unsigned char)c)\n     {\n       fp->_IO_read_ptr--;\ndiff --git a/manual/stdio.texi b/manual/stdio.texi\nindex 8517653507..92614775fa 100644\n--- a/manual/stdio.texi\n+++ b/manual/stdio.texi\n@@ -1467,11 +1467,9 @@ program; usually @code{ungetc} is used only to unread a character that\n was just read from the same stream.  @Theglibc{} supports this\n even on files opened in binary mode, but other systems might not.\n \n-@Theglibc{} only supports one character of pushback---in other\n-words, it does not work to call @code{ungetc} twice without doing input\n-in between.  Other systems might let you push back multiple characters;\n-then reading from the stream retrieves the characters in the reverse\n-order that they were pushed.\n+@Theglibc{} supports pushing back multiple characters; subsequently\n+reading from the stream retrieves the characters in the reverse order\n+that they were pushed.\n \n Pushing back characters doesn't alter the file; only the internal\n buffering for the stream is affected.  If a file positioning function\ndiff --git a/stdio-common/tst-ungetc.c b/stdio-common/tst-ungetc.c\nindex 5c808f0734..388b202493 100644\n--- a/stdio-common/tst-ungetc.c\n+++ b/stdio-common/tst-ungetc.c\n@@ -48,6 +48,8 @@ do_test (void)\n   TEST_VERIFY_EXIT (getc (fp) == 'b');\n   TEST_VERIFY_EXIT (getc (fp) == 'l');\n   TEST_VERIFY_EXIT (ungetc ('m', fp) == 'm');\n+  TEST_VERIFY_EXIT (ungetc ('n', fp) == 'n');\n+  TEST_VERIFY_EXIT (getc (fp) == 'n');\n   TEST_VERIFY_EXIT (getc (fp) == 'm');\n   TEST_VERIFY_EXIT ((c = getc (fp)) == 'a');\n   TEST_VERIFY_EXIT (getc (fp) == EOF);\n\ncommit e24902f409994f226dbc6fde2476009df452a18f\nAuthor: Siddhesh Poyarekar <siddhesh@sourceware.org>\nDate:   Tue Aug 13 21:08:49 2024 -0400\n\n    ungetc: Fix backup buffer leak on program exit [BZ #27821]\n    \n    If a file descriptor is left unclosed and is cleaned up by _IO_cleanup\n    on exit, its backup buffer remains unfreed, registering as a leak in\n    valgrind.  This is not strictly an issue since (1) the program should\n    ideally be closing the stream once it's not in use and (2) the program\n    is about to exit anyway, so keeping the backup buffer around a wee bit\n    longer isn't a real problem.  Free it anyway to keep valgrind happy\n    when the streams in question are the standard ones, i.e. stdout, stdin\n    or stderr.\n    \n    Also, the _IO_have_backup macro checks for _IO_save_base,\n    which is a roundabout way to check for a backup buffer instead of\n    directly looking for _IO_backup_base.  The roundabout check breaks when\n    the main get area has not been used and user pushes a char into the\n    backup buffer with ungetc.  Fix this to use the _IO_backup_base\n    directly.\n    \n    Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>\n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit 3e1d8d1d1dca24ae90df2ea826a8916896fc7e77)\n\ndiff --git a/libio/genops.c b/libio/genops.c\nindex b012fa33d2..35d8b30710 100644\n--- a/libio/genops.c\n+++ b/libio/genops.c\n@@ -816,6 +816,12 @@ _IO_unbuffer_all (void)\n \tlegacy = 1;\n #endif\n \n+      /* Free up the backup area if it was ever allocated.  */\n+      if (_IO_have_backup (fp))\n+\t_IO_free_backup_area (fp);\n+      if (fp->_mode > 0 && _IO_have_wbackup (fp))\n+\t_IO_free_wbackup_area (fp);\n+\n       if (! (fp->_flags & _IO_UNBUFFERED)\n \t  /* Iff stream is un-orientated, it wasn't used. */\n \t  && (legacy || fp->_mode != 0))\ndiff --git a/libio/libioP.h b/libio/libioP.h\nindex 1af287b19f..616253fcd0 100644\n--- a/libio/libioP.h\n+++ b/libio/libioP.h\n@@ -577,8 +577,8 @@ extern void _IO_old_init (FILE *fp, int flags) __THROW;\n        ((__fp)->_wide_data->_IO_write_base \\\n \t= (__fp)->_wide_data->_IO_write_ptr = __p, \\\n \t(__fp)->_wide_data->_IO_write_end = (__ep))\n-#define _IO_have_backup(fp) ((fp)->_IO_save_base != NULL)\n-#define _IO_have_wbackup(fp) ((fp)->_wide_data->_IO_save_base != NULL)\n+#define _IO_have_backup(fp) ((fp)->_IO_backup_base != NULL)\n+#define _IO_have_wbackup(fp) ((fp)->_wide_data->_IO_backup_base != NULL)\n #define _IO_in_backup(fp) ((fp)->_flags & _IO_IN_BACKUP)\n #define _IO_have_markers(fp) ((fp)->_markers != NULL)\n #define _IO_blen(fp) ((fp)->_IO_buf_end - (fp)->_IO_buf_base)\ndiff --git a/stdio-common/Makefile b/stdio-common/Makefile\nindex e4f0146d2c..a91754f52d 100644\n--- a/stdio-common/Makefile\n+++ b/stdio-common/Makefile\n@@ -254,6 +254,7 @@ tests := \\\n   tst-swscanf \\\n   tst-tmpnam \\\n   tst-ungetc \\\n+  tst-ungetc-leak \\\n   tst-unlockedio \\\n   tst-vfprintf-mbs-prec \\\n   tst-vfprintf-user-type \\\n@@ -316,6 +317,7 @@ tests-special += \\\n   $(objpfx)tst-printf-bz25691-mem.out \\\n   $(objpfx)tst-printf-fp-free-mem.out \\\n   $(objpfx)tst-printf-fp-leak-mem.out \\\n+  $(objpfx)tst-ungetc-leak-mem.out \\\n   $(objpfx)tst-vfprintf-width-prec-mem.out \\\n   # tests-special\n \n@@ -330,6 +332,8 @@ generated += \\\n   tst-printf-fp-leak-mem.out \\\n   tst-printf-fp-leak.mtrace \\\n   tst-scanf-bz27650.mtrace \\\n+  tst-ungetc-leak-mem.out \\\n+  tst-ungetc-leak.mtrace \\\n   tst-vfprintf-width-prec-mem.out \\\n   tst-vfprintf-width-prec.mtrace \\\n   # generated\n@@ -424,6 +428,9 @@ tst-printf-fp-leak-ENV = \\\n tst-scanf-bz27650-ENV = \\\n   MALLOC_TRACE=$(objpfx)tst-scanf-bz27650.mtrace \\\n   LD_PRELOAD=$(common-objpfx)malloc/libc_malloc_debug.so\n+tst-ungetc-leak-ENV = \\\n+  MALLOC_TRACE=$(objpfx)tst-ungetc-leak.mtrace \\\n+  LD_PRELOAD=$(common-objpfx)malloc/libc_malloc_debug.so\n \n $(objpfx)tst-unbputc.out: tst-unbputc.sh $(objpfx)tst-unbputc\n \t$(SHELL) $< $(common-objpfx) '$(test-program-prefix)'; \\\ndiff --git a/stdio-common/tst-ungetc-leak.c b/stdio-common/tst-ungetc-leak.c\nnew file mode 100644\nindex 0000000000..6c5152b43f\n--- /dev/null\n+++ b/stdio-common/tst-ungetc-leak.c\n@@ -0,0 +1,32 @@\n+/* Test for memory leak with ungetc when stream is unused.\n+   Copyright The GNU Toolchain Authors.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <stdio.h>\n+#include <mcheck.h>\n+#include <support/check.h>\n+#include <support/support.h>\n+\n+static int\n+do_test (void)\n+{\n+  mtrace ();\n+  TEST_COMPARE (ungetc('y', stdin), 'y');\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\n\ncommit 3b3350d7baa8de70b71c02e964d5b8343749ebf8\nAuthor: Maciej W. Rozycki <macro@redhat.com>\nDate:   Fri Jul 26 13:21:34 2024 +0100\n\n    posix: Use <support/check.h> facilities in tst-truncate and tst-truncate64\n    \n    Remove local FAIL macro in favor to FAIL_RET from <support/check.h>,\n    which provides equivalent reporting, with the name of the file of the\n    failure site additionally included, for the tst-truncate-common core\n    shared between the tst-truncate and tst-truncate64 tests.\n    \n    Reviewed-by: DJ Delorie <dj@redhat.com>\n    (cherry picked from commit fe47595504a55e7bb992f8928533df154b510383)\n\ndiff --git a/posix/tst-truncate-common.c b/posix/tst-truncate-common.c\nindex b774fa46b8..b8c561ffdb 100644\n--- a/posix/tst-truncate-common.c\n+++ b/posix/tst-truncate-common.c\n@@ -21,6 +21,8 @@\n #include <sys/stat.h>\n #include <unistd.h>\n \n+#include <support/check.h>\n+\n static void do_prepare (void);\n #define PREPARE(argc, argv)     do_prepare ()\n static int do_test (void);\n@@ -42,9 +44,6 @@ do_prepare (void)\n     }\n }\n \n-#define FAIL(str) \\\n-  do { printf (\"error: %s (line %d)\\n\", str, __LINE__); return 1; } while (0)\n-\n static int\n do_test_with_offset (off_t offset)\n {\n@@ -54,35 +53,35 @@ do_test_with_offset (off_t offset)\n   memset (buf, 0xcf, sizeof (buf));\n \n   if (pwrite (temp_fd, buf, sizeof (buf), offset) != sizeof (buf))\n-    FAIL (\"write failed\");\n+    FAIL_RET (\"write failed\");\n   if (fstat (temp_fd, &st) < 0 || st.st_size != (offset + sizeof (buf)))\n-    FAIL (\"initial size wrong\");\n+    FAIL_RET (\"initial size wrong\");\n \n   if (ftruncate (temp_fd, offset + 800) < 0)\n-    FAIL (\"size reduction with ftruncate failed\");\n+    FAIL_RET (\"size reduction with ftruncate failed\");\n   if (fstat (temp_fd, &st) < 0 || st.st_size != (offset + 800))\n-    FAIL (\"size after reduction with ftruncate is incorrect\");\n+    FAIL_RET (\"size after reduction with ftruncate is incorrect\");\n \n   /* The following test covers more than POSIX.  POSIX does not require\n      that ftruncate() can increase the file size.  But we are testing\n      Unix systems.  */\n   if (ftruncate (temp_fd, offset + 1200) < 0)\n-    FAIL (\"size increate with ftruncate failed\");\n+    FAIL_RET (\"size increate with ftruncate failed\");\n   if (fstat (temp_fd, &st) < 0 || st.st_size != (offset + 1200))\n-    FAIL (\"size after increase is incorrect\");\n+    FAIL_RET (\"size after increase is incorrect\");\n \n   if (truncate (temp_filename, offset + 800) < 0)\n-    FAIL (\"size reduction with truncate failed\");\n+    FAIL_RET (\"size reduction with truncate failed\");\n   if (fstat (temp_fd, &st) < 0 || st.st_size != (offset + 800))\n-    FAIL (\"size after reduction with truncate incorrect\");\n+    FAIL_RET (\"size after reduction with truncate incorrect\");\n \n   /* The following test covers more than POSIX.  POSIX does not require\n      that truncate() can increase the file size.  But we are testing\n      Unix systems.  */\n   if (truncate (temp_filename, (offset + 1200)) < 0)\n-    FAIL (\"size increase with truncate failed\");\n+    FAIL_RET (\"size increase with truncate failed\");\n   if (fstat (temp_fd, &st) < 0 || st.st_size != (offset + 1200))\n-    FAIL (\"size increase with truncate is incorrect\");\n+    FAIL_RET (\"size increase with truncate is incorrect\");\n \n   return 0;\n }\n\ncommit 3414b17e9db16c3bc0de5b49555c4f94f155ffc8\nAuthor: Maciej W. Rozycki <macro@redhat.com>\nDate:   Fri Jul 26 13:21:34 2024 +0100\n\n    nptl: Use <support/check.h> facilities in tst-setuid3\n    \n    Remove local FAIL macro in favor to FAIL_EXIT1 from <support/check.h>,\n    which provides equivalent reporting, with the name of the file and the\n    line number within of the failure site additionally included.  Remove\n    FAIL_ERR altogether and include \": %m\" explicitly with the format string\n    supplied to FAIL_EXIT1 as there seems little value to have a separate\n    macro just for this.\n    \n    Reviewed-by: DJ Delorie <dj@redhat.com>\n    (cherry picked from commit 8c98195af6e6f1ce21743fc26c723e0f7e45bcf2)\n\ndiff --git a/sysdeps/pthread/tst-setuid3.c b/sysdeps/pthread/tst-setuid3.c\nindex 83f42a0ae5..3845ab03d3 100644\n--- a/sysdeps/pthread/tst-setuid3.c\n+++ b/sysdeps/pthread/tst-setuid3.c\n@@ -15,24 +15,19 @@\n    License along with the GNU C Library; if not, see\n    <https://www.gnu.org/licenses/>.  */\n \n-#include <stdio.h>\n #include <errno.h>\n #include <pthread.h>\n #include <stdbool.h>\n #include <unistd.h>\n \n+#include <support/check.h>\n+\n /* The test must run under a non-privileged user ID.  */\n static const uid_t test_uid = 1;\n \n static pthread_barrier_t barrier1;\n static pthread_barrier_t barrier2;\n \n-#define FAIL(fmt, ...) \\\n-  do { printf (\"FAIL: \" fmt \"\\n\", __VA_ARGS__); _exit (1); } while (0)\n-\n-#define FAIL_ERR(fmt, ...) \\\n-  do { printf (\"FAIL: \" fmt \": %m\\n\", __VA_ARGS__); _exit (1); } while (0)\n-\n /* True if x is not a successful return code from pthread_barrier_wait.  */\n static inline bool\n is_invalid_barrier_ret (int x)\n@@ -45,10 +40,10 @@ thread_func (void *ctx __attribute__ ((unused)))\n {\n   int ret = pthread_barrier_wait (&barrier1);\n   if (is_invalid_barrier_ret (ret))\n-    FAIL (\"pthread_barrier_wait (barrier1) (on thread): %d\", ret);\n+    FAIL_EXIT1 (\"pthread_barrier_wait (barrier1) (on thread): %d\", ret);\n   ret = pthread_barrier_wait (&barrier2);\n   if (is_invalid_barrier_ret (ret))\n-    FAIL (\"pthread_barrier_wait (barrier2) (on thread): %d\", ret);\n+    FAIL_EXIT1 (\"pthread_barrier_wait (barrier2) (on thread): %d\", ret);\n   return NULL;\n }\n \n@@ -59,13 +54,13 @@ setuid_failure (int phase)\n   switch (ret)\n     {\n     case 0:\n-      FAIL (\"setuid succeeded unexpectedly in phase %d\", phase);\n+      FAIL_EXIT1 (\"setuid succeeded unexpectedly in phase %d\", phase);\n     case -1:\n       if (errno != EPERM)\n-\tFAIL_ERR (\"setuid phase %d\", phase);\n+\tFAIL_EXIT1 (\"setuid phase %d: %m\", phase);\n       break;\n     default:\n-      FAIL (\"invalid setuid return value in phase %d: %d\", phase, ret);\n+      FAIL_EXIT1 (\"invalid setuid return value in phase %d: %d\", phase, ret);\n     }\n }\n \n@@ -74,42 +69,42 @@ do_test (void)\n {\n   if (getuid () == 0)\n     if (setuid (test_uid) != 0)\n-      FAIL_ERR (\"setuid (%u)\", (unsigned) test_uid);\n+      FAIL_EXIT1 (\"setuid (%u): %m\", (unsigned) test_uid);\n   if (setuid (getuid ()))\n-    FAIL_ERR (\"setuid (%s)\", \"getuid ()\");\n+    FAIL_EXIT1 (\"setuid (%s): %m\", \"getuid ()\");\n   setuid_failure (1);\n \n   int ret = pthread_barrier_init (&barrier1, NULL, 2);\n   if (ret != 0)\n-    FAIL (\"pthread_barrier_init (barrier1): %d\", ret);\n+    FAIL_EXIT1 (\"pthread_barrier_init (barrier1): %d\", ret);\n   ret = pthread_barrier_init (&barrier2, NULL, 2);\n   if (ret != 0)\n-    FAIL (\"pthread_barrier_init (barrier2): %d\", ret);\n+    FAIL_EXIT1 (\"pthread_barrier_init (barrier2): %d\", ret);\n \n   pthread_t thread;\n   ret = pthread_create (&thread, NULL, thread_func, NULL);\n   if (ret != 0)\n-    FAIL (\"pthread_create: %d\", ret);\n+    FAIL_EXIT1 (\"pthread_create: %d\", ret);\n \n   /* Ensure that the thread is running properly.  */\n   ret = pthread_barrier_wait (&barrier1);\n   if (is_invalid_barrier_ret (ret))\n-    FAIL (\"pthread_barrier_wait (barrier1): %d\", ret);\n+    FAIL_EXIT1 (\"pthread_barrier_wait (barrier1): %d\", ret);\n \n   setuid_failure (2);\n \n   /* Check success case. */\n   if (setuid (getuid ()) != 0)\n-    FAIL_ERR (\"setuid (%s)\", \"getuid ()\");\n+    FAIL_EXIT1 (\"setuid (%s): %m\", \"getuid ()\");\n \n   /* Shutdown.  */\n   ret = pthread_barrier_wait (&barrier2);\n   if (is_invalid_barrier_ret (ret))\n-    FAIL (\"pthread_barrier_wait (barrier2): %d\", ret);\n+    FAIL_EXIT1 (\"pthread_barrier_wait (barrier2): %d\", ret);\n \n   ret = pthread_join (thread, NULL);\n   if (ret != 0)\n-    FAIL (\"pthread_join: %d\", ret);\n+    FAIL_EXIT1 (\"pthread_join: %d\", ret);\n \n   return 0;\n }\n\ncommit b7edcfa0f41ccfaeb665a661d3a6a594c8d95848\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Thu Aug 1 23:31:23 2024 +0200\n\n    elf: Clarify and invert second argument of _dl_allocate_tls_init\n    \n    Also remove an outdated comment: _dl_allocate_tls_init is\n    called as part of pthread_create.\n    \n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit fe06fb313bddf7e4530056897d4a706606e49377)\n\ndiff --git a/elf/dl-tls.c b/elf/dl-tls.c\nindex 3d221273f1..ecb966d282 100644\n--- a/elf/dl-tls.c\n+++ b/elf/dl-tls.c\n@@ -552,9 +552,14 @@ _dl_resize_dtv (dtv_t *dtv, size_t max_modid)\n /* Allocate initial TLS.  RESULT should be a non-NULL pointer to storage\n    for the TLS space.  The DTV may be resized, and so this function may\n    call malloc to allocate that space.  The loader's GL(dl_load_tls_lock)\n-   is taken when manipulating global TLS-related data in the loader.  */\n+   is taken when manipulating global TLS-related data in the loader.\n+\n+   If MAIN_THREAD, this is the first call during process\n+   initialization.  In this case, TLS initialization for secondary\n+   (audit) namespaces is skipped because that has already been handled\n+   by dlopen.  */\n void *\n-_dl_allocate_tls_init (void *result, bool init_tls)\n+_dl_allocate_tls_init (void *result, bool main_thread)\n {\n   if (result == NULL)\n     /* The memory allocation failed.  */\n@@ -633,7 +638,7 @@ _dl_allocate_tls_init (void *result, bool init_tls)\n \t     because it would already be set by the audit setup.  However,\n \t     subsequent thread creation would need to follow the default\n \t     behaviour.   */\n-\t  if (map->l_ns != LM_ID_BASE && !init_tls)\n+\t  if (map->l_ns != LM_ID_BASE && main_thread)\n \t    continue;\n \t  memset (__mempcpy (dest, map->l_tls_initimage,\n \t\t\t     map->l_tls_initimage_size), '\\0',\n@@ -661,7 +666,7 @@ _dl_allocate_tls (void *mem)\n {\n   return _dl_allocate_tls_init (mem == NULL\n \t\t\t\t? _dl_allocate_tls_storage ()\n-\t\t\t\t: allocate_dtv (mem), true);\n+\t\t\t\t: allocate_dtv (mem), false);\n }\n rtld_hidden_def (_dl_allocate_tls)\n \ndiff --git a/elf/rtld.c b/elf/rtld.c\nindex bfdf632e77..09b9c9993b 100644\n--- a/elf/rtld.c\n+++ b/elf/rtld.c\n@@ -2338,7 +2338,7 @@ dl_main (const ElfW(Phdr) *phdr,\n      into the main thread's TLS area, which we allocated above.\n      Note: thread-local variables must only be accessed after completing\n      the next step.  */\n-  _dl_allocate_tls_init (tcbp, false);\n+  _dl_allocate_tls_init (tcbp, true);\n \n   /* And finally install it for the main thread.  */\n   if (! __rtld_tls_init_tp_called)\ndiff --git a/nptl/allocatestack.c b/nptl/allocatestack.c\nindex f35a8369bd..2cb562f8ea 100644\n--- a/nptl/allocatestack.c\n+++ b/nptl/allocatestack.c\n@@ -139,7 +139,7 @@ get_cached_stack (size_t *sizep, void **memp)\n   memset (dtv, '\\0', (dtv[-1].counter + 1) * sizeof (dtv_t));\n \n   /* Re-initialize the TLS.  */\n-  _dl_allocate_tls_init (TLS_TPADJ (result), true);\n+  _dl_allocate_tls_init (TLS_TPADJ (result), false);\n \n   return result;\n }\ndiff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h\nindex 656e8a3fa0..154efb0e19 100644\n--- a/sysdeps/generic/ldsodefs.h\n+++ b/sysdeps/generic/ldsodefs.h\n@@ -1200,10 +1200,8 @@ extern void _dl_get_tls_static_info (size_t *sizep, size_t *alignp);\n \n extern void _dl_allocate_static_tls (struct link_map *map) attribute_hidden;\n \n-/* These are internal entry points to the two halves of _dl_allocate_tls,\n-   only used within rtld.c itself at startup time.  */\n extern void *_dl_allocate_tls_storage (void) attribute_hidden;\n-extern void *_dl_allocate_tls_init (void *, bool);\n+extern void *_dl_allocate_tls_init (void *result, bool main_thread);\n rtld_hidden_proto (_dl_allocate_tls_init)\n \n /* True if the TCB has been set up.  */\n\ncommit f496b750f135e57da921e975835c44bd199246dd\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Thu Aug 1 23:31:30 2024 +0200\n\n    elf: Avoid re-initializing already allocated TLS in dlopen (bug 31717)\n    \n    The old code used l_init_called as an indicator for whether TLS\n    initialization was complete.  However, it is possible that\n    TLS for an object is initialized, written to, and then dlopen\n    for this object is called again, and l_init_called is not true at\n    this point.  Previously, this resulted in TLS being initialized\n    twice, discarding any interim writes (technically introducing a\n    use-after-free bug even).\n    \n    This commit introduces an explicit per-object flag, l_tls_in_slotinfo.\n    It indicates whether _dl_add_to_slotinfo has been called for this\n    object.  This flag is used to avoid double-initialization of TLS.\n    In update_tls_slotinfo, the first_static_tls micro-optimization\n    is removed because preserving the initalization flag for subsequent\n    use by the second loop for static TLS is a bit complicated, and\n    another per-object flag does not seem to be worth it.  Furthermore,\n    the l_init_called flag is dropped from the second loop (for static\n    TLS initialization) because l_need_tls_init on its own prevents\n    double-initialization.\n    \n    The remaining l_init_called usage in resize_scopes and update_scopes\n    is just an optimization due to the use of scope_has_map, so it is\n    not changed in this commit.\n    \n    The isupper check ensures that libc.so.6 is TLS is not reverted.\n    Such a revert happens if l_need_tls_init is not cleared in\n    _dl_allocate_tls_init for the main_thread case, now that\n    l_init_called is not checked anymore in update_tls_slotinfo\n    in elf/dl-open.c.\n    \n    Reported-by: Jonathon Anderson <janderson@rice.edu>\n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit 5097cd344fd243fb8deb6dec96e8073753f962f9)\n\ndiff --git a/NEWS b/NEWS\nindex 10a125bc66..5b20efbf6c 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -10,7 +10,7 @@ Version 2.40.1\n The following bugs are resolved with this release:\n \n   [30081] resolv: Do not wait for non-existing second DNS response after error\n-  [31968] mremap implementation in C does not handle arguments correctly\n+  [31717] elf: Avoid re-initializing already allocated TLS in dlopen\n   [31890] resolv: Allow short error responses to match any DNS query\n   [31968] mremap implementation in C does not handle arguments correctly\n   [32026] strerror/strsignal TLS not handled correctly for secondary namespaces\ndiff --git a/elf/Makefile b/elf/Makefile\nindex a3475f3fb5..a03c6520d8 100644\n--- a/elf/Makefile\n+++ b/elf/Makefile\n@@ -416,6 +416,10 @@ tests += \\\n   tst-dlmopen4 \\\n   tst-dlopen-self \\\n   tst-dlopen-tlsmodid \\\n+  tst-dlopen-tlsreinit1 \\\n+  tst-dlopen-tlsreinit2 \\\n+  tst-dlopen-tlsreinit3 \\\n+  tst-dlopen-tlsreinit4 \\\n   tst-dlopenfail \\\n   tst-dlopenfail-2 \\\n   tst-dlopenrpath \\\n@@ -853,6 +857,9 @@ modules-names += \\\n   tst-dlmopen-twice-mod1 \\\n   tst-dlmopen-twice-mod2 \\\n   tst-dlmopen1mod \\\n+  tst-dlopen-tlsreinitmod1 \\\n+  tst-dlopen-tlsreinitmod2 \\\n+  tst-dlopen-tlsreinitmod3 \\\n   tst-dlopenfaillinkmod \\\n   tst-dlopenfailmod1 \\\n   tst-dlopenfailmod2 \\\n@@ -3118,3 +3125,26 @@ $(objpfx)tst-recursive-tls.out: \\\n     0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)\n $(objpfx)tst-recursive-tlsmod%.os: tst-recursive-tlsmodN.c\n \t$(compile-command.c) -DVAR=thread_$* -DFUNC=get_threadvar_$*\n+\n+# Order matters here.  The test needs the constructor for\n+# tst-dlopen-tlsreinitmod2.so to be called first.\n+LDFLAGS-tst-dlopen-tlsreinitmod1.so = -Wl,--no-as-needed\n+$(objpfx)tst-dlopen-tlsreinitmod1.so: \\\n+  $(objpfx)tst-dlopen-tlsreinitmod3.so $(objpfx)tst-dlopen-tlsreinitmod2.so\n+LDFLAGS-tst-dlopen-tlsreinit2 = -Wl,--no-as-needed\n+$(objpfx)tst-dlopen-tlsreinit2: \\\n+  $(objpfx)tst-dlopen-tlsreinitmod3.so $(objpfx)tst-dlopen-tlsreinitmod2.so\n+LDFLAGS-tst-dlopen-tlsreinit4 = -Wl,--no-as-needed\n+$(objpfx)tst-dlopen-tlsreinit4: \\\n+  $(objpfx)tst-dlopen-tlsreinitmod3.so $(objpfx)tst-dlopen-tlsreinitmod2.so\n+# tst-dlopen-tlsreinitmod2.so is underlinked and refers to\n+# tst-dlopen-tlsreinitmod3.so.  The dependency is provided via\n+# $(objpfx)tst-dlopen-tlsreinitmod1.so.\n+tst-dlopen-tlsreinitmod2.so-no-z-defs = yes\n+$(objpfx)tst-dlopen-tlsreinit.out: $(objpfx)tst-dlopen-tlsreinitmod1.so \\\n+  $(objpfx)tst-dlopen-tlsreinitmod2.so $(objpfx)tst-dlopen-tlsreinitmod3.so\n+# Reuse an audit module which provides ample debug logging.\n+$(objpfx)tst-dlopen-tlsreinit3.out: $(objpfx)tst-auditmod1.so\n+tst-dlopen-tlsreinit3-ENV = LD_AUDIT=$(objpfx)tst-auditmod1.so\n+$(objpfx)tst-dlopen-tlsreinit4.out: $(objpfx)tst-auditmod1.so\n+tst-dlopen-tlsreinit4-ENV = LD_AUDIT=$(objpfx)tst-auditmod1.so\ndiff --git a/elf/dl-open.c b/elf/dl-open.c\nindex c378da16c0..8556e7bd2f 100644\n--- a/elf/dl-open.c\n+++ b/elf/dl-open.c\n@@ -363,17 +363,8 @@ resize_tls_slotinfo (struct link_map *new)\n {\n   bool any_tls = false;\n   for (unsigned int i = 0; i < new->l_searchlist.r_nlist; ++i)\n-    {\n-      struct link_map *imap = new->l_searchlist.r_list[i];\n-\n-      /* Only add TLS memory if this object is loaded now and\n-\t therefore is not yet initialized.  */\n-      if (! imap->l_init_called && imap->l_tls_blocksize > 0)\n-\t{\n-\t  _dl_add_to_slotinfo (imap, false);\n-\t  any_tls = true;\n-\t}\n-    }\n+    if (_dl_add_to_slotinfo (new->l_searchlist.r_list[i], false))\n+      any_tls = true;\n   return any_tls;\n }\n \n@@ -383,22 +374,8 @@ resize_tls_slotinfo (struct link_map *new)\n static void\n update_tls_slotinfo (struct link_map *new)\n {\n-  unsigned int first_static_tls = new->l_searchlist.r_nlist;\n   for (unsigned int i = 0; i < new->l_searchlist.r_nlist; ++i)\n-    {\n-      struct link_map *imap = new->l_searchlist.r_list[i];\n-\n-      /* Only add TLS memory if this object is loaded now and\n-\t therefore is not yet initialized.  */\n-      if (! imap->l_init_called && imap->l_tls_blocksize > 0)\n-\t{\n-\t  _dl_add_to_slotinfo (imap, true);\n-\n-\t  if (imap->l_need_tls_init\n-\t      && first_static_tls == new->l_searchlist.r_nlist)\n-\t    first_static_tls = i;\n-\t}\n-    }\n+    _dl_add_to_slotinfo (new->l_searchlist.r_list[i], true);\n \n   size_t newgen = GL(dl_tls_generation) + 1;\n   if (__glibc_unlikely (newgen == 0))\n@@ -410,13 +387,11 @@ TLS generation counter wrapped!  Please report this.\"));\n   /* We need a second pass for static tls data, because\n      _dl_update_slotinfo must not be run while calls to\n      _dl_add_to_slotinfo are still pending.  */\n-  for (unsigned int i = first_static_tls; i < new->l_searchlist.r_nlist; ++i)\n+  for (unsigned int i = 0; i < new->l_searchlist.r_nlist; ++i)\n     {\n       struct link_map *imap = new->l_searchlist.r_list[i];\n \n-      if (imap->l_need_tls_init\n-\t  && ! imap->l_init_called\n-\t  && imap->l_tls_blocksize > 0)\n+      if (imap->l_need_tls_init && imap->l_tls_blocksize > 0)\n \t{\n \t  /* For static TLS we have to allocate the memory here and\n \t     now, but we can delay updating the DTV.  */\ndiff --git a/elf/dl-tls.c b/elf/dl-tls.c\nindex ecb966d282..3d529b722c 100644\n--- a/elf/dl-tls.c\n+++ b/elf/dl-tls.c\n@@ -632,17 +632,21 @@ _dl_allocate_tls_init (void *result, bool main_thread)\n \t     some platforms use in static programs requires it.  */\n \t  dtv[map->l_tls_modid].pointer.val = dest;\n \n-\t  /* Copy the initialization image and clear the BSS part.  For\n-\t     audit modules or dependencies with initial-exec TLS, we can not\n-\t     set the initial TLS image on default loader initialization\n-\t     because it would already be set by the audit setup.  However,\n-\t     subsequent thread creation would need to follow the default\n-\t     behaviour.   */\n+\t  /* Copy the initialization image and clear the BSS part.\n+\t     For audit modules or dependencies with initial-exec TLS,\n+\t     we can not set the initial TLS image on default loader\n+\t     initialization because it would already be set by the\n+\t     audit setup, which uses the dlopen code and already\n+\t     clears l_need_tls_init.  Calls with !main_thread from\n+\t     pthread_create need to initialze TLS for the current\n+\t     thread regardless of namespace.  */\n \t  if (map->l_ns != LM_ID_BASE && main_thread)\n \t    continue;\n \t  memset (__mempcpy (dest, map->l_tls_initimage,\n \t\t\t     map->l_tls_initimage_size), '\\0',\n \t\t  map->l_tls_blocksize - map->l_tls_initimage_size);\n+\t  if (main_thread)\n+\t    map->l_need_tls_init = 0;\n \t}\n \n       total += cnt;\n@@ -1099,9 +1103,32 @@ _dl_tls_initial_modid_limit_setup (void)\n }\n \n \n-void\n+/* Add module to slot information data.  If DO_ADD is false, only the\n+   required memory is allocated.  Must be called with\n+   GL (dl_load_tls_lock) acquired.  If the function has already been\n+   called for the link map L with !DO_ADD, then this function will not\n+   raise an exception, otherwise it is possible that it encounters a\n+   memory allocation failure.\n+\n+   Return false if L has already been added to the slotinfo data, or\n+   if L has no TLS data.  If the returned value is true, L has been\n+   added with this call (DO_ADD), or has been added in a previous call\n+   (!DO_ADD).\n+\n+   The expected usage is as follows: Call _dl_add_to_slotinfo for\n+   several link maps with DO_ADD set to false, and record if any calls\n+   result in a true result.  If there was a true result, call\n+   _dl_add_to_slotinfo again, this time with DO_ADD set to true.  (For\n+   simplicity, it's possible to call the function for link maps where\n+   the previous result was false.)  The return value from the second\n+   round of calls can be ignored.  If there was true result initially,\n+   call _dl_update_slotinfo to update the TLS generation counter.  */\n+bool\n _dl_add_to_slotinfo (struct link_map *l, bool do_add)\n {\n+  if (l->l_tls_blocksize == 0 || l->l_tls_in_slotinfo)\n+    return false;\n+\n   /* Now that we know the object is loaded successfully add\n      modules containing TLS data to the dtv info table.  We\n      might have to increase its size.  */\n@@ -1157,7 +1184,10 @@ cannot create TLS data structures\"));\n       atomic_store_relaxed (&listp->slotinfo[idx].map, l);\n       atomic_store_relaxed (&listp->slotinfo[idx].gen,\n \t\t\t    GL(dl_tls_generation) + 1);\n+      l->l_tls_in_slotinfo = true;\n     }\n+\n+  return true;\n }\n \n #if PTHREAD_IN_LIBC\ndiff --git a/elf/tst-dlopen-tlsreinit1.c b/elf/tst-dlopen-tlsreinit1.c\nnew file mode 100644\nindex 0000000000..2016b9b0c6\n--- /dev/null\n+++ b/elf/tst-dlopen-tlsreinit1.c\n@@ -0,0 +1,40 @@\n+/* Test that dlopen preserves already accessed TLS (bug 31717).\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <stdbool.h>\n+#include <support/check.h>\n+#include <support/xdlfcn.h>\n+#include <ctype.h>\n+\n+static int\n+do_test (void)\n+{\n+  void *handle = xdlopen (\"tst-dlopen-tlsreinitmod1.so\", RTLD_NOW);\n+\n+  bool *tlsreinitmod3_tested = xdlsym (handle, \"tlsreinitmod3_tested\");\n+  TEST_VERIFY (*tlsreinitmod3_tested);\n+\n+  xdlclose (handle);\n+\n+  /* This crashes if the libc.so.6 TLS image has been reverted.  */\n+  TEST_VERIFY (!isupper ('@'));\n+\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\ndiff --git a/elf/tst-dlopen-tlsreinit2.c b/elf/tst-dlopen-tlsreinit2.c\nnew file mode 100644\nindex 0000000000..90ad2c7713\n--- /dev/null\n+++ b/elf/tst-dlopen-tlsreinit2.c\n@@ -0,0 +1,39 @@\n+/* Test that dlopen preserves already accessed TLS (bug 31717).\n+   Variant with initially-linked modules.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <ctype.h>\n+#include <stdbool.h>\n+#include <support/check.h>\n+#include <support/xdlfcn.h>\n+\n+\n+static int\n+do_test (void)\n+{\n+  /* Defined in tst-dlopen-tlsreinitmod3.so.  */\n+  extern bool tlsreinitmod3_tested;\n+  TEST_VERIFY (tlsreinitmod3_tested);\n+\n+  /* This crashes if the libc.so.6 TLS image has been reverted.  */\n+  TEST_VERIFY (!isupper ('@'));\n+\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\ndiff --git a/elf/tst-dlopen-tlsreinit3.c b/elf/tst-dlopen-tlsreinit3.c\nnew file mode 100644\nindex 0000000000..79bd585aff\n--- /dev/null\n+++ b/elf/tst-dlopen-tlsreinit3.c\n@@ -0,0 +1,2 @@\n+/* Same code, but run with LD_AUDIT=tst-auditmod1.so.  */\n+#include \"tst-dlopen-tlsreinit1.c\"\ndiff --git a/elf/tst-dlopen-tlsreinit4.c b/elf/tst-dlopen-tlsreinit4.c\nnew file mode 100644\nindex 0000000000..344c9211ab\n--- /dev/null\n+++ b/elf/tst-dlopen-tlsreinit4.c\n@@ -0,0 +1,2 @@\n+/* Same code, but run with LD_AUDIT=tst-auditmod1.so.  */\n+#include \"tst-dlopen-tlsreinit2.c\"\ndiff --git a/elf/tst-dlopen-tlsreinitmod1.c b/elf/tst-dlopen-tlsreinitmod1.c\nnew file mode 100644\nindex 0000000000..354cc3de51\n--- /dev/null\n+++ b/elf/tst-dlopen-tlsreinitmod1.c\n@@ -0,0 +1,20 @@\n+/* Test that dlopen preserves already accessed TLS (bug 31717), module 1.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+/* This module triggers loading of tst-dlopen-tlsreinitmod2.so and\n+   tst-dlopen-tlsreinitmod3.so.  */\ndiff --git a/elf/tst-dlopen-tlsreinitmod2.c b/elf/tst-dlopen-tlsreinitmod2.c\nnew file mode 100644\nindex 0000000000..677e69bd35\n--- /dev/null\n+++ b/elf/tst-dlopen-tlsreinitmod2.c\n@@ -0,0 +1,30 @@\n+/* Test that dlopen preserves already accessed TLS (bug 31717), module 2.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <stdio.h>\n+\n+/* Defined in tst-dlopen-tlsreinitmod3.so.  This an underlinked symbol\n+   dependency.  */\n+extern void call_tlsreinitmod3 (void);\n+\n+static void __attribute__ ((constructor))\n+tlsreinitmod2_init (void)\n+{\n+  puts (\"info: constructor of tst-dlopen-tlsreinitmod2.so invoked\");\n+  call_tlsreinitmod3 ();\n+}\ndiff --git a/elf/tst-dlopen-tlsreinitmod3.c b/elf/tst-dlopen-tlsreinitmod3.c\nnew file mode 100644\nindex 0000000000..ef769c5131\n--- /dev/null\n+++ b/elf/tst-dlopen-tlsreinitmod3.c\n@@ -0,0 +1,102 @@\n+/* Test that dlopen preserves already accessed TLS (bug 31717), module 3.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <dlfcn.h>\n+#include <stdbool.h>\n+#include <stdio.h>\n+#include <unistd.h>\n+\n+/* Used to verify from the main program that the test ran.  */\n+bool tlsreinitmod3_tested;\n+\n+/* This TLS variable must not revert back to the initial state after\n+   dlopen.  */\n+static __thread int tlsreinitmod3_state = 1;\n+\n+/* Set from the ELF constructor during dlopen.  */\n+static bool tlsreinitmod3_constructed;\n+\n+/* Second half of test, behind a compiler barrier.  The compiler\n+   barrier is necessary to prevent carrying over TLS address\n+   information from call_tlsreinitmod3 to call_tlsreinitmod3_tail.  */\n+void call_tlsreinitmod3_tail (void *self) __attribute__ ((weak));\n+\n+/* Called from tst-dlopen-tlsreinitmod2.so.  */\n+void\n+call_tlsreinitmod3 (void)\n+{\n+  printf (\"info: call_tlsreinitmod3 invoked (state=%d)\\n\",\n+          tlsreinitmod3_state);\n+\n+  if (tlsreinitmod3_constructed)\n+    {\n+      puts (\"error: call_tlsreinitmod3 called after ELF constructor\");\n+      fflush (stdout);\n+      /* Cannot rely on test harness due to dynamic linking.  */\n+      _exit (1);\n+    }\n+\n+  tlsreinitmod3_state = 2;\n+\n+  /* Self-dlopen.  This will run the ELF constructor.   */\n+  void *self = dlopen (\"tst-dlopen-tlsreinitmod3.so\", RTLD_NOW);\n+  if (self == NULL)\n+    {\n+      printf (\"error: dlopen: %s\\n\", dlerror ());\n+      fflush (stdout);\n+      /* Cannot rely on test harness due to dynamic linking.  */\n+      _exit (1);\n+    }\n+\n+  call_tlsreinitmod3_tail (self);\n+}\n+\n+void\n+call_tlsreinitmod3_tail (void *self)\n+{\n+  printf (\"info: dlopen returned in tlsreinitmod3 (state=%d)\\n\",\n+          tlsreinitmod3_state);\n+\n+  if (!tlsreinitmod3_constructed)\n+    {\n+      puts (\"error: dlopen did not call tlsreinitmod3 ELF constructor\");\n+      fflush (stdout);\n+      /* Cannot rely on test harness due to dynamic linking.  */\n+      _exit (1);\n+    }\n+\n+  if (tlsreinitmod3_state != 2)\n+    {\n+      puts (\"error: TLS state reverted in tlsreinitmod3\");\n+      fflush (stdout);\n+      /* Cannot rely on test harness due to dynamic linking.  */\n+      _exit (1);\n+    }\n+\n+  dlclose (self);\n+\n+  /* Signal test completion to the main program.  */\n+  tlsreinitmod3_tested = true;\n+}\n+\n+static void __attribute__ ((constructor))\n+tlsreinitmod3_init (void)\n+{\n+  puts (\"info: constructor of tst-dlopen-tlsreinitmod3.so invoked\");\n+  tlsreinitmod3_constructed = true;\n+}\ndiff --git a/include/link.h b/include/link.h\nindex cb0d7d8e2f..5ed445d5a6 100644\n--- a/include/link.h\n+++ b/include/link.h\n@@ -212,6 +212,7 @@ struct link_map\n     unsigned int l_find_object_processed:1; /* Zero if _dl_find_object_update\n \t\t\t\t\t       needs to process this\n \t\t\t\t\t       lt_library map.  */\n+    unsigned int l_tls_in_slotinfo:1; /* TLS slotinfo updated in dlopen.  */\n \n     /* NODELETE status of the map.  Only valid for maps of type\n        lt_loaded.  Lazy binding sets l_nodelete_active directly,\ndiff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h\nindex 154efb0e19..259ce2e7d6 100644\n--- a/sysdeps/generic/ldsodefs.h\n+++ b/sysdeps/generic/ldsodefs.h\n@@ -1239,13 +1239,7 @@ extern void *_dl_open (const char *name, int mode, const void *caller,\n extern int _dl_scope_free (void *) attribute_hidden;\n \n \n-/* Add module to slot information data.  If DO_ADD is false, only the\n-   required memory is allocated.  Must be called with GL\n-   (dl_load_tls_lock) acquired.  If the function has already been called\n-   for the link map L with !do_add, then this function will not raise\n-   an exception, otherwise it is possible that it encounters a memory\n-   allocation failure.  */\n-extern void _dl_add_to_slotinfo (struct link_map *l, bool do_add)\n+extern bool _dl_add_to_slotinfo (struct link_map *l, bool do_add)\n   attribute_hidden;\n \n /* Update slot information data for at least the generation of the\n\ncommit f4a9b6e97bf05cf5a41907e55901f7e9afaafd4d\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Mon Sep 9 21:10:23 2024 +0200\n\n    elf: Fix tst-dlopen-tlsreinit1.out test dependency\n    \n    Fixes commit 5097cd344fd243fb8deb6dec96e8073753f962f9\n    (\"elf: Avoid re-initializing already allocated TLS in dlopen\n    (bug 31717)\").\n    \n    Reported-by: Patsy Griffin <patsy@redhat.com>\n    Reviewed-by: Patsy Griffin <patsy@redhat.com>\n    (cherry picked from commit e82a7cb1622bff08d8e3a144d7c5516a088f1cbc)\n\ndiff --git a/elf/Makefile b/elf/Makefile\nindex a03c6520d8..dc686c3bff 100644\n--- a/elf/Makefile\n+++ b/elf/Makefile\n@@ -3141,7 +3141,7 @@ $(objpfx)tst-dlopen-tlsreinit4: \\\n # tst-dlopen-tlsreinitmod3.so.  The dependency is provided via\n # $(objpfx)tst-dlopen-tlsreinitmod1.so.\n tst-dlopen-tlsreinitmod2.so-no-z-defs = yes\n-$(objpfx)tst-dlopen-tlsreinit.out: $(objpfx)tst-dlopen-tlsreinitmod1.so \\\n+$(objpfx)tst-dlopen-tlsreinit1.out: $(objpfx)tst-dlopen-tlsreinitmod1.so \\\n   $(objpfx)tst-dlopen-tlsreinitmod2.so $(objpfx)tst-dlopen-tlsreinitmod3.so\n # Reuse an audit module which provides ample debug logging.\n $(objpfx)tst-dlopen-tlsreinit3.out: $(objpfx)tst-auditmod1.so\n\ncommit adfb14e71f240a6bc2a4cbd6e6c50cc3fa1bcc3b\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Tue Sep 10 12:40:27 2024 +0200\n\n    debug: Fix read error handling in pcprofiledump\n    \n    The reading loops did not check for read failures.  Addresses\n    a static analysis report.\n    \n    Manually tested by compiling a program with the GCC's\n    -finstrument-functions option, running it with\n    “LD_PRELOAD=debug/libpcprofile.so PCPROFILE_OUTPUT=output-file”,\n    and reviewing the output of “debug/pcprofiledump output-file”.\n    \n    (cherry picked from commit 89b088bf70c651c231bf27e644270d093b8f144a)\n\ndiff --git a/debug/pcprofiledump.c b/debug/pcprofiledump.c\nindex 049a9c2744..94530f0cf9 100644\n--- a/debug/pcprofiledump.c\n+++ b/debug/pcprofiledump.c\n@@ -75,6 +75,44 @@ static struct argp argp =\n   options, parse_opt, args_doc, doc, NULL, more_help\n };\n \n+/* Try to read SIZE bytes from FD and store them on BUF.  Terminate\n+   the process upon read error.  Also terminate the process if less\n+   than SIZE bytes are remaining in the file.  If !IN_HEADER, do not\n+   terminate the process if the end of the file is encountered\n+   immediately, before any bytes are read.\n+\n+   Returns true if SIZE bytes have been read, and false if no bytes\n+   have been read due to an end-of-file condition.  */\n+static bool\n+read_exactly (int fd, void *buffer, size_t size, bool in_header)\n+{\n+  char *p = buffer;\n+  char *end = p + size;\n+  while (p < end)\n+    {\n+      ssize_t ret = TEMP_FAILURE_RETRY (read (fd, p, end - p));\n+      if (ret < 0)\n+\t{\n+\t  if (in_header)\n+\t    error (EXIT_FAILURE, errno, _(\"cannot read header\"));\n+\t  else\n+\t    error (EXIT_FAILURE, errno,  _(\"cannot read pointer pair\"));\n+\t}\n+      if (ret == 0)\n+\t{\n+\t  if (p == buffer && !in_header)\n+\t    /* Nothing has been read.  */\n+\t    return false;\n+\t  if (in_header)\n+\t    error (EXIT_FAILURE, 0, _(\"unexpected end of file in header\"));\n+\t  else\n+\t    error (EXIT_FAILURE, 0,\n+\t\t   _(\"unexpected end of file in pointer pair\"));\n+\t}\n+      p += ret;\n+    }\n+  return true;\n+}\n \n int\n main (int argc, char *argv[])\n@@ -110,8 +148,7 @@ main (int argc, char *argv[])\n   /* Read the first 4-byte word.  It contains the information about\n      the word size and the endianness.  */\n   uint32_t word;\n-  if (TEMP_FAILURE_RETRY (read (fd, &word, 4)) != 4)\n-    error (EXIT_FAILURE, errno, _(\"cannot read header\"));\n+  read_exactly (fd, &word, sizeof (word), true);\n \n   /* Check whether we have to swap the byte order.  */\n   int must_swap = (word & 0x0fffffff) == bswap_32 (0xdeb00000);\n@@ -121,56 +158,30 @@ main (int argc, char *argv[])\n   /* We have two loops, one for 32 bit pointers, one for 64 bit pointers.  */\n   if (word == 0xdeb00004)\n     {\n-      union\n-      {\n-\tuint32_t ptrs[2];\n-\tchar bytes[8];\n-      } pair;\n+      uint32_t ptrs[2];\n \n       while (1)\n \t{\n-\t  size_t len = sizeof (pair);\n-\t  size_t n;\n-\n-\t  while (len > 0\n-\t\t && (n = TEMP_FAILURE_RETRY (read (fd, &pair.bytes[8 - len],\n-\t\t\t\t\t\t   len))) != 0)\n-\t    len -= n;\n-\n-\t  if (len != 0)\n-\t    /* Nothing to read.  */\n+\t  if (!read_exactly (fd, ptrs, sizeof (ptrs), false))\n \t    break;\n \n \t  printf (\"this = %#010\" PRIx32 \", caller = %#010\" PRIx32 \"\\n\",\n-\t\t  must_swap ? bswap_32 (pair.ptrs[0]) : pair.ptrs[0],\n-\t\t  must_swap ? bswap_32 (pair.ptrs[1]) : pair.ptrs[1]);\n+\t\t  must_swap ? bswap_32 (ptrs[0]) : ptrs[0],\n+\t\t  must_swap ? bswap_32 (ptrs[1]) : ptrs[1]);\n \t}\n     }\n   else if (word == 0xdeb00008)\n     {\n-      union\n-      {\n-\tuint64_t ptrs[2];\n-\tchar bytes[16];\n-      } pair;\n+      uint64_t ptrs[2];\n \n       while (1)\n \t{\n-\t  size_t len = sizeof (pair);\n-\t  size_t n;\n-\n-\t  while (len > 0\n-\t\t && (n = TEMP_FAILURE_RETRY (read (fd, &pair.bytes[8 - len],\n-\t\t\t\t\t\t   len))) != 0)\n-\t    len -= n;\n-\n-\t  if (len != 0)\n-\t    /* Nothing to read.  */\n+\t  if (!read_exactly (fd, ptrs, sizeof (ptrs), false))\n \t    break;\n \n \t  printf (\"this = %#018\" PRIx64 \", caller = %#018\" PRIx64 \"\\n\",\n-\t\t  must_swap ? bswap_64 (pair.ptrs[0]) : pair.ptrs[0],\n-\t\t  must_swap ? bswap_64 (pair.ptrs[1]) : pair.ptrs[1]);\n+\t\t  must_swap ? bswap_64 (ptrs[0]) : ptrs[0],\n+\t\t  must_swap ? bswap_64 (ptrs[1]) : ptrs[1]);\n \t}\n     }\n   else\n\ncommit 7073164add3b874cf0c19ca0fb84236f6bb0985d\nAuthor: Siddhesh Poyarekar <siddhesh@sourceware.org>\nDate:   Tue Sep 3 14:58:33 2024 -0400\n\n    libio: Attempt wide backup free only for non-legacy code\n    \n    _wide_data and _mode are not available in legacy code, so do not attempt\n    to free the wide backup buffer in legacy code.\n    \n    Resolves: BZ #32137 and BZ #27821\n    \n    Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>\n    Reviewed-by: Florian Weimer <fweimer@redhat.com>\n    (cherry picked from commit ae4d44b1d501421ad9a3af95279b8f4d1546f1ce)\n\ndiff --git a/NEWS b/NEWS\nindex 5b20efbf6c..9033335db1 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -9,12 +9,14 @@ Version 2.40.1\n \n The following bugs are resolved with this release:\n \n+  [27821] ungetc: Fix backup buffer leak on program exit\n   [30081] resolv: Do not wait for non-existing second DNS response after error\n   [31717] elf: Avoid re-initializing already allocated TLS in dlopen\n   [31890] resolv: Allow short error responses to match any DNS query\n   [31968] mremap implementation in C does not handle arguments correctly\n   [32026] strerror/strsignal TLS not handled correctly for secondary namespaces\n   [32052] Name space violation in fortify wrappers\n+  [32137] libio: Attempt wide backup free only for non-legacy code\n \f\n Version 2.40\n \ndiff --git a/libio/genops.c b/libio/genops.c\nindex 35d8b30710..6f20d49669 100644\n--- a/libio/genops.c\n+++ b/libio/genops.c\n@@ -819,7 +819,7 @@ _IO_unbuffer_all (void)\n       /* Free up the backup area if it was ever allocated.  */\n       if (_IO_have_backup (fp))\n \t_IO_free_backup_area (fp);\n-      if (fp->_mode > 0 && _IO_have_wbackup (fp))\n+      if (!legacy && fp->_mode > 0 && _IO_have_wbackup (fp))\n \t_IO_free_wbackup_area (fp);\n \n       if (! (fp->_flags & _IO_UNBUFFERED)\n\ncommit 77018fd9f99f86a354387219fdf099915857a527\nAuthor: Sergey Kolosov <skolosov@redhat.com>\nDate:   Wed Sep 25 15:51:23 2024 +0200\n\n    stdio-common: Add new test for fdopen\n    \n    This commit adds fdopen test with all modes.\n    Reviewed-by: DJ Delorie <dj@redhat.com>\n    \n    (cherry picked from commit 1d72fa3cfa046f7293421a7e58f2a272474ea901)\n\ndiff --git a/stdio-common/Makefile b/stdio-common/Makefile\nindex a91754f52d..5af53d61fd 100644\n--- a/stdio-common/Makefile\n+++ b/stdio-common/Makefile\n@@ -207,6 +207,7 @@ tests := \\\n   tst-cookie \\\n   tst-dprintf-length \\\n   tst-fdopen \\\n+  tst-fdopen2 \\\n   tst-ferror \\\n   tst-fgets \\\n   tst-fileno \\\ndiff --git a/stdio-common/tst-fdopen2.c b/stdio-common/tst-fdopen2.c\nnew file mode 100644\nindex 0000000000..0c6625f258\n--- /dev/null\n+++ b/stdio-common/tst-fdopen2.c\n@@ -0,0 +1,246 @@\n+/* Test the fdopen function.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <stdio.h>\n+#include <errno.h>\n+#include <fcntl.h>\n+#include <support/check.h>\n+#include <support/support.h>\n+#include <support/xunistd.h>\n+#include <support/temp_file.h>\n+\n+char *tmp_dir;\n+char *path_to_file;\n+\n+void\n+prepare_tmp_dir (void)\n+{\n+  tmp_dir = support_create_temp_directory (\"tst-fdopen2\");\n+  path_to_file = xasprintf (\"%s/tst-fdopen2.txt\", tmp_dir);\n+}\n+\n+/* open temp file descriptor with mode.  */\n+int\n+open_tmp_fd (int mode)\n+{\n+  int fd = xopen (path_to_file, mode, 0644);\n+  return fd;\n+}\n+\n+\n+/* close and remove temp file with close.  */\n+void\n+close_tmp_fd (int fd)\n+{\n+  xclose (fd);\n+  xunlink (path_to_file);\n+}\n+\n+/* close and remove temp file with fclose.  */\n+void\n+close_tmp_fp (FILE *fp)\n+{\n+  fclose (fp);\n+  xunlink (path_to_file);\n+}\n+\n+/* test \"w\" fdopen mode.  */\n+void\n+do_test_fdopen_w (void)\n+{\n+  int fd, ret;\n+  FILE *fp;\n+  fd = open_tmp_fd (O_WRONLY | O_CREAT | O_TRUNC);\n+\n+  /* test mode mismatch.  */\n+  fp = fdopen (fd, \"r\");\n+  if (fp != NULL || errno != EINVAL)\n+    {\n+      close_tmp_fd (fd);\n+      FAIL_EXIT1 (\"fdopen (%d, r) should fail with EINVAL: %m\", fd);\n+    }\n+\n+  fp = fdopen (fd, \"w\");\n+  if (fp == NULL)\n+    {\n+      close_tmp_fd (fd);\n+      FAIL_EXIT1 (\"fdopen (%d, w): %m\", fd);\n+    }\n+\n+  const void *buf = \"AAAA\";\n+  ret = fwrite (buf, 1, 4, fp);\n+  if (ret != 4)\n+    {\n+      close_tmp_fp (fp);\n+      FAIL_EXIT1 (\"fwrite (): %m\");\n+    }\n+\n+  unsigned char buf2[4];\n+  rewind (fp);\n+  clearerr (fp);\n+  /* fread should fail in \"w\" mode  */\n+  ret = fread (buf2, 1, 4, fp);\n+  if (ret != 0 || ferror (fp) == 0)\n+    {\n+      close_tmp_fp (fp);\n+      FAIL_EXIT1 (\"fread should fail in \\\"w\\\" mode\");\n+    }\n+\n+  fclose (fp);\n+}\n+\n+/* test \"r\" fdopen mode. */\n+void\n+do_test_fdopen_r (void)\n+{\n+  int fd, ret;\n+  FILE *fp;\n+  fd = open_tmp_fd (O_RDONLY);\n+\n+  /* test mode mismatch. */\n+  fp = fdopen (fd, \"w\");\n+  if (fp != NULL || errno != EINVAL)\n+    {\n+      close_tmp_fd (fd);\n+      FAIL_EXIT1 (\"fdopen (%d, w) should fail with EINVAL: %m\", fd);\n+    }\n+\n+  fp = fdopen (fd, \"r\");\n+  if (fp == NULL)\n+    {\n+      close_tmp_fd (fd);\n+      FAIL_EXIT1 (\"fdopen (%d, w): %m\", fd);\n+    }\n+\n+  const void *buf = \"BBBB\";\n+  /* fwrite should fail in \"r\" mode.  */\n+  ret = fwrite (buf, 1, 4, fp);\n+  if (ret != 0 || ferror (fp) == 0)\n+    {\n+      close_tmp_fp (fp);\n+      FAIL_EXIT1 (\"fwrite should fail in \\\"r\\\" mode\");\n+    }\n+\n+  unsigned char buf2[4];\n+  ret = fread (buf2, 1, 4, fp);\n+  if (ret != 4)\n+    {\n+      close_tmp_fp (fp);\n+      FAIL_EXIT1 (\"fread (): %m\");\n+    }\n+\n+  fclose (fp);\n+}\n+\n+/* test \"a\" fdopen mode.  */\n+void\n+do_test_fdopen_a (void)\n+{\n+  int fd, ret;\n+  FILE *fp;\n+  fd = open_tmp_fd (O_WRONLY | O_CREAT | O_APPEND);\n+\n+  /* test mode mismatch.  */\n+  fp = fdopen (fd, \"r+\");\n+  if (fp != NULL || errno != EINVAL)\n+    {\n+      close_tmp_fd (fd);\n+      FAIL_EXIT1 (\"fdopen (%d, \\\"r+\\\") should fail with EINVAL: %m\", fd);\n+    }\n+\n+  fp = fdopen (fd, \"a\");\n+  if (fp == NULL)\n+    {\n+      close_tmp_fd (fd);\n+      FAIL_EXIT1 (\"fdopen (%d, w): %m\", fd);\n+    }\n+\n+  const void *buf = \"CCCC\";\n+  ret = fwrite (buf, 1, 4, fp);\n+  if (ret != 4)\n+    {\n+      close_tmp_fp (fp);\n+      FAIL_EXIT1 (\"fwrite (): %m\");\n+    }\n+\n+  /* fread should fail in \"a\" mode.  */\n+  unsigned char buf2[4];\n+  clearerr (fp);\n+  ret = fread (buf2, 1, 4, fp);\n+  if (ret != 0 || ferror (fp) == 0)\n+    {\n+      close_tmp_fp (fp);\n+      FAIL_EXIT1 (\"fread should fail \\\"a\\\" mode\");\n+    }\n+\n+  fclose (fp);\n+}\n+\n+void\n+do_test_fdopen_mode (int mode, const char *fmode)\n+{\n+  int fd, ret;\n+  FILE *fp;\n+  fd = open_tmp_fd (mode);\n+\n+  fp = fdopen (fd, fmode);\n+  if (fp == NULL)\n+    {\n+      close_tmp_fd (fd);\n+      FAIL_EXIT1 (\"fdopen (%d, %s): %m\", fd, fmode);\n+    }\n+\n+  const void *buf = \"EEEE\";\n+  ret = fwrite (buf, 1, 4, fp);\n+  if (ret != 4)\n+    {\n+      close_tmp_fp (fp);\n+      FAIL_EXIT1 (\"fwrite () in mode:%s returns %d: %m\", fmode, ret);\n+    }\n+\n+  rewind (fp);\n+  unsigned char buf2[4];\n+  ret = fread (buf2, 1, 4, fp);\n+  if (ret != 4)\n+    {\n+      close_tmp_fp (fp);\n+      FAIL_EXIT1 (\"fread () in mode:%s returns %d: %m\", fmode, ret);\n+    }\n+\n+  fclose (fp);\n+}\n+\n+static int\n+do_test (void)\n+{\n+\n+  prepare_tmp_dir ();\n+\n+  do_test_fdopen_w ();\n+  do_test_fdopen_r ();\n+  do_test_fdopen_a ();\n+\n+  /* test r+ w+ a+ fdopen modes.  */\n+  do_test_fdopen_mode (O_RDWR, \"r+\");\n+  do_test_fdopen_mode (O_RDWR | O_CREAT | O_TRUNC, \"w+\");\n+  do_test_fdopen_mode (O_RDWR | O_CREAT | O_APPEND, \"a+\");\n+  xunlink (path_to_file);\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\n\ncommit 61b6464f8d72aef520ee769a2ae317b4f68d5e1d\nAuthor: Joseph Myers <josmyers@redhat.com>\nDate:   Tue Sep 24 14:06:22 2024 +0000\n\n    Add tests of fread\n    \n    There seem to be no glibc tests specifically for the fread function.\n    Add basic tests of that function.\n    \n    Tested for x86_64.\n    \n    (cherry picked from commit d14c977c65aac7db35bb59380ef99d6582c4f930)\n\ndiff --git a/stdio-common/Makefile b/stdio-common/Makefile\nindex 5af53d61fd..3396090be1 100644\n--- a/stdio-common/Makefile\n+++ b/stdio-common/Makefile\n@@ -217,6 +217,7 @@ tests := \\\n   tst-fmemopen4 \\\n   tst-fphex \\\n   tst-fphex-wide \\\n+  tst-fread \\\n   tst-fseek \\\n   tst-fwrite \\\n   tst-gets \\\ndiff --git a/stdio-common/tst-fread.c b/stdio-common/tst-fread.c\nnew file mode 100644\nindex 0000000000..4d9a7895f6\n--- /dev/null\n+++ b/stdio-common/tst-fread.c\n@@ -0,0 +1,134 @@\n+/* Test fread.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <stdio.h>\n+#include <stdlib.h>\n+#include <string.h>\n+\n+#include <support/check.h>\n+#include <support/support.h>\n+#include <support/temp_file.h>\n+#include <support/test-driver.h>\n+#include <support/xstdio.h>\n+#include <support/xunistd.h>\n+\n+int\n+do_test (void)\n+{\n+  char *temp_dir = support_create_temp_directory (\"tst-fread\");\n+  char *file1 = xasprintf (\"%s/file1\", temp_dir);\n+  support_write_file_string (file1, \"file1\");\n+  add_temp_file (file1);\n+  FILE *fp;\n+  size_t ret;\n+  char buf[1024];\n+\n+  verbose_printf (\"test single-byte reads\\n\");\n+  fp = xfopen (file1, \"r\");\n+  memset (buf, 0, sizeof buf);\n+  ret = fread (buf, 1, 2, fp);\n+  TEST_COMPARE (ret, 2);\n+  TEST_COMPARE (buf[0], 'f');\n+  TEST_COMPARE (buf[1], 'i');\n+  TEST_COMPARE (feof (fp), 0);\n+  TEST_COMPARE (ftell (fp), 2);\n+  memset (buf, 0, sizeof buf);\n+  ret = fread (buf, 1, 3, fp);\n+  TEST_COMPARE (ret, 3);\n+  TEST_COMPARE (buf[0], 'l');\n+  TEST_COMPARE (buf[1], 'e');\n+  TEST_COMPARE (buf[2], '1');\n+  TEST_COMPARE (ftell (fp), 5);\n+  TEST_COMPARE (feof (fp), 0);\n+  memset (buf, 0, sizeof buf);\n+  ret = fread (buf, 1, 1, fp);\n+  TEST_COMPARE (ret, 0);\n+  TEST_COMPARE (!!feof (fp), 1);\n+  TEST_COMPARE (ferror (fp), 0);\n+  TEST_COMPARE (ftell (fp), 5);\n+  xfclose (fp);\n+\n+  verbose_printf (\"test single-byte reads, EOF part way through\\n\");\n+  fp = xfopen (file1, \"r\");\n+  memset (buf, 0, sizeof buf);\n+  ret = fread (buf, 1, sizeof buf, fp);\n+  TEST_COMPARE (ret, 5);\n+  TEST_COMPARE (buf[0], 'f');\n+  TEST_COMPARE (buf[1], 'i');\n+  TEST_COMPARE (buf[2], 'l');\n+  TEST_COMPARE (buf[3], 'e');\n+  TEST_COMPARE (buf[4], '1');\n+  TEST_COMPARE (!!feof (fp), 1);\n+  TEST_COMPARE (ferror (fp), 0);\n+  TEST_COMPARE (ftell (fp), 5);\n+  xfclose (fp);\n+\n+  verbose_printf (\"test multi-byte reads\\n\");\n+  fp = xfopen (file1, \"r\");\n+  memset (buf, 0, sizeof buf);\n+  ret = fread (buf, 2, 2, fp);\n+  TEST_COMPARE (ret, 2);\n+  TEST_COMPARE (buf[0], 'f');\n+  TEST_COMPARE (buf[1], 'i');\n+  TEST_COMPARE (buf[2], 'l');\n+  TEST_COMPARE (buf[3], 'e');\n+  TEST_COMPARE (feof (fp), 0);\n+  TEST_COMPARE (ftell (fp), 4);\n+  memset (buf, 0, sizeof buf);\n+  ret = fread (buf, 3, 3, fp);\n+  TEST_COMPARE (ret, 0);\n+  /* The bytes written for a partial element read are unspecified.  */\n+  TEST_COMPARE (!!feof (fp), 1);\n+  TEST_COMPARE (ferror (fp), 0);\n+  TEST_COMPARE (ftell (fp), 5);\n+  xfclose (fp);\n+\n+  verbose_printf (\"test read error\\n\");\n+  fp = xfopen (file1, \"r\");\n+  xclose (fileno (fp));\n+  memset (buf, 0, sizeof buf);\n+  ret = fread (buf, 1, sizeof buf, fp);\n+  TEST_COMPARE (ret, 0);\n+  TEST_COMPARE (feof (fp), 0);\n+  TEST_COMPARE (!!ferror (fp), 1);\n+  fclose (fp);\n+\n+  verbose_printf (\"test zero size\\n\");\n+  fp = xfopen (file1, \"r\");\n+  ret = fread (buf, 0, SIZE_MAX, fp);\n+  TEST_COMPARE (ret, 0);\n+  TEST_COMPARE (feof (fp), 0);\n+  TEST_COMPARE (ferror (fp), 0);\n+  TEST_COMPARE (ftell (fp), 0);\n+  xfclose (fp);\n+\n+  verbose_printf (\"test zero items\\n\");\n+  fp = xfopen (file1, \"r\");\n+  ret = fread (buf, SIZE_MAX, 0, fp);\n+  TEST_COMPARE (ret, 0);\n+  TEST_COMPARE (feof (fp), 0);\n+  TEST_COMPARE (ferror (fp), 0);\n+  TEST_COMPARE (ftell (fp), 0);\n+  xfclose (fp);\n+\n+  free (temp_dir);\n+  free (file1);\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\n\ncommit 9bc76c7ca4d6022fd588c274d139813f99e04f35\nAuthor: Joseph Myers <josmyers@redhat.com>\nDate:   Wed Aug 14 17:15:46 2024 +0000\n\n    Test errno setting on strtod overflow in tst-strtod-round\n    \n    We have no tests that errno is set to ERANGE on overflow of\n    strtod-family functions (we do have some tests for underflow, in\n    tst-strtod-underflow).  Add such tests to tst-strtod-round.\n    \n    Tested for x86_64.\n    \n    (cherry picked from commit 207d64feb26279e152c50744e3c37e68491aca99)\n\ndiff --git a/stdlib/tst-strtod-round-skeleton.c b/stdlib/tst-strtod-round-skeleton.c\nindex 6fba4b5228..c3cc0201d4 100644\n--- a/stdlib/tst-strtod-round-skeleton.c\n+++ b/stdlib/tst-strtod-round-skeleton.c\n@@ -21,6 +21,7 @@\n    declared in the headers.  */\n #define _LIBC_TEST 1\n #define __STDC_WANT_IEC_60559_TYPES_EXT__\n+#include <errno.h>\n #include <fenv.h>\n #include <float.h>\n #include <math.h>\n@@ -205,7 +206,9 @@ struct test {\n #define GEN_ONE_TEST(FSUF, FTYPE, FTOSTR, LSUF, CSUF)\t\t\\\n {\t\t\t\t\t\t\t\t\\\n   feclearexcept (FE_ALL_EXCEPT);\t\t\t\t\\\n+  errno = 0;\t\t\t\t\t\t\t\\\n   FTYPE f = STRTO (FSUF) (s, NULL);\t\t\t\t\\\n+  int new_errno = errno;\t\t\t\t\t\\\n   if (f != expected->FSUF\t\t\t\t\t\\\n       || (copysign ## CSUF) (1.0 ## LSUF, f)\t\t\t\\\n \t != (copysign ## CSUF) (1.0 ## LSUF, expected->FSUF))\t\\\n@@ -254,6 +257,14 @@ struct test {\n \t\tprintf (\"ignoring this exception error\\n\");\t\\\n \t    }\t\t\t\t\t\t\t\\\n \t}\t\t\t\t\t\t\t\\\n+      if (overflow->FSUF && new_errno != ERANGE)\t\t\\\n+\t{\t\t\t\t\t\t\t\\\n+\t  printf (FNPFXS \"to\" #FSUF\t\t\t\t\\\n+\t\t  \" (\" STRM \") left errno == %d,\"\t\t\\\n+\t\t  \" not %d (ERANGE)\\n\",\t\t\t\t\\\n+\t\t  s, new_errno, ERANGE);\t\t\t\\\n+\t  result = 1;\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\\\n     }\t\t\t\t\t\t\t\t\\\n }\n \n\ncommit e06153665fa931e4c7d2a3ecc14e5197e96143a7\nAuthor: Joseph Myers <josmyers@redhat.com>\nDate:   Tue Aug 27 12:38:01 2024 +0000\n\n    More thoroughly test underflow / errno in tst-strtod-round\n    \n    Add tests of underflow in tst-strtod-round, and thus also test for\n    errno being unchanged when there is neither overflow nor underflow.\n    The errno setting before the function call to test for being unchanged\n    is adjusted to set errno to 12345 instead of 0, so that any bugs where\n    strtod sets errno to 0 would be detected.\n    \n    This doesn't add any new test inputs for tst-strtod-round, and in\n    particular doesn't cover the edge cases of underflow the way\n    tst-strtod-underflow does (none of the existing test inputs for\n    tst-strtod-round actually exercise cases that have underflow with\n    before-rounding tininess detection but not with after-rounding\n    tininess detection), but at least it provides some coverage (as per\n    the recent discussions) that ordinary non-overflowing non-underflowing\n    inputs to these functions do not set errno.\n    \n    Tested for x86_64.\n    \n    (cherry picked from commit d73ed2601b7c3c93c3529149a3d7f7b6177900a8)\n\ndiff --git a/stdlib/gen-tst-strtod-round.c b/stdlib/gen-tst-strtod-round.c\nindex e48bf4d6ea..7ce735f81d 100644\n--- a/stdlib/gen-tst-strtod-round.c\n+++ b/stdlib/gen-tst-strtod-round.c\n@@ -46,6 +46,7 @@ static int\n string_to_fp (mpfr_t f, const char *s, mpfr_rnd_t rnd)\n {\n   mpfr_clear_overflow ();\n+  mpfr_clear_underflow ();\n #ifdef WORKAROUND\n   mpfr_t f2;\n   mpfr_init2 (f2, 100000);\n@@ -53,12 +54,16 @@ string_to_fp (mpfr_t f, const char *s, mpfr_rnd_t rnd)\n   int r = mpfr_set (f, f2, rnd);\n   r |= mpfr_subnormalize (f, r, rnd);\n   mpfr_clear (f2);\n-  return r0 | r;\n+  r |= r0;\n #else\n   int r = mpfr_strtofr (f, s, NULL, 0, rnd);\n   r |= mpfr_subnormalize (f, r, rnd);\n-  return r;\n #endif\n+  if (r == 0)\n+    /* The MPFR underflow flag is set for exact subnormal results,\n+       which is not wanted here.  */\n+    mpfr_clear_underflow ();\n+  return r;\n }\n \n void\n@@ -70,6 +75,21 @@ print_fp (FILE *fout, mpfr_t f, const char *suffix)\n     mpfr_fprintf (fout, \"\\t%Ra%s\", f, suffix);\n }\n \n+static const char *\n+suffix_to_print (bool overflow, bool underflow, bool underflow_before_rounding,\n+\t\t bool with_comma)\n+{\n+  if (overflow)\n+    return with_comma ? \", true, false,\\n\" : \", true, false\";\n+  if (underflow)\n+    return with_comma ? \", false, true,\\n\" : \", false, true\";\n+  if (underflow_before_rounding)\n+    return (with_comma\n+\t    ? \", false, !TININESS_AFTER_ROUNDING,\\n\"\n+\t    : \", false, !TININESS_AFTER_ROUNDING\");\n+  return with_comma ? \", false, false,\\n\" : \", false, false\";\n+}\n+\n static void\n round_str (FILE *fout, const char *s, int prec, int emin, int emax,\n \t   bool ibm_ld)\n@@ -80,8 +100,11 @@ round_str (FILE *fout, const char *s, int prec, int emin, int emax,\n   mpfr_set_emin (emin);\n   mpfr_set_emax (emax);\n   mpfr_init (f);\n+  string_to_fp (f, s, MPFR_RNDZ);\n+  bool underflow_before_rounding = mpfr_underflow_p () != 0;\n   int r = string_to_fp (f, s, MPFR_RNDD);\n   bool overflow = mpfr_overflow_p () != 0;\n+  bool underflow = mpfr_underflow_p () != 0;\n   if (ibm_ld)\n     {\n       assert (prec == 106 && emin == -1073 && emax == 1024);\n@@ -97,19 +120,27 @@ round_str (FILE *fout, const char *s, int prec, int emin, int emax,\n \t}\n     }\n   mpfr_fprintf (fout, \"\\t%s,\\n\", r ? \"false\" : \"true\");\n-  print_fp (fout, f, overflow ? \", true,\\n\" : \", false,\\n\");\n+  print_fp (fout, f,\n+\t    suffix_to_print (overflow, underflow, underflow_before_rounding,\n+\t\t\t     true));\n   string_to_fp (f, s, MPFR_RNDN);\n   overflow = (mpfr_overflow_p () != 0\n \t      || (ibm_ld && mpfr_cmpabs (f, max_value) > 0));\n-  print_fp (fout, f, overflow ? \", true,\\n\" : \", false,\\n\");\n+  print_fp (fout, f,\n+\t    suffix_to_print (overflow, underflow, underflow_before_rounding,\n+\t\t\t     true));\n   string_to_fp (f, s, MPFR_RNDZ);\n   overflow = (mpfr_overflow_p () != 0\n \t      || (ibm_ld && mpfr_cmpabs (f, max_value) > 0));\n-  print_fp (fout, f, overflow ? \", true,\\n\" : \", false,\\n\");\n+  print_fp (fout, f,\n+\t    suffix_to_print (overflow, underflow, underflow_before_rounding,\n+\t\t\t     true));\n   string_to_fp (f, s, MPFR_RNDU);\n   overflow = (mpfr_overflow_p () != 0\n \t      || (ibm_ld && mpfr_cmpabs (f, max_value) > 0));\n-  print_fp (fout, f, overflow ? \", true\" : \", false\");\n+  print_fp (fout, f,\n+\t    suffix_to_print (overflow, underflow, underflow_before_rounding,\n+\t\t\t     false));\n   mpfr_clear (f);\n   if (ibm_ld)\n     mpfr_clear (max_value);\ndiff --git a/stdlib/tst-strtod-round-data.h b/stdlib/tst-strtod-round-data.h\nindex 8899d15f9b..13e62dd2b0 100644\n--- a/stdlib/tst-strtod-round-data.h\n+++ b/stdlib/tst-strtod-round-data.h\n@@ -2,1852 +2,1852 @@\n static const struct test tests[] = {\n   TEST (\"3.518437208883201171875E+013\",\n \tfalse,\n-\t0x2p+44, false,\n-\t0x2p+44, false,\n-\t0x2p+44, false,\n-\t0x2.000004p+44, false,\n-\tfalse,\n-\t0x2.0000000000002p+44, false,\n-\t0x2.0000000000004p+44, false,\n-\t0x2.0000000000002p+44, false,\n-\t0x2.0000000000004p+44, false,\n-\ttrue,\n-\t0x2.0000000000003p+44, false,\n-\t0x2.0000000000003p+44, false,\n-\t0x2.0000000000003p+44, false,\n-\t0x2.0000000000003p+44, false,\n-\ttrue,\n-\t0x2.0000000000003p+44, false,\n-\t0x2.0000000000003p+44, false,\n-\t0x2.0000000000003p+44, false,\n-\t0x2.0000000000003p+44, false,\n-\ttrue,\n-\t0x2.0000000000003p+44, false,\n-\t0x2.0000000000003p+44, false,\n-\t0x2.0000000000003p+44, false,\n-\t0x2.0000000000003p+44, false,\n-\ttrue,\n-\t0x2.0000000000003p+44, false,\n-\t0x2.0000000000003p+44, false,\n-\t0x2.0000000000003p+44, false,\n-\t0x2.0000000000003p+44, false),\n+\t0x2p+44, false, false,\n+\t0x2p+44, false, false,\n+\t0x2p+44, false, false,\n+\t0x2.000004p+44, false, false,\n+\tfalse,\n+\t0x2.0000000000002p+44, false, false,\n+\t0x2.0000000000004p+44, false, false,\n+\t0x2.0000000000002p+44, false, false,\n+\t0x2.0000000000004p+44, false, false,\n+\ttrue,\n+\t0x2.0000000000003p+44, false, false,\n+\t0x2.0000000000003p+44, false, false,\n+\t0x2.0000000000003p+44, false, false,\n+\t0x2.0000000000003p+44, false, false,\n+\ttrue,\n+\t0x2.0000000000003p+44, false, false,\n+\t0x2.0000000000003p+44, false, false,\n+\t0x2.0000000000003p+44, false, false,\n+\t0x2.0000000000003p+44, false, false,\n+\ttrue,\n+\t0x2.0000000000003p+44, false, false,\n+\t0x2.0000000000003p+44, false, false,\n+\t0x2.0000000000003p+44, false, false,\n+\t0x2.0000000000003p+44, false, false,\n+\ttrue,\n+\t0x2.0000000000003p+44, false, false,\n+\t0x2.0000000000003p+44, false, false,\n+\t0x2.0000000000003p+44, false, false,\n+\t0x2.0000000000003p+44, false, false),\n   TEST (\"1.00000005960464477550\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.0000010000001p+0, false,\n-\tfalse,\n-\t0x1.0000010000000002p+0, false,\n-\t0x1.0000010000000002p+0, false,\n-\t0x1.0000010000000002p+0, false,\n-\t0x1.0000010000000004p+0, false,\n-\tfalse,\n-\t0x1.0000010000000002p+0, false,\n-\t0x1.0000010000000002p+0, false,\n-\t0x1.0000010000000002p+0, false,\n-\t0x1.0000010000000004p+0, false,\n-\tfalse,\n-\t0x1.0000010000000002048242f2ffp+0, false,\n-\t0x1.0000010000000002048242f2ff8p+0, false,\n-\t0x1.0000010000000002048242f2ffp+0, false,\n-\t0x1.0000010000000002048242f2ff8p+0, false,\n-\tfalse,\n-\t0x1.0000010000000002048242f2ff66p+0, false,\n-\t0x1.0000010000000002048242f2ff67p+0, false,\n-\t0x1.0000010000000002048242f2ff66p+0, false,\n-\t0x1.0000010000000002048242f2ff67p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.0000010000001p+0, false, false,\n+\tfalse,\n+\t0x1.0000010000000002p+0, false, false,\n+\t0x1.0000010000000002p+0, false, false,\n+\t0x1.0000010000000002p+0, false, false,\n+\t0x1.0000010000000004p+0, false, false,\n+\tfalse,\n+\t0x1.0000010000000002p+0, false, false,\n+\t0x1.0000010000000002p+0, false, false,\n+\t0x1.0000010000000002p+0, false, false,\n+\t0x1.0000010000000004p+0, false, false,\n+\tfalse,\n+\t0x1.0000010000000002048242f2ffp+0, false, false,\n+\t0x1.0000010000000002048242f2ff8p+0, false, false,\n+\t0x1.0000010000000002048242f2ffp+0, false, false,\n+\t0x1.0000010000000002048242f2ff8p+0, false, false,\n+\tfalse,\n+\t0x1.0000010000000002048242f2ff66p+0, false, false,\n+\t0x1.0000010000000002048242f2ff67p+0, false, false,\n+\t0x1.0000010000000002048242f2ff66p+0, false, false,\n+\t0x1.0000010000000002048242f2ff67p+0, false, false),\n   TEST (\"1.0000000596046447755\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.0000010000001p+0, false,\n-\tfalse,\n-\t0x1.0000010000000002p+0, false,\n-\t0x1.0000010000000002p+0, false,\n-\t0x1.0000010000000002p+0, false,\n-\t0x1.0000010000000004p+0, false,\n-\tfalse,\n-\t0x1.0000010000000002p+0, false,\n-\t0x1.0000010000000002p+0, false,\n-\t0x1.0000010000000002p+0, false,\n-\t0x1.0000010000000004p+0, false,\n-\tfalse,\n-\t0x1.0000010000000002048242f2ffp+0, false,\n-\t0x1.0000010000000002048242f2ff8p+0, false,\n-\t0x1.0000010000000002048242f2ffp+0, false,\n-\t0x1.0000010000000002048242f2ff8p+0, false,\n-\tfalse,\n-\t0x1.0000010000000002048242f2ff66p+0, false,\n-\t0x1.0000010000000002048242f2ff67p+0, false,\n-\t0x1.0000010000000002048242f2ff66p+0, false,\n-\t0x1.0000010000000002048242f2ff67p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.0000010000001p+0, false, false,\n+\tfalse,\n+\t0x1.0000010000000002p+0, false, false,\n+\t0x1.0000010000000002p+0, false, false,\n+\t0x1.0000010000000002p+0, false, false,\n+\t0x1.0000010000000004p+0, false, false,\n+\tfalse,\n+\t0x1.0000010000000002p+0, false, false,\n+\t0x1.0000010000000002p+0, false, false,\n+\t0x1.0000010000000002p+0, false, false,\n+\t0x1.0000010000000004p+0, false, false,\n+\tfalse,\n+\t0x1.0000010000000002048242f2ffp+0, false, false,\n+\t0x1.0000010000000002048242f2ff8p+0, false, false,\n+\t0x1.0000010000000002048242f2ffp+0, false, false,\n+\t0x1.0000010000000002048242f2ff8p+0, false, false,\n+\tfalse,\n+\t0x1.0000010000000002048242f2ff66p+0, false, false,\n+\t0x1.0000010000000002048242f2ff67p+0, false, false,\n+\t0x1.0000010000000002048242f2ff66p+0, false, false,\n+\t0x1.0000010000000002048242f2ff67p+0, false, false),\n   TEST (\"1.000000059604644776\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.0000010000001p+0, false,\n-\tfalse,\n-\t0x1.000001000000000ap+0, false,\n-\t0x1.000001000000000cp+0, false,\n-\t0x1.000001000000000ap+0, false,\n-\t0x1.000001000000000cp+0, false,\n-\tfalse,\n-\t0x1.000001000000000ap+0, false,\n-\t0x1.000001000000000cp+0, false,\n-\t0x1.000001000000000ap+0, false,\n-\t0x1.000001000000000cp+0, false,\n-\tfalse,\n-\t0x1.000001000000000b3db12bdc21p+0, false,\n-\t0x1.000001000000000b3db12bdc21p+0, false,\n-\t0x1.000001000000000b3db12bdc21p+0, false,\n-\t0x1.000001000000000b3db12bdc218p+0, false,\n-\tfalse,\n-\t0x1.000001000000000b3db12bdc213cp+0, false,\n-\t0x1.000001000000000b3db12bdc213dp+0, false,\n-\t0x1.000001000000000b3db12bdc213cp+0, false,\n-\t0x1.000001000000000b3db12bdc213dp+0, false),\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.0000010000001p+0, false, false,\n+\tfalse,\n+\t0x1.000001000000000ap+0, false, false,\n+\t0x1.000001000000000cp+0, false, false,\n+\t0x1.000001000000000ap+0, false, false,\n+\t0x1.000001000000000cp+0, false, false,\n+\tfalse,\n+\t0x1.000001000000000ap+0, false, false,\n+\t0x1.000001000000000cp+0, false, false,\n+\t0x1.000001000000000ap+0, false, false,\n+\t0x1.000001000000000cp+0, false, false,\n+\tfalse,\n+\t0x1.000001000000000b3db12bdc21p+0, false, false,\n+\t0x1.000001000000000b3db12bdc21p+0, false, false,\n+\t0x1.000001000000000b3db12bdc21p+0, false, false,\n+\t0x1.000001000000000b3db12bdc218p+0, false, false,\n+\tfalse,\n+\t0x1.000001000000000b3db12bdc213cp+0, false, false,\n+\t0x1.000001000000000b3db12bdc213dp+0, false, false,\n+\t0x1.000001000000000b3db12bdc213cp+0, false, false,\n+\t0x1.000001000000000b3db12bdc213dp+0, false, false),\n   TEST (\"1.000000059604644775\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.000000fffffffp+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000000fffffffp+0, false,\n-\t0x1.000001p+0, false,\n-\tfalse,\n-\t0x1.000000fffffffff8p+0, false,\n-\t0x1.000000fffffffff8p+0, false,\n-\t0x1.000000fffffffff8p+0, false,\n-\t0x1.000000fffffffffap+0, false,\n-\tfalse,\n-\t0x1.000000fffffffff8p+0, false,\n-\t0x1.000000fffffffff8p+0, false,\n-\t0x1.000000fffffffff8p+0, false,\n-\t0x1.000000fffffffffap+0, false,\n-\tfalse,\n-\t0x1.000000fffffffff8cb535a09dd8p+0, false,\n-\t0x1.000000fffffffff8cb535a09dd8p+0, false,\n-\t0x1.000000fffffffff8cb535a09dd8p+0, false,\n-\t0x1.000000fffffffff8cb535a09dep+0, false,\n-\tfalse,\n-\t0x1.000000fffffffff8cb535a09dd9p+0, false,\n-\t0x1.000000fffffffff8cb535a09dd91p+0, false,\n-\t0x1.000000fffffffff8cb535a09dd9p+0, false,\n-\t0x1.000000fffffffff8cb535a09dd91p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffffp+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000000fffffffp+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffffff8p+0, false, false,\n+\t0x1.000000fffffffff8p+0, false, false,\n+\t0x1.000000fffffffff8p+0, false, false,\n+\t0x1.000000fffffffffap+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffffff8p+0, false, false,\n+\t0x1.000000fffffffff8p+0, false, false,\n+\t0x1.000000fffffffff8p+0, false, false,\n+\t0x1.000000fffffffffap+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffffff8cb535a09dd8p+0, false, false,\n+\t0x1.000000fffffffff8cb535a09dd8p+0, false, false,\n+\t0x1.000000fffffffff8cb535a09dd8p+0, false, false,\n+\t0x1.000000fffffffff8cb535a09dep+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffffff8cb535a09dd9p+0, false, false,\n+\t0x1.000000fffffffff8cb535a09dd91p+0, false, false,\n+\t0x1.000000fffffffff8cb535a09dd9p+0, false, false,\n+\t0x1.000000fffffffff8cb535a09dd91p+0, false, false),\n   TEST (\"1.00000005960464478\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.0000010000001p+0, false,\n-\tfalse,\n-\t0x1.0000010000000054p+0, false,\n-\t0x1.0000010000000056p+0, false,\n-\t0x1.0000010000000054p+0, false,\n-\t0x1.0000010000000056p+0, false,\n-\tfalse,\n-\t0x1.0000010000000054p+0, false,\n-\t0x1.0000010000000056p+0, false,\n-\t0x1.0000010000000054p+0, false,\n-\t0x1.0000010000000056p+0, false,\n-\tfalse,\n-\t0x1.0000010000000055072873252f8p+0, false,\n-\t0x1.0000010000000055072873253p+0, false,\n-\t0x1.0000010000000055072873252f8p+0, false,\n-\t0x1.0000010000000055072873253p+0, false,\n-\tfalse,\n-\t0x1.0000010000000055072873252febp+0, false,\n-\t0x1.0000010000000055072873252febp+0, false,\n-\t0x1.0000010000000055072873252febp+0, false,\n-\t0x1.0000010000000055072873252fecp+0, false),\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.0000010000001p+0, false, false,\n+\tfalse,\n+\t0x1.0000010000000054p+0, false, false,\n+\t0x1.0000010000000056p+0, false, false,\n+\t0x1.0000010000000054p+0, false, false,\n+\t0x1.0000010000000056p+0, false, false,\n+\tfalse,\n+\t0x1.0000010000000054p+0, false, false,\n+\t0x1.0000010000000056p+0, false, false,\n+\t0x1.0000010000000054p+0, false, false,\n+\t0x1.0000010000000056p+0, false, false,\n+\tfalse,\n+\t0x1.0000010000000055072873252f8p+0, false, false,\n+\t0x1.0000010000000055072873253p+0, false, false,\n+\t0x1.0000010000000055072873252f8p+0, false, false,\n+\t0x1.0000010000000055072873253p+0, false, false,\n+\tfalse,\n+\t0x1.0000010000000055072873252febp+0, false, false,\n+\t0x1.0000010000000055072873252febp+0, false, false,\n+\t0x1.0000010000000055072873252febp+0, false, false,\n+\t0x1.0000010000000055072873252fecp+0, false, false),\n   TEST (\"1.0000000596046448\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.0000010000001p+0, false,\n-\tfalse,\n-\t0x1.00000100000001c4p+0, false,\n-\t0x1.00000100000001c6p+0, false,\n-\t0x1.00000100000001c4p+0, false,\n-\t0x1.00000100000001c6p+0, false,\n-\tfalse,\n-\t0x1.00000100000001c4p+0, false,\n-\t0x1.00000100000001c6p+0, false,\n-\t0x1.00000100000001c4p+0, false,\n-\t0x1.00000100000001c6p+0, false,\n-\tfalse,\n-\t0x1.00000100000001c5f67cd79279p+0, false,\n-\t0x1.00000100000001c5f67cd792798p+0, false,\n-\t0x1.00000100000001c5f67cd79279p+0, false,\n-\t0x1.00000100000001c5f67cd792798p+0, false,\n-\tfalse,\n-\t0x1.00000100000001c5f67cd7927953p+0, false,\n-\t0x1.00000100000001c5f67cd7927954p+0, false,\n-\t0x1.00000100000001c5f67cd7927953p+0, false,\n-\t0x1.00000100000001c5f67cd7927954p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.0000010000001p+0, false, false,\n+\tfalse,\n+\t0x1.00000100000001c4p+0, false, false,\n+\t0x1.00000100000001c6p+0, false, false,\n+\t0x1.00000100000001c4p+0, false, false,\n+\t0x1.00000100000001c6p+0, false, false,\n+\tfalse,\n+\t0x1.00000100000001c4p+0, false, false,\n+\t0x1.00000100000001c6p+0, false, false,\n+\t0x1.00000100000001c4p+0, false, false,\n+\t0x1.00000100000001c6p+0, false, false,\n+\tfalse,\n+\t0x1.00000100000001c5f67cd79279p+0, false, false,\n+\t0x1.00000100000001c5f67cd792798p+0, false, false,\n+\t0x1.00000100000001c5f67cd79279p+0, false, false,\n+\t0x1.00000100000001c5f67cd792798p+0, false, false,\n+\tfalse,\n+\t0x1.00000100000001c5f67cd7927953p+0, false, false,\n+\t0x1.00000100000001c5f67cd7927954p+0, false, false,\n+\t0x1.00000100000001c5f67cd7927953p+0, false, false,\n+\t0x1.00000100000001c5f67cd7927954p+0, false, false),\n   TEST (\"1.000000059604645\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.0000010000001p+0, false,\n-\t0x1.0000010000001p+0, false,\n-\t0x1.0000010000001p+0, false,\n-\t0x1.0000010000002p+0, false,\n-\tfalse,\n-\t0x1.000001000000102ep+0, false,\n-\t0x1.000001000000103p+0, false,\n-\t0x1.000001000000102ep+0, false,\n-\t0x1.000001000000103p+0, false,\n-\tfalse,\n-\t0x1.000001000000102ep+0, false,\n-\t0x1.000001000000103p+0, false,\n-\t0x1.000001000000102ep+0, false,\n-\t0x1.000001000000103p+0, false,\n-\tfalse,\n-\t0x1.000001000000102f4fc8c3d757p+0, false,\n-\t0x1.000001000000102f4fc8c3d7578p+0, false,\n-\t0x1.000001000000102f4fc8c3d757p+0, false,\n-\t0x1.000001000000102f4fc8c3d7578p+0, false,\n-\tfalse,\n-\t0x1.000001000000102f4fc8c3d75769p+0, false,\n-\t0x1.000001000000102f4fc8c3d75769p+0, false,\n-\t0x1.000001000000102f4fc8c3d75769p+0, false,\n-\t0x1.000001000000102f4fc8c3d7576ap+0, false),\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.0000010000001p+0, false, false,\n+\t0x1.0000010000001p+0, false, false,\n+\t0x1.0000010000001p+0, false, false,\n+\t0x1.0000010000002p+0, false, false,\n+\tfalse,\n+\t0x1.000001000000102ep+0, false, false,\n+\t0x1.000001000000103p+0, false, false,\n+\t0x1.000001000000102ep+0, false, false,\n+\t0x1.000001000000103p+0, false, false,\n+\tfalse,\n+\t0x1.000001000000102ep+0, false, false,\n+\t0x1.000001000000103p+0, false, false,\n+\t0x1.000001000000102ep+0, false, false,\n+\t0x1.000001000000103p+0, false, false,\n+\tfalse,\n+\t0x1.000001000000102f4fc8c3d757p+0, false, false,\n+\t0x1.000001000000102f4fc8c3d7578p+0, false, false,\n+\t0x1.000001000000102f4fc8c3d757p+0, false, false,\n+\t0x1.000001000000102f4fc8c3d7578p+0, false, false,\n+\tfalse,\n+\t0x1.000001000000102f4fc8c3d75769p+0, false, false,\n+\t0x1.000001000000102f4fc8c3d75769p+0, false, false,\n+\t0x1.000001000000102f4fc8c3d75769p+0, false, false,\n+\t0x1.000001000000102f4fc8c3d7576ap+0, false, false),\n   TEST (\"1.00000005960464\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.000000fffffeap+0, false,\n-\t0x1.000000fffffeap+0, false,\n-\t0x1.000000fffffeap+0, false,\n-\t0x1.000000fffffebp+0, false,\n-\tfalse,\n-\t0x1.000000fffffea7e4p+0, false,\n-\t0x1.000000fffffea7e6p+0, false,\n-\t0x1.000000fffffea7e4p+0, false,\n-\t0x1.000000fffffea7e6p+0, false,\n-\tfalse,\n-\t0x1.000000fffffea7e4p+0, false,\n-\t0x1.000000fffffea7e6p+0, false,\n-\t0x1.000000fffffea7e4p+0, false,\n-\t0x1.000000fffffea7e6p+0, false,\n-\tfalse,\n-\t0x1.000000fffffea7e5975eb11da7p+0, false,\n-\t0x1.000000fffffea7e5975eb11da78p+0, false,\n-\t0x1.000000fffffea7e5975eb11da7p+0, false,\n-\t0x1.000000fffffea7e5975eb11da78p+0, false,\n-\tfalse,\n-\t0x1.000000fffffea7e5975eb11da74ap+0, false,\n-\t0x1.000000fffffea7e5975eb11da74bp+0, false,\n-\t0x1.000000fffffea7e5975eb11da74ap+0, false,\n-\t0x1.000000fffffea7e5975eb11da74bp+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffeap+0, false, false,\n+\t0x1.000000fffffeap+0, false, false,\n+\t0x1.000000fffffeap+0, false, false,\n+\t0x1.000000fffffebp+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffea7e4p+0, false, false,\n+\t0x1.000000fffffea7e6p+0, false, false,\n+\t0x1.000000fffffea7e4p+0, false, false,\n+\t0x1.000000fffffea7e6p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffea7e4p+0, false, false,\n+\t0x1.000000fffffea7e6p+0, false, false,\n+\t0x1.000000fffffea7e4p+0, false, false,\n+\t0x1.000000fffffea7e6p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffea7e5975eb11da7p+0, false, false,\n+\t0x1.000000fffffea7e5975eb11da78p+0, false, false,\n+\t0x1.000000fffffea7e5975eb11da7p+0, false, false,\n+\t0x1.000000fffffea7e5975eb11da78p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffea7e5975eb11da74ap+0, false, false,\n+\t0x1.000000fffffea7e5975eb11da74bp+0, false, false,\n+\t0x1.000000fffffea7e5975eb11da74ap+0, false, false,\n+\t0x1.000000fffffea7e5975eb11da74bp+0, false, false),\n   TEST (\"1.0000000596046\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.000000fffff36p+0, false,\n-\t0x1.000000fffff36p+0, false,\n-\t0x1.000000fffff36p+0, false,\n-\t0x1.000000fffff37p+0, false,\n-\tfalse,\n-\t0x1.000000fffff36596p+0, false,\n-\t0x1.000000fffff36598p+0, false,\n-\t0x1.000000fffff36596p+0, false,\n-\t0x1.000000fffff36598p+0, false,\n-\tfalse,\n-\t0x1.000000fffff36596p+0, false,\n-\t0x1.000000fffff36598p+0, false,\n-\t0x1.000000fffff36596p+0, false,\n-\t0x1.000000fffff36598p+0, false,\n-\tfalse,\n-\t0x1.000000fffff36597d40e1b5026p+0, false,\n-\t0x1.000000fffff36597d40e1b50268p+0, false,\n-\t0x1.000000fffff36597d40e1b5026p+0, false,\n-\t0x1.000000fffff36597d40e1b50268p+0, false,\n-\tfalse,\n-\t0x1.000000fffff36597d40e1b502655p+0, false,\n-\t0x1.000000fffff36597d40e1b502656p+0, false,\n-\t0x1.000000fffff36597d40e1b502655p+0, false,\n-\t0x1.000000fffff36597d40e1b502656p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffff36p+0, false, false,\n+\t0x1.000000fffff36p+0, false, false,\n+\t0x1.000000fffff36p+0, false, false,\n+\t0x1.000000fffff37p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffff36596p+0, false, false,\n+\t0x1.000000fffff36598p+0, false, false,\n+\t0x1.000000fffff36596p+0, false, false,\n+\t0x1.000000fffff36598p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffff36596p+0, false, false,\n+\t0x1.000000fffff36598p+0, false, false,\n+\t0x1.000000fffff36596p+0, false, false,\n+\t0x1.000000fffff36598p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffff36597d40e1b5026p+0, false, false,\n+\t0x1.000000fffff36597d40e1b50268p+0, false, false,\n+\t0x1.000000fffff36597d40e1b5026p+0, false, false,\n+\t0x1.000000fffff36597d40e1b50268p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffff36597d40e1b502655p+0, false, false,\n+\t0x1.000000fffff36597d40e1b502656p+0, false, false,\n+\t0x1.000000fffff36597d40e1b502655p+0, false, false,\n+\t0x1.000000fffff36597d40e1b502656p+0, false, false),\n   TEST (\"1.000000059605\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.000001000063fp+0, false,\n-\t0x1.000001000064p+0, false,\n-\t0x1.000001000063fp+0, false,\n-\t0x1.000001000064p+0, false,\n-\tfalse,\n-\t0x1.000001000063fcap+0, false,\n-\t0x1.000001000063fca2p+0, false,\n-\t0x1.000001000063fcap+0, false,\n-\t0x1.000001000063fca2p+0, false,\n-\tfalse,\n-\t0x1.000001000063fcap+0, false,\n-\t0x1.000001000063fca2p+0, false,\n-\t0x1.000001000063fcap+0, false,\n-\t0x1.000001000063fca2p+0, false,\n-\tfalse,\n-\t0x1.000001000063fca17533f5572f8p+0, false,\n-\t0x1.000001000063fca17533f5573p+0, false,\n-\t0x1.000001000063fca17533f5572f8p+0, false,\n-\t0x1.000001000063fca17533f5573p+0, false,\n-\tfalse,\n-\t0x1.000001000063fca17533f5572fe9p+0, false,\n-\t0x1.000001000063fca17533f5572feap+0, false,\n-\t0x1.000001000063fca17533f5572fe9p+0, false,\n-\t0x1.000001000063fca17533f5572feap+0, false),\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.000001000063fp+0, false, false,\n+\t0x1.000001000064p+0, false, false,\n+\t0x1.000001000063fp+0, false, false,\n+\t0x1.000001000064p+0, false, false,\n+\tfalse,\n+\t0x1.000001000063fcap+0, false, false,\n+\t0x1.000001000063fca2p+0, false, false,\n+\t0x1.000001000063fcap+0, false, false,\n+\t0x1.000001000063fca2p+0, false, false,\n+\tfalse,\n+\t0x1.000001000063fcap+0, false, false,\n+\t0x1.000001000063fca2p+0, false, false,\n+\t0x1.000001000063fcap+0, false, false,\n+\t0x1.000001000063fca2p+0, false, false,\n+\tfalse,\n+\t0x1.000001000063fca17533f5572f8p+0, false, false,\n+\t0x1.000001000063fca17533f5573p+0, false, false,\n+\t0x1.000001000063fca17533f5572f8p+0, false, false,\n+\t0x1.000001000063fca17533f5573p+0, false, false,\n+\tfalse,\n+\t0x1.000001000063fca17533f5572fe9p+0, false, false,\n+\t0x1.000001000063fca17533f5572feap+0, false, false,\n+\t0x1.000001000063fca17533f5572fe9p+0, false, false,\n+\t0x1.000001000063fca17533f5572feap+0, false, false),\n   TEST (\"1.00000005960\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.000000fffae49p+0, false,\n-\t0x1.000000fffae4ap+0, false,\n-\t0x1.000000fffae49p+0, false,\n-\t0x1.000000fffae4ap+0, false,\n-\tfalse,\n-\t0x1.000000fffae49ca8p+0, false,\n-\t0x1.000000fffae49caap+0, false,\n-\t0x1.000000fffae49ca8p+0, false,\n-\t0x1.000000fffae49caap+0, false,\n-\tfalse,\n-\t0x1.000000fffae49ca8p+0, false,\n-\t0x1.000000fffae49caap+0, false,\n-\t0x1.000000fffae49ca8p+0, false,\n-\t0x1.000000fffae49caap+0, false,\n-\tfalse,\n-\t0x1.000000fffae49ca916dacfff38p+0, false,\n-\t0x1.000000fffae49ca916dacfff38p+0, false,\n-\t0x1.000000fffae49ca916dacfff38p+0, false,\n-\t0x1.000000fffae49ca916dacfff388p+0, false,\n-\tfalse,\n-\t0x1.000000fffae49ca916dacfff382dp+0, false,\n-\t0x1.000000fffae49ca916dacfff382dp+0, false,\n-\t0x1.000000fffae49ca916dacfff382dp+0, false,\n-\t0x1.000000fffae49ca916dacfff382ep+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffae49p+0, false, false,\n+\t0x1.000000fffae4ap+0, false, false,\n+\t0x1.000000fffae49p+0, false, false,\n+\t0x1.000000fffae4ap+0, false, false,\n+\tfalse,\n+\t0x1.000000fffae49ca8p+0, false, false,\n+\t0x1.000000fffae49caap+0, false, false,\n+\t0x1.000000fffae49ca8p+0, false, false,\n+\t0x1.000000fffae49caap+0, false, false,\n+\tfalse,\n+\t0x1.000000fffae49ca8p+0, false, false,\n+\t0x1.000000fffae49caap+0, false, false,\n+\t0x1.000000fffae49ca8p+0, false, false,\n+\t0x1.000000fffae49caap+0, false, false,\n+\tfalse,\n+\t0x1.000000fffae49ca916dacfff38p+0, false, false,\n+\t0x1.000000fffae49ca916dacfff38p+0, false, false,\n+\t0x1.000000fffae49ca916dacfff38p+0, false, false,\n+\t0x1.000000fffae49ca916dacfff388p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffae49ca916dacfff382dp+0, false, false,\n+\t0x1.000000fffae49ca916dacfff382dp+0, false, false,\n+\t0x1.000000fffae49ca916dacfff382dp+0, false, false,\n+\t0x1.000000fffae49ca916dacfff382ep+0, false, false),\n   TEST (\"1.0000000596\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.000000fffae49p+0, false,\n-\t0x1.000000fffae4ap+0, false,\n-\t0x1.000000fffae49p+0, false,\n-\t0x1.000000fffae4ap+0, false,\n-\tfalse,\n-\t0x1.000000fffae49ca8p+0, false,\n-\t0x1.000000fffae49caap+0, false,\n-\t0x1.000000fffae49ca8p+0, false,\n-\t0x1.000000fffae49caap+0, false,\n-\tfalse,\n-\t0x1.000000fffae49ca8p+0, false,\n-\t0x1.000000fffae49caap+0, false,\n-\t0x1.000000fffae49ca8p+0, false,\n-\t0x1.000000fffae49caap+0, false,\n-\tfalse,\n-\t0x1.000000fffae49ca916dacfff38p+0, false,\n-\t0x1.000000fffae49ca916dacfff38p+0, false,\n-\t0x1.000000fffae49ca916dacfff38p+0, false,\n-\t0x1.000000fffae49ca916dacfff388p+0, false,\n-\tfalse,\n-\t0x1.000000fffae49ca916dacfff382dp+0, false,\n-\t0x1.000000fffae49ca916dacfff382dp+0, false,\n-\t0x1.000000fffae49ca916dacfff382dp+0, false,\n-\t0x1.000000fffae49ca916dacfff382ep+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffae49p+0, false, false,\n+\t0x1.000000fffae4ap+0, false, false,\n+\t0x1.000000fffae49p+0, false, false,\n+\t0x1.000000fffae4ap+0, false, false,\n+\tfalse,\n+\t0x1.000000fffae49ca8p+0, false, false,\n+\t0x1.000000fffae49caap+0, false, false,\n+\t0x1.000000fffae49ca8p+0, false, false,\n+\t0x1.000000fffae49caap+0, false, false,\n+\tfalse,\n+\t0x1.000000fffae49ca8p+0, false, false,\n+\t0x1.000000fffae49caap+0, false, false,\n+\t0x1.000000fffae49ca8p+0, false, false,\n+\t0x1.000000fffae49caap+0, false, false,\n+\tfalse,\n+\t0x1.000000fffae49ca916dacfff38p+0, false, false,\n+\t0x1.000000fffae49ca916dacfff38p+0, false, false,\n+\t0x1.000000fffae49ca916dacfff38p+0, false, false,\n+\t0x1.000000fffae49ca916dacfff388p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffae49ca916dacfff382dp+0, false, false,\n+\t0x1.000000fffae49ca916dacfff382dp+0, false, false,\n+\t0x1.000000fffae49ca916dacfff382dp+0, false, false,\n+\t0x1.000000fffae49ca916dacfff382ep+0, false, false),\n   TEST (\"1.000000060\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.00000101b2b29p+0, false,\n-\t0x1.00000101b2b2ap+0, false,\n-\t0x1.00000101b2b29p+0, false,\n-\t0x1.00000101b2b2ap+0, false,\n-\tfalse,\n-\t0x1.00000101b2b29a46p+0, false,\n-\t0x1.00000101b2b29a46p+0, false,\n-\t0x1.00000101b2b29a46p+0, false,\n-\t0x1.00000101b2b29a48p+0, false,\n-\tfalse,\n-\t0x1.00000101b2b29a46p+0, false,\n-\t0x1.00000101b2b29a46p+0, false,\n-\t0x1.00000101b2b29a46p+0, false,\n-\t0x1.00000101b2b29a48p+0, false,\n-\tfalse,\n-\t0x1.00000101b2b29a4692b67b7ca3p+0, false,\n-\t0x1.00000101b2b29a4692b67b7ca3p+0, false,\n-\t0x1.00000101b2b29a4692b67b7ca3p+0, false,\n-\t0x1.00000101b2b29a4692b67b7ca38p+0, false,\n-\tfalse,\n-\t0x1.00000101b2b29a4692b67b7ca313p+0, false,\n-\t0x1.00000101b2b29a4692b67b7ca314p+0, false,\n-\t0x1.00000101b2b29a4692b67b7ca313p+0, false,\n-\t0x1.00000101b2b29a4692b67b7ca314p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.00000101b2b29p+0, false, false,\n+\t0x1.00000101b2b2ap+0, false, false,\n+\t0x1.00000101b2b29p+0, false, false,\n+\t0x1.00000101b2b2ap+0, false, false,\n+\tfalse,\n+\t0x1.00000101b2b29a46p+0, false, false,\n+\t0x1.00000101b2b29a46p+0, false, false,\n+\t0x1.00000101b2b29a46p+0, false, false,\n+\t0x1.00000101b2b29a48p+0, false, false,\n+\tfalse,\n+\t0x1.00000101b2b29a46p+0, false, false,\n+\t0x1.00000101b2b29a46p+0, false, false,\n+\t0x1.00000101b2b29a46p+0, false, false,\n+\t0x1.00000101b2b29a48p+0, false, false,\n+\tfalse,\n+\t0x1.00000101b2b29a4692b67b7ca3p+0, false, false,\n+\t0x1.00000101b2b29a4692b67b7ca3p+0, false, false,\n+\t0x1.00000101b2b29a4692b67b7ca3p+0, false, false,\n+\t0x1.00000101b2b29a4692b67b7ca38p+0, false, false,\n+\tfalse,\n+\t0x1.00000101b2b29a4692b67b7ca313p+0, false, false,\n+\t0x1.00000101b2b29a4692b67b7ca314p+0, false, false,\n+\t0x1.00000101b2b29a4692b67b7ca313p+0, false, false,\n+\t0x1.00000101b2b29a4692b67b7ca314p+0, false, false),\n   TEST (\"1.00000006\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.00000101b2b29p+0, false,\n-\t0x1.00000101b2b2ap+0, false,\n-\t0x1.00000101b2b29p+0, false,\n-\t0x1.00000101b2b2ap+0, false,\n-\tfalse,\n-\t0x1.00000101b2b29a46p+0, false,\n-\t0x1.00000101b2b29a46p+0, false,\n-\t0x1.00000101b2b29a46p+0, false,\n-\t0x1.00000101b2b29a48p+0, false,\n-\tfalse,\n-\t0x1.00000101b2b29a46p+0, false,\n-\t0x1.00000101b2b29a46p+0, false,\n-\t0x1.00000101b2b29a46p+0, false,\n-\t0x1.00000101b2b29a48p+0, false,\n-\tfalse,\n-\t0x1.00000101b2b29a4692b67b7ca3p+0, false,\n-\t0x1.00000101b2b29a4692b67b7ca3p+0, false,\n-\t0x1.00000101b2b29a4692b67b7ca3p+0, false,\n-\t0x1.00000101b2b29a4692b67b7ca38p+0, false,\n-\tfalse,\n-\t0x1.00000101b2b29a4692b67b7ca313p+0, false,\n-\t0x1.00000101b2b29a4692b67b7ca314p+0, false,\n-\t0x1.00000101b2b29a4692b67b7ca313p+0, false,\n-\t0x1.00000101b2b29a4692b67b7ca314p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.00000101b2b29p+0, false, false,\n+\t0x1.00000101b2b2ap+0, false, false,\n+\t0x1.00000101b2b29p+0, false, false,\n+\t0x1.00000101b2b2ap+0, false, false,\n+\tfalse,\n+\t0x1.00000101b2b29a46p+0, false, false,\n+\t0x1.00000101b2b29a46p+0, false, false,\n+\t0x1.00000101b2b29a46p+0, false, false,\n+\t0x1.00000101b2b29a48p+0, false, false,\n+\tfalse,\n+\t0x1.00000101b2b29a46p+0, false, false,\n+\t0x1.00000101b2b29a46p+0, false, false,\n+\t0x1.00000101b2b29a46p+0, false, false,\n+\t0x1.00000101b2b29a48p+0, false, false,\n+\tfalse,\n+\t0x1.00000101b2b29a4692b67b7ca3p+0, false, false,\n+\t0x1.00000101b2b29a4692b67b7ca3p+0, false, false,\n+\t0x1.00000101b2b29a4692b67b7ca3p+0, false, false,\n+\t0x1.00000101b2b29a4692b67b7ca38p+0, false, false,\n+\tfalse,\n+\t0x1.00000101b2b29a4692b67b7ca313p+0, false, false,\n+\t0x1.00000101b2b29a4692b67b7ca314p+0, false, false,\n+\t0x1.00000101b2b29a4692b67b7ca313p+0, false, false,\n+\t0x1.00000101b2b29a4692b67b7ca314p+0, false, false),\n   TEST (\"1.0000001\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.000001ad7f29ap+0, false,\n-\t0x1.000001ad7f29bp+0, false,\n-\t0x1.000001ad7f29ap+0, false,\n-\t0x1.000001ad7f29bp+0, false,\n-\tfalse,\n-\t0x1.000001ad7f29abcap+0, false,\n-\t0x1.000001ad7f29abcap+0, false,\n-\t0x1.000001ad7f29abcap+0, false,\n-\t0x1.000001ad7f29abccp+0, false,\n-\tfalse,\n-\t0x1.000001ad7f29abcap+0, false,\n-\t0x1.000001ad7f29abcap+0, false,\n-\t0x1.000001ad7f29abcap+0, false,\n-\t0x1.000001ad7f29abccp+0, false,\n-\tfalse,\n-\t0x1.000001ad7f29abcaf485787a65p+0, false,\n-\t0x1.000001ad7f29abcaf485787a65p+0, false,\n-\t0x1.000001ad7f29abcaf485787a65p+0, false,\n-\t0x1.000001ad7f29abcaf485787a658p+0, false,\n-\tfalse,\n-\t0x1.000001ad7f29abcaf485787a652p+0, false,\n-\t0x1.000001ad7f29abcaf485787a6521p+0, false,\n-\t0x1.000001ad7f29abcaf485787a652p+0, false,\n-\t0x1.000001ad7f29abcaf485787a6521p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.000001ad7f29ap+0, false, false,\n+\t0x1.000001ad7f29bp+0, false, false,\n+\t0x1.000001ad7f29ap+0, false, false,\n+\t0x1.000001ad7f29bp+0, false, false,\n+\tfalse,\n+\t0x1.000001ad7f29abcap+0, false, false,\n+\t0x1.000001ad7f29abcap+0, false, false,\n+\t0x1.000001ad7f29abcap+0, false, false,\n+\t0x1.000001ad7f29abccp+0, false, false,\n+\tfalse,\n+\t0x1.000001ad7f29abcap+0, false, false,\n+\t0x1.000001ad7f29abcap+0, false, false,\n+\t0x1.000001ad7f29abcap+0, false, false,\n+\t0x1.000001ad7f29abccp+0, false, false,\n+\tfalse,\n+\t0x1.000001ad7f29abcaf485787a65p+0, false, false,\n+\t0x1.000001ad7f29abcaf485787a65p+0, false, false,\n+\t0x1.000001ad7f29abcaf485787a65p+0, false, false,\n+\t0x1.000001ad7f29abcaf485787a658p+0, false, false,\n+\tfalse,\n+\t0x1.000001ad7f29abcaf485787a652p+0, false, false,\n+\t0x1.000001ad7f29abcaf485787a6521p+0, false, false,\n+\t0x1.000001ad7f29abcaf485787a652p+0, false, false,\n+\t0x1.000001ad7f29abcaf485787a6521p+0, false, false),\n   TEST (\"1.000000\",\n \ttrue,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\ttrue,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\ttrue,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\ttrue,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\ttrue,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\ttrue,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\ttrue,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\ttrue,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\ttrue,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\ttrue,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\ttrue,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false),\n   TEST (\"1.00000000000000011113\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.0000000000000802p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.0000000000000802p+0, false,\n-\tfalse,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.0000000000000802p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.0000000000000802p+0, false,\n-\tfalse,\n-\t0x1.0000000000000801fc96557232p+0, false,\n-\t0x1.0000000000000801fc96557232p+0, false,\n-\t0x1.0000000000000801fc96557232p+0, false,\n-\t0x1.0000000000000801fc965572328p+0, false,\n-\tfalse,\n-\t0x1.0000000000000801fc9655723222p+0, false,\n-\t0x1.0000000000000801fc9655723222p+0, false,\n-\t0x1.0000000000000801fc9655723222p+0, false,\n-\t0x1.0000000000000801fc9655723223p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.0000000000000802p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.0000000000000802p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.0000000000000802p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.0000000000000802p+0, false, false,\n+\tfalse,\n+\t0x1.0000000000000801fc96557232p+0, false, false,\n+\t0x1.0000000000000801fc96557232p+0, false, false,\n+\t0x1.0000000000000801fc96557232p+0, false, false,\n+\t0x1.0000000000000801fc965572328p+0, false, false,\n+\tfalse,\n+\t0x1.0000000000000801fc9655723222p+0, false, false,\n+\t0x1.0000000000000801fc9655723222p+0, false, false,\n+\t0x1.0000000000000801fc9655723222p+0, false, false,\n+\t0x1.0000000000000801fc9655723223p+0, false, false),\n   TEST (\"1.00000000000000011103\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.0000000000000802p+0, false,\n-\tfalse,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.0000000000000802p+0, false,\n-\tfalse,\n-\t0x1.00000000000008002459c076c48p+0, false,\n-\t0x1.00000000000008002459c076c5p+0, false,\n-\t0x1.00000000000008002459c076c48p+0, false,\n-\t0x1.00000000000008002459c076c5p+0, false,\n-\tfalse,\n-\t0x1.00000000000008002459c076c4f7p+0, false,\n-\t0x1.00000000000008002459c076c4f8p+0, false,\n-\t0x1.00000000000008002459c076c4f7p+0, false,\n-\t0x1.00000000000008002459c076c4f8p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.0000000000000802p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.0000000000000802p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000008002459c076c48p+0, false, false,\n+\t0x1.00000000000008002459c076c5p+0, false, false,\n+\t0x1.00000000000008002459c076c48p+0, false, false,\n+\t0x1.00000000000008002459c076c5p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000008002459c076c4f7p+0, false, false,\n+\t0x1.00000000000008002459c076c4f8p+0, false, false,\n+\t0x1.00000000000008002459c076c4f7p+0, false, false,\n+\t0x1.00000000000008002459c076c4f8p+0, false, false),\n   TEST (\"1.00000000000000011102\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1.00000000000007fep+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000007fep+0, false,\n-\t0x1.00000000000008p+0, false,\n-\tfalse,\n-\t0x1.00000000000007fep+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000007fep+0, false,\n-\t0x1.00000000000008p+0, false,\n-\tfalse,\n-\t0x1.00000000000007fff5207e5dap+0, false,\n-\t0x1.00000000000007fff5207e5da08p+0, false,\n-\t0x1.00000000000007fff5207e5dap+0, false,\n-\t0x1.00000000000007fff5207e5da08p+0, false,\n-\tfalse,\n-\t0x1.00000000000007fff5207e5da073p+0, false,\n-\t0x1.00000000000007fff5207e5da073p+0, false,\n-\t0x1.00000000000007fff5207e5da073p+0, false,\n-\t0x1.00000000000007fff5207e5da074p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007fep+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000007fep+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007fep+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000007fep+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007fff5207e5dap+0, false, false,\n+\t0x1.00000000000007fff5207e5da08p+0, false, false,\n+\t0x1.00000000000007fff5207e5dap+0, false, false,\n+\t0x1.00000000000007fff5207e5da08p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007fff5207e5da073p+0, false, false,\n+\t0x1.00000000000007fff5207e5da073p+0, false, false,\n+\t0x1.00000000000007fff5207e5da073p+0, false, false,\n+\t0x1.00000000000007fff5207e5da074p+0, false, false),\n   TEST (\"1.00000000000000011101\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1.00000000000007fep+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000007fep+0, false,\n-\t0x1.00000000000008p+0, false,\n-\tfalse,\n-\t0x1.00000000000007fep+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000007fep+0, false,\n-\t0x1.00000000000008p+0, false,\n-\tfalse,\n-\t0x1.00000000000007ffc5e73c447b8p+0, false,\n-\t0x1.00000000000007ffc5e73c447cp+0, false,\n-\t0x1.00000000000007ffc5e73c447b8p+0, false,\n-\t0x1.00000000000007ffc5e73c447cp+0, false,\n-\tfalse,\n-\t0x1.00000000000007ffc5e73c447befp+0, false,\n-\t0x1.00000000000007ffc5e73c447befp+0, false,\n-\t0x1.00000000000007ffc5e73c447befp+0, false,\n-\t0x1.00000000000007ffc5e73c447bfp+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007fep+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000007fep+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007fep+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000007fep+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007ffc5e73c447b8p+0, false, false,\n+\t0x1.00000000000007ffc5e73c447cp+0, false, false,\n+\t0x1.00000000000007ffc5e73c447b8p+0, false, false,\n+\t0x1.00000000000007ffc5e73c447cp+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007ffc5e73c447befp+0, false, false,\n+\t0x1.00000000000007ffc5e73c447befp+0, false, false,\n+\t0x1.00000000000007ffc5e73c447befp+0, false, false,\n+\t0x1.00000000000007ffc5e73c447bfp+0, false, false),\n   TEST (\"1.0000000000000001111\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.0000000000000802p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.0000000000000802p+0, false,\n-\tfalse,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.0000000000000802p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.0000000000000802p+0, false,\n-\tfalse,\n-\t0x1.00000000000008016eea8f26c48p+0, false,\n-\t0x1.00000000000008016eea8f26c48p+0, false,\n-\t0x1.00000000000008016eea8f26c48p+0, false,\n-\t0x1.00000000000008016eea8f26c5p+0, false,\n-\tfalse,\n-\t0x1.00000000000008016eea8f26c495p+0, false,\n-\t0x1.00000000000008016eea8f26c496p+0, false,\n-\t0x1.00000000000008016eea8f26c495p+0, false,\n-\t0x1.00000000000008016eea8f26c496p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.0000000000000802p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.0000000000000802p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.0000000000000802p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.0000000000000802p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000008016eea8f26c48p+0, false, false,\n+\t0x1.00000000000008016eea8f26c48p+0, false, false,\n+\t0x1.00000000000008016eea8f26c48p+0, false, false,\n+\t0x1.00000000000008016eea8f26c5p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000008016eea8f26c495p+0, false, false,\n+\t0x1.00000000000008016eea8f26c496p+0, false, false,\n+\t0x1.00000000000008016eea8f26c495p+0, false, false,\n+\t0x1.00000000000008016eea8f26c496p+0, false, false),\n   TEST (\"1.000000000000000111\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1.00000000000007fep+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000007fep+0, false,\n-\t0x1.00000000000008p+0, false,\n-\tfalse,\n-\t0x1.00000000000007fep+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000007fep+0, false,\n-\t0x1.00000000000008p+0, false,\n-\tfalse,\n-\t0x1.00000000000007ff96adfa2b57p+0, false,\n-\t0x1.00000000000007ff96adfa2b578p+0, false,\n-\t0x1.00000000000007ff96adfa2b57p+0, false,\n-\t0x1.00000000000007ff96adfa2b578p+0, false,\n-\tfalse,\n-\t0x1.00000000000007ff96adfa2b576ap+0, false,\n-\t0x1.00000000000007ff96adfa2b576bp+0, false,\n-\t0x1.00000000000007ff96adfa2b576ap+0, false,\n-\t0x1.00000000000007ff96adfa2b576bp+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007fep+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000007fep+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007fep+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000007fep+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007ff96adfa2b57p+0, false, false,\n+\t0x1.00000000000007ff96adfa2b578p+0, false, false,\n+\t0x1.00000000000007ff96adfa2b57p+0, false, false,\n+\t0x1.00000000000007ff96adfa2b578p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007ff96adfa2b576ap+0, false, false,\n+\t0x1.00000000000007ff96adfa2b576bp+0, false, false,\n+\t0x1.00000000000007ff96adfa2b576ap+0, false, false,\n+\t0x1.00000000000007ff96adfa2b576bp+0, false, false),\n   TEST (\"1.00000000000000011\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1.00000000000007ecp+0, false,\n-\t0x1.00000000000007eep+0, false,\n-\t0x1.00000000000007ecp+0, false,\n-\t0x1.00000000000007eep+0, false,\n-\tfalse,\n-\t0x1.00000000000007ecp+0, false,\n-\t0x1.00000000000007eep+0, false,\n-\t0x1.00000000000007ecp+0, false,\n-\t0x1.00000000000007eep+0, false,\n-\tfalse,\n-\t0x1.00000000000007ed24502859138p+0, false,\n-\t0x1.00000000000007ed24502859138p+0, false,\n-\t0x1.00000000000007ed24502859138p+0, false,\n-\t0x1.00000000000007ed2450285914p+0, false,\n-\tfalse,\n-\t0x1.00000000000007ed2450285913bfp+0, false,\n-\t0x1.00000000000007ed2450285913bfp+0, false,\n-\t0x1.00000000000007ed2450285913bfp+0, false,\n-\t0x1.00000000000007ed2450285913cp+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007ecp+0, false, false,\n+\t0x1.00000000000007eep+0, false, false,\n+\t0x1.00000000000007ecp+0, false, false,\n+\t0x1.00000000000007eep+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007ecp+0, false, false,\n+\t0x1.00000000000007eep+0, false, false,\n+\t0x1.00000000000007ecp+0, false, false,\n+\t0x1.00000000000007eep+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007ed24502859138p+0, false, false,\n+\t0x1.00000000000007ed24502859138p+0, false, false,\n+\t0x1.00000000000007ed24502859138p+0, false, false,\n+\t0x1.00000000000007ed2450285914p+0, false, false,\n+\tfalse,\n+\t0x1.00000000000007ed2450285913bfp+0, false, false,\n+\t0x1.00000000000007ed2450285913bfp+0, false, false,\n+\t0x1.00000000000007ed2450285913bfp+0, false, false,\n+\t0x1.00000000000007ed2450285913cp+0, false, false),\n   TEST (\"1.0000000000000001\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1.0000000000000734p+0, false,\n-\t0x1.0000000000000734p+0, false,\n-\t0x1.0000000000000734p+0, false,\n-\t0x1.0000000000000736p+0, false,\n-\tfalse,\n-\t0x1.0000000000000734p+0, false,\n-\t0x1.0000000000000734p+0, false,\n-\t0x1.0000000000000734p+0, false,\n-\t0x1.0000000000000736p+0, false,\n-\tfalse,\n-\t0x1.0000000000000734aca5f6226fp+0, false,\n-\t0x1.0000000000000734aca5f6226fp+0, false,\n-\t0x1.0000000000000734aca5f6226fp+0, false,\n-\t0x1.0000000000000734aca5f6226f8p+0, false,\n-\tfalse,\n-\t0x1.0000000000000734aca5f6226f0ap+0, false,\n-\t0x1.0000000000000734aca5f6226f0bp+0, false,\n-\t0x1.0000000000000734aca5f6226f0ap+0, false,\n-\t0x1.0000000000000734aca5f6226f0bp+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1.0000000000000734p+0, false, false,\n+\t0x1.0000000000000734p+0, false, false,\n+\t0x1.0000000000000734p+0, false, false,\n+\t0x1.0000000000000736p+0, false, false,\n+\tfalse,\n+\t0x1.0000000000000734p+0, false, false,\n+\t0x1.0000000000000734p+0, false, false,\n+\t0x1.0000000000000734p+0, false, false,\n+\t0x1.0000000000000736p+0, false, false,\n+\tfalse,\n+\t0x1.0000000000000734aca5f6226fp+0, false, false,\n+\t0x1.0000000000000734aca5f6226fp+0, false, false,\n+\t0x1.0000000000000734aca5f6226fp+0, false, false,\n+\t0x1.0000000000000734aca5f6226f8p+0, false, false,\n+\tfalse,\n+\t0x1.0000000000000734aca5f6226f0ap+0, false, false,\n+\t0x1.0000000000000734aca5f6226f0bp+0, false, false,\n+\t0x1.0000000000000734aca5f6226f0ap+0, false, false,\n+\t0x1.0000000000000734aca5f6226f0bp+0, false, false),\n   TEST (\"3929201589819414e-25\",\n \tfalse,\n-\t0x1.b0053p-32, false,\n-\t0x1.b00532p-32, false,\n-\t0x1.b0053p-32, false,\n-\t0x1.b00532p-32, false,\n-\tfalse,\n-\t0x1.b005314e2421ep-32, false,\n-\t0x1.b005314e2421ep-32, false,\n-\t0x1.b005314e2421ep-32, false,\n-\t0x1.b005314e2421fp-32, false,\n-\tfalse,\n-\t0x1.b005314e2421e7fep-32, false,\n-\t0x1.b005314e2421e8p-32, false,\n-\t0x1.b005314e2421e7fep-32, false,\n-\t0x1.b005314e2421e8p-32, false,\n-\tfalse,\n-\t0x1.b005314e2421e7fep-32, false,\n-\t0x1.b005314e2421e8p-32, false,\n-\t0x1.b005314e2421e7fep-32, false,\n-\t0x1.b005314e2421e8p-32, false,\n-\tfalse,\n-\t0x1.b005314e2421e7ffb472840c5ap-32, false,\n-\t0x1.b005314e2421e7ffb472840c5a8p-32, false,\n-\t0x1.b005314e2421e7ffb472840c5ap-32, false,\n-\t0x1.b005314e2421e7ffb472840c5a8p-32, false,\n-\tfalse,\n-\t0x1.b005314e2421e7ffb472840c5a6ep-32, false,\n-\t0x1.b005314e2421e7ffb472840c5a6fp-32, false,\n-\t0x1.b005314e2421e7ffb472840c5a6ep-32, false,\n-\t0x1.b005314e2421e7ffb472840c5a6fp-32, false),\n+\t0x1.b0053p-32, false, false,\n+\t0x1.b00532p-32, false, false,\n+\t0x1.b0053p-32, false, false,\n+\t0x1.b00532p-32, false, false,\n+\tfalse,\n+\t0x1.b005314e2421ep-32, false, false,\n+\t0x1.b005314e2421ep-32, false, false,\n+\t0x1.b005314e2421ep-32, false, false,\n+\t0x1.b005314e2421fp-32, false, false,\n+\tfalse,\n+\t0x1.b005314e2421e7fep-32, false, false,\n+\t0x1.b005314e2421e8p-32, false, false,\n+\t0x1.b005314e2421e7fep-32, false, false,\n+\t0x1.b005314e2421e8p-32, false, false,\n+\tfalse,\n+\t0x1.b005314e2421e7fep-32, false, false,\n+\t0x1.b005314e2421e8p-32, false, false,\n+\t0x1.b005314e2421e7fep-32, false, false,\n+\t0x1.b005314e2421e8p-32, false, false,\n+\tfalse,\n+\t0x1.b005314e2421e7ffb472840c5ap-32, false, false,\n+\t0x1.b005314e2421e7ffb472840c5a8p-32, false, false,\n+\t0x1.b005314e2421e7ffb472840c5ap-32, false, false,\n+\t0x1.b005314e2421e7ffb472840c5a8p-32, false, false,\n+\tfalse,\n+\t0x1.b005314e2421e7ffb472840c5a6ep-32, false, false,\n+\t0x1.b005314e2421e7ffb472840c5a6fp-32, false, false,\n+\t0x1.b005314e2421e7ffb472840c5a6ep-32, false, false,\n+\t0x1.b005314e2421e7ffb472840c5a6fp-32, false, false),\n   TEST (\"0.0000000000000000000000000000000000000000000021019476964872\"\n \t\"256063855943749348741969203929128147736576356024258346866240\"\n \t\"28790902229957282543182373046875\",\n \tfalse,\n-\t0x8p-152, false,\n-\t0x1p-148, false,\n-\t0x8p-152, false,\n-\t0x1p-148, false,\n-\ttrue,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\ttrue,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\ttrue,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\ttrue,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\ttrue,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false),\n+\t0x8p-152, false, true,\n+\t0x1p-148, false, true,\n+\t0x8p-152, false, true,\n+\t0x1p-148, false, true,\n+\ttrue,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\ttrue,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\ttrue,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\ttrue,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\ttrue,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false),\n   TEST (\"1.00000005960464477539062499\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.000000fffffffp+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000000fffffffp+0, false,\n-\t0x1.000001p+0, false,\n-\tfalse,\n-\t0x1.000000fffffffffep+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000000fffffffffep+0, false,\n-\t0x1.000001p+0, false,\n-\tfalse,\n-\t0x1.000000fffffffffep+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000000fffffffffep+0, false,\n-\t0x1.000001p+0, false,\n-\tfalse,\n-\t0x1.000000fffffffffffffffce7b78p+0, false,\n-\t0x1.000000fffffffffffffffce7b8p+0, false,\n-\t0x1.000000fffffffffffffffce7b78p+0, false,\n-\t0x1.000000fffffffffffffffce7b8p+0, false,\n-\tfalse,\n-\t0x1.000000fffffffffffffffce7b7e7p+0, false,\n-\t0x1.000000fffffffffffffffce7b7e7p+0, false,\n-\t0x1.000000fffffffffffffffce7b7e7p+0, false,\n-\t0x1.000000fffffffffffffffce7b7e8p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffffp+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000000fffffffp+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffffffep+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000000fffffffffep+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffffffep+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000000fffffffffep+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffffffffffffce7b78p+0, false, false,\n+\t0x1.000000fffffffffffffffce7b8p+0, false, false,\n+\t0x1.000000fffffffffffffffce7b78p+0, false, false,\n+\t0x1.000000fffffffffffffffce7b8p+0, false, false,\n+\tfalse,\n+\t0x1.000000fffffffffffffffce7b7e7p+0, false, false,\n+\t0x1.000000fffffffffffffffce7b7e7p+0, false, false,\n+\t0x1.000000fffffffffffffffce7b7e7p+0, false, false,\n+\t0x1.000000fffffffffffffffce7b7e8p+0, false, false),\n   TEST (\"1.000000059604644775390625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\ttrue,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\ttrue,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\ttrue,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\ttrue,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\ttrue,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\ttrue,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\ttrue,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\ttrue,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false),\n   TEST (\"1.00000005960464477539062501\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.0000010000001p+0, false,\n-\tfalse,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.0000010000000002p+0, false,\n-\tfalse,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.000001p+0, false,\n-\t0x1.0000010000000002p+0, false,\n-\tfalse,\n-\t0x1.00000100000000000000031848p+0, false,\n-\t0x1.00000100000000000000031848p+0, false,\n-\t0x1.00000100000000000000031848p+0, false,\n-\t0x1.000001000000000000000318488p+0, false,\n-\tfalse,\n-\t0x1.0000010000000000000003184818p+0, false,\n-\t0x1.0000010000000000000003184819p+0, false,\n-\t0x1.0000010000000000000003184818p+0, false,\n-\t0x1.0000010000000000000003184819p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.0000010000001p+0, false, false,\n+\tfalse,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.0000010000000002p+0, false, false,\n+\tfalse,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.000001p+0, false, false,\n+\t0x1.0000010000000002p+0, false, false,\n+\tfalse,\n+\t0x1.00000100000000000000031848p+0, false, false,\n+\t0x1.00000100000000000000031848p+0, false, false,\n+\t0x1.00000100000000000000031848p+0, false, false,\n+\t0x1.000001000000000000000318488p+0, false, false,\n+\tfalse,\n+\t0x1.0000010000000000000003184818p+0, false, false,\n+\t0x1.0000010000000000000003184819p+0, false, false,\n+\t0x1.0000010000000000000003184818p+0, false, false,\n+\t0x1.0000010000000000000003184819p+0, false, false),\n   TEST (\"1.00000011920928955078125\",\n \ttrue,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false),\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false),\n   TEST (\"1.00000017881393432617187499\",\n \tfalse,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000004p+0, false,\n-\tfalse,\n-\t0x1.000002fffffffp+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000002fffffffp+0, false,\n-\t0x1.000003p+0, false,\n-\tfalse,\n-\t0x1.000002fffffffffep+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000002fffffffffep+0, false,\n-\t0x1.000003p+0, false,\n-\tfalse,\n-\t0x1.000002fffffffffep+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000002fffffffffep+0, false,\n-\t0x1.000003p+0, false,\n-\tfalse,\n-\t0x1.000002fffffffffffffffce7b78p+0, false,\n-\t0x1.000002fffffffffffffffce7b8p+0, false,\n-\t0x1.000002fffffffffffffffce7b78p+0, false,\n-\t0x1.000002fffffffffffffffce7b8p+0, false,\n-\tfalse,\n-\t0x1.000002fffffffffffffffce7b7e7p+0, false,\n-\t0x1.000002fffffffffffffffce7b7e7p+0, false,\n-\t0x1.000002fffffffffffffffce7b7e7p+0, false,\n-\t0x1.000002fffffffffffffffce7b7e8p+0, false),\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\tfalse,\n+\t0x1.000002fffffffp+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000002fffffffp+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\tfalse,\n+\t0x1.000002fffffffffep+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000002fffffffffep+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\tfalse,\n+\t0x1.000002fffffffffep+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000002fffffffffep+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\tfalse,\n+\t0x1.000002fffffffffffffffce7b78p+0, false, false,\n+\t0x1.000002fffffffffffffffce7b8p+0, false, false,\n+\t0x1.000002fffffffffffffffce7b78p+0, false, false,\n+\t0x1.000002fffffffffffffffce7b8p+0, false, false,\n+\tfalse,\n+\t0x1.000002fffffffffffffffce7b7e7p+0, false, false,\n+\t0x1.000002fffffffffffffffce7b7e7p+0, false, false,\n+\t0x1.000002fffffffffffffffce7b7e7p+0, false, false,\n+\t0x1.000002fffffffffffffffce7b7e8p+0, false, false),\n   TEST (\"1.000000178813934326171875\",\n \tfalse,\n-\t0x1.000002p+0, false,\n-\t0x1.000004p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000004p+0, false,\n-\ttrue,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\ttrue,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\ttrue,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\ttrue,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\ttrue,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false),\n+\t0x1.000002p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\ttrue,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\ttrue,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\ttrue,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\ttrue,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\ttrue,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false),\n   TEST (\"1.00000017881393432617187501\",\n \tfalse,\n-\t0x1.000002p+0, false,\n-\t0x1.000004p+0, false,\n-\t0x1.000002p+0, false,\n-\t0x1.000004p+0, false,\n-\tfalse,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.0000030000001p+0, false,\n-\tfalse,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.0000030000000002p+0, false,\n-\tfalse,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.000003p+0, false,\n-\t0x1.0000030000000002p+0, false,\n-\tfalse,\n-\t0x1.00000300000000000000031848p+0, false,\n-\t0x1.00000300000000000000031848p+0, false,\n-\t0x1.00000300000000000000031848p+0, false,\n-\t0x1.000003000000000000000318488p+0, false,\n-\tfalse,\n-\t0x1.0000030000000000000003184818p+0, false,\n-\t0x1.0000030000000000000003184819p+0, false,\n-\t0x1.0000030000000000000003184818p+0, false,\n-\t0x1.0000030000000000000003184819p+0, false),\n+\t0x1.000002p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\tfalse,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.0000030000001p+0, false, false,\n+\tfalse,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.0000030000000002p+0, false, false,\n+\tfalse,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.000003p+0, false, false,\n+\t0x1.0000030000000002p+0, false, false,\n+\tfalse,\n+\t0x1.00000300000000000000031848p+0, false, false,\n+\t0x1.00000300000000000000031848p+0, false, false,\n+\t0x1.00000300000000000000031848p+0, false, false,\n+\t0x1.000003000000000000000318488p+0, false, false,\n+\tfalse,\n+\t0x1.0000030000000000000003184818p+0, false, false,\n+\t0x1.0000030000000000000003184819p+0, false, false,\n+\t0x1.0000030000000000000003184818p+0, false, false,\n+\t0x1.0000030000000000000003184819p+0, false, false),\n   TEST (\"1.0000002384185791015625\",\n \ttrue,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\ttrue,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\ttrue,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\ttrue,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\ttrue,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\ttrue,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false,\n-\t0x1.000004p+0, false),\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\ttrue,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\ttrue,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\ttrue,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\ttrue,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\ttrue,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false,\n+\t0x1.000004p+0, false, false),\n   TEST (\"1.08420217248550443400745280086994171142578125e-19\",\n \ttrue,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\ttrue,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\ttrue,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\ttrue,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\ttrue,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\ttrue,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2p-64, false),\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\ttrue,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\ttrue,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\ttrue,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\ttrue,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\ttrue,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false),\n   TEST (\"1.0842022371089897897127399001987457793916291848290711641311\"\n \t\"645507812499e-19\",\n \tfalse,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2.000004p-64, false,\n-\tfalse,\n-\t0x2.000001ffffffep-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000001ffffffep-64, false,\n-\t0x2.000002p-64, false,\n-\tfalse,\n-\t0x2.000001fffffffffcp-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000001fffffffffcp-64, false,\n-\t0x2.000002p-64, false,\n-\tfalse,\n-\t0x2.000001fffffffffcp-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000001fffffffffcp-64, false,\n-\t0x2.000002p-64, false,\n-\tfalse,\n-\t0x2.000001ffffffffffffffffffffp-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000001ffffffffffffffffffffp-64, false,\n-\t0x2.000002p-64, false,\n-\tfalse,\n-\t0x2.000001fffffffffffffffffffffep-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000001fffffffffffffffffffffep-64, false,\n-\t0x2.000002p-64, false),\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\tfalse,\n+\t0x2.000001ffffffep-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000001ffffffep-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\tfalse,\n+\t0x2.000001fffffffffcp-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000001fffffffffcp-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\tfalse,\n+\t0x2.000001fffffffffcp-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000001fffffffffcp-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\tfalse,\n+\t0x2.000001ffffffffffffffffffffp-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000001ffffffffffffffffffffp-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\tfalse,\n+\t0x2.000001fffffffffffffffffffffep-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000001fffffffffffffffffffffep-64, false, false,\n+\t0x2.000002p-64, false, false),\n   TEST (\"1.0842022371089897897127399001987457793916291848290711641311\"\n \t\"6455078125e-19\",\n \tfalse,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2p-64, false,\n-\t0x2.000004p-64, false,\n-\ttrue,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\ttrue,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\ttrue,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\ttrue,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\ttrue,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false),\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\ttrue,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\ttrue,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\ttrue,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\ttrue,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\ttrue,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false),\n   TEST (\"1.0842022371089897897127399001987457793916291848290711641311\"\n \t\"645507812501e-19\",\n \tfalse,\n-\t0x2p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2p-64, false,\n-\t0x2.000004p-64, false,\n-\tfalse,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.0000020000002p-64, false,\n-\tfalse,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.0000020000000004p-64, false,\n-\tfalse,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.0000020000000004p-64, false,\n-\tfalse,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.00000200000000000000000001p-64, false,\n-\tfalse,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.000002p-64, false,\n-\t0x2.0000020000000000000000000002p-64, false),\n+\t0x2p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\tfalse,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.0000020000002p-64, false, false,\n+\tfalse,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.0000020000000004p-64, false, false,\n+\tfalse,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.0000020000000004p-64, false, false,\n+\tfalse,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.00000200000000000000000001p-64, false, false,\n+\tfalse,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.000002p-64, false, false,\n+\t0x2.0000020000000000000000000002p-64, false, false),\n   TEST (\"1.0842023017324751454180269995275498473574771196581423282623\"\n \t\"291015625e-19\",\n \ttrue,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\ttrue,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\ttrue,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\ttrue,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\ttrue,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\ttrue,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false),\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\ttrue,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\ttrue,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\ttrue,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\ttrue,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\ttrue,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false),\n   TEST (\"1.0842023663559605011233140988563539153233250544872134923934\"\n \t\"936523437499e-19\",\n \tfalse,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000008p-64, false,\n-\tfalse,\n-\t0x2.000005ffffffep-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000005ffffffep-64, false,\n-\t0x2.000006p-64, false,\n-\tfalse,\n-\t0x2.000005fffffffffcp-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000005fffffffffcp-64, false,\n-\t0x2.000006p-64, false,\n-\tfalse,\n-\t0x2.000005fffffffffcp-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000005fffffffffcp-64, false,\n-\t0x2.000006p-64, false,\n-\tfalse,\n-\t0x2.000005ffffffffffffffffffffp-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000005ffffffffffffffffffffp-64, false,\n-\t0x2.000006p-64, false,\n-\tfalse,\n-\t0x2.000005fffffffffffffffffffffep-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000005fffffffffffffffffffffep-64, false,\n-\t0x2.000006p-64, false),\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\tfalse,\n+\t0x2.000005ffffffep-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000005ffffffep-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\tfalse,\n+\t0x2.000005fffffffffcp-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000005fffffffffcp-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\tfalse,\n+\t0x2.000005fffffffffcp-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000005fffffffffcp-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\tfalse,\n+\t0x2.000005ffffffffffffffffffffp-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000005ffffffffffffffffffffp-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\tfalse,\n+\t0x2.000005fffffffffffffffffffffep-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000005fffffffffffffffffffffep-64, false, false,\n+\t0x2.000006p-64, false, false),\n   TEST (\"1.0842023663559605011233140988563539153233250544872134923934\"\n \t\"9365234375e-19\",\n \tfalse,\n-\t0x2.000004p-64, false,\n-\t0x2.000008p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000008p-64, false,\n-\ttrue,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\ttrue,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\ttrue,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\ttrue,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\ttrue,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false),\n+\t0x2.000004p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\ttrue,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\ttrue,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\ttrue,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\ttrue,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\ttrue,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false),\n   TEST (\"1.0842023663559605011233140988563539153233250544872134923934\"\n \t\"936523437501e-19\",\n \tfalse,\n-\t0x2.000004p-64, false,\n-\t0x2.000008p-64, false,\n-\t0x2.000004p-64, false,\n-\t0x2.000008p-64, false,\n-\tfalse,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.0000060000002p-64, false,\n-\tfalse,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.0000060000000004p-64, false,\n-\tfalse,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.0000060000000004p-64, false,\n-\tfalse,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.00000600000000000000000001p-64, false,\n-\tfalse,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.000006p-64, false,\n-\t0x2.0000060000000000000000000002p-64, false),\n+\t0x2.000004p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000004p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\tfalse,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.0000060000002p-64, false, false,\n+\tfalse,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.0000060000000004p-64, false, false,\n+\tfalse,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.0000060000000004p-64, false, false,\n+\tfalse,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.00000600000000000000000001p-64, false, false,\n+\tfalse,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.000006p-64, false, false,\n+\t0x2.0000060000000000000000000002p-64, false, false),\n   TEST (\"1.0842024309794458568286011981851579832891729893162846565246\"\n \t\"58203125e-19\",\n \ttrue,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\ttrue,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\ttrue,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\ttrue,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\ttrue,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\ttrue,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false,\n-\t0x2.000008p-64, false),\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\ttrue,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\ttrue,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\ttrue,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\ttrue,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\ttrue,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false,\n+\t0x2.000008p-64, false, false),\n   TEST (\"7.5231638452626400509999138382223723380394595633413601376560\"\n \t\"1092018187046051025390625e-37\",\n \ttrue,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\ttrue,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\ttrue,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\ttrue,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\ttrue,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\ttrue,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1p-120, false),\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\ttrue,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\ttrue,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\ttrue,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\ttrue,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\ttrue,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false),\n   TEST (\"7.5231642936781486349413765338158389908126215730251815381410\"\n \t\"578824437213052434003657253924757242202758789062499e-37\",\n \tfalse,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1.000002p-120, false,\n-\tfalse,\n-\t0x1.000000fffffffp-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000000fffffffp-120, false,\n-\t0x1.000001p-120, false,\n-\tfalse,\n-\t0x1.000000fffffffffep-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000000fffffffffep-120, false,\n-\t0x1.000001p-120, false,\n-\tfalse,\n-\t0x1.000000fffffffffep-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000000fffffffffep-120, false,\n-\t0x1.000001p-120, false,\n-\tfalse,\n-\t0x1.000000ffffffffffffffffffff8p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000000ffffffffffffffffffff8p-120, false,\n-\t0x1.000001p-120, false,\n-\tfalse,\n-\t0x1.000000ffffffffffffffffffffffp-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000000ffffffffffffffffffffffp-120, false,\n-\t0x1.000001p-120, false),\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\tfalse,\n+\t0x1.000000fffffffp-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000000fffffffp-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\tfalse,\n+\t0x1.000000fffffffffep-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000000fffffffffep-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\tfalse,\n+\t0x1.000000fffffffffep-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000000fffffffffep-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\tfalse,\n+\t0x1.000000ffffffffffffffffffff8p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000000ffffffffffffffffffff8p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\tfalse,\n+\t0x1.000000ffffffffffffffffffffffp-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000000ffffffffffffffffffffffp-120, false, false,\n+\t0x1.000001p-120, false, false),\n   TEST (\"7.5231642936781486349413765338158389908126215730251815381410\"\n \t\"5788244372130524340036572539247572422027587890625e-37\",\n \tfalse,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1p-120, false,\n-\t0x1.000002p-120, false,\n-\ttrue,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\ttrue,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\ttrue,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\ttrue,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\ttrue,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false),\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\ttrue,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\ttrue,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\ttrue,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\ttrue,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\ttrue,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false),\n   TEST (\"7.5231642936781486349413765338158389908126215730251815381410\"\n \t\"578824437213052434003657253924757242202758789062501e-37\",\n \tfalse,\n-\t0x1p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1p-120, false,\n-\t0x1.000002p-120, false,\n-\tfalse,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.0000010000001p-120, false,\n-\tfalse,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.0000010000000002p-120, false,\n-\tfalse,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.0000010000000002p-120, false,\n-\tfalse,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001000000000000000000008p-120, false,\n-\tfalse,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.000001p-120, false,\n-\t0x1.0000010000000000000000000001p-120, false),\n+\t0x1p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\tfalse,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.0000010000001p-120, false, false,\n+\tfalse,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.0000010000000002p-120, false, false,\n+\tfalse,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.0000010000000002p-120, false, false,\n+\tfalse,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001000000000000000000008p-120, false, false,\n+\tfalse,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.000001p-120, false, false,\n+\t0x1.0000010000000000000000000001p-120, false, false),\n   TEST (\"7.5231647420936572188828392294093056435857835827090029386261\"\n \t\"048447055721499765468252007849514484405517578125e-37\",\n \ttrue,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\ttrue,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\ttrue,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\ttrue,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\ttrue,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\ttrue,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false),\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\ttrue,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\ttrue,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\ttrue,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\ttrue,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\ttrue,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false),\n   TEST (\"7.5231651905091658028243019250027722963589455923928243391111\"\n \t\"518069674229947096932846761774271726608276367187499e-37\",\n \tfalse,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000004p-120, false,\n-\tfalse,\n-\t0x1.000002fffffffp-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000002fffffffp-120, false,\n-\t0x1.000003p-120, false,\n-\tfalse,\n-\t0x1.000002fffffffffep-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000002fffffffffep-120, false,\n-\t0x1.000003p-120, false,\n-\tfalse,\n-\t0x1.000002fffffffffep-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000002fffffffffep-120, false,\n-\t0x1.000003p-120, false,\n-\tfalse,\n-\t0x1.000002ffffffffffffffffffff8p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000002ffffffffffffffffffff8p-120, false,\n-\t0x1.000003p-120, false,\n-\tfalse,\n-\t0x1.000002ffffffffffffffffffffffp-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000002ffffffffffffffffffffffp-120, false,\n-\t0x1.000003p-120, false),\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\tfalse,\n+\t0x1.000002fffffffp-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000002fffffffp-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\tfalse,\n+\t0x1.000002fffffffffep-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000002fffffffffep-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\tfalse,\n+\t0x1.000002fffffffffep-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000002fffffffffep-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\tfalse,\n+\t0x1.000002ffffffffffffffffffff8p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000002ffffffffffffffffffff8p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\tfalse,\n+\t0x1.000002ffffffffffffffffffffffp-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000002ffffffffffffffffffffffp-120, false, false,\n+\t0x1.000003p-120, false, false),\n   TEST (\"7.5231651905091658028243019250027722963589455923928243391111\"\n \t\"5180696742299470969328467617742717266082763671875e-37\",\n \tfalse,\n-\t0x1.000002p-120, false,\n-\t0x1.000004p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000004p-120, false,\n-\ttrue,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\ttrue,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\ttrue,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\ttrue,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\ttrue,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false),\n+\t0x1.000002p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\ttrue,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\ttrue,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\ttrue,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\ttrue,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\ttrue,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false),\n   TEST (\"7.5231651905091658028243019250027722963589455923928243391111\"\n \t\"518069674229947096932846761774271726608276367187501e-37\",\n \tfalse,\n-\t0x1.000002p-120, false,\n-\t0x1.000004p-120, false,\n-\t0x1.000002p-120, false,\n-\t0x1.000004p-120, false,\n-\tfalse,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.0000030000001p-120, false,\n-\tfalse,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.0000030000000002p-120, false,\n-\tfalse,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.0000030000000002p-120, false,\n-\tfalse,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003000000000000000000008p-120, false,\n-\tfalse,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.000003p-120, false,\n-\t0x1.0000030000000000000000000001p-120, false),\n+\t0x1.000002p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000002p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\tfalse,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.0000030000001p-120, false, false,\n+\tfalse,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.0000030000000002p-120, false, false,\n+\tfalse,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.0000030000000002p-120, false, false,\n+\tfalse,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003000000000000000000008p-120, false, false,\n+\tfalse,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.000003p-120, false, false,\n+\t0x1.0000030000000000000000000001p-120, false, false),\n   TEST (\"7.5231656389246743867657646205962389491321076020766457395961\"\n \t\"98769229273839442839744151569902896881103515625e-37\",\n \ttrue,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\ttrue,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\ttrue,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\ttrue,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\ttrue,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\ttrue,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false,\n-\t0x1.000004p-120, false),\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\ttrue,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\ttrue,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\ttrue,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\ttrue,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\ttrue,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false,\n+\t0x1.000004p-120, false, false),\n   TEST (\"340282356779733661637539395458142568447.999\",\n \tfalse,\n-\t0xf.fffffp+124, false,\n-\t0xf.fffffp+124, false,\n-\t0xf.fffffp+124, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffff7ffffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff7ffffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\tfalse,\n-\t0xf.fffff7fffffffffp+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff7fffffffffp+124, false,\n-\t0xf.fffff8p+124, false,\n-\tfalse,\n-\t0xf.fffff7fffffffffp+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff7fffffffffp+124, false,\n-\t0xf.fffff8p+124, false,\n-\tfalse,\n-\t0xf.fffff7fffffffffffffffffffcp+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff7fffffffffffffffffffcp+124, false,\n-\t0xf.fffff8p+124, false,\n-\tfalse,\n-\t0xf.fffff7fffffffffffffffffffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff7fffffffffffffffffffff8p+124, false,\n-\t0xf.fffff8p+124, false),\n+\t0xf.fffffp+124, false, false,\n+\t0xf.fffffp+124, false, false,\n+\t0xf.fffffp+124, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffff7ffffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff7ffffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\tfalse,\n+\t0xf.fffff7fffffffffp+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff7fffffffffp+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\tfalse,\n+\t0xf.fffff7fffffffffp+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff7fffffffffp+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\tfalse,\n+\t0xf.fffff7fffffffffffffffffffcp+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff7fffffffffffffffffffcp+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\tfalse,\n+\t0xf.fffff7fffffffffffffffffffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff7fffffffffffffffffffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false),\n   TEST (\"340282356779733661637539395458142568448\",\n \tfalse,\n-\t0xf.fffffp+124, false,\n-\tINF, true,\n-\t0xf.fffffp+124, false,\n-\tINF, true,\n-\ttrue,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\ttrue,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\ttrue,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\ttrue,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\ttrue,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false),\n+\t0xf.fffffp+124, false, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, false, false,\n+\tINF, true, false,\n+\ttrue,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\ttrue,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\ttrue,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\ttrue,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\ttrue,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false),\n   TEST (\"340282356779733661637539395458142568448.001\",\n \tfalse,\n-\t0xf.fffffp+124, false,\n-\tINF, true,\n-\t0xf.fffffp+124, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff80000008p+124, false,\n-\tfalse,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8000000001p+124, false,\n-\tfalse,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8000000001p+124, false,\n-\tfalse,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff800000000000000000004p+124, false,\n-\tfalse,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff8p+124, false,\n-\t0xf.fffff80000000000000000000008p+124, false),\n+\t0xf.fffffp+124, false, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff80000008p+124, false, false,\n+\tfalse,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8000000001p+124, false, false,\n+\tfalse,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8000000001p+124, false, false,\n+\tfalse,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff800000000000000000004p+124, false, false,\n+\tfalse,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff8p+124, false, false,\n+\t0xf.fffff80000000000000000000008p+124, false, false),\n   TEST (\"-340282356779733661637539395458142568447.999\",\n \tfalse,\n-\t-INF, true,\n-\t-0xf.fffffp+124, false,\n-\t-0xf.fffffp+124, false,\n-\t-0xf.fffffp+124, false,\n-\tfalse,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff7ffffff8p+124, false,\n-\t-0xf.fffff7ffffff8p+124, false,\n-\tfalse,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff7fffffffffp+124, false,\n-\t-0xf.fffff7fffffffffp+124, false,\n-\tfalse,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff7fffffffffp+124, false,\n-\t-0xf.fffff7fffffffffp+124, false,\n-\tfalse,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff7fffffffffffffffffffcp+124, false,\n-\t-0xf.fffff7fffffffffffffffffffcp+124, false,\n-\tfalse,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff7fffffffffffffffffffff8p+124, false,\n-\t-0xf.fffff7fffffffffffffffffffff8p+124, false),\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, false, false,\n+\t-0xf.fffffp+124, false, false,\n+\t-0xf.fffffp+124, false, false,\n+\tfalse,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff7ffffff8p+124, false, false,\n+\t-0xf.fffff7ffffff8p+124, false, false,\n+\tfalse,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff7fffffffffp+124, false, false,\n+\t-0xf.fffff7fffffffffp+124, false, false,\n+\tfalse,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff7fffffffffp+124, false, false,\n+\t-0xf.fffff7fffffffffp+124, false, false,\n+\tfalse,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff7fffffffffffffffffffcp+124, false, false,\n+\t-0xf.fffff7fffffffffffffffffffcp+124, false, false,\n+\tfalse,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff7fffffffffffffffffffff8p+124, false, false,\n+\t-0xf.fffff7fffffffffffffffffffff8p+124, false, false),\n   TEST (\"-340282356779733661637539395458142568448\",\n \tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffp+124, false,\n-\t-0xf.fffffp+124, false,\n-\ttrue,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\ttrue,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\ttrue,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\ttrue,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\ttrue,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false),\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, false, false,\n+\t-0xf.fffffp+124, false, false,\n+\ttrue,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\ttrue,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\ttrue,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\ttrue,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\ttrue,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false),\n   TEST (\"-340282356779733661637539395458142568448.001\",\n \tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffp+124, false,\n-\t-0xf.fffffp+124, false,\n-\tfalse,\n-\t-0xf.fffff80000008p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\tfalse,\n-\t-0xf.fffff8000000001p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\tfalse,\n-\t-0xf.fffff8000000001p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\tfalse,\n-\t-0xf.fffff800000000000000000004p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\tfalse,\n-\t-0xf.fffff80000000000000000000008p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false,\n-\t-0xf.fffff8p+124, false),\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, false, false,\n+\t-0xf.fffffp+124, false, false,\n+\tfalse,\n+\t-0xf.fffff80000008p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\tfalse,\n+\t-0xf.fffff8000000001p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\tfalse,\n+\t-0xf.fffff8000000001p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\tfalse,\n+\t-0xf.fffff800000000000000000004p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\tfalse,\n+\t-0xf.fffff80000000000000000000008p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false,\n+\t-0xf.fffff8p+124, false, false),\n   TEST (\"179769313486231580793728971405303415079934132710037826936173\"\n \t\"778980444968292764750946649017977587207096330286416692887910\"\n \t\"946555547851940402630657488671505820681908902000708383676273\"\n@@ -1855,35 +1855,35 @@ static const struct test tests[] = {\n \t\"936475292719074168444365510704342711559699508093042880177904\"\n \t\"174497791.999\",\n \tfalse,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffff8p+1020, false,\n-\t0xf.ffffffffffff8p+1020, false,\n-\t0xf.ffffffffffff8p+1020, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffffbffp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffbffp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\tfalse,\n-\t0xf.ffffffffffffbffp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffbffp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\tfalse,\n-\t0xf.ffffffffffffbffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, true,\n-\t0xf.ffffffffffffbffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, true,\n-\tfalse,\n-\t0xf.ffffffffffffbffffffffffffff8p+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffbffffffffffffff8p+1020, false,\n-\t0xf.ffffffffffffcp+1020, false),\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffff8p+1020, false, false,\n+\t0xf.ffffffffffff8p+1020, false, false,\n+\t0xf.ffffffffffff8p+1020, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffffbffp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffbffp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\tfalse,\n+\t0xf.ffffffffffffbffp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffbffp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\tfalse,\n+\t0xf.ffffffffffffbffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, true, false,\n+\t0xf.ffffffffffffbffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, true, false,\n+\tfalse,\n+\t0xf.ffffffffffffbffffffffffffff8p+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffbffffffffffffff8p+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false),\n   TEST (\"179769313486231580793728971405303415079934132710037826936173\"\n \t\"778980444968292764750946649017977587207096330286416692887910\"\n \t\"946555547851940402630657488671505820681908902000708383676273\"\n@@ -1891,35 +1891,35 @@ static const struct test tests[] = {\n \t\"936475292719074168444365510704342711559699508093042880177904\"\n \t\"174497792\",\n \tfalse,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffff8p+1020, false,\n-\tINF, true,\n-\t0xf.ffffffffffff8p+1020, false,\n-\tINF, true,\n-\ttrue,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\ttrue,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\tfalse,\n-\t0xf.ffffffffffffcp+1020, true,\n-\t0xf.ffffffffffffcp+1020, true,\n-\t0xf.ffffffffffffcp+1020, true,\n-\t0xf.ffffffffffffcp+1020, true,\n-\ttrue,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false),\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffff8p+1020, false, false,\n+\tINF, true, false,\n+\t0xf.ffffffffffff8p+1020, false, false,\n+\tINF, true, false,\n+\ttrue,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\ttrue,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\tfalse,\n+\t0xf.ffffffffffffcp+1020, true, false,\n+\t0xf.ffffffffffffcp+1020, true, false,\n+\t0xf.ffffffffffffcp+1020, true, false,\n+\t0xf.ffffffffffffcp+1020, true, false,\n+\ttrue,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false),\n   TEST (\"179769313486231580793728971405303415079934132710037826936173\"\n \t\"778980444968292764750946649017977587207096330286416692887910\"\n \t\"946555547851940402630657488671505820681908902000708383676273\"\n@@ -1927,35 +1927,35 @@ static const struct test tests[] = {\n \t\"936475292719074168444365510704342711559699508093042880177904\"\n \t\"174497792.001\",\n \tfalse,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffff8p+1020, false,\n-\tINF, true,\n-\t0xf.ffffffffffff8p+1020, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffc01p+1020, false,\n-\tfalse,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffc01p+1020, false,\n-\tfalse,\n-\t0xf.ffffffffffffcp+1020, true,\n-\t0xf.ffffffffffffcp+1020, true,\n-\t0xf.ffffffffffffcp+1020, true,\n-\t0xf.ffffffffffffc0000000000004p+1020, true,\n-\tfalse,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffcp+1020, false,\n-\t0xf.ffffffffffffc000000000000008p+1020, false),\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffff8p+1020, false, false,\n+\tINF, true, false,\n+\t0xf.ffffffffffff8p+1020, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffc01p+1020, false, false,\n+\tfalse,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffc01p+1020, false, false,\n+\tfalse,\n+\t0xf.ffffffffffffcp+1020, true, false,\n+\t0xf.ffffffffffffcp+1020, true, false,\n+\t0xf.ffffffffffffcp+1020, true, false,\n+\t0xf.ffffffffffffc0000000000004p+1020, true, false,\n+\tfalse,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffcp+1020, false, false,\n+\t0xf.ffffffffffffc000000000000008p+1020, false, false),\n   TEST (\"-17976931348623158079372897140530341507993413271003782693617\"\n \t\"377898044496829276475094664901797758720709633028641669288791\"\n \t\"094655554785194040263065748867150582068190890200070838367627\"\n@@ -1963,35 +1963,35 @@ static const struct test tests[] = {\n \t\"493647529271907416844436551070434271155969950809304288017790\"\n \t\"4174497791.999\",\n \tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffp+124, true,\n-\t-0xf.fffffp+124, true,\n-\tfalse,\n-\t-INF, true,\n-\t-0xf.ffffffffffff8p+1020, false,\n-\t-0xf.ffffffffffff8p+1020, false,\n-\t-0xf.ffffffffffff8p+1020, false,\n-\tfalse,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffbffp+1020, false,\n-\t-0xf.ffffffffffffbffp+1020, false,\n-\tfalse,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffbffp+1020, false,\n-\t-0xf.ffffffffffffbffp+1020, false,\n-\tfalse,\n-\t-0xf.ffffffffffffcp+1020, true,\n-\t-0xf.ffffffffffffcp+1020, true,\n-\t-0xf.ffffffffffffbffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffbffffffffffffcp+1020, false,\n-\tfalse,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffbffffffffffffff8p+1020, false,\n-\t-0xf.ffffffffffffbffffffffffffff8p+1020, false),\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-0xf.ffffffffffff8p+1020, false, false,\n+\t-0xf.ffffffffffff8p+1020, false, false,\n+\t-0xf.ffffffffffff8p+1020, false, false,\n+\tfalse,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffbffp+1020, false, false,\n+\t-0xf.ffffffffffffbffp+1020, false, false,\n+\tfalse,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffbffp+1020, false, false,\n+\t-0xf.ffffffffffffbffp+1020, false, false,\n+\tfalse,\n+\t-0xf.ffffffffffffcp+1020, true, false,\n+\t-0xf.ffffffffffffcp+1020, true, false,\n+\t-0xf.ffffffffffffbffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffbffffffffffffcp+1020, false, false,\n+\tfalse,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffbffffffffffffff8p+1020, false, false,\n+\t-0xf.ffffffffffffbffffffffffffff8p+1020, false, false),\n   TEST (\"-17976931348623158079372897140530341507993413271003782693617\"\n \t\"377898044496829276475094664901797758720709633028641669288791\"\n \t\"094655554785194040263065748867150582068190890200070838367627\"\n@@ -1999,35 +1999,35 @@ static const struct test tests[] = {\n \t\"493647529271907416844436551070434271155969950809304288017790\"\n \t\"4174497792\",\n \tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffp+124, true,\n-\t-0xf.fffffp+124, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.ffffffffffff8p+1020, false,\n-\t-0xf.ffffffffffff8p+1020, false,\n-\ttrue,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\ttrue,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\tfalse,\n-\t-0xf.ffffffffffffcp+1020, true,\n-\t-0xf.ffffffffffffcp+1020, true,\n-\t-0xf.ffffffffffffcp+1020, true,\n-\t-0xf.ffffffffffffcp+1020, true,\n-\ttrue,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false),\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.ffffffffffff8p+1020, false, false,\n+\t-0xf.ffffffffffff8p+1020, false, false,\n+\ttrue,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\ttrue,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\tfalse,\n+\t-0xf.ffffffffffffcp+1020, true, false,\n+\t-0xf.ffffffffffffcp+1020, true, false,\n+\t-0xf.ffffffffffffcp+1020, true, false,\n+\t-0xf.ffffffffffffcp+1020, true, false,\n+\ttrue,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false),\n   TEST (\"-17976931348623158079372897140530341507993413271003782693617\"\n \t\"377898044496829276475094664901797758720709633028641669288791\"\n \t\"094655554785194040263065748867150582068190890200070838367627\"\n@@ -2035,35 +2035,35 @@ static const struct test tests[] = {\n \t\"493647529271907416844436551070434271155969950809304288017790\"\n \t\"4174497792.001\",\n \tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffp+124, true,\n-\t-0xf.fffffp+124, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.ffffffffffff8p+1020, false,\n-\t-0xf.ffffffffffff8p+1020, false,\n-\tfalse,\n-\t-0xf.ffffffffffffc01p+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\tfalse,\n-\t-0xf.ffffffffffffc01p+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\tfalse,\n-\t-0xf.ffffffffffffc0000000000004p+1020, true,\n-\t-0xf.ffffffffffffcp+1020, true,\n-\t-0xf.ffffffffffffcp+1020, true,\n-\t-0xf.ffffffffffffcp+1020, true,\n-\tfalse,\n-\t-0xf.ffffffffffffc000000000000008p+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false,\n-\t-0xf.ffffffffffffcp+1020, false),\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.ffffffffffff8p+1020, false, false,\n+\t-0xf.ffffffffffff8p+1020, false, false,\n+\tfalse,\n+\t-0xf.ffffffffffffc01p+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\tfalse,\n+\t-0xf.ffffffffffffc01p+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\tfalse,\n+\t-0xf.ffffffffffffc0000000000004p+1020, true, false,\n+\t-0xf.ffffffffffffcp+1020, true, false,\n+\t-0xf.ffffffffffffcp+1020, true, false,\n+\t-0xf.ffffffffffffcp+1020, true, false,\n+\tfalse,\n+\t-0xf.ffffffffffffc000000000000008p+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false,\n+\t-0xf.ffffffffffffcp+1020, false, false),\n   TEST (\"118973149535723176505351158982948866796625400469556721895649\"\n \t\"927756249918185172720476044944290457046138433056764616744328\"\n \t\"666255526748948793023632513609765434237723241753648908036202\"\n@@ -2148,35 +2148,35 @@ static const struct test tests[] = {\n \t\"578031503869424406179027994752890226443351619365453243328968\"\n \t\"8740976918527.999\",\n \tfalse,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+16380, false,\n-\t0xf.fffffffffffffffp+16380, false,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+16380, false,\n-\t0xf.fffffffffffffffp+16380, false,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffff7fffffffffff8p+16380, false,\n-\t0xf.fffffffffffffff8p+16380, false,\n-\t0xf.fffffffffffffff7fffffffffff8p+16380, false,\n-\t0xf.fffffffffffffff8p+16380, false),\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffff7fffffffffff8p+16380, false, false,\n+\t0xf.fffffffffffffff8p+16380, false, false,\n+\t0xf.fffffffffffffff7fffffffffff8p+16380, false, false,\n+\t0xf.fffffffffffffff8p+16380, false, false),\n   TEST (\"118973149535723176505351158982948866796625400469556721895649\"\n \t\"927756249918185172720476044944290457046138433056764616744328\"\n \t\"666255526748948793023632513609765434237723241753648908036202\"\n@@ -2261,35 +2261,35 @@ static const struct test tests[] = {\n \t\"578031503869424406179027994752890226443351619365453243328968\"\n \t\"8740976918528\",\n \tfalse,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\ttrue,\n-\t0xf.fffffffffffffff8p+16380, false,\n-\t0xf.fffffffffffffff8p+16380, false,\n-\t0xf.fffffffffffffff8p+16380, false,\n-\t0xf.fffffffffffffff8p+16380, false),\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\ttrue,\n+\t0xf.fffffffffffffff8p+16380, false, false,\n+\t0xf.fffffffffffffff8p+16380, false, false,\n+\t0xf.fffffffffffffff8p+16380, false, false,\n+\t0xf.fffffffffffffff8p+16380, false, false),\n   TEST (\"118973149535723176505351158982948866796625400469556721895649\"\n \t\"927756249918185172720476044944290457046138433056764616744328\"\n \t\"666255526748948793023632513609765434237723241753648908036202\"\n@@ -2374,35 +2374,35 @@ static const struct test tests[] = {\n \t\"578031503869424406179027994752890226443351619365453243328968\"\n \t\"8740976918528.001\",\n \tfalse,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffff8p+16380, false,\n-\t0xf.fffffffffffffff8p+16380, false,\n-\t0xf.fffffffffffffff8p+16380, false,\n-\t0xf.fffffffffffffff8000000000008p+16380, false),\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffff8p+16380, false, false,\n+\t0xf.fffffffffffffff8p+16380, false, false,\n+\t0xf.fffffffffffffff8p+16380, false, false,\n+\t0xf.fffffffffffffff8000000000008p+16380, false, false),\n   TEST (\"-11897314953572317650535115898294886679662540046955672189564\"\n \t\"992775624991818517272047604494429045704613843305676461674432\"\n \t\"866625552674894879302363251360976543423772324175364890803620\"\n@@ -2487,35 +2487,35 @@ static const struct test tests[] = {\n \t\"557803150386942440617902799475289022644335161936545324332896\"\n \t\"88740976918527.999\",\n \tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffp+124, true,\n-\t-0xf.fffffp+124, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.ffffffffffff8p+1020, true,\n-\t-0xf.ffffffffffff8p+1020, true,\n-\tfalse,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\tfalse,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tfalse,\n-\t-0xf.fffffffffffffff8p+16380, false,\n-\t-0xf.fffffffffffffff8p+16380, false,\n-\t-0xf.fffffffffffffff7fffffffffff8p+16380, false,\n-\t-0xf.fffffffffffffff7fffffffffff8p+16380, false),\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.ffffffffffff8p+1020, true, false,\n+\t-0xf.ffffffffffff8p+1020, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tfalse,\n+\t-0xf.fffffffffffffff8p+16380, false, false,\n+\t-0xf.fffffffffffffff8p+16380, false, false,\n+\t-0xf.fffffffffffffff7fffffffffff8p+16380, false, false,\n+\t-0xf.fffffffffffffff7fffffffffff8p+16380, false, false),\n   TEST (\"-11897314953572317650535115898294886679662540046955672189564\"\n \t\"992775624991818517272047604494429045704613843305676461674432\"\n \t\"866625552674894879302363251360976543423772324175364890803620\"\n@@ -2600,35 +2600,35 @@ static const struct test tests[] = {\n \t\"557803150386942440617902799475289022644335161936545324332896\"\n \t\"88740976918528\",\n \tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffp+124, true,\n-\t-0xf.fffffp+124, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.ffffffffffff8p+1020, true,\n-\t-0xf.ffffffffffff8p+1020, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\ttrue,\n-\t-0xf.fffffffffffffff8p+16380, false,\n-\t-0xf.fffffffffffffff8p+16380, false,\n-\t-0xf.fffffffffffffff8p+16380, false,\n-\t-0xf.fffffffffffffff8p+16380, false),\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.ffffffffffff8p+1020, true, false,\n+\t-0xf.ffffffffffff8p+1020, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\ttrue,\n+\t-0xf.fffffffffffffff8p+16380, false, false,\n+\t-0xf.fffffffffffffff8p+16380, false, false,\n+\t-0xf.fffffffffffffff8p+16380, false, false,\n+\t-0xf.fffffffffffffff8p+16380, false, false),\n   TEST (\"-11897314953572317650535115898294886679662540046955672189564\"\n \t\"992775624991818517272047604494429045704613843305676461674432\"\n \t\"866625552674894879302363251360976543423772324175364890803620\"\n@@ -2713,35 +2713,35 @@ static const struct test tests[] = {\n \t\"557803150386942440617902799475289022644335161936545324332896\"\n \t\"88740976918528.001\",\n \tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffp+124, true,\n-\t-0xf.fffffp+124, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.ffffffffffff8p+1020, true,\n-\t-0xf.ffffffffffff8p+1020, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tfalse,\n-\t-0xf.fffffffffffffff8000000000008p+16380, false,\n-\t-0xf.fffffffffffffff8p+16380, false,\n-\t-0xf.fffffffffffffff8p+16380, false,\n-\t-0xf.fffffffffffffff8p+16380, false),\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.ffffffffffff8p+1020, true, false,\n+\t-0xf.ffffffffffff8p+1020, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tfalse,\n+\t-0xf.fffffffffffffff8000000000008p+16380, false, false,\n+\t-0xf.fffffffffffffff8p+16380, false, false,\n+\t-0xf.fffffffffffffff8p+16380, false, false,\n+\t-0xf.fffffffffffffff8p+16380, false, false),\n   TEST (\"118973149535723176508575932662800707347995686986910214150118\"\n \t\"685272271246896789803961473130416053705672050873552479421805\"\n \t\"932646640744124594447361172514341324846716679654551308018400\"\n@@ -2826,35 +2826,35 @@ static const struct test tests[] = {\n \t\"972233447491583165728635513802591543441145939539353470970452\"\n \t\"5536550715391.999\",\n \tfalse,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffff8p+16380, false,\n-\t0xf.fffffffffffffffffffffffffff8p+16380, false,\n-\t0xf.fffffffffffffffffffffffffff8p+16380, false,\n-\tINF, true),\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffff8p+16380, false, false,\n+\t0xf.fffffffffffffffffffffffffff8p+16380, false, false,\n+\t0xf.fffffffffffffffffffffffffff8p+16380, false, false,\n+\tINF, true, false),\n   TEST (\"118973149535723176508575932662800707347995686986910214150118\"\n \t\"685272271246896789803961473130416053705672050873552479421805\"\n \t\"932646640744124594447361172514341324846716679654551308018400\"\n@@ -2939,35 +2939,35 @@ static const struct test tests[] = {\n \t\"972233447491583165728635513802591543441145939539353470970452\"\n \t\"5536550715392\",\n \tfalse,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffff8p+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffffffffffffff8p+16380, false,\n-\tINF, true),\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffff8p+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffffffffffffff8p+16380, false, false,\n+\tINF, true, false),\n   TEST (\"118973149535723176508575932662800707347995686986910214150118\"\n \t\"685272271246896789803961473130416053705672050873552479421805\"\n \t\"932646640744124594447361172514341324846716679654551308018400\"\n@@ -3052,35 +3052,35 @@ static const struct test tests[] = {\n \t\"972233447491583165728635513802591543441145939539353470970452\"\n \t\"5536550715392.001\",\n \tfalse,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffff8p+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffffffffffffff8p+16380, false,\n-\tINF, true),\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffff8p+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffffffffffffff8p+16380, false, false,\n+\tINF, true, false),\n   TEST (\"-11897314953572317650857593266280070734799568698691021415011\"\n \t\"868527227124689678980396147313041605370567205087355247942180\"\n \t\"593264664074412459444736117251434132484671667965455130801840\"\n@@ -3165,35 +3165,35 @@ static const struct test tests[] = {\n \t\"097223344749158316572863551380259154344114593953935347097045\"\n \t\"25536550715391.999\",\n \tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffp+124, true,\n-\t-0xf.fffffp+124, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.ffffffffffff8p+1020, true,\n-\t-0xf.ffffffffffff8p+1020, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tfalse,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffffffffffffff8p+16380, false,\n-\t-0xf.fffffffffffffffffffffffffff8p+16380, false,\n-\t-0xf.fffffffffffffffffffffffffff8p+16380, false),\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.ffffffffffff8p+1020, true, false,\n+\t-0xf.ffffffffffff8p+1020, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffffffffffffff8p+16380, false, false,\n+\t-0xf.fffffffffffffffffffffffffff8p+16380, false, false,\n+\t-0xf.fffffffffffffffffffffffffff8p+16380, false, false),\n   TEST (\"-11897314953572317650857593266280070734799568698691021415011\"\n \t\"868527227124689678980396147313041605370567205087355247942180\"\n \t\"593264664074412459444736117251434132484671667965455130801840\"\n@@ -3278,35 +3278,35 @@ static const struct test tests[] = {\n \t\"097223344749158316572863551380259154344114593953935347097045\"\n \t\"25536550715392\",\n \tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffp+124, true,\n-\t-0xf.fffffp+124, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.ffffffffffff8p+1020, true,\n-\t-0xf.ffffffffffff8p+1020, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffffffffffffff8p+16380, false,\n-\t-0xf.fffffffffffffffffffffffffff8p+16380, false),\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.ffffffffffff8p+1020, true, false,\n+\t-0xf.ffffffffffff8p+1020, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffffffffffffff8p+16380, false, false,\n+\t-0xf.fffffffffffffffffffffffffff8p+16380, false, false),\n   TEST (\"-11897314953572317650857593266280070734799568698691021415011\"\n \t\"868527227124689678980396147313041605370567205087355247942180\"\n \t\"593264664074412459444736117251434132484671667965455130801840\"\n@@ -3391,419 +3391,419 @@ static const struct test tests[] = {\n \t\"097223344749158316572863551380259154344114593953935347097045\"\n \t\"25536550715392.001\",\n \tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffp+124, true,\n-\t-0xf.fffffp+124, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.ffffffffffff8p+1020, true,\n-\t-0xf.ffffffffffff8p+1020, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffffffffffffff8p+16380, false,\n-\t-0xf.fffffffffffffffffffffffffff8p+16380, false),\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.ffffffffffff8p+1020, true, false,\n+\t-0xf.ffffffffffff8p+1020, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffffffffffffff8p+16380, false, false,\n+\t-0xf.fffffffffffffffffffffffffff8p+16380, false, false),\n   TEST (\"2.1019476964872256063855943749348741969203929128147736576356\"\n \t\"0242583468662402879090222995728254318237304687499e-45\",\n \tfalse,\n-\t0x8p-152, false,\n-\t0x8p-152, false,\n-\t0x8p-152, false,\n-\t0x1p-148, false,\n-\tfalse,\n-\t0xb.ffffffffffff8p-152, false,\n-\t0xcp-152, false,\n-\t0xb.ffffffffffff8p-152, false,\n-\t0xcp-152, false,\n-\tfalse,\n-\t0xb.fffffffffffffffp-152, false,\n-\t0xcp-152, false,\n-\t0xb.fffffffffffffffp-152, false,\n-\t0xcp-152, false,\n-\tfalse,\n-\t0xb.fffffffffffffffp-152, false,\n-\t0xcp-152, false,\n-\t0xb.fffffffffffffffp-152, false,\n-\t0xcp-152, false,\n-\tfalse,\n-\t0xb.fffffffffffffffffffffffffcp-152, false,\n-\t0xcp-152, false,\n-\t0xb.fffffffffffffffffffffffffcp-152, false,\n-\t0xcp-152, false,\n-\tfalse,\n-\t0xb.fffffffffffffffffffffffffff8p-152, false,\n-\t0xcp-152, false,\n-\t0xb.fffffffffffffffffffffffffff8p-152, false,\n-\t0xcp-152, false),\n+\t0x8p-152, false, true,\n+\t0x8p-152, false, true,\n+\t0x8p-152, false, true,\n+\t0x1p-148, false, true,\n+\tfalse,\n+\t0xb.ffffffffffff8p-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xb.ffffffffffff8p-152, false, false,\n+\t0xcp-152, false, false,\n+\tfalse,\n+\t0xb.fffffffffffffffp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xb.fffffffffffffffp-152, false, false,\n+\t0xcp-152, false, false,\n+\tfalse,\n+\t0xb.fffffffffffffffp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xb.fffffffffffffffp-152, false, false,\n+\t0xcp-152, false, false,\n+\tfalse,\n+\t0xb.fffffffffffffffffffffffffcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xb.fffffffffffffffffffffffffcp-152, false, false,\n+\t0xcp-152, false, false,\n+\tfalse,\n+\t0xb.fffffffffffffffffffffffffff8p-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xb.fffffffffffffffffffffffffff8p-152, false, false,\n+\t0xcp-152, false, false),\n   TEST (\"2.1019476964872256063855943749348741969203929128147736576356\"\n \t\"02425834686624028790902229957282543182373046875e-45\",\n \tfalse,\n-\t0x8p-152, false,\n-\t0x1p-148, false,\n-\t0x8p-152, false,\n-\t0x1p-148, false,\n-\ttrue,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\ttrue,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\ttrue,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\ttrue,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\ttrue,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false),\n+\t0x8p-152, false, true,\n+\t0x1p-148, false, true,\n+\t0x8p-152, false, true,\n+\t0x1p-148, false, true,\n+\ttrue,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\ttrue,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\ttrue,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\ttrue,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\ttrue,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false),\n   TEST (\"2.1019476964872256063855943749348741969203929128147736576356\"\n \t\"0242583468662402879090222995728254318237304687501e-45\",\n \tfalse,\n-\t0x8p-152, false,\n-\t0x1p-148, false,\n-\t0x8p-152, false,\n-\t0x1p-148, false,\n-\tfalse,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xc.0000000000008p-152, false,\n-\tfalse,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xc.000000000000001p-152, false,\n-\tfalse,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xc.000000000000001p-152, false,\n-\tfalse,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xc.00000000000000000000000004p-152, false,\n-\tfalse,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xcp-152, false,\n-\t0xc.0000000000000000000000000008p-152, false),\n+\t0x8p-152, false, true,\n+\t0x1p-148, false, true,\n+\t0x8p-152, false, true,\n+\t0x1p-148, false, true,\n+\tfalse,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xc.0000000000008p-152, false, false,\n+\tfalse,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xc.000000000000001p-152, false, false,\n+\tfalse,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xc.000000000000001p-152, false, false,\n+\tfalse,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xc.00000000000000000000000004p-152, false, false,\n+\tfalse,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xcp-152, false, false,\n+\t0xc.0000000000000000000000000008p-152, false, false),\n   TEST (\"-2.101947696487225606385594374934874196920392912814773657635\"\n \t\"60242583468662402879090222995728254318237304687499e-45\",\n \tfalse,\n-\t-0x1p-148, false,\n-\t-0x8p-152, false,\n-\t-0x8p-152, false,\n-\t-0x8p-152, false,\n-\tfalse,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xb.ffffffffffff8p-152, false,\n-\t-0xb.ffffffffffff8p-152, false,\n-\tfalse,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xb.fffffffffffffffp-152, false,\n-\t-0xb.fffffffffffffffp-152, false,\n-\tfalse,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xb.fffffffffffffffp-152, false,\n-\t-0xb.fffffffffffffffp-152, false,\n-\tfalse,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xb.fffffffffffffffffffffffffcp-152, false,\n-\t-0xb.fffffffffffffffffffffffffcp-152, false,\n-\tfalse,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xb.fffffffffffffffffffffffffff8p-152, false,\n-\t-0xb.fffffffffffffffffffffffffff8p-152, false),\n+\t-0x1p-148, false, true,\n+\t-0x8p-152, false, true,\n+\t-0x8p-152, false, true,\n+\t-0x8p-152, false, true,\n+\tfalse,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xb.ffffffffffff8p-152, false, false,\n+\t-0xb.ffffffffffff8p-152, false, false,\n+\tfalse,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xb.fffffffffffffffp-152, false, false,\n+\t-0xb.fffffffffffffffp-152, false, false,\n+\tfalse,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xb.fffffffffffffffp-152, false, false,\n+\t-0xb.fffffffffffffffp-152, false, false,\n+\tfalse,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xb.fffffffffffffffffffffffffcp-152, false, false,\n+\t-0xb.fffffffffffffffffffffffffcp-152, false, false,\n+\tfalse,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xb.fffffffffffffffffffffffffff8p-152, false, false,\n+\t-0xb.fffffffffffffffffffffffffff8p-152, false, false),\n   TEST (\"-2.101947696487225606385594374934874196920392912814773657635\"\n \t\"602425834686624028790902229957282543182373046875e-45\",\n \tfalse,\n-\t-0x1p-148, false,\n-\t-0x1p-148, false,\n-\t-0x8p-152, false,\n-\t-0x8p-152, false,\n-\ttrue,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\ttrue,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\ttrue,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\ttrue,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\ttrue,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false),\n+\t-0x1p-148, false, true,\n+\t-0x1p-148, false, true,\n+\t-0x8p-152, false, true,\n+\t-0x8p-152, false, true,\n+\ttrue,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\ttrue,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\ttrue,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\ttrue,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\ttrue,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false),\n   TEST (\"-2.101947696487225606385594374934874196920392912814773657635\"\n \t\"60242583468662402879090222995728254318237304687501e-45\",\n \tfalse,\n-\t-0x1p-148, false,\n-\t-0x1p-148, false,\n-\t-0x8p-152, false,\n-\t-0x8p-152, false,\n-\tfalse,\n-\t-0xc.0000000000008p-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\tfalse,\n-\t-0xc.000000000000001p-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\tfalse,\n-\t-0xc.000000000000001p-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\tfalse,\n-\t-0xc.00000000000000000000000004p-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\tfalse,\n-\t-0xc.0000000000000000000000000008p-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false,\n-\t-0xcp-152, false),\n+\t-0x1p-148, false, true,\n+\t-0x1p-148, false, true,\n+\t-0x8p-152, false, true,\n+\t-0x8p-152, false, true,\n+\tfalse,\n+\t-0xc.0000000000008p-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\tfalse,\n+\t-0xc.000000000000001p-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\tfalse,\n+\t-0xc.000000000000001p-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\tfalse,\n+\t-0xc.00000000000000000000000004p-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\tfalse,\n+\t-0xc.0000000000000000000000000008p-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false,\n+\t-0xcp-152, false, false),\n   TEST (\"3.5032461608120426773093239582247903282006548546912894293926\"\n \t\"7070972447770671465150371659547090530395507812499e-45\",\n \tfalse,\n-\t0x1p-148, false,\n-\t0x1p-148, false,\n-\t0x1p-148, false,\n-\t0x1.8p-148, false,\n-\tfalse,\n-\t0x1.3ffffffffffffp-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.3ffffffffffffp-148, false,\n-\t0x1.4p-148, false,\n-\tfalse,\n-\t0x1.3ffffffffffffffep-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.3ffffffffffffffep-148, false,\n-\t0x1.4p-148, false,\n-\tfalse,\n-\t0x1.3ffffffffffffffep-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.3ffffffffffffffep-148, false,\n-\t0x1.4p-148, false,\n-\tfalse,\n-\t0x1.3fffffffffffffffffffffffff8p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.3fffffffffffffffffffffffff8p-148, false,\n-\t0x1.4p-148, false,\n-\tfalse,\n-\t0x1.3fffffffffffffffffffffffffffp-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.3fffffffffffffffffffffffffffp-148, false,\n-\t0x1.4p-148, false),\n+\t0x1p-148, false, true,\n+\t0x1p-148, false, true,\n+\t0x1p-148, false, true,\n+\t0x1.8p-148, false, true,\n+\tfalse,\n+\t0x1.3ffffffffffffp-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.3ffffffffffffp-148, false, false,\n+\t0x1.4p-148, false, false,\n+\tfalse,\n+\t0x1.3ffffffffffffffep-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.3ffffffffffffffep-148, false, false,\n+\t0x1.4p-148, false, false,\n+\tfalse,\n+\t0x1.3ffffffffffffffep-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.3ffffffffffffffep-148, false, false,\n+\t0x1.4p-148, false, false,\n+\tfalse,\n+\t0x1.3fffffffffffffffffffffffff8p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.3fffffffffffffffffffffffff8p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\tfalse,\n+\t0x1.3fffffffffffffffffffffffffffp-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.3fffffffffffffffffffffffffffp-148, false, false,\n+\t0x1.4p-148, false, false),\n   TEST (\"3.5032461608120426773093239582247903282006548546912894293926\"\n \t\"70709724477706714651503716595470905303955078125e-45\",\n \tfalse,\n-\t0x1p-148, false,\n-\t0x1p-148, false,\n-\t0x1p-148, false,\n-\t0x1.8p-148, false,\n-\ttrue,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\ttrue,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\ttrue,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\ttrue,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\ttrue,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false),\n+\t0x1p-148, false, true,\n+\t0x1p-148, false, true,\n+\t0x1p-148, false, true,\n+\t0x1.8p-148, false, true,\n+\ttrue,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\ttrue,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\ttrue,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\ttrue,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\ttrue,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false),\n   TEST (\"3.5032461608120426773093239582247903282006548546912894293926\"\n \t\"7070972447770671465150371659547090530395507812501e-45\",\n \tfalse,\n-\t0x1p-148, false,\n-\t0x1.8p-148, false,\n-\t0x1p-148, false,\n-\t0x1.8p-148, false,\n-\tfalse,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4000000000001p-148, false,\n-\tfalse,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4000000000000002p-148, false,\n-\tfalse,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4000000000000002p-148, false,\n-\tfalse,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.400000000000000000000000008p-148, false,\n-\tfalse,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4p-148, false,\n-\t0x1.4000000000000000000000000001p-148, false),\n+\t0x1p-148, false, true,\n+\t0x1.8p-148, false, true,\n+\t0x1p-148, false, true,\n+\t0x1.8p-148, false, true,\n+\tfalse,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4000000000001p-148, false, false,\n+\tfalse,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4000000000000002p-148, false, false,\n+\tfalse,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4000000000000002p-148, false, false,\n+\tfalse,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.400000000000000000000000008p-148, false, false,\n+\tfalse,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4p-148, false, false,\n+\t0x1.4000000000000000000000000001p-148, false, false),\n   TEST (\"-3.503246160812042677309323958224790328200654854691289429392\"\n \t\"67070972447770671465150371659547090530395507812499e-45\",\n \tfalse,\n-\t-0x1.8p-148, false,\n-\t-0x1p-148, false,\n-\t-0x1p-148, false,\n-\t-0x1p-148, false,\n-\tfalse,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.3ffffffffffffp-148, false,\n-\t-0x1.3ffffffffffffp-148, false,\n-\tfalse,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.3ffffffffffffffep-148, false,\n-\t-0x1.3ffffffffffffffep-148, false,\n-\tfalse,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.3ffffffffffffffep-148, false,\n-\t-0x1.3ffffffffffffffep-148, false,\n-\tfalse,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.3fffffffffffffffffffffffff8p-148, false,\n-\t-0x1.3fffffffffffffffffffffffff8p-148, false,\n-\tfalse,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.3fffffffffffffffffffffffffffp-148, false,\n-\t-0x1.3fffffffffffffffffffffffffffp-148, false),\n+\t-0x1.8p-148, false, true,\n+\t-0x1p-148, false, true,\n+\t-0x1p-148, false, true,\n+\t-0x1p-148, false, true,\n+\tfalse,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.3ffffffffffffp-148, false, false,\n+\t-0x1.3ffffffffffffp-148, false, false,\n+\tfalse,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.3ffffffffffffffep-148, false, false,\n+\t-0x1.3ffffffffffffffep-148, false, false,\n+\tfalse,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.3ffffffffffffffep-148, false, false,\n+\t-0x1.3ffffffffffffffep-148, false, false,\n+\tfalse,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.3fffffffffffffffffffffffff8p-148, false, false,\n+\t-0x1.3fffffffffffffffffffffffff8p-148, false, false,\n+\tfalse,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.3fffffffffffffffffffffffffffp-148, false, false,\n+\t-0x1.3fffffffffffffffffffffffffffp-148, false, false),\n   TEST (\"-3.503246160812042677309323958224790328200654854691289429392\"\n \t\"670709724477706714651503716595470905303955078125e-45\",\n \tfalse,\n-\t-0x1.8p-148, false,\n-\t-0x1p-148, false,\n-\t-0x1p-148, false,\n-\t-0x1p-148, false,\n-\ttrue,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\ttrue,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\ttrue,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\ttrue,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\ttrue,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false),\n+\t-0x1.8p-148, false, true,\n+\t-0x1p-148, false, true,\n+\t-0x1p-148, false, true,\n+\t-0x1p-148, false, true,\n+\ttrue,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\ttrue,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\ttrue,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\ttrue,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\ttrue,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false),\n   TEST (\"-3.503246160812042677309323958224790328200654854691289429392\"\n \t\"67070972447770671465150371659547090530395507812501e-45\",\n \tfalse,\n-\t-0x1.8p-148, false,\n-\t-0x1.8p-148, false,\n-\t-0x1p-148, false,\n-\t-0x1p-148, false,\n-\tfalse,\n-\t-0x1.4000000000001p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\tfalse,\n-\t-0x1.4000000000000002p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\tfalse,\n-\t-0x1.4000000000000002p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\tfalse,\n-\t-0x1.400000000000000000000000008p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\tfalse,\n-\t-0x1.4000000000000000000000000001p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false,\n-\t-0x1.4p-148, false),\n+\t-0x1.8p-148, false, true,\n+\t-0x1.8p-148, false, true,\n+\t-0x1p-148, false, true,\n+\t-0x1p-148, false, true,\n+\tfalse,\n+\t-0x1.4000000000001p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\tfalse,\n+\t-0x1.4000000000000002p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\tfalse,\n+\t-0x1.4000000000000002p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\tfalse,\n+\t-0x1.400000000000000000000000008p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\tfalse,\n+\t-0x1.4000000000000000000000000001p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false,\n+\t-0x1.4p-148, false, false),\n   TEST (\"7.4109846876186981626485318930233205854758970392148714663837\"\n \t\"852375101326090531312779794975454245398856969484704316857659\"\n \t\"638998506553390969459816219401617281718945106978546710679176\"\n@@ -3818,35 +3818,35 @@ static const struct test tests[] = {\n \t\"337560846003984904972149117463085539556354188641513168478436\"\n \t\"31308023759629577398300170898437499e-324\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x4p-1076, false,\n-\t0x4p-1076, false,\n-\t0x4p-1076, false,\n-\t0x8p-1076, false,\n-\tfalse,\n-\t0x5.fffffffffffffff8p-1076, false,\n-\t0x6p-1076, false,\n-\t0x5.fffffffffffffff8p-1076, false,\n-\t0x6p-1076, false,\n-\tfalse,\n-\t0x5.fffffffffffffff8p-1076, false,\n-\t0x6p-1076, false,\n-\t0x5.fffffffffffffff8p-1076, false,\n-\t0x6p-1076, false,\n-\tfalse,\n-\t0x4p-1076, false,\n-\t0x4p-1076, false,\n-\t0x4p-1076, false,\n-\t0x8p-1076, false,\n-\tfalse,\n-\t0x5.fffffffffffffffffffffffffffcp-1076, false,\n-\t0x6p-1076, false,\n-\t0x5.fffffffffffffffffffffffffffcp-1076, false,\n-\t0x6p-1076, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x4p-1076, false, true,\n+\t0x4p-1076, false, true,\n+\t0x4p-1076, false, true,\n+\t0x8p-1076, false, true,\n+\tfalse,\n+\t0x5.fffffffffffffff8p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x5.fffffffffffffff8p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\tfalse,\n+\t0x5.fffffffffffffff8p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x5.fffffffffffffff8p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\tfalse,\n+\t0x4p-1076, false, true,\n+\t0x4p-1076, false, true,\n+\t0x4p-1076, false, true,\n+\t0x8p-1076, false, true,\n+\tfalse,\n+\t0x5.fffffffffffffffffffffffffffcp-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x5.fffffffffffffffffffffffffffcp-1076, false, false,\n+\t0x6p-1076, false, false),\n   TEST (\"7.4109846876186981626485318930233205854758970392148714663837\"\n \t\"852375101326090531312779794975454245398856969484704316857659\"\n \t\"638998506553390969459816219401617281718945106978546710679176\"\n@@ -3861,35 +3861,35 @@ static const struct test tests[] = {\n \t\"337560846003984904972149117463085539556354188641513168478436\"\n \t\"313080237596295773983001708984375e-324\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x4p-1076, false,\n-\t0x8p-1076, false,\n-\t0x4p-1076, false,\n-\t0x8p-1076, false,\n-\ttrue,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false,\n-\ttrue,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false,\n-\tfalse,\n-\t0x4p-1076, false,\n-\t0x8p-1076, false,\n-\t0x4p-1076, false,\n-\t0x8p-1076, false,\n-\ttrue,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x4p-1076, false, true,\n+\t0x8p-1076, false, true,\n+\t0x4p-1076, false, true,\n+\t0x8p-1076, false, true,\n+\ttrue,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\ttrue,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\tfalse,\n+\t0x4p-1076, false, true,\n+\t0x8p-1076, false, true,\n+\t0x4p-1076, false, true,\n+\t0x8p-1076, false, true,\n+\ttrue,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false),\n   TEST (\"7.4109846876186981626485318930233205854758970392148714663837\"\n \t\"852375101326090531312779794975454245398856969484704316857659\"\n \t\"638998506553390969459816219401617281718945106978546710679176\"\n@@ -3904,35 +3904,35 @@ static const struct test tests[] = {\n \t\"337560846003984904972149117463085539556354188641513168478436\"\n \t\"31308023759629577398300170898437501e-324\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x4p-1076, false,\n-\t0x8p-1076, false,\n-\t0x4p-1076, false,\n-\t0x8p-1076, false,\n-\tfalse,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false,\n-\t0x6.0000000000000008p-1076, false,\n-\tfalse,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false,\n-\t0x6.0000000000000008p-1076, false,\n-\tfalse,\n-\t0x4p-1076, false,\n-\t0x8p-1076, false,\n-\t0x4p-1076, false,\n-\t0x8p-1076, false,\n-\tfalse,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false,\n-\t0x6p-1076, false,\n-\t0x6.0000000000000000000000000004p-1076, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x4p-1076, false, true,\n+\t0x8p-1076, false, true,\n+\t0x4p-1076, false, true,\n+\t0x8p-1076, false, true,\n+\tfalse,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x6.0000000000000008p-1076, false, false,\n+\tfalse,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x6.0000000000000008p-1076, false, false,\n+\tfalse,\n+\t0x4p-1076, false, true,\n+\t0x8p-1076, false, true,\n+\t0x4p-1076, false, true,\n+\t0x8p-1076, false, true,\n+\tfalse,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x6p-1076, false, false,\n+\t0x6.0000000000000000000000000004p-1076, false, false),\n   TEST (\"-7.410984687618698162648531893023320585475897039214871466383\"\n \t\"785237510132609053131277979497545424539885696948470431685765\"\n \t\"963899850655339096945981621940161728171894510697854671067917\"\n@@ -3947,35 +3947,35 @@ static const struct test tests[] = {\n \t\"433756084600398490497214911746308553955635418864151316847843\"\n \t\"631308023759629577398300170898437499e-324\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-1076, false,\n-\t-0x4p-1076, false,\n-\t-0x4p-1076, false,\n-\t-0x4p-1076, false,\n-\tfalse,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x5.fffffffffffffff8p-1076, false,\n-\t-0x5.fffffffffffffff8p-1076, false,\n-\tfalse,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x5.fffffffffffffff8p-1076, false,\n-\t-0x5.fffffffffffffff8p-1076, false,\n-\tfalse,\n-\t-0x8p-1076, false,\n-\t-0x4p-1076, false,\n-\t-0x4p-1076, false,\n-\t-0x4p-1076, false,\n-\tfalse,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x5.fffffffffffffffffffffffffffcp-1076, false,\n-\t-0x5.fffffffffffffffffffffffffffcp-1076, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\tfalse,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x5.fffffffffffffff8p-1076, false, false,\n+\t-0x5.fffffffffffffff8p-1076, false, false,\n+\tfalse,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x5.fffffffffffffff8p-1076, false, false,\n+\t-0x5.fffffffffffffff8p-1076, false, false,\n+\tfalse,\n+\t-0x8p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\tfalse,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x5.fffffffffffffffffffffffffffcp-1076, false, false,\n+\t-0x5.fffffffffffffffffffffffffffcp-1076, false, false),\n   TEST (\"-7.410984687618698162648531893023320585475897039214871466383\"\n \t\"785237510132609053131277979497545424539885696948470431685765\"\n \t\"963899850655339096945981621940161728171894510697854671067917\"\n@@ -3990,35 +3990,35 @@ static const struct test tests[] = {\n \t\"433756084600398490497214911746308553955635418864151316847843\"\n \t\"6313080237596295773983001708984375e-324\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-1076, false,\n-\t-0x8p-1076, false,\n-\t-0x4p-1076, false,\n-\t-0x4p-1076, false,\n-\ttrue,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\ttrue,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\tfalse,\n-\t-0x8p-1076, false,\n-\t-0x8p-1076, false,\n-\t-0x4p-1076, false,\n-\t-0x4p-1076, false,\n-\ttrue,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-1076, false, true,\n+\t-0x8p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\ttrue,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\ttrue,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\tfalse,\n+\t-0x8p-1076, false, true,\n+\t-0x8p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\ttrue,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false),\n   TEST (\"-7.410984687618698162648531893023320585475897039214871466383\"\n \t\"785237510132609053131277979497545424539885696948470431685765\"\n \t\"963899850655339096945981621940161728171894510697854671067917\"\n@@ -4033,35 +4033,35 @@ static const struct test tests[] = {\n \t\"433756084600398490497214911746308553955635418864151316847843\"\n \t\"631308023759629577398300170898437501e-324\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-1076, false,\n-\t-0x8p-1076, false,\n-\t-0x4p-1076, false,\n-\t-0x4p-1076, false,\n-\tfalse,\n-\t-0x6.0000000000000008p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\tfalse,\n-\t-0x6.0000000000000008p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\tfalse,\n-\t-0x8p-1076, false,\n-\t-0x8p-1076, false,\n-\t-0x4p-1076, false,\n-\t-0x4p-1076, false,\n-\tfalse,\n-\t-0x6.0000000000000000000000000004p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false,\n-\t-0x6p-1076, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-1076, false, true,\n+\t-0x8p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\tfalse,\n+\t-0x6.0000000000000008p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\tfalse,\n+\t-0x6.0000000000000008p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\tfalse,\n+\t-0x8p-1076, false, true,\n+\t-0x8p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\tfalse,\n+\t-0x6.0000000000000000000000000004p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false,\n+\t-0x6p-1076, false, false),\n   TEST (\"5.4677992978237119037926089004291297245985762235403450155814\"\n \t\"707305425575329500966052143410629387408077958710210208052966\"\n \t\"529504784489330482549602621133847135082257338717668975178538\"\n@@ -4255,35 +4255,35 @@ static const struct test tests[] = {\n \t\"866268925981702690270202829595794350800918257913991744455922\"\n \t\"683343374046671669930219650268554687499e-4951\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x8p-16448, false,\n-\t0x8p-16448, false,\n-\t0x8p-16448, false,\n-\t0x1p-16444, false,\n-\tfalse,\n-\t0x8p-16448, false,\n-\t0xcp-16448, false,\n-\t0x8p-16448, false,\n-\t0xcp-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0xb.fffffffffffcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xb.fffffffffffcp-16448, false,\n-\t0xcp-16448, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x8p-16448, false, true,\n+\t0x8p-16448, false, true,\n+\t0x8p-16448, false, true,\n+\t0x1p-16444, false, true,\n+\tfalse,\n+\t0x8p-16448, false, true,\n+\t0xcp-16448, false, true,\n+\t0x8p-16448, false, true,\n+\t0xcp-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0xb.fffffffffffcp-16448, false, true,\n+\t0xcp-16448, false, true,\n+\t0xb.fffffffffffcp-16448, false, true,\n+\t0xcp-16448, false, true),\n   TEST (\"5.4677992978237119037926089004291297245985762235403450155814\"\n \t\"707305425575329500966052143410629387408077958710210208052966\"\n \t\"529504784489330482549602621133847135082257338717668975178538\"\n@@ -4477,35 +4477,35 @@ static const struct test tests[] = {\n \t\"866268925981702690270202829595794350800918257913991744455922\"\n \t\"6833433740466716699302196502685546875e-4951\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x8p-16448, false,\n-\t0x1p-16444, false,\n-\t0x8p-16448, false,\n-\t0x1p-16444, false,\n-\ttrue,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\ttrue,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x8p-16448, false, true,\n+\t0x1p-16444, false, true,\n+\t0x8p-16448, false, true,\n+\t0x1p-16444, false, true,\n+\ttrue,\n+\t0xcp-16448, false, false,\n+\t0xcp-16448, false, false,\n+\t0xcp-16448, false, false,\n+\t0xcp-16448, false, false,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\ttrue,\n+\t0xcp-16448, false, false,\n+\t0xcp-16448, false, false,\n+\t0xcp-16448, false, false,\n+\t0xcp-16448, false, false),\n   TEST (\"5.4677992978237119037926089004291297245985762235403450155814\"\n \t\"707305425575329500966052143410629387408077958710210208052966\"\n \t\"529504784489330482549602621133847135082257338717668975178538\"\n@@ -4699,35 +4699,35 @@ static const struct test tests[] = {\n \t\"866268925981702690270202829595794350800918257913991744455922\"\n \t\"683343374046671669930219650268554687501e-4951\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x8p-16448, false,\n-\t0x1p-16444, false,\n-\t0x8p-16448, false,\n-\t0x1p-16444, false,\n-\tfalse,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0x1p-16444, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xc.000000000004p-16448, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x8p-16448, false, true,\n+\t0x1p-16444, false, true,\n+\t0x8p-16448, false, true,\n+\t0x1p-16444, false, true,\n+\tfalse,\n+\t0xcp-16448, false, true,\n+\t0xcp-16448, false, true,\n+\t0xcp-16448, false, true,\n+\t0x1p-16444, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0xcp-16448, false, true,\n+\t0xcp-16448, false, true,\n+\t0xcp-16448, false, true,\n+\t0xc.000000000004p-16448, false, true),\n   TEST (\"-5.467799297823711903792608900429129724598576223540345015581\"\n \t\"470730542557532950096605214341062938740807795871021020805296\"\n \t\"652950478448933048254960262113384713508225733871766897517853\"\n@@ -4921,35 +4921,35 @@ static const struct test tests[] = {\n \t\"386626892598170269027020282959579435080091825791399174445592\"\n \t\"2683343374046671669930219650268554687499e-4951\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x1p-16444, false,\n-\t-0x8p-16448, false,\n-\t-0x8p-16448, false,\n-\t-0x8p-16448, false,\n-\tfalse,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0x8p-16448, false,\n-\t-0x8p-16448, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xb.fffffffffffcp-16448, false,\n-\t-0xb.fffffffffffcp-16448, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x1p-16444, false, true,\n+\t-0x8p-16448, false, true,\n+\t-0x8p-16448, false, true,\n+\t-0x8p-16448, false, true,\n+\tfalse,\n+\t-0xcp-16448, false, true,\n+\t-0xcp-16448, false, true,\n+\t-0x8p-16448, false, true,\n+\t-0x8p-16448, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0xcp-16448, false, true,\n+\t-0xcp-16448, false, true,\n+\t-0xb.fffffffffffcp-16448, false, true,\n+\t-0xb.fffffffffffcp-16448, false, true),\n   TEST (\"-5.467799297823711903792608900429129724598576223540345015581\"\n \t\"470730542557532950096605214341062938740807795871021020805296\"\n \t\"652950478448933048254960262113384713508225733871766897517853\"\n@@ -5143,35 +5143,35 @@ static const struct test tests[] = {\n \t\"386626892598170269027020282959579435080091825791399174445592\"\n \t\"26833433740466716699302196502685546875e-4951\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x1p-16444, false,\n-\t-0x1p-16444, false,\n-\t-0x8p-16448, false,\n-\t-0x8p-16448, false,\n-\ttrue,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x1p-16444, false, true,\n+\t-0x1p-16444, false, true,\n+\t-0x8p-16448, false, true,\n+\t-0x8p-16448, false, true,\n+\ttrue,\n+\t-0xcp-16448, false, false,\n+\t-0xcp-16448, false, false,\n+\t-0xcp-16448, false, false,\n+\t-0xcp-16448, false, false,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0xcp-16448, false, false,\n+\t-0xcp-16448, false, false,\n+\t-0xcp-16448, false, false,\n+\t-0xcp-16448, false, false),\n   TEST (\"-5.467799297823711903792608900429129724598576223540345015581\"\n \t\"470730542557532950096605214341062938740807795871021020805296\"\n \t\"652950478448933048254960262113384713508225733871766897517853\"\n@@ -5365,35 +5365,35 @@ static const struct test tests[] = {\n \t\"386626892598170269027020282959579435080091825791399174445592\"\n \t\"2683343374046671669930219650268554687501e-4951\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x1p-16444, false,\n-\t-0x1p-16444, false,\n-\t-0x8p-16448, false,\n-\t-0x8p-16448, false,\n-\tfalse,\n-\t-0x1p-16444, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0xc.000000000004p-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x1p-16444, false, true,\n+\t-0x1p-16444, false, true,\n+\t-0x8p-16448, false, true,\n+\t-0x8p-16448, false, true,\n+\tfalse,\n+\t-0x1p-16444, false, true,\n+\t-0xcp-16448, false, true,\n+\t-0xcp-16448, false, true,\n+\t-0xcp-16448, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0xc.000000000004p-16448, false, true,\n+\t-0xcp-16448, false, true,\n+\t-0xcp-16448, false, true,\n+\t-0xcp-16448, false, true),\n   TEST (\"5.4677992978237119037926089004291297245985762235403450155814\"\n \t\"707305425575329500966052143410629387408077958710210208052966\"\n \t\"529504784489330482549602621133847135082257338717668975178538\"\n@@ -5587,35 +5587,35 @@ static const struct test tests[] = {\n \t\"866268925981702690270202829595794350800918257913991744455922\"\n \t\"683343374046671669930219650268554687499e-4951\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x8p-16448, false,\n-\t0x8p-16448, false,\n-\t0x8p-16448, false,\n-\t0x1p-16444, false,\n-\tfalse,\n-\t0x8p-16448, false,\n-\t0xcp-16448, false,\n-\t0x8p-16448, false,\n-\t0xcp-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0xb.fffffffffffcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xb.fffffffffffcp-16448, false,\n-\t0xcp-16448, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x8p-16448, false, true,\n+\t0x8p-16448, false, true,\n+\t0x8p-16448, false, true,\n+\t0x1p-16444, false, true,\n+\tfalse,\n+\t0x8p-16448, false, true,\n+\t0xcp-16448, false, true,\n+\t0x8p-16448, false, true,\n+\t0xcp-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0xb.fffffffffffcp-16448, false, true,\n+\t0xcp-16448, false, true,\n+\t0xb.fffffffffffcp-16448, false, true,\n+\t0xcp-16448, false, true),\n   TEST (\"5.4677992978237119037926089004291297245985762235403450155814\"\n \t\"707305425575329500966052143410629387408077958710210208052966\"\n \t\"529504784489330482549602621133847135082257338717668975178538\"\n@@ -5809,35 +5809,35 @@ static const struct test tests[] = {\n \t\"866268925981702690270202829595794350800918257913991744455922\"\n \t\"6833433740466716699302196502685546875e-4951\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x8p-16448, false,\n-\t0x1p-16444, false,\n-\t0x8p-16448, false,\n-\t0x1p-16444, false,\n-\ttrue,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\ttrue,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x8p-16448, false, true,\n+\t0x1p-16444, false, true,\n+\t0x8p-16448, false, true,\n+\t0x1p-16444, false, true,\n+\ttrue,\n+\t0xcp-16448, false, false,\n+\t0xcp-16448, false, false,\n+\t0xcp-16448, false, false,\n+\t0xcp-16448, false, false,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\ttrue,\n+\t0xcp-16448, false, false,\n+\t0xcp-16448, false, false,\n+\t0xcp-16448, false, false,\n+\t0xcp-16448, false, false),\n   TEST (\"5.4677992978237119037926089004291297245985762235403450155814\"\n \t\"707305425575329500966052143410629387408077958710210208052966\"\n \t\"529504784489330482549602621133847135082257338717668975178538\"\n@@ -6031,35 +6031,35 @@ static const struct test tests[] = {\n \t\"866268925981702690270202829595794350800918257913991744455922\"\n \t\"683343374046671669930219650268554687501e-4951\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x8p-16448, false,\n-\t0x1p-16444, false,\n-\t0x8p-16448, false,\n-\t0x1p-16444, false,\n-\tfalse,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0x1p-16444, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xcp-16448, false,\n-\t0xc.000000000004p-16448, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x8p-16448, false, true,\n+\t0x1p-16444, false, true,\n+\t0x8p-16448, false, true,\n+\t0x1p-16444, false, true,\n+\tfalse,\n+\t0xcp-16448, false, true,\n+\t0xcp-16448, false, true,\n+\t0xcp-16448, false, true,\n+\t0x1p-16444, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0xcp-16448, false, true,\n+\t0xcp-16448, false, true,\n+\t0xcp-16448, false, true,\n+\t0xc.000000000004p-16448, false, true),\n   TEST (\"-5.467799297823711903792608900429129724598576223540345015581\"\n \t\"470730542557532950096605214341062938740807795871021020805296\"\n \t\"652950478448933048254960262113384713508225733871766897517853\"\n@@ -6253,35 +6253,35 @@ static const struct test tests[] = {\n \t\"386626892598170269027020282959579435080091825791399174445592\"\n \t\"2683343374046671669930219650268554687499e-4951\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x1p-16444, false,\n-\t-0x8p-16448, false,\n-\t-0x8p-16448, false,\n-\t-0x8p-16448, false,\n-\tfalse,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0x8p-16448, false,\n-\t-0x8p-16448, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xb.fffffffffffcp-16448, false,\n-\t-0xb.fffffffffffcp-16448, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x1p-16444, false, true,\n+\t-0x8p-16448, false, true,\n+\t-0x8p-16448, false, true,\n+\t-0x8p-16448, false, true,\n+\tfalse,\n+\t-0xcp-16448, false, true,\n+\t-0xcp-16448, false, true,\n+\t-0x8p-16448, false, true,\n+\t-0x8p-16448, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0xcp-16448, false, true,\n+\t-0xcp-16448, false, true,\n+\t-0xb.fffffffffffcp-16448, false, true,\n+\t-0xb.fffffffffffcp-16448, false, true),\n   TEST (\"-5.467799297823711903792608900429129724598576223540345015581\"\n \t\"470730542557532950096605214341062938740807795871021020805296\"\n \t\"652950478448933048254960262113384713508225733871766897517853\"\n@@ -6475,35 +6475,35 @@ static const struct test tests[] = {\n \t\"386626892598170269027020282959579435080091825791399174445592\"\n \t\"26833433740466716699302196502685546875e-4951\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x1p-16444, false,\n-\t-0x1p-16444, false,\n-\t-0x8p-16448, false,\n-\t-0x8p-16448, false,\n-\ttrue,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x1p-16444, false, true,\n+\t-0x1p-16444, false, true,\n+\t-0x8p-16448, false, true,\n+\t-0x8p-16448, false, true,\n+\ttrue,\n+\t-0xcp-16448, false, false,\n+\t-0xcp-16448, false, false,\n+\t-0xcp-16448, false, false,\n+\t-0xcp-16448, false, false,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0xcp-16448, false, false,\n+\t-0xcp-16448, false, false,\n+\t-0xcp-16448, false, false,\n+\t-0xcp-16448, false, false),\n   TEST (\"-5.467799297823711903792608900429129724598576223540345015581\"\n \t\"470730542557532950096605214341062938740807795871021020805296\"\n \t\"652950478448933048254960262113384713508225733871766897517853\"\n@@ -6697,630 +6697,630 @@ static const struct test tests[] = {\n \t\"386626892598170269027020282959579435080091825791399174445592\"\n \t\"2683343374046671669930219650268554687501e-4951\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x1p-16444, false,\n-\t-0x1p-16444, false,\n-\t-0x8p-16448, false,\n-\t-0x8p-16448, false,\n-\tfalse,\n-\t-0x1p-16444, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0xc.000000000004p-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false,\n-\t-0xcp-16448, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x1p-16444, false, true,\n+\t-0x1p-16444, false, true,\n+\t-0x8p-16448, false, true,\n+\t-0x8p-16448, false, true,\n+\tfalse,\n+\t-0x1p-16444, false, true,\n+\t-0xcp-16448, false, true,\n+\t-0xcp-16448, false, true,\n+\t-0xcp-16448, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0xc.000000000004p-16448, false, true,\n+\t-0xcp-16448, false, true,\n+\t-0xcp-16448, false, true,\n+\t-0xcp-16448, false, true),\n   TEST (\"-0x0.7p-149\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false,\n-\ttrue,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false,\n-\ttrue,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false,\n-\ttrue,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false,\n-\ttrue,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false,\n-\t-0x3.8p-152, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false,\n+\ttrue,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false,\n+\ttrue,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false,\n+\ttrue,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false,\n+\ttrue,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false,\n+\t-0x3.8p-152, false, false),\n   TEST (\"-0x0.7p-1074\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x1.cp-1076, false,\n-\t-0x1.cp-1076, false,\n-\t-0x1.cp-1076, false,\n-\t-0x1.cp-1076, false,\n-\ttrue,\n-\t-0x1.cp-1076, false,\n-\t-0x1.cp-1076, false,\n-\t-0x1.cp-1076, false,\n-\t-0x1.cp-1076, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x1.cp-1076, false,\n-\t-0x1.cp-1076, false,\n-\t-0x1.cp-1076, false,\n-\t-0x1.cp-1076, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x1.cp-1076, false, false,\n+\t-0x1.cp-1076, false, false,\n+\t-0x1.cp-1076, false, false,\n+\t-0x1.cp-1076, false, false,\n+\ttrue,\n+\t-0x1.cp-1076, false, false,\n+\t-0x1.cp-1076, false, false,\n+\t-0x1.cp-1076, false, false,\n+\t-0x1.cp-1076, false, false,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x1.cp-1076, false, false,\n+\t-0x1.cp-1076, false, false,\n+\t-0x1.cp-1076, false, false,\n+\t-0x1.cp-1076, false, false),\n   TEST (\"-0x0.7p-16445\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x3.8p-16448, false,\n-\t-0x3.8p-16448, false,\n-\t-0x3.8p-16448, false,\n-\t-0x3.8p-16448, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16448, false, true,\n+\t-0x4p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x3.8p-16448, false, false,\n+\t-0x3.8p-16448, false, false,\n+\t-0x3.8p-16448, false, false,\n+\t-0x3.8p-16448, false, false),\n   TEST (\"-0x0.7p-16494\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16496, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16496, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true),\n   TEST (\"0x1p-150\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\ttrue,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\ttrue,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\ttrue,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\ttrue,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\ttrue,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\ttrue,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\ttrue,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\ttrue,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\ttrue,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\ttrue,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false),\n   TEST (\"0x1p-1075\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\ttrue,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\ttrue,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\ttrue,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\ttrue,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\ttrue,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\ttrue,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false),\n   TEST (\"0x1p-16446\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-16448, false,\n-\ttrue,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\ttrue,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-16448, false, true,\n+\ttrue,\n+\t0x4p-16448, false, false,\n+\t0x4p-16448, false, false,\n+\t0x4p-16448, false, false,\n+\t0x4p-16448, false, false,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\ttrue,\n+\t0x4p-16448, false, false,\n+\t0x4p-16448, false, false,\n+\t0x4p-16448, false, false,\n+\t0x4p-16448, false, false),\n   TEST (\"0x1p-16495\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-16496, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-16496, false, true),\n   TEST (\"-0x1p-150\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\ttrue,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\ttrue,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\ttrue,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\ttrue,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\ttrue,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\ttrue,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\ttrue,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\ttrue,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false),\n   TEST (\"-0x1p-1075\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\ttrue,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\ttrue,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false),\n   TEST (\"-0x1p-16446\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x4p-16448, false, false,\n+\t-0x4p-16448, false, false,\n+\t-0x4p-16448, false, false,\n+\t-0x4p-16448, false, false,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x4p-16448, false, false,\n+\t-0x4p-16448, false, false,\n+\t-0x4p-16448, false, false,\n+\t-0x4p-16448, false, false),\n   TEST (\"-0x1p-16495\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16496, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16496, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true),\n   TEST (\".70064923216240853546186479164495807e-45\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4.0000000000004p-152, false,\n-\tfalse,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4.0000000000000008p-152, false,\n-\tfalse,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4.0000000000000008p-152, false,\n-\tfalse,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4.00000000000000000000000002p-152, false,\n-\tfalse,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4.0000000000000000000000000004p-152, false),\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4.0000000000004p-152, false, false,\n+\tfalse,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4.0000000000000008p-152, false, false,\n+\tfalse,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4.0000000000000008p-152, false, false,\n+\tfalse,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4.00000000000000000000000002p-152, false, false,\n+\tfalse,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4.0000000000000000000000000004p-152, false, false),\n   TEST (\"7.0064923216240853546186479164495806564013097093825788587853\"\n \t\"4141944895541342930300743319094181060791015624e-46\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x3.ffffffffffffep-152, false,\n-\t0x4p-152, false,\n-\t0x3.ffffffffffffep-152, false,\n-\t0x4p-152, false,\n-\tfalse,\n-\t0x3.fffffffffffffffcp-152, false,\n-\t0x4p-152, false,\n-\t0x3.fffffffffffffffcp-152, false,\n-\t0x4p-152, false,\n-\tfalse,\n-\t0x3.fffffffffffffffcp-152, false,\n-\t0x4p-152, false,\n-\t0x3.fffffffffffffffcp-152, false,\n-\t0x4p-152, false,\n-\tfalse,\n-\t0x3.ffffffffffffffffffffffffffp-152, false,\n-\t0x4p-152, false,\n-\t0x3.ffffffffffffffffffffffffffp-152, false,\n-\t0x4p-152, false,\n-\tfalse,\n-\t0x3.fffffffffffffffffffffffffffep-152, false,\n-\t0x4p-152, false,\n-\t0x3.fffffffffffffffffffffffffffep-152, false,\n-\t0x4p-152, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x3.ffffffffffffep-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x3.ffffffffffffep-152, false, false,\n+\t0x4p-152, false, false,\n+\tfalse,\n+\t0x3.fffffffffffffffcp-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x3.fffffffffffffffcp-152, false, false,\n+\t0x4p-152, false, false,\n+\tfalse,\n+\t0x3.fffffffffffffffcp-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x3.fffffffffffffffcp-152, false, false,\n+\t0x4p-152, false, false,\n+\tfalse,\n+\t0x3.ffffffffffffffffffffffffffp-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x3.ffffffffffffffffffffffffffp-152, false, false,\n+\t0x4p-152, false, false,\n+\tfalse,\n+\t0x3.fffffffffffffffffffffffffffep-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x3.fffffffffffffffffffffffffffep-152, false, false,\n+\t0x4p-152, false, false),\n   TEST (\"7.0064923216240853546186479164495806564013097093825788587853\"\n \t\"4141944895541342930300743319094181060791015625e-46\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\ttrue,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\ttrue,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\ttrue,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\ttrue,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\ttrue,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\ttrue,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\ttrue,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\ttrue,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\ttrue,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\ttrue,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false),\n   TEST (\"7.0064923216240853546186479164495806564013097093825788587853\"\n \t\"4141944895541342930300743319094181060791015626e-46\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4.0000000000004p-152, false,\n-\tfalse,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4.0000000000000008p-152, false,\n-\tfalse,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4.0000000000000008p-152, false,\n-\tfalse,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4.00000000000000000000000002p-152, false,\n-\tfalse,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4p-152, false,\n-\t0x4.0000000000000000000000000004p-152, false),\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4.0000000000004p-152, false, false,\n+\tfalse,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4.0000000000000008p-152, false, false,\n+\tfalse,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4.0000000000000008p-152, false, false,\n+\tfalse,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4.00000000000000000000000002p-152, false, false,\n+\tfalse,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4p-152, false, false,\n+\t0x4.0000000000000000000000000004p-152, false, false),\n   TEST (\"-7.006492321624085354618647916449580656401309709382578858785\"\n \t\"34141944895541342930300743319094181060791015624e-46\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x3.ffffffffffffep-152, false,\n-\t-0x3.ffffffffffffep-152, false,\n-\tfalse,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x3.fffffffffffffffcp-152, false,\n-\t-0x3.fffffffffffffffcp-152, false,\n-\tfalse,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x3.fffffffffffffffcp-152, false,\n-\t-0x3.fffffffffffffffcp-152, false,\n-\tfalse,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x3.ffffffffffffffffffffffffffp-152, false,\n-\t-0x3.ffffffffffffffffffffffffffp-152, false,\n-\tfalse,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x3.fffffffffffffffffffffffffffep-152, false,\n-\t-0x3.fffffffffffffffffffffffffffep-152, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x3.ffffffffffffep-152, false, false,\n+\t-0x3.ffffffffffffep-152, false, false,\n+\tfalse,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x3.fffffffffffffffcp-152, false, false,\n+\t-0x3.fffffffffffffffcp-152, false, false,\n+\tfalse,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x3.fffffffffffffffcp-152, false, false,\n+\t-0x3.fffffffffffffffcp-152, false, false,\n+\tfalse,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x3.ffffffffffffffffffffffffffp-152, false, false,\n+\t-0x3.ffffffffffffffffffffffffffp-152, false, false,\n+\tfalse,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x3.fffffffffffffffffffffffffffep-152, false, false,\n+\t-0x3.fffffffffffffffffffffffffffep-152, false, false),\n   TEST (\"-7.006492321624085354618647916449580656401309709382578858785\"\n \t\"34141944895541342930300743319094181060791015625e-46\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\ttrue,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\ttrue,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\ttrue,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\ttrue,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\ttrue,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\ttrue,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\ttrue,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\ttrue,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false),\n   TEST (\"-7.006492321624085354618647916449580656401309709382578858785\"\n \t\"34141944895541342930300743319094181060791015626e-46\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4.0000000000004p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\tfalse,\n-\t-0x4.0000000000000008p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\tfalse,\n-\t-0x4.0000000000000008p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\tfalse,\n-\t-0x4.00000000000000000000000002p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\tfalse,\n-\t-0x4.0000000000000000000000000004p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false,\n-\t-0x4p-152, false),\n+\t-0x8p-152, false, true,\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4.0000000000004p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\tfalse,\n+\t-0x4.0000000000000008p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\tfalse,\n+\t-0x4.0000000000000008p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\tfalse,\n+\t-0x4.00000000000000000000000002p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\tfalse,\n+\t-0x4.0000000000000000000000000004p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false,\n+\t-0x4p-152, false, false),\n   TEST (\"2.4703282292062327208828439643411068618252990130716238221279\"\n \t\"284125033775363510437593264991818081799618989828234772285886\"\n \t\"546332835517796989819938739800539093906315035659515570226392\"\n@@ -7335,35 +7335,35 @@ static const struct test tests[] = {\n \t\"779186948667994968324049705821028513185451396213837722826145\"\n \t\"437693412532098591327667236328124e-324\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x1.fffffffffffffffep-1076, false,\n-\t0x2p-1076, false,\n-\t0x1.fffffffffffffffep-1076, false,\n-\t0x2p-1076, false,\n-\tfalse,\n-\t0x1.fffffffffffffffep-1076, false,\n-\t0x2p-1076, false,\n-\t0x1.fffffffffffffffep-1076, false,\n-\t0x2p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x1.ffffffffffffffffffffffffffffp-1076, false,\n-\t0x2p-1076, false,\n-\t0x1.ffffffffffffffffffffffffffffp-1076, false,\n-\t0x2p-1076, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x1.fffffffffffffffep-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x1.fffffffffffffffep-1076, false, false,\n+\t0x2p-1076, false, false,\n+\tfalse,\n+\t0x1.fffffffffffffffep-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x1.fffffffffffffffep-1076, false, false,\n+\t0x2p-1076, false, false,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x1.ffffffffffffffffffffffffffffp-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x1.ffffffffffffffffffffffffffffp-1076, false, false,\n+\t0x2p-1076, false, false),\n   TEST (\"2.4703282292062327208828439643411068618252990130716238221279\"\n \t\"284125033775363510437593264991818081799618989828234772285886\"\n \t\"546332835517796989819938739800539093906315035659515570226392\"\n@@ -7378,35 +7378,35 @@ static const struct test tests[] = {\n \t\"779186948667994968324049705821028513185451396213837722826145\"\n \t\"437693412532098591327667236328125e-324\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\ttrue,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\ttrue,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\ttrue,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\ttrue,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\ttrue,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\ttrue,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false),\n   TEST (\"2.4703282292062327208828439643411068618252990130716238221279\"\n \t\"284125033775363510437593264991818081799618989828234772285886\"\n \t\"546332835517796989819938739800539093906315035659515570226392\"\n@@ -7421,35 +7421,35 @@ static const struct test tests[] = {\n \t\"779186948667994968324049705821028513185451396213837722826145\"\n \t\"437693412532098591327667236328126e-324\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2.0000000000000004p-1076, false,\n-\tfalse,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2.0000000000000004p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2p-1076, false,\n-\t0x2.0000000000000000000000000002p-1076, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2.0000000000000004p-1076, false, false,\n+\tfalse,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2.0000000000000004p-1076, false, false,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2p-1076, false, false,\n+\t0x2.0000000000000000000000000002p-1076, false, false),\n   TEST (\"-2.470328229206232720882843964341106861825299013071623822127\"\n \t\"928412503377536351043759326499181808179961898982823477228588\"\n \t\"654633283551779698981993873980053909390631503565951557022639\"\n@@ -7464,35 +7464,35 @@ static const struct test tests[] = {\n \t\"477918694866799496832404970582102851318545139621383772282614\"\n \t\"5437693412532098591327667236328124e-324\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x1.fffffffffffffffep-1076, false,\n-\t-0x1.fffffffffffffffep-1076, false,\n-\tfalse,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x1.fffffffffffffffep-1076, false,\n-\t-0x1.fffffffffffffffep-1076, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x1.ffffffffffffffffffffffffffffp-1076, false,\n-\t-0x1.ffffffffffffffffffffffffffffp-1076, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x1.fffffffffffffffep-1076, false, false,\n+\t-0x1.fffffffffffffffep-1076, false, false,\n+\tfalse,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x1.fffffffffffffffep-1076, false, false,\n+\t-0x1.fffffffffffffffep-1076, false, false,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x1.ffffffffffffffffffffffffffffp-1076, false, false,\n+\t-0x1.ffffffffffffffffffffffffffffp-1076, false, false),\n   TEST (\"-2.470328229206232720882843964341106861825299013071623822127\"\n \t\"928412503377536351043759326499181808179961898982823477228588\"\n \t\"654633283551779698981993873980053909390631503565951557022639\"\n@@ -7507,35 +7507,35 @@ static const struct test tests[] = {\n \t\"477918694866799496832404970582102851318545139621383772282614\"\n \t\"5437693412532098591327667236328125e-324\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\ttrue,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\ttrue,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false),\n   TEST (\"-2.470328229206232720882843964341106861825299013071623822127\"\n \t\"928412503377536351043759326499181808179961898982823477228588\"\n \t\"654633283551779698981993873980053909390631503565951557022639\"\n@@ -7550,35 +7550,35 @@ static const struct test tests[] = {\n \t\"477918694866799496832404970582102851318545139621383772282614\"\n \t\"5437693412532098591327667236328126e-324\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x2.0000000000000004p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\tfalse,\n-\t-0x2.0000000000000004p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x2.0000000000000000000000000002p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false,\n-\t-0x2p-1076, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x2.0000000000000004p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\tfalse,\n+\t-0x2.0000000000000004p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x2.0000000000000000000000000002p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false,\n+\t-0x2p-1076, false, false),\n   TEST (\"1.8225997659412373012642029668097099081995254078467816718604\"\n \t\"902435141858443166988684047803543129136025986236736736017655\"\n \t\"509834928163110160849867540377949045027419112905889658392846\"\n@@ -7772,35 +7772,35 @@ static const struct test tests[] = {\n \t\"622089641993900896756734276531931450266972752637997248151974\"\n \t\"2277811246822238899767398834228515624e-4951\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x4p-16448, false,\n-\t0x0p+0, false,\n-\t0x4p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x3.fffffffffffcp-16448, false,\n-\t0x4p-16448, false,\n-\t0x3.fffffffffffcp-16448, false,\n-\t0x4p-16448, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x4p-16448, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x3.fffffffffffcp-16448, false, true,\n+\t0x4p-16448, false, true,\n+\t0x3.fffffffffffcp-16448, false, true,\n+\t0x4p-16448, false, true),\n   TEST (\"1.8225997659412373012642029668097099081995254078467816718604\"\n \t\"902435141858443166988684047803543129136025986236736736017655\"\n \t\"509834928163110160849867540377949045027419112905889658392846\"\n@@ -7994,35 +7994,35 @@ static const struct test tests[] = {\n \t\"622089641993900896756734276531931450266972752637997248151974\"\n \t\"2277811246822238899767398834228515625e-4951\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-16448, false,\n-\ttrue,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\ttrue,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-16448, false, true,\n+\ttrue,\n+\t0x4p-16448, false, false,\n+\t0x4p-16448, false, false,\n+\t0x4p-16448, false, false,\n+\t0x4p-16448, false, false,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\ttrue,\n+\t0x4p-16448, false, false,\n+\t0x4p-16448, false, false,\n+\t0x4p-16448, false, false,\n+\t0x4p-16448, false, false),\n   TEST (\"1.8225997659412373012642029668097099081995254078467816718604\"\n \t\"902435141858443166988684047803543129136025986236736736017655\"\n \t\"509834928163110160849867540377949045027419112905889658392846\"\n@@ -8216,35 +8216,35 @@ static const struct test tests[] = {\n \t\"622089641993900896756734276531931450266972752637997248151974\"\n \t\"2277811246822238899767398834228515626e-4951\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x8p-16448, false,\n-\t0x0p+0, false,\n-\t0x8p-16448, false,\n-\tfalse,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false,\n-\t0x8p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false,\n-\t0x4p-16448, false,\n-\t0x4.000000000004p-16448, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x8p-16448, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-16448, false, true,\n+\tfalse,\n+\t0x4p-16448, false, true,\n+\t0x4p-16448, false, true,\n+\t0x4p-16448, false, true,\n+\t0x8p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x4p-16448, false, true,\n+\t0x4p-16448, false, true,\n+\t0x4p-16448, false, true,\n+\t0x4.000000000004p-16448, false, true),\n   TEST (\"-1.822599765941237301264202966809709908199525407846781671860\"\n \t\"490243514185844316698868404780354312913602598623673673601765\"\n \t\"550983492816311016084986754037794904502741911290588965839284\"\n@@ -8438,35 +8438,35 @@ static const struct test tests[] = {\n \t\"462208964199390089675673427653193145026697275263799724815197\"\n \t\"42277811246822238899767398834228515624e-4951\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x3.fffffffffffcp-16448, false,\n-\t-0x3.fffffffffffcp-16448, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16448, false, true,\n+\t-0x4p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16448, false, true,\n+\t-0x4p-16448, false, true,\n+\t-0x3.fffffffffffcp-16448, false, true,\n+\t-0x3.fffffffffffcp-16448, false, true),\n   TEST (\"-1.822599765941237301264202966809709908199525407846781671860\"\n \t\"490243514185844316698868404780354312913602598623673673601765\"\n \t\"550983492816311016084986754037794904502741911290588965839284\"\n@@ -8660,35 +8660,35 @@ static const struct test tests[] = {\n \t\"462208964199390089675673427653193145026697275263799724815197\"\n \t\"42277811246822238899767398834228515625e-4951\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x4p-16448, false, false,\n+\t-0x4p-16448, false, false,\n+\t-0x4p-16448, false, false,\n+\t-0x4p-16448, false, false,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x4p-16448, false, false,\n+\t-0x4p-16448, false, false,\n+\t-0x4p-16448, false, false,\n+\t-0x4p-16448, false, false),\n   TEST (\"-1.822599765941237301264202966809709908199525407846781671860\"\n \t\"490243514185844316698868404780354312913602598623673673601765\"\n \t\"550983492816311016084986754037794904502741911290588965839284\"\n@@ -8882,35 +8882,35 @@ static const struct test tests[] = {\n \t\"462208964199390089675673427653193145026697275263799724815197\"\n \t\"42277811246822238899767398834228515626e-4951\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-16448, false,\n-\t-0x8p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4.000000000004p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-16448, false, true,\n+\t-0x8p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-16448, false, true,\n+\t-0x4p-16448, false, true,\n+\t-0x4p-16448, false, true,\n+\t-0x4p-16448, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4.000000000004p-16448, false, true,\n+\t-0x4p-16448, false, true,\n+\t-0x4p-16448, false, true,\n+\t-0x4p-16448, false, true),\n   TEST (\"9.1129988297061865063210148340485495409976270392339083593024\"\n \t\"512175709292215834943420239017715645680129931183683680088277\"\n \t\"549174640815550804249337701889745225137095564529448291964230\"\n@@ -9104,35 +9104,35 @@ static const struct test tests[] = {\n \t\"110448209969504483783671382659657251334863763189986240759871\"\n \t\"1389056234111194498836994171142578124e-4952\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x1.fffffffffffcp-16448, false,\n-\t0x2p-16448, false,\n-\t0x1.fffffffffffcp-16448, false,\n-\t0x2p-16448, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x1.fffffffffffcp-16448, false, true,\n+\t0x2p-16448, false, true,\n+\t0x1.fffffffffffcp-16448, false, true,\n+\t0x2p-16448, false, true),\n   TEST (\"9.1129988297061865063210148340485495409976270392339083593024\"\n \t\"512175709292215834943420239017715645680129931183683680088277\"\n \t\"549174640815550804249337701889745225137095564529448291964230\"\n@@ -9326,35 +9326,35 @@ static const struct test tests[] = {\n \t\"110448209969504483783671382659657251334863763189986240759871\"\n \t\"1389056234111194498836994171142578125e-4952\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\ttrue,\n-\t0x2p-16448, false,\n-\t0x2p-16448, false,\n-\t0x2p-16448, false,\n-\t0x2p-16448, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\ttrue,\n+\t0x2p-16448, false, false,\n+\t0x2p-16448, false, false,\n+\t0x2p-16448, false, false,\n+\t0x2p-16448, false, false),\n   TEST (\"9.1129988297061865063210148340485495409976270392339083593024\"\n \t\"512175709292215834943420239017715645680129931183683680088277\"\n \t\"549174640815550804249337701889745225137095564529448291964230\"\n@@ -9548,35 +9548,35 @@ static const struct test tests[] = {\n \t\"110448209969504483783671382659657251334863763189986240759871\"\n \t\"1389056234111194498836994171142578126e-4952\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x4p-16448, false,\n-\t0x0p+0, false,\n-\t0x4p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x2p-16448, false,\n-\t0x2p-16448, false,\n-\t0x2p-16448, false,\n-\t0x2.000000000004p-16448, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x4p-16448, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x2p-16448, false, true,\n+\t0x2p-16448, false, true,\n+\t0x2p-16448, false, true,\n+\t0x2.000000000004p-16448, false, true),\n   TEST (\"-9.112998829706186506321014834048549540997627039233908359302\"\n \t\"451217570929221583494342023901771564568012993118368368008827\"\n \t\"754917464081555080424933770188974522513709556452944829196423\"\n@@ -9770,35 +9770,35 @@ static const struct test tests[] = {\n \t\"311044820996950448378367138265965725133486376318998624075987\"\n \t\"11389056234111194498836994171142578124e-4952\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x2p-16448, false,\n-\t-0x2p-16448, false,\n-\t-0x1.fffffffffffcp-16448, false,\n-\t-0x1.fffffffffffcp-16448, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x2p-16448, false, true,\n+\t-0x2p-16448, false, true,\n+\t-0x1.fffffffffffcp-16448, false, true,\n+\t-0x1.fffffffffffcp-16448, false, true),\n   TEST (\"-9.112998829706186506321014834048549540997627039233908359302\"\n \t\"451217570929221583494342023901771564568012993118368368008827\"\n \t\"754917464081555080424933770188974522513709556452944829196423\"\n@@ -9992,35 +9992,35 @@ static const struct test tests[] = {\n \t\"311044820996950448378367138265965725133486376318998624075987\"\n \t\"11389056234111194498836994171142578125e-4952\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\ttrue,\n-\t-0x2p-16448, false,\n-\t-0x2p-16448, false,\n-\t-0x2p-16448, false,\n-\t-0x2p-16448, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\ttrue,\n+\t-0x2p-16448, false, false,\n+\t-0x2p-16448, false, false,\n+\t-0x2p-16448, false, false,\n+\t-0x2p-16448, false, false),\n   TEST (\"-9.112998829706186506321014834048549540997627039233908359302\"\n \t\"451217570929221583494342023901771564568012993118368368008827\"\n \t\"754917464081555080424933770188974522513709556452944829196423\"\n@@ -10214,35 +10214,35 @@ static const struct test tests[] = {\n \t\"311044820996950448378367138265965725133486376318998624075987\"\n \t\"11389056234111194498836994171142578126e-4952\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16448, false,\n-\t-0x4p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x2.000000000004p-16448, false,\n-\t-0x2p-16448, false,\n-\t-0x2p-16448, false,\n-\t-0x2p-16448, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16448, false, true,\n+\t-0x4p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x2.000000000004p-16448, false, true,\n+\t-0x2p-16448, false, true,\n+\t-0x2p-16448, false, true,\n+\t-0x2p-16448, false, true),\n   TEST (\"3.2375875597190125554622194791138232762497846690173405048449\"\n \t\"421945985197700620596855088357456383249701279390707384240598\"\n \t\"382936099431912710233425550359863089915213963553756674672083\"\n@@ -10437,35 +10437,35 @@ static const struct test tests[] = {\n \t\"182358152808745703724362178773168996492870519432472065091133\"\n \t\"11767578124e-4966\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-16496, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-16496, false, true),\n   TEST (\"3.2375875597190125554622194791138232762497846690173405048449\"\n \t\"421945985197700620596855088357456383249701279390707384240598\"\n \t\"382936099431912710233425550359863089915213963553756674672083\"\n@@ -10660,35 +10660,35 @@ static const struct test tests[] = {\n \t\"182358152808745703724362178773168996492870519432472065091133\"\n \t\"11767578125e-4966\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-16496, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-16496, false, true),\n   TEST (\"3.2375875597190125554622194791138232762497846690173405048449\"\n \t\"421945985197700620596855088357456383249701279390707384240598\"\n \t\"382936099431912710233425550359863089915213963553756674672083\"\n@@ -10883,35 +10883,35 @@ static const struct test tests[] = {\n \t\"182358152808745703724362178773168996492870519432472065091133\"\n \t\"11767578126e-4966\",\n \tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-152, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x8p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-16448, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x0p+0, false,\n-\t0x4p-1076, false,\n-\tfalse,\n-\t0x0p+0, false,\n-\t0x4p-16496, false,\n-\t0x0p+0, false,\n-\t0x4p-16496, false),\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-16448, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x4p-16496, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-16496, false, true),\n   TEST (\"-3.237587559719012555462219479113823276249784669017340504844\"\n \t\"942194598519770062059685508835745638324970127939070738424059\"\n \t\"838293609943191271023342555035986308991521396355375667467208\"\n@@ -11106,35 +11106,35 @@ static const struct test tests[] = {\n \t\"218235815280874570372436217877316899649287051943247206509113\"\n \t\"311767578124e-4966\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16496, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16496, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true),\n   TEST (\"-3.237587559719012555462219479113823276249784669017340504844\"\n \t\"942194598519770062059685508835745638324970127939070738424059\"\n \t\"838293609943191271023342555035986308991521396355375667467208\"\n@@ -11329,35 +11329,35 @@ static const struct test tests[] = {\n \t\"218235815280874570372436217877316899649287051943247206509113\"\n \t\"311767578125e-4966\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16496, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16496, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true),\n   TEST (\"-3.237587559719012555462219479113823276249784669017340504844\"\n \t\"942194598519770062059685508835745638324970127939070738424059\"\n \t\"838293609943191271023342555035986308991521396355375667467208\"\n@@ -11552,66 +11552,66 @@ static const struct test tests[] = {\n \t\"218235815280874570372436217877316899649287051943247206509113\"\n \t\"311767578126e-4966\",\n \tfalse,\n-\t-0x8p-152, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x8p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16448, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-1076, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false,\n-\tfalse,\n-\t-0x4p-16496, false,\n-\t-0x4p-16496, false,\n-\t-0x0p+0, false,\n-\t-0x0p+0, false),\n+\t-0x8p-152, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x8p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16448, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-1076, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true,\n+\tfalse,\n+\t-0x4p-16496, false, true,\n+\t-0x4p-16496, false, true,\n+\t-0x0p+0, false, true,\n+\t-0x0p+0, false, true),\n   TEST (\"340282366920938463463374607431768211455\",\n \tfalse,\n-\t0xf.fffffp+124, false,\n-\tINF, true,\n-\t0xf.fffffp+124, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffff8p+124, false,\n-\t0x1p+128, false,\n-\t0xf.ffffffffffff8p+124, false,\n-\t0x1p+128, false,\n-\tfalse,\n-\t0xf.fffffffffffffffp+124, false,\n-\t0x1p+128, false,\n-\t0xf.fffffffffffffffp+124, false,\n-\t0x1p+128, false,\n-\tfalse,\n-\t0xf.fffffffffffffffp+124, false,\n-\t0x1p+128, false,\n-\t0xf.fffffffffffffffp+124, false,\n-\t0x1p+128, false,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffcp+124, false,\n-\t0x1p+128, false,\n-\t0xf.fffffffffffffffffffffffffcp+124, false,\n-\t0x1p+128, false,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffff8p+124, false,\n-\t0x1p+128, false,\n-\t0xf.fffffffffffffffffffffffffff8p+124, false,\n-\t0x1p+128, false),\n+\t0xf.fffffp+124, false, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffff8p+124, false, false,\n+\t0x1p+128, false, false,\n+\t0xf.ffffffffffff8p+124, false, false,\n+\t0x1p+128, false, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+124, false, false,\n+\t0x1p+128, false, false,\n+\t0xf.fffffffffffffffp+124, false, false,\n+\t0x1p+128, false, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+124, false, false,\n+\t0x1p+128, false, false,\n+\t0xf.fffffffffffffffp+124, false, false,\n+\t0x1p+128, false, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffcp+124, false, false,\n+\t0x1p+128, false, false,\n+\t0xf.fffffffffffffffffffffffffcp+124, false, false,\n+\t0x1p+128, false, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffff8p+124, false, false,\n+\t0x1p+128, false, false,\n+\t0xf.fffffffffffffffffffffffffff8p+124, false, false,\n+\t0x1p+128, false, false),\n   TEST (\"179769313486231590772930519078902473361797697894230657273430\"\n \t\"081157732675805500963132708477322407536021120113879871393357\"\n \t\"658789768814416622492847430639474124377767893424865485276302\"\n@@ -11619,35 +11619,35 @@ static const struct test tests[] = {\n \t\"540827237163350510684586298239947245938479716304835356329624\"\n \t\"224137215\",\n \tfalse,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffff8p+1020, false,\n-\tINF, true,\n-\t0xf.ffffffffffff8p+1020, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+1020, false,\n-\t0x1p+1024, false,\n-\t0xf.fffffffffffffffp+1020, false,\n-\t0x1p+1024, false,\n-\tfalse,\n-\t0xf.fffffffffffffffp+1020, false,\n-\t0x1p+1024, false,\n-\t0xf.fffffffffffffffp+1020, false,\n-\t0x1p+1024, false,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffff8p+1020, false,\n-\t0x1p+1024, false,\n-\t0xf.fffffffffffffffffffffffffff8p+1020, false,\n-\t0x1p+1024, false),\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffff8p+1020, false, false,\n+\tINF, true, false,\n+\t0xf.ffffffffffff8p+1020, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+1020, false, false,\n+\t0x1p+1024, false, false,\n+\t0xf.fffffffffffffffp+1020, false, false,\n+\t0x1p+1024, false, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+1020, false, false,\n+\t0x1p+1024, false, false,\n+\t0xf.fffffffffffffffp+1020, false, false,\n+\t0x1p+1024, false, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffff8p+1020, false, false,\n+\t0x1p+1024, false, false,\n+\t0xf.fffffffffffffffffffffffffff8p+1020, false, false,\n+\t0x1p+1024, false, false),\n   TEST (\"118973149535723176508575932662800713076344468709651023747267\"\n \t\"482123326135818048368690448859547261203991511543748483930925\"\n \t\"889766738130868742627452469834156500608087163436600489752214\"\n@@ -11732,66 +11732,66 @@ static const struct test tests[] = {\n \t\"047398248889922809181821393428829567971736994315246044702729\"\n \t\"0669964066815\",\n \tfalse,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffp+16380, false,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffff8p+16380, false,\n-\tINF, true,\n-\t0xf.fffffffffffffffffffffffffff8p+16380, false,\n-\tINF, true),\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffp+16380, false, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffff8p+16380, false, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffffffffffffff8p+16380, false, false,\n+\tINF, true, false),\n   TEST (\"-340282366920938463463374607431768211455\",\n \tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffp+124, false,\n-\t-0xf.fffffp+124, false,\n-\tfalse,\n-\t-0x1p+128, false,\n-\t-0x1p+128, false,\n-\t-0xf.ffffffffffff8p+124, false,\n-\t-0xf.ffffffffffff8p+124, false,\n-\tfalse,\n-\t-0x1p+128, false,\n-\t-0x1p+128, false,\n-\t-0xf.fffffffffffffffp+124, false,\n-\t-0xf.fffffffffffffffp+124, false,\n-\tfalse,\n-\t-0x1p+128, false,\n-\t-0x1p+128, false,\n-\t-0xf.fffffffffffffffp+124, false,\n-\t-0xf.fffffffffffffffp+124, false,\n-\tfalse,\n-\t-0x1p+128, false,\n-\t-0x1p+128, false,\n-\t-0xf.fffffffffffffffffffffffffcp+124, false,\n-\t-0xf.fffffffffffffffffffffffffcp+124, false,\n-\tfalse,\n-\t-0x1p+128, false,\n-\t-0x1p+128, false,\n-\t-0xf.fffffffffffffffffffffffffff8p+124, false,\n-\t-0xf.fffffffffffffffffffffffffff8p+124, false),\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, false, false,\n+\t-0xf.fffffp+124, false, false,\n+\tfalse,\n+\t-0x1p+128, false, false,\n+\t-0x1p+128, false, false,\n+\t-0xf.ffffffffffff8p+124, false, false,\n+\t-0xf.ffffffffffff8p+124, false, false,\n+\tfalse,\n+\t-0x1p+128, false, false,\n+\t-0x1p+128, false, false,\n+\t-0xf.fffffffffffffffp+124, false, false,\n+\t-0xf.fffffffffffffffp+124, false, false,\n+\tfalse,\n+\t-0x1p+128, false, false,\n+\t-0x1p+128, false, false,\n+\t-0xf.fffffffffffffffp+124, false, false,\n+\t-0xf.fffffffffffffffp+124, false, false,\n+\tfalse,\n+\t-0x1p+128, false, false,\n+\t-0x1p+128, false, false,\n+\t-0xf.fffffffffffffffffffffffffcp+124, false, false,\n+\t-0xf.fffffffffffffffffffffffffcp+124, false, false,\n+\tfalse,\n+\t-0x1p+128, false, false,\n+\t-0x1p+128, false, false,\n+\t-0xf.fffffffffffffffffffffffffff8p+124, false, false,\n+\t-0xf.fffffffffffffffffffffffffff8p+124, false, false),\n   TEST (\"-17976931348623159077293051907890247336179769789423065727343\"\n \t\"008115773267580550096313270847732240753602112011387987139335\"\n \t\"765878976881441662249284743063947412437776789342486548527630\"\n@@ -11799,35 +11799,35 @@ static const struct test tests[] = {\n \t\"054082723716335051068458629823994724593847971630483535632962\"\n \t\"4224137215\",\n \tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffp+124, true,\n-\t-0xf.fffffp+124, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.ffffffffffff8p+1020, false,\n-\t-0xf.ffffffffffff8p+1020, false,\n-\tfalse,\n-\t-0x1p+1024, false,\n-\t-0x1p+1024, false,\n-\t-0xf.fffffffffffffffp+1020, false,\n-\t-0xf.fffffffffffffffp+1020, false,\n-\tfalse,\n-\t-0x1p+1024, false,\n-\t-0x1p+1024, false,\n-\t-0xf.fffffffffffffffp+1020, false,\n-\t-0xf.fffffffffffffffp+1020, false,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tfalse,\n-\t-0x1p+1024, false,\n-\t-0x1p+1024, false,\n-\t-0xf.fffffffffffffffffffffffffff8p+1020, false,\n-\t-0xf.fffffffffffffffffffffffffff8p+1020, false),\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.ffffffffffff8p+1020, false, false,\n+\t-0xf.ffffffffffff8p+1020, false, false,\n+\tfalse,\n+\t-0x1p+1024, false, false,\n+\t-0x1p+1024, false, false,\n+\t-0xf.fffffffffffffffp+1020, false, false,\n+\t-0xf.fffffffffffffffp+1020, false, false,\n+\tfalse,\n+\t-0x1p+1024, false, false,\n+\t-0x1p+1024, false, false,\n+\t-0xf.fffffffffffffffp+1020, false, false,\n+\t-0xf.fffffffffffffffp+1020, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tfalse,\n+\t-0x1p+1024, false, false,\n+\t-0x1p+1024, false, false,\n+\t-0xf.fffffffffffffffffffffffffff8p+1020, false, false,\n+\t-0xf.fffffffffffffffffffffffffff8p+1020, false, false),\n   TEST (\"-11897314953572317650857593266280071307634446870965102374726\"\n \t\"748212332613581804836869044885954726120399151154374848393092\"\n \t\"588976673813086874262745246983415650060808716343660048975221\"\n@@ -11912,3529 +11912,3529 @@ static const struct test tests[] = {\n \t\"904739824888992280918182139342882956797173699431524604470272\"\n \t\"90669964066815\",\n \tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffp+124, true,\n-\t-0xf.fffffp+124, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.ffffffffffff8p+1020, true,\n-\t-0xf.ffffffffffff8p+1020, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\t-0xf.fffffffffffffffp+16380, false,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\t-0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tfalse,\n-\t-INF, true,\n-\t-INF, true,\n-\t-0xf.fffffffffffffffffffffffffff8p+16380, false,\n-\t-0xf.fffffffffffffffffffffffffff8p+16380, false),\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\t-0xf.fffffp+124, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.ffffffffffff8p+1020, true, false,\n+\t-0xf.ffffffffffff8p+1020, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\t-0xf.fffffffffffffffp+16380, false, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\t-0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tfalse,\n+\t-INF, true, false,\n+\t-INF, true, false,\n+\t-0xf.fffffffffffffffffffffffffff8p+16380, false, false,\n+\t-0xf.fffffffffffffffffffffffffff8p+16380, false, false),\n   TEST (\"+0x.80000000000000000000000000000001p1025\",\n \tfalse,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\t0xf.fffffp+124, true,\n-\tINF, true,\n-\tfalse,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\t0xf.ffffffffffff8p+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0x1p+1024, false,\n-\t0x1p+1024, false,\n-\t0x1p+1024, false,\n-\t0x1.0000000000000002p+1024, false,\n-\tfalse,\n-\t0x1p+1024, false,\n-\t0x1p+1024, false,\n-\t0x1p+1024, false,\n-\t0x1.0000000000000002p+1024, false,\n-\tfalse,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\t0xf.fffffffffffffffffffffffffcp+1020, true,\n-\tINF, true,\n-\tfalse,\n-\t0x1p+1024, false,\n-\t0x1p+1024, false,\n-\t0x1p+1024, false,\n-\t0x1.0000000000000000000000000001p+1024, false),\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\t0xf.fffffp+124, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\t0xf.ffffffffffff8p+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0x1p+1024, false, false,\n+\t0x1p+1024, false, false,\n+\t0x1p+1024, false, false,\n+\t0x1.0000000000000002p+1024, false, false,\n+\tfalse,\n+\t0x1p+1024, false, false,\n+\t0x1p+1024, false, false,\n+\t0x1p+1024, false, false,\n+\t0x1.0000000000000002p+1024, false, false,\n+\tfalse,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\t0xf.fffffffffffffffffffffffffcp+1020, true, false,\n+\tINF, true, false,\n+\tfalse,\n+\t0x1p+1024, false, false,\n+\t0x1p+1024, false, false,\n+\t0x1p+1024, false, false,\n+\t0x1.0000000000000000000000000001p+1024, false, false),\n   TEST (\"1.5\",\n \ttrue,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\ttrue,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\ttrue,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\ttrue,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\ttrue,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\ttrue,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false,\n-\t0x1.8p+0, false),\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\ttrue,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\ttrue,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\ttrue,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\ttrue,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\ttrue,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false,\n+\t0x1.8p+0, false, false),\n   TEST (\"1.25\",\n \ttrue,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\ttrue,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\ttrue,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\ttrue,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\ttrue,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\ttrue,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false,\n-\t0x1.4p+0, false),\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\ttrue,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\ttrue,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\ttrue,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\ttrue,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\ttrue,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false,\n+\t0x1.4p+0, false, false),\n   TEST (\"1.125\",\n \ttrue,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\ttrue,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\ttrue,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\ttrue,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\ttrue,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\ttrue,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false,\n-\t0x1.2p+0, false),\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\ttrue,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\ttrue,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\ttrue,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\ttrue,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\ttrue,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false,\n+\t0x1.2p+0, false, false),\n   TEST (\"1.0625\",\n \ttrue,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\ttrue,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\ttrue,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\ttrue,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\ttrue,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\ttrue,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false,\n-\t0x1.1p+0, false),\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\ttrue,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\ttrue,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\ttrue,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\ttrue,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\ttrue,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false,\n+\t0x1.1p+0, false, false),\n   TEST (\"1.03125\",\n \ttrue,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\ttrue,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\ttrue,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\ttrue,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\ttrue,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\ttrue,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false,\n-\t0x1.08p+0, false),\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\ttrue,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\ttrue,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\ttrue,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\ttrue,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\ttrue,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false,\n+\t0x1.08p+0, false, false),\n   TEST (\"1.015625\",\n \ttrue,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\ttrue,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\ttrue,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\ttrue,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\ttrue,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\ttrue,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false,\n-\t0x1.04p+0, false),\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\ttrue,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\ttrue,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\ttrue,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\ttrue,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\ttrue,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false,\n+\t0x1.04p+0, false, false),\n   TEST (\"1.0078125\",\n \ttrue,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\ttrue,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\ttrue,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\ttrue,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\ttrue,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\ttrue,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false,\n-\t0x1.02p+0, false),\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\ttrue,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\ttrue,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\ttrue,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\ttrue,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\ttrue,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false,\n+\t0x1.02p+0, false, false),\n   TEST (\"1.00390625\",\n \ttrue,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\ttrue,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\ttrue,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\ttrue,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\ttrue,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\ttrue,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false,\n-\t0x1.01p+0, false),\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\ttrue,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\ttrue,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\ttrue,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\ttrue,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\ttrue,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false,\n+\t0x1.01p+0, false, false),\n   TEST (\"1.001953125\",\n \ttrue,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\ttrue,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\ttrue,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\ttrue,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\ttrue,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\ttrue,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false,\n-\t0x1.008p+0, false),\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\ttrue,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\ttrue,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\ttrue,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\ttrue,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\ttrue,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false,\n+\t0x1.008p+0, false, false),\n   TEST (\"1.0009765625\",\n \ttrue,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\ttrue,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\ttrue,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\ttrue,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\ttrue,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\ttrue,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false,\n-\t0x1.004p+0, false),\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\ttrue,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\ttrue,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\ttrue,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\ttrue,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\ttrue,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false,\n+\t0x1.004p+0, false, false),\n   TEST (\"1.00048828125\",\n \ttrue,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\ttrue,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\ttrue,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\ttrue,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\ttrue,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\ttrue,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false,\n-\t0x1.002p+0, false),\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\ttrue,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\ttrue,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\ttrue,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\ttrue,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\ttrue,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false,\n+\t0x1.002p+0, false, false),\n   TEST (\"1.000244140625\",\n \ttrue,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\ttrue,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\ttrue,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\ttrue,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\ttrue,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\ttrue,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false,\n-\t0x1.001p+0, false),\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\ttrue,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\ttrue,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\ttrue,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\ttrue,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\ttrue,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false,\n+\t0x1.001p+0, false, false),\n   TEST (\"1.0001220703125\",\n \ttrue,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\ttrue,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\ttrue,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\ttrue,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\ttrue,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\ttrue,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false,\n-\t0x1.0008p+0, false),\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\ttrue,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\ttrue,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\ttrue,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\ttrue,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\ttrue,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false,\n+\t0x1.0008p+0, false, false),\n   TEST (\"1.00006103515625\",\n \ttrue,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\ttrue,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\ttrue,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\ttrue,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\ttrue,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\ttrue,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false,\n-\t0x1.0004p+0, false),\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\ttrue,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\ttrue,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\ttrue,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\ttrue,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\ttrue,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false,\n+\t0x1.0004p+0, false, false),\n   TEST (\"1.000030517578125\",\n \ttrue,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\ttrue,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\ttrue,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\ttrue,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\ttrue,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\ttrue,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false,\n-\t0x1.0002p+0, false),\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\ttrue,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\ttrue,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\ttrue,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\ttrue,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\ttrue,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false,\n+\t0x1.0002p+0, false, false),\n   TEST (\"1.0000152587890625\",\n \ttrue,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\ttrue,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\ttrue,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\ttrue,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\ttrue,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\ttrue,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false,\n-\t0x1.0001p+0, false),\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\ttrue,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\ttrue,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\ttrue,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\ttrue,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\ttrue,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false,\n+\t0x1.0001p+0, false, false),\n   TEST (\"1.00000762939453125\",\n \ttrue,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\ttrue,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\ttrue,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\ttrue,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\ttrue,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\ttrue,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false,\n-\t0x1.00008p+0, false),\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\ttrue,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\ttrue,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\ttrue,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\ttrue,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\ttrue,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false,\n+\t0x1.00008p+0, false, false),\n   TEST (\"1.000003814697265625\",\n \ttrue,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\ttrue,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\ttrue,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\ttrue,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\ttrue,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\ttrue,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false,\n-\t0x1.00004p+0, false),\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\ttrue,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\ttrue,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\ttrue,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\ttrue,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\ttrue,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false,\n+\t0x1.00004p+0, false, false),\n   TEST (\"1.0000019073486328125\",\n \ttrue,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\ttrue,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\ttrue,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\ttrue,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\ttrue,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\ttrue,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false,\n-\t0x1.00002p+0, false),\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\ttrue,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\ttrue,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\ttrue,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\ttrue,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\ttrue,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false,\n+\t0x1.00002p+0, false, false),\n   TEST (\"1.00000095367431640625\",\n \ttrue,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\ttrue,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\ttrue,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\ttrue,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\ttrue,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\ttrue,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false,\n-\t0x1.00001p+0, false),\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\ttrue,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\ttrue,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\ttrue,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\ttrue,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\ttrue,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false,\n+\t0x1.00001p+0, false, false),\n   TEST (\"1.000000476837158203125\",\n \ttrue,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\ttrue,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\ttrue,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\ttrue,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\ttrue,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\ttrue,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false,\n-\t0x1.000008p+0, false),\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\ttrue,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\ttrue,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\ttrue,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\ttrue,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\ttrue,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false,\n+\t0x1.000008p+0, false, false),\n   TEST (\"1.0000000298023223876953125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false,\n-\ttrue,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false,\n-\ttrue,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false,\n-\ttrue,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false,\n-\ttrue,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false,\n-\t0x1.0000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false,\n+\t0x1.0000008p+0, false, false),\n   TEST (\"1.00000001490116119384765625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false,\n-\ttrue,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false,\n-\ttrue,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false,\n-\ttrue,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false,\n-\ttrue,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false,\n-\t0x1.0000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false,\n+\t0x1.0000004p+0, false, false),\n   TEST (\"1.000000007450580596923828125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false,\n-\ttrue,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false,\n-\ttrue,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false,\n-\ttrue,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false,\n-\ttrue,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false,\n-\t0x1.0000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false,\n+\t0x1.0000002p+0, false, false),\n   TEST (\"1.0000000037252902984619140625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false,\n-\ttrue,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false,\n-\ttrue,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false,\n-\ttrue,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false,\n-\ttrue,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false,\n-\t0x1.0000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false,\n+\t0x1.0000001p+0, false, false),\n   TEST (\"1.00000000186264514923095703125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false,\n-\ttrue,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false,\n-\ttrue,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false,\n-\ttrue,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false,\n-\ttrue,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false,\n-\t0x1.00000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false,\n+\t0x1.00000008p+0, false, false),\n   TEST (\"1.000000000931322574615478515625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false,\n-\ttrue,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false,\n-\ttrue,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false,\n-\ttrue,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false,\n-\ttrue,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false,\n-\t0x1.00000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false,\n+\t0x1.00000004p+0, false, false),\n   TEST (\"1.0000000004656612873077392578125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false,\n-\ttrue,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false,\n-\ttrue,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false,\n-\ttrue,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false,\n-\ttrue,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false,\n-\t0x1.00000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false,\n+\t0x1.00000002p+0, false, false),\n   TEST (\"1.00000000023283064365386962890625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false,\n-\ttrue,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false,\n-\ttrue,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false,\n-\ttrue,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false,\n-\ttrue,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false,\n-\t0x1.00000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false,\n+\t0x1.00000001p+0, false, false),\n   TEST (\"1.000000000116415321826934814453125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false,\n-\ttrue,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false,\n-\ttrue,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false,\n-\ttrue,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false,\n-\ttrue,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false,\n-\t0x1.000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false,\n+\t0x1.000000008p+0, false, false),\n   TEST (\"1.0000000000582076609134674072265625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false,\n-\ttrue,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false,\n-\ttrue,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false,\n-\ttrue,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false,\n-\ttrue,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false,\n-\t0x1.000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false,\n+\ttrue,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false,\n+\ttrue,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false,\n+\ttrue,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false,\n+\ttrue,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false,\n+\t0x1.000000004p+0, false, false),\n   TEST (\"1.00000000002910383045673370361328125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false,\n-\ttrue,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false,\n-\ttrue,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false,\n-\ttrue,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false,\n-\ttrue,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false,\n-\t0x1.000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false,\n+\t0x1.000000002p+0, false, false),\n   TEST (\"1.000000000014551915228366851806640625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false,\n-\ttrue,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false,\n-\ttrue,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false,\n-\ttrue,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false,\n-\ttrue,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false,\n-\t0x1.000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false,\n+\t0x1.000000001p+0, false, false),\n   TEST (\"1.0000000000072759576141834259033203125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false,\n-\t0x1.0000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false,\n+\t0x1.0000000008p+0, false, false),\n   TEST (\"1.00000000000363797880709171295166015625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false,\n-\ttrue,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false,\n-\ttrue,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false,\n-\ttrue,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false,\n-\ttrue,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false,\n-\t0x1.0000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false,\n+\t0x1.0000000004p+0, false, false),\n   TEST (\"1.000000000001818989403545856475830078125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false,\n-\t0x1.0000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false,\n+\t0x1.0000000002p+0, false, false),\n   TEST (\"1.0000000000009094947017729282379150390625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false,\n-\t0x1.0000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false,\n+\t0x1.0000000001p+0, false, false),\n   TEST (\"1.00000000000045474735088646411895751953125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false,\n-\ttrue,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false,\n-\ttrue,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false,\n-\ttrue,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false,\n-\ttrue,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false,\n-\t0x1.00000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false,\n+\t0x1.00000000008p+0, false, false),\n   TEST (\"1.000000000000227373675443232059478759765625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false,\n-\ttrue,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false,\n-\ttrue,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false,\n-\ttrue,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false,\n-\ttrue,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false,\n-\t0x1.00000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false,\n+\t0x1.00000000004p+0, false, false),\n   TEST (\"1.0000000000001136868377216160297393798828125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false,\n-\t0x1.00000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false,\n+\t0x1.00000000002p+0, false, false),\n   TEST (\"1.00000000000005684341886080801486968994140625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false,\n-\t0x1.00000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false,\n+\t0x1.00000000001p+0, false, false),\n   TEST (\"1.000000000000028421709430404007434844970703125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false,\n-\ttrue,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false,\n-\ttrue,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false,\n-\ttrue,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false,\n-\ttrue,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false,\n-\t0x1.000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false,\n+\t0x1.000000000008p+0, false, false),\n   TEST (\"1.0000000000000142108547152020037174224853515625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false,\n-\ttrue,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false,\n-\ttrue,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false,\n-\ttrue,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false,\n-\ttrue,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false,\n-\t0x1.000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false,\n+\t0x1.000000000004p+0, false, false),\n   TEST (\"1.00000000000000710542735760100185871124267578125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false,\n-\t0x1.000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false,\n+\t0x1.000000000002p+0, false, false),\n   TEST (\"1.000000000000003552713678800500929355621337890625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false,\n-\ttrue,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false,\n-\ttrue,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false,\n-\ttrue,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false,\n-\ttrue,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false,\n-\t0x1.000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false,\n+\t0x1.000000000001p+0, false, false),\n   TEST (\"1.0000000000000017763568394002504646778106689453125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false,\n-\t0x1.0000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false,\n+\t0x1.0000000000008p+0, false, false),\n   TEST (\"1.00000000000000088817841970012523233890533447265625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false,\n-\ttrue,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false,\n-\ttrue,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false,\n-\ttrue,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false,\n-\ttrue,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false,\n-\t0x1.0000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false,\n+\t0x1.0000000000004p+0, false, false),\n   TEST (\"1.000000000000000444089209850062616169452667236328125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false,\n-\t0x1.0000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false,\n+\t0x1.0000000000002p+0, false, false),\n   TEST (\"1.0000000000000002220446049250313080847263336181640625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\t0x1.0000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\t0x1.0000000000001p+0, false, false),\n   TEST (\"1.00000000000000011102230246251565404236316680908203125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\ttrue,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\ttrue,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\ttrue,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false,\n-\t0x1.00000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false,\n+\t0x1.00000000000008p+0, false, false),\n   TEST (\"1.000000000000000055511151231257827021181583404541015625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000000004p+0, false,\n-\t0x1.00000000000004p+0, false,\n-\t0x1.00000000000004p+0, false,\n-\t0x1.00000000000004p+0, false,\n-\ttrue,\n-\t0x1.00000000000004p+0, false,\n-\t0x1.00000000000004p+0, false,\n-\t0x1.00000000000004p+0, false,\n-\t0x1.00000000000004p+0, false,\n-\ttrue,\n-\t0x1.00000000000004p+0, false,\n-\t0x1.00000000000004p+0, false,\n-\t0x1.00000000000004p+0, false,\n-\t0x1.00000000000004p+0, false,\n-\ttrue,\n-\t0x1.00000000000004p+0, false,\n-\t0x1.00000000000004p+0, false,\n-\t0x1.00000000000004p+0, false,\n-\t0x1.00000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000004p+0, false, false,\n+\t0x1.00000000000004p+0, false, false,\n+\t0x1.00000000000004p+0, false, false,\n+\t0x1.00000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000004p+0, false, false,\n+\t0x1.00000000000004p+0, false, false,\n+\t0x1.00000000000004p+0, false, false,\n+\t0x1.00000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000004p+0, false, false,\n+\t0x1.00000000000004p+0, false, false,\n+\t0x1.00000000000004p+0, false, false,\n+\t0x1.00000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000004p+0, false, false,\n+\t0x1.00000000000004p+0, false, false,\n+\t0x1.00000000000004p+0, false, false,\n+\t0x1.00000000000004p+0, false, false),\n   TEST (\"1.0000000000000000277555756156289135105907917022705078125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000000002p+0, false,\n-\t0x1.00000000000002p+0, false,\n-\t0x1.00000000000002p+0, false,\n-\t0x1.00000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000002p+0, false,\n-\t0x1.00000000000002p+0, false,\n-\t0x1.00000000000002p+0, false,\n-\t0x1.00000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000002p+0, false,\n-\t0x1.00000000000002p+0, false,\n-\t0x1.00000000000002p+0, false,\n-\t0x1.00000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000002p+0, false,\n-\t0x1.00000000000002p+0, false,\n-\t0x1.00000000000002p+0, false,\n-\t0x1.00000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000002p+0, false, false,\n+\t0x1.00000000000002p+0, false, false,\n+\t0x1.00000000000002p+0, false, false,\n+\t0x1.00000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000002p+0, false, false,\n+\t0x1.00000000000002p+0, false, false,\n+\t0x1.00000000000002p+0, false, false,\n+\t0x1.00000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000002p+0, false, false,\n+\t0x1.00000000000002p+0, false, false,\n+\t0x1.00000000000002p+0, false, false,\n+\t0x1.00000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000002p+0, false, false,\n+\t0x1.00000000000002p+0, false, false,\n+\t0x1.00000000000002p+0, false, false,\n+\t0x1.00000000000002p+0, false, false),\n   TEST (\"1.00000000000000001387778780781445675529539585113525390625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000000001p+0, false,\n-\t0x1.00000000000001p+0, false,\n-\t0x1.00000000000001p+0, false,\n-\t0x1.00000000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000000001p+0, false,\n-\t0x1.00000000000001p+0, false,\n-\t0x1.00000000000001p+0, false,\n-\t0x1.00000000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000000001p+0, false,\n-\t0x1.00000000000001p+0, false,\n-\t0x1.00000000000001p+0, false,\n-\t0x1.00000000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000000001p+0, false,\n-\t0x1.00000000000001p+0, false,\n-\t0x1.00000000000001p+0, false,\n-\t0x1.00000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000001p+0, false, false,\n+\t0x1.00000000000001p+0, false, false,\n+\t0x1.00000000000001p+0, false, false,\n+\t0x1.00000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000001p+0, false, false,\n+\t0x1.00000000000001p+0, false, false,\n+\t0x1.00000000000001p+0, false, false,\n+\t0x1.00000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000001p+0, false, false,\n+\t0x1.00000000000001p+0, false, false,\n+\t0x1.00000000000001p+0, false, false,\n+\t0x1.00000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000001p+0, false, false,\n+\t0x1.00000000000001p+0, false, false,\n+\t0x1.00000000000001p+0, false, false,\n+\t0x1.00000000000001p+0, false, false),\n   TEST (\"1.000000000000000006938893903907228377647697925567626953125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.000000000000008p+0, false,\n-\t0x1.000000000000008p+0, false,\n-\t0x1.000000000000008p+0, false,\n-\t0x1.000000000000008p+0, false,\n-\ttrue,\n-\t0x1.000000000000008p+0, false,\n-\t0x1.000000000000008p+0, false,\n-\t0x1.000000000000008p+0, false,\n-\t0x1.000000000000008p+0, false,\n-\ttrue,\n-\t0x1.000000000000008p+0, false,\n-\t0x1.000000000000008p+0, false,\n-\t0x1.000000000000008p+0, false,\n-\t0x1.000000000000008p+0, false,\n-\ttrue,\n-\t0x1.000000000000008p+0, false,\n-\t0x1.000000000000008p+0, false,\n-\t0x1.000000000000008p+0, false,\n-\t0x1.000000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000008p+0, false, false,\n+\t0x1.000000000000008p+0, false, false,\n+\t0x1.000000000000008p+0, false, false,\n+\t0x1.000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000008p+0, false, false,\n+\t0x1.000000000000008p+0, false, false,\n+\t0x1.000000000000008p+0, false, false,\n+\t0x1.000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000008p+0, false, false,\n+\t0x1.000000000000008p+0, false, false,\n+\t0x1.000000000000008p+0, false, false,\n+\t0x1.000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000008p+0, false, false,\n+\t0x1.000000000000008p+0, false, false,\n+\t0x1.000000000000008p+0, false, false,\n+\t0x1.000000000000008p+0, false, false),\n   TEST (\"1.0000000000000000034694469519536141888238489627838134765625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.000000000000004p+0, false,\n-\t0x1.000000000000004p+0, false,\n-\t0x1.000000000000004p+0, false,\n-\t0x1.000000000000004p+0, false,\n-\ttrue,\n-\t0x1.000000000000004p+0, false,\n-\t0x1.000000000000004p+0, false,\n-\t0x1.000000000000004p+0, false,\n-\t0x1.000000000000004p+0, false,\n-\ttrue,\n-\t0x1.000000000000004p+0, false,\n-\t0x1.000000000000004p+0, false,\n-\t0x1.000000000000004p+0, false,\n-\t0x1.000000000000004p+0, false,\n-\ttrue,\n-\t0x1.000000000000004p+0, false,\n-\t0x1.000000000000004p+0, false,\n-\t0x1.000000000000004p+0, false,\n-\t0x1.000000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000004p+0, false, false,\n+\t0x1.000000000000004p+0, false, false,\n+\t0x1.000000000000004p+0, false, false,\n+\t0x1.000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000004p+0, false, false,\n+\t0x1.000000000000004p+0, false, false,\n+\t0x1.000000000000004p+0, false, false,\n+\t0x1.000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000004p+0, false, false,\n+\t0x1.000000000000004p+0, false, false,\n+\t0x1.000000000000004p+0, false, false,\n+\t0x1.000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000004p+0, false, false,\n+\t0x1.000000000000004p+0, false, false,\n+\t0x1.000000000000004p+0, false, false,\n+\t0x1.000000000000004p+0, false, false),\n   TEST (\"1.0000000000000000017347234759768070944119244813919067382812\"\n \t\"5\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.000000000000002p+0, false,\n-\t0x1.000000000000002p+0, false,\n-\t0x1.000000000000002p+0, false,\n-\t0x1.000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000002p+0, false,\n-\t0x1.000000000000002p+0, false,\n-\t0x1.000000000000002p+0, false,\n-\t0x1.000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000002p+0, false,\n-\t0x1.000000000000002p+0, false,\n-\t0x1.000000000000002p+0, false,\n-\t0x1.000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000002p+0, false,\n-\t0x1.000000000000002p+0, false,\n-\t0x1.000000000000002p+0, false,\n-\t0x1.000000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000002p+0, false, false,\n+\t0x1.000000000000002p+0, false, false,\n+\t0x1.000000000000002p+0, false, false,\n+\t0x1.000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000002p+0, false, false,\n+\t0x1.000000000000002p+0, false, false,\n+\t0x1.000000000000002p+0, false, false,\n+\t0x1.000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000002p+0, false, false,\n+\t0x1.000000000000002p+0, false, false,\n+\t0x1.000000000000002p+0, false, false,\n+\t0x1.000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000002p+0, false, false,\n+\t0x1.000000000000002p+0, false, false,\n+\t0x1.000000000000002p+0, false, false,\n+\t0x1.000000000000002p+0, false, false),\n   TEST (\"1.0000000000000000008673617379884035472059622406959533691406\"\n \t\"25\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.000000000000001p+0, false,\n-\t0x1.000000000000001p+0, false,\n-\t0x1.000000000000001p+0, false,\n-\t0x1.000000000000001p+0, false,\n-\ttrue,\n-\t0x1.000000000000001p+0, false,\n-\t0x1.000000000000001p+0, false,\n-\t0x1.000000000000001p+0, false,\n-\t0x1.000000000000001p+0, false,\n-\ttrue,\n-\t0x1.000000000000001p+0, false,\n-\t0x1.000000000000001p+0, false,\n-\t0x1.000000000000001p+0, false,\n-\t0x1.000000000000001p+0, false,\n-\ttrue,\n-\t0x1.000000000000001p+0, false,\n-\t0x1.000000000000001p+0, false,\n-\t0x1.000000000000001p+0, false,\n-\t0x1.000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000001p+0, false, false,\n+\t0x1.000000000000001p+0, false, false,\n+\t0x1.000000000000001p+0, false, false,\n+\t0x1.000000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000001p+0, false, false,\n+\t0x1.000000000000001p+0, false, false,\n+\t0x1.000000000000001p+0, false, false,\n+\t0x1.000000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000001p+0, false, false,\n+\t0x1.000000000000001p+0, false, false,\n+\t0x1.000000000000001p+0, false, false,\n+\t0x1.000000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000001p+0, false, false,\n+\t0x1.000000000000001p+0, false, false,\n+\t0x1.000000000000001p+0, false, false,\n+\t0x1.000000000000001p+0, false, false),\n   TEST (\"1.0000000000000000004336808689942017736029811203479766845703\"\n \t\"125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000000000008p+0, false,\n-\t0x1.0000000000000008p+0, false,\n-\t0x1.0000000000000008p+0, false,\n-\t0x1.0000000000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000000000008p+0, false,\n-\t0x1.0000000000000008p+0, false,\n-\t0x1.0000000000000008p+0, false,\n-\t0x1.0000000000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000000000008p+0, false,\n-\t0x1.0000000000000008p+0, false,\n-\t0x1.0000000000000008p+0, false,\n-\t0x1.0000000000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000000000008p+0, false,\n-\t0x1.0000000000000008p+0, false,\n-\t0x1.0000000000000008p+0, false,\n-\t0x1.0000000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000008p+0, false, false,\n+\t0x1.0000000000000008p+0, false, false,\n+\t0x1.0000000000000008p+0, false, false,\n+\t0x1.0000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000008p+0, false, false,\n+\t0x1.0000000000000008p+0, false, false,\n+\t0x1.0000000000000008p+0, false, false,\n+\t0x1.0000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000008p+0, false, false,\n+\t0x1.0000000000000008p+0, false, false,\n+\t0x1.0000000000000008p+0, false, false,\n+\t0x1.0000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000008p+0, false, false,\n+\t0x1.0000000000000008p+0, false, false,\n+\t0x1.0000000000000008p+0, false, false,\n+\t0x1.0000000000000008p+0, false, false),\n   TEST (\"1.0000000000000000002168404344971008868014905601739883422851\"\n \t\"5625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000000000004p+0, false,\n-\t0x1.0000000000000004p+0, false,\n-\t0x1.0000000000000004p+0, false,\n-\t0x1.0000000000000004p+0, false,\n-\ttrue,\n-\t0x1.0000000000000004p+0, false,\n-\t0x1.0000000000000004p+0, false,\n-\t0x1.0000000000000004p+0, false,\n-\t0x1.0000000000000004p+0, false,\n-\ttrue,\n-\t0x1.0000000000000004p+0, false,\n-\t0x1.0000000000000004p+0, false,\n-\t0x1.0000000000000004p+0, false,\n-\t0x1.0000000000000004p+0, false,\n-\ttrue,\n-\t0x1.0000000000000004p+0, false,\n-\t0x1.0000000000000004p+0, false,\n-\t0x1.0000000000000004p+0, false,\n-\t0x1.0000000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000004p+0, false, false,\n+\t0x1.0000000000000004p+0, false, false,\n+\t0x1.0000000000000004p+0, false, false,\n+\t0x1.0000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000004p+0, false, false,\n+\t0x1.0000000000000004p+0, false, false,\n+\t0x1.0000000000000004p+0, false, false,\n+\t0x1.0000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000004p+0, false, false,\n+\t0x1.0000000000000004p+0, false, false,\n+\t0x1.0000000000000004p+0, false, false,\n+\t0x1.0000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000004p+0, false, false,\n+\t0x1.0000000000000004p+0, false, false,\n+\t0x1.0000000000000004p+0, false, false,\n+\t0x1.0000000000000004p+0, false, false),\n   TEST (\"1.0000000000000000001084202172485504434007452800869941711425\"\n \t\"78125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000000000002p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000002p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000002p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000002p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\t0x1.0000000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000002p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000002p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000002p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000002p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false),\n   TEST (\"1.0000000000000000000542101086242752217003726400434970855712\"\n \t\"890625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000001p+0, false,\n-\t0x1.0000000000000001p+0, false,\n-\t0x1.0000000000000001p+0, false,\n-\t0x1.0000000000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000000000001p+0, false,\n-\t0x1.0000000000000001p+0, false,\n-\t0x1.0000000000000001p+0, false,\n-\t0x1.0000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000001p+0, false, false,\n+\t0x1.0000000000000001p+0, false, false,\n+\t0x1.0000000000000001p+0, false, false,\n+\t0x1.0000000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000001p+0, false, false,\n+\t0x1.0000000000000001p+0, false, false,\n+\t0x1.0000000000000001p+0, false, false,\n+\t0x1.0000000000000001p+0, false, false),\n   TEST (\"1.0000000000000000000271050543121376108501863200217485427856\"\n \t\"4453125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000008p+0, false,\n-\t0x1.00000000000000008p+0, false,\n-\t0x1.00000000000000008p+0, false,\n-\t0x1.00000000000000008p+0, false,\n-\ttrue,\n-\t0x1.00000000000000008p+0, false,\n-\t0x1.00000000000000008p+0, false,\n-\t0x1.00000000000000008p+0, false,\n-\t0x1.00000000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000008p+0, false, false,\n+\t0x1.00000000000000008p+0, false, false,\n+\t0x1.00000000000000008p+0, false, false,\n+\t0x1.00000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000008p+0, false, false,\n+\t0x1.00000000000000008p+0, false, false,\n+\t0x1.00000000000000008p+0, false, false,\n+\t0x1.00000000000000008p+0, false, false),\n   TEST (\"1.0000000000000000000135525271560688054250931600108742713928\"\n \t\"22265625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000004p+0, false,\n-\t0x1.00000000000000004p+0, false,\n-\t0x1.00000000000000004p+0, false,\n-\t0x1.00000000000000004p+0, false,\n-\ttrue,\n-\t0x1.00000000000000004p+0, false,\n-\t0x1.00000000000000004p+0, false,\n-\t0x1.00000000000000004p+0, false,\n-\t0x1.00000000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000004p+0, false, false,\n+\t0x1.00000000000000004p+0, false, false,\n+\t0x1.00000000000000004p+0, false, false,\n+\t0x1.00000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000004p+0, false, false,\n+\t0x1.00000000000000004p+0, false, false,\n+\t0x1.00000000000000004p+0, false, false,\n+\t0x1.00000000000000004p+0, false, false),\n   TEST (\"1.0000000000000000000067762635780344027125465800054371356964\"\n \t\"111328125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000002p+0, false,\n-\t0x1.00000000000000002p+0, false,\n-\t0x1.00000000000000002p+0, false,\n-\t0x1.00000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000002p+0, false,\n-\t0x1.00000000000000002p+0, false,\n-\t0x1.00000000000000002p+0, false,\n-\t0x1.00000000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000002p+0, false, false,\n+\t0x1.00000000000000002p+0, false, false,\n+\t0x1.00000000000000002p+0, false, false,\n+\t0x1.00000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000002p+0, false, false,\n+\t0x1.00000000000000002p+0, false, false,\n+\t0x1.00000000000000002p+0, false, false,\n+\t0x1.00000000000000002p+0, false, false),\n   TEST (\"1.0000000000000000000033881317890172013562732900027185678482\"\n \t\"0556640625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000001p+0, false,\n-\t0x1.00000000000000001p+0, false,\n-\t0x1.00000000000000001p+0, false,\n-\t0x1.00000000000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000000000001p+0, false,\n-\t0x1.00000000000000001p+0, false,\n-\t0x1.00000000000000001p+0, false,\n-\t0x1.00000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000001p+0, false, false,\n+\t0x1.00000000000000001p+0, false, false,\n+\t0x1.00000000000000001p+0, false, false,\n+\t0x1.00000000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000001p+0, false, false,\n+\t0x1.00000000000000001p+0, false, false,\n+\t0x1.00000000000000001p+0, false, false,\n+\t0x1.00000000000000001p+0, false, false),\n   TEST (\"1.0000000000000000000016940658945086006781366450013592839241\"\n \t\"02783203125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000008p+0, false,\n-\t0x1.000000000000000008p+0, false,\n-\t0x1.000000000000000008p+0, false,\n-\t0x1.000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.000000000000000008p+0, false,\n-\t0x1.000000000000000008p+0, false,\n-\t0x1.000000000000000008p+0, false,\n-\t0x1.000000000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000008p+0, false, false,\n+\t0x1.000000000000000008p+0, false, false,\n+\t0x1.000000000000000008p+0, false, false,\n+\t0x1.000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000008p+0, false, false,\n+\t0x1.000000000000000008p+0, false, false,\n+\t0x1.000000000000000008p+0, false, false,\n+\t0x1.000000000000000008p+0, false, false),\n   TEST (\"1.0000000000000000000008470329472543003390683225006796419620\"\n \t\"513916015625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000004p+0, false,\n-\t0x1.000000000000000004p+0, false,\n-\t0x1.000000000000000004p+0, false,\n-\t0x1.000000000000000004p+0, false,\n-\ttrue,\n-\t0x1.000000000000000004p+0, false,\n-\t0x1.000000000000000004p+0, false,\n-\t0x1.000000000000000004p+0, false,\n-\t0x1.000000000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000004p+0, false, false,\n+\t0x1.000000000000000004p+0, false, false,\n+\t0x1.000000000000000004p+0, false, false,\n+\t0x1.000000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000004p+0, false, false,\n+\t0x1.000000000000000004p+0, false, false,\n+\t0x1.000000000000000004p+0, false, false,\n+\t0x1.000000000000000004p+0, false, false),\n   TEST (\"1.0000000000000000000004235164736271501695341612503398209810\"\n \t\"2569580078125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000002p+0, false,\n-\t0x1.000000000000000002p+0, false,\n-\t0x1.000000000000000002p+0, false,\n-\t0x1.000000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000002p+0, false,\n-\t0x1.000000000000000002p+0, false,\n-\t0x1.000000000000000002p+0, false,\n-\t0x1.000000000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000002p+0, false, false,\n+\t0x1.000000000000000002p+0, false, false,\n+\t0x1.000000000000000002p+0, false, false,\n+\t0x1.000000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000002p+0, false, false,\n+\t0x1.000000000000000002p+0, false, false,\n+\t0x1.000000000000000002p+0, false, false,\n+\t0x1.000000000000000002p+0, false, false),\n   TEST (\"1.0000000000000000000002117582368135750847670806251699104905\"\n \t\"12847900390625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000001p+0, false,\n-\t0x1.000000000000000001p+0, false,\n-\t0x1.000000000000000001p+0, false,\n-\t0x1.000000000000000001p+0, false,\n-\ttrue,\n-\t0x1.000000000000000001p+0, false,\n-\t0x1.000000000000000001p+0, false,\n-\t0x1.000000000000000001p+0, false,\n-\t0x1.000000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000001p+0, false, false,\n+\t0x1.000000000000000001p+0, false, false,\n+\t0x1.000000000000000001p+0, false, false,\n+\t0x1.000000000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000001p+0, false, false,\n+\t0x1.000000000000000001p+0, false, false,\n+\t0x1.000000000000000001p+0, false, false,\n+\t0x1.000000000000000001p+0, false, false),\n   TEST (\"1.0000000000000000000001058791184067875423835403125849552452\"\n \t\"564239501953125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000008p+0, false,\n-\t0x1.0000000000000000008p+0, false,\n-\t0x1.0000000000000000008p+0, false,\n-\t0x1.0000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000008p+0, false,\n-\t0x1.0000000000000000008p+0, false,\n-\t0x1.0000000000000000008p+0, false,\n-\t0x1.0000000000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000008p+0, false, false,\n+\t0x1.0000000000000000008p+0, false, false,\n+\t0x1.0000000000000000008p+0, false, false,\n+\t0x1.0000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000008p+0, false, false,\n+\t0x1.0000000000000000008p+0, false, false,\n+\t0x1.0000000000000000008p+0, false, false,\n+\t0x1.0000000000000000008p+0, false, false),\n   TEST (\"1.0000000000000000000000529395592033937711917701562924776226\"\n \t\"2821197509765625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000004p+0, false,\n-\t0x1.0000000000000000004p+0, false,\n-\t0x1.0000000000000000004p+0, false,\n-\t0x1.0000000000000000004p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000004p+0, false,\n-\t0x1.0000000000000000004p+0, false,\n-\t0x1.0000000000000000004p+0, false,\n-\t0x1.0000000000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000004p+0, false, false,\n+\t0x1.0000000000000000004p+0, false, false,\n+\t0x1.0000000000000000004p+0, false, false,\n+\t0x1.0000000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000004p+0, false, false,\n+\t0x1.0000000000000000004p+0, false, false,\n+\t0x1.0000000000000000004p+0, false, false,\n+\t0x1.0000000000000000004p+0, false, false),\n   TEST (\"1.0000000000000000000000264697796016968855958850781462388113\"\n \t\"14105987548828125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000002p+0, false,\n-\t0x1.0000000000000000002p+0, false,\n-\t0x1.0000000000000000002p+0, false,\n-\t0x1.0000000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000002p+0, false,\n-\t0x1.0000000000000000002p+0, false,\n-\t0x1.0000000000000000002p+0, false,\n-\t0x1.0000000000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000002p+0, false, false,\n+\t0x1.0000000000000000002p+0, false, false,\n+\t0x1.0000000000000000002p+0, false, false,\n+\t0x1.0000000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000002p+0, false, false,\n+\t0x1.0000000000000000002p+0, false, false,\n+\t0x1.0000000000000000002p+0, false, false,\n+\t0x1.0000000000000000002p+0, false, false),\n   TEST (\"1.0000000000000000000000132348898008484427979425390731194056\"\n \t\"570529937744140625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000001p+0, false,\n-\t0x1.0000000000000000001p+0, false,\n-\t0x1.0000000000000000001p+0, false,\n-\t0x1.0000000000000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000001p+0, false,\n-\t0x1.0000000000000000001p+0, false,\n-\t0x1.0000000000000000001p+0, false,\n-\t0x1.0000000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000001p+0, false, false,\n+\t0x1.0000000000000000001p+0, false, false,\n+\t0x1.0000000000000000001p+0, false, false,\n+\t0x1.0000000000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000001p+0, false, false,\n+\t0x1.0000000000000000001p+0, false, false,\n+\t0x1.0000000000000000001p+0, false, false,\n+\t0x1.0000000000000000001p+0, false, false),\n   TEST (\"1.0000000000000000000000066174449004242213989712695365597028\"\n \t\"2852649688720703125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000008p+0, false,\n-\t0x1.00000000000000000008p+0, false,\n-\t0x1.00000000000000000008p+0, false,\n-\t0x1.00000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000008p+0, false,\n-\t0x1.00000000000000000008p+0, false,\n-\t0x1.00000000000000000008p+0, false,\n-\t0x1.00000000000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000008p+0, false, false,\n+\t0x1.00000000000000000008p+0, false, false,\n+\t0x1.00000000000000000008p+0, false, false,\n+\t0x1.00000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000008p+0, false, false,\n+\t0x1.00000000000000000008p+0, false, false,\n+\t0x1.00000000000000000008p+0, false, false,\n+\t0x1.00000000000000000008p+0, false, false),\n   TEST (\"1.0000000000000000000000033087224502121106994856347682798514\"\n \t\"14263248443603515625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000004p+0, false,\n-\t0x1.00000000000000000004p+0, false,\n-\t0x1.00000000000000000004p+0, false,\n-\t0x1.00000000000000000004p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000004p+0, false,\n-\t0x1.00000000000000000004p+0, false,\n-\t0x1.00000000000000000004p+0, false,\n-\t0x1.00000000000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000004p+0, false, false,\n+\t0x1.00000000000000000004p+0, false, false,\n+\t0x1.00000000000000000004p+0, false, false,\n+\t0x1.00000000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000004p+0, false, false,\n+\t0x1.00000000000000000004p+0, false, false,\n+\t0x1.00000000000000000004p+0, false, false,\n+\t0x1.00000000000000000004p+0, false, false),\n   TEST (\"1.0000000000000000000000016543612251060553497428173841399257\"\n \t\"071316242218017578125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000002p+0, false,\n-\t0x1.00000000000000000002p+0, false,\n-\t0x1.00000000000000000002p+0, false,\n-\t0x1.00000000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000002p+0, false,\n-\t0x1.00000000000000000002p+0, false,\n-\t0x1.00000000000000000002p+0, false,\n-\t0x1.00000000000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000002p+0, false, false,\n+\t0x1.00000000000000000002p+0, false, false,\n+\t0x1.00000000000000000002p+0, false, false,\n+\t0x1.00000000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000002p+0, false, false,\n+\t0x1.00000000000000000002p+0, false, false,\n+\t0x1.00000000000000000002p+0, false, false,\n+\t0x1.00000000000000000002p+0, false, false),\n   TEST (\"1.0000000000000000000000008271806125530276748714086920699628\"\n \t\"5356581211090087890625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000001p+0, false,\n-\t0x1.00000000000000000001p+0, false,\n-\t0x1.00000000000000000001p+0, false,\n-\t0x1.00000000000000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000001p+0, false,\n-\t0x1.00000000000000000001p+0, false,\n-\t0x1.00000000000000000001p+0, false,\n-\t0x1.00000000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000001p+0, false, false,\n+\t0x1.00000000000000000001p+0, false, false,\n+\t0x1.00000000000000000001p+0, false, false,\n+\t0x1.00000000000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000001p+0, false, false,\n+\t0x1.00000000000000000001p+0, false, false,\n+\t0x1.00000000000000000001p+0, false, false,\n+\t0x1.00000000000000000001p+0, false, false),\n   TEST (\"1.0000000000000000000000004135903062765138374357043460349814\"\n \t\"26782906055450439453125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000008p+0, false,\n-\t0x1.000000000000000000008p+0, false,\n-\t0x1.000000000000000000008p+0, false,\n-\t0x1.000000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000008p+0, false,\n-\t0x1.000000000000000000008p+0, false,\n-\t0x1.000000000000000000008p+0, false,\n-\t0x1.000000000000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000008p+0, false, false),\n   TEST (\"1.0000000000000000000000002067951531382569187178521730174907\"\n \t\"133914530277252197265625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000004p+0, false,\n-\t0x1.000000000000000000004p+0, false,\n-\t0x1.000000000000000000004p+0, false,\n-\t0x1.000000000000000000004p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000004p+0, false,\n-\t0x1.000000000000000000004p+0, false,\n-\t0x1.000000000000000000004p+0, false,\n-\t0x1.000000000000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000004p+0, false, false),\n   TEST (\"1.0000000000000000000000001033975765691284593589260865087453\"\n \t\"5669572651386260986328125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000002p+0, false,\n-\t0x1.000000000000000000002p+0, false,\n-\t0x1.000000000000000000002p+0, false,\n-\t0x1.000000000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000002p+0, false,\n-\t0x1.000000000000000000002p+0, false,\n-\t0x1.000000000000000000002p+0, false,\n-\t0x1.000000000000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000002p+0, false, false),\n   TEST (\"1.0000000000000000000000000516987882845642296794630432543726\"\n \t\"78347863256931304931640625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000001p+0, false,\n-\t0x1.000000000000000000001p+0, false,\n-\t0x1.000000000000000000001p+0, false,\n-\t0x1.000000000000000000001p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000001p+0, false,\n-\t0x1.000000000000000000001p+0, false,\n-\t0x1.000000000000000000001p+0, false,\n-\t0x1.000000000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000001p+0, false, false),\n   TEST (\"1.0000000000000000000000000258493941422821148397315216271863\"\n \t\"391739316284656524658203125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000008p+0, false,\n-\t0x1.0000000000000000000008p+0, false,\n-\t0x1.0000000000000000000008p+0, false,\n-\t0x1.0000000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000008p+0, false,\n-\t0x1.0000000000000000000008p+0, false,\n-\t0x1.0000000000000000000008p+0, false,\n-\t0x1.0000000000000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000008p+0, false, false),\n   TEST (\"1.0000000000000000000000000129246970711410574198657608135931\"\n \t\"6958696581423282623291015625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000004p+0, false,\n-\t0x1.0000000000000000000004p+0, false,\n-\t0x1.0000000000000000000004p+0, false,\n-\t0x1.0000000000000000000004p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000004p+0, false,\n-\t0x1.0000000000000000000004p+0, false,\n-\t0x1.0000000000000000000004p+0, false,\n-\t0x1.0000000000000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000004p+0, false, false),\n   TEST (\"1.0000000000000000000000000064623485355705287099328804067965\"\n \t\"84793482907116413116455078125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000002p+0, false,\n-\t0x1.0000000000000000000002p+0, false,\n-\t0x1.0000000000000000000002p+0, false,\n-\t0x1.0000000000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000002p+0, false,\n-\t0x1.0000000000000000000002p+0, false,\n-\t0x1.0000000000000000000002p+0, false,\n-\t0x1.0000000000000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000002p+0, false, false),\n   TEST (\"1.0000000000000000000000000032311742677852643549664402033982\"\n \t\"923967414535582065582275390625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000001p+0, false,\n-\t0x1.0000000000000000000001p+0, false,\n-\t0x1.0000000000000000000001p+0, false,\n-\t0x1.0000000000000000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000001p+0, false,\n-\t0x1.0000000000000000000001p+0, false,\n-\t0x1.0000000000000000000001p+0, false,\n-\t0x1.0000000000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000001p+0, false, false),\n   TEST (\"1.0000000000000000000000000016155871338926321774832201016991\"\n \t\"4619837072677910327911376953125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000008p+0, false,\n-\t0x1.00000000000000000000008p+0, false,\n-\t0x1.00000000000000000000008p+0, false,\n-\t0x1.00000000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000008p+0, false,\n-\t0x1.00000000000000000000008p+0, false,\n-\t0x1.00000000000000000000008p+0, false,\n-\t0x1.00000000000000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000008p+0, false, false,\n+\t0x1.00000000000000000000008p+0, false, false,\n+\t0x1.00000000000000000000008p+0, false, false,\n+\t0x1.00000000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000008p+0, false, false,\n+\t0x1.00000000000000000000008p+0, false, false,\n+\t0x1.00000000000000000000008p+0, false, false,\n+\t0x1.00000000000000000000008p+0, false, false),\n   TEST (\"1.0000000000000000000000000008077935669463160887416100508495\"\n \t\"73099185363389551639556884765625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000004p+0, false,\n-\t0x1.00000000000000000000004p+0, false,\n-\t0x1.00000000000000000000004p+0, false,\n-\t0x1.00000000000000000000004p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000004p+0, false,\n-\t0x1.00000000000000000000004p+0, false,\n-\t0x1.00000000000000000000004p+0, false,\n-\t0x1.00000000000000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000004p+0, false, false,\n+\t0x1.00000000000000000000004p+0, false, false,\n+\t0x1.00000000000000000000004p+0, false, false,\n+\t0x1.00000000000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000004p+0, false, false,\n+\t0x1.00000000000000000000004p+0, false, false,\n+\t0x1.00000000000000000000004p+0, false, false,\n+\t0x1.00000000000000000000004p+0, false, false),\n   TEST (\"1.0000000000000000000000000004038967834731580443708050254247\"\n \t\"865495926816947758197784423828125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000002p+0, false,\n-\t0x1.00000000000000000000002p+0, false,\n-\t0x1.00000000000000000000002p+0, false,\n-\t0x1.00000000000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000002p+0, false,\n-\t0x1.00000000000000000000002p+0, false,\n-\t0x1.00000000000000000000002p+0, false,\n-\t0x1.00000000000000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000002p+0, false, false,\n+\t0x1.00000000000000000000002p+0, false, false,\n+\t0x1.00000000000000000000002p+0, false, false,\n+\t0x1.00000000000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000002p+0, false, false,\n+\t0x1.00000000000000000000002p+0, false, false,\n+\t0x1.00000000000000000000002p+0, false, false,\n+\t0x1.00000000000000000000002p+0, false, false),\n   TEST (\"1.0000000000000000000000000002019483917365790221854025127123\"\n \t\"9327479634084738790988922119140625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000001p+0, false,\n-\t0x1.00000000000000000000001p+0, false,\n-\t0x1.00000000000000000000001p+0, false,\n-\t0x1.00000000000000000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000001p+0, false,\n-\t0x1.00000000000000000000001p+0, false,\n-\t0x1.00000000000000000000001p+0, false,\n-\t0x1.00000000000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000001p+0, false, false,\n+\t0x1.00000000000000000000001p+0, false, false,\n+\t0x1.00000000000000000000001p+0, false, false,\n+\t0x1.00000000000000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000001p+0, false, false,\n+\t0x1.00000000000000000000001p+0, false, false,\n+\t0x1.00000000000000000000001p+0, false, false,\n+\t0x1.00000000000000000000001p+0, false, false),\n   TEST (\"1.0000000000000000000000000001009741958682895110927012563561\"\n \t\"96637398170423693954944610595703125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000000008p+0, false,\n-\t0x1.000000000000000000000008p+0, false,\n-\t0x1.000000000000000000000008p+0, false,\n-\t0x1.000000000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000000008p+0, false,\n-\t0x1.000000000000000000000008p+0, false,\n-\t0x1.000000000000000000000008p+0, false,\n-\t0x1.000000000000000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000000008p+0, false, false),\n   TEST (\"1.0000000000000000000000000000504870979341447555463506281780\"\n \t\"983186990852118469774723052978515625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000000004p+0, false,\n-\t0x1.000000000000000000000004p+0, false,\n-\t0x1.000000000000000000000004p+0, false,\n-\t0x1.000000000000000000000004p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000000004p+0, false,\n-\t0x1.000000000000000000000004p+0, false,\n-\t0x1.000000000000000000000004p+0, false,\n-\t0x1.000000000000000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000000004p+0, false, false),\n   TEST (\"1.0000000000000000000000000000252435489670723777731753140890\"\n \t\"4915934954260592348873615264892578125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000000002p+0, false,\n-\t0x1.000000000000000000000002p+0, false,\n-\t0x1.000000000000000000000002p+0, false,\n-\t0x1.000000000000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000000002p+0, false,\n-\t0x1.000000000000000000000002p+0, false,\n-\t0x1.000000000000000000000002p+0, false,\n-\t0x1.000000000000000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000000002p+0, false, false),\n   TEST (\"1.0000000000000000000000000000126217744835361888865876570445\"\n \t\"24579674771302961744368076324462890625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000000001p+0, false,\n-\t0x1.000000000000000000000001p+0, false,\n-\t0x1.000000000000000000000001p+0, false,\n-\t0x1.000000000000000000000001p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000000001p+0, false,\n-\t0x1.000000000000000000000001p+0, false,\n-\t0x1.000000000000000000000001p+0, false,\n-\t0x1.000000000000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000000001p+0, false, false),\n   TEST (\"1.0000000000000000000000000000063108872417680944432938285222\"\n \t\"622898373856514808721840381622314453125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000000008p+0, false,\n-\t0x1.0000000000000000000000008p+0, false,\n-\t0x1.0000000000000000000000008p+0, false,\n-\t0x1.0000000000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000000008p+0, false,\n-\t0x1.0000000000000000000000008p+0, false,\n-\t0x1.0000000000000000000000008p+0, false,\n-\t0x1.0000000000000000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000000008p+0, false, false),\n   TEST (\"1.0000000000000000000000000000031554436208840472216469142611\"\n \t\"3114491869282574043609201908111572265625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000000004p+0, false,\n-\t0x1.0000000000000000000000004p+0, false,\n-\t0x1.0000000000000000000000004p+0, false,\n-\t0x1.0000000000000000000000004p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000000004p+0, false,\n-\t0x1.0000000000000000000000004p+0, false,\n-\t0x1.0000000000000000000000004p+0, false,\n-\t0x1.0000000000000000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000000004p+0, false, false),\n   TEST (\"1.0000000000000000000000000000015777218104420236108234571305\"\n \t\"65572459346412870218046009540557861328125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000000002p+0, false,\n-\t0x1.0000000000000000000000002p+0, false,\n-\t0x1.0000000000000000000000002p+0, false,\n-\t0x1.0000000000000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000000002p+0, false,\n-\t0x1.0000000000000000000000002p+0, false,\n-\t0x1.0000000000000000000000002p+0, false,\n-\t0x1.0000000000000000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000000002p+0, false, false),\n   TEST (\"1.0000000000000000000000000000007888609052210118054117285652\"\n \t\"827862296732064351090230047702789306640625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000000001p+0, false,\n-\t0x1.0000000000000000000000001p+0, false,\n-\t0x1.0000000000000000000000001p+0, false,\n-\t0x1.0000000000000000000000001p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000000001p+0, false,\n-\t0x1.0000000000000000000000001p+0, false,\n-\t0x1.0000000000000000000000001p+0, false,\n-\t0x1.0000000000000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000000001p+0, false, false),\n   TEST (\"1.0000000000000000000000000000003944304526105059027058642826\"\n \t\"4139311483660321755451150238513946533203125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000000008p+0, false,\n-\t0x1.00000000000000000000000008p+0, false,\n-\t0x1.00000000000000000000000008p+0, false,\n-\t0x1.00000000000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000000008p+0, false,\n-\t0x1.00000000000000000000000008p+0, false,\n-\t0x1.00000000000000000000000008p+0, false,\n-\t0x1.00000000000000000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000000008p+0, false, false,\n+\t0x1.00000000000000000000000008p+0, false, false,\n+\t0x1.00000000000000000000000008p+0, false, false,\n+\t0x1.00000000000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000000008p+0, false, false,\n+\t0x1.00000000000000000000000008p+0, false, false,\n+\t0x1.00000000000000000000000008p+0, false, false,\n+\t0x1.00000000000000000000000008p+0, false, false),\n   TEST (\"1.0000000000000000000000000000001972152263052529513529321413\"\n \t\"20696557418301608777255751192569732666015625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000000004p+0, false,\n-\t0x1.00000000000000000000000004p+0, false,\n-\t0x1.00000000000000000000000004p+0, false,\n-\t0x1.00000000000000000000000004p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000000004p+0, false,\n-\t0x1.00000000000000000000000004p+0, false,\n-\t0x1.00000000000000000000000004p+0, false,\n-\t0x1.00000000000000000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000000004p+0, false, false,\n+\t0x1.00000000000000000000000004p+0, false, false,\n+\t0x1.00000000000000000000000004p+0, false, false,\n+\t0x1.00000000000000000000000004p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000000004p+0, false, false,\n+\t0x1.00000000000000000000000004p+0, false, false,\n+\t0x1.00000000000000000000000004p+0, false, false,\n+\t0x1.00000000000000000000000004p+0, false, false),\n   TEST (\"1.0000000000000000000000000000000986076131526264756764660706\"\n \t\"603482787091508043886278755962848663330078125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000000002p+0, false,\n-\t0x1.00000000000000000000000002p+0, false,\n-\t0x1.00000000000000000000000002p+0, false,\n-\t0x1.00000000000000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000000002p+0, false,\n-\t0x1.00000000000000000000000002p+0, false,\n-\t0x1.00000000000000000000000002p+0, false,\n-\t0x1.00000000000000000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000000002p+0, false, false,\n+\t0x1.00000000000000000000000002p+0, false, false,\n+\t0x1.00000000000000000000000002p+0, false, false,\n+\t0x1.00000000000000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000000002p+0, false, false,\n+\t0x1.00000000000000000000000002p+0, false, false,\n+\t0x1.00000000000000000000000002p+0, false, false,\n+\t0x1.00000000000000000000000002p+0, false, false),\n   TEST (\"1.0000000000000000000000000000000493038065763132378382330353\"\n \t\"3017413935457540219431393779814243316650390625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000000001p+0, false,\n-\t0x1.00000000000000000000000001p+0, false,\n-\t0x1.00000000000000000000000001p+0, false,\n-\t0x1.00000000000000000000000001p+0, false,\n-\ttrue,\n-\t0x1.00000000000000000000000001p+0, false,\n-\t0x1.00000000000000000000000001p+0, false,\n-\t0x1.00000000000000000000000001p+0, false,\n-\t0x1.00000000000000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000000001p+0, false, false,\n+\t0x1.00000000000000000000000001p+0, false, false,\n+\t0x1.00000000000000000000000001p+0, false, false,\n+\t0x1.00000000000000000000000001p+0, false, false,\n+\ttrue,\n+\t0x1.00000000000000000000000001p+0, false, false,\n+\t0x1.00000000000000000000000001p+0, false, false,\n+\t0x1.00000000000000000000000001p+0, false, false,\n+\t0x1.00000000000000000000000001p+0, false, false),\n   TEST (\"1.0000000000000000000000000000000246519032881566189191165176\"\n \t\"65087069677287701097156968899071216583251953125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000000000008p+0, false,\n-\t0x1.000000000000000000000000008p+0, false,\n-\t0x1.000000000000000000000000008p+0, false,\n-\t0x1.000000000000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000000000008p+0, false,\n-\t0x1.000000000000000000000000008p+0, false,\n-\t0x1.000000000000000000000000008p+0, false,\n-\t0x1.000000000000000000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\t0x1.000000000000000000000000008p+0, false, false),\n   TEST (\"1.0000000000000000000000000000000123259516440783094595582588\"\n \t\"325435348386438505485784844495356082916259765625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000000000000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000000000004p+0, false,\n-\t0x1.000000000000000000000000004p+0, false,\n-\t0x1.000000000000000000000000004p+0, false,\n-\t0x1.000000000000000000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000000000004p+0, false, false,\n+\t0x1.000000000000000000000000004p+0, false, false),\n   TEST (\"1.0000000000000000000000000000000061629758220391547297791294\"\n \t\"1627176741932192527428924222476780414581298828125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000000000000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000000000002p+0, false,\n-\t0x1.000000000000000000000000002p+0, false,\n-\t0x1.000000000000000000000000002p+0, false,\n-\t0x1.000000000000000000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000000000002p+0, false, false,\n+\t0x1.000000000000000000000000002p+0, false, false),\n   TEST (\"1.0000000000000000000000000000000030814879110195773648895647\"\n \t\"08135883709660962637144621112383902072906494140625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000000000000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.000000000000000000000000001p+0, false,\n-\t0x1.000000000000000000000000001p+0, false,\n-\t0x1.000000000000000000000000001p+0, false,\n-\t0x1.000000000000000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.000000000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000000000001p+0, false, false,\n+\t0x1.000000000000000000000000001p+0, false, false),\n   TEST (\"1.0000000000000000000000000000000015407439555097886824447823\"\n \t\"540679418548304813185723105561919510364532470703125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000000000000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000000000008p+0, false,\n-\t0x1.0000000000000000000000000008p+0, false,\n-\t0x1.0000000000000000000000000008p+0, false,\n-\t0x1.0000000000000000000000000008p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000000000008p+0, false, false,\n+\t0x1.0000000000000000000000000008p+0, false, false),\n   TEST (\"1.0000000000000000000000000000000007703719777548943412223911\"\n \t\"7703397092741524065928615527809597551822662353515625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000000000000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000000000004p+0, false,\n-\t0x1.0000000000000000000000000004p+0, false,\n-\t0x1.0000000000000000000000000004p+0, false,\n-\t0x1.0000000000000000000000000004p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000000000004p+0, false, false,\n+\t0x1.0000000000000000000000000004p+0, false, false),\n   TEST (\"1.0000000000000000000000000000000003851859888774471706111955\"\n \t\"88516985463707620329643077639047987759113311767578125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000000000000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000000000002p+0, false,\n-\t0x1.0000000000000000000000000002p+0, false,\n-\t0x1.0000000000000000000000000002p+0, false,\n-\t0x1.0000000000000000000000000002p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000000000002p+0, false, false,\n+\t0x1.0000000000000000000000000002p+0, false, false),\n   TEST (\"1.0000000000000000000000000000000001925929944387235853055977\"\n \t\"942584927318538101648215388195239938795566558837890625\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000000000000000000000000008p+0, false,\n-\ttrue,\n-\t0x1.0000000000000000000000000001p+0, false,\n-\t0x1.0000000000000000000000000001p+0, false,\n-\t0x1.0000000000000000000000000001p+0, false,\n-\t0x1.0000000000000000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\ttrue,\n+\t0x1.0000000000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000000000001p+0, false, false,\n+\t0x1.0000000000000000000000000001p+0, false, false),\n   TEST (\"1.0000000000000000000000000000000000962964972193617926527988\"\n \t\"9712924636592690508241076940976199693977832794189453125\",\n \tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000001p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000002p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.000000000000000000000000008p+0, false,\n-\tfalse,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1p+0, false,\n-\t0x1.0000000000000000000000000001p+0, false),\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000001p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000002p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.000000000000000000000000008p+0, false, false,\n+\tfalse,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1p+0, false, false,\n+\t0x1.0000000000000000000000000001p+0, false, false),\n };\ndiff --git a/stdlib/tst-strtod-round-skeleton.c b/stdlib/tst-strtod-round-skeleton.c\nindex c3cc0201d4..be081ba416 100644\n--- a/stdlib/tst-strtod-round-skeleton.c\n+++ b/stdlib/tst-strtod-round-skeleton.c\n@@ -30,6 +30,7 @@\n #include <stdlib.h>\n #include <string.h>\n #include <math-tests.h>\n+#include <tininess.h>\n \n #include \"tst-strtod.h\"\n \n@@ -139,16 +140,26 @@\n    gen-tst-strtod-round utility to select the appropriately\n    rounded long double value for a given format.  */\n #define TEST(s,\t\t\t\t\t\t\t\\\n-\t     fx, fd, fdo, fn, fno, fz, fzo, fu, fuo,\t\t\\\n-\t     dx, dd, ddo, dn, dno, dz, dzo, du, duo,\t\t\\\n-\t     ld64ix, ld64id, ld64ido, ld64in, ld64ino,\t\t\\\n-\t     ld64iz, ld64izo, ld64iu, ld64iuo,\t\t\t\\\n-\t     ld64mx, ld64md, ld64mdo, ld64mn, ld64mno,\t\t\\\n-\t     ld64mz, ld64mzo, ld64mu, ld64muo,\t\t\t\\\n-\t     ld106x, ld106d, ld106do, ld106n, ld106no,\t\t\\\n-\t     ld106z, ld106zo, ld106u, ld106uo,\t\t\t\\\n-\t     ld113x, ld113d, ld113do, ld113n, ld113no,\t\t\\\n-\t     ld113z, ld113zo, ld113u, ld113uo)\t\t\t\\\n+\t     fx, fd, fdo, fdu, fn, fno, fnu,\t\t\t\\\n+\t     fz, fzo, fzu, fu, fuo, fuu,\t\t\t\\\n+\t     dx, dd, ddo, ddu, dn, dno, dnu,\t\t\t\\\n+\t     dz, dzo, dzu, du, duo, duu,\t\t\t\\\n+\t     ld64ix, ld64id, ld64ido, ld64idu,\t\t\t\\\n+\t     ld64in, ld64ino, ld64inu,\t\t\t\t\\\n+\t     ld64iz, ld64izo, ld64izu,\t\t\t\t\\\n+\t     ld64iu, ld64iuo, ld64iuu,\t\t\t\t\\\n+\t     ld64mx, ld64md, ld64mdo, ld64mdu,\t\t\t\\\n+\t     ld64mn, ld64mno, ld64mnu,\t\t\t\t\\\n+\t     ld64mz, ld64mzo, ld64mzu,\t\t\t\t\\\n+\t     ld64mu, ld64muo, ld64muu,\t\t\t\t\\\n+\t     ld106x, ld106d, ld106do, ld106du,\t\t\t\\\n+\t     ld106n, ld106no, ld106nu,\t\t\t\t\\\n+\t     ld106z, ld106zo, ld106zu,\t\t\t\t\\\n+\t     ld106u, ld106uo, ld106uu,\t\t\t\t\\\n+\t     ld113x, ld113d, ld113do, ld113du,\t\t\t\\\n+\t     ld113n, ld113no, ld113nu,\t\t\t\t\\\n+\t     ld113z, ld113zo, ld113zu,\t\t\t\t\\\n+\t     ld113u, ld113uo, ld113uu)\t\t\t\t\\\n   {\t\t\t\t\t\t\t\t\\\n     L_ (s),\t\t\t\t\t\t\t\\\n     { XNTRY (fx, dx, ld64ix, ld64mx, ld106x, ld113x) },\t\t\\\n@@ -163,6 +174,12 @@\n     { XNTRY (fdo, ddo, ld64ido, ld64mdo, ld106do, ld113do) },\t\\\n     { XNTRY (fzo, dzo, ld64izo, ld64mzo, ld106zo, ld113zo) },\t\\\n     { XNTRY (fuo, duo, ld64iuo, ld64muo, ld106uo, ld113uo) }\t\\\n+    },\t\t\t\t\t\t\t\t\\\n+    {\t\t\t\t\t\t\t\t\\\n+    { XNTRY (fnu, dnu, ld64inu, ld64mnu, ld106nu, ld113nu) },\t\\\n+    { XNTRY (fdu, ddu, ld64idu, ld64mdu, ld106du, ld113du) },\t\\\n+    { XNTRY (fzu, dzu, ld64izu, ld64mzu, ld106zu, ld113zu) },\t\\\n+    { XNTRY (fuu, duu, ld64iuu, ld64muu, ld106uu, ld113uu) }\t\\\n     }\t\t\t\t\t\t\t\t\\\n   }\n \n@@ -181,11 +198,17 @@ struct test_overflow\n   STRUCT_FOREACH_FLOAT_BOOL\n   };\n \n+struct test_underflow\n+  {\n+  STRUCT_FOREACH_FLOAT_BOOL\n+  };\n+\n struct test {\n   const CHAR *s;\n   struct test_exactness exact;\n   struct test_results r[4];\n   struct test_overflow o[4];\n+  struct test_underflow u[4];\n };\n \n /* Include the generated test data.  */\n@@ -203,10 +226,14 @@ struct test {\n # define FE_OVERFLOW 0\n #endif\n \n+#ifndef FE_UNDERFLOW\n+# define FE_UNDERFLOW 0\n+#endif\n+\n #define GEN_ONE_TEST(FSUF, FTYPE, FTOSTR, LSUF, CSUF)\t\t\\\n {\t\t\t\t\t\t\t\t\\\n   feclearexcept (FE_ALL_EXCEPT);\t\t\t\t\\\n-  errno = 0;\t\t\t\t\t\t\t\\\n+  errno = 12345;\t\t\t\t\t\t\\\n   FTYPE f = STRTO (FSUF) (s, NULL);\t\t\t\t\\\n   int new_errno = errno;\t\t\t\t\t\\\n   if (f != expected->FSUF\t\t\t\t\t\\\n@@ -265,6 +292,40 @@ struct test {\n \t\t  s, new_errno, ERANGE);\t\t\t\\\n \t  result = 1;\t\t\t\t\t\t\\\n \t}\t\t\t\t\t\t\t\\\n+      if (FE_UNDERFLOW != 0)\t\t\t\t\t\\\n+\t{\t\t\t\t\t\t\t\\\n+\t  bool underflow_raised\t\t\t\t\t\\\n+\t    = fetestexcept (FE_UNDERFLOW) != 0;\t\t\t\\\n+\t  if (underflow_raised != underflow->FSUF)\t\t\\\n+\t    {\t\t\t\t\t\t\t\\\n+\t      printf (FNPFXS \"to\" #FSUF\t\t\t\t\\\n+\t\t      \" (\" STRM \") underflow %d \"\t\t\\\n+\t\t      \"not %d\\n\", s, underflow_raised,\t\t\\\n+\t\t      underflow->FSUF);\t\t\t\t\\\n+\t      if (EXCEPTION_TESTS (FTYPE))\t\t\t\\\n+\t\tresult = 1;\t\t\t\t\t\\\n+\t      else\t\t\t\t\t\t\\\n+\t\tprintf (\"ignoring this exception error\\n\");\t\\\n+\t    }\t\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\\\n+      if (underflow->FSUF && new_errno != ERANGE)\t\t\\\n+\t{\t\t\t\t\t\t\t\\\n+\t  printf (FNPFXS \"to\" #FSUF\t\t\t\t\\\n+\t\t  \" (\" STRM \") left errno == %d,\"\t\t\\\n+\t\t  \" not %d (ERANGE)\\n\",\t\t\t\t\\\n+\t\t  s, new_errno, ERANGE);\t\t\t\\\n+\t  result = 1;\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\\\n+      if (!overflow->FSUF\t\t\t\t\t\\\n+\t  && !underflow->FSUF\t\t\t\t\t\\\n+\t  && new_errno != 12345)\t\t\t\t\\\n+\t{\t\t\t\t\t\t\t\\\n+\t  printf (FNPFXS \"to\" #FSUF\t\t\t\t\\\n+\t\t  \" (\" STRM \") set errno == %d,\"\t\t\\\n+\t\t  \" should be unchanged\\n\",\t\t\t\\\n+\t\t  s, new_errno);\t\t\t\t\\\n+\t  result = 1;\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\\\n     }\t\t\t\t\t\t\t\t\\\n }\n \n@@ -272,6 +333,7 @@ static int\n test_in_one_mode (const CHAR *s, const struct test_results *expected,\n \t\t    const struct test_exactness *exact,\n \t\t    const struct test_overflow *overflow,\n+\t\t    const struct test_underflow *underflow,\n \t\t    const char *mode_name, int rnd_mode)\n {\n   int result = 0;\n@@ -307,6 +369,7 @@ do_test (void)\n     {\n       result |= test_in_one_mode (tests[i].s, &tests[i].r[modes[0].rnd_i],\n \t\t\t\t  &tests[i].exact, &tests[i].o[modes[0].rnd_i],\n+\t\t\t\t  &tests[i].u[modes[0].rnd_i],\n \t\t\t\t  modes[0].mode_name, modes[0].rnd_mode);\n       for (const struct fetestmodes *m = &modes[1]; m->mode_name != NULL; m++)\n \t{\n@@ -314,7 +377,9 @@ do_test (void)\n \t    {\n \t      result |= test_in_one_mode (tests[i].s, &tests[i].r[m->rnd_i],\n \t\t\t\t\t  &tests[i].exact,\n-\t\t\t\t\t  &tests[i].o[m->rnd_i], m->mode_name,\n+\t\t\t\t\t  &tests[i].o[m->rnd_i],\n+\t\t\t\t\t  &tests[i].u[m->rnd_i],\n+\t\t\t\t\t  m->mode_name,\n \t\t\t\t\t  m->rnd_mode);\n \t      fesetround (save_round_mode);\n \t    }\n\ncommit d0c1792ad269566f877208ffda91c21dcd1a72e6\nAuthor: Joseph Myers <josmyers@redhat.com>\nDate:   Tue Aug 27 12:41:02 2024 +0000\n\n    Fix strtod subnormal rounding (bug 30220)\n    \n    As reported in bug 30220, the implementation of strtod-family\n    functions has a bug in the following case: the input string would,\n    with infinite exponent range, take one more bit to represent than is\n    available in the normal precision of the return type; the value\n    represented is in the subnormal range; and there are no nonzero bits\n    in the value, below those that can be represented in subnormal\n    precision, other than the least significant bit and possibly the\n    0.5ulp bit.  In this case, round_and_return ends up discarding the\n    least significant bit.\n    \n    Fix by saving that bit to merge into more_bits (it can't be merged in\n    at the time it's computed, because more_bits mustn't include this bit\n    in the case of after-rounding tininess detection checking if the\n    result is still subnormal when rounded to normal precision, so merging\n    this bit into more_bits needs to take place after that check).\n    \n    Tested for x86_64.\n    \n    (cherry picked from commit 457622c2fa8f9f7435822d5287a437bc8be8090d)\n\ndiff --git a/stdlib/strtod_l.c b/stdlib/strtod_l.c\nindex be515ce659..beb97b3d0c 100644\n--- a/stdlib/strtod_l.c\n+++ b/stdlib/strtod_l.c\n@@ -222,6 +222,7 @@ round_and_return (mp_limb_t *retval, intmax_t exponent, int negative,\n \n       mp_size_t shift = MIN_EXP - 1 - exponent;\n       bool is_tiny = true;\n+      bool old_half_bit = (round_limb & (((mp_limb_t) 1) << round_bit)) != 0;\n \n       more_bits |= (round_limb & ((((mp_limb_t) 1) << round_bit) - 1)) != 0;\n       if (shift == MANT_DIG)\n@@ -292,6 +293,7 @@ round_and_return (mp_limb_t *retval, intmax_t exponent, int negative,\n \t  round_bit = shift - 1;\n \t  (void) __mpn_rshift (retval, retval, RETURN_LIMB_SIZE, shift);\n \t}\n+      more_bits |= old_half_bit;\n       /* This is a hook for the m68k long double format, where the\n \t exponent bias is the same for normalized and denormalized\n \t numbers.  */\ndiff --git a/stdlib/tst-strtod-round-data b/stdlib/tst-strtod-round-data\nindex 84ab705709..9489fbcc9c 100644\n--- a/stdlib/tst-strtod-round-data\n+++ b/stdlib/tst-strtod-round-data\n@@ -265,3 +265,15 @@\n 1.000000000000000000000000000000000385185988877447170611195588516985463707620329643077639047987759113311767578125\n 1.0000000000000000000000000000000001925929944387235853055977942584927318538101648215388195239938795566558837890625\n 1.00000000000000000000000000000000009629649721936179265279889712924636592690508241076940976199693977832794189453125\n+0x30000002222225p-1077\n+0x0.7fffffffffffeap-1022\n+0x0.7fffffffffffe9p-1022\n+0x0.7ffffd4p-126\n+0x0.7ffffffffffffffd4p-16382\n+0x0.7ffffffffffffffd4p-16383\n+0x0.7ffffffffffffffffffffffffffeap-16382\n+0x0.7000004p-126\n+0x0.70000000000002p-1022\n+0x0.70000000000000004p-16382\n+0x0.70000000000000004p-16383\n+0x0.70000000000000000000000000002p-16382\ndiff --git a/stdlib/tst-strtod-round-data.h b/stdlib/tst-strtod-round-data.h\nindex 13e62dd2b0..ed50eb2537 100644\n--- a/stdlib/tst-strtod-round-data.h\n+++ b/stdlib/tst-strtod-round-data.h\n@@ -15437,4 +15437,376 @@ static const struct test tests[] = {\n \t0x1p+0, false, false,\n \t0x1p+0, false, false,\n \t0x1.0000000000000000000000000001p+0, false, false),\n+  TEST (\"0x30000002222225p-1077\",\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x1.800000111111p-1024, false, true,\n+\t0x1.8000001111114p-1024, false, true,\n+\t0x1.800000111111p-1024, false, true,\n+\t0x1.8000001111114p-1024, false, true,\n+\ttrue,\n+\t0x1.80000011111128p-1024, false, false,\n+\t0x1.80000011111128p-1024, false, false,\n+\t0x1.80000011111128p-1024, false, false,\n+\t0x1.80000011111128p-1024, false, false,\n+\ttrue,\n+\t0x1.80000011111128p-1024, false, false,\n+\t0x1.80000011111128p-1024, false, false,\n+\t0x1.80000011111128p-1024, false, false,\n+\t0x1.80000011111128p-1024, false, false,\n+\tfalse,\n+\t0x1.800000111111p-1024, false, true,\n+\t0x1.8000001111114p-1024, false, true,\n+\t0x1.800000111111p-1024, false, true,\n+\t0x1.8000001111114p-1024, false, true,\n+\ttrue,\n+\t0x1.80000011111128p-1024, false, false,\n+\t0x1.80000011111128p-1024, false, false,\n+\t0x1.80000011111128p-1024, false, false,\n+\t0x1.80000011111128p-1024, false, false),\n+  TEST (\"0x0.7fffffffffffeap-1022\",\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x1.ffffffffffff8p-1024, false, true,\n+\t0x1.ffffffffffffcp-1024, false, true,\n+\t0x1.ffffffffffff8p-1024, false, true,\n+\t0x1.ffffffffffffcp-1024, false, true,\n+\ttrue,\n+\t0x1.ffffffffffffa8p-1024, false, false,\n+\t0x1.ffffffffffffa8p-1024, false, false,\n+\t0x1.ffffffffffffa8p-1024, false, false,\n+\t0x1.ffffffffffffa8p-1024, false, false,\n+\ttrue,\n+\t0x1.ffffffffffffa8p-1024, false, false,\n+\t0x1.ffffffffffffa8p-1024, false, false,\n+\t0x1.ffffffffffffa8p-1024, false, false,\n+\t0x1.ffffffffffffa8p-1024, false, false,\n+\tfalse,\n+\t0x1.ffffffffffff8p-1024, false, true,\n+\t0x1.ffffffffffffcp-1024, false, true,\n+\t0x1.ffffffffffff8p-1024, false, true,\n+\t0x1.ffffffffffffcp-1024, false, true,\n+\ttrue,\n+\t0x1.ffffffffffffa8p-1024, false, false,\n+\t0x1.ffffffffffffa8p-1024, false, false,\n+\t0x1.ffffffffffffa8p-1024, false, false,\n+\t0x1.ffffffffffffa8p-1024, false, false),\n+  TEST (\"0x0.7fffffffffffe9p-1022\",\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x1.ffffffffffff8p-1024, false, true,\n+\t0x1.ffffffffffffcp-1024, false, true,\n+\t0x1.ffffffffffff8p-1024, false, true,\n+\t0x1.ffffffffffffcp-1024, false, true,\n+\ttrue,\n+\t0x1.ffffffffffffa4p-1024, false, false,\n+\t0x1.ffffffffffffa4p-1024, false, false,\n+\t0x1.ffffffffffffa4p-1024, false, false,\n+\t0x1.ffffffffffffa4p-1024, false, false,\n+\ttrue,\n+\t0x1.ffffffffffffa4p-1024, false, false,\n+\t0x1.ffffffffffffa4p-1024, false, false,\n+\t0x1.ffffffffffffa4p-1024, false, false,\n+\t0x1.ffffffffffffa4p-1024, false, false,\n+\tfalse,\n+\t0x1.ffffffffffff8p-1024, false, true,\n+\t0x1.ffffffffffffcp-1024, false, true,\n+\t0x1.ffffffffffff8p-1024, false, true,\n+\t0x1.ffffffffffffcp-1024, false, true,\n+\ttrue,\n+\t0x1.ffffffffffffa4p-1024, false, false,\n+\t0x1.ffffffffffffa4p-1024, false, false,\n+\t0x1.ffffffffffffa4p-1024, false, false,\n+\t0x1.ffffffffffffa4p-1024, false, false),\n+  TEST (\"0x0.7ffffd4p-126\",\n+\tfalse,\n+\t0x1.fffffp-128, false, true,\n+\t0x1.fffff8p-128, false, true,\n+\t0x1.fffffp-128, false, true,\n+\t0x1.fffff8p-128, false, true,\n+\ttrue,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false,\n+\ttrue,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false,\n+\ttrue,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false,\n+\ttrue,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false,\n+\ttrue,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false,\n+\t0x1.fffff5p-128, false, false),\n+  TEST (\"0x0.7ffffffffffffffd4p-16382\",\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x1.fffffffffffffffp-16384, false, true,\n+\t0x1.fffffffffffffff8p-16384, false, true,\n+\t0x1.fffffffffffffffp-16384, false, true,\n+\t0x1.fffffffffffffff8p-16384, false, true,\n+\tfalse,\n+\t0x1.fffffffffffffff4p-16384, false, true,\n+\t0x1.fffffffffffffff4p-16384, false, true,\n+\t0x1.fffffffffffffff4p-16384, false, true,\n+\t0x1.fffffffffffffff8p-16384, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\ttrue,\n+\t0x1.fffffffffffffff5p-16384, false, false,\n+\t0x1.fffffffffffffff5p-16384, false, false,\n+\t0x1.fffffffffffffff5p-16384, false, false,\n+\t0x1.fffffffffffffff5p-16384, false, false),\n+  TEST (\"0x0.7ffffffffffffffd4p-16383\",\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0xf.ffffffffffffff8p-16388, false, true,\n+\t0xf.ffffffffffffff8p-16388, false, true,\n+\t0xf.ffffffffffffff8p-16388, false, true,\n+\t0x1p-16384, false, true,\n+\tfalse,\n+\t0xf.ffffffffffffff8p-16388, false, true,\n+\t0xf.ffffffffffffffcp-16388, false, true,\n+\t0xf.ffffffffffffff8p-16388, false, true,\n+\t0xf.ffffffffffffffcp-16388, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\ttrue,\n+\t0xf.ffffffffffffffa8p-16388, false, false,\n+\t0xf.ffffffffffffffa8p-16388, false, false,\n+\t0xf.ffffffffffffffa8p-16388, false, false,\n+\t0xf.ffffffffffffffa8p-16388, false, false),\n+  TEST (\"0x0.7ffffffffffffffffffffffffffeap-16382\",\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x1.fffffffffffffff8p-16384, false, true,\n+\t0x2p-16384, false, true,\n+\t0x1.fffffffffffffff8p-16384, false, true,\n+\t0x2p-16384, false, true,\n+\tfalse,\n+\t0x1.fffffffffffffffcp-16384, false, true,\n+\t0x2p-16384, false, true,\n+\t0x1.fffffffffffffffcp-16384, false, true,\n+\t0x2p-16384, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x1.fffffffffffffffffffffffffff8p-16384, false, true,\n+\t0x1.fffffffffffffffffffffffffffcp-16384, false, true,\n+\t0x1.fffffffffffffffffffffffffff8p-16384, false, true,\n+\t0x1.fffffffffffffffffffffffffffcp-16384, false, true),\n+  TEST (\"0x0.7000004p-126\",\n+\tfalse,\n+\t0x1.cp-128, false, true,\n+\t0x1.cp-128, false, true,\n+\t0x1.cp-128, false, true,\n+\t0x1.c00008p-128, false, true,\n+\ttrue,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false,\n+\ttrue,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false,\n+\ttrue,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false,\n+\ttrue,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false,\n+\ttrue,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false,\n+\t0x1.c00001p-128, false, false),\n+  TEST (\"0x0.70000000000002p-1022\",\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x1.cp-1024, false, true,\n+\t0x1.cp-1024, false, true,\n+\t0x1.cp-1024, false, true,\n+\t0x1.c000000000004p-1024, false, true,\n+\ttrue,\n+\t0x1.c0000000000008p-1024, false, false,\n+\t0x1.c0000000000008p-1024, false, false,\n+\t0x1.c0000000000008p-1024, false, false,\n+\t0x1.c0000000000008p-1024, false, false,\n+\ttrue,\n+\t0x1.c0000000000008p-1024, false, false,\n+\t0x1.c0000000000008p-1024, false, false,\n+\t0x1.c0000000000008p-1024, false, false,\n+\t0x1.c0000000000008p-1024, false, false,\n+\tfalse,\n+\t0x1.cp-1024, false, true,\n+\t0x1.cp-1024, false, true,\n+\t0x1.cp-1024, false, true,\n+\t0x1.c000000000004p-1024, false, true,\n+\ttrue,\n+\t0x1.c0000000000008p-1024, false, false,\n+\t0x1.c0000000000008p-1024, false, false,\n+\t0x1.c0000000000008p-1024, false, false,\n+\t0x1.c0000000000008p-1024, false, false),\n+  TEST (\"0x0.70000000000000004p-16382\",\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x1.cp-16384, false, true,\n+\t0x1.cp-16384, false, true,\n+\t0x1.cp-16384, false, true,\n+\t0x1.c000000000000008p-16384, false, true,\n+\tfalse,\n+\t0x1.cp-16384, false, true,\n+\t0x1.cp-16384, false, true,\n+\t0x1.cp-16384, false, true,\n+\t0x1.c000000000000004p-16384, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\ttrue,\n+\t0x1.c000000000000001p-16384, false, false,\n+\t0x1.c000000000000001p-16384, false, false,\n+\t0x1.c000000000000001p-16384, false, false,\n+\t0x1.c000000000000001p-16384, false, false),\n+  TEST (\"0x0.70000000000000004p-16383\",\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0xep-16388, false, true,\n+\t0xep-16388, false, true,\n+\t0xep-16388, false, true,\n+\t0xe.000000000000008p-16388, false, true,\n+\tfalse,\n+\t0xep-16388, false, true,\n+\t0xep-16388, false, true,\n+\t0xep-16388, false, true,\n+\t0xe.000000000000004p-16388, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\ttrue,\n+\t0xe.0000000000000008p-16388, false, false,\n+\t0xe.0000000000000008p-16388, false, false,\n+\t0xe.0000000000000008p-16388, false, false,\n+\t0xe.0000000000000008p-16388, false, false),\n+  TEST (\"0x0.70000000000000000000000000002p-16382\",\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x8p-152, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x1.cp-16384, false, true,\n+\t0x1.cp-16384, false, true,\n+\t0x1.cp-16384, false, true,\n+\t0x1.c000000000000008p-16384, false, true,\n+\tfalse,\n+\t0x1.cp-16384, false, true,\n+\t0x1.cp-16384, false, true,\n+\t0x1.cp-16384, false, true,\n+\t0x1.c000000000000004p-16384, false, true,\n+\tfalse,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x0p+0, false, true,\n+\t0x4p-1076, false, true,\n+\tfalse,\n+\t0x1.cp-16384, false, true,\n+\t0x1.cp-16384, false, true,\n+\t0x1.cp-16384, false, true,\n+\t0x1.c000000000000000000000000004p-16384, false, true),\n };\n\ncommit cac10d88c684c0171e549d813bfef7a31029f257\nAuthor: Joseph Myers <josmyers@redhat.com>\nDate:   Tue Aug 27 20:41:54 2024 +0000\n\n    Make __strtod_internal tests type-generic\n    \n    Some of the strtod tests use type-generic machinery in tst-strtod.h to\n    test the strto* functions for all floating types, while others only\n    test double even when the tests are in fact meaningful for all\n    floating types.\n    \n    Convert the tests of the internal __strtod_internal interface to cover\n    all floating types.  I haven't tried to convert them to use newer test\n    interfaces in other ways, just made the changes necessary to use the\n    type-generic machinery.  As an internal interface, there are no\n    aliases for different types with the same ABI (however,\n    __strtold_internal is defined even if long double has the same ABI as\n    double), so macros used by the type-generic testing code are redefined\n    as needed to avoid expecting such aliases to be present.\n    \n    Tested for x86_64.\n    \n    (cherry picked from commit 3fc063dee01da4f80920a14b7db637c8501d6fd4)\n\ndiff --git a/stdlib/tst-strtod1i.c b/stdlib/tst-strtod1i.c\nindex 9d6bb760fb..44ae0264f4 100644\n--- a/stdlib/tst-strtod1i.c\n+++ b/stdlib/tst-strtod1i.c\n@@ -25,60 +25,91 @@\n #include <string.h>\n #include <math.h>\n \n-/* Perform a few tests in a locale with thousands separators.  */\n-static int\n-do_test (void)\n-{\n-  static const struct\n-  {\n-    const char *loc;\n-    const char *str;\n-    double exp;\n-    ptrdiff_t nread;\n-  } tests[] =\n-    {\n-      { \"de_DE.UTF-8\", \"1,5\", 1.5, 3 },\n-      { \"de_DE.UTF-8\", \"1.5\", 1.0, 1 },\n-      { \"de_DE.UTF-8\", \"1.500\", 1500.0, 5 },\n-      { \"de_DE.UTF-8\", \"36.893.488.147.419.103.232\", 0x1.0p65, 26 }\n-    };\n-#define ntests (sizeof (tests) / sizeof (tests[0]))\n-  size_t n;\n-  int result = 0;\n-\n-  puts (\"\\nLocale tests\");\n+#include \"tst-strtod.h\"\n \n-  for (n = 0; n < ntests; ++n)\n-    {\n-      double d;\n-      char *endp;\n+/* This tests internal interfaces, which are only defined for types\n+   with distinct ABIs, so disable testing for types without distinct\n+   ABIs.  */\n+#undef IF_FLOAT32\n+#define IF_FLOAT32(x)\n+#undef IF_FLOAT64\n+#define IF_FLOAT64(x)\n+#undef IF_FLOAT32X\n+#define IF_FLOAT32X(x)\n+#undef IF_FLOAT64X\n+#define IF_FLOAT64X(x)\n+#if !__HAVE_DISTINCT_FLOAT128\n+# undef IF_FLOAT128\n+# define IF_FLOAT128(x)\n+#endif\n \n-      if (setlocale (LC_ALL, tests[n].loc) == NULL)\n-\t{\n-\t  printf (\"cannot set locale %s\\n\", tests[n].loc);\n-\t  result = 1;\n-\t  continue;\n-\t}\n+#define ntests (sizeof (tests) / sizeof (tests[0]))\n \n-      d = __strtod_internal (tests[n].str, &endp, 1);\n-      if (d != tests[n].exp)\n-\t{\n-\t  printf (\"strtod(\\\"%s\\\") returns %g and not %g\\n\",\n-\t\t  tests[n].str, d, tests[n].exp);\n-\t  result = 1;\n-\t}\n-      else if (endp - tests[n].str != tests[n].nread)\n-\t{\n-\t  printf (\"strtod(\\\"%s\\\") read %td bytes and not %td\\n\",\n-\t\t  tests[n].str, endp - tests[n].str, tests[n].nread);\n-\t  result = 1;\n-\t}\n-    }\n+/* Perform a few tests in a locale with thousands separators.  */\n+#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF)\t\t\t\\\n+static int\t\t\t\t\t\t\t\t\\\n+test_strto ## FSUF (void)\t\t\t\t\t\t\\\n+{\t\t\t\t\t\t\t\t\t\\\n+  static const struct\t\t\t\t\t\t\t\\\n+  {\t\t\t\t\t\t\t\t\t\\\n+    const char *loc;\t\t\t\t\t\t\t\\\n+    const char *str;\t\t\t\t\t\t\t\\\n+    FTYPE exp;\t\t\t\t\t\t\t\t\\\n+    ptrdiff_t nread;\t\t\t\t\t\t\t\\\n+  } tests[] =\t\t\t\t\t\t\t\t\\\n+    {\t\t\t\t\t\t\t\t\t\\\n+      { \"de_DE.UTF-8\", \"1,5\", 1.5 ## LSUF, 3 },\t\t\t\t\\\n+      { \"de_DE.UTF-8\", \"1.5\", 1.0 ## LSUF, 1 },\t\t\t\t\\\n+      { \"de_DE.UTF-8\", \"1.500\", 1500.0 ## LSUF, 5 },\t\t\t\\\n+      { \"de_DE.UTF-8\", \"36.893.488.147.419.103.232\", 0x1.0p65 ## LSUF, 26 } \\\n+    };\t\t\t\t\t\t\t\t\t\\\n+  size_t n;\t\t\t\t\t\t\t\t\\\n+  int result = 0;\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+  puts (\"\\nLocale tests\");\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+  for (n = 0; n < ntests; ++n)\t\t\t\t\t\t\\\n+    {\t\t\t\t\t\t\t\t\t\\\n+      FTYPE d;\t\t\t\t\t\t\t\t\\\n+      char *endp;\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+      if (setlocale (LC_ALL, tests[n].loc) == NULL)\t\t\t\\\n+\t{\t\t\t\t\t\t\t\t\\\n+\t  printf (\"cannot set locale %s\\n\", tests[n].loc);\t\t\\\n+\t  result = 1;\t\t\t\t\t\t\t\\\n+\t  continue;\t\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+      d = __strto ## FSUF ## _internal (tests[n].str, &endp, 1);\t\\\n+      if (d != tests[n].exp)\t\t\t\t\t\t\\\n+\t{\t\t\t\t\t\t\t\t\\\n+\t  char buf1[FSTRLENMAX], buf2[FSTRLENMAX];\t\t\t\\\n+\t  FTOSTR (buf1, sizeof (buf1), \"%g\", d);\t\t\t\\\n+\t  FTOSTR (buf2, sizeof (buf2), \"%g\", tests[n].exp);\t\t\\\n+\t  printf (\"strto\" # FSUF \"(\\\"%s\\\") returns %s and not %s\\n\",\t\\\n+\t\t  tests[n].str, buf1, buf2);\t\t\t\t\\\n+\t  result = 1;\t\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\t\\\n+      else if (endp - tests[n].str != tests[n].nread)\t\t\t\\\n+\t{\t\t\t\t\t\t\t\t\\\n+\t  printf (\"strto\" # FSUF \"(\\\"%s\\\") read %td bytes and not %td\\n\", \\\n+\t\t  tests[n].str, endp - tests[n].str, tests[n].nread);\t\\\n+\t  result = 1;\t\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\t\\\n+    }\t\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+  if (result == 0)\t\t\t\t\t\t\t\\\n+    puts (\"all OK\");\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+  return result ? EXIT_FAILURE : EXIT_SUCCESS;\t\t\t\t\\\n+}\n \n-  if (result == 0)\n-    puts (\"all OK\");\n+GEN_TEST_STRTOD_FOREACH (TEST_STRTOD)\n \n-  return result ? EXIT_FAILURE : EXIT_SUCCESS;\n+static int\n+do_test (void)\n+{\n+  return STRTOD_TEST_FOREACH (test_strto);\n }\n \n #include <support/test-driver.c>\ndiff --git a/stdlib/tst-strtod3.c b/stdlib/tst-strtod3.c\nindex 23abec1896..0d662d8be8 100644\n--- a/stdlib/tst-strtod3.c\n+++ b/stdlib/tst-strtod3.c\n@@ -3,19 +3,73 @@\n #include <stdlib.h>\n #include <string.h>\n \n-static const struct\n-{\n-  const char *in;\n-  const char *out;\n-  double expected;\n-} tests[] =\n-  {\n-    { \"000,,,e1\", \",,,e1\", 0.0 },\n-    { \"000e1\", \"\", 0.0 },\n-    { \"000,1e1\", \",1e1\", 0.0 }\n-  };\n-#define NTESTS (sizeof (tests) / sizeof (tests[0]))\n+#include \"tst-strtod.h\"\n+\n+/* This tests internal interfaces, which are only defined for types\n+   with distinct ABIs, so disable testing for types without distinct\n+   ABIs.  */\n+#undef IF_FLOAT32\n+#define IF_FLOAT32(x)\n+#undef IF_FLOAT64\n+#define IF_FLOAT64(x)\n+#undef IF_FLOAT32X\n+#define IF_FLOAT32X(x)\n+#undef IF_FLOAT64X\n+#define IF_FLOAT64X(x)\n+#if !__HAVE_DISTINCT_FLOAT128\n+# undef IF_FLOAT128\n+# define IF_FLOAT128(x)\n+#endif\n \n+#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF)\t\t\t\\\n+static const struct\t\t\t\t\t\t\t\\\n+{\t\t\t\t\t\t\t\t\t\\\n+  const char *in;\t\t\t\t\t\t\t\\\n+  const char *out;\t\t\t\t\t\t\t\\\n+  FTYPE expected;\t\t\t\t\t\t\t\\\n+} tests_strto ## FSUF[] =\t\t\t\t\t\t\\\n+  {\t\t\t\t\t\t\t\t\t\\\n+    { \"000,,,e1\", \",,,e1\", 0.0 ## LSUF },\t\t\t\t\\\n+    { \"000e1\", \"\", 0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"000,1e1\", \",1e1\", 0.0 ## LSUF }\t\t\t\t\t\\\n+  };\t\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+static int\t\t\t\t\t\t\t\t\\\n+test_strto ## FSUF (void)\t\t\t\t\t\t\\\n+{\t\t\t\t\t\t\t\t\t\\\n+  int status = 0;\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+  for (int i = 0;\t\t\t\t\t\t\t\\\n+       i < sizeof (tests_strto ## FSUF) / sizeof (tests_strto ## FSUF[0]); \\\n+       ++i)\t\t\t\t\t\t\t\t\\\n+    {\t\t\t\t\t\t\t\t\t\\\n+      char *ep;\t\t\t\t\t\t\t\t\\\n+      FTYPE r = __strto ## FSUF ## _internal (tests_strto ## FSUF[i].in, \\\n+\t\t\t\t\t      &ep, 1);\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+      if (strcmp (ep, tests_strto ## FSUF[i].out) != 0)\t\t\t\\\n+\t{\t\t\t\t\t\t\t\t\\\n+\t  printf (\"%d: got rest string \\\"%s\\\", expected \\\"%s\\\"\\n\",\t\\\n+\t\t  i, ep, tests_strto ## FSUF[i].out);\t\t\t\\\n+\t  status = 1;\t\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+      if (r != tests_strto ## FSUF[i].expected)\t\t\t\t\\\n+\t{\t\t\t\t\t\t\t\t\\\n+\t  char buf1[FSTRLENMAX], buf2[FSTRLENMAX];\t\t\t\\\n+\t  FTOSTR (buf1, sizeof (buf1), \"%g\", r);\t\t\t\\\n+\t  FTOSTR (buf2, sizeof (buf2), \"%g\",\t\t\t\t\\\n+\t\t  tests_strto ## FSUF[i].expected);\t\t\t\\\n+\t  printf (\"%d: got wrong results %s, expected %s\\n\",\t\t\\\n+\t\t  i, buf1, buf2);\t\t\t\t\t\\\n+\t  status = 1;\t\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\t\\\n+    }\t\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+  return status;\t\t\t\t\t\t\t\\\n+}\n+\n+GEN_TEST_STRTOD_FOREACH (TEST_STRTOD)\n \n static int\n do_test (void)\n@@ -26,29 +80,7 @@ do_test (void)\n       return 1;\n     }\n \n-  int status = 0;\n-\n-  for (int i = 0; i < NTESTS; ++i)\n-    {\n-      char *ep;\n-      double r = __strtod_internal (tests[i].in, &ep, 1);\n-\n-      if (strcmp (ep, tests[i].out) != 0)\n-\t{\n-\t  printf (\"%d: got rest string \\\"%s\\\", expected \\\"%s\\\"\\n\",\n-\t\t  i, ep, tests[i].out);\n-\t  status = 1;\n-\t}\n-\n-      if (r != tests[i].expected)\n-\t{\n-\t  printf (\"%d: got wrong results %g, expected %g\\n\",\n-\t\t  i, r, tests[i].expected);\n-\t  status = 1;\n-\t}\n-    }\n-\n-  return status;\n+  return STRTOD_TEST_FOREACH (test_strto);\n }\n \n #define TEST_FUNCTION do_test ()\ndiff --git a/stdlib/tst-strtod4.c b/stdlib/tst-strtod4.c\nindex 6cc4e843c7..dfd3f05027 100644\n--- a/stdlib/tst-strtod4.c\n+++ b/stdlib/tst-strtod4.c\n@@ -3,22 +3,76 @@\n #include <stdlib.h>\n #include <string.h>\n \n+#include \"tst-strtod.h\"\n+\n+/* This tests internal interfaces, which are only defined for types\n+   with distinct ABIs, so disable testing for types without distinct\n+   ABIs.  */\n+#undef IF_FLOAT32\n+#define IF_FLOAT32(x)\n+#undef IF_FLOAT64\n+#define IF_FLOAT64(x)\n+#undef IF_FLOAT32X\n+#define IF_FLOAT32X(x)\n+#undef IF_FLOAT64X\n+#define IF_FLOAT64X(x)\n+#if !__HAVE_DISTINCT_FLOAT128\n+# undef IF_FLOAT128\n+# define IF_FLOAT128(x)\n+#endif\n+\n #define NNBSP \"\\xe2\\x80\\xaf\"\n \n-static const struct\n-{\n-  const char *in;\n-  const char *out;\n-  double expected;\n-} tests[] =\n-  {\n-    { \"000\"NNBSP\"000\"NNBSP\"000\", \"\", 0.0 },\n-    { \"1\"NNBSP\"000\"NNBSP\"000,5x\", \"x\", 1000000.5 },\n-    /* Bug 30964 */\n-    { \"10\"NNBSP NNBSP\"200\", NNBSP NNBSP\"200\", 10.0 }\n-  };\n-#define NTESTS (sizeof (tests) / sizeof (tests[0]))\n+#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF)\t\t\t\\\n+static const struct\t\t\t\t\t\t\t\\\n+{\t\t\t\t\t\t\t\t\t\\\n+  const char *in;\t\t\t\t\t\t\t\\\n+  const char *out;\t\t\t\t\t\t\t\\\n+  FTYPE expected;\t\t\t\t\t\t\t\\\n+} tests_strto ## FSUF[] =\t\t\t\t\t\t\\\n+  {\t\t\t\t\t\t\t\t\t\\\n+    { \"000\"NNBSP\"000\"NNBSP\"000\", \"\", 0.0 ## LSUF },\t\t\t\\\n+    { \"1\"NNBSP\"000\"NNBSP\"000,5x\", \"x\", 1000000.5 ## LSUF },\t\t\\\n+    /* Bug 30964 */\t\t\t\t\t\t\t\\\n+    { \"10\"NNBSP NNBSP\"200\", NNBSP NNBSP\"200\", 10.0 ## LSUF }\t\t\\\n+  };\t\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+static int\t\t\t\t\t\t\t\t\\\n+test_strto ## FSUF (void)\t\t\t\t\t\t\\\n+{\t\t\t\t\t\t\t\t\t\\\n+  int status = 0;\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+  for (int i = 0;\t\t\t\t\t\t\t\\\n+       i < sizeof (tests_strto ## FSUF) / sizeof (tests_strto ## FSUF[0]); \\\n+       ++i)\t\t\t\t\t\t\t\t\\\n+    {\t\t\t\t\t\t\t\t\t\\\n+      char *ep;\t\t\t\t\t\t\t\t\\\n+      FTYPE r = __strto ## FSUF ## _internal (tests_strto ## FSUF[i].in, \\\n+\t\t\t\t\t      &ep, 1);\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+      if (strcmp (ep, tests_strto ## FSUF[i].out) != 0)\t\t\t\\\n+\t{\t\t\t\t\t\t\t\t\\\n+\t  printf (\"%d: got rest string \\\"%s\\\", expected \\\"%s\\\"\\n\",\t\\\n+\t\t  i, ep, tests_strto ## FSUF[i].out);\t\t\t\\\n+\t  status = 1;\t\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+      if (r != tests_strto ## FSUF[i].expected)\t\t\t\t\\\n+\t{\t\t\t\t\t\t\t\t\\\n+\t  char buf1[FSTRLENMAX], buf2[FSTRLENMAX];\t\t\t\\\n+\t  FTOSTR (buf1, sizeof (buf1), \"%g\", r);\t\t\t\\\n+\t  FTOSTR (buf2, sizeof (buf2), \"%g\",\t\t\t\t\\\n+\t\t  tests_strto ## FSUF[i].expected);\t\t\t\\\n+\t  printf (\"%d: got wrong results %s, expected %s\\n\",\t\t\\\n+\t\t  i, buf1, buf2);\t\t\t\t\t\\\n+\t  status = 1;\t\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\t\\\n+    }\t\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+  return status;\t\t\t\t\t\t\t\\\n+}\n \n+GEN_TEST_STRTOD_FOREACH (TEST_STRTOD)\n \n static int\n do_test (void)\n@@ -29,29 +83,7 @@ do_test (void)\n       return 1;\n     }\n \n-  int status = 0;\n-\n-  for (int i = 0; i < NTESTS; ++i)\n-    {\n-      char *ep;\n-      double r = __strtod_internal (tests[i].in, &ep, 1);\n-\n-      if (strcmp (ep, tests[i].out) != 0)\n-\t{\n-\t  printf (\"%d: got rest string \\\"%s\\\", expected \\\"%s\\\"\\n\",\n-\t\t  i, ep, tests[i].out);\n-\t  status = 1;\n-\t}\n-\n-      if (r != tests[i].expected)\n-\t{\n-\t  printf (\"%d: got wrong results %g, expected %g\\n\",\n-\t\t  i, r, tests[i].expected);\n-\t  status = 1;\n-\t}\n-    }\n-\n-  return status;\n+  return STRTOD_TEST_FOREACH (test_strto);\n }\n \n #define TEST_FUNCTION do_test ()\ndiff --git a/stdlib/tst-strtod5i.c b/stdlib/tst-strtod5i.c\nindex ee54e3404c..136aedea68 100644\n--- a/stdlib/tst-strtod5i.c\n+++ b/stdlib/tst-strtod5i.c\n@@ -16,52 +16,112 @@\n    License along with the GNU C Library; if not, see\n    <https://www.gnu.org/licenses/>.  */\n \n+/* Defining _LIBC_TEST ensures long double math functions are\n+   declared in the headers.  */\n+#define _LIBC_TEST 1\n #include <locale.h>\n #include <stdio.h>\n #include <stdlib.h>\n #include <string.h>\n #include <math.h>\n \n+#include \"tst-strtod.h\"\n+\n+/* This tests internal interfaces, which are only defined for types\n+   with distinct ABIs, so disable testing for types without distinct\n+   ABIs.  */\n+#undef IF_FLOAT32\n+#define IF_FLOAT32(x)\n+#undef IF_FLOAT64\n+#define IF_FLOAT64(x)\n+#undef IF_FLOAT32X\n+#define IF_FLOAT32X(x)\n+#undef IF_FLOAT64X\n+#define IF_FLOAT64X(x)\n+#if !__HAVE_DISTINCT_FLOAT128\n+# undef IF_FLOAT128\n+# define IF_FLOAT128(x)\n+#endif\n+\n #define NNBSP \"\\xe2\\x80\\xaf\"\n \n-static const struct\n-{\n-  const char *in;\n-  int group;\n-  double expected;\n-} tests[] =\n-  {\n-    { \"0\", 0, 0.0 },\n-    { \"000\", 0, 0.0 },\n-    { \"-0\", 0, -0.0 },\n-    { \"-000\", 0, -0.0 },\n-    { \"0,\", 0, 0.0 },\n-    { \"-0,\", 0, -0.0 },\n-    { \"0,0\", 0, 0.0 },\n-    { \"-0,0\", 0, -0.0 },\n-    { \"0e-10\", 0, 0.0 },\n-    { \"-0e-10\", 0, -0.0 },\n-    { \"0,e-10\", 0, 0.0 },\n-    { \"-0,e-10\", 0, -0.0 },\n-    { \"0,0e-10\", 0, 0.0 },\n-    { \"-0,0e-10\", 0, -0.0 },\n-    { \"0e-1000000\", 0, 0.0 },\n-    { \"-0e-1000000\", 0, -0.0 },\n-    { \"0,0e-1000000\", 0, 0.0 },\n-    { \"-0,0e-1000000\", 0, -0.0 },\n-    { \"0\", 1, 0.0 },\n-    { \"000\", 1, 0.0 },\n-    { \"-0\", 1, -0.0 },\n-    { \"-000\", 1, -0.0 },\n-    { \"0e-10\", 1, 0.0 },\n-    { \"-0e-10\", 1, -0.0 },\n-    { \"0e-1000000\", 1, 0.0 },\n-    { \"-0e-1000000\", 1, -0.0 },\n-    { \"000\"NNBSP\"000\"NNBSP\"000\", 1, 0.0 },\n-    { \"-000\"NNBSP\"000\"NNBSP\"000\", 1, -0.0 }\n-  };\n-#define NTESTS (sizeof (tests) / sizeof (tests[0]))\n+#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF)\t\t\t\\\n+static const struct\t\t\t\t\t\t\t\\\n+{\t\t\t\t\t\t\t\t\t\\\n+  const char *in;\t\t\t\t\t\t\t\\\n+  int group;\t\t\t\t\t\t\t\t\\\n+  FTYPE expected;\t\t\t\t\t\t\t\\\n+} tests_strto ## FSUF[] =\t\t\t\t\t\t\\\n+  {\t\t\t\t\t\t\t\t\t\\\n+    { \"0\", 0, 0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"000\", 0, 0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"-0\", 0, -0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"-000\", 0, -0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"0,\", 0, 0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"-0,\", 0, -0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"0,0\", 0, 0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"-0,0\", 0, -0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"0e-10\", 0, 0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"-0e-10\", 0, -0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"0,e-10\", 0, 0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"-0,e-10\", 0, -0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"0,0e-10\", 0, 0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"-0,0e-10\", 0, -0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"0e-1000000\", 0, 0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"-0e-1000000\", 0, -0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"0,0e-1000000\", 0, 0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"-0,0e-1000000\", 0, -0.0 ## LSUF },\t\t\t\t\\\n+    { \"0\", 1, 0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"000\", 1, 0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"-0\", 1, -0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"-000\", 1, -0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"0e-10\", 1, 0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"-0e-10\", 1, -0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"0e-1000000\", 1, 0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"-0e-1000000\", 1, -0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"000\"NNBSP\"000\"NNBSP\"000\", 1, 0.0 ## LSUF },\t\t\t\\\n+    { \"-000\"NNBSP\"000\"NNBSP\"000\", 1, -0.0 ## LSUF }\t\t\t\\\n+  };\t\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+static int\t\t\t\t\t\t\t\t\\\n+test_strto ## FSUF (void)\t\t\t\t\t\t\\\n+{\t\t\t\t\t\t\t\t\t\\\n+  int status = 0;\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+  for (int i = 0;\t\t\t\t\t\t\t\\\n+       i < sizeof (tests_strto ## FSUF) / sizeof (tests_strto ## FSUF[0]); \\\n+       ++i)\t\t\t\t\t\t\t\t\\\n+    {\t\t\t\t\t\t\t\t\t\\\n+      char *ep;\t\t\t\t\t\t\t\t\\\n+      FTYPE r = __strto ## FSUF ## _internal (tests_strto ## FSUF[i].in, \\\n+\t\t\t\t\t      &ep,\t\t\t\\\n+\t\t\t\t\t      tests_strto ## FSUF[i].group); \\\n+\t\t\t\t\t\t\t\t\t\\\n+      if (*ep != '\\0')\t\t\t\t\t\t\t\\\n+\t{\t\t\t\t\t\t\t\t\\\n+\t  printf (\"%d: got rest string \\\"%s\\\", expected \\\"\\\"\\n\", i, ep); \\\n+\t  status = 1;\t\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+      if (r != tests_strto ## FSUF[i].expected\t\t\t\t\\\n+\t  || (copysign ## CSUF (10.0 ## LSUF, r)\t\t\t\\\n+\t      != copysign ## CSUF (10.0 ## LSUF,\t\t\t\\\n+\t\t\t\t   tests_strto ## FSUF[i].expected)))\t\\\n+\t{\t\t\t\t\t\t\t\t\\\n+\t  char buf1[FSTRLENMAX], buf2[FSTRLENMAX];\t\t\t\\\n+\t  FTOSTR (buf1, sizeof (buf1), \"%g\", r);\t\t\t\\\n+\t  FTOSTR (buf2, sizeof (buf2), \"%g\",\t\t\t\t\\\n+\t\t  tests_strto ## FSUF[i].expected);\t\t\t\\\n+\t  printf (\"%d: got wrong results %s, expected %s\\n\",\t\t\\\n+\t\t  i, buf1, buf2);\t\t\t\t\t\\\n+\t  status = 1;\t\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\t\\\n+    }\t\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+  return status;\t\t\t\t\t\t\t\\\n+}\n \n+GEN_TEST_STRTOD_FOREACH (TEST_STRTOD)\n \n static int\n do_test (void)\n@@ -72,29 +132,7 @@ do_test (void)\n       return 1;\n     }\n \n-  int status = 0;\n-\n-  for (int i = 0; i < NTESTS; ++i)\n-    {\n-      char *ep;\n-      double r = __strtod_internal (tests[i].in, &ep, tests[i].group);\n-\n-      if (*ep != '\\0')\n-\t{\n-\t  printf (\"%d: got rest string \\\"%s\\\", expected \\\"\\\"\\n\", i, ep);\n-\t  status = 1;\n-\t}\n-\n-      if (r != tests[i].expected\n-\t  || copysign (10.0, r) != copysign (10.0, tests[i].expected))\n-\t{\n-\t  printf (\"%d: got wrong results %g, expected %g\\n\",\n-\t\t  i, r, tests[i].expected);\n-\t  status = 1;\n-\t}\n-    }\n-\n-  return status;\n+  return STRTOD_TEST_FOREACH (test_strto);\n }\n \n #include <support/test-driver.c>\n\ncommit ad93c2047d791044d45e8f65070d821b0b918993\nAuthor: Joseph Myers <josmyers@redhat.com>\nDate:   Wed Sep 4 13:20:18 2024 +0000\n\n    Improve NaN payload testing\n    \n    There are two separate sets of tests of NaN payloads in glibc:\n    \n    * libm-test-{get,set}payload* verify that getpayload, setpayload,\n      setpayloadsig and __builtin_nan functions are consistent in their\n      payload handling.\n    \n    * test-nan-payload verifies that strtod-family functions and the\n      not-built-in nan functions are consistent in their payload handling.\n    \n    Nothing, however, connects the two sets of functions (i.e., verifies\n    that strtod / nan are consistent with getpayload / setpayload /\n    __builtin_nan).\n    \n    Improve test-nan-payload to check actual payload value with getpayload\n    rather than just verifying that the strtod and nan functions produce\n    the same NaN.  Also check that the NaNs produced aren't signaling and\n    extend the tests to cover _FloatN / _FloatNx.\n    \n    Tested for x86_64.\n    \n    (cherry picked from commit be77d5ae417236883c02d3d67c0716e3f669fa41)\n\ndiff --git a/math/test-nan-payload.c b/math/test-nan-payload.c\nindex 4a81dc348b..55c13de14e 100644\n--- a/math/test-nan-payload.c\n+++ b/math/test-nan-payload.c\n@@ -16,6 +16,8 @@\n    License along with the GNU C Library; if not, see\n    <https://www.gnu.org/licenses/>.  */\n \n+#define _LIBC_TEST 1\n+#define __STDC_WANT_IEC_60559_TYPES_EXT__\n #include <float.h>\n #include <math.h>\n #include <stdio.h>\n@@ -31,7 +33,7 @@\n #define CHECK_IS_NAN(TYPE, A)\t\t\t\\\n   do\t\t\t\t\t\t\\\n     {\t\t\t\t\t\t\\\n-      if (isnan (A))\t\t\t\t\\\n+      if (isnan (A) && !issignaling (A))\t\\\n \tputs (\"PASS: \" #TYPE \" \" #A);\t\t\\\n       else\t\t\t\t\t\\\n \t{\t\t\t\t\t\\\n@@ -41,6 +43,19 @@\n     }\t\t\t\t\t\t\\\n   while (0)\n \n+#define CHECK_PAYLOAD(TYPE, FUNC, A, P)\t\t\\\n+  do\t\t\t\t\t\t\\\n+    {\t\t\t\t\t\t\\\n+      if (FUNC (&(A)) == (P))\t\t\t\\\n+\tputs (\"PASS: \" #TYPE \" payload \" #A);\t\\\n+      else\t\t\t\t\t\\\n+\t{\t\t\t\t\t\\\n+\t  puts (\"FAIL: \" #TYPE \" payload \" #A);\t\\\n+\t  result = 1;\t\t\t\t\\\n+\t}\t\t\t\t\t\\\n+    }\t\t\t\t\t\t\\\n+  while (0)\n+\n #define CHECK_SAME_NAN(TYPE, A, B)\t\t\t\\\n   do\t\t\t\t\t\t\t\\\n     {\t\t\t\t\t\t\t\\\n@@ -71,7 +86,7 @@\n    bits.  */\n #define CAN_TEST_EQ(MANT_DIG) ((MANT_DIG) != 64 && (MANT_DIG) != 106)\n \n-#define RUN_TESTS(TYPE, SFUNC, FUNC, MANT_DIG)\t\t\\\n+#define RUN_TESTS(TYPE, SFUNC, FUNC, PLFUNC, MANT_DIG)\t\\\n   do\t\t\t\t\t\t\t\\\n     {\t\t\t\t\t\t\t\\\n      TYPE n123 = WRAP_NAN (FUNC, \"123\");\t\t\\\n@@ -82,6 +97,10 @@\n      CHECK_IS_NAN (TYPE, n456);\t\t\t\t\\\n      TYPE s456 = WRAP_STRTO (SFUNC, \"NAN(456)\");\t\\\n      CHECK_IS_NAN (TYPE, s456);\t\t\t\t\\\n+     TYPE nh123 = WRAP_NAN (FUNC, \"0x123\");\t\t\\\n+     CHECK_IS_NAN (TYPE, nh123);\t\t\t\\\n+     TYPE sh123 = WRAP_STRTO (SFUNC, \"NAN(0x123)\");\t\\\n+     CHECK_IS_NAN (TYPE, sh123);\t\t\t\\\n      TYPE n123x = WRAP_NAN (FUNC, \"123)\");\t\t\\\n      CHECK_IS_NAN (TYPE, n123x);\t\t\t\\\n      TYPE nemp = WRAP_NAN (FUNC, \"\");\t\t\t\\\n@@ -92,8 +111,16 @@\n      CHECK_IS_NAN (TYPE, sx);\t\t\t\t\\\n      if (CAN_TEST_EQ (MANT_DIG))\t\t\t\\\n        CHECK_SAME_NAN (TYPE, n123, s123);\t\t\\\n+     CHECK_PAYLOAD (TYPE, PLFUNC, n123, 123);\t\t\\\n+     CHECK_PAYLOAD (TYPE, PLFUNC, s123, 123);\t\t\\\n      if (CAN_TEST_EQ (MANT_DIG))\t\t\t\\\n        CHECK_SAME_NAN (TYPE, n456, s456);\t\t\\\n+     CHECK_PAYLOAD (TYPE, PLFUNC, n456, 456);\t\t\\\n+     CHECK_PAYLOAD (TYPE, PLFUNC, s456, 456);\t\t\\\n+     if (CAN_TEST_EQ (MANT_DIG))\t\t\t\\\n+       CHECK_SAME_NAN (TYPE, nh123, sh123);\t\t\\\n+     CHECK_PAYLOAD (TYPE, PLFUNC, nh123, 0x123);\t\\\n+     CHECK_PAYLOAD (TYPE, PLFUNC, sh123, 0x123);\t\\\n      if (CAN_TEST_EQ (MANT_DIG))\t\t\t\\\n        CHECK_SAME_NAN (TYPE, nemp, semp);\t\t\\\n      if (CAN_TEST_EQ (MANT_DIG))\t\t\t\\\n@@ -110,9 +137,31 @@ static int\n do_test (void)\n {\n   int result = 0;\n-  RUN_TESTS (float, strtof, nanf, FLT_MANT_DIG);\n-  RUN_TESTS (double, strtod, nan, DBL_MANT_DIG);\n-  RUN_TESTS (long double, strtold, nanl, LDBL_MANT_DIG);\n+  RUN_TESTS (float, strtof, nanf, getpayloadf, FLT_MANT_DIG);\n+  RUN_TESTS (double, strtod, nan, getpayload, DBL_MANT_DIG);\n+  RUN_TESTS (long double, strtold, nanl, getpayloadl, LDBL_MANT_DIG);\n+#if __HAVE_FLOAT16\n+  RUN_TESTS (_Float16, strtof16, nanf16, getpayloadf16, FLT16_MANT_DIG);\n+#endif\n+#if __HAVE_FLOAT32\n+  RUN_TESTS (_Float32, strtof32, nanf32, getpayloadf32, FLT32_MANT_DIG);\n+#endif\n+#if __HAVE_FLOAT64\n+  RUN_TESTS (_Float64, strtof64, nanf64, getpayloadf64, FLT64_MANT_DIG);\n+#endif\n+#if __HAVE_FLOAT128\n+  RUN_TESTS (_Float128, strtof128, nanf128, getpayloadf128, FLT128_MANT_DIG);\n+#endif\n+#if __HAVE_FLOAT32X\n+  RUN_TESTS (_Float32x, strtof32x, nanf32x, getpayloadf32x, FLT32X_MANT_DIG);\n+#endif\n+#if __HAVE_FLOAT64X\n+  RUN_TESTS (_Float64x, strtof64x, nanf64x, getpayloadf64x, FLT64X_MANT_DIG);\n+#endif\n+#if __HAVE_FLOAT128X\n+  RUN_TESTS (_Float128x, strtof128x, nanf128x, getpayloadf128x,\n+\t     FLT128X_MANT_DIG);\n+#endif\n   return result;\n }\n \n\ncommit c4cc72d2efc741872d65ae1fd77572e47042d179\nAuthor: Joseph Myers <josmyers@redhat.com>\nDate:   Wed Sep 4 13:21:23 2024 +0000\n\n    Do not set errno for overflowing NaN payload in strtod/nan (bug 32045)\n    \n    As reported in bug 32045, it's incorrect for strtod/nan functions to\n    set errno based on overflowing payload (strtod should only set errno\n    for overflow / underflow of its actual result, and potentially if\n    nothing in the string can be parsed as a number at all; nan should be\n    a pure function that never sets it).  Save and restore errno around\n    the internal strtoull call and add associated test coverage.\n    \n    Tested for x86_64.\n    \n    (cherry picked from commit 64f62c47e9c350f353336f2df6714e1d48ec50d8)\n\ndiff --git a/math/Makefile b/math/Makefile\nindex f06d370383..b64c3eedd5 100644\n--- a/math/Makefile\n+++ b/math/Makefile\n@@ -1077,6 +1077,7 @@ CFLAGS-test-flt-eval-method.c += -fexcess-precision=standard\n CFLAGS-test-fe-snans-always-signal.c += $(config-cflags-signaling-nans)\n \n CFLAGS-test-nan-const.c += -fno-builtin\n+CFLAGS-test-nan-payload.c += -fno-builtin\n \n CFLAGS-test-ceil-except-2.c += -fno-builtin\n CFLAGS-test-floor-except-2.c += -fno-builtin\ndiff --git a/math/test-nan-payload.c b/math/test-nan-payload.c\nindex 55c13de14e..413791e09f 100644\n--- a/math/test-nan-payload.c\n+++ b/math/test-nan-payload.c\n@@ -18,6 +18,7 @@\n \n #define _LIBC_TEST 1\n #define __STDC_WANT_IEC_60559_TYPES_EXT__\n+#include <errno.h>\n #include <float.h>\n #include <math.h>\n #include <stdio.h>\n@@ -82,6 +83,26 @@\n     }\t\t\t\t\t\t\t\\\n   while (0)\n \n+#define CLEAR_ERRNO\t\t\t\t\\\n+  do\t\t\t\t\t\t\\\n+    {\t\t\t\t\t\t\\\n+      errno = 12345;\t\t\t\t\\\n+    }\t\t\t\t\t\t\\\n+  while (0)\n+\n+#define CHECK_ERRNO(TYPE, A)\t\t\t\t\\\n+  do\t\t\t\t\t\t\t\\\n+    {\t\t\t\t\t\t\t\\\n+      if (errno == 12345)\t\t\t\t\\\n+\tputs (\"PASS: \" #TYPE \" \" #A \" errno\");\t\t\\\n+      else\t\t\t\t\t\t\\\n+\t{\t\t\t\t\t\t\\\n+\t  puts (\"FAIL: \" #TYPE \" \" #A \" errno\");\t\\\n+\t  result = 1;\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\\\n+    }\t\t\t\t\t\t\t\\\n+  while (0)\n+\n /* Cannot test payloads by memcmp for formats where NaNs have padding\n    bits.  */\n #define CAN_TEST_EQ(MANT_DIG) ((MANT_DIG) != 64 && (MANT_DIG) != 106)\n@@ -89,26 +110,58 @@\n #define RUN_TESTS(TYPE, SFUNC, FUNC, PLFUNC, MANT_DIG)\t\\\n   do\t\t\t\t\t\t\t\\\n     {\t\t\t\t\t\t\t\\\n+     CLEAR_ERRNO;\t\t\t\t\t\\\n      TYPE n123 = WRAP_NAN (FUNC, \"123\");\t\t\\\n+     CHECK_ERRNO (TYPE, n123);\t\t\t\t\\\n      CHECK_IS_NAN (TYPE, n123);\t\t\t\t\\\n+     CLEAR_ERRNO;\t\t\t\t\t\\\n      TYPE s123 = WRAP_STRTO (SFUNC, \"NAN(123)\");\t\\\n+     CHECK_ERRNO (TYPE, s123);\t\t\t\t\\\n      CHECK_IS_NAN (TYPE, s123);\t\t\t\t\\\n+     CLEAR_ERRNO;\t\t\t\t\t\\\n      TYPE n456 = WRAP_NAN (FUNC, \"456\");\t\t\\\n+     CHECK_ERRNO (TYPE, n456);\t\t\t\t\\\n      CHECK_IS_NAN (TYPE, n456);\t\t\t\t\\\n+     CLEAR_ERRNO;\t\t\t\t\t\\\n      TYPE s456 = WRAP_STRTO (SFUNC, \"NAN(456)\");\t\\\n+     CHECK_ERRNO (TYPE, s456);\t\t\t\t\\\n      CHECK_IS_NAN (TYPE, s456);\t\t\t\t\\\n+     CLEAR_ERRNO;\t\t\t\t\t\\\n      TYPE nh123 = WRAP_NAN (FUNC, \"0x123\");\t\t\\\n+     CHECK_ERRNO (TYPE, nh123);\t\t\t\t\\\n      CHECK_IS_NAN (TYPE, nh123);\t\t\t\\\n+     CLEAR_ERRNO;\t\t\t\t\t\\\n      TYPE sh123 = WRAP_STRTO (SFUNC, \"NAN(0x123)\");\t\\\n+     CHECK_ERRNO (TYPE, sh123);\t\t\t\t\\\n      CHECK_IS_NAN (TYPE, sh123);\t\t\t\\\n+     CLEAR_ERRNO;\t\t\t\t\t\\\n      TYPE n123x = WRAP_NAN (FUNC, \"123)\");\t\t\\\n+     CHECK_ERRNO (TYPE, n123x);\t\t\t\t\\\n      CHECK_IS_NAN (TYPE, n123x);\t\t\t\\\n+     CLEAR_ERRNO;\t\t\t\t\t\\\n      TYPE nemp = WRAP_NAN (FUNC, \"\");\t\t\t\\\n+     CHECK_ERRNO (TYPE, nemp);\t\t\t\t\\\n      CHECK_IS_NAN (TYPE, nemp);\t\t\t\t\\\n+     CLEAR_ERRNO;\t\t\t\t\t\\\n      TYPE semp = WRAP_STRTO (SFUNC, \"NAN()\");\t\t\\\n+     CHECK_ERRNO (TYPE, semp);\t\t\t\t\\\n      CHECK_IS_NAN (TYPE, semp);\t\t\t\t\\\n+     CLEAR_ERRNO;\t\t\t\t\t\\\n      TYPE sx = WRAP_STRTO (SFUNC, \"NAN\");\t\t\\\n+     CHECK_ERRNO (TYPE, sx);\t\t\t\t\\\n      CHECK_IS_NAN (TYPE, sx);\t\t\t\t\\\n+     CLEAR_ERRNO;\t\t\t\t\t\\\n+     TYPE novf = WRAP_NAN (FUNC, \"9999999999\"\t\t\\\n+\t\t\t   \"99999999999999999999\"\t\\\n+\t\t\t   \"9999999999\");\t\t\\\n+     CHECK_ERRNO (TYPE, novf);\t\t\t\t\\\n+     CHECK_IS_NAN (TYPE, novf);\t\t\t\t\\\n+     CLEAR_ERRNO;\t\t\t\t\t\\\n+     TYPE sovf = WRAP_STRTO (SFUNC, \"NAN(9999999999\"\t\\\n+\t\t\t     \"99999999999999999999\"\t\\\n+\t\t\t     \"9999999999)\");\t\t\\\n+     CHECK_ERRNO (TYPE, sovf);\t\t\t\t\\\n+     CHECK_IS_NAN (TYPE, sovf);\t\t\t\t\\\n      if (CAN_TEST_EQ (MANT_DIG))\t\t\t\\\n        CHECK_SAME_NAN (TYPE, n123, s123);\t\t\\\n      CHECK_PAYLOAD (TYPE, PLFUNC, n123, 123);\t\t\\\ndiff --git a/stdlib/strtod_nan_main.c b/stdlib/strtod_nan_main.c\nindex 4cb286d2b3..39fb7e9f75 100644\n--- a/stdlib/strtod_nan_main.c\n+++ b/stdlib/strtod_nan_main.c\n@@ -16,6 +16,7 @@\n    License along with the GNU C Library; if not, see\n    <https://www.gnu.org/licenses/>.  */\n \n+#include <errno.h>\n #include <ieee754.h>\n #include <locale.h>\n #include <math.h>\n@@ -50,7 +51,9 @@ STRTOD_NAN (const STRING_TYPE *str, STRING_TYPE **endptr, STRING_TYPE endc)\n   STRING_TYPE *endp;\n   unsigned long long int mant;\n \n+  int save_errno = errno;\n   mant = STRTOULL (str, &endp, 0);\n+  __set_errno (save_errno);\n   if (endp == cp)\n     SET_NAN_PAYLOAD (retval, mant);\n \n\ncommit 5a10d05c39689dcf7ee694ec94cd2fd069c747ee\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Thu Sep 5 21:18:23 2024 +0200\n\n    powerpc64le: Build new strtod tests with long double ABI flags (bug 32145)\n    \n    This fixes several test failures:\n    \n    =====FAIL: stdlib/tst-strtod1i.out=====\n    Locale tests\n    all OK\n    Locale tests\n    all OK\n    Locale tests\n    strtold(\"1,5\") returns -6,38643e+367 and not 1,5\n    strtold(\"1.5\") returns 1,5 and not 1\n    strtold(\"1.500\") returns 1 and not 1500\n    strtold(\"36.893.488.147.419.103.232\") returns 1500 and not 3,68935e+19\n    Locale tests\n    all OK\n    \n    =====FAIL: stdlib/tst-strtod3.out=====\n    0: got wrong results -2.5937e+4826, expected 0\n    \n    =====FAIL: stdlib/tst-strtod4.out=====\n    0: got wrong results -6,38643e+367, expected 0\n    1: got wrong results 0, expected 1e+06\n    2: got wrong results 1e+06, expected 10\n    \n    =====FAIL: stdlib/tst-strtod5i.out=====\n    0: got wrong results -6,38643e+367, expected 0\n    2: got wrong results 0, expected -0\n    4: got wrong results -0, expected 0\n    5: got wrong results 0, expected -0\n    6: got wrong results -0, expected 0\n    7: got wrong results 0, expected -0\n    8: got wrong results -0, expected 0\n    9: got wrong results 0, expected -0\n    10: got wrong results -0, expected 0\n    11: got wrong results 0, expected -0\n    12: got wrong results -0, expected 0\n    13: got wrong results 0, expected -0\n    14: got wrong results -0, expected 0\n    15: got wrong results 0, expected -0\n    16: got wrong results -0, expected 0\n    17: got wrong results 0, expected -0\n    18: got wrong results -0, expected 0\n    20: got wrong results 0, expected -0\n    22: got wrong results -0, expected 0\n    23: got wrong results 0, expected -0\n    24: got wrong results -0, expected 0\n    25: got wrong results 0, expected -0\n    26: got wrong results -0, expected 0\n    27: got wrong results 0, expected -0\n    \n    Fixes commit 3fc063dee01da4f80920a14b7db637c8501d6fd4\n    (\"Make __strtod_internal tests type-generic\").\n    \n    Suggested-by: Joseph Myers <josmyers@redhat.com>\n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit cc3e743fc09ee6fca45767629df9cbcbe1feba82)\n\ndiff --git a/sysdeps/powerpc/powerpc64/le/Makefile b/sysdeps/powerpc/powerpc64/le/Makefile\nindex 9d568d4f44..b77775cf95 100644\n--- a/sysdeps/powerpc/powerpc64/le/Makefile\n+++ b/sysdeps/powerpc/powerpc64/le/Makefile\n@@ -129,6 +129,10 @@ CFLAGS-tst-strtod-round.c += $(type-float128-CFLAGS)\n CFLAGS-tst-wcstod-round.c += $(type-float128-CFLAGS)\n CFLAGS-tst-strtod-nan-locale.c += $(type-float128-CFLAGS)\n CFLAGS-tst-wcstod-nan-locale.c += $(type-float128-CFLAGS)\n+CFLAGS-tst-strtod1i.c += $(type-float128-CFLAGS)\n+CFLAGS-tst-strtod3.c += $(type-float128-CFLAGS)\n+CFLAGS-tst-strtod4.c += $(type-float128-CFLAGS)\n+CFLAGS-tst-strtod5i.c += $(type-float128-CFLAGS)\n CFLAGS-tst-strtod6.c += $(type-float128-CFLAGS)\n CFLAGS-tst-strfrom.c += $(type-float128-CFLAGS)\n CFLAGS-tst-strfrom-locale.c += $(type-float128-CFLAGS)\n\ncommit 4a9b6cdc88335e2a7291418563073a58fe97346e\nAuthor: Joseph Myers <josmyers@redhat.com>\nDate:   Fri Sep 20 23:23:13 2024 +0000\n\n    Make tst-strtod2 and tst-strtod5 type-generic\n    \n    Some of the strtod tests use type-generic machinery in tst-strtod.h to\n    test the strto* functions for all floating types, while others only\n    test double even when the tests are in fact meaningful for all\n    floating types.\n    \n    Convert tst-strtod2 and tst-strtod5 to use the type-generic machinery\n    so they test all floating types.  I haven't tried to convert them to\n    use newer test interfaces in other ways, just made the changes\n    necessary to use the type-generic machinery.\n    \n    Tested for x86_64.\n    \n    (cherry picked from commit 8de031bcb9adfa736c0caed2c79d10947b8d8f48)\n\ndiff --git a/stdlib/tst-strtod2.c b/stdlib/tst-strtod2.c\nindex a7df82ebbd..2cb0953fa9 100644\n--- a/stdlib/tst-strtod2.c\n+++ b/stdlib/tst-strtod2.c\n@@ -1,43 +1,61 @@\n #include <stdio.h>\n #include <stdlib.h>\n \n-struct test\n-{\n-  const char *str;\n-  double result;\n-  size_t offset;\n-} tests[] =\n-{\n-  { \"0xy\", 0.0, 1 },\n-  { \"0x.y\", 0.0, 1 },\n-  { \"0x0.y\", 0.0, 4 },\n-  { \"0x.0y\", 0.0, 4 },\n-  { \".y\", 0.0, 0 },\n-  { \"0.y\", 0.0, 2 },\n-  { \".0y\", 0.0, 2 }\n-};\n+#include \"tst-strtod.h\"\n+\n+#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF)\t\t\t\\\n+struct test_strto ## FSUF\t\t\t\t\t\t\\\n+{\t\t\t\t\t\t\t\t\t\\\n+  const char *str;\t\t\t\t\t\t\t\\\n+  FTYPE result;\t\t\t\t\t\t\t\t\\\n+  size_t offset;\t\t\t\t\t\t\t\\\n+} tests_strto ## FSUF[] =\t\t\t\t\t\t\\\n+{\t\t\t\t\t\t\t\t\t\\\n+  { \"0xy\", 0.0 ## LSUF, 1 },\t\t\t\t\t\t\\\n+  { \"0x.y\", 0.0 ## LSUF, 1 },\t\t\t\t\t\t\\\n+  { \"0x0.y\", 0.0 ## LSUF, 4 },\t\t\t\t\t\t\\\n+  { \"0x.0y\", 0.0 ## LSUF, 4 },\t\t\t\t\t\t\\\n+  { \".y\", 0.0 ## LSUF, 0 },\t\t\t\t\t\t\\\n+  { \"0.y\", 0.0 ## LSUF, 2 },\t\t\t\t\t\t\\\n+  { \".0y\", 0.0 ## LSUF, 2 }\t\t\t\t\t\t\\\n+};\t\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+static int\t\t\t\t\t\t\t\t\\\n+test_strto ## FSUF (void)\t\t\t\t\t\t\\\n+{\t\t\t\t\t\t\t\t\t\\\n+  int status = 0;\t\t\t\t\t\t\t\\\n+  for (size_t i = 0;\t\t\t\t\t\t\t\\\n+       i < sizeof (tests_strto ## FSUF) / sizeof (tests_strto ## FSUF[0]); \\\n+       ++i)\t\t\t\t\t\t\t\t\\\n+    {\t\t\t\t\t\t\t\t\t\\\n+      char *ep;\t\t\t\t\t\t\t\t\\\n+      FTYPE r = strto ## FSUF (tests_strto ## FSUF[i].str, &ep);\t\\\n+      if (r != tests_strto ## FSUF[i].result)\t\t\t\t\\\n+\t{\t\t\t\t\t\t\t\t\\\n+\t  char buf1[FSTRLENMAX], buf2[FSTRLENMAX];\t\t\t\\\n+\t  FTOSTR (buf1, sizeof (buf1), \"%g\", r);\t\t\t\\\n+\t  FTOSTR (buf2, sizeof (buf2), \"%g\", tests_strto ## FSUF[i].result); \\\n+\t  printf (\"test %zu r = %s, expect %s\\n\", i, buf1, buf2);\t\\\n+\t  status = 1;\t\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\t\\\n+      if (ep != tests_strto ## FSUF[i].str + tests_strto ## FSUF[i].offset) \\\n+\t{\t\t\t\t\t\t\t\t\\\n+\t  printf (\"test %zu strto\" #FSUF\t\t\t\t\\\n+\t\t  \" parsed %tu characters, expected %zu\\n\",\t\t\\\n+\t\t  i, ep - tests_strto ## FSUF[i].str,\t\t\t\\\n+\t\t  tests_strto ## FSUF[i].offset);\t\t\t\\\n+\t  status = 1;\t\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\t\\\n+    }\t\t\t\t\t\t\t\t\t\\\n+  return status;\t\t\t\t\t\t\t\\\n+}\n+\n+GEN_TEST_STRTOD_FOREACH (TEST_STRTOD)\n \n static int\n do_test (void)\n {\n-  int status = 0;\n-  for (size_t i = 0; i < sizeof (tests) / sizeof (tests[0]); ++i)\n-    {\n-      char *ep;\n-      double r = strtod (tests[i].str, &ep);\n-      if (r != tests[i].result)\n-\t{\n-\t  printf (\"test %zu r = %g, expect %g\\n\", i, r, tests[i].result);\n-\t  status = 1;\n-\t}\n-      if (ep != tests[i].str + tests[i].offset)\n-\t{\n-\t  printf (\"test %zu strtod parsed %tu characters, expected %zu\\n\",\n-\t\t  i, ep - tests[i].str, tests[i].offset);\n-\t  status = 1;\n-\t}\n-    }\n-  return status;\n+  return STRTOD_TEST_FOREACH (test_strto);\n }\n \n #define TEST_FUNCTION do_test ()\ndiff --git a/stdlib/tst-strtod5.c b/stdlib/tst-strtod5.c\nindex 29153ec005..7eb9b3a2d7 100644\n--- a/stdlib/tst-strtod5.c\n+++ b/stdlib/tst-strtod5.c\n@@ -22,35 +22,75 @@\n #include <string.h>\n #include <math.h>\n \n+#include \"tst-strtod.h\"\n+\n #define NBSP \"\\xc2\\xa0\"\n \n-static const struct\n-{\n-  const char *in;\n-  double expected;\n-} tests[] =\n-  {\n-    { \"0\", 0.0 },\n-    { \"000\", 0.0 },\n-    { \"-0\", -0.0 },\n-    { \"-000\", -0.0 },\n-    { \"0,\", 0.0 },\n-    { \"-0,\", -0.0 },\n-    { \"0,0\", 0.0 },\n-    { \"-0,0\", -0.0 },\n-    { \"0e-10\", 0.0 },\n-    { \"-0e-10\", -0.0 },\n-    { \"0,e-10\", 0.0 },\n-    { \"-0,e-10\", -0.0 },\n-    { \"0,0e-10\", 0.0 },\n-    { \"-0,0e-10\", -0.0 },\n-    { \"0e-1000000\", 0.0 },\n-    { \"-0e-1000000\", -0.0 },\n-    { \"0,0e-1000000\", 0.0 },\n-    { \"-0,0e-1000000\", -0.0 },\n-  };\n-#define NTESTS (sizeof (tests) / sizeof (tests[0]))\n+#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF)\t\t\t\\\n+static const struct\t\t\t\t\t\t\t\\\n+{\t\t\t\t\t\t\t\t\t\\\n+  const char *in;\t\t\t\t\t\t\t\\\n+  FTYPE expected;\t\t\t\t\t\t\t\\\n+} tests_strto ## FSUF[] =\t\t\t\t\t\t\\\n+  {\t\t\t\t\t\t\t\t\t\\\n+    { \"0\", 0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"000\", 0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"-0\", -0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"-000\", -0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"0,\", 0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"-0,\", -0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"0,0\", 0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"-0,0\", -0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"0e-10\", 0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"-0e-10\", -0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"0,e-10\", 0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"-0,e-10\", -0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"0,0e-10\", 0.0 ## LSUF },\t\t\t\t\t\t\\\n+    { \"-0,0e-10\", -0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"0e-1000000\", 0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"-0e-1000000\", -0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"0,0e-1000000\", 0.0 ## LSUF },\t\t\t\t\t\\\n+    { \"-0,0e-1000000\", -0.0 ## LSUF },\t\t\t\t\t\\\n+  };\t\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+static int\t\t\t\t\t\t\t\t\\\n+test_strto ## FSUF (void)\t\t\t\t\t\t\\\n+{\t\t\t\t\t\t\t\t\t\\\n+  int status = 0;\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+  for (int i = 0;\t\t\t\t\t\t\t\\\n+       i < sizeof (tests_strto ## FSUF) / sizeof (tests_strto ## FSUF[0]); \\\n+       ++i)\t\t\t\t\t\t\t\t\\\n+    {\t\t\t\t\t\t\t\t\t\\\n+      char *ep;\t\t\t\t\t\t\t\t\\\n+      FTYPE r = strto ## FSUF (tests_strto ## FSUF[i].in, &ep);\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+      if (*ep != '\\0')\t\t\t\t\t\t\t\\\n+\t{\t\t\t\t\t\t\t\t\\\n+\t  printf (\"%d: got rest string \\\"%s\\\", expected \\\"\\\"\\n\", i, ep); \\\n+\t  status = 1;\t\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+      if (r != tests_strto ## FSUF[i].expected\t\t\t\t\\\n+\t  || (copysign ## CSUF (10.0 ## LSUF, r)\t\t\t\\\n+\t      != copysign ## CSUF (10.0 ## LSUF,\t\t\t\\\n+\t\t\t\t   tests_strto ## FSUF[i].expected)))\t\\\n+\t{\t\t\t\t\t\t\t\t\\\n+\t  char buf1[FSTRLENMAX], buf2[FSTRLENMAX];\t\t\t\\\n+\t  FTOSTR (buf1, sizeof (buf1), \"%g\", r);\t\t\t\\\n+\t  FTOSTR (buf2, sizeof (buf2), \"%g\",\t\t\t\t\\\n+\t\t  tests_strto ## FSUF[i].expected);\t\t\t\\\n+\t  printf (\"%d: got wrong results %s, expected %s\\n\",\t\t\\\n+\t\t  i, buf1, buf2);\t\t\t\t\t\\\n+\t  status = 1;\t\t\t\t\t\t\t\\\n+\t}\t\t\t\t\t\t\t\t\\\n+    }\t\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+  return status;\t\t\t\t\t\t\t\\\n+}\n \n+GEN_TEST_STRTOD_FOREACH (TEST_STRTOD)\n \n static int\n do_test (void)\n@@ -61,29 +101,7 @@ do_test (void)\n       return 1;\n     }\n \n-  int status = 0;\n-\n-  for (int i = 0; i < NTESTS; ++i)\n-    {\n-      char *ep;\n-      double r = strtod (tests[i].in, &ep);\n-\n-      if (*ep != '\\0')\n-\t{\n-\t  printf (\"%d: got rest string \\\"%s\\\", expected \\\"\\\"\\n\", i, ep);\n-\t  status = 1;\n-\t}\n-\n-      if (r != tests[i].expected\n-\t  || copysign (10.0, r) != copysign (10.0, tests[i].expected))\n-\t{\n-\t  printf (\"%d: got wrong results %g, expected %g\\n\",\n-\t\t  i, r, tests[i].expected);\n-\t  status = 1;\n-\t}\n-    }\n-\n-  return status;\n+  return STRTOD_TEST_FOREACH (test_strto);\n }\n \n #include <support/test-driver.c>\n\ncommit 8f40dfbe2ad8a4a2d2fc3bbe01d289037d113ced\nAuthor: Joseph Myers <josmyers@redhat.com>\nDate:   Fri Sep 20 23:24:02 2024 +0000\n\n    Add more tests of strtod end pointer\n    \n    Although there are some tests in tst-strtod2 and tst-strtod3 for the\n    end pointer provided by strtod when it doesn't parse the whole string,\n    they aren't very thorough.  Add tests of more such cases to\n    tst-strtod2.\n    \n    Tested for x86_64.\n    \n    (cherry picked from commit b5d3737b305525315e0c7c93ca49eadc868eabd5)\n\ndiff --git a/stdlib/tst-strtod2.c b/stdlib/tst-strtod2.c\nindex 2cb0953fa9..c84bd792c1 100644\n--- a/stdlib/tst-strtod2.c\n+++ b/stdlib/tst-strtod2.c\n@@ -1,3 +1,4 @@\n+#include <math.h>\n #include <stdio.h>\n #include <stdlib.h>\n \n@@ -17,10 +18,46 @@ struct test_strto ## FSUF\t\t\t\t\t\t\\\n   { \"0x.0y\", 0.0 ## LSUF, 4 },\t\t\t\t\t\t\\\n   { \".y\", 0.0 ## LSUF, 0 },\t\t\t\t\t\t\\\n   { \"0.y\", 0.0 ## LSUF, 2 },\t\t\t\t\t\t\\\n-  { \".0y\", 0.0 ## LSUF, 2 }\t\t\t\t\t\t\\\n+  { \".0y\", 0.0 ## LSUF, 2 },\t\t\t\t\t\t\\\n+  { \"1.0e\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n+  { \"1.0e+\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n+  { \"1.0e-\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n+  { \"1.0ex\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n+  { \"1.0e+x\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n+  { \"1.0e-x\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n+  { \"0x1p\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n+  { \"0x1p+\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n+  { \"0x1p-\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n+  { \"0x1px\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n+  { \"0x1p+x\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n+  { \"0x1p-x\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n+  { \"INFx\", INFINITY, 3 },\t\t\t\t\t\t\\\n+  { \"infx\", INFINITY, 3 },\t\t\t\t\t\t\\\n+  { \"INFINITx\", INFINITY, 3 },\t\t\t\t\t\t\\\n+  { \"infinitx\", INFINITY, 3 },\t\t\t\t\t\t\\\n+  { \"INFINITYY\", INFINITY, 8 },\t\t\t\t\t\t\\\n+  { \"infinityy\", INFINITY, 8 },\t\t\t\t\t\t\\\n+  { \"NANx\", NAN, 3 },\t\t\t\t\t\t\t\\\n+  { \"nanx\", NAN, 3 },\t\t\t\t\t\t\t\\\n+  { \"NAN(\", NAN, 3 },\t\t\t\t\t\t\t\\\n+  { \"nan(\", NAN, 3 },\t\t\t\t\t\t\t\\\n+  { \"NAN(x\", NAN, 3 },\t\t\t\t\t\t\t\\\n+  { \"nan(x\", NAN, 3 },\t\t\t\t\t\t\t\\\n+  { \"NAN(x)y\", NAN, 6 },\t\t\t\t\t\t\\\n+  { \"nan(x)y\", NAN, 6 },\t\t\t\t\t\t\\\n+  { \"NAN(*)y\", NAN, 3 },\t\t\t\t\t\t\\\n+  { \"nan(*)y\", NAN, 3 }\t\t\t\t\t\t\t\\\n };\t\t\t\t\t\t\t\t\t\\\n \t\t\t\t\t\t\t\t\t\\\n static int\t\t\t\t\t\t\t\t\\\n+compare_strto ## FSUF (FTYPE x, FTYPE y)\t\t\t\t\\\n+{\t\t\t\t\t\t\t\t\t\\\n+  if (isnan (x) && isnan (y))\t\t\t\t\t\t\\\n+    return 1;\t\t\t\t\t\t\t\t\\\n+  return x == y;\t\t\t\t\t\t\t\\\n+}\t\t\t\t\t\t\t\t\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+static int\t\t\t\t\t\t\t\t\\\n test_strto ## FSUF (void)\t\t\t\t\t\t\\\n {\t\t\t\t\t\t\t\t\t\\\n   int status = 0;\t\t\t\t\t\t\t\\\n@@ -30,7 +67,7 @@ test_strto ## FSUF (void)\t\t\t\t\t\t\\\n     {\t\t\t\t\t\t\t\t\t\\\n       char *ep;\t\t\t\t\t\t\t\t\\\n       FTYPE r = strto ## FSUF (tests_strto ## FSUF[i].str, &ep);\t\\\n-      if (r != tests_strto ## FSUF[i].result)\t\t\t\t\\\n+      if (!compare_strto ## FSUF (r, tests_strto ## FSUF[i].result))\t\\\n \t{\t\t\t\t\t\t\t\t\\\n \t  char buf1[FSTRLENMAX], buf2[FSTRLENMAX];\t\t\t\\\n \t  FTOSTR (buf1, sizeof (buf1), \"%g\", r);\t\t\t\\\n\ncommit cc256952ecb07789c423dff9712eb7a38f80e963\nAuthor: Joseph Myers <josmyers@redhat.com>\nDate:   Fri Sep 20 23:24:45 2024 +0000\n\n    Add tests of more strtod special cases\n    \n    There is very little test coverage of inputs to strtod-family\n    functions that don't contain anything that can be parsed as a number\n    (one test of \".y\" in tst-strtod2), and none that I can see of skipping\n    initial whitespace.  Add some tests of these things to tst-strtod2.\n    \n    Tested for x86_64.\n    \n    (cherry picked from commit 378039ca578c2ea93095a1e710d96f58c68a3997)\n\ndiff --git a/stdlib/tst-strtod2.c b/stdlib/tst-strtod2.c\nindex c84bd792c1..d00bc13323 100644\n--- a/stdlib/tst-strtod2.c\n+++ b/stdlib/tst-strtod2.c\n@@ -31,6 +31,20 @@ struct test_strto ## FSUF\t\t\t\t\t\t\\\n   { \"0x1px\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n   { \"0x1p+x\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n   { \"0x1p-x\", 1.0 ## LSUF, 3 },\t\t\t\t\t\t\\\n+  { \"\", 0.0 ## LSUF, 0 },\t\t\t\t\t\t\\\n+  { \".\", 0.0 ## LSUF, 0 },\t\t\t\t\t\t\\\n+  { \"-\", 0.0 ## LSUF, 0 },\t\t\t\t\t\t\\\n+  { \"-.\", 0.0 ## LSUF, 0 },\t\t\t\t\t\t\\\n+  { \".e\", 0.0 ## LSUF, 0 },\t\t\t\t\t\t\\\n+  { \"-.e\", 0.0 ## LSUF, 0 },\t\t\t\t\t\t\\\n+  { \" \\t\", 0.0 ## LSUF, 0 },\t\t\t\t\t\t\\\n+  { \" \\t.\", 0.0 ## LSUF, 0 },\t\t\t\t\t\t\\\n+  { \" \\t-\", 0.0 ## LSUF, 0 },\t\t\t\t\t\t\\\n+  { \" \\t-.\", 0.0 ## LSUF, 0 },\t\t\t\t\t\t\\\n+  { \" \\t.e\", 0.0 ## LSUF, 0 },\t\t\t\t\t\t\\\n+  { \" \\t-.e\", 0.0 ## LSUF, 0 },\t\t\t\t\t\t\\\n+  { \" \\t\\f\\r\\n\\v1\", 1.0 ## LSUF, 7 },\t\t\t\t\t\\\n+  { \" \\t\\f\\r\\n\\v-1.5e2\", -150.0 ## LSUF, 12 },\t\t\t\t\\\n   { \"INFx\", INFINITY, 3 },\t\t\t\t\t\t\\\n   { \"infx\", INFINITY, 3 },\t\t\t\t\t\t\\\n   { \"INFINITx\", INFINITY, 3 },\t\t\t\t\t\t\\\n\ncommit 5c06c6e0b5078ffb0aa0c09bac79f086145e0897\nAuthor: H.J. Lu <hjl.tools@gmail.com>\nDate:   Sat Sep 7 08:32:32 2024 -0700\n\n    libio: Set _vtable_offset before calling _IO_link_in [BZ #32148]\n    \n    Since _IO_vtable_offset is used to detect the old binaries, set it\n    in _IO_old_file_init_internal before calling _IO_link_in which checks\n    _IO_vtable_offset.  Add a glibc 2.0 test with copy relocation on\n    _IO_stderr_@GLIBC_2.0 to verify that fopen won't cause memory corruption.\n    This fixes BZ #32148.\n    \n    Signed-off-by: H.J. Lu <hjl.tools@gmail.com>\n    Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>\n    (cherry picked from commit 9dfea3de7f690bff70e3c6eb346b9ad082bb2e35)\n\ndiff --git a/libio/Makefile b/libio/Makefile\nindex 6a507b67ea..5292baa4e0 100644\n--- a/libio/Makefile\n+++ b/libio/Makefile\n@@ -286,11 +286,18 @@ endif\n ifeq ($(build-shared),yes)\n aux\t+= oldfileops oldstdfiles\n tests += \\\n+  tst-fopen-compat \\\n   tst-stderr-compat \\\n # tests\n tests-2.0 += \\\n+  tst-fopen-compat \\\n   tst-stderr-compat \\\n # tests-2.0\n+\n+tst-fopen-compat-ARGS = tst-fopen-compat.c\n+# Disable PIE to trigger copy relocation.\n+CFLAGS-tst-fopen-compat.c += -fno-pie\n+tst-fopen-compat-no-pie = yes\n endif\n \n shared-only-routines = oldiofopen oldiofdopen oldiofclose oldfileops\t\\\ndiff --git a/libio/oldfileops.c b/libio/oldfileops.c\nindex 97148dba9b..8f775c9094 100644\n--- a/libio/oldfileops.c\n+++ b/libio/oldfileops.c\n@@ -103,9 +103,11 @@ _IO_old_file_init_internal (struct _IO_FILE_plus *fp)\n   fp->file._old_offset = _IO_pos_BAD;\n   fp->file._flags |= CLOSED_FILEBUF_FLAGS;\n \n-  _IO_link_in (fp);\n+  /* NB: _vtable_offset must be set before calling _IO_link_in since\n+     _IO_vtable_offset is used to detect the old binaries.  */\n   fp->file._vtable_offset = ((int) sizeof (struct _IO_FILE)\n \t\t\t     - (int) sizeof (struct _IO_FILE_complete));\n+  _IO_link_in (fp);\n   fp->file._fileno = -1;\n \n   if (&_IO_stdin_used != NULL || !_IO_legacy_file ((FILE *) fp))\ndiff --git a/libio/tst-fopen-compat.c b/libio/tst-fopen-compat.c\nnew file mode 100644\nindex 0000000000..f241b61043\n--- /dev/null\n+++ b/libio/tst-fopen-compat.c\n@@ -0,0 +1,85 @@\n+/* Verify that fopen works with copy relocation on _IO_stderr_ in binaries\n+   linked with glibc 2.0.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <shlib-compat.h>\n+\n+#if TEST_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)\n+# define _LIBC\n+# define _IO_USE_OLD_IO_FILE\n+# include <stdio.h>\n+# include <string.h>\n+# include <unistd.h>\n+# include <limits.h>\n+# include <sys/stat.h>\n+# include <support/check.h>\n+\n+struct _IO_jump_t;\n+\n+struct _IO_FILE_plus\n+{\n+  FILE file;\n+  const struct _IO_jump_t *vtable;\n+};\n+\n+extern struct _IO_FILE_plus _IO_stderr_;\n+compat_symbol_reference (libc, _IO_stderr_, _IO_stderr_, GLIBC_2_0);\n+compat_symbol_reference (libc, fopen, fopen, GLIBC_2_0);\n+compat_symbol_reference (libc, fclose, fclose, GLIBC_2_0);\n+\n+static int\n+do_test (int argc, char *argv[])\n+{\n+  static char filename[PATH_MAX + 1];\n+  struct stat st;\n+  char *name = NULL;\n+  int i;\n+\n+  /* Try to trigger copy relocation.  */\n+  TEST_VERIFY_EXIT (_IO_stderr_.file._fileno == STDERR_FILENO);\n+\n+  for (i = 1; i < argc; i++)\n+    {\n+      name = argv[i];\n+      if (stat (name, &st) == 0)\n+\t{\n+\t  TEST_VERIFY_EXIT (strlen (name) <= PATH_MAX);\n+\t  break;\n+\t}\n+    }\n+  TEST_VERIFY_EXIT (name != NULL);\n+\n+  strcpy (filename, name);\n+  FILE *fp = fopen (filename, \"r\");\n+  TEST_VERIFY_EXIT (strcmp (filename, name) == 0);\n+  TEST_VERIFY_EXIT (fp != NULL);\n+  TEST_VERIFY_EXIT (fclose (fp) == 0);\n+  return 0;\n+}\n+#else\n+# include <support/test-driver.h>\n+\n+static int\n+do_test (int argc, char *argv[])\n+{\n+  return EXIT_UNSUPPORTED;\n+}\n+#endif\n+\n+#define TEST_FUNCTION_ARGV do_test\n+#include <support/test-driver.c>\n\ncommit 85e5850f2f4ea5f304be5356ecb7a15998766a4e\nAuthor: Joseph Myers <josmyers@redhat.com>\nDate:   Fri Sep 20 23:25:32 2024 +0000\n\n    Make tst-strtod-underflow type-generic\n    \n    The test tst-strtod-underflow covers various edge cases close to the\n    underflow threshold for strtod (especially cases where underflow on\n    architectures with after-rounding tininess detection depends on the\n    rounding mode).  Make it use the type-generic machinery, with\n    corresponding test inputs for each supported floating-point format, so\n    that other functions in the strtod family are tested for underflow\n    edge cases as well.\n    \n    Tested for x86_64.\n    \n    (cherry picked from commit 94ca2c0894f0e1b62625c369cc598a2b9236622c)\n\ndiff --git a/stdlib/tst-strtod-underflow.c b/stdlib/tst-strtod-underflow.c\nindex a5ced18599..8598b95b6d 100644\n--- a/stdlib/tst-strtod-underflow.c\n+++ b/stdlib/tst-strtod-underflow.c\n@@ -17,6 +17,10 @@\n    License along with the GNU C Library; if not, see\n    <https://www.gnu.org/licenses/>.  */\n \n+/* Defining _LIBC_TEST ensures long double math functions are\n+   declared in the headers.  */\n+#define _LIBC_TEST 1\n+#define __STDC_WANT_IEC_60559_TYPES_EXT__\n #include <errno.h>\n #include <fenv.h>\n #include <float.h>\n@@ -25,6 +29,60 @@\n #include <stdlib.h>\n #include <tininess.h>\n \n+#include \"tst-strtod.h\"\n+\n+/* Logic for selecting between tests for different formats is as in\n+   tst-strtod-skeleton.c, but here it is selecting string inputs with\n+   different underflow properties, rather than generated test\n+   data.  */\n+\n+#define _CONCAT(a, b) a ## b\n+#define CONCAT(a, b) _CONCAT (a, b)\n+\n+#define MEMBER(FSUF, FTYPE, FTOSTR, LSUF, CSUF)\t\\\n+  const char *s_ ## FSUF;\n+\n+#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024\n+# define CHOOSE_ld(f,d,...) d\n+#elif LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384 && LDBL_MIN_EXP == -16381\n+# define CHOOSE_ld(f,d,ld64i,...) ld64i\n+#elif LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384 && LDBL_MIN_EXP == -16382\n+# define CHOOSE_ld(f,d,ld64i,ld64m,...) ld64m\n+#elif LDBL_MANT_DIG == 106 && LDBL_MAX_EXP == 1024\n+# define CHOOSE_ld(f,d,ld64i,ld64m,ld106,...) ld106\n+#elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384\n+# define CHOOSE_ld(f,d,ld64i,ld64m,ld106,ld113,...) ld113\n+#else\n+# error \"unknown long double format\"\n+#endif\n+\n+#define CHOOSE_f(f,...) f\n+#define CHOOSE_f32(f,...) f\n+#define CHOOSE_d(f,d,...) d\n+#define CHOOSE_f64(f,d,...) d\n+#define CHOOSE_f32x(f,d,...) d\n+#define CHOOSE_f128(f,d,ld64i,ld64m,ld106,ld113,...) ld113\n+\n+#if __HAVE_FLOAT64X\n+# if FLT64X_MANT_DIG == 113 && FLT64X_MAX_EXP == 16384\n+#  define CHOOSE_f64x(f,d,ld64i,ld64m,ld106,ld113,...) ld113\n+# elif (FLT64X_MANT_DIG == 64\t\t\t\\\n+\t&& FLT64X_MAX_EXP == 16384\t\t\\\n+\t&& FLT64X_MIN_EXP == -16381)\n+#  define CHOOSE_f64x(f,d,ld64i,...) ld64i\n+# else\n+#  error \"unknown _Float64x format\"\n+# endif\n+#endif\n+\n+#define _XNTRY(FSUF, FTYPE, FTOSTR, LSUF, CSUF, ...)\t\\\n+  CHOOSE_ ## FSUF (__VA_ARGS__),\n+#define XNTRY(...) \\\n+  GEN_TEST_STRTOD_FOREACH (_XNTRY, __VA_ARGS__)\n+\n+#define TEST(f, d, ld64i, ld64m, ld106, ld113, u) \\\n+  { XNTRY(f, d, ld64i, ld64m, ld106, ld113) u }\n+\n enum underflow_case\n   {\n     /* Result is exact or outside the subnormal range.  */\n@@ -55,38 +113,194 @@ enum underflow_case\n \n struct test\n {\n-  const char *s;\n+  GEN_TEST_STRTOD_FOREACH (MEMBER)\n   enum underflow_case c;\n };\n \n static const struct test tests[] =\n   {\n-    { \"0x1p-1022\", UNDERFLOW_NONE },\n-    { \"-0x1p-1022\", UNDERFLOW_NONE },\n-    { \"0x0p-10000000000000000000000000\", UNDERFLOW_NONE },\n-    { \"-0x0p-10000000000000000000000000\", UNDERFLOW_NONE },\n-    { \"0x1p-10000000000000000000000000\", UNDERFLOW_ALWAYS },\n-    { \"-0x1p-10000000000000000000000000\", UNDERFLOW_ALWAYS },\n-    { \"0x1.000000000000000000001p-1022\", UNDERFLOW_NONE },\n-    { \"-0x1.000000000000000000001p-1022\", UNDERFLOW_NONE },\n-    { \"0x1p-1075\", UNDERFLOW_ALWAYS },\n-    { \"-0x1p-1075\", UNDERFLOW_ALWAYS },\n-    { \"0x1p-1023\", UNDERFLOW_NONE },\n-    { \"-0x1p-1023\", UNDERFLOW_NONE },\n-    { \"0x1p-1074\", UNDERFLOW_NONE },\n-    { \"-0x1p-1074\", UNDERFLOW_NONE },\n-    { \"0x1.ffffffffffffep-1023\", UNDERFLOW_NONE },\n-    { \"-0x1.ffffffffffffep-1023\", UNDERFLOW_NONE },\n-    { \"0x1.fffffffffffffp-1023\", UNDERFLOW_ALWAYS },\n-    { \"-0x1.fffffffffffffp-1023\", UNDERFLOW_ALWAYS },\n-    { \"0x1.fffffffffffff0001p-1023\", UNDERFLOW_EXCEPT_UPWARD },\n-    { \"-0x1.fffffffffffff0001p-1023\", UNDERFLOW_EXCEPT_DOWNWARD },\n-    { \"0x1.fffffffffffff7fffp-1023\", UNDERFLOW_EXCEPT_UPWARD },\n-    { \"-0x1.fffffffffffff7fffp-1023\", UNDERFLOW_EXCEPT_DOWNWARD },\n-    { \"0x1.fffffffffffff8p-1023\", UNDERFLOW_ONLY_DOWNWARD_ZERO },\n-    { \"-0x1.fffffffffffff8p-1023\", UNDERFLOW_ONLY_UPWARD_ZERO },\n-    { \"0x1.fffffffffffffffffp-1023\", UNDERFLOW_ONLY_DOWNWARD_ZERO },\n-    { \"-0x1.fffffffffffffffffp-1023\", UNDERFLOW_ONLY_UPWARD_ZERO },\n+    TEST (\"0x1p-126\",\n+\t  \"0x1p-1022\",\n+\t  \"0x1p-16382\",\n+\t  \"0x1p-16383\",\n+\t  \"0x1p-969\",\n+\t  \"0x1p-16382\",\n+\t  UNDERFLOW_NONE),\n+    TEST (\"-0x1p-126\",\n+\t  \"-0x1p-1022\",\n+\t  \"-0x1p-16382\",\n+\t  \"-0x1p-16383\",\n+\t  \"-0x1p-969\",\n+\t  \"-0x1p-16382\",\n+\t  UNDERFLOW_NONE),\n+    TEST (\"0x0p-10000000000000000000000000\",\n+\t  \"0x0p-10000000000000000000000000\",\n+\t  \"0x0p-10000000000000000000000000\",\n+\t  \"0x0p-10000000000000000000000000\",\n+\t  \"0x0p-10000000000000000000000000\",\n+\t  \"0x0p-10000000000000000000000000\",\n+\t  UNDERFLOW_NONE),\n+    TEST (\"-0x0p-10000000000000000000000000\",\n+\t  \"-0x0p-10000000000000000000000000\",\n+\t  \"-0x0p-10000000000000000000000000\",\n+\t  \"-0x0p-10000000000000000000000000\",\n+\t  \"-0x0p-10000000000000000000000000\",\n+\t  \"-0x0p-10000000000000000000000000\",\n+\t  UNDERFLOW_NONE),\n+    TEST (\"0x1p-10000000000000000000000000\",\n+\t  \"0x1p-10000000000000000000000000\",\n+\t  \"0x1p-10000000000000000000000000\",\n+\t  \"0x1p-10000000000000000000000000\",\n+\t  \"0x1p-10000000000000000000000000\",\n+\t  \"0x1p-10000000000000000000000000\",\n+\t  UNDERFLOW_ALWAYS),\n+    TEST (\"-0x1p-10000000000000000000000000\",\n+\t  \"-0x1p-10000000000000000000000000\",\n+\t  \"-0x1p-10000000000000000000000000\",\n+\t  \"-0x1p-10000000000000000000000000\",\n+\t  \"-0x1p-10000000000000000000000000\",\n+\t  \"-0x1p-10000000000000000000000000\",\n+\t  UNDERFLOW_ALWAYS),\n+    TEST (\"0x1.000000000000000000001p-126\",\n+\t  \"0x1.000000000000000000001p-1022\",\n+\t  \"0x1.000000000000000000001p-16382\",\n+\t  \"0x1.000000000000000000001p-16383\",\n+\t  \"0x1.000000000000000000001p-969\",\n+\t  \"0x1.00000000000000000000000000000000000000001p-16382\",\n+\t  UNDERFLOW_NONE),\n+    TEST (\"-0x1.000000000000000000001p-126\",\n+\t  \"-0x1.000000000000000000001p-1022\",\n+\t  \"-0x1.000000000000000000001p-16382\",\n+\t  \"-0x1.000000000000000000001p-16383\",\n+\t  \"-0x1.000000000000000000001p-969\",\n+\t  \"-0x1.00000000000000000000000000000000000000001p-16382\",\n+\t  UNDERFLOW_NONE),\n+    TEST (\"0x1p-150\",\n+\t  \"0x1p-1075\",\n+\t  \"0x1p-16446\",\n+\t  \"0x1p-16447\",\n+\t  \"0x1p-1075\",\n+\t  \"0x1p-16495\",\n+\t  UNDERFLOW_ALWAYS),\n+    TEST (\"-0x1p-150\",\n+\t  \"-0x1p-1075\",\n+\t  \"-0x1p-16446\",\n+\t  \"-0x1p-16447\",\n+\t  \"-0x1p-1075\",\n+\t  \"-0x1p-16495\",\n+\t  UNDERFLOW_ALWAYS),\n+    TEST (\"0x1p-127\",\n+\t  \"0x1p-1023\",\n+\t  \"0x1p-16383\",\n+\t  \"0x1p-16384\",\n+\t  \"0x1p-970\",\n+\t  \"0x1p-16383\",\n+\t  UNDERFLOW_NONE),\n+    TEST (\"-0x1p-127\",\n+\t  \"-0x1p-1023\",\n+\t  \"-0x1p-16383\",\n+\t  \"-0x1p-16384\",\n+\t  \"-0x1p-970\",\n+\t  \"-0x1p-16383\",\n+\t  UNDERFLOW_NONE),\n+    TEST (\"0x1p-149\",\n+\t  \"0x1p-1074\",\n+\t  \"0x1p-16445\",\n+\t  \"0x1p-16446\",\n+\t  \"0x1p-1074\",\n+\t  \"0x1p-16494\",\n+\t  UNDERFLOW_NONE),\n+    TEST (\"-0x1p-149\",\n+\t  \"-0x1p-1074\",\n+\t  \"-0x1p-16445\",\n+\t  \"-0x1p-16446\",\n+\t  \"-0x1p-1074\",\n+\t  \"-0x1p-16494\",\n+\t  UNDERFLOW_NONE),\n+    TEST (\"0x1.fffffcp-127\",\n+\t  \"0x1.ffffffffffffep-1023\",\n+\t  \"0x1.fffffffffffffffcp-16383\",\n+\t  \"0x1.fffffffffffffffcp-16384\",\n+\t  \"0x1.ffffffffffffffffffffffffffp-970\",\n+\t  \"0x1.fffffffffffffffffffffffffffep-16383\",\n+\t  UNDERFLOW_NONE),\n+    TEST (\"-0x1.fffffcp-127\",\n+\t  \"-0x1.ffffffffffffep-1023\",\n+\t  \"-0x1.fffffffffffffffcp-16383\",\n+\t  \"-0x1.fffffffffffffffcp-16384\",\n+\t  \"-0x1.ffffffffffffffffffffffffffp-970\",\n+\t  \"-0x1.fffffffffffffffffffffffffffep-16383\",\n+\t  UNDERFLOW_NONE),\n+    TEST (\"0x1.fffffep-127\",\n+\t  \"0x1.fffffffffffffp-1023\",\n+\t  \"0x1.fffffffffffffffep-16383\",\n+\t  \"0x1.fffffffffffffffep-16384\",\n+\t  \"0x1.ffffffffffffffffffffffffff8p-970\",\n+\t  \"0x1.ffffffffffffffffffffffffffffp-16383\",\n+\t  UNDERFLOW_ALWAYS),\n+    TEST (\"-0x1.fffffep-127\",\n+\t  \"-0x1.fffffffffffffp-1023\",\n+\t  \"-0x1.fffffffffffffffep-16383\",\n+\t  \"-0x1.fffffffffffffffep-16384\",\n+\t  \"-0x1.ffffffffffffffffffffffffff8p-970\",\n+\t  \"-0x1.ffffffffffffffffffffffffffffp-16383\",\n+\t  UNDERFLOW_ALWAYS),\n+    TEST (\"0x1.fffffe0001p-127\",\n+\t  \"0x1.fffffffffffff0001p-1023\",\n+\t  \"0x1.fffffffffffffffe0001p-16383\",\n+\t  \"0x1.fffffffffffffffe0001p-16384\",\n+\t  \"0x1.ffffffffffffffffffffffffff80001p-970\",\n+\t  \"0x1.ffffffffffffffffffffffffffff0001p-16383\",\n+\t  UNDERFLOW_EXCEPT_UPWARD),\n+    TEST (\"-0x1.fffffe0001p-127\",\n+\t  \"-0x1.fffffffffffff0001p-1023\",\n+\t  \"-0x1.fffffffffffffffe0001p-16383\",\n+\t  \"-0x1.fffffffffffffffe0001p-16384\",\n+\t  \"-0x1.ffffffffffffffffffffffffff80001p-970\",\n+\t  \"-0x1.ffffffffffffffffffffffffffff0001p-16383\",\n+\t  UNDERFLOW_EXCEPT_DOWNWARD),\n+    TEST (\"0x1.fffffeffffp-127\",\n+\t  \"0x1.fffffffffffff7fffp-1023\",\n+\t  \"0x1.fffffffffffffffeffffp-16383\",\n+\t  \"0x1.fffffffffffffffeffffp-16384\",\n+\t  \"0x1.ffffffffffffffffffffffffffbffffp-970\",\n+\t  \"0x1.ffffffffffffffffffffffffffff7fffp-16383\",\n+\t  UNDERFLOW_EXCEPT_UPWARD),\n+    TEST (\"-0x1.fffffeffffp-127\",\n+\t  \"-0x1.fffffffffffff7fffp-1023\",\n+\t  \"-0x1.fffffffffffffffeffffp-16383\",\n+\t  \"-0x1.fffffffffffffffeffffp-16384\",\n+\t  \"-0x1.ffffffffffffffffffffffffffbffffp-970\",\n+\t  \"-0x1.ffffffffffffffffffffffffffff7fffp-16383\",\n+\t  UNDERFLOW_EXCEPT_DOWNWARD),\n+    TEST (\"0x1.ffffffp-127\",\n+\t  \"0x1.fffffffffffff8p-1023\",\n+\t  \"0x1.ffffffffffffffffp-16383\",\n+\t  \"0x1.ffffffffffffffffp-16384\",\n+\t  \"0x1.ffffffffffffffffffffffffffcp-970\",\n+\t  \"0x1.ffffffffffffffffffffffffffff8p-16383\",\n+\t  UNDERFLOW_ONLY_DOWNWARD_ZERO),\n+    TEST (\"-0x1.ffffffp-127\",\n+\t  \"-0x1.fffffffffffff8p-1023\",\n+\t  \"-0x1.ffffffffffffffffp-16383\",\n+\t  \"-0x1.ffffffffffffffffp-16384\",\n+\t  \"-0x1.ffffffffffffffffffffffffffcp-970\",\n+\t  \"-0x1.ffffffffffffffffffffffffffff8p-16383\",\n+\t  UNDERFLOW_ONLY_UPWARD_ZERO),\n+    TEST (\"0x1.ffffffffffp-127\",\n+\t  \"0x1.fffffffffffffffffp-1023\",\n+\t  \"0x1.ffffffffffffffffffffp-16383\",\n+\t  \"0x1.ffffffffffffffffffffp-16384\",\n+\t  \"0x1.ffffffffffffffffffffffffffffffp-970\",\n+\t  \"0x1.ffffffffffffffffffffffffffffffffp-16383\",\n+\t  UNDERFLOW_ONLY_DOWNWARD_ZERO),\n+    TEST (\"-0x1.ffffffffffp-127\",\n+\t  \"-0x1.fffffffffffffffffp-1023\",\n+\t  \"-0x1.ffffffffffffffffffffp-16383\",\n+\t  \"-0x1.ffffffffffffffffffffp-16384\",\n+\t  \"-0x1.ffffffffffffffffffffffffffffffp-970\",\n+\t  \"-0x1.ffffffffffffffffffffffffffffffffp-16383\",\n+\t  UNDERFLOW_ONLY_UPWARD_ZERO),\n   };\n \n /* Return whether to expect underflow from a particular testcase, in a\n@@ -133,39 +347,62 @@ static bool support_underflow_exception = false;\n volatile double d = DBL_MIN;\n volatile double dd;\n \n-static int\n-test_in_one_mode (const char *s, enum underflow_case c, int rm,\n-\t\t  const char *mode_name)\n+static bool\n+test_got_fe_underflow (void)\n {\n-  int result = 0;\n-  feclearexcept (FE_ALL_EXCEPT);\n-  errno = 0;\n-  double d = strtod (s, NULL);\n-  int got_errno = errno;\n #ifdef FE_UNDERFLOW\n-  bool got_fe_underflow = fetestexcept (FE_UNDERFLOW) != 0;\n+  return fetestexcept (FE_UNDERFLOW) != 0;\n #else\n-  bool got_fe_underflow = false;\n+  return false;\n #endif\n-  printf (\"strtod (%s) (%s) returned %a, errno = %d, %sunderflow exception\\n\",\n-\t  s, mode_name, d, got_errno, got_fe_underflow ? \"\" : \"no \");\n-  bool this_expect_underflow = expect_underflow (c, rm);\n-  if (got_errno != 0 && got_errno != ERANGE)\n-    {\n-      puts (\"FAIL: errno neither 0 nor ERANGE\");\n-      result = 1;\n-    }\n-  else if (this_expect_underflow != (errno == ERANGE))\n-    {\n-      puts (\"FAIL: underflow from errno differs from expectations\");\n-      result = 1;\n-    }\n-  if (support_underflow_exception && got_fe_underflow != this_expect_underflow)\n-    {\n-      puts (\"FAIL: underflow from exceptions differs from expectations\");\n-      result = 1;\n-    }\n-  return result;\n+}\n+\n+#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF)\t\t\t\\\n+static int\t\t\t\t\t\t\t\t\\\n+test_strto ## FSUF (int i, int rm, const char *mode_name)\t\t\\\n+{\t\t\t\t\t\t\t\t\t\\\n+  const char *s = tests[i].s_ ## FSUF;\t\t\t\t\t\\\n+  enum underflow_case c = tests[i].c;\t\t\t\t\t\\\n+  int result = 0;\t\t\t\t\t\t\t\\\n+  feclearexcept (FE_ALL_EXCEPT);\t\t\t\t\t\\\n+  errno = 0;\t\t\t\t\t\t\t\t\\\n+  FTYPE d = strto ## FSUF (s, NULL);\t\t\t\t\t\\\n+  int got_errno = errno;\t\t\t\t\t\t\\\n+  bool got_fe_underflow = test_got_fe_underflow ();\t\t\t\\\n+  char buf[FSTRLENMAX];\t\t\t\t\t\t\t\\\n+  FTOSTR (buf, sizeof (buf), \"%a\", d);\t\t\t\t\t\\\n+  printf (\"strto\" #FSUF\t\t\t\t\t\t\t\\\n+\t  \" (%s) (%s) returned %s, errno = %d, \"\t\t\t\\\n+\t  \"%sunderflow exception\\n\",\t\t\t\t\t\\\n+\t  s, mode_name, buf, got_errno,\t\t\t\t\t\\\n+\t  got_fe_underflow ? \"\" : \"no \");\t\t\t\t\\\n+  bool this_expect_underflow = expect_underflow (c, rm);\t\t\\\n+  if (got_errno != 0 && got_errno != ERANGE)\t\t\t\t\\\n+    {\t\t\t\t\t\t\t\t\t\\\n+      puts (\"FAIL: errno neither 0 nor ERANGE\");\t\t\t\\\n+      result = 1;\t\t\t\t\t\t\t\\\n+    }\t\t\t\t\t\t\t\t\t\\\n+  else if (this_expect_underflow != (errno == ERANGE))\t\t\t\\\n+    {\t\t\t\t\t\t\t\t\t\\\n+      puts (\"FAIL: underflow from errno differs from expectations\");\t\\\n+      result = 1;\t\t\t\t\t\t\t\\\n+    }\t\t\t\t\t\t\t\t\t\\\n+  if (support_underflow_exception\t\t\t\t\t\\\n+      && got_fe_underflow != this_expect_underflow)\t\t\t\\\n+    {\t\t\t\t\t\t\t\t\t\\\n+      puts (\"FAIL: underflow from exceptions \"\t\t\t\t\\\n+\t    \"differs from expectations\");\t\t\t\t\\\n+      result = 1;\t\t\t\t\t\t\t\\\n+    }\t\t\t\t\t\t\t\t\t\\\n+  return result;\t\t\t\t\t\t\t\\\n+}\n+\n+GEN_TEST_STRTOD_FOREACH (TEST_STRTOD)\n+\n+static int\n+test_in_one_mode (size_t i, int rm, const char *mode_name)\n+{\n+  return STRTOD_TEST_FOREACH (test_strto, i, rm, mode_name);\n }\n \n static int\n@@ -191,12 +428,12 @@ do_test (void)\n #endif\n   for (size_t i = 0; i < sizeof (tests) / sizeof (tests[0]); i++)\n     {\n-      result |= test_in_one_mode (tests[i].s, tests[i].c, fe_tonearest,\n+      result |= test_in_one_mode (i, fe_tonearest,\n \t\t\t\t  \"default rounding mode\");\n #ifdef FE_DOWNWARD\n       if (!fesetround (FE_DOWNWARD))\n \t{\n-\t  result |= test_in_one_mode (tests[i].s, tests[i].c, FE_DOWNWARD,\n+\t  result |= test_in_one_mode (i, FE_DOWNWARD,\n \t\t\t\t      \"FE_DOWNWARD\");\n \t  fesetround (save_round_mode);\n \t}\n@@ -204,7 +441,7 @@ do_test (void)\n #ifdef FE_TOWARDZERO\n       if (!fesetround (FE_TOWARDZERO))\n \t{\n-\t  result |= test_in_one_mode (tests[i].s, tests[i].c, FE_TOWARDZERO,\n+\t  result |= test_in_one_mode (i, FE_TOWARDZERO,\n \t\t\t\t      \"FE_TOWARDZERO\");\n \t  fesetround (save_round_mode);\n \t}\n@@ -212,7 +449,7 @@ do_test (void)\n #ifdef FE_UPWARD\n       if (!fesetround (FE_UPWARD))\n \t{\n-\t  result |= test_in_one_mode (tests[i].s, tests[i].c, FE_UPWARD,\n+\t  result |= test_in_one_mode (i, FE_UPWARD,\n \t\t\t\t      \"FE_UPWARD\");\n \t  fesetround (save_round_mode);\n \t}\n\ncommit 3a34851103d554b2c9b269ecae111648f9d7bb6d\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Mon Oct 28 14:45:30 2024 +0100\n\n    elf: Change ldconfig auxcache magic number (bug 32231)\n    \n    In commit c628c2296392ed3bf2cb8d8470668e64fe53389f (elf: Remove\n    ldconfig kernel version check), the layout of auxcache entries\n    changed because the osversion field was removed from\n    struct aux_cache_file_entry.  However, AUX_CACHEMAGIC was not\n    changed, so existing files are still used, potentially leading\n    to unintended ldconfig behavior.  This commit changes AUX_CACHEMAGIC,\n    so that the file is regenerated.\n    \n    Reported-by: DJ Delorie <dj@redhat.com>\n    Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>\n    (cherry picked from commit 0a536f6e2f76e3ef581b3fd9af1e5cf4ddc7a5a2)\n\ndiff --git a/NEWS b/NEWS\nindex 9033335db1..928c516bec 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -17,6 +17,7 @@ The following bugs are resolved with this release:\n   [32026] strerror/strsignal TLS not handled correctly for secondary namespaces\n   [32052] Name space violation in fortify wrappers\n   [32137] libio: Attempt wide backup free only for non-legacy code\n+  [32231] elf: Change ldconfig auxcache magic number\n \f\n Version 2.40\n \ndiff --git a/elf/cache.c b/elf/cache.c\nindex 8a618e11fa..62d681df42 100644\n--- a/elf/cache.c\n+++ b/elf/cache.c\n@@ -820,7 +820,7 @@ struct aux_cache_entry\n   struct aux_cache_entry *next;\n };\n \n-#define AUX_CACHEMAGIC\t\t\"glibc-ld.so.auxcache-1.0\"\n+#define AUX_CACHEMAGIC\t\t\"glibc-ld.so.auxcache-2.0\"\n \n struct aux_cache_file_entry\n {\n\ncommit 234458024300f0b4b430785999f33eddf059af6a\nAuthor: Michael Karcher <Michael.Karcher@fu-berlin.de>\nDate:   Sun Jul 28 15:30:57 2024 +0200\n\n    Mitigation for \"clone on sparc might fail with -EFAULT for no valid reason\" (bz 31394)\n    \n    It seems the kernel can not deal with uncommitted stack space in the area intended\n    for the register window when executing the clone() system call. So create a nested\n    frame (proxy for the kernel frame) and flush it from the processor to memory to\n    force committing pages to the stack before invoking the system call.\n    \n    Bug: https://www.mail-archive.com/debian-glibc@lists.debian.org/msg62592.html\n    Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31394\n    See-also: https://lore.kernel.org/sparclinux/62f9be9d-a086-4134-9a9f-5df8822708af@mkarcher.dialup.fu-berlin.de/\n    Signed-off-by: Michael Karcher <sourceware-bugzilla@mkarcher.dialup.fu-berlin.de>\n    Reviewed-by: DJ Delorie <dj@redhat.com>\n    (cherry picked from commit faeaa3bc9f76030b9882ccfdee232fc0ca6dcb06)\n\ndiff --git a/NEWS b/NEWS\nindex 928c516bec..dc815fb6d3 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -11,6 +11,7 @@ The following bugs are resolved with this release:\n \n   [27821] ungetc: Fix backup buffer leak on program exit\n   [30081] resolv: Do not wait for non-existing second DNS response after error\n+  [31394] clone on sparc might fail with -EFAULT for no valid reason\n   [31717] elf: Avoid re-initializing already allocated TLS in dlopen\n   [31890] resolv: Allow short error responses to match any DNS query\n   [31968] mremap implementation in C does not handle arguments correctly\ndiff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S\nindex 748d25fcfe..c9cf9bb055 100644\n--- a/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S\n+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S\n@@ -28,6 +28,9 @@\n \t.text\n ENTRY (__clone)\n \tsave\t%sp,-96,%sp\n+\tsave\t%sp,-96,%sp\n+\tflushw\n+\trestore\n \tcfi_def_cfa_register(%fp)\n \tcfi_window_save\n \tcfi_register(%o7, %i7)\ndiff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S\nindex e5ff2cf1a0..370d51fda2 100644\n--- a/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S\n+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S\n@@ -32,6 +32,9 @@\n \n ENTRY (__clone)\n \tsave\t%sp, -192, %sp\n+\tsave\t%sp, -192, %sp\n+\tflushw\n+\trestore\n \tcfi_def_cfa_register(%fp)\n \tcfi_window_save\n \tcfi_register(%o7, %i7)\n\ncommit efb710034e4c5e734d100cc4ef1b1e27d4315825\nAuthor: Adhemerval Zanella <adhemerval.zanella@linaro.org>\nDate:   Mon Sep 2 16:58:51 2024 -0300\n\n    linux: sparc: Fix clone for LEON/sparcv8 (BZ 31394)\n    \n    The sparc clone mitigation (faeaa3bc9f76030) added the use of\n    flushw, which is not support by LEON/sparcv8.  As discussed on\n    the libc-alpha, 'ta 3' is a working alternative [1].\n    \n    [1] https://sourceware.org/pipermail/libc-alpha/2024-August/158905.html\n    \n    Checked with a build for sparcv8-linux-gnu targetting leon.\n    \n    Acked-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>\n    (cherry picked from commit 5e8cfc5d625e6dd000a0371d21d792836ea7951a)\n\ndiff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S\nindex c9cf9bb055..c84244f56b 100644\n--- a/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S\n+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S\n@@ -29,7 +29,11 @@\n ENTRY (__clone)\n \tsave\t%sp,-96,%sp\n \tsave\t%sp,-96,%sp\n+#ifdef __sparcv9\n \tflushw\n+#else\n+\tta 3\n+#endif\n \trestore\n \tcfi_def_cfa_register(%fp)\n \tcfi_window_save\n\ncommit 626c048f32a979f77662bdcb1cca477c11d3f9c1\nAuthor: Aurelien Jarno <aurelien@aurel32.net>\nDate:   Sun Nov 10 10:50:34 2024 +0100\n\n    elf: handle addition overflow in _dl_find_object_update_1 [BZ #32245]\n    \n    The remaining_to_add variable can be 0 if (current_used + count) wraps,\n    This is caught by GCC 14+ on hppa, which determines from there that\n    target_seg could be be NULL when remaining_to_add is zero, which in\n    turns causes a -Wstringop-overflow warning:\n    \n     In file included from ../include/atomic.h:49,\n                      from dl-find_object.c:20:\n     In function '_dlfo_update_init_seg',\n         inlined from '_dl_find_object_update_1' at dl-find_object.c:689:30,\n         inlined from '_dl_find_object_update' at dl-find_object.c:805:13:\n     ../sysdeps/unix/sysv/linux/hppa/atomic-machine.h:44:4: error: '__atomic_store_4' writing 4 bytes into a region of size 0 overflows the destination [-Werror=stringop-overflow=]\n        44 |    __atomic_store_n ((mem), (val), __ATOMIC_RELAXED);                        \\\n           |    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n     dl-find_object.c:644:3: note: in expansion of macro 'atomic_store_relaxed'\n       644 |   atomic_store_relaxed (&seg->size, new_seg_size);\n           |   ^~~~~~~~~~~~~~~~~~~~\n     In function '_dl_find_object_update':\n     cc1: note: destination object is likely at address zero\n    \n    In practice, this is not possible as it represent counts of link maps.\n    Link maps have sizes larger than 1 byte, so the sum of any two link map\n    counts will always fit within a size_t without wrapping around.\n    \n    This patch therefore adds a check on remaining_to_add == 0 and tell GCC\n    that this can not happen using __builtin_unreachable.\n    \n    Thanks to Andreas Schwab for the investigation.\n    \n    Closes: BZ #32245\n    Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>\n    Tested-by: John David Anglin <dave.anglin@bell.net>\n    Reviewed-by: Florian Weimer <fweimer@redhat.com>\n    (cherry picked from commit 6c915c73d08028987232f6dc718f218c61113240)\n\ndiff --git a/NEWS b/NEWS\nindex dc815fb6d3..bd0b3bd66a 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -19,6 +19,7 @@ The following bugs are resolved with this release:\n   [32052] Name space violation in fortify wrappers\n   [32137] libio: Attempt wide backup free only for non-legacy code\n   [32231] elf: Change ldconfig auxcache magic number\n+  [32245] glibc -Wstringop-overflow= build failure on hppa\n \f\n Version 2.40\n \ndiff --git a/elf/dl-find_object.c b/elf/dl-find_object.c\nindex 449302eda3..ae18b438d3 100644\n--- a/elf/dl-find_object.c\n+++ b/elf/dl-find_object.c\n@@ -662,6 +662,14 @@ _dl_find_object_update_1 (struct link_map **loaded, size_t count)\n     = _dlfo_loaded_mappings[!active_idx];\n   size_t remaining_to_add = current_used + count;\n \n+  /* remaining_to_add can be 0 if (current_used + count) wraps, but in practice\n+     this is not possible as it represent counts of link maps.  Link maps have\n+     sizes larger than 1 byte, so the sum of any two link map counts will\n+     always fit within a size_t without wrapping around.  This check ensures\n+     that target_seg is not erroneously considered potentially NULL by GCC. */\n+  if (remaining_to_add == 0)\n+    __builtin_unreachable ();\n+\n   /* Ensure that the new segment chain has enough space.  */\n   {\n     size_t new_allocated\n\ncommit 9b9545ba27613fa41efdfa7965b6fc580bf1b919\nAuthor: Michael Jeanson <mjeanson@efficios.com>\nDate:   Thu Nov 7 22:23:49 2024 +0100\n\n    nptl: initialize rseq area prior to registration\n    \n    Per the rseq syscall documentation, 3 fields are required to be\n    initialized by userspace prior to registration, they are 'cpu_id',\n    'rseq_cs' and 'flags'. Since we have no guarantee that 'struct pthread'\n    is cleared on all architectures, explicitly set those 3 fields prior to\n    registration.\n    \n    Signed-off-by: Michael Jeanson <mjeanson@efficios.com>\n    Reviewed-by: Florian Weimer <fweimer@redhat.com>\n    (cherry picked from commit 97f60abd25628425971f07e9b0e7f8eec0741235)\n\ndiff --git a/nptl/descr.h b/nptl/descr.h\nindex 8cef95810c..c4bdd7757a 100644\n--- a/nptl/descr.h\n+++ b/nptl/descr.h\n@@ -414,6 +414,8 @@ struct pthread\n     {\n       uint32_t cpu_id_start;\n       uint32_t cpu_id;\n+      uint64_t rseq_cs;\n+      uint32_t flags;\n     };\n     char pad[32];\t\t/* Original rseq area size.  */\n   } rseq_area __attribute__ ((aligned (32)));\ndiff --git a/sysdeps/unix/sysv/linux/rseq-internal.h b/sysdeps/unix/sysv/linux/rseq-internal.h\nindex 7ea935b4ad..37a8f630b6 100644\n--- a/sysdeps/unix/sysv/linux/rseq-internal.h\n+++ b/sysdeps/unix/sysv/linux/rseq-internal.h\n@@ -51,11 +51,21 @@ rseq_register_current_thread (struct pthread *self, bool do_rseq)\n         /* The initial implementation used only 20 bytes out of 32,\n            but still expected size 32.  */\n         size = RSEQ_AREA_SIZE_INITIAL;\n+\n+      /* Initialize the rseq fields that are read by the kernel on\n+         registration, there is no guarantee that struct pthread is\n+         cleared on all architectures.  */\n+      THREAD_SETMEM (self, rseq_area.cpu_id, RSEQ_CPU_ID_UNINITIALIZED);\n+      THREAD_SETMEM (self, rseq_area.rseq_cs, 0);\n+      THREAD_SETMEM (self, rseq_area.flags, 0);\n+\n       int ret = INTERNAL_SYSCALL_CALL (rseq, &self->rseq_area,\n                                        size, 0, RSEQ_SIG);\n       if (!INTERNAL_SYSCALL_ERROR_P (ret))\n         return true;\n     }\n+  /* When rseq is disabled by tunables or the registration fails, inform\n+     userspace by setting 'cpu_id' to RSEQ_CPU_ID_REGISTRATION_FAILED.  */\n   THREAD_SETMEM (self, rseq_area.cpu_id, RSEQ_CPU_ID_REGISTRATION_FAILED);\n   return false;\n }\n\ncommit 091dd12831792cef16eee24fe240c73a25b47a1d\nAuthor: Michael Jeanson <mjeanson@efficios.com>\nDate:   Wed Nov 20 14:15:42 2024 -0500\n\n    nptl: initialize cpu_id_start prior to rseq registration\n    \n    When adding explicit initialization of rseq fields prior to\n    registration, I glossed over the fact that 'cpu_id_start' is also\n    documented as initialized by user-space.\n    \n    While current kernels don't validate the content of this field on\n    registration, future ones could.\n    \n    Signed-off-by: Michael Jeanson <mjeanson@efficios.com>\n    Reviewed-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>\n    (cherry picked from commit d9f40387d3305d97e30a8cf8724218c42a63680a)\n\ndiff --git a/sysdeps/unix/sysv/linux/rseq-internal.h b/sysdeps/unix/sysv/linux/rseq-internal.h\nindex 37a8f630b6..ef3eab1fef 100644\n--- a/sysdeps/unix/sysv/linux/rseq-internal.h\n+++ b/sysdeps/unix/sysv/linux/rseq-internal.h\n@@ -56,6 +56,7 @@ rseq_register_current_thread (struct pthread *self, bool do_rseq)\n          registration, there is no guarantee that struct pthread is\n          cleared on all architectures.  */\n       THREAD_SETMEM (self, rseq_area.cpu_id, RSEQ_CPU_ID_UNINITIALIZED);\n+      THREAD_SETMEM (self, rseq_area.cpu_id_start, 0);\n       THREAD_SETMEM (self, rseq_area.rseq_cs, 0);\n       THREAD_SETMEM (self, rseq_area.flags, 0);\n \n\ncommit c6cdab1e01bc11bc4036dc5b1be6086f6259c123\nAuthor: Sam James <sam@gentoo.org>\nDate:   Mon Dec 9 23:11:25 2024 +0000\n\n    malloc: add indirection for malloc(-like) functions in tests [BZ #32366]\n    \n    GCC 15 introduces allocation dead code removal (DCE) for PR117370 in\n    r15-5255-g7828dc070510f8. This breaks various glibc tests which want\n    to assert various properties of the allocator without doing anything\n    obviously useful with the allocated memory.\n    \n    Alexander Monakov rightly pointed out that we can and should do better\n    than passing -fno-malloc-dce to paper over the problem. Not least because\n    GCC 14 already does such DCE where there's no testing of malloc's return\n    value against NULL, and LLVM has such optimisations too.\n    \n    Handle this by providing malloc (and friends) wrappers with a volatile\n    function pointer to obscure that we're calling malloc (et. al) from the\n    compiler.\n    \n    Reviewed-by: Paul Eggert <eggert@cs.ucla.edu>\n    (cherry picked from commit a9944a52c967ce76a5894c30d0274b824df43c7a)\n\ndiff --git a/malloc/tst-aligned-alloc.c b/malloc/tst-aligned-alloc.c\nindex 91167d1392..b0f05a8fec 100644\n--- a/malloc/tst-aligned-alloc.c\n+++ b/malloc/tst-aligned-alloc.c\n@@ -25,6 +25,8 @@\n #include <libc-diag.h>\n #include <support/check.h>\n \n+#include \"tst-malloc-aux.h\"\n+\n static int\n do_test (void)\n {\ndiff --git a/malloc/tst-compathooks-off.c b/malloc/tst-compathooks-off.c\nindex d0106f3fb7..4cce6e5a80 100644\n--- a/malloc/tst-compathooks-off.c\n+++ b/malloc/tst-compathooks-off.c\n@@ -25,6 +25,8 @@\n #include <support/check.h>\n #include <support/support.h>\n \n+#include \"tst-malloc-aux.h\"\n+\n extern void (*volatile __free_hook) (void *, const void *);\n extern void *(*volatile __malloc_hook)(size_t, const void *);\n extern void *(*volatile __realloc_hook)(void *, size_t, const void *);\ndiff --git a/malloc/tst-malloc-aux.h b/malloc/tst-malloc-aux.h\nnew file mode 100644\nindex 0000000000..54908b4a24\n--- /dev/null\n+++ b/malloc/tst-malloc-aux.h\n@@ -0,0 +1,41 @@\n+/* Wrappers for malloc-like functions to allow testing the implementation\n+   without optimization.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public License as\n+   published by the Free Software Foundation; either version 2.1 of the\n+   License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; see the file COPYING.LIB.  If\n+   not, see <https://www.gnu.org/licenses/>.  */\n+\n+#ifndef TST_MALLOC_AUX_H\n+#define TST_MALLOC_AUX_H\n+\n+#include <stddef.h>\n+#include <stdlib.h>\n+\n+static void *(*volatile aligned_alloc_indirect)(size_t, size_t) = aligned_alloc;\n+static void *(*volatile calloc_indirect)(size_t, size_t) = calloc;\n+static void *(*volatile malloc_indirect)(size_t) = malloc;\n+static void *(*volatile realloc_indirect)(void*, size_t) = realloc;\n+\n+#undef aligned_alloc\n+#undef calloc\n+#undef malloc\n+#undef realloc\n+\n+#define aligned_alloc aligned_alloc_indirect\n+#define calloc calloc_indirect\n+#define malloc malloc_indirect\n+#define realloc realloc_indirect\n+\n+#endif /* TST_MALLOC_AUX_H */\ndiff --git a/malloc/tst-malloc-check.c b/malloc/tst-malloc-check.c\nindex fde8863ad7..cc88bff3b3 100644\n--- a/malloc/tst-malloc-check.c\n+++ b/malloc/tst-malloc-check.c\n@@ -20,6 +20,8 @@\n #include <stdlib.h>\n #include <libc-diag.h>\n \n+#include \"tst-malloc-aux.h\"\n+\n static int errors = 0;\n \n static void\ndiff --git a/malloc/tst-malloc-too-large.c b/malloc/tst-malloc-too-large.c\nindex 8e9e0d5fa2..2b91377e54 100644\n--- a/malloc/tst-malloc-too-large.c\n+++ b/malloc/tst-malloc-too-large.c\n@@ -43,6 +43,7 @@\n #include <unistd.h>\n #include <sys/param.h>\n \n+#include \"tst-malloc-aux.h\"\n \n /* This function prepares for each 'too-large memory allocation' test by\n    performing a small successful malloc/free and resetting errno prior to\ndiff --git a/malloc/tst-malloc.c b/malloc/tst-malloc.c\nindex f7a6e4654c..68af399022 100644\n--- a/malloc/tst-malloc.c\n+++ b/malloc/tst-malloc.c\n@@ -22,6 +22,8 @@\n #include <libc-diag.h>\n #include <time.h>\n \n+#include \"tst-malloc-aux.h\"\n+\n static int errors = 0;\n \n static void\ndiff --git a/malloc/tst-realloc.c b/malloc/tst-realloc.c\nindex f50499ecb1..74a28fb45e 100644\n--- a/malloc/tst-realloc.c\n+++ b/malloc/tst-realloc.c\n@@ -23,6 +23,8 @@\n #include <libc-diag.h>\n #include <support/check.h>\n \n+#include \"tst-malloc-aux.h\"\n+\n static int\n do_test (void)\n {\ndiff --git a/support/support.h b/support/support.h\nindex ba21ec9b5a..1a77f79793 100644\n--- a/support/support.h\n+++ b/support/support.h\n@@ -113,7 +113,7 @@ void *xposix_memalign (size_t alignment, size_t n)\n   __attribute_malloc__ __attribute_alloc_align__ ((1))\n   __attribute_alloc_size__ ((2)) __attr_dealloc_free __returns_nonnull;\n char *xasprintf (const char *format, ...)\n-  __attribute__ ((format (printf, 1, 2), malloc)) __attr_dealloc_free\n+  __attribute__ ((format (printf, 1, 2), __malloc__)) __attr_dealloc_free\n   __returns_nonnull;\n char *xstrdup (const char *) __attr_dealloc_free __returns_nonnull;\n char *xstrndup (const char *, size_t) __attr_dealloc_free __returns_nonnull;\ndiff --git a/test-skeleton.c b/test-skeleton.c\nindex ae185a4f28..690f26e7cf 100644\n--- a/test-skeleton.c\n+++ b/test-skeleton.c\n@@ -27,7 +27,6 @@\n #include <errno.h>\n #include <fcntl.h>\n #include <getopt.h>\n-#include <malloc.h>\n #include <paths.h>\n #include <search.h>\n #include <signal.h>\n\ncommit 846e64257e5fc9b5b723c2eec2b7155ab5944d1f\nAuthor: Adhemerval Zanella <adhemerval.zanella@linaro.org>\nDate:   Fri Sep 13 11:10:05 2024 -0300\n\n    support: Make support_process_state_wait return the found state\n    \n    So caller can check which state was found if multiple ones are\n    asked.\n    \n    Checked on x86_64-linux-gnu.\n    \n    Reviewed-by: Florian Weimer <fweimer@redhat.com>\n    (cherry picked from commit 38316352e0f742f3a2b5816a61a4b603cb5573f8)\n    (cherry picked from commit 2e38c5a090b3a54040b6e508d42e5a76e492c6e8)\n\ndiff --git a/support/process_state.h b/support/process_state.h\nindex 1cf902e91b..9541d8c343 100644\n--- a/support/process_state.h\n+++ b/support/process_state.h\n@@ -31,13 +31,16 @@ enum support_process_state\n   support_process_state_dead         = 0x20,  /* X (dead).  */\n   support_process_state_zombie       = 0x40,  /* Z (zombie).  */\n   support_process_state_parked       = 0x80,  /* P (parked).  */\n+  support_process_state_invalid      = 0x100  /* Invalid state.  */\n };\n \n /* Wait for process PID to reach state STATE.  It can be a combination of\n    multiple possible states ('process_state_running | process_state_sleeping')\n    where the function return when any of these state are observed.\n    For an invalid state not represented by SUPPORT_PROCESS_STATE, it fallbacks\n-   to a 2 second sleep.  */\n-void support_process_state_wait (pid_t pid, enum support_process_state state);\n+   to a 2 second sleep.\n+   Return the found process state.  */\n+enum support_process_state\n+support_process_state_wait (pid_t pid, enum support_process_state state);\n \n #endif\ndiff --git a/support/support_process_state.c b/support/support_process_state.c\nindex 062335234f..ae8e0a531c 100644\n--- a/support/support_process_state.c\n+++ b/support/support_process_state.c\n@@ -27,7 +27,7 @@\n #include <support/xstdio.h>\n #include <support/check.h>\n \n-void\n+enum support_process_state\n support_process_state_wait (pid_t pid, enum support_process_state state)\n {\n #ifdef __linux__\n@@ -75,7 +75,7 @@ support_process_state_wait (pid_t pid, enum support_process_state state)\n \t  {\n \t    free (line);\n \t    xfclose (fstatus);\n-\t    return;\n+\t    return process_states[i].s;\n \t  }\n \n       rewind (fstatus);\n@@ -90,4 +90,6 @@ support_process_state_wait (pid_t pid, enum support_process_state state)\n   /* Fallback to nanosleep if an invalid state is found.  */\n #endif\n   nanosleep (&(struct timespec) { 1, 0 }, NULL);\n+\n+  return support_process_state_invalid;\n }\ndiff --git a/support/tst-support-process_state.c b/support/tst-support-process_state.c\nindex d73269320f..4a88eae3a7 100644\n--- a/support/tst-support-process_state.c\n+++ b/support/tst-support-process_state.c\n@@ -68,28 +68,39 @@ do_test (void)\n   if (test_verbose)\n     printf (\"info: waiting pid %d, state_stopped/state_tracing_stop\\n\",\n \t    (int) pid);\n-  support_process_state_wait (pid, stop_state);\n+  {\n+    enum support_process_state state =\n+      support_process_state_wait (pid, stop_state);\n+    TEST_VERIFY (state == support_process_state_stopped\n+\t\t || state == support_process_state_tracing_stop);\n+  }\n \n   if (kill (pid, SIGCONT) != 0)\n     FAIL_RET (\"kill (%d, SIGCONT): %m\\n\", pid);\n \n   if (test_verbose)\n     printf (\"info: waiting pid %d, state_sleeping\\n\", (int) pid);\n-  support_process_state_wait (pid, support_process_state_sleeping);\n+  TEST_COMPARE (support_process_state_wait (pid,\n+\t\t\t\t\t    support_process_state_sleeping),\n+\t\tsupport_process_state_sleeping);\n \n   if (kill (pid, SIGUSR1) != 0)\n     FAIL_RET (\"kill (%d, SIGUSR1): %m\\n\", pid);\n \n   if (test_verbose)\n     printf (\"info: waiting pid %d, state_running\\n\", (int) pid);\n-  support_process_state_wait (pid, support_process_state_running);\n+  TEST_COMPARE (support_process_state_wait (pid,\n+\t\t\t\t\t    support_process_state_running),\n+\t\tsupport_process_state_running);\n \n   if (kill (pid, SIGKILL) != 0)\n     FAIL_RET (\"kill (%d, SIGKILL): %m\\n\", pid);\n \n   if (test_verbose)\n     printf (\"info: waiting pid %d, state_zombie\\n\", (int) pid);\n-  support_process_state_wait (pid, support_process_state_zombie);\n+  TEST_COMPARE (support_process_state_wait (pid,\n+\t\t\t\t\t    support_process_state_zombie),\n+\t\tsupport_process_state_zombie);;\n \n   siginfo_t info;\n   int r = waitid (P_PID, pid, &info, WEXITED);\n\ncommit 11d9f49cebe64939f50e16a59c9ebefb80a294ab\nAuthor: Adhemerval Zanella <adhemerval.zanella@linaro.org>\nDate:   Fri Sep 13 11:11:56 2024 -0300\n\n    sparc: Fix restartable syscalls (BZ 32173)\n    \n    The commit 'sparc: Use Linux kABI for syscall return'\n    (86c5d2cf0ce046279baddc7faa27da71f1a89fde) did not take into account\n    a subtle sparc syscall kABI constraint.  For syscalls that might block\n    indefinitely, on an interrupt (like SIGCONT) the kernel will set the\n    instruction pointer to just before the syscall:\n    \n    arch/sparc/kernel/signal_64.c\n    476 static void do_signal(struct pt_regs *regs, unsigned long orig_i0)\n    477 {\n    [...]\n    525                 if (restart_syscall) {\n    526                         switch (regs->u_regs[UREG_I0]) {\n    527                         case ERESTARTNOHAND:\n    528                         case ERESTARTSYS:\n    529                         case ERESTARTNOINTR:\n    530                                 /* replay the system call when we are done */\n    531                                 regs->u_regs[UREG_I0] = orig_i0;\n    532                                 regs->tpc -= 4;\n    533                                 regs->tnpc -= 4;\n    534                                 pt_regs_clear_syscall(regs);\n    535                                 fallthrough;\n    536                         case ERESTART_RESTARTBLOCK:\n    537                                 regs->u_regs[UREG_G1] = __NR_restart_syscall;\n    538                                 regs->tpc -= 4;\n    539                                 regs->tnpc -= 4;\n    540                                 pt_regs_clear_syscall(regs);\n    541                         }\n    \n    However, on a SIGCONT it seems that 'g1' register is being clobbered after the\n    syscall returns.  Before 86c5d2cf0ce046279, the 'g1' was always placed jus\n    before the 'ta' instruction which then reloads the syscall number and restarts\n    the syscall.\n    \n    On master, where 'g1' might be placed before 'ta':\n    \n      $ cat test.c\n      #include <unistd.h>\n    \n      int main ()\n      {\n        pause ();\n      }\n      $ gcc test.c -o test\n      $ strace -f ./t\n      [...]\n      ppoll(NULL, 0, NULL, NULL, 0\n    \n    On another terminal\n    \n      $ kill -STOP 2262828\n    \n      $ strace -f ./t\n      [...]\n      --- SIGSTOP {si_signo=SIGSTOP, si_code=SI_USER, si_pid=2521813, si_uid=8289} ---\n      --- stopped by SIGSTOP ---\n    \n    And then\n    \n      $ kill -CONT 2262828\n    \n    Results in:\n    \n      --- SIGCONT {si_signo=SIGCONT, si_code=SI_USER, si_pid=2521813, si_uid=8289} ---\n      restart_syscall(<... resuming interrupted ppoll ...>) = -1 EINTR (Interrupted system call)\n    \n    Where the expected behaviour would be:\n    \n      $ strace -f ./t\n      [...]\n      ppoll(NULL, 0, NULL, NULL, 0)           = ? ERESTARTNOHAND (To be restarted if no handler)\n      --- SIGSTOP {si_signo=SIGSTOP, si_code=SI_USER, si_pid=2521813, si_uid=8289} ---\n      --- stopped by SIGSTOP ---\n      --- SIGCONT {si_signo=SIGCONT, si_code=SI_USER, si_pid=2521813, si_uid=8289} ---\n      ppoll(NULL, 0, NULL, NULL, 0\n    \n    Just moving the 'g1' setting near the syscall asm is not suffice,\n    the compiler might optimize it away (as I saw on cancellation.c by\n    trying this fix).  Instead, I have change the inline asm to put the\n    'g1' setup in ithe asm block.  This would require to change the asm\n    constraint for INTERNAL_SYSCALL_NCS, since the syscall number is not\n    constant.\n    \n    Checked on sparc64-linux-gnu.\n    \n    Reported-by: René Rebe <rene@exactcode.de>\n    Tested-by: Sam James <sam@gentoo.org>\n    Reviewed-by: Sam James <sam@gentoo.org>\n    (cherry picked from commit 2c1903cbbac0022153a67776f474c221250ad6ed)\n    (cherry picked from commit 1cd7e13289b91e1495a1865c1f678196d1bb7be4)\n\ndiff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile\nindex 59998c7af4..34890ef69a 100644\n--- a/sysdeps/unix/sysv/linux/Makefile\n+++ b/sysdeps/unix/sysv/linux/Makefile\n@@ -227,6 +227,7 @@ tests += \\\n   tst-scm_rights \\\n   tst-sigtimedwait \\\n   tst-sync_file_range \\\n+  tst-syscall-restart \\\n   tst-sysconf-iov_max \\\n   tst-sysvmsg-linux \\\n   tst-sysvsem-linux \\\ndiff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h\nindex d2d68f5312..c2ffbb5c8f 100644\n--- a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h\n+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h\n@@ -107,6 +107,7 @@ ENTRY(name);\t\t\t\t\t\\\n #else  /* __ASSEMBLER__ */\n \n #define __SYSCALL_STRING\t\t\t\t\t\t\\\n+\t\"mov\t%[scn], %%g1;\"\t\t\t\t\t\t\\\n \t\"ta\t0x10;\"\t\t\t\t\t\t\t\\\n \t\"bcc\t1f;\"\t\t\t\t\t\t\t\\\n \t\" nop;\"\t\t\t\t\t\t\t\t\\\n@@ -114,7 +115,7 @@ ENTRY(name);\t\t\t\t\t\\\n \t\"1:\"\n \n #define __SYSCALL_CLOBBERS\t\t\t\t\t\t\\\n-\t\"f0\", \"f1\", \"f2\", \"f3\", \"f4\", \"f5\", \"f6\", \"f7\",\t\t\t\\\n+\t\"g1\", \"f0\", \"f1\", \"f2\", \"f3\", \"f4\", \"f5\", \"f6\", \"f7\",\t\t\\\n \t\"f8\", \"f9\", \"f10\", \"f11\", \"f12\", \"f13\", \"f14\", \"f15\",\t\t\\\n \t\"f16\", \"f17\", \"f18\", \"f19\", \"f20\", \"f21\", \"f22\", \"f23\",\t\t\\\n \t\"f24\", \"f25\", \"f26\", \"f27\", \"f28\", \"f29\", \"f30\", \"f31\",\t\t\\\ndiff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h\nindex 96047424e9..5598fab08a 100644\n--- a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h\n+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h\n@@ -106,6 +106,7 @@ ENTRY(name);\t\t\t\t\t\\\n #else  /* __ASSEMBLER__ */\n \n #define __SYSCALL_STRING\t\t\t\t\t\t\\\n+\t\"mov\t%[scn], %%g1;\"\t\t\t\t\t\t\\\n \t\"ta\t0x6d;\"\t\t\t\t\t\t\t\\\n \t\"bcc,pt\t%%xcc, 1f;\"\t\t\t\t\t\t\\\n \t\" nop;\"\t\t\t\t\t\t\t\t\\\n@@ -113,7 +114,7 @@ ENTRY(name);\t\t\t\t\t\\\n \t\"1:\"\n \n #define __SYSCALL_CLOBBERS\t\t\t\t\t\t\\\n-\t\"f0\", \"f1\", \"f2\", \"f3\", \"f4\", \"f5\", \"f6\", \"f7\",\t\t\t\\\n+\t\"g1\", \"f0\", \"f1\", \"f2\", \"f3\", \"f4\", \"f5\", \"f6\", \"f7\",\t\t\\\n \t\"f8\", \"f9\", \"f10\", \"f11\", \"f12\", \"f13\", \"f14\", \"f15\",\t\t\\\n \t\"f16\", \"f17\", \"f18\", \"f19\", \"f20\", \"f21\", \"f22\", \"f23\",\t\t\\\n \t\"f24\", \"f25\", \"f26\", \"f27\", \"f28\", \"f29\", \"f30\", \"f31\",\t\t\\\ndiff --git a/sysdeps/unix/sysv/linux/sparc/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sysdep.h\nindex dcabb57fe2..c287740a8c 100644\n--- a/sysdeps/unix/sysv/linux/sparc/sysdep.h\n+++ b/sysdeps/unix/sysv/linux/sparc/sysdep.h\n@@ -50,97 +50,109 @@\n \n #undef INTERNAL_SYSCALL_NCS\n #define INTERNAL_SYSCALL_NCS(name, nr, args...) \\\n-  internal_syscall##nr(__SYSCALL_STRING, name, args)\n+  _internal_syscall##nr(__SYSCALL_STRING, \"p\", name, args)\n \n-#define internal_syscall0(string,name,dummy...)\t\t\t\\\n+#define _internal_syscall0(string,nc,name,dummy...)\t\\\n ({\t\t\t\t\t\t\t\t\t\\\n-\tregister long int __g1 __asm__ (\"g1\") = (name);\t\t\t\\\n \tregister long __o0 __asm__ (\"o0\");\t\t\t\t\\\n+\tlong int _name = (long int) (name);\t\t\t\t\\\n \t__asm __volatile (string : \"=r\" (__o0) :\t\t\t\\\n-\t\t\t  \"r\" (__g1) :\t\t\t\t\t\\\n+\t\t\t  [scn] nc (_name) :\t\t\t\t\\\n \t\t\t  __SYSCALL_CLOBBERS);\t\t\t\t\\\n \t__o0;\t\t\t\t\t\t\t\t\\\n })\n+#define internal_syscall0(string,name,args...)\t\t\t\t\\\n+  _internal_syscall0(string, \"i\", name, args)\n \n-#define internal_syscall1(string,name,arg1)\t\t\t\t\\\n+#define _internal_syscall1(string,nc,name,arg1)\t\t\t\t\\\n ({\t\t\t\t\t\t\t\t\t\\\n \tlong int _arg1 = (long int) (arg1);\t\t\t\t\\\n-\tregister long int __g1 __asm__(\"g1\") = (name);\t\t\t\\\n+\tlong int _name = (long int) (name);\t\t\t\t\\\n \tregister long int  __o0 __asm__ (\"o0\") = _arg1;\t\t\t\\\n-\t__asm __volatile (string : \"=r\" (__o0) :\t\t\t\\\n-\t\t\t  \"r\" (__g1), \"0\" (__o0) :\t\t\t\\\n+\t__asm __volatile (string : \"+r\" (__o0) :\t\t\t\\\n+\t\t\t  [scn] nc (_name) :\t\t\t\t\\\n \t\t\t  __SYSCALL_CLOBBERS);\t\t\t\t\\\n \t__o0;\t\t\t\t\t\t\t\t\\\n })\n+#define internal_syscall1(string,name,args...)\t\t\t\t\\\n+  _internal_syscall1(string, \"i\", name, args)\n \n-#define internal_syscall2(string,name,arg1,arg2)\t\t\t\\\n+#define _internal_syscall2(string,nc,name,arg1,arg2)\t\t\t\\\n ({\t\t\t\t\t\t\t\t\t\\\n \tlong int _arg1 = (long int) (arg1);\t\t\t\t\\\n \tlong int _arg2 = (long int) (arg2);\t\t\t\t\\\n-\tregister long int __g1 __asm__(\"g1\") = (name);\t\t\t\\\n+\tlong int _name = (long int) (name);\t\t\t\t\\\n \tregister long int __o0 __asm__ (\"o0\") = _arg1;\t\t\t\\\n \tregister long int __o1 __asm__ (\"o1\") = _arg2;\t\t\t\\\n-\t__asm __volatile (string : \"=r\" (__o0) :\t\t\t\\\n-\t\t\t  \"r\" (__g1), \"0\" (__o0), \"r\" (__o1) :\t\t\\\n+\t__asm __volatile (string : \"+r\" (__o0) :\t\t\t\\\n+\t\t\t  [scn] nc (_name), \"r\" (__o1) :\t\t\\\n \t\t\t  __SYSCALL_CLOBBERS);\t\t\t\t\\\n \t__o0;\t\t\t\t\t\t\t\t\\\n })\n+#define internal_syscall2(string,name,args...)\t\t\t\t\\\n+  _internal_syscall2(string, \"i\", name, args)\n \n-#define internal_syscall3(string,name,arg1,arg2,arg3)\t\t\t\\\n+#define _internal_syscall3(string,nc,name,arg1,arg2,arg3)\t\t\\\n ({\t\t\t\t\t\t\t\t\t\\\n \tlong int _arg1 = (long int) (arg1);\t\t\t\t\\\n \tlong int _arg2 = (long int) (arg2);\t\t\t\t\\\n \tlong int _arg3 = (long int) (arg3);\t\t\t\t\\\n-\tregister long int __g1 __asm__(\"g1\") = (name);\t\t\t\\\n+\tlong int _name = (long int) (name);\t\t\t\t\\\n \tregister long int __o0 __asm__ (\"o0\") = _arg1;\t\t\t\\\n \tregister long int __o1 __asm__ (\"o1\") = _arg2;\t\t\t\\\n \tregister long int __o2 __asm__ (\"o2\") = _arg3;\t\t\t\\\n-\t__asm __volatile (string : \"=r\" (__o0) :\t\t\t\\\n-\t\t\t  \"r\" (__g1), \"0\" (__o0), \"r\" (__o1),\t\t\\\n+\t__asm __volatile (string : \"+r\" (__o0) :\t\t\t\\\n+\t\t\t  [scn] nc (_name), \"r\" (__o1),\t\t\t\\\n \t\t\t  \"r\" (__o2) :\t\t\t\t\t\\\n \t\t\t  __SYSCALL_CLOBBERS);\t\t\t\t\\\n \t__o0;\t\t\t\t\t\t\t\t\\\n })\n+#define internal_syscall3(string,name,args...)\t\t\t\t\\\n+  _internal_syscall3(string, \"i\", name, args)\n \n-#define internal_syscall4(string,name,arg1,arg2,arg3,arg4)\t\t\\\n+#define _internal_syscall4(string,nc,name,arg1,arg2,arg3,arg4)\t\t\\\n ({\t\t\t\t\t\t\t\t\t\\\n \tlong int _arg1 = (long int) (arg1);\t\t\t\t\\\n \tlong int _arg2 = (long int) (arg2);\t\t\t\t\\\n \tlong int _arg3 = (long int) (arg3);\t\t\t\t\\\n \tlong int _arg4 = (long int) (arg4);\t\t\t\t\\\n-\tregister long int __g1 __asm__(\"g1\") = (name);\t\t\t\\\n+\tlong int _name = (long int) (name);\t\t\t\t\\\n \tregister long int __o0 __asm__ (\"o0\") = _arg1;\t\t\t\\\n \tregister long int __o1 __asm__ (\"o1\") = _arg2;\t\t\t\\\n \tregister long int __o2 __asm__ (\"o2\") = _arg3;\t\t\t\\\n \tregister long int __o3 __asm__ (\"o3\") = _arg4;\t\t\t\\\n-\t__asm __volatile (string : \"=r\" (__o0) :\t\t\t\\\n-\t\t\t  \"r\" (__g1), \"0\" (__o0), \"r\" (__o1),\t\t\\\n+\t__asm __volatile (string : \"+r\" (__o0) :\t\t\t\\\n+\t\t\t  [scn] nc (_name), \"r\" (__o1),\t\t\t\\\n \t\t\t  \"r\" (__o2), \"r\" (__o3) :\t\t\t\\\n \t\t\t  __SYSCALL_CLOBBERS);\t\t\t\t\\\n \t__o0;\t\t\t\t\t\t\t\t\\\n })\n+#define internal_syscall4(string,name,args...)\t\t\t\t\\\n+  _internal_syscall4(string, \"i\", name, args)\n \n-#define internal_syscall5(string,name,arg1,arg2,arg3,arg4,arg5)\t\t\\\n+#define _internal_syscall5(string,nc,name,arg1,arg2,arg3,arg4,arg5)\t\\\n ({\t\t\t\t\t\t\t\t\t\\\n \tlong int _arg1 = (long int) (arg1);\t\t\t\t\\\n \tlong int _arg2 = (long int) (arg2);\t\t\t\t\\\n \tlong int _arg3 = (long int) (arg3);\t\t\t\t\\\n \tlong int _arg4 = (long int) (arg4);\t\t\t\t\\\n \tlong int _arg5 = (long int) (arg5);\t\t\t\t\\\n-\tregister long int __g1 __asm__(\"g1\") = (name);\t\t\t\\\n+\tlong int _name = (long int) (name);\t\t\t\t\\\n \tregister long int __o0 __asm__ (\"o0\") = _arg1;\t\t\t\\\n \tregister long int __o1 __asm__ (\"o1\") = _arg2;\t\t\t\\\n \tregister long int __o2 __asm__ (\"o2\") = _arg3;\t\t\t\\\n \tregister long int __o3 __asm__ (\"o3\") = _arg4;\t\t\t\\\n \tregister long int __o4 __asm__ (\"o4\") = _arg5;\t\t\t\\\n-\t__asm __volatile (string : \"=r\" (__o0) :\t\t\t\\\n-\t\t\t  \"r\" (__g1), \"0\" (__o0), \"r\" (__o1),\t\t\\\n+\t__asm __volatile (string : \"+r\" (__o0) :\t\t\t\\\n+\t\t\t  [scn] nc (_name), \"r\" (__o1),\t\t\t\\\n \t\t\t  \"r\" (__o2), \"r\" (__o3), \"r\" (__o4) :\t\t\\\n \t\t\t  __SYSCALL_CLOBBERS);\t\t\t\t\\\n \t__o0;\t\t\t\t\t\t\t\t\\\n })\n+#define internal_syscall5(string,name,args...)\t\t\t\t\\\n+  _internal_syscall5(string, \"i\", name, args)\n \n-#define internal_syscall6(string,name,arg1,arg2,arg3,arg4,arg5,arg6)\t\\\n+#define _internal_syscall6(string,nc,name,arg1,arg2,arg3,arg4,arg5,arg6)\\\n ({\t\t\t\t\t\t\t\t\t\\\n \tlong int _arg1 = (long int) (arg1);\t\t\t\t\\\n \tlong int _arg2 = (long int) (arg2);\t\t\t\t\\\n@@ -148,20 +160,22 @@\n \tlong int _arg4 = (long int) (arg4);\t\t\t\t\\\n \tlong int _arg5 = (long int) (arg5);\t\t\t\t\\\n \tlong int _arg6 = (long int) (arg6);\t\t\t\t\\\n-\tregister long int __g1 __asm__(\"g1\") = (name);\t\t\t\\\n+\tlong int _name = (long int) (name);\t\t\t\t\\\n \tregister long int __o0 __asm__ (\"o0\") = _arg1;\t\t\t\\\n \tregister long int __o1 __asm__ (\"o1\") = _arg2;\t\t\t\\\n \tregister long int __o2 __asm__ (\"o2\") = _arg3;\t\t\t\\\n \tregister long int __o3 __asm__ (\"o3\") = _arg4;\t\t\t\\\n \tregister long int __o4 __asm__ (\"o4\") = _arg5;\t\t\t\\\n \tregister long int __o5 __asm__ (\"o5\") = _arg6;\t\t\t\\\n-\t__asm __volatile (string : \"=r\" (__o0) :\t\t\t\\\n-\t\t\t  \"r\" (__g1), \"0\" (__o0), \"r\" (__o1),\t\t\\\n+\t__asm __volatile (string : \"+r\" (__o0) :\t\t\t\\\n+\t\t\t  [scn] nc (_name), \"r\" (__o1),\t\t\t\\\n \t\t\t  \"r\" (__o2), \"r\" (__o3), \"r\" (__o4),\t\t\\\n \t\t\t  \"r\" (__o5) :\t\t\t\t\t\\\n \t\t\t  __SYSCALL_CLOBBERS);\t\t\t\t\\\n \t__o0;\t\t\t\t\t\t\t\t\\\n })\n+#define internal_syscall6(string,name,args...)\t\t\t\t\\\n+  _internal_syscall6(string, \"i\", name, args)\n \n #define INLINE_CLONE_SYSCALL(arg1,arg2,arg3,arg4,arg5)\t\t\t\\\n ({\t\t\t\t\t\t\t\t\t\\\n@@ -170,15 +184,15 @@\n \tlong int _arg3 = (long int) (arg3);\t\t\t\t\\\n \tlong int _arg4 = (long int) (arg4);\t\t\t\t\\\n \tlong int _arg5 = (long int) (arg5);\t\t\t\t\\\n+\tlong int _name = __NR_clone;\t\t\t\t\t\\\n \tregister long int __o0 __asm__ (\"o0\") = _arg1;\t\t\t\\\n \tregister long int __o1 __asm__ (\"o1\") = _arg2;\t\t\t\\\n \tregister long int __o2 __asm__ (\"o2\") = _arg3;\t\t\t\\\n \tregister long int __o3 __asm__ (\"o3\") = _arg4;\t\t\t\\\n \tregister long int __o4 __asm__ (\"o4\") = _arg5;\t\t\t\\\n-\tregister long int __g1 __asm__ (\"g1\") = __NR_clone;\t\t\\\n \t__asm __volatile (__SYSCALL_STRING :\t\t\t\t\\\n \t\t\t  \"=r\" (__o0), \"=r\" (__o1) :\t\t\t\\\n-\t\t\t  \"r\" (__g1), \"0\" (__o0), \"1\" (__o1),\t\t\\\n+\t\t\t  [scn] \"i\" (_name), \"0\" (__o0), \"1\" (__o1),\t\\\n \t\t\t  \"r\" (__o2), \"r\" (__o3), \"r\" (__o4) :\t\t\\\n \t\t\t  __SYSCALL_CLOBBERS);\t\t\t\t\\\n \tif (__glibc_unlikely ((unsigned long int) (__o0) > -4096UL))\t\\\ndiff --git a/sysdeps/unix/sysv/linux/tst-syscall-restart.c b/sysdeps/unix/sysv/linux/tst-syscall-restart.c\nnew file mode 100644\nindex 0000000000..84a8a41b5c\n--- /dev/null\n+++ b/sysdeps/unix/sysv/linux/tst-syscall-restart.c\n@@ -0,0 +1,112 @@\n+/* Test if a syscall is correctly restarted.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <support/xsignal.h>\n+#include <support/check.h>\n+#include <support/process_state.h>\n+#include <support/xunistd.h>\n+#include <support/xthread.h>\n+#include <sys/wait.h>\n+\n+static int\n+check_pid (pid_t pid)\n+{\n+  /* Wait until the child has called pause and it blocking on kernel.  */\n+  support_process_state_wait (pid, support_process_state_sleeping);\n+\n+  TEST_COMPARE (kill (pid, SIGSTOP), 0);\n+\n+  /* Adding process_state_tracing_stop ('t') allows the test to work under\n+     trace programs such as ptrace.  */\n+  support_process_state_wait (pid, support_process_state_stopped\n+\t\t\t\t   | support_process_state_tracing_stop);\n+\n+  TEST_COMPARE (kill (pid, SIGCONT), 0);\n+\n+  enum support_process_state state\n+    = support_process_state_wait (pid, support_process_state_sleeping\n+\t\t\t\t       | support_process_state_zombie);\n+\n+  TEST_COMPARE (state, support_process_state_sleeping);\n+\n+  TEST_COMPARE (kill (pid, SIGTERM), 0);\n+\n+  siginfo_t info;\n+  TEST_COMPARE (waitid (P_PID, pid, &info, WEXITED), 0);\n+  TEST_COMPARE (info.si_signo, SIGCHLD);\n+  TEST_COMPARE (info.si_code, CLD_KILLED);\n+  TEST_COMPARE (info.si_status, SIGTERM);\n+  TEST_COMPARE (info.si_pid, pid);\n+\n+  return 0;\n+}\n+\n+static void *\n+tf (void *)\n+{\n+  pause ();\n+  return NULL;\n+}\n+\n+static void\n+child_mt (void)\n+{\n+  /* Let only the created thread to handle signals.  */\n+  sigset_t set;\n+  sigfillset (&set);\n+  xpthread_sigmask (SIG_BLOCK, &set, NULL);\n+\n+  sigdelset (&set, SIGSTOP);\n+  sigdelset (&set, SIGCONT);\n+  sigdelset (&set, SIGTERM);\n+\n+  pthread_attr_t attr;\n+  xpthread_attr_init (&attr);\n+  TEST_COMPARE (pthread_attr_setsigmask_np (&attr, &set), 0);\n+\n+  xpthread_join (xpthread_create (&attr, tf, NULL));\n+}\n+\n+static void\n+do_test_syscall (bool multithread)\n+{\n+  pid_t pid = xfork ();\n+  if (pid == 0)\n+    {\n+      if (multithread)\n+\tchild_mt ();\n+      else\n+\tpause ();\n+      _exit (127);\n+    }\n+\n+  check_pid (pid);\n+}\n+\n+static int\n+do_test (void)\n+{\n+  /* Check for both single and multi thread, since they use different syscall\n+     mechanisms.  */\n+  do_test_syscall (false);\n+  do_test_syscall (true);\n+\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\n\ncommit 9af64ca64c532b7e42a40b48fe5e01726a9b7943\nAuthor: H.J. Lu <hjl.tools@gmail.com>\nDate:   Thu Dec 5 08:39:44 2024 +0800\n\n    math: Exclude internal math symbols for tests [BZ #32414]\n    \n    Since internal tests don't have access to internal symbols in libm,\n    exclude them for internal tests.  Also make tst-strtod5 and tst-strtod5i\n    depend on $(libm) to support older versions of GCC which can't inline\n    copysign family functions.  This fixes BZ #32414.\n    \n    Signed-off-by: H.J. Lu <hjl.tools@gmail.com>\n    Reviewed-by: Sunil K Pandey <skpgkp2@gmail.com>\n    (cherry picked from commit 5df09b444835fca6e64b3d4b4a5beb19b3b2ba21)\n\ndiff --git a/include/math.h b/include/math.h\nindex fa11a710a6..035fd160ff 100644\n--- a/include/math.h\n+++ b/include/math.h\n@@ -130,7 +130,10 @@ fabsf128 (_Float128 x)\n }\n # endif\n \n-# if !(defined __FINITE_MATH_ONLY__ && __FINITE_MATH_ONLY__ > 0)\n+\n+/* NB: Internal tests don't have access to internal symbols.  */\n+# if !IS_IN (testsuite_internal) \\\n+     && !(defined __FINITE_MATH_ONLY__ && __FINITE_MATH_ONLY__ > 0)\n #  ifndef NO_MATH_REDIRECT\n /* Declare some functions for use within GLIBC.  Compilers typically\n    inline those functions as a single instruction.  Use an asm to\ndiff --git a/stdlib/Makefile b/stdlib/Makefile\nindex 8b0ac63ddb..8213fa83ef 100644\n--- a/stdlib/Makefile\n+++ b/stdlib/Makefile\n@@ -603,6 +603,8 @@ $(objpfx)bug-strtod2: $(libm)\n $(objpfx)tst-strtod-round: $(libm)\n $(objpfx)tst-tininess: $(libm)\n $(objpfx)tst-strtod-underflow: $(libm)\n+$(objpfx)tst-strtod5: $(libm)\n+$(objpfx)tst-strtod5i: $(libm)\n $(objpfx)tst-strtod6: $(libm)\n $(objpfx)tst-strtod-nan-locale: $(libm)\n $(objpfx)tst-strtod-nan-sign: $(libm)\n\ncommit 0b39fe801208e805cc911f64a2fdd25d04b7151e\nAuthor: Adhemerval Zanella <adhemerval.zanella@linaro.org>\nDate:   Fri Oct 18 08:48:22 2024 -0300\n\n    linux: Fix tst-syscall-restart.c on old gcc (BZ 32283)\n    \n    To avoid a parameter name omitted error.\n    \n    (cherry picked from commit ab564362d0470d10947c24155ec048c4e14a009d)\n\ndiff --git a/sysdeps/unix/sysv/linux/tst-syscall-restart.c b/sysdeps/unix/sysv/linux/tst-syscall-restart.c\nindex 84a8a41b5c..0ee7dc8517 100644\n--- a/sysdeps/unix/sysv/linux/tst-syscall-restart.c\n+++ b/sysdeps/unix/sysv/linux/tst-syscall-restart.c\n@@ -57,7 +57,7 @@ check_pid (pid_t pid)\n }\n \n static void *\n-tf (void *)\n+tf (void *closure)\n {\n   pause ();\n   return NULL;\n\ncommit 94e4a8c7d68129075f1b494a0b26151a4f989b36\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Tue Dec 17 18:12:03 2024 +0100\n\n    x86: Avoid integer truncation with large cache sizes (bug 32470)\n    \n    Some hypervisors report 1 TiB L3 cache size.  This results\n    in some variables incorrectly getting zeroed, causing crashes\n    in memcpy/memmove because invariants are violated.\n    \n    (cherry picked from commit 61c3450db96dce96ad2b24b4f0b548e6a46d68e5)\n\ndiff --git a/NEWS b/NEWS\nindex bd0b3bd66a..97a1e1f5d4 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -20,6 +20,7 @@ The following bugs are resolved with this release:\n   [32137] libio: Attempt wide backup free only for non-legacy code\n   [32231] elf: Change ldconfig auxcache magic number\n   [32245] glibc -Wstringop-overflow= build failure on hppa\n+  [32470] x86: Avoid integer truncation with large cache sizes\n \f\n Version 2.40\n \ndiff --git a/sysdeps/x86/dl-cacheinfo.h b/sysdeps/x86/dl-cacheinfo.h\nindex a1c03b8903..ac97414b5b 100644\n--- a/sysdeps/x86/dl-cacheinfo.h\n+++ b/sysdeps/x86/dl-cacheinfo.h\n@@ -961,11 +961,11 @@ dl_init_cacheinfo (struct cpu_features *cpu_features)\n     non_temporal_threshold = maximum_non_temporal_threshold;\n \n   /* NB: The REP MOVSB threshold must be greater than VEC_SIZE * 8.  */\n-  unsigned int minimum_rep_movsb_threshold;\n+  unsigned long int minimum_rep_movsb_threshold;\n   /* NB: The default REP MOVSB threshold is 4096 * (VEC_SIZE / 16) for\n      VEC_SIZE == 64 or 32.  For VEC_SIZE == 16, the default REP MOVSB\n      threshold is 2048 * (VEC_SIZE / 16).  */\n-  unsigned int rep_movsb_threshold;\n+  unsigned long int rep_movsb_threshold;\n   if (CPU_FEATURE_USABLE_P (cpu_features, AVX512F)\n       && !CPU_FEATURE_PREFERRED_P (cpu_features, Prefer_No_AVX512))\n     {\n\ncommit 9fbfbd924f718663d5303858f34d1f857c375093\nAuthor: John David Anglin <danglin@gcc.gnu.org>\nDate:   Thu Dec 19 11:30:09 2024 -0500\n\n    hppa: Fix strace detach-vfork test\n    \n    This change implements vfork.S for direct support of the vfork\n    syscall.  clone.S is revised to correct child support for the\n    vfork case.\n    \n    The main bug was creating a frame prior to the clone syscall.\n    This was done to allow the rp and r4 registers to be saved and\n    restored from the stack frame.  r4 was used to save and restore\n    the PIC register, r19, across the system call and the call to\n    set errno.  But in the vfork case, it is undefined behavior\n    for the child to return from the function in which vfork was\n    called.  It is surprising that this usually worked.\n    \n    Syscalls on hppa save and restore rp and r19, so we don't need\n    to create a frame prior to the clone syscall.  We only need a\n    frame when __syscall_error is called.  We also don't need to\n    save and restore r19 around the call to $$dyncall as r19 is not\n    used in the code after $$dyncall.\n    \n    This considerably simplifies clone.S.\n    \n    Signed-off-by: John David Anglin <dave.anglin@bell.net>\n\ndiff --git a/sysdeps/unix/sysv/linux/hppa/clone.S b/sysdeps/unix/sysv/linux/hppa/clone.S\nindex a31afea429..c18163d0f7 100644\n--- a/sysdeps/unix/sysv/linux/hppa/clone.S\n+++ b/sysdeps/unix/sysv/linux/hppa/clone.S\n@@ -59,16 +59,6 @@\n \n         .text\n ENTRY(__clone)\n-\t/* Prologue */\n-\tstwm\t%r4, 64(%sp)\n-\t.cfi_def_cfa_offset -64\n-\t.cfi_offset 4, 0\n-\tstw\t%sp, -4(%sp)\n-#ifdef PIC\n-\tstw\t%r19, -32(%sp)\n-\t.cfi_offset 19, 32\n-#endif\n-\n \t/* Sanity check arguments.  */\n \tcomib,=,n\t0,%arg0,.LerrorSanity\t/* no NULL function pointers */\n \tcomib,=,n\t0,%arg1,.LerrorSanity\t/* no NULL stack pointers */\n@@ -87,54 +77,34 @@ ENTRY(__clone)\n \t/* User stack pointer is in the correct register already */\n \n \t/* Load args from stack... */\n-\tldw\t-116(%sp), %r24\t\t/* Load parent_tidptr */\n-\tldw\t-120(%sp), %r23 \t/* Load newtls */\n-\tldw\t-124(%sp), %r22\t\t/* Load child_tidptr */\n-\n-\t/* Save the PIC register. */\n-#ifdef PIC\n-\tcopy\t%r19, %r4\t\t/* parent */\n-#endif\n+\tldw\t-52(%sp), %r24\t\t/* Load parent_tidptr */\n+\tldw\t-56(%sp), %r23\t \t/* Load newtls */\n+\tldw\t-60(%sp), %r22\t\t/* Load child_tidptr */\n \n \t/* Do the system call */\n \tble     0x100(%sr2, %r0)\n \tldi\t__NR_clone, %r20\n \n \tldi\t-4096, %r1\n-\tcomclr,>>= %r1, %ret0, %r0\t/* Note: unsigned compare. */\n-\tb,n\t.LerrorRest\n-\n-\t/* Restore the PIC register.  */\n-#ifdef PIC\n-\tcopy\t%r4, %r19\t\t/* parent */\n-#endif\n-\n+\tcomb,<<,n\t%r1, %ret0, .LerrorRest /* Note: unsigned compare. */\n \tcomib,=,n 0, %ret0, .LthreadStart\n-\n-\t/* Successful return from the parent\n-\t   No need to restore the PIC register,\n-\t   since we return immediately. */\n-\n-\tldw\t-84(%sp), %rp\n-\tbv\t%r0(%rp)\n-\tldwm\t-64(%sp), %r4\n+\tbv,n\t%r0(%rp)\n \n .LerrorRest:\n-\t/* Something bad happened -- no child created */\n+\t/* Something bad happened -- no child created -- need a frame */\n+\tldo\t64(%sp),%sp\n+\t.cfi_def_cfa_offset -64\n \tbl\t__syscall_error, %rp\n \tsub     %r0, %ret0, %arg0\n \tldw\t-84(%sp), %rp\n \t/* Return after setting errno, ret0 is set to -1 by __syscall_error. */\n \tbv\t%r0(%rp)\n-\tldwm\t-64(%sp), %r4\n+\tldo\t-64(%sp), %sp\n \n .LerrorSanity:\n \t/* Sanity checks failed, return -1, and set errno to EINVAL. */\n-\tbl\t__syscall_error, %rp\n-\tldi     EINVAL, %arg0\n-\tldw\t-84(%sp), %rp\n-\tbv\t%r0(%rp)\n-\tldwm\t-64(%sp), %r4\n+\tb\t.LerrorRest\n+\tldi\t-EINVAL, %ret0\n \n .LthreadStart:\n \t/* Load up the arguments.  */\n@@ -144,14 +114,8 @@ ENTRY(__clone)\n \t/* $$dyncall fixes child's PIC register */\n \n \t/* Call the user's function */\n-#ifdef PIC\n-\tcopy\t%r19, %r4\n-#endif\n \tbl\t$$dyncall, %r31\n \tcopy\t%r31, %rp\n-#ifdef PIC\n-\tcopy\t%r4, %r19\n-#endif\n \tcopy\t%r28, %r26\n \tble     0x100(%sr2, %r0)\n \tldi\t__NR_exit, %r20\ndiff --git a/sysdeps/unix/sysv/linux/hppa/vfork.S b/sysdeps/unix/sysv/linux/hppa/vfork.S\nnew file mode 100644\nindex 0000000000..5fd368f3cf\n--- /dev/null\n+++ b/sysdeps/unix/sysv/linux/hppa/vfork.S\n@@ -0,0 +1,53 @@\n+/* Copyright (C) 1999-2024 Free Software Foundation, Inc.\n+\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public License as\n+   published by the Free Software Foundation; either version 2.1 of the\n+   License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <sysdep.h>\n+#define _ERRNO_H\t1\n+#include <bits/errno.h>\n+\n+/* Clone the calling process, but without copying the whole address space.\n+   The calling process is suspended until the new process exits or is\n+   replaced by a call to `execve'.  Return -1 for errors, 0 to the new process,\n+   and the process ID of the new process to the old process.  */\n+\n+ENTRY (__vfork)\n+\tble\t0x100(%sr2, %r0)\n+\tldi\t__NR_vfork, %r20\n+\n+\tldi\t-4096, %r1\n+\tcomclr,<<\t%r1, %ret0, %r0      /* Note: unsigned compare. */\n+\tbv,n\t%r0(%rp)\n+\n+\t/* Something bad happened -- no child created -- we need a frame */\n+\tldo\t64(%sp), %sp\n+\t.cfi_def_cfa_offset -64\n+\n+\t/* Set errno */\n+\tbl\t__syscall_error, %rp\n+\tsub\t%r0, %ret0, %arg0\n+\n+\t/* ret0 is set to -1 by __syscall_error */\n+\tldw\t-84(%sp), %rp\n+\tbv\t%r0(%rp)\n+\tldo\t-64(%sp), %sp\n+\n+PSEUDO_END (__vfork)\n+libc_hidden_def (__vfork)\n+\n+weak_alias (__vfork, vfork)\n+strong_alias (__vfork, __libc_vfork)\n\ncommit 7648e3c8e80b3f1b3b43506b2fbe370e4824ab97\nAuthor: John David Anglin <danglin@gcc.gnu.org>\nDate:   Sun Dec 22 09:58:02 2024 -0500\n\n    hppa: Simplify handling of sanity check errors in clone.S.\n    \n    This simplifies the handling of sanity check errors in clone.S.\n    Adjusted a couple of comments to reflect current code.\n    \n    Signed-off-by: John David Anglin <dave.anglin@bell.net>\n\ndiff --git a/sysdeps/unix/sysv/linux/hppa/clone.S b/sysdeps/unix/sysv/linux/hppa/clone.S\nindex c18163d0f7..e85e7f517f 100644\n--- a/sysdeps/unix/sysv/linux/hppa/clone.S\n+++ b/sysdeps/unix/sysv/linux/hppa/clone.S\n@@ -90,6 +90,10 @@ ENTRY(__clone)\n \tcomib,=,n 0, %ret0, .LthreadStart\n \tbv,n\t%r0(%rp)\n \n+.LerrorSanity:\n+\t/* Sanity checks failed, set errno to EINVAL.  */\n+\tldi\t-EINVAL, %ret0\n+\n .LerrorRest:\n \t/* Something bad happened -- no child created -- need a frame */\n \tldo\t64(%sp),%sp\n@@ -101,11 +105,6 @@ ENTRY(__clone)\n \tbv\t%r0(%rp)\n \tldo\t-64(%sp), %sp\n \n-.LerrorSanity:\n-\t/* Sanity checks failed, return -1, and set errno to EINVAL. */\n-\tb\t.LerrorRest\n-\tldi\t-EINVAL, %ret0\n-\n .LthreadStart:\n \t/* Load up the arguments.  */\n \tldw\t-60(%sp), %arg0\n@@ -121,7 +120,7 @@ ENTRY(__clone)\n \tldi\t__NR_exit, %r20\n \n \t/* We should not return from exit.\n-           We do not restore r4, or the stack state.  */\n+           We do not restore the stack state.  */\n \tiitlbp\t%r0, (%sr0, %r0)\n \n PSEUDO_END(__clone)\n\ncommit 473597d8167f86afee3544215db108b170ec13c0\nAuthor: Andreas Schwab <schwab@suse.de>\nDate:   Wed Sep 25 11:49:30 2024 +0200\n\n    Fix missing randomness in __gen_tempname (bug 32214)\n    \n    Make sure to update the random value also if getrandom fails.\n    \n    Fixes: 686d542025 (\"posix: Sync tempname with gnulib\")\n    (cherry picked from commit 5f62cf88c4530c11904482775b7582bd7f6d80d2)\n\ndiff --git a/NEWS b/NEWS\nindex 97a1e1f5d4..57feba81cd 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -18,6 +18,7 @@ The following bugs are resolved with this release:\n   [32026] strerror/strsignal TLS not handled correctly for secondary namespaces\n   [32052] Name space violation in fortify wrappers\n   [32137] libio: Attempt wide backup free only for non-legacy code\n+  [32214] Fix missing randomness in __gen_tempname\n   [32231] elf: Change ldconfig auxcache magic number\n   [32245] glibc -Wstringop-overflow= build failure on hppa\n   [32470] x86: Avoid integer truncation with large cache sizes\ndiff --git a/sysdeps/posix/tempname.c b/sysdeps/posix/tempname.c\nindex c00fe0c181..fc30958a0c 100644\n--- a/sysdeps/posix/tempname.c\n+++ b/sysdeps/posix/tempname.c\n@@ -117,6 +117,8 @@ random_bits (random_value *r, random_value s)\n      succeed.  */\n #if !_LIBC\n   *r = mix_random_values (v, clock ());\n+#else\n+  *r = v;\n #endif\n   return false;\n }\n\ncommit 7d4b6bcae91f29d7b4daf15bab06b66cf1d2217c\nAuthor: Siddhesh Poyarekar <siddhesh@sourceware.org>\nDate:   Tue Jan 21 16:11:06 2025 -0500\n\n    Fix underallocation of abort_msg_s struct (CVE-2025-0395)\n    \n    Include the space needed to store the length of the message itself, in\n    addition to the message string.  This resolves BZ #32582.\n    \n    Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>\n    Reviewed: Adhemerval Zanella  <adhemerval.zanella@linaro.org>\n    (cherry picked from commit 68ee0f704cb81e9ad0a78c644a83e1e9cd2ee578)\n\ndiff --git a/assert/assert.c b/assert/assert.c\nindex c29629f5f6..b6e37d694c 100644\n--- a/assert/assert.c\n+++ b/assert/assert.c\n@@ -18,6 +18,7 @@\n #include <assert.h>\n #include <atomic.h>\n #include <ldsodefs.h>\n+#include <libc-pointer-arith.h>\n #include <libintl.h>\n #include <stdio.h>\n #include <stdlib.h>\n@@ -65,7 +66,8 @@ __assert_fail_base (const char *fmt, const char *assertion, const char *file,\n       (void) __fxprintf (NULL, \"%s\", str);\n       (void) fflush (stderr);\n \n-      total = (total + 1 + GLRO(dl_pagesize) - 1) & ~(GLRO(dl_pagesize) - 1);\n+      total = ALIGN_UP (total + sizeof (struct abort_msg_s) + 1,\n+\t\t\tGLRO(dl_pagesize));\n       struct abort_msg_s *buf = __mmap (NULL, total, PROT_READ | PROT_WRITE,\n \t\t\t\t\tMAP_ANON | MAP_PRIVATE, -1, 0);\n       if (__glibc_likely (buf != MAP_FAILED))\ndiff --git a/sysdeps/posix/libc_fatal.c b/sysdeps/posix/libc_fatal.c\nindex f9e3425e04..089c47b04b 100644\n--- a/sysdeps/posix/libc_fatal.c\n+++ b/sysdeps/posix/libc_fatal.c\n@@ -20,6 +20,7 @@\n #include <errno.h>\n #include <fcntl.h>\n #include <ldsodefs.h>\n+#include <libc-pointer-arith.h>\n #include <paths.h>\n #include <stdarg.h>\n #include <stdbool.h>\n@@ -105,7 +106,8 @@ __libc_message_impl (const char *fmt, ...)\n     {\n       WRITEV_FOR_FATAL (fd, iov, iovcnt, total);\n \n-      total = (total + 1 + GLRO(dl_pagesize) - 1) & ~(GLRO(dl_pagesize) - 1);\n+      total = ALIGN_UP (total + sizeof (struct abort_msg_s) + 1,\n+\t\t\tGLRO(dl_pagesize));\n       struct abort_msg_s *buf = __mmap (NULL, total,\n \t\t\t\t\tPROT_READ | PROT_WRITE,\n \t\t\t\t\tMAP_ANON | MAP_PRIVATE, -1, 0);\n\ncommit aef8f8d6a947b290162393e1d717c7aee96fef8e\nAuthor: H.J. Lu <hjl.tools@gmail.com>\nDate:   Tue Dec 17 18:41:45 2024 +0800\n\n    Hide all malloc functions from compiler [BZ #32366]\n    \n    Since -1 isn't a power of two, compiler may reject it, hide memalign from\n    Clang 19 which issues an error:\n    \n    tst-memalign.c:86:31: error: requested alignment is not a power of 2 [-Werror,-Wnon-power-of-two-alignment]\n       86 |   p = memalign (-1, pagesize);\n          |                 ^~\n    tst-memalign.c:86:31: error: requested alignment must be 4294967296 bytes or smaller; maximum alignment assumed [-Werror,-Wbuiltin-assume-aligned-alignment]\n       86 |   p = memalign (-1, pagesize);\n          |                 ^~\n    \n    Update tst-malloc-aux.h to hide all malloc functions and include it in\n    all malloc tests to prevent compiler from optimizing out any malloc\n    functions.\n    \n    Tested with Clang 19.1.5 and GCC 15 20241206 for BZ #32366.\n    \n    Signed-off-by: H.J. Lu <hjl.tools@gmail.com>\n    Reviewed-by: Sam James <sam@gentoo.org>\n    (cherry picked from commit f9493a15ea9cfb63a815c00c23142369ec09d8ce)\n\ndiff --git a/malloc/tst-mallinfo2.c b/malloc/tst-mallinfo2.c\nindex 2c02f5f700..f072b9f24b 100644\n--- a/malloc/tst-mallinfo2.c\n+++ b/malloc/tst-mallinfo2.c\n@@ -23,6 +23,8 @@\n #include <stdlib.h>\n #include <support/check.h>\n \n+#include \"tst-malloc-aux.h\"\n+\n /* This is not specifically needed for the test, but (1) does\n    something to the data so gcc doesn't optimize it away, and (2) may\n    help when developing future tests.  */\ndiff --git a/malloc/tst-malloc-aux.h b/malloc/tst-malloc-aux.h\nindex 54908b4a24..3e1b61ce34 100644\n--- a/malloc/tst-malloc-aux.h\n+++ b/malloc/tst-malloc-aux.h\n@@ -22,20 +22,35 @@\n \n #include <stddef.h>\n #include <stdlib.h>\n-\n-static void *(*volatile aligned_alloc_indirect)(size_t, size_t) = aligned_alloc;\n-static void *(*volatile calloc_indirect)(size_t, size_t) = calloc;\n-static void *(*volatile malloc_indirect)(size_t) = malloc;\n-static void *(*volatile realloc_indirect)(void*, size_t) = realloc;\n+#include <malloc.h>\n+\n+static __typeof (aligned_alloc) * volatile aligned_alloc_indirect\n+  = aligned_alloc;\n+static __typeof (calloc) * volatile calloc_indirect = calloc;\n+static __typeof (malloc) * volatile malloc_indirect = malloc;\n+static __typeof (memalign) * volatile memalign_indirect = memalign;\n+static __typeof (posix_memalign) * volatile posix_memalign_indirect\n+  = posix_memalign;\n+static __typeof (pvalloc) * volatile pvalloc_indirect = pvalloc;\n+static __typeof (realloc) * volatile realloc_indirect = realloc;\n+static __typeof (valloc) * volatile valloc_indirect = valloc;\n \n #undef aligned_alloc\n #undef calloc\n #undef malloc\n+#undef memalign\n+#undef posix_memalign\n+#undef pvalloc\n #undef realloc\n+#undef valloc\n \n #define aligned_alloc aligned_alloc_indirect\n #define calloc calloc_indirect\n #define malloc malloc_indirect\n+#define memalign memalign_indirect\n+#define posix_memalign posix_memalign_indirect\n+#define pvalloc pvalloc_indirect\n #define realloc realloc_indirect\n+#define valloc valloc_indirect\n \n #endif /* TST_MALLOC_AUX_H */\ndiff --git a/malloc/tst-malloc-backtrace.c b/malloc/tst-malloc-backtrace.c\nindex c7b1d65e5c..65fa91f6fd 100644\n--- a/malloc/tst-malloc-backtrace.c\n+++ b/malloc/tst-malloc-backtrace.c\n@@ -22,6 +22,8 @@\n #include <support/support.h>\n #include <libc-diag.h>\n \n+#include \"tst-malloc-aux.h\"\n+\n #define SIZE 4096\n \n /* Wrap free with a function to prevent gcc from optimizing it out.  */\ndiff --git a/malloc/tst-memalign.c b/malloc/tst-memalign.c\nindex 563f6413d2..ac9770d3f9 100644\n--- a/malloc/tst-memalign.c\n+++ b/malloc/tst-memalign.c\n@@ -23,6 +23,8 @@\n #include <unistd.h>\n #include <libc-diag.h>\n \n+#include \"tst-malloc-aux.h\"\n+\n static int errors = 0;\n \n static void\ndiff --git a/malloc/tst-safe-linking.c b/malloc/tst-safe-linking.c\nindex 01dd07004d..63a7e2bc8e 100644\n--- a/malloc/tst-safe-linking.c\n+++ b/malloc/tst-safe-linking.c\n@@ -26,6 +26,8 @@\n #include <support/capture_subprocess.h>\n #include <support/check.h>\n \n+#include \"tst-malloc-aux.h\"\n+\n /* Run CALLBACK and check that the data on standard error equals\n    EXPECTED.  */\n static void\ndiff --git a/malloc/tst-valloc.c b/malloc/tst-valloc.c\nindex 9bab8c6470..0243d3dfd4 100644\n--- a/malloc/tst-valloc.c\n+++ b/malloc/tst-valloc.c\n@@ -23,6 +23,8 @@\n #include <unistd.h>\n #include <libc-diag.h>\n \n+#include \"tst-malloc-aux.h\"\n+\n static int errors = 0;\n \n static void\n\ncommit be48b8f6ad0ec6d0d6b1d2f45eb59bf8e8c67dd7\nAuthor: Sam James <sam@gentoo.org>\nDate:   Fri Jan 10 03:03:47 2025 +0000\n\n    malloc: obscure calloc use in tst-calloc\n    \n    Similar to a9944a52c967ce76a5894c30d0274b824df43c7a and\n    f9493a15ea9cfb63a815c00c23142369ec09d8ce, we need to hide calloc use from\n    the compiler to accommodate GCC's r15-6566-g804e9d55d9e54c change.\n    \n    First, include tst-malloc-aux.h, but then use `volatile` variables\n    for size.\n    \n    The test passes without the tst-malloc-aux.h change but IMO we want\n    it there for consistency and to avoid future problems (possibly silent).\n    \n    Reviewed-by: H.J. Lu <hjl.tools@gmail.com>\n    (cherry picked from commit c3d1dac96bdd10250aa37bb367d5ef8334a093a1)\n\ndiff --git a/malloc/tst-calloc.c b/malloc/tst-calloc.c\nindex 01f17f9e65..5a8c7ab121 100644\n--- a/malloc/tst-calloc.c\n+++ b/malloc/tst-calloc.c\n@@ -23,6 +23,7 @@\n #include <stdio.h>\n #include <libc-diag.h>\n \n+#include \"tst-malloc-aux.h\"\n \n /* Number of samples per size.  */\n #define N 50000\n@@ -94,16 +95,19 @@ random_test (void)\n static void\n null_test (void)\n {\n+  /* Obscure allocation size from the compiler.  */\n+  volatile size_t max_size = UINT_MAX;\n+  volatile size_t zero_size = 0;\n   /* If the size is 0 the result is implementation defined.  Just make\n      sure the program doesn't crash.  The result of calloc is\n      deliberately ignored, so do not warn about that.  */\n   DIAG_PUSH_NEEDS_COMMENT;\n   DIAG_IGNORE_NEEDS_COMMENT (10, \"-Wunused-result\");\n   calloc (0, 0);\n-  calloc (0, UINT_MAX);\n-  calloc (UINT_MAX, 0);\n-  calloc (0, ~((size_t) 0));\n-  calloc (~((size_t) 0), 0);\n+  calloc (0, max_size);\n+  calloc (max_size, 0);\n+  calloc (0, ~((size_t) zero_size));\n+  calloc (~((size_t) zero_size), 0);\n   DIAG_POP_NEEDS_COMMENT;\n }\n \n\ncommit 85668221974db44459527e04d04f77ca8f8e3115\nAuthor: H.J. Lu <hjl.tools@gmail.com>\nDate:   Fri Jan 24 18:53:13 2025 +0800\n\n    stdlib: Test using setenv with updated environ [BZ #32588]\n    \n    Add a test for setenv with updated environ.  Verify that BZ #32588 is\n    fixed.\n    \n    Signed-off-by: H.J. Lu <hjl.tools@gmail.com>\n    Reviewed-by: Florian Weimer <fweimer@redhat.com>\n    (cherry picked from commit 8ab34497de14e35aff09b607222fe1309ef156da)\n\ndiff --git a/stdlib/Makefile b/stdlib/Makefile\nindex 8213fa83ef..d3a84fa641 100644\n--- a/stdlib/Makefile\n+++ b/stdlib/Makefile\n@@ -307,6 +307,7 @@ tests := \\\n   tst-setcontext9 \\\n   tst-setcontext10 \\\n   tst-setcontext11 \\\n+  tst-setenv-environ \\\n   tst-stdbit-Wconversion \\\n   tst-stdbit-builtins \\\n   tst-stdc_bit_ceil \\\ndiff --git a/stdlib/tst-setenv-environ.c b/stdlib/tst-setenv-environ.c\nnew file mode 100644\nindex 0000000000..02fcef96d0\n--- /dev/null\n+++ b/stdlib/tst-setenv-environ.c\n@@ -0,0 +1,36 @@\n+/* Test using setenv with updated environ.\n+   Copyright (C) 2025 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <stdlib.h>\n+#include <support/check.h>\n+\n+extern char **environ;\n+\n+int\n+do_test (void)\n+{\n+  char *valp;\n+  static char *dummy_environ[] = { NULL };\n+  environ = dummy_environ;\n+  setenv (\"A\", \"1\", 0);\n+  valp = getenv (\"A\");\n+  TEST_VERIFY_EXIT (valp[0] == '1' && valp[1] == '\\0');\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\n\ncommit e899ca3651f8c5e01bf3420cfb34aad97d093f74\nAuthor: John David Anglin <danglin@gcc.gnu.org>\nDate:   Wed Jan 29 16:51:16 2025 -0500\n\n    nptl: Correct stack size attribute when stack grows up [BZ #32574]\n    \n    Set stack size attribute to the size of the mmap'd region only\n    when the size of the remaining stack space is less than the size\n    of the mmap'd region.\n    \n    This was reversed.  As a result, the initial stack size was only\n    135168 bytes.  On architectures where the stack grows down, the\n    initial stack size is approximately 8384512 bytes with the default\n    rlimit settings.  The small main stack size on hppa broke\n    applications like ruby that check for stack overflows.\n    \n    Signed-off-by: John David Anglin <dave.anglin@bell.net>\n\ndiff --git a/nptl/pthread_getattr_np.c b/nptl/pthread_getattr_np.c\nindex 1e91874767..3ce34437bc 100644\n--- a/nptl/pthread_getattr_np.c\n+++ b/nptl/pthread_getattr_np.c\n@@ -145,9 +145,9 @@ __pthread_getattr_np (pthread_t thread_id, pthread_attr_t *attr)\n \t\t\t  > (size_t) iattr->stackaddr - last_to)\n \t\t\tiattr->stacksize = (size_t) iattr->stackaddr - last_to;\n #else\n-\t\t      /* The limit might be too high.  */\n+\t\t      /* The limit might be too low.  */\n \t\t      if ((size_t) iattr->stacksize\n-\t\t\t  > to - (size_t) iattr->stackaddr)\n+\t\t\t  < to - (size_t) iattr->stackaddr)\n \t\t\tiattr->stacksize = to - (size_t) iattr->stackaddr;\n #endif\n \t\t      /* We succeed and no need to look further.  */\n\ncommit d6c156c326999f144cb5b73d29982108d549ad8a\nAuthor: Siddhesh Poyarekar <siddhesh@sourceware.org>\nDate:   Fri Jan 31 12:16:30 2025 -0500\n\n    assert: Add test for CVE-2025-0395\n    \n    Use the __progname symbol to override the program name to induce the\n    failure that CVE-2025-0395 describes.\n    \n    This is related to BZ #32582\n    \n    Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>\n    Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>\n    (cherry picked from commit cdb9ba84191ce72e86346fb8b1d906e7cd930ea2)\n\ndiff --git a/assert/Makefile b/assert/Makefile\nindex 35dc908ddb..c0fe660bd6 100644\n--- a/assert/Makefile\n+++ b/assert/Makefile\n@@ -38,6 +38,7 @@ tests := \\\n   test-assert-perr \\\n   tst-assert-c++ \\\n   tst-assert-g++ \\\n+  tst-assert-sa-2025-0001 \\\n   # tests\n \n ifeq ($(have-cxx-thread_local),yes)\ndiff --git a/assert/tst-assert-sa-2025-0001.c b/assert/tst-assert-sa-2025-0001.c\nnew file mode 100644\nindex 0000000000..102cb0078d\n--- /dev/null\n+++ b/assert/tst-assert-sa-2025-0001.c\n@@ -0,0 +1,92 @@\n+/* Test for CVE-2025-0395.\n+   Copyright The GNU Toolchain Authors.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+/* Test that a large enough __progname does not result in a buffer overflow\n+   when printing an assertion failure.  This was CVE-2025-0395.  */\n+#include <assert.h>\n+#include <inttypes.h>\n+#include <signal.h>\n+#include <stdbool.h>\n+#include <string.h>\n+#include <sys/mman.h>\n+#include <support/check.h>\n+#include <support/support.h>\n+#include <support/xstdio.h>\n+#include <support/xunistd.h>\n+\n+extern const char *__progname;\n+\n+int\n+do_test (int argc, char **argv)\n+{\n+\n+  support_need_proc (\"Reads /proc/self/maps to add guards to writable maps.\");\n+  ignore_stderr ();\n+\n+  /* XXX assumes that the assert is on a 2 digit line number.  */\n+  const char *prompt = \": %s:99: do_test: Assertion `argc < 1' failed.\\n\";\n+\n+  int ret = fprintf (stderr, prompt, __FILE__);\n+  if (ret < 0)\n+    FAIL_EXIT1 (\"fprintf failed: %m\\n\");\n+\n+  size_t pagesize = getpagesize ();\n+  size_t namesize = pagesize - 1 - ret;\n+\n+  /* Alter the progname so that the assert message fills the entire page.  */\n+  char progname[namesize];\n+  memset (progname, 'A', namesize - 1);\n+  progname[namesize - 1] = '\\0';\n+  __progname = progname;\n+\n+  FILE *f = xfopen (\"/proc/self/maps\", \"r\");\n+  char *line = NULL;\n+  size_t len = 0;\n+  uintptr_t prev_to = 0;\n+\n+  /* Pad the beginning of every writable mapping with a PROT_NONE map.  This\n+     ensures that the mmap in the assert_fail path never ends up below a\n+     writable map and will terminate immediately in case of a buffer\n+     overflow.  */\n+  while (xgetline (&line, &len, f))\n+    {\n+      uintptr_t from, to;\n+      char perm[4];\n+\n+      sscanf (line, \"%\" SCNxPTR \"-%\" SCNxPTR \" %c%c%c%c \",\n+\t      &from, &to,\n+\t      &perm[0], &perm[1], &perm[2], &perm[3]);\n+\n+      bool writable = (memchr (perm, 'w', 4) != NULL);\n+\n+      if (prev_to != 0 && from - prev_to > pagesize && writable)\n+\txmmap ((void *) from - pagesize, pagesize, PROT_NONE,\n+\t       MAP_ANONYMOUS | MAP_PRIVATE, 0);\n+\n+      prev_to = to;\n+    }\n+\n+  xfclose (f);\n+\n+  assert (argc < 1);\n+  return 0;\n+}\n+\n+#define EXPECTED_SIGNAL SIGABRT\n+#define TEST_FUNCTION_ARGV do_test\n+#include <support/test-driver.c>\n\ncommit 523f85558152a1b9cced6d669f758c27677775ba\nAuthor: John David Anglin <danglin@gcc.gnu.org>\nDate:   Tue Feb 25 15:57:53 2025 -0500\n\n    math: Add optimization barrier to ensure a1 + u.d is not reused [BZ #30664]\n    \n    A number of fma tests started to fail on hppa when gcc was changed to\n    use Ranger rather than EVRP.  Eventually I found that the value of\n    a1 + u.d in this is block of code was being computed in FE_TOWARDZERO\n    mode and not the original rounding mode:\n    \n        if (TININESS_AFTER_ROUNDING)\n          {\n            w.d = a1 + u.d;\n            if (w.ieee.exponent == 109)\n              return w.d * 0x1p-108;\n          }\n    \n    This caused the exponent value to be wrong and the wrong return path\n    to be used.\n    \n    Here we add an optimization barrier after the rounding mode is reset\n    to ensure that the previous value of a1 + u.d is not reused.\n    \n    Signed-off-by: John David Anglin <dave.anglin@bell.net>\n\ndiff --git a/sysdeps/ieee754/dbl-64/s_fma.c b/sysdeps/ieee754/dbl-64/s_fma.c\nindex c5f5abdc68..79a3cd721d 100644\n--- a/sysdeps/ieee754/dbl-64/s_fma.c\n+++ b/sysdeps/ieee754/dbl-64/s_fma.c\n@@ -244,6 +244,9 @@ __fma (double x, double y, double z)\n   /* Reset rounding mode and test for inexact simultaneously.  */\n   int j = libc_feupdateenv_test (&env, FE_INEXACT) != 0;\n \n+  /* Ensure value of a1 + u.d is not reused.  */\n+  a1 = math_opt_barrier (a1);\n+\n   if (__glibc_likely (adjust == 0))\n     {\n       if ((u.ieee.mantissa1 & 1) == 0 && u.ieee.exponent != 0x7ff)\n\ncommit ff10623706ea0096f3af7b38a3330ffb7fb15ae7\nAuthor: Joe Ramsay <Joe.Ramsay@arm.com>\nDate:   Mon Sep 9 13:00:01 2024 +0100\n\n    aarch64: Avoid redundant MOVs in AdvSIMD F32 logs\n    \n    Since the last operation is destructive, the first argument to the FMA\n    also has to be the first argument to the special-case in order to\n    avoid unnecessary MOVs. Reorder arguments and adjust special-case\n    bounds to facilitate this.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit 8b09af572b208bfde4d31c6abbae047dcc217675)\n\ndiff --git a/sysdeps/aarch64/fpu/log10f_advsimd.c b/sysdeps/aarch64/fpu/log10f_advsimd.c\nindex 9347422a77..82228b599a 100644\n--- a/sysdeps/aarch64/fpu/log10f_advsimd.c\n+++ b/sysdeps/aarch64/fpu/log10f_advsimd.c\n@@ -22,11 +22,11 @@\n \n static const struct data\n {\n-  uint32x4_t min_norm;\n+  uint32x4_t off, offset_lower_bound;\n   uint16x8_t special_bound;\n+  uint32x4_t mantissa_mask;\n   float32x4_t poly[8];\n   float32x4_t inv_ln10, ln2;\n-  uint32x4_t off, mantissa_mask;\n } data = {\n   /* Use order 9 for log10(1+x), i.e. order 8 for log10(1+x)/x, with x in\n       [-1/3, 1/3] (offset=2/3). Max. relative error: 0x1.068ee468p-25.  */\n@@ -35,18 +35,22 @@ static const struct data\n \t    V4 (-0x1.0fc92cp-4f), V4 (0x1.f5f76ap-5f) },\n   .ln2 = V4 (0x1.62e43p-1f),\n   .inv_ln10 = V4 (0x1.bcb7b2p-2f),\n-  .min_norm = V4 (0x00800000),\n-  .special_bound = V8 (0x7f00), /* asuint32(inf) - min_norm.  */\n+  /* Lower bound is the smallest positive normal float 0x00800000. For\n+     optimised register use subnormals are detected after offset has been\n+     subtracted, so lower bound is 0x0080000 - offset (which wraps around).  */\n+  .offset_lower_bound = V4 (0x00800000 - 0x3f2aaaab),\n+  .special_bound = V8 (0x7f00), /* top16(asuint32(inf) - 0x00800000).  */\n   .off = V4 (0x3f2aaaab),\t/* 0.666667.  */\n   .mantissa_mask = V4 (0x007fffff),\n };\n \n static float32x4_t VPCS_ATTR NOINLINE\n-special_case (float32x4_t x, float32x4_t y, float32x4_t p, float32x4_t r2,\n-\t      uint16x4_t cmp)\n+special_case (float32x4_t y, uint32x4_t u_off, float32x4_t p, float32x4_t r2,\n+\t      uint16x4_t cmp, const struct data *d)\n {\n   /* Fall back to scalar code.  */\n-  return v_call_f32 (log10f, x, vfmaq_f32 (y, p, r2), vmovl_u16 (cmp));\n+  return v_call_f32 (log10f, vreinterpretq_f32_u32 (vaddq_u32 (u_off, d->off)),\n+\t\t     vfmaq_f32 (y, p, r2), vmovl_u16 (cmp));\n }\n \n /* Fast implementation of AdvSIMD log10f,\n@@ -58,15 +62,21 @@ special_case (float32x4_t x, float32x4_t y, float32x4_t p, float32x4_t r2,\n float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (log10) (float32x4_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n-  uint32x4_t u = vreinterpretq_u32_f32 (x);\n-  uint16x4_t special = vcge_u16 (vsubhn_u32 (u, d->min_norm),\n-\t\t\t\t vget_low_u16 (d->special_bound));\n+\n+  /* To avoid having to mov x out of the way, keep u after offset has been\n+     applied, and recover x by adding the offset back in the special-case\n+     handler.  */\n+  uint32x4_t u_off = vreinterpretq_u32_f32 (x);\n \n   /* x = 2^n * (1+r), where 2/3 < 1+r < 4/3.  */\n-  u = vsubq_u32 (u, d->off);\n+  u_off = vsubq_u32 (u_off, d->off);\n   float32x4_t n = vcvtq_f32_s32 (\n-      vshrq_n_s32 (vreinterpretq_s32_u32 (u), 23)); /* signextend.  */\n-  u = vaddq_u32 (vandq_u32 (u, d->mantissa_mask), d->off);\n+      vshrq_n_s32 (vreinterpretq_s32_u32 (u_off), 23)); /* signextend.  */\n+\n+  uint16x4_t special = vcge_u16 (vsubhn_u32 (u_off, d->offset_lower_bound),\n+\t\t\t\t vget_low_u16 (d->special_bound));\n+\n+  uint32x4_t u = vaddq_u32 (vandq_u32 (u_off, d->mantissa_mask), d->off);\n   float32x4_t r = vsubq_f32 (vreinterpretq_f32_u32 (u), v_f32 (1.0f));\n \n   /* y = log10(1+r) + n * log10(2).  */\n@@ -77,7 +87,7 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (log10) (float32x4_t x)\n   y = vmulq_f32 (y, d->inv_ln10);\n \n   if (__glibc_unlikely (v_any_u16h (special)))\n-    return special_case (x, y, poly, r2, special);\n+    return special_case (y, u_off, poly, r2, special, d);\n   return vfmaq_f32 (y, poly, r2);\n }\n libmvec_hidden_def (V_NAME_F1 (log10))\ndiff --git a/sysdeps/aarch64/fpu/log2f_advsimd.c b/sysdeps/aarch64/fpu/log2f_advsimd.c\nindex db21836749..84effe4fe9 100644\n--- a/sysdeps/aarch64/fpu/log2f_advsimd.c\n+++ b/sysdeps/aarch64/fpu/log2f_advsimd.c\n@@ -22,9 +22,9 @@\n \n static const struct data\n {\n-  uint32x4_t min_norm;\n+  uint32x4_t off, offset_lower_bound;\n   uint16x8_t special_bound;\n-  uint32x4_t off, mantissa_mask;\n+  uint32x4_t mantissa_mask;\n   float32x4_t poly[9];\n } data = {\n   /* Coefficients generated using Remez algorithm approximate\n@@ -34,18 +34,22 @@ static const struct data\n \t    V4 (-0x1.715458p-1f), V4 (0x1.ec701cp-2f), V4 (-0x1.7171a4p-2f),\n \t    V4 (0x1.27a0b8p-2f), V4 (-0x1.e5143ep-3f), V4 (0x1.9d8ecap-3f),\n \t    V4 (-0x1.c675bp-3f), V4 (0x1.9e495p-3f) },\n-  .min_norm = V4 (0x00800000),\n-  .special_bound = V8 (0x7f00), /* asuint32(inf) - min_norm.  */\n+  /* Lower bound is the smallest positive normal float 0x00800000. For\n+     optimised register use subnormals are detected after offset has been\n+     subtracted, so lower bound is 0x0080000 - offset (which wraps around).  */\n+  .offset_lower_bound = V4 (0x00800000 - 0x3f2aaaab),\n+  .special_bound = V8 (0x7f00), /* top16(asuint32(inf) - 0x00800000).  */\n   .off = V4 (0x3f2aaaab),\t/* 0.666667.  */\n   .mantissa_mask = V4 (0x007fffff),\n };\n \n static float32x4_t VPCS_ATTR NOINLINE\n-special_case (float32x4_t x, float32x4_t n, float32x4_t p, float32x4_t r,\n-\t      uint16x4_t cmp)\n+special_case (float32x4_t n, uint32x4_t u_off, float32x4_t p, float32x4_t r,\n+\t      uint16x4_t cmp, const struct data *d)\n {\n   /* Fall back to scalar code.  */\n-  return v_call_f32 (log2f, x, vfmaq_f32 (n, p, r), vmovl_u16 (cmp));\n+  return v_call_f32 (log2f, vreinterpretq_f32_u32 (vaddq_u32 (u_off, d->off)),\n+\t\t     vfmaq_f32 (n, p, r), vmovl_u16 (cmp));\n }\n \n /* Fast implementation for single precision AdvSIMD log2,\n@@ -56,15 +60,21 @@ special_case (float32x4_t x, float32x4_t n, float32x4_t p, float32x4_t r,\n float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (log2) (float32x4_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n-  uint32x4_t u = vreinterpretq_u32_f32 (x);\n-  uint16x4_t special = vcge_u16 (vsubhn_u32 (u, d->min_norm),\n-\t\t\t\t vget_low_u16 (d->special_bound));\n+\n+  /* To avoid having to mov x out of the way, keep u after offset has been\n+     applied, and recover x by adding the offset back in the special-case\n+     handler.  */\n+  uint32x4_t u_off = vreinterpretq_u32_f32 (x);\n \n   /* x = 2^n * (1+r), where 2/3 < 1+r < 4/3.  */\n-  u = vsubq_u32 (u, d->off);\n+  u_off = vsubq_u32 (u_off, d->off);\n   float32x4_t n = vcvtq_f32_s32 (\n-      vshrq_n_s32 (vreinterpretq_s32_u32 (u), 23)); /* signextend.  */\n-  u = vaddq_u32 (vandq_u32 (u, d->mantissa_mask), d->off);\n+      vshrq_n_s32 (vreinterpretq_s32_u32 (u_off), 23)); /* signextend.  */\n+\n+  uint16x4_t special = vcge_u16 (vsubhn_u32 (u_off, d->offset_lower_bound),\n+\t\t\t\t vget_low_u16 (d->special_bound));\n+\n+  uint32x4_t u = vaddq_u32 (vandq_u32 (u_off, d->mantissa_mask), d->off);\n   float32x4_t r = vsubq_f32 (vreinterpretq_f32_u32 (u), v_f32 (1.0f));\n \n   /* y = log2(1+r) + n.  */\n@@ -72,7 +82,7 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (log2) (float32x4_t x)\n   float32x4_t p = v_pw_horner_8_f32 (r, r2, d->poly);\n \n   if (__glibc_unlikely (v_any_u16h (special)))\n-    return special_case (x, n, p, r, special);\n+    return special_case (n, u_off, p, r, special, d);\n   return vfmaq_f32 (n, p, r);\n }\n libmvec_hidden_def (V_NAME_F1 (log2))\ndiff --git a/sysdeps/aarch64/fpu/logf_advsimd.c b/sysdeps/aarch64/fpu/logf_advsimd.c\nindex 3c0d0fcdc7..c20dbfd6c0 100644\n--- a/sysdeps/aarch64/fpu/logf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/logf_advsimd.c\n@@ -21,20 +21,22 @@\n \n static const struct data\n {\n-  uint32x4_t min_norm;\n+  uint32x4_t off, offset_lower_bound;\n   uint16x8_t special_bound;\n+  uint32x4_t mantissa_mask;\n   float32x4_t poly[7];\n-  float32x4_t ln2, tiny_bound;\n-  uint32x4_t off, mantissa_mask;\n+  float32x4_t ln2;\n } data = {\n   /* 3.34 ulp error.  */\n   .poly = { V4 (-0x1.3e737cp-3f), V4 (0x1.5a9aa2p-3f), V4 (-0x1.4f9934p-3f),\n \t    V4 (0x1.961348p-3f), V4 (-0x1.00187cp-2f), V4 (0x1.555d7cp-2f),\n \t    V4 (-0x1.ffffc8p-2f) },\n   .ln2 = V4 (0x1.62e43p-1f),\n-  .tiny_bound = V4 (0x1p-126),\n-  .min_norm = V4 (0x00800000),\n-  .special_bound = V8 (0x7f00), /* asuint32(inf) - min_norm.  */\n+  /* Lower bound is the smallest positive normal float 0x00800000. For\n+     optimised register use subnormals are detected after offset has been\n+     subtracted, so lower bound is 0x0080000 - offset (which wraps around).  */\n+  .offset_lower_bound = V4 (0x00800000 - 0x3f2aaaab),\n+  .special_bound = V8 (0x7f00), /* top16(asuint32(inf) - 0x00800000).  */\n   .off = V4 (0x3f2aaaab),\t/* 0.666667.  */\n   .mantissa_mask = V4 (0x007fffff)\n };\n@@ -42,32 +44,37 @@ static const struct data\n #define P(i) d->poly[7 - i]\n \n static float32x4_t VPCS_ATTR NOINLINE\n-special_case (float32x4_t x, float32x4_t y, float32x4_t r2, float32x4_t p,\n-\t      uint16x4_t cmp)\n+special_case (float32x4_t p, uint32x4_t u_off, float32x4_t y, float32x4_t r2,\n+\t      uint16x4_t cmp, const struct data *d)\n {\n   /* Fall back to scalar code.  */\n-  return v_call_f32 (logf, x, vfmaq_f32 (p, y, r2), vmovl_u16 (cmp));\n+  return v_call_f32 (logf, vreinterpretq_f32_u32 (vaddq_u32 (u_off, d->off)),\n+\t\t     vfmaq_f32 (p, y, r2), vmovl_u16 (cmp));\n }\n \n float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (log) (float32x4_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n   float32x4_t n, p, q, r, r2, y;\n-  uint32x4_t u;\n+  uint32x4_t u, u_off;\n   uint16x4_t cmp;\n \n-  u = vreinterpretq_u32_f32 (x);\n-  cmp = vcge_u16 (vsubhn_u32 (u, d->min_norm),\n-\t\t  vget_low_u16 (d->special_bound));\n+  /* To avoid having to mov x out of the way, keep u after offset has been\n+     applied, and recover x by adding the offset back in the special-case\n+     handler.  */\n+  u_off = vreinterpretq_u32_f32 (x);\n \n   /* x = 2^n * (1+r), where 2/3 < 1+r < 4/3.  */\n-  u = vsubq_u32 (u, d->off);\n+  u_off = vsubq_u32 (u_off, d->off);\n   n = vcvtq_f32_s32 (\n-      vshrq_n_s32 (vreinterpretq_s32_u32 (u), 23)); /* signextend.  */\n-  u = vandq_u32 (u, d->mantissa_mask);\n+      vshrq_n_s32 (vreinterpretq_s32_u32 (u_off), 23)); /* signextend.  */\n+  u = vandq_u32 (u_off, d->mantissa_mask);\n   u = vaddq_u32 (u, d->off);\n   r = vsubq_f32 (vreinterpretq_f32_u32 (u), v_f32 (1.0f));\n \n+  cmp = vcge_u16 (vsubhn_u32 (u_off, d->offset_lower_bound),\n+\t\t  vget_low_u16 (d->special_bound));\n+\n   /* y = log(1+r) + n*ln2.  */\n   r2 = vmulq_f32 (r, r);\n   /* n*ln2 + r + r2*(P1 + r*P2 + r2*(P3 + r*P4 + r2*(P5 + r*P6 + r2*P7))).  */\n@@ -80,7 +87,7 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (log) (float32x4_t x)\n   p = vfmaq_f32 (r, d->ln2, n);\n \n   if (__glibc_unlikely (v_any_u16h (cmp)))\n-    return special_case (x, y, r2, p, cmp);\n+    return special_case (p, u_off, y, r2, cmp, d);\n   return vfmaq_f32 (p, y, r2);\n }\n libmvec_hidden_def (V_NAME_F1 (log))\n\ncommit a991a0fc7c051d7ef2ea7778e0a699f22d4e53d7\nAuthor: Joe Ramsay <Joe.Ramsay@arm.com>\nDate:   Thu Sep 19 17:34:02 2024 +0100\n\n    AArch64: Add vector logp1 alias for log1p\n    \n    This enables vectorisation of C23 logp1, which is an alias for log1p.\n    There are no new tests or ulp entries because the new symbols are simply\n    aliases.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit 751a5502bea1d13551c62c47bb9bd25bff870cda)\n\ndiff --git a/bits/libm-simd-decl-stubs.h b/bits/libm-simd-decl-stubs.h\nindex 08a41c46ad..5019e8e25c 100644\n--- a/bits/libm-simd-decl-stubs.h\n+++ b/bits/libm-simd-decl-stubs.h\n@@ -253,6 +253,17 @@\n #define __DECL_SIMD_log1pf64x\n #define __DECL_SIMD_log1pf128x\n \n+#define __DECL_SIMD_logp1\n+#define __DECL_SIMD_logp1f\n+#define __DECL_SIMD_logp1l\n+#define __DECL_SIMD_logp1f16\n+#define __DECL_SIMD_logp1f32\n+#define __DECL_SIMD_logp1f64\n+#define __DECL_SIMD_logp1f128\n+#define __DECL_SIMD_logp1f32x\n+#define __DECL_SIMD_logp1f64x\n+#define __DECL_SIMD_logp1f128x\n+\n #define __DECL_SIMD_atanh\n #define __DECL_SIMD_atanhf\n #define __DECL_SIMD_atanhl\ndiff --git a/math/bits/mathcalls.h b/math/bits/mathcalls.h\nindex 6cb594b6ff..92856becc4 100644\n--- a/math/bits/mathcalls.h\n+++ b/math/bits/mathcalls.h\n@@ -126,7 +126,7 @@ __MATHCALL (log2p1,, (_Mdouble_ __x));\n __MATHCALL (log10p1,, (_Mdouble_ __x));\n \n /* Return log(1 + X).  */\n-__MATHCALL (logp1,, (_Mdouble_ __x));\n+__MATHCALL_VEC (logp1,, (_Mdouble_ __x));\n #endif\n \n #if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99\ndiff --git a/sysdeps/aarch64/fpu/Versions b/sysdeps/aarch64/fpu/Versions\nindex cc15ce2d1e..015211f5f4 100644\n--- a/sysdeps/aarch64/fpu/Versions\n+++ b/sysdeps/aarch64/fpu/Versions\n@@ -135,4 +135,11 @@ libmvec {\n     _ZGVsMxv_tanh;\n     _ZGVsMxv_tanhf;\n   }\n+  GLIBC_2.41 {\n+    _ZGVnN2v_logp1;\n+    _ZGVnN2v_logp1f;\n+    _ZGVnN4v_logp1f;\n+    _ZGVsMxv_logp1;\n+    _ZGVsMxv_logp1f;\n+  }\n }\ndiff --git a/sysdeps/aarch64/fpu/advsimd_f32_protos.h b/sysdeps/aarch64/fpu/advsimd_f32_protos.h\nindex 097d403ffe..5909bb4ce9 100644\n--- a/sysdeps/aarch64/fpu/advsimd_f32_protos.h\n+++ b/sysdeps/aarch64/fpu/advsimd_f32_protos.h\n@@ -36,6 +36,7 @@ libmvec_hidden_proto (V_NAME_F2(hypot));\n libmvec_hidden_proto (V_NAME_F1(log10));\n libmvec_hidden_proto (V_NAME_F1(log1p));\n libmvec_hidden_proto (V_NAME_F1(log2));\n+libmvec_hidden_proto (V_NAME_F1(logp1));\n libmvec_hidden_proto (V_NAME_F1(log));\n libmvec_hidden_proto (V_NAME_F2(pow));\n libmvec_hidden_proto (V_NAME_F1(sin));\ndiff --git a/sysdeps/aarch64/fpu/bits/math-vector.h b/sysdeps/aarch64/fpu/bits/math-vector.h\nindex 7484150131..f295fe185d 100644\n--- a/sysdeps/aarch64/fpu/bits/math-vector.h\n+++ b/sysdeps/aarch64/fpu/bits/math-vector.h\n@@ -113,6 +113,10 @@\n # define __DECL_SIMD_log2 __DECL_SIMD_aarch64\n # undef __DECL_SIMD_log2f\n # define __DECL_SIMD_log2f __DECL_SIMD_aarch64\n+# undef __DECL_SIMD_logp1\n+# define __DECL_SIMD_logp1 __DECL_SIMD_aarch64\n+# undef __DECL_SIMD_logp1f\n+# define __DECL_SIMD_logp1f __DECL_SIMD_aarch64\n # undef __DECL_SIMD_pow\n # define __DECL_SIMD_pow __DECL_SIMD_aarch64\n # undef __DECL_SIMD_powf\n@@ -180,6 +184,7 @@ __vpcs __f32x4_t _ZGVnN4v_logf (__f32x4_t);\n __vpcs __f32x4_t _ZGVnN4v_log10f (__f32x4_t);\n __vpcs __f32x4_t _ZGVnN4v_log1pf (__f32x4_t);\n __vpcs __f32x4_t _ZGVnN4v_log2f (__f32x4_t);\n+__vpcs __f32x4_t _ZGVnN4v_logp1f (__f32x4_t);\n __vpcs __f32x4_t _ZGVnN4vv_powf (__f32x4_t, __f32x4_t);\n __vpcs __f32x4_t _ZGVnN4v_sinf (__f32x4_t);\n __vpcs __f32x4_t _ZGVnN4v_sinhf (__f32x4_t);\n@@ -207,6 +212,7 @@ __vpcs __f64x2_t _ZGVnN2v_log (__f64x2_t);\n __vpcs __f64x2_t _ZGVnN2v_log10 (__f64x2_t);\n __vpcs __f64x2_t _ZGVnN2v_log1p (__f64x2_t);\n __vpcs __f64x2_t _ZGVnN2v_log2 (__f64x2_t);\n+__vpcs __f64x2_t _ZGVnN2v_logp1 (__f64x2_t);\n __vpcs __f64x2_t _ZGVnN2vv_pow (__f64x2_t, __f64x2_t);\n __vpcs __f64x2_t _ZGVnN2v_sin (__f64x2_t);\n __vpcs __f64x2_t _ZGVnN2v_sinh (__f64x2_t);\n@@ -239,6 +245,7 @@ __sv_f32_t _ZGVsMxv_logf (__sv_f32_t, __sv_bool_t);\n __sv_f32_t _ZGVsMxv_log10f (__sv_f32_t, __sv_bool_t);\n __sv_f32_t _ZGVsMxv_log1pf (__sv_f32_t, __sv_bool_t);\n __sv_f32_t _ZGVsMxv_log2f (__sv_f32_t, __sv_bool_t);\n+__sv_f32_t _ZGVsMxv_logp1f (__sv_f32_t, __sv_bool_t);\n __sv_f32_t _ZGVsMxvv_powf (__sv_f32_t, __sv_f32_t, __sv_bool_t);\n __sv_f32_t _ZGVsMxv_sinf (__sv_f32_t, __sv_bool_t);\n __sv_f32_t _ZGVsMxv_sinhf (__sv_f32_t, __sv_bool_t);\n@@ -266,6 +273,7 @@ __sv_f64_t _ZGVsMxv_log (__sv_f64_t, __sv_bool_t);\n __sv_f64_t _ZGVsMxv_log10 (__sv_f64_t, __sv_bool_t);\n __sv_f64_t _ZGVsMxv_log1p (__sv_f64_t, __sv_bool_t);\n __sv_f64_t _ZGVsMxv_log2 (__sv_f64_t, __sv_bool_t);\n+__sv_f64_t _ZGVsMxv_logp1 (__sv_f64_t, __sv_bool_t);\n __sv_f64_t _ZGVsMxvv_pow (__sv_f64_t, __sv_f64_t, __sv_bool_t);\n __sv_f64_t _ZGVsMxv_sin (__sv_f64_t, __sv_bool_t);\n __sv_f64_t _ZGVsMxv_sinh (__sv_f64_t, __sv_bool_t);\ndiff --git a/sysdeps/aarch64/fpu/log1p_advsimd.c b/sysdeps/aarch64/fpu/log1p_advsimd.c\nindex ffc418fc9c..114064c696 100644\n--- a/sysdeps/aarch64/fpu/log1p_advsimd.c\n+++ b/sysdeps/aarch64/fpu/log1p_advsimd.c\n@@ -127,3 +127,5 @@ VPCS_ATTR float64x2_t V_NAME_D1 (log1p) (float64x2_t x)\n \n   return vfmaq_f64 (y, f2, p);\n }\n+\n+strong_alias (V_NAME_D1 (log1p), V_NAME_D1 (logp1))\ndiff --git a/sysdeps/aarch64/fpu/log1p_sve.c b/sysdeps/aarch64/fpu/log1p_sve.c\nindex 04f7e5720e..b21cfb2c90 100644\n--- a/sysdeps/aarch64/fpu/log1p_sve.c\n+++ b/sysdeps/aarch64/fpu/log1p_sve.c\n@@ -116,3 +116,5 @@ svfloat64_t SV_NAME_D1 (log1p) (svfloat64_t x, svbool_t pg)\n \n   return y;\n }\n+\n+strong_alias (SV_NAME_D1 (log1p), SV_NAME_D1 (logp1))\ndiff --git a/sysdeps/aarch64/fpu/log1pf_advsimd.c b/sysdeps/aarch64/fpu/log1pf_advsimd.c\nindex dc15334a85..8cfa28fb8a 100644\n--- a/sysdeps/aarch64/fpu/log1pf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/log1pf_advsimd.c\n@@ -128,3 +128,6 @@ VPCS_ATTR float32x4_t V_NAME_F1 (log1p) (float32x4_t x)\n }\n libmvec_hidden_def (V_NAME_F1 (log1p))\n HALF_WIDTH_ALIAS_F1 (log1p)\n+strong_alias (V_NAME_F1 (log1p), V_NAME_F1 (logp1))\n+libmvec_hidden_def (V_NAME_F1 (logp1))\n+HALF_WIDTH_ALIAS_F1 (logp1)\ndiff --git a/sysdeps/aarch64/fpu/log1pf_sve.c b/sysdeps/aarch64/fpu/log1pf_sve.c\nindex f645cc997e..5256d5e94c 100644\n--- a/sysdeps/aarch64/fpu/log1pf_sve.c\n+++ b/sysdeps/aarch64/fpu/log1pf_sve.c\n@@ -98,3 +98,5 @@ svfloat32_t SV_NAME_F1 (log1p) (svfloat32_t x, svbool_t pg)\n \n   return y;\n }\n+\n+strong_alias (SV_NAME_F1 (log1p), SV_NAME_F1 (logp1))\ndiff --git a/sysdeps/unix/sysv/linux/aarch64/libmvec.abilist b/sysdeps/unix/sysv/linux/aarch64/libmvec.abilist\nindex b685106954..98687cae0d 100644\n--- a/sysdeps/unix/sysv/linux/aarch64/libmvec.abilist\n+++ b/sysdeps/unix/sysv/linux/aarch64/libmvec.abilist\n@@ -128,3 +128,8 @@ GLIBC_2.40 _ZGVsMxvv_hypot F\n GLIBC_2.40 _ZGVsMxvv_hypotf F\n GLIBC_2.40 _ZGVsMxvv_pow F\n GLIBC_2.40 _ZGVsMxvv_powf F\n+GLIBC_2.41 _ZGVnN2v_logp1 F\n+GLIBC_2.41 _ZGVnN2v_logp1f F\n+GLIBC_2.41 _ZGVnN4v_logp1f F\n+GLIBC_2.41 _ZGVsMxv_logp1 F\n+GLIBC_2.41 _ZGVsMxv_logp1f F\n\ncommit 354aeaf2130c1484007025563fe87c997f07324a\nAuthor: Joe Ramsay <Joe.Ramsay@arm.com>\nDate:   Mon Sep 23 15:26:12 2024 +0100\n\n    AArch64: Improve codegen in SVE expf & related routines\n    \n    Reduce MOV and MOVPRFX by improving special-case handling.  Use inline\n    helper to duplicate the entire computation between the special- and\n    non-special case branches, removing the contention for z0 between x\n    and the return value.\n    \n    Also rearrange some MLAs and MLSs - by making the multiplicand the\n    destination we can avoid a MOVPRFX in several cases.  Also change which\n    constants go in the vector used for lanewise ops - the last lane is no\n    longer wasted.\n    \n    Spotted that shift was incorrect in exp2f and exp10f, w.r.t. to the\n    comment that explains it.  Fixed - worst-case ULP for exp2f moves\n    around but it doesn't change significantly for either routine.\n    \n    Worst-case error for coshf increases due to passing x to exp rather\n    than abs(x) - updated the comment, but does not require regen-ulps.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit 7b8c134b5460ed933d610fa92ed1227372b68fdc)\n\ndiff --git a/sysdeps/aarch64/fpu/coshf_sve.c b/sysdeps/aarch64/fpu/coshf_sve.c\nindex e5d8a299c6..7ad6efa0fc 100644\n--- a/sysdeps/aarch64/fpu/coshf_sve.c\n+++ b/sysdeps/aarch64/fpu/coshf_sve.c\n@@ -23,37 +23,42 @@\n static const struct data\n {\n   struct sv_expf_data expf_consts;\n-  uint32_t special_bound;\n+  float special_bound;\n } data = {\n   .expf_consts = SV_EXPF_DATA,\n   /* 0x1.5a92d8p+6: expf overflows above this, so have to use special case.  */\n-  .special_bound = 0x42ad496c,\n+  .special_bound = 0x1.5a92d8p+6,\n };\n \n static svfloat32_t NOINLINE\n-special_case (svfloat32_t x, svfloat32_t y, svbool_t pg)\n+special_case (svfloat32_t x, svfloat32_t half_e, svfloat32_t half_over_e,\n+\t      svbool_t pg)\n {\n-  return sv_call_f32 (coshf, x, y, pg);\n+  return sv_call_f32 (coshf, x, svadd_x (svptrue_b32 (), half_e, half_over_e),\n+\t\t      pg);\n }\n \n /* Single-precision vector cosh, using vector expf.\n-   Maximum error is 1.89 ULP:\n-   _ZGVsMxv_coshf (-0x1.65898cp+6) got 0x1.f00aep+127\n-\t\t\t\t  want 0x1.f00adcp+127.  */\n+   Maximum error is 2.77 ULP:\n+   _ZGVsMxv_coshf(-0x1.5b38f4p+1) got 0x1.e45946p+2\n+\t\t\t\t want 0x1.e4594cp+2.  */\n svfloat32_t SV_NAME_F1 (cosh) (svfloat32_t x, svbool_t pg)\n {\n   const struct data *d = ptr_barrier (&data);\n \n-  svfloat32_t ax = svabs_x (pg, x);\n-  svbool_t special = svcmpge (pg, svreinterpret_u32 (ax), d->special_bound);\n+  svbool_t special = svacge (pg, x, d->special_bound);\n \n-  /* Calculate cosh by exp(x) / 2 + exp(-x) / 2.  */\n-  svfloat32_t t = expf_inline (ax, pg, &d->expf_consts);\n-  svfloat32_t half_t = svmul_x (pg, t, 0.5);\n-  svfloat32_t half_over_t = svdivr_x (pg, t, 0.5);\n+  /* Calculate cosh by exp(x) / 2 + exp(-x) / 2.\n+     Note that x is passed to exp here, rather than |x|. This is to avoid using\n+     destructive unary ABS for better register usage. However it means the\n+     routine is not exactly symmetrical, as the exp helper is slightly less\n+     accurate in the negative range.  */\n+  svfloat32_t e = expf_inline (x, pg, &d->expf_consts);\n+  svfloat32_t half_e = svmul_x (svptrue_b32 (), e, 0.5);\n+  svfloat32_t half_over_e = svdivr_x (pg, e, 0.5);\n \n   if (__glibc_unlikely (svptest_any (pg, special)))\n-    return special_case (x, svadd_x (pg, half_t, half_over_t), special);\n+    return special_case (x, half_e, half_over_e, special);\n \n-  return svadd_x (pg, half_t, half_over_t);\n+  return svadd_x (svptrue_b32 (), half_e, half_over_e);\n }\ndiff --git a/sysdeps/aarch64/fpu/exp10f_sve.c b/sysdeps/aarch64/fpu/exp10f_sve.c\nindex e09b2f3b27..8aa3fa9c43 100644\n--- a/sysdeps/aarch64/fpu/exp10f_sve.c\n+++ b/sysdeps/aarch64/fpu/exp10f_sve.c\n@@ -18,74 +18,83 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include \"sv_math.h\"\n-#include \"poly_sve_f32.h\"\n \n-/* For x < -SpecialBound, the result is subnormal and not handled correctly by\n+/* For x < -Thres, the result is subnormal and not handled correctly by\n    FEXPA.  */\n-#define SpecialBound 37.9\n+#define Thres 37.9\n \n static const struct data\n {\n-  float poly[5];\n-  float shift, log10_2, log2_10_hi, log2_10_lo, special_bound;\n+  float log2_10_lo, c0, c2, c4;\n+  float c1, c3, log10_2;\n+  float shift, log2_10_hi, thres;\n } data = {\n   /* Coefficients generated using Remez algorithm with minimisation of relative\n      error.\n      rel error: 0x1.89dafa3p-24\n      abs error: 0x1.167d55p-23 in [-log10(2)/2, log10(2)/2]\n      maxerr: 0.52 +0.5 ulp.  */\n-  .poly = { 0x1.26bb16p+1f, 0x1.5350d2p+1f, 0x1.04744ap+1f, 0x1.2d8176p+0f,\n-\t    0x1.12b41ap-1f },\n+  .c0 = 0x1.26bb16p+1f,\n+  .c1 = 0x1.5350d2p+1f,\n+  .c2 = 0x1.04744ap+1f,\n+  .c3 = 0x1.2d8176p+0f,\n+  .c4 = 0x1.12b41ap-1f,\n   /* 1.5*2^17 + 127, a shift value suitable for FEXPA.  */\n-  .shift = 0x1.903f8p17f,\n+  .shift = 0x1.803f8p17f,\n   .log10_2 = 0x1.a934fp+1,\n   .log2_10_hi = 0x1.344136p-2,\n   .log2_10_lo = -0x1.ec10cp-27,\n-  .special_bound = SpecialBound,\n+  .thres = Thres,\n };\n \n-static svfloat32_t NOINLINE\n-special_case (svfloat32_t x, svfloat32_t y, svbool_t special)\n+static inline svfloat32_t\n+sv_exp10f_inline (svfloat32_t x, const svbool_t pg, const struct data *d)\n {\n-  return sv_call_f32 (exp10f, x, y, special);\n-}\n-\n-/* Single-precision SVE exp10f routine. Implements the same algorithm\n-   as AdvSIMD exp10f.\n-   Worst case error is 1.02 ULPs.\n-   _ZGVsMxv_exp10f(-0x1.040488p-4) got 0x1.ba5f9ep-1\n-\t\t\t\t  want 0x1.ba5f9cp-1.  */\n-svfloat32_t SV_NAME_F1 (exp10) (svfloat32_t x, const svbool_t pg)\n-{\n-  const struct data *d = ptr_barrier (&data);\n   /* exp10(x) = 2^(n/N) * 10^r = 2^n * (1 + poly (r)),\n      with poly(r) in [1/sqrt(2), sqrt(2)] and\n      x = r + n * log10(2) / N, with r in [-log10(2)/2N, log10(2)/2N].  */\n \n-  /* Load some constants in quad-word chunks to minimise memory access (last\n-     lane is wasted).  */\n-  svfloat32_t log10_2_and_inv = svld1rq (svptrue_b32 (), &d->log10_2);\n+  svfloat32_t lane_consts = svld1rq (svptrue_b32 (), &d->log2_10_lo);\n \n   /* n = round(x/(log10(2)/N)).  */\n   svfloat32_t shift = sv_f32 (d->shift);\n-  svfloat32_t z = svmla_lane (shift, x, log10_2_and_inv, 0);\n-  svfloat32_t n = svsub_x (pg, z, shift);\n+  svfloat32_t z = svmad_x (pg, sv_f32 (d->log10_2), x, shift);\n+  svfloat32_t n = svsub_x (svptrue_b32 (), z, shift);\n \n   /* r = x - n*log10(2)/N.  */\n-  svfloat32_t r = svmls_lane (x, n, log10_2_and_inv, 1);\n-  r = svmls_lane (r, n, log10_2_and_inv, 2);\n+  svfloat32_t r = svmsb_x (pg, sv_f32 (d->log2_10_hi), n, x);\n+  r = svmls_lane (r, n, lane_consts, 0);\n \n-  svbool_t special = svacgt (pg, x, d->special_bound);\n   svfloat32_t scale = svexpa (svreinterpret_u32 (z));\n \n   /* Polynomial evaluation: poly(r) ~ exp10(r)-1.  */\n-  svfloat32_t r2 = svmul_x (pg, r, r);\n-  svfloat32_t poly\n-      = svmla_x (pg, svmul_x (pg, r, d->poly[0]),\n-\t\t sv_pairwise_poly_3_f32_x (pg, r, r2, d->poly + 1), r2);\n-\n-  if (__glibc_unlikely (svptest_any (pg, special)))\n-    return special_case (x, svmla_x (pg, scale, scale, poly), special);\n+  svfloat32_t p12 = svmla_lane (sv_f32 (d->c1), r, lane_consts, 2);\n+  svfloat32_t p34 = svmla_lane (sv_f32 (d->c3), r, lane_consts, 3);\n+  svfloat32_t r2 = svmul_x (svptrue_b32 (), r, r);\n+  svfloat32_t p14 = svmla_x (pg, p12, p34, r2);\n+  svfloat32_t p0 = svmul_lane (r, lane_consts, 1);\n+  svfloat32_t poly = svmla_x (pg, p0, r2, p14);\n \n   return svmla_x (pg, scale, scale, poly);\n }\n+\n+static svfloat32_t NOINLINE\n+special_case (svfloat32_t x, svbool_t special, const struct data *d)\n+{\n+  return sv_call_f32 (exp10f, x, sv_exp10f_inline (x, svptrue_b32 (), d),\n+\t\t      special);\n+}\n+\n+/* Single-precision SVE exp10f routine. Implements the same algorithm\n+   as AdvSIMD exp10f.\n+   Worst case error is 1.02 ULPs.\n+   _ZGVsMxv_exp10f(-0x1.040488p-4) got 0x1.ba5f9ep-1\n+\t\t\t\t  want 0x1.ba5f9cp-1.  */\n+svfloat32_t SV_NAME_F1 (exp10) (svfloat32_t x, const svbool_t pg)\n+{\n+  const struct data *d = ptr_barrier (&data);\n+  svbool_t special = svacgt (pg, x, d->thres);\n+  if (__glibc_unlikely (svptest_any (special, special)))\n+    return special_case (x, special, d);\n+  return sv_exp10f_inline (x, pg, d);\n+}\ndiff --git a/sysdeps/aarch64/fpu/exp2f_sve.c b/sysdeps/aarch64/fpu/exp2f_sve.c\nindex 8a686e3e05..c6216bed9e 100644\n--- a/sysdeps/aarch64/fpu/exp2f_sve.c\n+++ b/sysdeps/aarch64/fpu/exp2f_sve.c\n@@ -24,54 +24,64 @@\n \n static const struct data\n {\n-  float poly[5];\n+  float c0, c2, c4, c1, c3;\n   float shift, thres;\n } data = {\n-  /* Coefficients copied from the polynomial in AdvSIMD variant, reversed for\n-     compatibility with polynomial helpers.  */\n-  .poly = { 0x1.62e422p-1f, 0x1.ebf9bcp-3f, 0x1.c6bd32p-5f, 0x1.3ce9e4p-7f,\n-\t    0x1.59977ap-10f },\n+  /* Coefficients copied from the polynomial in AdvSIMD variant.  */\n+  .c0 = 0x1.62e422p-1f,\n+  .c1 = 0x1.ebf9bcp-3f,\n+  .c2 = 0x1.c6bd32p-5f,\n+  .c3 = 0x1.3ce9e4p-7f,\n+  .c4 = 0x1.59977ap-10f,\n   /* 1.5*2^17 + 127.  */\n-  .shift = 0x1.903f8p17f,\n+  .shift = 0x1.803f8p17f,\n   /* Roughly 87.3. For x < -Thres, the result is subnormal and not handled\n      correctly by FEXPA.  */\n   .thres = Thres,\n };\n \n-static svfloat32_t NOINLINE\n-special_case (svfloat32_t x, svfloat32_t y, svbool_t special)\n-{\n-  return sv_call_f32 (exp2f, x, y, special);\n-}\n-\n-/* Single-precision SVE exp2f routine. Implements the same algorithm\n-   as AdvSIMD exp2f.\n-   Worst case error is 1.04 ULPs.\n-   SV_NAME_F1 (exp2)(0x1.943b9p-1) got 0x1.ba7eb2p+0\n-\t\t\t\t  want 0x1.ba7ebp+0.  */\n-svfloat32_t SV_NAME_F1 (exp2) (svfloat32_t x, const svbool_t pg)\n+static inline svfloat32_t\n+sv_exp2f_inline (svfloat32_t x, const svbool_t pg, const struct data *d)\n {\n-  const struct data *d = ptr_barrier (&data);\n   /* exp2(x) = 2^n (1 + poly(r)), with 1 + poly(r) in [1/sqrt(2),sqrt(2)]\n     x = n + r, with r in [-1/2, 1/2].  */\n-  svfloat32_t shift = sv_f32 (d->shift);\n-  svfloat32_t z = svadd_x (pg, x, shift);\n-  svfloat32_t n = svsub_x (pg, z, shift);\n-  svfloat32_t r = svsub_x (pg, x, n);\n+  svfloat32_t z = svadd_x (svptrue_b32 (), x, d->shift);\n+  svfloat32_t n = svsub_x (svptrue_b32 (), z, d->shift);\n+  svfloat32_t r = svsub_x (svptrue_b32 (), x, n);\n \n-  svbool_t special = svacgt (pg, x, d->thres);\n   svfloat32_t scale = svexpa (svreinterpret_u32 (z));\n \n   /* Polynomial evaluation: poly(r) ~ exp2(r)-1.\n      Evaluate polynomial use hybrid scheme - offset ESTRIN by 1 for\n      coefficients 1 to 4, and apply most significant coefficient directly.  */\n-  svfloat32_t r2 = svmul_x (pg, r, r);\n-  svfloat32_t p14 = sv_pairwise_poly_3_f32_x (pg, r, r2, d->poly + 1);\n-  svfloat32_t p0 = svmul_x (pg, r, d->poly[0]);\n+  svfloat32_t even_coeffs = svld1rq (svptrue_b32 (), &d->c0);\n+  svfloat32_t r2 = svmul_x (svptrue_b32 (), r, r);\n+  svfloat32_t p12 = svmla_lane (sv_f32 (d->c1), r, even_coeffs, 1);\n+  svfloat32_t p34 = svmla_lane (sv_f32 (d->c3), r, even_coeffs, 2);\n+  svfloat32_t p14 = svmla_x (pg, p12, r2, p34);\n+  svfloat32_t p0 = svmul_lane (r, even_coeffs, 0);\n   svfloat32_t poly = svmla_x (pg, p0, r2, p14);\n \n-  if (__glibc_unlikely (svptest_any (pg, special)))\n-    return special_case (x, svmla_x (pg, scale, scale, poly), special);\n-\n   return svmla_x (pg, scale, scale, poly);\n }\n+\n+static svfloat32_t NOINLINE\n+special_case (svfloat32_t x, svbool_t special, const struct data *d)\n+{\n+  return sv_call_f32 (exp2f, x, sv_exp2f_inline (x, svptrue_b32 (), d),\n+\t\t      special);\n+}\n+\n+/* Single-precision SVE exp2f routine. Implements the same algorithm\n+   as AdvSIMD exp2f.\n+   Worst case error is 1.04 ULPs.\n+   _ZGVsMxv_exp2f(-0x1.af994ap-3) got 0x1.ba6a66p-1\n+\t\t\t\t want 0x1.ba6a64p-1.  */\n+svfloat32_t SV_NAME_F1 (exp2) (svfloat32_t x, const svbool_t pg)\n+{\n+  const struct data *d = ptr_barrier (&data);\n+  svbool_t special = svacgt (pg, x, d->thres);\n+  if (__glibc_unlikely (svptest_any (special, special)))\n+    return special_case (x, special, d);\n+  return sv_exp2f_inline (x, pg, d);\n+}\ndiff --git a/sysdeps/aarch64/fpu/expf_sve.c b/sysdeps/aarch64/fpu/expf_sve.c\nindex 3ba79bc4f1..da93e01b87 100644\n--- a/sysdeps/aarch64/fpu/expf_sve.c\n+++ b/sysdeps/aarch64/fpu/expf_sve.c\n@@ -18,33 +18,25 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include \"sv_math.h\"\n+#include \"sv_expf_inline.h\"\n+\n+/* Roughly 87.3. For x < -Thres, the result is subnormal and not handled\n+   correctly by FEXPA.  */\n+#define Thres 0x1.5d5e2ap+6f\n \n static const struct data\n {\n-  float poly[5];\n-  float inv_ln2, ln2_hi, ln2_lo, shift, thres;\n+  struct sv_expf_data d;\n+  float thres;\n } data = {\n-  /* Coefficients copied from the polynomial in AdvSIMD variant, reversed for\n-     compatibility with polynomial helpers.  */\n-  .poly = { 0x1.ffffecp-1f, 0x1.fffdb6p-2f, 0x1.555e66p-3f, 0x1.573e2ep-5f,\n-\t    0x1.0e4020p-7f },\n-  .inv_ln2 = 0x1.715476p+0f,\n-  .ln2_hi = 0x1.62e4p-1f,\n-  .ln2_lo = 0x1.7f7d1cp-20f,\n-  /* 1.5*2^17 + 127.  */\n-  .shift = 0x1.903f8p17f,\n-  /* Roughly 87.3. For x < -Thres, the result is subnormal and not handled\n-     correctly by FEXPA.  */\n-  .thres = 0x1.5d5e2ap+6f,\n+  .d = SV_EXPF_DATA,\n+  .thres = Thres,\n };\n \n-#define C(i) sv_f32 (d->poly[i])\n-#define ExponentBias 0x3f800000\n-\n static svfloat32_t NOINLINE\n-special_case (svfloat32_t x, svfloat32_t y, svbool_t special)\n+special_case (svfloat32_t x, svbool_t special, const struct sv_expf_data *d)\n {\n-  return sv_call_f32 (expf, x, y, special);\n+  return sv_call_f32 (expf, x, expf_inline (x, svptrue_b32 (), d), special);\n }\n \n /* Optimised single-precision SVE exp function.\n@@ -54,36 +46,8 @@ special_case (svfloat32_t x, svfloat32_t y, svbool_t special)\n svfloat32_t SV_NAME_F1 (exp) (svfloat32_t x, const svbool_t pg)\n {\n   const struct data *d = ptr_barrier (&data);\n-\n-  /* exp(x) = 2^n (1 + poly(r)), with 1 + poly(r) in [1/sqrt(2),sqrt(2)]\n-     x = ln2*n + r, with r in [-ln2/2, ln2/2].  */\n-\n-  /* Load some constants in quad-word chunks to minimise memory access (last\n-     lane is wasted).  */\n-  svfloat32_t invln2_and_ln2 = svld1rq (svptrue_b32 (), &d->inv_ln2);\n-\n-  /* n = round(x/(ln2/N)).  */\n-  svfloat32_t z = svmla_lane (sv_f32 (d->shift), x, invln2_and_ln2, 0);\n-  svfloat32_t n = svsub_x (pg, z, d->shift);\n-\n-  /* r = x - n*ln2/N.  */\n-  svfloat32_t r = svmls_lane (x, n, invln2_and_ln2, 1);\n-  r = svmls_lane (r, n, invln2_and_ln2, 2);\n-\n-  /* scale = 2^(n/N).  */\n   svbool_t is_special_case = svacgt (pg, x, d->thres);\n-  svfloat32_t scale = svexpa (svreinterpret_u32 (z));\n-\n-  /* y = exp(r) - 1 ~= r + C0 r^2 + C1 r^3 + C2 r^4 + C3 r^5 + C4 r^6.  */\n-  svfloat32_t p12 = svmla_x (pg, C (1), C (2), r);\n-  svfloat32_t p34 = svmla_x (pg, C (3), C (4), r);\n-  svfloat32_t r2 = svmul_x (pg, r, r);\n-  svfloat32_t p14 = svmla_x (pg, p12, p34, r2);\n-  svfloat32_t p0 = svmul_x (pg, r, C (0));\n-  svfloat32_t poly = svmla_x (pg, p0, r2, p14);\n-\n   if (__glibc_unlikely (svptest_any (pg, is_special_case)))\n-    return special_case (x, svmla_x (pg, scale, scale, poly), is_special_case);\n-\n-  return svmla_x (pg, scale, scale, poly);\n+    return special_case (x, is_special_case, &d->d);\n+  return expf_inline (x, pg, &d->d);\n }\ndiff --git a/sysdeps/aarch64/fpu/sv_expf_inline.h b/sysdeps/aarch64/fpu/sv_expf_inline.h\nindex 23963b5f8e..6166df6553 100644\n--- a/sysdeps/aarch64/fpu/sv_expf_inline.h\n+++ b/sysdeps/aarch64/fpu/sv_expf_inline.h\n@@ -24,19 +24,20 @@\n \n struct sv_expf_data\n {\n-  float poly[5];\n-  float inv_ln2, ln2_hi, ln2_lo, shift;\n+  float c1, c3, inv_ln2;\n+  float ln2_lo, c0, c2, c4;\n+  float ln2_hi, shift;\n };\n \n /* Coefficients copied from the polynomial in AdvSIMD variant, reversed for\n    compatibility with polynomial helpers. Shift is 1.5*2^17 + 127.  */\n #define SV_EXPF_DATA                                                          \\\n   {                                                                           \\\n-    .poly = { 0x1.ffffecp-1f, 0x1.fffdb6p-2f, 0x1.555e66p-3f, 0x1.573e2ep-5f, \\\n-\t      0x1.0e4020p-7f },                                               \\\n-                                                                              \\\n-    .inv_ln2 = 0x1.715476p+0f, .ln2_hi = 0x1.62e4p-1f,                        \\\n-    .ln2_lo = 0x1.7f7d1cp-20f, .shift = 0x1.803f8p17f,                        \\\n+    /* Coefficients copied from the polynomial in AdvSIMD variant.  */        \\\n+    .c0 = 0x1.ffffecp-1f, .c1 = 0x1.fffdb6p-2f, .c2 = 0x1.555e66p-3f,         \\\n+    .c3 = 0x1.573e2ep-5f, .c4 = 0x1.0e4020p-7f, .inv_ln2 = 0x1.715476p+0f,    \\\n+    .ln2_hi = 0x1.62e4p-1f, .ln2_lo = 0x1.7f7d1cp-20f,                        \\\n+    .shift = 0x1.803f8p17f,                                                   \\\n   }\n \n #define C(i) sv_f32 (d->poly[i])\n@@ -47,26 +48,25 @@ expf_inline (svfloat32_t x, const svbool_t pg, const struct sv_expf_data *d)\n   /* exp(x) = 2^n (1 + poly(r)), with 1 + poly(r) in [1/sqrt(2),sqrt(2)]\n      x = ln2*n + r, with r in [-ln2/2, ln2/2].  */\n \n-  /* Load some constants in quad-word chunks to minimise memory access.  */\n-  svfloat32_t c4_invln2_and_ln2 = svld1rq (svptrue_b32 (), &d->poly[4]);\n+  svfloat32_t lane_consts = svld1rq (svptrue_b32 (), &d->ln2_lo);\n \n   /* n = round(x/(ln2/N)).  */\n-  svfloat32_t z = svmla_lane (sv_f32 (d->shift), x, c4_invln2_and_ln2, 1);\n+  svfloat32_t z = svmad_x (pg, sv_f32 (d->inv_ln2), x, d->shift);\n   svfloat32_t n = svsub_x (pg, z, d->shift);\n \n   /* r = x - n*ln2/N.  */\n-  svfloat32_t r = svmls_lane (x, n, c4_invln2_and_ln2, 2);\n-  r = svmls_lane (r, n, c4_invln2_and_ln2, 3);\n+  svfloat32_t r = svmsb_x (pg, sv_f32 (d->ln2_hi), n, x);\n+  r = svmls_lane (r, n, lane_consts, 0);\n \n   /* scale = 2^(n/N).  */\n-  svfloat32_t scale = svexpa (svreinterpret_u32_f32 (z));\n+  svfloat32_t scale = svexpa (svreinterpret_u32 (z));\n \n   /* y = exp(r) - 1 ~= r + C0 r^2 + C1 r^3 + C2 r^4 + C3 r^5 + C4 r^6.  */\n-  svfloat32_t p12 = svmla_x (pg, C (1), C (2), r);\n-  svfloat32_t p34 = svmla_lane (C (3), r, c4_invln2_and_ln2, 0);\n-  svfloat32_t r2 = svmul_f32_x (pg, r, r);\n+  svfloat32_t p12 = svmla_lane (sv_f32 (d->c1), r, lane_consts, 2);\n+  svfloat32_t p34 = svmla_lane (sv_f32 (d->c3), r, lane_consts, 3);\n+  svfloat32_t r2 = svmul_x (svptrue_b32 (), r, r);\n   svfloat32_t p14 = svmla_x (pg, p12, p34, r2);\n-  svfloat32_t p0 = svmul_f32_x (pg, r, C (0));\n+  svfloat32_t p0 = svmul_lane (r, lane_consts, 1);\n   svfloat32_t poly = svmla_x (pg, p0, r2, p14);\n \n   return svmla_x (pg, scale, scale, poly);\n\ncommit c4373426e3a85ec483a0f412c2a7c6cdfa32ccdb\nAuthor: Joe Ramsay <Joe.Ramsay@arm.com>\nDate:   Mon Sep 23 15:30:20 2024 +0100\n\n    AArch64: Improve codegen in SVE F32 logs\n    \n    Reduce MOVPRFXs by using unpredicated (non-destructive) instructions\n    where possible.  Similar to the recent change to AdvSIMD F32 logs,\n    adjust special-case arguments and bounds to allow for more optimal\n    register usage.  For all 3 routines one MOVPRFX remains in the\n    reduction, which cannot be avoided as immediate AND and ASR are both\n    destructive.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit a15b1394b5eba98ffe28a02a392b587e4fe13c0d)\n\ndiff --git a/sysdeps/aarch64/fpu/log10f_sve.c b/sysdeps/aarch64/fpu/log10f_sve.c\nindex bdbb49cd32..7913679f67 100644\n--- a/sysdeps/aarch64/fpu/log10f_sve.c\n+++ b/sysdeps/aarch64/fpu/log10f_sve.c\n@@ -24,6 +24,7 @@ static const struct data\n   float poly_0246[4];\n   float poly_1357[4];\n   float ln2, inv_ln10;\n+  uint32_t off, lower;\n } data = {\n   .poly_1357 = {\n     /* Coefficients copied from the AdvSIMD routine, then rearranged so that coeffs\n@@ -35,18 +36,23 @@ static const struct data\n \t\t -0x1.0fc92cp-4f },\n   .ln2 = 0x1.62e43p-1f,\n   .inv_ln10 = 0x1.bcb7b2p-2f,\n+  .off = 0x3f2aaaab,\n+  /* Lower bound is the smallest positive normal float 0x00800000. For\n+     optimised register use subnormals are detected after offset has been\n+     subtracted, so lower bound is 0x0080000 - offset (which wraps around).  */\n+  .lower = 0x00800000 - 0x3f2aaaab\n };\n \n-#define Min 0x00800000\n-#define Max 0x7f800000\n-#define Thres 0x7f000000  /* Max - Min.  */\n-#define Offset 0x3f2aaaab /* 0.666667.  */\n+#define Thres 0x7f000000 /* asuint32(inf) - 0x00800000.  */\n #define MantissaMask 0x007fffff\n \n static svfloat32_t NOINLINE\n-special_case (svfloat32_t x, svfloat32_t y, svbool_t special)\n+special_case (svuint32_t u_off, svfloat32_t p, svfloat32_t r2, svfloat32_t y,\n+\t      svbool_t cmp)\n {\n-  return sv_call_f32 (log10f, x, y, special);\n+  return sv_call_f32 (\n+      log10f, svreinterpret_f32 (svadd_x (svptrue_b32 (), u_off, data.off)),\n+      svmla_x (svptrue_b32 (), p, r2, y), cmp);\n }\n \n /* Optimised implementation of SVE log10f using the same algorithm and\n@@ -57,23 +63,25 @@ special_case (svfloat32_t x, svfloat32_t y, svbool_t special)\n svfloat32_t SV_NAME_F1 (log10) (svfloat32_t x, const svbool_t pg)\n {\n   const struct data *d = ptr_barrier (&data);\n-  svuint32_t ix = svreinterpret_u32 (x);\n-  svbool_t special = svcmpge (pg, svsub_x (pg, ix, Min), Thres);\n+\n+  svuint32_t u_off = svreinterpret_u32 (x);\n+\n+  u_off = svsub_x (pg, u_off, d->off);\n+  svbool_t special = svcmpge (pg, svsub_x (pg, u_off, d->lower), Thres);\n \n   /* x = 2^n * (1+r), where 2/3 < 1+r < 4/3.  */\n-  ix = svsub_x (pg, ix, Offset);\n   svfloat32_t n = svcvt_f32_x (\n-      pg, svasr_x (pg, svreinterpret_s32 (ix), 23)); /* signextend.  */\n-  ix = svand_x (pg, ix, MantissaMask);\n-  ix = svadd_x (pg, ix, Offset);\n+      pg, svasr_x (pg, svreinterpret_s32 (u_off), 23)); /* signextend.  */\n+  svuint32_t ix = svand_x (pg, u_off, MantissaMask);\n+  ix = svadd_x (pg, ix, d->off);\n   svfloat32_t r = svsub_x (pg, svreinterpret_f32 (ix), 1.0f);\n \n   /* y = log10(1+r) + n*log10(2)\n      log10(1+r) ~ r * InvLn(10) + P(r)\n      where P(r) is a polynomial. Use order 9 for log10(1+x), i.e. order 8 for\n      log10(1+x)/x, with x in [-1/3, 1/3] (offset=2/3).  */\n-  svfloat32_t r2 = svmul_x (pg, r, r);\n-  svfloat32_t r4 = svmul_x (pg, r2, r2);\n+  svfloat32_t r2 = svmul_x (svptrue_b32 (), r, r);\n+  svfloat32_t r4 = svmul_x (svptrue_b32 (), r2, r2);\n   svfloat32_t p_1357 = svld1rq (svptrue_b32 (), &d->poly_1357[0]);\n   svfloat32_t q_01 = svmla_lane (sv_f32 (d->poly_0246[0]), r, p_1357, 0);\n   svfloat32_t q_23 = svmla_lane (sv_f32 (d->poly_0246[1]), r, p_1357, 1);\n@@ -88,7 +96,6 @@ svfloat32_t SV_NAME_F1 (log10) (svfloat32_t x, const svbool_t pg)\n   hi = svmul_x (pg, hi, d->inv_ln10);\n \n   if (__glibc_unlikely (svptest_any (pg, special)))\n-    return special_case (x, svmla_x (svnot_z (pg, special), hi, r2, y),\n-\t\t\t special);\n-  return svmla_x (pg, hi, r2, y);\n+    return special_case (u_off, hi, r2, y, special);\n+  return svmla_x (svptrue_b32 (), hi, r2, y);\n }\ndiff --git a/sysdeps/aarch64/fpu/log2f_sve.c b/sysdeps/aarch64/fpu/log2f_sve.c\nindex 5031c42483..939d89bfb9 100644\n--- a/sysdeps/aarch64/fpu/log2f_sve.c\n+++ b/sysdeps/aarch64/fpu/log2f_sve.c\n@@ -23,6 +23,7 @@ static const struct data\n {\n   float poly_02468[5];\n   float poly_1357[4];\n+  uint32_t off, lower;\n } data = {\n   .poly_1357 = {\n     /* Coefficients copied from the AdvSIMD routine, then rearranged so that coeffs\n@@ -32,18 +33,23 @@ static const struct data\n   },\n   .poly_02468 = { 0x1.715476p0f, 0x1.ec701cp-2f, 0x1.27a0b8p-2f,\n \t\t  0x1.9d8ecap-3f, 0x1.9e495p-3f },\n+  .off = 0x3f2aaaab,\n+  /* Lower bound is the smallest positive normal float 0x00800000. For\n+     optimised register use subnormals are detected after offset has been\n+     subtracted, so lower bound is 0x0080000 - offset (which wraps around).  */\n+  .lower = 0x00800000 - 0x3f2aaaab\n };\n \n-#define Min (0x00800000)\n-#define Max (0x7f800000)\n-#define Thres (0x7f000000) /* Max - Min.  */\n+#define Thresh (0x7f000000) /* asuint32(inf) - 0x00800000.  */\n #define MantissaMask (0x007fffff)\n-#define Off (0x3f2aaaab) /* 0.666667.  */\n \n static svfloat32_t NOINLINE\n-special_case (svfloat32_t x, svfloat32_t y, svbool_t cmp)\n+special_case (svuint32_t u_off, svfloat32_t p, svfloat32_t r2, svfloat32_t y,\n+\t      svbool_t cmp)\n {\n-  return sv_call_f32 (log2f, x, y, cmp);\n+  return sv_call_f32 (\n+      log2f, svreinterpret_f32 (svadd_x (svptrue_b32 (), u_off, data.off)),\n+      svmla_x (svptrue_b32 (), p, r2, y), cmp);\n }\n \n /* Optimised implementation of SVE log2f, using the same algorithm\n@@ -55,19 +61,20 @@ svfloat32_t SV_NAME_F1 (log2) (svfloat32_t x, const svbool_t pg)\n {\n   const struct data *d = ptr_barrier (&data);\n \n-  svuint32_t u = svreinterpret_u32 (x);\n-  svbool_t special = svcmpge (pg, svsub_x (pg, u, Min), Thres);\n+  svuint32_t u_off = svreinterpret_u32 (x);\n+\n+  u_off = svsub_x (pg, u_off, d->off);\n+  svbool_t special = svcmpge (pg, svsub_x (pg, u_off, d->lower), Thresh);\n \n   /* x = 2^n * (1+r), where 2/3 < 1+r < 4/3.  */\n-  u = svsub_x (pg, u, Off);\n   svfloat32_t n = svcvt_f32_x (\n-      pg, svasr_x (pg, svreinterpret_s32 (u), 23)); /* Sign-extend.  */\n-  u = svand_x (pg, u, MantissaMask);\n-  u = svadd_x (pg, u, Off);\n+      pg, svasr_x (pg, svreinterpret_s32 (u_off), 23)); /* Sign-extend.  */\n+  svuint32_t u = svand_x (pg, u_off, MantissaMask);\n+  u = svadd_x (pg, u, d->off);\n   svfloat32_t r = svsub_x (pg, svreinterpret_f32 (u), 1.0f);\n \n   /* y = log2(1+r) + n.  */\n-  svfloat32_t r2 = svmul_x (pg, r, r);\n+  svfloat32_t r2 = svmul_x (svptrue_b32 (), r, r);\n \n   /* Evaluate polynomial using pairwise Horner scheme.  */\n   svfloat32_t p_1357 = svld1rq (svptrue_b32 (), &d->poly_1357[0]);\n@@ -81,6 +88,6 @@ svfloat32_t SV_NAME_F1 (log2) (svfloat32_t x, const svbool_t pg)\n   y = svmla_x (pg, q_01, r2, y);\n \n   if (__glibc_unlikely (svptest_any (pg, special)))\n-    return special_case (x, svmla_x (svnot_z (pg, special), n, r, y), special);\n-  return svmla_x (pg, n, r, y);\n+    return special_case (u_off, n, r, y, special);\n+  return svmla_x (svptrue_b32 (), n, r, y);\n }\ndiff --git a/sysdeps/aarch64/fpu/logf_sve.c b/sysdeps/aarch64/fpu/logf_sve.c\nindex d64e810cfe..5b9324678d 100644\n--- a/sysdeps/aarch64/fpu/logf_sve.c\n+++ b/sysdeps/aarch64/fpu/logf_sve.c\n@@ -24,6 +24,7 @@ static const struct data\n   float poly_0135[4];\n   float poly_246[3];\n   float ln2;\n+  uint32_t off, lower;\n } data = {\n   .poly_0135 = {\n     /* Coefficients copied from the AdvSIMD routine in math/, then rearranged so\n@@ -32,19 +33,24 @@ static const struct data\n     -0x1.3e737cp-3f, 0x1.5a9aa2p-3f, 0x1.961348p-3f, 0x1.555d7cp-2f\n   },\n   .poly_246 = { -0x1.4f9934p-3f, -0x1.00187cp-2f, -0x1.ffffc8p-2f },\n-  .ln2 = 0x1.62e43p-1f\n+  .ln2 = 0x1.62e43p-1f,\n+  .off = 0x3f2aaaab,\n+  /* Lower bound is the smallest positive normal float 0x00800000. For\n+     optimised register use subnormals are detected after offset has been\n+     subtracted, so lower bound is 0x0080000 - offset (which wraps around).  */\n+  .lower = 0x00800000 - 0x3f2aaaab\n };\n \n-#define Min (0x00800000)\n-#define Max (0x7f800000)\n-#define Thresh (0x7f000000) /* Max - Min.  */\n+#define Thresh (0x7f000000) /* asuint32(inf) - 0x00800000.  */\n #define Mask (0x007fffff)\n-#define Off (0x3f2aaaab) /* 0.666667.  */\n \n static svfloat32_t NOINLINE\n-special_case (svfloat32_t x, svfloat32_t y, svbool_t cmp)\n+special_case (svuint32_t u_off, svfloat32_t p, svfloat32_t r2, svfloat32_t y,\n+\t      svbool_t cmp)\n {\n-  return sv_call_f32 (logf, x, y, cmp);\n+  return sv_call_f32 (\n+      logf, svreinterpret_f32 (svadd_x (svptrue_b32 (), u_off, data.off)),\n+      svmla_x (svptrue_b32 (), p, r2, y), cmp);\n }\n \n /* Optimised implementation of SVE logf, using the same algorithm and\n@@ -55,19 +61,21 @@ svfloat32_t SV_NAME_F1 (log) (svfloat32_t x, const svbool_t pg)\n {\n   const struct data *d = ptr_barrier (&data);\n \n-  svuint32_t u = svreinterpret_u32 (x);\n-  svbool_t cmp = svcmpge (pg, svsub_x (pg, u, Min), Thresh);\n+  svuint32_t u_off = svreinterpret_u32 (x);\n+\n+  u_off = svsub_x (pg, u_off, d->off);\n+  svbool_t cmp = svcmpge (pg, svsub_x (pg, u_off, d->lower), Thresh);\n \n   /* x = 2^n * (1+r), where 2/3 < 1+r < 4/3.  */\n-  u = svsub_x (pg, u, Off);\n   svfloat32_t n = svcvt_f32_x (\n-      pg, svasr_x (pg, svreinterpret_s32 (u), 23)); /* Sign-extend.  */\n-  u = svand_x (pg, u, Mask);\n-  u = svadd_x (pg, u, Off);\n+      pg, svasr_x (pg, svreinterpret_s32 (u_off), 23)); /* Sign-extend.  */\n+\n+  svuint32_t u = svand_x (pg, u_off, Mask);\n+  u = svadd_x (pg, u, d->off);\n   svfloat32_t r = svsub_x (pg, svreinterpret_f32 (u), 1.0f);\n \n   /* y = log(1+r) + n*ln2.  */\n-  svfloat32_t r2 = svmul_x (pg, r, r);\n+  svfloat32_t r2 = svmul_x (svptrue_b32 (), r, r);\n   /* n*ln2 + r + r2*(P6 + r*P5 + r2*(P4 + r*P3 + r2*(P2 + r*P1 + r2*P0))).  */\n   svfloat32_t p_0135 = svld1rq (svptrue_b32 (), &d->poly_0135[0]);\n   svfloat32_t p = svmla_lane (sv_f32 (d->poly_246[0]), r, p_0135, 1);\n@@ -80,6 +88,6 @@ svfloat32_t SV_NAME_F1 (log) (svfloat32_t x, const svbool_t pg)\n   p = svmla_x (pg, r, n, d->ln2);\n \n   if (__glibc_unlikely (svptest_any (pg, cmp)))\n-    return special_case (x, svmla_x (svnot_z (pg, cmp), p, r2, y), cmp);\n+    return special_case (u_off, p, r2, y, cmp);\n   return svmla_x (pg, p, r2, y);\n }\n\ncommit 520240173029fd03388ec01db9a5359291cbbd27\nAuthor: Joe Ramsay <Joe.Ramsay@arm.com>\nDate:   Mon Sep 23 15:32:14 2024 +0100\n\n    AArch64: Improve codegen in users of AdvSIMD log1pf helper\n    \n    log1pf is quite register-intensive - use fewer registers for the\n    polynomial, and make various changes to shorten dependency chains in\n    parent routines.  There is now no spilling with GCC 14.  Accuracy moves\n    around a little - comments adjusted accordingly but does not require\n    regen-ulps.\n    \n    Use the helper in log1pf as well, instead of having separate\n    implementations.  The more accurate polynomial means special-casing can\n    be simplified, and the shorter dependency chain avoids the usual dance\n    around v0, which is otherwise difficult.\n    \n    There is a small duplication of vectors containing 1.0f (or 0x3f800000) -\n    GCC is not currently able to efficiently handle values which fit in FMOV\n    but not MOVI, and are reinterpreted to integer.  There may be potential\n    for more optimisation if this is fixed.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit 5bc100bd4b7e00db3009ae93d25d303341545d23)\n\ndiff --git a/sysdeps/aarch64/fpu/acoshf_advsimd.c b/sysdeps/aarch64/fpu/acoshf_advsimd.c\nindex 8916dcbf40..004474acf9 100644\n--- a/sysdeps/aarch64/fpu/acoshf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/acoshf_advsimd.c\n@@ -25,35 +25,32 @@ const static struct data\n {\n   struct v_log1pf_data log1pf_consts;\n   uint32x4_t one;\n-  uint16x4_t thresh;\n-} data = {\n-  .log1pf_consts = V_LOG1PF_CONSTANTS_TABLE,\n-  .one = V4 (0x3f800000),\n-  .thresh = V4 (0x2000) /* top(asuint(SquareLim) - asuint(1)).  */\n-};\n+} data = { .log1pf_consts = V_LOG1PF_CONSTANTS_TABLE, .one = V4 (0x3f800000) };\n+\n+#define Thresh vdup_n_u16 (0x2000) /* top(asuint(SquareLim) - asuint(1)).  */\n \n static float32x4_t NOINLINE VPCS_ATTR\n special_case (float32x4_t x, float32x4_t y, uint16x4_t special,\n-\t      const struct v_log1pf_data d)\n+\t      const struct v_log1pf_data *d)\n {\n   return v_call_f32 (acoshf, x, log1pf_inline (y, d), vmovl_u16 (special));\n }\n \n /* Vector approximation for single-precision acosh, based on log1p. Maximum\n    error depends on WANT_SIMD_EXCEPT. With SIMD fp exceptions enabled, it\n-   is 2.78 ULP:\n-   __v_acoshf(0x1.07887p+0) got 0x1.ef9e9cp-3\n-\t\t\t   want 0x1.ef9ea2p-3.\n+   is 3.00 ULP:\n+   _ZGVnN4v_acoshf(0x1.01df3ap+0) got 0x1.ef0a82p-4\n+\t\t\t\t want 0x1.ef0a7cp-4.\n    With exceptions disabled, we can compute u with a shorter dependency chain,\n-   which gives maximum error of 3.07 ULP:\n-  __v_acoshf(0x1.01f83ep+0) got 0x1.fbc7fap-4\n-\t\t\t   want 0x1.fbc7f4p-4.  */\n+   which gives maximum error of 3.22 ULP:\n+   _ZGVnN4v_acoshf(0x1.007ef2p+0) got 0x1.fdcdccp-5\n+\t\t\t\t want 0x1.fdcdd2p-5.  */\n \n VPCS_ATTR float32x4_t NOINLINE V_NAME_F1 (acosh) (float32x4_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n   uint32x4_t ix = vreinterpretq_u32_f32 (x);\n-  uint16x4_t special = vcge_u16 (vsubhn_u32 (ix, d->one), d->thresh);\n+  uint16x4_t special = vcge_u16 (vsubhn_u32 (ix, d->one), Thresh);\n \n #if WANT_SIMD_EXCEPT\n   /* Mask special lanes with 1 to side-step spurious invalid or overflow. Use\n@@ -64,15 +61,16 @@ VPCS_ATTR float32x4_t NOINLINE V_NAME_F1 (acosh) (float32x4_t x)\n   float32x4_t xm1 = v_zerofy_f32 (vsubq_f32 (x, v_f32 (1)), p);\n   float32x4_t u = vfmaq_f32 (vaddq_f32 (xm1, xm1), xm1, xm1);\n #else\n-  float32x4_t xm1 = vsubq_f32 (x, v_f32 (1));\n-  float32x4_t u = vmulq_f32 (xm1, vaddq_f32 (x, v_f32 (1.0f)));\n+  float32x4_t xm1 = vsubq_f32 (x, vreinterpretq_f32_u32 (d->one));\n+  float32x4_t u\n+      = vmulq_f32 (xm1, vaddq_f32 (x, vreinterpretq_f32_u32 (d->one)));\n #endif\n \n   float32x4_t y = vaddq_f32 (xm1, vsqrtq_f32 (u));\n \n   if (__glibc_unlikely (v_any_u16h (special)))\n-    return special_case (x, y, special, d->log1pf_consts);\n-  return log1pf_inline (y, d->log1pf_consts);\n+    return special_case (x, y, special, &d->log1pf_consts);\n+  return log1pf_inline (y, &d->log1pf_consts);\n }\n libmvec_hidden_def (V_NAME_F1 (acosh))\n HALF_WIDTH_ALIAS_F1 (acosh)\ndiff --git a/sysdeps/aarch64/fpu/asinhf_advsimd.c b/sysdeps/aarch64/fpu/asinhf_advsimd.c\nindex 09fd8a6143..eb789b91b6 100644\n--- a/sysdeps/aarch64/fpu/asinhf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/asinhf_advsimd.c\n@@ -20,16 +20,16 @@\n #include \"v_math.h\"\n #include \"v_log1pf_inline.h\"\n \n-#define SignMask v_u32 (0x80000000)\n-\n const static struct data\n {\n   struct v_log1pf_data log1pf_consts;\n+  float32x4_t one;\n   uint32x4_t big_bound;\n #if WANT_SIMD_EXCEPT\n   uint32x4_t tiny_bound;\n #endif\n } data = {\n+  .one = V4 (1),\n   .log1pf_consts = V_LOG1PF_CONSTANTS_TABLE,\n   .big_bound = V4 (0x5f800000), /* asuint(0x1p64).  */\n #if WANT_SIMD_EXCEPT\n@@ -38,20 +38,27 @@ const static struct data\n };\n \n static float32x4_t NOINLINE VPCS_ATTR\n-special_case (float32x4_t x, float32x4_t y, uint32x4_t special)\n+special_case (float32x4_t x, uint32x4_t sign, float32x4_t y,\n+\t      uint32x4_t special, const struct data *d)\n {\n-  return v_call_f32 (asinhf, x, y, special);\n+  return v_call_f32 (\n+      asinhf, x,\n+      vreinterpretq_f32_u32 (veorq_u32 (\n+\t  sign, vreinterpretq_u32_f32 (log1pf_inline (y, &d->log1pf_consts)))),\n+      special);\n }\n \n /* Single-precision implementation of vector asinh(x), using vector log1p.\n-   Worst-case error is 2.66 ULP, at roughly +/-0.25:\n-   __v_asinhf(0x1.01b04p-2) got 0x1.fe163ep-3 want 0x1.fe1638p-3.  */\n+   Worst-case error is 2.59 ULP:\n+   _ZGVnN4v_asinhf(0x1.d86124p-3) got 0x1.d449bep-3\n+\t\t\t\t want 0x1.d449c4p-3.  */\n VPCS_ATTR float32x4_t NOINLINE V_NAME_F1 (asinh) (float32x4_t x)\n {\n   const struct data *dat = ptr_barrier (&data);\n-  uint32x4_t iax = vbicq_u32 (vreinterpretq_u32_f32 (x), SignMask);\n-  float32x4_t ax = vreinterpretq_f32_u32 (iax);\n+  float32x4_t ax = vabsq_f32 (x);\n+  uint32x4_t iax = vreinterpretq_u32_f32 (ax);\n   uint32x4_t special = vcgeq_u32 (iax, dat->big_bound);\n+  uint32x4_t sign = veorq_u32 (vreinterpretq_u32_f32 (x), iax);\n   float32x4_t special_arg = x;\n \n #if WANT_SIMD_EXCEPT\n@@ -68,13 +75,13 @@ VPCS_ATTR float32x4_t NOINLINE V_NAME_F1 (asinh) (float32x4_t x)\n   /* asinh(x) = log(x + sqrt(x * x + 1)).\n      For positive x, asinh(x) = log1p(x + x * x / (1 + sqrt(x * x + 1))).  */\n   float32x4_t d\n-      = vaddq_f32 (v_f32 (1), vsqrtq_f32 (vfmaq_f32 (v_f32 (1), x, x)));\n-  float32x4_t y = log1pf_inline (\n-      vaddq_f32 (ax, vdivq_f32 (vmulq_f32 (ax, ax), d)), dat->log1pf_consts);\n+      = vaddq_f32 (v_f32 (1), vsqrtq_f32 (vfmaq_f32 (dat->one, ax, ax)));\n+  float32x4_t y = vaddq_f32 (ax, vdivq_f32 (vmulq_f32 (ax, ax), d));\n \n   if (__glibc_unlikely (v_any_u32 (special)))\n-    return special_case (special_arg, vbslq_f32 (SignMask, x, y), special);\n-  return vbslq_f32 (SignMask, x, y);\n+    return special_case (special_arg, sign, y, special, dat);\n+  return vreinterpretq_f32_u32 (veorq_u32 (\n+      sign, vreinterpretq_u32_f32 (log1pf_inline (y, &dat->log1pf_consts))));\n }\n libmvec_hidden_def (V_NAME_F1 (asinh))\n HALF_WIDTH_ALIAS_F1 (asinh)\ndiff --git a/sysdeps/aarch64/fpu/atanhf_advsimd.c b/sysdeps/aarch64/fpu/atanhf_advsimd.c\nindex ae488f7b54..818b6c92ad 100644\n--- a/sysdeps/aarch64/fpu/atanhf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/atanhf_advsimd.c\n@@ -40,15 +40,17 @@ const static struct data\n #define Half v_u32 (0x3f000000)\n \n static float32x4_t NOINLINE VPCS_ATTR\n-special_case (float32x4_t x, float32x4_t y, uint32x4_t special)\n+special_case (float32x4_t x, float32x4_t halfsign, float32x4_t y,\n+\t      uint32x4_t special)\n {\n-  return v_call_f32 (atanhf, x, y, special);\n+  return v_call_f32 (atanhf, vbslq_f32 (AbsMask, x, halfsign),\n+\t\t     vmulq_f32 (halfsign, y), special);\n }\n \n /* Approximation for vector single-precision atanh(x) using modified log1p.\n-   The maximum error is 3.08 ULP:\n-   __v_atanhf(0x1.ff215p-5) got 0x1.ffcb7cp-5\n-\t\t\t   want 0x1.ffcb82p-5.  */\n+   The maximum error is 2.93 ULP:\n+   _ZGVnN4v_atanhf(0x1.f43d7p-5) got 0x1.f4dcfep-5\n+\t\t\t\twant 0x1.f4dcf8p-5.  */\n VPCS_ATTR float32x4_t NOINLINE V_NAME_F1 (atanh) (float32x4_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n@@ -68,11 +70,19 @@ VPCS_ATTR float32x4_t NOINLINE V_NAME_F1 (atanh) (float32x4_t x)\n   uint32x4_t special = vcgeq_u32 (iax, d->one);\n #endif\n \n-  float32x4_t y = vdivq_f32 (vaddq_f32 (ax, ax), vsubq_f32 (v_f32 (1), ax));\n-  y = log1pf_inline (y, d->log1pf_consts);\n+  float32x4_t y = vdivq_f32 (vaddq_f32 (ax, ax),\n+\t\t\t     vsubq_f32 (vreinterpretq_f32_u32 (d->one), ax));\n+  y = log1pf_inline (y, &d->log1pf_consts);\n \n+  /* If exceptions not required, pass ax to special-case for shorter dependency\n+     chain. If exceptions are required ax will have been zerofied, so have to\n+     pass x.  */\n   if (__glibc_unlikely (v_any_u32 (special)))\n-    return special_case (x, vmulq_f32 (halfsign, y), special);\n+#if WANT_SIMD_EXCEPT\n+    return special_case (x, halfsign, y, special);\n+#else\n+    return special_case (ax, halfsign, y, special);\n+#endif\n   return vmulq_f32 (halfsign, y);\n }\n libmvec_hidden_def (V_NAME_F1 (atanh))\ndiff --git a/sysdeps/aarch64/fpu/log1pf_advsimd.c b/sysdeps/aarch64/fpu/log1pf_advsimd.c\nindex 8cfa28fb8a..00006fc703 100644\n--- a/sysdeps/aarch64/fpu/log1pf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/log1pf_advsimd.c\n@@ -18,114 +18,79 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include \"v_math.h\"\n-#include \"poly_advsimd_f32.h\"\n+#include \"v_log1pf_inline.h\"\n+\n+#if WANT_SIMD_EXCEPT\n \n const static struct data\n {\n-  float32x4_t poly[8], ln2;\n-  uint32x4_t tiny_bound, minus_one, four, thresh;\n-  int32x4_t three_quarters;\n+  uint32x4_t minus_one, thresh;\n+  struct v_log1pf_data d;\n } data = {\n-  .poly = { /* Generated using FPMinimax in [-0.25, 0.5]. First two coefficients\n-\t       (1, -0.5) are not stored as they can be generated more\n-\t       efficiently.  */\n-\t    V4 (0x1.5555aap-2f), V4 (-0x1.000038p-2f), V4 (0x1.99675cp-3f),\n-\t    V4 (-0x1.54ef78p-3f), V4 (0x1.28a1f4p-3f), V4 (-0x1.0da91p-3f),\n-\t    V4 (0x1.abcb6p-4f), V4 (-0x1.6f0d5ep-5f) },\n-  .ln2 = V4 (0x1.62e43p-1f),\n-  .tiny_bound = V4 (0x34000000), /* asuint32(0x1p-23). ulp=0.5 at 0x1p-23.  */\n-  .thresh = V4 (0x4b800000), /* asuint32(INFINITY) - tiny_bound.  */\n+  .d = V_LOG1PF_CONSTANTS_TABLE,\n+  .thresh = V4 (0x4b800000), /* asuint32(INFINITY) - TinyBound.  */\n   .minus_one = V4 (0xbf800000),\n-  .four = V4 (0x40800000),\n-  .three_quarters = V4 (0x3f400000)\n };\n \n-static inline float32x4_t\n-eval_poly (float32x4_t m, const float32x4_t *p)\n-{\n-  /* Approximate log(1+m) on [-0.25, 0.5] using split Estrin scheme.  */\n-  float32x4_t p_12 = vfmaq_f32 (v_f32 (-0.5), m, p[0]);\n-  float32x4_t p_34 = vfmaq_f32 (p[1], m, p[2]);\n-  float32x4_t p_56 = vfmaq_f32 (p[3], m, p[4]);\n-  float32x4_t p_78 = vfmaq_f32 (p[5], m, p[6]);\n-\n-  float32x4_t m2 = vmulq_f32 (m, m);\n-  float32x4_t p_02 = vfmaq_f32 (m, m2, p_12);\n-  float32x4_t p_36 = vfmaq_f32 (p_34, m2, p_56);\n-  float32x4_t p_79 = vfmaq_f32 (p_78, m2, p[7]);\n-\n-  float32x4_t m4 = vmulq_f32 (m2, m2);\n-  float32x4_t p_06 = vfmaq_f32 (p_02, m4, p_36);\n-  return vfmaq_f32 (p_06, m4, vmulq_f32 (m4, p_79));\n-}\n+/* asuint32(0x1p-23). ulp=0.5 at 0x1p-23.  */\n+#  define TinyBound v_u32 (0x34000000)\n \n static float32x4_t NOINLINE VPCS_ATTR\n-special_case (float32x4_t x, float32x4_t y, uint32x4_t special)\n+special_case (float32x4_t x, uint32x4_t cmp, const struct data *d)\n {\n-  return v_call_f32 (log1pf, x, y, special);\n+  /* Side-step special lanes so fenv exceptions are not triggered\n+     inadvertently.  */\n+  float32x4_t x_nospecial = v_zerofy_f32 (x, cmp);\n+  return v_call_f32 (log1pf, x, log1pf_inline (x_nospecial, &d->d), cmp);\n }\n \n-/* Vector log1pf approximation using polynomial on reduced interval. Accuracy\n-   is roughly 2.02 ULP:\n-   log1pf(0x1.21e13ap-2) got 0x1.fe8028p-3 want 0x1.fe802cp-3.  */\n+/* Vector log1pf approximation using polynomial on reduced interval. Worst-case\n+   error is 1.69 ULP:\n+   _ZGVnN4v_log1pf(0x1.04418ap-2) got 0x1.cfcbd8p-3\n+\t\t\t\t want 0x1.cfcbdcp-3.  */\n VPCS_ATTR float32x4_t V_NAME_F1 (log1p) (float32x4_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n-\n   uint32x4_t ix = vreinterpretq_u32_f32 (x);\n   uint32x4_t ia = vreinterpretq_u32_f32 (vabsq_f32 (x));\n+\n   uint32x4_t special_cases\n-      = vorrq_u32 (vcgeq_u32 (vsubq_u32 (ia, d->tiny_bound), d->thresh),\n+      = vorrq_u32 (vcgeq_u32 (vsubq_u32 (ia, TinyBound), d->thresh),\n \t\t   vcgeq_u32 (ix, d->minus_one));\n-  float32x4_t special_arg = x;\n \n-#if WANT_SIMD_EXCEPT\n   if (__glibc_unlikely (v_any_u32 (special_cases)))\n-    /* Side-step special lanes so fenv exceptions are not triggered\n-       inadvertently.  */\n-    x = v_zerofy_f32 (x, special_cases);\n-#endif\n+    return special_case (x, special_cases, d);\n \n-  /* With x + 1 = t * 2^k (where t = m + 1 and k is chosen such that m\n-\t\t\t   is in [-0.25, 0.5]):\n-     log1p(x) = log(t) + log(2^k) = log1p(m) + k*log(2).\n-\n-     We approximate log1p(m) with a polynomial, then scale by\n-     k*log(2). Instead of doing this directly, we use an intermediate\n-     scale factor s = 4*k*log(2) to ensure the scale is representable\n-     as a normalised fp32 number.  */\n+  return log1pf_inline (x, &d->d);\n+}\n \n-  float32x4_t m = vaddq_f32 (x, v_f32 (1.0f));\n+#else\n \n-  /* Choose k to scale x to the range [-1/4, 1/2].  */\n-  int32x4_t k\n-      = vandq_s32 (vsubq_s32 (vreinterpretq_s32_f32 (m), d->three_quarters),\n-\t\t   v_s32 (0xff800000));\n-  uint32x4_t ku = vreinterpretq_u32_s32 (k);\n+const static struct v_log1pf_data data = V_LOG1PF_CONSTANTS_TABLE;\n \n-  /* Scale x by exponent manipulation.  */\n-  float32x4_t m_scale\n-      = vreinterpretq_f32_u32 (vsubq_u32 (vreinterpretq_u32_f32 (x), ku));\n+static float32x4_t NOINLINE VPCS_ATTR\n+special_case (float32x4_t x, uint32x4_t cmp)\n+{\n+  return v_call_f32 (log1pf, x, log1pf_inline (x, ptr_barrier (&data)), cmp);\n+}\n \n-  /* Scale up to ensure that the scale factor is representable as normalised\n-     fp32 number, and scale m down accordingly.  */\n-  float32x4_t s = vreinterpretq_f32_u32 (vsubq_u32 (d->four, ku));\n-  m_scale = vaddq_f32 (m_scale, vfmaq_f32 (v_f32 (-1.0f), v_f32 (0.25f), s));\n+/* Vector log1pf approximation using polynomial on reduced interval. Worst-case\n+   error is 1.63 ULP:\n+   _ZGVnN4v_log1pf(0x1.216d12p-2) got 0x1.fdcb12p-3\n+\t\t\t\t want 0x1.fdcb16p-3.  */\n+VPCS_ATTR float32x4_t V_NAME_F1 (log1p) (float32x4_t x)\n+{\n+  uint32x4_t special_cases = vornq_u32 (vcleq_f32 (x, v_f32 (-1)),\n+\t\t\t\t\tvcaleq_f32 (x, v_f32 (0x1p127f)));\n \n-  /* Evaluate polynomial on the reduced interval.  */\n-  float32x4_t p = eval_poly (m_scale, d->poly);\n+  if (__glibc_unlikely (v_any_u32 (special_cases)))\n+    return special_case (x, special_cases);\n \n-  /* The scale factor to be applied back at the end - by multiplying float(k)\n-     by 2^-23 we get the unbiased exponent of k.  */\n-  float32x4_t scale_back = vcvtq_f32_s32 (vshrq_n_s32 (k, 23));\n+  return log1pf_inline (x, ptr_barrier (&data));\n+}\n \n-  /* Apply the scaling back.  */\n-  float32x4_t y = vfmaq_f32 (p, scale_back, d->ln2);\n+#endif\n \n-  if (__glibc_unlikely (v_any_u32 (special_cases)))\n-    return special_case (special_arg, y, special_cases);\n-  return y;\n-}\n libmvec_hidden_def (V_NAME_F1 (log1p))\n HALF_WIDTH_ALIAS_F1 (log1p)\n strong_alias (V_NAME_F1 (log1p), V_NAME_F1 (logp1))\ndiff --git a/sysdeps/aarch64/fpu/v_log1pf_inline.h b/sysdeps/aarch64/fpu/v_log1pf_inline.h\nindex 643a6cdcfc..73e45a942e 100644\n--- a/sysdeps/aarch64/fpu/v_log1pf_inline.h\n+++ b/sysdeps/aarch64/fpu/v_log1pf_inline.h\n@@ -25,54 +25,81 @@\n \n struct v_log1pf_data\n {\n-  float32x4_t poly[8], ln2;\n   uint32x4_t four;\n   int32x4_t three_quarters;\n+  float c0, c3, c5, c7;\n+  float32x4_t c4, c6, c1, c2, ln2;\n };\n \n /* Polynomial generated using FPMinimax in [-0.25, 0.5]. First two coefficients\n    (1, -0.5) are not stored as they can be generated more efficiently.  */\n #define V_LOG1PF_CONSTANTS_TABLE                                              \\\n   {                                                                           \\\n-    .poly                                                                     \\\n-\t= { V4 (0x1.5555aap-2f),  V4 (-0x1.000038p-2f), V4 (0x1.99675cp-3f),  \\\n-\t    V4 (-0x1.54ef78p-3f), V4 (0x1.28a1f4p-3f),\tV4 (-0x1.0da91p-3f),  \\\n-\t    V4 (0x1.abcb6p-4f),\t  V4 (-0x1.6f0d5ep-5f) },                     \\\n-\t.ln2 = V4 (0x1.62e43p-1f), .four = V4 (0x40800000),                   \\\n-\t.three_quarters = V4 (0x3f400000)                                     \\\n+    .c0 = 0x1.5555aap-2f, .c1 = V4 (-0x1.000038p-2f),                         \\\n+    .c2 = V4 (0x1.99675cp-3f), .c3 = -0x1.54ef78p-3f,                         \\\n+    .c4 = V4 (0x1.28a1f4p-3f), .c5 = -0x1.0da91p-3f,                          \\\n+    .c6 = V4 (0x1.abcb6p-4f), .c7 = -0x1.6f0d5ep-5f,                          \\\n+    .ln2 = V4 (0x1.62e43p-1f), .four = V4 (0x40800000),                       \\\n+    .three_quarters = V4 (0x3f400000)                                         \\\n   }\n \n static inline float32x4_t\n-eval_poly (float32x4_t m, const float32x4_t *c)\n+eval_poly (float32x4_t m, const struct v_log1pf_data *d)\n {\n-  /* Approximate log(1+m) on [-0.25, 0.5] using pairwise Horner (main routine\n-     uses split Estrin, but this way reduces register pressure in the calling\n-     routine).  */\n-  float32x4_t q = vfmaq_f32 (v_f32 (-0.5), m, c[0]);\n+  /* Approximate log(1+m) on [-0.25, 0.5] using pairwise Horner.  */\n+  float32x4_t c0357 = vld1q_f32 (&d->c0);\n+  float32x4_t q = vfmaq_laneq_f32 (v_f32 (-0.5), m, c0357, 0);\n   float32x4_t m2 = vmulq_f32 (m, m);\n-  q = vfmaq_f32 (m, m2, q);\n-  float32x4_t p = v_pw_horner_6_f32 (m, m2, c + 1);\n+  float32x4_t p67 = vfmaq_laneq_f32 (d->c6, m, c0357, 3);\n+  float32x4_t p45 = vfmaq_laneq_f32 (d->c4, m, c0357, 2);\n+  float32x4_t p23 = vfmaq_laneq_f32 (d->c2, m, c0357, 1);\n+  float32x4_t p = vfmaq_f32 (p45, m2, p67);\n+  p = vfmaq_f32 (p23, m2, p);\n+  p = vfmaq_f32 (d->c1, m, p);\n   p = vmulq_f32 (m2, p);\n-  return vfmaq_f32 (q, m2, p);\n+  p = vfmaq_f32 (m, m2, p);\n+  return vfmaq_f32 (p, m2, q);\n }\n \n static inline float32x4_t\n-log1pf_inline (float32x4_t x, const struct v_log1pf_data d)\n+log1pf_inline (float32x4_t x, const struct v_log1pf_data *d)\n {\n-  /* Helper for calculating log(x + 1). Copied from log1pf_2u1.c, with no\n-     special-case handling. See that file for details of the algorithm.  */\n+  /* Helper for calculating log(x + 1).  */\n+\n+  /* With x + 1 = t * 2^k (where t = m + 1 and k is chosen such that m\n+\t\t\t   is in [-0.25, 0.5]):\n+     log1p(x) = log(t) + log(2^k) = log1p(m) + k*log(2).\n+\n+     We approximate log1p(m) with a polynomial, then scale by\n+     k*log(2). Instead of doing this directly, we use an intermediate\n+     scale factor s = 4*k*log(2) to ensure the scale is representable\n+     as a normalised fp32 number.  */\n   float32x4_t m = vaddq_f32 (x, v_f32 (1.0f));\n+\n+  /* Choose k to scale x to the range [-1/4, 1/2].  */\n   int32x4_t k\n-      = vandq_s32 (vsubq_s32 (vreinterpretq_s32_f32 (m), d.three_quarters),\n+      = vandq_s32 (vsubq_s32 (vreinterpretq_s32_f32 (m), d->three_quarters),\n \t\t   v_s32 (0xff800000));\n   uint32x4_t ku = vreinterpretq_u32_s32 (k);\n-  float32x4_t s = vreinterpretq_f32_u32 (vsubq_u32 (d.four, ku));\n+\n+  /* Scale up to ensure that the scale factor is representable as normalised\n+     fp32 number, and scale m down accordingly.  */\n+  float32x4_t s = vreinterpretq_f32_u32 (vsubq_u32 (d->four, ku));\n+\n+  /* Scale x by exponent manipulation.  */\n   float32x4_t m_scale\n       = vreinterpretq_f32_u32 (vsubq_u32 (vreinterpretq_u32_f32 (x), ku));\n   m_scale = vaddq_f32 (m_scale, vfmaq_f32 (v_f32 (-1.0f), v_f32 (0.25f), s));\n-  float32x4_t p = eval_poly (m_scale, d.poly);\n+\n+  /* Evaluate polynomial on the reduced interval.  */\n+  float32x4_t p = eval_poly (m_scale, d);\n+\n+  /* The scale factor to be applied back at the end - by multiplying float(k)\n+     by 2^-23 we get the unbiased exponent of k.  */\n   float32x4_t scale_back = vmulq_f32 (vcvtq_f32_s32 (k), v_f32 (0x1.0p-23f));\n-  return vfmaq_f32 (p, scale_back, d.ln2);\n+\n+  /* Apply the scaling back.  */\n+  return vfmaq_f32 (p, scale_back, d->ln2);\n }\n \n #endif\n\ncommit a947a43b95bbea53ec50df058b42392fd5ea52b6\nAuthor: Joe Ramsay <Joe.Ramsay@arm.com>\nDate:   Mon Sep 23 15:32:53 2024 +0100\n\n    AArch64: Improve codegen in users of ADVSIMD expm1f helper\n    \n    Rearrange operations so MOV is not necessary in reduction or around\n    the special-case handler.  Reduce memory access by using more indexed\n    MLAs in polynomial.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit 7900ac490db32f6bccff812733f00280dde34e27)\n\ndiff --git a/sysdeps/aarch64/fpu/expm1f_advsimd.c b/sysdeps/aarch64/fpu/expm1f_advsimd.c\nindex a0616ec754..8303ca296e 100644\n--- a/sysdeps/aarch64/fpu/expm1f_advsimd.c\n+++ b/sysdeps/aarch64/fpu/expm1f_advsimd.c\n@@ -18,27 +18,18 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include \"v_math.h\"\n-#include \"poly_advsimd_f32.h\"\n+#include \"v_expm1f_inline.h\"\n \n static const struct data\n {\n-  float32x4_t poly[5];\n-  float invln2_and_ln2[4];\n-  float32x4_t shift;\n-  int32x4_t exponent_bias;\n+  struct v_expm1f_data d;\n #if WANT_SIMD_EXCEPT\n   uint32x4_t thresh;\n #else\n   float32x4_t oflow_bound;\n #endif\n } data = {\n-  /* Generated using fpminimax with degree=5 in [-log(2)/2, log(2)/2].  */\n-  .poly = { V4 (0x1.fffffep-2), V4 (0x1.5554aep-3), V4 (0x1.555736p-5),\n-\t    V4 (0x1.12287cp-7), V4 (0x1.6b55a2p-10) },\n-  /* Stores constants: invln2, ln2_hi, ln2_lo, 0.  */\n-  .invln2_and_ln2 = { 0x1.715476p+0f, 0x1.62e4p-1f, 0x1.7f7d1cp-20f, 0 },\n-  .shift = V4 (0x1.8p23f),\n-  .exponent_bias = V4 (0x3f800000),\n+  .d = V_EXPM1F_DATA,\n #if !WANT_SIMD_EXCEPT\n   /* Value above which expm1f(x) should overflow. Absolute value of the\n      underflow bound is greater than this, so it catches both cases - there is\n@@ -55,67 +46,38 @@ static const struct data\n #define TinyBound v_u32 (0x34000000 << 1)\n \n static float32x4_t VPCS_ATTR NOINLINE\n-special_case (float32x4_t x, float32x4_t y, uint32x4_t special)\n+special_case (float32x4_t x, uint32x4_t special, const struct data *d)\n {\n-  return v_call_f32 (expm1f, x, y, special);\n+  return v_call_f32 (\n+      expm1f, x, expm1f_inline (v_zerofy_f32 (x, special), &d->d), special);\n }\n \n /* Single-precision vector exp(x) - 1 function.\n-   The maximum error is 1.51 ULP:\n-   _ZGVnN4v_expm1f (0x1.8baa96p-2) got 0x1.e2fb9p-2\n-\t\t\t\t  want 0x1.e2fb94p-2.  */\n+   The maximum error is 1.62 ULP:\n+   _ZGVnN4v_expm1f(0x1.85f83p-2) got 0x1.da9f4p-2\n+\t\t\t\twant 0x1.da9f44p-2.  */\n float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (expm1) (float32x4_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n-  uint32x4_t ix = vreinterpretq_u32_f32 (x);\n \n #if WANT_SIMD_EXCEPT\n+  uint32x4_t ix = vreinterpretq_u32_f32 (x);\n   /* If fp exceptions are to be triggered correctly, fall back to scalar for\n      |x| < 2^-23, |x| > oflow_bound, Inf & NaN. Add ix to itself for\n      shift-left by 1, and compare with thresh which was left-shifted offline -\n      this is effectively an absolute compare.  */\n   uint32x4_t special\n       = vcgeq_u32 (vsubq_u32 (vaddq_u32 (ix, ix), TinyBound), d->thresh);\n-  if (__glibc_unlikely (v_any_u32 (special)))\n-    x = v_zerofy_f32 (x, special);\n #else\n   /* Handles very large values (+ve and -ve), +/-NaN, +/-Inf.  */\n   uint32x4_t special = vcagtq_f32 (x, d->oflow_bound);\n #endif\n \n-  /* Reduce argument to smaller range:\n-     Let i = round(x / ln2)\n-     and f = x - i * ln2, then f is in [-ln2/2, ln2/2].\n-     exp(x) - 1 = 2^i * (expm1(f) + 1) - 1\n-     where 2^i is exact because i is an integer.  */\n-  float32x4_t invln2_and_ln2 = vld1q_f32 (d->invln2_and_ln2);\n-  float32x4_t j\n-      = vsubq_f32 (vfmaq_laneq_f32 (d->shift, x, invln2_and_ln2, 0), d->shift);\n-  int32x4_t i = vcvtq_s32_f32 (j);\n-  float32x4_t f = vfmsq_laneq_f32 (x, j, invln2_and_ln2, 1);\n-  f = vfmsq_laneq_f32 (f, j, invln2_and_ln2, 2);\n-\n-  /* Approximate expm1(f) using polynomial.\n-     Taylor expansion for expm1(x) has the form:\n-\t x + ax^2 + bx^3 + cx^4 ....\n-     So we calculate the polynomial P(f) = a + bf + cf^2 + ...\n-     and assemble the approximation expm1(f) ~= f + f^2 * P(f).  */\n-  float32x4_t p = v_horner_4_f32 (f, d->poly);\n-  p = vfmaq_f32 (f, vmulq_f32 (f, f), p);\n-\n-  /* Assemble the result.\n-     expm1(x) ~= 2^i * (p + 1) - 1\n-     Let t = 2^i.  */\n-  int32x4_t u = vaddq_s32 (vshlq_n_s32 (i, 23), d->exponent_bias);\n-  float32x4_t t = vreinterpretq_f32_s32 (u);\n-\n   if (__glibc_unlikely (v_any_u32 (special)))\n-    return special_case (vreinterpretq_f32_u32 (ix),\n-\t\t\t vfmaq_f32 (vsubq_f32 (t, v_f32 (1.0f)), p, t),\n-\t\t\t special);\n+    return special_case (x, special, d);\n \n   /* expm1(x) ~= p * t + (t - 1).  */\n-  return vfmaq_f32 (vsubq_f32 (t, v_f32 (1.0f)), p, t);\n+  return expm1f_inline (x, &d->d);\n }\n libmvec_hidden_def (V_NAME_F1 (expm1))\n HALF_WIDTH_ALIAS_F1 (expm1)\ndiff --git a/sysdeps/aarch64/fpu/sinhf_advsimd.c b/sysdeps/aarch64/fpu/sinhf_advsimd.c\nindex 6bb7482dc2..c6ed7598e7 100644\n--- a/sysdeps/aarch64/fpu/sinhf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/sinhf_advsimd.c\n@@ -23,15 +23,13 @@\n static const struct data\n {\n   struct v_expm1f_data expm1f_consts;\n-  uint32x4_t halff;\n #if WANT_SIMD_EXCEPT\n   uint32x4_t tiny_bound, thresh;\n #else\n-  uint32x4_t oflow_bound;\n+  float32x4_t oflow_bound;\n #endif\n } data = {\n   .expm1f_consts = V_EXPM1F_DATA,\n-  .halff = V4 (0x3f000000),\n #if WANT_SIMD_EXCEPT\n   /* 0x1.6a09e8p-32, below which expm1f underflows.  */\n   .tiny_bound = V4 (0x2fb504f4),\n@@ -39,14 +37,15 @@ static const struct data\n   .thresh = V4 (0x12fbbbb3),\n #else\n   /* 0x1.61814ep+6, above which expm1f helper overflows.  */\n-  .oflow_bound = V4 (0x42b0c0a7),\n+  .oflow_bound = V4 (0x1.61814ep+6),\n #endif\n };\n \n static float32x4_t NOINLINE VPCS_ATTR\n-special_case (float32x4_t x, float32x4_t y, uint32x4_t special)\n+special_case (float32x4_t x, float32x4_t t, float32x4_t halfsign,\n+\t      uint32x4_t special)\n {\n-  return v_call_f32 (sinhf, x, y, special);\n+  return v_call_f32 (sinhf, x, vmulq_f32 (t, halfsign), special);\n }\n \n /* Approximation for vector single-precision sinh(x) using expm1.\n@@ -60,15 +59,15 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (sinh) (float32x4_t x)\n \n   uint32x4_t ix = vreinterpretq_u32_f32 (x);\n   float32x4_t ax = vabsq_f32 (x);\n-  uint32x4_t iax = vreinterpretq_u32_f32 (ax);\n-  uint32x4_t sign = veorq_u32 (ix, iax);\n-  float32x4_t halfsign = vreinterpretq_f32_u32 (vorrq_u32 (sign, d->halff));\n+  float32x4_t halfsign = vreinterpretq_f32_u32 (\n+      vbslq_u32 (v_u32 (0x80000000), ix, vreinterpretq_u32_f32 (v_f32 (0.5))));\n \n #if WANT_SIMD_EXCEPT\n-  uint32x4_t special = vcgeq_u32 (vsubq_u32 (iax, d->tiny_bound), d->thresh);\n+  uint32x4_t special = vcgeq_u32 (\n+      vsubq_u32 (vreinterpretq_u32_f32 (ax), d->tiny_bound), d->thresh);\n   ax = v_zerofy_f32 (ax, special);\n #else\n-  uint32x4_t special = vcgeq_u32 (iax, d->oflow_bound);\n+  uint32x4_t special = vcageq_f32 (x, d->oflow_bound);\n #endif\n \n   /* Up to the point that expm1f overflows, we can use it to calculate sinhf\n@@ -80,7 +79,7 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (sinh) (float32x4_t x)\n   /* Fall back to the scalar variant for any lanes that should trigger an\n      exception.  */\n   if (__glibc_unlikely (v_any_u32 (special)))\n-    return special_case (x, vmulq_f32 (t, halfsign), special);\n+    return special_case (x, t, halfsign, special);\n \n   return vmulq_f32 (t, halfsign);\n }\ndiff --git a/sysdeps/aarch64/fpu/tanhf_advsimd.c b/sysdeps/aarch64/fpu/tanhf_advsimd.c\nindex 50defd6ef0..3ced9b7a41 100644\n--- a/sysdeps/aarch64/fpu/tanhf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/tanhf_advsimd.c\n@@ -28,13 +28,16 @@ static const struct data\n   /* 0x1.205966p+3, above which tanhf rounds to 1 (or -1 for  negative).  */\n   .boring_bound = V4 (0x41102cb3),\n   .large_bound = V4 (0x7f800000),\n-  .onef = V4 (0x3f800000),\n };\n \n static float32x4_t NOINLINE VPCS_ATTR\n-special_case (float32x4_t x, float32x4_t y, uint32x4_t special)\n+special_case (float32x4_t x, uint32x4_t is_boring, float32x4_t boring,\n+\t      float32x4_t q, uint32x4_t special)\n {\n-  return v_call_f32 (tanhf, x, y, special);\n+  return v_call_f32 (\n+      tanhf, x,\n+      vbslq_f32 (is_boring, boring, vdivq_f32 (q, vaddq_f32 (q, v_f32 (2.0)))),\n+      special);\n }\n \n /* Approximation for single-precision vector tanh(x), using a simplified\n@@ -50,7 +53,9 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (tanh) (float32x4_t x)\n   uint32x4_t iax = vreinterpretq_u32_f32 (ax);\n   uint32x4_t sign = veorq_u32 (ix, iax);\n   uint32x4_t is_boring = vcgtq_u32 (iax, d->boring_bound);\n-  float32x4_t boring = vreinterpretq_f32_u32 (vorrq_u32 (sign, d->onef));\n+  /* expm1 exponent bias is 1.0f reinterpreted to int.  */\n+  float32x4_t boring = vreinterpretq_f32_u32 (vorrq_u32 (\n+      sign, vreinterpretq_u32_s32 (d->expm1f_consts.exponent_bias)));\n \n #if WANT_SIMD_EXCEPT\n   /* If fp exceptions are to be triggered properly, set all special and boring\n@@ -66,10 +71,12 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (tanh) (float32x4_t x)\n \n   /* tanh(x) = (e^2x - 1) / (e^2x + 1).  */\n   float32x4_t q = expm1f_inline (vmulq_n_f32 (x, 2), &d->expm1f_consts);\n-  float32x4_t y = vdivq_f32 (q, vaddq_f32 (q, v_f32 (2.0)));\n+\n   if (__glibc_unlikely (v_any_u32 (special)))\n-    return special_case (vreinterpretq_f32_u32 (ix),\n-\t\t\t vbslq_f32 (is_boring, boring, y), special);\n+    return special_case (vreinterpretq_f32_u32 (ix), is_boring, boring, q,\n+\t\t\t special);\n+\n+  float32x4_t y = vdivq_f32 (q, vaddq_f32 (q, v_f32 (2.0)));\n   return vbslq_f32 (is_boring, boring, y);\n }\n libmvec_hidden_def (V_NAME_F1 (tanh))\ndiff --git a/sysdeps/aarch64/fpu/v_expm1f_inline.h b/sysdeps/aarch64/fpu/v_expm1f_inline.h\nindex 59b552da6b..1daedfdd51 100644\n--- a/sysdeps/aarch64/fpu/v_expm1f_inline.h\n+++ b/sysdeps/aarch64/fpu/v_expm1f_inline.h\n@@ -21,48 +21,47 @@\n #define AARCH64_FPU_V_EXPM1F_INLINE_H\n \n #include \"v_math.h\"\n-#include \"poly_advsimd_f32.h\"\n+#include \"math_config.h\"\n \n struct v_expm1f_data\n {\n-  float32x4_t poly[5];\n-  float invln2_and_ln2[4];\n-  float32x4_t shift;\n+  float32x4_t c0, c2;\n   int32x4_t exponent_bias;\n+  float c1, c3, inv_ln2, c4;\n+  float ln2_hi, ln2_lo;\n };\n \n /* Coefficients generated using fpminimax with degree=5 in [-log(2)/2,\n-   log(2)/2]. Exponent bias is asuint(1.0f).\n-   invln2_and_ln2 Stores constants: invln2, ln2_lo, ln2_hi, 0.  */\n+   log(2)/2]. Exponent bias is asuint(1.0f).  */\n #define V_EXPM1F_DATA                                                         \\\n   {                                                                           \\\n-    .poly = { V4 (0x1.fffffep-2), V4 (0x1.5554aep-3), V4 (0x1.555736p-5),     \\\n-\t      V4 (0x1.12287cp-7), V4 (0x1.6b55a2p-10) },                      \\\n-    .shift = V4 (0x1.8p23f), .exponent_bias = V4 (0x3f800000),                \\\n-    .invln2_and_ln2 = { 0x1.715476p+0f, 0x1.62e4p-1f, 0x1.7f7d1cp-20f, 0 },   \\\n+    .c0 = V4 (0x1.fffffep-2), .c1 = 0x1.5554aep-3, .c2 = V4 (0x1.555736p-5),  \\\n+    .c3 = 0x1.12287cp-7, .c4 = 0x1.6b55a2p-10,                                \\\n+    .exponent_bias = V4 (0x3f800000), .inv_ln2 = 0x1.715476p+0f,              \\\n+    .ln2_hi = 0x1.62e4p-1f, .ln2_lo = 0x1.7f7d1cp-20f,                        \\\n   }\n \n static inline float32x4_t\n expm1f_inline (float32x4_t x, const struct v_expm1f_data *d)\n {\n-  /* Helper routine for calculating exp(x) - 1.\n-     Copied from v_expm1f_1u6.c, with all special-case handling removed - the\n-     calling routine should handle special values if required.  */\n+  /* Helper routine for calculating exp(x) - 1.  */\n+\n+  float32x2_t ln2 = vld1_f32 (&d->ln2_hi);\n+  float32x4_t lane_consts = vld1q_f32 (&d->c1);\n \n   /* Reduce argument: f in [-ln2/2, ln2/2], i is exact.  */\n-  float32x4_t invln2_and_ln2 = vld1q_f32 (d->invln2_and_ln2);\n-  float32x4_t j\n-      = vsubq_f32 (vfmaq_laneq_f32 (d->shift, x, invln2_and_ln2, 0), d->shift);\n+  float32x4_t j = vrndaq_f32 (vmulq_laneq_f32 (x, lane_consts, 2));\n   int32x4_t i = vcvtq_s32_f32 (j);\n-  float32x4_t f = vfmsq_laneq_f32 (x, j, invln2_and_ln2, 1);\n-  f = vfmsq_laneq_f32 (f, j, invln2_and_ln2, 2);\n+  float32x4_t f = vfmsq_lane_f32 (x, j, ln2, 0);\n+  f = vfmsq_lane_f32 (f, j, ln2, 1);\n \n-  /* Approximate expm1(f) with polynomial P, expm1(f) ~= f + f^2 * P(f).\n-     Uses Estrin scheme, where the main _ZGVnN4v_expm1f routine uses\n-     Horner.  */\n+  /* Approximate expm1(f) with polynomial P, expm1(f) ~= f + f^2 * P(f).  */\n   float32x4_t f2 = vmulq_f32 (f, f);\n   float32x4_t f4 = vmulq_f32 (f2, f2);\n-  float32x4_t p = v_estrin_4_f32 (f, f2, f4, d->poly);\n+  float32x4_t p01 = vfmaq_laneq_f32 (d->c0, f, lane_consts, 0);\n+  float32x4_t p23 = vfmaq_laneq_f32 (d->c2, f, lane_consts, 1);\n+  float32x4_t p = vfmaq_f32 (p01, f2, p23);\n+  p = vfmaq_laneq_f32 (p, f4, lane_consts, 3);\n   p = vfmaq_f32 (f, f2, p);\n \n   /* t = 2^i.  */\n\ncommit 68f2eb20de698675ddc74068c2cd03fee29207df\nAuthor: Joe Ramsay <Joe.Ramsay@arm.com>\nDate:   Mon Sep 23 15:33:31 2024 +0100\n\n    AArch64: Simplify rounding-multiply pattern in several AdvSIMD routines\n    \n    This operation can be simplified to use simpler multiply-round-convert\n    sequence, which uses fewer instructions and constants.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit 16a59571e4e9fd019d3fc23a2e7d73c1df8bb5cb)\n\ndiff --git a/sysdeps/aarch64/fpu/cos_advsimd.c b/sysdeps/aarch64/fpu/cos_advsimd.c\nindex 3924c9ce44..11a89b1530 100644\n--- a/sysdeps/aarch64/fpu/cos_advsimd.c\n+++ b/sysdeps/aarch64/fpu/cos_advsimd.c\n@@ -22,7 +22,7 @@\n static const struct data\n {\n   float64x2_t poly[7];\n-  float64x2_t range_val, shift, inv_pi, half_pi, pi_1, pi_2, pi_3;\n+  float64x2_t range_val, inv_pi, pi_1, pi_2, pi_3;\n } data = {\n   /* Worst-case error is 3.3 ulp in [-pi/2, pi/2].  */\n   .poly = { V2 (-0x1.555555555547bp-3), V2 (0x1.1111111108a4dp-7),\n@@ -30,11 +30,9 @@ static const struct data\n \t    V2 (-0x1.ae633919987c6p-26), V2 (0x1.60e277ae07cecp-33),\n \t    V2 (-0x1.9e9540300a1p-41) },\n   .inv_pi = V2 (0x1.45f306dc9c883p-2),\n-  .half_pi = V2 (0x1.921fb54442d18p+0),\n   .pi_1 = V2 (0x1.921fb54442d18p+1),\n   .pi_2 = V2 (0x1.1a62633145c06p-53),\n   .pi_3 = V2 (0x1.c1cd129024e09p-106),\n-  .shift = V2 (0x1.8p52),\n   .range_val = V2 (0x1p23)\n };\n \n@@ -68,10 +66,9 @@ float64x2_t VPCS_ATTR V_NAME_D1 (cos) (float64x2_t x)\n #endif\n \n   /* n = rint((|x|+pi/2)/pi) - 0.5.  */\n-  n = vfmaq_f64 (d->shift, d->inv_pi, vaddq_f64 (r, d->half_pi));\n-  odd = vshlq_n_u64 (vreinterpretq_u64_f64 (n), 63);\n-  n = vsubq_f64 (n, d->shift);\n-  n = vsubq_f64 (n, v_f64 (0.5));\n+  n = vrndaq_f64 (vfmaq_f64 (v_f64 (0.5), r, d->inv_pi));\n+  odd = vshlq_n_u64 (vreinterpretq_u64_s64 (vcvtq_s64_f64 (n)), 63);\n+  n = vsubq_f64 (n, v_f64 (0.5f));\n \n   /* r = |x| - n*pi  (range reduction into -pi/2 .. pi/2).  */\n   r = vfmsq_f64 (r, d->pi_1, n);\ndiff --git a/sysdeps/aarch64/fpu/cosf_advsimd.c b/sysdeps/aarch64/fpu/cosf_advsimd.c\nindex d0c285b03a..85a1b37373 100644\n--- a/sysdeps/aarch64/fpu/cosf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/cosf_advsimd.c\n@@ -22,7 +22,7 @@\n static const struct data\n {\n   float32x4_t poly[4];\n-  float32x4_t range_val, inv_pi, half_pi, shift, pi_1, pi_2, pi_3;\n+  float32x4_t range_val, inv_pi, pi_1, pi_2, pi_3;\n } data = {\n   /* 1.886 ulp error.  */\n   .poly = { V4 (-0x1.555548p-3f), V4 (0x1.110df4p-7f), V4 (-0x1.9f42eap-13f),\n@@ -33,8 +33,6 @@ static const struct data\n   .pi_3 = V4 (-0x1.ee59dap-49f),\n \n   .inv_pi = V4 (0x1.45f306p-2f),\n-  .shift = V4 (0x1.8p+23f),\n-  .half_pi = V4 (0x1.921fb6p0f),\n   .range_val = V4 (0x1p20f)\n };\n \n@@ -69,9 +67,8 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (cos) (float32x4_t x)\n #endif\n \n   /* n = rint((|x|+pi/2)/pi) - 0.5.  */\n-  n = vfmaq_f32 (d->shift, d->inv_pi, vaddq_f32 (r, d->half_pi));\n-  odd = vshlq_n_u32 (vreinterpretq_u32_f32 (n), 31);\n-  n = vsubq_f32 (n, d->shift);\n+  n = vrndaq_f32 (vfmaq_f32 (v_f32 (0.5), r, d->inv_pi));\n+  odd = vshlq_n_u32 (vreinterpretq_u32_s32 (vcvtq_s32_f32 (n)), 31);\n   n = vsubq_f32 (n, v_f32 (0.5f));\n \n   /* r = |x| - n*pi  (range reduction into -pi/2 .. pi/2).  */\ndiff --git a/sysdeps/aarch64/fpu/expf_advsimd.c b/sysdeps/aarch64/fpu/expf_advsimd.c\nindex 99d2e647aa..5c9cb72620 100644\n--- a/sysdeps/aarch64/fpu/expf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/expf_advsimd.c\n@@ -22,7 +22,7 @@\n static const struct data\n {\n   float32x4_t poly[5];\n-  float32x4_t shift, inv_ln2, ln2_hi, ln2_lo;\n+  float32x4_t inv_ln2, ln2_hi, ln2_lo;\n   uint32x4_t exponent_bias;\n #if !WANT_SIMD_EXCEPT\n   float32x4_t special_bound, scale_thresh;\n@@ -31,7 +31,6 @@ static const struct data\n   /* maxerr: 1.45358 +0.5 ulp.  */\n   .poly = { V4 (0x1.0e4020p-7f), V4 (0x1.573e2ep-5f), V4 (0x1.555e66p-3f),\n \t    V4 (0x1.fffdb6p-2f), V4 (0x1.ffffecp-1f) },\n-  .shift = V4 (0x1.8p23f),\n   .inv_ln2 = V4 (0x1.715476p+0f),\n   .ln2_hi = V4 (0x1.62e4p-1f),\n   .ln2_lo = V4 (0x1.7f7d1cp-20f),\n@@ -85,7 +84,7 @@ special_case (float32x4_t poly, float32x4_t n, uint32x4_t e, uint32x4_t cmp1,\n float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (exp) (float32x4_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n-  float32x4_t n, r, r2, scale, p, q, poly, z;\n+  float32x4_t n, r, r2, scale, p, q, poly;\n   uint32x4_t cmp, e;\n \n #if WANT_SIMD_EXCEPT\n@@ -104,11 +103,10 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (exp) (float32x4_t x)\n \n   /* exp(x) = 2^n (1 + poly(r)), with 1 + poly(r) in [1/sqrt(2),sqrt(2)]\n      x = ln2*n + r, with r in [-ln2/2, ln2/2].  */\n-  z = vfmaq_f32 (d->shift, x, d->inv_ln2);\n-  n = vsubq_f32 (z, d->shift);\n+  n = vrndaq_f32 (vmulq_f32 (x, d->inv_ln2));\n   r = vfmsq_f32 (x, n, d->ln2_hi);\n   r = vfmsq_f32 (r, n, d->ln2_lo);\n-  e = vshlq_n_u32 (vreinterpretq_u32_f32 (z), 23);\n+  e = vshlq_n_u32 (vreinterpretq_u32_s32 (vcvtq_s32_f32 (n)), 23);\n   scale = vreinterpretq_f32_u32 (vaddq_u32 (e, d->exponent_bias));\n \n #if !WANT_SIMD_EXCEPT\ndiff --git a/sysdeps/aarch64/fpu/sin_advsimd.c b/sysdeps/aarch64/fpu/sin_advsimd.c\nindex a0d9d3b819..718125cbad 100644\n--- a/sysdeps/aarch64/fpu/sin_advsimd.c\n+++ b/sysdeps/aarch64/fpu/sin_advsimd.c\n@@ -22,7 +22,7 @@\n static const struct data\n {\n   float64x2_t poly[7];\n-  float64x2_t range_val, inv_pi, shift, pi_1, pi_2, pi_3;\n+  float64x2_t range_val, inv_pi, pi_1, pi_2, pi_3;\n } data = {\n   .poly = { V2 (-0x1.555555555547bp-3), V2 (0x1.1111111108a4dp-7),\n \t    V2 (-0x1.a01a019936f27p-13), V2 (0x1.71de37a97d93ep-19),\n@@ -34,12 +34,13 @@ static const struct data\n   .pi_1 = V2 (0x1.921fb54442d18p+1),\n   .pi_2 = V2 (0x1.1a62633145c06p-53),\n   .pi_3 = V2 (0x1.c1cd129024e09p-106),\n-  .shift = V2 (0x1.8p52),\n };\n \n #if WANT_SIMD_EXCEPT\n-# define TinyBound v_u64 (0x3000000000000000) /* asuint64 (0x1p-255).  */\n-# define Thresh v_u64 (0x1160000000000000)    /* RangeVal - TinyBound.  */\n+/* asuint64(0x1p-253)), below which multiply by inv_pi underflows.  */\n+# define TinyBound v_u64 (0x3020000000000000)\n+/* RangeVal - TinyBound.  */\n+# define Thresh v_u64 (0x1160000000000000)\n #endif\n \n #define C(i) d->poly[i]\n@@ -72,16 +73,15 @@ float64x2_t VPCS_ATTR V_NAME_D1 (sin) (float64x2_t x)\n      fenv). These lanes will be fixed by special-case handler later.  */\n   uint64x2_t ir = vreinterpretq_u64_f64 (vabsq_f64 (x));\n   cmp = vcgeq_u64 (vsubq_u64 (ir, TinyBound), Thresh);\n-  r = vbslq_f64 (cmp, vreinterpretq_f64_u64 (cmp), x);\n+  r = vreinterpretq_f64_u64 (vbicq_u64 (vreinterpretq_u64_f64 (x), cmp));\n #else\n   r = x;\n   cmp = vcageq_f64 (x, d->range_val);\n #endif\n \n   /* n = rint(|x|/pi).  */\n-  n = vfmaq_f64 (d->shift, d->inv_pi, r);\n-  odd = vshlq_n_u64 (vreinterpretq_u64_f64 (n), 63);\n-  n = vsubq_f64 (n, d->shift);\n+  n = vrndaq_f64 (vmulq_f64 (r, d->inv_pi));\n+  odd = vshlq_n_u64 (vreinterpretq_u64_s64 (vcvtq_s64_f64 (n)), 63);\n \n   /* r = |x| - n*pi  (range reduction into -pi/2 .. pi/2).  */\n   r = vfmsq_f64 (r, d->pi_1, n);\ndiff --git a/sysdeps/aarch64/fpu/sinf_advsimd.c b/sysdeps/aarch64/fpu/sinf_advsimd.c\nindex 375dfc3331..6ee9a23d5b 100644\n--- a/sysdeps/aarch64/fpu/sinf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/sinf_advsimd.c\n@@ -22,7 +22,7 @@\n static const struct data\n {\n   float32x4_t poly[4];\n-  float32x4_t range_val, inv_pi, shift, pi_1, pi_2, pi_3;\n+  float32x4_t range_val, inv_pi, pi_1, pi_2, pi_3;\n } data = {\n   /* 1.886 ulp error.  */\n   .poly = { V4 (-0x1.555548p-3f), V4 (0x1.110df4p-7f), V4 (-0x1.9f42eap-13f),\n@@ -33,13 +33,14 @@ static const struct data\n   .pi_3 = V4 (-0x1.ee59dap-49f),\n \n   .inv_pi = V4 (0x1.45f306p-2f),\n-  .shift = V4 (0x1.8p+23f),\n   .range_val = V4 (0x1p20f)\n };\n \n #if WANT_SIMD_EXCEPT\n-# define TinyBound v_u32 (0x21000000) /* asuint32(0x1p-61f).  */\n-# define Thresh v_u32 (0x28800000)    /* RangeVal - TinyBound.  */\n+/* asuint32(0x1p-59f), below which multiply by inv_pi underflows.  */\n+# define TinyBound v_u32 (0x22000000)\n+/* RangeVal - TinyBound.  */\n+# define Thresh v_u32 (0x27800000)\n #endif\n \n #define C(i) d->poly[i]\n@@ -64,23 +65,22 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (sin) (float32x4_t x)\n   /* If fenv exceptions are to be triggered correctly, set any special lanes\n      to 1 (which is neutral w.r.t. fenv). These lanes will be fixed by\n      special-case handler later.  */\n-  r = vbslq_f32 (cmp, vreinterpretq_f32_u32 (cmp), x);\n+  r = vreinterpretq_f32_u32 (vbicq_u32 (vreinterpretq_u32_f32 (x), cmp));\n #else\n   r = x;\n   cmp = vcageq_f32 (x, d->range_val);\n #endif\n \n-  /* n = rint(|x|/pi) */\n-  n = vfmaq_f32 (d->shift, d->inv_pi, r);\n-  odd = vshlq_n_u32 (vreinterpretq_u32_f32 (n), 31);\n-  n = vsubq_f32 (n, d->shift);\n+  /* n = rint(|x|/pi).  */\n+  n = vrndaq_f32 (vmulq_f32 (r, d->inv_pi));\n+  odd = vshlq_n_u32 (vreinterpretq_u32_s32 (vcvtq_s32_f32 (n)), 31);\n \n-  /* r = |x| - n*pi  (range reduction into -pi/2 .. pi/2) */\n+  /* r = |x| - n*pi  (range reduction into -pi/2 .. pi/2).  */\n   r = vfmsq_f32 (r, d->pi_1, n);\n   r = vfmsq_f32 (r, d->pi_2, n);\n   r = vfmsq_f32 (r, d->pi_3, n);\n \n-  /* y = sin(r) */\n+  /* y = sin(r).  */\n   r2 = vmulq_f32 (r, r);\n   y = vfmaq_f32 (C (2), C (3), r2);\n   y = vfmaq_f32 (C (1), y, r2);\n\ncommit 9ff7559b274eb0dbce2cbcf87284c1d30d47a2d6\nAuthor: Joe Ramsay <Joe.Ramsay@arm.com>\nDate:   Mon Oct 28 14:58:35 2024 +0000\n\n    AArch64: Small optimisation in AdvSIMD erf and erfc\n    \n    In both routines, reduce register pressure such that GCC 14 emits no\n    spills for erf and fewer spills for erfc.  Also use more efficient\n    comparison for the special-case in erf.\n    \n    Benchtests show erf improves by 6.4%, erfc by 1.0%.\n    \n    (cherry picked from commit 1cf29fbc5be23db775d1dfa6b332ded6e6554252)\n\ndiff --git a/sysdeps/aarch64/fpu/erf_advsimd.c b/sysdeps/aarch64/fpu/erf_advsimd.c\nindex 19cbb7d0f4..c0116735e4 100644\n--- a/sysdeps/aarch64/fpu/erf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/erf_advsimd.c\n@@ -22,19 +22,21 @@\n static const struct data\n {\n   float64x2_t third;\n-  float64x2_t tenth, two_over_five, two_over_fifteen;\n-  float64x2_t two_over_nine, two_over_fortyfive;\n+  float64x2_t tenth, two_over_five, two_over_nine;\n+  double two_over_fifteen, two_over_fortyfive;\n   float64x2_t max, shift;\n+  uint64x2_t max_idx;\n #if WANT_SIMD_EXCEPT\n   float64x2_t tiny_bound, huge_bound, scale_minus_one;\n #endif\n } data = {\n+  .max_idx = V2 (768),\n   .third = V2 (0x1.5555555555556p-2), /* used to compute 2/3 and 1/6 too.  */\n-  .two_over_fifteen = V2 (0x1.1111111111111p-3),\n+  .two_over_fifteen = 0x1.1111111111111p-3,\n   .tenth = V2 (-0x1.999999999999ap-4),\n   .two_over_five = V2 (-0x1.999999999999ap-2),\n   .two_over_nine = V2 (-0x1.c71c71c71c71cp-3),\n-  .two_over_fortyfive = V2 (0x1.6c16c16c16c17p-5),\n+  .two_over_fortyfive = 0x1.6c16c16c16c17p-5,\n   .max = V2 (5.9921875), /* 6 - 1/128.  */\n   .shift = V2 (0x1p45),\n #if WANT_SIMD_EXCEPT\n@@ -87,8 +89,8 @@ float64x2_t VPCS_ATTR V_NAME_D1 (erf) (float64x2_t x)\n   float64x2_t a = vabsq_f64 (x);\n   /* Reciprocal conditions that do not catch NaNs so they can be used in BSLs\n      to return expected results.  */\n-  uint64x2_t a_le_max = vcleq_f64 (a, dat->max);\n-  uint64x2_t a_gt_max = vcgtq_f64 (a, dat->max);\n+  uint64x2_t a_le_max = vcaleq_f64 (x, dat->max);\n+  uint64x2_t a_gt_max = vcagtq_f64 (x, dat->max);\n \n #if WANT_SIMD_EXCEPT\n   /* |x| huge or tiny.  */\n@@ -115,7 +117,7 @@ float64x2_t VPCS_ATTR V_NAME_D1 (erf) (float64x2_t x)\n      segfault.  */\n   uint64x2_t i\n       = vsubq_u64 (vreinterpretq_u64_f64 (z), vreinterpretq_u64_f64 (shift));\n-  i = vbslq_u64 (a_le_max, i, v_u64 (768));\n+  i = vbslq_u64 (a_le_max, i, dat->max_idx);\n   struct entry e = lookup (i);\n \n   float64x2_t r = vsubq_f64 (z, shift);\n@@ -125,14 +127,19 @@ float64x2_t VPCS_ATTR V_NAME_D1 (erf) (float64x2_t x)\n   float64x2_t d2 = vmulq_f64 (d, d);\n   float64x2_t r2 = vmulq_f64 (r, r);\n \n+  float64x2_t two_over_fifteen_and_fortyfive\n+      = vld1q_f64 (&dat->two_over_fifteen);\n+\n   /* poly (d, r) = 1 + p1(r) * d + p2(r) * d^2 + ... + p5(r) * d^5.  */\n   float64x2_t p1 = r;\n   float64x2_t p2\n       = vfmsq_f64 (dat->third, r2, vaddq_f64 (dat->third, dat->third));\n   float64x2_t p3 = vmulq_f64 (r, vfmaq_f64 (v_f64 (-0.5), r2, dat->third));\n-  float64x2_t p4 = vfmaq_f64 (dat->two_over_five, r2, dat->two_over_fifteen);\n+  float64x2_t p4 = vfmaq_laneq_f64 (dat->two_over_five, r2,\n+\t\t\t\t    two_over_fifteen_and_fortyfive, 0);\n   p4 = vfmsq_f64 (dat->tenth, r2, p4);\n-  float64x2_t p5 = vfmaq_f64 (dat->two_over_nine, r2, dat->two_over_fortyfive);\n+  float64x2_t p5 = vfmaq_laneq_f64 (dat->two_over_nine, r2,\n+\t\t\t\t    two_over_fifteen_and_fortyfive, 1);\n   p5 = vmulq_f64 (r, vfmaq_f64 (vmulq_f64 (v_f64 (0.5), dat->third), r2, p5));\n \n   float64x2_t p34 = vfmaq_f64 (p3, d, p4);\ndiff --git a/sysdeps/aarch64/fpu/erfc_advsimd.c b/sysdeps/aarch64/fpu/erfc_advsimd.c\nindex f1b3bfe830..2f2f755c46 100644\n--- a/sysdeps/aarch64/fpu/erfc_advsimd.c\n+++ b/sysdeps/aarch64/fpu/erfc_advsimd.c\n@@ -24,8 +24,8 @@ static const struct data\n {\n   uint64x2_t offset, table_scale;\n   float64x2_t max, shift;\n-  float64x2_t p20, p40, p41, p42;\n-  float64x2_t p51, p52;\n+  float64x2_t p20, p40, p41, p51;\n+  double p42, p52;\n   double qr5[2], qr6[2], qr7[2], qr8[2], qr9[2];\n #if WANT_SIMD_EXCEPT\n   float64x2_t uflow_bound;\n@@ -41,9 +41,9 @@ static const struct data\n   .p20 = V2 (0x1.5555555555555p-2),  /* 1/3, used to compute 2/3 and 1/6.  */\n   .p40 = V2 (-0x1.999999999999ap-4), /* 1/10.  */\n   .p41 = V2 (-0x1.999999999999ap-2), /* 2/5.  */\n-  .p42 = V2 (0x1.1111111111111p-3),  /* 2/15.  */\n+  .p42 = 0x1.1111111111111p-3,\t     /* 2/15.  */\n   .p51 = V2 (-0x1.c71c71c71c71cp-3), /* 2/9.  */\n-  .p52 = V2 (0x1.6c16c16c16c17p-5),  /* 2/45.  */\n+  .p52 = 0x1.6c16c16c16c17p-5,\t     /* 2/45.  */\n   /* Qi = (i+1) / i, Ri = -2 * i / ((i+1)*(i+2)), for i = 5, ..., 9.  */\n   .qr5 = { 0x1.3333333333333p0, -0x1.e79e79e79e79ep-3 },\n   .qr6 = { 0x1.2aaaaaaaaaaabp0, -0x1.b6db6db6db6dbp-3 },\n@@ -157,9 +157,10 @@ float64x2_t V_NAME_D1 (erfc) (float64x2_t x)\n   float64x2_t p1 = r;\n   float64x2_t p2 = vfmsq_f64 (dat->p20, r2, vaddq_f64 (dat->p20, dat->p20));\n   float64x2_t p3 = vmulq_f64 (r, vfmaq_f64 (v_f64 (-0.5), r2, dat->p20));\n-  float64x2_t p4 = vfmaq_f64 (dat->p41, r2, dat->p42);\n+  float64x2_t p42_p52 = vld1q_f64 (&dat->p42);\n+  float64x2_t p4 = vfmaq_laneq_f64 (dat->p41, r2, p42_p52, 0);\n   p4 = vfmsq_f64 (dat->p40, r2, p4);\n-  float64x2_t p5 = vfmaq_f64 (dat->p51, r2, dat->p52);\n+  float64x2_t p5 = vfmaq_laneq_f64 (dat->p51, r2, p42_p52, 1);\n   p5 = vmulq_f64 (r, vfmaq_f64 (vmulq_f64 (v_f64 (0.5), dat->p20), r2, p5));\n   /* Compute p_i using recurrence relation:\n      p_{i+2} = (p_i + r * Q_{i+1} * p_{i+1}) * R_{i+1}.  */\n\ncommit 76c923fe9d09befc8131205659d99cb9ac97460a\nAuthor: Joe Ramsay <Joe.Ramsay@arm.com>\nDate:   Fri Nov 1 15:48:54 2024 +0000\n\n    AArch64: Remove SVE erf and erfc tables\n    \n    By using a combination of mask-and-add instead of the shift-based\n    index calculation the routines can share the same table as other\n    variants with no performance degradation.\n    \n    The tables change name because of other changes in downstream AOR.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit 2d82d781a539ce8e82178fc1fa2c99ae1884e7fe)\n\ndiff --git a/sysdeps/aarch64/fpu/Makefile b/sysdeps/aarch64/fpu/Makefile\nindex 234a6c457c..be8541f649 100644\n--- a/sysdeps/aarch64/fpu/Makefile\n+++ b/sysdeps/aarch64/fpu/Makefile\n@@ -41,8 +41,6 @@ libmvec-support = $(addsuffix f_advsimd,$(float-advsimd-funcs)) \\\n                   v_log10_data \\\n                   erf_data \\\n                   erff_data \\\n-                  sv_erf_data \\\n-                  sv_erff_data \\\n                   v_exp_tail_data \\\n                   erfc_data \\\n                   erfcf_data \\\ndiff --git a/sysdeps/aarch64/fpu/erf_advsimd.c b/sysdeps/aarch64/fpu/erf_advsimd.c\nindex c0116735e4..a48092e838 100644\n--- a/sysdeps/aarch64/fpu/erf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/erf_advsimd.c\n@@ -58,8 +58,8 @@ static inline struct entry\n lookup (uint64x2_t i)\n {\n   struct entry e;\n-  float64x2_t e1 = vld1q_f64 (&__erf_data.tab[vgetq_lane_u64 (i, 0)].erf),\n-\t      e2 = vld1q_f64 (&__erf_data.tab[vgetq_lane_u64 (i, 1)].erf);\n+  float64x2_t e1 = vld1q_f64 (&__v_erf_data.tab[vgetq_lane_u64 (i, 0)].erf),\n+\t      e2 = vld1q_f64 (&__v_erf_data.tab[vgetq_lane_u64 (i, 1)].erf);\n   e.erf = vuzp1q_f64 (e1, e2);\n   e.scale = vuzp2q_f64 (e1, e2);\n   return e;\ndiff --git a/sysdeps/aarch64/fpu/erf_data.c b/sysdeps/aarch64/fpu/erf_data.c\nindex 6d2dcd235c..ea01fad7ca 100644\n--- a/sysdeps/aarch64/fpu/erf_data.c\n+++ b/sysdeps/aarch64/fpu/erf_data.c\n@@ -19,14 +19,14 @@\n \n #include \"vecmath_config.h\"\n \n-/* Lookup table used in erf.\n+/* Lookup table used in vector erf.\n    For each possible rounded input r (multiples of 1/128), between\n    r = 0.0 and r = 6.0 (769 values):\n-   - the first entry __erff_data.tab.erf contains the values of erf(r),\n-   - the second entry __erff_data.tab.scale contains the values of\n+   - the first entry __v_erff_data.tab.erf contains the values of erf(r),\n+   - the second entry __v_erff_data.tab.scale contains the values of\n    2/sqrt(pi)*exp(-r^2). Note that indices 0 and 1 are never hit by the\n    algorithm, since lookup is performed only for x >= 1/64-1/512.  */\n-const struct erf_data __erf_data = {\n+const struct v_erf_data __v_erf_data = {\n   .tab = { { 0x0.0000000000000p+0, 0x1.20dd750429b6dp+0 },\n \t   { 0x1.20dbf3deb1340p-7, 0x1.20d8f1975c85dp+0 },\n \t   { 0x1.20d77083f17a0p-6, 0x1.20cb67bd452c7p+0 },\ndiff --git a/sysdeps/aarch64/fpu/erf_sve.c b/sysdeps/aarch64/fpu/erf_sve.c\nindex 7d51417406..671d55a02b 100644\n--- a/sysdeps/aarch64/fpu/erf_sve.c\n+++ b/sysdeps/aarch64/fpu/erf_sve.c\n@@ -67,14 +67,16 @@ svfloat64_t SV_NAME_D1 (erf) (svfloat64_t x, const svbool_t pg)\n   svfloat64_t a = svabs_x (pg, x);\n   svfloat64_t shift = sv_f64 (dat->shift);\n   svfloat64_t z = svadd_x (pg, a, shift);\n-  svuint64_t i\n-      = svsub_x (pg, svreinterpret_u64 (z), svreinterpret_u64 (shift));\n+  svuint64_t i = svand_x (pg, svreinterpret_u64 (z), 0xfff);\n+  i = svadd_x (pg, i, i);\n \n   /* Lookup without shortcut for small values but with predicate to avoid\n      segfault for large values and NaNs.  */\n   svfloat64_t r = svsub_x (pg, z, shift);\n-  svfloat64_t erfr = svld1_gather_index (a_lt_max, __sv_erf_data.erf, i);\n-  svfloat64_t scale = svld1_gather_index (a_lt_max, __sv_erf_data.scale, i);\n+  svfloat64_t erfr\n+      = svld1_gather_index (a_lt_max, &__v_erf_data.tab[0].erf, i);\n+  svfloat64_t scale\n+      = svld1_gather_index (a_lt_max, &__v_erf_data.tab[0].scale, i);\n \n   /* erf(x) ~ erf(r) + scale * d * poly (r, d).  */\n   svfloat64_t d = svsub_x (pg, a, r);\ndiff --git a/sysdeps/aarch64/fpu/erfc_advsimd.c b/sysdeps/aarch64/fpu/erfc_advsimd.c\nindex 2f2f755c46..d05eac61a2 100644\n--- a/sysdeps/aarch64/fpu/erfc_advsimd.c\n+++ b/sysdeps/aarch64/fpu/erfc_advsimd.c\n@@ -69,9 +69,9 @@ lookup (uint64x2_t i)\n {\n   struct entry e;\n   float64x2_t e1\n-      = vld1q_f64 (&__erfc_data.tab[vgetq_lane_u64 (i, 0) - Off].erfc);\n+      = vld1q_f64 (&__v_erfc_data.tab[vgetq_lane_u64 (i, 0) - Off].erfc);\n   float64x2_t e2\n-      = vld1q_f64 (&__erfc_data.tab[vgetq_lane_u64 (i, 1) - Off].erfc);\n+      = vld1q_f64 (&__v_erfc_data.tab[vgetq_lane_u64 (i, 1) - Off].erfc);\n   e.erfc = vuzp1q_f64 (e1, e2);\n   e.scale = vuzp2q_f64 (e1, e2);\n   return e;\ndiff --git a/sysdeps/aarch64/fpu/erfc_data.c b/sysdeps/aarch64/fpu/erfc_data.c\nindex 76a94e4681..8dc6a8c42c 100644\n--- a/sysdeps/aarch64/fpu/erfc_data.c\n+++ b/sysdeps/aarch64/fpu/erfc_data.c\n@@ -19,14 +19,14 @@\n \n #include \"vecmath_config.h\"\n \n-/* Lookup table used in erfc.\n+/* Lookup table used in vector erfc.\n    For each possible rounded input r (multiples of 1/128), between\n    r = 0.0 and r = ~27.0 (3488 values):\n-   - the first entry __erfc_data.tab.erfc contains the values of erfc(r),\n-   - the second entry __erfc_data.tab.scale contains the values of\n+   - the first entry __v_erfc_data.tab.erfc contains the values of erfc(r),\n+   - the second entry __v_erfc_data.tab.scale contains the values of\n    2/sqrt(pi)*exp(-r^2). Both values may go into subnormal range, therefore\n    they are scaled by a large enough value 2^128 (fits in 8bit).  */\n-const struct erfc_data __erfc_data = {\n+const struct v_erfc_data __v_erfc_data = {\n   .tab = { { 0x1p128, 0x1.20dd750429b6dp128 },\n \t   { 0x1.fb7c9030853b3p127, 0x1.20d8f1975c85dp128 },\n \t   { 0x1.f6f9447be0743p127, 0x1.20cb67bd452c7p128 },\ndiff --git a/sysdeps/aarch64/fpu/erfc_sve.c b/sysdeps/aarch64/fpu/erfc_sve.c\nindex c17d3e4484..703926ee41 100644\n--- a/sysdeps/aarch64/fpu/erfc_sve.c\n+++ b/sysdeps/aarch64/fpu/erfc_sve.c\n@@ -104,7 +104,7 @@ svfloat64_t SV_NAME_D1 (erfc) (svfloat64_t x, const svbool_t pg)\n \n   /* Lookup erfc(r) and 2/sqrt(pi)*exp(-r^2) in tables.  */\n   i = svadd_x (pg, i, i);\n-  const float64_t *p = &__erfc_data.tab[0].erfc - 2 * dat->off_arr;\n+  const float64_t *p = &__v_erfc_data.tab[0].erfc - 2 * dat->off_arr;\n   svfloat64_t erfcr = svld1_gather_index (pg, p, i);\n   svfloat64_t scale = svld1_gather_index (pg, p + 1, i);\n \ndiff --git a/sysdeps/aarch64/fpu/erfcf_advsimd.c b/sysdeps/aarch64/fpu/erfcf_advsimd.c\nindex ca5bc3ab33..59b0b0d64b 100644\n--- a/sysdeps/aarch64/fpu/erfcf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/erfcf_advsimd.c\n@@ -62,13 +62,13 @@ lookup (uint32x4_t i)\n {\n   struct entry e;\n   float32x2_t t0\n-      = vld1_f32 (&__erfcf_data.tab[vgetq_lane_u32 (i, 0) - Off].erfc);\n+      = vld1_f32 (&__v_erfcf_data.tab[vgetq_lane_u32 (i, 0) - Off].erfc);\n   float32x2_t t1\n-      = vld1_f32 (&__erfcf_data.tab[vgetq_lane_u32 (i, 1) - Off].erfc);\n+      = vld1_f32 (&__v_erfcf_data.tab[vgetq_lane_u32 (i, 1) - Off].erfc);\n   float32x2_t t2\n-      = vld1_f32 (&__erfcf_data.tab[vgetq_lane_u32 (i, 2) - Off].erfc);\n+      = vld1_f32 (&__v_erfcf_data.tab[vgetq_lane_u32 (i, 2) - Off].erfc);\n   float32x2_t t3\n-      = vld1_f32 (&__erfcf_data.tab[vgetq_lane_u32 (i, 3) - Off].erfc);\n+      = vld1_f32 (&__v_erfcf_data.tab[vgetq_lane_u32 (i, 3) - Off].erfc);\n   float32x4_t e1 = vcombine_f32 (t0, t1);\n   float32x4_t e2 = vcombine_f32 (t2, t3);\n   e.erfc = vuzp1q_f32 (e1, e2);\ndiff --git a/sysdeps/aarch64/fpu/erfcf_data.c b/sysdeps/aarch64/fpu/erfcf_data.c\nindex 77fb889a78..d45087bbb9 100644\n--- a/sysdeps/aarch64/fpu/erfcf_data.c\n+++ b/sysdeps/aarch64/fpu/erfcf_data.c\n@@ -19,14 +19,14 @@\n \n #include \"vecmath_config.h\"\n \n-/* Lookup table used in erfcf.\n+/* Lookup table used in vector erfcf.\n    For each possible rounded input r (multiples of 1/64), between\n    r = 0.0 and r = 10.0625 (645 values):\n-   - the first entry __erfcf_data.tab.erfc contains the values of erfc(r),\n-   - the second entry __erfcf_data.tab.scale contains the values of\n+   - the first entry __v_erfcf_data.tab.erfc contains the values of erfc(r),\n+   - the second entry __v_erfcf_data.tab.scale contains the values of\n    2/sqrt(pi)*exp(-r^2). Both values may go into subnormal range, therefore\n    they are scaled by a large enough value 2^47 (fits in 8 bits).  */\n-const struct erfcf_data __erfcf_data = {\n+const struct v_erfcf_data __v_erfcf_data = {\n   .tab = { { 0x1p47, 0x1.20dd76p47 },\n \t   { 0x1.f6f944p46, 0x1.20cb68p47 },\n \t   { 0x1.edf3aap46, 0x1.209546p47 },\ndiff --git a/sysdeps/aarch64/fpu/erfcf_sve.c b/sysdeps/aarch64/fpu/erfcf_sve.c\nindex 48d1677eb4..ecacb933ac 100644\n--- a/sysdeps/aarch64/fpu/erfcf_sve.c\n+++ b/sysdeps/aarch64/fpu/erfcf_sve.c\n@@ -77,7 +77,7 @@ svfloat32_t SV_NAME_F1 (erfc) (svfloat32_t x, const svbool_t pg)\n \n   /* Lookup erfc(r) and 2/sqrt(pi)*exp(-r^2) in tables.  */\n   i = svmul_x (pg, i, 2);\n-  const float32_t *p = &__erfcf_data.tab[0].erfc - 2 * dat->off_arr;\n+  const float32_t *p = &__v_erfcf_data.tab[0].erfc - 2 * dat->off_arr;\n   svfloat32_t erfcr = svld1_gather_index (pg, p, i);\n   svfloat32_t scale = svld1_gather_index (pg, p + 1, i);\n \ndiff --git a/sysdeps/aarch64/fpu/erff_advsimd.c b/sysdeps/aarch64/fpu/erff_advsimd.c\nindex f2fe6ff236..db39e789b6 100644\n--- a/sysdeps/aarch64/fpu/erff_advsimd.c\n+++ b/sysdeps/aarch64/fpu/erff_advsimd.c\n@@ -47,10 +47,10 @@ static inline struct entry\n lookup (uint32x4_t i)\n {\n   struct entry e;\n-  float32x2_t t0 = vld1_f32 (&__erff_data.tab[vgetq_lane_u32 (i, 0)].erf);\n-  float32x2_t t1 = vld1_f32 (&__erff_data.tab[vgetq_lane_u32 (i, 1)].erf);\n-  float32x2_t t2 = vld1_f32 (&__erff_data.tab[vgetq_lane_u32 (i, 2)].erf);\n-  float32x2_t t3 = vld1_f32 (&__erff_data.tab[vgetq_lane_u32 (i, 3)].erf);\n+  float32x2_t t0 = vld1_f32 (&__v_erff_data.tab[vgetq_lane_u32 (i, 0)].erf);\n+  float32x2_t t1 = vld1_f32 (&__v_erff_data.tab[vgetq_lane_u32 (i, 1)].erf);\n+  float32x2_t t2 = vld1_f32 (&__v_erff_data.tab[vgetq_lane_u32 (i, 2)].erf);\n+  float32x2_t t3 = vld1_f32 (&__v_erff_data.tab[vgetq_lane_u32 (i, 3)].erf);\n   float32x4_t e1 = vcombine_f32 (t0, t1);\n   float32x4_t e2 = vcombine_f32 (t2, t3);\n   e.erf = vuzp1q_f32 (e1, e2);\ndiff --git a/sysdeps/aarch64/fpu/erff_data.c b/sysdeps/aarch64/fpu/erff_data.c\nindex 9a32940915..da38aed205 100644\n--- a/sysdeps/aarch64/fpu/erff_data.c\n+++ b/sysdeps/aarch64/fpu/erff_data.c\n@@ -19,14 +19,14 @@\n \n #include \"vecmath_config.h\"\n \n-/* Lookup table used in erff.\n+/* Lookup table used in vector erff.\n    For each possible rounded input r (multiples of 1/128), between\n    r = 0.0 and r = 4.0 (513 values):\n-   - the first entry __erff_data.tab.erf contains the values of erf(r),\n-   - the second entry __erff_data.tab.scale contains the values of\n+   - the first entry __v_erff_data.tab.erf contains the values of erf(r),\n+   - the second entry __v_erff_data.tab.scale contains the values of\n    2/sqrt(pi)*exp(-r^2). Note that indices 0 and 1 are never hit by the\n    algorithm, since lookup is performed only for x >= 1/64-1/512.  */\n-const struct erff_data __erff_data = {\n+const struct v_erff_data __v_erff_data = {\n   .tab = { { 0x0.000000p+0, 0x1.20dd76p+0 },\n \t   { 0x1.20dbf4p-7, 0x1.20d8f2p+0 },\n \t   { 0x1.20d770p-6, 0x1.20cb68p+0 },\ndiff --git a/sysdeps/aarch64/fpu/erff_sve.c b/sysdeps/aarch64/fpu/erff_sve.c\nindex 38f00db9be..0e382eb09a 100644\n--- a/sysdeps/aarch64/fpu/erff_sve.c\n+++ b/sysdeps/aarch64/fpu/erff_sve.c\n@@ -62,18 +62,17 @@ svfloat32_t SV_NAME_F1 (erf) (svfloat32_t x, const svbool_t pg)\n \n   svfloat32_t shift = sv_f32 (dat->shift);\n   svfloat32_t z = svadd_x (pg, a, shift);\n-  svuint32_t i\n-      = svsub_x (pg, svreinterpret_u32 (z), svreinterpret_u32 (shift));\n-\n-  /* Saturate lookup index.  */\n-  i = svsel (a_ge_max, sv_u32 (512), i);\n+  svuint32_t i = svand_x (pg, svreinterpret_u32 (z), 0xfff);\n+  i = svadd_x (pg, i, i);\n \n   /* r and erf(r) set to 0 for |x| below min.  */\n   svfloat32_t r = svsub_z (a_gt_min, z, shift);\n-  svfloat32_t erfr = svld1_gather_index (a_gt_min, __sv_erff_data.erf, i);\n+  svfloat32_t erfr\n+      = svld1_gather_index (a_gt_min, &__v_erff_data.tab[0].erf, i);\n \n   /* scale set to 2/sqrt(pi) for |x| below min.  */\n-  svfloat32_t scale = svld1_gather_index (a_gt_min, __sv_erff_data.scale, i);\n+  svfloat32_t scale\n+      = svld1_gather_index (a_gt_min, &__v_erff_data.tab[0].scale, i);\n   scale = svsel (a_gt_min, scale, sv_f32 (dat->scale));\n \n   /* erf(x) ~ erf(r) + scale * d * (1 - r * d + 1/3 * d^2).  */\ndiff --git a/sysdeps/aarch64/fpu/sv_erf_data.c b/sysdeps/aarch64/fpu/sv_erf_data.c\ndeleted file mode 100644\nindex a53878f893..0000000000\n--- a/sysdeps/aarch64/fpu/sv_erf_data.c\n+++ /dev/null\n@@ -1,1570 +0,0 @@\n-/* Table for SVE erf approximation\n-\n-   Copyright (C) 2024 Free Software Foundation, Inc.\n-   This file is part of the GNU C Library.\n-\n-   The GNU C Library is free software; you can redistribute it and/or\n-   modify it under the terms of the GNU Lesser General Public\n-   License as published by the Free Software Foundation; either\n-   version 2.1 of the License, or (at your option) any later version.\n-\n-   The GNU C Library is distributed in the hope that it will be useful,\n-   but WITHOUT ANY WARRANTY; without even the implied warranty of\n-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n-   Lesser General Public License for more details.\n-\n-   You should have received a copy of the GNU Lesser General Public\n-   License along with the GNU C Library; if not, see\n-   <https://www.gnu.org/licenses/>.  */\n-\n-#include \"vecmath_config.h\"\n-\n-/* Lookup table used in vector erf.\n-   For each possible rounded input r (multiples of 1/128), between\n-   r = 0.0 and r = 6.0 (769 values):\n-   - the first entry __erf_data.tab.erf contains the values of erf(r),\n-   - the second entry __erf_data.tab.scale contains the values of\n-   2/sqrt(pi)*exp(-r^2). Note that indices 0 and 1 are never hit by the\n-   algorithm, since lookup is performed only for x >= 1/64-1/512.  */\n-const struct sv_erf_data __sv_erf_data = {\n-  .erf = { 0x0.0000000000000p+0,\n-\t   0x1.20dbf3deb1340p-7,\n-\t   0x1.20d77083f17a0p-6,\n-\t   0x1.b137e0cf584dcp-6,\n-\t   0x1.20c5645dd2538p-5,\n-\t   0x1.68e5d3bbc9526p-5,\n-\t   0x1.b0fafef135745p-5,\n-\t   0x1.f902a77bd3821p-5,\n-\t   0x1.207d480e90658p-4,\n-\t   0x1.44703e87e8593p-4,\n-\t   0x1.68591a1e83b5dp-4,\n-\t   0x1.8c36beb8a8d23p-4,\n-\t   0x1.b0081148a873ap-4,\n-\t   0x1.d3cbf7e70a4b3p-4,\n-\t   0x1.f78159ec8bb50p-4,\n-\t   0x1.0d939005f65e5p-3,\n-\t   0x1.1f5e1a35c3b89p-3,\n-\t   0x1.311fc15f56d14p-3,\n-\t   0x1.42d7fc2f64959p-3,\n-\t   0x1.548642321d7c6p-3,\n-\t   0x1.662a0bdf7a89fp-3,\n-\t   0x1.77c2d2a765f9ep-3,\n-\t   0x1.895010fdbdbfdp-3,\n-\t   0x1.9ad142662e14dp-3,\n-\t   0x1.ac45e37fe2526p-3,\n-\t   0x1.bdad72110a648p-3,\n-\t   0x1.cf076d1233237p-3,\n-\t   0x1.e05354b96ff36p-3,\n-\t   0x1.f190aa85540e2p-3,\n-\t   0x1.015f78a3dcf3dp-2,\n-\t   0x1.09eed6982b948p-2,\n-\t   0x1.127631eb8de32p-2,\n-\t   0x1.1af54e232d609p-2,\n-\t   0x1.236bef825d9a2p-2,\n-\t   0x1.2bd9db0f7827fp-2,\n-\t   0x1.343ed6989b7d9p-2,\n-\t   0x1.3c9aa8b84bedap-2,\n-\t   0x1.44ed18d9f6462p-2,\n-\t   0x1.4d35ef3e5372ep-2,\n-\t   0x1.5574f4ffac98ep-2,\n-\t   0x1.5da9f415ff23fp-2,\n-\t   0x1.65d4b75b00471p-2,\n-\t   0x1.6df50a8dff772p-2,\n-\t   0x1.760aba57a76bfp-2,\n-\t   0x1.7e15944d9d3e4p-2,\n-\t   0x1.861566f5fd3c0p-2,\n-\t   0x1.8e0a01cab516bp-2,\n-\t   0x1.95f3353cbb146p-2,\n-\t   0x1.9dd0d2b721f39p-2,\n-\t   0x1.a5a2aca209394p-2,\n-\t   0x1.ad68966569a87p-2,\n-\t   0x1.b522646bbda68p-2,\n-\t   0x1.bccfec24855b8p-2,\n-\t   0x1.c4710406a65fcp-2,\n-\t   0x1.cc058392a6d2dp-2,\n-\t   0x1.d38d4354c3bd0p-2,\n-\t   0x1.db081ce6e2a48p-2,\n-\t   0x1.e275eaf25e458p-2,\n-\t   0x1.e9d68931ae650p-2,\n-\t   0x1.f129d471eabb1p-2,\n-\t   0x1.f86faa9428f9dp-2,\n-\t   0x1.ffa7ea8eb5fd0p-2,\n-\t   0x1.03693a371519cp-1,\n-\t   0x1.06f794ab2cae7p-1,\n-\t   0x1.0a7ef5c18edd2p-1,\n-\t   0x1.0dff4f247f6c6p-1,\n-\t   0x1.1178930ada115p-1,\n-\t   0x1.14eab43841b55p-1,\n-\t   0x1.1855a5fd3dd50p-1,\n-\t   0x1.1bb95c3746199p-1,\n-\t   0x1.1f15cb50bc4dep-1,\n-\t   0x1.226ae840d4d70p-1,\n-\t   0x1.25b8a88b6dd7fp-1,\n-\t   0x1.28ff0240d52cdp-1,\n-\t   0x1.2c3debfd7d6c1p-1,\n-\t   0x1.2f755ce9a21f4p-1,\n-\t   0x1.32a54cb8db67bp-1,\n-\t   0x1.35cdb3a9a144dp-1,\n-\t   0x1.38ee8a84beb71p-1,\n-\t   0x1.3c07ca9cb4f9ep-1,\n-\t   0x1.3f196dcd0f135p-1,\n-\t   0x1.42236e79a5fa6p-1,\n-\t   0x1.4525c78dd5966p-1,\n-\t   0x1.4820747ba2dc2p-1,\n-\t   0x1.4b13713ad3513p-1,\n-\t   0x1.4dfeba47f63ccp-1,\n-\t   0x1.50e24ca35fd2cp-1,\n-\t   0x1.53be25d016a4fp-1,\n-\t   0x1.569243d2b3a9bp-1,\n-\t   0x1.595ea53035283p-1,\n-\t   0x1.5c2348ecc4dc3p-1,\n-\t   0x1.5ee02e8a71a53p-1,\n-\t   0x1.61955607dd15dp-1,\n-\t   0x1.6442bfdedd397p-1,\n-\t   0x1.66e86d0312e82p-1,\n-\t   0x1.69865ee075011p-1,\n-\t   0x1.6c1c9759d0e5fp-1,\n-\t   0x1.6eab18c74091bp-1,\n-\t   0x1.7131e5f496a5ap-1,\n-\t   0x1.73b1021fc0cb8p-1,\n-\t   0x1.762870f720c6fp-1,\n-\t   0x1.78983697dc96fp-1,\n-\t   0x1.7b00578c26037p-1,\n-\t   0x1.7d60d8c979f7bp-1,\n-\t   0x1.7fb9bfaed8078p-1,\n-\t   0x1.820b1202f27fbp-1,\n-\t   0x1.8454d5f25760dp-1,\n-\t   0x1.8697120d92a4ap-1,\n-\t   0x1.88d1cd474a2e0p-1,\n-\t   0x1.8b050ef253c37p-1,\n-\t   0x1.8d30debfc572ep-1,\n-\t   0x1.8f5544bd00c04p-1,\n-\t   0x1.91724951b8fc6p-1,\n-\t   0x1.9387f53df5238p-1,\n-\t   0x1.959651980da31p-1,\n-\t   0x1.979d67caa6631p-1,\n-\t   0x1.999d4192a5715p-1,\n-\t   0x1.9b95e8fd26abap-1,\n-\t   0x1.9d8768656cc42p-1,\n-\t   0x1.9f71ca72cffb6p-1,\n-\t   0x1.a1551a16aaeafp-1,\n-\t   0x1.a331628a45b92p-1,\n-\t   0x1.a506af4cc00f4p-1,\n-\t   0x1.a6d50c20fa293p-1,\n-\t   0x1.a89c850b7d54dp-1,\n-\t   0x1.aa5d265064366p-1,\n-\t   0x1.ac16fc7143263p-1,\n-\t   0x1.adca142b10f98p-1,\n-\t   0x1.af767a741088bp-1,\n-\t   0x1.b11c3c79bb424p-1,\n-\t   0x1.b2bb679ead19cp-1,\n-\t   0x1.b4540978921eep-1,\n-\t   0x1.b5e62fce16095p-1,\n-\t   0x1.b771e894d602ep-1,\n-\t   0x1.b8f741ef54f83p-1,\n-\t   0x1.ba764a2af2b78p-1,\n-\t   0x1.bbef0fbde6221p-1,\n-\t   0x1.bd61a1453ab44p-1,\n-\t   0x1.bece0d82d1a5cp-1,\n-\t   0x1.c034635b66e23p-1,\n-\t   0x1.c194b1d49a184p-1,\n-\t   0x1.c2ef0812fc1bdp-1,\n-\t   0x1.c443755820d64p-1,\n-\t   0x1.c5920900b5fd1p-1,\n-\t   0x1.c6dad2829ec62p-1,\n-\t   0x1.c81de16b14cefp-1,\n-\t   0x1.c95b455cce69dp-1,\n-\t   0x1.ca930e0e2a825p-1,\n-\t   0x1.cbc54b476248dp-1,\n-\t   0x1.ccf20ce0c0d27p-1,\n-\t   0x1.ce1962c0e0d8bp-1,\n-\t   0x1.cf3b5cdaf0c39p-1,\n-\t   0x1.d0580b2cfd249p-1,\n-\t   0x1.d16f7dbe41ca0p-1,\n-\t   0x1.d281c49d818d0p-1,\n-\t   0x1.d38eefdf64fddp-1,\n-\t   0x1.d4970f9ce00d9p-1,\n-\t   0x1.d59a33f19ed42p-1,\n-\t   0x1.d6986cfa798e7p-1,\n-\t   0x1.d791cad3eff01p-1,\n-\t   0x1.d8865d98abe01p-1,\n-\t   0x1.d97635600bb89p-1,\n-\t   0x1.da61623cb41e0p-1,\n-\t   0x1.db47f43b2980dp-1,\n-\t   0x1.dc29fb60715afp-1,\n-\t   0x1.dd0787a8bb39dp-1,\n-\t   0x1.dde0a90611a0dp-1,\n-\t   0x1.deb56f5f12d28p-1,\n-\t   0x1.df85ea8db188ep-1,\n-\t   0x1.e0522a5dfda73p-1,\n-\t   0x1.e11a3e8cf4eb8p-1,\n-\t   0x1.e1de36c75ba58p-1,\n-\t   0x1.e29e22a89d766p-1,\n-\t   0x1.e35a11b9b61cep-1,\n-\t   0x1.e4121370224ccp-1,\n-\t   0x1.e4c6372cd8927p-1,\n-\t   0x1.e5768c3b4a3fcp-1,\n-\t   0x1.e62321d06c5e0p-1,\n-\t   0x1.e6cc0709c8a0dp-1,\n-\t   0x1.e7714aec96534p-1,\n-\t   0x1.e812fc64db369p-1,\n-\t   0x1.e8b12a44944a8p-1,\n-\t   0x1.e94be342e6743p-1,\n-\t   0x1.e9e335fb56f87p-1,\n-\t   0x1.ea7730ed0bbb9p-1,\n-\t   0x1.eb07e27a133aap-1,\n-\t   0x1.eb9558e6b42cep-1,\n-\t   0x1.ec1fa258c4beap-1,\n-\t   0x1.eca6ccd709544p-1,\n-\t   0x1.ed2ae6489ac1ep-1,\n-\t   0x1.edabfc7453e63p-1,\n-\t   0x1.ee2a1d004692cp-1,\n-\t   0x1.eea5557137ae0p-1,\n-\t   0x1.ef1db32a2277cp-1,\n-\t   0x1.ef93436bc2daap-1,\n-\t   0x1.f006135426b26p-1,\n-\t   0x1.f0762fde45ee6p-1,\n-\t   0x1.f0e3a5e1a1788p-1,\n-\t   0x1.f14e8211e8c55p-1,\n-\t   0x1.f1b6d0fea5f4dp-1,\n-\t   0x1.f21c9f12f0677p-1,\n-\t   0x1.f27ff89525acfp-1,\n-\t   0x1.f2e0e9a6a8b09p-1,\n-\t   0x1.f33f7e43a706bp-1,\n-\t   0x1.f39bc242e43e6p-1,\n-\t   0x1.f3f5c1558b19ep-1,\n-\t   0x1.f44d870704911p-1,\n-\t   0x1.f4a31ebcd47dfp-1,\n-\t   0x1.f4f693b67bd77p-1,\n-\t   0x1.f547f10d60597p-1,\n-\t   0x1.f59741b4b97cfp-1,\n-\t   0x1.f5e4907982a07p-1,\n-\t   0x1.f62fe80272419p-1,\n-\t   0x1.f67952cff6282p-1,\n-\t   0x1.f6c0db3c34641p-1,\n-\t   0x1.f7068b7b10fd9p-1,\n-\t   0x1.f74a6d9a38383p-1,\n-\t   0x1.f78c8b812d498p-1,\n-\t   0x1.f7cceef15d631p-1,\n-\t   0x1.f80ba18636f07p-1,\n-\t   0x1.f848acb544e95p-1,\n-\t   0x1.f88419ce4e184p-1,\n-\t   0x1.f8bdf1fb78370p-1,\n-\t   0x1.f8f63e416ebffp-1,\n-\t   0x1.f92d077f8d56dp-1,\n-\t   0x1.f96256700da8ep-1,\n-\t   0x1.f99633a838a57p-1,\n-\t   0x1.f9c8a7989af0dp-1,\n-\t   0x1.f9f9ba8d3c733p-1,\n-\t   0x1.fa2974addae45p-1,\n-\t   0x1.fa57ddfe27376p-1,\n-\t   0x1.fa84fe5e05c8dp-1,\n-\t   0x1.fab0dd89d1309p-1,\n-\t   0x1.fadb831a9f9c3p-1,\n-\t   0x1.fb04f6868a944p-1,\n-\t   0x1.fb2d3f20f9101p-1,\n-\t   0x1.fb54641aebbc9p-1,\n-\t   0x1.fb7a6c834b5a2p-1,\n-\t   0x1.fb9f5f4739170p-1,\n-\t   0x1.fbc3433260ca5p-1,\n-\t   0x1.fbe61eef4cf6ap-1,\n-\t   0x1.fc07f907bc794p-1,\n-\t   0x1.fc28d7e4f9cd0p-1,\n-\t   0x1.fc48c1d033c7ap-1,\n-\t   0x1.fc67bcf2d7b8fp-1,\n-\t   0x1.fc85cf56ecd38p-1,\n-\t   0x1.fca2fee770c79p-1,\n-\t   0x1.fcbf5170b578bp-1,\n-\t   0x1.fcdacca0bfb73p-1,\n-\t   0x1.fcf57607a6e7cp-1,\n-\t   0x1.fd0f5317f582fp-1,\n-\t   0x1.fd2869270a56fp-1,\n-\t   0x1.fd40bd6d7a785p-1,\n-\t   0x1.fd58550773cb5p-1,\n-\t   0x1.fd6f34f52013ap-1,\n-\t   0x1.fd85621b0876dp-1,\n-\t   0x1.fd9ae142795e3p-1,\n-\t   0x1.fdafb719e6a69p-1,\n-\t   0x1.fdc3e835500b3p-1,\n-\t   0x1.fdd7790ea5bc0p-1,\n-\t   0x1.fdea6e062d0c9p-1,\n-\t   0x1.fdfccb62e52d3p-1,\n-\t   0x1.fe0e9552ebdd6p-1,\n-\t   0x1.fe1fcfebe2083p-1,\n-\t   0x1.fe307f2b503d0p-1,\n-\t   0x1.fe40a6f70af4bp-1,\n-\t   0x1.fe504b1d9696cp-1,\n-\t   0x1.fe5f6f568b301p-1,\n-\t   0x1.fe6e1742f7cf6p-1,\n-\t   0x1.fe7c466dc57a1p-1,\n-\t   0x1.fe8a004c19ae6p-1,\n-\t   0x1.fe97483db8670p-1,\n-\t   0x1.fea4218d6594ap-1,\n-\t   0x1.feb08f7146046p-1,\n-\t   0x1.febc950b3fa75p-1,\n-\t   0x1.fec835695932ep-1,\n-\t   0x1.fed37386190fbp-1,\n-\t   0x1.fede5248e38f4p-1,\n-\t   0x1.fee8d486585eep-1,\n-\t   0x1.fef2fd00af31ap-1,\n-\t   0x1.fefcce6813974p-1,\n-\t   0x1.ff064b5afffbep-1,\n-\t   0x1.ff0f766697c76p-1,\n-\t   0x1.ff18520700971p-1,\n-\t   0x1.ff20e0a7ba8c2p-1,\n-\t   0x1.ff2924a3f7a83p-1,\n-\t   0x1.ff312046f2339p-1,\n-\t   0x1.ff38d5cc4227fp-1,\n-\t   0x1.ff404760319b4p-1,\n-\t   0x1.ff47772010262p-1,\n-\t   0x1.ff4e671a85425p-1,\n-\t   0x1.ff55194fe19dfp-1,\n-\t   0x1.ff5b8fb26f5f6p-1,\n-\t   0x1.ff61cc26c1578p-1,\n-\t   0x1.ff67d08401202p-1,\n-\t   0x1.ff6d9e943c231p-1,\n-\t   0x1.ff733814af88cp-1,\n-\t   0x1.ff789eb6130c9p-1,\n-\t   0x1.ff7dd41ce2b4dp-1,\n-\t   0x1.ff82d9e1a76d8p-1,\n-\t   0x1.ff87b1913e853p-1,\n-\t   0x1.ff8c5cad200a5p-1,\n-\t   0x1.ff90dcaba4096p-1,\n-\t   0x1.ff9532f846ab0p-1,\n-\t   0x1.ff9960f3eb327p-1,\n-\t   0x1.ff9d67f51ddbap-1,\n-\t   0x1.ffa14948549a7p-1,\n-\t   0x1.ffa506302ebaep-1,\n-\t   0x1.ffa89fe5b3625p-1,\n-\t   0x1.ffac17988ef4bp-1,\n-\t   0x1.ffaf6e6f4f5c0p-1,\n-\t   0x1.ffb2a5879f35ep-1,\n-\t   0x1.ffb5bdf67fe6fp-1,\n-\t   0x1.ffb8b8c88295fp-1,\n-\t   0x1.ffbb970200110p-1,\n-\t   0x1.ffbe599f4f9d9p-1,\n-\t   0x1.ffc10194fcb64p-1,\n-\t   0x1.ffc38fcffbb7cp-1,\n-\t   0x1.ffc60535dd7f5p-1,\n-\t   0x1.ffc862a501fd7p-1,\n-\t   0x1.ffcaa8f4c9beap-1,\n-\t   0x1.ffccd8f5c66d1p-1,\n-\t   0x1.ffcef371ea4d7p-1,\n-\t   0x1.ffd0f92cb6ba7p-1,\n-\t   0x1.ffd2eae369a07p-1,\n-\t   0x1.ffd4c94d29fdbp-1,\n-\t   0x1.ffd6951b33686p-1,\n-\t   0x1.ffd84ef9009eep-1,\n-\t   0x1.ffd9f78c7524ap-1,\n-\t   0x1.ffdb8f7605ee7p-1,\n-\t   0x1.ffdd1750e1220p-1,\n-\t   0x1.ffde8fb314ebfp-1,\n-\t   0x1.ffdff92db56e5p-1,\n-\t   0x1.ffe1544d01ccbp-1,\n-\t   0x1.ffe2a1988857cp-1,\n-\t   0x1.ffe3e19349dc7p-1,\n-\t   0x1.ffe514bbdc197p-1,\n-\t   0x1.ffe63b8c8b5f7p-1,\n-\t   0x1.ffe7567b7b5e1p-1,\n-\t   0x1.ffe865fac722bp-1,\n-\t   0x1.ffe96a78a04a9p-1,\n-\t   0x1.ffea645f6d6dap-1,\n-\t   0x1.ffeb5415e7c44p-1,\n-\t   0x1.ffec39ff380b9p-1,\n-\t   0x1.ffed167b12ac2p-1,\n-\t   0x1.ffede9e5d3262p-1,\n-\t   0x1.ffeeb49896c6dp-1,\n-\t   0x1.ffef76e956a9fp-1,\n-\t   0x1.fff0312b010b5p-1,\n-\t   0x1.fff0e3ad91ec2p-1,\n-\t   0x1.fff18ebe2b0e1p-1,\n-\t   0x1.fff232a72b48ep-1,\n-\t   0x1.fff2cfb0453d9p-1,\n-\t   0x1.fff3661e9569dp-1,\n-\t   0x1.fff3f634b79f9p-1,\n-\t   0x1.fff48032dbe40p-1,\n-\t   0x1.fff50456dab8cp-1,\n-\t   0x1.fff582dc48d30p-1,\n-\t   0x1.fff5fbfc8a439p-1,\n-\t   0x1.fff66feee5129p-1,\n-\t   0x1.fff6dee89352ep-1,\n-\t   0x1.fff7491cd4af6p-1,\n-\t   0x1.fff7aebcff755p-1,\n-\t   0x1.fff80ff8911fdp-1,\n-\t   0x1.fff86cfd3e657p-1,\n-\t   0x1.fff8c5f702ccfp-1,\n-\t   0x1.fff91b102fca8p-1,\n-\t   0x1.fff96c717b695p-1,\n-\t   0x1.fff9ba420e834p-1,\n-\t   0x1.fffa04a7928b1p-1,\n-\t   0x1.fffa4bc63ee9ap-1,\n-\t   0x1.fffa8fc0e5f33p-1,\n-\t   0x1.fffad0b901755p-1,\n-\t   0x1.fffb0ecebee1bp-1,\n-\t   0x1.fffb4a210b172p-1,\n-\t   0x1.fffb82cd9dcbfp-1,\n-\t   0x1.fffbb8f1049c6p-1,\n-\t   0x1.fffbeca6adbe9p-1,\n-\t   0x1.fffc1e08f25f5p-1,\n-\t   0x1.fffc4d3120aa1p-1,\n-\t   0x1.fffc7a37857d2p-1,\n-\t   0x1.fffca53375ce3p-1,\n-\t   0x1.fffcce3b57bffp-1,\n-\t   0x1.fffcf564ab6b7p-1,\n-\t   0x1.fffd1ac4135f9p-1,\n-\t   0x1.fffd3e6d5cd87p-1,\n-\t   0x1.fffd607387b07p-1,\n-\t   0x1.fffd80e8ce0dap-1,\n-\t   0x1.fffd9fdeabccep-1,\n-\t   0x1.fffdbd65e5ad0p-1,\n-\t   0x1.fffdd98e903b2p-1,\n-\t   0x1.fffdf46816833p-1,\n-\t   0x1.fffe0e0140857p-1,\n-\t   0x1.fffe26683972ap-1,\n-\t   0x1.fffe3daa95b18p-1,\n-\t   0x1.fffe53d558ae9p-1,\n-\t   0x1.fffe68f4fa777p-1,\n-\t   0x1.fffe7d156d244p-1,\n-\t   0x1.fffe904222101p-1,\n-\t   0x1.fffea2860ee1ep-1,\n-\t   0x1.fffeb3ebb267bp-1,\n-\t   0x1.fffec47d19457p-1,\n-\t   0x1.fffed443e2787p-1,\n-\t   0x1.fffee34943b15p-1,\n-\t   0x1.fffef1960d85dp-1,\n-\t   0x1.fffeff32af7afp-1,\n-\t   0x1.ffff0c273bea2p-1,\n-\t   0x1.ffff187b6bc0ep-1,\n-\t   0x1.ffff2436a21dcp-1,\n-\t   0x1.ffff2f5fefcaap-1,\n-\t   0x1.ffff39fe16963p-1,\n-\t   0x1.ffff44178c8d2p-1,\n-\t   0x1.ffff4db27f146p-1,\n-\t   0x1.ffff56d4d5e5ep-1,\n-\t   0x1.ffff5f8435efcp-1,\n-\t   0x1.ffff67c604180p-1,\n-\t   0x1.ffff6f9f67e55p-1,\n-\t   0x1.ffff77154e0d6p-1,\n-\t   0x1.ffff7e2c6aea2p-1,\n-\t   0x1.ffff84e93cd75p-1,\n-\t   0x1.ffff8b500e77cp-1,\n-\t   0x1.ffff9164f8e46p-1,\n-\t   0x1.ffff972be5c59p-1,\n-\t   0x1.ffff9ca891572p-1,\n-\t   0x1.ffffa1de8c582p-1,\n-\t   0x1.ffffa6d13de73p-1,\n-\t   0x1.ffffab83e54b8p-1,\n-\t   0x1.ffffaff99bac4p-1,\n-\t   0x1.ffffb43555b5fp-1,\n-\t   0x1.ffffb839e52f3p-1,\n-\t   0x1.ffffbc09fa7cdp-1,\n-\t   0x1.ffffbfa82616bp-1,\n-\t   0x1.ffffc316d9ed0p-1,\n-\t   0x1.ffffc6586abf6p-1,\n-\t   0x1.ffffc96f1165ep-1,\n-\t   0x1.ffffcc5cec0c1p-1,\n-\t   0x1.ffffcf23ff5fcp-1,\n-\t   0x1.ffffd1c637b2bp-1,\n-\t   0x1.ffffd4456a10dp-1,\n-\t   0x1.ffffd6a3554a1p-1,\n-\t   0x1.ffffd8e1a2f22p-1,\n-\t   0x1.ffffdb01e8546p-1,\n-\t   0x1.ffffdd05a75eap-1,\n-\t   0x1.ffffdeee4f810p-1,\n-\t   0x1.ffffe0bd3e852p-1,\n-\t   0x1.ffffe273c15b7p-1,\n-\t   0x1.ffffe41314e06p-1,\n-\t   0x1.ffffe59c6698bp-1,\n-\t   0x1.ffffe710d565ep-1,\n-\t   0x1.ffffe8717232dp-1,\n-\t   0x1.ffffe9bf4098cp-1,\n-\t   0x1.ffffeafb377d5p-1,\n-\t   0x1.ffffec2641a9ep-1,\n-\t   0x1.ffffed413e5b7p-1,\n-\t   0x1.ffffee4d01cd6p-1,\n-\t   0x1.ffffef4a55bd4p-1,\n-\t   0x1.fffff039f9e8fp-1,\n-\t   0x1.fffff11ca4876p-1,\n-\t   0x1.fffff1f302bc1p-1,\n-\t   0x1.fffff2bdb904dp-1,\n-\t   0x1.fffff37d63a36p-1,\n-\t   0x1.fffff43297019p-1,\n-\t   0x1.fffff4dde0118p-1,\n-\t   0x1.fffff57fc4a95p-1,\n-\t   0x1.fffff618c3da6p-1,\n-\t   0x1.fffff6a956450p-1,\n-\t   0x1.fffff731ee681p-1,\n-\t   0x1.fffff7b2f8ed6p-1,\n-\t   0x1.fffff82cdcf1bp-1,\n-\t   0x1.fffff89ffc4aap-1,\n-\t   0x1.fffff90cb3c81p-1,\n-\t   0x1.fffff9735b73bp-1,\n-\t   0x1.fffff9d446cccp-1,\n-\t   0x1.fffffa2fc5015p-1,\n-\t   0x1.fffffa8621251p-1,\n-\t   0x1.fffffad7a2652p-1,\n-\t   0x1.fffffb248c39dp-1,\n-\t   0x1.fffffb6d1e95dp-1,\n-\t   0x1.fffffbb196132p-1,\n-\t   0x1.fffffbf22c1e2p-1,\n-\t   0x1.fffffc2f171e3p-1,\n-\t   0x1.fffffc688a9cfp-1,\n-\t   0x1.fffffc9eb76acp-1,\n-\t   0x1.fffffcd1cbc28p-1,\n-\t   0x1.fffffd01f36afp-1,\n-\t   0x1.fffffd2f57d68p-1,\n-\t   0x1.fffffd5a2041fp-1,\n-\t   0x1.fffffd8271d12p-1,\n-\t   0x1.fffffda86faa9p-1,\n-\t   0x1.fffffdcc3b117p-1,\n-\t   0x1.fffffdedf37edp-1,\n-\t   0x1.fffffe0db6b91p-1,\n-\t   0x1.fffffe2ba0ea5p-1,\n-\t   0x1.fffffe47ccb60p-1,\n-\t   0x1.fffffe62534d4p-1,\n-\t   0x1.fffffe7b4c81ep-1,\n-\t   0x1.fffffe92ced93p-1,\n-\t   0x1.fffffea8ef9cfp-1,\n-\t   0x1.fffffebdc2ec6p-1,\n-\t   0x1.fffffed15bcbap-1,\n-\t   0x1.fffffee3cc32cp-1,\n-\t   0x1.fffffef5251c2p-1,\n-\t   0x1.ffffff0576917p-1,\n-\t   0x1.ffffff14cfb92p-1,\n-\t   0x1.ffffff233ee1dp-1,\n-\t   0x1.ffffff30d18e8p-1,\n-\t   0x1.ffffff3d9480fp-1,\n-\t   0x1.ffffff4993c46p-1,\n-\t   0x1.ffffff54dab72p-1,\n-\t   0x1.ffffff5f74141p-1,\n-\t   0x1.ffffff6969fb8p-1,\n-\t   0x1.ffffff72c5fb6p-1,\n-\t   0x1.ffffff7b91176p-1,\n-\t   0x1.ffffff83d3d07p-1,\n-\t   0x1.ffffff8b962bep-1,\n-\t   0x1.ffffff92dfba2p-1,\n-\t   0x1.ffffff99b79d2p-1,\n-\t   0x1.ffffffa0248e8p-1,\n-\t   0x1.ffffffa62ce54p-1,\n-\t   0x1.ffffffabd69b4p-1,\n-\t   0x1.ffffffb127525p-1,\n-\t   0x1.ffffffb624592p-1,\n-\t   0x1.ffffffbad2affp-1,\n-\t   0x1.ffffffbf370cdp-1,\n-\t   0x1.ffffffc355dfdp-1,\n-\t   0x1.ffffffc733572p-1,\n-\t   0x1.ffffffcad3626p-1,\n-\t   0x1.ffffffce39b67p-1,\n-\t   0x1.ffffffd169d0cp-1,\n-\t   0x1.ffffffd466fa5p-1,\n-\t   0x1.ffffffd7344aap-1,\n-\t   0x1.ffffffd9d4aabp-1,\n-\t   0x1.ffffffdc4ad7ap-1,\n-\t   0x1.ffffffde9964ep-1,\n-\t   0x1.ffffffe0c2bf0p-1,\n-\t   0x1.ffffffe2c92dbp-1,\n-\t   0x1.ffffffe4aed5ep-1,\n-\t   0x1.ffffffe675bbdp-1,\n-\t   0x1.ffffffe81fc4ep-1,\n-\t   0x1.ffffffe9aeb97p-1,\n-\t   0x1.ffffffeb24467p-1,\n-\t   0x1.ffffffec81ff2p-1,\n-\t   0x1.ffffffedc95e7p-1,\n-\t   0x1.ffffffeefbc85p-1,\n-\t   0x1.fffffff01a8b6p-1,\n-\t   0x1.fffffff126e1ep-1,\n-\t   0x1.fffffff221f30p-1,\n-\t   0x1.fffffff30cd3fp-1,\n-\t   0x1.fffffff3e8892p-1,\n-\t   0x1.fffffff4b606fp-1,\n-\t   0x1.fffffff57632dp-1,\n-\t   0x1.fffffff629e44p-1,\n-\t   0x1.fffffff6d1e56p-1,\n-\t   0x1.fffffff76ef3fp-1,\n-\t   0x1.fffffff801c1fp-1,\n-\t   0x1.fffffff88af67p-1,\n-\t   0x1.fffffff90b2e3p-1,\n-\t   0x1.fffffff982fc1p-1,\n-\t   0x1.fffffff9f2e9fp-1,\n-\t   0x1.fffffffa5b790p-1,\n-\t   0x1.fffffffabd229p-1,\n-\t   0x1.fffffffb18582p-1,\n-\t   0x1.fffffffb6d844p-1,\n-\t   0x1.fffffffbbd0aap-1,\n-\t   0x1.fffffffc0748fp-1,\n-\t   0x1.fffffffc4c96cp-1,\n-\t   0x1.fffffffc8d462p-1,\n-\t   0x1.fffffffcc9a41p-1,\n-\t   0x1.fffffffd01f89p-1,\n-\t   0x1.fffffffd36871p-1,\n-\t   0x1.fffffffd678edp-1,\n-\t   0x1.fffffffd954aep-1,\n-\t   0x1.fffffffdbff2ap-1,\n-\t   0x1.fffffffde7ba0p-1,\n-\t   0x1.fffffffe0cd16p-1,\n-\t   0x1.fffffffe2f664p-1,\n-\t   0x1.fffffffe4fa30p-1,\n-\t   0x1.fffffffe6daf7p-1,\n-\t   0x1.fffffffe89b0cp-1,\n-\t   0x1.fffffffea3c9ap-1,\n-\t   0x1.fffffffebc1a9p-1,\n-\t   0x1.fffffffed2c21p-1,\n-\t   0x1.fffffffee7dc8p-1,\n-\t   0x1.fffffffefb847p-1,\n-\t   0x1.ffffffff0dd2bp-1,\n-\t   0x1.ffffffff1ede9p-1,\n-\t   0x1.ffffffff2ebdap-1,\n-\t   0x1.ffffffff3d843p-1,\n-\t   0x1.ffffffff4b453p-1,\n-\t   0x1.ffffffff58126p-1,\n-\t   0x1.ffffffff63fc3p-1,\n-\t   0x1.ffffffff6f121p-1,\n-\t   0x1.ffffffff79626p-1,\n-\t   0x1.ffffffff82fabp-1,\n-\t   0x1.ffffffff8be77p-1,\n-\t   0x1.ffffffff94346p-1,\n-\t   0x1.ffffffff9bec8p-1,\n-\t   0x1.ffffffffa319fp-1,\n-\t   0x1.ffffffffa9c63p-1,\n-\t   0x1.ffffffffaffa4p-1,\n-\t   0x1.ffffffffb5be5p-1,\n-\t   0x1.ffffffffbb1a2p-1,\n-\t   0x1.ffffffffc014ep-1,\n-\t   0x1.ffffffffc4b56p-1,\n-\t   0x1.ffffffffc901cp-1,\n-\t   0x1.ffffffffccfffp-1,\n-\t   0x1.ffffffffd0b56p-1,\n-\t   0x1.ffffffffd4271p-1,\n-\t   0x1.ffffffffd759dp-1,\n-\t   0x1.ffffffffda520p-1,\n-\t   0x1.ffffffffdd13cp-1,\n-\t   0x1.ffffffffdfa2dp-1,\n-\t   0x1.ffffffffe202dp-1,\n-\t   0x1.ffffffffe4371p-1,\n-\t   0x1.ffffffffe642ap-1,\n-\t   0x1.ffffffffe8286p-1,\n-\t   0x1.ffffffffe9eb0p-1,\n-\t   0x1.ffffffffeb8d0p-1,\n-\t   0x1.ffffffffed10ap-1,\n-\t   0x1.ffffffffee782p-1,\n-\t   0x1.ffffffffefc57p-1,\n-\t   0x1.fffffffff0fa7p-1,\n-\t   0x1.fffffffff218fp-1,\n-\t   0x1.fffffffff3227p-1,\n-\t   0x1.fffffffff4188p-1,\n-\t   0x1.fffffffff4fc9p-1,\n-\t   0x1.fffffffff5cfdp-1,\n-\t   0x1.fffffffff6939p-1,\n-\t   0x1.fffffffff748ep-1,\n-\t   0x1.fffffffff7f0dp-1,\n-\t   0x1.fffffffff88c5p-1,\n-\t   0x1.fffffffff91c6p-1,\n-\t   0x1.fffffffff9a1bp-1,\n-\t   0x1.fffffffffa1d2p-1,\n-\t   0x1.fffffffffa8f6p-1,\n-\t   0x1.fffffffffaf92p-1,\n-\t   0x1.fffffffffb5b0p-1,\n-\t   0x1.fffffffffbb58p-1,\n-\t   0x1.fffffffffc095p-1,\n-\t   0x1.fffffffffc56dp-1,\n-\t   0x1.fffffffffc9e8p-1,\n-\t   0x1.fffffffffce0dp-1,\n-\t   0x1.fffffffffd1e1p-1,\n-\t   0x1.fffffffffd56cp-1,\n-\t   0x1.fffffffffd8b3p-1,\n-\t   0x1.fffffffffdbbap-1,\n-\t   0x1.fffffffffde86p-1,\n-\t   0x1.fffffffffe11dp-1,\n-\t   0x1.fffffffffe380p-1,\n-\t   0x1.fffffffffe5b6p-1,\n-\t   0x1.fffffffffe7c0p-1,\n-\t   0x1.fffffffffe9a2p-1,\n-\t   0x1.fffffffffeb60p-1,\n-\t   0x1.fffffffffecfbp-1,\n-\t   0x1.fffffffffee77p-1,\n-\t   0x1.fffffffffefd6p-1,\n-\t   0x1.ffffffffff11ap-1,\n-\t   0x1.ffffffffff245p-1,\n-\t   0x1.ffffffffff359p-1,\n-\t   0x1.ffffffffff457p-1,\n-\t   0x1.ffffffffff542p-1,\n-\t   0x1.ffffffffff61bp-1,\n-\t   0x1.ffffffffff6e3p-1,\n-\t   0x1.ffffffffff79bp-1,\n-\t   0x1.ffffffffff845p-1,\n-\t   0x1.ffffffffff8e2p-1,\n-\t   0x1.ffffffffff973p-1,\n-\t   0x1.ffffffffff9f8p-1,\n-\t   0x1.ffffffffffa73p-1,\n-\t   0x1.ffffffffffae4p-1,\n-\t   0x1.ffffffffffb4cp-1,\n-\t   0x1.ffffffffffbadp-1,\n-\t   0x1.ffffffffffc05p-1,\n-\t   0x1.ffffffffffc57p-1,\n-\t   0x1.ffffffffffca2p-1,\n-\t   0x1.ffffffffffce7p-1,\n-\t   0x1.ffffffffffd27p-1,\n-\t   0x1.ffffffffffd62p-1,\n-\t   0x1.ffffffffffd98p-1,\n-\t   0x1.ffffffffffdcap-1,\n-\t   0x1.ffffffffffdf8p-1,\n-\t   0x1.ffffffffffe22p-1,\n-\t   0x1.ffffffffffe49p-1,\n-\t   0x1.ffffffffffe6cp-1,\n-\t   0x1.ffffffffffe8dp-1,\n-\t   0x1.ffffffffffeabp-1,\n-\t   0x1.ffffffffffec7p-1,\n-\t   0x1.ffffffffffee1p-1,\n-\t   0x1.ffffffffffef8p-1,\n-\t   0x1.fffffffffff0ep-1,\n-\t   0x1.fffffffffff22p-1,\n-\t   0x1.fffffffffff34p-1,\n-\t   0x1.fffffffffff45p-1,\n-\t   0x1.fffffffffff54p-1,\n-\t   0x1.fffffffffff62p-1,\n-\t   0x1.fffffffffff6fp-1,\n-\t   0x1.fffffffffff7bp-1,\n-\t   0x1.fffffffffff86p-1,\n-\t   0x1.fffffffffff90p-1,\n-\t   0x1.fffffffffff9ap-1,\n-\t   0x1.fffffffffffa2p-1,\n-\t   0x1.fffffffffffaap-1,\n-\t   0x1.fffffffffffb1p-1,\n-\t   0x1.fffffffffffb8p-1,\n-\t   0x1.fffffffffffbep-1,\n-\t   0x1.fffffffffffc3p-1,\n-\t   0x1.fffffffffffc8p-1,\n-\t   0x1.fffffffffffcdp-1,\n-\t   0x1.fffffffffffd1p-1,\n-\t   0x1.fffffffffffd5p-1,\n-\t   0x1.fffffffffffd9p-1,\n-\t   0x1.fffffffffffdcp-1,\n-\t   0x1.fffffffffffdfp-1,\n-\t   0x1.fffffffffffe2p-1,\n-\t   0x1.fffffffffffe4p-1,\n-\t   0x1.fffffffffffe7p-1,\n-\t   0x1.fffffffffffe9p-1,\n-\t   0x1.fffffffffffebp-1,\n-\t   0x1.fffffffffffedp-1,\n-\t   0x1.fffffffffffeep-1,\n-\t   0x1.ffffffffffff0p-1,\n-\t   0x1.ffffffffffff1p-1,\n-\t   0x1.ffffffffffff3p-1,\n-\t   0x1.ffffffffffff4p-1,\n-\t   0x1.ffffffffffff5p-1,\n-\t   0x1.ffffffffffff6p-1,\n-\t   0x1.ffffffffffff7p-1,\n-\t   0x1.ffffffffffff7p-1,\n-\t   0x1.ffffffffffff8p-1,\n-\t   0x1.ffffffffffff9p-1,\n-\t   0x1.ffffffffffff9p-1,\n-\t   0x1.ffffffffffffap-1,\n-\t   0x1.ffffffffffffbp-1,\n-\t   0x1.ffffffffffffbp-1,\n-\t   0x1.ffffffffffffbp-1,\n-\t   0x1.ffffffffffffcp-1,\n-\t   0x1.ffffffffffffcp-1,\n-\t   0x1.ffffffffffffdp-1,\n-\t   0x1.ffffffffffffdp-1,\n-\t   0x1.ffffffffffffdp-1,\n-\t   0x1.ffffffffffffdp-1,\n-\t   0x1.ffffffffffffep-1,\n-\t   0x1.ffffffffffffep-1,\n-\t   0x1.ffffffffffffep-1,\n-\t   0x1.ffffffffffffep-1,\n-\t   0x1.ffffffffffffep-1,\n-\t   0x1.ffffffffffffep-1,\n-\t   0x1.fffffffffffffp-1,\n-\t   0x1.fffffffffffffp-1,\n-\t   0x1.fffffffffffffp-1,\n-\t   0x1.fffffffffffffp-1,\n-\t   0x1.fffffffffffffp-1,\n-\t   0x1.fffffffffffffp-1,\n-\t   0x1.fffffffffffffp-1,\n-\t   0x1.fffffffffffffp-1,\n-\t   0x1.fffffffffffffp-1,\n-\t   0x1.fffffffffffffp-1,\n-\t   0x1.fffffffffffffp-1,\n-\t   0x1.0000000000000p+0,\n-\t   0x1.0000000000000p+0,\n-\t   0x1.0000000000000p+0,\n-\t   0x1.0000000000000p+0,\n-\t   0x1.0000000000000p+0,\n-\t   0x1.0000000000000p+0,\n-\t   0x1.0000000000000p+0,\n-\t   0x1.0000000000000p+0,\n-\t   0x1.0000000000000p+0,\n-\t   0x1.0000000000000p+0,\n-\t   0x1.0000000000000p+0,\n-  },\n-  .scale = { 0x1.20dd750429b6dp+0,\n-\t     0x1.20d8f1975c85dp+0,\n-\t     0x1.20cb67bd452c7p+0,\n-\t     0x1.20b4d8bac36c1p+0,\n-\t     0x1.209546ad13ccfp+0,\n-\t     0x1.206cb4897b148p+0,\n-\t     0x1.203b261cd0052p+0,\n-\t     0x1.2000a00ae3804p+0,\n-\t     0x1.1fbd27cdc72d3p+0,\n-\t     0x1.1f70c3b4f2cc7p+0,\n-\t     0x1.1f1b7ae44867fp+0,\n-\t     0x1.1ebd5552f795bp+0,\n-\t     0x1.1e565bca400d4p+0,\n-\t     0x1.1de697e413d28p+0,\n-\t     0x1.1d6e14099944ap+0,\n-\t     0x1.1cecdb718d61cp+0,\n-\t     0x1.1c62fa1e869b6p+0,\n-\t     0x1.1bd07cdd189acp+0,\n-\t     0x1.1b357141d95d5p+0,\n-\t     0x1.1a91e5a748165p+0,\n-\t     0x1.19e5e92b964abp+0,\n-\t     0x1.19318bae53a04p+0,\n-\t     0x1.1874ddcdfce24p+0,\n-\t     0x1.17aff0e56ec10p+0,\n-\t     0x1.16e2d7093cd8cp+0,\n-\t     0x1.160da304ed92fp+0,\n-\t     0x1.153068581b781p+0,\n-\t     0x1.144b3b337c90cp+0,\n-\t     0x1.135e3075d076bp+0,\n-\t     0x1.12695da8b5bdep+0,\n-\t     0x1.116cd8fd67618p+0,\n-\t     0x1.1068b94962e5ep+0,\n-\t     0x1.0f5d1602f7e41p+0,\n-\t     0x1.0e4a073dc1b91p+0,\n-\t     0x1.0d2fa5a70c168p+0,\n-\t     0x1.0c0e0a8223359p+0,\n-\t     0x1.0ae54fa490722p+0,\n-\t     0x1.09b58f724416bp+0,\n-\t     0x1.087ee4d9ad247p+0,\n-\t     0x1.07416b4fbfe7cp+0,\n-\t     0x1.05fd3ecbec297p+0,\n-\t     0x1.04b27bc403d30p+0,\n-\t     0x1.03613f2812dafp+0,\n-\t     0x1.0209a65e29545p+0,\n-\t     0x1.00abcf3e187a9p+0,\n-\t     0x1.fe8fb01a47307p-1,\n-\t     0x1.fbbbbef34b4b2p-1,\n-\t     0x1.f8dc092d58ff8p-1,\n-\t     0x1.f5f0cdaf15313p-1,\n-\t     0x1.f2fa4c16c0019p-1,\n-\t     0x1.eff8c4b1375dbp-1,\n-\t     0x1.ecec7870ebca7p-1,\n-\t     0x1.e9d5a8e4c934ep-1,\n-\t     0x1.e6b4982f158b9p-1,\n-\t     0x1.e38988fc46e72p-1,\n-\t     0x1.e054be79d3042p-1,\n-\t     0x1.dd167c4cf9d2ap-1,\n-\t     0x1.d9cf06898cdafp-1,\n-\t     0x1.d67ea1a8b5368p-1,\n-\t     0x1.d325927fb9d89p-1,\n-\t     0x1.cfc41e36c7df9p-1,\n-\t     0x1.cc5a8a3fbea40p-1,\n-\t     0x1.c8e91c4d01368p-1,\n-\t     0x1.c5701a484ef9dp-1,\n-\t     0x1.c1efca49a5011p-1,\n-\t     0x1.be68728e29d5dp-1,\n-\t     0x1.bada596f25436p-1,\n-\t     0x1.b745c55905bf8p-1,\n-\t     0x1.b3aafcc27502ep-1,\n-\t     0x1.b00a46237d5bep-1,\n-\t     0x1.ac63e7ecc1411p-1,\n-\t     0x1.a8b8287ec6a09p-1,\n-\t     0x1.a5074e2157620p-1,\n-\t     0x1.a1519efaf889ep-1,\n-\t     0x1.9d97610879642p-1,\n-\t     0x1.99d8da149c13fp-1,\n-\t     0x1.96164fafd8de3p-1,\n-\t     0x1.925007283d7aap-1,\n-\t     0x1.8e86458169af8p-1,\n-\t     0x1.8ab94f6caa71dp-1,\n-\t     0x1.86e9694134b9ep-1,\n-\t     0x1.8316d6f48133dp-1,\n-\t     0x1.7f41dc12c9e89p-1,\n-\t     0x1.7b6abbb7aaf19p-1,\n-\t     0x1.7791b886e7403p-1,\n-\t     0x1.73b714a552763p-1,\n-\t     0x1.6fdb11b1e0c34p-1,\n-\t     0x1.6bfdf0beddaf5p-1,\n-\t     0x1.681ff24b4ab04p-1,\n-\t     0x1.6441563c665d4p-1,\n-\t     0x1.60625bd75d07bp-1,\n-\t     0x1.5c8341bb23767p-1,\n-\t     0x1.58a445da7c74cp-1,\n-\t     0x1.54c5a57629db0p-1,\n-\t     0x1.50e79d1749ac9p-1,\n-\t     0x1.4d0a6889dfd9fp-1,\n-\t     0x1.492e42d78d2c5p-1,\n-\t     0x1.4553664273d24p-1,\n-\t     0x1.417a0c4049fd0p-1,\n-\t     0x1.3da26d759aef5p-1,\n-\t     0x1.39ccc1b136d5ap-1,\n-\t     0x1.35f93fe7d1b3dp-1,\n-\t     0x1.32281e2fd1a92p-1,\n-\t     0x1.2e5991bd4cbfcp-1,\n-\t     0x1.2a8dcede3673bp-1,\n-\t     0x1.26c508f6bd0ffp-1,\n-\t     0x1.22ff727dd6f7bp-1,\n-\t     0x1.1f3d3cf9ffe5ap-1,\n-\t     0x1.1b7e98fe26217p-1,\n-\t     0x1.17c3b626c7a11p-1,\n-\t     0x1.140cc3173f007p-1,\n-\t     0x1.1059ed7740313p-1,\n-\t     0x1.0cab61f084b93p-1,\n-\t     0x1.09014c2ca74dap-1,\n-\t     0x1.055bd6d32e8d7p-1,\n-\t     0x1.01bb2b87c6968p-1,\n-\t     0x1.fc3ee5d1524b0p-2,\n-\t     0x1.f511a91a67d2ap-2,\n-\t     0x1.edeeee0959518p-2,\n-\t     0x1.e6d6ffaa65a25p-2,\n-\t     0x1.dfca26f5bbf88p-2,\n-\t     0x1.d8c8aace11e63p-2,\n-\t     0x1.d1d2cfff91594p-2,\n-\t     0x1.cae8d93f1d7b6p-2,\n-\t     0x1.c40b0729ed547p-2,\n-\t     0x1.bd3998457afdap-2,\n-\t     0x1.b674c8ffc6283p-2,\n-\t     0x1.afbcd3afe8ab6p-2,\n-\t     0x1.a911f096fbc26p-2,\n-\t     0x1.a27455e14c93cp-2,\n-\t     0x1.9be437a7de946p-2,\n-\t     0x1.9561c7f23a47bp-2,\n-\t     0x1.8eed36b886d93p-2,\n-\t     0x1.8886b1e5ecfd1p-2,\n-\t     0x1.822e655b417e6p-2,\n-\t     0x1.7be47af1f5d89p-2,\n-\t     0x1.75a91a7f4d2edp-2,\n-\t     0x1.6f7c69d7d3ef8p-2,\n-\t     0x1.695e8cd31867ep-2,\n-\t     0x1.634fa54fa285fp-2,\n-\t     0x1.5d4fd33729015p-2,\n-\t     0x1.575f3483021c3p-2,\n-\t     0x1.517de540ce2a3p-2,\n-\t     0x1.4babff975a04cp-2,\n-\t     0x1.45e99bcbb7915p-2,\n-\t     0x1.4036d0468a7a2p-2,\n-\t     0x1.3a93b1998736cp-2,\n-\t     0x1.35005285227f1p-2,\n-\t     0x1.2f7cc3fe6f423p-2,\n-\t     0x1.2a09153529381p-2,\n-\t     0x1.24a55399ea239p-2,\n-\t     0x1.1f518ae487dc8p-2,\n-\t     0x1.1a0dc51a9934dp-2,\n-\t     0x1.14da0a961fd14p-2,\n-\t     0x1.0fb6620c550afp-2,\n-\t     0x1.0aa2d09497f2bp-2,\n-\t     0x1.059f59af7a906p-2,\n-\t     0x1.00abff4dec7a3p-2,\n-\t     0x1.f79183b101c5bp-3,\n-\t     0x1.edeb406d9c824p-3,\n-\t     0x1.e4652fadcb6b2p-3,\n-\t     0x1.daff4969c0b04p-3,\n-\t     0x1.d1b982c501370p-3,\n-\t     0x1.c893ce1dcbef7p-3,\n-\t     0x1.bf8e1b1ca2279p-3,\n-\t     0x1.b6a856c3ed54fp-3,\n-\t     0x1.ade26b7fbed95p-3,\n-\t     0x1.a53c4135a6526p-3,\n-\t     0x1.9cb5bd549b111p-3,\n-\t     0x1.944ec2e4f5630p-3,\n-\t     0x1.8c07329874652p-3,\n-\t     0x1.83deeada4d25ap-3,\n-\t     0x1.7bd5c7df3fe9cp-3,\n-\t     0x1.73eba3b5b07b7p-3,\n-\t     0x1.6c205655be71fp-3,\n-\t     0x1.6473b5b15a7a1p-3,\n-\t     0x1.5ce595c455b0ap-3,\n-\t     0x1.5575c8a468361p-3,\n-\t     0x1.4e241e912c305p-3,\n-\t     0x1.46f066040a832p-3,\n-\t     0x1.3fda6bc016994p-3,\n-\t     0x1.38e1fae1d6a9dp-3,\n-\t     0x1.3206dceef5f87p-3,\n-\t     0x1.2b48d9e5dea1cp-3,\n-\t     0x1.24a7b84d38971p-3,\n-\t     0x1.1e233d434b813p-3,\n-\t     0x1.17bb2c8d41535p-3,\n-\t     0x1.116f48a6476ccp-3,\n-\t     0x1.0b3f52ce8c383p-3,\n-\t     0x1.052b0b1a174eap-3,\n-\t     0x1.fe6460fef4680p-4,\n-\t     0x1.f2a901ccafb37p-4,\n-\t     0x1.e723726b824a9p-4,\n-\t     0x1.dbd32ac4c99b0p-4,\n-\t     0x1.d0b7a0f921e7cp-4,\n-\t     0x1.c5d0497c09e74p-4,\n-\t     0x1.bb1c972f23e50p-4,\n-\t     0x1.b09bfb7d11a83p-4,\n-\t     0x1.a64de673e8837p-4,\n-\t     0x1.9c31c6df3b1b8p-4,\n-\t     0x1.92470a61b6965p-4,\n-\t     0x1.888d1d8e510a3p-4,\n-\t     0x1.7f036c0107294p-4,\n-\t     0x1.75a96077274bap-4,\n-\t     0x1.6c7e64e7281cbp-4,\n-\t     0x1.6381e2980956bp-4,\n-\t     0x1.5ab342383d177p-4,\n-\t     0x1.5211ebf41880bp-4,\n-\t     0x1.499d478bca735p-4,\n-\t     0x1.4154bc68d75c3p-4,\n-\t     0x1.3937b1b319259p-4,\n-\t     0x1.31458e6542847p-4,\n-\t     0x1.297db960e4f63p-4,\n-\t     0x1.21df9981f8e53p-4,\n-\t     0x1.1a6a95b1e786fp-4,\n-\t     0x1.131e14fa1625dp-4,\n-\t     0x1.0bf97e95f2a64p-4,\n-\t     0x1.04fc3a0481321p-4,\n-\t     0x1.fc4b5e32d6259p-5,\n-\t     0x1.eeea8c1b1db93p-5,\n-\t     0x1.e1d4cf1e2450ap-5,\n-\t     0x1.d508f9a1ea64ep-5,\n-\t     0x1.c885df3451a07p-5,\n-\t     0x1.bc4a54a84e834p-5,\n-\t     0x1.b055303221015p-5,\n-\t     0x1.a4a549829587ep-5,\n-\t     0x1.993979e14fffdp-5,\n-\t     0x1.8e109c4622913p-5,\n-\t     0x1.83298d717210ep-5,\n-\t     0x1.78832c03aa2b1p-5,\n-\t     0x1.6e1c5893c380bp-5,\n-\t     0x1.63f3f5c4de13bp-5,\n-\t     0x1.5a08e85af27e0p-5,\n-\t     0x1.505a174e9c929p-5,\n-\t     0x1.46e66be002240p-5,\n-\t     0x1.3dacd1a8d8ccdp-5,\n-\t     0x1.34ac36ad8dafep-5,\n-\t     0x1.2be38b6d92415p-5,\n-\t     0x1.2351c2f2d1449p-5,\n-\t     0x1.1af5d2e04f3f6p-5,\n-\t     0x1.12ceb37ff9bc3p-5,\n-\t     0x1.0adb5fcfa8c75p-5,\n-\t     0x1.031ad58d56279p-5,\n-\t     0x1.f7182a851bca2p-6,\n-\t     0x1.e85c449e377f2p-6,\n-\t     0x1.da0005e5f28dfp-6,\n-\t     0x1.cc0180af00a8bp-6,\n-\t     0x1.be5ecd2fcb5f9p-6,\n-\t     0x1.b1160991ff737p-6,\n-\t     0x1.a4255a00b9f03p-6,\n-\t     0x1.978ae8b55ce1bp-6,\n-\t     0x1.8b44e6031383ep-6,\n-\t     0x1.7f5188610ddc8p-6,\n-\t     0x1.73af0c737bb45p-6,\n-\t     0x1.685bb5134ef13p-6,\n-\t     0x1.5d55cb54cd53ap-6,\n-\t     0x1.529b9e8cf9a1ep-6,\n-\t     0x1.482b8455dc491p-6,\n-\t     0x1.3e03d891b37dep-6,\n-\t     0x1.3422fd6d12e2bp-6,\n-\t     0x1.2a875b5ffab56p-6,\n-\t     0x1.212f612dee7fbp-6,\n-\t     0x1.181983e5133ddp-6,\n-\t     0x1.0f443edc5ce49p-6,\n-\t     0x1.06ae13b0d3255p-6,\n-\t     0x1.fcab1483ea7fcp-7,\n-\t     0x1.ec72615a894c4p-7,\n-\t     0x1.dcaf3691fc448p-7,\n-\t     0x1.cd5ec93c12431p-7,\n-\t     0x1.be7e5ac24963bp-7,\n-\t     0x1.b00b38d6b3575p-7,\n-\t     0x1.a202bd6372dcep-7,\n-\t     0x1.94624e78e0fafp-7,\n-\t     0x1.87275e3a6869dp-7,\n-\t     0x1.7a4f6aca256cbp-7,\n-\t     0x1.6dd7fe3358230p-7,\n-\t     0x1.61beae53b72b7p-7,\n-\t     0x1.56011cc3b036dp-7,\n-\t     0x1.4a9cf6bda3f4cp-7,\n-\t     0x1.3f8ff5042a88ep-7,\n-\t     0x1.34d7dbc76d7e5p-7,\n-\t     0x1.2a727a89a3f14p-7,\n-\t     0x1.205dac02bd6b9p-7,\n-\t     0x1.1697560347b25p-7,\n-\t     0x1.0d1d69569b82dp-7,\n-\t     0x1.03ede1a45bfeep-7,\n-\t     0x1.f60d8aa2a88f2p-8,\n-\t     0x1.e4cc4abf7d065p-8,\n-\t     0x1.d4143a9dfe965p-8,\n-\t     0x1.c3e1a5f5c077cp-8,\n-\t     0x1.b430ecf4a83a8p-8,\n-\t     0x1.a4fe83fb9db25p-8,\n-\t     0x1.9646f35a76623p-8,\n-\t     0x1.8806d70b2fc36p-8,\n-\t     0x1.7a3ade6c8b3e4p-8,\n-\t     0x1.6cdfcbfc1e263p-8,\n-\t     0x1.5ff2750fe7820p-8,\n-\t     0x1.536fc18f7ce5cp-8,\n-\t     0x1.4754abacdf1dcp-8,\n-\t     0x1.3b9e3f9d06e3fp-8,\n-\t     0x1.30499b503957fp-8,\n-\t     0x1.2553ee2a336bfp-8,\n-\t     0x1.1aba78ba3af89p-8,\n-\t     0x1.107a8c7323a6ep-8,\n-\t     0x1.06918b6355624p-8,\n-\t     0x1.f9f9cfd9c3035p-9,\n-\t     0x1.e77448fb66bb9p-9,\n-\t     0x1.d58da68fd1170p-9,\n-\t     0x1.c4412bf4b8f0bp-9,\n-\t     0x1.b38a3af2e55b4p-9,\n-\t     0x1.a3645330550ffp-9,\n-\t     0x1.93cb11a30d765p-9,\n-\t     0x1.84ba3004a50d0p-9,\n-\t     0x1.762d84469c18fp-9,\n-\t     0x1.6821000795a03p-9,\n-\t     0x1.5a90b00981d93p-9,\n-\t     0x1.4d78bba8ca5fdp-9,\n-\t     0x1.40d564548fad7p-9,\n-\t     0x1.34a305080681fp-9,\n-\t     0x1.28de11c5031ebp-9,\n-\t     0x1.1d83170fbf6fbp-9,\n-\t     0x1.128eb96be8798p-9,\n-\t     0x1.07fdb4dafea5fp-9,\n-\t     0x1.fb99b8b8279e1p-10,\n-\t     0x1.e7f232d9e2630p-10,\n-\t     0x1.d4fed7195d7e8p-10,\n-\t     0x1.c2b9cf7f893bfp-10,\n-\t     0x1.b11d702b3deb1p-10,\n-\t     0x1.a024365f771bdp-10,\n-\t     0x1.8fc8c794b03b5p-10,\n-\t     0x1.8005f08d6f1efp-10,\n-\t     0x1.70d6a46e07ddap-10,\n-\t     0x1.6235fbd7a4345p-10,\n-\t     0x1.541f340697987p-10,\n-\t     0x1.468dadf4080abp-10,\n-\t     0x1.397ced7af2b15p-10,\n-\t     0x1.2ce898809244ep-10,\n-\t     0x1.20cc76202c5fap-10,\n-\t     0x1.15246dda49d47p-10,\n-\t     0x1.09ec86c75d497p-10,\n-\t     0x1.fe41cd9bb4eeep-11,\n-\t     0x1.e97ba3b77f306p-11,\n-\t     0x1.d57f524723822p-11,\n-\t     0x1.c245d4b998479p-11,\n-\t     0x1.afc85e0f82e12p-11,\n-\t     0x1.9e005769dbc1dp-11,\n-\t     0x1.8ce75e9f6f8a0p-11,\n-\t     0x1.7c7744d9378f7p-11,\n-\t     0x1.6caa0d3582fe9p-11,\n-\t     0x1.5d79eb71e893bp-11,\n-\t     0x1.4ee1429bf7cc0p-11,\n-\t     0x1.40daa3c89f5b6p-11,\n-\t     0x1.3360ccd23db3ap-11,\n-\t     0x1.266ea71d4f71ap-11,\n-\t     0x1.19ff4663ae9dfp-11,\n-\t     0x1.0e0de78654d1ep-11,\n-\t     0x1.0295ef6591848p-11,\n-\t     0x1.ef25d37f49fe1p-12,\n-\t     0x1.da01102b5f851p-12,\n-\t     0x1.c5b5412dcafadp-12,\n-\t     0x1.b23a5a23e4210p-12,\n-\t     0x1.9f8893d8fd1c1p-12,\n-\t     0x1.8d986a4187285p-12,\n-\t     0x1.7c629a822bc9ep-12,\n-\t     0x1.6be02102b3520p-12,\n-\t     0x1.5c0a378c90bcap-12,\n-\t     0x1.4cda5374ea275p-12,\n-\t     0x1.3e4a23d1f4702p-12,\n-\t     0x1.30538fbb77ecdp-12,\n-\t     0x1.22f0b496539bdp-12,\n-\t     0x1.161be46ad3b50p-12,\n-\t     0x1.09cfa445b00ffp-12,\n-\t     0x1.fc0d55470cf51p-13,\n-\t     0x1.e577bbcd49935p-13,\n-\t     0x1.cfd4a5adec5bfp-13,\n-\t     0x1.bb1a9657ce465p-13,\n-\t     0x1.a740684026555p-13,\n-\t     0x1.943d4a1d1ed39p-13,\n-\t     0x1.8208bc334a6a5p-13,\n-\t     0x1.709a8db59f25cp-13,\n-\t     0x1.5feada379d8b7p-13,\n-\t     0x1.4ff207314a102p-13,\n-\t     0x1.40a8c1949f75ep-13,\n-\t     0x1.3207fb7420eb9p-13,\n-\t     0x1.2408e9ba3327fp-13,\n-\t     0x1.16a501f0e42cap-13,\n-\t     0x1.09d5f819c9e29p-13,\n-\t     0x1.fb2b792b40a22p-14,\n-\t     0x1.e3bcf436a1a95p-14,\n-\t     0x1.cd55277c18d05p-14,\n-\t     0x1.b7e94604479dcp-14,\n-\t     0x1.a36eec00926ddp-14,\n-\t     0x1.8fdc1b2dcf7b9p-14,\n-\t     0x1.7d2737527c3f9p-14,\n-\t     0x1.6b4702d7d5849p-14,\n-\t     0x1.5a329b7d30748p-14,\n-\t     0x1.49e17724f4d41p-14,\n-\t     0x1.3a4b60ba9aa4dp-14,\n-\t     0x1.2b6875310f785p-14,\n-\t     0x1.1d312098e9dbap-14,\n-\t     0x1.0f9e1b4dd36dfp-14,\n-\t     0x1.02a8673a94691p-14,\n-\t     0x1.ec929a665b449p-15,\n-\t     0x1.d4f4b4c8e09edp-15,\n-\t     0x1.be6abbb10a5aap-15,\n-\t     0x1.a8e8cc1fadef6p-15,\n-\t     0x1.94637d5bacfdbp-15,\n-\t     0x1.80cfdc72220cfp-15,\n-\t     0x1.6e2367dc27f95p-15,\n-\t     0x1.5c540b4936fd2p-15,\n-\t     0x1.4b581b8d170fcp-15,\n-\t     0x1.3b2652b06c2b2p-15,\n-\t     0x1.2bb5cc22e5db6p-15,\n-\t     0x1.1cfe010e2052dp-15,\n-\t     0x1.0ef6c4c84a0fep-15,\n-\t     0x1.01984165a5f36p-15,\n-\t     0x1.e9b5e8d00ce76p-16,\n-\t     0x1.d16f5716c6c1ap-16,\n-\t     0x1.ba4f035d60e02p-16,\n-\t     0x1.a447b7b03f045p-16,\n-\t     0x1.8f4ccca7fc90dp-16,\n-\t     0x1.7b5223dac7336p-16,\n-\t     0x1.684c227fcacefp-16,\n-\t     0x1.562fac4329b48p-16,\n-\t     0x1.44f21e49054f2p-16,\n-\t     0x1.34894a5e24657p-16,\n-\t     0x1.24eb7254ccf83p-16,\n-\t     0x1.160f438c70913p-16,\n-\t     0x1.07ebd2a2d2844p-16,\n-\t     0x1.f4f12e9ab070ap-17,\n-\t     0x1.db5ad0b27805cp-17,\n-\t     0x1.c304efa2c6f4ep-17,\n-\t     0x1.abe09e9144b5ep-17,\n-\t     0x1.95df988e76644p-17,\n-\t     0x1.80f439b4ee04bp-17,\n-\t     0x1.6d11788a69c64p-17,\n-\t     0x1.5a2adfa0b4bc4p-17,\n-\t     0x1.4834877429b8fp-17,\n-\t     0x1.37231085c7d9ap-17,\n-\t     0x1.26eb9daed6f7ep-17,\n-\t     0x1.1783ceac28910p-17,\n-\t     0x1.08e1badf0fcedp-17,\n-\t     0x1.f5f7d88472604p-18,\n-\t     0x1.db92b5212fb8dp-18,\n-\t     0x1.c282cd3957edap-18,\n-\t     0x1.aab7abace48dcp-18,\n-\t     0x1.94219bfcb4928p-18,\n-\t     0x1.7eb1a2075864dp-18,\n-\t     0x1.6a597219a93d9p-18,\n-\t     0x1.570b69502f313p-18,\n-\t     0x1.44ba864670882p-18,\n-\t     0x1.335a62115bce2p-18,\n-\t     0x1.22df298214423p-18,\n-\t     0x1.133d96ae7e0ddp-18,\n-\t     0x1.046aeabcfcdecp-18,\n-\t     0x1.ecb9cfe1d8642p-19,\n-\t     0x1.d21397ead99cbp-19,\n-\t     0x1.b8d094c86d374p-19,\n-\t     0x1.a0df0f0c626dcp-19,\n-\t     0x1.8a2e269750a39p-19,\n-\t     0x1.74adc8f4064d3p-19,\n-\t     0x1.604ea819f007cp-19,\n-\t     0x1.4d0231928c6f9p-19,\n-\t     0x1.3aba85fe22e1fp-19,\n-\t     0x1.296a70f414053p-19,\n-\t     0x1.1905613b3abf2p-19,\n-\t     0x1.097f6156f32c5p-19,\n-\t     0x1.f59a20caf6695p-20,\n-\t     0x1.d9c73698fb1dcp-20,\n-\t     0x1.bf716c6168baep-20,\n-\t     0x1.a6852c6b58392p-20,\n-\t     0x1.8eefd70594a88p-20,\n-\t     0x1.789fb715aae95p-20,\n-\t     0x1.6383f726a8e04p-20,\n-\t     0x1.4f8c96f26a26ap-20,\n-\t     0x1.3caa61607f920p-20,\n-\t     0x1.2acee2f5ecdb8p-20,\n-\t     0x1.19ec60b1242edp-20,\n-\t     0x1.09f5cf4dd2877p-20,\n-\t     0x1.f5bd95d8730d8p-21,\n-\t     0x1.d9371e2ff7c35p-21,\n-\t     0x1.be41de54d155ap-21,\n-\t     0x1.a4c89e08ef4f3p-21,\n-\t     0x1.8cb738399b12cp-21,\n-\t     0x1.75fa8dbc84becp-21,\n-\t     0x1.608078a70dcbcp-21,\n-\t     0x1.4c37c0394d094p-21,\n-\t     0x1.39100d5687bfep-21,\n-\t     0x1.26f9df8519bd6p-21,\n-\t     0x1.15e6827001f18p-21,\n-\t     0x1.05c803e4831c1p-21,\n-\t     0x1.ed22548cffd35p-22,\n-\t     0x1.d06ad6ecdf971p-22,\n-\t     0x1.b551c847fbc96p-22,\n-\t     0x1.9bc09f112b494p-22,\n-\t     0x1.83a1ff0aa239dp-22,\n-\t     0x1.6ce1aa3fd7bddp-22,\n-\t     0x1.576c72b514859p-22,\n-\t     0x1.43302cc4a0da8p-22,\n-\t     0x1.301ba221dc9bbp-22,\n-\t     0x1.1e1e857adc568p-22,\n-\t     0x1.0d2966b1746f7p-22,\n-\t     0x1.fa5b4f49cc6b2p-23,\n-\t     0x1.dc3ae30b55c16p-23,\n-\t     0x1.bfd7555a3bd68p-23,\n-\t     0x1.a517d9e61628ap-23,\n-\t     0x1.8be4f8f6c951fp-23,\n-\t     0x1.74287ded49339p-23,\n-\t     0x1.5dcd669f2cd34p-23,\n-\t     0x1.48bfd38302870p-23,\n-\t     0x1.34ecf8a3c124ap-23,\n-\t     0x1.22430f521cbcfp-23,\n-\t     0x1.10b1488aeb235p-23,\n-\t     0x1.0027c00a263a6p-23,\n-\t     0x1.e12ee004efc37p-24,\n-\t     0x1.c3e44ae32b16bp-24,\n-\t     0x1.a854ea14102a8p-24,\n-\t     0x1.8e6761569f45dp-24,\n-\t     0x1.7603bac345f65p-24,\n-\t     0x1.5f1353cdad001p-24,\n-\t     0x1.4980cb3c80949p-24,\n-\t     0x1.3537f00b6ad4dp-24,\n-\t     0x1.2225b12bffc68p-24,\n-\t     0x1.10380e1adb7e9p-24,\n-\t     0x1.febc107d5efaap-25,\n-\t     0x1.df0f2a0ee6946p-25,\n-\t     0x1.c14b2188bcee4p-25,\n-\t     0x1.a553644f7f07dp-25,\n-\t     0x1.8b0cfce0579dfp-25,\n-\t     0x1.725e7c5dd20f7p-25,\n-\t     0x1.5b2fe547a1340p-25,\n-\t     0x1.456a974e92e93p-25,\n-\t     0x1.30f93c3699078p-25,\n-\t     0x1.1dc7b5b978cf8p-25,\n-\t     0x1.0bc30c5d52f15p-25,\n-\t     0x1.f5b2be65a0c7fp-26,\n-\t     0x1.d5f3a8dea7357p-26,\n-\t     0x1.b82915b03515bp-26,\n-\t     0x1.9c3517e789488p-26,\n-\t     0x1.81fb7df06136ep-26,\n-\t     0x1.6961b8d641d06p-26,\n-\t     0x1.524ec4d916caep-26,\n-\t     0x1.3cab1343d18d1p-26,\n-\t     0x1.2860757487a01p-26,\n-\t     0x1.155a09065d4f7p-26,\n-\t     0x1.0384250e4c9fcp-26,\n-\t     0x1.e59890b926c78p-27,\n-\t     0x1.c642116a8a9e3p-27,\n-\t     0x1.a8e405e651ab6p-27,\n-\t     0x1.8d5f98114f872p-27,\n-\t     0x1.7397c5a66e307p-27,\n-\t     0x1.5b71456c5a4c4p-27,\n-\t     0x1.44d26de513197p-27,\n-\t     0x1.2fa31d6371537p-27,\n-\t     0x1.1bcca373b7b43p-27,\n-\t     0x1.0939ab853339fp-27,\n-\t     0x1.efac5187b2863p-28,\n-\t     0x1.cf1e86235d0e6p-28,\n-\t     0x1.b0a68a2128babp-28,\n-\t     0x1.9423165bc4444p-28,\n-\t     0x1.7974e743dea3cp-28,\n-\t     0x1.607e9eacd1050p-28,\n-\t     0x1.4924a74dec728p-28,\n-\t     0x1.334d19e0c2160p-28,\n-\t     0x1.1edfa3c5f5ccap-28,\n-\t     0x1.0bc56f1b54701p-28,\n-\t     0x1.f3d2185e047d9p-29,\n-\t     0x1.d26cb87945e87p-29,\n-\t     0x1.b334fac4b9f99p-29,\n-\t     0x1.96076f7918d1cp-29,\n-\t     0x1.7ac2d72fc2c63p-29,\n-\t     0x1.614801550319ep-29,\n-\t     0x1.4979ac8b28926p-29,\n-\t     0x1.333c68e2d0548p-29,\n-\t     0x1.1e767bce37dd7p-29,\n-\t     0x1.0b0fc5b6d05a0p-29,\n-\t     0x1.f1e3523b41d7dp-30,\n-\t     0x1.d00de6608effep-30,\n-\t     0x1.b0778b7b3301ap-30,\n-\t     0x1.92fb04ec0f6cfp-30,\n-\t     0x1.77756ec9f78fap-30,\n-\t     0x1.5dc61922d5a06p-30,\n-\t     0x1.45ce65699ff6dp-30,\n-\t     0x1.2f71a5f159970p-30,\n-\t     0x1.1a94ff571654fp-30,\n-\t     0x1.071f4bbea09ecp-30,\n-\t     0x1.e9f1ff8ddd774p-31,\n-\t     0x1.c818223a202c7p-31,\n-\t     0x1.a887bd2b4404dp-31,\n-\t     0x1.8b1a336c5eb6bp-31,\n-\t     0x1.6fab63324088ap-31,\n-\t     0x1.56197e30205bap-31,\n-\t     0x1.3e44e45301b92p-31,\n-\t     0x1.281000bfe4c3fp-31,\n-\t     0x1.135f28f2d50b4p-31,\n-\t     0x1.00187dded5975p-31,\n-\t     0x1.dc479de0ef001p-32,\n-\t     0x1.bad4fdad3caa1p-32,\n-\t     0x1.9baed3ed27ab8p-32,\n-\t     0x1.7ead9ce4285bbp-32,\n-\t     0x1.63ac6b4edc88ep-32,\n-\t     0x1.4a88be2a6390cp-32,\n-\t     0x1.332259185f1a0p-32,\n-\t     0x1.1d5b1f3793044p-32,\n-\t     0x1.0916f04b6e18bp-32,\n-\t     0x1.ec77101de6926p-33,\n-\t     0x1.c960bf23153e0p-33,\n-\t     0x1.a8bd20fc65ef7p-33,\n-\t     0x1.8a61745ec7d1dp-33,\n-\t     0x1.6e25d0e756261p-33,\n-\t     0x1.53e4f7d1666cbp-33,\n-\t     0x1.3b7c27a7ddb0ep-33,\n-\t     0x1.24caf2c32af14p-33,\n-\t     0x1.0fb3186804d0fp-33,\n-\t     0x1.f830c0bb41fd7p-34,\n-\t     0x1.d3c0f1a91c846p-34,\n-\t     0x1.b1e5acf351d87p-34,\n-\t     0x1.92712d259ce66p-34,\n-\t     0x1.7538c60a04476p-34,\n-\t     0x1.5a14b04b47879p-34,\n-\t     0x1.40dfd87456f4cp-34,\n-\t     0x1.2977b1172b9d5p-34,\n-\t     0x1.13bc07e891491p-34,\n-\t     0x1.ff1dbb4300811p-35,\n-\t     0x1.d9a880f306bd8p-35,\n-\t     0x1.b6e45220b55e0p-35,\n-\t     0x1.96a0b33f2c4dap-35,\n-\t     0x1.78b07e9e924acp-35,\n-\t     0x1.5ce9ab1670dd2p-35,\n-\t     0x1.4325167006bb0p-35,\n-\t     0x1.2b3e53538ff3fp-35,\n-\t     0x1.15137a7f44864p-35,\n-\t     0x1.0084ff125639dp-35,\n-\t     0x1.daeb0b7311ec7p-36,\n-\t     0x1.b7937d1c40c52p-36,\n-\t     0x1.96d082f59ab06p-36,\n-\t     0x1.7872d9fa10aadp-36,\n-\t     0x1.5c4e8e37bc7d0p-36,\n-\t     0x1.423ac0df49a40p-36,\n-\t     0x1.2a117230ad284p-36,\n-\t     0x1.13af4f04f9998p-36,\n-\t     0x1.fde703724e560p-37,\n-\t     0x1.d77f0c82e7641p-37,\n-\t     0x1.b3ee02611d7ddp-37,\n-\t     0x1.92ff33023d5bdp-37,\n-\t     0x1.7481a9e69f53fp-37,\n-\t     0x1.5847eda620959p-37,\n-\t     0x1.3e27c1fcc74bdp-37,\n-\t     0x1.25f9ee0b923dcp-37,\n-\t     0x1.0f9a0686531ffp-37,\n-\t     0x1.f5cc7718082afp-38,\n-\t     0x1.cf7e53d6a2ca5p-38,\n-\t     0x1.ac0f5f3229372p-38,\n-\t     0x1.8b498644847eap-38,\n-\t     0x1.6cfa9bcca59dcp-38,\n-\t     0x1.50f411d4fd2cdp-38,\n-\t     0x1.370ab8327af5ep-38,\n-\t     0x1.1f167f88c6b6ep-38,\n-\t     0x1.08f24085d4597p-38,\n-\t     0x1.e8f70e181d619p-39,\n-\t     0x1.c324c20e337dcp-39,\n-\t     0x1.a03261574b54ep-39,\n-\t     0x1.7fe903cdf5855p-39,\n-\t     0x1.6215c58da3450p-39,\n-\t     0x1.46897d4b69fc6p-39,\n-\t     0x1.2d1877d731b7bp-39,\n-\t     0x1.159a386b11517p-39,\n-\t     0x1.ffd27ae9393cep-40,\n-\t     0x1.d7c593130dd0bp-40,\n-\t     0x1.b2cd607c79bcfp-40,\n-\t     0x1.90ae4d3405651p-40,\n-\t     0x1.71312dd1759e2p-40,\n-\t     0x1.5422ef5d8949dp-40,\n-\t     0x1.39544b0ecc957p-40,\n-\t     0x1.20997f73e73ddp-40,\n-\t     0x1.09ca0eaacd277p-40,\n-\t     0x1.e9810295890ecp-41,\n-\t     0x1.c2b45b5aa4a1dp-41,\n-\t     0x1.9eee068fa7596p-41,\n-\t     0x1.7df2b399c10a8p-41,\n-\t     0x1.5f8b87a31bd85p-41,\n-\t     0x1.4385c96e9a2d9p-41,\n-\t     0x1.29b2933ef4cbcp-41,\n-\t     0x1.11e68a6378f8ap-41,\n-\t     0x1.f7f338086a86bp-42,\n-\t     0x1.cf8d7d9ce040ap-42,\n-\t     0x1.aa577251ae484p-42,\n-\t     0x1.8811d739efb5ep-42,\n-\t     0x1.68823e52970bep-42,\n-\t     0x1.4b72ae68e8b4cp-42,\n-\t     0x1.30b14dbe876bcp-42,\n-\t     0x1.181012ef86610p-42,\n-\t     0x1.01647ba798744p-42,\n-\t     0x1.d90e917701675p-43,\n-\t     0x1.b2a87e86d0c8ap-43,\n-\t     0x1.8f53dcb377293p-43,\n-\t     0x1.6ed2f2515e933p-43,\n-\t     0x1.50ecc9ed47f19p-43,\n-\t     0x1.356cd5ce7799ep-43,\n-\t     0x1.1c229a587ab78p-43,\n-\t     0x1.04e15ecc7f3f6p-43,\n-\t     0x1.deffc7e6a6017p-44,\n-\t     0x1.b7b040832f310p-44,\n-\t     0x1.938e021f36d76p-44,\n-\t     0x1.7258610b3b233p-44,\n-\t     0x1.53d3bfc82a909p-44,\n-\t     0x1.37c92babdc2fdp-44,\n-\t     0x1.1e06010120f6ap-44,\n-\t     0x1.065b9616170d4p-44,\n-\t     0x1.e13dd96b3753ap-45,\n-\t     0x1.b950d32467392p-45,\n-\t     0x1.94a72263259a5p-45,\n-\t     0x1.72fd93e036cdcp-45,\n-\t     0x1.54164576929abp-45,\n-\t     0x1.37b83c521fe96p-45,\n-\t     0x1.1daf033182e96p-45,\n-\t     0x1.05ca50205d26ap-45,\n-\t     0x1.dfbb6235639fap-46,\n-\t     0x1.b7807e294781fp-46,\n-\t     0x1.9298add70a734p-46,\n-\t     0x1.70beaf9c7ffb6p-46,\n-\t     0x1.51b2cd6709222p-46,\n-\t     0x1.353a6cf7f7fffp-46,\n-\t     0x1.1b1fa8cbe84a7p-46,\n-\t     0x1.0330f0fd69921p-46,\n-\t     0x1.da81670f96f9bp-47,\n-\t     0x1.b24a16b4d09aap-47,\n-\t     0x1.8d6eeb6efdbd6p-47,\n-\t     0x1.6ba91ac734785p-47,\n-\t     0x1.4cb7966770ab5p-47,\n-\t     0x1.305e9721d0981p-47,\n-\t     0x1.1667311fff70ap-47,\n-\t     0x1.fd3de10d62855p-48,\n-\t     0x1.d1aefbcd48d0cp-48,\n-\t     0x1.a9cc93c25aca9p-48,\n-\t     0x1.85487ee3ea735p-48,\n-\t     0x1.63daf8b4b1e0cp-48,\n-\t     0x1.45421e69a6ca1p-48,\n-\t     0x1.294175802d99ap-48,\n-\t     0x1.0fa17bf41068fp-48,\n-\t     0x1.f05e82aae2bb9p-49,\n-\t     0x1.c578101b29058p-49,\n-\t     0x1.9e39dc5dd2f7cp-49,\n-\t     0x1.7a553a728bbf2p-49,\n-\t     0x1.5982008db1304p-49,\n-\t     0x1.3b7e00422e51bp-49,\n-\t     0x1.200c898d9ee3ep-49,\n-\t     0x1.06f5f7eb65a56p-49,\n-\t     0x1.e00e9148a1d25p-50,\n-\t     0x1.b623734024e92p-50,\n-\t     0x1.8fd4e01891bf8p-50,\n-\t     0x1.6cd44c7470d89p-50,\n-\t     0x1.4cd9c04158cd7p-50,\n-\t     0x1.2fa34bf5c8344p-50,\n-\t     0x1.14f4890ff2461p-50,\n-\t     0x1.f92c49dfa4df5p-51,\n-\t     0x1.ccaaea71ab0dfp-51,\n-\t     0x1.a40829f001197p-51,\n-\t     0x1.7eef13b59e96cp-51,\n-\t     0x1.5d11e1a252bf5p-51,\n-\t     0x1.3e296303b2297p-51,\n-\t     0x1.21f47009f43cep-51,\n-\t     0x1.083768c5e4541p-51,\n-\t     0x1.e1777d831265ep-52,\n-\t     0x1.b69f10b0191b5p-52,\n-\t     0x1.8f8a3a05b5b52p-52,\n-\t     0x1.6be573c40c8e7p-52,\n-\t     0x1.4b645ba991fdbp-52,\n-\t     0x1.2dc119095729fp-52,\n-  },\n-};\ndiff --git a/sysdeps/aarch64/fpu/sv_erff_data.c b/sysdeps/aarch64/fpu/sv_erff_data.c\ndeleted file mode 100644\nindex 6dcd72af69..0000000000\n--- a/sysdeps/aarch64/fpu/sv_erff_data.c\n+++ /dev/null\n@@ -1,1058 +0,0 @@\n-/* Table for SVE erff approximation\n-\n-   Copyright (C) 2024 Free Software Foundation, Inc.\n-   This file is part of the GNU C Library.\n-\n-   The GNU C Library is free software; you can redistribute it and/or\n-   modify it under the terms of the GNU Lesser General Public\n-   License as published by the Free Software Foundation; either\n-   version 2.1 of the License, or (at your option) any later version.\n-\n-   The GNU C Library is distributed in the hope that it will be useful,\n-   but WITHOUT ANY WARRANTY; without even the implied warranty of\n-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n-   Lesser General Public License for more details.\n-\n-   You should have received a copy of the GNU Lesser General Public\n-   License along with the GNU C Library; if not, see\n-   <https://www.gnu.org/licenses/>.  */\n-\n-#include \"vecmath_config.h\"\n-\n-/* Lookup table used in SVE erff.\n-   For each possible rounded input r (multiples of 1/128), between\n-   r = 0.0 and r = 4.0 (513 values):\n-   - __erff_data.erf contains the values of erf(r),\n-   - __erff_data.scale contains the values of 2/sqrt(pi)*exp(-r^2).\n-   Note that indices 0 and 1 are never hit by the algorithm, since lookup is\n-   performed only for x >= 1/64-1/512.  */\n-const struct sv_erff_data __sv_erff_data = {\n-  .erf = { 0x0.000000p+0,\n-\t   0x1.20dbf4p-7,\n-\t   0x1.20d770p-6,\n-\t   0x1.b137e0p-6,\n-\t   0x1.20c564p-5,\n-\t   0x1.68e5d4p-5,\n-\t   0x1.b0fafep-5,\n-\t   0x1.f902a8p-5,\n-\t   0x1.207d48p-4,\n-\t   0x1.44703ep-4,\n-\t   0x1.68591ap-4,\n-\t   0x1.8c36bep-4,\n-\t   0x1.b00812p-4,\n-\t   0x1.d3cbf8p-4,\n-\t   0x1.f7815ap-4,\n-\t   0x1.0d9390p-3,\n-\t   0x1.1f5e1ap-3,\n-\t   0x1.311fc2p-3,\n-\t   0x1.42d7fcp-3,\n-\t   0x1.548642p-3,\n-\t   0x1.662a0cp-3,\n-\t   0x1.77c2d2p-3,\n-\t   0x1.895010p-3,\n-\t   0x1.9ad142p-3,\n-\t   0x1.ac45e4p-3,\n-\t   0x1.bdad72p-3,\n-\t   0x1.cf076ep-3,\n-\t   0x1.e05354p-3,\n-\t   0x1.f190aap-3,\n-\t   0x1.015f78p-2,\n-\t   0x1.09eed6p-2,\n-\t   0x1.127632p-2,\n-\t   0x1.1af54ep-2,\n-\t   0x1.236bf0p-2,\n-\t   0x1.2bd9dcp-2,\n-\t   0x1.343ed6p-2,\n-\t   0x1.3c9aa8p-2,\n-\t   0x1.44ed18p-2,\n-\t   0x1.4d35f0p-2,\n-\t   0x1.5574f4p-2,\n-\t   0x1.5da9f4p-2,\n-\t   0x1.65d4b8p-2,\n-\t   0x1.6df50ap-2,\n-\t   0x1.760abap-2,\n-\t   0x1.7e1594p-2,\n-\t   0x1.861566p-2,\n-\t   0x1.8e0a02p-2,\n-\t   0x1.95f336p-2,\n-\t   0x1.9dd0d2p-2,\n-\t   0x1.a5a2acp-2,\n-\t   0x1.ad6896p-2,\n-\t   0x1.b52264p-2,\n-\t   0x1.bccfecp-2,\n-\t   0x1.c47104p-2,\n-\t   0x1.cc0584p-2,\n-\t   0x1.d38d44p-2,\n-\t   0x1.db081cp-2,\n-\t   0x1.e275eap-2,\n-\t   0x1.e9d68ap-2,\n-\t   0x1.f129d4p-2,\n-\t   0x1.f86faap-2,\n-\t   0x1.ffa7eap-2,\n-\t   0x1.03693ap-1,\n-\t   0x1.06f794p-1,\n-\t   0x1.0a7ef6p-1,\n-\t   0x1.0dff50p-1,\n-\t   0x1.117894p-1,\n-\t   0x1.14eab4p-1,\n-\t   0x1.1855a6p-1,\n-\t   0x1.1bb95cp-1,\n-\t   0x1.1f15ccp-1,\n-\t   0x1.226ae8p-1,\n-\t   0x1.25b8a8p-1,\n-\t   0x1.28ff02p-1,\n-\t   0x1.2c3decp-1,\n-\t   0x1.2f755cp-1,\n-\t   0x1.32a54cp-1,\n-\t   0x1.35cdb4p-1,\n-\t   0x1.38ee8ap-1,\n-\t   0x1.3c07cap-1,\n-\t   0x1.3f196ep-1,\n-\t   0x1.42236ep-1,\n-\t   0x1.4525c8p-1,\n-\t   0x1.482074p-1,\n-\t   0x1.4b1372p-1,\n-\t   0x1.4dfebap-1,\n-\t   0x1.50e24cp-1,\n-\t   0x1.53be26p-1,\n-\t   0x1.569244p-1,\n-\t   0x1.595ea6p-1,\n-\t   0x1.5c2348p-1,\n-\t   0x1.5ee02ep-1,\n-\t   0x1.619556p-1,\n-\t   0x1.6442c0p-1,\n-\t   0x1.66e86ep-1,\n-\t   0x1.69865ep-1,\n-\t   0x1.6c1c98p-1,\n-\t   0x1.6eab18p-1,\n-\t   0x1.7131e6p-1,\n-\t   0x1.73b102p-1,\n-\t   0x1.762870p-1,\n-\t   0x1.789836p-1,\n-\t   0x1.7b0058p-1,\n-\t   0x1.7d60d8p-1,\n-\t   0x1.7fb9c0p-1,\n-\t   0x1.820b12p-1,\n-\t   0x1.8454d6p-1,\n-\t   0x1.869712p-1,\n-\t   0x1.88d1cep-1,\n-\t   0x1.8b050ep-1,\n-\t   0x1.8d30dep-1,\n-\t   0x1.8f5544p-1,\n-\t   0x1.91724ap-1,\n-\t   0x1.9387f6p-1,\n-\t   0x1.959652p-1,\n-\t   0x1.979d68p-1,\n-\t   0x1.999d42p-1,\n-\t   0x1.9b95e8p-1,\n-\t   0x1.9d8768p-1,\n-\t   0x1.9f71cap-1,\n-\t   0x1.a1551ap-1,\n-\t   0x1.a33162p-1,\n-\t   0x1.a506b0p-1,\n-\t   0x1.a6d50cp-1,\n-\t   0x1.a89c86p-1,\n-\t   0x1.aa5d26p-1,\n-\t   0x1.ac16fcp-1,\n-\t   0x1.adca14p-1,\n-\t   0x1.af767ap-1,\n-\t   0x1.b11c3cp-1,\n-\t   0x1.b2bb68p-1,\n-\t   0x1.b4540ap-1,\n-\t   0x1.b5e630p-1,\n-\t   0x1.b771e8p-1,\n-\t   0x1.b8f742p-1,\n-\t   0x1.ba764ap-1,\n-\t   0x1.bbef10p-1,\n-\t   0x1.bd61a2p-1,\n-\t   0x1.bece0ep-1,\n-\t   0x1.c03464p-1,\n-\t   0x1.c194b2p-1,\n-\t   0x1.c2ef08p-1,\n-\t   0x1.c44376p-1,\n-\t   0x1.c5920ap-1,\n-\t   0x1.c6dad2p-1,\n-\t   0x1.c81de2p-1,\n-\t   0x1.c95b46p-1,\n-\t   0x1.ca930ep-1,\n-\t   0x1.cbc54cp-1,\n-\t   0x1.ccf20cp-1,\n-\t   0x1.ce1962p-1,\n-\t   0x1.cf3b5cp-1,\n-\t   0x1.d0580cp-1,\n-\t   0x1.d16f7ep-1,\n-\t   0x1.d281c4p-1,\n-\t   0x1.d38ef0p-1,\n-\t   0x1.d49710p-1,\n-\t   0x1.d59a34p-1,\n-\t   0x1.d6986cp-1,\n-\t   0x1.d791cap-1,\n-\t   0x1.d8865ep-1,\n-\t   0x1.d97636p-1,\n-\t   0x1.da6162p-1,\n-\t   0x1.db47f4p-1,\n-\t   0x1.dc29fcp-1,\n-\t   0x1.dd0788p-1,\n-\t   0x1.dde0aap-1,\n-\t   0x1.deb570p-1,\n-\t   0x1.df85eap-1,\n-\t   0x1.e0522ap-1,\n-\t   0x1.e11a3ep-1,\n-\t   0x1.e1de36p-1,\n-\t   0x1.e29e22p-1,\n-\t   0x1.e35a12p-1,\n-\t   0x1.e41214p-1,\n-\t   0x1.e4c638p-1,\n-\t   0x1.e5768cp-1,\n-\t   0x1.e62322p-1,\n-\t   0x1.e6cc08p-1,\n-\t   0x1.e7714ap-1,\n-\t   0x1.e812fcp-1,\n-\t   0x1.e8b12ap-1,\n-\t   0x1.e94be4p-1,\n-\t   0x1.e9e336p-1,\n-\t   0x1.ea7730p-1,\n-\t   0x1.eb07e2p-1,\n-\t   0x1.eb9558p-1,\n-\t   0x1.ec1fa2p-1,\n-\t   0x1.eca6ccp-1,\n-\t   0x1.ed2ae6p-1,\n-\t   0x1.edabfcp-1,\n-\t   0x1.ee2a1ep-1,\n-\t   0x1.eea556p-1,\n-\t   0x1.ef1db4p-1,\n-\t   0x1.ef9344p-1,\n-\t   0x1.f00614p-1,\n-\t   0x1.f07630p-1,\n-\t   0x1.f0e3a6p-1,\n-\t   0x1.f14e82p-1,\n-\t   0x1.f1b6d0p-1,\n-\t   0x1.f21ca0p-1,\n-\t   0x1.f27ff8p-1,\n-\t   0x1.f2e0eap-1,\n-\t   0x1.f33f7ep-1,\n-\t   0x1.f39bc2p-1,\n-\t   0x1.f3f5c2p-1,\n-\t   0x1.f44d88p-1,\n-\t   0x1.f4a31ep-1,\n-\t   0x1.f4f694p-1,\n-\t   0x1.f547f2p-1,\n-\t   0x1.f59742p-1,\n-\t   0x1.f5e490p-1,\n-\t   0x1.f62fe8p-1,\n-\t   0x1.f67952p-1,\n-\t   0x1.f6c0dcp-1,\n-\t   0x1.f7068cp-1,\n-\t   0x1.f74a6ep-1,\n-\t   0x1.f78c8cp-1,\n-\t   0x1.f7cceep-1,\n-\t   0x1.f80ba2p-1,\n-\t   0x1.f848acp-1,\n-\t   0x1.f8841ap-1,\n-\t   0x1.f8bdf2p-1,\n-\t   0x1.f8f63ep-1,\n-\t   0x1.f92d08p-1,\n-\t   0x1.f96256p-1,\n-\t   0x1.f99634p-1,\n-\t   0x1.f9c8a8p-1,\n-\t   0x1.f9f9bap-1,\n-\t   0x1.fa2974p-1,\n-\t   0x1.fa57dep-1,\n-\t   0x1.fa84fep-1,\n-\t   0x1.fab0dep-1,\n-\t   0x1.fadb84p-1,\n-\t   0x1.fb04f6p-1,\n-\t   0x1.fb2d40p-1,\n-\t   0x1.fb5464p-1,\n-\t   0x1.fb7a6cp-1,\n-\t   0x1.fb9f60p-1,\n-\t   0x1.fbc344p-1,\n-\t   0x1.fbe61ep-1,\n-\t   0x1.fc07fap-1,\n-\t   0x1.fc28d8p-1,\n-\t   0x1.fc48c2p-1,\n-\t   0x1.fc67bcp-1,\n-\t   0x1.fc85d0p-1,\n-\t   0x1.fca2fep-1,\n-\t   0x1.fcbf52p-1,\n-\t   0x1.fcdaccp-1,\n-\t   0x1.fcf576p-1,\n-\t   0x1.fd0f54p-1,\n-\t   0x1.fd286ap-1,\n-\t   0x1.fd40bep-1,\n-\t   0x1.fd5856p-1,\n-\t   0x1.fd6f34p-1,\n-\t   0x1.fd8562p-1,\n-\t   0x1.fd9ae2p-1,\n-\t   0x1.fdafb8p-1,\n-\t   0x1.fdc3e8p-1,\n-\t   0x1.fdd77ap-1,\n-\t   0x1.fdea6ep-1,\n-\t   0x1.fdfcccp-1,\n-\t   0x1.fe0e96p-1,\n-\t   0x1.fe1fd0p-1,\n-\t   0x1.fe3080p-1,\n-\t   0x1.fe40a6p-1,\n-\t   0x1.fe504cp-1,\n-\t   0x1.fe5f70p-1,\n-\t   0x1.fe6e18p-1,\n-\t   0x1.fe7c46p-1,\n-\t   0x1.fe8a00p-1,\n-\t   0x1.fe9748p-1,\n-\t   0x1.fea422p-1,\n-\t   0x1.feb090p-1,\n-\t   0x1.febc96p-1,\n-\t   0x1.fec836p-1,\n-\t   0x1.fed374p-1,\n-\t   0x1.fede52p-1,\n-\t   0x1.fee8d4p-1,\n-\t   0x1.fef2fep-1,\n-\t   0x1.fefccep-1,\n-\t   0x1.ff064cp-1,\n-\t   0x1.ff0f76p-1,\n-\t   0x1.ff1852p-1,\n-\t   0x1.ff20e0p-1,\n-\t   0x1.ff2924p-1,\n-\t   0x1.ff3120p-1,\n-\t   0x1.ff38d6p-1,\n-\t   0x1.ff4048p-1,\n-\t   0x1.ff4778p-1,\n-\t   0x1.ff4e68p-1,\n-\t   0x1.ff551ap-1,\n-\t   0x1.ff5b90p-1,\n-\t   0x1.ff61ccp-1,\n-\t   0x1.ff67d0p-1,\n-\t   0x1.ff6d9ep-1,\n-\t   0x1.ff7338p-1,\n-\t   0x1.ff789ep-1,\n-\t   0x1.ff7dd4p-1,\n-\t   0x1.ff82dap-1,\n-\t   0x1.ff87b2p-1,\n-\t   0x1.ff8c5cp-1,\n-\t   0x1.ff90dcp-1,\n-\t   0x1.ff9532p-1,\n-\t   0x1.ff9960p-1,\n-\t   0x1.ff9d68p-1,\n-\t   0x1.ffa14ap-1,\n-\t   0x1.ffa506p-1,\n-\t   0x1.ffa8a0p-1,\n-\t   0x1.ffac18p-1,\n-\t   0x1.ffaf6ep-1,\n-\t   0x1.ffb2a6p-1,\n-\t   0x1.ffb5bep-1,\n-\t   0x1.ffb8b8p-1,\n-\t   0x1.ffbb98p-1,\n-\t   0x1.ffbe5ap-1,\n-\t   0x1.ffc102p-1,\n-\t   0x1.ffc390p-1,\n-\t   0x1.ffc606p-1,\n-\t   0x1.ffc862p-1,\n-\t   0x1.ffcaa8p-1,\n-\t   0x1.ffccd8p-1,\n-\t   0x1.ffcef4p-1,\n-\t   0x1.ffd0fap-1,\n-\t   0x1.ffd2eap-1,\n-\t   0x1.ffd4cap-1,\n-\t   0x1.ffd696p-1,\n-\t   0x1.ffd84ep-1,\n-\t   0x1.ffd9f8p-1,\n-\t   0x1.ffdb90p-1,\n-\t   0x1.ffdd18p-1,\n-\t   0x1.ffde90p-1,\n-\t   0x1.ffdffap-1,\n-\t   0x1.ffe154p-1,\n-\t   0x1.ffe2a2p-1,\n-\t   0x1.ffe3e2p-1,\n-\t   0x1.ffe514p-1,\n-\t   0x1.ffe63cp-1,\n-\t   0x1.ffe756p-1,\n-\t   0x1.ffe866p-1,\n-\t   0x1.ffe96ap-1,\n-\t   0x1.ffea64p-1,\n-\t   0x1.ffeb54p-1,\n-\t   0x1.ffec3ap-1,\n-\t   0x1.ffed16p-1,\n-\t   0x1.ffedeap-1,\n-\t   0x1.ffeeb4p-1,\n-\t   0x1.ffef76p-1,\n-\t   0x1.fff032p-1,\n-\t   0x1.fff0e4p-1,\n-\t   0x1.fff18ep-1,\n-\t   0x1.fff232p-1,\n-\t   0x1.fff2d0p-1,\n-\t   0x1.fff366p-1,\n-\t   0x1.fff3f6p-1,\n-\t   0x1.fff480p-1,\n-\t   0x1.fff504p-1,\n-\t   0x1.fff582p-1,\n-\t   0x1.fff5fcp-1,\n-\t   0x1.fff670p-1,\n-\t   0x1.fff6dep-1,\n-\t   0x1.fff74ap-1,\n-\t   0x1.fff7aep-1,\n-\t   0x1.fff810p-1,\n-\t   0x1.fff86cp-1,\n-\t   0x1.fff8c6p-1,\n-\t   0x1.fff91cp-1,\n-\t   0x1.fff96cp-1,\n-\t   0x1.fff9bap-1,\n-\t   0x1.fffa04p-1,\n-\t   0x1.fffa4cp-1,\n-\t   0x1.fffa90p-1,\n-\t   0x1.fffad0p-1,\n-\t   0x1.fffb0ep-1,\n-\t   0x1.fffb4ap-1,\n-\t   0x1.fffb82p-1,\n-\t   0x1.fffbb8p-1,\n-\t   0x1.fffbecp-1,\n-\t   0x1.fffc1ep-1,\n-\t   0x1.fffc4ep-1,\n-\t   0x1.fffc7ap-1,\n-\t   0x1.fffca6p-1,\n-\t   0x1.fffccep-1,\n-\t   0x1.fffcf6p-1,\n-\t   0x1.fffd1ap-1,\n-\t   0x1.fffd3ep-1,\n-\t   0x1.fffd60p-1,\n-\t   0x1.fffd80p-1,\n-\t   0x1.fffda0p-1,\n-\t   0x1.fffdbep-1,\n-\t   0x1.fffddap-1,\n-\t   0x1.fffdf4p-1,\n-\t   0x1.fffe0ep-1,\n-\t   0x1.fffe26p-1,\n-\t   0x1.fffe3ep-1,\n-\t   0x1.fffe54p-1,\n-\t   0x1.fffe68p-1,\n-\t   0x1.fffe7ep-1,\n-\t   0x1.fffe90p-1,\n-\t   0x1.fffea2p-1,\n-\t   0x1.fffeb4p-1,\n-\t   0x1.fffec4p-1,\n-\t   0x1.fffed4p-1,\n-\t   0x1.fffee4p-1,\n-\t   0x1.fffef2p-1,\n-\t   0x1.ffff00p-1,\n-\t   0x1.ffff0cp-1,\n-\t   0x1.ffff18p-1,\n-\t   0x1.ffff24p-1,\n-\t   0x1.ffff30p-1,\n-\t   0x1.ffff3ap-1,\n-\t   0x1.ffff44p-1,\n-\t   0x1.ffff4ep-1,\n-\t   0x1.ffff56p-1,\n-\t   0x1.ffff60p-1,\n-\t   0x1.ffff68p-1,\n-\t   0x1.ffff70p-1,\n-\t   0x1.ffff78p-1,\n-\t   0x1.ffff7ep-1,\n-\t   0x1.ffff84p-1,\n-\t   0x1.ffff8cp-1,\n-\t   0x1.ffff92p-1,\n-\t   0x1.ffff98p-1,\n-\t   0x1.ffff9cp-1,\n-\t   0x1.ffffa2p-1,\n-\t   0x1.ffffa6p-1,\n-\t   0x1.ffffacp-1,\n-\t   0x1.ffffb0p-1,\n-\t   0x1.ffffb4p-1,\n-\t   0x1.ffffb8p-1,\n-\t   0x1.ffffbcp-1,\n-\t   0x1.ffffc0p-1,\n-\t   0x1.ffffc4p-1,\n-\t   0x1.ffffc6p-1,\n-\t   0x1.ffffcap-1,\n-\t   0x1.ffffccp-1,\n-\t   0x1.ffffd0p-1,\n-\t   0x1.ffffd2p-1,\n-\t   0x1.ffffd4p-1,\n-\t   0x1.ffffd6p-1,\n-\t   0x1.ffffd8p-1,\n-\t   0x1.ffffdcp-1,\n-\t   0x1.ffffdep-1,\n-\t   0x1.ffffdep-1,\n-\t   0x1.ffffe0p-1,\n-\t   0x1.ffffe2p-1,\n-\t   0x1.ffffe4p-1,\n-\t   0x1.ffffe6p-1,\n-\t   0x1.ffffe8p-1,\n-\t   0x1.ffffe8p-1,\n-\t   0x1.ffffeap-1,\n-\t   0x1.ffffeap-1,\n-\t   0x1.ffffecp-1,\n-\t   0x1.ffffeep-1,\n-\t   0x1.ffffeep-1,\n-\t   0x1.fffff0p-1,\n-\t   0x1.fffff0p-1,\n-\t   0x1.fffff2p-1,\n-\t   0x1.fffff2p-1,\n-\t   0x1.fffff2p-1,\n-\t   0x1.fffff4p-1,\n-\t   0x1.fffff4p-1,\n-\t   0x1.fffff4p-1,\n-\t   0x1.fffff6p-1,\n-\t   0x1.fffff6p-1,\n-\t   0x1.fffff6p-1,\n-\t   0x1.fffff8p-1,\n-\t   0x1.fffff8p-1,\n-\t   0x1.fffff8p-1,\n-\t   0x1.fffff8p-1,\n-\t   0x1.fffffap-1,\n-\t   0x1.fffffap-1,\n-\t   0x1.fffffap-1,\n-\t   0x1.fffffap-1,\n-\t   0x1.fffffap-1,\n-\t   0x1.fffffap-1,\n-\t   0x1.fffffcp-1,\n-\t   0x1.fffffcp-1,\n-\t   0x1.fffffcp-1,\n-\t   0x1.fffffcp-1,\n-\t   0x1.fffffcp-1,\n-\t   0x1.fffffcp-1,\n-\t   0x1.fffffcp-1,\n-\t   0x1.fffffcp-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.fffffep-1,\n-\t   0x1.000000p+0,\n-\t   0x1.000000p+0,\n-\t   0x1.000000p+0,\n-\t   0x1.000000p+0,\n-\t   0x1.000000p+0,\n-\t   0x1.000000p+0,\n-\t   0x1.000000p+0,\n-\t   0x1.000000p+0,\n-\t   0x1.000000p+0,\n-\t   0x1.000000p+0,\n-\t   0x1.000000p+0,\n-  },\n-  .scale = { 0x1.20dd76p+0,\n-\t     0x1.20d8f2p+0,\n-\t     0x1.20cb68p+0,\n-\t     0x1.20b4d8p+0,\n-\t     0x1.209546p+0,\n-\t     0x1.206cb4p+0,\n-\t     0x1.203b26p+0,\n-\t     0x1.2000a0p+0,\n-\t     0x1.1fbd28p+0,\n-\t     0x1.1f70c4p+0,\n-\t     0x1.1f1b7ap+0,\n-\t     0x1.1ebd56p+0,\n-\t     0x1.1e565cp+0,\n-\t     0x1.1de698p+0,\n-\t     0x1.1d6e14p+0,\n-\t     0x1.1cecdcp+0,\n-\t     0x1.1c62fap+0,\n-\t     0x1.1bd07cp+0,\n-\t     0x1.1b3572p+0,\n-\t     0x1.1a91e6p+0,\n-\t     0x1.19e5eap+0,\n-\t     0x1.19318cp+0,\n-\t     0x1.1874dep+0,\n-\t     0x1.17aff0p+0,\n-\t     0x1.16e2d8p+0,\n-\t     0x1.160da4p+0,\n-\t     0x1.153068p+0,\n-\t     0x1.144b3cp+0,\n-\t     0x1.135e30p+0,\n-\t     0x1.12695ep+0,\n-\t     0x1.116cd8p+0,\n-\t     0x1.1068bap+0,\n-\t     0x1.0f5d16p+0,\n-\t     0x1.0e4a08p+0,\n-\t     0x1.0d2fa6p+0,\n-\t     0x1.0c0e0ap+0,\n-\t     0x1.0ae550p+0,\n-\t     0x1.09b590p+0,\n-\t     0x1.087ee4p+0,\n-\t     0x1.07416cp+0,\n-\t     0x1.05fd3ep+0,\n-\t     0x1.04b27cp+0,\n-\t     0x1.036140p+0,\n-\t     0x1.0209a6p+0,\n-\t     0x1.00abd0p+0,\n-\t     0x1.fe8fb0p-1,\n-\t     0x1.fbbbbep-1,\n-\t     0x1.f8dc0ap-1,\n-\t     0x1.f5f0cep-1,\n-\t     0x1.f2fa4cp-1,\n-\t     0x1.eff8c4p-1,\n-\t     0x1.ecec78p-1,\n-\t     0x1.e9d5a8p-1,\n-\t     0x1.e6b498p-1,\n-\t     0x1.e38988p-1,\n-\t     0x1.e054bep-1,\n-\t     0x1.dd167cp-1,\n-\t     0x1.d9cf06p-1,\n-\t     0x1.d67ea2p-1,\n-\t     0x1.d32592p-1,\n-\t     0x1.cfc41ep-1,\n-\t     0x1.cc5a8ap-1,\n-\t     0x1.c8e91cp-1,\n-\t     0x1.c5701ap-1,\n-\t     0x1.c1efcap-1,\n-\t     0x1.be6872p-1,\n-\t     0x1.bada5ap-1,\n-\t     0x1.b745c6p-1,\n-\t     0x1.b3aafcp-1,\n-\t     0x1.b00a46p-1,\n-\t     0x1.ac63e8p-1,\n-\t     0x1.a8b828p-1,\n-\t     0x1.a5074ep-1,\n-\t     0x1.a1519ep-1,\n-\t     0x1.9d9762p-1,\n-\t     0x1.99d8dap-1,\n-\t     0x1.961650p-1,\n-\t     0x1.925008p-1,\n-\t     0x1.8e8646p-1,\n-\t     0x1.8ab950p-1,\n-\t     0x1.86e96ap-1,\n-\t     0x1.8316d6p-1,\n-\t     0x1.7f41dcp-1,\n-\t     0x1.7b6abcp-1,\n-\t     0x1.7791b8p-1,\n-\t     0x1.73b714p-1,\n-\t     0x1.6fdb12p-1,\n-\t     0x1.6bfdf0p-1,\n-\t     0x1.681ff2p-1,\n-\t     0x1.644156p-1,\n-\t     0x1.60625cp-1,\n-\t     0x1.5c8342p-1,\n-\t     0x1.58a446p-1,\n-\t     0x1.54c5a6p-1,\n-\t     0x1.50e79ep-1,\n-\t     0x1.4d0a68p-1,\n-\t     0x1.492e42p-1,\n-\t     0x1.455366p-1,\n-\t     0x1.417a0cp-1,\n-\t     0x1.3da26ep-1,\n-\t     0x1.39ccc2p-1,\n-\t     0x1.35f940p-1,\n-\t     0x1.32281ep-1,\n-\t     0x1.2e5992p-1,\n-\t     0x1.2a8dcep-1,\n-\t     0x1.26c508p-1,\n-\t     0x1.22ff72p-1,\n-\t     0x1.1f3d3cp-1,\n-\t     0x1.1b7e98p-1,\n-\t     0x1.17c3b6p-1,\n-\t     0x1.140cc4p-1,\n-\t     0x1.1059eep-1,\n-\t     0x1.0cab62p-1,\n-\t     0x1.09014cp-1,\n-\t     0x1.055bd6p-1,\n-\t     0x1.01bb2cp-1,\n-\t     0x1.fc3ee6p-2,\n-\t     0x1.f511aap-2,\n-\t     0x1.edeeeep-2,\n-\t     0x1.e6d700p-2,\n-\t     0x1.dfca26p-2,\n-\t     0x1.d8c8aap-2,\n-\t     0x1.d1d2d0p-2,\n-\t     0x1.cae8dap-2,\n-\t     0x1.c40b08p-2,\n-\t     0x1.bd3998p-2,\n-\t     0x1.b674c8p-2,\n-\t     0x1.afbcd4p-2,\n-\t     0x1.a911f0p-2,\n-\t     0x1.a27456p-2,\n-\t     0x1.9be438p-2,\n-\t     0x1.9561c8p-2,\n-\t     0x1.8eed36p-2,\n-\t     0x1.8886b2p-2,\n-\t     0x1.822e66p-2,\n-\t     0x1.7be47ap-2,\n-\t     0x1.75a91ap-2,\n-\t     0x1.6f7c6ap-2,\n-\t     0x1.695e8cp-2,\n-\t     0x1.634fa6p-2,\n-\t     0x1.5d4fd4p-2,\n-\t     0x1.575f34p-2,\n-\t     0x1.517de6p-2,\n-\t     0x1.4bac00p-2,\n-\t     0x1.45e99cp-2,\n-\t     0x1.4036d0p-2,\n-\t     0x1.3a93b2p-2,\n-\t     0x1.350052p-2,\n-\t     0x1.2f7cc4p-2,\n-\t     0x1.2a0916p-2,\n-\t     0x1.24a554p-2,\n-\t     0x1.1f518ap-2,\n-\t     0x1.1a0dc6p-2,\n-\t     0x1.14da0ap-2,\n-\t     0x1.0fb662p-2,\n-\t     0x1.0aa2d0p-2,\n-\t     0x1.059f5ap-2,\n-\t     0x1.00ac00p-2,\n-\t     0x1.f79184p-3,\n-\t     0x1.edeb40p-3,\n-\t     0x1.e46530p-3,\n-\t     0x1.daff4ap-3,\n-\t     0x1.d1b982p-3,\n-\t     0x1.c893cep-3,\n-\t     0x1.bf8e1cp-3,\n-\t     0x1.b6a856p-3,\n-\t     0x1.ade26cp-3,\n-\t     0x1.a53c42p-3,\n-\t     0x1.9cb5bep-3,\n-\t     0x1.944ec2p-3,\n-\t     0x1.8c0732p-3,\n-\t     0x1.83deeap-3,\n-\t     0x1.7bd5c8p-3,\n-\t     0x1.73eba4p-3,\n-\t     0x1.6c2056p-3,\n-\t     0x1.6473b6p-3,\n-\t     0x1.5ce596p-3,\n-\t     0x1.5575c8p-3,\n-\t     0x1.4e241ep-3,\n-\t     0x1.46f066p-3,\n-\t     0x1.3fda6cp-3,\n-\t     0x1.38e1fap-3,\n-\t     0x1.3206dcp-3,\n-\t     0x1.2b48dap-3,\n-\t     0x1.24a7b8p-3,\n-\t     0x1.1e233ep-3,\n-\t     0x1.17bb2cp-3,\n-\t     0x1.116f48p-3,\n-\t     0x1.0b3f52p-3,\n-\t     0x1.052b0cp-3,\n-\t     0x1.fe6460p-4,\n-\t     0x1.f2a902p-4,\n-\t     0x1.e72372p-4,\n-\t     0x1.dbd32ap-4,\n-\t     0x1.d0b7a0p-4,\n-\t     0x1.c5d04ap-4,\n-\t     0x1.bb1c98p-4,\n-\t     0x1.b09bfcp-4,\n-\t     0x1.a64de6p-4,\n-\t     0x1.9c31c6p-4,\n-\t     0x1.92470ap-4,\n-\t     0x1.888d1ep-4,\n-\t     0x1.7f036cp-4,\n-\t     0x1.75a960p-4,\n-\t     0x1.6c7e64p-4,\n-\t     0x1.6381e2p-4,\n-\t     0x1.5ab342p-4,\n-\t     0x1.5211ecp-4,\n-\t     0x1.499d48p-4,\n-\t     0x1.4154bcp-4,\n-\t     0x1.3937b2p-4,\n-\t     0x1.31458ep-4,\n-\t     0x1.297dbap-4,\n-\t     0x1.21df9ap-4,\n-\t     0x1.1a6a96p-4,\n-\t     0x1.131e14p-4,\n-\t     0x1.0bf97ep-4,\n-\t     0x1.04fc3ap-4,\n-\t     0x1.fc4b5ep-5,\n-\t     0x1.eeea8cp-5,\n-\t     0x1.e1d4d0p-5,\n-\t     0x1.d508fap-5,\n-\t     0x1.c885e0p-5,\n-\t     0x1.bc4a54p-5,\n-\t     0x1.b05530p-5,\n-\t     0x1.a4a54ap-5,\n-\t     0x1.99397ap-5,\n-\t     0x1.8e109cp-5,\n-\t     0x1.83298ep-5,\n-\t     0x1.78832cp-5,\n-\t     0x1.6e1c58p-5,\n-\t     0x1.63f3f6p-5,\n-\t     0x1.5a08e8p-5,\n-\t     0x1.505a18p-5,\n-\t     0x1.46e66cp-5,\n-\t     0x1.3dacd2p-5,\n-\t     0x1.34ac36p-5,\n-\t     0x1.2be38cp-5,\n-\t     0x1.2351c2p-5,\n-\t     0x1.1af5d2p-5,\n-\t     0x1.12ceb4p-5,\n-\t     0x1.0adb60p-5,\n-\t     0x1.031ad6p-5,\n-\t     0x1.f7182ap-6,\n-\t     0x1.e85c44p-6,\n-\t     0x1.da0006p-6,\n-\t     0x1.cc0180p-6,\n-\t     0x1.be5ecep-6,\n-\t     0x1.b1160ap-6,\n-\t     0x1.a4255ap-6,\n-\t     0x1.978ae8p-6,\n-\t     0x1.8b44e6p-6,\n-\t     0x1.7f5188p-6,\n-\t     0x1.73af0cp-6,\n-\t     0x1.685bb6p-6,\n-\t     0x1.5d55ccp-6,\n-\t     0x1.529b9ep-6,\n-\t     0x1.482b84p-6,\n-\t     0x1.3e03d8p-6,\n-\t     0x1.3422fep-6,\n-\t     0x1.2a875cp-6,\n-\t     0x1.212f62p-6,\n-\t     0x1.181984p-6,\n-\t     0x1.0f443ep-6,\n-\t     0x1.06ae14p-6,\n-\t     0x1.fcab14p-7,\n-\t     0x1.ec7262p-7,\n-\t     0x1.dcaf36p-7,\n-\t     0x1.cd5ecap-7,\n-\t     0x1.be7e5ap-7,\n-\t     0x1.b00b38p-7,\n-\t     0x1.a202bep-7,\n-\t     0x1.94624ep-7,\n-\t     0x1.87275ep-7,\n-\t     0x1.7a4f6ap-7,\n-\t     0x1.6dd7fep-7,\n-\t     0x1.61beaep-7,\n-\t     0x1.56011cp-7,\n-\t     0x1.4a9cf6p-7,\n-\t     0x1.3f8ff6p-7,\n-\t     0x1.34d7dcp-7,\n-\t     0x1.2a727ap-7,\n-\t     0x1.205dacp-7,\n-\t     0x1.169756p-7,\n-\t     0x1.0d1d6ap-7,\n-\t     0x1.03ede2p-7,\n-\t     0x1.f60d8ap-8,\n-\t     0x1.e4cc4ap-8,\n-\t     0x1.d4143ap-8,\n-\t     0x1.c3e1a6p-8,\n-\t     0x1.b430ecp-8,\n-\t     0x1.a4fe84p-8,\n-\t     0x1.9646f4p-8,\n-\t     0x1.8806d8p-8,\n-\t     0x1.7a3adep-8,\n-\t     0x1.6cdfccp-8,\n-\t     0x1.5ff276p-8,\n-\t     0x1.536fc2p-8,\n-\t     0x1.4754acp-8,\n-\t     0x1.3b9e40p-8,\n-\t     0x1.30499cp-8,\n-\t     0x1.2553eep-8,\n-\t     0x1.1aba78p-8,\n-\t     0x1.107a8cp-8,\n-\t     0x1.06918cp-8,\n-\t     0x1.f9f9d0p-9,\n-\t     0x1.e77448p-9,\n-\t     0x1.d58da6p-9,\n-\t     0x1.c4412cp-9,\n-\t     0x1.b38a3ap-9,\n-\t     0x1.a36454p-9,\n-\t     0x1.93cb12p-9,\n-\t     0x1.84ba30p-9,\n-\t     0x1.762d84p-9,\n-\t     0x1.682100p-9,\n-\t     0x1.5a90b0p-9,\n-\t     0x1.4d78bcp-9,\n-\t     0x1.40d564p-9,\n-\t     0x1.34a306p-9,\n-\t     0x1.28de12p-9,\n-\t     0x1.1d8318p-9,\n-\t     0x1.128ebap-9,\n-\t     0x1.07fdb4p-9,\n-\t     0x1.fb99b8p-10,\n-\t     0x1.e7f232p-10,\n-\t     0x1.d4fed8p-10,\n-\t     0x1.c2b9d0p-10,\n-\t     0x1.b11d70p-10,\n-\t     0x1.a02436p-10,\n-\t     0x1.8fc8c8p-10,\n-\t     0x1.8005f0p-10,\n-\t     0x1.70d6a4p-10,\n-\t     0x1.6235fcp-10,\n-\t     0x1.541f34p-10,\n-\t     0x1.468daep-10,\n-\t     0x1.397ceep-10,\n-\t     0x1.2ce898p-10,\n-\t     0x1.20cc76p-10,\n-\t     0x1.15246ep-10,\n-\t     0x1.09ec86p-10,\n-\t     0x1.fe41cep-11,\n-\t     0x1.e97ba4p-11,\n-\t     0x1.d57f52p-11,\n-\t     0x1.c245d4p-11,\n-\t     0x1.afc85ep-11,\n-\t     0x1.9e0058p-11,\n-\t     0x1.8ce75ep-11,\n-\t     0x1.7c7744p-11,\n-\t     0x1.6caa0ep-11,\n-\t     0x1.5d79ecp-11,\n-\t     0x1.4ee142p-11,\n-\t     0x1.40daa4p-11,\n-\t     0x1.3360ccp-11,\n-\t     0x1.266ea8p-11,\n-\t     0x1.19ff46p-11,\n-\t     0x1.0e0de8p-11,\n-\t     0x1.0295f0p-11,\n-\t     0x1.ef25d4p-12,\n-\t     0x1.da0110p-12,\n-\t     0x1.c5b542p-12,\n-\t     0x1.b23a5ap-12,\n-\t     0x1.9f8894p-12,\n-\t     0x1.8d986ap-12,\n-\t     0x1.7c629ap-12,\n-\t     0x1.6be022p-12,\n-\t     0x1.5c0a38p-12,\n-\t     0x1.4cda54p-12,\n-\t     0x1.3e4a24p-12,\n-\t     0x1.305390p-12,\n-\t     0x1.22f0b4p-12,\n-\t     0x1.161be4p-12,\n-\t     0x1.09cfa4p-12,\n-\t     0x1.fc0d56p-13,\n-\t     0x1.e577bcp-13,\n-\t     0x1.cfd4a6p-13,\n-\t     0x1.bb1a96p-13,\n-\t     0x1.a74068p-13,\n-\t     0x1.943d4ap-13,\n-\t     0x1.8208bcp-13,\n-\t     0x1.709a8ep-13,\n-\t     0x1.5feadap-13,\n-\t     0x1.4ff208p-13,\n-\t     0x1.40a8c2p-13,\n-\t     0x1.3207fcp-13,\n-\t     0x1.2408eap-13,\n-\t     0x1.16a502p-13,\n-\t     0x1.09d5f8p-13,\n-\t     0x1.fb2b7ap-14,\n-\t     0x1.e3bcf4p-14,\n-\t     0x1.cd5528p-14,\n-\t     0x1.b7e946p-14,\n-\t     0x1.a36eecp-14,\n-\t     0x1.8fdc1cp-14,\n-\t     0x1.7d2738p-14,\n-\t     0x1.6b4702p-14,\n-\t     0x1.5a329cp-14,\n-\t     0x1.49e178p-14,\n-\t     0x1.3a4b60p-14,\n-\t     0x1.2b6876p-14,\n-\t     0x1.1d3120p-14,\n-\t     0x1.0f9e1cp-14,\n-\t     0x1.02a868p-14,\n-\t     0x1.ec929ap-15,\n-\t     0x1.d4f4b4p-15,\n-\t     0x1.be6abcp-15,\n-\t     0x1.a8e8ccp-15,\n-\t     0x1.94637ep-15,\n-\t     0x1.80cfdcp-15,\n-\t     0x1.6e2368p-15,\n-\t     0x1.5c540cp-15,\n-\t     0x1.4b581cp-15,\n-\t     0x1.3b2652p-15,\n-\t     0x1.2bb5ccp-15,\n-\t     0x1.1cfe02p-15,\n-\t     0x1.0ef6c4p-15,\n-\t     0x1.019842p-15,\n-\t     0x1.e9b5e8p-16,\n-\t     0x1.d16f58p-16,\n-\t     0x1.ba4f04p-16,\n-\t     0x1.a447b8p-16,\n-\t     0x1.8f4cccp-16,\n-\t     0x1.7b5224p-16,\n-\t     0x1.684c22p-16,\n-\t     0x1.562facp-16,\n-\t     0x1.44f21ep-16,\n-\t     0x1.34894ap-16,\n-\t     0x1.24eb72p-16,\n-\t     0x1.160f44p-16,\n-\t     0x1.07ebd2p-16,\n-\t     0x1.f4f12ep-17,\n-\t     0x1.db5ad0p-17,\n-\t     0x1.c304f0p-17,\n-\t     0x1.abe09ep-17,\n-\t     0x1.95df98p-17,\n-\t     0x1.80f43ap-17,\n-\t     0x1.6d1178p-17,\n-\t     0x1.5a2ae0p-17,\n-\t     0x1.483488p-17,\n-\t     0x1.372310p-17,\n-\t     0x1.26eb9ep-17,\n-\t     0x1.1783cep-17,\n-\t     0x1.08e1bap-17,\n-\t     0x1.f5f7d8p-18,\n-\t     0x1.db92b6p-18,\n-\t     0x1.c282cep-18,\n-\t     0x1.aab7acp-18,\n-\t     0x1.94219cp-18,\n-\t     0x1.7eb1a2p-18,\n-\t     0x1.6a5972p-18,\n-\t     0x1.570b6ap-18,\n-\t     0x1.44ba86p-18,\n-\t     0x1.335a62p-18,\n-\t     0x1.22df2ap-18,\n-\t     0x1.133d96p-18,\n-\t     0x1.046aeap-18,\n-\t     0x1.ecb9d0p-19,\n-\t     0x1.d21398p-19,\n-\t     0x1.b8d094p-19,\n-\t     0x1.a0df10p-19,\n-\t     0x1.8a2e26p-19,\n-\t     0x1.74adc8p-19,\n-\t     0x1.604ea8p-19,\n-\t     0x1.4d0232p-19,\n-\t     0x1.3aba86p-19,\n-\t     0x1.296a70p-19,\n-\t     0x1.190562p-19,\n-\t     0x1.097f62p-19,\n-\t     0x1.f59a20p-20,\n-\t     0x1.d9c736p-20,\n-\t     0x1.bf716cp-20,\n-\t     0x1.a6852cp-20,\n-\t     0x1.8eefd8p-20,\n-\t     0x1.789fb8p-20,\n-\t     0x1.6383f8p-20,\n-\t     0x1.4f8c96p-20,\n-\t     0x1.3caa62p-20,\n-\t     0x1.2acee2p-20,\n-\t     0x1.19ec60p-20,\n-\t     0x1.09f5d0p-20,\n-\t     0x1.f5bd96p-21,\n-\t     0x1.d9371ep-21,\n-\t     0x1.be41dep-21,\n-\t     0x1.a4c89ep-21,\n-\t     0x1.8cb738p-21,\n-\t     0x1.75fa8ep-21,\n-\t     0x1.608078p-21,\n-\t     0x1.4c37c0p-21,\n-\t     0x1.39100ep-21,\n-\t     0x1.26f9e0p-21,\n-\t     0x1.15e682p-21,\n-\t     0x1.05c804p-21,\n-\t     0x1.ed2254p-22,\n-\t     0x1.d06ad6p-22,\n-\t     0x1.b551c8p-22,\n-\t     0x1.9bc0a0p-22,\n-\t     0x1.83a200p-22,\n-\t     0x1.6ce1aap-22,\n-\t     0x1.576c72p-22,\n-\t     0x1.43302cp-22,\n-\t     0x1.301ba2p-22,\n-\t     0x1.1e1e86p-22,\n-\t     0x1.0d2966p-22,\n-\t     0x1.fa5b50p-23,\n-\t     0x1.dc3ae4p-23,\n-\t     0x1.bfd756p-23,\n-\t     0x1.a517dap-23,\n-\t     0x1.8be4f8p-23,\n-\t     0x1.74287ep-23,\n-\t     0x1.5dcd66p-23,\n-\t     0x1.48bfd4p-23,\n-\t     0x1.34ecf8p-23,\n-\t     0x1.224310p-23,\n-\t     0x1.10b148p-23,\n-  },\n-};\ndiff --git a/sysdeps/aarch64/fpu/vecmath_config.h b/sysdeps/aarch64/fpu/vecmath_config.h\nindex 7f0a8aa5f2..862eefaf8f 100644\n--- a/sysdeps/aarch64/fpu/vecmath_config.h\n+++ b/sysdeps/aarch64/fpu/vecmath_config.h\n@@ -75,49 +75,37 @@ extern const struct v_log10_data\n   } table[1 << V_LOG10_TABLE_BITS];\n } __v_log10_data attribute_hidden;\n \n-extern const struct erff_data\n+extern const struct v_erff_data\n {\n   struct\n   {\n     float erf, scale;\n   } tab[513];\n-} __erff_data attribute_hidden;\n+} __v_erff_data attribute_hidden;\n \n-extern const struct sv_erff_data\n-{\n-  float erf[513];\n-  float scale[513];\n-} __sv_erff_data attribute_hidden;\n-\n-extern const struct erf_data\n+extern const struct v_erf_data\n {\n   struct\n   {\n     double erf, scale;\n   } tab[769];\n-} __erf_data attribute_hidden;\n-\n-extern const struct sv_erf_data\n-{\n-  double erf[769];\n-  double scale[769];\n-} __sv_erf_data attribute_hidden;\n+} __v_erf_data attribute_hidden;\n \n-extern const struct erfc_data\n+extern const struct v_erfc_data\n {\n   struct\n   {\n     double erfc, scale;\n   } tab[3488];\n-} __erfc_data attribute_hidden;\n+} __v_erfc_data attribute_hidden;\n \n-extern const struct erfcf_data\n+extern const struct v_erfcf_data\n {\n   struct\n   {\n     float erfc, scale;\n   } tab[645];\n-} __erfcf_data attribute_hidden;\n+} __v_erfcf_data attribute_hidden;\n \n /* Some data for AdvSIMD and SVE pow's internal exp and log.  */\n #define V_POW_EXP_TABLE_BITS 8\n\ncommit 4148940836eee07d1138da6f1805280eeb8217e3\nAuthor: Pierre Blanchard <pierre.blanchard@arm.com>\nDate:   Mon Dec 9 15:53:04 2024 +0000\n\n    AArch64: Improve codegen in AdvSIMD pow\n    \n    Remove spurious ADRP. Improve memory access by shuffling constants and\n    using more indexed MLAs.\n    \n    A few more optimisation with no impact on accuracy\n    - force fmas contraction\n    - switch from shift-aided rint to rint instruction\n    \n    Between 1 and 5% throughput improvement on Neoverse\n    V1 depending on benchmark.\n    \n    (cherry picked from commit 569cfaaf4984ae70b23c61ee28a609b5aef93fea)\n\ndiff --git a/sysdeps/aarch64/fpu/pow_advsimd.c b/sysdeps/aarch64/fpu/pow_advsimd.c\nindex 3c91e3e183..81e134ac2f 100644\n--- a/sysdeps/aarch64/fpu/pow_advsimd.c\n+++ b/sysdeps/aarch64/fpu/pow_advsimd.c\n@@ -22,9 +22,6 @@\n /* Defines parameters of the approximation and scalar fallback.  */\n #include \"finite_pow.h\"\n \n-#define VecSmallExp v_u64 (SmallExp)\n-#define VecThresExp v_u64 (ThresExp)\n-\n #define VecSmallPowX v_u64 (SmallPowX)\n #define VecThresPowX v_u64 (ThresPowX)\n #define VecSmallPowY v_u64 (SmallPowY)\n@@ -32,36 +29,48 @@\n \n static const struct data\n {\n-  float64x2_t log_poly[6];\n-  float64x2_t exp_poly[3];\n-  float64x2_t ln2_hi, ln2_lo;\n-  float64x2_t shift, inv_ln2_n, ln2_hi_n, ln2_lo_n, small_powx;\n   uint64x2_t inf;\n+  float64x2_t small_powx;\n+  uint64x2_t offset, mask;\n+  uint64x2_t mask_sub_0, mask_sub_1;\n+  float64x2_t log_c0, log_c2, log_c4, log_c5;\n+  double log_c1, log_c3;\n+  double ln2_lo, ln2_hi;\n+  uint64x2_t small_exp, thres_exp;\n+  double ln2_lo_n, ln2_hi_n;\n+  double inv_ln2_n, exp_c2;\n+  float64x2_t exp_c0, exp_c1;\n } data = {\n+  /* Power threshold.  */\n+  .inf = V2 (0x7ff0000000000000),\n+  .small_powx = V2 (0x1p-126),\n+  .offset = V2 (Off),\n+  .mask = V2 (0xfffULL << 52),\n+  .mask_sub_0 = V2 (1ULL << 52),\n+  .mask_sub_1 = V2 (52ULL << 52),\n   /* Coefficients copied from v_pow_log_data.c\n      relative error: 0x1.11922ap-70 in [-0x1.6bp-8, 0x1.6bp-8]\n      Coefficients are scaled to match the scaling during evaluation.  */\n-  .log_poly\n-  = { V2 (0x1.555555555556p-2 * -2), V2 (-0x1.0000000000006p-2 * -2),\n-      V2 (0x1.999999959554ep-3 * 4), V2 (-0x1.555555529a47ap-3 * 4),\n-      V2 (0x1.2495b9b4845e9p-3 * -8), V2 (-0x1.0002b8b263fc3p-3 * -8) },\n-  .ln2_hi = V2 (0x1.62e42fefa3800p-1),\n-  .ln2_lo = V2 (0x1.ef35793c76730p-45),\n+  .log_c0 = V2 (0x1.555555555556p-2 * -2),\n+  .log_c1 = -0x1.0000000000006p-2 * -2,\n+  .log_c2 = V2 (0x1.999999959554ep-3 * 4),\n+  .log_c3 = -0x1.555555529a47ap-3 * 4,\n+  .log_c4 = V2 (0x1.2495b9b4845e9p-3 * -8),\n+  .log_c5 = V2 (-0x1.0002b8b263fc3p-3 * -8),\n+  .ln2_hi = 0x1.62e42fefa3800p-1,\n+  .ln2_lo = 0x1.ef35793c76730p-45,\n   /* Polynomial coefficients: abs error: 1.43*2^-58, ulp error: 0.549\n      (0.550 without fma) if |x| < ln2/512.  */\n-  .exp_poly = { V2 (0x1.fffffffffffd4p-2), V2 (0x1.5555571d6ef9p-3),\n-\t\tV2 (0x1.5555576a5adcep-5) },\n-  .shift = V2 (0x1.8p52), /* round to nearest int. without intrinsics.  */\n-  .inv_ln2_n = V2 (0x1.71547652b82fep8), /* N/ln2.  */\n-  .ln2_hi_n = V2 (0x1.62e42fefc0000p-9), /* ln2/N.  */\n-  .ln2_lo_n = V2 (-0x1.c610ca86c3899p-45),\n-  .small_powx = V2 (0x1p-126),\n-  .inf = V2 (0x7ff0000000000000)\n+  .exp_c0 = V2 (0x1.fffffffffffd4p-2),\n+  .exp_c1 = V2 (0x1.5555571d6ef9p-3),\n+  .exp_c2 = 0x1.5555576a5adcep-5,\n+  .small_exp = V2 (0x3c90000000000000),\n+  .thres_exp = V2 (0x03f0000000000000),\n+  .inv_ln2_n = 0x1.71547652b82fep8, /* N/ln2.  */\n+  .ln2_hi_n = 0x1.62e42fefc0000p-9, /* ln2/N.  */\n+  .ln2_lo_n = -0x1.c610ca86c3899p-45,\n };\n \n-#define A(i) data.log_poly[i]\n-#define C(i) data.exp_poly[i]\n-\n /* This version implements an algorithm close to scalar pow but\n    - does not implement the trick in the exp's specialcase subroutine to avoid\n      double-rounding,\n@@ -91,10 +100,9 @@ v_log_inline (uint64x2_t ix, float64x2_t *tail, const struct data *d)\n   /* x = 2^k z; where z is in range [OFF,2*OFF) and exact.\n      The range is split into N subintervals.\n      The ith subinterval contains z and c is near its center.  */\n-  uint64x2_t tmp = vsubq_u64 (ix, v_u64 (Off));\n-  int64x2_t k\n-      = vshrq_n_s64 (vreinterpretq_s64_u64 (tmp), 52); /* arithmetic shift.  */\n-  uint64x2_t iz = vsubq_u64 (ix, vandq_u64 (tmp, v_u64 (0xfffULL << 52)));\n+  uint64x2_t tmp = vsubq_u64 (ix, d->offset);\n+  int64x2_t k = vshrq_n_s64 (vreinterpretq_s64_u64 (tmp), 52);\n+  uint64x2_t iz = vsubq_u64 (ix, vandq_u64 (tmp, d->mask));\n   float64x2_t z = vreinterpretq_f64_u64 (iz);\n   float64x2_t kd = vcvtq_f64_s64 (k);\n   /* log(x) = k*Ln2 + log(c) + log1p(z/c-1).  */\n@@ -105,9 +113,10 @@ v_log_inline (uint64x2_t ix, float64x2_t *tail, const struct data *d)\n      |z/c - 1| < 1/N, so r = z/c - 1 is exactly representible.  */\n   float64x2_t r = vfmaq_f64 (v_f64 (-1.0), z, invc);\n   /* k*Ln2 + log(c) + r.  */\n-  float64x2_t t1 = vfmaq_f64 (logc, kd, d->ln2_hi);\n+  float64x2_t ln2 = vld1q_f64 (&d->ln2_lo);\n+  float64x2_t t1 = vfmaq_laneq_f64 (logc, kd, ln2, 1);\n   float64x2_t t2 = vaddq_f64 (t1, r);\n-  float64x2_t lo1 = vfmaq_f64 (logctail, kd, d->ln2_lo);\n+  float64x2_t lo1 = vfmaq_laneq_f64 (logctail, kd, ln2, 0);\n   float64x2_t lo2 = vaddq_f64 (vsubq_f64 (t1, t2), r);\n   /* Evaluation is optimized assuming superscalar pipelined execution.  */\n   float64x2_t ar = vmulq_f64 (v_f64 (-0.5), r);\n@@ -118,9 +127,10 @@ v_log_inline (uint64x2_t ix, float64x2_t *tail, const struct data *d)\n   float64x2_t lo3 = vfmaq_f64 (vnegq_f64 (ar2), ar, r);\n   float64x2_t lo4 = vaddq_f64 (vsubq_f64 (t2, hi), ar2);\n   /* p = log1p(r) - r - A[0]*r*r.  */\n-  float64x2_t a56 = vfmaq_f64 (A (4), r, A (5));\n-  float64x2_t a34 = vfmaq_f64 (A (2), r, A (3));\n-  float64x2_t a12 = vfmaq_f64 (A (0), r, A (1));\n+  float64x2_t odd_coeffs = vld1q_f64 (&d->log_c1);\n+  float64x2_t a56 = vfmaq_f64 (d->log_c4, r, d->log_c5);\n+  float64x2_t a34 = vfmaq_laneq_f64 (d->log_c2, r, odd_coeffs, 1);\n+  float64x2_t a12 = vfmaq_laneq_f64 (d->log_c0, r, odd_coeffs, 0);\n   float64x2_t p = vfmaq_f64 (a34, ar2, a56);\n   p = vfmaq_f64 (a12, ar2, p);\n   p = vmulq_f64 (ar3, p);\n@@ -140,28 +150,28 @@ exp_special_case (float64x2_t x, float64x2_t xtail)\n \n /* Computes sign*exp(x+xtail) where |xtail| < 2^-8/N and |xtail| <= |x|.  */\n static inline float64x2_t\n-v_exp_inline (float64x2_t x, float64x2_t xtail, const struct data *d)\n+v_exp_inline (float64x2_t x, float64x2_t neg_xtail, const struct data *d)\n {\n   /* Fallback to scalar exp_inline for all lanes if any lane\n      contains value of x s.t. |x| <= 2^-54 or >= 512.  */\n-  uint64x2_t abstop\n-      = vshrq_n_u64 (vandq_u64 (vreinterpretq_u64_f64 (x), d->inf), 52);\n-  uint64x2_t uoflowx\n-      = vcgeq_u64 (vsubq_u64 (abstop, VecSmallExp), VecThresExp);\n+  uint64x2_t uoflowx = vcgeq_u64 (\n+      vsubq_u64 (vreinterpretq_u64_f64 (vabsq_f64 (x)), d->small_exp),\n+      d->thres_exp);\n   if (__glibc_unlikely (v_any_u64 (uoflowx)))\n-    return exp_special_case (x, xtail);\n+    return exp_special_case (x, vnegq_f64 (neg_xtail));\n \n   /* exp(x) = 2^(k/N) * exp(r), with exp(r) in [2^(-1/2N),2^(1/2N)].  */\n   /* x = ln2/N*k + r, with k integer and r in [-ln2/2N, ln2/2N].  */\n-  float64x2_t z = vmulq_f64 (d->inv_ln2_n, x);\n   /* z - kd is in [-1, 1] in non-nearest rounding modes.  */\n-  float64x2_t kd = vaddq_f64 (z, d->shift);\n-  uint64x2_t ki = vreinterpretq_u64_f64 (kd);\n-  kd = vsubq_f64 (kd, d->shift);\n-  float64x2_t r = vfmsq_f64 (x, kd, d->ln2_hi_n);\n-  r = vfmsq_f64 (r, kd, d->ln2_lo_n);\n+  float64x2_t exp_consts = vld1q_f64 (&d->inv_ln2_n);\n+  float64x2_t z = vmulq_laneq_f64 (x, exp_consts, 0);\n+  float64x2_t kd = vrndnq_f64 (z);\n+  uint64x2_t ki = vreinterpretq_u64_s64 (vcvtaq_s64_f64 (z));\n+  float64x2_t ln2_n = vld1q_f64 (&d->ln2_lo_n);\n+  float64x2_t r = vfmsq_laneq_f64 (x, kd, ln2_n, 1);\n+  r = vfmsq_laneq_f64 (r, kd, ln2_n, 0);\n   /* The code assumes 2^-200 < |xtail| < 2^-8/N.  */\n-  r = vaddq_f64 (r, xtail);\n+  r = vsubq_f64 (r, neg_xtail);\n   /* 2^(k/N) ~= scale.  */\n   uint64x2_t idx = vandq_u64 (ki, v_u64 (N_EXP - 1));\n   uint64x2_t top = vshlq_n_u64 (ki, 52 - V_POW_EXP_TABLE_BITS);\n@@ -170,8 +180,8 @@ v_exp_inline (float64x2_t x, float64x2_t xtail, const struct data *d)\n   sbits = vaddq_u64 (sbits, top);\n   /* exp(x) = 2^(k/N) * exp(r) ~= scale + scale * (exp(r) - 1).  */\n   float64x2_t r2 = vmulq_f64 (r, r);\n-  float64x2_t tmp = vfmaq_f64 (C (1), r, C (2));\n-  tmp = vfmaq_f64 (C (0), r, tmp);\n+  float64x2_t tmp = vfmaq_laneq_f64 (d->exp_c1, r, exp_consts, 1);\n+  tmp = vfmaq_f64 (d->exp_c0, r, tmp);\n   tmp = vfmaq_f64 (r, r2, tmp);\n   float64x2_t scale = vreinterpretq_f64_u64 (sbits);\n   /* Note: tmp == 0 or |tmp| > 2^-200 and scale > 2^-739, so there\n@@ -230,8 +240,8 @@ float64x2_t VPCS_ATTR V_NAME_D2 (pow) (float64x2_t x, float64x2_t y)\n \t{\n \t  /* Normalize subnormal x so exponent becomes negative.  */\n \t  uint64x2_t vix_norm = vreinterpretq_u64_f64 (\n-\t      vabsq_f64 (vmulq_f64 (x, vcvtq_f64_u64 (v_u64 (1ULL << 52)))));\n-\t  vix_norm = vsubq_u64 (vix_norm, v_u64 (52ULL << 52));\n+\t      vabsq_f64 (vmulq_f64 (x, vcvtq_f64_u64 (d->mask_sub_0))));\n+\t  vix_norm = vsubq_u64 (vix_norm, d->mask_sub_1);\n \t  vix = vbslq_u64 (sub_x, vix_norm, vix);\n \t}\n     }\n@@ -242,8 +252,7 @@ float64x2_t VPCS_ATTR V_NAME_D2 (pow) (float64x2_t x, float64x2_t y)\n \n   /* Vector Exp(y_loghi, y_loglo).  */\n   float64x2_t vehi = vmulq_f64 (y, vhi);\n-  float64x2_t velo = vmulq_f64 (y, vlo);\n   float64x2_t vemi = vfmsq_f64 (vehi, y, vhi);\n-  velo = vsubq_f64 (velo, vemi);\n-  return v_exp_inline (vehi, velo, d);\n+  float64x2_t neg_velo = vfmsq_f64 (vemi, y, vlo);\n+  return v_exp_inline (vehi, neg_velo, d);\n }\n\ncommit ae04f63087415eba9060143608b03db693854bb7\nAuthor: Pierre Blanchard <pierre.blanchard@arm.com>\nDate:   Mon Dec 9 15:54:34 2024 +0000\n\n    AArch64: Improve codegen in AdvSIMD logs\n    \n    Remove spurious ADRP and a few MOVs.\n    Reduce memory access by using more indexed MLAs in polynomial.\n    Align notation so that algorithms are easier to compare.\n    Speedup on Neoverse V1 for log10 (8%), log (8.5%), and log2 (10%).\n    Update error threshold in AdvSIMD log (now matches SVE log).\n    \n    (cherry picked from commit 8eb5ad2ebc94cc5bedbac57c226c02ec254479c7)\n\ndiff --git a/sysdeps/aarch64/fpu/log10_advsimd.c b/sysdeps/aarch64/fpu/log10_advsimd.c\nindex c065aaebae..f69ed21c39 100644\n--- a/sysdeps/aarch64/fpu/log10_advsimd.c\n+++ b/sysdeps/aarch64/fpu/log10_advsimd.c\n@@ -18,36 +18,36 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include \"v_math.h\"\n-#include \"poly_advsimd_f64.h\"\n-\n-#define N (1 << V_LOG10_TABLE_BITS)\n \n static const struct data\n {\n-  uint64x2_t min_norm;\n+  uint64x2_t off, sign_exp_mask, offset_lower_bound;\n   uint32x4_t special_bound;\n-  float64x2_t poly[5];\n-  float64x2_t invln10, log10_2, ln2;\n-  uint64x2_t sign_exp_mask;\n+  double invln10, log10_2;\n+  double c1, c3;\n+  float64x2_t c0, c2, c4;\n } data = {\n   /* Computed from log coefficients divided by log(10) then rounded to double\n      precision.  */\n-  .poly = { V2 (-0x1.bcb7b1526e506p-3), V2 (0x1.287a7636be1d1p-3),\n-\t    V2 (-0x1.bcb7b158af938p-4), V2 (0x1.63c78734e6d07p-4),\n-\t    V2 (-0x1.287461742fee4p-4) },\n-  .ln2 = V2 (0x1.62e42fefa39efp-1),\n-  .invln10 = V2 (0x1.bcb7b1526e50ep-2),\n-  .log10_2 = V2 (0x1.34413509f79ffp-2),\n-  .min_norm = V2 (0x0010000000000000), /* asuint64(0x1p-1022).  */\n-  .special_bound = V4 (0x7fe00000),    /* asuint64(inf) - min_norm.  */\n+  .c0 = V2 (-0x1.bcb7b1526e506p-3),\n+  .c1 = 0x1.287a7636be1d1p-3,\n+  .c2 = V2 (-0x1.bcb7b158af938p-4),\n+  .c3 = 0x1.63c78734e6d07p-4,\n+  .c4 = V2 (-0x1.287461742fee4p-4),\n+  .invln10 = 0x1.bcb7b1526e50ep-2,\n+  .log10_2 = 0x1.34413509f79ffp-2,\n+  .off = V2 (0x3fe6900900000000),\n   .sign_exp_mask = V2 (0xfff0000000000000),\n+  /* Lower bound is 0x0010000000000000. For\n+     optimised register use subnormals are detected after offset has been\n+     subtracted, so lower bound - offset (which wraps around).  */\n+  .offset_lower_bound = V2 (0x0010000000000000 - 0x3fe6900900000000),\n+  .special_bound = V4 (0x7fe00000), /* asuint64(inf) - 0x0010000000000000.  */\n };\n \n-#define Off v_u64 (0x3fe6900900000000)\n+#define N (1 << V_LOG10_TABLE_BITS)\n #define IndexMask (N - 1)\n \n-#define T(s, i) __v_log10_data.s[i]\n-\n struct entry\n {\n   float64x2_t invc;\n@@ -70,10 +70,11 @@ lookup (uint64x2_t i)\n }\n \n static float64x2_t VPCS_ATTR NOINLINE\n-special_case (float64x2_t x, float64x2_t y, float64x2_t hi, float64x2_t r2,\n-\t      uint32x2_t special)\n+special_case (float64x2_t hi, uint64x2_t u_off, float64x2_t y, float64x2_t r2,\n+\t      uint32x2_t special, const struct data *d)\n {\n-  return v_call_f64 (log10, x, vfmaq_f64 (hi, r2, y), vmovl_u32 (special));\n+  float64x2_t x = vreinterpretq_f64_u64 (vaddq_u64 (u_off, d->off));\n+  return v_call_f64 (log10, x, vfmaq_f64 (hi, y, r2), vmovl_u32 (special));\n }\n \n /* Fast implementation of double-precision vector log10\n@@ -85,19 +86,24 @@ special_case (float64x2_t x, float64x2_t y, float64x2_t hi, float64x2_t r2,\n float64x2_t VPCS_ATTR V_NAME_D1 (log10) (float64x2_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n-  uint64x2_t ix = vreinterpretq_u64_f64 (x);\n-  uint32x2_t special = vcge_u32 (vsubhn_u64 (ix, d->min_norm),\n-\t\t\t\t vget_low_u32 (d->special_bound));\n+\n+  /* To avoid having to mov x out of the way, keep u after offset has been\n+     applied, and recover x by adding the offset back in the special-case\n+     handler.  */\n+  uint64x2_t u = vreinterpretq_u64_f64 (x);\n+  uint64x2_t u_off = vsubq_u64 (u, d->off);\n \n   /* x = 2^k z; where z is in range [OFF,2*OFF) and exact.\n      The range is split into N subintervals.\n      The ith subinterval contains z and c is near its center.  */\n-  uint64x2_t tmp = vsubq_u64 (ix, Off);\n-  int64x2_t k = vshrq_n_s64 (vreinterpretq_s64_u64 (tmp), 52);\n-  uint64x2_t iz = vsubq_u64 (ix, vandq_u64 (tmp, d->sign_exp_mask));\n+  int64x2_t k = vshrq_n_s64 (vreinterpretq_s64_u64 (u_off), 52);\n+  uint64x2_t iz = vsubq_u64 (u, vandq_u64 (u_off, d->sign_exp_mask));\n   float64x2_t z = vreinterpretq_f64_u64 (iz);\n \n-  struct entry e = lookup (tmp);\n+  struct entry e = lookup (u_off);\n+\n+  uint32x2_t special = vcge_u32 (vsubhn_u64 (u_off, d->offset_lower_bound),\n+\t\t\t\t vget_low_u32 (d->special_bound));\n \n   /* log10(x) = log1p(z/c-1)/log(10) + log10(c) + k*log10(2).  */\n   float64x2_t r = vfmaq_f64 (v_f64 (-1.0), z, e.invc);\n@@ -105,17 +111,22 @@ float64x2_t VPCS_ATTR V_NAME_D1 (log10) (float64x2_t x)\n \n   /* hi = r / log(10) + log10(c) + k*log10(2).\n      Constants in v_log10_data.c are computed (in extended precision) as\n-     e.log10c := e.logc * ivln10.  */\n-  float64x2_t w = vfmaq_f64 (e.log10c, r, d->invln10);\n+     e.log10c := e.logc * invln10.  */\n+  float64x2_t cte = vld1q_f64 (&d->invln10);\n+  float64x2_t hi = vfmaq_laneq_f64 (e.log10c, r, cte, 0);\n \n   /* y = log10(1+r) + n * log10(2).  */\n-  float64x2_t hi = vfmaq_f64 (w, kd, d->log10_2);\n+  hi = vfmaq_laneq_f64 (hi, kd, cte, 1);\n \n   /* y = r2*(A0 + r*A1 + r2*(A2 + r*A3 + r2*A4)) + hi.  */\n   float64x2_t r2 = vmulq_f64 (r, r);\n-  float64x2_t y = v_pw_horner_4_f64 (r, r2, d->poly);\n+  float64x2_t odd_coeffs = vld1q_f64 (&d->c1);\n+  float64x2_t y = vfmaq_laneq_f64 (d->c2, r, odd_coeffs, 1);\n+  float64x2_t p = vfmaq_laneq_f64 (d->c0, r, odd_coeffs, 0);\n+  y = vfmaq_f64 (y, d->c4, r2);\n+  y = vfmaq_f64 (p, y, r2);\n \n   if (__glibc_unlikely (v_any_u32h (special)))\n-    return special_case (x, y, hi, r2, special);\n-  return vfmaq_f64 (hi, r2, y);\n+    return special_case (hi, u_off, y, r2, special, d);\n+  return vfmaq_f64 (hi, y, r2);\n }\ndiff --git a/sysdeps/aarch64/fpu/log2_advsimd.c b/sysdeps/aarch64/fpu/log2_advsimd.c\nindex 4057c552d8..1eea1f86eb 100644\n--- a/sysdeps/aarch64/fpu/log2_advsimd.c\n+++ b/sysdeps/aarch64/fpu/log2_advsimd.c\n@@ -18,31 +18,33 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include \"v_math.h\"\n-#include \"poly_advsimd_f64.h\"\n-\n-#define N (1 << V_LOG2_TABLE_BITS)\n \n static const struct data\n {\n-  uint64x2_t min_norm;\n+  uint64x2_t off, sign_exp_mask, offset_lower_bound;\n   uint32x4_t special_bound;\n-  float64x2_t poly[5];\n-  float64x2_t invln2;\n-  uint64x2_t sign_exp_mask;\n+  float64x2_t c0, c2;\n+  double c1, c3, invln2, c4;\n } data = {\n   /* Each coefficient was generated to approximate log(r) for |r| < 0x1.fp-9\n      and N = 128, then scaled by log2(e) in extended precision and rounded back\n      to double precision.  */\n-  .poly = { V2 (-0x1.71547652b83p-1), V2 (0x1.ec709dc340953p-2),\n-\t    V2 (-0x1.71547651c8f35p-2), V2 (0x1.2777ebe12dda5p-2),\n-\t    V2 (-0x1.ec738d616fe26p-3) },\n-  .invln2 = V2 (0x1.71547652b82fep0),\n-  .min_norm = V2 (0x0010000000000000), /* asuint64(0x1p-1022).  */\n-  .special_bound = V4 (0x7fe00000),    /* asuint64(inf) - min_norm.  */\n+  .c0 = V2 (-0x1.71547652b8300p-1),\n+  .c1 = 0x1.ec709dc340953p-2,\n+  .c2 = V2 (-0x1.71547651c8f35p-2),\n+  .c3 = 0x1.2777ebe12dda5p-2,\n+  .c4 = -0x1.ec738d616fe26p-3,\n+  .invln2 = 0x1.71547652b82fep0,\n+  .off = V2 (0x3fe6900900000000),\n   .sign_exp_mask = V2 (0xfff0000000000000),\n+  /* Lower bound is 0x0010000000000000. For\n+     optimised register use subnormals are detected after offset has been\n+     subtracted, so lower bound - offset (which wraps around).  */\n+  .offset_lower_bound = V2 (0x0010000000000000 - 0x3fe6900900000000),\n+  .special_bound = V4 (0x7fe00000), /* asuint64(inf) - asuint64(0x1p-1022).  */\n };\n \n-#define Off v_u64 (0x3fe6900900000000)\n+#define N (1 << V_LOG2_TABLE_BITS)\n #define IndexMask (N - 1)\n \n struct entry\n@@ -67,10 +69,11 @@ lookup (uint64x2_t i)\n }\n \n static float64x2_t VPCS_ATTR NOINLINE\n-special_case (float64x2_t x, float64x2_t y, float64x2_t w, float64x2_t r2,\n-\t      uint32x2_t special)\n+special_case (float64x2_t hi, uint64x2_t u_off, float64x2_t y, float64x2_t r2,\n+\t      uint32x2_t special, const struct data *d)\n {\n-  return v_call_f64 (log2, x, vfmaq_f64 (w, r2, y), vmovl_u32 (special));\n+  float64x2_t x = vreinterpretq_f64_u64 (vaddq_u64 (u_off, d->off));\n+  return v_call_f64 (log2, x, vfmaq_f64 (hi, y, r2), vmovl_u32 (special));\n }\n \n /* Double-precision vector log2 routine. Implements the same algorithm as\n@@ -81,31 +84,41 @@ special_case (float64x2_t x, float64x2_t y, float64x2_t w, float64x2_t r2,\n float64x2_t VPCS_ATTR V_NAME_D1 (log2) (float64x2_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n-  uint64x2_t ix = vreinterpretq_u64_f64 (x);\n-  uint32x2_t special = vcge_u32 (vsubhn_u64 (ix, d->min_norm),\n-\t\t\t\t vget_low_u32 (d->special_bound));\n+\n+  /* To avoid having to mov x out of the way, keep u after offset has been\n+     applied, and recover x by adding the offset back in the special-case\n+     handler.  */\n+  uint64x2_t u = vreinterpretq_u64_f64 (x);\n+  uint64x2_t u_off = vsubq_u64 (u, d->off);\n \n   /* x = 2^k z; where z is in range [Off,2*Off) and exact.\n      The range is split into N subintervals.\n      The ith subinterval contains z and c is near its center.  */\n-  uint64x2_t tmp = vsubq_u64 (ix, Off);\n-  int64x2_t k = vshrq_n_s64 (vreinterpretq_s64_u64 (tmp), 52);\n-  uint64x2_t iz = vsubq_u64 (ix, vandq_u64 (tmp, d->sign_exp_mask));\n+  int64x2_t k = vshrq_n_s64 (vreinterpretq_s64_u64 (u_off), 52);\n+  uint64x2_t iz = vsubq_u64 (u, vandq_u64 (u_off, d->sign_exp_mask));\n   float64x2_t z = vreinterpretq_f64_u64 (iz);\n \n-  struct entry e = lookup (tmp);\n+  struct entry e = lookup (u_off);\n \n-  /* log2(x) = log1p(z/c-1)/log(2) + log2(c) + k.  */\n+  uint32x2_t special = vcge_u32 (vsubhn_u64 (u_off, d->offset_lower_bound),\n+\t\t\t\t vget_low_u32 (d->special_bound));\n \n+  /* log2(x) = log1p(z/c-1)/log(2) + log2(c) + k.  */\n   float64x2_t r = vfmaq_f64 (v_f64 (-1.0), z, e.invc);\n   float64x2_t kd = vcvtq_f64_s64 (k);\n-  float64x2_t w = vfmaq_f64 (e.log2c, r, d->invln2);\n+\n+  float64x2_t invln2_and_c4 = vld1q_f64 (&d->invln2);\n+  float64x2_t hi\n+      = vfmaq_laneq_f64 (vaddq_f64 (e.log2c, kd), r, invln2_and_c4, 0);\n \n   float64x2_t r2 = vmulq_f64 (r, r);\n-  float64x2_t y = v_pw_horner_4_f64 (r, r2, d->poly);\n-  w = vaddq_f64 (kd, w);\n+  float64x2_t odd_coeffs = vld1q_f64 (&d->c1);\n+  float64x2_t y = vfmaq_laneq_f64 (d->c2, r, odd_coeffs, 1);\n+  float64x2_t p = vfmaq_laneq_f64 (d->c0, r, odd_coeffs, 0);\n+  y = vfmaq_laneq_f64 (y, r2, invln2_and_c4, 1);\n+  y = vfmaq_f64 (p, r2, y);\n \n   if (__glibc_unlikely (v_any_u32h (special)))\n-    return special_case (x, y, w, r2, special);\n-  return vfmaq_f64 (w, r2, y);\n+    return special_case (hi, u_off, y, r2, special, d);\n+  return vfmaq_f64 (hi, y, r2);\n }\ndiff --git a/sysdeps/aarch64/fpu/log_advsimd.c b/sysdeps/aarch64/fpu/log_advsimd.c\nindex 015a6da7d7..b1a27fbc29 100644\n--- a/sysdeps/aarch64/fpu/log_advsimd.c\n+++ b/sysdeps/aarch64/fpu/log_advsimd.c\n@@ -21,27 +21,29 @@\n \n static const struct data\n {\n-  uint64x2_t min_norm;\n+  uint64x2_t off, sign_exp_mask, offset_lower_bound;\n   uint32x4_t special_bound;\n-  float64x2_t poly[5];\n-  float64x2_t ln2;\n-  uint64x2_t sign_exp_mask;\n+  float64x2_t c0, c2;\n+  double c1, c3, ln2, c4;\n } data = {\n-  /* Worst-case error: 1.17 + 0.5 ulp.\n-     Rel error: 0x1.6272e588p-56 in [ -0x1.fc1p-9 0x1.009p-8 ].  */\n-  .poly = { V2 (-0x1.ffffffffffff7p-2), V2 (0x1.55555555170d4p-2),\n-\t    V2 (-0x1.0000000399c27p-2), V2 (0x1.999b2e90e94cap-3),\n-\t    V2 (-0x1.554e550bd501ep-3) },\n-  .ln2 = V2 (0x1.62e42fefa39efp-1),\n-  .min_norm = V2 (0x0010000000000000),\n-  .special_bound = V4 (0x7fe00000), /* asuint64(inf) - min_norm.  */\n-  .sign_exp_mask = V2 (0xfff0000000000000)\n+  /* Rel error: 0x1.6272e588p-56 in [ -0x1.fc1p-9 0x1.009p-8 ].  */\n+  .c0 = V2 (-0x1.ffffffffffff7p-2),\n+  .c1 = 0x1.55555555170d4p-2,\n+  .c2 = V2 (-0x1.0000000399c27p-2),\n+  .c3 = 0x1.999b2e90e94cap-3,\n+  .c4 = -0x1.554e550bd501ep-3,\n+  .ln2 = 0x1.62e42fefa39efp-1,\n+  .sign_exp_mask = V2 (0xfff0000000000000),\n+  .off = V2 (0x3fe6900900000000),\n+  /* Lower bound is 0x0010000000000000. For\n+     optimised register use subnormals are detected after offset has been\n+     subtracted, so lower bound - offset (which wraps around).  */\n+  .offset_lower_bound = V2 (0x0010000000000000 - 0x3fe6900900000000),\n+  .special_bound = V4 (0x7fe00000), /* asuint64(inf) -  asuint64(0x1p-126).  */\n };\n \n-#define A(i) d->poly[i]\n #define N (1 << V_LOG_TABLE_BITS)\n #define IndexMask (N - 1)\n-#define Off v_u64 (0x3fe6900900000000)\n \n struct entry\n {\n@@ -64,48 +66,56 @@ lookup (uint64x2_t i)\n }\n \n static float64x2_t VPCS_ATTR NOINLINE\n-special_case (float64x2_t x, float64x2_t y, float64x2_t hi, float64x2_t r2,\n-\t      uint32x2_t cmp)\n+special_case (float64x2_t hi, uint64x2_t u_off, float64x2_t y, float64x2_t r2,\n+\t      uint32x2_t special, const struct data *d)\n {\n-  return v_call_f64 (log, x, vfmaq_f64 (hi, y, r2), vmovl_u32 (cmp));\n+  float64x2_t x = vreinterpretq_f64_u64 (vaddq_u64 (u_off, d->off));\n+  return v_call_f64 (log, x, vfmaq_f64 (hi, y, r2), vmovl_u32 (special));\n }\n \n+/* Double-precision vector log routine.\n+   The maximum observed error is 2.17 ULP:\n+   _ZGVnN2v_log(0x1.a6129884398a3p+0) got 0x1.ffffff1cca043p-2\n+\t\t\t\t     want 0x1.ffffff1cca045p-2.  */\n float64x2_t VPCS_ATTR V_NAME_D1 (log) (float64x2_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n-  float64x2_t z, r, r2, p, y, kd, hi;\n-  uint64x2_t ix, iz, tmp;\n-  uint32x2_t cmp;\n-  int64x2_t k;\n-  struct entry e;\n \n-  ix = vreinterpretq_u64_f64 (x);\n-  cmp = vcge_u32 (vsubhn_u64 (ix, d->min_norm),\n-\t\t  vget_low_u32 (d->special_bound));\n+  /* To avoid having to mov x out of the way, keep u after offset has been\n+     applied, and recover x by adding the offset back in the special-case\n+     handler.  */\n+  uint64x2_t u = vreinterpretq_u64_f64 (x);\n+  uint64x2_t u_off = vsubq_u64 (u, d->off);\n \n   /* x = 2^k z; where z is in range [Off,2*Off) and exact.\n      The range is split into N subintervals.\n      The ith subinterval contains z and c is near its center.  */\n-  tmp = vsubq_u64 (ix, Off);\n-  k = vshrq_n_s64 (vreinterpretq_s64_u64 (tmp), 52); /* arithmetic shift.  */\n-  iz = vsubq_u64 (ix, vandq_u64 (tmp, d->sign_exp_mask));\n-  z = vreinterpretq_f64_u64 (iz);\n-  e = lookup (tmp);\n+  int64x2_t k = vshrq_n_s64 (vreinterpretq_s64_u64 (u_off), 52);\n+  uint64x2_t iz = vsubq_u64 (u, vandq_u64 (u_off, d->sign_exp_mask));\n+  float64x2_t z = vreinterpretq_f64_u64 (iz);\n+\n+  struct entry e = lookup (u_off);\n+\n+  uint32x2_t special = vcge_u32 (vsubhn_u64 (u_off, d->offset_lower_bound),\n+\t\t\t\t vget_low_u32 (d->special_bound));\n \n   /* log(x) = log1p(z/c-1) + log(c) + k*Ln2.  */\n-  r = vfmaq_f64 (v_f64 (-1.0), z, e.invc);\n-  kd = vcvtq_f64_s64 (k);\n+  float64x2_t r = vfmaq_f64 (v_f64 (-1.0), z, e.invc);\n+  float64x2_t kd = vcvtq_f64_s64 (k);\n \n   /* hi = r + log(c) + k*Ln2.  */\n-  hi = vfmaq_f64 (vaddq_f64 (e.logc, r), kd, d->ln2);\n+  float64x2_t ln2_and_c4 = vld1q_f64 (&d->ln2);\n+  float64x2_t hi = vfmaq_laneq_f64 (vaddq_f64 (e.logc, r), kd, ln2_and_c4, 0);\n+\n   /* y = r2*(A0 + r*A1 + r2*(A2 + r*A3 + r2*A4)) + hi.  */\n-  r2 = vmulq_f64 (r, r);\n-  y = vfmaq_f64 (A (2), A (3), r);\n-  p = vfmaq_f64 (A (0), A (1), r);\n-  y = vfmaq_f64 (y, A (4), r2);\n-  y = vfmaq_f64 (p, y, r2);\n-\n-  if (__glibc_unlikely (v_any_u32h (cmp)))\n-    return special_case (x, y, hi, r2, cmp);\n+  float64x2_t odd_coeffs = vld1q_f64 (&d->c1);\n+  float64x2_t r2 = vmulq_f64 (r, r);\n+  float64x2_t y = vfmaq_laneq_f64 (d->c2, r, odd_coeffs, 1);\n+  float64x2_t p = vfmaq_laneq_f64 (d->c0, r, odd_coeffs, 0);\n+  y = vfmaq_laneq_f64 (y, r2, ln2_and_c4, 1);\n+  y = vfmaq_f64 (p, r2, y);\n+\n+  if (__glibc_unlikely (v_any_u32h (special)))\n+    return special_case (hi, u_off, y, r2, special, d);\n   return vfmaq_f64 (hi, y, r2);\n }\n\ncommit 2aed9796bfb17b257e63b12cefdb7ff60be09626\nAuthor: Pierre Blanchard <pierre.blanchard@arm.com>\nDate:   Mon Dec 9 15:55:39 2024 +0000\n\n    AArch64: Improve codegen in users of ADVSIMD log1p helper\n    \n    Add inline helper for log1p and rearrange operations so MOV\n    is not necessary in reduction or around the special-case handler.\n    Reduce memory access by using more indexed MLAs in polynomial.\n    Speedup on Neoverse V1 for log1p (3.5%), acosh (7.5%) and atanh (10%).\n    \n    (cherry picked from commit ca0c0d0f26fbf75b9cacc65122b457e8fdec40b8)\n\ndiff --git a/sysdeps/aarch64/fpu/acosh_advsimd.c b/sysdeps/aarch64/fpu/acosh_advsimd.c\nindex c88283cf11..a98f4a2e4d 100644\n--- a/sysdeps/aarch64/fpu/acosh_advsimd.c\n+++ b/sysdeps/aarch64/fpu/acosh_advsimd.c\n@@ -54,9 +54,8 @@ VPCS_ATTR float64x2_t V_NAME_D1 (acosh) (float64x2_t x)\n     x = vbslq_f64 (special, vreinterpretq_f64_u64 (d->one), x);\n #endif\n \n-  float64x2_t xm1 = vsubq_f64 (x, v_f64 (1));\n-  float64x2_t y;\n-  y = vaddq_f64 (x, v_f64 (1));\n+  float64x2_t xm1 = vsubq_f64 (x, v_f64 (1.0));\n+  float64x2_t y = vaddq_f64 (x, v_f64 (1.0));\n   y = vmulq_f64 (y, xm1);\n   y = vsqrtq_f64 (y);\n   y = vaddq_f64 (xm1, y);\ndiff --git a/sysdeps/aarch64/fpu/atanh_advsimd.c b/sysdeps/aarch64/fpu/atanh_advsimd.c\nindex 3c3d0bd6ad..eb9769aeac 100644\n--- a/sysdeps/aarch64/fpu/atanh_advsimd.c\n+++ b/sysdeps/aarch64/fpu/atanh_advsimd.c\n@@ -23,15 +23,19 @@\n const static struct data\n {\n   struct v_log1p_data log1p_consts;\n-  uint64x2_t one, half;\n+  uint64x2_t one;\n+  uint64x2_t sign_mask;\n } data = { .log1p_consts = V_LOG1P_CONSTANTS_TABLE,\n \t   .one = V2 (0x3ff0000000000000),\n-\t   .half = V2 (0x3fe0000000000000) };\n+\t   .sign_mask = V2 (0x8000000000000000) };\n \n static float64x2_t VPCS_ATTR NOINLINE\n-special_case (float64x2_t x, float64x2_t y, uint64x2_t special)\n+special_case (float64x2_t x, float64x2_t halfsign, float64x2_t y,\n+\t      uint64x2_t special, const struct data *d)\n {\n-  return v_call_f64 (atanh, x, y, special);\n+  y = log1p_inline (y, &d->log1p_consts);\n+  return v_call_f64 (atanh, vbslq_f64 (d->sign_mask, halfsign, x),\n+\t\t     vmulq_f64 (halfsign, y), special);\n }\n \n /* Approximation for vector double-precision atanh(x) using modified log1p.\n@@ -43,11 +47,10 @@ float64x2_t V_NAME_D1 (atanh) (float64x2_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n \n+  float64x2_t halfsign = vbslq_f64 (d->sign_mask, x, v_f64 (0.5));\n   float64x2_t ax = vabsq_f64 (x);\n   uint64x2_t ia = vreinterpretq_u64_f64 (ax);\n-  uint64x2_t sign = veorq_u64 (vreinterpretq_u64_f64 (x), ia);\n   uint64x2_t special = vcgeq_u64 (ia, d->one);\n-  float64x2_t halfsign = vreinterpretq_f64_u64 (vorrq_u64 (sign, d->half));\n \n #if WANT_SIMD_EXCEPT\n   ax = v_zerofy_f64 (ax, special);\n@@ -55,10 +58,15 @@ float64x2_t V_NAME_D1 (atanh) (float64x2_t x)\n \n   float64x2_t y;\n   y = vaddq_f64 (ax, ax);\n-  y = vdivq_f64 (y, vsubq_f64 (v_f64 (1), ax));\n-  y = log1p_inline (y, &d->log1p_consts);\n+  y = vdivq_f64 (y, vsubq_f64 (vreinterpretq_f64_u64 (d->one), ax));\n \n   if (__glibc_unlikely (v_any_u64 (special)))\n-    return special_case (x, vmulq_f64 (y, halfsign), special);\n+#if WANT_SIMD_EXCEPT\n+    return special_case (x, halfsign, y, special, d);\n+#else\n+    return special_case (ax, halfsign, y, special, d);\n+#endif\n+\n+  y = log1p_inline (y, &d->log1p_consts);\n   return vmulq_f64 (y, halfsign);\n }\ndiff --git a/sysdeps/aarch64/fpu/log1p_advsimd.c b/sysdeps/aarch64/fpu/log1p_advsimd.c\nindex 114064c696..1263587201 100644\n--- a/sysdeps/aarch64/fpu/log1p_advsimd.c\n+++ b/sysdeps/aarch64/fpu/log1p_advsimd.c\n@@ -17,43 +17,26 @@\n    License along with the GNU C Library; if not, see\n    <https://www.gnu.org/licenses/>.  */\n \n-#include \"v_math.h\"\n-#include \"poly_advsimd_f64.h\"\n+#define WANT_V_LOG1P_K0_SHORTCUT 0\n+#include \"v_log1p_inline.h\"\n \n const static struct data\n {\n-  float64x2_t poly[19], ln2[2];\n-  uint64x2_t hf_rt2_top, one_m_hf_rt2_top, umask, inf, minus_one;\n-  int64x2_t one_top;\n-} data = {\n-  /* Generated using Remez, deg=20, in [sqrt(2)/2-1, sqrt(2)-1].  */\n-  .poly = { V2 (-0x1.ffffffffffffbp-2), V2 (0x1.55555555551a9p-2),\n-\t    V2 (-0x1.00000000008e3p-2), V2 (0x1.9999999a32797p-3),\n-\t    V2 (-0x1.555555552fecfp-3), V2 (0x1.249248e071e5ap-3),\n-\t    V2 (-0x1.ffffff8bf8482p-4), V2 (0x1.c71c8f07da57ap-4),\n-\t    V2 (-0x1.9999ca4ccb617p-4), V2 (0x1.7459ad2e1dfa3p-4),\n-\t    V2 (-0x1.554d2680a3ff2p-4), V2 (0x1.3b4c54d487455p-4),\n-\t    V2 (-0x1.2548a9ffe80e6p-4), V2 (0x1.0f389a24b2e07p-4),\n-\t    V2 (-0x1.eee4db15db335p-5), V2 (0x1.e95b494d4a5ddp-5),\n-\t    V2 (-0x1.15fdf07cb7c73p-4), V2 (0x1.0310b70800fcfp-4),\n-\t    V2 (-0x1.cfa7385bdb37ep-6) },\n-  .ln2 = { V2 (0x1.62e42fefa3800p-1), V2 (0x1.ef35793c76730p-45) },\n-  /* top32(asuint64(sqrt(2)/2)) << 32.  */\n-  .hf_rt2_top = V2 (0x3fe6a09e00000000),\n-  /* (top32(asuint64(1)) - top32(asuint64(sqrt(2)/2))) << 32.  */\n-  .one_m_hf_rt2_top = V2 (0x00095f6200000000),\n-  .umask = V2 (0x000fffff00000000),\n-  .one_top = V2 (0x3ff),\n-  .inf = V2 (0x7ff0000000000000),\n-  .minus_one = V2 (0xbff0000000000000)\n-};\n+  struct v_log1p_data d;\n+  uint64x2_t inf, minus_one;\n+} data = { .d = V_LOG1P_CONSTANTS_TABLE,\n+\t   .inf = V2 (0x7ff0000000000000),\n+\t   .minus_one = V2 (0xbff0000000000000) };\n \n #define BottomMask v_u64 (0xffffffff)\n \n-static float64x2_t VPCS_ATTR NOINLINE\n-special_case (float64x2_t x, float64x2_t y, uint64x2_t special)\n+static float64x2_t NOINLINE VPCS_ATTR\n+special_case (float64x2_t x, uint64x2_t cmp, const struct data *d)\n {\n-  return v_call_f64 (log1p, x, y, special);\n+  /* Side-step special lanes so fenv exceptions are not triggered\n+     inadvertently.  */\n+  float64x2_t x_nospecial = v_zerofy_f64 (x, cmp);\n+  return v_call_f64 (log1p, x, log1p_inline (x_nospecial, &d->d), cmp);\n }\n \n /* Vector log1p approximation using polynomial on reduced interval. Routine is\n@@ -66,66 +49,14 @@ VPCS_ATTR float64x2_t V_NAME_D1 (log1p) (float64x2_t x)\n   const struct data *d = ptr_barrier (&data);\n   uint64x2_t ix = vreinterpretq_u64_f64 (x);\n   uint64x2_t ia = vreinterpretq_u64_f64 (vabsq_f64 (x));\n-  uint64x2_t special = vcgeq_u64 (ia, d->inf);\n \n-#if WANT_SIMD_EXCEPT\n-  special = vorrq_u64 (special,\n-\t\t       vcgeq_u64 (ix, vreinterpretq_u64_f64 (v_f64 (-1))));\n-  if (__glibc_unlikely (v_any_u64 (special)))\n-    x = v_zerofy_f64 (x, special);\n-#else\n-  special = vorrq_u64 (special, vcleq_f64 (x, v_f64 (-1)));\n-#endif\n+  uint64x2_t special_cases\n+      = vorrq_u64 (vcgeq_u64 (ia, d->inf), vcgeq_u64 (ix, d->minus_one));\n \n-  /* With x + 1 = t * 2^k (where t = f + 1 and k is chosen such that f\n-\t\t\t   is in [sqrt(2)/2, sqrt(2)]):\n-     log1p(x) = k*log(2) + log1p(f).\n+  if (__glibc_unlikely (v_any_u64 (special_cases)))\n+    return special_case (x, special_cases, d);\n \n-     f may not be representable exactly, so we need a correction term:\n-     let m = round(1 + x), c = (1 + x) - m.\n-     c << m: at very small x, log1p(x) ~ x, hence:\n-     log(1+x) - log(m) ~ c/m.\n-\n-     We therefore calculate log1p(x) by k*log2 + log1p(f) + c/m.  */\n-\n-  /* Obtain correctly scaled k by manipulation in the exponent.\n-     The scalar algorithm casts down to 32-bit at this point to calculate k and\n-     u_red. We stay in double-width to obtain f and k, using the same constants\n-     as the scalar algorithm but shifted left by 32.  */\n-  float64x2_t m = vaddq_f64 (x, v_f64 (1));\n-  uint64x2_t mi = vreinterpretq_u64_f64 (m);\n-  uint64x2_t u = vaddq_u64 (mi, d->one_m_hf_rt2_top);\n-\n-  int64x2_t ki\n-      = vsubq_s64 (vreinterpretq_s64_u64 (vshrq_n_u64 (u, 52)), d->one_top);\n-  float64x2_t k = vcvtq_f64_s64 (ki);\n-\n-  /* Reduce x to f in [sqrt(2)/2, sqrt(2)].  */\n-  uint64x2_t utop = vaddq_u64 (vandq_u64 (u, d->umask), d->hf_rt2_top);\n-  uint64x2_t u_red = vorrq_u64 (utop, vandq_u64 (mi, BottomMask));\n-  float64x2_t f = vsubq_f64 (vreinterpretq_f64_u64 (u_red), v_f64 (1));\n-\n-  /* Correction term c/m.  */\n-  float64x2_t cm = vdivq_f64 (vsubq_f64 (x, vsubq_f64 (m, v_f64 (1))), m);\n-\n-  /* Approximate log1p(x) on the reduced input using a polynomial. Because\n-     log1p(0)=0 we choose an approximation of the form:\n-       x + C0*x^2 + C1*x^3 + C2x^4 + ...\n-     Hence approximation has the form f + f^2 * P(f)\n-      where P(x) = C0 + C1*x + C2x^2 + ...\n-     Assembling this all correctly is dealt with at the final step.  */\n-  float64x2_t f2 = vmulq_f64 (f, f);\n-  float64x2_t p = v_pw_horner_18_f64 (f, f2, d->poly);\n-\n-  float64x2_t ylo = vfmaq_f64 (cm, k, d->ln2[1]);\n-  float64x2_t yhi = vfmaq_f64 (f, k, d->ln2[0]);\n-  float64x2_t y = vaddq_f64 (ylo, yhi);\n-\n-  if (__glibc_unlikely (v_any_u64 (special)))\n-    return special_case (vreinterpretq_f64_u64 (ix), vfmaq_f64 (y, f2, p),\n-\t\t\t special);\n-\n-  return vfmaq_f64 (y, f2, p);\n+  return log1p_inline (x, &d->d);\n }\n \n strong_alias (V_NAME_D1 (log1p), V_NAME_D1 (logp1))\ndiff --git a/sysdeps/aarch64/fpu/v_log1p_inline.h b/sysdeps/aarch64/fpu/v_log1p_inline.h\nindex 242e43b6ee..834ff65adf 100644\n--- a/sysdeps/aarch64/fpu/v_log1p_inline.h\n+++ b/sysdeps/aarch64/fpu/v_log1p_inline.h\n@@ -21,29 +21,30 @@\n #define AARCH64_FPU_V_LOG1P_INLINE_H\n \n #include \"v_math.h\"\n-#include \"poly_advsimd_f64.h\"\n \n struct v_log1p_data\n {\n-  float64x2_t poly[19], ln2[2];\n+  float64x2_t c0, c2, c4, c6, c8, c10, c12, c14, c16;\n   uint64x2_t hf_rt2_top, one_m_hf_rt2_top, umask;\n   int64x2_t one_top;\n+  double c1, c3, c5, c7, c9, c11, c13, c15, c17, c18;\n+  double ln2[2];\n };\n \n /* Coefficients generated using Remez, deg=20, in [sqrt(2)/2-1, sqrt(2)-1].  */\n #define V_LOG1P_CONSTANTS_TABLE                                               \\\n   {                                                                           \\\n-    .poly = { V2 (-0x1.ffffffffffffbp-2), V2 (0x1.55555555551a9p-2),          \\\n-\t      V2 (-0x1.00000000008e3p-2), V2 (0x1.9999999a32797p-3),          \\\n-\t      V2 (-0x1.555555552fecfp-3), V2 (0x1.249248e071e5ap-3),          \\\n-\t      V2 (-0x1.ffffff8bf8482p-4), V2 (0x1.c71c8f07da57ap-4),          \\\n-\t      V2 (-0x1.9999ca4ccb617p-4), V2 (0x1.7459ad2e1dfa3p-4),          \\\n-\t      V2 (-0x1.554d2680a3ff2p-4), V2 (0x1.3b4c54d487455p-4),          \\\n-\t      V2 (-0x1.2548a9ffe80e6p-4), V2 (0x1.0f389a24b2e07p-4),          \\\n-\t      V2 (-0x1.eee4db15db335p-5), V2 (0x1.e95b494d4a5ddp-5),          \\\n-\t      V2 (-0x1.15fdf07cb7c73p-4), V2 (0x1.0310b70800fcfp-4),          \\\n-\t      V2 (-0x1.cfa7385bdb37ep-6) },                                   \\\n-    .ln2 = { V2 (0x1.62e42fefa3800p-1), V2 (0x1.ef35793c76730p-45) },         \\\n+    .c0 = V2 (-0x1.ffffffffffffbp-2), .c1 = 0x1.55555555551a9p-2,             \\\n+    .c2 = V2 (-0x1.00000000008e3p-2), .c3 = 0x1.9999999a32797p-3,             \\\n+    .c4 = V2 (-0x1.555555552fecfp-3), .c5 = 0x1.249248e071e5ap-3,             \\\n+    .c6 = V2 (-0x1.ffffff8bf8482p-4), .c7 = 0x1.c71c8f07da57ap-4,             \\\n+    .c8 = V2 (-0x1.9999ca4ccb617p-4), .c9 = 0x1.7459ad2e1dfa3p-4,             \\\n+    .c10 = V2 (-0x1.554d2680a3ff2p-4), .c11 = 0x1.3b4c54d487455p-4,           \\\n+    .c12 = V2 (-0x1.2548a9ffe80e6p-4), .c13 = 0x1.0f389a24b2e07p-4,           \\\n+    .c14 = V2 (-0x1.eee4db15db335p-5), .c15 = 0x1.e95b494d4a5ddp-5,           \\\n+    .c16 = V2 (-0x1.15fdf07cb7c73p-4), .c17 = 0x1.0310b70800fcfp-4,           \\\n+    .c18 = -0x1.cfa7385bdb37ep-6,                                             \\\n+    .ln2 = { 0x1.62e42fefa3800p-1, 0x1.ef35793c76730p-45 },                   \\\n     .hf_rt2_top = V2 (0x3fe6a09e00000000),                                    \\\n     .one_m_hf_rt2_top = V2 (0x00095f6200000000),                              \\\n     .umask = V2 (0x000fffff00000000), .one_top = V2 (0x3ff)                   \\\n@@ -51,19 +52,45 @@ struct v_log1p_data\n \n #define BottomMask v_u64 (0xffffffff)\n \n+static inline float64x2_t\n+eval_poly (float64x2_t m, float64x2_t m2, const struct v_log1p_data *d)\n+{\n+  /* Approximate log(1+m) on [-0.25, 0.5] using pairwise Horner.  */\n+  float64x2_t c13 = vld1q_f64 (&d->c1);\n+  float64x2_t c57 = vld1q_f64 (&d->c5);\n+  float64x2_t c911 = vld1q_f64 (&d->c9);\n+  float64x2_t c1315 = vld1q_f64 (&d->c13);\n+  float64x2_t c1718 = vld1q_f64 (&d->c17);\n+  float64x2_t p1617 = vfmaq_laneq_f64 (d->c16, m, c1718, 0);\n+  float64x2_t p1415 = vfmaq_laneq_f64 (d->c14, m, c1315, 1);\n+  float64x2_t p1213 = vfmaq_laneq_f64 (d->c12, m, c1315, 0);\n+  float64x2_t p1011 = vfmaq_laneq_f64 (d->c10, m, c911, 1);\n+  float64x2_t p89 = vfmaq_laneq_f64 (d->c8, m, c911, 0);\n+  float64x2_t p67 = vfmaq_laneq_f64 (d->c6, m, c57, 1);\n+  float64x2_t p45 = vfmaq_laneq_f64 (d->c4, m, c57, 0);\n+  float64x2_t p23 = vfmaq_laneq_f64 (d->c2, m, c13, 1);\n+  float64x2_t p01 = vfmaq_laneq_f64 (d->c0, m, c13, 0);\n+  float64x2_t p = vfmaq_laneq_f64 (p1617, m2, c1718, 1);\n+  p = vfmaq_f64 (p1415, m2, p);\n+  p = vfmaq_f64 (p1213, m2, p);\n+  p = vfmaq_f64 (p1011, m2, p);\n+  p = vfmaq_f64 (p89, m2, p);\n+  p = vfmaq_f64 (p67, m2, p);\n+  p = vfmaq_f64 (p45, m2, p);\n+  p = vfmaq_f64 (p23, m2, p);\n+  return vfmaq_f64 (p01, m2, p);\n+}\n+\n static inline float64x2_t\n log1p_inline (float64x2_t x, const struct v_log1p_data *d)\n {\n-  /* Helper for calculating log(x + 1). Copied from v_log1p_2u5.c, with several\n-     modifications:\n+  /* Helper for calculating log(x + 1):\n      - No special-case handling - this should be dealt with by the caller.\n-     - Pairwise Horner polynomial evaluation for improved accuracy.\n      - Optionally simulate the shortcut for k=0, used in the scalar routine,\n-       using v_sel, for improved accuracy when the argument to log1p is close to\n-       0. This feature is enabled by defining WANT_V_LOG1P_K0_SHORTCUT as 1 in\n-       the source of the caller before including this file.\n-     See v_log1pf_2u1.c for details of the algorithm.  */\n-  float64x2_t m = vaddq_f64 (x, v_f64 (1));\n+       using v_sel, for improved accuracy when the argument to log1p is close\n+       to 0. This feature is enabled by defining WANT_V_LOG1P_K0_SHORTCUT as 1\n+       in the source of the caller before including this file.  */\n+  float64x2_t m = vaddq_f64 (x, v_f64 (1.0));\n   uint64x2_t mi = vreinterpretq_u64_f64 (m);\n   uint64x2_t u = vaddq_u64 (mi, d->one_m_hf_rt2_top);\n \n@@ -74,14 +101,14 @@ log1p_inline (float64x2_t x, const struct v_log1p_data *d)\n   /* Reduce x to f in [sqrt(2)/2, sqrt(2)].  */\n   uint64x2_t utop = vaddq_u64 (vandq_u64 (u, d->umask), d->hf_rt2_top);\n   uint64x2_t u_red = vorrq_u64 (utop, vandq_u64 (mi, BottomMask));\n-  float64x2_t f = vsubq_f64 (vreinterpretq_f64_u64 (u_red), v_f64 (1));\n+  float64x2_t f = vsubq_f64 (vreinterpretq_f64_u64 (u_red), v_f64 (1.0));\n \n   /* Correction term c/m.  */\n-  float64x2_t cm = vdivq_f64 (vsubq_f64 (x, vsubq_f64 (m, v_f64 (1))), m);\n+  float64x2_t cm = vdivq_f64 (vsubq_f64 (x, vsubq_f64 (m, v_f64 (1.0))), m);\n \n #ifndef WANT_V_LOG1P_K0_SHORTCUT\n-#error                                                                         \\\n-  \"Cannot use v_log1p_inline.h without specifying whether you need the k0 shortcut for greater accuracy close to 0\"\n+# error                                                                       \\\n+      \"Cannot use v_log1p_inline.h without specifying whether you need the k0 shortcut for greater accuracy close to 0\"\n #elif WANT_V_LOG1P_K0_SHORTCUT\n   /* Shortcut if k is 0 - set correction term to 0 and f to x. The result is\n      that the approximation is solely the polynomial.  */\n@@ -92,11 +119,12 @@ log1p_inline (float64x2_t x, const struct v_log1p_data *d)\n \n   /* Approximate log1p(f) on the reduced input using a polynomial.  */\n   float64x2_t f2 = vmulq_f64 (f, f);\n-  float64x2_t p = v_pw_horner_18_f64 (f, f2, d->poly);\n+  float64x2_t p = eval_poly (f, f2, d);\n \n   /* Assemble log1p(x) = k * log2 + log1p(f) + c/m.  */\n-  float64x2_t ylo = vfmaq_f64 (cm, k, d->ln2[1]);\n-  float64x2_t yhi = vfmaq_f64 (f, k, d->ln2[0]);\n+  float64x2_t ln2 = vld1q_f64 (&d->ln2[0]);\n+  float64x2_t ylo = vfmaq_laneq_f64 (cm, k, ln2, 1);\n+  float64x2_t yhi = vfmaq_laneq_f64 (f, k, ln2, 0);\n   return vfmaq_f64 (vaddq_f64 (ylo, yhi), f2, p);\n }\n \n\ncommit 9170b921fa49d2ef37141506837baaae92c7d3f8\nAuthor: Joana Cruz <Joana.Cruz@arm.com>\nDate:   Tue Dec 17 14:47:31 2024 +0000\n\n    AArch64: Improve codegen of AdvSIMD logf function family\n    \n    Load the polynomial evaluation coefficients into 2 vectors and use lanewise MLAs.\n    8% improvement in throughput microbenchmark on Neoverse V1 for log2 and log,\n    and 2% for log10.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit d6e034f5b222a9ed1aeb5de0c0c7d0dda8b63da3)\n\ndiff --git a/sysdeps/aarch64/fpu/log10f_advsimd.c b/sysdeps/aarch64/fpu/log10f_advsimd.c\nindex 82228b599a..0d792c3df9 100644\n--- a/sysdeps/aarch64/fpu/log10f_advsimd.c\n+++ b/sysdeps/aarch64/fpu/log10f_advsimd.c\n@@ -18,21 +18,25 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include \"v_math.h\"\n-#include \"poly_advsimd_f32.h\"\n \n static const struct data\n {\n+  float32x4_t c0, c2, c4, c6, inv_ln10, ln2;\n   uint32x4_t off, offset_lower_bound;\n   uint16x8_t special_bound;\n   uint32x4_t mantissa_mask;\n-  float32x4_t poly[8];\n-  float32x4_t inv_ln10, ln2;\n+  float c1, c3, c5, c7;\n } data = {\n   /* Use order 9 for log10(1+x), i.e. order 8 for log10(1+x)/x, with x in\n       [-1/3, 1/3] (offset=2/3). Max. relative error: 0x1.068ee468p-25.  */\n-  .poly = { V4 (-0x1.bcb79cp-3f), V4 (0x1.2879c8p-3f), V4 (-0x1.bcd472p-4f),\n-\t    V4 (0x1.6408f8p-4f), V4 (-0x1.246f8p-4f), V4 (0x1.f0e514p-5f),\n-\t    V4 (-0x1.0fc92cp-4f), V4 (0x1.f5f76ap-5f) },\n+  .c0 = V4 (-0x1.bcb79cp-3f),\n+  .c1 = 0x1.2879c8p-3f,\n+  .c2 = V4 (-0x1.bcd472p-4f),\n+  .c3 = 0x1.6408f8p-4f,\n+  .c4 = V4 (-0x1.246f8p-4f),\n+  .c5 = 0x1.f0e514p-5f,\n+  .c6 = V4 (-0x1.0fc92cp-4f),\n+  .c7 = 0x1.f5f76ap-5f,\n   .ln2 = V4 (0x1.62e43p-1f),\n   .inv_ln10 = V4 (0x1.bcb7b2p-2f),\n   /* Lower bound is the smallest positive normal float 0x00800000. For\n@@ -62,7 +66,7 @@ special_case (float32x4_t y, uint32x4_t u_off, float32x4_t p, float32x4_t r2,\n float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (log10) (float32x4_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n-\n+  float32x4_t c1357 = vld1q_f32 (&d->c1);\n   /* To avoid having to mov x out of the way, keep u after offset has been\n      applied, and recover x by adding the offset back in the special-case\n      handler.  */\n@@ -81,7 +85,16 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (log10) (float32x4_t x)\n \n   /* y = log10(1+r) + n * log10(2).  */\n   float32x4_t r2 = vmulq_f32 (r, r);\n-  float32x4_t poly = v_pw_horner_7_f32 (r, r2, d->poly);\n+\n+  float32x4_t c01 = vfmaq_laneq_f32 (d->c0, r, c1357, 0);\n+  float32x4_t c23 = vfmaq_laneq_f32 (d->c2, r, c1357, 1);\n+  float32x4_t c45 = vfmaq_laneq_f32 (d->c4, r, c1357, 2);\n+  float32x4_t c67 = vfmaq_laneq_f32 (d->c6, r, c1357, 3);\n+\n+  float32x4_t p47 = vfmaq_f32 (c45, r2, c67);\n+  float32x4_t p27 = vfmaq_f32 (c23, r2, p47);\n+  float32x4_t poly = vfmaq_f32 (c01, r2, p27);\n+\n   /* y = Log10(2) * n + poly * InvLn(10).  */\n   float32x4_t y = vfmaq_f32 (r, d->ln2, n);\n   y = vmulq_f32 (y, d->inv_ln10);\ndiff --git a/sysdeps/aarch64/fpu/log2f_advsimd.c b/sysdeps/aarch64/fpu/log2f_advsimd.c\nindex 84effe4fe9..116c36c8e2 100644\n--- a/sysdeps/aarch64/fpu/log2f_advsimd.c\n+++ b/sysdeps/aarch64/fpu/log2f_advsimd.c\n@@ -18,22 +18,27 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include \"v_math.h\"\n-#include \"poly_advsimd_f32.h\"\n \n static const struct data\n {\n+  float32x4_t c0, c2, c4, c6, c8;\n   uint32x4_t off, offset_lower_bound;\n   uint16x8_t special_bound;\n   uint32x4_t mantissa_mask;\n-  float32x4_t poly[9];\n+  float c1, c3, c5, c7;\n } data = {\n   /* Coefficients generated using Remez algorithm approximate\n      log2(1+r)/r for r in [ -1/3, 1/3 ].\n      rel error: 0x1.c4c4b0cp-26.  */\n-  .poly = { V4 (0x1.715476p0f), /* (float)(1 / ln(2)).  */\n-\t    V4 (-0x1.715458p-1f), V4 (0x1.ec701cp-2f), V4 (-0x1.7171a4p-2f),\n-\t    V4 (0x1.27a0b8p-2f), V4 (-0x1.e5143ep-3f), V4 (0x1.9d8ecap-3f),\n-\t    V4 (-0x1.c675bp-3f), V4 (0x1.9e495p-3f) },\n+  .c0 = V4 (0x1.715476p0f), /* (float)(1 / ln(2)).  */\n+  .c1 = -0x1.715458p-1f,\n+  .c2 = V4 (0x1.ec701cp-2f),\n+  .c3 = -0x1.7171a4p-2f,\n+  .c4 = V4 (0x1.27a0b8p-2f),\n+  .c5 = -0x1.e5143ep-3f,\n+  .c6 = V4 (0x1.9d8ecap-3f),\n+  .c7 = -0x1.c675bp-3f,\n+  .c8 = V4 (0x1.9e495p-3f),\n   /* Lower bound is the smallest positive normal float 0x00800000. For\n      optimised register use subnormals are detected after offset has been\n      subtracted, so lower bound is 0x0080000 - offset (which wraps around).  */\n@@ -79,11 +84,21 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (log2) (float32x4_t x)\n \n   /* y = log2(1+r) + n.  */\n   float32x4_t r2 = vmulq_f32 (r, r);\n-  float32x4_t p = v_pw_horner_8_f32 (r, r2, d->poly);\n+\n+  float32x4_t c1357 = vld1q_f32 (&d->c1);\n+  float32x4_t c01 = vfmaq_laneq_f32 (d->c0, r, c1357, 0);\n+  float32x4_t c23 = vfmaq_laneq_f32 (d->c2, r, c1357, 1);\n+  float32x4_t c45 = vfmaq_laneq_f32 (d->c4, r, c1357, 2);\n+  float32x4_t c67 = vfmaq_laneq_f32 (d->c6, r, c1357, 3);\n+  float32x4_t p68 = vfmaq_f32 (c67, r2, d->c8);\n+  float32x4_t p48 = vfmaq_f32 (c45, r2, p68);\n+  float32x4_t p28 = vfmaq_f32 (c23, r2, p48);\n+  float32x4_t p = vfmaq_f32 (c01, r2, p28);\n \n   if (__glibc_unlikely (v_any_u16h (special)))\n     return special_case (n, u_off, p, r, special, d);\n   return vfmaq_f32 (n, p, r);\n }\n+\n libmvec_hidden_def (V_NAME_F1 (log2))\n HALF_WIDTH_ALIAS_F1 (log2)\ndiff --git a/sysdeps/aarch64/fpu/logf_advsimd.c b/sysdeps/aarch64/fpu/logf_advsimd.c\nindex c20dbfd6c0..d9e64c732d 100644\n--- a/sysdeps/aarch64/fpu/logf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/logf_advsimd.c\n@@ -21,16 +21,19 @@\n \n static const struct data\n {\n-  uint32x4_t off, offset_lower_bound;\n+  float32x4_t c2, c4, c6, ln2;\n+  uint32x4_t off, offset_lower_bound, mantissa_mask;\n   uint16x8_t special_bound;\n-  uint32x4_t mantissa_mask;\n-  float32x4_t poly[7];\n-  float32x4_t ln2;\n+  float c1, c3, c5, c0;\n } data = {\n   /* 3.34 ulp error.  */\n-  .poly = { V4 (-0x1.3e737cp-3f), V4 (0x1.5a9aa2p-3f), V4 (-0x1.4f9934p-3f),\n-\t    V4 (0x1.961348p-3f), V4 (-0x1.00187cp-2f), V4 (0x1.555d7cp-2f),\n-\t    V4 (-0x1.ffffc8p-2f) },\n+  .c0 = -0x1.3e737cp-3f,\n+  .c1 = 0x1.5a9aa2p-3f,\n+  .c2 = V4 (-0x1.4f9934p-3f),\n+  .c3 = 0x1.961348p-3f,\n+  .c4 = V4 (-0x1.00187cp-2f),\n+  .c5 = 0x1.555d7cp-2f,\n+  .c6 = V4 (-0x1.ffffc8p-2f),\n   .ln2 = V4 (0x1.62e43p-1f),\n   /* Lower bound is the smallest positive normal float 0x00800000. For\n      optimised register use subnormals are detected after offset has been\n@@ -41,8 +44,6 @@ static const struct data\n   .mantissa_mask = V4 (0x007fffff)\n };\n \n-#define P(i) d->poly[7 - i]\n-\n static float32x4_t VPCS_ATTR NOINLINE\n special_case (float32x4_t p, uint32x4_t u_off, float32x4_t y, float32x4_t r2,\n \t      uint16x4_t cmp, const struct data *d)\n@@ -55,33 +56,30 @@ special_case (float32x4_t p, uint32x4_t u_off, float32x4_t y, float32x4_t r2,\n float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (log) (float32x4_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n-  float32x4_t n, p, q, r, r2, y;\n-  uint32x4_t u, u_off;\n-  uint16x4_t cmp;\n+  float32x4_t c1350 = vld1q_f32 (&d->c1);\n \n   /* To avoid having to mov x out of the way, keep u after offset has been\n      applied, and recover x by adding the offset back in the special-case\n      handler.  */\n-  u_off = vreinterpretq_u32_f32 (x);\n+  uint32x4_t u_off = vsubq_u32 (vreinterpretq_u32_f32 (x), d->off);\n \n   /* x = 2^n * (1+r), where 2/3 < 1+r < 4/3.  */\n-  u_off = vsubq_u32 (u_off, d->off);\n-  n = vcvtq_f32_s32 (\n+  float32x4_t n = vcvtq_f32_s32 (\n       vshrq_n_s32 (vreinterpretq_s32_u32 (u_off), 23)); /* signextend.  */\n-  u = vandq_u32 (u_off, d->mantissa_mask);\n-  u = vaddq_u32 (u, d->off);\n-  r = vsubq_f32 (vreinterpretq_f32_u32 (u), v_f32 (1.0f));\n+  uint16x4_t cmp = vcge_u16 (vsubhn_u32 (u_off, d->offset_lower_bound),\n+\t\t\t     vget_low_u16 (d->special_bound));\n \n-  cmp = vcge_u16 (vsubhn_u32 (u_off, d->offset_lower_bound),\n-\t\t  vget_low_u16 (d->special_bound));\n+  uint32x4_t u = vaddq_u32 (vandq_u32 (u_off, d->mantissa_mask), d->off);\n+  float32x4_t r = vsubq_f32 (vreinterpretq_f32_u32 (u), v_f32 (1.0f));\n \n   /* y = log(1+r) + n*ln2.  */\n-  r2 = vmulq_f32 (r, r);\n+  float32x4_t r2 = vmulq_f32 (r, r);\n   /* n*ln2 + r + r2*(P1 + r*P2 + r2*(P3 + r*P4 + r2*(P5 + r*P6 + r2*P7))).  */\n-  p = vfmaq_f32 (P (5), P (6), r);\n-  q = vfmaq_f32 (P (3), P (4), r);\n-  y = vfmaq_f32 (P (1), P (2), r);\n-  p = vfmaq_f32 (p, P (7), r2);\n+  float32x4_t p = vfmaq_laneq_f32 (d->c2, r, c1350, 0);\n+  float32x4_t q = vfmaq_laneq_f32 (d->c4, r, c1350, 1);\n+  float32x4_t y = vfmaq_laneq_f32 (d->c6, r, c1350, 2);\n+  p = vfmaq_laneq_f32 (p, r2, c1350, 3);\n+\n   q = vfmaq_f32 (q, p, r2);\n   y = vfmaq_f32 (y, q, r2);\n   p = vfmaq_f32 (r, d->ln2, n);\n\ncommit 41dc9e7c2d80bc5e886950b8a7bd21f77c9793b3\nAuthor: Joana Cruz <Joana.Cruz@arm.com>\nDate:   Tue Dec 17 14:49:30 2024 +0000\n\n    AArch64: Improve codegen of AdvSIMD atan(2)(f)\n    \n    Load the polynomial evaluation coefficients into 2 vectors and use lanewise MLAs.\n    8% improvement in throughput microbenchmark on Neoverse V1.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit 6914774b9d3460876d9ad4482782213ec01a752e)\n\ndiff --git a/sysdeps/aarch64/fpu/atan2_advsimd.c b/sysdeps/aarch64/fpu/atan2_advsimd.c\nindex b1e7a9b8fc..1a8f02109f 100644\n--- a/sysdeps/aarch64/fpu/atan2_advsimd.c\n+++ b/sysdeps/aarch64/fpu/atan2_advsimd.c\n@@ -23,40 +23,57 @@\n \n static const struct data\n {\n+  float64x2_t c0, c2, c4, c6, c8, c10, c12, c14, c16, c18;\n   float64x2_t pi_over_2;\n-  float64x2_t poly[20];\n+  double c1, c3, c5, c7, c9, c11, c13, c15, c17, c19;\n+  uint64x2_t zeroinfnan, minustwo;\n } data = {\n   /* Coefficients of polynomial P such that atan(x)~x+x*P(x^2) on\n-     the interval [2**-1022, 1.0].  */\n-  .poly = { V2 (-0x1.5555555555555p-2),\t V2 (0x1.99999999996c1p-3),\n-\t    V2 (-0x1.2492492478f88p-3),\t V2 (0x1.c71c71bc3951cp-4),\n-\t    V2 (-0x1.745d160a7e368p-4),\t V2 (0x1.3b139b6a88ba1p-4),\n-\t    V2 (-0x1.11100ee084227p-4),\t V2 (0x1.e1d0f9696f63bp-5),\n-\t    V2 (-0x1.aebfe7b418581p-5),\t V2 (0x1.842dbe9b0d916p-5),\n-\t    V2 (-0x1.5d30140ae5e99p-5),\t V2 (0x1.338e31eb2fbbcp-5),\n-\t    V2 (-0x1.00e6eece7de8p-5),\t V2 (0x1.860897b29e5efp-6),\n-\t    V2 (-0x1.0051381722a59p-6),\t V2 (0x1.14e9dc19a4a4ep-7),\n-\t    V2 (-0x1.d0062b42fe3bfp-9),\t V2 (0x1.17739e210171ap-10),\n-\t    V2 (-0x1.ab24da7be7402p-13), V2 (0x1.358851160a528p-16), },\n+\t      [2**-1022, 1.0].  */\n+  .c0 = V2 (-0x1.5555555555555p-2),\n+  .c1 = 0x1.99999999996c1p-3,\n+  .c2 = V2 (-0x1.2492492478f88p-3),\n+  .c3 = 0x1.c71c71bc3951cp-4,\n+  .c4 = V2 (-0x1.745d160a7e368p-4),\n+  .c5 = 0x1.3b139b6a88ba1p-4,\n+  .c6 = V2 (-0x1.11100ee084227p-4),\n+  .c7 = 0x1.e1d0f9696f63bp-5,\n+  .c8 = V2 (-0x1.aebfe7b418581p-5),\n+  .c9 = 0x1.842dbe9b0d916p-5,\n+  .c10 = V2 (-0x1.5d30140ae5e99p-5),\n+  .c11 = 0x1.338e31eb2fbbcp-5,\n+  .c12 = V2 (-0x1.00e6eece7de8p-5),\n+  .c13 = 0x1.860897b29e5efp-6,\n+  .c14 = V2 (-0x1.0051381722a59p-6),\n+  .c15 = 0x1.14e9dc19a4a4ep-7,\n+  .c16 = V2 (-0x1.d0062b42fe3bfp-9),\n+  .c17 = 0x1.17739e210171ap-10,\n+  .c18 = V2 (-0x1.ab24da7be7402p-13),\n+  .c19 = 0x1.358851160a528p-16,\n   .pi_over_2 = V2 (0x1.921fb54442d18p+0),\n+  .zeroinfnan = V2 (2 * 0x7ff0000000000000ul - 1),\n+  .minustwo = V2 (0xc000000000000000),\n };\n \n #define SignMask v_u64 (0x8000000000000000)\n \n /* Special cases i.e. 0, infinity, NaN (fall back to scalar calls).  */\n static float64x2_t VPCS_ATTR NOINLINE\n-special_case (float64x2_t y, float64x2_t x, float64x2_t ret, uint64x2_t cmp)\n+special_case (float64x2_t y, float64x2_t x, float64x2_t ret,\n+\t      uint64x2_t sign_xy, uint64x2_t cmp)\n {\n+  /* Account for the sign of x and y.  */\n+  ret = vreinterpretq_f64_u64 (\n+      veorq_u64 (vreinterpretq_u64_f64 (ret), sign_xy));\n   return v_call2_f64 (atan2, y, x, ret, cmp);\n }\n \n /* Returns 1 if input is the bit representation of 0, infinity or nan.  */\n static inline uint64x2_t\n-zeroinfnan (uint64x2_t i)\n+zeroinfnan (uint64x2_t i, const struct data *d)\n {\n   /* (2 * i - 1) >= (2 * asuint64 (INFINITY) - 1).  */\n-  return vcgeq_u64 (vsubq_u64 (vaddq_u64 (i, i), v_u64 (1)),\n-\t\t    v_u64 (2 * asuint64 (INFINITY) - 1));\n+  return vcgeq_u64 (vsubq_u64 (vaddq_u64 (i, i), v_u64 (1)), d->zeroinfnan);\n }\n \n /* Fast implementation of vector atan2.\n@@ -66,12 +83,13 @@ zeroinfnan (uint64x2_t i)\n        want 0x1.92d628ab678cfp-1.  */\n float64x2_t VPCS_ATTR V_NAME_D2 (atan2) (float64x2_t y, float64x2_t x)\n {\n-  const struct data *data_ptr = ptr_barrier (&data);\n+  const struct data *d = ptr_barrier (&data);\n \n   uint64x2_t ix = vreinterpretq_u64_f64 (x);\n   uint64x2_t iy = vreinterpretq_u64_f64 (y);\n \n-  uint64x2_t special_cases = vorrq_u64 (zeroinfnan (ix), zeroinfnan (iy));\n+  uint64x2_t special_cases\n+      = vorrq_u64 (zeroinfnan (ix, d), zeroinfnan (iy, d));\n \n   uint64x2_t sign_x = vandq_u64 (ix, SignMask);\n   uint64x2_t sign_y = vandq_u64 (iy, SignMask);\n@@ -81,18 +99,18 @@ float64x2_t VPCS_ATTR V_NAME_D2 (atan2) (float64x2_t y, float64x2_t x)\n   float64x2_t ay = vabsq_f64 (y);\n \n   uint64x2_t pred_xlt0 = vcltzq_f64 (x);\n-  uint64x2_t pred_aygtax = vcgtq_f64 (ay, ax);\n+  uint64x2_t pred_aygtax = vcagtq_f64 (y, x);\n \n   /* Set up z for call to atan.  */\n   float64x2_t n = vbslq_f64 (pred_aygtax, vnegq_f64 (ax), ay);\n-  float64x2_t d = vbslq_f64 (pred_aygtax, ay, ax);\n-  float64x2_t z = vdivq_f64 (n, d);\n+  float64x2_t q = vbslq_f64 (pred_aygtax, ay, ax);\n+  float64x2_t z = vdivq_f64 (n, q);\n \n   /* Work out the correct shift.  */\n-  float64x2_t shift = vreinterpretq_f64_u64 (\n-      vandq_u64 (pred_xlt0, vreinterpretq_u64_f64 (v_f64 (-2.0))));\n+  float64x2_t shift\n+      = vreinterpretq_f64_u64 (vandq_u64 (pred_xlt0, d->minustwo));\n   shift = vbslq_f64 (pred_aygtax, vaddq_f64 (shift, v_f64 (1.0)), shift);\n-  shift = vmulq_f64 (shift, data_ptr->pi_over_2);\n+  shift = vmulq_f64 (shift, d->pi_over_2);\n \n   /* Calculate the polynomial approximation.\n      Use split Estrin scheme for P(z^2) with deg(P)=19. Use split instead of\n@@ -103,20 +121,52 @@ float64x2_t VPCS_ATTR V_NAME_D2 (atan2) (float64x2_t y, float64x2_t x)\n   float64x2_t x2 = vmulq_f64 (z2, z2);\n   float64x2_t x4 = vmulq_f64 (x2, x2);\n   float64x2_t x8 = vmulq_f64 (x4, x4);\n-  float64x2_t ret\n-      = vfmaq_f64 (v_estrin_7_f64 (z2, x2, x4, data_ptr->poly),\n-\t\t   v_estrin_11_f64 (z2, x2, x4, x8, data_ptr->poly + 8), x8);\n+\n+  float64x2_t c13 = vld1q_f64 (&d->c1);\n+  float64x2_t c57 = vld1q_f64 (&d->c5);\n+  float64x2_t c911 = vld1q_f64 (&d->c9);\n+  float64x2_t c1315 = vld1q_f64 (&d->c13);\n+  float64x2_t c1719 = vld1q_f64 (&d->c17);\n+\n+  /* estrin_7.  */\n+  float64x2_t p01 = vfmaq_laneq_f64 (d->c0, z2, c13, 0);\n+  float64x2_t p23 = vfmaq_laneq_f64 (d->c2, z2, c13, 1);\n+  float64x2_t p03 = vfmaq_f64 (p01, x2, p23);\n+\n+  float64x2_t p45 = vfmaq_laneq_f64 (d->c4, z2, c57, 0);\n+  float64x2_t p67 = vfmaq_laneq_f64 (d->c6, z2, c57, 1);\n+  float64x2_t p47 = vfmaq_f64 (p45, x2, p67);\n+\n+  float64x2_t p07 = vfmaq_f64 (p03, x4, p47);\n+\n+  /* estrin_11.  */\n+  float64x2_t p89 = vfmaq_laneq_f64 (d->c8, z2, c911, 0);\n+  float64x2_t p1011 = vfmaq_laneq_f64 (d->c10, z2, c911, 1);\n+  float64x2_t p811 = vfmaq_f64 (p89, x2, p1011);\n+\n+  float64x2_t p1213 = vfmaq_laneq_f64 (d->c12, z2, c1315, 0);\n+  float64x2_t p1415 = vfmaq_laneq_f64 (d->c14, z2, c1315, 1);\n+  float64x2_t p1215 = vfmaq_f64 (p1213, x2, p1415);\n+\n+  float64x2_t p1617 = vfmaq_laneq_f64 (d->c16, z2, c1719, 0);\n+  float64x2_t p1819 = vfmaq_laneq_f64 (d->c18, z2, c1719, 1);\n+  float64x2_t p1619 = vfmaq_f64 (p1617, x2, p1819);\n+\n+  float64x2_t p815 = vfmaq_f64 (p811, x4, p1215);\n+  float64x2_t p819 = vfmaq_f64 (p815, x8, p1619);\n+\n+  float64x2_t ret = vfmaq_f64 (p07, p819, x8);\n \n   /* Finalize. y = shift + z + z^3 * P(z^2).  */\n   ret = vfmaq_f64 (z, ret, vmulq_f64 (z2, z));\n   ret = vaddq_f64 (ret, shift);\n \n+  if (__glibc_unlikely (v_any_u64 (special_cases)))\n+    return special_case (y, x, ret, sign_xy, special_cases);\n+\n   /* Account for the sign of x and y.  */\n   ret = vreinterpretq_f64_u64 (\n       veorq_u64 (vreinterpretq_u64_f64 (ret), sign_xy));\n \n-  if (__glibc_unlikely (v_any_u64 (special_cases)))\n-    return special_case (y, x, ret, special_cases);\n-\n   return ret;\n }\ndiff --git a/sysdeps/aarch64/fpu/atan2f_advsimd.c b/sysdeps/aarch64/fpu/atan2f_advsimd.c\nindex 56e610caf1..88daacd76c 100644\n--- a/sysdeps/aarch64/fpu/atan2f_advsimd.c\n+++ b/sysdeps/aarch64/fpu/atan2f_advsimd.c\n@@ -22,34 +22,39 @@\n \n static const struct data\n {\n-  float32x4_t poly[8];\n-  float32x4_t pi_over_2;\n+  float32x4_t c0, pi_over_2, c4, c6, c2;\n+  float c1, c3, c5, c7;\n+  uint32x4_t comp_const;\n } data = {\n   /* Coefficients of polynomial P such that atan(x)~x+x*P(x^2) on\n      [2**-128, 1.0].\n      Generated using fpminimax between FLT_MIN and 1.  */\n-  .poly = { V4 (-0x1.55555p-2f), V4 (0x1.99935ep-3f), V4 (-0x1.24051ep-3f),\n-\t    V4 (0x1.bd7368p-4f), V4 (-0x1.491f0ep-4f), V4 (0x1.93a2c0p-5f),\n-\t    V4 (-0x1.4c3c60p-6f), V4 (0x1.01fd88p-8f) },\n-  .pi_over_2 = V4 (0x1.921fb6p+0f),\n+  .c0 = V4 (-0x1.55555p-2f),\t    .c1 = 0x1.99935ep-3f,\n+  .c2 = V4 (-0x1.24051ep-3f),\t    .c3 = 0x1.bd7368p-4f,\n+  .c4 = V4 (-0x1.491f0ep-4f),\t    .c5 = 0x1.93a2c0p-5f,\n+  .c6 = V4 (-0x1.4c3c60p-6f),\t    .c7 = 0x1.01fd88p-8f,\n+  .pi_over_2 = V4 (0x1.921fb6p+0f), .comp_const = V4 (2 * 0x7f800000lu - 1),\n };\n \n #define SignMask v_u32 (0x80000000)\n \n /* Special cases i.e. 0, infinity and nan (fall back to scalar calls).  */\n static float32x4_t VPCS_ATTR NOINLINE\n-special_case (float32x4_t y, float32x4_t x, float32x4_t ret, uint32x4_t cmp)\n+special_case (float32x4_t y, float32x4_t x, float32x4_t ret,\n+\t      uint32x4_t sign_xy, uint32x4_t cmp)\n {\n+  /* Account for the sign of y.  */\n+  ret = vreinterpretq_f32_u32 (\n+      veorq_u32 (vreinterpretq_u32_f32 (ret), sign_xy));\n   return v_call2_f32 (atan2f, y, x, ret, cmp);\n }\n \n /* Returns 1 if input is the bit representation of 0, infinity or nan.  */\n static inline uint32x4_t\n-zeroinfnan (uint32x4_t i)\n+zeroinfnan (uint32x4_t i, const struct data *d)\n {\n   /* 2 * i - 1 >= 2 * 0x7f800000lu - 1.  */\n-  return vcgeq_u32 (vsubq_u32 (vmulq_n_u32 (i, 2), v_u32 (1)),\n-\t\t    v_u32 (2 * 0x7f800000lu - 1));\n+  return vcgeq_u32 (vsubq_u32 (vmulq_n_u32 (i, 2), v_u32 (1)), d->comp_const);\n }\n \n /* Fast implementation of vector atan2f. Maximum observed error is\n@@ -58,12 +63,13 @@ zeroinfnan (uint32x4_t i)\n \t\t\t\t\t\t want 0x1.967f00p-1.  */\n float32x4_t VPCS_ATTR NOINLINE V_NAME_F2 (atan2) (float32x4_t y, float32x4_t x)\n {\n-  const struct data *data_ptr = ptr_barrier (&data);\n+  const struct data *d = ptr_barrier (&data);\n \n   uint32x4_t ix = vreinterpretq_u32_f32 (x);\n   uint32x4_t iy = vreinterpretq_u32_f32 (y);\n \n-  uint32x4_t special_cases = vorrq_u32 (zeroinfnan (ix), zeroinfnan (iy));\n+  uint32x4_t special_cases\n+      = vorrq_u32 (zeroinfnan (ix, d), zeroinfnan (iy, d));\n \n   uint32x4_t sign_x = vandq_u32 (ix, SignMask);\n   uint32x4_t sign_y = vandq_u32 (iy, SignMask);\n@@ -77,14 +83,14 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F2 (atan2) (float32x4_t y, float32x4_t x)\n \n   /* Set up z for call to atanf.  */\n   float32x4_t n = vbslq_f32 (pred_aygtax, vnegq_f32 (ax), ay);\n-  float32x4_t d = vbslq_f32 (pred_aygtax, ay, ax);\n-  float32x4_t z = vdivq_f32 (n, d);\n+  float32x4_t q = vbslq_f32 (pred_aygtax, ay, ax);\n+  float32x4_t z = vdivq_f32 (n, q);\n \n   /* Work out the correct shift.  */\n   float32x4_t shift = vreinterpretq_f32_u32 (\n       vandq_u32 (pred_xlt0, vreinterpretq_u32_f32 (v_f32 (-2.0f))));\n   shift = vbslq_f32 (pred_aygtax, vaddq_f32 (shift, v_f32 (1.0f)), shift);\n-  shift = vmulq_f32 (shift, data_ptr->pi_over_2);\n+  shift = vmulq_f32 (shift, d->pi_over_2);\n \n   /* Calculate the polynomial approximation.\n      Use 2-level Estrin scheme for P(z^2) with deg(P)=7. However,\n@@ -96,23 +102,27 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F2 (atan2) (float32x4_t y, float32x4_t x)\n   float32x4_t z2 = vmulq_f32 (z, z);\n   float32x4_t z4 = vmulq_f32 (z2, z2);\n \n-  float32x4_t ret = vfmaq_f32 (\n-      v_pairwise_poly_3_f32 (z2, z4, data_ptr->poly), z4,\n-      vmulq_f32 (z4, v_pairwise_poly_3_f32 (z2, z4, data_ptr->poly + 4)));\n+  float32x4_t c1357 = vld1q_f32 (&d->c1);\n+  float32x4_t p01 = vfmaq_laneq_f32 (d->c0, z2, c1357, 0);\n+  float32x4_t p23 = vfmaq_laneq_f32 (d->c2, z2, c1357, 1);\n+  float32x4_t p45 = vfmaq_laneq_f32 (d->c4, z2, c1357, 2);\n+  float32x4_t p67 = vfmaq_laneq_f32 (d->c6, z2, c1357, 3);\n+  float32x4_t p03 = vfmaq_f32 (p01, z4, p23);\n+  float32x4_t p47 = vfmaq_f32 (p45, z4, p67);\n+\n+  float32x4_t ret = vfmaq_f32 (p03, z4, vmulq_f32 (z4, p47));\n \n   /* y = shift + z * P(z^2).  */\n   ret = vaddq_f32 (vfmaq_f32 (z, ret, vmulq_f32 (z2, z)), shift);\n \n-  /* Account for the sign of y.  */\n-  ret = vreinterpretq_f32_u32 (\n-      veorq_u32 (vreinterpretq_u32_f32 (ret), sign_xy));\n-\n   if (__glibc_unlikely (v_any_u32 (special_cases)))\n     {\n-      return special_case (y, x, ret, special_cases);\n+      return special_case (y, x, ret, sign_xy, special_cases);\n     }\n \n-  return ret;\n+  /* Account for the sign of y.  */\n+  return vreinterpretq_f32_u32 (\n+      veorq_u32 (vreinterpretq_u32_f32 (ret), sign_xy));\n }\n libmvec_hidden_def (V_NAME_F2 (atan2))\n HALF_WIDTH_ALIAS_F2(atan2)\ndiff --git a/sysdeps/aarch64/fpu/atan_advsimd.c b/sysdeps/aarch64/fpu/atan_advsimd.c\nindex a962be0f78..14f1809796 100644\n--- a/sysdeps/aarch64/fpu/atan_advsimd.c\n+++ b/sysdeps/aarch64/fpu/atan_advsimd.c\n@@ -22,21 +22,22 @@\n \n static const struct data\n {\n+  float64x2_t c0, c2, c4, c6, c8, c10, c12, c14, c16, c18;\n   float64x2_t pi_over_2;\n-  float64x2_t poly[20];\n+  double c1, c3, c5, c7, c9, c11, c13, c15, c17, c19;\n } data = {\n   /* Coefficients of polynomial P such that atan(x)~x+x*P(x^2) on\n \t      [2**-1022, 1.0].  */\n-  .poly = { V2 (-0x1.5555555555555p-2),\t V2 (0x1.99999999996c1p-3),\n-\t    V2 (-0x1.2492492478f88p-3),\t V2 (0x1.c71c71bc3951cp-4),\n-\t    V2 (-0x1.745d160a7e368p-4),\t V2 (0x1.3b139b6a88ba1p-4),\n-\t    V2 (-0x1.11100ee084227p-4),\t V2 (0x1.e1d0f9696f63bp-5),\n-\t    V2 (-0x1.aebfe7b418581p-5),\t V2 (0x1.842dbe9b0d916p-5),\n-\t    V2 (-0x1.5d30140ae5e99p-5),\t V2 (0x1.338e31eb2fbbcp-5),\n-\t    V2 (-0x1.00e6eece7de8p-5),\t V2 (0x1.860897b29e5efp-6),\n-\t    V2 (-0x1.0051381722a59p-6),\t V2 (0x1.14e9dc19a4a4ep-7),\n-\t    V2 (-0x1.d0062b42fe3bfp-9),\t V2 (0x1.17739e210171ap-10),\n-\t    V2 (-0x1.ab24da7be7402p-13), V2 (0x1.358851160a528p-16), },\n+  .c0 = V2 (-0x1.5555555555555p-2),\t  .c1 = 0x1.99999999996c1p-3,\n+  .c2 = V2 (-0x1.2492492478f88p-3),\t  .c3 = 0x1.c71c71bc3951cp-4,\n+  .c4 = V2 (-0x1.745d160a7e368p-4),\t  .c5 = 0x1.3b139b6a88ba1p-4,\n+  .c6 = V2 (-0x1.11100ee084227p-4),\t  .c7 = 0x1.e1d0f9696f63bp-5,\n+  .c8 = V2 (-0x1.aebfe7b418581p-5),\t  .c9 = 0x1.842dbe9b0d916p-5,\n+  .c10 = V2 (-0x1.5d30140ae5e99p-5),\t  .c11 = 0x1.338e31eb2fbbcp-5,\n+  .c12 = V2 (-0x1.00e6eece7de8p-5),\t  .c13 = 0x1.860897b29e5efp-6,\n+  .c14 = V2 (-0x1.0051381722a59p-6),\t  .c15 = 0x1.14e9dc19a4a4ep-7,\n+  .c16 = V2 (-0x1.d0062b42fe3bfp-9),\t  .c17 = 0x1.17739e210171ap-10,\n+  .c18 = V2 (-0x1.ab24da7be7402p-13),\t  .c19 = 0x1.358851160a528p-16,\n   .pi_over_2 = V2 (0x1.921fb54442d18p+0),\n };\n \n@@ -52,6 +53,11 @@ static const struct data\n float64x2_t VPCS_ATTR V_NAME_D1 (atan) (float64x2_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n+  float64x2_t c13 = vld1q_f64 (&d->c1);\n+  float64x2_t c57 = vld1q_f64 (&d->c5);\n+  float64x2_t c911 = vld1q_f64 (&d->c9);\n+  float64x2_t c1315 = vld1q_f64 (&d->c13);\n+  float64x2_t c1719 = vld1q_f64 (&d->c17);\n \n   /* Small cases, infs and nans are supported by our approximation technique,\n      but do not set fenv flags correctly. Only trigger special case if we need\n@@ -90,9 +96,35 @@ float64x2_t VPCS_ATTR V_NAME_D1 (atan) (float64x2_t x)\n   float64x2_t x2 = vmulq_f64 (z2, z2);\n   float64x2_t x4 = vmulq_f64 (x2, x2);\n   float64x2_t x8 = vmulq_f64 (x4, x4);\n-  float64x2_t y\n-      = vfmaq_f64 (v_estrin_7_f64 (z2, x2, x4, d->poly),\n-\t\t   v_estrin_11_f64 (z2, x2, x4, x8, d->poly + 8), x8);\n+\n+  /* estrin_7.  */\n+  float64x2_t p01 = vfmaq_laneq_f64 (d->c0, z2, c13, 0);\n+  float64x2_t p23 = vfmaq_laneq_f64 (d->c2, z2, c13, 1);\n+  float64x2_t p03 = vfmaq_f64 (p01, x2, p23);\n+\n+  float64x2_t p45 = vfmaq_laneq_f64 (d->c4, z2, c57, 0);\n+  float64x2_t p67 = vfmaq_laneq_f64 (d->c6, z2, c57, 1);\n+  float64x2_t p47 = vfmaq_f64 (p45, x2, p67);\n+\n+  float64x2_t p07 = vfmaq_f64 (p03, x4, p47);\n+\n+  /* estrin_11.  */\n+  float64x2_t p89 = vfmaq_laneq_f64 (d->c8, z2, c911, 0);\n+  float64x2_t p1011 = vfmaq_laneq_f64 (d->c10, z2, c911, 1);\n+  float64x2_t p811 = vfmaq_f64 (p89, x2, p1011);\n+\n+  float64x2_t p1213 = vfmaq_laneq_f64 (d->c12, z2, c1315, 0);\n+  float64x2_t p1415 = vfmaq_laneq_f64 (d->c14, z2, c1315, 1);\n+  float64x2_t p1215 = vfmaq_f64 (p1213, x2, p1415);\n+\n+  float64x2_t p1617 = vfmaq_laneq_f64 (d->c16, z2, c1719, 0);\n+  float64x2_t p1819 = vfmaq_laneq_f64 (d->c18, z2, c1719, 1);\n+  float64x2_t p1619 = vfmaq_f64 (p1617, x2, p1819);\n+\n+  float64x2_t p815 = vfmaq_f64 (p811, x4, p1215);\n+  float64x2_t p819 = vfmaq_f64 (p815, x8, p1619);\n+\n+  float64x2_t y = vfmaq_f64 (p07, p819, x8);\n \n   /* Finalize. y = shift + z + z^3 * P(z^2).  */\n   y = vfmaq_f64 (az, y, vmulq_f64 (z2, az));\n\ncommit bf2b60a56036c951a798845223a2e04cc48507e4\nAuthor: Joana Cruz <Joana.Cruz@arm.com>\nDate:   Tue Dec 17 14:50:33 2024 +0000\n\n    AArch64: Improve codegen of AdvSIMD expf family\n    \n    Load the polynomial evaluation coefficients into 2 vectors and use lanewise MLAs.\n    Also use intrinsics instead of native operations.\n    expf: 3% improvement in throughput microbenchmark on Neoverse V1, exp2f: 5%,\n    exp10f: 13%, coshf: 14%.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit cff9648d0b50d19cdaf685f6767add040d4e1a8e)\n\ndiff --git a/sysdeps/aarch64/fpu/coshf_advsimd.c b/sysdeps/aarch64/fpu/coshf_advsimd.c\nindex c1ab4923b8..cd5c866521 100644\n--- a/sysdeps/aarch64/fpu/coshf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/coshf_advsimd.c\n@@ -23,19 +23,27 @@\n static const struct data\n {\n   struct v_expf_data expf_consts;\n-  uint32x4_t tiny_bound, special_bound;\n+  uint32x4_t tiny_bound;\n+  float32x4_t bound;\n+#if WANT_SIMD_EXCEPT\n+  uint32x4_t special_bound;\n+#endif\n } data = {\n   .expf_consts = V_EXPF_DATA,\n   .tiny_bound = V4 (0x20000000), /* 0x1p-63: Round to 1 below this.  */\n   /* 0x1.5a92d8p+6: expf overflows above this, so have to use special case.  */\n+  .bound = V4 (0x1.5a92d8p+6),\n+#if WANT_SIMD_EXCEPT\n   .special_bound = V4 (0x42ad496c),\n+#endif\n };\n \n #if !WANT_SIMD_EXCEPT\n static float32x4_t NOINLINE VPCS_ATTR\n-special_case (float32x4_t x, float32x4_t y, uint32x4_t special)\n+special_case (float32x4_t x, float32x4_t half_t, float32x4_t half_over_t,\n+\t      uint32x4_t special)\n {\n-  return v_call_f32 (coshf, x, y, special);\n+  return v_call_f32 (coshf, x, vaddq_f32 (half_t, half_over_t), special);\n }\n #endif\n \n@@ -47,14 +55,13 @@ float32x4_t VPCS_ATTR V_NAME_F1 (cosh) (float32x4_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n \n-  float32x4_t ax = vabsq_f32 (x);\n-  uint32x4_t iax = vreinterpretq_u32_f32 (ax);\n-  uint32x4_t special = vcgeq_u32 (iax, d->special_bound);\n-\n #if WANT_SIMD_EXCEPT\n   /* If fp exceptions are to be triggered correctly, fall back to the scalar\n      variant for all inputs if any input is a special value or above the bound\n      at which expf overflows.  */\n+  float32x4_t ax = vabsq_f32 (x);\n+  uint32x4_t iax = vreinterpretq_u32_f32 (ax);\n+  uint32x4_t special = vcgeq_u32 (iax, d->special_bound);\n   if (__glibc_unlikely (v_any_u32 (special)))\n     return v_call_f32 (coshf, x, x, v_u32 (-1));\n \n@@ -63,10 +70,13 @@ float32x4_t VPCS_ATTR V_NAME_F1 (cosh) (float32x4_t x)\n      input to 0, which will generate no exceptions.  */\n   if (__glibc_unlikely (v_any_u32 (tiny)))\n     ax = v_zerofy_f32 (ax, tiny);\n+  float32x4_t t = v_expf_inline (ax, &d->expf_consts);\n+#else\n+  uint32x4_t special = vcageq_f32 (x, d->bound);\n+  float32x4_t t = v_expf_inline (x, &d->expf_consts);\n #endif\n \n   /* Calculate cosh by exp(x) / 2 + exp(-x) / 2.  */\n-  float32x4_t t = v_expf_inline (ax, &d->expf_consts);\n   float32x4_t half_t = vmulq_n_f32 (t, 0.5);\n   float32x4_t half_over_t = vdivq_f32 (v_f32 (0.5), t);\n \n@@ -75,7 +85,7 @@ float32x4_t VPCS_ATTR V_NAME_F1 (cosh) (float32x4_t x)\n     return vbslq_f32 (tiny, v_f32 (1), vaddq_f32 (half_t, half_over_t));\n #else\n   if (__glibc_unlikely (v_any_u32 (special)))\n-    return special_case (x, vaddq_f32 (half_t, half_over_t), special);\n+    return special_case (x, half_t, half_over_t, special);\n #endif\n \n   return vaddq_f32 (half_t, half_over_t);\ndiff --git a/sysdeps/aarch64/fpu/exp10f_advsimd.c b/sysdeps/aarch64/fpu/exp10f_advsimd.c\nindex cf53e73290..55d9cd83f2 100644\n--- a/sysdeps/aarch64/fpu/exp10f_advsimd.c\n+++ b/sysdeps/aarch64/fpu/exp10f_advsimd.c\n@@ -18,16 +18,15 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include \"v_math.h\"\n-#include \"poly_advsimd_f32.h\"\n \n #define ScaleBound 192.0f\n \n static const struct data\n {\n-  float32x4_t poly[5];\n-  float log10_2_and_inv[4];\n-  float32x4_t shift;\n-\n+  float32x4_t c0, c1, c3;\n+  float log10_2_high, log10_2_low, c2, c4;\n+  float32x4_t inv_log10_2, special_bound;\n+  uint32x4_t exponent_bias, special_offset, special_bias;\n #if !WANT_SIMD_EXCEPT\n   float32x4_t scale_thresh;\n #endif\n@@ -37,19 +36,24 @@ static const struct data\n      rel error: 0x1.89dafa3p-24\n      abs error: 0x1.167d55p-23 in [-log10(2)/2, log10(2)/2]\n      maxerr: 1.85943 +0.5 ulp.  */\n-  .poly = { V4 (0x1.26bb16p+1f), V4 (0x1.5350d2p+1f), V4 (0x1.04744ap+1f),\n-\t    V4 (0x1.2d8176p+0f), V4 (0x1.12b41ap-1f) },\n-  .shift = V4 (0x1.8p23f),\n-\n-  /* Stores constants 1/log10(2), log10(2)_high, log10(2)_low, 0.  */\n-  .log10_2_and_inv = { 0x1.a934fp+1, 0x1.344136p-2, -0x1.ec10cp-27, 0 },\n+  .c0 = V4 (0x1.26bb16p+1f),\n+  .c1 = V4 (0x1.5350d2p+1f),\n+  .c2 = 0x1.04744ap+1f,\n+  .c3 = V4 (0x1.2d8176p+0f),\n+  .c4 = 0x1.12b41ap-1f,\n+  .inv_log10_2 = V4 (0x1.a934fp+1),\n+  .log10_2_high = 0x1.344136p-2,\n+  .log10_2_low = 0x1.ec10cp-27,\n+  /* rint (log2 (2^127 / (1 + sqrt (2)))).  */\n+  .special_bound = V4 (126.0f),\n+  .exponent_bias = V4 (0x3f800000),\n+  .special_offset = V4 (0x82000000),\n+  .special_bias = V4 (0x7f000000),\n #if !WANT_SIMD_EXCEPT\n   .scale_thresh = V4 (ScaleBound)\n #endif\n };\n \n-#define ExponentBias v_u32 (0x3f800000)\n-\n #if WANT_SIMD_EXCEPT\n \n # define SpecialBound 38.0f\t       /* rint(log10(2^127)).  */\n@@ -67,17 +71,15 @@ special_case (float32x4_t x, float32x4_t y, uint32x4_t cmp)\n \n #else\n \n-# define SpecialBound 126.0f /* rint (log2 (2^127 / (1 + sqrt (2)))).  */\n-# define SpecialOffset v_u32 (0x82000000)\n-# define SpecialBias v_u32 (0x7f000000)\n+# define SpecialBound 126.0f\n \n static float32x4_t VPCS_ATTR NOINLINE\n special_case (float32x4_t poly, float32x4_t n, uint32x4_t e, uint32x4_t cmp1,\n \t      float32x4_t scale, const struct data *d)\n {\n   /* 2^n may overflow, break it up into s1*s2.  */\n-  uint32x4_t b = vandq_u32 (vclezq_f32 (n), SpecialOffset);\n-  float32x4_t s1 = vreinterpretq_f32_u32 (vaddq_u32 (b, SpecialBias));\n+  uint32x4_t b = vandq_u32 (vclezq_f32 (n), d->special_offset);\n+  float32x4_t s1 = vreinterpretq_f32_u32 (vaddq_u32 (b, d->special_bias));\n   float32x4_t s2 = vreinterpretq_f32_u32 (vsubq_u32 (e, b));\n   uint32x4_t cmp2 = vcagtq_f32 (n, d->scale_thresh);\n   float32x4_t r2 = vmulq_f32 (s1, s1);\n@@ -112,23 +114,23 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (exp10) (float32x4_t x)\n   /* exp10(x) = 2^n * 10^r = 2^n * (1 + poly (r)),\n      with poly(r) in [1/sqrt(2), sqrt(2)] and\n      x = r + n * log10 (2), with r in [-log10(2)/2, log10(2)/2].  */\n-  float32x4_t log10_2_and_inv = vld1q_f32 (d->log10_2_and_inv);\n-  float32x4_t z = vfmaq_laneq_f32 (d->shift, x, log10_2_and_inv, 0);\n-  float32x4_t n = vsubq_f32 (z, d->shift);\n-  float32x4_t r = vfmsq_laneq_f32 (x, n, log10_2_and_inv, 1);\n-  r = vfmsq_laneq_f32 (r, n, log10_2_and_inv, 2);\n-  uint32x4_t e = vshlq_n_u32 (vreinterpretq_u32_f32 (z), 23);\n+  float32x4_t log10_2_c24 = vld1q_f32 (&d->log10_2_high);\n+  float32x4_t n = vrndaq_f32 (vmulq_f32 (x, d->inv_log10_2));\n+  float32x4_t r = vfmsq_laneq_f32 (x, n, log10_2_c24, 0);\n+  r = vfmaq_laneq_f32 (r, n, log10_2_c24, 1);\n+  uint32x4_t e = vshlq_n_u32 (vreinterpretq_u32_s32 (vcvtaq_s32_f32 (n)), 23);\n \n-  float32x4_t scale = vreinterpretq_f32_u32 (vaddq_u32 (e, ExponentBias));\n+  float32x4_t scale = vreinterpretq_f32_u32 (vaddq_u32 (e, d->exponent_bias));\n \n #if !WANT_SIMD_EXCEPT\n-  uint32x4_t cmp = vcagtq_f32 (n, v_f32 (SpecialBound));\n+  uint32x4_t cmp = vcagtq_f32 (n, d->special_bound);\n #endif\n \n   float32x4_t r2 = vmulq_f32 (r, r);\n-  float32x4_t poly\n-      = vfmaq_f32 (vmulq_f32 (r, d->poly[0]),\n-\t\t   v_pairwise_poly_3_f32 (r, r2, d->poly + 1), r2);\n+  float32x4_t p12 = vfmaq_laneq_f32 (d->c1, r, log10_2_c24, 2);\n+  float32x4_t p34 = vfmaq_laneq_f32 (d->c3, r, log10_2_c24, 3);\n+  float32x4_t p14 = vfmaq_f32 (p12, r2, p34);\n+  float32x4_t poly = vfmaq_f32 (vmulq_f32 (r, d->c0), p14, r2);\n \n   if (__glibc_unlikely (v_any_u32 (cmp)))\n #if WANT_SIMD_EXCEPT\ndiff --git a/sysdeps/aarch64/fpu/exp2f_advsimd.c b/sysdeps/aarch64/fpu/exp2f_advsimd.c\nindex 69e0b193a1..a4220da63c 100644\n--- a/sysdeps/aarch64/fpu/exp2f_advsimd.c\n+++ b/sysdeps/aarch64/fpu/exp2f_advsimd.c\n@@ -21,24 +21,28 @@\n \n static const struct data\n {\n-  float32x4_t poly[5];\n-  uint32x4_t exponent_bias;\n+  float32x4_t c1, c3;\n+  uint32x4_t exponent_bias, special_offset, special_bias;\n #if !WANT_SIMD_EXCEPT\n-  float32x4_t special_bound, scale_thresh;\n+  float32x4_t scale_thresh, special_bound;\n #endif\n+  float c0, c2, c4, zero;\n } data = {\n   /* maxerr: 1.962 ulp.  */\n-  .poly = { V4 (0x1.59977ap-10f), V4 (0x1.3ce9e4p-7f), V4 (0x1.c6bd32p-5f),\n-\t    V4 (0x1.ebf9bcp-3f), V4 (0x1.62e422p-1f) },\n+  .c0 = 0x1.59977ap-10f,\n+  .c1 = V4 (0x1.3ce9e4p-7f),\n+  .c2 = 0x1.c6bd32p-5f,\n+  .c3 = V4 (0x1.ebf9bcp-3f),\n+  .c4 = 0x1.62e422p-1f,\n   .exponent_bias = V4 (0x3f800000),\n+  .special_offset = V4 (0x82000000),\n+  .special_bias = V4 (0x7f000000),\n #if !WANT_SIMD_EXCEPT\n   .special_bound = V4 (126.0f),\n   .scale_thresh = V4 (192.0f),\n #endif\n };\n \n-#define C(i) d->poly[i]\n-\n #if WANT_SIMD_EXCEPT\n \n # define TinyBound v_u32 (0x20000000)\t  /* asuint (0x1p-63).  */\n@@ -55,16 +59,13 @@ special_case (float32x4_t x, float32x4_t y, uint32x4_t cmp)\n \n #else\n \n-# define SpecialOffset v_u32 (0x82000000)\n-# define SpecialBias v_u32 (0x7f000000)\n-\n static float32x4_t VPCS_ATTR NOINLINE\n special_case (float32x4_t poly, float32x4_t n, uint32x4_t e, uint32x4_t cmp1,\n \t      float32x4_t scale, const struct data *d)\n {\n   /* 2^n may overflow, break it up into s1*s2.  */\n-  uint32x4_t b = vandq_u32 (vclezq_f32 (n), SpecialOffset);\n-  float32x4_t s1 = vreinterpretq_f32_u32 (vaddq_u32 (b, SpecialBias));\n+  uint32x4_t b = vandq_u32 (vclezq_f32 (n), d->special_offset);\n+  float32x4_t s1 = vreinterpretq_f32_u32 (vaddq_u32 (b, d->special_bias));\n   float32x4_t s2 = vreinterpretq_f32_u32 (vsubq_u32 (e, b));\n   uint32x4_t cmp2 = vcagtq_f32 (n, d->scale_thresh);\n   float32x4_t r2 = vmulq_f32 (s1, s1);\n@@ -80,13 +81,11 @@ special_case (float32x4_t poly, float32x4_t n, uint32x4_t e, uint32x4_t cmp1,\n float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (exp2) (float32x4_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n-  float32x4_t n, r, r2, scale, p, q, poly;\n-  uint32x4_t cmp, e;\n \n #if WANT_SIMD_EXCEPT\n   /* asuint(|x|) - TinyBound >= BigBound - TinyBound.  */\n   uint32x4_t ia = vreinterpretq_u32_f32 (vabsq_f32 (x));\n-  cmp = vcgeq_u32 (vsubq_u32 (ia, TinyBound), SpecialBound);\n+  uint32x4_t cmp = vcgeq_u32 (vsubq_u32 (ia, TinyBound), SpecialBound);\n   float32x4_t xm = x;\n   /* If any lanes are special, mask them with 1 and retain a copy of x to allow\n      special_case to fix special lanes later. This is only necessary if fenv\n@@ -95,23 +94,24 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (exp2) (float32x4_t x)\n     x = vbslq_f32 (cmp, v_f32 (1), x);\n #endif\n \n-    /* exp2(x) = 2^n (1 + poly(r)), with 1 + poly(r) in [1/sqrt(2),sqrt(2)]\n-       x = n + r, with r in [-1/2, 1/2].  */\n-  n = vrndaq_f32 (x);\n-  r = vsubq_f32 (x, n);\n-  e = vshlq_n_u32 (vreinterpretq_u32_s32 (vcvtaq_s32_f32 (x)), 23);\n-  scale = vreinterpretq_f32_u32 (vaddq_u32 (e, d->exponent_bias));\n+  /* exp2(x) = 2^n (1 + poly(r)), with 1 + poly(r) in [1/sqrt(2),sqrt(2)]\n+     x = n + r, with r in [-1/2, 1/2].  */\n+  float32x4_t n = vrndaq_f32 (x);\n+  float32x4_t r = vsubq_f32 (x, n);\n+  uint32x4_t e = vshlq_n_u32 (vreinterpretq_u32_s32 (vcvtaq_s32_f32 (x)), 23);\n+  float32x4_t scale = vreinterpretq_f32_u32 (vaddq_u32 (e, d->exponent_bias));\n \n #if !WANT_SIMD_EXCEPT\n-  cmp = vcagtq_f32 (n, d->special_bound);\n+  uint32x4_t cmp = vcagtq_f32 (n, d->special_bound);\n #endif\n \n-  r2 = vmulq_f32 (r, r);\n-  p = vfmaq_f32 (C (1), C (0), r);\n-  q = vfmaq_f32 (C (3), C (2), r);\n+  float32x4_t c024 = vld1q_f32 (&d->c0);\n+  float32x4_t r2 = vmulq_f32 (r, r);\n+  float32x4_t p = vfmaq_laneq_f32 (d->c1, r, c024, 0);\n+  float32x4_t q = vfmaq_laneq_f32 (d->c3, r, c024, 1);\n   q = vfmaq_f32 (q, p, r2);\n-  p = vmulq_f32 (C (4), r);\n-  poly = vfmaq_f32 (p, q, r2);\n+  p = vmulq_laneq_f32 (r, c024, 2);\n+  float32x4_t poly = vfmaq_f32 (p, q, r2);\n \n   if (__glibc_unlikely (v_any_u32 (cmp)))\n #if WANT_SIMD_EXCEPT\ndiff --git a/sysdeps/aarch64/fpu/expf_advsimd.c b/sysdeps/aarch64/fpu/expf_advsimd.c\nindex 5c9cb72620..70f137e2e5 100644\n--- a/sysdeps/aarch64/fpu/expf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/expf_advsimd.c\n@@ -21,20 +21,25 @@\n \n static const struct data\n {\n-  float32x4_t poly[5];\n-  float32x4_t inv_ln2, ln2_hi, ln2_lo;\n-  uint32x4_t exponent_bias;\n+  float32x4_t c1, c3, c4, inv_ln2;\n+  float ln2_hi, ln2_lo, c0, c2;\n+  uint32x4_t exponent_bias, special_offset, special_bias;\n #if !WANT_SIMD_EXCEPT\n   float32x4_t special_bound, scale_thresh;\n #endif\n } data = {\n   /* maxerr: 1.45358 +0.5 ulp.  */\n-  .poly = { V4 (0x1.0e4020p-7f), V4 (0x1.573e2ep-5f), V4 (0x1.555e66p-3f),\n-\t    V4 (0x1.fffdb6p-2f), V4 (0x1.ffffecp-1f) },\n+  .c0 = 0x1.0e4020p-7f,\n+  .c1 = V4 (0x1.573e2ep-5f),\n+  .c2 = 0x1.555e66p-3f,\n+  .c3 = V4 (0x1.fffdb6p-2f),\n+  .c4 = V4 (0x1.ffffecp-1f),\n   .inv_ln2 = V4 (0x1.715476p+0f),\n-  .ln2_hi = V4 (0x1.62e4p-1f),\n-  .ln2_lo = V4 (0x1.7f7d1cp-20f),\n+  .ln2_hi = 0x1.62e4p-1f,\n+  .ln2_lo = 0x1.7f7d1cp-20f,\n   .exponent_bias = V4 (0x3f800000),\n+  .special_offset = V4 (0x82000000),\n+  .special_bias = V4 (0x7f000000),\n #if !WANT_SIMD_EXCEPT\n   .special_bound = V4 (126.0f),\n   .scale_thresh = V4 (192.0f),\n@@ -59,19 +64,17 @@ special_case (float32x4_t x, float32x4_t y, uint32x4_t cmp)\n \n #else\n \n-# define SpecialOffset v_u32 (0x82000000)\n-# define SpecialBias v_u32 (0x7f000000)\n-\n static float32x4_t VPCS_ATTR NOINLINE\n special_case (float32x4_t poly, float32x4_t n, uint32x4_t e, uint32x4_t cmp1,\n \t      float32x4_t scale, const struct data *d)\n {\n   /* 2^n may overflow, break it up into s1*s2.  */\n-  uint32x4_t b = vandq_u32 (vclezq_f32 (n), SpecialOffset);\n-  float32x4_t s1 = vreinterpretq_f32_u32 (vaddq_u32 (b, SpecialBias));\n+  uint32x4_t b = vandq_u32 (vclezq_f32 (n), d->special_offset);\n+  float32x4_t s1 = vreinterpretq_f32_u32 (vaddq_u32 (b, d->special_bias));\n   float32x4_t s2 = vreinterpretq_f32_u32 (vsubq_u32 (e, b));\n   uint32x4_t cmp2 = vcagtq_f32 (n, d->scale_thresh);\n   float32x4_t r2 = vmulq_f32 (s1, s1);\n+  // (s2 + p*s2)*s1 = s2(p+1)s1\n   float32x4_t r1 = vmulq_f32 (vfmaq_f32 (s2, poly, s2), s1);\n   /* Similar to r1 but avoids double rounding in the subnormal range.  */\n   float32x4_t r0 = vfmaq_f32 (scale, poly, scale);\n@@ -84,12 +87,11 @@ special_case (float32x4_t poly, float32x4_t n, uint32x4_t e, uint32x4_t cmp1,\n float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (exp) (float32x4_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n-  float32x4_t n, r, r2, scale, p, q, poly;\n-  uint32x4_t cmp, e;\n+  float32x4_t ln2_c02 = vld1q_f32 (&d->ln2_hi);\n \n #if WANT_SIMD_EXCEPT\n   /* asuint(x) - TinyBound >= BigBound - TinyBound.  */\n-  cmp = vcgeq_u32 (\n+  uint32x4_t cmp = vcgeq_u32 (\n       vsubq_u32 (vandq_u32 (vreinterpretq_u32_f32 (x), v_u32 (0x7fffffff)),\n \t\t TinyBound),\n       SpecialBound);\n@@ -103,22 +105,22 @@ float32x4_t VPCS_ATTR NOINLINE V_NAME_F1 (exp) (float32x4_t x)\n \n   /* exp(x) = 2^n (1 + poly(r)), with 1 + poly(r) in [1/sqrt(2),sqrt(2)]\n      x = ln2*n + r, with r in [-ln2/2, ln2/2].  */\n-  n = vrndaq_f32 (vmulq_f32 (x, d->inv_ln2));\n-  r = vfmsq_f32 (x, n, d->ln2_hi);\n-  r = vfmsq_f32 (r, n, d->ln2_lo);\n-  e = vshlq_n_u32 (vreinterpretq_u32_s32 (vcvtq_s32_f32 (n)), 23);\n-  scale = vreinterpretq_f32_u32 (vaddq_u32 (e, d->exponent_bias));\n+  float32x4_t n = vrndaq_f32 (vmulq_f32 (x, d->inv_ln2));\n+  float32x4_t r = vfmsq_laneq_f32 (x, n, ln2_c02, 0);\n+  r = vfmsq_laneq_f32 (r, n, ln2_c02, 1);\n+  uint32x4_t e = vshlq_n_u32 (vreinterpretq_u32_s32 (vcvtq_s32_f32 (n)), 23);\n+  float32x4_t scale = vreinterpretq_f32_u32 (vaddq_u32 (e, d->exponent_bias));\n \n #if !WANT_SIMD_EXCEPT\n-  cmp = vcagtq_f32 (n, d->special_bound);\n+  uint32x4_t cmp = vcagtq_f32 (n, d->special_bound);\n #endif\n \n-  r2 = vmulq_f32 (r, r);\n-  p = vfmaq_f32 (C (1), C (0), r);\n-  q = vfmaq_f32 (C (3), C (2), r);\n+  float32x4_t r2 = vmulq_f32 (r, r);\n+  float32x4_t p = vfmaq_laneq_f32 (d->c1, r, ln2_c02, 2);\n+  float32x4_t q = vfmaq_laneq_f32 (d->c3, r, ln2_c02, 3);\n   q = vfmaq_f32 (q, p, r2);\n-  p = vmulq_f32 (C (4), r);\n-  poly = vfmaq_f32 (p, q, r2);\n+  p = vmulq_f32 (d->c4, r);\n+  float32x4_t poly = vfmaq_f32 (p, q, r2);\n \n   if (__glibc_unlikely (v_any_u32 (cmp)))\n #if WANT_SIMD_EXCEPT\ndiff --git a/sysdeps/aarch64/fpu/v_expf_inline.h b/sysdeps/aarch64/fpu/v_expf_inline.h\nindex 08b06e0a6b..eacd2af241 100644\n--- a/sysdeps/aarch64/fpu/v_expf_inline.h\n+++ b/sysdeps/aarch64/fpu/v_expf_inline.h\n@@ -24,50 +24,45 @@\n \n struct v_expf_data\n {\n-  float32x4_t poly[5];\n-  float32x4_t shift;\n-  float invln2_and_ln2[4];\n+  float ln2_hi, ln2_lo, c0, c2;\n+  float32x4_t inv_ln2, c1, c3, c4;\n+  /* asuint(1.0f).  */\n+  uint32x4_t exponent_bias;\n };\n \n /* maxerr: 1.45358 +0.5 ulp.  */\n #define V_EXPF_DATA                                                           \\\n   {                                                                           \\\n-    .poly = { V4 (0x1.0e4020p-7f), V4 (0x1.573e2ep-5f), V4 (0x1.555e66p-3f),  \\\n-\t      V4 (0x1.fffdb6p-2f), V4 (0x1.ffffecp-1f) },                     \\\n-    .shift = V4 (0x1.8p23f),                                                  \\\n-    .invln2_and_ln2 = { 0x1.715476p+0f, 0x1.62e4p-1f, 0x1.7f7d1cp-20f, 0 },   \\\n+    .c0 = 0x1.0e4020p-7f, .c1 = V4 (0x1.573e2ep-5f), .c2 = 0x1.555e66p-3f,    \\\n+    .c3 = V4 (0x1.fffdb6p-2f), .c4 = V4 (0x1.ffffecp-1f),                     \\\n+    .ln2_hi = 0x1.62e4p-1f, .ln2_lo = 0x1.7f7d1cp-20f,                        \\\n+    .inv_ln2 = V4 (0x1.715476p+0f), .exponent_bias = V4 (0x3f800000),         \\\n   }\n \n-#define ExponentBias v_u32 (0x3f800000) /* asuint(1.0f).  */\n-#define C(i) d->poly[i]\n-\n static inline float32x4_t\n v_expf_inline (float32x4_t x, const struct v_expf_data *d)\n {\n-  /* Helper routine for calculating exp(x).\n+  /* Helper routine for calculating exp(ax).\n      Copied from v_expf.c, with all special-case handling removed - the\n      calling routine should handle special values if required.  */\n \n-  /* exp(x) = 2^n (1 + poly(r)), with 1 + poly(r) in [1/sqrt(2),sqrt(2)]\n-     x = ln2*n + r, with r in [-ln2/2, ln2/2].  */\n-  float32x4_t n, r, z;\n-  float32x4_t invln2_and_ln2 = vld1q_f32 (d->invln2_and_ln2);\n-  z = vfmaq_laneq_f32 (d->shift, x, invln2_and_ln2, 0);\n-  n = vsubq_f32 (z, d->shift);\n-  r = vfmsq_laneq_f32 (x, n, invln2_and_ln2, 1);\n-  r = vfmsq_laneq_f32 (r, n, invln2_and_ln2, 2);\n-  uint32x4_t e = vshlq_n_u32 (vreinterpretq_u32_f32 (z), 23);\n-  float32x4_t scale = vreinterpretq_f32_u32 (vaddq_u32 (e, ExponentBias));\n+  /* exp(ax) = 2^n (1 + poly(r)), with 1 + poly(r) in [1/sqrt(2),sqrt(2)]\n+     ax = ln2*n + r, with r in [-ln2/2, ln2/2].  */\n+  float32x4_t ax = vabsq_f32 (x);\n+  float32x4_t ln2_c02 = vld1q_f32 (&d->ln2_hi);\n+  float32x4_t n = vrndaq_f32 (vmulq_f32 (ax, d->inv_ln2));\n+  float32x4_t r = vfmsq_laneq_f32 (ax, n, ln2_c02, 0);\n+  r = vfmsq_laneq_f32 (r, n, ln2_c02, 1);\n+  uint32x4_t e = vshlq_n_u32 (vreinterpretq_u32_s32 (vcvtq_s32_f32 (n)), 23);\n+  float32x4_t scale = vreinterpretq_f32_u32 (vaddq_u32 (e, d->exponent_bias));\n \n   /* Custom order-4 Estrin avoids building high order monomial.  */\n   float32x4_t r2 = vmulq_f32 (r, r);\n-  float32x4_t p, q, poly;\n-  p = vfmaq_f32 (C (1), C (0), r);\n-  q = vfmaq_f32 (C (3), C (2), r);\n+  float32x4_t p = vfmaq_laneq_f32 (d->c1, r, ln2_c02, 2);\n+  float32x4_t q = vfmaq_laneq_f32 (d->c3, r, ln2_c02, 3);\n   q = vfmaq_f32 (q, p, r2);\n-  p = vmulq_f32 (C (4), r);\n-  poly = vfmaq_f32 (p, q, r2);\n+  p = vmulq_f32 (d->c4, r);\n+  float32x4_t poly = vfmaq_f32 (p, q, r2);\n   return vfmaq_f32 (scale, poly, scale);\n }\n-\n #endif\n\ncommit abfd20ebbd2883f2c6e5f16709f7b9781c3c8068\nAuthor: Luna Lamb <luna.lamb@arm.com>\nDate:   Fri Jan 3 19:00:12 2025 +0000\n\n    AArch64: Improve codegen in AdvSIMD asinh\n    \n    Improves memory access and removes spills.\n    Load the polynomial evaluation coefficients into 2 vectors and use lanewise\n    MLAs.  Reduces MOVs 6->3 , LDR 11->5, STR/STP 2->0, ADRP 3->2.\n    \n    (cherry picked from commit 140b985e5a2071000122b3cb63ebfe88cf21dd29)\n\ndiff --git a/sysdeps/aarch64/fpu/asinh_advsimd.c b/sysdeps/aarch64/fpu/asinh_advsimd.c\nindex 6207e7da95..2739f98b39 100644\n--- a/sysdeps/aarch64/fpu/asinh_advsimd.c\n+++ b/sysdeps/aarch64/fpu/asinh_advsimd.c\n@@ -20,41 +20,71 @@\n #include \"v_math.h\"\n #include \"poly_advsimd_f64.h\"\n \n-#define A(i) v_f64 (__v_log_data.poly[i])\n-#define N (1 << V_LOG_TABLE_BITS)\n-#define IndexMask (N - 1)\n-\n const static struct data\n {\n-  float64x2_t poly[18];\n-  uint64x2_t off, huge_bound, abs_mask;\n-  float64x2_t ln2, tiny_bound;\n+  uint64x2_t huge_bound, abs_mask, off, mask;\n+#if WANT_SIMD_EXCEPT\n+  float64x2_t tiny_bound;\n+#endif\n+  float64x2_t lc0, lc2;\n+  double lc1, lc3, ln2, lc4;\n+\n+  float64x2_t c0, c2, c4, c6, c8, c10, c12, c14, c16, c17;\n+  double c1, c3, c5, c7, c9, c11, c13, c15;\n+\n } data = {\n-  .off = V2 (0x3fe6900900000000),\n-  .ln2 = V2 (0x1.62e42fefa39efp-1),\n-  .huge_bound = V2 (0x5fe0000000000000),\n+\n+#if WANT_SIMD_EXCEPT\n   .tiny_bound = V2 (0x1p-26),\n-  .abs_mask = V2 (0x7fffffffffffffff),\n+#endif\n   /* Even terms of polynomial s.t. asinh(x) is approximated by\n      asinh(x) ~= x + x^3 * (C0 + C1 * x + C2 * x^2 + C3 * x^3 + ...).\n      Generated using Remez, f = (asinh(sqrt(x)) - sqrt(x))/x^(3/2).  */\n-  .poly = { V2 (-0x1.55555555554a7p-3), V2 (0x1.3333333326c7p-4),\n-\t    V2 (-0x1.6db6db68332e6p-5), V2 (0x1.f1c71b26fb40dp-6),\n-\t    V2 (-0x1.6e8b8b654a621p-6), V2 (0x1.1c4daa9e67871p-6),\n-\t    V2 (-0x1.c9871d10885afp-7), V2 (0x1.7a16e8d9d2ecfp-7),\n-\t    V2 (-0x1.3ddca533e9f54p-7), V2 (0x1.0becef748dafcp-7),\n-\t    V2 (-0x1.b90c7099dd397p-8), V2 (0x1.541f2bb1ffe51p-8),\n-\t    V2 (-0x1.d217026a669ecp-9), V2 (0x1.0b5c7977aaf7p-9),\n-\t    V2 (-0x1.e0f37daef9127p-11), V2 (0x1.388b5fe542a6p-12),\n-\t    V2 (-0x1.021a48685e287p-14), V2 (0x1.93d4ba83d34dap-18) },\n+\n+  .c0 = V2 (-0x1.55555555554a7p-3),\n+  .c1 = 0x1.3333333326c7p-4,\n+  .c2 = V2 (-0x1.6db6db68332e6p-5),\n+  .c3 = 0x1.f1c71b26fb40dp-6,\n+  .c4 = V2 (-0x1.6e8b8b654a621p-6),\n+  .c5 = 0x1.1c4daa9e67871p-6,\n+  .c6 = V2 (-0x1.c9871d10885afp-7),\n+  .c7 = 0x1.7a16e8d9d2ecfp-7,\n+  .c8 = V2 (-0x1.3ddca533e9f54p-7),\n+  .c9 = 0x1.0becef748dafcp-7,\n+  .c10 = V2 (-0x1.b90c7099dd397p-8),\n+  .c11 = 0x1.541f2bb1ffe51p-8,\n+  .c12 = V2 (-0x1.d217026a669ecp-9),\n+  .c13 = 0x1.0b5c7977aaf7p-9,\n+  .c14 = V2 (-0x1.e0f37daef9127p-11),\n+  .c15 = 0x1.388b5fe542a6p-12,\n+  .c16 = V2 (-0x1.021a48685e287p-14),\n+  .c17 = V2 (0x1.93d4ba83d34dap-18),\n+\n+  .lc0 = V2 (-0x1.ffffffffffff7p-2),\n+  .lc1 = 0x1.55555555170d4p-2,\n+  .lc2 = V2 (-0x1.0000000399c27p-2),\n+  .lc3 = 0x1.999b2e90e94cap-3,\n+  .lc4 = -0x1.554e550bd501ep-3,\n+  .ln2 = 0x1.62e42fefa39efp-1,\n+\n+  .off = V2 (0x3fe6900900000000),\n+  .huge_bound = V2 (0x5fe0000000000000),\n+  .abs_mask = V2 (0x7fffffffffffffff),\n+  .mask = V2 (0xfffULL << 52),\n };\n \n static float64x2_t NOINLINE VPCS_ATTR\n-special_case (float64x2_t x, float64x2_t y, uint64x2_t special)\n+special_case (float64x2_t x, float64x2_t y, uint64x2_t abs_mask,\n+\t      uint64x2_t special)\n {\n+  /* Copy sign.  */\n+  y = vbslq_f64 (abs_mask, y, x);\n   return v_call_f64 (asinh, x, y, special);\n }\n \n+#define N (1 << V_LOG_TABLE_BITS)\n+#define IndexMask (N - 1)\n+\n struct entry\n {\n   float64x2_t invc;\n@@ -76,27 +106,34 @@ lookup (uint64x2_t i)\n }\n \n static inline float64x2_t\n-log_inline (float64x2_t x, const struct data *d)\n+log_inline (float64x2_t xm, const struct data *d)\n {\n-  /* Double-precision vector log, copied from ordinary vector log with some\n-     cosmetic modification and special-cases removed.  */\n-  uint64x2_t ix = vreinterpretq_u64_f64 (x);\n-  uint64x2_t tmp = vsubq_u64 (ix, d->off);\n-  int64x2_t k = vshrq_n_s64 (vreinterpretq_s64_u64 (tmp), 52);\n-  uint64x2_t iz\n-      = vsubq_u64 (ix, vandq_u64 (tmp, vdupq_n_u64 (0xfffULL << 52)));\n+\n+  uint64x2_t u = vreinterpretq_u64_f64 (xm);\n+  uint64x2_t u_off = vsubq_u64 (u, d->off);\n+\n+  int64x2_t k = vshrq_n_s64 (vreinterpretq_s64_u64 (u_off), 52);\n+  uint64x2_t iz = vsubq_u64 (u, vandq_u64 (u_off, d->mask));\n   float64x2_t z = vreinterpretq_f64_u64 (iz);\n-  struct entry e = lookup (tmp);\n+\n+  struct entry e = lookup (u_off);\n+\n+  /* log(x) = log1p(z/c-1) + log(c) + k*Ln2.  */\n   float64x2_t r = vfmaq_f64 (v_f64 (-1.0), z, e.invc);\n   float64x2_t kd = vcvtq_f64_s64 (k);\n-  float64x2_t hi = vfmaq_f64 (vaddq_f64 (e.logc, r), kd, d->ln2);\n+\n+  /* hi = r + log(c) + k*Ln2.  */\n+  float64x2_t ln2_and_lc4 = vld1q_f64 (&d->ln2);\n+  float64x2_t hi = vfmaq_laneq_f64 (vaddq_f64 (e.logc, r), kd, ln2_and_lc4, 0);\n+\n+  /* y = r2*(A0 + r*A1 + r2*(A2 + r*A3 + r2*A4)) + hi.  */\n+  float64x2_t odd_coeffs = vld1q_f64 (&d->lc1);\n   float64x2_t r2 = vmulq_f64 (r, r);\n-  float64x2_t y = vfmaq_f64 (A (2), A (3), r);\n-  float64x2_t p = vfmaq_f64 (A (0), A (1), r);\n-  y = vfmaq_f64 (y, A (4), r2);\n-  y = vfmaq_f64 (p, y, r2);\n-  y = vfmaq_f64 (hi, y, r2);\n-  return y;\n+  float64x2_t y = vfmaq_laneq_f64 (d->lc2, r, odd_coeffs, 1);\n+  float64x2_t p = vfmaq_laneq_f64 (d->lc0, r, odd_coeffs, 0);\n+  y = vfmaq_laneq_f64 (y, r2, ln2_and_lc4, 1);\n+  y = vfmaq_f64 (p, r2, y);\n+  return vfmaq_f64 (hi, y, r2);\n }\n \n /* Double-precision implementation of vector asinh(x).\n@@ -106,23 +143,24 @@ log_inline (float64x2_t x, const struct data *d)\n    asinh(x) = sign(x) * log(|x| + sqrt(x^2 + 1)      if |x| >= 1\n \t    = sign(x) * (|x| + |x|^3 * P(x^2))       otherwise\n    where log(x) is an optimized log approximation, and P(x) is a polynomial\n-   shared with the scalar routine. The greatest observed error 3.29 ULP, in\n+   shared with the scalar routine. The greatest observed error 2.79 ULP, in\n    |x| >= 1:\n-   __v_asinh(0x1.2cd9d717e2c9bp+0) got 0x1.ffffcfd0e234fp-1\n-\t\t\t\t  want 0x1.ffffcfd0e2352p-1.  */\n+   _ZGVnN2v_asinh(0x1.2cd9d73ea76a6p+0) got 0x1.ffffd003219dap-1\n+\t\t\t\t       want  0x1.ffffd003219ddp-1.  */\n VPCS_ATTR float64x2_t V_NAME_D1 (asinh) (float64x2_t x)\n {\n   const struct data *d = ptr_barrier (&data);\n-\n   float64x2_t ax = vabsq_f64 (x);\n-  uint64x2_t iax = vreinterpretq_u64_f64 (ax);\n \n   uint64x2_t gt1 = vcgeq_f64 (ax, v_f64 (1));\n-  uint64x2_t special = vcgeq_u64 (iax, d->huge_bound);\n \n #if WANT_SIMD_EXCEPT\n+  uint64x2_t iax = vreinterpretq_u64_f64 (ax);\n+  uint64x2_t special = vcgeq_u64 (iax, (d->huge_bound));\n   uint64x2_t tiny = vcltq_f64 (ax, d->tiny_bound);\n   special = vorrq_u64 (special, tiny);\n+#else\n+  uint64x2_t special = vcgeq_f64 (ax, vreinterpretq_f64_u64 (d->huge_bound));\n #endif\n \n   /* Option 1: |x| >= 1.\n@@ -147,19 +185,45 @@ VPCS_ATTR float64x2_t V_NAME_D1 (asinh) (float64x2_t x)\n      overflow, and tiny lanes, which will underflow, by setting them to 0. They\n      will be fixed later, either by selecting x or falling back to the scalar\n      special-case. The largest observed error in this region is 1.47 ULPs:\n-     __v_asinh(0x1.fdfcd00cc1e6ap-1) got 0x1.c1d6bf874019bp-1\n-\t\t\t\t    want 0x1.c1d6bf874019cp-1.  */\n+     _ZGVnN2v_asinh(0x1.fdfcd00cc1e6ap-1) got 0x1.c1d6bf874019bp-1\n+\t\t\t\t\t want 0x1.c1d6bf874019cp-1.  */\n   float64x2_t option_2 = v_f64 (0);\n+\n   if (__glibc_likely (v_any_u64 (vceqzq_u64 (gt1))))\n     {\n+\n #if WANT_SIMD_EXCEPT\n       ax = v_zerofy_f64 (ax, vorrq_u64 (tiny, gt1));\n #endif\n-      float64x2_t x2 = vmulq_f64 (ax, ax), x3 = vmulq_f64 (ax, x2),\n-\t\t  z2 = vmulq_f64 (x2, x2), z4 = vmulq_f64 (z2, z2),\n-\t\t  z8 = vmulq_f64 (z4, z4), z16 = vmulq_f64 (z8, z8);\n-      float64x2_t p = v_estrin_17_f64 (x2, z2, z4, z8, z16, d->poly);\n-      option_2 = vfmaq_f64 (ax, p, x3);\n+      float64x2_t x2 = vmulq_f64 (ax, ax), z2 = vmulq_f64 (x2, x2);\n+      /* Order-17 Pairwise Horner scheme.  */\n+      float64x2_t c13 = vld1q_f64 (&d->c1);\n+      float64x2_t c57 = vld1q_f64 (&d->c5);\n+      float64x2_t c911 = vld1q_f64 (&d->c9);\n+      float64x2_t c1315 = vld1q_f64 (&d->c13);\n+\n+      float64x2_t p01 = vfmaq_laneq_f64 (d->c0, x2, c13, 0);\n+      float64x2_t p23 = vfmaq_laneq_f64 (d->c2, x2, c13, 1);\n+      float64x2_t p45 = vfmaq_laneq_f64 (d->c4, x2, c57, 0);\n+      float64x2_t p67 = vfmaq_laneq_f64 (d->c6, x2, c57, 1);\n+      float64x2_t p89 = vfmaq_laneq_f64 (d->c8, x2, c911, 0);\n+      float64x2_t p1011 = vfmaq_laneq_f64 (d->c10, x2, c911, 1);\n+      float64x2_t p1213 = vfmaq_laneq_f64 (d->c12, x2, c1315, 0);\n+      float64x2_t p1415 = vfmaq_laneq_f64 (d->c14, x2, c1315, 1);\n+      float64x2_t p1617 = vfmaq_f64 (d->c16, x2, d->c17);\n+\n+      float64x2_t p = vfmaq_f64 (p1415, z2, p1617);\n+      p = vfmaq_f64 (p1213, z2, p);\n+      p = vfmaq_f64 (p1011, z2, p);\n+      p = vfmaq_f64 (p89, z2, p);\n+\n+      p = vfmaq_f64 (p67, z2, p);\n+      p = vfmaq_f64 (p45, z2, p);\n+\n+      p = vfmaq_f64 (p23, z2, p);\n+\n+      p = vfmaq_f64 (p01, z2, p);\n+      option_2 = vfmaq_f64 (ax, p, vmulq_f64 (ax, x2));\n #if WANT_SIMD_EXCEPT\n       option_2 = vbslq_f64 (tiny, x, option_2);\n #endif\n@@ -167,10 +231,10 @@ VPCS_ATTR float64x2_t V_NAME_D1 (asinh) (float64x2_t x)\n \n   /* Choose the right option for each lane.  */\n   float64x2_t y = vbslq_f64 (gt1, option_1, option_2);\n-  /* Copy sign.  */\n-  y = vbslq_f64 (d->abs_mask, y, x);\n-\n   if (__glibc_unlikely (v_any_u64 (special)))\n-    return special_case (x, y, special);\n-  return y;\n+    {\n+      return special_case (x, y, d->abs_mask, special);\n+    }\n+  /* Copy sign.  */\n+  return vbslq_f64 (d->abs_mask, y, x);\n }\n\ncommit 5f45c0f91eae99b7d49f5c63b900441eb3491213\nAuthor: Luna Lamb <luna.lamb@arm.com>\nDate:   Fri Jan 3 19:02:52 2025 +0000\n\n    AArch64: Improve codegen in SVE tans\n    \n    Improves memory access.\n    Tan: MOVPRFX 7 -> 2, LD1RD 12 -> 5, move MOV away from return.\n    Tanf: MOV 2 -> 1, MOVPRFX 6 -> 3, LD1RW 5 -> 4, move mov away from return.\n    \n    (cherry picked from commit aa6609feb20ebf8653db639dabe2a6afc77b02cc)\n\ndiff --git a/sysdeps/aarch64/fpu/tan_sve.c b/sysdeps/aarch64/fpu/tan_sve.c\nindex b2e4447316..a7318fd417 100644\n--- a/sysdeps/aarch64/fpu/tan_sve.c\n+++ b/sysdeps/aarch64/fpu/tan_sve.c\n@@ -22,24 +22,38 @@\n \n static const struct data\n {\n-  double poly[9];\n-  double half_pi_hi, half_pi_lo, inv_half_pi, range_val, shift;\n+  double c2, c4, c6, c8;\n+  double poly_1357[4];\n+  double c0, inv_half_pi;\n+  double half_pi_hi, half_pi_lo, range_val;\n } data = {\n   /* Polynomial generated with FPMinimax.  */\n-  .poly = { 0x1.5555555555556p-2, 0x1.1111111110a63p-3, 0x1.ba1ba1bb46414p-5,\n-\t    0x1.664f47e5b5445p-6, 0x1.226e5e5ecdfa3p-7, 0x1.d6c7ddbf87047p-9,\n-\t    0x1.7ea75d05b583ep-10, 0x1.289f22964a03cp-11,\n-\t    0x1.4e4fd14147622p-12, },\n+  .c2 = 0x1.ba1ba1bb46414p-5,\n+  .c4 = 0x1.226e5e5ecdfa3p-7,\n+  .c6 = 0x1.7ea75d05b583ep-10,\n+  .c8 = 0x1.4e4fd14147622p-12,\n+  .poly_1357 = { 0x1.1111111110a63p-3, 0x1.664f47e5b5445p-6,\n+\t\t 0x1.d6c7ddbf87047p-9, 0x1.289f22964a03cp-11 },\n+  .c0 = 0x1.5555555555556p-2,\n+  .inv_half_pi = 0x1.45f306dc9c883p-1,\n   .half_pi_hi = 0x1.921fb54442d18p0,\n   .half_pi_lo = 0x1.1a62633145c07p-54,\n-  .inv_half_pi = 0x1.45f306dc9c883p-1,\n   .range_val = 0x1p23,\n-  .shift = 0x1.8p52,\n };\n \n static svfloat64_t NOINLINE\n-special_case (svfloat64_t x, svfloat64_t y, svbool_t special)\n+special_case (svfloat64_t x, svfloat64_t p, svfloat64_t q, svbool_t pg,\n+\t      svbool_t special)\n {\n+  svbool_t use_recip = svcmpeq (\n+      pg, svand_x (pg, svreinterpret_u64 (svcvt_s64_x (pg, q)), 1), 0);\n+\n+  svfloat64_t n = svmad_x (pg, p, p, -1);\n+  svfloat64_t d = svmul_x (svptrue_b64 (), p, 2);\n+  svfloat64_t swap = n;\n+  n = svneg_m (n, use_recip, d);\n+  d = svsel (use_recip, swap, d);\n+  svfloat64_t y = svdiv_x (svnot_z (pg, special), n, d);\n   return sv_call_f64 (tan, x, y, special);\n }\n \n@@ -50,15 +64,10 @@ special_case (svfloat64_t x, svfloat64_t y, svbool_t special)\n svfloat64_t SV_NAME_D1 (tan) (svfloat64_t x, svbool_t pg)\n {\n   const struct data *dat = ptr_barrier (&data);\n-\n-  /* Invert condition to catch NaNs and Infs as well as large values.  */\n-  svbool_t special = svnot_z (pg, svaclt (pg, x, dat->range_val));\n-\n+  svfloat64_t half_pi_c0 = svld1rq (svptrue_b64 (), &dat->c0);\n   /* q = nearest integer to 2 * x / pi.  */\n-  svfloat64_t shift = sv_f64 (dat->shift);\n-  svfloat64_t q = svmla_x (pg, shift, x, dat->inv_half_pi);\n-  q = svsub_x (pg, q, shift);\n-  svint64_t qi = svcvt_s64_x (pg, q);\n+  svfloat64_t q = svmul_lane (x, half_pi_c0, 1);\n+  q = svrinta_x (pg, q);\n \n   /* Use q to reduce x to r in [-pi/4, pi/4], by:\n      r = x - q * pi/2, in extended precision.  */\n@@ -68,7 +77,7 @@ svfloat64_t SV_NAME_D1 (tan) (svfloat64_t x, svbool_t pg)\n   r = svmls_lane (r, q, half_pi, 1);\n   /* Further reduce r to [-pi/8, pi/8], to be reconstructed using double angle\n      formula.  */\n-  r = svmul_x (pg, r, 0.5);\n+  r = svmul_x (svptrue_b64 (), r, 0.5);\n \n   /* Approximate tan(r) using order 8 polynomial.\n      tan(x) is odd, so polynomial has the form:\n@@ -76,29 +85,51 @@ svfloat64_t SV_NAME_D1 (tan) (svfloat64_t x, svbool_t pg)\n      Hence we first approximate P(r) = C1 + C2 * r^2 + C3 * r^4 + ...\n      Then compute the approximation by:\n      tan(r) ~= r + r^3 * (C0 + r^2 * P(r)).  */\n-  svfloat64_t r2 = svmul_x (pg, r, r);\n-  svfloat64_t r4 = svmul_x (pg, r2, r2);\n-  svfloat64_t r8 = svmul_x (pg, r4, r4);\n+\n+  svfloat64_t r2 = svmul_x (svptrue_b64 (), r, r);\n+  svfloat64_t r4 = svmul_x (svptrue_b64 (), r2, r2);\n+  svfloat64_t r8 = svmul_x (svptrue_b64 (), r4, r4);\n   /* Use offset version coeff array by 1 to evaluate from C1 onwards.  */\n-  svfloat64_t p = sv_estrin_7_f64_x (pg, r2, r4, r8, dat->poly + 1);\n-  p = svmad_x (pg, p, r2, dat->poly[0]);\n-  p = svmla_x (pg, r, r2, svmul_x (pg, p, r));\n+  svfloat64_t C_24 = svld1rq (svptrue_b64 (), &dat->c2);\n+  svfloat64_t C_68 = svld1rq (svptrue_b64 (), &dat->c6);\n+\n+  /* Use offset version coeff array by 1 to evaluate from C1 onwards.  */\n+  svfloat64_t p01 = svmla_lane (sv_f64 (dat->poly_1357[0]), r2, C_24, 0);\n+  svfloat64_t p23 = svmla_lane_f64 (sv_f64 (dat->poly_1357[1]), r2, C_24, 1);\n+  svfloat64_t p03 = svmla_x (pg, p01, p23, r4);\n+\n+  svfloat64_t p45 = svmla_lane (sv_f64 (dat->poly_1357[2]), r2, C_68, 0);\n+  svfloat64_t p67 = svmla_lane (sv_f64 (dat->poly_1357[3]), r2, C_68, 1);\n+  svfloat64_t p47 = svmla_x (pg, p45, p67, r4);\n+\n+  svfloat64_t p = svmla_x (pg, p03, p47, r8);\n+\n+  svfloat64_t z = svmul_x (svptrue_b64 (), p, r);\n+  z = svmul_x (svptrue_b64 (), r2, z);\n+  z = svmla_lane (z, r, half_pi_c0, 0);\n+  p = svmla_x (pg, r, r2, z);\n \n   /* Recombination uses double-angle formula:\n      tan(2x) = 2 * tan(x) / (1 - (tan(x))^2)\n      and reciprocity around pi/2:\n      tan(x) = 1 / (tan(pi/2 - x))\n      to assemble result using change-of-sign and conditional selection of\n-     numerator/denominator dependent on odd/even-ness of q (hence quadrant).  */\n-  svbool_t use_recip\n-      = svcmpeq (pg, svand_x (pg, svreinterpret_u64 (qi), 1), 0);\n+     numerator/denominator dependent on odd/even-ness of q (quadrant).  */\n+\n+  /* Invert condition to catch NaNs and Infs as well as large values.  */\n+  svbool_t special = svnot_z (pg, svaclt (pg, x, dat->range_val));\n+\n+  if (__glibc_unlikely (svptest_any (pg, special)))\n+    {\n+      return special_case (x, p, q, pg, special);\n+    }\n+  svbool_t use_recip = svcmpeq (\n+      pg, svand_x (pg, svreinterpret_u64 (svcvt_s64_x (pg, q)), 1), 0);\n \n   svfloat64_t n = svmad_x (pg, p, p, -1);\n-  svfloat64_t d = svmul_x (pg, p, 2);\n+  svfloat64_t d = svmul_x (svptrue_b64 (), p, 2);\n   svfloat64_t swap = n;\n   n = svneg_m (n, use_recip, d);\n   d = svsel (use_recip, swap, d);\n-  if (__glibc_unlikely (svptest_any (pg, special)))\n-    return special_case (x, svdiv_x (svnot_z (pg, special), n, d), special);\n   return svdiv_x (pg, n, d);\n }\ndiff --git a/sysdeps/aarch64/fpu/tanf_sve.c b/sysdeps/aarch64/fpu/tanf_sve.c\nindex f342583241..e850fb4882 100644\n--- a/sysdeps/aarch64/fpu/tanf_sve.c\n+++ b/sysdeps/aarch64/fpu/tanf_sve.c\n@@ -60,21 +60,16 @@ svfloat32_t SV_NAME_F1 (tan) (svfloat32_t x, const svbool_t pg)\n {\n   const struct data *d = ptr_barrier (&data);\n \n-  /* Determine whether input is too large to perform fast regression.  */\n-  svbool_t cmp = svacge (pg, x, d->range_val);\n-\n   svfloat32_t odd_coeffs = svld1rq (svptrue_b32 (), &d->c1);\n   svfloat32_t pi_vals = svld1rq (svptrue_b32 (), &d->pio2_1);\n \n   /* n = rint(x/(pi/2)).  */\n-  svfloat32_t q = svmla_lane (sv_f32 (d->shift), x, pi_vals, 3);\n-  svfloat32_t n = svsub_x (pg, q, d->shift);\n+  svfloat32_t n = svrintn_x (pg, svmul_lane (x, pi_vals, 3));\n   /* n is already a signed integer, simply convert it.  */\n   svint32_t in = svcvt_s32_x (pg, n);\n   /* Determine if x lives in an interval, where |tan(x)| grows to infinity.  */\n   svint32_t alt = svand_x (pg, in, 1);\n   svbool_t pred_alt = svcmpne (pg, alt, 0);\n-\n   /* r = x - n * (pi/2)  (range reduction into 0 .. pi/4).  */\n   svfloat32_t r;\n   r = svmls_lane (x, n, pi_vals, 0);\n@@ -93,7 +88,7 @@ svfloat32_t SV_NAME_F1 (tan) (svfloat32_t x, const svbool_t pg)\n \n   /* Evaluate polynomial approximation of tangent on [-pi/4, pi/4],\n      using Estrin on z^2.  */\n-  svfloat32_t z2 = svmul_x (pg, z, z);\n+  svfloat32_t z2 = svmul_x (svptrue_b32 (), r, r);\n   svfloat32_t p01 = svmla_lane (sv_f32 (d->c0), z2, odd_coeffs, 0);\n   svfloat32_t p23 = svmla_lane (sv_f32 (d->c2), z2, odd_coeffs, 1);\n   svfloat32_t p45 = svmla_lane (sv_f32 (d->c4), z2, odd_coeffs, 2);\n@@ -106,13 +101,14 @@ svfloat32_t SV_NAME_F1 (tan) (svfloat32_t x, const svbool_t pg)\n \n   svfloat32_t y = svmla_x (pg, z, p, svmul_x (pg, z, z2));\n \n-  /* Transform result back, if necessary.  */\n-  svfloat32_t inv_y = svdivr_x (pg, y, 1.0f);\n-\n   /* No need to pass pg to specialcase here since cmp is a strict subset,\n      guaranteed by the cmpge above.  */\n+\n+  /* Determine whether input is too large to perform fast regression.  */\n+  svbool_t cmp = svacge (pg, x, d->range_val);\n   if (__glibc_unlikely (svptest_any (pg, cmp)))\n-    return special_case (x, svsel (pred_alt, inv_y, y), cmp);\n+    return special_case (x, svdivr_x (pg, y, 1.0f), cmp);\n \n+  svfloat32_t inv_y = svdivr_x (pg, y, 1.0f);\n   return svsel (pred_alt, inv_y, y);\n }\n\ncommit ab5ba6c188159bb5e12be95cd90458924c2fe592\nAuthor: Yat Long Poon <yatlong.poon@arm.com>\nDate:   Fri Jan 3 19:07:30 2025 +0000\n\n    AArch64: Improve codegen for SVE logs\n    \n    Reduce memory access by using lanewise MLA and moving constants to struct\n    and reduce number of MOVPRFXs.\n    Update maximum ULP error for double log_sve from 1 to 2.\n    Speedup on Neoverse V1 for log (3%), log2 (5%), and log10 (4%).\n    \n    (cherry picked from commit 32d193a372feb28f9da247bb7283d404b84429c6)\n\ndiff --git a/sysdeps/aarch64/fpu/log10_sve.c b/sysdeps/aarch64/fpu/log10_sve.c\nindex ab7362128d..f1cad2759a 100644\n--- a/sysdeps/aarch64/fpu/log10_sve.c\n+++ b/sysdeps/aarch64/fpu/log10_sve.c\n@@ -23,28 +23,49 @@\n #define Min 0x0010000000000000\n #define Max 0x7ff0000000000000\n #define Thres 0x7fe0000000000000 /* Max - Min.  */\n-#define Off 0x3fe6900900000000\n #define N (1 << V_LOG10_TABLE_BITS)\n \n+static const struct data\n+{\n+  double c0, c2;\n+  double c1, c3;\n+  double invln10, log10_2;\n+  double c4;\n+  uint64_t off;\n+} data = {\n+  .c0 = -0x1.bcb7b1526e506p-3,\n+  .c1 = 0x1.287a7636be1d1p-3,\n+  .c2 = -0x1.bcb7b158af938p-4,\n+  .c3 = 0x1.63c78734e6d07p-4,\n+  .c4 = -0x1.287461742fee4p-4,\n+  .invln10 = 0x1.bcb7b1526e50ep-2,\n+  .log10_2 = 0x1.34413509f79ffp-2,\n+  .off = 0x3fe6900900000000,\n+};\n+\n static svfloat64_t NOINLINE\n-special_case (svfloat64_t x, svfloat64_t y, svbool_t special)\n+special_case (svfloat64_t hi, svuint64_t tmp, svfloat64_t y, svfloat64_t r2,\n+\t      svbool_t special, const struct data *d)\n {\n-  return sv_call_f64 (log10, x, y, special);\n+  svfloat64_t x = svreinterpret_f64 (svadd_x (svptrue_b64 (), tmp, d->off));\n+  return sv_call_f64 (log10, x, svmla_x (svptrue_b64 (), hi, r2, y), special);\n }\n \n-/* SVE log10 algorithm.\n+/* Double-precision SVE log10 routine.\n    Maximum measured error is 2.46 ulps.\n    SV_NAME_D1 (log10)(0x1.131956cd4b627p+0) got 0x1.fffbdf6eaa669p-6\n \t\t\t\t\t   want 0x1.fffbdf6eaa667p-6.  */\n svfloat64_t SV_NAME_D1 (log10) (svfloat64_t x, const svbool_t pg)\n {\n+  const struct data *d = ptr_barrier (&data);\n+\n   svuint64_t ix = svreinterpret_u64 (x);\n   svbool_t special = svcmpge (pg, svsub_x (pg, ix, Min), Thres);\n \n   /* x = 2^k z; where z is in range [Off,2*Off) and exact.\n      The range is split into N subintervals.\n      The ith subinterval contains z and c is near its center.  */\n-  svuint64_t tmp = svsub_x (pg, ix, Off);\n+  svuint64_t tmp = svsub_x (pg, ix, d->off);\n   svuint64_t i = svlsr_x (pg, tmp, 51 - V_LOG10_TABLE_BITS);\n   i = svand_x (pg, i, (N - 1) << 1);\n   svfloat64_t k = svcvt_f64_x (pg, svasr_x (pg, svreinterpret_s64 (tmp), 52));\n@@ -62,15 +83,19 @@ svfloat64_t SV_NAME_D1 (log10) (svfloat64_t x, const svbool_t pg)\n   svfloat64_t r = svmad_x (pg, invc, z, -1.0);\n \n   /* hi = log(c) + k*log(2).  */\n-  svfloat64_t w = svmla_x (pg, logc, r, __v_log10_data.invln10);\n-  svfloat64_t hi = svmla_x (pg, w, k, __v_log10_data.log10_2);\n+  svfloat64_t invln10_log10_2 = svld1rq_f64 (svptrue_b64 (), &d->invln10);\n+  svfloat64_t w = svmla_lane_f64 (logc, r, invln10_log10_2, 0);\n+  svfloat64_t hi = svmla_lane_f64 (w, k, invln10_log10_2, 1);\n \n   /* y = r2*(A0 + r*A1 + r2*(A2 + r*A3 + r2*A4)) + hi.  */\n-  svfloat64_t r2 = svmul_x (pg, r, r);\n-  svfloat64_t y = sv_pw_horner_4_f64_x (pg, r, r2, __v_log10_data.poly);\n+  svfloat64_t odd_coeffs = svld1rq_f64 (svptrue_b64 (), &d->c1);\n+  svfloat64_t r2 = svmul_x (svptrue_b64 (), r, r);\n+  svfloat64_t y = svmla_lane_f64 (sv_f64 (d->c2), r, odd_coeffs, 1);\n+  svfloat64_t p = svmla_lane_f64 (sv_f64 (d->c0), r, odd_coeffs, 0);\n+  y = svmla_x (pg, y, r2, d->c4);\n+  y = svmla_x (pg, p, r2, y);\n \n   if (__glibc_unlikely (svptest_any (pg, special)))\n-    return special_case (x, svmla_x (svnot_z (pg, special), hi, r2, y),\n-\t\t\t special);\n+    return special_case (hi, tmp, y, r2, special, d);\n   return svmla_x (pg, hi, r2, y);\n }\ndiff --git a/sysdeps/aarch64/fpu/log2_sve.c b/sysdeps/aarch64/fpu/log2_sve.c\nindex 743fa2a913..908e638246 100644\n--- a/sysdeps/aarch64/fpu/log2_sve.c\n+++ b/sysdeps/aarch64/fpu/log2_sve.c\n@@ -21,15 +21,32 @@\n #include \"poly_sve_f64.h\"\n \n #define N (1 << V_LOG2_TABLE_BITS)\n-#define Off 0x3fe6900900000000\n #define Max (0x7ff0000000000000)\n #define Min (0x0010000000000000)\n #define Thresh (0x7fe0000000000000) /* Max - Min.  */\n \n+static const struct data\n+{\n+  double c0, c2;\n+  double c1, c3;\n+  double invln2, c4;\n+  uint64_t off;\n+} data = {\n+  .c0 = -0x1.71547652b83p-1,\n+  .c1 = 0x1.ec709dc340953p-2,\n+  .c2 = -0x1.71547651c8f35p-2,\n+  .c3 = 0x1.2777ebe12dda5p-2,\n+  .c4 = -0x1.ec738d616fe26p-3,\n+  .invln2 = 0x1.71547652b82fep0,\n+  .off = 0x3fe6900900000000,\n+};\n+\n static svfloat64_t NOINLINE\n-special_case (svfloat64_t x, svfloat64_t y, svbool_t cmp)\n+special_case (svfloat64_t w, svuint64_t tmp, svfloat64_t y, svfloat64_t r2,\n+\t      svbool_t special, const struct data *d)\n {\n-  return sv_call_f64 (log2, x, y, cmp);\n+  svfloat64_t x = svreinterpret_f64 (svadd_x (svptrue_b64 (), tmp, d->off));\n+  return sv_call_f64 (log2, x, svmla_x (svptrue_b64 (), w, r2, y), special);\n }\n \n /* Double-precision SVE log2 routine.\n@@ -40,13 +57,15 @@ special_case (svfloat64_t x, svfloat64_t y, svbool_t cmp)\n \t\t\t\t\t  want 0x1.fffb34198d9ddp-5.  */\n svfloat64_t SV_NAME_D1 (log2) (svfloat64_t x, const svbool_t pg)\n {\n+  const struct data *d = ptr_barrier (&data);\n+\n   svuint64_t ix = svreinterpret_u64 (x);\n   svbool_t special = svcmpge (pg, svsub_x (pg, ix, Min), Thresh);\n \n   /* x = 2^k z; where z is in range [Off,2*Off) and exact.\n      The range is split into N subintervals.\n      The ith subinterval contains z and c is near its center.  */\n-  svuint64_t tmp = svsub_x (pg, ix, Off);\n+  svuint64_t tmp = svsub_x (pg, ix, d->off);\n   svuint64_t i = svlsr_x (pg, tmp, 51 - V_LOG2_TABLE_BITS);\n   i = svand_x (pg, i, (N - 1) << 1);\n   svfloat64_t k = svcvt_f64_x (pg, svasr_x (pg, svreinterpret_s64 (tmp), 52));\n@@ -59,15 +78,19 @@ svfloat64_t SV_NAME_D1 (log2) (svfloat64_t x, const svbool_t pg)\n \n   /* log2(x) = log1p(z/c-1)/log(2) + log2(c) + k.  */\n \n+  svfloat64_t invln2_and_c4 = svld1rq_f64 (svptrue_b64 (), &d->invln2);\n   svfloat64_t r = svmad_x (pg, invc, z, -1.0);\n-  svfloat64_t w = svmla_x (pg, log2c, r, __v_log2_data.invln2);\n-\n-  svfloat64_t r2 = svmul_x (pg, r, r);\n-  svfloat64_t y = sv_pw_horner_4_f64_x (pg, r, r2, __v_log2_data.poly);\n+  svfloat64_t w = svmla_lane_f64 (log2c, r, invln2_and_c4, 0);\n   w = svadd_x (pg, k, w);\n \n+  svfloat64_t odd_coeffs = svld1rq_f64 (svptrue_b64 (), &d->c1);\n+  svfloat64_t r2 = svmul_x (svptrue_b64 (), r, r);\n+  svfloat64_t y = svmla_lane_f64 (sv_f64 (d->c2), r, odd_coeffs, 1);\n+  svfloat64_t p = svmla_lane_f64 (sv_f64 (d->c0), r, odd_coeffs, 0);\n+  y = svmla_lane_f64 (y, r2, invln2_and_c4, 1);\n+  y = svmla_x (pg, p, r2, y);\n+\n   if (__glibc_unlikely (svptest_any (pg, special)))\n-    return special_case (x, svmla_x (svnot_z (pg, special), w, r2, y),\n-\t\t\t special);\n+    return special_case (w, tmp, y, r2, special, d);\n   return svmla_x (pg, w, r2, y);\n }\ndiff --git a/sysdeps/aarch64/fpu/log_sve.c b/sysdeps/aarch64/fpu/log_sve.c\nindex 9b689f2ec7..044223400b 100644\n--- a/sysdeps/aarch64/fpu/log_sve.c\n+++ b/sysdeps/aarch64/fpu/log_sve.c\n@@ -19,39 +19,54 @@\n \n #include \"sv_math.h\"\n \n-#define P(i) sv_f64 (__v_log_data.poly[i])\n #define N (1 << V_LOG_TABLE_BITS)\n-#define Off (0x3fe6900900000000)\n-#define MaxTop (0x7ff)\n-#define MinTop (0x001)\n-#define ThreshTop (0x7fe) /* MaxTop - MinTop.  */\n+#define Max (0x7ff0000000000000)\n+#define Min (0x0010000000000000)\n+#define Thresh (0x7fe0000000000000) /* Max - Min.  */\n+\n+static const struct data\n+{\n+  double c0, c2;\n+  double c1, c3;\n+  double ln2, c4;\n+  uint64_t off;\n+} data = {\n+  .c0 = -0x1.ffffffffffff7p-2,\n+  .c1 = 0x1.55555555170d4p-2,\n+  .c2 = -0x1.0000000399c27p-2,\n+  .c3 = 0x1.999b2e90e94cap-3,\n+  .c4 = -0x1.554e550bd501ep-3,\n+  .ln2 = 0x1.62e42fefa39efp-1,\n+  .off = 0x3fe6900900000000,\n+};\n \n static svfloat64_t NOINLINE\n-special_case (svfloat64_t x, svfloat64_t y, svbool_t cmp)\n+special_case (svfloat64_t hi, svuint64_t tmp, svfloat64_t y, svfloat64_t r2,\n+\t      svbool_t special, const struct data *d)\n {\n-  return sv_call_f64 (log, x, y, cmp);\n+  svfloat64_t x = svreinterpret_f64 (svadd_x (svptrue_b64 (), tmp, d->off));\n+  return sv_call_f64 (log, x, svmla_x (svptrue_b64 (), hi, r2, y), special);\n }\n \n-/* SVE port of AdvSIMD log algorithm.\n-   Maximum measured error is 2.17 ulp:\n-   SV_NAME_D1 (log)(0x1.a6129884398a3p+0) got 0x1.ffffff1cca043p-2\n-\t\t\t\t\t want 0x1.ffffff1cca045p-2.  */\n+/* Double-precision SVE log routine.\n+   Maximum measured error is 2.64 ulp:\n+   SV_NAME_D1 (log)(0x1.95e54bc91a5e2p+184) got 0x1.fffffffe88cacp+6\n+\t\t\t\t\t   want 0x1.fffffffe88cafp+6.  */\n svfloat64_t SV_NAME_D1 (log) (svfloat64_t x, const svbool_t pg)\n {\n+  const struct data *d = ptr_barrier (&data);\n+\n   svuint64_t ix = svreinterpret_u64 (x);\n-  svuint64_t top = svlsr_x (pg, ix, 52);\n-  svbool_t cmp = svcmpge (pg, svsub_x (pg, top, MinTop), sv_u64 (ThreshTop));\n+  svbool_t special = svcmpge (pg, svsub_x (pg, ix, Min), Thresh);\n \n   /* x = 2^k z; where z is in range [Off,2*Off) and exact.\n      The range is split into N subintervals.\n      The ith subinterval contains z and c is near its center.  */\n-  svuint64_t tmp = svsub_x (pg, ix, Off);\n+  svuint64_t tmp = svsub_x (pg, ix, d->off);\n   /* Calculate table index = (tmp >> (52 - V_LOG_TABLE_BITS)) % N.\n      The actual value of i is double this due to table layout.  */\n   svuint64_t i\n       = svand_x (pg, svlsr_x (pg, tmp, (51 - V_LOG_TABLE_BITS)), (N - 1) << 1);\n-  svint64_t k\n-      = svasr_x (pg, svreinterpret_s64 (tmp), 52); /* Arithmetic shift.  */\n   svuint64_t iz = svsub_x (pg, ix, svand_x (pg, tmp, 0xfffULL << 52));\n   svfloat64_t z = svreinterpret_f64 (iz);\n   /* Lookup in 2 global lists (length N).  */\n@@ -59,18 +74,22 @@ svfloat64_t SV_NAME_D1 (log) (svfloat64_t x, const svbool_t pg)\n   svfloat64_t logc = svld1_gather_index (pg, &__v_log_data.table[0].logc, i);\n \n   /* log(x) = log1p(z/c-1) + log(c) + k*Ln2.  */\n-  svfloat64_t r = svmad_x (pg, invc, z, -1);\n-  svfloat64_t kd = svcvt_f64_x (pg, k);\n+  svfloat64_t kd = svcvt_f64_x (pg, svasr_x (pg, svreinterpret_s64 (tmp), 52));\n   /* hi = r + log(c) + k*Ln2.  */\n-  svfloat64_t hi = svmla_x (pg, svadd_x (pg, logc, r), kd, __v_log_data.ln2);\n+  svfloat64_t ln2_and_c4 = svld1rq_f64 (svptrue_b64 (), &d->ln2);\n+  svfloat64_t r = svmad_x (pg, invc, z, -1);\n+  svfloat64_t hi = svmla_lane_f64 (logc, kd, ln2_and_c4, 0);\n+  hi = svadd_x (pg, r, hi);\n+\n   /* y = r2*(A0 + r*A1 + r2*(A2 + r*A3 + r2*A4)) + hi.  */\n-  svfloat64_t r2 = svmul_x (pg, r, r);\n-  svfloat64_t y = svmla_x (pg, P (2), r, P (3));\n-  svfloat64_t p = svmla_x (pg, P (0), r, P (1));\n-  y = svmla_x (pg, y, r2, P (4));\n+  svfloat64_t odd_coeffs = svld1rq_f64 (svptrue_b64 (), &d->c1);\n+  svfloat64_t r2 = svmul_x (svptrue_b64 (), r, r);\n+  svfloat64_t y = svmla_lane_f64 (sv_f64 (d->c2), r, odd_coeffs, 1);\n+  svfloat64_t p = svmla_lane_f64 (sv_f64 (d->c0), r, odd_coeffs, 0);\n+  y = svmla_lane_f64 (y, r2, ln2_and_c4, 1);\n   y = svmla_x (pg, p, r2, y);\n \n-  if (__glibc_unlikely (svptest_any (pg, cmp)))\n-    return special_case (x, svmla_x (svnot_z (pg, cmp), hi, r2, y), cmp);\n+  if (__glibc_unlikely (svptest_any (pg, special)))\n+    return special_case (hi, tmp, y, r2, special, d);\n   return svmla_x (pg, hi, r2, y);\n }\ndiff --git a/sysdeps/aarch64/libm-test-ulps b/sysdeps/aarch64/libm-test-ulps\nindex 6c96304611..b76c38dac2 100644\n--- a/sysdeps/aarch64/libm-test-ulps\n+++ b/sysdeps/aarch64/libm-test-ulps\n@@ -1460,7 +1460,7 @@ float: 2\n ldouble: 1\n \n Function: \"log_sve\":\n-double: 1\n+double: 2\n float: 3\n \n Function: \"log_towardzero\":\n\ncommit aa7c61ea15e27ae14717e065a5d4c50baa472851\nAuthor: Yat Long Poon <yatlong.poon@arm.com>\nDate:   Fri Jan 3 19:09:05 2025 +0000\n\n    AArch64: Improve codegen for SVE log1pf users\n    \n    Reduce memory access by using lanewise MLA and reduce number of MOVPRFXs.\n    Move log1pf implementation to inline helper function.\n    Speedup on Neoverse V1 for log1pf (10%), acoshf (-1%), atanhf (2%), asinhf (2%).\n    \n    (cherry picked from commit 91c1fadba338752bf514cd4cca057b27b1b10eed)\n\ndiff --git a/sysdeps/aarch64/fpu/acoshf_sve.c b/sysdeps/aarch64/fpu/acoshf_sve.c\nindex 2110894e62..491365e24d 100644\n--- a/sysdeps/aarch64/fpu/acoshf_sve.c\n+++ b/sysdeps/aarch64/fpu/acoshf_sve.c\n@@ -17,23 +17,26 @@\n    License along with the GNU C Library; if not, see\n    <https://www.gnu.org/licenses/>.  */\n \n+#include \"sv_math.h\"\n+#include \"sv_log1pf_inline.h\"\n+\n #define One 0x3f800000\n #define Thres 0x20000000 /* asuint(0x1p64) - One.  */\n \n-#include \"sv_log1pf_inline.h\"\n-\n static svfloat32_t NOINLINE\n-special_case (svfloat32_t x, svfloat32_t y, svbool_t special)\n+special_case (svfloat32_t xm1, svfloat32_t tmp, svbool_t special)\n {\n+  svfloat32_t x = svadd_x (svptrue_b32 (), xm1, 1.0f);\n+  svfloat32_t y = sv_log1pf_inline (tmp, svptrue_b32 ());\n   return sv_call_f32 (acoshf, x, y, special);\n }\n \n /* Single-precision SVE acosh(x) routine. Implements the same algorithm as\n    vector acoshf and log1p.\n \n-   Maximum error is 2.78 ULPs:\n-   SV_NAME_F1 (acosh) (0x1.01e996p+0) got 0x1.f45b42p-4\n-\t\t\t\t     want 0x1.f45b3cp-4.  */\n+   Maximum error is 2.47 ULPs:\n+   SV_NAME_F1 (acosh) (0x1.01ca76p+0) got 0x1.e435a6p-4\n+\t\t\t\t     want 0x1.e435a2p-4.  */\n svfloat32_t SV_NAME_F1 (acosh) (svfloat32_t x, const svbool_t pg)\n {\n   svuint32_t ix = svreinterpret_u32 (x);\n@@ -41,9 +44,9 @@ svfloat32_t SV_NAME_F1 (acosh) (svfloat32_t x, const svbool_t pg)\n \n   svfloat32_t xm1 = svsub_x (pg, x, 1.0f);\n   svfloat32_t u = svmul_x (pg, xm1, svadd_x (pg, x, 1.0f));\n-  svfloat32_t y = sv_log1pf_inline (svadd_x (pg, xm1, svsqrt_x (pg, u)), pg);\n+  svfloat32_t tmp = svadd_x (pg, xm1, svsqrt_x (pg, u));\n \n   if (__glibc_unlikely (svptest_any (pg, special)))\n-    return special_case (x, y, special);\n-  return y;\n+    return special_case (xm1, tmp, special);\n+  return sv_log1pf_inline (tmp, pg);\n }\ndiff --git a/sysdeps/aarch64/fpu/asinhf_sve.c b/sysdeps/aarch64/fpu/asinhf_sve.c\nindex d85c3a685c..b7f253bf32 100644\n--- a/sysdeps/aarch64/fpu/asinhf_sve.c\n+++ b/sysdeps/aarch64/fpu/asinhf_sve.c\n@@ -20,20 +20,23 @@\n #include \"sv_math.h\"\n #include \"sv_log1pf_inline.h\"\n \n-#define BigBound (0x5f800000)  /* asuint(0x1p64).  */\n+#define BigBound 0x5f800000 /* asuint(0x1p64).  */\n \n static svfloat32_t NOINLINE\n-special_case (svfloat32_t x, svfloat32_t y, svbool_t special)\n+special_case (svuint32_t iax, svuint32_t sign, svfloat32_t y, svbool_t special)\n {\n+  svfloat32_t x = svreinterpret_f32 (sveor_x (svptrue_b32 (), iax, sign));\n+  y = svreinterpret_f32 (\n+      svorr_x (svptrue_b32 (), sign, svreinterpret_u32 (y)));\n   return sv_call_f32 (asinhf, x, y, special);\n }\n \n /* Single-precision SVE asinh(x) routine. Implements the same algorithm as\n    vector asinhf and log1p.\n \n-   Maximum error is 2.48 ULPs:\n-   SV_NAME_F1 (asinh) (0x1.008864p-3) got 0x1.ffbbbcp-4\n-\t\t\t\t     want 0x1.ffbbb8p-4.  */\n+   Maximum error is 1.92 ULPs:\n+   SV_NAME_F1 (asinh) (-0x1.0922ecp-1) got -0x1.fd0bccp-2\n+\t\t\t\t      want -0x1.fd0bc8p-2.  */\n svfloat32_t SV_NAME_F1 (asinh) (svfloat32_t x, const svbool_t pg)\n {\n   svfloat32_t ax = svabs_x (pg, x);\n@@ -49,8 +52,6 @@ svfloat32_t SV_NAME_F1 (asinh) (svfloat32_t x, const svbool_t pg)\n       = sv_log1pf_inline (svadd_x (pg, ax, svdiv_x (pg, ax2, d)), pg);\n \n   if (__glibc_unlikely (svptest_any (pg, special)))\n-    return special_case (\n-\tx, svreinterpret_f32 (svorr_x (pg, sign, svreinterpret_u32 (y))),\n-\tspecial);\n+    return special_case (iax, sign, y, special);\n   return svreinterpret_f32 (svorr_x (pg, sign, svreinterpret_u32 (y)));\n }\ndiff --git a/sysdeps/aarch64/fpu/atanhf_sve.c b/sysdeps/aarch64/fpu/atanhf_sve.c\nindex dae83041ef..2d3005bbc8 100644\n--- a/sysdeps/aarch64/fpu/atanhf_sve.c\n+++ b/sysdeps/aarch64/fpu/atanhf_sve.c\n@@ -17,21 +17,25 @@\n    License along with the GNU C Library; if not, see\n    <https://www.gnu.org/licenses/>.  */\n \n+#include \"sv_math.h\"\n #include \"sv_log1pf_inline.h\"\n \n #define One (0x3f800000)\n #define Half (0x3f000000)\n \n static svfloat32_t NOINLINE\n-special_case (svfloat32_t x, svfloat32_t y, svbool_t special)\n+special_case (svuint32_t iax, svuint32_t sign, svfloat32_t halfsign,\n+\t      svfloat32_t y, svbool_t special)\n {\n+  svfloat32_t x = svreinterpret_f32 (sveor_x (svptrue_b32 (), iax, sign));\n+  y = svmul_x (svptrue_b32 (), halfsign, y);\n   return sv_call_f32 (atanhf, x, y, special);\n }\n \n /* Approximation for vector single-precision atanh(x) using modified log1p.\n-   The maximum error is 2.28 ULP:\n-   _ZGVsMxv_atanhf(0x1.ff1194p-5) got 0x1.ffbbbcp-5\n-\t\t\t\t want 0x1.ffbbb6p-5.  */\n+   The maximum error is 1.99 ULP:\n+   _ZGVsMxv_atanhf(0x1.f1583p-5) got 0x1.f1f4fap-5\n+\t\t\t\twant 0x1.f1f4f6p-5.  */\n svfloat32_t SV_NAME_F1 (atanh) (svfloat32_t x, const svbool_t pg)\n {\n   svfloat32_t ax = svabs_x (pg, x);\n@@ -48,7 +52,7 @@ svfloat32_t SV_NAME_F1 (atanh) (svfloat32_t x, const svbool_t pg)\n   y = sv_log1pf_inline (y, pg);\n \n   if (__glibc_unlikely (svptest_any (pg, special)))\n-    return special_case (x, svmul_x (pg, halfsign, y), special);\n+    return special_case (iax, sign, halfsign, y, special);\n \n   return svmul_x (pg, halfsign, y);\n }\ndiff --git a/sysdeps/aarch64/fpu/log1pf_sve.c b/sysdeps/aarch64/fpu/log1pf_sve.c\nindex 5256d5e94c..18a185c838 100644\n--- a/sysdeps/aarch64/fpu/log1pf_sve.c\n+++ b/sysdeps/aarch64/fpu/log1pf_sve.c\n@@ -18,30 +18,13 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include \"sv_math.h\"\n-#include \"poly_sve_f32.h\"\n-\n-static const struct data\n-{\n-  float poly[8];\n-  float ln2, exp_bias;\n-  uint32_t four, three_quarters;\n-} data = {.poly = {/* Do not store first term of polynomial, which is -0.5, as\n-                      this can be fmov-ed directly instead of including it in\n-                      the main load-and-mla polynomial schedule.  */\n-\t\t   0x1.5555aap-2f, -0x1.000038p-2f, 0x1.99675cp-3f,\n-\t\t   -0x1.54ef78p-3f, 0x1.28a1f4p-3f, -0x1.0da91p-3f,\n-\t\t   0x1.abcb6p-4f, -0x1.6f0d5ep-5f},\n-\t  .ln2 = 0x1.62e43p-1f,\n-\t  .exp_bias = 0x1p-23f,\n-\t  .four = 0x40800000,\n-\t  .three_quarters = 0x3f400000};\n-\n-#define SignExponentMask 0xff800000\n+#include \"sv_log1pf_inline.h\"\n \n static svfloat32_t NOINLINE\n-special_case (svfloat32_t x, svfloat32_t y, svbool_t special)\n+special_case (svfloat32_t x, svbool_t special)\n {\n-  return sv_call_f32 (log1pf, x, y, special);\n+  return sv_call_f32 (log1pf, x, sv_log1pf_inline (x, svptrue_b32 ()),\n+\t\t      special);\n }\n \n /* Vector log1pf approximation using polynomial on reduced interval. Worst-case\n@@ -50,53 +33,14 @@ special_case (svfloat32_t x, svfloat32_t y, svbool_t special)\n \t\t\t\t want 0x1.9f323ep-2.  */\n svfloat32_t SV_NAME_F1 (log1p) (svfloat32_t x, svbool_t pg)\n {\n-  const struct data *d = ptr_barrier (&data);\n   /* x < -1, Inf/Nan.  */\n   svbool_t special = svcmpeq (pg, svreinterpret_u32 (x), 0x7f800000);\n   special = svorn_z (pg, special, svcmpge (pg, x, -1));\n \n-  /* With x + 1 = t * 2^k (where t = m + 1 and k is chosen such that m\n-\t\t\t   is in [-0.25, 0.5]):\n-     log1p(x) = log(t) + log(2^k) = log1p(m) + k*log(2).\n-\n-     We approximate log1p(m) with a polynomial, then scale by\n-     k*log(2). Instead of doing this directly, we use an intermediate\n-     scale factor s = 4*k*log(2) to ensure the scale is representable\n-     as a normalised fp32 number.  */\n-  svfloat32_t m = svadd_x (pg, x, 1);\n-\n-  /* Choose k to scale x to the range [-1/4, 1/2].  */\n-  svint32_t k\n-      = svand_x (pg, svsub_x (pg, svreinterpret_s32 (m), d->three_quarters),\n-\t\t sv_s32 (SignExponentMask));\n-\n-  /* Scale x by exponent manipulation.  */\n-  svfloat32_t m_scale = svreinterpret_f32 (\n-      svsub_x (pg, svreinterpret_u32 (x), svreinterpret_u32 (k)));\n-\n-  /* Scale up to ensure that the scale factor is representable as normalised\n-     fp32 number, and scale m down accordingly.  */\n-  svfloat32_t s = svreinterpret_f32 (svsubr_x (pg, k, d->four));\n-  m_scale = svadd_x (pg, m_scale, svmla_x (pg, sv_f32 (-1), s, 0.25));\n-\n-  /* Evaluate polynomial on reduced interval.  */\n-  svfloat32_t ms2 = svmul_x (pg, m_scale, m_scale),\n-\t      ms4 = svmul_x (pg, ms2, ms2);\n-  svfloat32_t p = sv_estrin_7_f32_x (pg, m_scale, ms2, ms4, d->poly);\n-  p = svmad_x (pg, m_scale, p, -0.5);\n-  p = svmla_x (pg, m_scale, m_scale, svmul_x (pg, m_scale, p));\n-\n-  /* The scale factor to be applied back at the end - by multiplying float(k)\n-     by 2^-23 we get the unbiased exponent of k.  */\n-  svfloat32_t scale_back = svmul_x (pg, svcvt_f32_x (pg, k), d->exp_bias);\n-\n-  /* Apply the scaling back.  */\n-  svfloat32_t y = svmla_x (pg, p, scale_back, d->ln2);\n-\n   if (__glibc_unlikely (svptest_any (pg, special)))\n-    return special_case (x, y, special);\n+    return special_case (x, special);\n \n-  return y;\n+  return sv_log1pf_inline (x, pg);\n }\n \n strong_alias (SV_NAME_F1 (log1p), SV_NAME_F1 (logp1))\ndiff --git a/sysdeps/aarch64/fpu/sv_log1pf_inline.h b/sysdeps/aarch64/fpu/sv_log1pf_inline.h\nindex b94b2da055..850297d615 100644\n--- a/sysdeps/aarch64/fpu/sv_log1pf_inline.h\n+++ b/sysdeps/aarch64/fpu/sv_log1pf_inline.h\n@@ -22,55 +22,76 @@\n \n #include \"sv_math.h\"\n #include \"vecmath_config.h\"\n-#include \"poly_sve_f32.h\"\n+\n+#define SignExponentMask 0xff800000\n \n static const struct sv_log1pf_data\n {\n-  float32_t poly[9];\n-  float32_t ln2;\n-  float32_t scale_back;\n+  float c0, c2, c4, c6;\n+  float c1, c3, c5, c7;\n+  float ln2, exp_bias, quarter;\n+  uint32_t four, three_quarters;\n } sv_log1pf_data = {\n-  /* Polynomial generated using FPMinimax in [-0.25, 0.5].  */\n-  .poly = { -0x1p-1f, 0x1.5555aap-2f, -0x1.000038p-2f, 0x1.99675cp-3f,\n-\t    -0x1.54ef78p-3f, 0x1.28a1f4p-3f, -0x1.0da91p-3f, 0x1.abcb6p-4f,\n-\t    -0x1.6f0d5ep-5f },\n-  .scale_back = 0x1.0p-23f,\n-  .ln2 = 0x1.62e43p-1f,\n+  /* Do not store first term of polynomial, which is -0.5, as\n+     this can be fmov-ed directly instead of including it in\n+     the main load-and-mla polynomial schedule.  */\n+  .c0 = 0x1.5555aap-2f,\t\t.c1 = -0x1.000038p-2f, .c2 = 0x1.99675cp-3f,\n+  .c3 = -0x1.54ef78p-3f,\t.c4 = 0x1.28a1f4p-3f,  .c5 = -0x1.0da91p-3f,\n+  .c6 = 0x1.abcb6p-4f,\t\t.c7 = -0x1.6f0d5ep-5f, .ln2 = 0x1.62e43p-1f,\n+  .exp_bias = 0x1p-23f,\t\t.quarter = 0x1p-2f,    .four = 0x40800000,\n+  .three_quarters = 0x3f400000,\n };\n \n-static inline svfloat32_t\n-eval_poly (svfloat32_t m, const float32_t *c, svbool_t pg)\n-{\n-  svfloat32_t p_12 = svmla_x (pg, sv_f32 (c[0]), m, sv_f32 (c[1]));\n-  svfloat32_t m2 = svmul_x (pg, m, m);\n-  svfloat32_t q = svmla_x (pg, m, m2, p_12);\n-  svfloat32_t p = sv_pw_horner_6_f32_x (pg, m, m2, c + 2);\n-  p = svmul_x (pg, m2, p);\n-\n-  return svmla_x (pg, q, m2, p);\n-}\n-\n static inline svfloat32_t\n sv_log1pf_inline (svfloat32_t x, svbool_t pg)\n {\n   const struct sv_log1pf_data *d = ptr_barrier (&sv_log1pf_data);\n \n-  svfloat32_t m = svadd_x (pg, x, 1.0f);\n-\n-  svint32_t ks = svsub_x (pg, svreinterpret_s32 (m),\n-\t\t\t  svreinterpret_s32 (svdup_f32 (0.75f)));\n-  ks = svand_x (pg, ks, 0xff800000);\n-  svuint32_t k = svreinterpret_u32 (ks);\n-  svfloat32_t s = svreinterpret_f32 (\n-      svsub_x (pg, svreinterpret_u32 (svdup_f32 (4.0f)), k));\n-\n-  svfloat32_t m_scale\n-      = svreinterpret_f32 (svsub_x (pg, svreinterpret_u32 (x), k));\n-  m_scale\n-      = svadd_x (pg, m_scale, svmla_x (pg, sv_f32 (-1.0f), sv_f32 (0.25f), s));\n-  svfloat32_t p = eval_poly (m_scale, d->poly, pg);\n-  svfloat32_t scale_back = svmul_x (pg, svcvt_f32_x (pg, k), d->scale_back);\n-  return svmla_x (pg, p, scale_back, d->ln2);\n+  /* With x + 1 = t * 2^k (where t = m + 1 and k is chosen such that m\n+\t\t\t is in [-0.25, 0.5]):\n+   log1p(x) = log(t) + log(2^k) = log1p(m) + k*log(2).\n+\n+   We approximate log1p(m) with a polynomial, then scale by\n+   k*log(2). Instead of doing this directly, we use an intermediate\n+   scale factor s = 4*k*log(2) to ensure the scale is representable\n+   as a normalised fp32 number.  */\n+  svfloat32_t m = svadd_x (pg, x, 1);\n+\n+  /* Choose k to scale x to the range [-1/4, 1/2].  */\n+  svint32_t k\n+      = svand_x (pg, svsub_x (pg, svreinterpret_s32 (m), d->three_quarters),\n+\t\t sv_s32 (SignExponentMask));\n+\n+  /* Scale x by exponent manipulation.  */\n+  svfloat32_t m_scale = svreinterpret_f32 (\n+      svsub_x (pg, svreinterpret_u32 (x), svreinterpret_u32 (k)));\n+\n+  /* Scale up to ensure that the scale factor is representable as normalised\n+     fp32 number, and scale m down accordingly.  */\n+  svfloat32_t s = svreinterpret_f32 (svsubr_x (pg, k, d->four));\n+  svfloat32_t fconst = svld1rq_f32 (svptrue_b32 (), &d->ln2);\n+  m_scale = svadd_x (pg, m_scale, svmla_lane_f32 (sv_f32 (-1), s, fconst, 2));\n+\n+  /* Evaluate polynomial on reduced interval.  */\n+  svfloat32_t ms2 = svmul_x (svptrue_b32 (), m_scale, m_scale);\n+\n+  svfloat32_t c1357 = svld1rq_f32 (svptrue_b32 (), &d->c1);\n+  svfloat32_t p01 = svmla_lane_f32 (sv_f32 (d->c0), m_scale, c1357, 0);\n+  svfloat32_t p23 = svmla_lane_f32 (sv_f32 (d->c2), m_scale, c1357, 1);\n+  svfloat32_t p45 = svmla_lane_f32 (sv_f32 (d->c4), m_scale, c1357, 2);\n+  svfloat32_t p67 = svmla_lane_f32 (sv_f32 (d->c6), m_scale, c1357, 3);\n+\n+  svfloat32_t p = svmla_x (pg, p45, p67, ms2);\n+  p = svmla_x (pg, p23, p, ms2);\n+  p = svmla_x (pg, p01, p, ms2);\n+\n+  p = svmad_x (pg, m_scale, p, -0.5);\n+  p = svmla_x (pg, m_scale, m_scale, svmul_x (pg, m_scale, p));\n+\n+  /* The scale factor to be applied back at the end - by multiplying float(k)\n+   by 2^-23 we get the unbiased exponent of k.  */\n+  svfloat32_t scale_back = svmul_lane_f32 (svcvt_f32_x (pg, k), fconst, 1);\n+  return svmla_lane_f32 (p, scale_back, fconst, 0);\n }\n \n #endif\n\ncommit d983f14c304df2d880c7b01e904e4a889064b9b3\nAuthor: Luna Lamb <luna.lamb@arm.com>\nDate:   Fri Jan 3 20:15:17 2025 +0000\n\n    AArch64: Improve codegen in SVE expm1f and users\n    \n    Use unpredicated muls, use absolute compare and improve memory access.\n    Expm1f, sinhf and tanhf show 7%, 5% and 1% improvement in throughput\n    microbenchmark on Neoverse V1.\n    \n    (cherry picked from commit f86b4cf87581cf1e45702b07880679ffa0b1f47a)\n\ndiff --git a/sysdeps/aarch64/fpu/expm1f_sve.c b/sysdeps/aarch64/fpu/expm1f_sve.c\nindex 7c852125cd..05a66400d4 100644\n--- a/sysdeps/aarch64/fpu/expm1f_sve.c\n+++ b/sysdeps/aarch64/fpu/expm1f_sve.c\n@@ -18,7 +18,6 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include \"sv_math.h\"\n-#include \"poly_sve_f32.h\"\n \n /* Largest value of x for which expm1(x) should round to -1.  */\n #define SpecialBound 0x1.5ebc4p+6f\n@@ -28,20 +27,17 @@ static const struct data\n   /* These 4 are grouped together so they can be loaded as one quadword, then\n      used with _lane forms of svmla/svmls.  */\n   float c2, c4, ln2_hi, ln2_lo;\n-  float c0, c1, c3, inv_ln2, special_bound, shift;\n+  float c0, inv_ln2, c1, c3, special_bound;\n } data = {\n   /* Generated using fpminimax.  */\n   .c0 = 0x1.fffffep-2,\t\t .c1 = 0x1.5554aep-3,\n   .c2 = 0x1.555736p-5,\t\t .c3 = 0x1.12287cp-7,\n-  .c4 = 0x1.6b55a2p-10,\n+  .c4 = 0x1.6b55a2p-10,\t\t .inv_ln2 = 0x1.715476p+0f,\n+  .special_bound = SpecialBound, .ln2_lo = 0x1.7f7d1cp-20f,\n+  .ln2_hi = 0x1.62e4p-1f,\n \n-  .special_bound = SpecialBound, .shift = 0x1.8p23f,\n-  .inv_ln2 = 0x1.715476p+0f,\t .ln2_hi = 0x1.62e4p-1f,\n-  .ln2_lo = 0x1.7f7d1cp-20f,\n };\n \n-#define C(i) sv_f32 (d->c##i)\n-\n static svfloat32_t NOINLINE\n special_case (svfloat32_t x, svbool_t pg)\n {\n@@ -71,9 +67,8 @@ svfloat32_t SV_NAME_F1 (expm1) (svfloat32_t x, svbool_t pg)\n      and f = x - i * ln2, then f is in [-ln2/2, ln2/2].\n      exp(x) - 1 = 2^i * (expm1(f) + 1) - 1\n      where 2^i is exact because i is an integer.  */\n-  svfloat32_t j = svmla_x (pg, sv_f32 (d->shift), x, d->inv_ln2);\n-  j = svsub_x (pg, j, d->shift);\n-  svint32_t i = svcvt_s32_x (pg, j);\n+  svfloat32_t j = svmul_x (svptrue_b32 (), x, d->inv_ln2);\n+  j = svrinta_x (pg, j);\n \n   svfloat32_t f = svmls_lane (x, j, lane_constants, 2);\n   f = svmls_lane (f, j, lane_constants, 3);\n@@ -83,17 +78,17 @@ svfloat32_t SV_NAME_F1 (expm1) (svfloat32_t x, svbool_t pg)\n \t x + ax^2 + bx^3 + cx^4 ....\n      So we calculate the polynomial P(f) = a + bf + cf^2 + ...\n      and assemble the approximation expm1(f) ~= f + f^2 * P(f).  */\n-  svfloat32_t p12 = svmla_lane (C (1), f, lane_constants, 0);\n-  svfloat32_t p34 = svmla_lane (C (3), f, lane_constants, 1);\n-  svfloat32_t f2 = svmul_x (pg, f, f);\n+  svfloat32_t p12 = svmla_lane (sv_f32 (d->c1), f, lane_constants, 0);\n+  svfloat32_t p34 = svmla_lane (sv_f32 (d->c3), f, lane_constants, 1);\n+  svfloat32_t f2 = svmul_x (svptrue_b32 (), f, f);\n   svfloat32_t p = svmla_x (pg, p12, f2, p34);\n-  p = svmla_x (pg, C (0), f, p);\n+\n+  p = svmla_x (pg, sv_f32 (d->c0), f, p);\n   p = svmla_x (pg, f, f2, p);\n \n   /* Assemble the result.\n      expm1(x) ~= 2^i * (p + 1) - 1\n      Let t = 2^i.  */\n-  svfloat32_t t = svreinterpret_f32 (\n-      svadd_x (pg, svreinterpret_u32 (svlsl_x (pg, i, 23)), 0x3f800000));\n-  return svmla_x (pg, svsub_x (pg, t, 1), p, t);\n+  svfloat32_t t = svscale_x (pg, sv_f32 (1.0f), svcvt_s32_x (pg, j));\n+  return svmla_x (pg, svsub_x (pg, t, 1.0f), p, t);\n }\ndiff --git a/sysdeps/aarch64/fpu/sinhf_sve.c b/sysdeps/aarch64/fpu/sinhf_sve.c\nindex 6c204b57a2..50dd386774 100644\n--- a/sysdeps/aarch64/fpu/sinhf_sve.c\n+++ b/sysdeps/aarch64/fpu/sinhf_sve.c\n@@ -63,5 +63,5 @@ svfloat32_t SV_NAME_F1 (sinh) (svfloat32_t x, const svbool_t pg)\n   if (__glibc_unlikely (svptest_any (pg, special)))\n     return special_case (x, svmul_x (pg, t, halfsign), special);\n \n-  return svmul_x (pg, t, halfsign);\n+  return svmul_x (svptrue_b32 (), t, halfsign);\n }\ndiff --git a/sysdeps/aarch64/fpu/sv_expm1f_inline.h b/sysdeps/aarch64/fpu/sv_expm1f_inline.h\nindex 5b72451222..e46ddda543 100644\n--- a/sysdeps/aarch64/fpu/sv_expm1f_inline.h\n+++ b/sysdeps/aarch64/fpu/sv_expm1f_inline.h\n@@ -27,21 +27,18 @@ struct sv_expm1f_data\n   /* These 4 are grouped together so they can be loaded as one quadword, then\n    used with _lane forms of svmla/svmls.  */\n   float32_t c2, c4, ln2_hi, ln2_lo;\n-  float32_t c0, c1, c3, inv_ln2, shift;\n+  float c0, inv_ln2, c1, c3, special_bound;\n };\n \n /* Coefficients generated using fpminimax.  */\n #define SV_EXPM1F_DATA                                                        \\\n   {                                                                           \\\n-    .c0 = 0x1.fffffep-2, .c1 = 0x1.5554aep-3, .c2 = 0x1.555736p-5,            \\\n-    .c3 = 0x1.12287cp-7, .c4 = 0x1.6b55a2p-10,                                \\\n+    .c0 = 0x1.fffffep-2, .c1 = 0x1.5554aep-3, .inv_ln2 = 0x1.715476p+0f,      \\\n+    .c2 = 0x1.555736p-5, .c3 = 0x1.12287cp-7,                                 \\\n                                                                               \\\n-    .shift = 0x1.8p23f, .inv_ln2 = 0x1.715476p+0f, .ln2_hi = 0x1.62e4p-1f,    \\\n-    .ln2_lo = 0x1.7f7d1cp-20f,                                                \\\n+    .c4 = 0x1.6b55a2p-10, .ln2_lo = 0x1.7f7d1cp-20f, .ln2_hi = 0x1.62e4p-1f,  \\\n   }\n \n-#define C(i) sv_f32 (d->c##i)\n-\n static inline svfloat32_t\n expm1f_inline (svfloat32_t x, svbool_t pg, const struct sv_expm1f_data *d)\n {\n@@ -55,9 +52,8 @@ expm1f_inline (svfloat32_t x, svbool_t pg, const struct sv_expm1f_data *d)\n      and f = x - i * ln2, then f is in [-ln2/2, ln2/2].\n      exp(x) - 1 = 2^i * (expm1(f) + 1) - 1\n      where 2^i is exact because i is an integer.  */\n-  svfloat32_t j = svmla_x (pg, sv_f32 (d->shift), x, d->inv_ln2);\n-  j = svsub_x (pg, j, d->shift);\n-  svint32_t i = svcvt_s32_x (pg, j);\n+  svfloat32_t j = svmul_x (svptrue_b32 (), x, d->inv_ln2);\n+  j = svrinta_x (pg, j);\n \n   svfloat32_t f = svmls_lane (x, j, lane_constants, 2);\n   f = svmls_lane (f, j, lane_constants, 3);\n@@ -67,18 +63,18 @@ expm1f_inline (svfloat32_t x, svbool_t pg, const struct sv_expm1f_data *d)\n \t x + ax^2 + bx^3 + cx^4 ....\n      So we calculate the polynomial P(f) = a + bf + cf^2 + ...\n      and assemble the approximation expm1(f) ~= f + f^2 * P(f).  */\n-  svfloat32_t p12 = svmla_lane (C (1), f, lane_constants, 0);\n-  svfloat32_t p34 = svmla_lane (C (3), f, lane_constants, 1);\n-  svfloat32_t f2 = svmul_x (pg, f, f);\n+  svfloat32_t p12 = svmla_lane (sv_f32 (d->c1), f, lane_constants, 0);\n+  svfloat32_t p34 = svmla_lane (sv_f32 (d->c3), f, lane_constants, 1);\n+  svfloat32_t f2 = svmul_x (svptrue_b32 (), f, f);\n   svfloat32_t p = svmla_x (pg, p12, f2, p34);\n-  p = svmla_x (pg, C (0), f, p);\n+  p = svmla_x (pg, sv_f32 (d->c0), f, p);\n   p = svmla_x (pg, f, f2, p);\n \n   /* Assemble the result.\n      expm1(x) ~= 2^i * (p + 1) - 1\n      Let t = 2^i.  */\n-  svfloat32_t t = svscale_x (pg, sv_f32 (1), i);\n-  return svmla_x (pg, svsub_x (pg, t, 1), p, t);\n+  svfloat32_t t = svscale_x (pg, sv_f32 (1.0f), svcvt_s32_x (pg, j));\n+  return svmla_x (pg, svsub_x (pg, t, 1.0f), p, t);\n }\n \n #endif\ndiff --git a/sysdeps/aarch64/fpu/tanhf_sve.c b/sysdeps/aarch64/fpu/tanhf_sve.c\nindex 0b94523cf5..80dd679346 100644\n--- a/sysdeps/aarch64/fpu/tanhf_sve.c\n+++ b/sysdeps/aarch64/fpu/tanhf_sve.c\n@@ -19,20 +19,27 @@\n \n #include \"sv_expm1f_inline.h\"\n \n+/* Largest value of x for which tanhf(x) rounds to 1 (or -1 for negative).  */\n+#define BoringBound 0x1.205966p+3f\n+\n static const struct data\n {\n   struct sv_expm1f_data expm1f_consts;\n-  uint32_t boring_bound, onef;\n+  uint32_t onef, special_bound;\n+  float boring_bound;\n } data = {\n   .expm1f_consts = SV_EXPM1F_DATA,\n-  /* 0x1.205966p+3, above which tanhf rounds to 1 (or -1 for negative).  */\n-  .boring_bound = 0x41102cb3,\n   .onef = 0x3f800000,\n+  .special_bound = 0x7f800000,\n+  .boring_bound = BoringBound,\n };\n \n static svfloat32_t NOINLINE\n-special_case (svfloat32_t x, svfloat32_t y, svbool_t special)\n+special_case (svfloat32_t x, svbool_t pg, svbool_t is_boring,\n+\t      svfloat32_t boring, svfloat32_t q, svbool_t special)\n {\n+  svfloat32_t y\n+      = svsel_f32 (is_boring, boring, svdiv_x (pg, q, svadd_x (pg, q, 2.0)));\n   return sv_call_f32 (tanhf, x, y, special);\n }\n \n@@ -47,15 +54,16 @@ svfloat32_t SV_NAME_F1 (tanh) (svfloat32_t x, const svbool_t pg)\n   svfloat32_t ax = svabs_x (pg, x);\n   svuint32_t iax = svreinterpret_u32 (ax);\n   svuint32_t sign = sveor_x (pg, svreinterpret_u32 (x), iax);\n-  svbool_t is_boring = svcmpgt (pg, iax, d->boring_bound);\n   svfloat32_t boring = svreinterpret_f32 (svorr_x (pg, sign, d->onef));\n-\n-  svbool_t special = svcmpgt (pg, iax, 0x7f800000);\n+  svbool_t special = svcmpgt (pg, iax, d->special_bound);\n+  svbool_t is_boring = svacgt (pg, x, d->boring_bound);\n \n   /* tanh(x) = (e^2x - 1) / (e^2x + 1).  */\n-  svfloat32_t q = expm1f_inline (svmul_x (pg, x, 2.0), pg, &d->expm1f_consts);\n-  svfloat32_t y = svdiv_x (pg, q, svadd_x (pg, q, 2.0));\n+  svfloat32_t q = expm1f_inline (svmul_x (svptrue_b32 (), x, 2.0), pg,\n+\t\t\t\t &d->expm1f_consts);\n+\n   if (__glibc_unlikely (svptest_any (pg, special)))\n-    return special_case (x, svsel_f32 (is_boring, boring, y), special);\n+    return special_case (x, pg, is_boring, boring, q, special);\n+  svfloat32_t y = svdiv_x (pg, q, svadd_x (pg, q, 2.0));\n   return svsel_f32 (is_boring, boring, y);\n }\n\ncommit 0ff6a9ff79bca9384ce4ba20e8942d39cc377a14\nAuthor: Luna Lamb <luna.lamb@arm.com>\nDate:   Thu Feb 13 17:52:09 2025 +0000\n\n    Aarch64: Improve codegen in SVE asinh\n    \n    Use unpredicated muls, use lanewise mla's and improve memory access.\n    1% regression in throughput microbenchmark on Neoverse V1.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit 8f0e7fe61e0a2ad5ed777933703ce09053810ec4)\n\ndiff --git a/sysdeps/aarch64/fpu/asinh_sve.c b/sysdeps/aarch64/fpu/asinh_sve.c\nindex 28dc5c4587..fe8715e06c 100644\n--- a/sysdeps/aarch64/fpu/asinh_sve.c\n+++ b/sysdeps/aarch64/fpu/asinh_sve.c\n@@ -18,36 +18,49 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include \"sv_math.h\"\n-#include \"poly_sve_f64.h\"\n \n #define SignMask (0x8000000000000000)\n #define One (0x3ff0000000000000)\n #define Thres (0x5fe0000000000000) /* asuint64 (0x1p511).  */\n+#define IndexMask (((1 << V_LOG_TABLE_BITS) - 1) << 1)\n \n static const struct data\n {\n-  double poly[18];\n-  double ln2, p3, p1, p4, p0, p2;\n-  uint64_t n;\n-  uint64_t off;\n+  double even_coeffs[9];\n+  double ln2, p3, p1, p4, p0, p2, c1, c3, c5, c7, c9, c11, c13, c15, c17;\n+  uint64_t off, mask;\n \n } data = {\n-  /* Polynomial generated using Remez on [2^-26, 1].  */\n-  .poly\n-  = { -0x1.55555555554a7p-3, 0x1.3333333326c7p-4, -0x1.6db6db68332e6p-5,\n-      0x1.f1c71b26fb40dp-6, -0x1.6e8b8b654a621p-6, 0x1.1c4daa9e67871p-6,\n-      -0x1.c9871d10885afp-7, 0x1.7a16e8d9d2ecfp-7, -0x1.3ddca533e9f54p-7,\n-      0x1.0becef748dafcp-7, -0x1.b90c7099dd397p-8, 0x1.541f2bb1ffe51p-8,\n-      -0x1.d217026a669ecp-9, 0x1.0b5c7977aaf7p-9, -0x1.e0f37daef9127p-11,\n-      0x1.388b5fe542a6p-12, -0x1.021a48685e287p-14, 0x1.93d4ba83d34dap-18 },\n+   /* Polynomial generated using Remez on [2^-26, 1].  */\n+  .even_coeffs ={\n+    -0x1.55555555554a7p-3,\n+    -0x1.6db6db68332e6p-5,\n+    -0x1.6e8b8b654a621p-6,\n+    -0x1.c9871d10885afp-7,\n+    -0x1.3ddca533e9f54p-7,\n+    -0x1.b90c7099dd397p-8,\n+    -0x1.d217026a669ecp-9,\n+    -0x1.e0f37daef9127p-11,\n+    -0x1.021a48685e287p-14, },\n+\n+  .c1 = 0x1.3333333326c7p-4,\n+  .c3 = 0x1.f1c71b26fb40dp-6,\n+  .c5 = 0x1.1c4daa9e67871p-6,\n+  .c7 = 0x1.7a16e8d9d2ecfp-7,\n+  .c9 = 0x1.0becef748dafcp-7,\n+  .c11 = 0x1.541f2bb1ffe51p-8,\n+  .c13 = 0x1.0b5c7977aaf7p-9,\n+  .c15 = 0x1.388b5fe542a6p-12,\n+  .c17 = 0x1.93d4ba83d34dap-18,\n+\n   .ln2 = 0x1.62e42fefa39efp-1,\n   .p0 = -0x1.ffffffffffff7p-2,\n   .p1 = 0x1.55555555170d4p-2,\n   .p2 = -0x1.0000000399c27p-2,\n   .p3 = 0x1.999b2e90e94cap-3,\n   .p4 = -0x1.554e550bd501ep-3,\n-  .n = 1 << V_LOG_TABLE_BITS,\n-  .off = 0x3fe6900900000000\n+  .off = 0x3fe6900900000000,\n+  .mask = 0xfffULL << 52,\n };\n \n static svfloat64_t NOINLINE\n@@ -64,11 +77,10 @@ __sv_log_inline (svfloat64_t x, const struct data *d, const svbool_t pg)\n      of the algorithm used.  */\n \n   svuint64_t ix = svreinterpret_u64 (x);\n-  svuint64_t tmp = svsub_x (pg, ix, d->off);\n-  svuint64_t i = svand_x (pg, svlsr_x (pg, tmp, (51 - V_LOG_TABLE_BITS)),\n-\t\t\t  (d->n - 1) << 1);\n-  svint64_t k = svasr_x (pg, svreinterpret_s64 (tmp), 52);\n-  svuint64_t iz = svsub_x (pg, ix, svand_x (pg, tmp, 0xfffULL << 52));\n+  svuint64_t i_off = svsub_x (pg, ix, d->off);\n+  svuint64_t i\n+      = svand_x (pg, svlsr_x (pg, i_off, (51 - V_LOG_TABLE_BITS)), IndexMask);\n+  svuint64_t iz = svsub_x (pg, ix, svand_x (pg, i_off, d->mask));\n   svfloat64_t z = svreinterpret_f64 (iz);\n \n   svfloat64_t invc = svld1_gather_index (pg, &__v_log_data.table[0].invc, i);\n@@ -78,14 +90,14 @@ __sv_log_inline (svfloat64_t x, const struct data *d, const svbool_t pg)\n   svfloat64_t p1_p4 = svld1rq (svptrue_b64 (), &d->p1);\n \n   svfloat64_t r = svmla_x (pg, sv_f64 (-1.0), invc, z);\n-  svfloat64_t kd = svcvt_f64_x (pg, k);\n+  svfloat64_t kd\n+      = svcvt_f64_x (pg, svasr_x (pg, svreinterpret_s64 (i_off), 52));\n \n   svfloat64_t hi = svmla_lane (svadd_x (pg, logc, r), kd, ln2_p3, 0);\n-  svfloat64_t r2 = svmul_x (pg, r, r);\n-\n+  svfloat64_t r2 = svmul_x (svptrue_b64 (), r, r);\n   svfloat64_t y = svmla_lane (sv_f64 (d->p2), r, ln2_p3, 1);\n-\n   svfloat64_t p = svmla_lane (sv_f64 (d->p0), r, p1_p4, 0);\n+\n   y = svmla_lane (y, r2, p1_p4, 1);\n   y = svmla_x (pg, p, r2, y);\n   y = svmla_x (pg, hi, r2, y);\n@@ -111,7 +123,6 @@ svfloat64_t SV_NAME_D1 (asinh) (svfloat64_t x, const svbool_t pg)\n   svuint64_t iax = svbic_x (pg, ix, SignMask);\n   svuint64_t sign = svand_x (pg, ix, SignMask);\n   svfloat64_t ax = svreinterpret_f64 (iax);\n-\n   svbool_t ge1 = svcmpge (pg, iax, One);\n   svbool_t special = svcmpge (pg, iax, Thres);\n \n@@ -120,7 +131,7 @@ svfloat64_t SV_NAME_D1 (asinh) (svfloat64_t x, const svbool_t pg)\n   svfloat64_t option_1 = sv_f64 (0);\n   if (__glibc_likely (svptest_any (pg, ge1)))\n     {\n-      svfloat64_t x2 = svmul_x (pg, ax, ax);\n+      svfloat64_t x2 = svmul_x (svptrue_b64 (), ax, ax);\n       option_1 = __sv_log_inline (\n \t  svadd_x (pg, ax, svsqrt_x (pg, svadd_x (pg, x2, 1))), d, pg);\n     }\n@@ -130,21 +141,53 @@ svfloat64_t SV_NAME_D1 (asinh) (svfloat64_t x, const svbool_t pg)\n      The largest observed error in this region is 1.51 ULPs:\n      _ZGVsMxv_asinh(0x1.fe12bf8c616a2p-1) got 0x1.c1e649ee2681bp-1\n \t\t\t\t\t want 0x1.c1e649ee2681dp-1.  */\n+\n   svfloat64_t option_2 = sv_f64 (0);\n   if (__glibc_likely (svptest_any (pg, svnot_z (pg, ge1))))\n     {\n-      svfloat64_t x2 = svmul_x (pg, ax, ax);\n-      svfloat64_t x4 = svmul_x (pg, x2, x2);\n-      svfloat64_t p = sv_pw_horner_17_f64_x (pg, x2, x4, d->poly);\n-      option_2 = svmla_x (pg, ax, p, svmul_x (pg, x2, ax));\n+      svfloat64_t x2 = svmul_x (svptrue_b64 (), ax, ax);\n+      svfloat64_t x4 = svmul_x (svptrue_b64 (), x2, x2);\n+      /* Order-17 Pairwise Horner scheme.  */\n+      svfloat64_t c13 = svld1rq (svptrue_b64 (), &d->c1);\n+      svfloat64_t c57 = svld1rq (svptrue_b64 (), &d->c5);\n+      svfloat64_t c911 = svld1rq (svptrue_b64 (), &d->c9);\n+      svfloat64_t c1315 = svld1rq (svptrue_b64 (), &d->c13);\n+\n+      svfloat64_t p01 = svmla_lane (sv_f64 (d->even_coeffs[0]), x2, c13, 0);\n+      svfloat64_t p23 = svmla_lane (sv_f64 (d->even_coeffs[1]), x2, c13, 1);\n+      svfloat64_t p45 = svmla_lane (sv_f64 (d->even_coeffs[2]), x2, c57, 0);\n+      svfloat64_t p67 = svmla_lane (sv_f64 (d->even_coeffs[3]), x2, c57, 1);\n+      svfloat64_t p89 = svmla_lane (sv_f64 (d->even_coeffs[4]), x2, c911, 0);\n+      svfloat64_t p1011 = svmla_lane (sv_f64 (d->even_coeffs[5]), x2, c911, 1);\n+      svfloat64_t p1213\n+\t  = svmla_lane (sv_f64 (d->even_coeffs[6]), x2, c1315, 0);\n+      svfloat64_t p1415\n+\t  = svmla_lane (sv_f64 (d->even_coeffs[7]), x2, c1315, 1);\n+      svfloat64_t p1617 = svmla_x (pg, sv_f64 (d->even_coeffs[8]), x2, d->c17);\n+\n+      svfloat64_t p = svmla_x (pg, p1415, x4, p1617);\n+      p = svmla_x (pg, p1213, x4, p);\n+      p = svmla_x (pg, p1011, x4, p);\n+      p = svmla_x (pg, p89, x4, p);\n+\n+      p = svmla_x (pg, p67, x4, p);\n+      p = svmla_x (pg, p45, x4, p);\n+\n+      p = svmla_x (pg, p23, x4, p);\n+\n+      p = svmla_x (pg, p01, x4, p);\n+\n+      option_2 = svmla_x (pg, ax, p, svmul_x (svptrue_b64 (), x2, ax));\n     }\n \n-  /* Choose the right option for each lane.  */\n-  svfloat64_t y = svsel (ge1, option_1, option_2);\n-\n   if (__glibc_unlikely (svptest_any (pg, special)))\n     return special_case (\n-\tx, svreinterpret_f64 (sveor_x (pg, svreinterpret_u64 (y), sign)),\n+\tx,\n+\tsvreinterpret_f64 (sveor_x (\n+\t    pg, svreinterpret_u64 (svsel (ge1, option_1, option_2)), sign)),\n \tspecial);\n+\n+  /* Choose the right option for each lane.  */\n+  svfloat64_t y = svsel (ge1, option_1, option_2);\n   return svreinterpret_f64 (sveor_x (pg, svreinterpret_u64 (y), sign));\n }\n\ncommit 4b0bb84eb7e52a135c873fd9d0fc6c30599aedf4\nAuthor: Luna Lamb <luna.lamb@arm.com>\nDate:   Thu Feb 13 17:54:46 2025 +0000\n\n    Aarch64: Improve codegen in SVE exp and users, and update expf_inline\n    \n    Use unpredicted muls, and improve memory access.\n    7%, 3% and 1% improvement in throughput microbenchmark on Neoverse V1,\n    for exp, exp2 and cosh respectively.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit c0ff447edf19bd4630fe79adf5e8b896405b059f)\n\ndiff --git a/sysdeps/aarch64/fpu/cosh_sve.c b/sysdeps/aarch64/fpu/cosh_sve.c\nindex 919f34604a..e375dd8a34 100644\n--- a/sysdeps/aarch64/fpu/cosh_sve.c\n+++ b/sysdeps/aarch64/fpu/cosh_sve.c\n@@ -23,7 +23,7 @@ static const struct data\n {\n   float64_t poly[3];\n   float64_t inv_ln2, ln2_hi, ln2_lo, shift, thres;\n-  uint64_t index_mask, special_bound;\n+  uint64_t special_bound;\n } data = {\n   .poly = { 0x1.fffffffffffd4p-2, 0x1.5555571d6b68cp-3,\n \t    0x1.5555576a59599p-5, },\n@@ -35,14 +35,16 @@ static const struct data\n   .shift = 0x1.8p+52,\n   .thres = 704.0,\n \n-  .index_mask = 0xff,\n   /* 0x1.6p9, above which exp overflows.  */\n   .special_bound = 0x4086000000000000,\n };\n \n static svfloat64_t NOINLINE\n-special_case (svfloat64_t x, svfloat64_t y, svbool_t special)\n+special_case (svfloat64_t x, svbool_t pg, svfloat64_t t, svbool_t special)\n {\n+  svfloat64_t half_t = svmul_x (svptrue_b64 (), t, 0.5);\n+  svfloat64_t half_over_t = svdivr_x (pg, t, 0.5);\n+  svfloat64_t y = svadd_x (pg, half_t, half_over_t);\n   return sv_call_f64 (cosh, x, y, special);\n }\n \n@@ -60,12 +62,12 @@ exp_inline (svfloat64_t x, const svbool_t pg, const struct data *d)\n \n   svuint64_t u = svreinterpret_u64 (z);\n   svuint64_t e = svlsl_x (pg, u, 52 - V_EXP_TAIL_TABLE_BITS);\n-  svuint64_t i = svand_x (pg, u, d->index_mask);\n+  svuint64_t i = svand_x (svptrue_b64 (), u, 0xff);\n \n   svfloat64_t y = svmla_x (pg, sv_f64 (d->poly[1]), r, d->poly[2]);\n   y = svmla_x (pg, sv_f64 (d->poly[0]), r, y);\n   y = svmla_x (pg, sv_f64 (1.0), r, y);\n-  y = svmul_x (pg, r, y);\n+  y = svmul_x (svptrue_b64 (), r, y);\n \n   /* s = 2^(n/N).  */\n   u = svld1_gather_index (pg, __v_exp_tail_data, i);\n@@ -94,12 +96,12 @@ svfloat64_t SV_NAME_D1 (cosh) (svfloat64_t x, const svbool_t pg)\n   /* Up to the point that exp overflows, we can use it to calculate cosh by\n      exp(|x|) / 2 + 1 / (2 * exp(|x|)).  */\n   svfloat64_t t = exp_inline (ax, pg, d);\n-  svfloat64_t half_t = svmul_x (pg, t, 0.5);\n-  svfloat64_t half_over_t = svdivr_x (pg, t, 0.5);\n \n   /* Fall back to scalar for any special cases.  */\n   if (__glibc_unlikely (svptest_any (pg, special)))\n-    return special_case (x, svadd_x (pg, half_t, half_over_t), special);\n+    return special_case (x, pg, t, special);\n \n+  svfloat64_t half_t = svmul_x (svptrue_b64 (), t, 0.5);\n+  svfloat64_t half_over_t = svdivr_x (pg, t, 0.5);\n   return svadd_x (pg, half_t, half_over_t);\n }\ndiff --git a/sysdeps/aarch64/fpu/exp10_sve.c b/sysdeps/aarch64/fpu/exp10_sve.c\nindex ddf64708cb..bfd3fb9e19 100644\n--- a/sysdeps/aarch64/fpu/exp10_sve.c\n+++ b/sysdeps/aarch64/fpu/exp10_sve.c\n@@ -18,21 +18,23 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include \"sv_math.h\"\n-#include \"poly_sve_f64.h\"\n \n #define SpecialBound 307.0 /* floor (log10 (2^1023)).  */\n \n static const struct data\n {\n-  double poly[5];\n+  double c1, c3, c2, c4, c0;\n   double shift, log10_2, log2_10_hi, log2_10_lo, scale_thres, special_bound;\n } data = {\n   /* Coefficients generated using Remez algorithm.\n      rel error: 0x1.9fcb9b3p-60\n      abs error: 0x1.a20d9598p-60 in [ -log10(2)/128, log10(2)/128 ]\n      max ulp err 0.52 +0.5.  */\n-  .poly = { 0x1.26bb1bbb55516p1, 0x1.53524c73cd32ap1, 0x1.0470591daeafbp1,\n-\t    0x1.2bd77b1361ef6p0, 0x1.142b5d54e9621p-1 },\n+  .c0 = 0x1.26bb1bbb55516p1,\n+  .c1 = 0x1.53524c73cd32ap1,\n+  .c2 = 0x1.0470591daeafbp1,\n+  .c3 = 0x1.2bd77b1361ef6p0,\n+  .c4 = 0x1.142b5d54e9621p-1,\n   /* 1.5*2^46+1023. This value is further explained below.  */\n   .shift = 0x1.800000000ffc0p+46,\n   .log10_2 = 0x1.a934f0979a371p1,     /* 1/log2(10).  */\n@@ -70,9 +72,9 @@ special_case (svbool_t pg, svfloat64_t s, svfloat64_t y, svfloat64_t n,\n   /* |n| > 1280 => 2^(n) overflows.  */\n   svbool_t p_cmp = svacgt (pg, n, d->scale_thres);\n \n-  svfloat64_t r1 = svmul_x (pg, s1, s1);\n+  svfloat64_t r1 = svmul_x (svptrue_b64 (), s1, s1);\n   svfloat64_t r2 = svmla_x (pg, s2, s2, y);\n-  svfloat64_t r0 = svmul_x (pg, r2, s1);\n+  svfloat64_t r0 = svmul_x (svptrue_b64 (), r2, s1);\n \n   return svsel (p_cmp, r1, r0);\n }\n@@ -103,11 +105,14 @@ svfloat64_t SV_NAME_D1 (exp10) (svfloat64_t x, svbool_t pg)\n      comes at significant performance cost.  */\n   svuint64_t u = svreinterpret_u64 (z);\n   svfloat64_t scale = svexpa (u);\n-\n+  svfloat64_t c24 = svld1rq (svptrue_b64 (), &d->c2);\n   /* Approximate exp10(r) using polynomial.  */\n-  svfloat64_t r2 = svmul_x (pg, r, r);\n-  svfloat64_t y = svmla_x (pg, svmul_x (pg, r, d->poly[0]), r2,\n-\t\t\t   sv_pairwise_poly_3_f64_x (pg, r, r2, d->poly + 1));\n+  svfloat64_t r2 = svmul_x (svptrue_b64 (), r, r);\n+  svfloat64_t p12 = svmla_lane (sv_f64 (d->c1), r, c24, 0);\n+  svfloat64_t p34 = svmla_lane (sv_f64 (d->c3), r, c24, 1);\n+  svfloat64_t p14 = svmla_x (pg, p12, p34, r2);\n+\n+  svfloat64_t y = svmla_x (pg, svmul_x (svptrue_b64 (), r, d->c0), r2, p14);\n \n   /* Assemble result as exp10(x) = 2^n * exp10(r).  If |x| > SpecialBound\n      multiplication may overflow, so use special case routine.  */\ndiff --git a/sysdeps/aarch64/fpu/exp2_sve.c b/sysdeps/aarch64/fpu/exp2_sve.c\nindex 22848ebfa5..5dfb77cdbc 100644\n--- a/sysdeps/aarch64/fpu/exp2_sve.c\n+++ b/sysdeps/aarch64/fpu/exp2_sve.c\n@@ -18,7 +18,6 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include \"sv_math.h\"\n-#include \"poly_sve_f64.h\"\n \n #define N (1 << V_EXP_TABLE_BITS)\n \n@@ -27,15 +26,15 @@\n \n static const struct data\n {\n-  double poly[4];\n+  double c0, c2;\n+  double c1, c3;\n   double shift, big_bound, uoflow_bound;\n } data = {\n   /* Coefficients are computed using Remez algorithm with\n      minimisation of the absolute error.  */\n-  .poly = { 0x1.62e42fefa3686p-1, 0x1.ebfbdff82c241p-3, 0x1.c6b09b16de99ap-5,\n-\t    0x1.3b2abf5571ad8p-7 },\n-  .shift = 0x1.8p52 / N,\n-  .uoflow_bound = UOFlowBound,\n+  .c0 = 0x1.62e42fefa3686p-1, .c1 = 0x1.ebfbdff82c241p-3,\n+  .c2 = 0x1.c6b09b16de99ap-5, .c3 = 0x1.3b2abf5571ad8p-7,\n+  .shift = 0x1.8p52 / N,      .uoflow_bound = UOFlowBound,\n   .big_bound = BigBound,\n };\n \n@@ -67,9 +66,9 @@ special_case (svbool_t pg, svfloat64_t s, svfloat64_t y, svfloat64_t n,\n   /* |n| > 1280 => 2^(n) overflows.  */\n   svbool_t p_cmp = svacgt (pg, n, d->uoflow_bound);\n \n-  svfloat64_t r1 = svmul_x (pg, s1, s1);\n+  svfloat64_t r1 = svmul_x (svptrue_b64 (), s1, s1);\n   svfloat64_t r2 = svmla_x (pg, s2, s2, y);\n-  svfloat64_t r0 = svmul_x (pg, r2, s1);\n+  svfloat64_t r0 = svmul_x (svptrue_b64 (), r2, s1);\n \n   return svsel (p_cmp, r1, r0);\n }\n@@ -99,11 +98,14 @@ svfloat64_t SV_NAME_D1 (exp2) (svfloat64_t x, svbool_t pg)\n   svuint64_t top = svlsl_x (pg, ki, 52 - V_EXP_TABLE_BITS);\n   svfloat64_t scale = svreinterpret_f64 (svadd_x (pg, sbits, top));\n \n+  svfloat64_t c13 = svld1rq (svptrue_b64 (), &d->c1);\n   /* Approximate exp2(r) using polynomial.  */\n-  svfloat64_t r2 = svmul_x (pg, r, r);\n-  svfloat64_t p = sv_pairwise_poly_3_f64_x (pg, r, r2, d->poly);\n-  svfloat64_t y = svmul_x (pg, r, p);\n-\n+  /* y = exp2(r) - 1 ~= C0 r + C1 r^2 + C2 r^3 + C3 r^4.  */\n+  svfloat64_t r2 = svmul_x (svptrue_b64 (), r, r);\n+  svfloat64_t p01 = svmla_lane (sv_f64 (d->c0), r, c13, 0);\n+  svfloat64_t p23 = svmla_lane (sv_f64 (d->c2), r, c13, 1);\n+  svfloat64_t p = svmla_x (pg, p01, p23, r2);\n+  svfloat64_t y = svmul_x (svptrue_b64 (), r, p);\n   /* Assemble exp2(x) = exp2(r) * scale.  */\n   if (__glibc_unlikely (svptest_any (pg, special)))\n     return special_case (pg, scale, y, kd, d);\ndiff --git a/sysdeps/aarch64/fpu/exp_sve.c b/sysdeps/aarch64/fpu/exp_sve.c\nindex aabaaa1d61..b2421d493f 100644\n--- a/sysdeps/aarch64/fpu/exp_sve.c\n+++ b/sysdeps/aarch64/fpu/exp_sve.c\n@@ -21,12 +21,15 @@\n \n static const struct data\n {\n-  double poly[4];\n+  double c0, c2;\n+  double c1, c3;\n   double ln2_hi, ln2_lo, inv_ln2, shift, thres;\n+\n } data = {\n-  .poly = { /* ulp error: 0.53.  */\n-\t    0x1.fffffffffdbcdp-2, 0x1.555555555444cp-3, 0x1.555573c6a9f7dp-5,\n-\t    0x1.1111266d28935p-7 },\n+  .c0 = 0x1.fffffffffdbcdp-2,\n+  .c1 = 0x1.555555555444cp-3,\n+  .c2 = 0x1.555573c6a9f7dp-5,\n+  .c3 = 0x1.1111266d28935p-7,\n   .ln2_hi = 0x1.62e42fefa3800p-1,\n   .ln2_lo = 0x1.ef35793c76730p-45,\n   /* 1/ln2.  */\n@@ -36,7 +39,6 @@ static const struct data\n   .thres = 704.0,\n };\n \n-#define C(i) sv_f64 (d->poly[i])\n #define SpecialOffset 0x6000000000000000 /* 0x1p513.  */\n /* SpecialBias1 + SpecialBias1 = asuint(1.0).  */\n #define SpecialBias1 0x7000000000000000 /* 0x1p769.  */\n@@ -56,20 +58,20 @@ special_case (svbool_t pg, svfloat64_t s, svfloat64_t y, svfloat64_t n)\n   svuint64_t b\n       = svdup_u64_z (p_sign, SpecialOffset); /* Inactive lanes set to 0.  */\n \n-  /* Set s1 to generate overflow depending on sign of exponent n.  */\n-  svfloat64_t s1 = svreinterpret_f64 (\n-      svsubr_x (pg, b, SpecialBias1)); /* 0x70...0 - b.  */\n-  /* Offset s to avoid overflow in final result if n is below threshold.  */\n+  /* Set s1 to generate overflow depending on sign of exponent n,\n+     ie. s1 = 0x70...0 - b.  */\n+  svfloat64_t s1 = svreinterpret_f64 (svsubr_x (pg, b, SpecialBias1));\n+  /* Offset s to avoid overflow in final result if n is below threshold.\n+     ie. s2 = as_u64 (s) - 0x3010...0 + b.  */\n   svfloat64_t s2 = svreinterpret_f64 (\n-      svadd_x (pg, svsub_x (pg, svreinterpret_u64 (s), SpecialBias2),\n-\t       b)); /* as_u64 (s) - 0x3010...0 + b.  */\n+      svadd_x (pg, svsub_x (pg, svreinterpret_u64 (s), SpecialBias2), b));\n \n   /* |n| > 1280 => 2^(n) overflows.  */\n   svbool_t p_cmp = svacgt (pg, n, 1280.0);\n \n-  svfloat64_t r1 = svmul_x (pg, s1, s1);\n+  svfloat64_t r1 = svmul_x (svptrue_b64 (), s1, s1);\n   svfloat64_t r2 = svmla_x (pg, s2, s2, y);\n-  svfloat64_t r0 = svmul_x (pg, r2, s1);\n+  svfloat64_t r0 = svmul_x (svptrue_b64 (), r2, s1);\n \n   return svsel (p_cmp, r1, r0);\n }\n@@ -103,16 +105,16 @@ svfloat64_t SV_NAME_D1 (exp) (svfloat64_t x, const svbool_t pg)\n   svfloat64_t z = svmla_x (pg, sv_f64 (d->shift), x, d->inv_ln2);\n   svuint64_t u = svreinterpret_u64 (z);\n   svfloat64_t n = svsub_x (pg, z, d->shift);\n-\n+  svfloat64_t c13 = svld1rq (svptrue_b64 (), &d->c1);\n   /* r = x - n * ln2, r is in [-ln2/(2N), ln2/(2N)].  */\n   svfloat64_t ln2 = svld1rq (svptrue_b64 (), &d->ln2_hi);\n   svfloat64_t r = svmls_lane (x, n, ln2, 0);\n   r = svmls_lane (r, n, ln2, 1);\n \n   /* y = exp(r) - 1 ~= r + C0 r^2 + C1 r^3 + C2 r^4 + C3 r^5.  */\n-  svfloat64_t r2 = svmul_x (pg, r, r);\n-  svfloat64_t p01 = svmla_x (pg, C (0), C (1), r);\n-  svfloat64_t p23 = svmla_x (pg, C (2), C (3), r);\n+  svfloat64_t r2 = svmul_x (svptrue_b64 (), r, r);\n+  svfloat64_t p01 = svmla_lane (sv_f64 (d->c0), r, c13, 0);\n+  svfloat64_t p23 = svmla_lane (sv_f64 (d->c2), r, c13, 1);\n   svfloat64_t p04 = svmla_x (pg, p01, p23, r2);\n   svfloat64_t y = svmla_x (pg, r, p04, r2);\n \ndiff --git a/sysdeps/aarch64/fpu/sv_expf_inline.h b/sysdeps/aarch64/fpu/sv_expf_inline.h\nindex 6166df6553..75781fb4dd 100644\n--- a/sysdeps/aarch64/fpu/sv_expf_inline.h\n+++ b/sysdeps/aarch64/fpu/sv_expf_inline.h\n@@ -61,7 +61,7 @@ expf_inline (svfloat32_t x, const svbool_t pg, const struct sv_expf_data *d)\n   /* scale = 2^(n/N).  */\n   svfloat32_t scale = svexpa (svreinterpret_u32 (z));\n \n-  /* y = exp(r) - 1 ~= r + C0 r^2 + C1 r^3 + C2 r^4 + C3 r^5 + C4 r^6.  */\n+  /* poly(r) = exp(r) - 1 ~= C0 r + C1 r^2 + C2 r^3 + C3 r^4 + C4 r^5.  */\n   svfloat32_t p12 = svmla_lane (sv_f32 (d->c1), r, lane_consts, 2);\n   svfloat32_t p34 = svmla_lane (sv_f32 (d->c3), r, lane_consts, 3);\n   svfloat32_t r2 = svmul_x (svptrue_b32 (), r, r);\n@@ -71,5 +71,4 @@ expf_inline (svfloat32_t x, const svbool_t pg, const struct sv_expf_data *d)\n \n   return svmla_x (pg, scale, scale, poly);\n }\n-\n #endif\n\ncommit 194185c28954dfa11a6ded8b32f34fee680d3218\nAuthor: Yat Long Poon <yatlong.poon@arm.com>\nDate:   Thu Feb 13 18:00:50 2025 +0000\n\n    AArch64: Improve codegen for SVE erfcf\n    \n    Reduce number of MOV/MOVPRFXs and use unpredicated FMUL.\n    Replace MUL with LSL.  Speedup on Neoverse V1: 6%.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit f5ff34cb3c75ec1061c75bb9188b3c1176426947)\n\ndiff --git a/sysdeps/aarch64/fpu/erfcf_sve.c b/sysdeps/aarch64/fpu/erfcf_sve.c\nindex ecacb933ac..e4869263e3 100644\n--- a/sysdeps/aarch64/fpu/erfcf_sve.c\n+++ b/sysdeps/aarch64/fpu/erfcf_sve.c\n@@ -76,7 +76,7 @@ svfloat32_t SV_NAME_F1 (erfc) (svfloat32_t x, const svbool_t pg)\n   svuint32_t i = svqadd (svreinterpret_u32 (z), dat->off_idx);\n \n   /* Lookup erfc(r) and 2/sqrt(pi)*exp(-r^2) in tables.  */\n-  i = svmul_x (pg, i, 2);\n+  i = svlsl_x (svptrue_b32 (), i, 1);\n   const float32_t *p = &__v_erfcf_data.tab[0].erfc - 2 * dat->off_arr;\n   svfloat32_t erfcr = svld1_gather_index (pg, p, i);\n   svfloat32_t scale = svld1_gather_index (pg, p + 1, i);\n@@ -84,15 +84,15 @@ svfloat32_t SV_NAME_F1 (erfc) (svfloat32_t x, const svbool_t pg)\n   /* erfc(x) ~ erfc(r) - scale * d * poly(r, d).  */\n   svfloat32_t r = svsub_x (pg, z, shift);\n   svfloat32_t d = svsub_x (pg, a, r);\n-  svfloat32_t d2 = svmul_x (pg, d, d);\n-  svfloat32_t r2 = svmul_x (pg, r, r);\n+  svfloat32_t d2 = svmul_x (svptrue_b32 (), d, d);\n+  svfloat32_t r2 = svmul_x (svptrue_b32 (), r, r);\n \n   svfloat32_t coeffs = svld1rq (svptrue_b32 (), &dat->third);\n-  svfloat32_t third = svdup_lane (coeffs, 0);\n \n   svfloat32_t p1 = r;\n-  svfloat32_t p2 = svmls_lane (third, r2, coeffs, 1);\n-  svfloat32_t p3 = svmul_x (pg, r, svmla_lane (sv_f32 (-0.5), r2, coeffs, 0));\n+  svfloat32_t p2 = svmls_lane (sv_f32 (dat->third), r2, coeffs, 1);\n+  svfloat32_t p3\n+      = svmul_x (svptrue_b32 (), r, svmla_lane (sv_f32 (-0.5), r2, coeffs, 0));\n   svfloat32_t p4 = svmla_lane (sv_f32 (dat->two_over_five), r2, coeffs, 2);\n   p4 = svmls_x (pg, sv_f32 (dat->tenth), r2, p4);\n \n\ncommit 7dc549c5a4af3c32689147550144397116404d22\nAuthor: Yat Long Poon <yatlong.poon@arm.com>\nDate:   Thu Feb 13 18:02:01 2025 +0000\n\n    AArch64: Improve codegen for SVE pow\n    \n    Move constants to struct.  Improve memory access with indexed/unpredicated\n    instructions.  Eliminate register spills.  Speedup on Neoverse V1: 24%.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit 0b195651db3ae793187c7dd6d78b5a7a8da9d5e6)\n\ndiff --git a/sysdeps/aarch64/fpu/pow_sve.c b/sysdeps/aarch64/fpu/pow_sve.c\nindex 4c0bf8956c..4242d22a49 100644\n--- a/sysdeps/aarch64/fpu/pow_sve.c\n+++ b/sysdeps/aarch64/fpu/pow_sve.c\n@@ -44,19 +44,18 @@\n \n /* Data is defined in v_pow_log_data.c.  */\n #define N_LOG (1 << V_POW_LOG_TABLE_BITS)\n-#define A __v_pow_log_data.poly\n #define Off 0x3fe6955500000000\n \n /* Data is defined in v_pow_exp_data.c.  */\n #define N_EXP (1 << V_POW_EXP_TABLE_BITS)\n #define SignBias (0x800 << V_POW_EXP_TABLE_BITS)\n-#define C __v_pow_exp_data.poly\n #define SmallExp 0x3c9 /* top12(0x1p-54).  */\n #define BigExp 0x408   /* top12(512.).  */\n #define ThresExp 0x03f /* BigExp - SmallExp.  */\n #define HugeExp 0x409  /* top12(1024.).  */\n \n /* Constants associated with pow.  */\n+#define SmallBoundX 0x1p-126\n #define SmallPowX 0x001 /* top12(0x1p-126).  */\n #define BigPowX 0x7ff\t/* top12(INFINITY).  */\n #define ThresPowX 0x7fe /* BigPowX - SmallPowX.  */\n@@ -64,6 +63,31 @@\n #define BigPowY 0x43e\t/* top12(0x1.749p62).  */\n #define ThresPowY 0x080 /* BigPowY - SmallPowY.  */\n \n+static const struct data\n+{\n+  double log_c0, log_c2, log_c4, log_c6, ln2_hi, ln2_lo;\n+  double log_c1, log_c3, log_c5, off;\n+  double n_over_ln2, exp_c2, ln2_over_n_hi, ln2_over_n_lo;\n+  double exp_c0, exp_c1;\n+} data = {\n+  .log_c0 = -0x1p-1,\n+  .log_c1 = -0x1.555555555556p-1,\n+  .log_c2 = 0x1.0000000000006p-1,\n+  .log_c3 = 0x1.999999959554ep-1,\n+  .log_c4 = -0x1.555555529a47ap-1,\n+  .log_c5 = -0x1.2495b9b4845e9p0,\n+  .log_c6 = 0x1.0002b8b263fc3p0,\n+  .off = Off,\n+  .exp_c0 = 0x1.fffffffffffd4p-2,\n+  .exp_c1 = 0x1.5555571d6ef9p-3,\n+  .exp_c2 = 0x1.5555576a5adcep-5,\n+  .ln2_hi = 0x1.62e42fefa3800p-1,\n+  .ln2_lo = 0x1.ef35793c76730p-45,\n+  .n_over_ln2 = 0x1.71547652b82fep0 * N_EXP,\n+  .ln2_over_n_hi = 0x1.62e42fefc0000p-9,\n+  .ln2_over_n_lo = -0x1.c610ca86c3899p-45,\n+};\n+\n /* Check if x is an integer.  */\n static inline svbool_t\n sv_isint (svbool_t pg, svfloat64_t x)\n@@ -82,7 +106,7 @@ sv_isnotint (svbool_t pg, svfloat64_t x)\n static inline svbool_t\n sv_isodd (svbool_t pg, svfloat64_t x)\n {\n-  svfloat64_t y = svmul_x (pg, x, 0.5);\n+  svfloat64_t y = svmul_x (svptrue_b64 (), x, 0.5);\n   return sv_isnotint (pg, y);\n }\n \n@@ -121,7 +145,7 @@ zeroinfnan (uint64_t i)\n static inline svbool_t\n sv_zeroinfnan (svbool_t pg, svuint64_t i)\n {\n-  return svcmpge (pg, svsub_x (pg, svmul_x (pg, i, 2), 1),\n+  return svcmpge (pg, svsub_x (pg, svadd_x (pg, i, i), 1),\n \t\t  2 * asuint64 (INFINITY) - 1);\n }\n \n@@ -174,16 +198,17 @@ sv_call_specialcase (svfloat64_t x1, svuint64_t u1, svuint64_t u2,\n    additional 15 bits precision.  IX is the bit representation of x, but\n    normalized in the subnormal range using the sign bit for the exponent.  */\n static inline svfloat64_t\n-sv_log_inline (svbool_t pg, svuint64_t ix, svfloat64_t *tail)\n+sv_log_inline (svbool_t pg, svuint64_t ix, svfloat64_t *tail,\n+\t       const struct data *d)\n {\n   /* x = 2^k z; where z is in range [Off,2*Off) and exact.\n      The range is split into N subintervals.\n      The ith subinterval contains z and c is near its center.  */\n-  svuint64_t tmp = svsub_x (pg, ix, Off);\n+  svuint64_t tmp = svsub_x (pg, ix, d->off);\n   svuint64_t i = svand_x (pg, svlsr_x (pg, tmp, 52 - V_POW_LOG_TABLE_BITS),\n \t\t\t  sv_u64 (N_LOG - 1));\n   svint64_t k = svasr_x (pg, svreinterpret_s64 (tmp), 52);\n-  svuint64_t iz = svsub_x (pg, ix, svand_x (pg, tmp, sv_u64 (0xfffULL << 52)));\n+  svuint64_t iz = svsub_x (pg, ix, svlsl_x (pg, svreinterpret_u64 (k), 52));\n   svfloat64_t z = svreinterpret_f64 (iz);\n   svfloat64_t kd = svcvt_f64_x (pg, k);\n \n@@ -199,40 +224,85 @@ sv_log_inline (svbool_t pg, svuint64_t ix, svfloat64_t *tail)\n      |z/c - 1| < 1/N, so r = z/c - 1 is exactly representible.  */\n   svfloat64_t r = svmad_x (pg, z, invc, -1.0);\n   /* k*Ln2 + log(c) + r.  */\n-  svfloat64_t t1 = svmla_x (pg, logc, kd, __v_pow_log_data.ln2_hi);\n+\n+  svfloat64_t ln2_hilo = svld1rq_f64 (svptrue_b64 (), &d->ln2_hi);\n+  svfloat64_t t1 = svmla_lane_f64 (logc, kd, ln2_hilo, 0);\n   svfloat64_t t2 = svadd_x (pg, t1, r);\n-  svfloat64_t lo1 = svmla_x (pg, logctail, kd, __v_pow_log_data.ln2_lo);\n+  svfloat64_t lo1 = svmla_lane_f64 (logctail, kd, ln2_hilo, 1);\n   svfloat64_t lo2 = svadd_x (pg, svsub_x (pg, t1, t2), r);\n \n   /* Evaluation is optimized assuming superscalar pipelined execution.  */\n-  svfloat64_t ar = svmul_x (pg, r, -0.5); /* A[0] = -0.5.  */\n-  svfloat64_t ar2 = svmul_x (pg, r, ar);\n-  svfloat64_t ar3 = svmul_x (pg, r, ar2);\n+\n+  svfloat64_t log_c02 = svld1rq_f64 (svptrue_b64 (), &d->log_c0);\n+  svfloat64_t ar = svmul_lane_f64 (r, log_c02, 0);\n+  svfloat64_t ar2 = svmul_x (svptrue_b64 (), r, ar);\n+  svfloat64_t ar3 = svmul_x (svptrue_b64 (), r, ar2);\n   /* k*Ln2 + log(c) + r + A[0]*r*r.  */\n   svfloat64_t hi = svadd_x (pg, t2, ar2);\n-  svfloat64_t lo3 = svmla_x (pg, svneg_x (pg, ar2), ar, r);\n+  svfloat64_t lo3 = svmls_x (pg, ar2, ar, r);\n   svfloat64_t lo4 = svadd_x (pg, svsub_x (pg, t2, hi), ar2);\n   /* p = log1p(r) - r - A[0]*r*r.  */\n   /* p = (ar3 * (A[1] + r * A[2] + ar2 * (A[3] + r * A[4] + ar2 * (A[5] + r *\n      A[6])))).  */\n-  svfloat64_t a56 = svmla_x (pg, sv_f64 (A[5]), r, A[6]);\n-  svfloat64_t a34 = svmla_x (pg, sv_f64 (A[3]), r, A[4]);\n-  svfloat64_t a12 = svmla_x (pg, sv_f64 (A[1]), r, A[2]);\n+\n+  svfloat64_t log_c46 = svld1rq_f64 (svptrue_b64 (), &d->log_c4);\n+  svfloat64_t a56 = svmla_lane_f64 (sv_f64 (d->log_c5), r, log_c46, 1);\n+  svfloat64_t a34 = svmla_lane_f64 (sv_f64 (d->log_c3), r, log_c46, 0);\n+  svfloat64_t a12 = svmla_lane_f64 (sv_f64 (d->log_c1), r, log_c02, 1);\n   svfloat64_t p = svmla_x (pg, a34, ar2, a56);\n   p = svmla_x (pg, a12, ar2, p);\n-  p = svmul_x (pg, ar3, p);\n+  p = svmul_x (svptrue_b64 (), ar3, p);\n   svfloat64_t lo = svadd_x (\n-      pg, svadd_x (pg, svadd_x (pg, svadd_x (pg, lo1, lo2), lo3), lo4), p);\n+      pg, svadd_x (pg, svsub_x (pg, svadd_x (pg, lo1, lo2), lo3), lo4), p);\n   svfloat64_t y = svadd_x (pg, hi, lo);\n   *tail = svadd_x (pg, svsub_x (pg, hi, y), lo);\n   return y;\n }\n \n+static inline svfloat64_t\n+sv_exp_core (svbool_t pg, svfloat64_t x, svfloat64_t xtail,\n+\t     svuint64_t sign_bias, svfloat64_t *tmp, svuint64_t *sbits,\n+\t     svuint64_t *ki, const struct data *d)\n+{\n+  /* exp(x) = 2^(k/N) * exp(r), with exp(r) in [2^(-1/2N),2^(1/2N)].  */\n+  /* x = ln2/N*k + r, with int k and r in [-ln2/2N, ln2/2N].  */\n+  svfloat64_t n_over_ln2_and_c2 = svld1rq_f64 (svptrue_b64 (), &d->n_over_ln2);\n+  svfloat64_t z = svmul_lane_f64 (x, n_over_ln2_and_c2, 0);\n+  /* z - kd is in [-1, 1] in non-nearest rounding modes.  */\n+  svfloat64_t kd = svrinta_x (pg, z);\n+  *ki = svreinterpret_u64 (svcvt_s64_x (pg, kd));\n+\n+  svfloat64_t ln2_over_n_hilo\n+      = svld1rq_f64 (svptrue_b64 (), &d->ln2_over_n_hi);\n+  svfloat64_t r = x;\n+  r = svmls_lane_f64 (r, kd, ln2_over_n_hilo, 0);\n+  r = svmls_lane_f64 (r, kd, ln2_over_n_hilo, 1);\n+  /* The code assumes 2^-200 < |xtail| < 2^-8/N.  */\n+  r = svadd_x (pg, r, xtail);\n+  /* 2^(k/N) ~= scale.  */\n+  svuint64_t idx = svand_x (pg, *ki, N_EXP - 1);\n+  svuint64_t top\n+      = svlsl_x (pg, svadd_x (pg, *ki, sign_bias), 52 - V_POW_EXP_TABLE_BITS);\n+  /* This is only a valid scale when -1023*N < k < 1024*N.  */\n+  *sbits = svld1_gather_index (pg, __v_pow_exp_data.sbits, idx);\n+  *sbits = svadd_x (pg, *sbits, top);\n+  /* exp(x) = 2^(k/N) * exp(r) ~= scale + scale * (exp(r) - 1).  */\n+  svfloat64_t r2 = svmul_x (svptrue_b64 (), r, r);\n+  *tmp = svmla_lane_f64 (sv_f64 (d->exp_c1), r, n_over_ln2_and_c2, 1);\n+  *tmp = svmla_x (pg, sv_f64 (d->exp_c0), r, *tmp);\n+  *tmp = svmla_x (pg, r, r2, *tmp);\n+  svfloat64_t scale = svreinterpret_f64 (*sbits);\n+  /* Note: tmp == 0 or |tmp| > 2^-200 and scale > 2^-739, so there\n+     is no spurious underflow here even without fma.  */\n+  z = svmla_x (pg, scale, scale, *tmp);\n+  return z;\n+}\n+\n /* Computes sign*exp(x+xtail) where |xtail| < 2^-8/N and |xtail| <= |x|.\n    The sign_bias argument is SignBias or 0 and sets the sign to -1 or 1.  */\n static inline svfloat64_t\n sv_exp_inline (svbool_t pg, svfloat64_t x, svfloat64_t xtail,\n-\t       svuint64_t sign_bias)\n+\t       svuint64_t sign_bias, const struct data *d)\n {\n   /* 3 types of special cases: tiny (uflow and spurious uflow), huge (oflow)\n      and other cases of large values of x (scale * (1 + TMP) oflow).  */\n@@ -240,73 +310,46 @@ sv_exp_inline (svbool_t pg, svfloat64_t x, svfloat64_t xtail,\n   /* |x| is large (|x| >= 512) or tiny (|x| <= 0x1p-54).  */\n   svbool_t uoflow = svcmpge (pg, svsub_x (pg, abstop, SmallExp), ThresExp);\n \n-  /* Conditions special, uflow and oflow are all expressed as uoflow &&\n-     something, hence do not bother computing anything if no lane in uoflow is\n-     true.  */\n-  svbool_t special = svpfalse_b ();\n-  svbool_t uflow = svpfalse_b ();\n-  svbool_t oflow = svpfalse_b ();\n+  svfloat64_t tmp;\n+  svuint64_t sbits, ki;\n   if (__glibc_unlikely (svptest_any (pg, uoflow)))\n     {\n+      svfloat64_t z\n+\t  = sv_exp_core (pg, x, xtail, sign_bias, &tmp, &sbits, &ki, d);\n+\n       /* |x| is tiny (|x| <= 0x1p-54).  */\n-      uflow = svcmpge (pg, svsub_x (pg, abstop, SmallExp), 0x80000000);\n+      svbool_t uflow\n+\t  = svcmpge (pg, svsub_x (pg, abstop, SmallExp), 0x80000000);\n       uflow = svand_z (pg, uoflow, uflow);\n       /* |x| is huge (|x| >= 1024).  */\n-      oflow = svcmpge (pg, abstop, HugeExp);\n+      svbool_t oflow = svcmpge (pg, abstop, HugeExp);\n       oflow = svand_z (pg, uoflow, svbic_z (pg, oflow, uflow));\n+\n       /* For large |x| values (512 < |x| < 1024) scale * (1 + TMP) can overflow\n-\t or underflow.  */\n-      special = svbic_z (pg, uoflow, svorr_z (pg, uflow, oflow));\n+    or underflow.  */\n+      svbool_t special = svbic_z (pg, uoflow, svorr_z (pg, uflow, oflow));\n+\n+      /* Update result with special and large cases.  */\n+      z = sv_call_specialcase (tmp, sbits, ki, z, special);\n+\n+      /* Handle underflow and overflow.  */\n+      svbool_t x_is_neg = svcmplt (pg, x, 0);\n+      svuint64_t sign_mask\n+\t  = svlsl_x (pg, sign_bias, 52 - V_POW_EXP_TABLE_BITS);\n+      svfloat64_t res_uoflow\n+\t  = svsel (x_is_neg, sv_f64 (0.0), sv_f64 (INFINITY));\n+      res_uoflow = svreinterpret_f64 (\n+\t  svorr_x (pg, svreinterpret_u64 (res_uoflow), sign_mask));\n+      /* Avoid spurious underflow for tiny x.  */\n+      svfloat64_t res_spurious_uflow\n+\t  = svreinterpret_f64 (svorr_x (pg, sign_mask, 0x3ff0000000000000));\n+\n+      z = svsel (oflow, res_uoflow, z);\n+      z = svsel (uflow, res_spurious_uflow, z);\n+      return z;\n     }\n \n-  /* exp(x) = 2^(k/N) * exp(r), with exp(r) in [2^(-1/2N),2^(1/2N)].  */\n-  /* x = ln2/N*k + r, with int k and r in [-ln2/2N, ln2/2N].  */\n-  svfloat64_t z = svmul_x (pg, x, __v_pow_exp_data.n_over_ln2);\n-  /* z - kd is in [-1, 1] in non-nearest rounding modes.  */\n-  svfloat64_t shift = sv_f64 (__v_pow_exp_data.shift);\n-  svfloat64_t kd = svadd_x (pg, z, shift);\n-  svuint64_t ki = svreinterpret_u64 (kd);\n-  kd = svsub_x (pg, kd, shift);\n-  svfloat64_t r = x;\n-  r = svmls_x (pg, r, kd, __v_pow_exp_data.ln2_over_n_hi);\n-  r = svmls_x (pg, r, kd, __v_pow_exp_data.ln2_over_n_lo);\n-  /* The code assumes 2^-200 < |xtail| < 2^-8/N.  */\n-  r = svadd_x (pg, r, xtail);\n-  /* 2^(k/N) ~= scale.  */\n-  svuint64_t idx = svand_x (pg, ki, N_EXP - 1);\n-  svuint64_t top\n-      = svlsl_x (pg, svadd_x (pg, ki, sign_bias), 52 - V_POW_EXP_TABLE_BITS);\n-  /* This is only a valid scale when -1023*N < k < 1024*N.  */\n-  svuint64_t sbits = svld1_gather_index (pg, __v_pow_exp_data.sbits, idx);\n-  sbits = svadd_x (pg, sbits, top);\n-  /* exp(x) = 2^(k/N) * exp(r) ~= scale + scale * (exp(r) - 1).  */\n-  svfloat64_t r2 = svmul_x (pg, r, r);\n-  svfloat64_t tmp = svmla_x (pg, sv_f64 (C[1]), r, C[2]);\n-  tmp = svmla_x (pg, sv_f64 (C[0]), r, tmp);\n-  tmp = svmla_x (pg, r, r2, tmp);\n-  svfloat64_t scale = svreinterpret_f64 (sbits);\n-  /* Note: tmp == 0 or |tmp| > 2^-200 and scale > 2^-739, so there\n-     is no spurious underflow here even without fma.  */\n-  z = svmla_x (pg, scale, scale, tmp);\n-\n-  /* Update result with special and large cases.  */\n-  if (__glibc_unlikely (svptest_any (pg, special)))\n-    z = sv_call_specialcase (tmp, sbits, ki, z, special);\n-\n-  /* Handle underflow and overflow.  */\n-  svuint64_t sign_bit = svlsr_x (pg, svreinterpret_u64 (x), 63);\n-  svbool_t x_is_neg = svcmpne (pg, sign_bit, 0);\n-  svuint64_t sign_mask = svlsl_x (pg, sign_bias, 52 - V_POW_EXP_TABLE_BITS);\n-  svfloat64_t res_uoflow = svsel (x_is_neg, sv_f64 (0.0), sv_f64 (INFINITY));\n-  res_uoflow = svreinterpret_f64 (\n-      svorr_x (pg, svreinterpret_u64 (res_uoflow), sign_mask));\n-  z = svsel (oflow, res_uoflow, z);\n-  /* Avoid spurious underflow for tiny x.  */\n-  svfloat64_t res_spurious_uflow\n-      = svreinterpret_f64 (svorr_x (pg, sign_mask, 0x3ff0000000000000));\n-  z = svsel (uflow, res_spurious_uflow, z);\n-\n-  return z;\n+  return sv_exp_core (pg, x, xtail, sign_bias, &tmp, &sbits, &ki, d);\n }\n \n static inline double\n@@ -341,47 +384,39 @@ pow_sc (double x, double y)\n \n svfloat64_t SV_NAME_D2 (pow) (svfloat64_t x, svfloat64_t y, const svbool_t pg)\n {\n+  const struct data *d = ptr_barrier (&data);\n+\n   /* This preamble handles special case conditions used in the final scalar\n      fallbacks. It also updates ix and sign_bias, that are used in the core\n      computation too, i.e., exp( y * log (x) ).  */\n   svuint64_t vix0 = svreinterpret_u64 (x);\n   svuint64_t viy0 = svreinterpret_u64 (y);\n-  svuint64_t vtopx0 = svlsr_x (svptrue_b64 (), vix0, 52);\n \n   /* Negative x cases.  */\n-  svuint64_t sign_bit = svlsr_m (pg, vix0, 63);\n-  svbool_t xisneg = svcmpeq (pg, sign_bit, 1);\n+  svbool_t xisneg = svcmplt (pg, x, 0);\n \n   /* Set sign_bias and ix depending on sign of x and nature of y.  */\n-  svbool_t yisnotint_xisneg = svpfalse_b ();\n+  svbool_t yint_or_xpos = pg;\n   svuint64_t sign_bias = sv_u64 (0);\n   svuint64_t vix = vix0;\n-  svuint64_t vtopx1 = vtopx0;\n   if (__glibc_unlikely (svptest_any (pg, xisneg)))\n     {\n       /* Determine nature of y.  */\n-      yisnotint_xisneg = sv_isnotint (xisneg, y);\n-      svbool_t yisint_xisneg = sv_isint (xisneg, y);\n+      yint_or_xpos = sv_isint (xisneg, y);\n       svbool_t yisodd_xisneg = sv_isodd (xisneg, y);\n       /* ix set to abs(ix) if y is integer.  */\n-      vix = svand_m (yisint_xisneg, vix0, 0x7fffffffffffffff);\n-      vtopx1 = svand_m (yisint_xisneg, vtopx0, 0x7ff);\n+      vix = svand_m (yint_or_xpos, vix0, 0x7fffffffffffffff);\n       /* Set to SignBias if x is negative and y is odd.  */\n       sign_bias = svsel (yisodd_xisneg, sv_u64 (SignBias), sv_u64 (0));\n     }\n \n-  /* Special cases of x or y: zero, inf and nan.  */\n-  svbool_t xspecial = sv_zeroinfnan (pg, vix0);\n-  svbool_t yspecial = sv_zeroinfnan (pg, viy0);\n-  svbool_t special = svorr_z (pg, xspecial, yspecial);\n-\n   /* Small cases of x: |x| < 0x1p-126.  */\n-  svuint64_t vabstopx0 = svand_x (pg, vtopx0, 0x7ff);\n-  svbool_t xsmall = svcmplt (pg, vabstopx0, SmallPowX);\n-  if (__glibc_unlikely (svptest_any (pg, xsmall)))\n+  svbool_t xsmall = svaclt (yint_or_xpos, x, SmallBoundX);\n+  if (__glibc_unlikely (svptest_any (yint_or_xpos, xsmall)))\n     {\n       /* Normalize subnormal x so exponent becomes negative.  */\n-      svbool_t topx_is_null = svcmpeq (xsmall, vtopx1, 0);\n+      svuint64_t vtopx = svlsr_x (svptrue_b64 (), vix, 52);\n+      svbool_t topx_is_null = svcmpeq (xsmall, vtopx, 0);\n \n       svuint64_t vix_norm = svreinterpret_u64 (svmul_m (xsmall, x, 0x1p52));\n       vix_norm = svand_m (xsmall, vix_norm, 0x7fffffffffffffff);\n@@ -391,20 +426,24 @@ svfloat64_t SV_NAME_D2 (pow) (svfloat64_t x, svfloat64_t y, const svbool_t pg)\n \n   /* y_hi = log(ix, &y_lo).  */\n   svfloat64_t vlo;\n-  svfloat64_t vhi = sv_log_inline (pg, vix, &vlo);\n+  svfloat64_t vhi = sv_log_inline (yint_or_xpos, vix, &vlo, d);\n \n   /* z = exp(y_hi, y_lo, sign_bias).  */\n-  svfloat64_t vehi = svmul_x (pg, y, vhi);\n-  svfloat64_t velo = svmul_x (pg, y, vlo);\n-  svfloat64_t vemi = svmls_x (pg, vehi, y, vhi);\n-  velo = svsub_x (pg, velo, vemi);\n-  svfloat64_t vz = sv_exp_inline (pg, vehi, velo, sign_bias);\n+  svfloat64_t vehi = svmul_x (svptrue_b64 (), y, vhi);\n+  svfloat64_t vemi = svmls_x (yint_or_xpos, vehi, y, vhi);\n+  svfloat64_t velo = svnmls_x (yint_or_xpos, vemi, y, vlo);\n+  svfloat64_t vz = sv_exp_inline (yint_or_xpos, vehi, velo, sign_bias, d);\n \n   /* Cases of finite y and finite negative x.  */\n-  vz = svsel (yisnotint_xisneg, sv_f64 (__builtin_nan (\"\")), vz);\n+  vz = svsel (yint_or_xpos, vz, sv_f64 (__builtin_nan (\"\")));\n+\n+  /* Special cases of x or y: zero, inf and nan.  */\n+  svbool_t xspecial = sv_zeroinfnan (svptrue_b64 (), vix0);\n+  svbool_t yspecial = sv_zeroinfnan (svptrue_b64 (), viy0);\n+  svbool_t special = svorr_z (svptrue_b64 (), xspecial, yspecial);\n \n   /* Cases of zero/inf/nan x or y.  */\n-  if (__glibc_unlikely (svptest_any (pg, special)))\n+  if (__glibc_unlikely (svptest_any (svptrue_b64 (), special)))\n     vz = sv_call2_f64 (pow_sc, x, y, vz, special);\n \n   return vz;\n\ncommit 06fd8ad78f35a6cc65dc7c6c08ce55faf6ad079d\nAuthor: Yat Long Poon <yatlong.poon@arm.com>\nDate:   Thu Feb 13 18:03:04 2025 +0000\n\n    AArch64: Improve codegen for SVE powf\n    \n    Improve memory access with indexed/unpredicated instructions.\n    Eliminate register spills.  Speedup on Neoverse V1: 3%.\n    \n    Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>\n    (cherry picked from commit 95e807209b680257a9afe81a507754f1565dbb4d)\n\ndiff --git a/sysdeps/aarch64/fpu/powf_sve.c b/sysdeps/aarch64/fpu/powf_sve.c\nindex 4f6a142325..08d7019a18 100644\n--- a/sysdeps/aarch64/fpu/powf_sve.c\n+++ b/sysdeps/aarch64/fpu/powf_sve.c\n@@ -26,7 +26,6 @@\n #define Tlogc __v_powf_data.logc\n #define Texp __v_powf_data.scale\n #define SignBias (1 << (V_POWF_EXP2_TABLE_BITS + 11))\n-#define Shift 0x1.8p52\n #define Norm 0x1p23f /* 0x4b000000.  */\n \n /* Overall ULP error bound for pow is 2.6 ulp\n@@ -36,7 +35,7 @@ static const struct data\n   double log_poly[4];\n   double exp_poly[3];\n   float uflow_bound, oflow_bound, small_bound;\n-  uint32_t sign_bias, sign_mask, subnormal_bias, off;\n+  uint32_t sign_bias, subnormal_bias, off;\n } data = {\n   /* rel err: 1.5 * 2^-30. Each coefficients is multiplied the value of\n      V_POWF_EXP2_N.  */\n@@ -53,7 +52,6 @@ static const struct data\n   .small_bound = 0x1p-126f,\n   .off = 0x3f35d000,\n   .sign_bias = SignBias,\n-  .sign_mask = 0x80000000,\n   .subnormal_bias = 0x0b800000, /* 23 << 23.  */\n };\n \n@@ -86,7 +84,7 @@ svisodd (svbool_t pg, svfloat32_t x)\n static inline svbool_t\n sv_zeroinfnan (svbool_t pg, svuint32_t i)\n {\n-  return svcmpge (pg, svsub_x (pg, svmul_x (pg, i, 2u), 1),\n+  return svcmpge (pg, svsub_x (pg, svadd_x (pg, i, i), 1),\n \t\t  2u * 0x7f800000 - 1);\n }\n \n@@ -150,9 +148,14 @@ powf_specialcase (float x, float y, float z)\n }\n \n /* Scalar fallback for special case routines with custom signature.  */\n-static inline svfloat32_t\n-sv_call_powf_sc (svfloat32_t x1, svfloat32_t x2, svfloat32_t y, svbool_t cmp)\n+static svfloat32_t NOINLINE\n+sv_call_powf_sc (svfloat32_t x1, svfloat32_t x2, svfloat32_t y)\n {\n+  /* Special cases of x or y: zero, inf and nan.  */\n+  svbool_t xspecial = sv_zeroinfnan (svptrue_b32 (), svreinterpret_u32 (x1));\n+  svbool_t yspecial = sv_zeroinfnan (svptrue_b32 (), svreinterpret_u32 (x2));\n+  svbool_t cmp = svorr_z (svptrue_b32 (), xspecial, yspecial);\n+\n   svbool_t p = svpfirst (cmp, svpfalse ());\n   while (svptest_any (cmp, p))\n     {\n@@ -182,30 +185,30 @@ sv_powf_core_ext (const svbool_t pg, svuint64_t i, svfloat64_t z, svint64_t k,\n \n   /* Polynomial to approximate log1p(r)/ln2.  */\n   svfloat64_t logx = A (0);\n-  logx = svmla_x (pg, A (1), r, logx);\n-  logx = svmla_x (pg, A (2), r, logx);\n-  logx = svmla_x (pg, A (3), r, logx);\n-  logx = svmla_x (pg, y0, r, logx);\n+  logx = svmad_x (pg, r, logx, A (1));\n+  logx = svmad_x (pg, r, logx, A (2));\n+  logx = svmad_x (pg, r, logx, A (3));\n+  logx = svmad_x (pg, r, logx, y0);\n   *pylogx = svmul_x (pg, y, logx);\n \n   /* z - kd is in [-1, 1] in non-nearest rounding modes.  */\n-  svfloat64_t kd = svadd_x (pg, *pylogx, Shift);\n-  svuint64_t ki = svreinterpret_u64 (kd);\n-  kd = svsub_x (pg, kd, Shift);\n+  svfloat64_t kd = svrinta_x (svptrue_b64 (), *pylogx);\n+  svuint64_t ki = svreinterpret_u64 (svcvt_s64_x (svptrue_b64 (), kd));\n \n   r = svsub_x (pg, *pylogx, kd);\n \n   /* exp2(x) = 2^(k/N) * 2^r ~= s * (C0*r^3 + C1*r^2 + C2*r + 1).  */\n-  svuint64_t t\n-      = svld1_gather_index (pg, Texp, svand_x (pg, ki, V_POWF_EXP2_N - 1));\n-  svuint64_t ski = svadd_x (pg, ki, sign_bias);\n-  t = svadd_x (pg, t, svlsl_x (pg, ski, 52 - V_POWF_EXP2_TABLE_BITS));\n+  svuint64_t t = svld1_gather_index (\n+      svptrue_b64 (), Texp, svand_x (svptrue_b64 (), ki, V_POWF_EXP2_N - 1));\n+  svuint64_t ski = svadd_x (svptrue_b64 (), ki, sign_bias);\n+  t = svadd_x (svptrue_b64 (), t,\n+\t       svlsl_x (svptrue_b64 (), ski, 52 - V_POWF_EXP2_TABLE_BITS));\n   svfloat64_t s = svreinterpret_f64 (t);\n \n   svfloat64_t p = C (0);\n   p = svmla_x (pg, C (1), p, r);\n   p = svmla_x (pg, C (2), p, r);\n-  p = svmla_x (pg, s, p, svmul_x (pg, s, r));\n+  p = svmla_x (pg, s, p, svmul_x (svptrue_b64 (), s, r));\n \n   return p;\n }\n@@ -219,19 +222,16 @@ sv_powf_core (const svbool_t pg, svuint32_t i, svuint32_t iz, svint32_t k,\n {\n   const svbool_t ptrue = svptrue_b64 ();\n \n-  /* Unpack and promote input vectors (pg, y, z, i, k and sign_bias) into two in\n-     order to perform core computation in double precision.  */\n+  /* Unpack and promote input vectors (pg, y, z, i, k and sign_bias) into two\n+   * in order to perform core computation in double precision.  */\n   const svbool_t pg_lo = svunpklo (pg);\n   const svbool_t pg_hi = svunpkhi (pg);\n-  svfloat64_t y_lo = svcvt_f64_x (\n-      ptrue, svreinterpret_f32 (svunpklo (svreinterpret_u32 (y))));\n-  svfloat64_t y_hi = svcvt_f64_x (\n-      ptrue, svreinterpret_f32 (svunpkhi (svreinterpret_u32 (y))));\n-  svfloat32_t z = svreinterpret_f32 (iz);\n-  svfloat64_t z_lo = svcvt_f64_x (\n-      ptrue, svreinterpret_f32 (svunpklo (svreinterpret_u32 (z))));\n-  svfloat64_t z_hi = svcvt_f64_x (\n-      ptrue, svreinterpret_f32 (svunpkhi (svreinterpret_u32 (z))));\n+  svfloat64_t y_lo\n+      = svcvt_f64_x (pg, svreinterpret_f32 (svunpklo (svreinterpret_u32 (y))));\n+  svfloat64_t y_hi\n+      = svcvt_f64_x (pg, svreinterpret_f32 (svunpkhi (svreinterpret_u32 (y))));\n+  svfloat64_t z_lo = svcvt_f64_x (pg, svreinterpret_f32 (svunpklo (iz)));\n+  svfloat64_t z_hi = svcvt_f64_x (pg, svreinterpret_f32 (svunpkhi (iz)));\n   svuint64_t i_lo = svunpklo (i);\n   svuint64_t i_hi = svunpkhi (i);\n   svint64_t k_lo = svunpklo (k);\n@@ -258,9 +258,9 @@ sv_powf_core (const svbool_t pg, svuint32_t i, svuint32_t iz, svint32_t k,\n /* Implementation of SVE powf.\n    Provides the same accuracy as AdvSIMD powf, since it relies on the same\n    algorithm. The theoretical maximum error is under 2.60 ULPs.\n-   Maximum measured error is 2.56 ULPs:\n-   SV_NAME_F2 (pow) (0x1.004118p+0, 0x1.5d14a4p+16) got 0x1.fd4bp+127\n-\t\t\t\t\t\t   want 0x1.fd4b06p+127.  */\n+   Maximum measured error is 2.57 ULPs:\n+   SV_NAME_F2 (pow) (0x1.031706p+0, 0x1.ce2ec2p+12) got 0x1.fff868p+127\n+\t\t\t\t\t\t   want 0x1.fff862p+127.  */\n svfloat32_t SV_NAME_F2 (pow) (svfloat32_t x, svfloat32_t y, const svbool_t pg)\n {\n   const struct data *d = ptr_barrier (&data);\n@@ -269,21 +269,19 @@ svfloat32_t SV_NAME_F2 (pow) (svfloat32_t x, svfloat32_t y, const svbool_t pg)\n   svuint32_t viy0 = svreinterpret_u32 (y);\n \n   /* Negative x cases.  */\n-  svuint32_t sign_bit = svand_m (pg, vix0, d->sign_mask);\n-  svbool_t xisneg = svcmpeq (pg, sign_bit, d->sign_mask);\n+  svbool_t xisneg = svcmplt (pg, x, sv_f32 (0));\n \n   /* Set sign_bias and ix depending on sign of x and nature of y.  */\n-  svbool_t yisnotint_xisneg = svpfalse_b ();\n+  svbool_t yint_or_xpos = pg;\n   svuint32_t sign_bias = sv_u32 (0);\n   svuint32_t vix = vix0;\n   if (__glibc_unlikely (svptest_any (pg, xisneg)))\n     {\n       /* Determine nature of y.  */\n-      yisnotint_xisneg = svisnotint (xisneg, y);\n-      svbool_t yisint_xisneg = svisint (xisneg, y);\n+      yint_or_xpos = svisint (xisneg, y);\n       svbool_t yisodd_xisneg = svisodd (xisneg, y);\n       /* ix set to abs(ix) if y is integer.  */\n-      vix = svand_m (yisint_xisneg, vix0, 0x7fffffff);\n+      vix = svand_m (yint_or_xpos, vix0, 0x7fffffff);\n       /* Set to SignBias if x is negative and y is odd.  */\n       sign_bias = svsel (yisodd_xisneg, sv_u32 (d->sign_bias), sv_u32 (0));\n     }\n@@ -294,8 +292,8 @@ svfloat32_t SV_NAME_F2 (pow) (svfloat32_t x, svfloat32_t y, const svbool_t pg)\n   svbool_t cmp = svorr_z (pg, xspecial, yspecial);\n \n   /* Small cases of x: |x| < 0x1p-126.  */\n-  svbool_t xsmall = svaclt (pg, x, d->small_bound);\n-  if (__glibc_unlikely (svptest_any (pg, xsmall)))\n+  svbool_t xsmall = svaclt (yint_or_xpos, x, d->small_bound);\n+  if (__glibc_unlikely (svptest_any (yint_or_xpos, xsmall)))\n     {\n       /* Normalize subnormal x so exponent becomes negative.  */\n       svuint32_t vix_norm = svreinterpret_u32 (svmul_x (xsmall, x, Norm));\n@@ -304,32 +302,35 @@ svfloat32_t SV_NAME_F2 (pow) (svfloat32_t x, svfloat32_t y, const svbool_t pg)\n       vix = svsel (xsmall, vix_norm, vix);\n     }\n   /* Part of core computation carried in working precision.  */\n-  svuint32_t tmp = svsub_x (pg, vix, d->off);\n-  svuint32_t i = svand_x (pg, svlsr_x (pg, tmp, (23 - V_POWF_LOG2_TABLE_BITS)),\n-\t\t\t  V_POWF_LOG2_N - 1);\n-  svuint32_t top = svand_x (pg, tmp, 0xff800000);\n-  svuint32_t iz = svsub_x (pg, vix, top);\n-  svint32_t k\n-      = svasr_x (pg, svreinterpret_s32 (top), (23 - V_POWF_EXP2_TABLE_BITS));\n-\n-  /* Compute core in extended precision and return intermediate ylogx results to\n-      handle cases of underflow and underflow in exp.  */\n+  svuint32_t tmp = svsub_x (yint_or_xpos, vix, d->off);\n+  svuint32_t i = svand_x (\n+      yint_or_xpos, svlsr_x (yint_or_xpos, tmp, (23 - V_POWF_LOG2_TABLE_BITS)),\n+      V_POWF_LOG2_N - 1);\n+  svuint32_t top = svand_x (yint_or_xpos, tmp, 0xff800000);\n+  svuint32_t iz = svsub_x (yint_or_xpos, vix, top);\n+  svint32_t k = svasr_x (yint_or_xpos, svreinterpret_s32 (top),\n+\t\t\t (23 - V_POWF_EXP2_TABLE_BITS));\n+\n+  /* Compute core in extended precision and return intermediate ylogx results\n+   * to handle cases of underflow and underflow in exp.  */\n   svfloat32_t ylogx;\n-  svfloat32_t ret = sv_powf_core (pg, i, iz, k, y, sign_bias, &ylogx, d);\n+  svfloat32_t ret\n+      = sv_powf_core (yint_or_xpos, i, iz, k, y, sign_bias, &ylogx, d);\n \n   /* Handle exp special cases of underflow and overflow.  */\n-  svuint32_t sign = svlsl_x (pg, sign_bias, 20 - V_POWF_EXP2_TABLE_BITS);\n+  svuint32_t sign\n+      = svlsl_x (yint_or_xpos, sign_bias, 20 - V_POWF_EXP2_TABLE_BITS);\n   svfloat32_t ret_oflow\n-      = svreinterpret_f32 (svorr_x (pg, sign, asuint (INFINITY)));\n+      = svreinterpret_f32 (svorr_x (yint_or_xpos, sign, asuint (INFINITY)));\n   svfloat32_t ret_uflow = svreinterpret_f32 (sign);\n-  ret = svsel (svcmple (pg, ylogx, d->uflow_bound), ret_uflow, ret);\n-  ret = svsel (svcmpgt (pg, ylogx, d->oflow_bound), ret_oflow, ret);\n+  ret = svsel (svcmple (yint_or_xpos, ylogx, d->uflow_bound), ret_uflow, ret);\n+  ret = svsel (svcmpgt (yint_or_xpos, ylogx, d->oflow_bound), ret_oflow, ret);\n \n   /* Cases of finite y and finite negative x.  */\n-  ret = svsel (yisnotint_xisneg, sv_f32 (__builtin_nanf (\"\")), ret);\n+  ret = svsel (yint_or_xpos, ret, sv_f32 (__builtin_nanf (\"\")));\n \n-  if (__glibc_unlikely (svptest_any (pg, cmp)))\n-    return sv_call_powf_sc (x, y, ret, cmp);\n+  if (__glibc_unlikely (svptest_any (cmp, cmp)))\n+    return sv_call_powf_sc (x, y, ret);\n \n   return ret;\n }\n\ncommit fd9a3a36fdcf14d1678c469e8b9033a46aa6c6fb\nAuthor: Wilco Dijkstra <wilco.dijkstra@arm.com>\nDate:   Thu Feb 27 20:34:34 2025 +0000\n\n    Revert \"AArch64: Add vector logp1 alias for log1p\"\n    \n    This reverts commit a991a0fc7c051d7ef2ea7778e0a699f22d4e53d7.\n\ndiff --git a/bits/libm-simd-decl-stubs.h b/bits/libm-simd-decl-stubs.h\nindex 5019e8e25c..08a41c46ad 100644\n--- a/bits/libm-simd-decl-stubs.h\n+++ b/bits/libm-simd-decl-stubs.h\n@@ -253,17 +253,6 @@\n #define __DECL_SIMD_log1pf64x\n #define __DECL_SIMD_log1pf128x\n \n-#define __DECL_SIMD_logp1\n-#define __DECL_SIMD_logp1f\n-#define __DECL_SIMD_logp1l\n-#define __DECL_SIMD_logp1f16\n-#define __DECL_SIMD_logp1f32\n-#define __DECL_SIMD_logp1f64\n-#define __DECL_SIMD_logp1f128\n-#define __DECL_SIMD_logp1f32x\n-#define __DECL_SIMD_logp1f64x\n-#define __DECL_SIMD_logp1f128x\n-\n #define __DECL_SIMD_atanh\n #define __DECL_SIMD_atanhf\n #define __DECL_SIMD_atanhl\ndiff --git a/math/bits/mathcalls.h b/math/bits/mathcalls.h\nindex 92856becc4..6cb594b6ff 100644\n--- a/math/bits/mathcalls.h\n+++ b/math/bits/mathcalls.h\n@@ -126,7 +126,7 @@ __MATHCALL (log2p1,, (_Mdouble_ __x));\n __MATHCALL (log10p1,, (_Mdouble_ __x));\n \n /* Return log(1 + X).  */\n-__MATHCALL_VEC (logp1,, (_Mdouble_ __x));\n+__MATHCALL (logp1,, (_Mdouble_ __x));\n #endif\n \n #if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99\ndiff --git a/sysdeps/aarch64/fpu/Versions b/sysdeps/aarch64/fpu/Versions\nindex 015211f5f4..cc15ce2d1e 100644\n--- a/sysdeps/aarch64/fpu/Versions\n+++ b/sysdeps/aarch64/fpu/Versions\n@@ -135,11 +135,4 @@ libmvec {\n     _ZGVsMxv_tanh;\n     _ZGVsMxv_tanhf;\n   }\n-  GLIBC_2.41 {\n-    _ZGVnN2v_logp1;\n-    _ZGVnN2v_logp1f;\n-    _ZGVnN4v_logp1f;\n-    _ZGVsMxv_logp1;\n-    _ZGVsMxv_logp1f;\n-  }\n }\ndiff --git a/sysdeps/aarch64/fpu/advsimd_f32_protos.h b/sysdeps/aarch64/fpu/advsimd_f32_protos.h\nindex 5909bb4ce9..097d403ffe 100644\n--- a/sysdeps/aarch64/fpu/advsimd_f32_protos.h\n+++ b/sysdeps/aarch64/fpu/advsimd_f32_protos.h\n@@ -36,7 +36,6 @@ libmvec_hidden_proto (V_NAME_F2(hypot));\n libmvec_hidden_proto (V_NAME_F1(log10));\n libmvec_hidden_proto (V_NAME_F1(log1p));\n libmvec_hidden_proto (V_NAME_F1(log2));\n-libmvec_hidden_proto (V_NAME_F1(logp1));\n libmvec_hidden_proto (V_NAME_F1(log));\n libmvec_hidden_proto (V_NAME_F2(pow));\n libmvec_hidden_proto (V_NAME_F1(sin));\ndiff --git a/sysdeps/aarch64/fpu/bits/math-vector.h b/sysdeps/aarch64/fpu/bits/math-vector.h\nindex f295fe185d..7484150131 100644\n--- a/sysdeps/aarch64/fpu/bits/math-vector.h\n+++ b/sysdeps/aarch64/fpu/bits/math-vector.h\n@@ -113,10 +113,6 @@\n # define __DECL_SIMD_log2 __DECL_SIMD_aarch64\n # undef __DECL_SIMD_log2f\n # define __DECL_SIMD_log2f __DECL_SIMD_aarch64\n-# undef __DECL_SIMD_logp1\n-# define __DECL_SIMD_logp1 __DECL_SIMD_aarch64\n-# undef __DECL_SIMD_logp1f\n-# define __DECL_SIMD_logp1f __DECL_SIMD_aarch64\n # undef __DECL_SIMD_pow\n # define __DECL_SIMD_pow __DECL_SIMD_aarch64\n # undef __DECL_SIMD_powf\n@@ -184,7 +180,6 @@ __vpcs __f32x4_t _ZGVnN4v_logf (__f32x4_t);\n __vpcs __f32x4_t _ZGVnN4v_log10f (__f32x4_t);\n __vpcs __f32x4_t _ZGVnN4v_log1pf (__f32x4_t);\n __vpcs __f32x4_t _ZGVnN4v_log2f (__f32x4_t);\n-__vpcs __f32x4_t _ZGVnN4v_logp1f (__f32x4_t);\n __vpcs __f32x4_t _ZGVnN4vv_powf (__f32x4_t, __f32x4_t);\n __vpcs __f32x4_t _ZGVnN4v_sinf (__f32x4_t);\n __vpcs __f32x4_t _ZGVnN4v_sinhf (__f32x4_t);\n@@ -212,7 +207,6 @@ __vpcs __f64x2_t _ZGVnN2v_log (__f64x2_t);\n __vpcs __f64x2_t _ZGVnN2v_log10 (__f64x2_t);\n __vpcs __f64x2_t _ZGVnN2v_log1p (__f64x2_t);\n __vpcs __f64x2_t _ZGVnN2v_log2 (__f64x2_t);\n-__vpcs __f64x2_t _ZGVnN2v_logp1 (__f64x2_t);\n __vpcs __f64x2_t _ZGVnN2vv_pow (__f64x2_t, __f64x2_t);\n __vpcs __f64x2_t _ZGVnN2v_sin (__f64x2_t);\n __vpcs __f64x2_t _ZGVnN2v_sinh (__f64x2_t);\n@@ -245,7 +239,6 @@ __sv_f32_t _ZGVsMxv_logf (__sv_f32_t, __sv_bool_t);\n __sv_f32_t _ZGVsMxv_log10f (__sv_f32_t, __sv_bool_t);\n __sv_f32_t _ZGVsMxv_log1pf (__sv_f32_t, __sv_bool_t);\n __sv_f32_t _ZGVsMxv_log2f (__sv_f32_t, __sv_bool_t);\n-__sv_f32_t _ZGVsMxv_logp1f (__sv_f32_t, __sv_bool_t);\n __sv_f32_t _ZGVsMxvv_powf (__sv_f32_t, __sv_f32_t, __sv_bool_t);\n __sv_f32_t _ZGVsMxv_sinf (__sv_f32_t, __sv_bool_t);\n __sv_f32_t _ZGVsMxv_sinhf (__sv_f32_t, __sv_bool_t);\n@@ -273,7 +266,6 @@ __sv_f64_t _ZGVsMxv_log (__sv_f64_t, __sv_bool_t);\n __sv_f64_t _ZGVsMxv_log10 (__sv_f64_t, __sv_bool_t);\n __sv_f64_t _ZGVsMxv_log1p (__sv_f64_t, __sv_bool_t);\n __sv_f64_t _ZGVsMxv_log2 (__sv_f64_t, __sv_bool_t);\n-__sv_f64_t _ZGVsMxv_logp1 (__sv_f64_t, __sv_bool_t);\n __sv_f64_t _ZGVsMxvv_pow (__sv_f64_t, __sv_f64_t, __sv_bool_t);\n __sv_f64_t _ZGVsMxv_sin (__sv_f64_t, __sv_bool_t);\n __sv_f64_t _ZGVsMxv_sinh (__sv_f64_t, __sv_bool_t);\ndiff --git a/sysdeps/aarch64/fpu/log1p_advsimd.c b/sysdeps/aarch64/fpu/log1p_advsimd.c\nindex 1263587201..9d18578ce6 100644\n--- a/sysdeps/aarch64/fpu/log1p_advsimd.c\n+++ b/sysdeps/aarch64/fpu/log1p_advsimd.c\n@@ -58,5 +58,3 @@ VPCS_ATTR float64x2_t V_NAME_D1 (log1p) (float64x2_t x)\n \n   return log1p_inline (x, &d->d);\n }\n-\n-strong_alias (V_NAME_D1 (log1p), V_NAME_D1 (logp1))\ndiff --git a/sysdeps/aarch64/fpu/log1p_sve.c b/sysdeps/aarch64/fpu/log1p_sve.c\nindex b21cfb2c90..04f7e5720e 100644\n--- a/sysdeps/aarch64/fpu/log1p_sve.c\n+++ b/sysdeps/aarch64/fpu/log1p_sve.c\n@@ -116,5 +116,3 @@ svfloat64_t SV_NAME_D1 (log1p) (svfloat64_t x, svbool_t pg)\n \n   return y;\n }\n-\n-strong_alias (SV_NAME_D1 (log1p), SV_NAME_D1 (logp1))\ndiff --git a/sysdeps/aarch64/fpu/log1pf_advsimd.c b/sysdeps/aarch64/fpu/log1pf_advsimd.c\nindex 00006fc703..f2d47962fe 100644\n--- a/sysdeps/aarch64/fpu/log1pf_advsimd.c\n+++ b/sysdeps/aarch64/fpu/log1pf_advsimd.c\n@@ -93,6 +93,3 @@ VPCS_ATTR float32x4_t V_NAME_F1 (log1p) (float32x4_t x)\n \n libmvec_hidden_def (V_NAME_F1 (log1p))\n HALF_WIDTH_ALIAS_F1 (log1p)\n-strong_alias (V_NAME_F1 (log1p), V_NAME_F1 (logp1))\n-libmvec_hidden_def (V_NAME_F1 (logp1))\n-HALF_WIDTH_ALIAS_F1 (logp1)\ndiff --git a/sysdeps/aarch64/fpu/log1pf_sve.c b/sysdeps/aarch64/fpu/log1pf_sve.c\nindex 18a185c838..4f17c44e2d 100644\n--- a/sysdeps/aarch64/fpu/log1pf_sve.c\n+++ b/sysdeps/aarch64/fpu/log1pf_sve.c\n@@ -42,5 +42,3 @@ svfloat32_t SV_NAME_F1 (log1p) (svfloat32_t x, svbool_t pg)\n \n   return sv_log1pf_inline (x, pg);\n }\n-\n-strong_alias (SV_NAME_F1 (log1p), SV_NAME_F1 (logp1))\ndiff --git a/sysdeps/unix/sysv/linux/aarch64/libmvec.abilist b/sysdeps/unix/sysv/linux/aarch64/libmvec.abilist\nindex 98687cae0d..b685106954 100644\n--- a/sysdeps/unix/sysv/linux/aarch64/libmvec.abilist\n+++ b/sysdeps/unix/sysv/linux/aarch64/libmvec.abilist\n@@ -128,8 +128,3 @@ GLIBC_2.40 _ZGVsMxvv_hypot F\n GLIBC_2.40 _ZGVsMxvv_hypotf F\n GLIBC_2.40 _ZGVsMxvv_pow F\n GLIBC_2.40 _ZGVsMxvv_powf F\n-GLIBC_2.41 _ZGVnN2v_logp1 F\n-GLIBC_2.41 _ZGVnN2v_logp1f F\n-GLIBC_2.41 _ZGVnN4v_logp1f F\n-GLIBC_2.41 _ZGVsMxv_logp1 F\n-GLIBC_2.41 _ZGVsMxv_logp1f F\n\ncommit 64896b7d329809127035fde42768a6f7eeffed75\nAuthor: Wilco Dijkstra <wilco.dijkstra@arm.com>\nDate:   Wed Aug 7 14:43:47 2024 +0100\n\n    AArch64: Improve generic strlen\n    \n    Improve performance by handling another 16 bytes before entering the loop.\n    Use ADDHN in the loop to avoid SHRN+FMOV when it terminates.  Change final\n    size computation to avoid increasing latency.  On Neoverse V1 performance\n    of the random strlen benchmark improves by 4.6%.\n    \n    Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>\n    (cherry picked from commit 3dc426b642dcafdbc11a99f2767e081d086f5fc7)\n\ndiff --git a/sysdeps/aarch64/strlen.S b/sysdeps/aarch64/strlen.S\nindex ab2a576cdb..352fb40d3a 100644\n--- a/sysdeps/aarch64/strlen.S\n+++ b/sysdeps/aarch64/strlen.S\n@@ -1,4 +1,5 @@\n-/* Copyright (C) 2012-2024 Free Software Foundation, Inc.\n+/* Generic optimized strlen using SIMD.\n+   Copyright (C) 2012-2024 Free Software Foundation, Inc.\n \n    This file is part of the GNU C Library.\n \n@@ -56,36 +57,50 @@ ENTRY (STRLEN)\n \tshrn\tvend.8b, vhas_nul.8h, 4\t\t/* 128->64 */\n \tfmov\tsynd, dend\n \tlsr\tsynd, synd, shift\n-\tcbz\tsynd, L(loop)\n+\tcbz\tsynd, L(next16)\n \n \trbit\tsynd, synd\n \tclz\tresult, synd\n \tlsr\tresult, result, 2\n \tret\n \n+L(next16):\n+\tldr\tdata, [src, 16]\n+\tcmeq\tvhas_nul.16b, vdata.16b, 0\n+\tshrn\tvend.8b, vhas_nul.8h, 4\t\t/* 128->64 */\n+\tfmov\tsynd, dend\n+\tcbz\tsynd, L(loop)\n+\tadd\tsrc, src, 16\n+#ifndef __AARCH64EB__\n+\trbit\tsynd, synd\n+#endif\n+\tsub\tresult, src, srcin\n+\tclz\ttmp, synd\n+\tadd\tresult, result, tmp, lsr 2\n+\tret\n+\n \t.p2align 5\n L(loop):\n-\tldr\tdata, [src, 16]\n+\tldr\tdata, [src, 32]!\n \tcmeq\tvhas_nul.16b, vdata.16b, 0\n-\tumaxp\tvend.16b, vhas_nul.16b, vhas_nul.16b\n+\taddhn\tvend.8b, vhas_nul.8h, vhas_nul.8h\n \tfmov\tsynd, dend\n \tcbnz\tsynd, L(loop_end)\n-\tldr\tdata, [src, 32]!\n+\tldr\tdata, [src, 16]\n \tcmeq\tvhas_nul.16b, vdata.16b, 0\n-\tumaxp\tvend.16b, vhas_nul.16b, vhas_nul.16b\n+\taddhn\tvend.8b, vhas_nul.8h, vhas_nul.8h\n \tfmov\tsynd, dend\n \tcbz\tsynd, L(loop)\n-\tsub\tsrc, src, 16\n+\tadd\tsrc, src, 16\n L(loop_end):\n-\tshrn\tvend.8b, vhas_nul.8h, 4\t\t/* 128->64 */\n-\tsub\tresult, src, srcin\n-\tfmov\tsynd, dend\n+\tsub\tresult, shift, src, lsl 2\t/* (srcin - src) << 2.  */\n #ifndef __AARCH64EB__\n \trbit\tsynd, synd\n+\tsub\tresult, result, 3\n #endif\n-\tadd\tresult, result, 16\n \tclz\ttmp, synd\n-\tadd\tresult, result, tmp, lsr 2\n+\tsub\tresult, tmp, result\n+\tlsr\tresult, result, 2\n \tret\n \n END (STRLEN)\n\ncommit 544fb349d35efd5f86ed7e482759ff21496a32fd\nAuthor: Wilco Dijkstra <wilco.dijkstra@arm.com>\nDate:   Mon Sep 9 15:26:47 2024 +0100\n\n    AArch64: Optimize memset\n    \n    Improve small memsets by avoiding branches and use overlapping stores.\n    Use DC ZVA for copies over 128 bytes.  Remove unnecessary code for ZVA sizes\n    other than 64 and 128.  Performance of random memset benchmark improves by 24%\n    on Neoverse N1.\n    \n    Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>\n    (cherry picked from commit cec3aef32412779e207f825db0d057ebb4628ae8)\n\ndiff --git a/sysdeps/aarch64/memset.S b/sysdeps/aarch64/memset.S\nindex 7ef77ee8c9..caafb019e2 100644\n--- a/sysdeps/aarch64/memset.S\n+++ b/sysdeps/aarch64/memset.S\n@@ -1,4 +1,5 @@\n-/* Copyright (C) 2012-2024 Free Software Foundation, Inc.\n+/* Generic optimized memset using SIMD.\n+   Copyright (C) 2012-2024 Free Software Foundation, Inc.\n \n    This file is part of the GNU C Library.\n \n@@ -17,7 +18,6 @@\n    <https://www.gnu.org/licenses/>.  */\n \n #include <sysdep.h>\n-#include \"memset-reg.h\"\n \n #ifndef MEMSET\n # define MEMSET memset\n@@ -25,130 +25,132 @@\n \n /* Assumptions:\n  *\n- * ARMv8-a, AArch64, unaligned accesses\n+ * ARMv8-a, AArch64, Advanced SIMD, unaligned accesses.\n  *\n  */\n \n-ENTRY (MEMSET)\n+#define dstin\tx0\n+#define val\tx1\n+#define valw\tw1\n+#define count\tx2\n+#define dst\tx3\n+#define dstend\tx4\n+#define zva_val\tx5\n+#define off\tx3\n+#define dstend2\tx5\n \n+ENTRY (MEMSET)\n \tPTR_ARG (0)\n \tSIZE_ARG (2)\n \n \tdup\tv0.16B, valw\n+\tcmp\tcount, 16\n+\tb.lo\tL(set_small)\n+\n \tadd\tdstend, dstin, count\n+\tcmp\tcount, 64\n+\tb.hs\tL(set_128)\n \n-\tcmp\tcount, 96\n-\tb.hi\tL(set_long)\n-\tcmp\tcount, 16\n-\tb.hs\tL(set_medium)\n-\tmov\tval, v0.D[0]\n+\t/* Set 16..63 bytes.  */\n+\tmov\toff, 16\n+\tand\toff, off, count, lsr 1\n+\tsub\tdstend2, dstend, off\n+\tstr\tq0, [dstin]\n+\tstr\tq0, [dstin, off]\n+\tstr\tq0, [dstend2, -16]\n+\tstr\tq0, [dstend, -16]\n+\tret\n \n+\t.p2align 4\n \t/* Set 0..15 bytes.  */\n-\ttbz\tcount, 3, 1f\n-\tstr\tval, [dstin]\n-\tstr\tval, [dstend, -8]\n-\tret\n-\tnop\n-1:\ttbz\tcount, 2, 2f\n-\tstr\tvalw, [dstin]\n-\tstr\tvalw, [dstend, -4]\n+L(set_small):\n+\tadd\tdstend, dstin, count\n+\tcmp\tcount, 4\n+\tb.lo\t2f\n+\tlsr\toff, count, 3\n+\tsub\tdstend2, dstend, off, lsl 2\n+\tstr\ts0, [dstin]\n+\tstr\ts0, [dstin, off, lsl 2]\n+\tstr\ts0, [dstend2, -4]\n+\tstr\ts0, [dstend, -4]\n \tret\n+\n+\t/* Set 0..3 bytes.  */\n 2:\tcbz\tcount, 3f\n+\tlsr\toff, count, 1\n \tstrb\tvalw, [dstin]\n-\ttbz\tcount, 1, 3f\n-\tstrh\tvalw, [dstend, -2]\n+\tstrb\tvalw, [dstin, off]\n+\tstrb\tvalw, [dstend, -1]\n 3:\tret\n \n-\t/* Set 17..96 bytes.  */\n-L(set_medium):\n-\tstr\tq0, [dstin]\n-\ttbnz\tcount, 6, L(set96)\n-\tstr\tq0, [dstend, -16]\n-\ttbz\tcount, 5, 1f\n-\tstr\tq0, [dstin, 16]\n-\tstr\tq0, [dstend, -32]\n-1:\tret\n-\n \t.p2align 4\n-\t/* Set 64..96 bytes.  Write 64 bytes from the start and\n-\t   32 bytes from the end.  */\n-L(set96):\n-\tstr\tq0, [dstin, 16]\n+L(set_128):\n+\tbic\tdst, dstin, 15\n+\tcmp\tcount, 128\n+\tb.hi\tL(set_long)\n+\tstp\tq0, q0, [dstin]\n \tstp\tq0, q0, [dstin, 32]\n+\tstp\tq0, q0, [dstend, -64]\n \tstp\tq0, q0, [dstend, -32]\n \tret\n \n-\t.p2align 3\n-\tnop\n+\t.p2align 4\n L(set_long):\n-\tand\tvalw, valw, 255\n-\tbic\tdst, dstin, 15\n \tstr\tq0, [dstin]\n-\tcmp\tcount, 256\n-\tccmp\tvalw, 0, 0, cs\n-\tb.eq\tL(try_zva)\n-L(no_zva):\n-\tsub\tcount, dstend, dst\t/* Count is 16 too large.  */\n-\tsub\tdst, dst, 16\t\t/* Dst is biased by -32.  */\n-\tsub\tcount, count, 64 + 16\t/* Adjust count and bias for loop.  */\n-1:\tstp\tq0, q0, [dst, 32]\n-\tstp\tq0, q0, [dst, 64]!\n-L(tail64):\n-\tsubs\tcount, count, 64\n-\tb.hi\t1b\n-2:\tstp\tq0, q0, [dstend, -64]\n+\tstr\tq0, [dst, 16]\n+\ttst\tvalw, 255\n+\tb.ne\tL(no_zva)\n+#ifndef ZVA64_ONLY\n+\tmrs\tzva_val, dczid_el0\n+\tand\tzva_val, zva_val, 31\n+\tcmp\tzva_val, 4\t\t/* ZVA size is 64 bytes.  */\n+\tb.ne\tL(zva_128)\n+#endif\n+\tstp\tq0, q0, [dst, 32]\n+\tbic\tdst, dstin, 63\n+\tsub\tcount, dstend, dst\t/* Count is now 64 too large.  */\n+\tsub\tcount, count, 64 + 64\t/* Adjust count and bias for loop.  */\n+\n+\t/* Write last bytes before ZVA loop.  */\n+\tstp\tq0, q0, [dstend, -64]\n \tstp\tq0, q0, [dstend, -32]\n+\n+\t.p2align 4\n+L(zva64_loop):\n+\tadd\tdst, dst, 64\n+\tdc\tzva, dst\n+\tsubs\tcount, count, 64\n+\tb.hi\tL(zva64_loop)\n \tret\n \n-L(try_zva):\n-#ifndef ZVA64_ONLY\n \t.p2align 3\n-\tmrs\ttmp1, dczid_el0\n-\ttbnz\ttmp1w, 4, L(no_zva)\n-\tand\ttmp1w, tmp1w, 15\n-\tcmp\ttmp1w, 4\t/* ZVA size is 64 bytes.  */\n-\tb.ne\t L(zva_128)\n-\tnop\n-#endif\n-\t/* Write the first and last 64 byte aligned block using stp rather\n-\t   than using DC ZVA.  This is faster on some cores.\n-\t */\n-\t.p2align 4\n-L(zva_64):\n-\tstr\tq0, [dst, 16]\n+L(no_zva):\n+\tsub\tcount, dstend, dst\t/* Count is 32 too large.  */\n+\tsub\tcount, count, 64 + 32\t/* Adjust count and bias for loop.  */\n+L(no_zva_loop):\n \tstp\tq0, q0, [dst, 32]\n-\tbic\tdst, dst, 63\n \tstp\tq0, q0, [dst, 64]\n-\tstp\tq0, q0, [dst, 96]\n-\tsub\tcount, dstend, dst\t/* Count is now 128 too large.\t*/\n-\tsub\tcount, count, 128+64+64\t/* Adjust count and bias for loop.  */\n-\tadd\tdst, dst, 128\n-1:\tdc\tzva, dst\n \tadd\tdst, dst, 64\n \tsubs\tcount, count, 64\n-\tb.hi\t1b\n-\tstp\tq0, q0, [dst, 0]\n-\tstp\tq0, q0, [dst, 32]\n+\tb.hi\tL(no_zva_loop)\n \tstp\tq0, q0, [dstend, -64]\n \tstp\tq0, q0, [dstend, -32]\n \tret\n \n #ifndef ZVA64_ONLY\n-\t.p2align 3\n+\t.p2align 4\n L(zva_128):\n-\tcmp\ttmp1w, 5\t/* ZVA size is 128 bytes.  */\n-\tb.ne\tL(zva_other)\n+\tcmp\tzva_val, 5\t\t/* ZVA size is 128 bytes.  */\n+\tb.ne\tL(no_zva)\n \n-\tstr\tq0, [dst, 16]\n \tstp\tq0, q0, [dst, 32]\n \tstp\tq0, q0, [dst, 64]\n \tstp\tq0, q0, [dst, 96]\n \tbic\tdst, dst, 127\n \tsub\tcount, dstend, dst\t/* Count is now 128 too large.\t*/\n-\tsub\tcount, count, 128+128\t/* Adjust count and bias for loop.  */\n-\tadd\tdst, dst, 128\n-1:\tdc\tzva, dst\n-\tadd\tdst, dst, 128\n+\tsub\tcount, count, 128 + 128\t/* Adjust count and bias for loop.  */\n+1:\tadd\tdst, dst, 128\n+\tdc\tzva, dst\n \tsubs\tcount, count, 128\n \tb.hi\t1b\n \tstp\tq0, q0, [dstend, -128]\n@@ -156,35 +158,6 @@ L(zva_128):\n \tstp\tq0, q0, [dstend, -64]\n \tstp\tq0, q0, [dstend, -32]\n \tret\n-\n-L(zva_other):\n-\tmov\ttmp2w, 4\n-\tlsl\tzva_lenw, tmp2w, tmp1w\n-\tadd\ttmp1, zva_len, 64\t/* Max alignment bytes written.\t */\n-\tcmp\tcount, tmp1\n-\tblo\tL(no_zva)\n-\n-\tsub\ttmp2, zva_len, 1\n-\tadd\ttmp1, dst, zva_len\n-\tadd\tdst, dst, 16\n-\tsubs\tcount, tmp1, dst\t/* Actual alignment bytes to write.  */\n-\tbic\ttmp1, tmp1, tmp2\t/* Aligned dc zva start address.  */\n-\tbeq\t2f\n-1:\tstp\tq0, q0, [dst], 64\n-\tstp\tq0, q0, [dst, -32]\n-\tsubs\tcount, count, 64\n-\tb.hi\t1b\n-2:\tmov\tdst, tmp1\n-\tsub\tcount, dstend, tmp1\t/* Remaining bytes to write.  */\n-\tsubs\tcount, count, zva_len\n-\tb.lo\t4f\n-3:\tdc\tzva, dst\n-\tadd\tdst, dst, zva_len\n-\tsubs\tcount, count, zva_len\n-\tb.hs\t3b\n-4:\tadd\tcount, count, zva_len\n-\tsub\tdst, dst, 32\t\t/* Bias dst for tail loop.  */\n-\tb\tL(tail64)\n #endif\n \n END (MEMSET)\n\ncommit 41eb2f8b5847079caca90a74659456adbb80ec29\nAuthor: Wilco Dijkstra <wilco.dijkstra@arm.com>\nDate:   Mon Nov 25 18:43:08 2024 +0000\n\n    AArch64: Remove zva_128 from memset\n    \n    Remove ZVA 128 support from memset - the new memset no longer\n    guarantees count >= 256, which can result in underflow and a\n    crash if ZVA size is 128 ([1]).  Since only one CPU uses a ZVA\n    size of 128 and its memcpy implementation was removed in commit\n    e162ab2bf1b82c40f29e1925986582fa07568ce8, remove this special\n    case too.\n    \n    [1] https://sourceware.org/pipermail/libc-alpha/2024-November/161626.html\n    \n    Reviewed-by: Andrew Pinski <quic_apinski@quicinc.com>\n    (cherry picked from commit a08d9a52f967531a77e1824c23b5368c6434a72d)\n\ndiff --git a/sysdeps/aarch64/memset.S b/sysdeps/aarch64/memset.S\nindex caafb019e2..71814d0b2f 100644\n--- a/sysdeps/aarch64/memset.S\n+++ b/sysdeps/aarch64/memset.S\n@@ -104,7 +104,7 @@ L(set_long):\n \tmrs\tzva_val, dczid_el0\n \tand\tzva_val, zva_val, 31\n \tcmp\tzva_val, 4\t\t/* ZVA size is 64 bytes.  */\n-\tb.ne\tL(zva_128)\n+\tb.ne\tL(no_zva)\n #endif\n \tstp\tq0, q0, [dst, 32]\n \tbic\tdst, dstin, 63\n@@ -137,28 +137,5 @@ L(no_zva_loop):\n \tstp\tq0, q0, [dstend, -32]\n \tret\n \n-#ifndef ZVA64_ONLY\n-\t.p2align 4\n-L(zva_128):\n-\tcmp\tzva_val, 5\t\t/* ZVA size is 128 bytes.  */\n-\tb.ne\tL(no_zva)\n-\n-\tstp\tq0, q0, [dst, 32]\n-\tstp\tq0, q0, [dst, 64]\n-\tstp\tq0, q0, [dst, 96]\n-\tbic\tdst, dst, 127\n-\tsub\tcount, dstend, dst\t/* Count is now 128 too large.\t*/\n-\tsub\tcount, count, 128 + 128\t/* Adjust count and bias for loop.  */\n-1:\tadd\tdst, dst, 128\n-\tdc\tzva, dst\n-\tsubs\tcount, count, 128\n-\tb.hi\t1b\n-\tstp\tq0, q0, [dstend, -128]\n-\tstp\tq0, q0, [dstend, -96]\n-\tstp\tq0, q0, [dstend, -64]\n-\tstp\tq0, q0, [dstend, -32]\n-\tret\n-#endif\n-\n END (MEMSET)\n libc_hidden_builtin_def (MEMSET)\n\ncommit 27fa0268ead054810a5e2669d0b5bb88ceb05b05\nAuthor: Wilco Dijkstra <wilco.dijkstra@arm.com>\nDate:   Wed Jul 24 15:17:47 2024 +0100\n\n    math: Improve layout of expf data\n    \n    GCC aligns global data to 16 bytes if their size is >= 16 bytes.  This patch\n    changes the exp2f_data struct slightly so that the fields are better aligned.\n    As a result on targets that support them, load-pair instructions accessing\n    poly_scaled and invln2_scaled are now 16-byte aligned.\n    \n    Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>\n    (cherry picked from commit 44fa9c1080fe6a9539f0d2345b9d2ae37b8ee57a)\n\ndiff --git a/sysdeps/ieee754/flt-32/math_config.h b/sysdeps/ieee754/flt-32/math_config.h\nindex 729f22cd4f..dc07ebd459 100644\n--- a/sysdeps/ieee754/flt-32/math_config.h\n+++ b/sysdeps/ieee754/flt-32/math_config.h\n@@ -166,9 +166,9 @@ extern const struct exp2f_data\n   uint64_t tab[1 << EXP2F_TABLE_BITS];\n   double shift_scaled;\n   double poly[EXP2F_POLY_ORDER];\n-  double shift;\n   double invln2_scaled;\n   double poly_scaled[EXP2F_POLY_ORDER];\n+  double shift;\n } __exp2f_data attribute_hidden;\n \n #define LOGF_TABLE_BITS 4\n\ncommit 7038970f1f485fb660606f0c596f432fdef250f6\nAuthor: Wilco Dijkstra <wilco.dijkstra@arm.com>\nDate:   Tue Dec 24 18:01:59 2024 +0000\n\n    AArch64: Add SVE memset\n    \n    Add SVE memset based on the generic memset with predicated load for sizes < 16.\n    Unaligned memsets of 128-1024 are improved by ~20% on average by using aligned\n    stores for the last 64 bytes.  Performance of random memset benchmark improves\n    by ~2% on Neoverse V1.\n    \n    Reviewed-by: Yury Khrustalev <yury.khrustalev@arm.com>\n    (cherry picked from commit 163b1bbb76caba4d9673c07940c5930a1afa7548)\n\ndiff --git a/sysdeps/aarch64/multiarch/Makefile b/sysdeps/aarch64/multiarch/Makefile\nindex 3e251cc234..6880ebc035 100644\n--- a/sysdeps/aarch64/multiarch/Makefile\n+++ b/sysdeps/aarch64/multiarch/Makefile\n@@ -16,6 +16,7 @@ sysdep_routines += \\\n   memset_kunpeng \\\n   memset_mops \\\n   memset_oryon1 \\\n+  memset_sve_zva64 \\\n   memset_zva64 \\\n   strlen_asimd \\\n   strlen_generic \\\ndiff --git a/sysdeps/aarch64/multiarch/ifunc-impl-list.c b/sysdeps/aarch64/multiarch/ifunc-impl-list.c\nindex b2fda541f9..1f101a719b 100644\n--- a/sysdeps/aarch64/multiarch/ifunc-impl-list.c\n+++ b/sysdeps/aarch64/multiarch/ifunc-impl-list.c\n@@ -61,6 +61,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,\n \t      IFUNC_IMPL_ADD (array, i, memset, 1, __memset_kunpeng)\n #if HAVE_AARCH64_SVE_ASM\n \t      IFUNC_IMPL_ADD (array, i, memset, sve && !bti && zva_size == 256, __memset_a64fx)\n+\t      IFUNC_IMPL_ADD (array, i, memset, sve && zva_size == 64, __memset_sve_zva64)\n #endif\n \t      IFUNC_IMPL_ADD (array, i, memset, mops, __memset_mops)\n \t      IFUNC_IMPL_ADD (array, i, memset, 1, __memset_generic))\ndiff --git a/sysdeps/aarch64/multiarch/memset.c b/sysdeps/aarch64/multiarch/memset.c\nindex bd063c16c9..4f65295e77 100644\n--- a/sysdeps/aarch64/multiarch/memset.c\n+++ b/sysdeps/aarch64/multiarch/memset.c\n@@ -36,6 +36,7 @@ extern __typeof (__redirect_memset) __memset_a64fx attribute_hidden;\n extern __typeof (__redirect_memset) __memset_generic attribute_hidden;\n extern __typeof (__redirect_memset) __memset_mops attribute_hidden;\n extern __typeof (__redirect_memset) __memset_oryon1 attribute_hidden;\n+extern __typeof (__redirect_memset) __memset_sve_zva64 attribute_hidden;\n \n static inline __typeof (__redirect_memset) *\n select_memset_ifunc (void)\n@@ -49,6 +50,9 @@ select_memset_ifunc (void)\n     {\n       if (IS_A64FX (midr) && zva_size == 256)\n \treturn __memset_a64fx;\n+\n+      if (zva_size == 64)\n+\treturn __memset_sve_zva64;\n     }\n \n   if (IS_ORYON1 (midr) && zva_size == 64)\ndiff --git a/sysdeps/aarch64/multiarch/memset_sve_zva64.S b/sysdeps/aarch64/multiarch/memset_sve_zva64.S\nnew file mode 100644\nindex 0000000000..7fb40fdd9e\n--- /dev/null\n+++ b/sysdeps/aarch64/multiarch/memset_sve_zva64.S\n@@ -0,0 +1,123 @@\n+/* Optimized memset for SVE.\n+   Copyright (C) 2025 Free Software Foundation, Inc.\n+\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library.  If not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <sysdep.h>\n+\n+/* Assumptions:\n+ *\n+ * ARMv8-a, AArch64, Advanced SIMD, SVE, unaligned accesses.\n+ * ZVA size is 64.\n+ */\n+\n+#if HAVE_AARCH64_SVE_ASM\n+\n+.arch armv8.2-a+sve\n+\n+#define dstin\tx0\n+#define val\tx1\n+#define valw\tw1\n+#define count\tx2\n+#define dst\tx3\n+#define dstend\tx4\n+#define zva_val\tx5\n+#define vlen\tx5\n+#define off\tx3\n+#define dstend2 x5\n+\n+ENTRY (__memset_sve_zva64)\n+\tdup\tv0.16B, valw\n+\tcmp\tcount, 16\n+\tb.lo\tL(set_16)\n+\n+\tadd\tdstend, dstin, count\n+\tcmp\tcount, 64\n+\tb.hs\tL(set_128)\n+\n+\t/* Set 16..63 bytes.  */\n+\tmov\toff, 16\n+\tand\toff, off, count, lsr 1\n+\tsub\tdstend2, dstend, off\n+\tstr\tq0, [dstin]\n+\tstr\tq0, [dstin, off]\n+\tstr\tq0, [dstend2, -16]\n+\tstr\tq0, [dstend, -16]\n+\tret\n+\n+\t.p2align 4\n+L(set_16):\n+\twhilelo p0.b, xzr, count\n+\tst1b\tz0.b, p0, [dstin]\n+\tret\n+\n+\t.p2align 4\n+L(set_128):\n+\tbic\tdst, dstin, 15\n+\tcmp\tcount, 128\n+\tb.hi\tL(set_long)\n+\tstp\tq0, q0, [dstin]\n+\tstp\tq0, q0, [dstin, 32]\n+\tstp\tq0, q0, [dstend, -64]\n+\tstp\tq0, q0, [dstend, -32]\n+\tret\n+\n+\t.p2align 4\n+L(set_long):\n+\tcmp\tcount, 256\n+\tb.lo\tL(no_zva)\n+\ttst\tvalw, 255\n+\tb.ne\tL(no_zva)\n+\n+\tstr\tq0, [dstin]\n+\tstr\tq0, [dst, 16]\n+\tbic\tdst, dstin, 31\n+\tstp\tq0, q0, [dst, 32]\n+\tbic\tdst, dstin, 63\n+\tsub\tcount, dstend, dst\t/* Count is now 64 too large.  */\n+\tsub\tcount, count, 128\t/* Adjust count and bias for loop.  */\n+\n+\tsub\tx8, dstend, 1\t\t/* Write last bytes before ZVA loop.  */\n+\tbic\tx8, x8, 15\n+\tstp\tq0, q0, [x8, -48]\n+\tstr\tq0, [x8, -16]\n+\tstr\tq0, [dstend, -16]\n+\n+\t.p2align 4\n+L(zva64_loop):\n+\tadd\tdst, dst, 64\n+\tdc\tzva, dst\n+\tsubs\tcount, count, 64\n+\tb.hi\tL(zva64_loop)\n+\tret\n+\n+L(no_zva):\n+\tstr\tq0, [dstin]\n+\tsub\tcount, dstend, dst\t/* Count is 16 too large.  */\n+\tsub\tcount, count, 64 + 16\t/* Adjust count and bias for loop.  */\n+L(no_zva_loop):\n+\tstp\tq0, q0, [dst, 16]\n+\tstp\tq0, q0, [dst, 48]\n+\tadd\tdst, dst, 64\n+\tsubs\tcount, count, 64\n+\tb.hi\tL(no_zva_loop)\n+\tstp\tq0, q0, [dstend, -64]\n+\tstp\tq0, q0, [dstend, -32]\n+\tret\n+\n+END (__memset_sve_zva64)\n+#endif\n\ncommit d6175a44e95fe443d0fbfed37a9ff7424f1e2661\nAuthor: Wilco Dijkstra <wilco.dijkstra@arm.com>\nDate:   Thu Feb 27 16:28:52 2025 +0000\n\n    AArch64: Use prefer_sve_ifuncs for SVE memset\n    \n    Use prefer_sve_ifuncs for SVE memset just like memcpy.\n    \n    Reviewed-by: Yury Khrustalev <yury.khrustalev@arm.com>\n    (cherry picked from commit 0f044be1dae5169d0e57f8d487b427863aeadab4)\n\ndiff --git a/sysdeps/aarch64/multiarch/memset.c b/sysdeps/aarch64/multiarch/memset.c\nindex 4f65295e77..bb1e865c97 100644\n--- a/sysdeps/aarch64/multiarch/memset.c\n+++ b/sysdeps/aarch64/multiarch/memset.c\n@@ -51,7 +51,7 @@ select_memset_ifunc (void)\n       if (IS_A64FX (midr) && zva_size == 256)\n \treturn __memset_a64fx;\n \n-      if (zva_size == 64)\n+      if (prefer_sve_ifuncs && zva_size == 64)\n \treturn __memset_sve_zva64;\n     }\n \n\ncommit d8e8342369831808b00324790c8809ba33408ee7\nAuthor: Wilco Dijkstra <wilco.dijkstra@arm.com>\nDate:   Fri Dec 13 15:43:07 2024 +0000\n\n    math: Improve layout of exp/exp10 data\n    \n    GCC aligns global data to 16 bytes if their size is >= 16 bytes.  This patch\n    changes the exp_data struct slightly so that the fields are better aligned\n    and without gaps.  As a result on targets that support them, more load-pair\n    instructions are used in exp.  Exp10 is improved by moving invlog10_2N later\n    so that neglog10_2hiN and neglog10_2loN can be loaded using load-pair.\n    \n    The exp benchmark improves 2.5%, \"144bits\" by 7.2%, \"768bits\" by 12.7% on\n    Neoverse V2.  Exp10 improves by 1.5%.\n    \n    Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>\n    (cherry picked from commit 5afaf99edb326fd9f36eb306a828d129a3a1d7f7)\n\ndiff --git a/sysdeps/ieee754/dbl-64/math_config.h b/sysdeps/ieee754/dbl-64/math_config.h\nindex ef87cfa6be..05515fd95a 100644\n--- a/sysdeps/ieee754/dbl-64/math_config.h\n+++ b/sysdeps/ieee754/dbl-64/math_config.h\n@@ -195,16 +195,18 @@ check_uflow (double x)\n extern const struct exp_data\n {\n   double invln2N;\n-  double shift;\n   double negln2hiN;\n   double negln2loN;\n   double poly[4]; /* Last four coefficients.  */\n+  double shift;\n+\n   double exp2_shift;\n   double exp2_poly[EXP2_POLY_ORDER];\n-  double invlog10_2N;\n+\n   double neglog10_2hiN;\n   double neglog10_2loN;\n   double exp10_poly[5];\n+  double invlog10_2N;\n   uint64_t tab[2*(1 << EXP_TABLE_BITS)];\n } __exp_data attribute_hidden;\n \n\ncommit 3e820e17a8cef84645d83b67abcbc3f88c7fd268\nAuthor: Michael Jeanson <mjeanson@efficios.com>\nDate:   Fri Feb 14 13:54:22 2025 -0500\n\n    nptl: clear the whole rseq area before registration\n    \n    Due to the extensible nature of the rseq area we can't explictly\n    initialize fields that are not part of the ABI yet. It was agreed with\n    upstream that all new fields will be documented as zero initialized by\n    userspace. Future kernels configured with CONFIG_DEBUG_RSEQ will\n    validate the content of all fields during registration.\n    \n    Replace the explicit field initialization with a memset of the whole\n    rseq area which will cover fields as they are added to future kernels.\n    \n    Signed-off-by: Michael Jeanson <mjeanson@efficios.com>\n    Reviewed-by: Florian Weimer <fweimer@redhat.com>\n    (cherry picked from commit 689a62a4217fae78b9ce0db781dc2a421f2b1ab4)\n\ndiff --git a/sysdeps/nptl/dl-tls_init_tp.c b/sysdeps/nptl/dl-tls_init_tp.c\nindex 7803e19fd1..ed10185e37 100644\n--- a/sysdeps/nptl/dl-tls_init_tp.c\n+++ b/sysdeps/nptl/dl-tls_init_tp.c\n@@ -23,6 +23,7 @@\n #include <tls.h>\n #include <rseq-internal.h>\n #include <thread_pointer.h>\n+#include <dl-symbol-redir-ifunc.h>\n \n #define TUNABLE_NAMESPACE pthread\n #include <dl-tunables.h>\ndiff --git a/sysdeps/unix/sysv/linux/rseq-internal.h b/sysdeps/unix/sysv/linux/rseq-internal.h\nindex ef3eab1fef..76de2b7ff0 100644\n--- a/sysdeps/unix/sysv/linux/rseq-internal.h\n+++ b/sysdeps/unix/sysv/linux/rseq-internal.h\n@@ -52,13 +52,12 @@ rseq_register_current_thread (struct pthread *self, bool do_rseq)\n            but still expected size 32.  */\n         size = RSEQ_AREA_SIZE_INITIAL;\n \n-      /* Initialize the rseq fields that are read by the kernel on\n-         registration, there is no guarantee that struct pthread is\n-         cleared on all architectures.  */\n+      /* Initialize the whole rseq area to zero prior to registration.  */\n+      memset (&self->rseq_area, 0, size);\n+\n+      /* Set the cpu_id field to RSEQ_CPU_ID_UNINITIALIZED, this is checked by\n+         the kernel at registration when CONFIG_DEBUG_RSEQ is enabled.  */\n       THREAD_SETMEM (self, rseq_area.cpu_id, RSEQ_CPU_ID_UNINITIALIZED);\n-      THREAD_SETMEM (self, rseq_area.cpu_id_start, 0);\n-      THREAD_SETMEM (self, rseq_area.rseq_cs, 0);\n-      THREAD_SETMEM (self, rseq_area.flags, 0);\n \n       int ret = INTERNAL_SYSCALL_CALL (rseq, &self->rseq_area,\n                                        size, 0, RSEQ_SIG);\n\ncommit ee1ab9302363066b49cf8862b96664ed35eda81c\nAuthor: Sunil K Pandey <skpgkp2@gmail.com>\nDate:   Mon Mar 10 10:24:07 2025 -0700\n\n    x86_64: Add tanh with FMA\n    \n    On Skylake, it improves tanh bench performance by:\n    \n            Before          After           Improvement\n    max     110.89          95.826          14%\n    min     20.966          20.157          4%\n    mean    30.9601         29.8431         4%\n    \n    Reviewed-by: H.J. Lu <hjl.tools@gmail.com>\n    (cherry picked from commit c6352111c72a20b3588ae304dd99b63e25dd6d85)\n\ndiff --git a/sysdeps/ieee754/dbl-64/s_tanh.c b/sysdeps/ieee754/dbl-64/s_tanh.c\nindex 673a97102d..13063db04e 100644\n--- a/sysdeps/ieee754/dbl-64/s_tanh.c\n+++ b/sysdeps/ieee754/dbl-64/s_tanh.c\n@@ -46,6 +46,11 @@ static char rcsid[] = \"$NetBSD: s_tanh.c,v 1.7 1995/05/10 20:48:22 jtc Exp $\";\n \n static const double one = 1.0, two = 2.0, tiny = 1.0e-300;\n \n+#ifndef SECTION\n+# define SECTION\n+#endif\n+\n+SECTION\n double\n __tanh (double x)\n {\ndiff --git a/sysdeps/x86_64/fpu/multiarch/Makefile b/sysdeps/x86_64/fpu/multiarch/Makefile\nindex cbe09d49f4..0f69f7089c 100644\n--- a/sysdeps/x86_64/fpu/multiarch/Makefile\n+++ b/sysdeps/x86_64/fpu/multiarch/Makefile\n@@ -10,6 +10,7 @@ CFLAGS-s_expm1-fma.c = -mfma -mavx2\n CFLAGS-s_log1p-fma.c = -mfma -mavx2\n CFLAGS-s_sin-fma.c = -mfma -mavx2\n CFLAGS-s_tan-fma.c = -mfma -mavx2\n+CFLAGS-s_tanh-fma.c = -mfma -mavx2\n CFLAGS-s_sincos-fma.c = -mfma -mavx2\n \n CFLAGS-e_exp2f-fma.c = -mfma -mavx2\n@@ -92,6 +93,7 @@ libm-sysdep_routines += \\\n   s_sinf-sse2 \\\n   s_tan-avx \\\n   s_tan-fma \\\n+  s_tanh-fma \\\n   s_trunc-sse4_1 \\\n   s_truncf-sse4_1 \\\n # libm-sysdep_routines\ndiff --git a/sysdeps/x86_64/fpu/multiarch/s_tanh-fma.c b/sysdeps/x86_64/fpu/multiarch/s_tanh-fma.c\nnew file mode 100644\nindex 0000000000..1b808b1227\n--- /dev/null\n+++ b/sysdeps/x86_64/fpu/multiarch/s_tanh-fma.c\n@@ -0,0 +1,11 @@\n+#define __tanh __tanh_fma\n+#define __expm1 __expm1_fma\n+\n+/* NB: __expm1 may be expanded to __expm1_fma in the following\n+   prototypes.  */\n+extern long double __expm1l (long double);\n+extern long double __expm1f128 (long double);\n+\n+#define SECTION __attribute__ ((section (\".text.fma\")))\n+\n+#include <sysdeps/ieee754/dbl-64/s_tanh.c>\ndiff --git a/sysdeps/x86_64/fpu/multiarch/s_tanh.c b/sysdeps/x86_64/fpu/multiarch/s_tanh.c\nnew file mode 100644\nindex 0000000000..5539b6c61c\n--- /dev/null\n+++ b/sysdeps/x86_64/fpu/multiarch/s_tanh.c\n@@ -0,0 +1,31 @@\n+/* Multiple versions of tanh.\n+   Copyright (C) 2025 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <sysdeps/x86/isa-level.h>\n+#if MINIMUM_X86_ISA_LEVEL < AVX2_X86_ISA_LEVEL\n+\n+extern double __redirect_tanh (double);\n+\n+# define SYMBOL_NAME tanh\n+# include \"ifunc-fma.h\"\n+\n+libc_ifunc_redirected (__redirect_tanh, __tanh, IFUNC_SELECTOR ());\n+\n+# define __tanh __tanh_sse2\n+#endif\n+#include <sysdeps/ieee754/dbl-64/s_tanh.c>\n\ncommit e854f6d37cbeabb9130fed74b587befad8b4ba08\nAuthor: Sunil K Pandey <skpgkp2@gmail.com>\nDate:   Sat Mar 8 08:51:10 2025 -0800\n\n    x86_64: Add sinh with FMA\n    \n    On SPR, it improves sinh bench performance by:\n    \n                            Before          After           Improvement\n    reciprocal-throughput   14.2017         11.815          17%\n    latency                 36.4917         35.2114         4%\n    \n    Reviewed-by: H.J. Lu <hjl.tools@gmail.com>\n    (cherry picked from commit dded0d20f67ba1925ccbcb9cf28f0c75febe0dbe)\n\ndiff --git a/benchtests/sinh-inputs b/benchtests/sinh-inputs\nindex 7b1ac46a39..2fcb2fabf8 100644\n--- a/benchtests/sinh-inputs\n+++ b/benchtests/sinh-inputs\n@@ -1,6 +1,7 @@\n ## args: double\n ## ret: double\n ## includes: math.h\n+## name: workload-random\n 0x1.bcb6129b5ff2bp8\n -0x1.63057386325ebp9\n 0x1.62f1d7dc4e8bfp9\ndiff --git a/sysdeps/ieee754/dbl-64/e_sinh.c b/sysdeps/ieee754/dbl-64/e_sinh.c\nindex b4b5857ddd..3f787967f9 100644\n--- a/sysdeps/ieee754/dbl-64/e_sinh.c\n+++ b/sysdeps/ieee754/dbl-64/e_sinh.c\n@@ -41,6 +41,11 @@ static char rcsid[] = \"$NetBSD: e_sinh.c,v 1.7 1995/05/10 20:46:13 jtc Exp $\";\n \n static const double one = 1.0, shuge = 1.0e307;\n \n+#ifndef SECTION\n+# define SECTION\n+#endif\n+\n+SECTION\n double\n __ieee754_sinh (double x)\n {\n@@ -90,4 +95,7 @@ __ieee754_sinh (double x)\n   /* |x| > overflowthresold, sinh(x) overflow */\n   return math_narrow_eval (x * shuge);\n }\n+\n+#ifndef __ieee754_sinh\n libm_alias_finite (__ieee754_sinh, __sinh)\n+#endif\ndiff --git a/sysdeps/x86_64/fpu/multiarch/Makefile b/sysdeps/x86_64/fpu/multiarch/Makefile\nindex 0f69f7089c..b527cab8d1 100644\n--- a/sysdeps/x86_64/fpu/multiarch/Makefile\n+++ b/sysdeps/x86_64/fpu/multiarch/Makefile\n@@ -5,6 +5,7 @@ CFLAGS-e_exp-fma.c = -mfma -mavx2\n CFLAGS-e_log-fma.c = -mfma -mavx2\n CFLAGS-e_log2-fma.c = -mfma -mavx2\n CFLAGS-e_pow-fma.c = -mfma -mavx2\n+CFLAGS-e_sinh-fma.c = -mfma -mavx2\n CFLAGS-s_atan-fma.c = -mfma -mavx2\n CFLAGS-s_expm1-fma.c = -mfma -mavx2\n CFLAGS-s_log1p-fma.c = -mfma -mavx2\n@@ -67,6 +68,7 @@ libm-sysdep_routines += \\\n   e_logf-fma \\\n   e_pow-fma \\\n   e_powf-fma \\\n+  e_sinh-fma \\\n   s_atan-avx \\\n   s_atan-fma \\\n   s_ceil-sse4_1 \\\ndiff --git a/sysdeps/x86_64/fpu/multiarch/e_sinh-fma.c b/sysdeps/x86_64/fpu/multiarch/e_sinh-fma.c\nnew file mode 100644\nindex 0000000000..e0e1e39a7a\n--- /dev/null\n+++ b/sysdeps/x86_64/fpu/multiarch/e_sinh-fma.c\n@@ -0,0 +1,12 @@\n+#define __ieee754_sinh __ieee754_sinh_fma\n+#define __ieee754_exp __ieee754_exp_fma\n+#define __expm1 __expm1_fma\n+\n+/* NB: __expm1 may be expanded to __expm1_fma in the following\n+   prototypes.  */\n+extern long double __expm1l (long double);\n+extern long double __expm1f128 (long double);\n+\n+#define SECTION __attribute__ ((section (\".text.fma\")))\n+\n+#include <sysdeps/ieee754/dbl-64/e_sinh.c>\ndiff --git a/sysdeps/x86_64/fpu/multiarch/e_sinh.c b/sysdeps/x86_64/fpu/multiarch/e_sinh.c\nnew file mode 100644\nindex 0000000000..3d3c18ccdf\n--- /dev/null\n+++ b/sysdeps/x86_64/fpu/multiarch/e_sinh.c\n@@ -0,0 +1,35 @@\n+/* Multiple versions of sinh.\n+   Copyright (C) 2025 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <sysdeps/x86/isa-level.h>\n+#if MINIMUM_X86_ISA_LEVEL < AVX2_X86_ISA_LEVEL\n+# include <libm-alias-finite.h>\n+\n+extern double __redirect_ieee754_sinh (double);\n+\n+# define SYMBOL_NAME ieee754_sinh\n+# include \"ifunc-fma.h\"\n+\n+libc_ifunc_redirected (__redirect_ieee754_sinh, __ieee754_sinh,\n+\t\t       IFUNC_SELECTOR ());\n+\n+libm_alias_finite (__ieee754_sinh, __sinh)\n+\n+# define __ieee754_sinh __ieee754_sinh_sse2\n+#endif\n+#include <sysdeps/ieee754/dbl-64/e_sinh.c>\n\ncommit e5f5dfdda28def8362896bdb1748bb27dfc8be73\nAuthor: Sunil K Pandey <skpgkp2@gmail.com>\nDate:   Wed Mar 5 16:13:38 2025 -0800\n\n    x86_64: Add atanh with FMA\n    \n    On SPR, it improves atanh bench performance by:\n    \n                            Before          After           Improvement\n    reciprocal-throughput   15.1715         14.8628         2%\n    latency                 57.1941         56.1883         2%\n    \n    Reviewed-by: H.J. Lu <hjl.tools@gmail.com>\n    (cherry picked from commit c7c4a5906f326f1290b1c2413a83c530564ec4b8)\n\ndiff --git a/benchtests/atanh-inputs b/benchtests/atanh-inputs\nindex 455aa65b65..4985293254 100644\n--- a/benchtests/atanh-inputs\n+++ b/benchtests/atanh-inputs\n@@ -1,6 +1,7 @@\n ## args: double\n ## ret: double\n ## includes: math.h\n+## name: workload-random\n 0x1.5a2730bacd94ap-1\n -0x1.b57eb40fc048ep-21\n -0x1.c0b185fb450e2p-17\ndiff --git a/sysdeps/ieee754/dbl-64/e_atanh.c b/sysdeps/ieee754/dbl-64/e_atanh.c\nindex 11a2a45799..05ac0a1b30 100644\n--- a/sysdeps/ieee754/dbl-64/e_atanh.c\n+++ b/sysdeps/ieee754/dbl-64/e_atanh.c\n@@ -44,6 +44,11 @@\n \n static const double huge = 1e300;\n \n+#ifndef SECTION\n+# define SECTION\n+#endif\n+\n+SECTION\n double\n __ieee754_atanh (double x)\n {\n@@ -73,4 +78,7 @@ __ieee754_atanh (double x)\n \n   return copysign (t, x);\n }\n+\n+#ifndef __ieee754_atanh\n libm_alias_finite (__ieee754_atanh, __atanh)\n+#endif\ndiff --git a/sysdeps/x86_64/fpu/multiarch/Makefile b/sysdeps/x86_64/fpu/multiarch/Makefile\nindex b527cab8d1..bc479b42d2 100644\n--- a/sysdeps/x86_64/fpu/multiarch/Makefile\n+++ b/sysdeps/x86_64/fpu/multiarch/Makefile\n@@ -1,6 +1,7 @@\n ifeq ($(subdir),math)\n CFLAGS-e_asin-fma.c = -mfma -mavx2\n CFLAGS-e_atan2-fma.c = -mfma -mavx2\n+CFLAGS-e_atanh-fma.c = -mfma -mavx2\n CFLAGS-e_exp-fma.c = -mfma -mavx2\n CFLAGS-e_log-fma.c = -mfma -mavx2\n CFLAGS-e_log2-fma.c = -mfma -mavx2\n@@ -57,6 +58,7 @@ libm-sysdep_routines += \\\n   e_asin-fma \\\n   e_atan2-avx \\\n   e_atan2-fma \\\n+  e_atanh-fma \\\n   e_exp-avx \\\n   e_exp-fma \\\n   e_exp2f-fma \\\ndiff --git a/sysdeps/x86_64/fpu/multiarch/e_atanh-fma.c b/sysdeps/x86_64/fpu/multiarch/e_atanh-fma.c\nnew file mode 100644\nindex 0000000000..c3f2f9e550\n--- /dev/null\n+++ b/sysdeps/x86_64/fpu/multiarch/e_atanh-fma.c\n@@ -0,0 +1,6 @@\n+#define __ieee754_atanh __ieee754_atanh_fma\n+#define __log1p __log1p_fma\n+\n+#define SECTION __attribute__ ((section (\".text.fma\")))\n+\n+#include <sysdeps/ieee754/dbl-64/e_atanh.c>\ndiff --git a/sysdeps/x86_64/fpu/multiarch/e_atanh.c b/sysdeps/x86_64/fpu/multiarch/e_atanh.c\nnew file mode 100644\nindex 0000000000..d2b785dfc0\n--- /dev/null\n+++ b/sysdeps/x86_64/fpu/multiarch/e_atanh.c\n@@ -0,0 +1,34 @@\n+/* Multiple versions of atanh.\n+   Copyright (C) 2025 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <sysdeps/x86/isa-level.h>\n+#if MINIMUM_X86_ISA_LEVEL < AVX2_X86_ISA_LEVEL\n+# include <libm-alias-finite.h>\n+\n+extern double __redirect_ieee754_atanh (double);\n+\n+# define SYMBOL_NAME ieee754_atanh\n+# include \"ifunc-fma.h\"\n+\n+libc_ifunc_redirected (__redirect_ieee754_atanh, __ieee754_atanh, IFUNC_SELECTOR ());\n+\n+libm_alias_finite (__ieee754_atanh, __atanh)\n+\n+# define __ieee754_atanh __ieee754_atanh_sse2\n+#endif\n+#include <sysdeps/ieee754/dbl-64/e_atanh.c>\n\ncommit 8fc492bb4234edc1a5e8c3b7f76ba345ea7109ec\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Fri Mar 28 09:26:06 2025 +0100\n\n    x86: Skip XSAVE state size reset if ISA level requires XSAVE\n    \n    If we have to use XSAVE or XSAVEC trampolines, do not adjust the size\n    information they need.  Technically, it is an operator error to try to\n    run with -XSAVE,-XSAVEC on such builds, but this change here disables\n    some unnecessary code with higher ISA levels and simplifies testing.\n    \n    Related to commit befe2d3c4dec8be2cdd01a47132e47bdb7020922\n    (\"x86-64: Don't use SSE resolvers for ISA level 3 or above\").\n    \n    Reviewed-by: H.J. Lu <hjl.tools@gmail.com>\n    (cherry picked from commit 59585ddaa2d44f22af04bb4b8bd4ad1e302c4c02)\n\ndiff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c\nindex c096dd390a..b5b264db7f 100644\n--- a/sysdeps/x86/cpu-features.c\n+++ b/sysdeps/x86/cpu-features.c\n@@ -24,6 +24,7 @@\n #include <dl-cacheinfo.h>\n #include <dl-minsigstacksize.h>\n #include <dl-hwcap2.h>\n+#include <gcc-macros.h>\n \n extern void TUNABLE_CALLBACK (set_hwcaps) (tunable_val_t *)\n   attribute_hidden;\n@@ -1119,6 +1120,9 @@ no_cpuid:\n \t       TUNABLE_CALLBACK (set_prefer_map_32bit_exec));\n #endif\n \n+  /* Do not add the logic to disable XSAVE/XSAVEC if this glibc build\n+     requires AVX and therefore XSAVE or XSAVEC support.  */\n+#ifndef GCCMACRO__AVX__\n   bool disable_xsave_features = false;\n \n   if (!CPU_FEATURE_USABLE_P (cpu_features, OSXSAVE))\n@@ -1172,6 +1176,7 @@ no_cpuid:\n \n       CPU_FEATURE_UNSET (cpu_features, FMA4);\n     }\n+#endif\n \n #ifdef __x86_64__\n   GLRO(dl_hwcap) = HWCAP_X86_64;\n\ncommit df22af58f66e6815c054b1c56249356c2994935a\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Fri Mar 28 09:26:59 2025 +0100\n\n    x86: Use separate variable for TLSDESC XSAVE/XSAVEC state size (bug 32810)\n    \n    Previously, the initialization code reused the xsave_state_full_size\n    member of struct cpu_features for the TLSDESC state size.  However,\n    the tunable processing code assumes that this member has the\n    original XSAVE (non-compact) state size, so that it can use its\n    value if XSAVEC is disabled via tunable.\n    \n    This change uses a separate variable and not a struct member because\n    the value is only needed in ld.so and the static libc, but not in\n    libc.so.  As a result, struct cpu_features layout does not change,\n    helping a future backport of this change.\n    \n    Fixes commit 9b7091415af47082664717210ac49d51551456ab (\"x86-64:\n    Update _dl_tlsdesc_dynamic to preserve AMX registers\").\n    \n    Reviewed-by: H.J. Lu <hjl.tools@gmail.com>\n    (cherry picked from commit 145097dff170507fe73190e8e41194f5b5f7e6bf)\n\ndiff --git a/NEWS b/NEWS\nindex 57feba81cd..7a6985f5dd 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -22,6 +22,7 @@ The following bugs are resolved with this release:\n   [32231] elf: Change ldconfig auxcache magic number\n   [32245] glibc -Wstringop-overflow= build failure on hppa\n   [32470] x86: Avoid integer truncation with large cache sizes\n+  [32810] Crash on x86-64 if XSAVEC disable via tunable\n \f\n Version 2.40\n \ndiff --git a/sysdeps/x86/Makefile b/sysdeps/x86/Makefile\nindex 5311b594af..8819fba1b7 100644\n--- a/sysdeps/x86/Makefile\n+++ b/sysdeps/x86/Makefile\n@@ -21,6 +21,9 @@ tests += \\\n   tst-cpu-features-supports-static \\\n   tst-get-cpu-features \\\n   tst-get-cpu-features-static \\\n+  tst-gnu2-tls2-x86-noxsave \\\n+  tst-gnu2-tls2-x86-noxsavec \\\n+  tst-gnu2-tls2-x86-noxsavexsavec \\\n   tst-hwcap-tunables \\\n # tests\n tests-static += \\\n@@ -91,6 +94,22 @@ CFLAGS-tst-gnu2-tls2.c += -msse\n CFLAGS-tst-gnu2-tls2mod0.c += -msse2 -mtune=haswell\n CFLAGS-tst-gnu2-tls2mod1.c += -msse2 -mtune=haswell\n CFLAGS-tst-gnu2-tls2mod2.c += -msse2 -mtune=haswell\n+\n+LDFLAGS-tst-gnu2-tls2-x86-noxsave += -Wl,-z,lazy\n+LDFLAGS-tst-gnu2-tls2-x86-noxsavec += -Wl,-z,lazy\n+LDFLAGS-tst-gnu2-tls2-x86-noxsavexsavec += -Wl,-z,lazy\n+\n+# Test for bug 32810: incorrect XSAVE state size if XSAVEC is disabled\n+# via tunable.\n+tst-gnu2-tls2-x86-noxsave-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-XSAVE\n+tst-gnu2-tls2-x86-noxsavec-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-XSAVEC\n+tst-gnu2-tls2-x86-noxsavexsavec-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-XSAVE,-XSAVEC\n+$(objpfx)tst-gnu2-tls2-x86-noxsave.out \\\n+$(objpfx)tst-gnu2-tls2-x86-noxsavec.out \\\n+$(objpfx)tst-gnu2-tls2-x86-noxsavexsavec.out: \\\n+  $(objpfx)tst-gnu2-tls2mod0.so \\\n+  $(objpfx)tst-gnu2-tls2mod1.so \\\n+  $(objpfx)tst-gnu2-tls2mod2.so\n endif\n \n ifeq ($(subdir),math)\ndiff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c\nindex b5b264db7f..ec27337337 100644\n--- a/sysdeps/x86/cpu-features.c\n+++ b/sysdeps/x86/cpu-features.c\n@@ -84,6 +84,8 @@ extern void TUNABLE_CALLBACK (set_x86_shstk) (tunable_val_t *)\n # include <dl-cet.h>\n #endif\n \n+unsigned long int _dl_x86_features_tlsdesc_state_size;\n+\n static void\n update_active (struct cpu_features *cpu_features)\n {\n@@ -318,6 +320,7 @@ update_active (struct cpu_features *cpu_features)\n \t\t= xsave_state_full_size;\n \t      cpu_features->xsave_state_full_size\n \t\t= xsave_state_full_size;\n+\t      _dl_x86_features_tlsdesc_state_size = xsave_state_full_size;\n \n \t      /* Check if XSAVEC is available.  */\n \t      if (CPU_FEATURES_CPU_P (cpu_features, XSAVEC))\n@@ -406,11 +409,9 @@ update_active (struct cpu_features *cpu_features)\n \t\t\t= ALIGN_UP ((amx_size\n \t\t\t\t     + TLSDESC_CALL_REGISTER_SAVE_AREA),\n \t\t\t\t    64);\n-\t\t      /* Set xsave_state_full_size to the compact AMX\n-\t\t\t state size for XSAVEC.  NB: xsave_state_full_size\n-\t\t\t is only used in _dl_tlsdesc_dynamic_xsave and\n-\t\t\t _dl_tlsdesc_dynamic_xsavec.  */\n-\t\t      cpu_features->xsave_state_full_size = amx_size;\n+\t\t      /* Set TLSDESC state size to the compact AMX\n+\t\t\t state size for XSAVEC.  */\n+\t\t      _dl_x86_features_tlsdesc_state_size = amx_size;\n #endif\n \t\t      cpu_features->xsave_state_size\n \t\t\t= ALIGN_UP (size + TLSDESC_CALL_REGISTER_SAVE_AREA,\ndiff --git a/sysdeps/x86/cpu-tunables.c b/sysdeps/x86/cpu-tunables.c\nindex ccc6b64dc2..a0b31d80f6 100644\n--- a/sysdeps/x86/cpu-tunables.c\n+++ b/sysdeps/x86/cpu-tunables.c\n@@ -164,6 +164,8 @@ TUNABLE_CALLBACK (set_hwcaps) (tunable_val_t *valp)\n \t\t  /* Update xsave_state_size to XSAVE state size.  */\n \t\t  cpu_features->xsave_state_size\n \t\t    = cpu_features->xsave_state_full_size;\n+\t\t  _dl_x86_features_tlsdesc_state_size\n+\t\t    = cpu_features->xsave_state_full_size;\n \t\t  CPU_FEATURE_UNSET (cpu_features, XSAVEC);\n \t\t}\n \t    }\ndiff --git a/sysdeps/x86/dl-diagnostics-cpu.c b/sysdeps/x86/dl-diagnostics-cpu.c\nindex 49eeb5f70a..41100a908a 100644\n--- a/sysdeps/x86/dl-diagnostics-cpu.c\n+++ b/sysdeps/x86/dl-diagnostics-cpu.c\n@@ -89,6 +89,8 @@ _dl_diagnostics_cpu (void)\n                             cpu_features->xsave_state_size);\n   print_cpu_features_value (\"xsave_state_full_size\",\n                             cpu_features->xsave_state_full_size);\n+  print_cpu_features_value (\"tlsdesc_state_full_size\",\n+                            _dl_x86_features_tlsdesc_state_size);\n   print_cpu_features_value (\"data_cache_size\", cpu_features->data_cache_size);\n   print_cpu_features_value (\"shared_cache_size\",\n                             cpu_features->shared_cache_size);\ndiff --git a/sysdeps/x86/include/cpu-features.h b/sysdeps/x86/include/cpu-features.h\nindex aaae44f0e1..03c71387dd 100644\n--- a/sysdeps/x86/include/cpu-features.h\n+++ b/sysdeps/x86/include/cpu-features.h\n@@ -934,8 +934,6 @@ struct cpu_features\n   /* The full state size for XSAVE when XSAVEC is disabled by\n \n      GLIBC_TUNABLES=glibc.cpu.hwcaps=-XSAVEC\n-\n-     and the AMX state size when XSAVEC is available.\n    */\n   unsigned int xsave_state_full_size;\n   /* Data cache size for use in memory and string routines, typically\n@@ -989,6 +987,13 @@ extern const struct cpu_features *_dl_x86_get_cpu_features (void)\n \n #define __get_cpu_features() _dl_x86_get_cpu_features()\n \n+#if IS_IN (rtld) || IS_IN (libc)\n+/* XSAVE/XSAVEC state size used by TLS descriptors.  Compared to\n+   xsave_state_size from struct cpu_features, this includes additional\n+   registers.  */\n+extern unsigned long int _dl_x86_features_tlsdesc_state_size attribute_hidden;\n+#endif\n+\n #if defined (_LIBC) && !IS_IN (nonlib)\n /* Unused for x86.  */\n # define INIT_ARCH()\ndiff --git a/sysdeps/x86/tst-gnu2-tls2-x86-noxsave.c b/sysdeps/x86/tst-gnu2-tls2-x86-noxsave.c\nnew file mode 100644\nindex 0000000000..f0024c143d\n--- /dev/null\n+++ b/sysdeps/x86/tst-gnu2-tls2-x86-noxsave.c\n@@ -0,0 +1 @@\n+#include <elf/tst-gnu2-tls2.c>\ndiff --git a/sysdeps/x86/tst-gnu2-tls2-x86-noxsavec.c b/sysdeps/x86/tst-gnu2-tls2-x86-noxsavec.c\nnew file mode 100644\nindex 0000000000..f0024c143d\n--- /dev/null\n+++ b/sysdeps/x86/tst-gnu2-tls2-x86-noxsavec.c\n@@ -0,0 +1 @@\n+#include <elf/tst-gnu2-tls2.c>\ndiff --git a/sysdeps/x86/tst-gnu2-tls2-x86-noxsavexsavec.c b/sysdeps/x86/tst-gnu2-tls2-x86-noxsavexsavec.c\nnew file mode 100644\nindex 0000000000..f0024c143d\n--- /dev/null\n+++ b/sysdeps/x86/tst-gnu2-tls2-x86-noxsavexsavec.c\n@@ -0,0 +1 @@\n+#include <elf/tst-gnu2-tls2.c>\ndiff --git a/sysdeps/x86_64/dl-tlsdesc-dynamic.h b/sysdeps/x86_64/dl-tlsdesc-dynamic.h\nindex 9f02cfc3eb..44d948696f 100644\n--- a/sysdeps/x86_64/dl-tlsdesc-dynamic.h\n+++ b/sysdeps/x86_64/dl-tlsdesc-dynamic.h\n@@ -99,7 +99,7 @@ _dl_tlsdesc_dynamic:\n # endif\n #else\n \t/* Allocate stack space of the required size to save the state.  */\n-\tsub\t_rtld_local_ro+RTLD_GLOBAL_RO_DL_X86_CPU_FEATURES_OFFSET+XSAVE_STATE_FULL_SIZE_OFFSET(%rip), %RSP_LP\n+\tsub\t_dl_x86_features_tlsdesc_state_size(%rip), %RSP_LP\n #endif\n \t/* Besides rdi and rsi, saved above, save rcx, rdx, r8, r9,\n \t   r10 and r11.  */\n\ncommit a87d9a2c2cc17a3b22fd3be8d106336f4dcf2042\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Mon Mar 31 21:33:18 2025 +0200\n\n    x86: Link tst-gnu2-tls2-x86-noxsave{,c,xsavec} with libpthread\n    \n    This fixes a test build failure on Hurd.\n    \n    Fixes commit 145097dff170507fe73190e8e41194f5b5f7e6bf (\"x86: Use separate\n    variable for TLSDESC XSAVE/XSAVEC state size (bug 32810)\").\n    \n    Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>\n    (cherry picked from commit c6e2895695118ab59c7b17feb0fcb75a53e3478c)\n\ndiff --git a/sysdeps/x86/Makefile b/sysdeps/x86/Makefile\nindex 8819fba1b7..01b0192ddf 100644\n--- a/sysdeps/x86/Makefile\n+++ b/sysdeps/x86/Makefile\n@@ -104,6 +104,9 @@ LDFLAGS-tst-gnu2-tls2-x86-noxsavexsavec += -Wl,-z,lazy\n tst-gnu2-tls2-x86-noxsave-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-XSAVE\n tst-gnu2-tls2-x86-noxsavec-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-XSAVEC\n tst-gnu2-tls2-x86-noxsavexsavec-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-XSAVE,-XSAVEC\n+$(objpfx)tst-gnu2-tls2-x86-noxsave: $(shared-thread-library)\n+$(objpfx)tst-gnu2-tls2-x86-noxsavec: $(shared-thread-library)\n+$(objpfx)tst-gnu2-tls2-x86-noxsavexsavec: $(shared-thread-library)\n $(objpfx)tst-gnu2-tls2-x86-noxsave.out \\\n $(objpfx)tst-gnu2-tls2-x86-noxsavec.out \\\n $(objpfx)tst-gnu2-tls2-x86-noxsavexsavec.out: \\\n\ncommit 8fe27af20c8b25b84e12bcd52353862a95044aa2\nAuthor: Noah Goldstein <goldstein.w.n@gmail.com>\nDate:   Wed Aug 14 14:37:30 2024 +0800\n\n    x86: Use `Avoid_Non_Temporal_Memset` to control non-temporal path\n    \n    This is just a refactor and there should be no behavioral change from\n    this commit.\n    \n    The goal is to make `Avoid_Non_Temporal_Memset` a more universal knob\n    for controlling whether we use non-temporal memset rather than having\n    extra logic based on vendor.\n    Reviewed-by: H.J. Lu <hjl.tools@gmail.com>\n    \n    (cherry picked from commit b93dddfaf440aa12f45d7c356f6ffe9f27d35577)\n\ndiff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c\nindex ec27337337..8841020b36 100644\n--- a/sysdeps/x86/cpu-features.c\n+++ b/sysdeps/x86/cpu-features.c\n@@ -758,6 +758,12 @@ init_cpu_features (struct cpu_features *cpu_features)\n   unsigned int stepping = 0;\n   enum cpu_features_kind kind;\n \n+  /* Default is avoid non-temporal memset for non Intel/AMD hardware. This is,\n+     as of writing this, we only have benchmarks indicatings it profitability\n+     on Intel/AMD.  */\n+  cpu_features->preferred[index_arch_Avoid_Non_Temporal_Memset]\n+      |= bit_arch_Avoid_Non_Temporal_Memset;\n+\n   cpu_features->cachesize_non_temporal_divisor = 4;\n #if !HAS_CPUID\n   if (__get_cpuid_max (0, 0) == 0)\n@@ -783,6 +789,11 @@ init_cpu_features (struct cpu_features *cpu_features)\n \n       update_active (cpu_features);\n \n+      /* Benchmarks indicate non-temporal memset can be profitable on Intel\n+\thardware.  */\n+      cpu_features->preferred[index_arch_Avoid_Non_Temporal_Memset]\n+\t  &= ~bit_arch_Avoid_Non_Temporal_Memset;\n+\n       if (family == 0x06)\n \t{\n \t  model += extended_model;\n@@ -993,6 +1004,11 @@ https://www.intel.com/content/www/us/en/support/articles/000059422/processors.ht\n \n       ecx = cpu_features->features[CPUID_INDEX_1].cpuid.ecx;\n \n+      /* Benchmarks indicate non-temporal memset can be profitable on AMD\n+\thardware.  */\n+      cpu_features->preferred[index_arch_Avoid_Non_Temporal_Memset]\n+\t  &= ~bit_arch_Avoid_Non_Temporal_Memset;\n+\n       if (CPU_FEATURE_USABLE_P (cpu_features, AVX))\n \t{\n \t  /* Since the FMA4 bit is in CPUID_INDEX_80000001 and\ndiff --git a/sysdeps/x86/dl-cacheinfo.h b/sysdeps/x86/dl-cacheinfo.h\nindex ac97414b5b..7b1b61c096 100644\n--- a/sysdeps/x86/dl-cacheinfo.h\n+++ b/sysdeps/x86/dl-cacheinfo.h\n@@ -988,14 +988,6 @@ dl_init_cacheinfo (struct cpu_features *cpu_features)\n   if (CPU_FEATURE_USABLE_P (cpu_features, FSRM))\n     rep_movsb_threshold = 2112;\n \n-  /* Non-temporal stores are more performant on Intel and AMD hardware above\n-     non_temporal_threshold. Enable this for both Intel and AMD hardware. */\n-  unsigned long int memset_non_temporal_threshold = SIZE_MAX;\n-  if (!CPU_FEATURES_ARCH_P (cpu_features, Avoid_Non_Temporal_Memset)\n-      && (cpu_features->basic.kind == arch_kind_intel\n-\t  || cpu_features->basic.kind == arch_kind_amd))\n-    memset_non_temporal_threshold = non_temporal_threshold;\n-\n   /* For AMD CPUs that support ERMS (Zen3+), REP MOVSB is in a lot of\n      cases slower than the vectorized path (and for some alignments,\n      it is really slow, check BZ #30994).  */\n@@ -1017,6 +1009,13 @@ dl_init_cacheinfo (struct cpu_features *cpu_features)\n   if (tunable_size != 0)\n     shared = tunable_size;\n \n+  /* Non-temporal stores are more performant on some hardware above\n+     non_temporal_threshold. Currently Prefer_Non_Temporal is set for for both\n+     Intel and AMD hardware. */\n+  unsigned long int memset_non_temporal_threshold = SIZE_MAX;\n+  if (!CPU_FEATURES_ARCH_P (cpu_features, Avoid_Non_Temporal_Memset))\n+    memset_non_temporal_threshold = non_temporal_threshold;\n+\n   tunable_size = TUNABLE_GET (x86_non_temporal_threshold, long int, NULL);\n   if (tunable_size > minimum_non_temporal_threshold\n       && tunable_size <= maximum_non_temporal_threshold)\n\ncommit 7c6bd71b4dbdadab34e4fd21ec09b86b32daf443\nAuthor: Sunil K Pandey <skpgkp2@gmail.com>\nDate:   Thu Apr 3 13:00:45 2025 -0700\n\n    x86: Optimize xstate size calculation\n    \n    Scan xstate IDs up to the maximum supported xstate ID.  Remove the\n    separate AMX xstate calculation.  Instead, exclude the AMX space from\n    the start of TILECFG to the end of TILEDATA in xsave_state_size.\n    \n    Completed validation on SKL/SKX/SPR/SDE and compared xsave state size\n    with \"ld.so --list-diagnostics\" option, no regression.\n    \n    Co-Authored-By: H.J. Lu <hjl.tools@gmail.com>\n    Reviewed-by: Sunil K Pandey <skpgkp2@gmail.com>\n    (cherry picked from commit 70b648855185e967e54668b101d24704c3fb869d)\n\ndiff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c\nindex 8841020b36..1d5e2a0072 100644\n--- a/sysdeps/x86/cpu-features.c\n+++ b/sysdeps/x86/cpu-features.c\n@@ -325,13 +325,8 @@ update_active (struct cpu_features *cpu_features)\n \t      /* Check if XSAVEC is available.  */\n \t      if (CPU_FEATURES_CPU_P (cpu_features, XSAVEC))\n \t\t{\n-\t\t  unsigned int xstate_comp_offsets[32];\n-\t\t  unsigned int xstate_comp_sizes[32];\n-#ifdef __x86_64__\n-\t\t  unsigned int xstate_amx_comp_offsets[32];\n-\t\t  unsigned int xstate_amx_comp_sizes[32];\n-\t\t  unsigned int amx_ecx;\n-#endif\n+\t\t  unsigned int xstate_comp_offsets[X86_XSTATE_MAX_ID + 1];\n+\t\t  unsigned int xstate_comp_sizes[X86_XSTATE_MAX_ID + 1];\n \t\t  unsigned int i;\n \n \t\t  xstate_comp_offsets[0] = 0;\n@@ -339,39 +334,16 @@ update_active (struct cpu_features *cpu_features)\n \t\t  xstate_comp_offsets[2] = 576;\n \t\t  xstate_comp_sizes[0] = 160;\n \t\t  xstate_comp_sizes[1] = 256;\n-#ifdef __x86_64__\n-\t\t  xstate_amx_comp_offsets[0] = 0;\n-\t\t  xstate_amx_comp_offsets[1] = 160;\n-\t\t  xstate_amx_comp_offsets[2] = 576;\n-\t\t  xstate_amx_comp_sizes[0] = 160;\n-\t\t  xstate_amx_comp_sizes[1] = 256;\n-#endif\n \n-\t\t  for (i = 2; i < 32; i++)\n+\t\t  for (i = 2; i <= X86_XSTATE_MAX_ID; i++)\n \t\t    {\n \t\t      if ((FULL_STATE_SAVE_MASK & (1 << i)) != 0)\n \t\t\t{\n \t\t\t  __cpuid_count (0xd, i, eax, ebx, ecx, edx);\n-#ifdef __x86_64__\n-\t\t\t  /* Include this in xsave_state_full_size.  */\n-\t\t\t  amx_ecx = ecx;\n-\t\t\t  xstate_amx_comp_sizes[i] = eax;\n-\t\t\t  if ((AMX_STATE_SAVE_MASK & (1 << i)) != 0)\n-\t\t\t    {\n-\t\t\t      /* Exclude this from xsave_state_size.  */\n-\t\t\t      ecx = 0;\n-\t\t\t      xstate_comp_sizes[i] = 0;\n-\t\t\t    }\n-\t\t\t  else\n-#endif\n-\t\t\t    xstate_comp_sizes[i] = eax;\n+\t\t\t  xstate_comp_sizes[i] = eax;\n \t\t\t}\n \t\t      else\n \t\t\t{\n-#ifdef __x86_64__\n-\t\t\t  amx_ecx = 0;\n-\t\t\t  xstate_amx_comp_sizes[i] = 0;\n-#endif\n \t\t\t  ecx = 0;\n \t\t\t  xstate_comp_sizes[i] = 0;\n \t\t\t}\n@@ -380,42 +352,32 @@ update_active (struct cpu_features *cpu_features)\n \t\t\t{\n \t\t\t  xstate_comp_offsets[i]\n \t\t\t    = (xstate_comp_offsets[i - 1]\n-\t\t\t       + xstate_comp_sizes[i -1]);\n+\t\t\t       + xstate_comp_sizes[i - 1]);\n \t\t\t  if ((ecx & (1 << 1)) != 0)\n \t\t\t    xstate_comp_offsets[i]\n \t\t\t      = ALIGN_UP (xstate_comp_offsets[i], 64);\n-#ifdef __x86_64__\n-\t\t\t  xstate_amx_comp_offsets[i]\n-\t\t\t    = (xstate_amx_comp_offsets[i - 1]\n-\t\t\t       + xstate_amx_comp_sizes[i - 1]);\n-\t\t\t  if ((amx_ecx & (1 << 1)) != 0)\n-\t\t\t    xstate_amx_comp_offsets[i]\n-\t\t\t      = ALIGN_UP (xstate_amx_comp_offsets[i],\n-\t\t\t\t\t  64);\n-#endif\n \t\t\t}\n \t\t    }\n \n \t\t  /* Use XSAVEC.  */\n \t\t  unsigned int size\n-\t\t    = xstate_comp_offsets[31] + xstate_comp_sizes[31];\n+\t\t    = (xstate_comp_offsets[X86_XSTATE_MAX_ID]\n+\t\t       + xstate_comp_sizes[X86_XSTATE_MAX_ID]);\n \t\t  if (size)\n \t\t    {\n+\t\t      size = ALIGN_UP (size + TLSDESC_CALL_REGISTER_SAVE_AREA,\n+\t\t\t\t       64);\n #ifdef __x86_64__\n-\t\t      unsigned int amx_size\n-\t\t\t= (xstate_amx_comp_offsets[31]\n-\t\t\t   + xstate_amx_comp_sizes[31]);\n-\t\t      amx_size\n-\t\t\t= ALIGN_UP ((amx_size\n-\t\t\t\t     + TLSDESC_CALL_REGISTER_SAVE_AREA),\n-\t\t\t\t    64);\n-\t\t      /* Set TLSDESC state size to the compact AMX\n-\t\t\t state size for XSAVEC.  */\n-\t\t      _dl_x86_features_tlsdesc_state_size = amx_size;\n+\t\t      _dl_x86_features_tlsdesc_state_size = size;\n+\t\t      /* Exclude the AMX space from the start of TILECFG\n+\t\t\t space to the end of TILEDATA space.  If CPU\n+\t\t\t doesn't support AMX, TILECFG offset is the same\n+\t\t\t as TILEDATA + 1 offset.  Otherwise, they are\n+\t\t\t multiples of 64.  */\n+\t\t      size -= (xstate_comp_offsets[X86_XSTATE_TILEDATA_ID + 1]\n+\t\t\t       - xstate_comp_offsets[X86_XSTATE_TILECFG_ID]);\n #endif\n-\t\t      cpu_features->xsave_state_size\n-\t\t\t= ALIGN_UP (size + TLSDESC_CALL_REGISTER_SAVE_AREA,\n-\t\t\t\t    64);\n+\t\t      cpu_features->xsave_state_size = size;\n \t\t      CPU_FEATURE_SET (cpu_features, XSAVEC);\n \t\t    }\n \t\t}\ndiff --git a/sysdeps/x86/sysdep.h b/sysdeps/x86/sysdep.h\nindex 7359149e17..1d6cabd816 100644\n--- a/sysdeps/x86/sysdep.h\n+++ b/sysdeps/x86/sysdep.h\n@@ -102,6 +102,9 @@\n    | (1 << X86_XSTATE_ZMM_ID)\t\t\\\n    | (1 << X86_XSTATE_APX_F_ID))\n \n+/* The maximum supported xstate ID.  */\n+# define X86_XSTATE_MAX_ID\tX86_XSTATE_APX_F_ID\n+\n /* AMX state mask.  */\n # define AMX_STATE_SAVE_MASK\t\t\\\n   ((1 << X86_XSTATE_TILECFG_ID) | (1 << X86_XSTATE_TILEDATA_ID))\n@@ -123,6 +126,9 @@\n    | (1 << X86_XSTATE_K_ID)\t\t\\\n    | (1 << X86_XSTATE_ZMM_H_ID))\n \n+/* The maximum supported xstate ID.  */\n+# define X86_XSTATE_MAX_ID\tX86_XSTATE_ZMM_H_ID\n+\n /* States to be included in xsave_state_size.  */\n # define FULL_STATE_SAVE_MASK\t\tSTATE_SAVE_MASK\n #endif\n\ncommit 44f92df8007d57f82b1518e219a0dbb60389ef2c\nAuthor: Sunil K Pandey <skpgkp2@gmail.com>\nDate:   Thu Apr 3 18:14:20 2025 -0700\n\n    x86: Add ARL/PTL/CWF model detection support\n    \n    - Add ARROWLAKE model detection.\n    - Add PANTHERLAKE model detection.\n    - Add CLEARWATERFOREST model detection.\n    \n    Intel® Architecture Instruction Set Extensions Programming Reference\n    https://cdrdv2.intel.com/v1/dl/getContent/671368 Section 1.2.\n    \n    No regression, validated model detection on SDE.\n    \n    Reviewed-by: H.J. Lu <hjl.tools@gmail.com>\n    (cherry picked from commit e53eb952b970ac94c97d74fb447418fb327ca096)\n\ndiff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c\nindex 1d5e2a0072..7f21a8227e 100644\n--- a/sysdeps/x86/cpu-features.c\n+++ b/sysdeps/x86/cpu-features.c\n@@ -512,6 +512,7 @@ enum\n   INTEL_ATOM_GOLDMONT,\n   INTEL_ATOM_GOLDMONT_PLUS,\n   INTEL_ATOM_SIERRAFOREST,\n+  INTEL_ATOM_CLEARWATERFOREST,\n   INTEL_ATOM_GRANDRIDGE,\n   INTEL_ATOM_TREMONT,\n \n@@ -539,6 +540,7 @@ enum\n   INTEL_BIGCORE_METEORLAKE,\n   INTEL_BIGCORE_LUNARLAKE,\n   INTEL_BIGCORE_ARROWLAKE,\n+  INTEL_BIGCORE_PANTHERLAKE,\n   INTEL_BIGCORE_GRANITERAPIDS,\n \n   /* Mixed (bigcore + atom SOC).  */\n@@ -584,6 +586,8 @@ intel_get_fam6_microarch (unsigned int model,\n       return INTEL_ATOM_GOLDMONT_PLUS;\n     case 0xAF:\n       return INTEL_ATOM_SIERRAFOREST;\n+    case 0xDD:\n+      return INTEL_ATOM_CLEARWATERFOREST;\n     case 0xB6:\n       return INTEL_ATOM_GRANDRIDGE;\n     case 0x86:\n@@ -691,8 +695,12 @@ intel_get_fam6_microarch (unsigned int model,\n       return INTEL_BIGCORE_METEORLAKE;\n     case 0xbd:\n       return INTEL_BIGCORE_LUNARLAKE;\n+    case 0xb5:\n+    case 0xc5:\n     case 0xc6:\n       return INTEL_BIGCORE_ARROWLAKE;\n+    case 0xCC:\n+      return INTEL_BIGCORE_PANTHERLAKE;\n     case 0xAD:\n     case 0xAE:\n       return INTEL_BIGCORE_GRANITERAPIDS;\n@@ -808,6 +816,7 @@ init_cpu_features (struct cpu_features *cpu_features)\n \t    Default tuned atom microarch.\n \t    case INTEL_ATOM_SIERRAFOREST:\n \t    case INTEL_ATOM_GRANDRIDGE:\n+\t    case INTEL_ATOM_CLEARWATERFOREST:\n \t   */\n \n \t      /* Bigcore/Default Tuning.  */\n@@ -864,6 +873,7 @@ init_cpu_features (struct cpu_features *cpu_features)\n \t    case INTEL_BIGCORE_METEORLAKE:\n \t    case INTEL_BIGCORE_LUNARLAKE:\n \t    case INTEL_BIGCORE_ARROWLAKE:\n+\t    case INTEL_BIGCORE_PANTHERLAKE:\n \t    case INTEL_BIGCORE_SAPPHIRERAPIDS:\n \t    case INTEL_BIGCORE_EMERALDRAPIDS:\n \t    case INTEL_BIGCORE_GRANITERAPIDS:\n\ncommit 9ee8083c4edbe5e92af7aabb23261309f03ef05c\nAuthor: Sunil K Pandey <sunil.k.pandey@intel.com>\nDate:   Fri Apr 11 08:52:52 2025 -0700\n\n    x86: Handle unknown Intel processor with default tuning\n    \n    Enable default tuning for unknown Intel processor.\n    \n    Tested on x86, no regression.\n    \n    Co-Authored-By: H.J. Lu <hjl.tools@gmail.com>\n    Reviewed-by: H.J. Lu <hjl.tools@gmail.com>\n    (cherry picked from commit 9f0deff558d1d6b08c425c157f50de85013ada9c)\n\ndiff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c\nindex 7f21a8227e..1a6e694abf 100644\n--- a/sysdeps/x86/cpu-features.c\n+++ b/sysdeps/x86/cpu-features.c\n@@ -502,8 +502,8 @@ _Static_assert (((index_arch_Fast_Unaligned_Load\n \t\t\"Incorrect index_arch_Fast_Unaligned_Load\");\n \n \n-/* Intel Family-6 microarch list.  */\n-enum\n+/* Intel microarch list.  */\n+enum intel_microarch\n {\n   /* Atom processors.  */\n   INTEL_ATOM_BONNELL,\n@@ -555,7 +555,7 @@ enum\n   INTEL_UNKNOWN,\n };\n \n-static unsigned int\n+static enum intel_microarch\n intel_get_fam6_microarch (unsigned int model,\n \t\t\t  __attribute__ ((unused)) unsigned int stepping)\n {\n@@ -764,134 +764,20 @@ init_cpu_features (struct cpu_features *cpu_features)\n       cpu_features->preferred[index_arch_Avoid_Non_Temporal_Memset]\n \t  &= ~bit_arch_Avoid_Non_Temporal_Memset;\n \n+      enum intel_microarch microarch = INTEL_UNKNOWN;\n       if (family == 0x06)\n \t{\n \t  model += extended_model;\n-\t  unsigned int microarch\n-\t      = intel_get_fam6_microarch (model, stepping);\n+\t  microarch = intel_get_fam6_microarch (model, stepping);\n \n+\t  /* Disable TSX on some processors to avoid TSX on kernels that\n+\t     weren't updated with the latest microcode package (which\n+\t     disables broken feature by default).  */\n \t  switch (microarch)\n \t    {\n-\t      /* Atom / KNL tuning.  */\n-\t    case INTEL_ATOM_BONNELL:\n-\t      /* BSF is slow on Bonnell.  */\n-\t      cpu_features->preferred[index_arch_Slow_BSF]\n-\t\t  |= bit_arch_Slow_BSF;\n-\t      break;\n-\n-\t      /* Unaligned load versions are faster than SSSE3\n-\t\t     on Airmont, Silvermont, Goldmont, and Goldmont Plus.  */\n-\t    case INTEL_ATOM_AIRMONT:\n-\t    case INTEL_ATOM_SILVERMONT:\n-\t    case INTEL_ATOM_GOLDMONT:\n-\t    case INTEL_ATOM_GOLDMONT_PLUS:\n-\n-          /* Knights Landing.  Enable Silvermont optimizations.  */\n-\t    case INTEL_KNIGHTS_LANDING:\n-\n-\t      cpu_features->preferred[index_arch_Fast_Unaligned_Load]\n-\t\t  |= (bit_arch_Fast_Unaligned_Load\n-\t\t      | bit_arch_Fast_Unaligned_Copy\n-\t\t      | bit_arch_Prefer_PMINUB_for_stringop\n-\t\t      | bit_arch_Slow_SSE4_2);\n-\t      break;\n-\n-\t    case INTEL_ATOM_TREMONT:\n-\t      /* Enable rep string instructions, unaligned load, unaligned\n-\t\t copy, pminub and avoid SSE 4.2 on Tremont.  */\n-\t      cpu_features->preferred[index_arch_Fast_Rep_String]\n-\t\t  |= (bit_arch_Fast_Rep_String\n-\t\t      | bit_arch_Fast_Unaligned_Load\n-\t\t      | bit_arch_Fast_Unaligned_Copy\n-\t\t      | bit_arch_Prefer_PMINUB_for_stringop\n-\t\t      | bit_arch_Slow_SSE4_2);\n-\t      break;\n-\n-\t   /*\n-\t    Default tuned Knights microarch.\n-\t    case INTEL_KNIGHTS_MILL:\n-        */\n-\n-\t   /*\n-\t    Default tuned atom microarch.\n-\t    case INTEL_ATOM_SIERRAFOREST:\n-\t    case INTEL_ATOM_GRANDRIDGE:\n-\t    case INTEL_ATOM_CLEARWATERFOREST:\n-\t   */\n-\n-\t      /* Bigcore/Default Tuning.  */\n \t    default:\n-\t    default_tuning:\n-\t      /* Unknown family 0x06 processors.  Assuming this is one\n-\t\t of Core i3/i5/i7 processors if AVX is available.  */\n-\t      if (!CPU_FEATURES_CPU_P (cpu_features, AVX))\n-\t\tbreak;\n-\n-\t    enable_modern_features:\n-\t      /* Rep string instructions, unaligned load, unaligned copy,\n-\t\t and pminub are fast on Intel Core i3, i5 and i7.  */\n-\t      cpu_features->preferred[index_arch_Fast_Rep_String]\n-\t\t  |= (bit_arch_Fast_Rep_String\n-\t\t      | bit_arch_Fast_Unaligned_Load\n-\t\t      | bit_arch_Fast_Unaligned_Copy\n-\t\t      | bit_arch_Prefer_PMINUB_for_stringop);\n \t      break;\n \n-\t    case INTEL_BIGCORE_NEHALEM:\n-\t    case INTEL_BIGCORE_WESTMERE:\n-\t      /* Older CPUs prefer non-temporal stores at lower threshold.  */\n-\t      cpu_features->cachesize_non_temporal_divisor = 8;\n-\t      goto enable_modern_features;\n-\n-\t      /* Older Bigcore microarch (smaller non-temporal store\n-\t\t threshold).  */\n-\t    case INTEL_BIGCORE_SANDYBRIDGE:\n-\t    case INTEL_BIGCORE_IVYBRIDGE:\n-\t    case INTEL_BIGCORE_HASWELL:\n-\t    case INTEL_BIGCORE_BROADWELL:\n-\t      cpu_features->cachesize_non_temporal_divisor = 8;\n-\t      goto default_tuning;\n-\n-\t      /* Newer Bigcore microarch (larger non-temporal store\n-\t\t threshold).  */\n-\t    case INTEL_BIGCORE_SKYLAKE_AVX512:\n-\t    case INTEL_BIGCORE_CANNONLAKE:\n-\t      /* Benchmarks indicate non-temporal memset is not\n-\t\t     necessarily profitable on SKX (and in some cases much\n-\t\t     worse). This is likely unique to SKX due its it unique\n-\t\t     mesh interconnect (not present on ICX or BWD). Disable\n-\t\t     non-temporal on all Skylake servers. */\n-\t      cpu_features->preferred[index_arch_Avoid_Non_Temporal_Memset]\n-\t\t  |= bit_arch_Avoid_Non_Temporal_Memset;\n-\t    case INTEL_BIGCORE_COMETLAKE:\n-\t    case INTEL_BIGCORE_SKYLAKE:\n-\t    case INTEL_BIGCORE_KABYLAKE:\n-\t    case INTEL_BIGCORE_ICELAKE:\n-\t    case INTEL_BIGCORE_TIGERLAKE:\n-\t    case INTEL_BIGCORE_ROCKETLAKE:\n-\t    case INTEL_BIGCORE_RAPTORLAKE:\n-\t    case INTEL_BIGCORE_METEORLAKE:\n-\t    case INTEL_BIGCORE_LUNARLAKE:\n-\t    case INTEL_BIGCORE_ARROWLAKE:\n-\t    case INTEL_BIGCORE_PANTHERLAKE:\n-\t    case INTEL_BIGCORE_SAPPHIRERAPIDS:\n-\t    case INTEL_BIGCORE_EMERALDRAPIDS:\n-\t    case INTEL_BIGCORE_GRANITERAPIDS:\n-\t      cpu_features->cachesize_non_temporal_divisor = 2;\n-\t      goto default_tuning;\n-\n-\t      /* Default tuned Mixed (bigcore + atom SOC). */\n-\t    case INTEL_MIXED_LAKEFIELD:\n-\t    case INTEL_MIXED_ALDERLAKE:\n-\t      cpu_features->cachesize_non_temporal_divisor = 2;\n-\t      goto default_tuning;\n-\t    }\n-\n-\t      /* Disable TSX on some processors to avoid TSX on kernels that\n-\t\t weren't updated with the latest microcode package (which\n-\t\t disables broken feature by default).  */\n-\t  switch (microarch)\n-\t    {\n \t    case INTEL_BIGCORE_SKYLAKE_AVX512:\n \t      /* 0x55 (Skylake-avx512) && stepping <= 5 disable TSX. */\n \t      if (stepping <= 5)\n@@ -900,38 +786,152 @@ init_cpu_features (struct cpu_features *cpu_features)\n \n \t    case INTEL_BIGCORE_KABYLAKE:\n \t      /* NB: Although the errata documents that for model == 0x8e\n-\t\t     (kabylake skylake client), only 0xb stepping or lower are\n-\t\t     impacted, the intention of the errata was to disable TSX on\n-\t\t     all client processors on all steppings.  Include 0xc\n-\t\t     stepping which is an Intel Core i7-8665U, a client mobile\n-\t\t     processor.  */\n+\t\t (kabylake skylake client), only 0xb stepping or lower are\n+\t\t impacted, the intention of the errata was to disable TSX on\n+\t\t all client processors on all steppings.  Include 0xc\n+\t\t stepping which is an Intel Core i7-8665U, a client mobile\n+\t\t processor.  */\n \t      if (stepping > 0xc)\n \t\tbreak;\n \t      /* Fall through.  */\n \t    case INTEL_BIGCORE_SKYLAKE:\n-\t\t/* Disable Intel TSX and enable RTM_ALWAYS_ABORT for\n-\t\t   processors listed in:\n-\n-https://www.intel.com/content/www/us/en/support/articles/000059422/processors.html\n-\t\t */\n-\t    disable_tsx:\n-\t\tCPU_FEATURE_UNSET (cpu_features, HLE);\n-\t\tCPU_FEATURE_UNSET (cpu_features, RTM);\n-\t\tCPU_FEATURE_SET (cpu_features, RTM_ALWAYS_ABORT);\n-\t\tbreak;\n+\t      /* Disable Intel TSX and enable RTM_ALWAYS_ABORT for\n+\t\t processors listed in:\n+\n+\t\t https://www.intel.com/content/www/us/en/support/articles/000059422/processors.html\n+\t       */\n+disable_tsx:\n+\t      CPU_FEATURE_UNSET (cpu_features, HLE);\n+\t      CPU_FEATURE_UNSET (cpu_features, RTM);\n+\t      CPU_FEATURE_SET (cpu_features, RTM_ALWAYS_ABORT);\n+\t      break;\n \n \t    case INTEL_BIGCORE_HASWELL:\n-\t\t/* Xeon E7 v3 (model == 0x3f) with stepping >= 4 has working\n-\t\t   TSX.  Haswell also include other model numbers that have\n-\t\t   working TSX.  */\n-\t\tif (model == 0x3f && stepping >= 4)\n+\t      /* Xeon E7 v3 (model == 0x3f) with stepping >= 4 has working\n+\t\t TSX.  Haswell also includes other model numbers that have\n+\t\t working TSX.  */\n+\t      if (model == 0x3f && stepping >= 4)\n \t\tbreak;\n \n-\t\tCPU_FEATURE_UNSET (cpu_features, RTM);\n-\t\tbreak;\n+\t      CPU_FEATURE_UNSET (cpu_features, RTM);\n+\t      break;\n \t    }\n \t}\n \n+      switch (microarch)\n+\t{\n+\t  /* Atom / KNL tuning.  */\n+\tcase INTEL_ATOM_BONNELL:\n+\t  /* BSF is slow on Bonnell.  */\n+\t  cpu_features->preferred[index_arch_Slow_BSF]\n+\t    |= bit_arch_Slow_BSF;\n+\t  break;\n+\n+\t  /* Unaligned load versions are faster than SSSE3\n+\t     on Airmont, Silvermont, Goldmont, and Goldmont Plus.  */\n+\tcase INTEL_ATOM_AIRMONT:\n+\tcase INTEL_ATOM_SILVERMONT:\n+\tcase INTEL_ATOM_GOLDMONT:\n+\tcase INTEL_ATOM_GOLDMONT_PLUS:\n+\n+\t  /* Knights Landing.  Enable Silvermont optimizations.  */\n+\tcase INTEL_KNIGHTS_LANDING:\n+\n+\t  cpu_features->preferred[index_arch_Fast_Unaligned_Load]\n+\t    |= (bit_arch_Fast_Unaligned_Load\n+\t\t| bit_arch_Fast_Unaligned_Copy\n+\t\t| bit_arch_Prefer_PMINUB_for_stringop\n+\t\t| bit_arch_Slow_SSE4_2);\n+\t  break;\n+\n+\tcase INTEL_ATOM_TREMONT:\n+\t  /* Enable rep string instructions, unaligned load, unaligned\n+\t     copy, pminub and avoid SSE 4.2 on Tremont.  */\n+\t  cpu_features->preferred[index_arch_Fast_Rep_String]\n+\t    |= (bit_arch_Fast_Rep_String\n+\t\t| bit_arch_Fast_Unaligned_Load\n+\t\t| bit_arch_Fast_Unaligned_Copy\n+\t\t| bit_arch_Prefer_PMINUB_for_stringop\n+\t\t| bit_arch_Slow_SSE4_2);\n+\t  break;\n+\n+\t  /*\n+\t     Default tuned Knights microarch.\n+\t     case INTEL_KNIGHTS_MILL:\n+\t     */\n+\n+\t  /*\n+\t     Default tuned atom microarch.\n+\t     case INTEL_ATOM_SIERRAFOREST:\n+\t     case INTEL_ATOM_GRANDRIDGE:\n+\t     case INTEL_ATOM_CLEARWATERFOREST:\n+\t     */\n+\n+\t  /* Bigcore/Default Tuning.  */\n+\tdefault:\n+\tdefault_tuning:\n+\t  /* Unknown Intel processors.  Assuming this is one of Core\n+\t     i3/i5/i7 processors if AVX is available.  */\n+\t  if (!CPU_FEATURES_CPU_P (cpu_features, AVX))\n+\t    break;\n+\n+\tenable_modern_features:\n+\t  /* Rep string instructions, unaligned load, unaligned copy,\n+\t     and pminub are fast on Intel Core i3, i5 and i7.  */\n+\t  cpu_features->preferred[index_arch_Fast_Rep_String]\n+\t    |= (bit_arch_Fast_Rep_String\n+\t\t| bit_arch_Fast_Unaligned_Load\n+\t\t| bit_arch_Fast_Unaligned_Copy\n+\t\t| bit_arch_Prefer_PMINUB_for_stringop);\n+\t  break;\n+\n+\tcase INTEL_BIGCORE_NEHALEM:\n+\tcase INTEL_BIGCORE_WESTMERE:\n+\t  /* Older CPUs prefer non-temporal stores at lower threshold.  */\n+\t  cpu_features->cachesize_non_temporal_divisor = 8;\n+\t  goto enable_modern_features;\n+\n+\t  /* Older Bigcore microarch (smaller non-temporal store\n+\t     threshold).  */\n+\tcase INTEL_BIGCORE_SANDYBRIDGE:\n+\tcase INTEL_BIGCORE_IVYBRIDGE:\n+\tcase INTEL_BIGCORE_HASWELL:\n+\tcase INTEL_BIGCORE_BROADWELL:\n+\t  cpu_features->cachesize_non_temporal_divisor = 8;\n+\t  goto default_tuning;\n+\n+\t  /* Newer Bigcore microarch (larger non-temporal store\n+\t     threshold).  */\n+\tcase INTEL_BIGCORE_SKYLAKE_AVX512:\n+\tcase INTEL_BIGCORE_CANNONLAKE:\n+\t  /* Benchmarks indicate non-temporal memset is not\n+\t     necessarily profitable on SKX (and in some cases much\n+\t     worse). This is likely unique to SKX due to its unique\n+\t     mesh interconnect (not present on ICX or BWD). Disable\n+\t     non-temporal on all Skylake servers. */\n+\t  cpu_features->preferred[index_arch_Avoid_Non_Temporal_Memset]\n+\t    |= bit_arch_Avoid_Non_Temporal_Memset;\n+\t  /* fallthrough */\n+\tcase INTEL_BIGCORE_COMETLAKE:\n+\tcase INTEL_BIGCORE_SKYLAKE:\n+\tcase INTEL_BIGCORE_KABYLAKE:\n+\tcase INTEL_BIGCORE_ICELAKE:\n+\tcase INTEL_BIGCORE_TIGERLAKE:\n+\tcase INTEL_BIGCORE_ROCKETLAKE:\n+\tcase INTEL_BIGCORE_RAPTORLAKE:\n+\tcase INTEL_BIGCORE_METEORLAKE:\n+\tcase INTEL_BIGCORE_LUNARLAKE:\n+\tcase INTEL_BIGCORE_ARROWLAKE:\n+\tcase INTEL_BIGCORE_PANTHERLAKE:\n+\tcase INTEL_BIGCORE_SAPPHIRERAPIDS:\n+\tcase INTEL_BIGCORE_EMERALDRAPIDS:\n+\tcase INTEL_BIGCORE_GRANITERAPIDS:\n+\t  /* Default tuned Mixed (bigcore + atom SOC). */\n+\tcase INTEL_MIXED_LAKEFIELD:\n+\tcase INTEL_MIXED_ALDERLAKE:\n+\t  cpu_features->cachesize_non_temporal_divisor = 2;\n+\t  goto default_tuning;\n+\t}\n \n       /* Since AVX512ER is unique to Xeon Phi, set Prefer_No_VZEROUPPER\n          if AVX512ER is available.  Don't use AVX512 to avoid lower CPU\n\ncommit d8a1a1aef7a58b991505b9a1349a40736dec3abf\nAuthor: H.J. Lu <hjl.tools@gmail.com>\nDate:   Sat Apr 12 08:37:29 2025 -0700\n\n    x86: Detect Intel Diamond Rapids\n    \n    Detect Intel Diamond Rapids and tune it similar to Intel Granite Rapids.\n    \n    Signed-off-by: H.J. Lu <hjl.tools@gmail.com>\n    Reviewed-by: Sunil K Pandey <skpgkp2@gmail.com>\n    (cherry picked from commit de14f1959ee5f9b845a7cae43bee03068b8136f0)\n\ndiff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c\nindex 1a6e694abf..52a2f03bdd 100644\n--- a/sysdeps/x86/cpu-features.c\n+++ b/sysdeps/x86/cpu-features.c\n@@ -542,6 +542,7 @@ enum intel_microarch\n   INTEL_BIGCORE_ARROWLAKE,\n   INTEL_BIGCORE_PANTHERLAKE,\n   INTEL_BIGCORE_GRANITERAPIDS,\n+  INTEL_BIGCORE_DIAMONDRAPIDS,\n \n   /* Mixed (bigcore + atom SOC).  */\n   INTEL_MIXED_LAKEFIELD,\n@@ -817,6 +818,16 @@ disable_tsx:\n \t      break;\n \t    }\n \t}\n+      else if (family == 19)\n+\tswitch (model)\n+\t  {\n+\t  case 0x01:\n+\t    microarch = INTEL_BIGCORE_DIAMONDRAPIDS;\n+\t    break;\n+\n+\t  default:\n+\t    break;\n+\t  }\n \n       switch (microarch)\n \t{\n@@ -926,6 +937,7 @@ disable_tsx:\n \tcase INTEL_BIGCORE_SAPPHIRERAPIDS:\n \tcase INTEL_BIGCORE_EMERALDRAPIDS:\n \tcase INTEL_BIGCORE_GRANITERAPIDS:\n+\tcase INTEL_BIGCORE_DIAMONDRAPIDS:\n \t  /* Default tuned Mixed (bigcore + atom SOC). */\n \tcase INTEL_MIXED_LAKEFIELD:\n \tcase INTEL_MIXED_ALDERLAKE:\n\ncommit 736e6735053f12181d3d287898dd5fdb9e8baf59\nAuthor: Frank Barrus <frankbarrus_sw@shaggy.cc>\nDate:   Wed Dec 4 07:55:02 2024 -0500\n\n    pthreads NPTL: lost wakeup fix 2\n    \n    This fixes the lost wakeup (from a bug in signal stealing) with a change\n    in the usage of g_signals[] in the condition variable internal state.\n    It also completely eliminates the concept and handling of signal stealing,\n    as well as the need for signalers to block to wait for waiters to wake\n    up every time there is a G1/G2 switch.  This greatly reduces the average\n    and maximum latency for pthread_cond_signal.\n    \n    The g_signals[] field now contains a signal count that is relative to\n    the current g1_start value.  Since it is a 32-bit field, and the LSB is\n    still reserved (though not currently used anymore), it has a 31-bit value\n    that corresponds to the low 31 bits of the sequence number in g1_start.\n    (since g1_start also has an LSB flag, this means bits 31:1 in g_signals\n    correspond to bits 31:1 in g1_start, plus the current signal count)\n    \n    By making the signal count relative to g1_start, there is no longer\n    any ambiguity or A/B/A issue, and thus any checks before blocking,\n    including the futex call itself, are guaranteed not to block if the G1/G2\n    switch occurs, even if the signal count remains the same.  This allows\n    initially safely blocking in G2 until the switch to G1 occurs, and\n    then transitioning from G1 to a new G1 or G2, and always being able to\n    distinguish the state change.  This removes the race condition and A/B/A\n    problems that otherwise ocurred if a late (pre-empted) waiter were to\n    resume just as the futex call attempted to block on g_signal since\n    otherwise there was no last opportunity to re-check things like whether\n    the current G1 group was already closed.\n    \n    By fixing these issues, the signal stealing code can be eliminated,\n    since there is no concept of signal stealing anymore.  The code to block\n    for all waiters to exit g_refs can also be removed, since any waiters\n    that are still in the g_refs region can be guaranteed to safely wake\n    up and exit.  If there are still any left at this time, they are all\n    sent one final futex wakeup to ensure that they are not blocked any\n    longer, but there is no need for the signaller to block and wait for\n    them to wake up and exit the g_refs region.\n    \n    The signal count is then effectively \"zeroed\" but since it is now\n    relative to g1_start, this is done by advancing it to a new value that\n    can be observed by any pending blocking waiters.  Any late waiters can\n    always tell the difference, and can thus just cleanly exit if they are\n    in a stale G1 or G2.  They can never steal a signal from the current\n    G1 if they are not in the current G1, since the signal value that has\n    to match in the cmpxchg has the low 31 bits of the g1_start value\n    contained in it, and that's first checked, and then it won't match if\n    there's a G1/G2 change.\n    \n    Note: the 31-bit sequence number used in g_signals is designed to\n    handle wrap-around when checking the signal count, but if the entire\n    31-bit wraparound (2 billion signals) occurs while there is still a\n    late waiter that has not yet resumed, and it happens to then match\n    the current g1_start low bits, and the pre-emption occurs after the\n    normal \"closed group\" checks (which are 64-bit) but then hits the\n    futex syscall and signal consuming code, then an A/B/A issue could\n    still result and cause an incorrect assumption about whether it\n    should block.  This particular scenario seems unlikely in practice.\n    Note that once awake from the futex, the waiter would notice the\n    closed group before consuming the signal (since that's still a 64-bit\n    check that would not be aliased in the wrap-around in g_signals),\n    so the biggest impact would be blocking on the futex until the next\n    full wakeup from a G1/G2 switch.\n    \n    Signed-off-by: Frank Barrus <frankbarrus_sw@shaggy.cc>\n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit 1db84775f831a1494993ce9c118deaf9537cc50a)\n\ndiff --git a/nptl/pthread_cond_common.c b/nptl/pthread_cond_common.c\nindex 3487557bb8..4855b8899f 100644\n--- a/nptl/pthread_cond_common.c\n+++ b/nptl/pthread_cond_common.c\n@@ -201,7 +201,6 @@ static bool __attribute__ ((unused))\n __condvar_quiesce_and_switch_g1 (pthread_cond_t *cond, uint64_t wseq,\n     unsigned int *g1index, int private)\n {\n-  const unsigned int maxspin = 0;\n   unsigned int g1 = *g1index;\n \n   /* If there is no waiter in G2, we don't do anything.  The expression may\n@@ -222,84 +221,46 @@ __condvar_quiesce_and_switch_g1 (pthread_cond_t *cond, uint64_t wseq,\n      * New waiters arriving concurrently with the group switching will all go\n        into G2 until we atomically make the switch.  Waiters existing in G2\n        are not affected.\n-     * Waiters in G1 will be closed out immediately by setting a flag in\n-       __g_signals, which will prevent waiters from blocking using a futex on\n-       __g_signals and also notifies them that the group is closed.  As a\n-       result, they will eventually remove their group reference, allowing us\n-       to close switch group roles.  */\n-\n-  /* First, set the closed flag on __g_signals.  This tells waiters that are\n-     about to wait that they shouldn't do that anymore.  This basically\n-     serves as an advance notification of the upcoming change to __g1_start;\n-     waiters interpret it as if __g1_start was larger than their waiter\n-     sequence position.  This allows us to change __g1_start after waiting\n-     for all existing waiters with group references to leave, which in turn\n-     makes recovery after stealing a signal simpler because it then can be\n-     skipped if __g1_start indicates that the group is closed (otherwise,\n-     we would have to recover always because waiters don't know how big their\n-     groups are).  Relaxed MO is fine.  */\n-  atomic_fetch_or_relaxed (cond->__data.__g_signals + g1, 1);\n-\n-  /* Wait until there are no group references anymore.  The fetch-or operation\n-     injects us into the modification order of __g_refs; release MO ensures\n-     that waiters incrementing __g_refs after our fetch-or see the previous\n-     changes to __g_signals and to __g1_start that had to happen before we can\n-     switch this G1 and alias with an older group (we have two groups, so\n-     aliasing requires switching group roles twice).  Note that nobody else\n-     can have set the wake-request flag, so we do not have to act upon it.\n-\n-     Also note that it is harmless if older waiters or waiters from this G1\n-     get a group reference after we have quiesced the group because it will\n-     remain closed for them either because of the closed flag in __g_signals\n-     or the later update to __g1_start.  New waiters will never arrive here\n-     but instead continue to go into the still current G2.  */\n-  unsigned r = atomic_fetch_or_release (cond->__data.__g_refs + g1, 0);\n-  while ((r >> 1) > 0)\n-    {\n-      for (unsigned int spin = maxspin; ((r >> 1) > 0) && (spin > 0); spin--)\n-\t{\n-\t  /* TODO Back off.  */\n-\t  r = atomic_load_relaxed (cond->__data.__g_refs + g1);\n-\t}\n-      if ((r >> 1) > 0)\n-\t{\n-\t  /* There is still a waiter after spinning.  Set the wake-request\n-\t     flag and block.  Relaxed MO is fine because this is just about\n-\t     this futex word.\n-\n-\t     Update r to include the set wake-request flag so that the upcoming\n-\t     futex_wait only blocks if the flag is still set (otherwise, we'd\n-\t     violate the basic client-side futex protocol).  */\n-\t  r = atomic_fetch_or_relaxed (cond->__data.__g_refs + g1, 1) | 1;\n-\n-\t  if ((r >> 1) > 0)\n-\t    futex_wait_simple (cond->__data.__g_refs + g1, r, private);\n-\t  /* Reload here so we eventually see the most recent value even if we\n-\t     do not spin.   */\n-\t  r = atomic_load_relaxed (cond->__data.__g_refs + g1);\n-\t}\n-    }\n-  /* Acquire MO so that we synchronize with the release operation that waiters\n-     use to decrement __g_refs and thus happen after the waiters we waited\n-     for.  */\n-  atomic_thread_fence_acquire ();\n+     * Waiters in G1 will be closed out immediately by the advancing of\n+       __g_signals to the next \"lowseq\" (low 31 bits of the new g1_start),\n+       which will prevent waiters from blocking using a futex on\n+       __g_signals since it provides enough signals for all possible\n+       remaining waiters.  As a result, they can each consume a signal\n+       and they will eventually remove their group reference.  */\n \n   /* Update __g1_start, which finishes closing this group.  The value we add\n      will never be negative because old_orig_size can only be zero when we\n      switch groups the first time after a condvar was initialized, in which\n-     case G1 will be at index 1 and we will add a value of 1.  See above for\n-     why this takes place after waiting for quiescence of the group.\n+     case G1 will be at index 1 and we will add a value of 1.\n      Relaxed MO is fine because the change comes with no additional\n      constraints that others would have to observe.  */\n   __condvar_add_g1_start_relaxed (cond,\n       (old_orig_size << 1) + (g1 == 1 ? 1 : - 1));\n \n-  /* Now reopen the group, thus enabling waiters to again block using the\n-     futex controlled by __g_signals.  Release MO so that observers that see\n-     no signals (and thus can block) also see the write __g1_start and thus\n-     that this is now a new group (see __pthread_cond_wait_common for the\n-     matching acquire MO loads).  */\n-  atomic_store_release (cond->__data.__g_signals + g1, 0);\n+  unsigned int lowseq = ((old_g1_start + old_orig_size) << 1) & ~1U;\n+\n+  /* If any waiters still hold group references (and thus could be blocked),\n+     then wake them all up now and prevent any running ones from blocking.\n+     This is effectively a catch-all for any possible current or future\n+     bugs that can allow the group size to reach 0 before all G1 waiters\n+     have been awakened or at least given signals to consume, or any\n+     other case that can leave blocked (or about to block) older waiters..  */\n+  if ((atomic_fetch_or_release (cond->__data.__g_refs + g1, 0) >> 1) > 0)\n+   {\n+    /* First advance signals to the end of the group (i.e. enough signals\n+       for the entire G1 group) to ensure that waiters which have not\n+       yet blocked in the futex will not block.\n+       Note that in the vast majority of cases, this should never\n+       actually be necessary, since __g_signals will have enough\n+       signals for the remaining g_refs waiters.  As an optimization,\n+       we could check this first before proceeding, although that\n+       could still leave the potential for futex lost wakeup bugs\n+       if the signal count was non-zero but the futex wakeup\n+       was somehow lost.  */\n+    atomic_store_release (cond->__data.__g_signals + g1, lowseq);\n+\n+    futex_wake (cond->__data.__g_signals + g1, INT_MAX, private);\n+   }\n \n   /* At this point, the old G1 is now a valid new G2 (but not in use yet).\n      No old waiter can neither grab a signal nor acquire a reference without\n@@ -311,6 +272,10 @@ __condvar_quiesce_and_switch_g1 (pthread_cond_t *cond, uint64_t wseq,\n   g1 ^= 1;\n   *g1index ^= 1;\n \n+  /* Now advance the new G1 g_signals to the new lowseq, giving it\n+     an effective signal count of 0 to start.  */\n+  atomic_store_release (cond->__data.__g_signals + g1, lowseq);\n+\n   /* These values are just observed by signalers, and thus protected by the\n      lock.  */\n   unsigned int orig_size = wseq - (old_g1_start + old_orig_size);\ndiff --git a/nptl/pthread_cond_wait.c b/nptl/pthread_cond_wait.c\nindex 66786c7b90..3d290e39c8 100644\n--- a/nptl/pthread_cond_wait.c\n+++ b/nptl/pthread_cond_wait.c\n@@ -238,9 +238,7 @@ __condvar_cleanup_waiting (void *arg)\n    signaled), and a reference count.\n \n    The group reference count is used to maintain the number of waiters that\n-   are using the group's futex.  Before a group can change its role, the\n-   reference count must show that no waiters are using the futex anymore; this\n-   prevents ABA issues on the futex word.\n+   are using the group's futex.\n \n    To represent which intervals in the waiter sequence the groups cover (and\n    thus also which group slot contains G1 or G2), we use a 64b counter to\n@@ -300,11 +298,12 @@ __condvar_cleanup_waiting (void *arg)\n        last reference.\n      * Reference count used by waiters concurrently with signalers that have\n        acquired the condvar-internal lock.\n-   __g_signals: The number of signals that can still be consumed.\n+   __g_signals: The number of signals that can still be consumed, relative to\n+     the current g1_start.  (i.e. bits 31 to 1 of __g_signals are bits\n+     31 to 1 of g1_start with the signal count added)\n      * Used as a futex word by waiters.  Used concurrently by waiters and\n        signalers.\n-     * LSB is true iff this group has been completely signaled (i.e., it is\n-       closed).\n+     * LSB is currently reserved and 0.\n    __g_size: Waiters remaining in this group (i.e., which have not been\n      signaled yet.\n      * Accessed by signalers and waiters that cancel waiting (both do so only\n@@ -328,18 +327,6 @@ __condvar_cleanup_waiting (void *arg)\n    sufficient because if a waiter can see a sufficiently large value, it could\n    have also consume a signal in the waiters group.\n \n-   Waiters try to grab a signal from __g_signals without holding a reference\n-   count, which can lead to stealing a signal from a more recent group after\n-   their own group was already closed.  They cannot always detect whether they\n-   in fact did because they do not know when they stole, but they can\n-   conservatively add a signal back to the group they stole from; if they\n-   did so unnecessarily, all that happens is a spurious wake-up.  To make this\n-   even less likely, __g1_start contains the index of the current g2 too,\n-   which allows waiters to check if there aliasing on the group slots; if\n-   there wasn't, they didn't steal from the current G1, which means that the\n-   G1 they stole from must have been already closed and they do not need to\n-   fix anything.\n-\n    It is essential that the last field in pthread_cond_t is __g_signals[1]:\n    The previous condvar used a pointer-sized field in pthread_cond_t, so a\n    PTHREAD_COND_INITIALIZER from that condvar implementation might only\n@@ -435,6 +422,9 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n     {\n       while (1)\n \t{\n+          uint64_t g1_start = __condvar_load_g1_start_relaxed (cond);\n+          unsigned int lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n+\n \t  /* Spin-wait first.\n \t     Note that spinning first without checking whether a timeout\n \t     passed might lead to what looks like a spurious wake-up even\n@@ -446,35 +436,45 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n \t     having to compare against the current time seems to be the right\n \t     choice from a performance perspective for most use cases.  */\n \t  unsigned int spin = maxspin;\n-\t  while (signals == 0 && spin > 0)\n+\t  while (spin > 0 && ((int)(signals - lowseq) < 2))\n \t    {\n \t      /* Check that we are not spinning on a group that's already\n \t\t closed.  */\n-\t      if (seq < (__condvar_load_g1_start_relaxed (cond) >> 1))\n-\t\tgoto done;\n+\t      if (seq < (g1_start >> 1))\n+\t\tbreak;\n \n \t      /* TODO Back off.  */\n \n \t      /* Reload signals.  See above for MO.  */\n \t      signals = atomic_load_acquire (cond->__data.__g_signals + g);\n+              g1_start = __condvar_load_g1_start_relaxed (cond);\n+              lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n \t      spin--;\n \t    }\n \n-\t  /* If our group will be closed as indicated by the flag on signals,\n-\t     don't bother grabbing a signal.  */\n-\t  if (signals & 1)\n-\t    goto done;\n-\n-\t  /* If there is an available signal, don't block.  */\n-\t  if (signals != 0)\n+          if (seq < (g1_start >> 1))\n+\t    {\n+              /* If the group is closed already,\n+\t         then this waiter originally had enough extra signals to\n+\t         consume, up until the time its group was closed.  */\n+\t       goto done;\n+            }\n+\n+\t  /* If there is an available signal, don't block.\n+             If __g1_start has advanced at all, then we must be in G1\n+\t     by now, perhaps in the process of switching back to an older\n+\t     G2, but in either case we're allowed to consume the available\n+\t     signal and should not block anymore.  */\n+\t  if ((int)(signals - lowseq) >= 2)\n \t    break;\n \n \t  /* No signals available after spinning, so prepare to block.\n \t     We first acquire a group reference and use acquire MO for that so\n \t     that we synchronize with the dummy read-modify-write in\n \t     __condvar_quiesce_and_switch_g1 if we read from that.  In turn,\n-\t     in this case this will make us see the closed flag on __g_signals\n-\t     that designates a concurrent attempt to reuse the group's slot.\n+\t     in this case this will make us see the advancement of __g_signals\n+\t     to the upcoming new g1_start that occurs with a concurrent\n+\t     attempt to reuse the group's slot.\n \t     We use acquire MO for the __g_signals check to make the\n \t     __g1_start check work (see spinning above).\n \t     Note that the group reference acquisition will not mask the\n@@ -482,15 +482,24 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n \t     an atomic read-modify-write operation and thus extend the release\n \t     sequence.  */\n \t  atomic_fetch_add_acquire (cond->__data.__g_refs + g, 2);\n-\t  if (((atomic_load_acquire (cond->__data.__g_signals + g) & 1) != 0)\n-\t      || (seq < (__condvar_load_g1_start_relaxed (cond) >> 1)))\n+\t  signals = atomic_load_acquire (cond->__data.__g_signals + g);\n+          g1_start = __condvar_load_g1_start_relaxed (cond);\n+          lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n+\n+          if (seq < (g1_start >> 1))\n \t    {\n-\t      /* Our group is closed.  Wake up any signalers that might be\n-\t\t waiting.  */\n+              /* group is closed already, so don't block */\n \t      __condvar_dec_grefs (cond, g, private);\n \t      goto done;\n \t    }\n \n+\t  if ((int)(signals - lowseq) >= 2)\n+\t    {\n+\t      /* a signal showed up or G1/G2 switched after we grabbed the refcount */\n+\t      __condvar_dec_grefs (cond, g, private);\n+\t      break;\n+            }\n+\n \t  // Now block.\n \t  struct _pthread_cleanup_buffer buffer;\n \t  struct _condvar_cleanup_buffer cbuffer;\n@@ -501,7 +510,7 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n \t  __pthread_cleanup_push (&buffer, __condvar_cleanup_waiting, &cbuffer);\n \n \t  err = __futex_abstimed_wait_cancelable64 (\n-\t    cond->__data.__g_signals + g, 0, clockid, abstime, private);\n+\t    cond->__data.__g_signals + g, signals, clockid, abstime, private);\n \n \t  __pthread_cleanup_pop (&buffer, 0);\n \n@@ -524,6 +533,8 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n \t  signals = atomic_load_acquire (cond->__data.__g_signals + g);\n \t}\n \n+       if (seq < (__condvar_load_g1_start_relaxed (cond) >> 1))\n+\t goto done;\n     }\n   /* Try to grab a signal.  Use acquire MO so that we see an up-to-date value\n      of __g1_start below (see spinning above for a similar case).  In\n@@ -532,69 +543,6 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n   while (!atomic_compare_exchange_weak_acquire (cond->__data.__g_signals + g,\n \t\t\t\t\t\t&signals, signals - 2));\n \n-  /* We consumed a signal but we could have consumed from a more recent group\n-     that aliased with ours due to being in the same group slot.  If this\n-     might be the case our group must be closed as visible through\n-     __g1_start.  */\n-  uint64_t g1_start = __condvar_load_g1_start_relaxed (cond);\n-  if (seq < (g1_start >> 1))\n-    {\n-      /* We potentially stole a signal from a more recent group but we do not\n-\t know which group we really consumed from.\n-\t We do not care about groups older than current G1 because they are\n-\t closed; we could have stolen from these, but then we just add a\n-\t spurious wake-up for the current groups.\n-\t We will never steal a signal from current G2 that was really intended\n-\t for G2 because G2 never receives signals (until it becomes G1).  We\n-\t could have stolen a signal from G2 that was conservatively added by a\n-\t previous waiter that also thought it stole a signal -- but given that\n-\t that signal was added unnecessarily, it's not a problem if we steal\n-\t it.\n-\t Thus, the remaining case is that we could have stolen from the current\n-\t G1, where \"current\" means the __g1_start value we observed.  However,\n-\t if the current G1 does not have the same slot index as we do, we did\n-\t not steal from it and do not need to undo that.  This is the reason\n-\t for putting a bit with G2's index into__g1_start as well.  */\n-      if (((g1_start & 1) ^ 1) == g)\n-\t{\n-\t  /* We have to conservatively undo our potential mistake of stealing\n-\t     a signal.  We can stop trying to do that when the current G1\n-\t     changes because other spinning waiters will notice this too and\n-\t     __condvar_quiesce_and_switch_g1 has checked that there are no\n-\t     futex waiters anymore before switching G1.\n-\t     Relaxed MO is fine for the __g1_start load because we need to\n-\t     merely be able to observe this fact and not have to observe\n-\t     something else as well.\n-\t     ??? Would it help to spin for a little while to see whether the\n-\t     current G1 gets closed?  This might be worthwhile if the group is\n-\t     small or close to being closed.  */\n-\t  unsigned int s = atomic_load_relaxed (cond->__data.__g_signals + g);\n-\t  while (__condvar_load_g1_start_relaxed (cond) == g1_start)\n-\t    {\n-\t      /* Try to add a signal.  We don't need to acquire the lock\n-\t\t because at worst we can cause a spurious wake-up.  If the\n-\t\t group is in the process of being closed (LSB is true), this\n-\t\t has an effect similar to us adding a signal.  */\n-\t      if (((s & 1) != 0)\n-\t\t  || atomic_compare_exchange_weak_relaxed\n-\t\t       (cond->__data.__g_signals + g, &s, s + 2))\n-\t\t{\n-\t\t  /* If we added a signal, we also need to add a wake-up on\n-\t\t     the futex.  We also need to do that if we skipped adding\n-\t\t     a signal because the group is being closed because\n-\t\t     while __condvar_quiesce_and_switch_g1 could have closed\n-\t\t     the group, it might still be waiting for futex waiters to\n-\t\t     leave (and one of those waiters might be the one we stole\n-\t\t     the signal from, which cause it to block using the\n-\t\t     futex).  */\n-\t\t  futex_wake (cond->__data.__g_signals + g, 1, private);\n-\t\t  break;\n-\t\t}\n-\t      /* TODO Back off.  */\n-\t    }\n-\t}\n-    }\n-\n  done:\n \n   /* Confirm that we have been woken.  We do that before acquiring the mutex\n\ncommit 88d999d840e77c9917f08870094a23ce42294848\nAuthor: Malte Skarupke <malteskarupke@fastmail.fm>\nDate:   Wed Dec 4 07:55:22 2024 -0500\n\n    nptl: Update comments and indentation for new condvar implementation\n    \n    Some comments were wrong after the most recent commit. This fixes that.\n    \n    Also fixing indentation where it was using spaces instead of tabs.\n    \n    Signed-off-by: Malte Skarupke <malteskarupke@fastmail.fm>\n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit 0cc973160c23bb67f895bc887dd6942d29f8fee3)\n\ndiff --git a/nptl/pthread_cond_common.c b/nptl/pthread_cond_common.c\nindex 4855b8899f..3475d15123 100644\n--- a/nptl/pthread_cond_common.c\n+++ b/nptl/pthread_cond_common.c\n@@ -221,8 +221,9 @@ __condvar_quiesce_and_switch_g1 (pthread_cond_t *cond, uint64_t wseq,\n      * New waiters arriving concurrently with the group switching will all go\n        into G2 until we atomically make the switch.  Waiters existing in G2\n        are not affected.\n-     * Waiters in G1 will be closed out immediately by the advancing of\n-       __g_signals to the next \"lowseq\" (low 31 bits of the new g1_start),\n+     * Waiters in G1 have already received a signal and been woken. If they\n+       haven't woken yet, they will be closed out immediately by the advancing\n+       of __g_signals to the next \"lowseq\" (low 31 bits of the new g1_start),\n        which will prevent waiters from blocking using a futex on\n        __g_signals since it provides enough signals for all possible\n        remaining waiters.  As a result, they can each consume a signal\ndiff --git a/nptl/pthread_cond_wait.c b/nptl/pthread_cond_wait.c\nindex 3d290e39c8..ad2cee7d59 100644\n--- a/nptl/pthread_cond_wait.c\n+++ b/nptl/pthread_cond_wait.c\n@@ -249,7 +249,7 @@ __condvar_cleanup_waiting (void *arg)\n    figure out whether they are in a group that has already been completely\n    signaled (i.e., if the current G1 starts at a later position that the\n    waiter's position).  Waiters cannot determine whether they are currently\n-   in G2 or G1 -- but they do not have too because all they are interested in\n+   in G2 or G1 -- but they do not have to because all they are interested in\n    is whether there are available signals, and they always start in G2 (whose\n    group slot they know because of the bit in the waiter sequence.  Signalers\n    will simply fill the right group until it is completely signaled and can\n@@ -412,7 +412,7 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n     }\n \n   /* Now wait until a signal is available in our group or it is closed.\n-     Acquire MO so that if we observe a value of zero written after group\n+     Acquire MO so that if we observe (signals == lowseq) after group\n      switching in __condvar_quiesce_and_switch_g1, we synchronize with that\n      store and will see the prior update of __g1_start done while switching\n      groups too.  */\n@@ -422,8 +422,8 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n     {\n       while (1)\n \t{\n-          uint64_t g1_start = __condvar_load_g1_start_relaxed (cond);\n-          unsigned int lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n+\t  uint64_t g1_start = __condvar_load_g1_start_relaxed (cond);\n+\t  unsigned int lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n \n \t  /* Spin-wait first.\n \t     Note that spinning first without checking whether a timeout\n@@ -447,21 +447,21 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n \n \t      /* Reload signals.  See above for MO.  */\n \t      signals = atomic_load_acquire (cond->__data.__g_signals + g);\n-              g1_start = __condvar_load_g1_start_relaxed (cond);\n-              lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n+\t      g1_start = __condvar_load_g1_start_relaxed (cond);\n+\t      lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n \t      spin--;\n \t    }\n \n-          if (seq < (g1_start >> 1))\n+\t  if (seq < (g1_start >> 1))\n \t    {\n-              /* If the group is closed already,\n+\t      /* If the group is closed already,\n \t         then this waiter originally had enough extra signals to\n \t         consume, up until the time its group was closed.  */\n \t       goto done;\n-            }\n+\t    }\n \n \t  /* If there is an available signal, don't block.\n-             If __g1_start has advanced at all, then we must be in G1\n+\t     If __g1_start has advanced at all, then we must be in G1\n \t     by now, perhaps in the process of switching back to an older\n \t     G2, but in either case we're allowed to consume the available\n \t     signal and should not block anymore.  */\n@@ -483,22 +483,23 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n \t     sequence.  */\n \t  atomic_fetch_add_acquire (cond->__data.__g_refs + g, 2);\n \t  signals = atomic_load_acquire (cond->__data.__g_signals + g);\n-          g1_start = __condvar_load_g1_start_relaxed (cond);\n-          lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n+\t  g1_start = __condvar_load_g1_start_relaxed (cond);\n+\t  lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n \n-          if (seq < (g1_start >> 1))\n+\t  if (seq < (g1_start >> 1))\n \t    {\n-              /* group is closed already, so don't block */\n+\t      /* group is closed already, so don't block */\n \t      __condvar_dec_grefs (cond, g, private);\n \t      goto done;\n \t    }\n \n \t  if ((int)(signals - lowseq) >= 2)\n \t    {\n-\t      /* a signal showed up or G1/G2 switched after we grabbed the refcount */\n+\t      /* a signal showed up or G1/G2 switched after we grabbed the\n+\t         refcount */\n \t      __condvar_dec_grefs (cond, g, private);\n \t      break;\n-            }\n+\t    }\n \n \t  // Now block.\n \t  struct _pthread_cleanup_buffer buffer;\n@@ -536,10 +537,8 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n        if (seq < (__condvar_load_g1_start_relaxed (cond) >> 1))\n \t goto done;\n     }\n-  /* Try to grab a signal.  Use acquire MO so that we see an up-to-date value\n-     of __g1_start below (see spinning above for a similar case).  In\n-     particular, if we steal from a more recent group, we will also see a\n-     more recent __g1_start below.  */\n+  /* Try to grab a signal.  See above for MO.  (if we do another loop\n+     iteration we need to see the correct value of g1_start)  */\n   while (!atomic_compare_exchange_weak_acquire (cond->__data.__g_signals + g,\n \t\t\t\t\t\t&signals, signals - 2));\n \n\ncommit 136a29f9d0a3924828d5a16be82d054637517c95\nAuthor: Malte Skarupke <malteskarupke@fastmail.fm>\nDate:   Wed Dec 4 07:55:50 2024 -0500\n\n    nptl: Remove unnecessary catch-all-wake in condvar group switch\n    \n    This wake is unnecessary. We only switch groups after every sleeper in a group\n    has been woken. Sure, they may take a while to actually wake up and may still\n    hold a reference, but waking them a second time doesn't speed that up. Instead\n    this just makes the code more complicated and may hide problems.\n    \n    In particular this safety wake wouldn't even have helped with the bug that was\n    fixed by Barrus' patch: The bug there was that pthread_cond_signal would not\n    switch g1 when it should, so we wouldn't even have entered this code path.\n    \n    Signed-off-by: Malte Skarupke <malteskarupke@fastmail.fm>\n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit b42cc6af11062c260c7dfa91f1c89891366fed3e)\n\ndiff --git a/nptl/pthread_cond_common.c b/nptl/pthread_cond_common.c\nindex 3475d15123..30b8eee149 100644\n--- a/nptl/pthread_cond_common.c\n+++ b/nptl/pthread_cond_common.c\n@@ -221,13 +221,7 @@ __condvar_quiesce_and_switch_g1 (pthread_cond_t *cond, uint64_t wseq,\n      * New waiters arriving concurrently with the group switching will all go\n        into G2 until we atomically make the switch.  Waiters existing in G2\n        are not affected.\n-     * Waiters in G1 have already received a signal and been woken. If they\n-       haven't woken yet, they will be closed out immediately by the advancing\n-       of __g_signals to the next \"lowseq\" (low 31 bits of the new g1_start),\n-       which will prevent waiters from blocking using a futex on\n-       __g_signals since it provides enough signals for all possible\n-       remaining waiters.  As a result, they can each consume a signal\n-       and they will eventually remove their group reference.  */\n+     * Waiters in G1 have already received a signal and been woken.  */\n \n   /* Update __g1_start, which finishes closing this group.  The value we add\n      will never be negative because old_orig_size can only be zero when we\n@@ -240,29 +234,6 @@ __condvar_quiesce_and_switch_g1 (pthread_cond_t *cond, uint64_t wseq,\n \n   unsigned int lowseq = ((old_g1_start + old_orig_size) << 1) & ~1U;\n \n-  /* If any waiters still hold group references (and thus could be blocked),\n-     then wake them all up now and prevent any running ones from blocking.\n-     This is effectively a catch-all for any possible current or future\n-     bugs that can allow the group size to reach 0 before all G1 waiters\n-     have been awakened or at least given signals to consume, or any\n-     other case that can leave blocked (or about to block) older waiters..  */\n-  if ((atomic_fetch_or_release (cond->__data.__g_refs + g1, 0) >> 1) > 0)\n-   {\n-    /* First advance signals to the end of the group (i.e. enough signals\n-       for the entire G1 group) to ensure that waiters which have not\n-       yet blocked in the futex will not block.\n-       Note that in the vast majority of cases, this should never\n-       actually be necessary, since __g_signals will have enough\n-       signals for the remaining g_refs waiters.  As an optimization,\n-       we could check this first before proceeding, although that\n-       could still leave the potential for futex lost wakeup bugs\n-       if the signal count was non-zero but the futex wakeup\n-       was somehow lost.  */\n-    atomic_store_release (cond->__data.__g_signals + g1, lowseq);\n-\n-    futex_wake (cond->__data.__g_signals + g1, INT_MAX, private);\n-   }\n-\n   /* At this point, the old G1 is now a valid new G2 (but not in use yet).\n      No old waiter can neither grab a signal nor acquire a reference without\n      noticing that __g1_start is larger.\n\ncommit 2a259b6d77dc5bdab5c8f4ee0e69572d5699d4bf\nAuthor: Malte Skarupke <malteskarupke@fastmail.fm>\nDate:   Wed Dec 4 07:56:13 2024 -0500\n\n    nptl: Remove unnecessary quadruple check in pthread_cond_wait\n    \n    pthread_cond_wait was checking whether it was in a closed group no less than\n    four times. Checking once is enough. Here are the four checks:\n    \n    1. While spin-waiting. This was dead code: maxspin is set to 0 and has been\n       for years.\n    2. Before deciding to go to sleep, and before incrementing grefs: I kept this\n    3. After incrementing grefs. There is no reason to think that the group would\n       close while we do an atomic increment. Obviously it could close at any\n       point, but that doesn't mean we have to recheck after every step. This\n       check was equally good as check 2, except it has to do more work.\n    4. When we find ourselves in a group that has a signal. We only get here after\n       we check that we're not in a closed group. There is no need to check again.\n       The check would only have helped in cases where the compare_exchange in the\n       next line would also have failed. Relying on the compare_exchange is fine.\n    \n    Removing the duplicate checks clarifies the code.\n    \n    Signed-off-by: Malte Skarupke <malteskarupke@fastmail.fm>\n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit 4f7b051f8ee3feff1b53b27a906f245afaa9cee1)\n\ndiff --git a/nptl/pthread_cond_wait.c b/nptl/pthread_cond_wait.c\nindex ad2cee7d59..cfdd13bb87 100644\n--- a/nptl/pthread_cond_wait.c\n+++ b/nptl/pthread_cond_wait.c\n@@ -366,7 +366,6 @@ static __always_inline int\n __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n     clockid_t clockid, const struct __timespec64 *abstime)\n {\n-  const int maxspin = 0;\n   int err;\n   int result = 0;\n \n@@ -425,33 +424,6 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n \t  uint64_t g1_start = __condvar_load_g1_start_relaxed (cond);\n \t  unsigned int lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n \n-\t  /* Spin-wait first.\n-\t     Note that spinning first without checking whether a timeout\n-\t     passed might lead to what looks like a spurious wake-up even\n-\t     though we should return ETIMEDOUT (e.g., if the caller provides\n-\t     an absolute timeout that is clearly in the past).  However,\n-\t     (1) spurious wake-ups are allowed, (2) it seems unlikely that a\n-\t     user will (ab)use pthread_cond_wait as a check for whether a\n-\t     point in time is in the past, and (3) spinning first without\n-\t     having to compare against the current time seems to be the right\n-\t     choice from a performance perspective for most use cases.  */\n-\t  unsigned int spin = maxspin;\n-\t  while (spin > 0 && ((int)(signals - lowseq) < 2))\n-\t    {\n-\t      /* Check that we are not spinning on a group that's already\n-\t\t closed.  */\n-\t      if (seq < (g1_start >> 1))\n-\t\tbreak;\n-\n-\t      /* TODO Back off.  */\n-\n-\t      /* Reload signals.  See above for MO.  */\n-\t      signals = atomic_load_acquire (cond->__data.__g_signals + g);\n-\t      g1_start = __condvar_load_g1_start_relaxed (cond);\n-\t      lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n-\t      spin--;\n-\t    }\n-\n \t  if (seq < (g1_start >> 1))\n \t    {\n \t      /* If the group is closed already,\n@@ -482,24 +454,6 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n \t     an atomic read-modify-write operation and thus extend the release\n \t     sequence.  */\n \t  atomic_fetch_add_acquire (cond->__data.__g_refs + g, 2);\n-\t  signals = atomic_load_acquire (cond->__data.__g_signals + g);\n-\t  g1_start = __condvar_load_g1_start_relaxed (cond);\n-\t  lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n-\n-\t  if (seq < (g1_start >> 1))\n-\t    {\n-\t      /* group is closed already, so don't block */\n-\t      __condvar_dec_grefs (cond, g, private);\n-\t      goto done;\n-\t    }\n-\n-\t  if ((int)(signals - lowseq) >= 2)\n-\t    {\n-\t      /* a signal showed up or G1/G2 switched after we grabbed the\n-\t         refcount */\n-\t      __condvar_dec_grefs (cond, g, private);\n-\t      break;\n-\t    }\n \n \t  // Now block.\n \t  struct _pthread_cleanup_buffer buffer;\n@@ -533,9 +487,6 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n \t  /* Reload signals.  See above for MO.  */\n \t  signals = atomic_load_acquire (cond->__data.__g_signals + g);\n \t}\n-\n-       if (seq < (__condvar_load_g1_start_relaxed (cond) >> 1))\n-\t goto done;\n     }\n   /* Try to grab a signal.  See above for MO.  (if we do another loop\n      iteration we need to see the correct value of g1_start)  */\n\ncommit a2465f4293ecc37ac4650fbd02e517bc6fd801c6\nAuthor: Malte Skarupke <malteskarupke@fastmail.fm>\nDate:   Wed Dec 4 07:56:38 2024 -0500\n\n    nptl: Remove g_refs from condition variables\n    \n    This variable used to be needed to wait in group switching until all sleepers\n    have confirmed that they have woken. This is no longer needed. Nothing waits\n    on this variable so there is no need to track how many threads are currently\n    asleep in each group.\n    \n    Signed-off-by: Malte Skarupke <malteskarupke@fastmail.fm>\n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit c36fc50781995e6758cae2b6927839d0157f213c)\n\ndiff --git a/nptl/pthread_cond_wait.c b/nptl/pthread_cond_wait.c\nindex cfdd13bb87..411fc0380b 100644\n--- a/nptl/pthread_cond_wait.c\n+++ b/nptl/pthread_cond_wait.c\n@@ -143,23 +143,6 @@ __condvar_cancel_waiting (pthread_cond_t *cond, uint64_t seq, unsigned int g,\n     }\n }\n \n-/* Wake up any signalers that might be waiting.  */\n-static void\n-__condvar_dec_grefs (pthread_cond_t *cond, unsigned int g, int private)\n-{\n-  /* Release MO to synchronize-with the acquire load in\n-     __condvar_quiesce_and_switch_g1.  */\n-  if (atomic_fetch_add_release (cond->__data.__g_refs + g, -2) == 3)\n-    {\n-      /* Clear the wake-up request flag before waking up.  We do not need more\n-\t than relaxed MO and it doesn't matter if we apply this for an aliased\n-\t group because we wake all futex waiters right after clearing the\n-\t flag.  */\n-      atomic_fetch_and_relaxed (cond->__data.__g_refs + g, ~(unsigned int) 1);\n-      futex_wake (cond->__data.__g_refs + g, INT_MAX, private);\n-    }\n-}\n-\n /* Clean-up for cancellation of waiters waiting for normal signals.  We cancel\n    our registration as a waiter, confirm we have woken up, and re-acquire the\n    mutex.  */\n@@ -171,8 +154,6 @@ __condvar_cleanup_waiting (void *arg)\n   pthread_cond_t *cond = cbuffer->cond;\n   unsigned g = cbuffer->wseq & 1;\n \n-  __condvar_dec_grefs (cond, g, cbuffer->private);\n-\n   __condvar_cancel_waiting (cond, cbuffer->wseq >> 1, g, cbuffer->private);\n   /* FIXME With the current cancellation implementation, it is possible that\n      a thread is cancelled after it has returned from a syscall.  This could\n@@ -327,15 +308,6 @@ __condvar_cleanup_waiting (void *arg)\n    sufficient because if a waiter can see a sufficiently large value, it could\n    have also consume a signal in the waiters group.\n \n-   It is essential that the last field in pthread_cond_t is __g_signals[1]:\n-   The previous condvar used a pointer-sized field in pthread_cond_t, so a\n-   PTHREAD_COND_INITIALIZER from that condvar implementation might only\n-   initialize 4 bytes to zero instead of the 8 bytes we need (i.e., 44 bytes\n-   in total instead of the 48 we need).  __g_signals[1] is not accessed before\n-   the first group switch (G2 starts at index 0), which will set its value to\n-   zero after a harmless fetch-or whose return value is ignored.  This\n-   effectively completes initialization.\n-\n \n    Limitations:\n    * This condvar isn't designed to allow for more than\n@@ -440,21 +412,6 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n \t  if ((int)(signals - lowseq) >= 2)\n \t    break;\n \n-\t  /* No signals available after spinning, so prepare to block.\n-\t     We first acquire a group reference and use acquire MO for that so\n-\t     that we synchronize with the dummy read-modify-write in\n-\t     __condvar_quiesce_and_switch_g1 if we read from that.  In turn,\n-\t     in this case this will make us see the advancement of __g_signals\n-\t     to the upcoming new g1_start that occurs with a concurrent\n-\t     attempt to reuse the group's slot.\n-\t     We use acquire MO for the __g_signals check to make the\n-\t     __g1_start check work (see spinning above).\n-\t     Note that the group reference acquisition will not mask the\n-\t     release MO when decrementing the reference count because we use\n-\t     an atomic read-modify-write operation and thus extend the release\n-\t     sequence.  */\n-\t  atomic_fetch_add_acquire (cond->__data.__g_refs + g, 2);\n-\n \t  // Now block.\n \t  struct _pthread_cleanup_buffer buffer;\n \t  struct _condvar_cleanup_buffer cbuffer;\n@@ -471,18 +428,11 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n \n \t  if (__glibc_unlikely (err == ETIMEDOUT || err == EOVERFLOW))\n \t    {\n-\t      __condvar_dec_grefs (cond, g, private);\n-\t      /* If we timed out, we effectively cancel waiting.  Note that\n-\t\t we have decremented __g_refs before cancellation, so that a\n-\t\t deadlock between waiting for quiescence of our group in\n-\t\t __condvar_quiesce_and_switch_g1 and us trying to acquire\n-\t\t the lock during cancellation is not possible.  */\n+\t      /* If we timed out, we effectively cancel waiting.  */\n \t      __condvar_cancel_waiting (cond, seq, g, private);\n \t      result = err;\n \t      goto done;\n \t    }\n-\t  else\n-\t    __condvar_dec_grefs (cond, g, private);\n \n \t  /* Reload signals.  See above for MO.  */\n \t  signals = atomic_load_acquire (cond->__data.__g_signals + g);\ndiff --git a/nptl/tst-cond22.c b/nptl/tst-cond22.c\nindex 1336e9c79d..bdcb45c536 100644\n--- a/nptl/tst-cond22.c\n+++ b/nptl/tst-cond22.c\n@@ -106,13 +106,13 @@ do_test (void)\n       status = 1;\n     }\n \n-  printf (\"cond = { 0x%x:%x, 0x%x:%x, %u/%u/%u, %u/%u/%u, %u, %u }\\n\",\n+  printf (\"cond = { 0x%x:%x, 0x%x:%x, %u/%u, %u/%u, %u, %u }\\n\",\n \t  c.__data.__wseq.__value32.__high,\n \t  c.__data.__wseq.__value32.__low,\n \t  c.__data.__g1_start.__value32.__high,\n \t  c.__data.__g1_start.__value32.__low,\n-\t  c.__data.__g_signals[0], c.__data.__g_refs[0], c.__data.__g_size[0],\n-\t  c.__data.__g_signals[1], c.__data.__g_refs[1], c.__data.__g_size[1],\n+\t  c.__data.__g_signals[0], c.__data.__g_size[0],\n+\t  c.__data.__g_signals[1], c.__data.__g_size[1],\n \t  c.__data.__g1_orig_size, c.__data.__wrefs);\n \n   if (pthread_create (&th, NULL, tf, (void *) 1l) != 0)\n@@ -152,13 +152,13 @@ do_test (void)\n       status = 1;\n     }\n \n-  printf (\"cond = { 0x%x:%x, 0x%x:%x, %u/%u/%u, %u/%u/%u, %u, %u }\\n\",\n+  printf (\"cond = { 0x%x:%x, 0x%x:%x, %u/%u, %u/%u, %u, %u }\\n\",\n \t  c.__data.__wseq.__value32.__high,\n \t  c.__data.__wseq.__value32.__low,\n \t  c.__data.__g1_start.__value32.__high,\n \t  c.__data.__g1_start.__value32.__low,\n-\t  c.__data.__g_signals[0], c.__data.__g_refs[0], c.__data.__g_size[0],\n-\t  c.__data.__g_signals[1], c.__data.__g_refs[1], c.__data.__g_size[1],\n+\t  c.__data.__g_signals[0], c.__data.__g_size[0],\n+\t  c.__data.__g_signals[1], c.__data.__g_size[1],\n \t  c.__data.__g1_orig_size, c.__data.__wrefs);\n \n   return status;\ndiff --git a/sysdeps/nptl/bits/thread-shared-types.h b/sysdeps/nptl/bits/thread-shared-types.h\nindex df54eef6f7..a3d482f80f 100644\n--- a/sysdeps/nptl/bits/thread-shared-types.h\n+++ b/sysdeps/nptl/bits/thread-shared-types.h\n@@ -95,8 +95,7 @@ struct __pthread_cond_s\n {\n   __atomic_wide_counter __wseq;\n   __atomic_wide_counter __g1_start;\n-  unsigned int __g_refs[2] __LOCK_ALIGNMENT;\n-  unsigned int __g_size[2];\n+  unsigned int __g_size[2] __LOCK_ALIGNMENT;\n   unsigned int __g1_orig_size;\n   unsigned int __wrefs;\n   unsigned int __g_signals[2];\ndiff --git a/sysdeps/nptl/pthread.h b/sysdeps/nptl/pthread.h\nindex 3d4f4a756c..9af75d6eae 100644\n--- a/sysdeps/nptl/pthread.h\n+++ b/sysdeps/nptl/pthread.h\n@@ -152,7 +152,7 @@ enum\n \n \n /* Conditional variable handling.  */\n-#define PTHREAD_COND_INITIALIZER { { {0}, {0}, {0, 0}, {0, 0}, 0, 0, {0, 0} } }\n+#define PTHREAD_COND_INITIALIZER { { {0}, {0}, {0, 0}, 0, 0, {0, 0} } }\n \n \n /* Cleanup buffers */\n\ncommit fa110993a6390ae5c97dff613ef02b59ec78c5da\nAuthor: Malte Skarupke <malteskarupke@fastmail.fm>\nDate:   Wed Dec 4 08:03:44 2024 -0500\n\n    nptl: Use a single loop in pthread_cond_wait instaed of a nested loop\n    \n    The loop was a little more complicated than necessary. There was only one\n    break statement out of the inner loop, and the outer loop was nearly empty.\n    So just remove the outer loop, moving its code to the one break statement in\n    the inner loop. This allows us to replace all gotos with break statements.\n    \n    Signed-off-by: Malte Skarupke <malteskarupke@fastmail.fm>\n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit 929a4764ac90382616b6a21f099192b2475da674)\n\ndiff --git a/nptl/pthread_cond_wait.c b/nptl/pthread_cond_wait.c\nindex 411fc0380b..683cb2b133 100644\n--- a/nptl/pthread_cond_wait.c\n+++ b/nptl/pthread_cond_wait.c\n@@ -382,17 +382,15 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n       return err;\n     }\n \n-  /* Now wait until a signal is available in our group or it is closed.\n-     Acquire MO so that if we observe (signals == lowseq) after group\n-     switching in __condvar_quiesce_and_switch_g1, we synchronize with that\n-     store and will see the prior update of __g1_start done while switching\n-     groups too.  */\n-  unsigned int signals = atomic_load_acquire (cond->__data.__g_signals + g);\n-\n-  do\n-    {\n+\n       while (1)\n \t{\n+\t  /* Now wait until a signal is available in our group or it is closed.\n+\t     Acquire MO so that if we observe (signals == lowseq) after group\n+\t     switching in __condvar_quiesce_and_switch_g1, we synchronize with that\n+\t     store and will see the prior update of __g1_start done while switching\n+\t     groups too.  */\n+\t  unsigned int signals = atomic_load_acquire (cond->__data.__g_signals + g);\n \t  uint64_t g1_start = __condvar_load_g1_start_relaxed (cond);\n \t  unsigned int lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n \n@@ -401,7 +399,7 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n \t      /* If the group is closed already,\n \t         then this waiter originally had enough extra signals to\n \t         consume, up until the time its group was closed.  */\n-\t       goto done;\n+\t       break;\n \t    }\n \n \t  /* If there is an available signal, don't block.\n@@ -410,7 +408,16 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n \t     G2, but in either case we're allowed to consume the available\n \t     signal and should not block anymore.  */\n \t  if ((int)(signals - lowseq) >= 2)\n-\t    break;\n+\t    {\n+\t      /* Try to grab a signal.  See above for MO.  (if we do another loop\n+\t\t iteration we need to see the correct value of g1_start)  */\n+\t\t      if (atomic_compare_exchange_weak_acquire (\n+\t\t      \t\tcond->__data.__g_signals + g,\n+\t\t\t&signals, signals - 2))\n+\t\t      \tbreak;\n+\t\t      else\n+\t\t      \tcontinue;\n+\t    }\n \n \t  // Now block.\n \t  struct _pthread_cleanup_buffer buffer;\n@@ -431,19 +438,9 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n \t      /* If we timed out, we effectively cancel waiting.  */\n \t      __condvar_cancel_waiting (cond, seq, g, private);\n \t      result = err;\n-\t      goto done;\n+\t      break;\n \t    }\n-\n-\t  /* Reload signals.  See above for MO.  */\n-\t  signals = atomic_load_acquire (cond->__data.__g_signals + g);\n \t}\n-    }\n-  /* Try to grab a signal.  See above for MO.  (if we do another loop\n-     iteration we need to see the correct value of g1_start)  */\n-  while (!atomic_compare_exchange_weak_acquire (cond->__data.__g_signals + g,\n-\t\t\t\t\t\t&signals, signals - 2));\n-\n- done:\n \n   /* Confirm that we have been woken.  We do that before acquiring the mutex\n      to allow for execution of pthread_cond_destroy while having acquired the\n\ncommit afbf0d46850dcd1b626d892ad8fde2162067ddc7\nAuthor: Malte Skarupke <malteskarupke@fastmail.fm>\nDate:   Wed Dec 4 08:04:10 2024 -0500\n\n    nptl: Fix indentation\n    \n    In my previous change I turned a nested loop into a simple loop. I'm doing\n    the resulting indentation changes in a separate commit to make the diff on\n    the previous commit easier to review.\n    \n    Signed-off-by: Malte Skarupke <malteskarupke@fastmail.fm>\n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit ee6c14ed59d480720721aaacc5fb03213dc153da)\n\ndiff --git a/nptl/pthread_cond_wait.c b/nptl/pthread_cond_wait.c\nindex 683cb2b133..7fc9dadf15 100644\n--- a/nptl/pthread_cond_wait.c\n+++ b/nptl/pthread_cond_wait.c\n@@ -383,65 +383,65 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n     }\n \n \n-      while (1)\n-\t{\n-\t  /* Now wait until a signal is available in our group or it is closed.\n-\t     Acquire MO so that if we observe (signals == lowseq) after group\n-\t     switching in __condvar_quiesce_and_switch_g1, we synchronize with that\n-\t     store and will see the prior update of __g1_start done while switching\n-\t     groups too.  */\n-\t  unsigned int signals = atomic_load_acquire (cond->__data.__g_signals + g);\n-\t  uint64_t g1_start = __condvar_load_g1_start_relaxed (cond);\n-\t  unsigned int lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n-\n-\t  if (seq < (g1_start >> 1))\n-\t    {\n-\t      /* If the group is closed already,\n-\t         then this waiter originally had enough extra signals to\n-\t         consume, up until the time its group was closed.  */\n-\t       break;\n-\t    }\n-\n-\t  /* If there is an available signal, don't block.\n-\t     If __g1_start has advanced at all, then we must be in G1\n-\t     by now, perhaps in the process of switching back to an older\n-\t     G2, but in either case we're allowed to consume the available\n-\t     signal and should not block anymore.  */\n-\t  if ((int)(signals - lowseq) >= 2)\n-\t    {\n-\t      /* Try to grab a signal.  See above for MO.  (if we do another loop\n-\t\t iteration we need to see the correct value of g1_start)  */\n-\t\t      if (atomic_compare_exchange_weak_acquire (\n-\t\t      \t\tcond->__data.__g_signals + g,\n+  while (1)\n+    {\n+      /* Now wait until a signal is available in our group or it is closed.\n+         Acquire MO so that if we observe (signals == lowseq) after group\n+         switching in __condvar_quiesce_and_switch_g1, we synchronize with that\n+         store and will see the prior update of __g1_start done while switching\n+         groups too.  */\n+      unsigned int signals = atomic_load_acquire (cond->__data.__g_signals + g);\n+      uint64_t g1_start = __condvar_load_g1_start_relaxed (cond);\n+      unsigned int lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n+\n+      if (seq < (g1_start >> 1))\n+        {\n+          /* If the group is closed already,\n+             then this waiter originally had enough extra signals to\n+             consume, up until the time its group was closed.  */\n+           break;\n+        }\n+\n+      /* If there is an available signal, don't block.\n+         If __g1_start has advanced at all, then we must be in G1\n+         by now, perhaps in the process of switching back to an older\n+         G2, but in either case we're allowed to consume the available\n+         signal and should not block anymore.  */\n+      if ((int)(signals - lowseq) >= 2)\n+        {\n+\t  /* Try to grab a signal.  See above for MO.  (if we do another loop\n+\t     iteration we need to see the correct value of g1_start)  */\n+\t    if (atomic_compare_exchange_weak_acquire (\n+\t\t\tcond->__data.__g_signals + g,\n \t\t\t&signals, signals - 2))\n-\t\t      \tbreak;\n-\t\t      else\n-\t\t      \tcontinue;\n-\t    }\n-\n-\t  // Now block.\n-\t  struct _pthread_cleanup_buffer buffer;\n-\t  struct _condvar_cleanup_buffer cbuffer;\n-\t  cbuffer.wseq = wseq;\n-\t  cbuffer.cond = cond;\n-\t  cbuffer.mutex = mutex;\n-\t  cbuffer.private = private;\n-\t  __pthread_cleanup_push (&buffer, __condvar_cleanup_waiting, &cbuffer);\n-\n-\t  err = __futex_abstimed_wait_cancelable64 (\n-\t    cond->__data.__g_signals + g, signals, clockid, abstime, private);\n-\n-\t  __pthread_cleanup_pop (&buffer, 0);\n-\n-\t  if (__glibc_unlikely (err == ETIMEDOUT || err == EOVERFLOW))\n-\t    {\n-\t      /* If we timed out, we effectively cancel waiting.  */\n-\t      __condvar_cancel_waiting (cond, seq, g, private);\n-\t      result = err;\n \t      break;\n-\t    }\n+\t    else\n+\t      continue;\n \t}\n \n+      // Now block.\n+      struct _pthread_cleanup_buffer buffer;\n+      struct _condvar_cleanup_buffer cbuffer;\n+      cbuffer.wseq = wseq;\n+      cbuffer.cond = cond;\n+      cbuffer.mutex = mutex;\n+      cbuffer.private = private;\n+      __pthread_cleanup_push (&buffer, __condvar_cleanup_waiting, &cbuffer);\n+\n+      err = __futex_abstimed_wait_cancelable64 (\n+        cond->__data.__g_signals + g, signals, clockid, abstime, private);\n+\n+      __pthread_cleanup_pop (&buffer, 0);\n+\n+      if (__glibc_unlikely (err == ETIMEDOUT || err == EOVERFLOW))\n+        {\n+          /* If we timed out, we effectively cancel waiting.  */\n+          __condvar_cancel_waiting (cond, seq, g, private);\n+          result = err;\n+          break;\n+        }\n+    }\n+\n   /* Confirm that we have been woken.  We do that before acquiring the mutex\n      to allow for execution of pthread_cond_destroy while having acquired the\n      mutex.  */\n\ncommit 2ad69497346cc20ef4d568108f1de49b2f451c55\nAuthor: Malte Skarupke <malteskarupke@fastmail.fm>\nDate:   Wed Dec 4 08:04:54 2024 -0500\n\n    nptl: rename __condvar_quiesce_and_switch_g1\n    \n    This function no longer waits for threads to leave g1, so rename it to\n    __condvar_switch_g1\n    \n    Signed-off-by: Malte Skarupke <malteskarupke@fastmail.fm>\n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit 4b79e27a5073c02f6bff9aa8f4791230a0ab1867)\n\ndiff --git a/nptl/pthread_cond_broadcast.c b/nptl/pthread_cond_broadcast.c\nindex aada91639a..38bba17bfc 100644\n--- a/nptl/pthread_cond_broadcast.c\n+++ b/nptl/pthread_cond_broadcast.c\n@@ -60,7 +60,7 @@ ___pthread_cond_broadcast (pthread_cond_t *cond)\n \t\t\t\tcond->__data.__g_size[g1] << 1);\n       cond->__data.__g_size[g1] = 0;\n \n-      /* We need to wake G1 waiters before we quiesce G1 below.  */\n+      /* We need to wake G1 waiters before we switch G1 below.  */\n       /* TODO Only set it if there are indeed futex waiters.  We could\n \t also try to move this out of the critical section in cases when\n \t G2 is empty (and we don't need to quiesce).  */\n@@ -69,7 +69,7 @@ ___pthread_cond_broadcast (pthread_cond_t *cond)\n \n   /* G1 is complete.  Step (2) is next unless there are no waiters in G2, in\n      which case we can stop.  */\n-  if (__condvar_quiesce_and_switch_g1 (cond, wseq, &g1, private))\n+  if (__condvar_switch_g1 (cond, wseq, &g1, private))\n     {\n       /* Step (3): Send signals to all waiters in the old G2 / new G1.  */\n       atomic_fetch_add_relaxed (cond->__data.__g_signals + g1,\ndiff --git a/nptl/pthread_cond_common.c b/nptl/pthread_cond_common.c\nindex 30b8eee149..5044273cc2 100644\n--- a/nptl/pthread_cond_common.c\n+++ b/nptl/pthread_cond_common.c\n@@ -189,16 +189,15 @@ __condvar_get_private (int flags)\n     return FUTEX_SHARED;\n }\n \n-/* This closes G1 (whose index is in G1INDEX), waits for all futex waiters to\n-   leave G1, converts G1 into a fresh G2, and then switches group roles so that\n-   the former G2 becomes the new G1 ending at the current __wseq value when we\n-   eventually make the switch (WSEQ is just an observation of __wseq by the\n-   signaler).\n+/* This closes G1 (whose index is in G1INDEX), converts G1 into a fresh G2,\n+   and then switches group roles so that the former G2 becomes the new G1\n+   ending at the current __wseq value when we eventually make the switch\n+   (WSEQ is just an observation of __wseq by the signaler).\n    If G2 is empty, it will not switch groups because then it would create an\n    empty G1 which would require switching groups again on the next signal.\n    Returns false iff groups were not switched because G2 was empty.  */\n static bool __attribute__ ((unused))\n-__condvar_quiesce_and_switch_g1 (pthread_cond_t *cond, uint64_t wseq,\n+__condvar_switch_g1 (pthread_cond_t *cond, uint64_t wseq,\n     unsigned int *g1index, int private)\n {\n   unsigned int g1 = *g1index;\n@@ -214,8 +213,7 @@ __condvar_quiesce_and_switch_g1 (pthread_cond_t *cond, uint64_t wseq,\n \t  + cond->__data.__g_size[g1 ^ 1]) == 0)\n \treturn false;\n \n-  /* Now try to close and quiesce G1.  We have to consider the following kinds\n-     of waiters:\n+  /* We have to consider the following kinds of waiters:\n      * Waiters from less recent groups than G1 are not affected because\n        nothing will change for them apart from __g1_start getting larger.\n      * New waiters arriving concurrently with the group switching will all go\n@@ -223,12 +221,12 @@ __condvar_quiesce_and_switch_g1 (pthread_cond_t *cond, uint64_t wseq,\n        are not affected.\n      * Waiters in G1 have already received a signal and been woken.  */\n \n-  /* Update __g1_start, which finishes closing this group.  The value we add\n-     will never be negative because old_orig_size can only be zero when we\n-     switch groups the first time after a condvar was initialized, in which\n-     case G1 will be at index 1 and we will add a value of 1.\n-     Relaxed MO is fine because the change comes with no additional\n-     constraints that others would have to observe.  */\n+  /* Update __g1_start, which closes this group.  The value we add will never\n+     be negative because old_orig_size can only be zero when we switch groups\n+     the first time after a condvar was initialized, in which case G1 will be\n+     at index 1 and we will add a value of 1. Relaxed MO is fine because the\n+     change comes with no additional constraints that others would have to\n+     observe.  */\n   __condvar_add_g1_start_relaxed (cond,\n       (old_orig_size << 1) + (g1 == 1 ? 1 : - 1));\n \ndiff --git a/nptl/pthread_cond_signal.c b/nptl/pthread_cond_signal.c\nindex 43d6286ecd..f095497142 100644\n--- a/nptl/pthread_cond_signal.c\n+++ b/nptl/pthread_cond_signal.c\n@@ -69,18 +69,17 @@ ___pthread_cond_signal (pthread_cond_t *cond)\n   bool do_futex_wake = false;\n \n   /* If G1 is still receiving signals, we put the signal there.  If not, we\n-     check if G2 has waiters, and if so, quiesce and switch G1 to the former\n-     G2; if this results in a new G1 with waiters (G2 might have cancellations\n-     already, see __condvar_quiesce_and_switch_g1), we put the signal in the\n-     new G1.  */\n+     check if G2 has waiters, and if so, switch G1 to the former G2; if this\n+     results in a new G1 with waiters (G2 might have cancellations already,\n+     see __condvar_switch_g1), we put the signal in the new G1. */\n   if ((cond->__data.__g_size[g1] != 0)\n-      || __condvar_quiesce_and_switch_g1 (cond, wseq, &g1, private))\n+      || __condvar_switch_g1 (cond, wseq, &g1, private))\n     {\n       /* Add a signal.  Relaxed MO is fine because signaling does not need to\n-\t establish a happens-before relation (see above).  We do not mask the\n-\t release-MO store when initializing a group in\n-\t __condvar_quiesce_and_switch_g1 because we use an atomic\n-\t read-modify-write and thus extend that store's release sequence.  */\n+         establish a happens-before relation (see above).  We do not mask the\n+         release-MO store when initializing a group in __condvar_switch_g1\n+         because we use an atomic read-modify-write and thus extend that\n+         store's release sequence.  */\n       atomic_fetch_add_relaxed (cond->__data.__g_signals + g1, 2);\n       cond->__data.__g_size[g1]--;\n       /* TODO Only set it if there are indeed futex waiters.  */\ndiff --git a/nptl/pthread_cond_wait.c b/nptl/pthread_cond_wait.c\nindex 7fc9dadf15..80bb728211 100644\n--- a/nptl/pthread_cond_wait.c\n+++ b/nptl/pthread_cond_wait.c\n@@ -354,8 +354,7 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n      because we do not need to establish any happens-before relation with\n      signalers (see __pthread_cond_signal); modification order alone\n      establishes a total order of waiters/signals.  We do need acquire MO\n-     to synchronize with group reinitialization in\n-     __condvar_quiesce_and_switch_g1.  */\n+     to synchronize with group reinitialization in __condvar_switch_g1.  */\n   uint64_t wseq = __condvar_fetch_add_wseq_acquire (cond, 2);\n   /* Find our group's index.  We always go into what was G2 when we acquired\n      our position.  */\n@@ -387,9 +386,9 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n     {\n       /* Now wait until a signal is available in our group or it is closed.\n          Acquire MO so that if we observe (signals == lowseq) after group\n-         switching in __condvar_quiesce_and_switch_g1, we synchronize with that\n-         store and will see the prior update of __g1_start done while switching\n-         groups too.  */\n+         switching in __condvar_switch_g1, we synchronize with that store and\n+         will see the prior update of __g1_start done while switching groups\n+         too.  */\n       unsigned int signals = atomic_load_acquire (cond->__data.__g_signals + g);\n       uint64_t g1_start = __condvar_load_g1_start_relaxed (cond);\n       unsigned int lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n\ncommit 7f71824b8039b8afc150dd5c881b61faf10675ef\nAuthor: Malte Skarupke <malteskarupke@fastmail.fm>\nDate:   Wed Dec 4 08:05:40 2024 -0500\n\n    nptl: Use all of g1_start and g_signals\n    \n    The LSB of g_signals was unused. The LSB of g1_start was used to indicate\n    which group is G2. This was used to always go to sleep in pthread_cond_wait\n    if a waiter is in G2. A comment earlier in the file says that this is not\n    correct to do:\n    \n     \"Waiters cannot determine whether they are currently in G2 or G1 -- but they\n      do not have to because all they are interested in is whether there are\n      available signals\"\n    \n    I either would have had to update the comment, or get rid of the check. I\n    chose to get rid of the check. In fact I don't quite know why it was there.\n    There will never be available signals for group G2, so we didn't need the\n    special case. Even if there were, this would just be a spurious wake. This\n    might have caught some cases where the count has wrapped around, but it\n    wouldn't reliably do that, (and even if it did, why would you want to force a\n    sleep in that case?) and we don't support that many concurrent waiters\n    anyway. Getting rid of it allows us to use one more bit, making us more\n    robust to wraparound.\n    \n    Signed-off-by: Malte Skarupke <malteskarupke@fastmail.fm>\n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit 91bb902f58264a2fd50fbce8f39a9a290dd23706)\n\ndiff --git a/nptl/pthread_cond_broadcast.c b/nptl/pthread_cond_broadcast.c\nindex 38bba17bfc..51afa62adf 100644\n--- a/nptl/pthread_cond_broadcast.c\n+++ b/nptl/pthread_cond_broadcast.c\n@@ -57,7 +57,7 @@ ___pthread_cond_broadcast (pthread_cond_t *cond)\n     {\n       /* Add as many signals as the remaining size of the group.  */\n       atomic_fetch_add_relaxed (cond->__data.__g_signals + g1,\n-\t\t\t\tcond->__data.__g_size[g1] << 1);\n+\t\t\t\tcond->__data.__g_size[g1]);\n       cond->__data.__g_size[g1] = 0;\n \n       /* We need to wake G1 waiters before we switch G1 below.  */\n@@ -73,7 +73,7 @@ ___pthread_cond_broadcast (pthread_cond_t *cond)\n     {\n       /* Step (3): Send signals to all waiters in the old G2 / new G1.  */\n       atomic_fetch_add_relaxed (cond->__data.__g_signals + g1,\n-\t\t\t\tcond->__data.__g_size[g1] << 1);\n+\t\t\t\tcond->__data.__g_size[g1]);\n       cond->__data.__g_size[g1] = 0;\n       /* TODO Only set it if there are indeed futex waiters.  */\n       do_futex_wake = true;\ndiff --git a/nptl/pthread_cond_common.c b/nptl/pthread_cond_common.c\nindex 5044273cc2..389402913c 100644\n--- a/nptl/pthread_cond_common.c\n+++ b/nptl/pthread_cond_common.c\n@@ -208,9 +208,9 @@ __condvar_switch_g1 (pthread_cond_t *cond, uint64_t wseq,\n      behavior.\n      Note that this works correctly for a zero-initialized condvar too.  */\n   unsigned int old_orig_size = __condvar_get_orig_size (cond);\n-  uint64_t old_g1_start = __condvar_load_g1_start_relaxed (cond) >> 1;\n-  if (((unsigned) (wseq - old_g1_start - old_orig_size)\n-\t  + cond->__data.__g_size[g1 ^ 1]) == 0)\n+  uint64_t old_g1_start = __condvar_load_g1_start_relaxed (cond);\n+  uint64_t new_g1_start = old_g1_start + old_orig_size;\n+  if (((unsigned) (wseq - new_g1_start) + cond->__data.__g_size[g1 ^ 1]) == 0)\n \treturn false;\n \n   /* We have to consider the following kinds of waiters:\n@@ -221,16 +221,10 @@ __condvar_switch_g1 (pthread_cond_t *cond, uint64_t wseq,\n        are not affected.\n      * Waiters in G1 have already received a signal and been woken.  */\n \n-  /* Update __g1_start, which closes this group.  The value we add will never\n-     be negative because old_orig_size can only be zero when we switch groups\n-     the first time after a condvar was initialized, in which case G1 will be\n-     at index 1 and we will add a value of 1. Relaxed MO is fine because the\n-     change comes with no additional constraints that others would have to\n-     observe.  */\n-  __condvar_add_g1_start_relaxed (cond,\n-      (old_orig_size << 1) + (g1 == 1 ? 1 : - 1));\n-\n-  unsigned int lowseq = ((old_g1_start + old_orig_size) << 1) & ~1U;\n+  /* Update __g1_start, which closes this group.  Relaxed MO is fine because\n+     the change comes with no additional constraints that others would have\n+     to observe.  */\n+  __condvar_add_g1_start_relaxed (cond, old_orig_size);\n \n   /* At this point, the old G1 is now a valid new G2 (but not in use yet).\n      No old waiter can neither grab a signal nor acquire a reference without\n@@ -242,13 +236,13 @@ __condvar_switch_g1 (pthread_cond_t *cond, uint64_t wseq,\n   g1 ^= 1;\n   *g1index ^= 1;\n \n-  /* Now advance the new G1 g_signals to the new lowseq, giving it\n+  /* Now advance the new G1 g_signals to the new g1_start, giving it\n      an effective signal count of 0 to start.  */\n-  atomic_store_release (cond->__data.__g_signals + g1, lowseq);\n+  atomic_store_release (cond->__data.__g_signals + g1, (unsigned)new_g1_start);\n \n   /* These values are just observed by signalers, and thus protected by the\n      lock.  */\n-  unsigned int orig_size = wseq - (old_g1_start + old_orig_size);\n+  unsigned int orig_size = wseq - new_g1_start;\n   __condvar_set_orig_size (cond, orig_size);\n   /* Use and addition to not loose track of cancellations in what was\n      previously G2.  */\ndiff --git a/nptl/pthread_cond_signal.c b/nptl/pthread_cond_signal.c\nindex f095497142..fa3a5c3d8f 100644\n--- a/nptl/pthread_cond_signal.c\n+++ b/nptl/pthread_cond_signal.c\n@@ -80,7 +80,7 @@ ___pthread_cond_signal (pthread_cond_t *cond)\n          release-MO store when initializing a group in __condvar_switch_g1\n          because we use an atomic read-modify-write and thus extend that\n          store's release sequence.  */\n-      atomic_fetch_add_relaxed (cond->__data.__g_signals + g1, 2);\n+      atomic_fetch_add_relaxed (cond->__data.__g_signals + g1, 1);\n       cond->__data.__g_size[g1]--;\n       /* TODO Only set it if there are indeed futex waiters.  */\n       do_futex_wake = true;\ndiff --git a/nptl/pthread_cond_wait.c b/nptl/pthread_cond_wait.c\nindex 80bb728211..0f1dfcb595 100644\n--- a/nptl/pthread_cond_wait.c\n+++ b/nptl/pthread_cond_wait.c\n@@ -84,7 +84,7 @@ __condvar_cancel_waiting (pthread_cond_t *cond, uint64_t seq, unsigned int g,\n      not hold a reference on the group.  */\n   __condvar_acquire_lock (cond, private);\n \n-  uint64_t g1_start = __condvar_load_g1_start_relaxed (cond) >> 1;\n+  uint64_t g1_start = __condvar_load_g1_start_relaxed (cond);\n   if (g1_start > seq)\n     {\n       /* Our group is closed, so someone provided enough signals for it.\n@@ -259,7 +259,6 @@ __condvar_cleanup_waiting (void *arg)\n      * Waiters fetch-add while having acquire the mutex associated with the\n        condvar.  Signalers load it and fetch-xor it concurrently.\n    __g1_start: Starting position of G1 (inclusive)\n-     * LSB is index of current G2.\n      * Modified by signalers while having acquired the condvar-internal lock\n        and observed concurrently by waiters.\n    __g1_orig_size: Initial size of G1\n@@ -280,11 +279,9 @@ __condvar_cleanup_waiting (void *arg)\n      * Reference count used by waiters concurrently with signalers that have\n        acquired the condvar-internal lock.\n    __g_signals: The number of signals that can still be consumed, relative to\n-     the current g1_start.  (i.e. bits 31 to 1 of __g_signals are bits\n-     31 to 1 of g1_start with the signal count added)\n+     the current g1_start.  (i.e. g1_start with the signal count added)\n      * Used as a futex word by waiters.  Used concurrently by waiters and\n        signalers.\n-     * LSB is currently reserved and 0.\n    __g_size: Waiters remaining in this group (i.e., which have not been\n      signaled yet.\n      * Accessed by signalers and waiters that cancel waiting (both do so only\n@@ -391,9 +388,8 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n          too.  */\n       unsigned int signals = atomic_load_acquire (cond->__data.__g_signals + g);\n       uint64_t g1_start = __condvar_load_g1_start_relaxed (cond);\n-      unsigned int lowseq = (g1_start & 1) == g ? signals : g1_start & ~1U;\n \n-      if (seq < (g1_start >> 1))\n+      if (seq < g1_start)\n         {\n           /* If the group is closed already,\n              then this waiter originally had enough extra signals to\n@@ -406,13 +402,13 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,\n          by now, perhaps in the process of switching back to an older\n          G2, but in either case we're allowed to consume the available\n          signal and should not block anymore.  */\n-      if ((int)(signals - lowseq) >= 2)\n+      if ((int)(signals - (unsigned int)g1_start) > 0)\n         {\n \t  /* Try to grab a signal.  See above for MO.  (if we do another loop\n \t     iteration we need to see the correct value of g1_start)  */\n \t    if (atomic_compare_exchange_weak_acquire (\n \t\t\tcond->__data.__g_signals + g,\n-\t\t\t&signals, signals - 2))\n+\t\t\t&signals, signals - 1))\n \t      break;\n \t    else\n \t      continue;\n\ncommit 8d3dd23e3de8b4c6e4b94f8bbfab971c3b8a55be\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Thu Mar 13 06:07:07 2025 +0100\n\n    nptl: PTHREAD_COND_INITIALIZER compatibility with pre-2.41 versions (bug 32786)\n    \n    The new initializer and struct layout does not initialize the\n    __g_signals field in the old struct layout before the change in\n    commit c36fc50781995e6758cae2b6927839d0157f213c (\"nptl: Remove\n    g_refs from condition variables\").  Bring back fields at the end\n    of struct __pthread_cond_s, so that they are again zero-initialized.\n    \n    Reviewed-by: Sam James <sam@gentoo.org>\n\ndiff --git a/sysdeps/nptl/bits/thread-shared-types.h b/sysdeps/nptl/bits/thread-shared-types.h\nindex a3d482f80f..bccc2003ec 100644\n--- a/sysdeps/nptl/bits/thread-shared-types.h\n+++ b/sysdeps/nptl/bits/thread-shared-types.h\n@@ -99,6 +99,8 @@ struct __pthread_cond_s\n   unsigned int __g1_orig_size;\n   unsigned int __wrefs;\n   unsigned int __g_signals[2];\n+  unsigned int __unused_initialized_1;\n+  unsigned int __unused_initialized_2;\n };\n \n typedef unsigned int __tss_t;\ndiff --git a/sysdeps/nptl/pthread.h b/sysdeps/nptl/pthread.h\nindex 9af75d6eae..e0f24418fe 100644\n--- a/sysdeps/nptl/pthread.h\n+++ b/sysdeps/nptl/pthread.h\n@@ -152,7 +152,7 @@ enum\n \n \n /* Conditional variable handling.  */\n-#define PTHREAD_COND_INITIALIZER { { {0}, {0}, {0, 0}, 0, 0, {0, 0} } }\n+#define PTHREAD_COND_INITIALIZER { { {0}, {0}, {0, 0}, 0, 0, {0, 0}, 0, 0 } }\n \n \n /* Cleanup buffers */\n\ncommit 33b33e9dd0ff26158b1b83cc4347a39c073e490e\nAuthor: Arjun Shankar <arjun@redhat.com>\nDate:   Fri Oct 18 16:03:25 2024 +0200\n\n    libio: Fix a deadlock after fork in popen\n    \n    popen modifies its file handler book-keeping under a lock that wasn't\n    being taken during fork.  This meant that a concurrent popen and fork\n    could end up copying the lock in a \"locked\" state into the fork child,\n    where subsequently calling popen would lead to a deadlock due to the\n    already (spuriously) held lock.\n    \n    This commit fixes the deadlock by appropriately taking the lock before\n    fork, and releasing/resetting it in the parent/child after the fork.\n    \n    A new test for concurrent popen and fork is also added.  It consistently\n    hangs (and therefore fails via timeout) without the fix applied.\n    Reviewed-by: Florian Weimer <fweimer@redhat.com>\n    \n    (cherry picked from commit 9f0d2c0ee6c728643fcf9a4879e9f20f5e45ce5f)\n\ndiff --git a/libio/Makefile b/libio/Makefile\nindex 5292baa4e0..7faba230ac 100644\n--- a/libio/Makefile\n+++ b/libio/Makefile\n@@ -117,6 +117,7 @@ tests = \\\n   tst-mmap-offend \\\n   tst-mmap-setvbuf \\\n   tst-mmap2-eofsync \\\n+  tst-popen-fork \\\n   tst-popen1 \\\n   tst-setvbuf1 \\\n   tst-sprintf-chk-ub \\\ndiff --git a/libio/iopopen.c b/libio/iopopen.c\nindex d01cb0648e..352513a291 100644\n--- a/libio/iopopen.c\n+++ b/libio/iopopen.c\n@@ -57,6 +57,26 @@ unlock (void *not_used)\n }\n #endif\n \n+/* These lock/unlock/resetlock functions are used during fork.  */\n+\n+void\n+_IO_proc_file_chain_lock (void)\n+{\n+  _IO_lock_lock (proc_file_chain_lock);\n+}\n+\n+void\n+_IO_proc_file_chain_unlock (void)\n+{\n+  _IO_lock_unlock (proc_file_chain_lock);\n+}\n+\n+void\n+_IO_proc_file_chain_resetlock (void)\n+{\n+  _IO_lock_init (proc_file_chain_lock);\n+}\n+\n /* POSIX states popen shall ensure that any streams from previous popen()\n    calls that remain open in the parent process should be closed in the new\n    child process.\ndiff --git a/libio/libioP.h b/libio/libioP.h\nindex 616253fcd0..a83a411fdf 100644\n--- a/libio/libioP.h\n+++ b/libio/libioP.h\n@@ -429,6 +429,12 @@ libc_hidden_proto (_IO_list_resetlock)\n extern void _IO_enable_locks (void) __THROW;\n libc_hidden_proto (_IO_enable_locks)\n \n+/* Functions for operating popen's proc_file_chain_lock during fork.  */\n+\n+extern void _IO_proc_file_chain_lock (void) __THROW attribute_hidden;\n+extern void _IO_proc_file_chain_unlock (void) __THROW attribute_hidden;\n+extern void _IO_proc_file_chain_resetlock (void) __THROW attribute_hidden;\n+\n /* Default jumptable functions. */\n \n extern int _IO_default_underflow (FILE *) __THROW;\ndiff --git a/libio/tst-popen-fork.c b/libio/tst-popen-fork.c\nnew file mode 100644\nindex 0000000000..1df30fc6c0\n--- /dev/null\n+++ b/libio/tst-popen-fork.c\n@@ -0,0 +1,80 @@\n+/* Test concurrent popen and fork.\n+   Copyright (C) 2024 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <stdio.h>\n+#include <stdatomic.h>\n+#include <pthread.h>\n+#include <unistd.h>\n+#include <sys/wait.h>\n+\n+#include <support/check.h>\n+#include <support/xthread.h>\n+#include <support/xunistd.h>\n+\n+static void\n+popen_and_pclose (void)\n+{\n+  FILE *f = popen (\"true\", \"r\");\n+  TEST_VERIFY_EXIT (f != NULL);\n+  pclose (f);\n+  return;\n+}\n+\n+static atomic_bool done = ATOMIC_VAR_INIT (0);\n+\n+static void *\n+popen_and_pclose_forever (__attribute__ ((unused))\n+                          void *arg)\n+{\n+  while (!atomic_load_explicit (&done, memory_order_acquire))\n+    popen_and_pclose ();\n+  return NULL;\n+}\n+\n+static int\n+do_test (void)\n+{\n+\n+  /* Repeatedly call popen in a loop during the entire test.  */\n+  pthread_t t = xpthread_create (NULL, popen_and_pclose_forever, NULL);\n+\n+  /* Repeatedly fork off and reap child processes one-by-one.\n+     Each child calls popen once, then exits, leading to the possibility\n+     that a child forks *during* our own popen call, thus inheriting any\n+     intermediate popen state, possibly including lock state(s).  */\n+  for (int i = 0; i < 100; i++)\n+    {\n+      int cpid = xfork ();\n+\n+      if (cpid == 0)\n+        {\n+          popen_and_pclose ();\n+          _exit (0);\n+        }\n+      else\n+        xwaitpid (cpid, NULL, 0);\n+    }\n+\n+  /* Stop calling popen.  */\n+  atomic_store_explicit (&done, 1, memory_order_release);\n+  xpthread_join (t);\n+\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\ndiff --git a/posix/fork.c b/posix/fork.c\nindex 298765a1ff..cf9b80e7c0 100644\n--- a/posix/fork.c\n+++ b/posix/fork.c\n@@ -62,6 +62,7 @@ __libc_fork (void)\n       call_function_static_weak (__nss_database_fork_prepare_parent,\n \t\t\t\t &nss_database_data);\n \n+      _IO_proc_file_chain_lock ();\n       _IO_list_lock ();\n \n       /* Acquire malloc locks.  This needs to come last because fork\n@@ -92,6 +93,7 @@ __libc_fork (void)\n \n \t  /* Reset locks in the I/O code.  */\n \t  _IO_list_resetlock ();\n+\t  _IO_proc_file_chain_resetlock ();\n \n \t  call_function_static_weak (__nss_database_fork_subprocess,\n \t\t\t\t     &nss_database_data);\n@@ -121,6 +123,7 @@ __libc_fork (void)\n \n \t  /* We execute this even if the 'fork' call failed.  */\n \t  _IO_list_unlock ();\n+\t  _IO_proc_file_chain_unlock ();\n \t}\n \n       /* Run the handlers registered for the parent.  */\n\ncommit 7c3c9ae28685a9142a8cfa3521bbca74c1007d0b\nAuthor: Arjun Shankar <arjun@redhat.com>\nDate:   Fri Oct 25 09:33:45 2024 +0200\n\n    libio: Correctly link tst-popen-fork against libpthread\n    \n    tst-popen-fork failed to build for Hurd due to not being linked with\n    libpthread.  This commit fixes that.\n    \n    Tested with build-many-glibcs.py for i686-gnu.\n    \n    Reviewed-by: Florian Weimer <fweimer@redhat.com>\n    (cherry picked from commit 6a290b2895b77be839fcb7c44a6a9879560097ad)\n\ndiff --git a/libio/Makefile b/libio/Makefile\nindex 7faba230ac..f2e98f96eb 100644\n--- a/libio/Makefile\n+++ b/libio/Makefile\n@@ -142,6 +142,8 @@ tests = \\\n   tst_wscanf \\\n   # tests\n \n+$(objpfx)tst-popen-fork: $(shared-thread-library)\n+\n tests-internal = tst-vtables tst-vtables-interposed\n \n ifeq (yes,$(build-shared))\n\ncommit 8667345b83c8ca528a093d4db53f57a1bb1688e4\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Thu Feb 13 21:56:52 2025 +0100\n\n    elf: Keep using minimal malloc after early DTV resize (bug 32412)\n    \n    If an auditor loads many TLS-using modules during startup, it is\n    possible to trigger DTV resizing.  Previously, the DTV was marked\n    as allocated by the main malloc afterwards, even if the minimal\n    malloc was still in use.  With this change, _dl_resize_dtv marks\n    the resized DTV as allocated with the minimal malloc.\n    \n    The new test reuses TLS-using modules from other auditing tests.\n    \n    Reviewed-by: DJ Delorie <dj@redhat.com>\n    (cherry picked from commit aa3d7bd5299b33bffc118aa618b59bfa66059bcb)\n\ndiff --git a/elf/Makefile b/elf/Makefile\nindex dc686c3bff..be64c59887 100644\n--- a/elf/Makefile\n+++ b/elf/Makefile\n@@ -378,6 +378,7 @@ tests += \\\n   tst-align3 \\\n   tst-audit-tlsdesc \\\n   tst-audit-tlsdesc-dlopen \\\n+  tst-audit-tlsdesc-dlopen2 \\\n   tst-audit1 \\\n   tst-audit2 \\\n   tst-audit8 \\\n@@ -817,6 +818,7 @@ modules-names += \\\n   tst-auditmanymod8 \\\n   tst-auditmanymod9 \\\n   tst-auditmod-tlsdesc  \\\n+  tst-auditmod-tlsdesc2 \\\n   tst-auditmod1 \\\n   tst-auditmod11 \\\n   tst-auditmod12 \\\n@@ -3040,6 +3042,9 @@ $(objpfx)tst-audit-tlsdesc.out: $(objpfx)tst-auditmod-tlsdesc.so\n tst-audit-tlsdesc-ENV = LD_AUDIT=$(objpfx)tst-auditmod-tlsdesc.so\n $(objpfx)tst-audit-tlsdesc-dlopen.out: $(objpfx)tst-auditmod-tlsdesc.so\n tst-audit-tlsdesc-dlopen-ENV = LD_AUDIT=$(objpfx)tst-auditmod-tlsdesc.so\n+$(objpfx)tst-audit-tlsdesc-dlopen2.out: $(objpfx)tst-auditmod-tlsdesc2.so \\\n+  $(patsubst %, $(objpfx)%.so, $(tlsmod17a-modules))\n+tst-audit-tlsdesc-dlopen2-ENV = LD_AUDIT=$(objpfx)tst-auditmod-tlsdesc2.so\n \n $(objpfx)tst-dlmopen-twice.out: \\\n   $(objpfx)tst-dlmopen-twice-mod1.so \\\ndiff --git a/elf/dl-tls.c b/elf/dl-tls.c\nindex 3d529b722c..b13e752358 100644\n--- a/elf/dl-tls.c\n+++ b/elf/dl-tls.c\n@@ -528,6 +528,13 @@ _dl_resize_dtv (dtv_t *dtv, size_t max_modid)\n       if (newp == NULL)\n \toom ();\n       memcpy (newp, &dtv[-1], (2 + oldsize) * sizeof (dtv_t));\n+#ifdef SHARED\n+      /* Auditors can trigger a DTV resize event while the full malloc\n+\t is not yet in use.  Mark the new DTV allocation as the\n+\t initial allocation.  */\n+      if (!__rtld_malloc_is_complete ())\n+\tGL(dl_initial_dtv) = &newp[1];\n+#endif\n     }\n   else\n     {\ndiff --git a/elf/tst-audit-tlsdesc-dlopen2.c b/elf/tst-audit-tlsdesc-dlopen2.c\nnew file mode 100644\nindex 0000000000..7ba2c4129a\n--- /dev/null\n+++ b/elf/tst-audit-tlsdesc-dlopen2.c\n@@ -0,0 +1,46 @@\n+/* Loading TLS-using modules from auditors (bug 32412).  Main program.\n+   Copyright (C) 2021-2025 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <support/xdlfcn.h>\n+#include <stdio.h>\n+\n+static int\n+do_test (void)\n+{\n+  puts (\"info: start of main program\");\n+\n+  /* Load TLS-using modules, to trigger DTV resizing.  The dynamic\n+     linker will load them again (requiring their own TLS) because the\n+     dlopen calls from the auditor were in the auditing namespace.  */\n+  for (int i = 1; i <= 19; ++i)\n+    {\n+      char dso[30];\n+      snprintf (dso, sizeof (dso), \"tst-tlsmod17a%d.so\", i);\n+      char sym[30];\n+      snprintf (sym, sizeof(sym), \"tlsmod17a%d\", i);\n+\n+      void *handle = xdlopen (dso, RTLD_LAZY);\n+      int (*func) (void) = xdlsym (handle, sym);\n+      /* Trigger TLS allocation.  */\n+      func ();\n+    }\n+\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\ndiff --git a/elf/tst-auditmod-tlsdesc2.c b/elf/tst-auditmod-tlsdesc2.c\nnew file mode 100644\nindex 0000000000..50275cd34d\n--- /dev/null\n+++ b/elf/tst-auditmod-tlsdesc2.c\n@@ -0,0 +1,59 @@\n+/* Loading TLS-using modules from auditors (bug 32412).  Audit module.\n+   Copyright (C) 2021-2025 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <dlfcn.h>\n+#include <link.h>\n+#include <stdbool.h>\n+#include <stdio.h>\n+#include <unistd.h>\n+\n+unsigned int\n+la_version (unsigned int version)\n+{\n+  /* Open some modules, to trigger DTV resizing before the switch to\n+     the main malloc.  */\n+  for (int i = 1; i <= 19; ++i)\n+    {\n+      char dso[30];\n+      snprintf (dso, sizeof (dso), \"tst-tlsmod17a%d.so\", i);\n+      char sym[30];\n+      snprintf (sym, sizeof(sym), \"tlsmod17a%d\", i);\n+\n+      void *handle = dlopen (dso, RTLD_LAZY);\n+      if (handle == NULL)\n+        {\n+          printf (\"error: dlmopen from auditor: %s\\n\", dlerror  ());\n+          fflush (stdout);\n+          _exit (1);\n+        }\n+      int (*func) (void) = dlsym (handle, sym);\n+      if (func == NULL)\n+        {\n+          printf (\"error: dlsym from auditor: %s\\n\", dlerror  ());\n+          fflush (stdout);\n+          _exit (1);\n+        }\n+      /* Trigger TLS allocation.  */\n+      func ();\n+    }\n+\n+  puts (\"info: TLS-using modules loaded from auditor\");\n+  fflush (stdout);\n+\n+  return LAV_CURRENT;\n+}\n\ncommit b3002f303cedb8262cbc1ec22999ea36482efa0e\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Tue May 20 19:36:02 2025 +0200\n\n    support: Use const char * argument in support_capture_subprogram_self_sgid\n    \n    The function does not modify the passed-in string, so make this clear\n    via the prototype.\n    \n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit f0c09fe61678df6f7f18fe1ebff074e62fa5ca7a)\n\ndiff --git a/support/capture_subprocess.h b/support/capture_subprocess.h\nindex 93b7245d2a..5406d9f6c0 100644\n--- a/support/capture_subprocess.h\n+++ b/support/capture_subprocess.h\n@@ -45,8 +45,7 @@ struct support_capture_subprocess support_capture_subprogram\n /* Copy the running program into a setgid binary and run it with CHILD_ID\n    argument.  If execution is successful, return the exit status of the child\n    program, otherwise return a non-zero failure exit code.  */\n-int support_capture_subprogram_self_sgid\n-  (char *child_id);\n+int support_capture_subprogram_self_sgid (const char *child_id);\n \n /* Deallocate the subprocess data captured by\n    support_capture_subprocess.  */\ndiff --git a/support/support_capture_subprocess.c b/support/support_capture_subprocess.c\nindex 53847194cb..2383481911 100644\n--- a/support/support_capture_subprocess.c\n+++ b/support/support_capture_subprocess.c\n@@ -110,7 +110,7 @@ support_capture_subprogram (const char *file, char *const argv[],\n    safely make it SGID with the TARGET group ID.  Then runs the\n    executable.  */\n static int\n-copy_and_spawn_sgid (char *child_id, gid_t gid)\n+copy_and_spawn_sgid (const char *child_id, gid_t gid)\n {\n   char *dirname = xasprintf (\"%s/tst-tunables-setuid.%jd\",\n \t\t\t     test_dir, (intmax_t) getpid ());\n@@ -182,7 +182,7 @@ copy_and_spawn_sgid (char *child_id, gid_t gid)\n   ret = 0;\n   infd = outfd = -1;\n \n-  char * const args[] = {execname, child_id, NULL};\n+  char * const args[] = {execname, (char *) child_id, NULL};\n \n   status = support_subprogram_wait (args[0], args);\n \n@@ -211,7 +211,7 @@ err:\n }\n \n int\n-support_capture_subprogram_self_sgid (char *child_id)\n+support_capture_subprogram_self_sgid (const char *child_id)\n {\n   gid_t target = 0;\n   const int count = 64;\n\ncommit 61dcce21e06834f7248a8d516c9ec20788fc728c\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Mon Dec 23 13:57:55 2024 +0100\n\n    support: Add support_record_failure_barrier\n    \n    This can be used to stop execution after a TEST_COMPARE_BLOB\n    failure, for example.\n    \n    (cherry picked from commit d0b8aa6de4529231fadfe604ac2c434e559c2d9e)\n\ndiff --git a/support/check.h b/support/check.h\nindex 7ea22c7a2c..8f41e5b99f 100644\n--- a/support/check.h\n+++ b/support/check.h\n@@ -207,6 +207,9 @@ void support_record_failure_reset (void);\n    failures or not.  */\n int support_record_failure_is_failed (void);\n \n+/* Terminate the process if any failures have been encountered so far.  */\n+void support_record_failure_barrier (void);\n+\n __END_DECLS\n \n #endif /* SUPPORT_CHECK_H */\ndiff --git a/support/support_record_failure.c b/support/support_record_failure.c\nindex 978123701d..72ee2b232f 100644\n--- a/support/support_record_failure.c\n+++ b/support/support_record_failure.c\n@@ -112,3 +112,13 @@ support_record_failure_is_failed (void)\n      synchronization for reliable test error reporting anyway.  */\n   return __atomic_load_n (&state->failed, __ATOMIC_RELAXED);\n }\n+\n+void\n+support_record_failure_barrier (void)\n+{\n+  if (__atomic_load_n (&state->failed, __ATOMIC_RELAXED))\n+    {\n+      puts (\"error: exiting due to previous errors\");\n+      exit (1);\n+    }\n+}\n\ncommit 079ac4a172a8f6ba37acf1e80e57f5042d2c7561\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Tue May 20 19:45:06 2025 +0200\n\n    elf: Test case for bug 32976 (CVE-2025-4802)\n    \n    Check that LD_LIBRARY_PATH is ignored for AT_SECURE statically\n    linked binaries, using support_capture_subprogram_self_sgid.\n    \n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit d8f7a79335b0d861c12c42aec94c04cd5bb181e2)\n\ndiff --git a/elf/Makefile b/elf/Makefile\nindex be64c59887..afd4eb6fdd 100644\n--- a/elf/Makefile\n+++ b/elf/Makefile\n@@ -266,6 +266,7 @@ tests-static-normal := \\\n   tst-array1-static \\\n   tst-array5-static \\\n   tst-dl-iter-static \\\n+  tst-dlopen-sgid \\\n   tst-dst-static \\\n   tst-env-setuid-static \\\n   tst-getauxval-static \\\n@@ -859,6 +860,7 @@ modules-names += \\\n   tst-dlmopen-twice-mod1 \\\n   tst-dlmopen-twice-mod2 \\\n   tst-dlmopen1mod \\\n+  tst-dlopen-sgid-mod \\\n   tst-dlopen-tlsreinitmod1 \\\n   tst-dlopen-tlsreinitmod2 \\\n   tst-dlopen-tlsreinitmod3 \\\n@@ -3153,3 +3155,5 @@ $(objpfx)tst-dlopen-tlsreinit3.out: $(objpfx)tst-auditmod1.so\n tst-dlopen-tlsreinit3-ENV = LD_AUDIT=$(objpfx)tst-auditmod1.so\n $(objpfx)tst-dlopen-tlsreinit4.out: $(objpfx)tst-auditmod1.so\n tst-dlopen-tlsreinit4-ENV = LD_AUDIT=$(objpfx)tst-auditmod1.so\n+\n+$(objpfx)tst-dlopen-sgid.out: $(objpfx)tst-dlopen-sgid-mod.so\ndiff --git a/elf/tst-dlopen-sgid-mod.c b/elf/tst-dlopen-sgid-mod.c\nnew file mode 100644\nindex 0000000000..5eb79eef48\n--- /dev/null\n+++ b/elf/tst-dlopen-sgid-mod.c\n@@ -0,0 +1 @@\n+/* Opening this object should not succeed.  */\ndiff --git a/elf/tst-dlopen-sgid.c b/elf/tst-dlopen-sgid.c\nnew file mode 100644\nindex 0000000000..47829a405e\n--- /dev/null\n+++ b/elf/tst-dlopen-sgid.c\n@@ -0,0 +1,104 @@\n+/* Test case for ignored LD_LIBRARY_PATH in static startug (bug 32976).\n+   Copyright (C) 2025 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+#include <dlfcn.h>\n+#include <gnu/lib-names.h>\n+#include <stddef.h>\n+#include <stdint.h>\n+#include <stdlib.h>\n+#include <string.h>\n+#include <support/capture_subprocess.h>\n+#include <support/check.h>\n+#include <support/support.h>\n+#include <support/temp_file.h>\n+#include <unistd.h>\n+\n+/* This is the name of our test object.  Use a custom module for\n+   testing, so that this object does not get picked up from the system\n+   path.  */\n+static const char dso_name[] = \"tst-dlopen-sgid-mod.so\";\n+\n+/* Used to mark the recursive invocation.  */\n+static const char magic_argument[] = \"run-actual-test\";\n+\n+static int\n+do_test (void)\n+{\n+/* Pathname of the directory that receives the shared objects this\n+   test attempts to load.  */\n+  char *libdir = support_create_temp_directory (\"tst-dlopen-sgid-\");\n+\n+  /* This is supposed to be ignored and stripped.  */\n+  TEST_COMPARE (setenv (\"LD_LIBRARY_PATH\", libdir, 1), 0);\n+\n+  /* Copy of libc.so.6.  */\n+  {\n+    char *from = xasprintf (\"%s/%s\", support_objdir_root, LIBC_SO);\n+    char *to = xasprintf (\"%s/%s\", libdir, LIBC_SO);\n+    add_temp_file (to);\n+    support_copy_file (from, to);\n+    free (to);\n+    free (from);\n+  }\n+\n+  /* Copy of the test object.   */\n+  {\n+    char *from = xasprintf (\"%s/elf/%s\", support_objdir_root, dso_name);\n+    char *to = xasprintf (\"%s/%s\", libdir, dso_name);\n+    add_temp_file (to);\n+    support_copy_file (from, to);\n+    free (to);\n+    free (from);\n+  }\n+\n+  TEST_COMPARE (support_capture_subprogram_self_sgid (magic_argument), 0);\n+\n+  free (libdir);\n+\n+  return 0;\n+}\n+\n+static void\n+alternative_main (int argc, char **argv)\n+{\n+  if (argc == 2 && strcmp (argv[1], magic_argument) == 0)\n+    {\n+      if (getgid () == getegid ())\n+        /* This can happen if the file system is mounted nosuid.  */\n+        FAIL_UNSUPPORTED (\"SGID failed: GID and EGID match (%jd)\\n\",\n+                          (intmax_t) getgid ());\n+\n+      /* Should be removed due to SGID.  */\n+      TEST_COMPARE_STRING (getenv (\"LD_LIBRARY_PATH\"), NULL);\n+\n+      TEST_VERIFY (dlopen (dso_name, RTLD_NOW) == NULL);\n+      {\n+        const char *message = dlerror ();\n+        TEST_COMPARE_STRING (message,\n+                             \"tst-dlopen-sgid-mod.so:\"\n+                             \" cannot open shared object file:\"\n+                             \" No such file or directory\");\n+      }\n+\n+      support_record_failure_barrier ();\n+      exit (EXIT_SUCCESS);\n+    }\n+}\n+\n+#define PREPARE alternative_main\n+#include <support/test-driver.c>\n\ncommit 56e75b810ac39b0e390be5b66397dca0cdfa4d80\nAuthor: Sunil K Pandey <sunil.k.pandey@intel.com>\nDate:   Tue May 20 10:07:27 2025 -0700\n\n    x86_64: Fix typo in ifunc-impl-list.c.\n    \n    Fix wcsncpy and wcpncpy typo in ifunc-impl-list.c.\n    \n    Reviewed-by: H.J. Lu <hjl.tools@gmail.com>\n    (cherry picked from commit f2aeb6ff941dccc4c777b5621e77addea6cc076c)\n\ndiff --git a/sysdeps/x86_64/multiarch/ifunc-impl-list.c b/sysdeps/x86_64/multiarch/ifunc-impl-list.c\nindex 0bbb71bbbf..3db45db39b 100644\n--- a/sysdeps/x86_64/multiarch/ifunc-impl-list.c\n+++ b/sysdeps/x86_64/multiarch/ifunc-impl-list.c\n@@ -922,7 +922,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,\n \t\t\t\t     (CPU_FEATURE_USABLE (AVX2)\n \t\t\t\t      && CPU_FEATURE_USABLE (BMI2)),\n \t\t\t\t     __wcsncpy_avx2)\n-\t      X86_IFUNC_IMPL_ADD_V2 (array, i, wcpncpy,\n+\t      X86_IFUNC_IMPL_ADD_V2 (array, i, wcsncpy,\n \t\t\t\t     1,\n \t\t\t\t     __wcsncpy_generic))\n \n@@ -952,7 +952,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,\n \t\t\t\t     (CPU_FEATURE_USABLE (AVX2)\n \t\t\t\t      && CPU_FEATURE_USABLE (BMI2)),\n \t\t\t\t     __wcpncpy_avx2)\n-\t      X86_IFUNC_IMPL_ADD_V2 (array, i, wcsncpy,\n+\t      X86_IFUNC_IMPL_ADD_V2 (array, i, wcpncpy,\n \t\t\t\t     1,\n \t\t\t\t     __wcpncpy_generic))\n \n\ncommit c8e10f14328518954072df64aafd574e67cfdde5\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Wed May 21 08:43:32 2025 +0200\n\n    elf: Fix subprocess status handling for tst-dlopen-sgid (bug 32987)\n    \n    This should really move into support_capture_subprogram_self_sgid.\n    \n    Reviewed-by: Sam James <sam@gentoo.org>\n    (cherry picked from commit 35fc356fa3b4f485bd3ba3114c9f774e5df7d3c2)\n\ndiff --git a/NEWS b/NEWS\nindex 7a6985f5dd..4b290ad4bf 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -23,6 +23,7 @@ The following bugs are resolved with this release:\n   [32245] glibc -Wstringop-overflow= build failure on hppa\n   [32470] x86: Avoid integer truncation with large cache sizes\n   [32810] Crash on x86-64 if XSAVEC disable via tunable\n+  [32987] elf: Fix subprocess status handling for tst-dlopen-sgid\n \f\n Version 2.40\n \ndiff --git a/elf/tst-dlopen-sgid.c b/elf/tst-dlopen-sgid.c\nindex 47829a405e..5688b79f2e 100644\n--- a/elf/tst-dlopen-sgid.c\n+++ b/elf/tst-dlopen-sgid.c\n@@ -26,6 +26,8 @@\n #include <support/check.h>\n #include <support/support.h>\n #include <support/temp_file.h>\n+#include <support/test-driver.h>\n+#include <sys/wait.h>\n #include <unistd.h>\n \n /* This is the name of our test object.  Use a custom module for\n@@ -66,10 +68,16 @@ do_test (void)\n     free (from);\n   }\n \n-  TEST_COMPARE (support_capture_subprogram_self_sgid (magic_argument), 0);\n-\n   free (libdir);\n \n+  int status = support_capture_subprogram_self_sgid (magic_argument);\n+\n+  if (WEXITSTATUS (status) == EXIT_UNSUPPORTED)\n+    return EXIT_UNSUPPORTED;\n+\n+  if (!WIFEXITED (status))\n+    FAIL_EXIT1 (\"Unexpected exit status %d from child process\\n\", status);\n+\n   return 0;\n }\n \n\ncommit 42a5a940c974d02540c8da26d6374c744d148cb9\nAuthor: Carlos O'Donell <carlos@redhat.com>\nDate:   Wed Jun 11 09:19:17 2025 -0400\n\n    ppc64le: Revert \"powerpc: Optimized strncmp for power10\" (CVE-2025-5745)\n    \n    This reverts commit 23f0d81608d0ca6379894ef81670cf30af7fd081\n    \n    Reason for revert: Power10 strncmp clobbers non-volatile vector\n    registers (Bug 33060)\n    \n    Tested on ppc64le with no regressions.\n    \n    (cherry picked from commit 63c60101ce7c5eac42be90f698ba02099b41b965)\n\ndiff --git a/sysdeps/powerpc/powerpc64/le/power10/strncmp.S b/sysdeps/powerpc/powerpc64/le/power10/strncmp.S\ndeleted file mode 100644\nindex d4ba76acae..0000000000\n--- a/sysdeps/powerpc/powerpc64/le/power10/strncmp.S\n+++ /dev/null\n@@ -1,271 +0,0 @@\n-/* Optimized strncmp implementation for PowerPC64/POWER10.\n-   Copyright (C) 2024 Free Software Foundation, Inc.\n-   This file is part of the GNU C Library.\n-\n-   The GNU C Library is free software; you can redistribute it and/or\n-   modify it under the terms of the GNU Lesser General Public\n-   License as published by the Free Software Foundation; either\n-   version 2.1 of the License, or (at your option) any later version.\n-\n-   The GNU C Library is distributed in the hope that it will be useful,\n-   but WITHOUT ANY WARRANTY; without even the implied warranty of\n-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n-   Lesser General Public License for more details.\n-\n-   You should have received a copy of the GNU Lesser General Public\n-   License along with the GNU C Library; if not, see\n-   <https://www.gnu.org/licenses/>.  */\n-\n-#include <sysdep.h>\n-\n-/* Implements the function\n-\n-   int [r3] strncmp (const char *s1 [r3], const char *s2 [r4], size_t [r5] n)\n-\n-   The implementation uses unaligned doubleword access to avoid specialized\n-   code paths depending of data alignment for first 32 bytes and uses\n-   vectorised loops after that.  */\n-\n-#ifndef STRNCMP\n-# define STRNCMP strncmp\n-#endif\n-\n-/* TODO: Change this to actual instructions when minimum binutils is upgraded\n-   to 2.27.  Macros are defined below for these newer instructions in order\n-   to maintain compatibility.  */\n-\n-#define LXVP(xtp,dq,ra)              \\\n-\t.long(((6)<<(32-6))          \\\n-\t| ((((xtp)-32)>>1)<<(32-10)) \\\n-\t| ((1)<<(32-11))             \\\n-\t| ((ra)<<(32-16))            \\\n-\t| dq)\n-\n-#define COMPARE_16(vreg1,vreg2,offset) \\\n-\tlxv\t  vreg1+32,offset(r3); \\\n-\tlxv\t  vreg2+32,offset(r4); \\\n-\tvcmpnezb. v7,vreg1,vreg2;      \\\n-\tbne\t  cr6,L(different);    \\\n-\tcmpldi\t  cr7,r5,16;           \\\n-\tble\t  cr7,L(ret0);         \\\n-\taddi\t  r5,r5,-16;\n-\n-#define COMPARE_32(vreg1,vreg2,offset,label1,label2) \\\n-\tLXVP(vreg1+32,offset,r3);                    \\\n-\tLXVP(vreg2+32,offset,r4);                    \\\n-\tvcmpnezb. v7,vreg1+1,vreg2+1;                \\\n-\tbne\t  cr6,L(label1);                     \\\n-\tvcmpnezb. v7,vreg1,vreg2;                    \\\n-\tbne\t  cr6,L(label2);                     \\\n-\tcmpldi\t  cr7,r5,32;                         \\\n-\tble\t  cr7,L(ret0);                       \\\n-\taddi\t  r5,r5,-32;\n-\n-#define TAIL_FIRST_16B(vreg1,vreg2) \\\n-\tvctzlsbb r6,v7;             \\\n-\tcmpld\t cr7,r5,r6;         \\\n-\tble\t cr7,L(ret0);       \\\n-\tvextubrx r5,r6,vreg1;       \\\n-\tvextubrx r4,r6,vreg2;       \\\n-\tsubf\t r3,r4,r5;          \\\n-\tblr;\n-\n-#define TAIL_SECOND_16B(vreg1,vreg2) \\\n-\tvctzlsbb r6,v7;              \\\n-\taddi\t r0,r6,16;           \\\n-\tcmpld\t cr7,r5,r0;          \\\n-\tble\t cr7,L(ret0);        \\\n-\tvextubrx r5,r6,vreg1;        \\\n-\tvextubrx r4,r6,vreg2;        \\\n-\tsubf\t r3,r4,r5;           \\\n-\tblr;\n-\n-#define CHECK_N_BYTES(reg1,reg2,len_reg) \\\n-\tsldi\t  r6,len_reg,56;\t \\\n-\tlxvl\t  32+v4,reg1,r6;\t \\\n-\tlxvl\t  32+v5,reg2,r6;\t \\\n-\tadd\t  reg1,reg1,len_reg;\t \\\n-\tadd\t  reg2,reg2,len_reg;\t \\\n-\tvcmpnezb  v7,v4,v5;\t\t \\\n-\tvctzlsbb  r6,v7;\t\t \\\n-\tcmpld\t  cr7,r6,len_reg;\t \\\n-\tblt\t  cr7,L(different);\t \\\n-\tcmpld\t  cr7,r5,len_reg;\t \\\n-\tble\t  cr7,L(ret0);\t\t \\\n-\tsub\t  r5,r5,len_reg;\t \\\n-\n-\t/* TODO: change this to .machine power10 when the minimum required\n-\t binutils allows it.  */\n-\t.machine  power9\n-ENTRY_TOCLESS (STRNCMP, 4)\n-\t/* Check if size is 0.  */\n-\tcmpdi\t cr0,r5,0\n-\tbeq\t cr0,L(ret0)\n-\tandi.   r7,r3,4095\n-\tandi.   r8,r4,4095\n-\tcmpldi  cr0,r7,4096-16\n-\tcmpldi  cr1,r8,4096-16\n-\tbgt     cr0,L(crosses)\n-\tbgt     cr1,L(crosses)\n-\tCOMPARE_16(v4,v5,0)\n-\taddi\tr3,r3,16\n-\taddi\tr4,r4,16\n-\n-L(crosses):\n-\tandi.\t r7,r3,15\n-\tsubfic\t r7,r7,16\t/* r7(nalign1) = 16 - (str1 & 15).  */\n-\tandi.\t r9,r4,15\n-\tsubfic\t r8,r9,16\t/* r8(nalign2) = 16 - (str2 & 15).  */\n-\tcmpld\t cr7,r7,r8\n-\tbeq\t cr7,L(same_aligned)\n-\tblt\t cr7,L(nalign1_min)\n-\n-\t/* nalign2 is minimum and s2 pointer is aligned.  */\n-\tCHECK_N_BYTES(r3,r4,r8)\n-\t/* Are we on the 64B hunk which crosses a page?  */\n-\tandi.   r10,r3,63       /* Determine offset into 64B hunk.  */\n-\tandi.   r8,r3,15        /* The offset into the 16B hunk.  */\n-\tneg     r7,r3\n-\tandi.   r9,r7,15        /* Number of bytes after a 16B cross.  */\n-\trlwinm. r7,r7,26,0x3F   /* ((r4-4096))>>6&63.  */\n-\tbeq     L(compare_64_pagecross)\n-\tmtctr   r7\n-\tb       L(compare_64B_unaligned)\n-\n-\t/* nalign1 is minimum and s1 pointer is aligned.  */\n-L(nalign1_min):\n-\tCHECK_N_BYTES(r3,r4,r7)\n-\t/* Are we on the 64B hunk which crosses a page?  */\n-\tandi.   r10,r4,63       /* Determine offset into 64B hunk.  */\n-\tandi.   r8,r4,15        /* The offset into the 16B hunk.  */\n-\tneg     r7,r4\n-\tandi.   r9,r7,15        /* Number of bytes after a 16B cross.  */\n-\trlwinm. r7,r7,26,0x3F   /* ((r4-4096))>>6&63.  */\n-\tbeq     L(compare_64_pagecross)\n-\tmtctr   r7\n-\n-\t.p2align 5\n-L(compare_64B_unaligned):\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\tCOMPARE_16(v4,v5,32)\n-\tCOMPARE_16(v4,v5,48)\n-\taddi    r3,r3,64\n-\taddi    r4,r4,64\n-\tbdnz    L(compare_64B_unaligned)\n-\n-\t/* Cross the page boundary of s2, carefully. Only for first\n-\titeration we have to get the count of 64B blocks to be checked.\n-\tFrom second iteration and beyond, loop counter is always 63.  */\n-L(compare_64_pagecross):\n-\tli      r11, 63\n-\tmtctr   r11\n-\tcmpldi  r10,16\n-\tble     L(cross_4)\n-\tcmpldi  r10,32\n-\tble     L(cross_3)\n-\tcmpldi  r10,48\n-\tble     L(cross_2)\n-L(cross_1):\n-\tCHECK_N_BYTES(r3,r4,r9)\n-\tCHECK_N_BYTES(r3,r4,r8)\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\tCOMPARE_16(v4,v5,32)\n-\taddi    r3,r3,48\n-\taddi    r4,r4,48\n-\tb       L(compare_64B_unaligned)\n-L(cross_2):\n-\tCOMPARE_16(v4,v5,0)\n-\taddi    r3,r3,16\n-\taddi    r4,r4,16\n-\tCHECK_N_BYTES(r3,r4,r9)\n-\tCHECK_N_BYTES(r3,r4,r8)\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\taddi    r3,r3,32\n-\taddi    r4,r4,32\n-\tb       L(compare_64B_unaligned)\n-L(cross_3):\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\taddi    r3,r3,32\n-\taddi    r4,r4,32\n-\tCHECK_N_BYTES(r3,r4,r9)\n-\tCHECK_N_BYTES(r3,r4,r8)\n-\tCOMPARE_16(v4,v5,0)\n-\taddi    r3,r3,16\n-\taddi    r4,r4,16\n-\tb       L(compare_64B_unaligned)\n-L(cross_4):\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\tCOMPARE_16(v4,v5,32)\n-\taddi    r3,r3,48\n-\taddi    r4,r4,48\n-\tCHECK_N_BYTES(r3,r4,r9)\n-\tCHECK_N_BYTES(r3,r4,r8)\n-\tb       L(compare_64B_unaligned)\n-\n-L(same_aligned):\n-\tCHECK_N_BYTES(r3,r4,r7)\n-\t/* Align s1 to 32B and adjust s2 address.\n-\t   Use lxvp only if both s1 and s2 are 32B aligned.  */\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\tCOMPARE_16(v4,v5,32)\n-\tCOMPARE_16(v4,v5,48)\n-\taddi\tr3,r3,64\n-\taddi\tr4,r4,64\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\taddi\tr5,r5,32\n-\n-\tclrldi  r6,r3,59\n-\tsubfic\tr7,r6,32\n-\tadd\tr3,r3,r7\n-\tadd\tr4,r4,r7\n-\tsubf\tr5,r7,r5\n-\tandi.\tr7,r4,0x1F\n-\tbeq\tcr0,L(32B_aligned_loop)\n-\n-\t.p2align 5\n-L(16B_aligned_loop):\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\tCOMPARE_16(v4,v5,32)\n-\tCOMPARE_16(v4,v5,48)\n-\taddi\tr3,r3,64\n-\taddi\tr4,r4,64\n-\tb\tL(16B_aligned_loop)\n-\n-\t/* Calculate and return the difference.  */\n-L(different):\n-\tTAIL_FIRST_16B(v4,v5)\n-\n-\t.p2align 5\n-L(32B_aligned_loop):\n-\tCOMPARE_32(v14,v16,0,tail1,tail2)\n-\tCOMPARE_32(v18,v20,32,tail3,tail4)\n-\tCOMPARE_32(v22,v24,64,tail5,tail6)\n-\tCOMPARE_32(v26,v28,96,tail7,tail8)\n-\taddi\tr3,r3,128\n-\taddi\tr4,r4,128\n-\tb\tL(32B_aligned_loop)\n-\n-L(tail1): TAIL_FIRST_16B(v15,v17)\n-L(tail2): TAIL_SECOND_16B(v14,v16)\n-L(tail3): TAIL_FIRST_16B(v19,v21)\n-L(tail4): TAIL_SECOND_16B(v18,v20)\n-L(tail5): TAIL_FIRST_16B(v23,v25)\n-L(tail6): TAIL_SECOND_16B(v22,v24)\n-L(tail7): TAIL_FIRST_16B(v27,v29)\n-L(tail8): TAIL_SECOND_16B(v26,v28)\n-\n-\t.p2align 5\n-L(ret0):\n-\tli\tr3,0\n-\tblr\n-\n-END(STRNCMP)\n-libc_hidden_builtin_def(strncmp)\ndiff --git a/sysdeps/powerpc/powerpc64/multiarch/Makefile b/sysdeps/powerpc/powerpc64/multiarch/Makefile\nindex b847c19049..a38ff46448 100644\n--- a/sysdeps/powerpc/powerpc64/multiarch/Makefile\n+++ b/sysdeps/powerpc/powerpc64/multiarch/Makefile\n@@ -34,7 +34,7 @@ ifneq (,$(filter %le,$(config-machine)))\n sysdep_routines += memchr-power10 memcmp-power10 memcpy-power10 \\\n \t\t   memmove-power10 memset-power10 rawmemchr-power9 \\\n \t\t   rawmemchr-power10 strcmp-power9 strcmp-power10 \\\n-\t\t   strncmp-power9 strncmp-power10 strcpy-power9 stpcpy-power9 \\\n+\t\t   strncmp-power9 strcpy-power9 stpcpy-power9 \\\n \t\t   strlen-power9 strncpy-power9 stpncpy-power9 strlen-power10\n endif\n CFLAGS-strncase-power7.c += -mcpu=power7 -funroll-loops\ndiff --git a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c\nindex 2bb47d3527..30fd89e109 100644\n--- a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c\n+++ b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c\n@@ -164,9 +164,6 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,\n   /* Support sysdeps/powerpc/powerpc64/multiarch/strncmp.c.  */\n   IFUNC_IMPL (i, name, strncmp,\n #ifdef __LITTLE_ENDIAN__\n-\t      IFUNC_IMPL_ADD (array, i, strncmp, hwcap2 & PPC_FEATURE2_ARCH_3_1\n-\t\t\t      && hwcap & PPC_FEATURE_HAS_VSX,\n-\t\t\t      __strncmp_power10)\n \t      IFUNC_IMPL_ADD (array, i, strncmp, hwcap2 & PPC_FEATURE2_ARCH_3_00\n \t\t\t      && hwcap & PPC_FEATURE_HAS_ALTIVEC,\n \t\t\t      __strncmp_power9)\ndiff --git a/sysdeps/powerpc/powerpc64/multiarch/strncmp-power10.S b/sysdeps/powerpc/powerpc64/multiarch/strncmp-power10.S\ndeleted file mode 100644\nindex d7026c12e2..0000000000\n--- a/sysdeps/powerpc/powerpc64/multiarch/strncmp-power10.S\n+++ /dev/null\n@@ -1,25 +0,0 @@\n-/* Copyright (C) 2024 Free Software Foundation, Inc.\n-   This file is part of the GNU C Library.\n-\n-   The GNU C Library is free software; you can redistribute it and/or\n-   modify it under the terms of the GNU Lesser General Public\n-   License as published by the Free Software Foundation; either\n-   version 2.1 of the License, or (at your option) any later version.\n-\n-   The GNU C Library is distributed in the hope that it will be useful,\n-   but WITHOUT ANY WARRANTY; without even the implied warranty of\n-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n-   Lesser General Public License for more details.\n-\n-   You should have received a copy of the GNU Lesser General Public\n-   License along with the GNU C Library; if not, see\n-   <https://www.gnu.org/licenses/>.  */\n-\n-#if defined __LITTLE_ENDIAN__ && IS_IN (libc)\n-#define STRNCMP __strncmp_power10\n-\n-#undef libc_hidden_builtin_def\n-#define libc_hidden_builtin_def(name)\n-\n-#include <sysdeps/powerpc/powerpc64/le/power10/strncmp.S>\n-#endif\ndiff --git a/sysdeps/powerpc/powerpc64/multiarch/strncmp.c b/sysdeps/powerpc/powerpc64/multiarch/strncmp.c\nindex a5ed67f766..6178f4a432 100644\n--- a/sysdeps/powerpc/powerpc64/multiarch/strncmp.c\n+++ b/sysdeps/powerpc/powerpc64/multiarch/strncmp.c\n@@ -29,7 +29,6 @@ extern __typeof (strncmp) __strncmp_ppc attribute_hidden;\n extern __typeof (strncmp) __strncmp_power8 attribute_hidden;\n # ifdef __LITTLE_ENDIAN__\n extern __typeof (strncmp) __strncmp_power9 attribute_hidden;\n-extern __typeof (strncmp) __strncmp_power10 attribute_hidden;\n # endif\n # undef strncmp\n \n@@ -37,9 +36,6 @@ extern __typeof (strncmp) __strncmp_power10 attribute_hidden;\n    ifunc symbol properly.  */\n libc_ifunc_redirected (__redirect_strncmp, strncmp,\n # ifdef __LITTLE_ENDIAN__\n-\t\t\t(hwcap2 & PPC_FEATURE2_ARCH_3_1\n-\t\t\t && hwcap & PPC_FEATURE_HAS_VSX)\n-\t\t\t? __strncmp_power10 :\n \t\t\t(hwcap2 & PPC_FEATURE2_ARCH_3_00\n \t\t\t && hwcap & PPC_FEATURE_HAS_ALTIVEC)\n \t\t\t? __strncmp_power9 :\n\ncommit 2ad6e55ea5cb23af5af7af35d5f80cd93032f96a\nAuthor: Carlos O'Donell <carlos@redhat.com>\nDate:   Wed Jun 11 09:43:50 2025 -0400\n\n    ppc64le: Revert \"powerpc: Fix performance issues of strcmp power10\" (CVE-2025-5702)\n    \n    This reverts commit 90bcc8721ef82b7378d2b080141228660e862d56\n    \n    This change is in the chain of the final revert that fixes the CVE\n    i.e. 3367d8e180848030d1646f088759f02b8dfe0d6f\n    \n    Reason for revert: Power10 strcmp clobbers non-volatile vector\n    registers (Bug 33056)\n    \n    Tested on ppc64le with no regressions.\n    \n    (cherry picked from commit c22de63588df7a8a0edceea9bb02534064c9d201)\n\ndiff --git a/sysdeps/powerpc/powerpc64/le/power10/strcmp.S b/sysdeps/powerpc/powerpc64/le/power10/strcmp.S\nindex f0d6732a25..00f1e9c170 100644\n--- a/sysdeps/powerpc/powerpc64/le/power10/strcmp.S\n+++ b/sysdeps/powerpc/powerpc64/le/power10/strcmp.S\n@@ -62,7 +62,7 @@\n \tlxvl\t  32+v5,reg2,r0;         \\\n \tadd\t  reg1,reg1,len_reg;     \\\n \tadd\t  reg2,reg2,len_reg;     \\\n-\tvcmpnezb  v7,v4,v5;              \\\n+\tvcmpnezb. v7,v4,v5;              \\\n \tvctzlsbb  r6,v7;                 \\\n \tcmpld\t  cr7,r6,len_reg;        \\\n \tblt\t  cr7,L(different);      \\\n@@ -72,110 +72,70 @@\n \n \t.machine  power9\n ENTRY_TOCLESS (STRCMP, 4)\n-\tandi.\tr7,r3,4095\n-\tandi.\tr8,r4,4095\n-\tcmpldi\tcr0,r7,4096-16\n-\tcmpldi\tcr1,r8,4096-16\n-\tbgt\tcr0,L(crosses)\n-\tbgt\tcr1,L(crosses)\n-\tCOMPARE_16(v4,v5,0)\n-\n-L(crosses):\n-\tandi.\tr7,r3,15\n-\tsubfic\tr7,r7,16\t/* r7(nalign1) = 16 - (str1 & 15).  */\n-\tandi.\tr9,r4,15\n-\tsubfic\tr5,r9,16\t/* r5(nalign2) = 16 - (str2 & 15).  */\n-\tcmpld\tcr7,r7,r5\n-\tbeq\tcr7,L(same_aligned)\n-\tblt\tcr7,L(nalign1_min)\n+\tli\t r11,16\n+\t/* eq bit of cr1 used as swap status flag to indicate if\n+\tsource pointers were swapped.  */\n+\tcrclr\t 4*cr1+eq\n+\tvspltisb v19,-1\n+\tandi.\t r7,r3,15\n+\tsub\t r7,r11,r7\t/* r7(nalign1) = 16 - (str1 & 15).  */\n+\tandi.\t r9,r4,15\n+\tsub\t r5,r11,r9\t/* r5(nalign2) = 16 - (str2 & 15).  */\n+\tcmpld\t cr7,r7,r5\n+\tbeq\t cr7,L(same_aligned)\n+\tblt\t cr7,L(nalign1_min)\n+\t/* Swap r3 and r4, and r7 and r5 such that r3 and r7 hold the\n+\tpointer which is closer to the next 16B boundary so that only\n+\tone CHECK_N_BYTES is needed before entering the loop below.  */\n+\tmr\t r8,r4\n+\tmr\t r4,r3\n+\tmr\t r3,r8\n+\tmr\t r12,r7\n+\tmr\t r7,r5\n+\tmr\t r5,r12\n+\tcrset\t 4*cr1+eq\t/* Set bit on swapping source pointers.  */\n \n-\t/* nalign2 is minimum and s2 pointer is aligned.  */\n-\tCHECK_N_BYTES(r3,r4,r5)\n-\t/* Are we on the 64B hunk which crosses a page?  */\n-\tandi.\tr10,r3,63\t/* Determine offset into 64B hunk.  */\n-\tandi.\tr8,r3,15        /* The offset into the 16B hunk.  */\n-\tneg\tr7,r3\n-\tandi.\tr9,r7,15\t/* Number of bytes after a 16B cross.  */\n-\trlwinm.\tr7,r7,26,0x3F\t/* ((r3-4096))>>6&63.  */\n-\tbeq\tL(compare_64_pagecross)\n-\tmtctr\tr7\n-\tb\tL(compare_64B_unaligned)\n-\n-\t/* nalign1 is minimum and s1 pointer is aligned.  */\n+\t.p2align 5\n L(nalign1_min):\n \tCHECK_N_BYTES(r3,r4,r7)\n-\t/* Are we on the 64B hunk which crosses a page?  */\n-\tandi.\tr10,r4,63\t/* Determine offset into 64B hunk.  */\n-\tandi.\tr8,r4,15\t/* The offset into the 16B hunk.  */\n-\tneg\tr7,r4\n-\tandi.\tr9,r7,15\t/* Number of bytes after a 16B cross.  */\n-\trlwinm. r7,r7,26,0x3F\t/* ((r4-4096))>>6&63.  */\n-\tbeq\tL(compare_64_pagecross)\n-\tmtctr\tr7\n \n \t.p2align 5\n-L(compare_64B_unaligned):\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\tCOMPARE_16(v4,v5,32)\n-\tCOMPARE_16(v4,v5,48)\n-\taddi\tr3,r3,64\n-\taddi\tr4,r4,64\n-\tbdnz\tL(compare_64B_unaligned)\n+L(s1_aligned):\n+\t/* r9 and r5 is number of bytes to be read after and before\n+\t page boundary correspondingly.  */\n+\tsub \tr5,r5,r7\n+\tsubfic\tr9,r5,16\n+\t/* Now let r7 hold the count of quadwords which can be\n+\tchecked without crossing a page boundary. quadword offset is\n+\t(str2>>4)&0xFF.  */\n+\trlwinm\tr7,r4,28,0xFF\n+\t/* Below check is required only for first iteration. For second\n+\titeration and beyond, the new loop counter is always 255.  */\n+\tcmpldi\tr7,255\n+\tbeq\tL(L3)\n+\t/* Get the initial loop count by 255-((str2>>4)&0xFF).  */\n+\tsubfic  r11,r7,255\n \n-\t/* Cross the page boundary of s2, carefully. Only for first\n-\titeration we have to get the count of 64B blocks to be checked.\n-\tFrom second iteration and beyond, loop counter is always 63.  */\n-L(compare_64_pagecross):\n-\tli\tr11, 63\n+\t.p2align 5\n+L(L1):\n \tmtctr\tr11\n-\tcmpldi\tr10,16\n-\tble\tL(cross_4)\n-\tcmpldi\tr10,32\n-\tble\tL(cross_3)\n-\tcmpldi\tr10,48\n-\tble\tL(cross_2)\n-L(cross_1):\n-\tCHECK_N_BYTES(r3,r4,r9)\n-\tCHECK_N_BYTES(r3,r4,r8)\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\tCOMPARE_16(v4,v5,32)\n-\taddi\tr3,r3,48\n-\taddi\tr4,r4,48\n-\tb\tL(compare_64B_unaligned)\n-L(cross_2):\n-\tCOMPARE_16(v4,v5,0)\n-\taddi\tr3,r3,16\n-\taddi\tr4,r4,16\n-\tCHECK_N_BYTES(r3,r4,r9)\n-\tCHECK_N_BYTES(r3,r4,r8)\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\taddi\tr3,r3,32\n-\taddi\tr4,r4,32\n-\tb\tL(compare_64B_unaligned)\n-L(cross_3):\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\taddi\tr3,r3,32\n-\taddi\tr4,r4,32\n-\tCHECK_N_BYTES(r3,r4,r9)\n-\tCHECK_N_BYTES(r3,r4,r8)\n-\tCOMPARE_16(v4,v5,0)\n+\n+\t.p2align 5\n+L(L2):\n+\tCOMPARE_16(v4,v5,0)\t/* Load 16B blocks using lxv.  */\n \taddi\tr3,r3,16\n \taddi\tr4,r4,16\n-\tb\tL(compare_64B_unaligned)\n-L(cross_4):\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\tCOMPARE_16(v4,v5,32)\n-\taddi\tr3,r3,48\n-\taddi\tr4,r4,48\n+\tbdnz\tL(L2)\n+\t/* Cross the page boundary of s2, carefully.  */\n+\n+\t.p2align 5\n+L(L3):\n+\tCHECK_N_BYTES(r3,r4,r5)\n \tCHECK_N_BYTES(r3,r4,r9)\n-\tCHECK_N_BYTES(r3,r4,r8)\n-\tb\tL(compare_64B_unaligned)\n+\tli \tr11,255\t\t/* Load the new loop counter.  */\n+\tb\tL(L1)\n \n+\t.p2align 5\n L(same_aligned):\n \tCHECK_N_BYTES(r3,r4,r7)\n         /* Align s1 to 32B and adjust s2 address.\n@@ -208,7 +168,18 @@ L(16B_aligned_loop):\n \n \t/* Calculate and return the difference.  */\n L(different):\n-\tTAIL(v4,v5)\n+\tvctzlsbb r6,v7\n+\tvextubrx r5,r6,v4\n+\tvextubrx r4,r6,v5\n+\tbt  \t 4*cr1+eq,L(swapped)\n+\tsubf\t r3,r4,r5\n+\tblr\n+\n+\t/* If src pointers were swapped, then swap the\n+\tindices and calculate the return value.  */\n+L(swapped):\n+\tsubf     r3,r5,r4\n+\tblr\n \n \t.p2align 5\n L(32B_aligned_loop):\n\ncommit 672f31b90e501b4ba10ba12ab4c6051f77589912\nAuthor: Carlos O'Donell <carlos@redhat.com>\nDate:   Wed Jun 11 09:33:45 2025 -0400\n\n    ppc64le: Revert \"powerpc : Add optimized memchr for POWER10\" (Bug 33059)\n    \n    This reverts commit b9182c793caa05df5d697427c0538936e6396d4b\n    \n    Reason for revert: Power10 memchr clobbers v20 vector register\n    (Bug 33059)\n    \n    This is not a security issue, unlike CVE-2025-5745 and\n    CVE-2025-5702.\n    \n    Tested on ppc64le without regression.\n    \n    (cherry picked from commit a7877bb6685300f159fa095c9f50b22b112cddb8)\n\ndiff --git a/sysdeps/powerpc/powerpc64/le/power10/memchr.S b/sysdeps/powerpc/powerpc64/le/power10/memchr.S\ndeleted file mode 100644\nindex 53e5716d72..0000000000\n--- a/sysdeps/powerpc/powerpc64/le/power10/memchr.S\n+++ /dev/null\n@@ -1,315 +0,0 @@\n-/* Optimized memchr implementation for POWER10 LE.\n-   Copyright (C) 2021-2024 Free Software Foundation, Inc.\n-   This file is part of the GNU C Library.\n-\n-   The GNU C Library is free software; you can redistribute it and/or\n-   modify it under the terms of the GNU Lesser General Public\n-   License as published by the Free Software Foundation; either\n-   version 2.1 of the License, or (at your option) any later version.\n-\n-   The GNU C Library is distributed in the hope that it will be useful,\n-   but WITHOUT ANY WARRANTY; without even the implied warranty of\n-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\t See the GNU\n-   Lesser General Public License for more details.\n-\n-   You should have received a copy of the GNU Lesser General Public\n-   License along with the GNU C Library; if not, see\n-   <https://www.gnu.org/licenses/>.  */\n-\n-#include <sysdep.h>\n-\n-# ifndef MEMCHR\n-#  define MEMCHR __memchr\n-# endif\n-# define M_VREG_ZERO v20\n-# define M_OFF_START_LOOP 256\n-# define MEMCHR_SUBTRACT_VECTORS \\\n-\tvsububm   v4,v4,v18;\t    \\\n-\tvsububm   v5,v5,v18;\t    \\\n-\tvsububm   v6,v6,v18;\t    \\\n-\tvsububm   v7,v7,v18;\n-# define M_TAIL(vreg,increment)\t   \\\n-\tvctzlsbb  r4,vreg;\t   \\\n-\tcmpld     r5,r4;\t   \\\n-\tble       L(null);\t   \\\n-\taddi\t  r4,r4,increment; \\\n-\tadd\t  r3,r6,r4;\t   \\\n-\tblr\n-\n-/* TODO: Replace macros by the actual instructions when minimum binutils becomes\n-   >= 2.35.  This is used to keep compatibility with older versions.  */\n-#define M_VEXTRACTBM(rt,vrb)\t \\\n-\t.long(((4)<<(32-6))\t \\\n-\t      | ((rt)<<(32-11))\t \\\n-\t      | ((8)<<(32-16))\t \\\n-\t      | ((vrb)<<(32-21)) \\\n-\t      | 1602)\n-\n-#define M_LXVP(xtp,dq,ra)\t\t   \\\n-\t.long(((6)<<(32-6))\t\t   \\\n-\t      | ((((xtp)-32)>>1)<<(32-10)) \\\n-\t      | ((1)<<(32-11))\t\t   \\\n-\t      | ((ra)<<(32-16))\t\t   \\\n-\t      | dq)\n-\n-#define CHECK16B(vreg,offset,addr,label) \\\n-\tlxv\t  vreg+32,offset(addr);\t\\\n-\tvcmpequb. vreg,vreg,v18;\t\\\n-\tbne\t  cr6,L(label);\t\t\\\n-\tcmpldi\t  r5,16;\t\t\\\n-\tble\t  L(null);\t\t\\\n-\taddi\t  r5,r5,-16;\n-\n-/* Load 4 quadwords, merge into one VR for speed and check for NULLs.  r6 has #\n-   of bytes already checked.  */\n-#define CHECK64B(offset,addr,label)\t    \\\n-\tM_LXVP(v4+32,offset,addr);\t    \\\n-\tM_LXVP(v6+32,offset+32,addr);\t    \\\n-\tMEMCHR_SUBTRACT_VECTORS;\t    \\\n-\tvminub\t  v14,v4,v5;\t\t    \\\n-\tvminub\t  v15,v6,v7;\t\t    \\\n-\tvminub\t  v16,v14,v15;\t\t    \\\n-\tvcmpequb. v0,v16,M_VREG_ZERO;\t    \\\n-\tbeq\t  cr6,$+12;\t\t    \\\n-\tli\t  r7,offset;\t\t    \\\n-\tb     \t  L(label);          \t    \\\n-\tcmpldi\t  r5,64;\t\t    \\\n-\tble\t  L(null);\t\t    \\\n-\taddi\t  r5,r5,-64\n-\n-/* Implements the function\n-   void *[r3] memchr (const void *s [r3], int c [r4], size_t n [r5]).  */\n-\n-\t.machine power9\n-\n-ENTRY_TOCLESS (MEMCHR)\n-\tCALL_MCOUNT 3\n-\n-\tcmpldi\tr5,0\n-\tbeq\tL(null)\n-\tmr\tr0,r5\n-\txori\tr6,r4,0xff\n-\n-\tmtvsrd\tv18+32,r4\t/* matching char in v18  */\n-\tmtvsrd\tv19+32,r6\t/* non matching char in v19  */\n-\n-\tvspltb\tv18,v18,7\t/* replicate  */\n-\tvspltb\tv19,v19,7\t/* replicate  */\n-\tvspltisb  M_VREG_ZERO,0\n-\n-\t/* Next 16B-aligned address. Prepare address for L(aligned).  */\n-\taddi\t  r6,r3,16\n-\tclrrdi\t  r6,r6,4\n-\n-\t/* Align data and fill bytes not loaded with non matching char.\t */\n-\tlvx\t  v0,0,r3\n-\tlvsr\t  v1,0,r3\n-\tvperm\t  v0,v19,v0,v1\n-\n-\tvcmpequb. v6,v0,v18\n-\tbne\t  cr6,L(found)\n-\tsub\t  r4,r6,r3\n-\tcmpld\t  r5,r4\n-\tble\t  L(null)\n-\tsub\t  r5,r5,r4\n-\n-\t/* Test up to OFF_START_LOOP-16 bytes in 16B chunks.  The main loop is\n-\t   optimized for longer strings, so checking the first bytes in 16B\n-\t   chunks benefits a lot small strings.  */\n-\t.p2align 5\n-L(aligned):\n-\tcmpldi\tr5,0\n-\tbeq     L(null)\n-\n-\tCHECK16B(v0,0,r6,tail1)\n-\tCHECK16B(v1,16,r6,tail2)\n-\tCHECK16B(v2,32,r6,tail3)\n-\tCHECK16B(v3,48,r6,tail4)\n-\tCHECK16B(v4,64,r6,tail5)\n-\tCHECK16B(v5,80,r6,tail6)\n-\tCHECK16B(v6,96,r6,tail7)\n-\tCHECK16B(v7,112,r6,tail8)\n-\tCHECK16B(v8,128,r6,tail9)\n-\tCHECK16B(v9,144,r6,tail10)\n-\tCHECK16B(v10,160,r6,tail11)\n-\tCHECK16B(v0,176,r6,tail12)\n-\tCHECK16B(v1,192,r6,tail13)\n-\tCHECK16B(v2,208,r6,tail14)\n-\tCHECK16B(v3,224,r6,tail15)\n-\n-\tcmpdi\tcr5,r4,0\t/* Check if c == 0.  This will be useful to\n-\t\t\t\t   choose how we will perform the main loop.  */\n-\n-\t/* Prepare address for the loop.  */\n-\taddi\t  r4,r3,M_OFF_START_LOOP\n-\tclrrdi\t  r4,r4,6\n-\tsub\t  r6,r4,r3\n-\tsub\t  r5,r0,r6\n-\taddi\t  r6,r4,128\n-\n-\t/* If c == 0, use the loop without the vsububm.  */\n-\tbeq\tcr5,L(loop)\n-\n-\t/* This is very similar to the block after L(loop), the difference is\n-\t   that here MEMCHR_SUBTRACT_VECTORS is not empty, and we subtract\n-\t   each byte loaded by the char we are looking for, this way we can keep\n-\t   using vminub to merge the results and checking for nulls.  */\n-\t.p2align 5\n-L(memchr_loop):\n-\tCHECK64B(0,r4,pre_tail_64b)\n-\tCHECK64B(64,r4,pre_tail_64b)\n-\taddi\tr4,r4,256\n-\n-\tCHECK64B(0,r6,tail_64b)\n-\tCHECK64B(64,r6,tail_64b)\n-\taddi\tr6,r6,256\n-\n-\tCHECK64B(0,r4,pre_tail_64b)\n-\tCHECK64B(64,r4,pre_tail_64b)\n-\taddi\tr4,r4,256\n-\n-\tCHECK64B(0,r6,tail_64b)\n-\tCHECK64B(64,r6,tail_64b)\n-\taddi\tr6,r6,256\n-\n-\tb\tL(memchr_loop)\n-\t/* Switch to a more aggressive approach checking 64B each time.  Use 2\n-\t   pointers 128B apart and unroll the loop once to make the pointer\n-\t   updates and usages separated enough to avoid stalls waiting for\n-\t   address calculation.  */\n-\t.p2align 5\n-L(loop):\n-#undef MEMCHR_SUBTRACT_VECTORS\n-#define MEMCHR_SUBTRACT_VECTORS /* nothing */\n-\tCHECK64B(0,r4,pre_tail_64b)\n-\tCHECK64B(64,r4,pre_tail_64b)\n-\taddi\t  r4,r4,256\n-\n-\tCHECK64B(0,r6,tail_64b)\n-\tCHECK64B(64,r6,tail_64b)\n-\taddi\t  r6,r6,256\n-\n-\tCHECK64B(0,r4,pre_tail_64b)\n-\tCHECK64B(64,r4,pre_tail_64b)\n-\taddi      r4,r4,256\n-\n-\tCHECK64B(0,r6,tail_64b)\n-\tCHECK64B(64,r6,tail_64b)\n-\taddi      r6,r6,256\n-\n-\tb\t  L(loop)\n-\n-\t.p2align  5\n-L(pre_tail_64b):\n-\tmr\tr6,r4\n-L(tail_64b):\n-\t/* OK, we found a null byte.  Let's look for it in the current 64-byte\n-\t   block and mark it in its corresponding VR.  lxvp vx,0(ry) puts the\n-\t   low 16B bytes into vx+1, and the high into vx, so the order here is\n-\t   v5, v4, v7, v6.  */\n-\tvcmpequb  v1,v5,M_VREG_ZERO\n-\tvcmpequb  v2,v4,M_VREG_ZERO\n-\tvcmpequb  v3,v7,M_VREG_ZERO\n-\tvcmpequb  v4,v6,M_VREG_ZERO\n-\n-\t/* Take into account the other 64B blocks we had already checked.  */\n-\tadd\tr6,r6,r7\n-\t/* Extract first bit of each byte.  */\n-\tM_VEXTRACTBM(r8,v1)\n-\tM_VEXTRACTBM(r9,v2)\n-\tM_VEXTRACTBM(r10,v3)\n-\tM_VEXTRACTBM(r11,v4)\n-\n-\t/* Shift each value into their corresponding position.  */\n-\tsldi\t  r9,r9,16\n-\tsldi\t  r10,r10,32\n-\tsldi\t  r11,r11,48\n-\n-\t/* Merge the results.  */\n-\tor\t  r8,r8,r9\n-\tor\t  r9,r10,r11\n-\tor\t  r11,r9,r8\n-\n-\tcnttzd\t  r0,r11\t  /* Count trailing zeros before the match.  */\n-\tcmpld     r5,r0\n-\tble\t  L(null)\n-\tadd\t  r3,r6,r0\t  /* Compute final address.  */\n-\tblr\n-\n-\t.p2align  5\n-L(tail1):\n-\tM_TAIL(v0,0)\n-\n-\t.p2align  5\n-L(tail2):\n-\tM_TAIL(v1,16)\n-\n-\t.p2align  5\n-L(tail3):\n-\tM_TAIL(v2,32)\n-\n-\t.p2align  5\n-L(tail4):\n-\tM_TAIL(v3,48)\n-\n-\t.p2align  5\n-L(tail5):\n-\tM_TAIL(v4,64)\n-\n-\t.p2align  5\n-L(tail6):\n-\tM_TAIL(v5,80)\n-\n-\t.p2align  5\n-L(tail7):\n-\tM_TAIL(v6,96)\n-\n-\t.p2align  5\n-L(tail8):\n-\tM_TAIL(v7,112)\n-\n-\t.p2align  5\n-L(tail9):\n-\tM_TAIL(v8,128)\n-\n-\t.p2align  5\n-L(tail10):\n-\tM_TAIL(v9,144)\n-\n-\t.p2align  5\n-L(tail11):\n-\tM_TAIL(v10,160)\n-\n-\t.p2align  5\n-L(tail12):\n-\tM_TAIL(v0,176)\n-\n-\t.p2align  5\n-L(tail13):\n-\tM_TAIL(v1,192)\n-\n-\t.p2align  5\n-L(tail14):\n-\tM_TAIL(v2,208)\n-\n-\t.p2align  5\n-L(tail15):\n-\tM_TAIL(v3,224)\n-\n-\t.p2align  5\n-L(found):\n-\tvctzlsbb  r7,v6\n-\tcmpld     r5,r7\n-\tble       L(null)\n-\tadd       r3,r3,r7\n-\tblr\n-\n-\t.p2align  5\n-L(null):\n-\tli\tr3,0\n-\tblr\n-\n-END (MEMCHR)\n-\n-weak_alias (__memchr, memchr)\n-libc_hidden_builtin_def (memchr)\ndiff --git a/sysdeps/powerpc/powerpc64/multiarch/Makefile b/sysdeps/powerpc/powerpc64/multiarch/Makefile\nindex a38ff46448..fa1107dfd9 100644\n--- a/sysdeps/powerpc/powerpc64/multiarch/Makefile\n+++ b/sysdeps/powerpc/powerpc64/multiarch/Makefile\n@@ -31,10 +31,10 @@ sysdep_routines += memcpy-power8-cached memcpy-power7 memcpy-a2 memcpy-power6 \\\n \t\t   strncase-power8\n \n ifneq (,$(filter %le,$(config-machine)))\n-sysdep_routines += memchr-power10 memcmp-power10 memcpy-power10 \\\n-\t\t   memmove-power10 memset-power10 rawmemchr-power9 \\\n-\t\t   rawmemchr-power10 strcmp-power9 strcmp-power10 \\\n-\t\t   strncmp-power9 strcpy-power9 stpcpy-power9 \\\n+sysdep_routines += memcmp-power10 memcpy-power10 memmove-power10 memset-power10 \\\n+\t\t   rawmemchr-power9 rawmemchr-power10 \\\n+\t\t   strcmp-power9 strcmp-power10 strncmp-power9 \\\n+\t\t   strcpy-power9 stpcpy-power9 \\\n \t\t   strlen-power9 strncpy-power9 stpncpy-power9 strlen-power10\n endif\n CFLAGS-strncase-power7.c += -mcpu=power7 -funroll-loops\ndiff --git a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c\nindex 30fd89e109..9b3e617306 100644\n--- a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c\n+++ b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c\n@@ -226,12 +226,6 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,\n \n   /* Support sysdeps/powerpc/powerpc64/multiarch/memchr.c.  */\n   IFUNC_IMPL (i, name, memchr,\n-#ifdef __LITTLE_ENDIAN__\n-\t      IFUNC_IMPL_ADD (array, i, memchr,\n-\t\t              hwcap2 & PPC_FEATURE2_ARCH_3_1\n-\t\t\t      && hwcap & PPC_FEATURE_HAS_VSX,\n-\t\t\t      __memchr_power10)\n-#endif\n \t      IFUNC_IMPL_ADD (array, i, memchr,\n \t\t\t      hwcap2 & PPC_FEATURE2_ARCH_2_07\n \t\t\t      && hwcap & PPC_FEATURE_HAS_ALTIVEC,\ndiff --git a/sysdeps/powerpc/powerpc64/multiarch/memchr-power10.S b/sysdeps/powerpc/powerpc64/multiarch/memchr-power10.S\ndeleted file mode 100644\nindex 7d35ef28a9..0000000000\n--- a/sysdeps/powerpc/powerpc64/multiarch/memchr-power10.S\n+++ /dev/null\n@@ -1,28 +0,0 @@\n-/* Optimized memchr implementation for POWER10/PPC64.\n-   Copyright (C) 2016-2024 Free Software Foundation, Inc.\n-   This file is part of the GNU C Library.\n-\n-   The GNU C Library is free software; you can redistribute it and/or\n-   modify it under the terms of the GNU Lesser General Public\n-   License as published by the Free Software Foundation; either\n-   version 2.1 of the License, or (at your option) any later version.\n-\n-   The GNU C Library is distributed in the hope that it will be useful,\n-   but WITHOUT ANY WARRANTY; without even the implied warranty of\n-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n-   Lesser General Public License for more details.\n-\n-   You should have received a copy of the GNU Lesser General Public\n-   License along with the GNU C Library; if not, see\n-   <https://www.gnu.org/licenses/>.  */\n-\n-#if defined __LITTLE_ENDIAN__ && IS_IN (libc)\n-#define MEMCHR __memchr_power10\n-\n-#undef libc_hidden_builtin_def\n-#define libc_hidden_builtin_def(name)\n-#undef weak_alias\n-#define weak_alias(name,alias)\n-\n-#include <sysdeps/powerpc/powerpc64/le/power10/memchr.S>\n-#endif\ndiff --git a/sysdeps/powerpc/powerpc64/multiarch/memchr.c b/sysdeps/powerpc/powerpc64/multiarch/memchr.c\nindex 57d23e7b18..b4655dfcaa 100644\n--- a/sysdeps/powerpc/powerpc64/multiarch/memchr.c\n+++ b/sysdeps/powerpc/powerpc64/multiarch/memchr.c\n@@ -25,23 +25,15 @@ extern __typeof (__memchr) __memchr_ppc attribute_hidden;\n extern __typeof (__memchr) __memchr_power7 attribute_hidden;\n extern __typeof (__memchr) __memchr_power8 attribute_hidden;\n \n-# ifdef __LITTLE_ENDIAN__\n-extern __typeof (__memchr) __memchr_power10 attribute_hidden;\n-# endif\n /* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle\n    ifunc symbol properly.  */\n libc_ifunc (__memchr,\n-# ifdef __LITTLE_ENDIAN__\n-\t    (hwcap2 & PPC_FEATURE2_ARCH_3_1\n-\t     && hwcap & PPC_FEATURE_HAS_VSX)\n-\t    ? __memchr_power10 :\n-# endif\n-\t      (hwcap2 & PPC_FEATURE2_ARCH_2_07\n-\t      && hwcap & PPC_FEATURE_HAS_ALTIVEC)\n-\t      ? __memchr_power8 :\n-\t        (hwcap & PPC_FEATURE_ARCH_2_06)\n-\t        ? __memchr_power7\n-\t        : __memchr_ppc);\n+\t    (hwcap2 & PPC_FEATURE2_ARCH_2_07\n+\t     && hwcap & PPC_FEATURE_HAS_ALTIVEC)\n+\t    ? __memchr_power8 :\n+\t    (hwcap & PPC_FEATURE_ARCH_2_06)\n+            ? __memchr_power7\n+            : __memchr_ppc);\n \n weak_alias (__memchr, memchr)\n libc_hidden_builtin_def (memchr)\n\ncommit 7e12550b8e3a11764a4a9090ce6bd3fc23fc8a8e\nAuthor: Carlos O'Donell <carlos@redhat.com>\nDate:   Mon Jun 16 13:09:57 2025 -0400\n\n    ppc64le: Revert \"powerpc: Optimized strcmp for power10\" (CVE-2025-5702)\n    \n    This reverts commit 3367d8e180848030d1646f088759f02b8dfe0d6f\n    \n    Reason for revert: Power10 strcmp clobbers non-volatile vector\n    registers (Bug 33056)\n    \n    Tested on ppc64le without regression.\n    \n    (cherry picked from commit 15808c77b35319e67ee0dc8f984a9a1a434701bc)\n\ndiff --git a/sysdeps/powerpc/powerpc64/le/power10/strcmp.S b/sysdeps/powerpc/powerpc64/le/power10/strcmp.S\ndeleted file mode 100644\nindex 00f1e9c170..0000000000\n--- a/sysdeps/powerpc/powerpc64/le/power10/strcmp.S\n+++ /dev/null\n@@ -1,204 +0,0 @@\n-/* Optimized strcmp implementation for PowerPC64/POWER10.\n-   Copyright (C) 2021-2024 Free Software Foundation, Inc.\n-   This file is part of the GNU C Library.\n-\n-   The GNU C Library is free software; you can redistribute it and/or\n-   modify it under the terms of the GNU Lesser General Public\n-   License as published by the Free Software Foundation; either\n-   version 2.1 of the License, or (at your option) any later version.\n-\n-   The GNU C Library is distributed in the hope that it will be useful,\n-   but WITHOUT ANY WARRANTY; without even the implied warranty of\n-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n-   Lesser General Public License for more details.\n-\n-   You should have received a copy of the GNU Lesser General Public\n-   License along with the GNU C Library; if not, see\n-   <https://www.gnu.org/licenses/>.  */\n-#include <sysdep.h>\n-\n-#ifndef STRCMP\n-# define STRCMP strcmp\n-#endif\n-\n-/* Implements the function\n-   int [r3] strcmp (const char *s1 [r3], const char *s2 [r4]).  */\n-\n-/* TODO: Change this to actual instructions when minimum binutils is upgraded\n-   to 2.27.  Macros are defined below for these newer instructions in order\n-   to maintain compatibility.  */\n-\n-#define LXVP(xtp,dq,ra)\t\t     \\\n-\t.long(((6)<<(32-6))\t     \\\n-\t| ((((xtp)-32)>>1)<<(32-10)) \\\n-\t| ((1)<<(32-11))\t     \\\n-\t| ((ra)<<(32-16))\t     \\\n-\t| dq)\n-\n-#define COMPARE_16(vreg1,vreg2,offset)  \\\n-\tlxv       vreg1+32,offset(r3);  \\\n-\tlxv       vreg2+32,offset(r4);\t\\\n-\tvcmpnezb. v7,vreg1,vreg2;\t\\\n-\tbne       cr6,L(different);     \\\n-\n-#define COMPARE_32(vreg1,vreg2,offset,label1,label2) \\\n-\tLXVP(vreg1+32,offset,r3);                    \\\n-\tLXVP(vreg2+32,offset,r4);                    \\\n-\tvcmpnezb. v7,vreg1+1,vreg2+1;                \\\n-\tbne\t  cr6,L(label1);                     \\\n-\tvcmpnezb. v7,vreg1,vreg2;                    \\\n-\tbne\t  cr6,L(label2);                     \\\n-\n-#define TAIL(vreg1,vreg2)     \\\n-\tvctzlsbb r6,v7;\t      \\\n-\tvextubrx r5,r6,vreg1; \\\n-\tvextubrx r4,r6,vreg2; \\\n-\tsubf\t r3,r4,r5;    \\\n-\tblr;                  \\\n-\n-#define CHECK_N_BYTES(reg1,reg2,len_reg) \\\n-\tsldi\t  r0,len_reg,56;         \\\n-\tlxvl\t  32+v4,reg1,r0;         \\\n-\tlxvl\t  32+v5,reg2,r0;         \\\n-\tadd\t  reg1,reg1,len_reg;     \\\n-\tadd\t  reg2,reg2,len_reg;     \\\n-\tvcmpnezb. v7,v4,v5;              \\\n-\tvctzlsbb  r6,v7;                 \\\n-\tcmpld\t  cr7,r6,len_reg;        \\\n-\tblt\t  cr7,L(different);      \\\n-\n-\t/* TODO: change this to .machine power10 when the minimum required\n-\tbinutils allows it.  */\n-\n-\t.machine  power9\n-ENTRY_TOCLESS (STRCMP, 4)\n-\tli\t r11,16\n-\t/* eq bit of cr1 used as swap status flag to indicate if\n-\tsource pointers were swapped.  */\n-\tcrclr\t 4*cr1+eq\n-\tvspltisb v19,-1\n-\tandi.\t r7,r3,15\n-\tsub\t r7,r11,r7\t/* r7(nalign1) = 16 - (str1 & 15).  */\n-\tandi.\t r9,r4,15\n-\tsub\t r5,r11,r9\t/* r5(nalign2) = 16 - (str2 & 15).  */\n-\tcmpld\t cr7,r7,r5\n-\tbeq\t cr7,L(same_aligned)\n-\tblt\t cr7,L(nalign1_min)\n-\t/* Swap r3 and r4, and r7 and r5 such that r3 and r7 hold the\n-\tpointer which is closer to the next 16B boundary so that only\n-\tone CHECK_N_BYTES is needed before entering the loop below.  */\n-\tmr\t r8,r4\n-\tmr\t r4,r3\n-\tmr\t r3,r8\n-\tmr\t r12,r7\n-\tmr\t r7,r5\n-\tmr\t r5,r12\n-\tcrset\t 4*cr1+eq\t/* Set bit on swapping source pointers.  */\n-\n-\t.p2align 5\n-L(nalign1_min):\n-\tCHECK_N_BYTES(r3,r4,r7)\n-\n-\t.p2align 5\n-L(s1_aligned):\n-\t/* r9 and r5 is number of bytes to be read after and before\n-\t page boundary correspondingly.  */\n-\tsub \tr5,r5,r7\n-\tsubfic\tr9,r5,16\n-\t/* Now let r7 hold the count of quadwords which can be\n-\tchecked without crossing a page boundary. quadword offset is\n-\t(str2>>4)&0xFF.  */\n-\trlwinm\tr7,r4,28,0xFF\n-\t/* Below check is required only for first iteration. For second\n-\titeration and beyond, the new loop counter is always 255.  */\n-\tcmpldi\tr7,255\n-\tbeq\tL(L3)\n-\t/* Get the initial loop count by 255-((str2>>4)&0xFF).  */\n-\tsubfic  r11,r7,255\n-\n-\t.p2align 5\n-L(L1):\n-\tmtctr\tr11\n-\n-\t.p2align 5\n-L(L2):\n-\tCOMPARE_16(v4,v5,0)\t/* Load 16B blocks using lxv.  */\n-\taddi\tr3,r3,16\n-\taddi\tr4,r4,16\n-\tbdnz\tL(L2)\n-\t/* Cross the page boundary of s2, carefully.  */\n-\n-\t.p2align 5\n-L(L3):\n-\tCHECK_N_BYTES(r3,r4,r5)\n-\tCHECK_N_BYTES(r3,r4,r9)\n-\tli \tr11,255\t\t/* Load the new loop counter.  */\n-\tb\tL(L1)\n-\n-\t.p2align 5\n-L(same_aligned):\n-\tCHECK_N_BYTES(r3,r4,r7)\n-        /* Align s1 to 32B and adjust s2 address.\n-\t   Use lxvp only if both s1 and s2 are 32B aligned.  */\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\tCOMPARE_16(v4,v5,32)\n-\tCOMPARE_16(v4,v5,48)\n-\taddi\tr3,r3,64\n-\taddi\tr4,r4,64\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\n-\tclrldi\tr6,r3,59\n-\tsubfic\tr5,r6,32\n-\tadd\tr3,r3,r5\n-\tadd\tr4,r4,r5\n-\tandi.\tr5,r4,0x1F\n-\tbeq\tcr0,L(32B_aligned_loop)\n-\n-\t.p2align 5\n-L(16B_aligned_loop):\n-\tCOMPARE_16(v4,v5,0)\n-\tCOMPARE_16(v4,v5,16)\n-\tCOMPARE_16(v4,v5,32)\n-\tCOMPARE_16(v4,v5,48)\n-\taddi\tr3,r3,64\n-\taddi\tr4,r4,64\n-\tb\tL(16B_aligned_loop)\n-\n-\t/* Calculate and return the difference.  */\n-L(different):\n-\tvctzlsbb r6,v7\n-\tvextubrx r5,r6,v4\n-\tvextubrx r4,r6,v5\n-\tbt  \t 4*cr1+eq,L(swapped)\n-\tsubf\t r3,r4,r5\n-\tblr\n-\n-\t/* If src pointers were swapped, then swap the\n-\tindices and calculate the return value.  */\n-L(swapped):\n-\tsubf     r3,r5,r4\n-\tblr\n-\n-\t.p2align 5\n-L(32B_aligned_loop):\n-\tCOMPARE_32(v14,v16,0,tail1,tail2)\n-\tCOMPARE_32(v18,v20,32,tail3,tail4)\n-\tCOMPARE_32(v22,v24,64,tail5,tail6)\n-\tCOMPARE_32(v26,v28,96,tail7,tail8)\n-\taddi\tr3,r3,128\n-\taddi\tr4,r4,128\n-\tb\tL(32B_aligned_loop)\n-\n-L(tail1): TAIL(v15,v17)\n-L(tail2): TAIL(v14,v16)\n-L(tail3): TAIL(v19,v21)\n-L(tail4): TAIL(v18,v20)\n-L(tail5): TAIL(v23,v25)\n-L(tail6): TAIL(v22,v24)\n-L(tail7): TAIL(v27,v29)\n-L(tail8): TAIL(v26,v28)\n-\n-END (STRCMP)\n-libc_hidden_builtin_def (strcmp)\ndiff --git a/sysdeps/powerpc/powerpc64/multiarch/Makefile b/sysdeps/powerpc/powerpc64/multiarch/Makefile\nindex fa1107dfd9..9f15f3207f 100644\n--- a/sysdeps/powerpc/powerpc64/multiarch/Makefile\n+++ b/sysdeps/powerpc/powerpc64/multiarch/Makefile\n@@ -33,8 +33,7 @@ sysdep_routines += memcpy-power8-cached memcpy-power7 memcpy-a2 memcpy-power6 \\\n ifneq (,$(filter %le,$(config-machine)))\n sysdep_routines += memcmp-power10 memcpy-power10 memmove-power10 memset-power10 \\\n \t\t   rawmemchr-power9 rawmemchr-power10 \\\n-\t\t   strcmp-power9 strcmp-power10 strncmp-power9 \\\n-\t\t   strcpy-power9 stpcpy-power9 \\\n+\t\t   strcmp-power9 strncmp-power9 strcpy-power9 stpcpy-power9 \\\n \t\t   strlen-power9 strncpy-power9 stpncpy-power9 strlen-power10\n endif\n CFLAGS-strncase-power7.c += -mcpu=power7 -funroll-loops\ndiff --git a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c\nindex 9b3e617306..78443b7f34 100644\n--- a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c\n+++ b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c\n@@ -377,10 +377,6 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,\n   /* Support sysdeps/powerpc/powerpc64/multiarch/strcmp.c.  */\n   IFUNC_IMPL (i, name, strcmp,\n #ifdef __LITTLE_ENDIAN__\n-\t      IFUNC_IMPL_ADD (array, i, strcmp,\n-\t\t\t      (hwcap2 & PPC_FEATURE2_ARCH_3_1)\n-\t\t\t      && (hwcap & PPC_FEATURE_HAS_VSX),\n-\t\t\t      __strcmp_power10)\n \t      IFUNC_IMPL_ADD (array, i, strcmp,\n \t\t\t      hwcap2 & PPC_FEATURE2_ARCH_3_00\n \t\t\t      && hwcap & PPC_FEATURE_HAS_ALTIVEC,\ndiff --git a/sysdeps/powerpc/powerpc64/multiarch/strcmp-power10.S b/sysdeps/powerpc/powerpc64/multiarch/strcmp-power10.S\ndeleted file mode 100644\nindex 1a9f6069f5..0000000000\n--- a/sysdeps/powerpc/powerpc64/multiarch/strcmp-power10.S\n+++ /dev/null\n@@ -1,26 +0,0 @@\n-/* Optimized strcmp implementation for POWER10/PPC64.\n-   Copyright (C) 2021-2024 Free Software Foundation, Inc.\n-   This file is part of the GNU C Library.\n-\n-   The GNU C Library is free software; you can redistribute it and/or\n-   modify it under the terms of the GNU Lesser General Public\n-   License as published by the Free Software Foundation; either\n-   version 2.1 of the License, or (at your option) any later version.\n-\n-   The GNU C Library is distributed in the hope that it will be useful,\n-   but WITHOUT ANY WARRANTY; without even the implied warranty of\n-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n-   Lesser General Public License for more details.\n-\n-   You should have received a copy of the GNU Lesser General Public\n-   License along with the GNU C Library; if not, see\n-   <https://www.gnu.org/licenses/>.  */\n-\n-#if defined __LITTLE_ENDIAN__ && IS_IN (libc)\n-#define STRCMP __strcmp_power10\n-\n-#undef libc_hidden_builtin_def\n-#define libc_hidden_builtin_def(name)\n-\n-#include <sysdeps/powerpc/powerpc64/le/power10/strcmp.S>\n-#endif /* __LITTLE_ENDIAN__ && IS_IN (libc) */\ndiff --git a/sysdeps/powerpc/powerpc64/multiarch/strcmp.c b/sysdeps/powerpc/powerpc64/multiarch/strcmp.c\nindex ff32496fab..06b9b4090f 100644\n--- a/sysdeps/powerpc/powerpc64/multiarch/strcmp.c\n+++ b/sysdeps/powerpc/powerpc64/multiarch/strcmp.c\n@@ -29,16 +29,12 @@ extern __typeof (strcmp) __strcmp_power7 attribute_hidden;\n extern __typeof (strcmp) __strcmp_power8 attribute_hidden;\n # ifdef __LITTLE_ENDIAN__\n extern __typeof (strcmp) __strcmp_power9 attribute_hidden;\n-extern __typeof (strcmp) __strcmp_power10 attribute_hidden;\n # endif\n \n # undef strcmp\n \n libc_ifunc_redirected (__redirect_strcmp, strcmp,\n # ifdef __LITTLE_ENDIAN__\n-\t\t        (hwcap2 & PPC_FEATURE2_ARCH_3_1\n-\t\t\t && hwcap & PPC_FEATURE_HAS_VSX)\n-\t\t\t? __strcmp_power10 :\n \t\t\t(hwcap2 & PPC_FEATURE2_ARCH_3_00\n \t\t\t && hwcap & PPC_FEATURE_HAS_ALTIVEC)\n \t\t\t? __strcmp_power9 :\n\ncommit 23a02e382c8ffebfed00a082d8898f1aa468b5da\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Wed May 21 16:47:34 2025 +0200\n\n    support: Pick group in support_capture_subprogram_self_sgid if UID == 0\n    \n    When running as root, it is likely that we can run under any group.\n    Pick a harmless group from /etc/group in this case.\n    \n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit 2f769cec448d84a62b7dd0d4ff56978fe22c0cd6)\n\ndiff --git a/support/support_capture_subprocess.c b/support/support_capture_subprocess.c\nindex 2383481911..1cb344eb04 100644\n--- a/support/support_capture_subprocess.c\n+++ b/support/support_capture_subprocess.c\n@@ -21,7 +21,11 @@\n \n #include <errno.h>\n #include <fcntl.h>\n+#include <grp.h>\n+#include <scratch_buffer.h>\n+#include <stdio_ext.h>\n #include <stdlib.h>\n+#include <string.h>\n #include <support/check.h>\n #include <support/xunistd.h>\n #include <support/xsocket.h>\n@@ -210,10 +214,48 @@ err:\n   return status;\n }\n \n+/* Returns true if a group with NAME has been found, and writes its\n+   GID to *TARGET.  */\n+static bool\n+find_sgid_group (gid_t *target, const char *name)\n+{\n+  /* Do not use getgrname_r because it does not work in statically\n+     linked binaries if the system libc is different.  */\n+  FILE *fp = fopen (\"/etc/group\", \"rce\");\n+  if (fp == NULL)\n+    return false;\n+  __fsetlocking (fp, FSETLOCKING_BYCALLER);\n+\n+  bool ok = false;\n+  struct scratch_buffer buf;\n+  scratch_buffer_init (&buf);\n+  while (true)\n+    {\n+      struct group grp;\n+      struct group *result = NULL;\n+      int status = fgetgrent_r (fp, &grp, buf.data, buf.length, &result);\n+      if (status == 0 && result != NULL)\n+\t{\n+\t  if (strcmp (result->gr_name, name) == 0)\n+\t    {\n+\t      *target = result->gr_gid;\n+\t      ok = true;\n+\t      break;\n+\t    }\n+\t}\n+      else if (errno != ERANGE)\n+\tbreak;\n+      else if (!scratch_buffer_grow (&buf))\n+\tbreak;\n+    }\n+  scratch_buffer_free (&buf);\n+  fclose (fp);\n+  return ok;\n+}\n+\n int\n support_capture_subprogram_self_sgid (const char *child_id)\n {\n-  gid_t target = 0;\n   const int count = 64;\n   gid_t groups[count];\n \n@@ -225,6 +267,7 @@ support_capture_subprogram_self_sgid (const char *child_id)\n \t\t     (intmax_t) getuid ());\n \n   gid_t current = getgid ();\n+  gid_t target = current;\n   for (int i = 0; i < ret; ++i)\n     {\n       if (groups[i] != current)\n@@ -234,9 +277,16 @@ support_capture_subprogram_self_sgid (const char *child_id)\n \t}\n     }\n \n-  if (target == 0)\n-    FAIL_UNSUPPORTED(\"Could not find a suitable GID for user %jd\\n\",\n-\t\t     (intmax_t) getuid ());\n+  if (target == current)\n+    {\n+      /* If running as root, try to find a harmless group for SGID.  */\n+      if (getuid () != 0\n+\t  || (!find_sgid_group (&target, \"nogroup\")\n+\t      && !find_sgid_group (&target, \"bin\")\n+\t      && !find_sgid_group (&target, \"daemon\")))\n+\tFAIL_UNSUPPORTED(\"Could not find a suitable GID for user %jd\\n\",\n+\t\t\t (intmax_t) getuid ());\n+    }\n \n   return copy_and_spawn_sgid (child_id, target);\n }\n\ncommit dbc83657e290bdad3245259be80fb84cbe10304c\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Thu May 22 14:36:37 2025 +0200\n\n    Fix error reporting (false negatives) in SGID tests\n    \n    And simplify the interface of support_capture_subprogram_self_sgid.\n    \n    Use the existing framework for temporary directories (now with\n    mode 0700) and directory/file deletion.  Handle all execution\n    errors within support_capture_subprogram_self_sgid.  In particular,\n    this includes test failures because the invoked program did not\n    exit with exit status zero.  Existing tests that expect exit\n    status 42 are adjusted to use zero instead.\n    \n    In addition, fix callers not to call exit (0) with test failures\n    pending (which may mask them, especially when running with --direct).\n    \n    Fixes commit 35fc356fa3b4f485bd3ba3114c9f774e5df7d3c2\n    (\"elf: Fix subprocess status handling for tst-dlopen-sgid (bug 32987)\").\n    \n    Reviewed-by: Carlos O'Donell <carlos@redhat.com>\n    (cherry picked from commit 3a3fb2ed83f79100c116c824454095ecfb335ad7)\n\ndiff --git a/elf/tst-dlopen-sgid.c b/elf/tst-dlopen-sgid.c\nindex 5688b79f2e..8aec52e19f 100644\n--- a/elf/tst-dlopen-sgid.c\n+++ b/elf/tst-dlopen-sgid.c\n@@ -70,13 +70,7 @@ do_test (void)\n \n   free (libdir);\n \n-  int status = support_capture_subprogram_self_sgid (magic_argument);\n-\n-  if (WEXITSTATUS (status) == EXIT_UNSUPPORTED)\n-    return EXIT_UNSUPPORTED;\n-\n-  if (!WIFEXITED (status))\n-    FAIL_EXIT1 (\"Unexpected exit status %d from child process\\n\", status);\n+  support_capture_subprogram_self_sgid (magic_argument);\n \n   return 0;\n }\ndiff --git a/elf/tst-env-setuid-tunables.c b/elf/tst-env-setuid-tunables.c\nindex a47219047f..233eec7631 100644\n--- a/elf/tst-env-setuid-tunables.c\n+++ b/elf/tst-env-setuid-tunables.c\n@@ -105,10 +105,7 @@ do_test (int argc, char **argv)\n \n       if (ret != 0)\n \texit (1);\n-\n-      /* Special return code to make sure that the child executed all the way\n-\t through.  */\n-      exit (42);\n+      return 0;\n     }\n   else\n     {\n@@ -127,18 +124,7 @@ do_test (int argc, char **argv)\n \t      continue;\n \t    }\n \n-\t  int status = support_capture_subprogram_self_sgid (buf);\n-\n-\t  /* Bail out early if unsupported.  */\n-\t  if (WEXITSTATUS (status) == EXIT_UNSUPPORTED)\n-\t    return EXIT_UNSUPPORTED;\n-\n-\t  if (WEXITSTATUS (status) != 42)\n-\t    {\n-\t      printf (\"    [%d] child failed with status %d\\n\", i,\n-\t\t      WEXITSTATUS (status));\n-\t      support_record_failure ();\n-\t    }\n+\t  support_capture_subprogram_self_sgid (buf);\n \t}\n       return 0;\n     }\ndiff --git a/elf/tst-env-setuid.c b/elf/tst-env-setuid.c\nindex 59f2ffeb88..ee3f058468 100644\n--- a/elf/tst-env-setuid.c\n+++ b/elf/tst-env-setuid.c\n@@ -147,10 +147,7 @@ do_test (int argc, char **argv)\n \n       if (ret != 0)\n \texit (1);\n-\n-      /* Special return code to make sure that the child executed all the way\n-\t through.  */\n-      exit (42);\n+      return 0;\n     }\n   else\n     {\n@@ -174,17 +171,7 @@ do_test (int argc, char **argv)\n \tfree (profilepath);\n       }\n \n-      int status = support_capture_subprogram_self_sgid (SETGID_CHILD);\n-\n-      if (WEXITSTATUS (status) == EXIT_UNSUPPORTED)\n-\texit (EXIT_UNSUPPORTED);\n-\n-      if (WEXITSTATUS (status) != 42)\n-\t{\n-\t  printf (\"    child failed with status %d\\n\",\n-\t\t  WEXITSTATUS (status));\n-\t  support_record_failure ();\n-\t}\n+      support_capture_subprogram_self_sgid (SETGID_CHILD);\n \n       return 0;\n     }\ndiff --git a/stdlib/tst-secure-getenv.c b/stdlib/tst-secure-getenv.c\nindex cc26ed6d15..cefee58d46 100644\n--- a/stdlib/tst-secure-getenv.c\n+++ b/stdlib/tst-secure-getenv.c\n@@ -57,13 +57,7 @@ do_test (void)\n       exit (1);\n     }\n \n-  int status = support_capture_subprogram_self_sgid (MAGIC_ARGUMENT);\n-\n-  if (WEXITSTATUS (status) == EXIT_UNSUPPORTED)\n-    return EXIT_UNSUPPORTED;\n-\n-  if (!WIFEXITED (status))\n-    FAIL_EXIT1 (\"Unexpected exit status %d from child process\\n\", status);\n+  support_capture_subprogram_self_sgid (MAGIC_ARGUMENT);\n \n   return 0;\n }\n@@ -82,6 +76,7 @@ alternative_main (int argc, char **argv)\n       if (secure_getenv (\"PATH\") != NULL)\n \tFAIL_EXIT (4, \"PATH variable not filtered out\\n\");\n \n+      support_record_failure_barrier ();\n       exit (EXIT_SUCCESS);\n     }\n }\ndiff --git a/support/capture_subprocess.h b/support/capture_subprocess.h\nindex 5406d9f6c0..57bb941e7d 100644\n--- a/support/capture_subprocess.h\n+++ b/support/capture_subprocess.h\n@@ -42,10 +42,12 @@ struct support_capture_subprocess support_capture_subprocess\n struct support_capture_subprocess support_capture_subprogram\n   (const char *file, char *const argv[], char *const envp[]);\n \n-/* Copy the running program into a setgid binary and run it with CHILD_ID\n-   argument.  If execution is successful, return the exit status of the child\n-   program, otherwise return a non-zero failure exit code.  */\n-int support_capture_subprogram_self_sgid (const char *child_id);\n+/* Copy the running program into a setgid binary and run it with\n+   CHILD_ID argument.  If the program exits with a non-zero status,\n+   exit with that exit status (or status 1 if the program did not exit\n+   normally).  If the test cannot be performed, exit with\n+   EXIT_UNSUPPORTED.  */\n+void support_capture_subprogram_self_sgid (const char *child_id);\n \n /* Deallocate the subprocess data captured by\n    support_capture_subprocess.  */\ndiff --git a/support/support_capture_subprocess.c b/support/support_capture_subprocess.c\nindex 1cb344eb04..cbc6951064 100644\n--- a/support/support_capture_subprocess.c\n+++ b/support/support_capture_subprocess.c\n@@ -31,6 +31,7 @@\n #include <support/xsocket.h>\n #include <support/xspawn.h>\n #include <support/support.h>\n+#include <support/temp_file.h>\n #include <support/test-driver.h>\n \n static void\n@@ -113,105 +114,44 @@ support_capture_subprogram (const char *file, char *const argv[],\n /* Copies the executable into a restricted directory, so that we can\n    safely make it SGID with the TARGET group ID.  Then runs the\n    executable.  */\n-static int\n+static void\n copy_and_spawn_sgid (const char *child_id, gid_t gid)\n {\n-  char *dirname = xasprintf (\"%s/tst-tunables-setuid.%jd\",\n-\t\t\t     test_dir, (intmax_t) getpid ());\n+  char *dirname = support_create_temp_directory (\"tst-glibc-sgid-\");\n   char *execname = xasprintf (\"%s/bin\", dirname);\n-  int infd = -1;\n-  int outfd = -1;\n-  int ret = 1, status = 1;\n-\n-  TEST_VERIFY (mkdir (dirname, 0700) == 0);\n-  if (support_record_failure_is_failed ())\n-    goto err;\n+  add_temp_file (execname);\n \n-  infd = open (\"/proc/self/exe\", O_RDONLY);\n-  if (infd < 0)\n+  if (access (\"/proc/self/exe\", R_OK) != 0)\n     FAIL_UNSUPPORTED (\"unsupported: Cannot read binary from procfs\\n\");\n \n-  outfd = open (execname, O_WRONLY | O_CREAT | O_EXCL, 0700);\n-  TEST_VERIFY (outfd >= 0);\n-  if (support_record_failure_is_failed ())\n-    goto err;\n-\n-  char buf[4096];\n-  for (;;)\n-    {\n-      ssize_t rdcount = read (infd, buf, sizeof (buf));\n-      TEST_VERIFY (rdcount >= 0);\n-      if (support_record_failure_is_failed ())\n-\tgoto err;\n-      if (rdcount == 0)\n-\tbreak;\n-      char *p = buf;\n-      char *end = buf + rdcount;\n-      while (p != end)\n-\t{\n-\t  ssize_t wrcount = write (outfd, buf, end - p);\n-\t  if (wrcount == 0)\n-\t    errno = ENOSPC;\n-\t  TEST_VERIFY (wrcount > 0);\n-\t  if (support_record_failure_is_failed ())\n-\t    goto err;\n-\t  p += wrcount;\n-\t}\n-    }\n+  support_copy_file (\"/proc/self/exe\", execname);\n \n-  bool chowned = false;\n-  TEST_VERIFY ((chowned = fchown (outfd, getuid (), gid) == 0)\n-\t       || errno == EPERM);\n-  if (support_record_failure_is_failed ())\n-    goto err;\n-  else if (!chowned)\n-    {\n-      ret = 77;\n-      goto err;\n-    }\n+  if (chown (execname, getuid (), gid) != 0)\n+    FAIL_UNSUPPORTED (\"cannot change group of \\\"%s\\\" to %jd: %m\",\n+\t\t      execname, (intmax_t) gid);\n \n-  TEST_VERIFY (fchmod (outfd, 02750) == 0);\n-  if (support_record_failure_is_failed ())\n-    goto err;\n-  TEST_VERIFY (close (outfd) == 0);\n-  if (support_record_failure_is_failed ())\n-    goto err;\n-  TEST_VERIFY (close (infd) == 0);\n-  if (support_record_failure_is_failed ())\n-    goto err;\n+  if (chmod (execname, 02750) != 0)\n+    FAIL_UNSUPPORTED (\"cannot make \\\"%s\\\" SGID: %m \", execname);\n \n   /* We have the binary, now spawn the subprocess.  Avoid using\n      support_subprogram because we only want the program exit status, not the\n      contents.  */\n-  ret = 0;\n-  infd = outfd = -1;\n \n   char * const args[] = {execname, (char *) child_id, NULL};\n+  int status = support_subprogram_wait (args[0], args);\n \n-  status = support_subprogram_wait (args[0], args);\n+  free (execname);\n+  free (dirname);\n \n-err:\n-  if (outfd >= 0)\n-    close (outfd);\n-  if (infd >= 0)\n-    close (infd);\n-  if (execname != NULL)\n-    {\n-      unlink (execname);\n-      free (execname);\n-    }\n-  if (dirname != NULL)\n+  if (WIFEXITED (status))\n     {\n-      rmdir (dirname);\n-      free (dirname);\n+      if (WEXITSTATUS (status) == 0)\n+\treturn;\n+      else\n+\texit (WEXITSTATUS (status));\n     }\n-\n-  if (ret == 77)\n-    FAIL_UNSUPPORTED (\"Failed to make sgid executable for test\\n\");\n-  if (ret != 0)\n-    FAIL_EXIT1 (\"Failed to make sgid executable for test\\n\");\n-\n-  return status;\n+  else\n+    FAIL_EXIT1 (\"subprogram failed with status %d\", status);\n }\n \n /* Returns true if a group with NAME has been found, and writes its\n@@ -253,7 +193,7 @@ find_sgid_group (gid_t *target, const char *name)\n   return ok;\n }\n \n-int\n+void\n support_capture_subprogram_self_sgid (const char *child_id)\n {\n   const int count = 64;\n@@ -288,7 +228,7 @@ support_capture_subprogram_self_sgid (const char *child_id)\n \t\t\t (intmax_t) getuid ());\n     }\n \n-  return copy_and_spawn_sgid (child_id, target);\n+  copy_and_spawn_sgid (child_id, target);\n }\n \n void\n\ncommit 2eb180377b96771b8368b0915669c8c7b267e739\nAuthor: Florian Weimer <fweimer@redhat.com>\nDate:   Mon Jul 21 21:43:49 2025 +0200\n\n    posix: Fix double-free after allocation failure in regcomp (bug 33185)\n    \n    If a memory allocation failure occurs during bracket expression\n    parsing in regcomp, a double-free error may result.\n    \n    Reported-by: Anastasia Belova <abelova@astralinux.ru>\n    Co-authored-by: Paul Eggert <eggert@cs.ucla.edu>\n    Reviewed-by: Andreas K. Huettel <dilfridge@gentoo.org>\n    (cherry picked from commit 7ea06e994093fa0bcca0d0ee2c1db271d8d7885d)\n\ndiff --git a/NEWS b/NEWS\nindex 4b290ad4bf..253b07ae99 100644\n--- a/NEWS\n+++ b/NEWS\n@@ -24,6 +24,7 @@ The following bugs are resolved with this release:\n   [32470] x86: Avoid integer truncation with large cache sizes\n   [32810] Crash on x86-64 if XSAVEC disable via tunable\n   [32987] elf: Fix subprocess status handling for tst-dlopen-sgid\n+  [33185] Fix double-free after allocation failure in regcomp\n \f\n Version 2.40\n \ndiff --git a/posix/Makefile b/posix/Makefile\nindex 2c598cd20a..830278a423 100644\n--- a/posix/Makefile\n+++ b/posix/Makefile\n@@ -303,6 +303,7 @@ tests := \\\n   tst-posix_spawn-setsid \\\n   tst-preadwrite \\\n   tst-preadwrite64 \\\n+  tst-regcomp-bracket-free \\\n   tst-regcomp-truncated \\\n   tst-regex \\\n   tst-regex2 \\\ndiff --git a/posix/regcomp.c b/posix/regcomp.c\nindex 5380d3c7b9..6595bb3c0d 100644\n--- a/posix/regcomp.c\n+++ b/posix/regcomp.c\n@@ -3384,6 +3384,7 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token,\n     {\n #ifdef RE_ENABLE_I18N\n       free_charset (mbcset);\n+      mbcset = NULL;\n #endif\n       /* Build a tree for simple bracket.  */\n       br_token.type = SIMPLE_BRACKET;\n@@ -3399,7 +3400,8 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token,\n  parse_bracket_exp_free_return:\n   re_free (sbcset);\n #ifdef RE_ENABLE_I18N\n-  free_charset (mbcset);\n+  if (__glibc_likely (mbcset != NULL))\n+    free_charset (mbcset);\n #endif /* RE_ENABLE_I18N */\n   return NULL;\n }\ndiff --git a/posix/tst-regcomp-bracket-free.c b/posix/tst-regcomp-bracket-free.c\nnew file mode 100644\nindex 0000000000..3c091d8c44\n--- /dev/null\n+++ b/posix/tst-regcomp-bracket-free.c\n@@ -0,0 +1,176 @@\n+/* Test regcomp bracket parsing with injected allocation failures (bug 33185).\n+   Copyright (C) 2025 Free Software Foundation, Inc.\n+   This file is part of the GNU C Library.\n+\n+   The GNU C Library is free software; you can redistribute it and/or\n+   modify it under the terms of the GNU Lesser General Public\n+   License as published by the Free Software Foundation; either\n+   version 2.1 of the License, or (at your option) any later version.\n+\n+   The GNU C Library is distributed in the hope that it will be useful,\n+   but WITHOUT ANY WARRANTY; without even the implied warranty of\n+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+   Lesser General Public License for more details.\n+\n+   You should have received a copy of the GNU Lesser General Public\n+   License along with the GNU C Library; if not, see\n+   <https://www.gnu.org/licenses/>.  */\n+\n+/* This test invokes regcomp multiple times, failing one memory\n+   allocation in each call.  The function call should fail with\n+   REG_ESPACE (or succeed if it can recover from the allocation\n+   failure).  Previously, there was double-free bug.  */\n+\n+#include <errno.h>\n+#include <regex.h>\n+#include <stdio.h>\n+#include <string.h>\n+#include <support/check.h>\n+#include <support/namespace.h>\n+#include <support/support.h>\n+\n+/* Data structure allocated via MAP_SHARED, so that writes from the\n+   subprocess are visible.  */\n+struct shared_data\n+{\n+  /* Number of tracked allocations performed so far.  */\n+  volatile unsigned int allocation_count;\n+\n+  /* If this number is reached, one allocation fails.  */\n+  volatile unsigned int failing_allocation;\n+\n+  /* The subprocess stores the expected name here.  */\n+  char name[100];\n+};\n+\n+/* Allocation count in shared mapping.  */\n+static struct shared_data *shared;\n+\n+/* Returns true if a failure should be injected for this allocation.  */\n+static bool\n+fail_this_allocation (void)\n+{\n+  if (shared != NULL)\n+    {\n+      unsigned int count = shared->allocation_count;\n+      shared->allocation_count = count + 1;\n+      return count == shared->failing_allocation;\n+    }\n+  else\n+    return false;\n+}\n+\n+/* Failure-injecting wrappers for allocation functions used by glibc.  */\n+\n+void *\n+malloc (size_t size)\n+{\n+  if (fail_this_allocation ())\n+    {\n+      errno = ENOMEM;\n+      return NULL;\n+    }\n+  extern __typeof (malloc) __libc_malloc;\n+  return __libc_malloc (size);\n+}\n+\n+void *\n+calloc (size_t a, size_t b)\n+{\n+  if (fail_this_allocation ())\n+    {\n+      errno = ENOMEM;\n+      return NULL;\n+    }\n+  extern __typeof (calloc) __libc_calloc;\n+  return __libc_calloc (a, b);\n+}\n+\n+void *\n+realloc (void *ptr, size_t size)\n+{\n+  if (fail_this_allocation ())\n+    {\n+      errno = ENOMEM;\n+      return NULL;\n+    }\n+  extern __typeof (realloc) __libc_realloc;\n+  return __libc_realloc (ptr, size);\n+}\n+\n+/* No-op subprocess to verify that support_isolate_in_subprocess does\n+   not perform any heap allocations.  */\n+static void\n+no_op (void *ignored)\n+{\n+}\n+\n+/* Perform a regcomp call in a subprocess.  Used to count its\n+   allocations.  */\n+static void\n+initialize (void *regexp1)\n+{\n+  const char *regexp = regexp1;\n+\n+  shared->allocation_count = 0;\n+\n+  regex_t reg;\n+  TEST_COMPARE (regcomp (&reg, regexp, 0), 0);\n+}\n+\n+/* Perform regcomp in a subprocess with fault injection.  */\n+static void\n+test_in_subprocess (void *regexp1)\n+{\n+  const char *regexp = regexp1;\n+  unsigned int inject_at = shared->failing_allocation;\n+\n+  regex_t reg;\n+  int ret = regcomp (&reg, regexp, 0);\n+\n+  if (ret != 0)\n+    {\n+      TEST_COMPARE (ret, REG_ESPACE);\n+      printf (\"info: allocation %u failure results in return value %d,\"\n+              \" error %s (%d)\\n\",\n+              inject_at, ret, strerrorname_np (errno), errno);\n+    }\n+}\n+\n+static int\n+do_test (void)\n+{\n+  char regexp[] = \"[:alpha:]\";\n+\n+  shared = support_shared_allocate (sizeof (*shared));\n+\n+  /* Disable fault injection.  */\n+  shared->failing_allocation = ~0U;\n+\n+  support_isolate_in_subprocess (no_op, NULL);\n+  TEST_COMPARE (shared->allocation_count, 0);\n+\n+  support_isolate_in_subprocess (initialize, regexp);\n+\n+  /* The number of allocations in the successful case, plus some\n+     slack.  Once the number of expected allocations is exceeded,\n+     injecting further failures does not make a difference.  */\n+  unsigned int maximum_allocation_count = shared->allocation_count;\n+  printf (\"info: successful call performs %u allocations\\n\",\n+          maximum_allocation_count);\n+  maximum_allocation_count += 10;\n+\n+  for (unsigned int inject_at = 0; inject_at <= maximum_allocation_count;\n+       ++inject_at)\n+    {\n+      shared->allocation_count = 0;\n+      shared->failing_allocation = inject_at;\n+      support_isolate_in_subprocess (test_in_subprocess, regexp);\n+    }\n+\n+  support_shared_free (shared);\n+\n+  return 0;\n+}\n+\n+#include <support/test-driver.c>\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/locale/loadarchive.c b/locale/loadarchive.c\nindex 452e3eb6e3..e2016a8aab 100644\n--- a/locale/loadarchive.c\n+++ b/locale/loadarchive.c\n@@ -123,6 +123,25 @@ calculate_head_size (const struct locarhead *h)\n   return MAX (namehash_end, MAX (string_end, locrectab_end));\n }\n \n+static int\n+open_locale_archive (void)\n+{\n+  int fd = -1;\n+  char *versioned_path = secure_getenv (\"LOCALE_ARCHIVE_2_27\");\n+  char *path = secure_getenv (\"LOCALE_ARCHIVE\");\n+  if (versioned_path)\n+    fd = __open_nocancel (versioned_path, O_RDONLY|O_LARGEFILE|O_CLOEXEC);\n+  if (path && fd < 0)\n+    fd = __open_nocancel (path, O_RDONLY|O_LARGEFILE|O_CLOEXEC);\n+  if (fd < 0)\n+    fd = __open_nocancel(\"/run/current-system/sw/lib/locale/locale-archive\", O_RDONLY|O_LARGEFILE|O_CLOEXEC);\n+  if (fd < 0)\n+    fd = __open_nocancel (\"/usr/lib/locale/locale-archive\", O_RDONLY|O_LARGEFILE|O_CLOEXEC);\n+  if (fd < 0)\n+    fd = __open_nocancel (archfname, O_RDONLY|O_LARGEFILE|O_CLOEXEC);\n+  return fd;\n+}\n+\n \n /* Find the locale *NAMEP in the locale archive, and return the\n    internalized data structure for its CATEGORY data.  If this locale has\n@@ -202,7 +221,7 @@ _nl_load_locale_from_archive (int category, const char **namep)\n       archmapped = &headmap;\n \n       /* The archive has never been opened.  */\n-      fd = __open_nocancel (archfname, O_RDONLY|O_LARGEFILE|O_CLOEXEC);\n+      fd = open_locale_archive ();\n       if (fd < 0)\n \t/* Cannot open the archive, for whatever reason.  */\n \treturn NULL;\n@@ -397,8 +416,7 @@ _nl_load_locale_from_archive (int category, const char **namep)\n \t  if (fd == -1)\n \t    {\n \t      struct __stat64_t64 st;\n-\t      fd = __open_nocancel (archfname,\n-\t\t\t\t    O_RDONLY|O_LARGEFILE|O_CLOEXEC);\n+\t      fd = open_locale_archive();\n \t      if (fd == -1)\n \t\t/* Cannot open the archive, for whatever reason.  */\n \t\treturn NULL;\ndiff --git a/locale/programs/locale.c b/locale/programs/locale.c\nindex c7ee1874e8..af20fbac3e 100644\n--- a/locale/programs/locale.c\n+++ b/locale/programs/locale.c\n@@ -632,6 +632,26 @@ nameentcmp (const void *a, const void *b)\n }\n \n \n+static int\n+open_locale_archive (void)\n+{\n+  int fd = -1;\n+  char *versioned_path = secure_getenv (\"LOCALE_ARCHIVE_2_27\");\n+  char *path = secure_getenv (\"LOCALE_ARCHIVE\");\n+  if (versioned_path)\n+    fd = open64 (versioned_path, O_RDONLY);\n+  if (path && fd < 0)\n+    fd = open64 (path, O_RDONLY);\n+  if (fd < 0)\n+    fd = open64 (\"/run/current-system/sw/lib/locale/locale-archive\", O_RDONLY|O_LARGEFILE|O_CLOEXEC);\n+  if (fd < 0)\n+    fd = open64 (\"/usr/lib/locale/locale-archive\", O_RDONLY);\n+  if (fd < 0)\n+    fd = open64 (ARCHIVE_NAME, O_RDONLY);\n+  return fd;\n+}\n+\n+\n static int\n write_archive_locales (void **all_datap, char *linebuf)\n {\n@@ -644,7 +664,7 @@ write_archive_locales (void **all_datap, char *linebuf)\n   int fd, ret = 0;\n   uint32_t cnt;\n \n-  fd = open64 (ARCHIVE_NAME, O_RDONLY);\n+  fd = open_locale_archive ();\n   if (fd < 0)\n     return 0;\n \ndiff --git a/locale/programs/locarchive.c b/locale/programs/locarchive.c\nindex 8d79a1b6d1..93118c52e3 100644\n--- a/locale/programs/locarchive.c\n+++ b/locale/programs/locarchive.c\n@@ -116,6 +116,22 @@ prepare_address_space (int fd, size_t total, size_t *reserved, int *xflags,\n }\n \n \n+static int\n+open_locale_archive (const char * archivefname, int flags)\n+{\n+  int fd = -1;\n+  char *versioned_path = secure_getenv (\"LOCALE_ARCHIVE_2_27\");\n+  char *path = secure_getenv (\"LOCALE_ARCHIVE\");\n+  if (versioned_path)\n+    fd = open64 (versioned_path, flags);\n+  if (path && fd < 0)\n+    fd = open64 (path, flags);\n+  if (fd < 0)\n+    fd = open64 (archivefname, flags);\n+  return fd;\n+}\n+\n+\n static void\n create_archive (const char *archivefname, struct locarhandle *ah)\n {\n@@ -577,7 +593,7 @@ open_archive (struct locarhandle *ah, bool readonly)\n   while (1)\n     {\n       /* Open the archive.  We must have exclusive write access.  */\n-      fd = open64 (archivefname, readonly ? O_RDONLY : O_RDWR);\n+      fd = open_locale_archive (archivefname, readonly ? O_RDONLY : O_RDWR);\n       if (fd == -1)\n \t{\n \t  /* Maybe the file does not yet exist? If we are opening\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/elf/Makefile b/elf/Makefile\nindex 5d666b1b..a5017e9c 100644\n--- a/elf/Makefile\n+++ b/elf/Makefile\n@@ -669,14 +669,14 @@ $(objpfx)sln: $(sln-modules:%=$(objpfx)%.o)\n \n $(objpfx)ldconfig: $(ldconfig-modules:%=$(objpfx)%.o)\n \n-SYSCONF-FLAGS := -D'SYSCONFDIR=\"$(sysconfdir)\"'\n-CFLAGS-ldconfig.c += $(SYSCONF-FLAGS) -D'LIBDIR=\"$(libdir)\"' \\\n+PREFIX-FLAGS := -D'PREFIX=\"$(prefix)\"'\n+CFLAGS-ldconfig.c += $(PREFIX-FLAGS) -D'LIBDIR=\"$(libdir)\"' \\\n \t\t    -D'SLIBDIR=\"$(slibdir)\"'\n libof-ldconfig = ldconfig\n-CFLAGS-dl-cache.c += $(SYSCONF-FLAGS)\n-CFLAGS-cache.c += $(SYSCONF-FLAGS)\n-CFLAGS-rtld.c += $(SYSCONF-FLAGS)\n-CFLAGS-dl-usage.c += $(SYSCONF-FLAGS) \\\n+CFLAGS-dl-cache.c += $(PREFIX-FLAGS)\n+CFLAGS-cache.c += $(PREFIX-FLAGS)\n+CFLAGS-rtld.c += $(PREFIX-FLAGS)\n+CFLAGS-dl-usage.c += $(PREFIX-FLAGS) \\\n   -D'RTLD=\"$(rtlddir)/$(rtld-installed-name)\"'\n \n cpp-srcs-left := $(all-rtld-routines:=.os)\ndiff --git a/elf/dl-diagnostics.c b/elf/dl-diagnostics.c\nindex bef224b3..8e166b12 100644\n--- a/elf/dl-diagnostics.c\n+++ b/elf/dl-diagnostics.c\n@@ -205,7 +205,7 @@ print_paths (void)\n {\n   _dl_diagnostics_print_labeled_string (\"path.prefix\", PREFIX);\n   _dl_diagnostics_print_labeled_string (\"path.rtld\", RTLD);\n-  _dl_diagnostics_print_labeled_string (\"path.sysconfdir\", SYSCONFDIR);\n+  _dl_diagnostics_print_labeled_string (\"path.sysconfdir\", PREFIX \"/etc\");\n\n   unsigned int index = 0;\n   static const char *system_dirs = SYSTEM_DIRS \"\\0\";\ndiff --git a/elf/ldconfig.c b/elf/ldconfig.c\nindex 28ed637a..6f07b79a 100644\n--- a/elf/ldconfig.c\n+++ b/elf/ldconfig.c\n@@ -57,7 +57,7 @@\n #define TLS_HWCAP_BIT 63\n \n #ifndef LD_SO_CONF\n-# define LD_SO_CONF SYSCONFDIR \"/ld.so.conf\"\n+# define LD_SO_CONF PREFIX \"/etc/ld.so.conf\"\n #endif\n \n /* Get libc version number.  */\ndiff --git a/sysdeps/generic/dl-cache.h b/sysdeps/generic/dl-cache.h\nindex 964d50a4..2224d651 100644\n--- a/sysdeps/generic/dl-cache.h\n+++ b/sysdeps/generic/dl-cache.h\n@@ -35,7 +35,7 @@\n #endif\n \n #ifndef LD_SO_CACHE\n-# define LD_SO_CACHE SYSCONFDIR \"/ld.so.cache\"\n+# define LD_SO_CACHE PREFIX \"/etc/ld.so.cache\"\n #endif\n \n #ifndef add_system_dir\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff -ru glibc-2.20-orig/elf/rtld.c glibc-2.20/elf/rtld.c\n--- glibc-2.20-orig/elf/rtld.c\t2014-09-07 10:09:09.000000000 +0200\n+++ glibc-2.20/elf/rtld.c\t2014-10-27 11:32:25.203043157 +0100\n@@ -1513,7 +1513,7 @@\n      open().  So we do this first.  If it succeeds we do almost twice\n      the work but this does not matter, since it is not for production\n      use.  */\n-  static const char preload_file[] = \"/etc/ld.so.preload\";\n+  static const char preload_file[] = \"/etc/ld-nix.so.preload\";\n   if (__glibc_unlikely (__access (preload_file, R_OK) == 0))\n     {\n       /* Read the contents of the file.  */\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff -ubr glibc-2.17-orig/sysdeps/unix/confstr.h glibc-2.17/sysdeps/unix/confstr.h\n--- glibc-2.17-orig/sysdeps/unix/confstr.h\t2013-06-03 22:01:44.829726968 +0200\n+++ glibc-2.17/sysdeps/unix/confstr.h\t2013-06-03 22:04:39.469376740 +0200\n@@ -1 +1 @@\n-#define\tCS_PATH\t\"/bin:/usr/bin\"\n+#define\tCS_PATH\t\"/run/current-system/sw/bin:/bin:/usr/bin\"\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 3288c6da64add3b4561b8c10fff522027caea01c Mon Sep 17 00:00:00 2001\nFrom: Nicholas Miell <nmiell@gmail.com>\nDate: Sat, 17 Jun 2017 18:21:07 -0700\nSubject: [PATCH] Align the stack on entry to __tls_get_addr()\n\nOld versions of gcc (4 & 5) didn't align the stack according to the\nAMD64 psABI when calling __tls_get_addr(). Apparently new versions of\ngcc (7) got much more aggressive about vectorizing and generating MOVAPS\ninstructions, which means old binaries built with the buggy versions of\ngcc are much more likely to crash when using versions of glibc built\nusing gcc 7.\n\nFor example, a large number of Linux games built using the Unity game\nengine and available for purchase on Steam.\n---\n elf/dl-tls.c | 4 ++++\n 1 file changed, 4 insertions(+)\n\ndiff --git a/elf/dl-tls.c b/elf/dl-tls.c\nindex 5aba33b3fa..3f3cb917de 100644\n--- a/elf/dl-tls.c\n+++ b/elf/dl-tls.c\n@@ -827,6 +827,10 @@ rtld_hidden_proto (__tls_get_addr)\n rtld_hidden_def (__tls_get_addr)\n #endif\n\n+#ifdef __x86_64__\n+/* Old versions of gcc didn't align the stack. */\n+__attribute__((force_align_arg_pointer))\n+#endif\n /* The generic dynamic and local dynamic model cannot be used in\n    statically linked applications.  */\n void *\n--\n2.13.0\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/nss/nss_files/files-XXX.c b/nss/nss_files/files-XXX.c\nindex 1db9e46127..3a567e0224 100644\n--- a/nss/nss_files/files-XXX.c\n+++ b/nss/nss_files/files-XXX.c\n@@ -75,8 +75,20 @@ internal_setent (FILE **stream)\n \n   if (*stream == NULL)\n     {\n-      *stream = __nss_files_fopen (DATAFILE);\n-\n+      const char *file = DATAFILE;\n+\n+      #ifdef NIX_DATAFILE\n+      // use the Nix environment variable such as `NIX_ETC_PROTOCOLS`\n+      char *path = secure_getenv (NIX_DATAFILE);\n+\n+      // if the environment variable is set, then read from the /nix/store entry instead\n+      if (path && path[0]) {\n+        file = path;\n+      }\n+      #endif\n+      \n+      *stream = __nss_files_fopen (file);\n+    \n       if (*stream == NULL)\n \tstatus = errno == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL;\n     }\ndiff --git a/nss/nss_files/files-proto.c b/nss/nss_files/files-proto.c\nindex c30bedc0aa..b321e68d3c 100644\n--- a/nss/nss_files/files-proto.c\n+++ b/nss/nss_files/files-proto.c\n@@ -23,6 +23,7 @@ NSS_DECLARE_MODULE_FUNCTIONS (files)\n \n #define ENTNAME\t\tprotoent\n #define DATABASE\t\"protocols\"\n+#define NIX_DATAFILE \"NIX_ETC_PROTOCOLS\"\n \n struct protoent_data {};\n \ndiff --git a/nss/nss_files/files-service.c b/nss/nss_files/files-service.c\nindex bfc2590699..0bff36aee5 100644\n--- a/nss/nss_files/files-service.c\n+++ b/nss/nss_files/files-service.c\n@@ -24,6 +24,7 @@ NSS_DECLARE_MODULE_FUNCTIONS (files)\n \n #define ENTNAME\t\tservent\n #define DATABASE\t\"services\"\n+#define NIX_DATAFILE \"NIX_ETC_SERVICES\"\n \n struct servent_data {};\n \n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From e207c3dbcff1d3d09c60eec99b6fec2a698b01bd Mon Sep 17 00:00:00 2001\nFrom: Bernardo Meurer <bernardo@meurer.org>\nDate: Fri, 22 Jul 2022 22:11:07 -0700\nSubject: [PATCH] Revert \"Remove all usage of @BASH@ or ${BASH} in installed\n files, and hardcode /bin/bash instead\"\n\nWe need the ability to override to use `/bin/sh` here to avoid having\nsome bootstrap tools in a final build product.\n\nThis reverts commit 5188a9d0265cc6f7235a8af1d31ab02e4a24853d.\n\nCo-authored-by: Maximilian Bosch <maximilian@mbosch.me>\n---\n debug/Makefile     | 5 +++--\n debug/xtrace.sh    | 2 +-\n elf/Makefile       | 4 +++-\n elf/ldd.bash.in    | 2 +-\n elf/sotruss.sh     | 2 +-\n malloc/Makefile    | 5 +++--\n malloc/memusage.sh | 2 +-\n timezone/Makefile  | 3 ++-\n 8 files changed, 15 insertions(+), 10 deletions(-)\n\ndiff --git a/debug/Makefile b/debug/Makefile\nindex 3903cc97a3..b041acca71 100644\n--- a/debug/Makefile\n+++ b/debug/Makefile\n@@ -343,8 +343,9 @@ $(objpfx)pcprofiledump: $(objpfx)pcprofiledump.o\n \n $(objpfx)xtrace: xtrace.sh\n \trm -f $@.new\n-\tsed -e 's|@VERSION@|$(version)|' -e 's|@SLIBDIR@|$(sLIBdir)|' \\\n-\t    -e 's|@BINDIR@|$(bindir)|' -e 's|@PKGVERSION@|$(PKGVERSION)|' \\\n+\tsed -e 's|@BASH@|$(BASH)|' -e 's|@VERSION@|$(version)|' \\\n+\t    -e 's|@SLIBDIR@|$(sLIBdir)|' -e 's|@BINDIR@|$(bindir)|' \\\n+\t    -e 's|@PKGVERSION@|$(PKGVERSION)|' \\\n \t    -e 's|@REPORT_BUGS_TO@|$(REPORT_BUGS_TO)|' $^ > $@.new \\\n \t&& rm -f $@ && mv $@.new $@ && chmod +x $@\n \ndiff --git a/debug/xtrace.sh b/debug/xtrace.sh\nindex 77ec1d84df..5614404a71 100755\n--- a/debug/xtrace.sh\n+++ b/debug/xtrace.sh\n@@ -1,4 +1,4 @@\n-#!/bin/bash\n+#! @BASH@\n # Copyright (C) 1999-2024 Free Software Foundation, Inc.\n # This file is part of the GNU C Library.\n \ndiff --git a/elf/Makefile b/elf/Makefile\nindex 5d78b659ce..a2145d7b64 100644\n--- a/elf/Makefile\n+++ b/elf/Makefile\n@@ -249,7 +249,8 @@ $(objpfx)sotruss-lib.so: $(common-objpfx)libc.so $(objpfx)ld.so \\\n \t$(common-objpfx)libc_nonshared.a\n \n $(objpfx)sotruss: sotruss.sh $(common-objpfx)config.make\n-\tsed -e 's%@VERSION@%$(version)%g' \\\n+\tsed -e 's%@BASH@%$(BASH)%g' \\\n+\t    -e 's%@VERSION@%$(version)%g' \\\n \t    -e 's%@TEXTDOMAINDIR@%$(localedir)%g' \\\n \t    -e 's%@PREFIX@%$(prefix)%g' \\\n \t    -e 's|@PKGVERSION@|$(PKGVERSION)|g' \\\n@@ -1392,6 +1393,7 @@ ldd-rewrite = -e 's%@RTLD@%$(rtlddir)/$(rtld-installed-name)%g' \\\n \t      -e 's%@VERSION@%$(version)%g' \\\n \t      -e 's|@PKGVERSION@|$(PKGVERSION)|g' \\\n \t      -e 's|@REPORT_BUGS_TO@|$(REPORT_BUGS_TO)|g' \\\n+\t      -e 's%@BASH@%$(BASH)%g' \\\n \t      -e 's%@TEXTDOMAINDIR@%$(localedir)%g'\n \n ifeq ($(ldd-rewrite-script),no)\ndiff --git a/elf/ldd.bash.in b/elf/ldd.bash.in\nindex d6b640df66..46111670cd 100644\n--- a/elf/ldd.bash.in\n+++ b/elf/ldd.bash.in\n@@ -1,4 +1,4 @@\n-#!/bin/bash\n+#! @BASH@\n # Copyright (C) 1996-2024 Free Software Foundation, Inc.\n # This file is part of the GNU C Library.\n \ndiff --git a/elf/sotruss.sh b/elf/sotruss.sh\nindex ac1a83984e..2bf17c518e 100755\n--- a/elf/sotruss.sh\n+++ b/elf/sotruss.sh\n@@ -1,4 +1,4 @@\n-#!/bin/bash\n+#! @BASH@\n # Copyright (C) 2011-2024 Free Software Foundation, Inc.\n # This file is part of the GNU C Library.\n \ndiff --git a/malloc/Makefile b/malloc/Makefile\nindex c83ade5f10..8dd9174b79 100644\n--- a/malloc/Makefile\n+++ b/malloc/Makefile\n@@ -312,8 +312,9 @@ $(objpfx)mtrace: mtrace.pl\n \n $(objpfx)memusage: memusage.sh\n \trm -f $@.new\n-\tsed -e 's|@VERSION@|$(version)|' -e 's|@SLIBDIR@|$(sLIBdir)|' \\\n-\t    -e 's|@BINDIR@|$(bindir)|' -e 's|@PKGVERSION@|$(PKGVERSION)|' \\\n+\tsed -e 's|@BASH@|$(BASH)|' -e 's|@VERSION@|$(version)|' \\\n+\t    -e 's|@SLIBDIR@|$(sLIBdir)|' -e 's|@BINDIR@|$(bindir)|' \\\n+\t    -e 's|@PKGVERSION@|$(PKGVERSION)|' \\\n \t    -e 's|@REPORT_BUGS_TO@|$(REPORT_BUGS_TO)|' $^ > $@.new \\\n \t&& rm -f $@ && mv $@.new $@ && chmod +x $@\n \ndiff --git a/malloc/memusage.sh b/malloc/memusage.sh\nindex d2d9d17ea8..2e7efc9049 100755\n--- a/malloc/memusage.sh\n+++ b/malloc/memusage.sh\n@@ -1,4 +1,4 @@\n-#!/bin/bash\n+#! @BASH@\n # Copyright (C) 1999-2024 Free Software Foundation, Inc.\n # This file is part of the GNU C Library.\n \ndiff --git a/timezone/Makefile b/timezone/Makefile\nindex d7acb387ba..c8e203ea3a 100644\n--- a/timezone/Makefile\n+++ b/timezone/Makefile\n@@ -132,7 +132,8 @@ $(testdata)/XT5: testdata/gen-XT5.sh\n \tmv $@.tmp $@\n \n $(objpfx)tzselect: tzselect.ksh $(common-objpfx)config.make\n-\tsed -e 's|TZDIR=[^}]*|TZDIR=$(zonedir)|' \\\n+\tsed -e 's|/bin/bash|$(BASH)|' \\\n+\t    -e 's|TZDIR=[^}]*|TZDIR=$(zonedir)|' \\\n \t    -e '/TZVERSION=/s|see_Makefile|\"$(version)\"|' \\\n \t    -e '/PKGVERSION=/s|=.*|=\"$(PKGVERSION)\"|' \\\n \t    -e '/REPORT_BUGS_TO=/s|=.*|=\"$(REPORT_BUGS_TO)\"|' \\\n-- \n2.42.0\n\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 31915e55f9c34f6137ab1c5ac002375a2d5d4589 Mon Sep 17 00:00:00 2001\nFrom: Frederik Schwan <frederik.schwan@linux.com>\nDate: Fri, 4 Aug 2023 15:19:57 +0200\nSubject: [PATCH] force --hash-style=both to keep compatibility with old niche\n software\n\n---\n Makeconfig | 4 ++++\n 1 file changed, 4 insertions(+)\n\ndiff --git a/Makeconfig b/Makeconfig\nindex 77d7fd14df..2ae67c4beb 100644\n--- a/Makeconfig\n+++ b/Makeconfig\n@@ -378,6 +378,10 @@ relro-LDFLAGS = -Wl,-z,relro\n LDFLAGS.so += $(relro-LDFLAGS)\n LDFLAGS-rtld += $(relro-LDFLAGS)\n \n+hashstyle-LDFLAGS = -Wl,--hash-style=both\n+LDFLAGS.so += $(hashstyle-LDFLAGS)\n+LDFLAGS-rtld += $(hashstyle-LDFLAGS)\n+\n # Linker options to enable and disable DT_RELR.\n ifeq ($(have-dt-relr),yes)\n dt-relr-ldflag = -Wl,-z,pack-relative-relocs\n-- \n2.41.0\n\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 38e9742ed794febbc8caa4177df14d097607a2d9 Mon Sep 17 00:00:00 2001\nFrom: Maximilian Bosch <maximilian@mbosch.me>\nDate: Sun, 5 Oct 2025 12:45:25 +0200\nSubject: [PATCH 1/2] localedata: allow reproducible & parallel install of\n locale-archive\n\nThe problem with the current approach is that N processes are compiling\na locale and updating the locale-archive at the same time. Hence,\nthere's a race which process gets to update the archive first and thus\nthe build is not reproducible[1].\n\nThis patch changes that by adding the `--no-archive` flag to the\n`$(LOCALEDEF)` invocation in `build-one-locale` to parallelize the build\nprocess in a race-free manner. A single `localedef --add-to-archive`\nthen adds all previously built locales to the archive.\n\n[1] https://github.com/NixOS/nixpkgs/issues/245360\n---\n localedata/Makefile | 6 ++++++\n 1 file changed, 6 insertions(+)\n\ndiff --git a/localedata/Makefile b/localedata/Makefile\nindex 01b32348d4..13f7d3a2c4 100644\n--- a/localedata/Makefile\n+++ b/localedata/Makefile\n@@ -538,8 +538,13 @@ LOCALEDEF=I18NPATH=. GCONV_PATH=$(common-objpfx)iconvdata LC_ALL=C \\\n $(rtld-prefix) $(common-objpfx)locale/localedef\n install-locales: install-locale-archive\n \n+define install-all-locales\n+  $(LOCALEDEF) $$flags --add-to-archive `find $(inst_complocaledir) -maxdepth 1 -mindepth 1 -type d | sort`\n+endef\n+\n # Create and install the locale-archive file.\n install-locale-archive: $(INSTALL-SUPPORTED-LOCALE-ARCHIVE)\n+\t$(install-all-locales)\n # Create and install the locales individually (no archive).\n install-locale-files: $(INSTALL-SUPPORTED-LOCALE-FILES)\n \n@@ -565,6 +570,7 @@ define build-one-locale\n \t$(LOCALEDEF) $$flags --alias-file=../intl/locale.alias \\\n \t\t     -i locales/$$input -f charmaps/$$charset \\\n \t\t     $(addprefix --prefix=,$(install_root)) $$locale \\\n+\t\t     --no-archive \\\n \t&& echo ' done';\n endef\n \n-- \n2.50.1\n\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 887cb6906afa2b2d8abf35ccfc33ce7b8dc902f8 Mon Sep 17 00:00:00 2001\nFrom: Maximilian Bosch <maximilian@mbosch.me>\nDate: Sun, 5 Oct 2025 12:48:43 +0200\nSubject: [PATCH 2/2] Makeconfig: make inst_complocaledir overridable\n\nOn NixOS, we build the locales in a separate package from glibc itself.\nAlso, packages aren't installed into a common location such as `/usr`,\nbut each package has its own unique prefix below `/nix/store`.\n\nFor us, the current state is a problem because `localedef` is built\nin a different package and expects DESTDIR to be the unique\npackage-prefix of `glibc` itself. Our current workaround is to\ninvoke `localedef` with `--prefix=$TMPDIR` and copy the contents\nto the correct prefix. This was doable without patching when\n`localedef` was doing build & locale-archive creation at the\nsame time.\n\nWith the previous patch, the Makefile uses `$(inst_complocaledir)` to\ntell localedef where the previously built locales are. In NixOS, we now\nneed to override `$(inst_complocaledir)` to point to\n`$TMPDIR/$(glibc.out)`. Hence, this patch makes the variable overridable\nfrom env.\n---\n Makeconfig | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/Makeconfig b/Makeconfig\nindex 9eda4fa528..43d88325bc 100644\n--- a/Makeconfig\n+++ b/Makeconfig\n@@ -197,7 +197,7 @@ inst_zonedir = $(install_root)$(zonedir)\n ifndef complocaledir\n complocaledir = $(libdir)/locale\n endif\n-inst_complocaledir = $(install_root)$(complocaledir)\n+inst_complocaledir ?= $(install_root)$(complocaledir)\n \n # Where to install the message catalog data files (which are\n # machine-independent).\n-- \n2.50.1\n\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://gnu/glibc/glibc-2.40.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "19a890175e9263d748f627993de6f4b1af9cd21e03f080e4bfb3a1fac10205a2"
            }
          ]
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "hn8ln9dgr9y17xsr4ysdbk4nsj2bs4zh-cpio-2.15",
      "name": "cpio",
      "version": "2.15",
      "description": "Program to create or extract from cpio archives",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0"
          }
        }
      ],
      "purl": "pkg:nix/cpio@2.15",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://gnu/cpio/cpio-2.15.tar.bz2",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "937610b97c329a1ec9268553fb780037bcfff0dcffe9725ebc4fd9c1aa9075db"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/cpio/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "hq56cmw3pp3lv7b0vkbvqgrg6kxmcqrd-gtk-doc-1.35.1",
      "name": "gtk-doc",
      "version": "1.35.1",
      "description": "Tools to extract documentation embedded in GTK and GNOME source code",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-2.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/gtk-doc@1.35.1",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/m4/gtkdoc_jh_check_xml_catalog.m4\n+++ b/m4/gtkdoc_jh_check_xml_catalog.m4\n@@ -5,8 +5,8 @@\n [\n \tAC_REQUIRE([JH_PATH_XML_CATALOG],[JH_PATH_XML_CATALOG(,[:])])dnl\n \tAC_MSG_CHECKING([for ifelse([$2],,[$1],[$2]) in XML catalog])\n-\tif $jh_found_xmlcatalog && \\\n-\t\tAC_RUN_LOG([$XMLCATALOG --noout \"$XML_CATALOG_FILE\" \"$1\" >&2]); then\n+\t# empty argument forces libxml to use XML_CATALOG_FILES variable\n+\tif AC_RUN_LOG([$XMLCATALOG --noout \"\" \"$1\" >&2]); then\n \t\tAC_MSG_RESULT([found])\n \t\tifelse([$3],,,[$3])\n \telse\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://gitlab.gnome.org/api/v4/projects/GNOME%2Fgtk-doc/repository/archive.tar.gz?sha=1.35.1",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "12a53b9670673a7de0477853f79ca375351bddca97d9724ae5400ab05c36435d"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://gitlab.gnome.org/GNOME/gtk-doc"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "hsf2g79801wp025f38r6abz3nkykzw3p-fribidi-1.0.16",
      "name": "fribidi",
      "version": "1.0.16",
      "description": "GNU implementation of the Unicode Bidirectional Algorithm (bidi)",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "LGPL-2.1"
          }
        }
      ],
      "purl": "pkg:nix/fribidi@1.0.16",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/fribidi/fribidi/releases/download/v1.0.16/fribidi-1.0.16.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "1b1cde5b235d40479e91be2f0e88a309e3214c8ab470ec8a2744d82a5a9ea05c"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/fribidi/fribidi"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "i043wkdv0npgzy4v12wh6pmgmvrjhbsl-python3.13-zope-interface-7.2",
      "name": "zope-interface",
      "version": "7.2",
      "description": "Zope.Interface",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "ZPL-2.1"
          }
        }
      ],
      "purl": "pkg:nix/zope-interface@7.2",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/zopefoundation/zope.interface/archive/refs/tags/7.2.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "5ab4bf607904995d46fd2720d31a72bb6b855564d69c4a5a8ea343bc68a85607"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/zopefoundation/zope.interface"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "i2czpzkm78qv4lls40wz14jwimxs5jmc-libsysprof-capture-49.0",
      "name": "libsysprof-capture",
      "version": "49.0",
      "description": "Static library for Sysprof capture data generation",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-2-Clause-Patent"
          }
        }
      ],
      "purl": "pkg:nix/libsysprof-capture@49.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://gnome/sources/sysprof/49/sysprof-49.0.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "ff04139637785c841948862087a4323b981680d942296409321b574fcb282878"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://gitlab.gnome.org/GNOME/sysprof"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "i91kn3dhbzs281yjn3v7r2b5y5dbdijc-python3.13-execnet-2.1.1",
      "name": "execnet",
      "version": "2.1.1",
      "description": "Distributed Python deployment and communication",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/execnet@2.1.1",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/e/execnet/execnet-2.1.1.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://execnet.readthedocs.io/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "ibgnabwra2g40s18wcj9g1b2bjskzgqh-p11-kit-0.25.10-bin",
      "name": "p11-kit",
      "version": "0.25.10",
      "description": "Library for loading and sharing PKCS#11 modules",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/p11-kit@0.25.10",
      "externalReferences": [
        {
          "type": "website",
          "url": "https://p11-glue.github.io/p11-glue/p11-kit.html"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "iiw6ghlcd5ai4ffvkm1g283hph2vkg1b-patchutils-0.3.3",
      "name": "patchutils",
      "version": "0.3.3",
      "description": "Tools to manipulate patch files",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-2.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/patchutils@0.3.3",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From 58987954647f51dc42fb13b7759923c6170dd905 Mon Sep 17 00:00:00 2001\nFrom: Tim Waugh <twaugh@redhat.com>\nDate: Fri, 9 May 2014 16:23:27 +0100\nSubject: Make --clean drop comments after '@@' lines as well (trac #29).\n\n\ndiff --git a/Makefile.am b/Makefile.am\nindex 99ad2a3..f3c6dbc 100644\n--- a/Makefile.am\n+++ b/Makefile.am\n@@ -198,6 +198,7 @@ TESTS = tests/newline1/run-test \\\n \ttests/convert1/run-test \\\n \ttests/convert2/run-test \\\n \ttests/clean1/run-test \\\n+\ttests/clean2/run-test \\\n \ttests/stdin/run-test\n \n # These ones don't work yet.\ndiff --git a/src/filterdiff.c b/src/filterdiff.c\nindex 383e72b..6ca2316 100644\n--- a/src/filterdiff.c\n+++ b/src/filterdiff.c\n@@ -2,7 +2,7 @@\n  * filterdiff - extract (or exclude) a diff from a diff file\n  * lsdiff - show which files are modified by a patch\n  * grepdiff - show files modified by a patch containing a regexp\n- * Copyright (C) 2001, 2002, 2003, 2004, 2008, 2009, 2011 Tim Waugh <twaugh@redhat.com>\n+ * Copyright (C) 2001, 2002, 2003, 2004, 2008, 2009, 2011, 2013, 2014 Tim Waugh <twaugh@redhat.com>\n  *\n  * This program is free software; you can redistribute it and/or modify\n  * it under the terms of the GNU General Public License as published by\n@@ -408,7 +408,8 @@ do_unified (FILE *f, char *header[2], int match, char **line,\n \t\t\t\t\t\t\t \" Hunk #%lu, %s\",\n \t\t\t\t\t\t\t hunknum, bestname);\n \n-\t\t\t\t\tfputs (trailing, output_to);\n+\t\t\t\t\tfputs (clean_comments ? \"\\n\" : trailing,\n+\t\t\t\t\t       output_to);\n \t\t\t\t\tbreak;\n \t\t\t\tcase Before:\n \t\t\t\t\t// Note the initial line number\ndiff --git a/tests/clean2/run-test b/tests/clean2/run-test\nnew file mode 100755\nindex 0000000..42320df\n--- /dev/null\n+++ b/tests/clean2/run-test\n@@ -0,0 +1,34 @@\n+#!/bin/sh\n+\n+# This is a filterdiff(1) testcase.\n+# Test: Make sure --clean removes hunk-level comments.\n+\n+\n+. ${top_srcdir-.}/tests/common.sh\n+\n+cat << EOF > diff\n+non-diff line\n+--- a/file1\n++++ b/file1\n+@@ -0,0 +1 @@ this is a hunk-level comment\n++a\n+EOF\n+\n+${FILTERDIFF} --clean diff 2>errors >filtered || exit 1\n+[ -s errors ] && exit 1\n+\n+cat << EOF | cmp - filtered || exit 1\n+--- a/file1\n++++ b/file1\n+@@ -0,0 +1 @@\n++a\n+EOF\n+\n+${FILTERDIFF} --clean -x file1 diff 2>errors >filtered || exit 1\n+[ -s errors ] && exit 1\n+cat << EOF | cmp - filtered || exit 1\n+--- a/file1\n++++ b/file1\n+@@ -0,0 +1 @@\n++a\n+EOF\n-- \ncgit v0.10.1\n\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "http://cyberelk.net/tim/data/patchutils/stable/patchutils-0.3.3.tar.xz"
        },
        {
          "type": "website",
          "url": "http://cyberelk.net/tim/software/patchutils"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "imq34lr9y56df5l5gcm4135fdckd1vb9-graphviz-12.2.1",
      "name": "graphviz",
      "version": "12.2.1",
      "description": "Graph visualization tools",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "EPL-1.0"
          }
        }
      ],
      "purl": "pkg:nix/graphviz@12.2.1",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://gitlab.com/api/v4/projects/graphviz%2Fgraphviz/repository/archive.tar.gz?sha=12.2.1",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "531aa0ffbf8ba52197e25187d76b91071ba4570d08b3014f7e96f61242ec6a22"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://graphviz.org"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "ipm1n5zjglpyc0rf4vf6l5kmzmkg0ff9-gtest-1.17.0-dev",
      "name": "gtest",
      "version": "1.17.0",
      "description": "Google's framework for writing C++ tests",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/gtest@1.17.0",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/googlemock/CMakeLists.txt b/googlemock/CMakeLists.txt\nindex 99b2411f..33ec9636 100644\n--- a/googlemock/CMakeLists.txt\n+++ b/googlemock/CMakeLists.txt\n@@ -105,10 +105,10 @@ endif()\n string(REPLACE \";\" \"$<SEMICOLON>\" dirs \"${gmock_build_include_dirs}\")\n target_include_directories(gmock SYSTEM INTERFACE\n   \"$<BUILD_INTERFACE:${dirs}>\"\n-  \"$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/${CMAKE_INSTALL_INCLUDEDIR}>\")\n+  \"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>\")\n target_include_directories(gmock_main SYSTEM INTERFACE\n   \"$<BUILD_INTERFACE:${dirs}>\"\n-  \"$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/${CMAKE_INSTALL_INCLUDEDIR}>\")\n+  \"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>\")\n \n ########################################################################\n #\ndiff --git a/googletest/CMakeLists.txt b/googletest/CMakeLists.txt\nindex dce6a7c9..f1da42ff 100644\n--- a/googletest/CMakeLists.txt\n+++ b/googletest/CMakeLists.txt\n@@ -143,10 +143,10 @@ set_target_properties(gtest_main PROPERTIES VERSION ${GOOGLETEST_VERSION})\n string(REPLACE \";\" \"$<SEMICOLON>\" dirs \"${gtest_build_include_dirs}\")\n target_include_directories(gtest SYSTEM INTERFACE\n   \"$<BUILD_INTERFACE:${dirs}>\"\n-  \"$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/${CMAKE_INSTALL_INCLUDEDIR}>\")\n+  \"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>\")\n target_include_directories(gtest_main SYSTEM INTERFACE\n   \"$<BUILD_INTERFACE:${dirs}>\"\n-  \"$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/${CMAKE_INSTALL_INCLUDEDIR}>\")\n+  \"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>\")\n if(CMAKE_SYSTEM_NAME MATCHES \"QNX\" AND CMAKE_SYSTEM_VERSION VERSION_GREATER_EQUAL 7.1)\n   target_link_libraries(gtest PUBLIC regex)\n endif()\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/google/googletest/archive/v1.17.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "1c81ccc40511e1b8e614ba25b497880154ae95543a915b884f62aefa5c00c7fe"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/google/googletest"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "iyya13ysxdycqqbjgj685rfk2z4fn3y6-swig-4.3.1",
      "name": "swig",
      "version": "4.3.1",
      "description": "Interface compiler that connects C/C++ code to higher-level languages",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/swig@4.3.1",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/swig/swig/archive/v4.3.1.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "c04a9b283817554f24431761eee0be119d2ee6579ea1887677feb5a81e20b8e8"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://swig.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "j4c131m5x9f6r3lhs3mrzd4mg43cjmvq-libssh2-1.11.1",
      "name": "libssh2",
      "version": "1.11.1",
      "description": "Client-side C library implementing the SSH2 protocol",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/libssh2@1.11.1",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://www.libssh2.org/download/libssh2-1.11.1.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "d9ec76cbe34db98eec3539fe2c899d26b0c837cb3eb466a56b0f109cabf658f7"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.libssh2.org"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "j533zck85w12295i2ljji00wzrvhj7gs-lerc-4.0.0",
      "name": "lerc",
      "version": "4.0.0",
      "description": "C++ library for Limited Error Raster Compression",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "Apache-2.0"
          }
        }
      ],
      "purl": "pkg:nix/lerc@4.0.0",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/Lerc.pc.in\n+++ b/Lerc.pc.in\n@@ -1,7 +1,7 @@\n prefix=@CMAKE_INSTALL_PREFIX@\n exec_prefix=${prefix}\n-includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@\n-libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@\n+includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@\n+libdir=@CMAKE_INSTALL_FULL_LIBDIR@\n \n Name: @PROJECT_NAME@\n Description: @PROJECT_DESCRIPTION@\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/esri/lerc/archive/v4.0.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "20763d42d358b313f3fe4b3144c6461e5793fbf6dac1f4d83554524c0b9843b6"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/esri/lerc"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "j6ndbbwicndg7gjpm255qqycwbwlgxsz-python3.13-bootstrap-build-1.3.0",
      "name": "python3.13-bootstrap-build",
      "version": "1.3.0",
      "description": "Simple, correct PEP517 package builder",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/python3.13-bootstrap-build@1.3.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/pypa/build/archive/refs/tags/1.3.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "c3660a4339e2f1eeaba674091f62746c7cd18a08d63a55a223c3e8e5ddd9a92f"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/pypa/build"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "j7nqyl18hjpybkdiy4zll4mbv0sjpl73-python3.13-smartypants-2.0.2-dist",
      "name": "smartypants",
      "version": "2.0.2",
      "description": "Translate plain ASCII quotation marks and other characters into “smart” typographic HTML entities",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/smartypants@2.0.2",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/leohemsted/smartypants.py/archive/refs/tags/v2.0.2.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "8d21a24f7e91af43fa784599207b4c8f8828dca18345a176b292f12cdaee0de7"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/leohemsted/smartypants.py"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "jd7libxip067wb1xx8vks9hvgscwnw5p-giflib-5.2.2",
      "name": "giflib",
      "version": "5.2.2",
      "description": "Library for reading and writing gif images",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/giflib@5.2.2",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From ccbc956432650734c91acb3fc88837f7b81267ff Mon Sep 17 00:00:00 2001\nFrom: \"Eric S. Raymond\" <esr@thyrsus.com>\nDate: Wed, 21 Feb 2024 18:55:00 -0500\nSubject: [PATCH] Clean up memory better at end of run (CVE-2021-40633)\n\n---\n gif2rgb.c | 3 +++\n 1 file changed, 3 insertions(+)\n\ndiff --git a/gif2rgb.c b/gif2rgb.c\nindex d51226d..fc2e683 100644\n--- a/gif2rgb.c\n+++ b/gif2rgb.c\n@@ -517,6 +517,9 @@ static void GIF2RGB(int NumFiles, char *FileName, bool OneFileFlag,\n \tDumpScreen2RGB(OutFileName, OneFileFlag, ColorMap, ScreenBuffer,\n \t               GifFile->SWidth, GifFile->SHeight);\n \n+\tfor (i = 0; i < GifFile->SHeight; i++) {\n+        \t(void)free(ScreenBuffer[i]);\n+\t}\n \t(void)free(ScreenBuffer);\n \n \t{\n-- \n2.44.0\n\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff -up giflib-5.2.2/gif2rgb.c.omv~ giflib-5.2.2/gif2rgb.c\n--- giflib-5.2.2/gif2rgb.c.omv~\t2025-04-07 21:44:54.956355983 +0200\n+++ giflib-5.2.2/gif2rgb.c\t2025-04-07 21:45:29.630769589 +0200\n@@ -329,6 +329,11 @@ static void DumpScreen2RGB(char *FileNam\n \t\t\tGifRow = ScreenBuffer[i];\n \t\t\tGifQprintf(\"\\b\\b\\b\\b%-4d\", ScreenHeight - i);\n \t\t\tfor (j = 0; j < ScreenWidth; j++) {\n+\t\t\t\t/* Check if color is within color palete */\n+\t\t\t\tif (GifRow[j] >= ColorMap->ColorCount) {\n+\t\t\t\t\tGIF_EXIT(GifErrorString(\n+\t\t\t\t\t    D_GIF_ERR_IMAGE_DEFECT));\n+\t\t\t\t}\n \t\t\t\tColorMapEntry = &ColorMap->Colors[GifRow[j]];\n \t\t\t\tBuffers[0][j] = ColorMapEntry->Red;\n \t\t\t\tBuffers[1][j] = ColorMapEntry->Green;\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://sourceforge/giflib/giflib-5.2.2.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "be7ffbd057cadebe2aa144542fd90c6838c6a083b5e8a9048b8ee3b66b29d5fb"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://giflib.sourceforge.net/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "jj48zjy1zwjz6x5hy909n8lbppc7p8wz-python3.13-sphinxcontrib-htmlhelp-2.1.0-dist",
      "name": "sphinxcontrib-htmlhelp",
      "version": "2.1.0",
      "description": "Sphinx extension which renders HTML help files",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-2-Clause"
          }
        }
      ],
      "purl": "pkg:nix/sphinxcontrib-htmlhelp@2.1.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/s/sphinxcontrib_htmlhelp/sphinxcontrib_htmlhelp-2.1.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/sphinx-doc/sphinxcontrib-htmlhelp"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "jkqrhg9di9l1ikgxq2ap3caq0m9ym2mg-python3.13-types-psutil-7.0.0.20250822",
      "name": "types-psutil",
      "version": "7.0.0.20250822",
      "description": "Typing stubs for psutil",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "Apache-2.0"
          }
        }
      ],
      "purl": "pkg:nix/types-psutil@7.0.0.20250822",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/t/types_psutil/types_psutil-7.0.0.20250822.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "226cbc0c0ea9cc0a50b8abcc1d91a26c876dcb40be238131f697883690419698"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/python/typeshed"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "jp3ixf608319kbzwjn6wkbmj2ah8563a-pixman-0.46.4-debug",
      "name": "pixman",
      "version": "0.46.4",
      "description": "Low-level library for pixel manipulation",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/pixman@0.46.4",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://xorg/individual/lib/pixman-0.46.4.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "d09c44ebc3bd5bee7021c79f922fe8fb2fb57f7320f55e97ff9914d2346a591c"
            }
          ]
        },
        {
          "type": "vcs",
          "url": "https://cairographics.org/releases/pixman-0.46.4.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "d09c44ebc3bd5bee7021c79f922fe8fb2fb57f7320f55e97ff9914d2346a591c"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://pixman.org"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "jqxkgykhs9jmlyn10wgfvqhj199h2shl-python3.13-docutils-0.21.2-dist",
      "name": "docutils",
      "version": "0.21.2",
      "description": "Python Documentation Utilities",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "name": "Public Domain"
          }
        },
        {
          "license": {
            "id": "BSD-2-Clause"
          }
        },
        {
          "license": {
            "id": "Python-2.0"
          }
        },
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/docutils@0.21.2",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://sourceforge/docutils/docutils-0.21.2.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f"
            }
          ]
        },
        {
          "type": "website",
          "url": "http://docutils.sourceforge.net/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "jrz8v34mgqcwg998dmjrjfxzz9x32hcj-python3.13-tomli-2.2.1-dist",
      "name": "tomli",
      "version": "2.2.1",
      "description": "Python library for parsing TOML, fully compatible with TOML v1.0.0",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/tomli@2.2.1",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/hukkin/tomli/archive/2.2.1.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "e0c5a9f693e25196648ef197cf0f3f8037a57bbe373418fcb86e23bcada88543"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/hukkin/tomli"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "jww0dwicdca8yq5f1fr9wavb60i3gshd-autoconf-2.69",
      "name": "autoconf",
      "version": "2.69",
      "description": "Part of the GNU Build System",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-2.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/autoconf@2.69",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://gnu/autoconf/autoconf-2.69.tar.xz"
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/autoconf/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "jy2k52j81wdp8h9q0pycxdkvwy1gpd59-libpthread-stubs-0.5",
      "name": "libpthread-stubs",
      "version": "0.5",
      "description": "Provides a pkg-config file `pthread-stubs.pc` containing the Cflags/Libs flags applicable to programs/libraries that use only lightweight pthread API",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "X11"
          }
        }
      ],
      "purl": "pkg:nix/libpthread-stubs@0.5",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://xorg/individual/lib/libpthread-stubs-0.5.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "59da566decceba7c2a7970a4a03b48d9905f1262ff94410a649224e33d2442bc"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://gitlab.freedesktop.org/xorg/lib/pthread-stubs"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "k1y1sbyfzjg76dyn10r1lg2lvrhdhvlq-python3.13-toml-0.10.2-dist",
      "name": "toml",
      "version": "0.10.2",
      "description": "Python library for parsing and creating TOML",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/toml@0.10.2",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/t/toml/toml-0.10.2.tar.gz"
        },
        {
          "type": "website",
          "url": "https://github.com/uiri/toml"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "k614dx3f5bdh38cmmpdcsai90ygf5mix-python3.13-lxml-6.0.2-dist",
      "name": "lxml",
      "version": "6.0.2",
      "description": "Pythonic binding for the libxml2 and libxslt libraries",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/lxml@6.0.2",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/lxml/lxml/archive/refs/tags/lxml-6.0.2.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "462e52cdf40916085170c00a1d2e50283dfae4e6658a8f3de5f4a5ba6abcdefb"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://lxml.de"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "k988mrk2fwhsbsy4pp2rcndvprwh643k-lzo-2.10",
      "name": "lzo",
      "version": "2.10",
      "description": "Real-time data (de)compression library",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-2.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/lzo@2.10",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://www.oberhumer.com/opensource/lzo/download/lzo-2.10.tar.gz"
        },
        {
          "type": "website",
          "url": "http://www.oberhumer.com/opensource/lzo"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "kk64v6spb2sfj8br6h729vgqd2d13pn7-isl-0.20",
      "name": "isl",
      "version": "0.20",
      "description": "Library for manipulating sets and relations of integer points bounded by linear constraints",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "LGPL-2.1"
          }
        }
      ],
      "purl": "pkg:nix/isl@0.20",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://downloads.sourceforge.net/libisl/isl-0.20.tar.xz"
        },
        {
          "type": "website",
          "url": "https://libisl.sourceforge.io/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "kn49fsykalfy9df2khzkq3qyqvbz2rkp-boost-build-boost-1.87.0",
      "name": "boost-build",
      "version": "boost-1.87.0",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSL-1.0"
          }
        }
      ],
      "purl": "pkg:nix/boost-build@boost-1.87.0",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/src/tools/clang.jam\t2024-07-25 10:38:16.278401900 -0700\n+++ b/src/tools/clang.jam\t2024-07-25 10:38:52.659750666 -0700\n@@ -90,11 +90,6 @@\n                 case x86-64 : arch = x86_64 ;\n                 case x86-32 : arch = i386 ;\n             }\n-\n-            toolset.flags $(toolset)\n-                OPTIONS $(condition)/<target-os>$(target-os)/<architecture>$(_architecture_)/<address-model>$(_address-model_)\n-                : \"--target=$(arch)-$(vendor-sys)\"\n-                : unchecked ;\n         }\n     }\n }\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://sourceforge/boost/boost_1_87_0.tar.bz2"
        },
        {
          "type": "vcs",
          "url": "https://boostorg.jfrog.io/artifactory/main/release/1.87.0/source/boost_1_87_0.tar.bz2"
        },
        {
          "type": "website",
          "url": "https://www.boost.org/build/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "krib2jk3avznjilxxgq7apiwjaq337fa-libdatrie-2019-12-20-dev",
      "name": "libdatrie",
      "version": "2019-12-20",
      "description": "This is an implementation of double-array structure for representing trie",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "LGPL-2.1-or-later"
          }
        }
      ],
      "purl": "pkg:nix/libdatrie@2019-12-20",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/tlwg/libdatrie/archive/d1db08ac1c76f54ba23d63665437473788c999f3.tar.gz"
        },
        {
          "type": "website",
          "url": "https://linux.thai.net/~thep/datrie/datrie.html"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "l7mab2s2kjsz2pz8dfgvh39af7w7gji1-xorgproto-2024.1",
      "name": "xorgproto",
      "version": "2024.1",
      "description": "X Window System unified protocol definitions",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        },
        {
          "license": {
            "id": "MIT-open-group"
          }
        },
        {
          "license": {
            "id": "HPND-sell-variant"
          }
        },
        {
          "license": {
            "id": "ICU"
          }
        },
        {
          "license": {
            "id": "BSD-2-Clause"
          }
        },
        {
          "license": {
            "id": "SGI-B-2.0"
          }
        },
        {
          "license": {
            "id": "HPND"
          }
        },
        {
          "license": {
            "id": "X11"
          }
        },
        {
          "license": {
            "name": "HPND with different disclaimer"
          }
        }
      ],
      "purl": "pkg:nix/xorgproto@2024.1",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- xorgproto-2018.4.orig/include/X11/meson.build\t2018-02-28 16:45:07.000000000 +0000\n+++ xorgproto-2018.4/include/X11/meson.build\t2019-01-26 02:34:52.763165148 +0000\n@@ -10,8 +10,10 @@\n     endif\n endforeach\n \n # generated headers. try not to make more of these, please.\n-if cc.has_member('fd_set', 'fds_bits', prefix: fd_set_headers)\n+if cc.get_define('_WIN32') == '1' and cc.get_define('CYGWIN') != '1'\n+    fds_bits = 'dummy'\n+elif cc.has_member('fd_set', 'fds_bits', prefix: fd_set_headers)\n     fds_bits = 'fds_bits'\n elif cc.has_member('fd_set', '__fds_bits', prefix: fd_set_headers)\n     fds_bits = '__fds_bits'\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://xorg/individual/proto/xorgproto-2024.1.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "372225fd40815b8423547f5d890c5debc72e88b91088fbfb13158c20495ccb59"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://gitlab.freedesktop.org/xorg/proto/xorgproto"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "lcss48c1x1pvn1irp2y3fsvc4b5mbqxv-libxau-1.0.12",
      "name": "libxau",
      "version": "1.0.12",
      "description": "Functions for handling Xauthority files and entries.",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT-open-group"
          }
        }
      ],
      "purl": "pkg:nix/libxau@1.0.12",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://xorg/individual/lib/libXau-1.0.12.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "74d0e4dfa3d39ad8939e99bda37f5967aba528211076828464d2777d477fc0fb"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://gitlab.freedesktop.org/xorg/lib/libxau"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "m8jnamqi8qs7qhkk2fkyy0granln2x22-python3.13-sphinxcontrib-websupport-2.0.0",
      "name": "sphinxcontrib-websupport",
      "version": "2.0.0",
      "description": "Sphinx API for Web Apps",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-2-Clause"
          }
        }
      ],
      "purl": "pkg:nix/sphinxcontrib-websupport@2.0.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/s/sphinxcontrib_websupport/sphinxcontrib_websupport-2.0.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "0b7367d3bac6454b1f97e42aa8c4d4d4a1b756d525fc726ebbe5571e033e79cd"
            }
          ]
        },
        {
          "type": "website",
          "url": "http://sphinx-doc.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "mgjbs3kpwif9c0914d9k73k2py70g8an-net-tools-2.10",
      "name": "net-tools",
      "version": "2.10",
      "description": "Set of tools for controlling the network subsystem in Linux",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-2.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/net-tools@2.10",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/lib/interface.c\n+++ b/lib/interface.c\n@@ -211,32 +211,47 @@\n }\n \n static const char *get_name(char *name, const char *p)\n+/* Safe version — guarantees at most IFNAMSIZ‑1 bytes are copied\n+   and the destination buffer is always NUL‑terminated.             */\n {\n-    while (isspace(*p))\n-\tp++;\n-    while (*p) {\n-\tif (isspace(*p))\n-\t    break;\n-\tif (*p == ':') {\t/* could be an alias */\n-\t\tconst char *dot = p++;\n- \t\twhile (*p && isdigit(*p)) p++;\n-\t\tif (*p == ':') {\n-\t\t\t/* Yes it is, backup and copy it. */\n-\t\t\tp = dot;\n-\t\t\t*name++ = *p++;\n-\t\t\twhile (*p && isdigit(*p)) {\n-\t\t\t\t*name++ = *p++;\n-\t\t\t}\n-\t\t} else {\n-\t\t\t/* No, it isn't */\n-\t\t\tp = dot;\n-\t    }\n-\t    p++;\n-\t    break;\n-\t}\n-\t*name++ = *p++;\n+    char       *dst = name;                 /* current write ptr          */\n+    const char *end = name + IFNAMSIZ - 1;  /* last byte we may write     */\n+\n+    /* Skip leading white‑space. */\n+    while (isspace((unsigned char)*p))\n+        ++p;\n+\n+    /* Copy until white‑space, end of string, or buffer full. */\n+    while (*p && !isspace((unsigned char)*p) && dst < end) {\n+        if (*p == ':') {                    /* possible alias veth0:123:  */\n+            const char *dot = p;            /* remember the colon         */\n+            ++p;\n+            while (*p && isdigit((unsigned char)*p))\n+                ++p;\n+\n+            if (*p == ':') {                /* confirmed alias            */\n+                p = dot;                    /* rewind and copy it all     */\n+\n+                /* copy the colon */\n+                if (dst < end)\n+                    *dst++ = *p++;\n+\n+                /* copy the digits */\n+                while (*p && isdigit((unsigned char)*p) && dst < end)\n+                    *dst++ = *p++;\n+\n+                if (*p == ':')              /* consume trailing colon     */\n+                    ++p;\n+            } else {              /* if so treat as normal */\n+                p = dot;\n+            }\n+            break;                          /* interface name ends here   */\n+        }\n+\n+        *dst++ = *p++;                      /* ordinary character copy    */\n     }\n-    *name++ = '\\0';\n+\n+    *dst = '\\0';                            /* always NUL‑terminate       */\n     return p;\n }\n \n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://sourceforge/net-tools/net-tools-2.10.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "b262435a5241e89bfa51c3cabd5133753952f7a7b7b93f32e08cb9d96f580d69"
            }
          ]
        },
        {
          "type": "website",
          "url": "http://net-tools.sourceforge.net/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "mgjcrs6wv73jmpy9sw6dwpl3px37amwc-spdlog-1.15.3",
      "name": "spdlog",
      "version": "1.15.3",
      "description": "Very fast, header only, C++ logging library",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/spdlog@1.15.3",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- a/tests/CMakeLists.txt\n+++ b/tests/CMakeLists.txt\n@@ -75,7 +75,7 @@\n     elseif(SPDLOG_SANITIZE_THREAD)\n         spdlog_enable_thread_sanitizer(${test_target})\n     endif()\n-    add_test(NAME ${test_target} COMMAND ${test_target})\n+    add_test(NAME ${test_target} COMMAND ${test_target} --order decl)\n     set_tests_properties(${test_target} PROPERTIES RUN_SERIAL ON)\n endfunction()\n \n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/gabime/spdlog/archive/refs/tags/v1.15.3.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "d2b391f46d98e19e0e059b541f1203d2cd5a5cdf5e8e8747aeeae5542034a48a"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/gabime/spdlog"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "mk49cy3kxsmxfhpjvvv8gg8nsp67knrf-bootstrap-stage-xgcc-gcc-wrapper-",
      "name": "bootstrap-stage-xgcc-gcc-wrapper",
      "version": "",
      "description": "System C compiler (wrapper script)",
      "scope": "required",
      "purl": "pkg:nix/bootstrap-stage-xgcc-gcc-wrapper"
    },
    {
      "type": "application",
      "bom-ref": "mn1fbbhyy4y74143n7rl93qhxngyr1mw-libxft-2.3.9-dev",
      "name": "libxft",
      "version": "2.3.9",
      "description": "X FreeType library",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "HPND-sell-variant"
          }
        }
      ],
      "purl": "pkg:nix/libxft@2.3.9",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://xorg/individual/lib/libXft-2.3.9.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "60a25b78945ed6932635b3bb1899a517d31df7456e69867ffba27f89ff3976f5"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://gitlab.freedesktop.org/xorg/lib/libxft"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "mwq0aip5q28zh18rqz1d90k7jfdak5ca-python3.13-pyyaml-6.0.3-dist",
      "name": "pyyaml",
      "version": "6.0.3",
      "description": "Next generation YAML parser and emitter for Python",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/pyyaml@6.0.3",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/yaml/pyyaml/archive/refs/tags/6.0.3.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "8d4a28201a7cd1c2f1bdd53fccb1745fc623adfd18a7da5e61e8858ee57c0070"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/yaml/pyyaml"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "n6wcsaw689sdfpn425g194v5nkss2xlb-dejavu-fonts-minimal-2.37",
      "name": "dejavu-fonts-minimal",
      "version": "2.37",
      "description": "Typeface family based on the Bitstream Vera fonts",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "name": "Unspecified free software license"
          }
        }
      ],
      "purl": "pkg:nix/dejavu-fonts-minimal@2.37",
      "externalReferences": [
        {
          "type": "website",
          "url": "https://dejavu-fonts.github.io/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "n8vhdpwhrfrzgasb15i2bj2yv027k0lw-libvmaf-3.0.0-dev",
      "name": "libvmaf",
      "version": "3.0.0",
      "description": "Perceptual video quality assessment based on multi-method fusion (VMAF)",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-2-Clause-Patent"
          }
        }
      ],
      "purl": "pkg:nix/libvmaf@3.0.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/netflix/vmaf/archive/v3.0.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "ea6c14daca3560cda9c969096c31d5978e371a05ad41acdb06fde04cc06ae4d0"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/Netflix/vmaf"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "na948rfr50cgvc8fgqrr3bs3laakpazn-docbook-xml-4.3",
      "name": "docbook-xml",
      "version": "4.3",
      "scope": "required",
      "purl": "pkg:nix/docbook-xml@4.3",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://docbook.org/xml/4.3/docbook-xml-4.3.zip"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "nbzws3vkz282gf1p0mydxd28ckn8b0wr-fmt-12.0.0-dev",
      "name": "fmt",
      "version": "12.0.0",
      "description": "Small, safe and fast formatting library",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/fmt@12.0.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/fmtlib/fmt/archive/12.0.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "0190e621e5351db69d0be2b44c8006a20bd59f1b74a04f54ea87296b022097a8"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://fmt.dev/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "ndjrn9a0xhs1gzw1dssnk5icy1fhimxp-libyaml-0.2.5-dev",
      "name": "libyaml",
      "version": "0.2.5",
      "description": "YAML 1.1 parser and emitter written in C",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/libyaml@0.2.5",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/yaml/libyaml/archive/0.2.5.tar.gz"
        },
        {
          "type": "website",
          "url": "https://pyyaml.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "nib1r4k4cqph7zjjnbfc1d6cbg11qr76-ninja-1.13.1",
      "name": "ninja",
      "version": "1.13.1",
      "description": "Small build system with a focus on speed",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "Apache-2.0"
          }
        }
      ],
      "purl": "pkg:nix/ninja@1.13.1",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "From cf438f7a3ab2e70b06ec12653d1111e35084733f Mon Sep 17 00:00:00 2001\nFrom: Max <max@privatevoid.net>\nDate: Fri, 8 Aug 2025 18:20:48 +0200\nSubject: [PATCH] spawn sh instead of /bin/sh\n\n---\n src/subprocess-posix.cc | 4 ++--\n 1 file changed, 2 insertions(+), 2 deletions(-)\n\ndiff --git a/src/subprocess-posix.cc b/src/subprocess-posix.cc\nindex 0e62b3b..c1c31aa 100644\n--- a/src/subprocess-posix.cc\n+++ b/src/subprocess-posix.cc\n@@ -129,8 +129,8 @@ bool Subprocess::Start(SubprocessSet* set, const string& command) {\n   if (err != 0)\n     Fatal(\"posix_spawnattr_setflags: %s\", strerror(err));\n \n-  const char* spawned_args[] = { \"/bin/sh\", \"-c\", command.c_str(), NULL };\n-  err = posix_spawn(&pid_, \"/bin/sh\", &action, &attr,\n+  const char* spawned_args[] = { \"sh\", \"-c\", command.c_str(), NULL };\n+  err = posix_spawnp(&pid_, \"sh\", &action, &attr,\n         const_cast<char**>(spawned_args), environ);\n   if (err != 0)\n     Fatal(\"posix_spawn: %s\", strerror(err));\n-- \n2.50.1\n\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/ninja-build/ninja/archive/v1.13.1.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "1a1005e70513d7d134d997a45becb0b02315198aede7a8444be307087e25346e"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://ninja-build.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "nrqf7kmlhisk754q80bkcrgzga54bvz9-python3.13-python-dateutil-2.9.0.post0",
      "name": "python-dateutil",
      "version": "2.9.0.post0",
      "description": "Powerful extensions to the standard datetime module",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "Apache-2.0"
          }
        },
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/python-dateutil@2.9.0.post0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/p/python-dateutil/python-dateutil-2.9.0.post0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/dateutil/dateutil/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "nwn6w97v5hfmld12zddb6viphvd9hsc8-python3.13-certifi-2025.07.14",
      "name": "certifi",
      "version": "2025.07.14",
      "description": "Python package for providing Mozilla's CA Bundle",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "ISC"
          }
        }
      ],
      "purl": "pkg:nix/certifi@2025.07.14",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/certifi/core.py b/certifi/core.py\nindex 1c9661c..7039be3 100644\n--- a/certifi/core.py\n+++ b/certifi/core.py\n@@ -4,6 +4,7 @@ certifi.py\n \n This module returns the installation location of cacert.pem or its contents.\n \"\"\"\n+import os\n import sys\n import atexit\n \n@@ -11,12 +12,21 @@ def exit_cacert_ctx() -> None:\n     _CACERT_CTX.__exit__(None, None, None)  # type: ignore[union-attr]\n \n \n+def get_cacert_path_from_environ():\n+    path = os.environ.get(\"NIX_SSL_CERT_FILE\", None)\n+\n+    if path == \"/no-cert-file.crt\":\n+        return None\n+\n+    return path\n+\n+\n if sys.version_info >= (3, 11):\n \n     from importlib.resources import as_file, files\n \n     _CACERT_CTX = None\n-    _CACERT_PATH = None\n+    _CACERT_PATH = get_cacert_path_from_environ()\n \n     def where() -> str:\n         # This is slightly terrible, but we want to delay extracting the file\n@@ -44,6 +54,8 @@ if sys.version_info >= (3, 11):\n         return _CACERT_PATH\n \n     def contents() -> str:\n+        if _CACERT_PATH is not None:\n+            return open(_CACERT_PATH, encoding=\"utf-8\").read()\n         return files(\"certifi\").joinpath(\"cacert.pem\").read_text(encoding=\"ascii\")\n \n else:\n@@ -51,7 +63,7 @@ else:\n     from importlib.resources import path as get_path, read_text\n \n     _CACERT_CTX = None\n-    _CACERT_PATH = None\n+    _CACERT_PATH = get_cacert_path_from_environ()\n \n     def where() -> str:\n         # This is slightly terrible, but we want to delay extracting the\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/certifi/python-certifi/archive/2025.07.14.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "4d2a8171ae368bb8b9f44453ae73cdd1f2dd2d64e860c0aae5c7c516c8199b95"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/certifi/python-certifi"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "nzxb3awp1yg1djjcalp1dd427cvx36zb-python3.13-defusedxml-0.8.0rc2-dist",
      "name": "defusedxml",
      "version": "0.8.0rc2",
      "description": "Python module to defuse XML issues",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "Python-2.0"
          }
        }
      ],
      "purl": "pkg:nix/defusedxml@0.8.0rc2",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/tiran/defusedxml/archive/refs/tags/v0.8.0rc2.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "5fcf00e55f6e5cfdf0250fa894aea96494fae8b3f6b825cb2bc8286b96cf0110"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/tiran/defusedxml"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "p5vbka76h031jg0k6npy4fxm98lbkq55-python3.13-pexpect-4.9.0",
      "name": "pexpect",
      "version": "4.9.0",
      "description": "Automate interactive console applications such as ssh, ftp, etc",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/pexpect@4.9.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/p/pexpect/pexpect-4.9.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"
            }
          ]
        },
        {
          "type": "website",
          "url": "http://www.noah.org/wiki/Pexpect"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "pnizhra0882ijp3nilvzdzbaa0ayq4hd-cmake-4.1.2-debug",
      "name": "cmake",
      "version": "4.1.2",
      "description": "Cross-platform, open-source build system generator",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/cmake@4.1.2",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/Source/cmFindBase.cxx b/Source/cmFindBase.cxx\nindex b8d4765692..902c1e5290 100644\n--- a/Source/cmFindBase.cxx\n+++ b/Source/cmFindBase.cxx\n@@ -312,6 +312,11 @@ void cmFindBase::FillCMakeEnvironmentPath()\n   // Add CMAKE_*_PATH environment variables\n   std::string var = cmStrCat(\"CMAKE_\", this->CMakePathName, \"_PATH\");\n   paths.AddEnvPrefixPath(\"CMAKE_PREFIX_PATH\");\n+  if (this->CMakePathName != \"PROGRAM\") {\n+    // Like CMAKE_PREFIX_PATH except when searching for programs. Programs need\n+    // to be located via PATH\n+    paths.AddEnvPrefixPath(\"NIXPKGS_CMAKE_PREFIX_PATH\");\n+  }\n   paths.AddEnvPath(var);\n \n   if (this->CMakePathName == \"PROGRAM\") {\ndiff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx\nindex 6201894fd1..9533862a2b 100644\n--- a/Source/cmFindPackageCommand.cxx\n+++ b/Source/cmFindPackageCommand.cxx\n@@ -2467,6 +2467,7 @@ void cmFindPackageCommand::FillPrefixesCMakeEnvironment()\n \n   // And now the general CMake environment variables\n   paths.AddEnvPath(\"CMAKE_PREFIX_PATH\");\n+  paths.AddEnvPath(\"NIXPKGS_CMAKE_PREFIX_PATH\");\n   if (this->DebugModeEnabled()) {\n     debugBuffer = cmStrCat(debugBuffer,\n                            \"CMAKE_PREFIX_PATH env variable \"\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/Modules/Platform/UnixPaths.cmake b/Modules/Platform/UnixPaths.cmake\nindex e95da44ea4..bdf4155232 100644\n--- a/Modules/Platform/UnixPaths.cmake\n+++ b/Modules/Platform/UnixPaths.cmake\n@@ -71,28 +71,38 @@\n   /lib /lib32 /lib64 /usr/lib /usr/lib32 /usr/lib64\n   )\n \n-if(CMAKE_SYSROOT_COMPILE)\n-  set(_cmake_sysroot_compile \"${CMAKE_SYSROOT_COMPILE}\")\n+# Add the Nix C library paths.\n+if(DEFINED ENV{NIX_CC}\n+  AND IS_DIRECTORY \"$ENV{NIX_CC}\"\n+  AND EXISTS \"$ENV{NIX_CC}/nix-support/orig-libc\"\n+  AND EXISTS \"$ENV{NIX_CC}/nix-support/orig-libc-dev\")\n+  file(STRINGS \"$ENV{NIX_CC}/nix-support/orig-libc\" _nix_cmake_libc)\n+  file(STRINGS \"$ENV{NIX_CC}/nix-support/orig-libc-dev\" _nix_cmake_libc_dev)\n else()\n-  set(_cmake_sysroot_compile \"${CMAKE_SYSROOT}\")\n+  set(_nix_cmake_libc @libc_lib@)\n+  set(_nix_cmake_libc_dev @libc_dev@)\n endif()\n+list(APPEND CMAKE_SYSTEM_INCLUDE_PATH \"${_nix_cmake_libc_dev}/include\")\n+list(APPEND CMAKE_SYSTEM_LIBRARY_PATH \"${_nix_cmake_libc}/lib\")\n+list(APPEND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES \"${_nix_cmake_libc}/lib\")\n \n # Default per-language values.  These may be later replaced after\n # parsing the implicit directory information from compiler output.\n set(_CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES_INIT\n   ${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}\n-  \"${_cmake_sysroot_compile}/usr/include\"\n+  \"${_nix_cmake_libc_dev}/include\"\n   )\n set(_CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES_INIT\n   ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}\n-  \"${_cmake_sysroot_compile}/usr/include\"\n+  \"${_nix_cmake_libc_dev}/include\"\n   )\n set(_CMAKE_CUDA_IMPLICIT_INCLUDE_DIRECTORIES_INIT\n   ${CMAKE_CUDA_IMPLICIT_INCLUDE_DIRECTORIES}\n-  \"${_cmake_sysroot_compile}/usr/include\"\n+  \"${_nix_cmake_libc_dev}/include\"\n   )\n \n-unset(_cmake_sysroot_compile)\n+unset(_nix_cmake_libc)\n+unset(_nix_cmake_libc_dev)\n \n # Reminder when adding new locations computed from environment variables\n # please make sure to keep Help/variable/CMAKE_SYSTEM_PREFIX_PATH.rst\n"
              }
            }
          },
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff --git a/Modules/CMakeDetermineJavaCompiler.cmake b/Modules/CMakeDetermineJavaCompiler.cmake\nindex b20a255621..bc67fdf4aa 100644\n--- a/Modules/CMakeDetermineJavaCompiler.cmake\n+++ b/Modules/CMakeDetermineJavaCompiler.cmake\n@@ -42,19 +42,6 @@\n     \"[HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\JavaSoft\\\\Java Development Kit\\\\1.4;JavaHome]/bin\"\n     \"[HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\JavaSoft\\\\Java Development Kit\\\\1.3;JavaHome]/bin\"\n     $ENV{JAVA_HOME}/bin\n-    /usr/bin\n-    /usr/lib/java/bin\n-    /usr/share/java/bin\n-    /usr/local/bin\n-    /usr/local/java/bin\n-    /usr/local/java/share/bin\n-    /usr/java/j2sdk1.4.2_04\n-    /usr/lib/j2sdk1.4-sun/bin\n-    /usr/java/j2sdk1.4.2_09/bin\n-    /usr/lib/j2sdk1.5-sun/bin\n-    /opt/sun-jdk-1.5.0.04/bin\n-    /usr/local/jdk-1.7.0/bin\n-    /usr/local/jdk-1.6.0/bin\n     )\n   # if no compiler has been specified yet, then look for one\n   if(CMAKE_Java_COMPILER_INIT)\ndiff --git a/Modules/CMakeDetermineSystem.cmake b/Modules/CMakeDetermineSystem.cmake\nindex dd8d30e3d9..d500364ba5 100644\n--- a/Modules/CMakeDetermineSystem.cmake\n+++ b/Modules/CMakeDetermineSystem.cmake\n@@ -9,7 +9,7 @@\n \n # find out on which system cmake runs\n if(CMAKE_HOST_UNIX)\n-  find_program(CMAKE_UNAME NAMES uname PATHS /bin /usr/bin /usr/local/bin)\n+  find_program(CMAKE_UNAME NAMES uname)\n   if(CMAKE_UNAME)\n     if(CMAKE_HOST_SYSTEM_NAME STREQUAL \"AIX\")\n       execute_process(COMMAND ${CMAKE_UNAME} -v\ndiff --git a/Modules/CMakeFindFrameworks.cmake b/Modules/CMakeFindFrameworks.cmake\nindex 87ad38b46b..95f226be40 100644\n--- a/Modules/CMakeFindFrameworks.cmake\n+++ b/Modules/CMakeFindFrameworks.cmake\n@@ -39,22 +39,10 @@\n   macro(CMAKE_FIND_FRAMEWORKS fwk)\n     set(${fwk}_FRAMEWORKS)\n     if(APPLE)\n-      # 'Frameworks' directory from Brew (Apple Silicon and Intel)\n-      if(CMAKE_SYSTEM_PROCESSOR STREQUAL \"arm64\")\n-        set(_brew_framework_path /opt/homebrew/Frameworks)\n-      else()\n-        set(_brew_framework_path /usr/local/Frameworks)\n-      endif()\n-\n       file(TO_CMAKE_PATH \"$ENV{CMAKE_FRAMEWORK_PATH}\" _cmff_CMAKE_FRAMEWORK_PATH)\n       set(_cmff_search_paths\n             ${CMAKE_FRAMEWORK_PATH}\n             ${_cmff_CMAKE_FRAMEWORK_PATH}\n-            ~/Library/Frameworks\n-            ${_brew_framework_path}\n-            /Library/Frameworks\n-            /System/Library/Frameworks\n-            /Network/Library/Frameworks\n             ${CMAKE_SYSTEM_FRAMEWORK_PATH})\n \n       # For backwards compatibility reasons,\ndiff --git a/Modules/CMakeFindJavaCommon.cmake b/Modules/CMakeFindJavaCommon.cmake\nindex 95ca9b57b6..616295e031 100644\n--- a/Modules/CMakeFindJavaCommon.cmake\n+++ b/Modules/CMakeFindJavaCommon.cmake\n@@ -15,20 +15,6 @@\n   if(_ENV_JAVA_HOME AND IS_DIRECTORY \"${_ENV_JAVA_HOME}\")\n     set(_JAVA_HOME \"${_ENV_JAVA_HOME}\")\n     set(_JAVA_HOME_EXPLICIT 1)\n-  else()\n-    set(_CMD_JAVA_HOME \"\")\n-    if(APPLE AND EXISTS /usr/libexec/java_home)\n-      execute_process(COMMAND /usr/libexec/java_home\n-        OUTPUT_VARIABLE _CMD_JAVA_HOME\n-        OUTPUT_STRIP_TRAILING_WHITESPACE\n-        ERROR_QUIET\n-      )\n-    endif()\n-    if(_CMD_JAVA_HOME AND IS_DIRECTORY \"${_CMD_JAVA_HOME}\")\n-      set(_JAVA_HOME \"${_CMD_JAVA_HOME}\")\n-      set(_JAVA_HOME_EXPLICIT 0)\n-    endif()\n-    unset(_CMD_JAVA_HOME)\n   endif()\n   unset(_ENV_JAVA_HOME)\n endif()\ndiff --git a/Modules/CMakeFindPackageMode.cmake b/Modules/CMakeFindPackageMode.cmake\nindex 6e2762cf41..f88cf2f7c1 100644\n--- a/Modules/CMakeFindPackageMode.cmake\n+++ b/Modules/CMakeFindPackageMode.cmake\n@@ -64,7 +64,7 @@\n   # from the outside\n   if(NOT CMAKE_SIZEOF_VOID_P)\n     set(CMAKE_SIZEOF_VOID_P 4)\n-    if(EXISTS ${CMAKE_SYSROOT}/usr/lib64)\n+    if(FALSE)\n       set(CMAKE_SIZEOF_VOID_P 8)\n     else()\n       # use the file utility to check whether itself is 64 bit:\n@@ -79,22 +79,6 @@\n     endif()\n   endif()\n \n-  # guess Debian multiarch if it has not been set:\n-  if(EXISTS /etc/debian_version)\n-    if(NOT CMAKE_${LANGUAGE}_LIBRARY_ARCHITECTURE )\n-      file(GLOB filesInLib RELATIVE /lib /lib/*-linux-gnu* )\n-      foreach(file ${filesInLib})\n-        if(\"${file}\" MATCHES \"${CMAKE_LIBRARY_ARCHITECTURE_REGEX}\")\n-          set(CMAKE_${LANGUAGE}_LIBRARY_ARCHITECTURE ${file})\n-          break()\n-        endif()\n-      endforeach()\n-    endif()\n-    if(NOT CMAKE_LIBRARY_ARCHITECTURE)\n-      set(CMAKE_LIBRARY_ARCHITECTURE ${CMAKE_${LANGUAGE}_LIBRARY_ARCHITECTURE})\n-    endif()\n-  endif()\n-\n endif()\n \n set(CMAKE_${LANGUAGE}_COMPILER \"dummy\")\ndiff --git a/Modules/CMakeFindSublimeText2.cmake b/Modules/CMakeFindSublimeText2.cmake\nindex fc0ec313b8..46d8418d2c 100644\n--- a/Modules/CMakeFindSublimeText2.cmake\n+++ b/Modules/CMakeFindSublimeText2.cmake\n@@ -7,15 +7,6 @@\n \n find_program(CMAKE_SUBLIMETEXT_EXECUTABLE\n     NAMES subl3 subl sublime_text\n-    PATHS\n-        \"/Applications/Sublime Text.app/Contents/SharedSupport/bin\"\n-        \"/Applications/Sublime Text 3.app/Contents/SharedSupport/bin\"\n-        \"/Applications/Sublime Text 2.app/Contents/SharedSupport/bin\"\n-        \"$ENV{HOME}/Applications/Sublime Text.app/Contents/SharedSupport/bin\"\n-        \"$ENV{HOME}/Applications/Sublime Text 3.app/Contents/SharedSupport/bin\"\n-        \"$ENV{HOME}/Applications/Sublime Text 2.app/Contents/SharedSupport/bin\"\n-        \"/opt/sublime_text\"\n-        \"/opt/sublime_text_3\"\n     DOC \"The Sublime Text executable\")\n \n if(CMAKE_SUBLIMETEXT_EXECUTABLE)\ndiff --git a/Modules/CPackIFW.cmake b/Modules/CPackIFW.cmake\nindex 2a2f478fd7..f22281bdca 100644\n--- a/Modules/CPackIFW.cmake\n+++ b/Modules/CPackIFW.cmake\n@@ -426,7 +426,7 @@\n else()\n   list(APPEND _CPACK_IFW_PATHS\n     \"$ENV{HOME}/Qt\"\n-    \"/opt/Qt\")\n+    )\n endif()\n list(REMOVE_DUPLICATES _CPACK_IFW_PATHS)\n \ndiff --git a/Modules/FindBLAS.cmake b/Modules/FindBLAS.cmake\nindex b45a279b94..884ccc0e32 100644\n--- a/Modules/FindBLAS.cmake\n+++ b/Modules/FindBLAS.cmake\n@@ -1098,16 +1098,8 @@\n     ((BLA_VENDOR STREQUAL \"ACML_GPU\") AND (NOT BLAS_ACML_GPU_LIB_DIRS))\n     )\n   # try to find acml in \"standard\" paths\n-  if(WIN32)\n-    file(GLOB _ACML_ROOT \"C:/AMD/acml*/ACML-EULA.txt\")\n-  else()\n-    file(GLOB _ACML_ROOT \"/opt/acml*/ACML-EULA.txt\")\n-  endif()\n-  if(WIN32)\n-    file(GLOB _ACML_GPU_ROOT \"C:/AMD/acml*/GPGPUexamples\")\n-  else()\n-    file(GLOB _ACML_GPU_ROOT \"/opt/acml*/GPGPUexamples\")\n-  endif()\n+  set(_ACML_ROOT)\n+  set(_ACML_GPU_ROOT)\n   list(GET _ACML_ROOT 0 _ACML_ROOT)\n   list(GET _ACML_GPU_ROOT 0 _ACML_GPU_ROOT)\n   if(_ACML_ROOT)\ndiff --git a/Modules/FindCUDA.cmake b/Modules/FindCUDA.cmake\nindex bceb615ca0..2350b15655 100644\n--- a/Modules/FindCUDA.cmake\n+++ b/Modules/FindCUDA.cmake\n@@ -854,7 +854,6 @@\n   # Now search default paths\n   find_program(CUDA_TOOLKIT_ROOT_DIR_NVCC\n     NAMES nvcc nvcc.exe\n-    PATHS /opt/cuda/bin\n     PATH_SUFFIXES cuda/bin\n     DOC \"Toolkit location.\"\n     )\n@@ -1014,7 +1013,6 @@\n     # Search default search paths, after we search our own set of paths.\n     find_library(${_var}\n       NAMES ${_names}\n-      PATHS \"/usr/lib/nvidia-current\"\n       DOC ${_doc}\n       )\n   endif()\n@@ -1114,11 +1112,6 @@\n   if (CUDA_rt_LIBRARY)\n     list(APPEND CUDA_LIBRARIES ${CUDA_rt_LIBRARY})\n   endif()\n-  if(APPLE)\n-    # We need to add the default path to the driver (libcuda.dylib) as an rpath, so that\n-    # the static cuda runtime can find it at runtime.\n-    list(APPEND CUDA_LIBRARIES -Wl,-rpath,/usr/local/cuda/lib)\n-  endif()\n else()\n   list(APPEND CUDA_LIBRARIES ${CUDA_CUDART_LIBRARY})\n endif()\n@@ -1223,8 +1216,6 @@\n   \"$ENV{NVSDKCOMPUTE_ROOT}/C\"\n   ENV NVSDKCUDA_ROOT\n   \"[HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\NVIDIA Corporation\\\\Installed Products\\\\NVIDIA SDK 10\\\\Compute;InstallDir]\"\n- PATHS\n-  \"/Developer/GPU\\ Computing/C\"\n   )\n \n # Keep the CUDA_SDK_ROOT_DIR first in order to be able to override the\n@@ -1236,7 +1227,6 @@\n   \"${CUDA_TOOLKIT_ROOT_DIR}/NV_CUDA_SDK\"\n   \"$ENV{HOME}/NVIDIA_CUDA_SDK\"\n   \"$ENV{HOME}/NVIDIA_CUDA_SDK_MACOSX\"\n-  \"/Developer/CUDA\"\n   )\n \n # Example of how to find an include file from the CUDA_SDK_ROOT_DIR\ndiff --git a/Modules/FindCUDAToolkit.cmake b/Modules/FindCUDAToolkit.cmake\nindex b00cd26b7e..f5f74ebe1d 100644\n--- a/Modules/FindCUDAToolkit.cmake\n+++ b/Modules/FindCUDAToolkit.cmake\n@@ -776,12 +776,6 @@\n       elseif(CUDAToolkit_ROOT_DIR AND EXISTS \"${CUDAToolkit_ROOT_DIR}/${vf}\")\n         set(${result_variable} \"${CUDAToolkit_ROOT_DIR}/${vf}\" PARENT_SCOPE)\n         break()\n-      elseif(CMAKE_SYSROOT_LINK AND EXISTS \"${CMAKE_SYSROOT_LINK}/usr/lib/cuda/${vf}\")\n-        set(${result_variable} \"${CMAKE_SYSROOT_LINK}/usr/lib/cuda/${vf}\" PARENT_SCOPE)\n-        break()\n-      elseif(EXISTS \"${CMAKE_SYSROOT}/usr/lib/cuda/${vf}\")\n-        set(${result_variable} \"${CMAKE_SYSROOT}/usr/lib/cuda/${vf}\" PARENT_SCOPE)\n-        break()\n       endif()\n     endforeach()\n   endfunction()\n@@ -864,18 +858,8 @@\n   # if CUDAToolkit_ROOT is not specified, it is assumed that the symlinked\n   # directory is the desired location.\n   if(NOT CUDAToolkit_ROOT_DIR)\n-    if(UNIX)\n-      if(NOT APPLE)\n-        set(platform_base \"/usr/local/cuda-\")\n-      else()\n-        set(platform_base \"/Developer/NVIDIA/CUDA-\")\n-      endif()\n-    else()\n-      set(platform_base \"C:\\\\Program Files\\\\NVIDIA GPU Computing Toolkit\\\\CUDA\\\\v\")\n-    endif()\n-\n     # Build out a descending list of possible cuda installations, e.g.\n-    file(GLOB possible_paths \"${platform_base}*\")\n+    set(possible_paths)\n     # Iterate the glob results and create a descending list.\n     set(versions)\n     foreach(p ${possible_paths})\n@@ -891,14 +875,6 @@\n \n     # With a descending list of versions, populate possible paths to search.\n     set(search_paths)\n-    foreach(v ${versions})\n-      list(APPEND search_paths \"${platform_base}${v}\")\n-    endforeach()\n-\n-    # Force the global default /usr/local/cuda to the front on Unix.\n-    if(UNIX)\n-      list(INSERT search_paths 0 \"/usr/local/cuda\")\n-    endif()\n \n     # Now search for the toolkit again using the platform default search paths.\n     _CUDAToolkit_find_root_dir(SEARCH_PATHS \"${search_paths}\" FIND_FLAGS PATH_SUFFIXES bin)\ndiff --git a/Modules/FindCoin3D.cmake b/Modules/FindCoin3D.cmake\nindex 1d89c604e0..5b70e71a87 100644\n--- a/Modules/FindCoin3D.cmake\n+++ b/Modules/FindCoin3D.cmake\n@@ -76,10 +76,8 @@\n else ()\n   if(APPLE)\n     find_path(COIN3D_INCLUDE_DIRS Inventor/So.h\n-     /Library/Frameworks/Inventor.framework/Headers\n     )\n     find_library(COIN3D_LIBRARIES Coin\n-      /Library/Frameworks/Inventor.framework/Libraries\n     )\n     set(COIN3D_LIBRARIES \"-framework Coin3d\" CACHE STRING \"Coin3D library for OSX\")\n   else()\ndiff --git a/Modules/FindCurses.cmake b/Modules/FindCurses.cmake\nindex 64600c6c64..de6af241a1 100644\n--- a/Modules/FindCurses.cmake\n+++ b/Modules/FindCurses.cmake\n@@ -136,15 +136,7 @@\n # message.  Cygwin is an ncurses package, so force ncurses on\n # cygwin if the curses.h is missing\n if(CURSES_NCURSES_LIBRARY AND CYGWIN)\n-  if (CURSES_NEED_WIDE)\n-    if(NOT EXISTS /usr/include/ncursesw/curses.h)\n-      set(CURSES_USE_NCURSES TRUE)\n-    endif()\n-  else()\n-    if(NOT EXISTS /usr/include/curses.h)\n-      set(CURSES_USE_NCURSES TRUE)\n-    endif()\n-  endif()\n+  set(CURSES_USE_NCURSES TRUE)\n endif()\n \n \ndiff --git a/Modules/FindDCMTK.cmake b/Modules/FindDCMTK.cmake\nindex 4e0ff47f52..6db26cb855 100644\n--- a/Modules/FindDCMTK.cmake\n+++ b/Modules/FindDCMTK.cmake\n@@ -88,14 +88,7 @@\n \n set(_dcmtk_dir_description \"The directory of DCMTK build or install tree.\")\n \n-# Ensure that DCMTK_DIR is set to a reasonable default value\n-# so that DCMTK libraries can be found on a standard Unix distribution.\n-# It also overwrite the value of DCMTK_DIR after this one has been\n-# set by a successful discovery of DCMTK by the unpatched FindDCMTK.cmake module\n-# distributed with CMake (as of 0167cea)\n-if(NOT DCMTK_DIR OR DCMTK_DIR STREQUAL \"/usr/include/dcmtk\")\n-  set(DCMTK_DIR \"/usr\" CACHE PATH ${_dcmtk_dir_description} FORCE)\n-endif()\n+set(DCMTK_DIR CACHE PATH ${_dcmtk_dir_description})\n \n set(_SAVED_DCMTK_DIR ${DCMTK_DIR})\n \ndiff --git a/Modules/FindDart.cmake b/Modules/FindDart.cmake\nindex 96cce45590..245dffaf21 100644\n--- a/Modules/FindDart.cmake\n+++ b/Modules/FindDart.cmake\n@@ -24,7 +24,6 @@\n       ENV DART_ROOT\n     PATHS\n       ${PROJECT_SOURCE_DIR}\n-      /usr/share\n       C:/\n       \"C:/Program Files\"\n       ${PROJECT_SOURCE_DIR}/..\ndiff --git a/Modules/FindDoxygen.cmake b/Modules/FindDoxygen.cmake\nindex 2d430994e8..335c733150 100644\n--- a/Modules/FindDoxygen.cmake\n+++ b/Modules/FindDoxygen.cmake\n@@ -755,10 +755,6 @@\n         NAMES doxygen\n         PATHS\n             \"[HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Uninstall\\\\doxygen_is1;Inno Setup: App Path]/bin\"\n-            /Applications/Doxygen.app/Contents/Resources\n-            /Applications/Doxygen.app/Contents/MacOS\n-            /Applications/Utilities/Doxygen.app/Contents/Resources\n-            /Applications/Utilities/Doxygen.app/Contents/MacOS\n         DOC \"Doxygen documentation generation tool (https://www.doxygen.nl)\"\n         VALIDATOR _Doxygen_version_validator\n     )\n@@ -845,12 +841,6 @@\n             \"$ENV{ProgramFiles}/ATT/Graphviz/bin\"\n             \"C:/Program Files/ATT/Graphviz/bin\"\n             [HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\ATT\\\\Graphviz;InstallPath]/bin\n-            /Applications/Graphviz.app/Contents/MacOS\n-            /Applications/Utilities/Graphviz.app/Contents/MacOS\n-            /Applications/Doxygen.app/Contents/Resources\n-            /Applications/Doxygen.app/Contents/MacOS\n-            /Applications/Utilities/Doxygen.app/Contents/Resources\n-            /Applications/Utilities/Doxygen.app/Contents/MacOS\n         DOC \"Dot tool for use with Doxygen\"\n     )\n     mark_as_advanced(DOXYGEN_DOT_EXECUTABLE)\ndiff --git a/Modules/FindFontconfig.cmake b/Modules/FindFontconfig.cmake\nindex 218ad2fbfa..94e6052564 100644\n--- a/Modules/FindFontconfig.cmake\n+++ b/Modules/FindFontconfig.cmake\n@@ -64,7 +64,6 @@\n     fontconfig/fontconfig.h\n   HINTS\n     ${PKG_FONTCONFIG_INCLUDE_DIRS}\n-    /usr/X11/include\n )\n \n find_library( Fontconfig_LIBRARY\ndiff --git a/Modules/FindGLUT.cmake b/Modules/FindGLUT.cmake\nindex e29758dc1c..d6255f98c2 100644\n--- a/Modules/FindGLUT.cmake\n+++ b/Modules/FindGLUT.cmake\n@@ -120,12 +120,10 @@\n     set(_GLUT_glut_LIB_DIR /boot/develop/lib/x86)\n   else()\n     find_library( GLUT_Xi_LIBRARY Xi\n-      /usr/openwin/lib\n       )\n     mark_as_advanced(GLUT_Xi_LIBRARY)\n \n     find_library( GLUT_Xmu_LIBRARY Xmu\n-      /usr/openwin/lib\n       )\n     mark_as_advanced(GLUT_Xmu_LIBRARY)\n \n@@ -145,11 +143,6 @@\n \n   find_path( GLUT_INCLUDE_DIR GL/glut.h\n     PATHS\n-    /usr/include/GL\n-    /usr/openwin/share/include\n-    /usr/openwin/include\n-    /opt/graphics/OpenGL/include\n-    /opt/graphics/OpenGL/contrib/libglut\n     ${_GLUT_INC_DIR}\n     HINTS\n     ${PC_GLUT_INCLUDE_DIRS}\n@@ -158,7 +151,6 @@\n \n   find_library( GLUT_glut_LIBRARY glut\n     PATHS\n-    /usr/openwin/lib\n     ${_GLUT_glut_LIB_DIR}\n     HINTS\n     ${PC_GLUT_LIBRARY_DIRS}\ndiff --git a/Modules/FindGTK.cmake b/Modules/FindGTK.cmake\nindex 6e39f5a989..df231de76e 100644\n--- a/Modules/FindGTK.cmake\n+++ b/Modules/FindGTK.cmake\n@@ -71,9 +71,6 @@\n   find_path( GTK_gtk_INCLUDE_PATH NAMES gtk/gtk.h\n     PATH_SUFFIXES gtk-1.2 gtk12\n     PATHS\n-    /usr/openwin/share/include\n-    /usr/openwin/include\n-    /opt/gnome/include\n   )\n \n   # Some Linux distributions (e.g. Red Hat) have glibconfig.h\n@@ -84,26 +81,17 @@\n   find_path( GTK_glibconfig_INCLUDE_PATH NAMES glibconfig.h\n     PATH_SUFFIXES glib/include lib/glib/include include/glib12\n     PATHS\n-    /usr/openwin/share/include\n-    /opt/gnome/include\n-    /opt/gnome/lib/glib/include\n   )\n \n   find_path( GTK_glib_INCLUDE_PATH NAMES glib.h\n     PATH_SUFFIXES gtk-1.2 glib-1.2 glib12 glib/include lib/glib/include\n     PATHS\n-    /usr/openwin/share/include\n-    /opt/gnome/include\n   )\n \n   find_path( GTK_gtkgl_INCLUDE_PATH NAMES gtkgl/gtkglarea.h\n-    PATHS /usr/openwin/share/include\n-          /opt/gnome/include\n   )\n \n   find_library( GTK_gtkgl_LIBRARY gtkgl\n-    /usr/openwin/lib\n-    /opt/gnome/lib\n   )\n \n   #\n@@ -112,38 +100,26 @@\n \n   find_library( GTK_gtk_LIBRARY\n     NAMES  gtk gtk12\n-    PATHS /usr/openwin/lib\n-          /opt/gnome/lib\n   )\n \n   find_library( GTK_gdk_LIBRARY\n     NAMES  gdk gdk12\n-    PATHS  /usr/openwin/lib\n-           /opt/gnome/lib\n   )\n \n   find_library( GTK_gmodule_LIBRARY\n     NAMES  gmodule gmodule12\n-    PATHS  /usr/openwin/lib\n-           /opt/gnome/lib\n   )\n \n   find_library( GTK_glib_LIBRARY\n     NAMES  glib glib12\n-    PATHS  /usr/openwin/lib\n-           /opt/gnome/lib\n   )\n \n   find_library( GTK_Xi_LIBRARY\n     NAMES Xi\n-    PATHS /usr/openwin/lib\n-          /opt/gnome/lib\n     )\n \n   find_library( GTK_gthread_LIBRARY\n     NAMES  gthread gthread12\n-    PATHS  /usr/openwin/lib\n-           /opt/gnome/lib\n   )\n \n   if(GTK_gtk_INCLUDE_PATH\ndiff --git a/Modules/FindGTK2.cmake b/Modules/FindGTK2.cmake\nindex 9c5bc63272..87f8f81149 100644\n--- a/Modules/FindGTK2.cmake\n+++ b/Modules/FindGTK2.cmake\n@@ -377,34 +377,12 @@\n                        \"include suffixes = ${_suffixes}\")\n     endif()\n \n-    if(CMAKE_LIBRARY_ARCHITECTURE)\n-      set(_gtk2_arch_dir /usr/lib/${CMAKE_LIBRARY_ARCHITECTURE})\n-      if(GTK2_DEBUG)\n-        message(STATUS \"Adding ${_gtk2_arch_dir} to search path for multiarch support\")\n-      endif()\n-    endif()\n     find_path(GTK2_${_var}_INCLUDE_DIR ${_hdr}\n         PATHS\n             ${PC_GLIB2_INCLUDEDIR}\n             ${PC_GLIB2_LIBDIR}\n             ${PC_GTK2_INCLUDEDIR}\n             ${PC_GTK2_LIBDIR}\n-            ${_gtk2_arch_dir}\n-            /usr/local/libx32\n-            /usr/local/lib64\n-            /usr/local/lib\n-            /usr/libx32\n-            /usr/lib64\n-            /usr/lib\n-            /opt/gnome/include\n-            /opt/gnome/lib\n-            /opt/openwin/include\n-            /usr/openwin/lib\n-            /sw/lib\n-            /opt/local/lib\n-            /opt/homebrew/lib\n-            /usr/pkg/lib\n-            /usr/pkg/include/glib\n             $ENV{GTKMM_BASEPATH}/include\n             $ENV{GTKMM_BASEPATH}/lib\n             [HKEY_CURRENT_USER\\\\SOFTWARE\\\\gtkmm\\\\2.4;Path]/include\n@@ -509,8 +487,6 @@\n     find_library(GTK2_${_var}_LIBRARY_RELEASE\n         NAMES ${_lib_list}\n         PATHS\n-            /opt/gnome/lib\n-            /usr/openwin/lib\n             $ENV{GTKMM_BASEPATH}/lib\n             [HKEY_CURRENT_USER\\\\SOFTWARE\\\\gtkmm\\\\2.4;Path]/lib\n             [HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\gtkmm\\\\2.4;Path]/lib\ndiff --git a/Modules/FindIce.cmake b/Modules/FindIce.cmake\nindex 82156747d3..cc3f2a64af 100644\n--- a/Modules/FindIce.cmake\n+++ b/Modules/FindIce.cmake\n@@ -629,11 +629,6 @@\n         list(APPEND ice_roots \"${ice_location}\")\n       endif()\n     endforeach()\n-  else()\n-    foreach(ice_version ${ice_versions})\n-      # Prefer 64-bit variants if present (and using a 64-bit compiler)\n-      list(APPEND ice_roots \"/opt/Ice-${ice_version}\")\n-    endforeach()\n   endif()\n \n   # Find all Ice programs\n@@ -689,7 +684,7 @@\n   # In common use on Linux, MacOS X (homebrew) and FreeBSD; prefer\n   # version-specific dir\n   list(APPEND ice_slice_paths\n-       /usr/local/share /usr/share)\n+       )\n   list(APPEND ice_slice_suffixes\n        \"Ice-${Ice_VERSION_SLICE2CPP_FULL}/slice\"\n        \"Ice-${Ice_VERSION_SLICE2CPP_SHORT}/slice\"\ndiff --git a/Modules/FindJNI.cmake b/Modules/FindJNI.cmake\nindex 10dcc51776..e272bd9583 100644\n--- a/Modules/FindJNI.cmake\n+++ b/Modules/FindJNI.cmake\n@@ -363,51 +363,6 @@\n endif()\n \n set(_JNI_JAVA_DIRECTORIES_BASE\n-  /usr/lib/jvm/java\n-  /usr/lib/java\n-  /usr/lib/jvm\n-  /usr/local/lib/java\n-  /usr/local/share/java\n-  /usr/lib/j2sdk1.4-sun\n-  /usr/lib/j2sdk1.5-sun\n-  /opt/sun-jdk-1.5.0.04\n-  /usr/lib/jvm/java-6-sun\n-  /usr/lib/jvm/java-1.5.0-sun\n-  /usr/lib/jvm/java-6-sun-1.6.0.00       # can this one be removed according to #8821 ? Alex\n-  /usr/lib/jvm/java-6-openjdk\n-  /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0        # fedora\n-  # Debian specific paths for default JVM\n-  /usr/lib/jvm/default-java\n-  # Arch Linux specific paths for default JVM\n-  /usr/lib/jvm/default\n-  # Ubuntu specific paths for default JVM\n-  /usr/lib/jvm/java-21-openjdk-{libarch}    # Ubuntu 23.04\n-  /usr/lib/jvm/java-20-openjdk-{libarch}    # Ubuntu 22.10\n-  /usr/lib/jvm/java-19-openjdk-{libarch}    # Ubuntu 22.04 LTS\n-  /usr/lib/jvm/java-18-openjdk-{libarch}    # Ubuntu 22.04 LTS\n-  /usr/lib/jvm/java-17-openjdk-{libarch}    # Ubuntu 18.04 LTS\n-  /usr/lib/jvm/java-16-openjdk-{libarch}    # Ubuntu 20.04 LTS\n-  /usr/lib/jvm/java-13-openjdk-{libarch}    # Ubuntu 20.04 LTS\n-  /usr/lib/jvm/java-11-openjdk-{libarch}    # Ubuntu 18.04 LTS\n-  /usr/lib/jvm/java-8-openjdk-{libarch}     # Ubuntu 15.10\n-  /usr/lib/jvm/java-7-openjdk-{libarch}     # Ubuntu 15.10\n-  /usr/lib/jvm/java-6-openjdk-{libarch}     # Ubuntu 15.10\n-  # OpenBSD specific paths for default JVM\n-  /usr/local/jdk-1.7.0\n-  /usr/local/jre-1.7.0\n-  /usr/local/jdk-1.6.0\n-  /usr/local/jre-1.6.0\n-  # FreeBSD specific paths for default JVM\n-  /usr/local/openjdk15\n-  /usr/local/openjdk14\n-  /usr/local/openjdk13\n-  /usr/local/openjdk12\n-  /usr/local/openjdk11\n-  /usr/local/openjdk8\n-  /usr/local/openjdk7\n-  # SuSE specific paths for default JVM\n-  /usr/lib64/jvm/java\n-  /usr/lib64/jvm/jre\n   )\n \n set(_JNI_JAVA_AWT_LIBRARY_TRIES)\ndiff --git a/Modules/FindJava.cmake b/Modules/FindJava.cmake\nindex 1587ce648b..e92213cba7 100644\n--- a/Modules/FindJava.cmake\n+++ b/Modules/FindJava.cmake\n@@ -199,17 +199,6 @@\n # Hard-coded guesses should still go in PATHS. This ensures that the user\n # environment can always override hard guesses.\n set(_JAVA_PATHS\n-  /usr/lib/java/bin\n-  /usr/share/java/bin\n-  /usr/local/java/bin\n-  /usr/local/java/share/bin\n-  /usr/java/j2sdk1.4.2_04\n-  /usr/lib/j2sdk1.4-sun/bin\n-  /usr/java/j2sdk1.4.2_09/bin\n-  /usr/lib/j2sdk1.5-sun/bin\n-  /opt/sun-jdk-1.5.0.04/bin\n-  /usr/local/jdk-1.7.0/bin\n-  /usr/local/jdk-1.6.0/bin\n   )\n find_program(Java_JAVA_EXECUTABLE\n   NAMES java\ndiff --git a/Modules/FindKDE3.cmake b/Modules/FindKDE3.cmake\nindex ccfad5e7fb..265e99eb1a 100644\n--- a/Modules/FindKDE3.cmake\n+++ b/Modules/FindKDE3.cmake\n@@ -234,9 +234,6 @@\n find_program(KDECONFIG_EXECUTABLE NAMES kde-config\n   HINTS\n     $ENV{KDEDIR}/bin\n-  PATHS\n-    /opt/kde3/bin\n-    /opt/kde/bin\n   )\n \n set(KDE3PREFIX)\n@@ -261,9 +258,6 @@\n   HINTS\n     $ENV{KDEDIR}/include\n     ${KDE3PREFIX}/include\n-  PATHS\n-    /opt/kde3/include\n-    /opt/kde/include\n   PATH_SUFFIXES include/kde\n   )\n \n@@ -272,9 +266,6 @@\n   HINTS\n     $ENV{KDEDIR}/lib\n     ${KDE3PREFIX}/lib\n-  PATHS\n-    /opt/kde3/lib\n-    /opt/kde/lib\n )\n \n set(QT_AND_KDECORE_LIBS ${QT_LIBRARIES} ${KDE3_KDECORE_LIBRARY})\n@@ -296,27 +287,18 @@\n   HINTS\n     $ENV{KDEDIR}/bin\n     ${KDE3PREFIX}/bin\n-  PATHS\n-    /opt/kde3/bin\n-    /opt/kde/bin\n   )\n \n find_program(KDE3_DCOPIDL2CPP_EXECUTABLE NAMES dcopidl2cpp\n   HINTS\n     $ENV{KDEDIR}/bin\n     ${KDE3PREFIX}/bin\n-  PATHS\n-    /opt/kde3/bin\n-    /opt/kde/bin\n   )\n \n find_program(KDE3_KCFGC_EXECUTABLE NAMES kconfig_compiler\n   HINTS\n     $ENV{KDEDIR}/bin\n     ${KDE3PREFIX}/bin\n-  PATHS\n-    /opt/kde3/bin\n-    /opt/kde/bin\n   )\n \n \ndiff --git a/Modules/FindKDE4.cmake b/Modules/FindKDE4.cmake\nindex 220906b2de..7eb7b692d8 100644\n--- a/Modules/FindKDE4.cmake\n+++ b/Modules/FindKDE4.cmake\n@@ -52,7 +52,6 @@\n    HINTS\n    ${CMAKE_INSTALL_PREFIX}\n    ${_KDEDIRS}\n-   /opt/kde4\n    ONLY_CMAKE_FIND_ROOT_PATH\n    )\n \ndiff --git a/Modules/FindLATEX.cmake b/Modules/FindLATEX.cmake\nindex e272770af3..9f702c3f6d 100644\n--- a/Modules/FindLATEX.cmake\n+++ b/Modules/FindLATEX.cmake\n@@ -203,14 +203,12 @@\n find_program(LATEX_COMPILER\n   NAMES latex\n   PATHS ${MIKTEX_BINARY_PATH}\n-        /usr/bin\n )\n \n # find pdflatex\n find_program(PDFLATEX_COMPILER\n   NAMES pdflatex\n   PATHS ${MIKTEX_BINARY_PATH}\n-        /usr/bin\n )\n if (PDFLATEX_COMPILER)\n   set(LATEX_PDFLATEX_FOUND TRUE)\n@@ -222,7 +220,6 @@\n find_program(XELATEX_COMPILER\n   NAMES xelatex\n   PATHS ${MIKTEX_BINARY_PATH}\n-        /usr/bin\n )\n if (XELATEX_COMPILER)\n   set(LATEX_XELATEX_FOUND TRUE)\n@@ -234,7 +231,6 @@\n find_program(LUALATEX_COMPILER\n   NAMES lualatex\n   PATHS ${MIKTEX_BINARY_PATH}\n-        /usr/bin\n )\n if (LUALATEX_COMPILER)\n   set(LATEX_LUALATEX_FOUND TRUE)\n@@ -246,7 +242,6 @@\n find_program(BIBTEX_COMPILER\n   NAMES bibtex\n   PATHS ${MIKTEX_BINARY_PATH}\n-        /usr/bin\n )\n if (BIBTEX_COMPILER)\n   set(LATEX_BIBTEX_FOUND TRUE)\n@@ -258,7 +253,6 @@\n find_program(BIBER_COMPILER\n   NAMES biber\n   PATHS ${MIKTEX_BINARY_PATH}\n-        /usr/bin\n )\n if (BIBER_COMPILER)\n   set(LATEX_BIBER_FOUND TRUE)\n@@ -270,7 +264,6 @@\n find_program(MAKEINDEX_COMPILER\n   NAMES makeindex\n   PATHS ${MIKTEX_BINARY_PATH}\n-        /usr/bin\n )\n if (MAKEINDEX_COMPILER)\n   set(LATEX_MAKEINDEX_FOUND TRUE)\n@@ -282,7 +275,6 @@\n find_program(XINDY_COMPILER\n   NAMES xindy\n   PATHS ${MIKTEX_BINARY_PATH}\n-        /usr/bin\n )\n if (XINDY_COMPILER)\n   set(LATEX_XINDY_FOUND TRUE)\n@@ -294,7 +286,6 @@\n find_program(DVIPS_CONVERTER\n   NAMES dvips\n   PATHS ${MIKTEX_BINARY_PATH}\n-        /usr/bin\n )\n if (DVIPS_CONVERTER)\n   set(LATEX_DVIPS_FOUND TRUE)\n@@ -306,7 +297,6 @@\n find_program(DVIPDF_CONVERTER\n   NAMES dvipdfm dvipdft dvipdf\n   PATHS ${MIKTEX_BINARY_PATH}\n-        /usr/bin\n )\n if (DVIPDF_CONVERTER)\n   set(LATEX_DVIPDF_FOUND TRUE)\n@@ -336,7 +326,6 @@\n find_program(PDFTOPS_CONVERTER\n   NAMES pdftops\n   PATHS ${MIKTEX_BINARY_PATH}\n-        /usr/bin\n )\n if (PDFTOPS_CONVERTER)\n   set(LATEX_PDFTOPS_FOUND TRUE)\n@@ -348,7 +337,6 @@\n find_program(LATEX2HTML_CONVERTER\n   NAMES latex2html\n   PATHS ${MIKTEX_BINARY_PATH}\n-        /usr/bin\n )\n if (LATEX2HTML_CONVERTER)\n   set(LATEX_LATEX2HTML_FOUND TRUE)\n@@ -360,7 +348,6 @@\n find_program(HTLATEX_COMPILER\n   NAMES htlatex\n   PATHS ${MIKTEX_BINARY_PATH}\n-        /usr/bin\n )\n if (HTLATEX_COMPILER)\n   set(LATEX_HTLATEX_FOUND TRUE)\ndiff --git a/Modules/FindLua50.cmake b/Modules/FindLua50.cmake\nindex ac36c86640..fe5d2147e8 100644\n--- a/Modules/FindLua50.cmake\n+++ b/Modules/FindLua50.cmake\n@@ -84,10 +84,6 @@\n   HINTS\n     ENV LUA_DIR\n   PATH_SUFFIXES lua50 lua5.0 lua5 lua\n-  PATHS\n-  ~/Library/Frameworks\n-  /Library/Frameworks\n-  /opt\n )\n \n find_library(LUA_LIBRARY_lua\n@@ -95,10 +91,6 @@\n   HINTS\n     ENV LUA_DIR\n   PATH_SUFFIXES lib\n-  PATHS\n-  ~/Library/Frameworks\n-  /Library/Frameworks\n-  /opt\n )\n \n # In an OS X framework, lualib is usually included as part of the framework\n@@ -113,7 +105,6 @@\n       ENV LUA_DIR\n     PATH_SUFFIXES lib\n     PATHS\n-    /opt\n   )\n   if(LUA_LIBRARY_lualib AND LUA_LIBRARY_lua)\n     # include the math library for Unix\ndiff --git a/Modules/FindLua51.cmake b/Modules/FindLua51.cmake\nindex cba30e4b58..21a95cb89f 100644\n--- a/Modules/FindLua51.cmake\n+++ b/Modules/FindLua51.cmake\n@@ -87,10 +87,6 @@\n   HINTS\n     ENV LUA_DIR\n   PATH_SUFFIXES lua51 lua5.1 lua-5.1 lua\n-  PATHS\n-  ~/Library/Frameworks\n-  /Library/Frameworks\n-  /opt\n )\n \n find_library(LUA_LIBRARY\n@@ -98,10 +94,6 @@\n   HINTS\n     ENV LUA_DIR\n   PATH_SUFFIXES lib\n-  PATHS\n-  ~/Library/Frameworks\n-  /Library/Frameworks\n-  /opt\n )\n \n if(LUA_LIBRARY)\ndiff --git a/Modules/FindMPI.cmake b/Modules/FindMPI.cmake\nindex 78b1c5c915..741f86aaef 100644\n--- a/Modules/FindMPI.cmake\n+++ b/Modules/FindMPI.cmake\n@@ -1349,15 +1349,6 @@\n endmacro()\n \n set(MPI_HINT_DIRS ${MPI_HOME} $ENV{MPI_HOME} $ENV{I_MPI_ROOT})\n-if(CMAKE_HOST_SYSTEM_NAME STREQUAL \"Linux\")\n-  # SUSE Linux Enterprise Server stores its MPI implementations under /usr/lib64/mpi/gcc/<name>\n-  # We enumerate the subfolders and append each as a prefix\n-  MPI_search_mpi_prefix_folder(\"/usr/lib64/mpi/gcc\")\n-elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL \"FreeBSD\")\n-  # FreeBSD ships mpich under the normal system paths - but available openmpi implementations\n-  # will be found in /usr/local/mpi/<name>\n-  MPI_search_mpi_prefix_folder(\"/usr/local/mpi\")\n-endif()\n \n # Most MPI distributions have some form of mpiexec or mpirun which gives us something we can look for.\n # The MPI standard does not mandate the existence of either, but instead only makes requirements if a distribution\ndiff --git a/Modules/FindMatlab.cmake b/Modules/FindMatlab.cmake\nindex 8a7bd80957..74009fbebc 100644\n--- a/Modules/FindMatlab.cmake\n+++ b/Modules/FindMatlab.cmake\n@@ -1529,7 +1529,7 @@\n   endif()\n \n   foreach(_matlab_current_release IN LISTS _matlab_releases)\n-    foreach(_macos_app_base IN ITEMS \"$ENV{HOME}/Applications\" \"/Applications\")\n+    foreach(_macos_app_base IN ITEMS)\n       matlab_get_version_from_release_name(\"${_matlab_current_release}\" _matlab_current_version)\n       string(REPLACE \".\" \"\" _matlab_current_version_without_dot \"${_matlab_current_version}\")\n       set(_matlab_base_path \"${_macos_app_base}/MATLAB_${_matlab_current_release}.app\")\ndiff --git a/Modules/FindMotif.cmake b/Modules/FindMotif.cmake\nindex d72b19309e..5753e5c3dc 100644\n--- a/Modules/FindMotif.cmake\n+++ b/Modules/FindMotif.cmake\n@@ -39,12 +39,10 @@\n if(UNIX)\n   find_path(MOTIF_INCLUDE_DIR\n     Xm/Xm.h\n-    /usr/openwin/include\n     )\n \n   find_library(MOTIF_LIBRARIES\n     Xm\n-    /usr/openwin/lib\n     )\n \n endif()\ndiff --git a/Modules/FindOpenAL.cmake b/Modules/FindOpenAL.cmake\nindex dad9ada128..32d02db7c3 100644\n--- a/Modules/FindOpenAL.cmake\n+++ b/Modules/FindOpenAL.cmake\n@@ -95,9 +95,6 @@\n   HINTS\n     ENV OPENALDIR\n   PATHS\n-    ~/Library/Frameworks\n-    /Library/Frameworks\n-    /opt\n     [HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Creative\\ Labs\\\\OpenAL\\ 1.1\\ Software\\ Development\\ Kit\\\\1.00.0000;InstallDir]\n   PATH_SUFFIXES include/AL include/OpenAL include AL OpenAL\n   )\n@@ -113,9 +110,6 @@\n   HINTS\n     ENV OPENALDIR\n   PATHS\n-    ~/Library/Frameworks\n-    /Library/Frameworks\n-    /opt\n     [HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Creative\\ Labs\\\\OpenAL\\ 1.1\\ Software\\ Development\\ Kit\\\\1.00.0000;InstallDir]\n   PATH_SUFFIXES libx32 lib64 lib libs64 libs ${_OpenAL_ARCH_DIR}\n   )\ndiff --git a/Modules/FindOpenCL.cmake b/Modules/FindOpenCL.cmake\nindex 3be945ba1b..4086ebe2f2 100644\n--- a/Modules/FindOpenCL.cmake\n+++ b/Modules/FindOpenCL.cmake\n@@ -113,8 +113,6 @@\n     ENV CUDA_PATH\n     ENV ATISTREAMSDKROOT\n     ENV OCL_ROOT\n-    /usr/local/cuda\n-    /opt/cuda\n   PATH_SUFFIXES\n     include\n     OpenCL/common/inc\n@@ -170,8 +168,6 @@\n       PATHS\n         ENV AMDAPPSDKROOT\n         ENV CUDA_PATH\n-        /usr/local/cuda\n-        /opt/cuda\n       PATH_SUFFIXES\n         lib/x86\n         lib)\n@@ -181,8 +177,6 @@\n       PATHS\n         ENV AMDAPPSDKROOT\n         ENV CUDA_PATH\n-        /usr/local/cuda\n-        /opt/cuda\n       PATH_SUFFIXES\n         lib/x86_64\n         lib/x64\ndiff --git a/Modules/FindOpenGL.cmake b/Modules/FindOpenGL.cmake\nindex a842756fcf..a02a66eb60 100644\n--- a/Modules/FindOpenGL.cmake\n+++ b/Modules/FindOpenGL.cmake\n@@ -271,12 +271,7 @@\n     set(_OPENGL_INCLUDE_PATH\n       /boot/develop/headers/os/opengl)\n   elseif (CMAKE_SYSTEM_NAME STREQUAL \"Linux\")\n-    # CMake doesn't support arbitrary globs in search paths.\n-    file(GLOB _OPENGL_LIB_PATH\n-      # The NVidia driver installation tool on Linux installs libraries to a\n-      # `nvidia-<version>` subdirectory.\n-      \"/usr/lib/nvidia-*\"\n-      \"/usr/lib32/nvidia-*\")\n+    set(_OPENGL_LIB_PATH)\n   endif()\n \n   # The first line below is to make sure that the proper headers\n@@ -287,9 +282,6 @@\n   # Make sure the NVIDIA directory comes BEFORE the others.\n   #  - Atanas Georgiev <atanas@cs.columbia.edu>\n   find_path(OPENGL_INCLUDE_DIR GL/gl.h\n-    /usr/share/doc/NVIDIA_GLX-1.0/include\n-    /usr/openwin/share/include\n-    /opt/graphics/OpenGL/include\n     ${_OPENGL_INCLUDE_PATH}\n   )\n   find_path(OPENGL_GLX_INCLUDE_DIR GL/glx.h ${_OPENGL_INCLUDE_PATH})\n@@ -297,9 +289,6 @@\n   find_path(OPENGL_GLES2_INCLUDE_DIR GLES2/gl2.h ${_OPENGL_INCLUDE_PATH})\n   find_path(OPENGL_GLES3_INCLUDE_DIR GLES3/gl3.h ${_OPENGL_INCLUDE_PATH})\n   find_path(OPENGL_xmesa_INCLUDE_DIR GL/xmesa.h\n-    /usr/share/doc/NVIDIA_GLX-1.0/include\n-    /usr/openwin/share/include\n-    /opt/graphics/OpenGL/include\n   )\n \n   find_path(OPENGL_GLU_INCLUDE_DIR GL/glu.h ${_OPENGL_INCLUDE_PATH})\n@@ -347,9 +336,6 @@\n   find_library(OPENGL_glu_LIBRARY\n     NAMES GLU MesaGLU\n     PATHS ${OPENGL_gl_LIBRARY}\n-          /opt/graphics/OpenGL/lib\n-          /usr/openwin/lib\n-          /usr/shlib\n   )\n \n   list(APPEND _OpenGL_CACHE_VARS\n@@ -401,10 +387,7 @@\n     # Search for the legacy GL library.\n     find_library(OPENGL_gl_LIBRARY\n       NAMES GL MesaGL\n-      PATHS /opt/graphics/OpenGL/lib\n-            /usr/openwin/lib\n-            /usr/shlib\n-            ${_OPENGL_LIB_PATH}\n+      PATHS ${_OPENGL_LIB_PATH}\n       PATH_SUFFIXES libglvnd\n       )\n     list(APPEND _OpenGL_CACHE_VARS OPENGL_gl_LIBRARY)\n@@ -513,9 +496,6 @@\n   find_library(OPENGL_glu_LIBRARY\n     NAMES GLU MesaGLU\n     PATHS ${OPENGL_gl_LIBRARY}\n-          /opt/graphics/OpenGL/lib\n-          /usr/openwin/lib\n-          /usr/shlib\n   )\n endif ()\n \ndiff --git a/Modules/FindPHP4.cmake b/Modules/FindPHP4.cmake\nindex edef791cb8..5515f44710 100644\n--- a/Modules/FindPHP4.cmake\n+++ b/Modules/FindPHP4.cmake\n@@ -36,15 +36,9 @@\n #]=======================================================================]\n \n set(PHP4_POSSIBLE_INCLUDE_PATHS\n-  /usr/include/php4\n-  /usr/local/include/php4\n-  /usr/include/php\n-  /usr/local/include/php\n-  /usr/local/apache/php\n   )\n \n set(PHP4_POSSIBLE_LIB_PATHS\n-  /usr/lib\n   )\n \n find_path(PHP4_FOUND_INCLUDE_PATH main/php.h\ndiff --git a/Modules/FindPerlLibs.cmake b/Modules/FindPerlLibs.cmake\nindex 330700e183..7fc89df6eb 100644\n--- a/Modules/FindPerlLibs.cmake\n+++ b/Modules/FindPerlLibs.cmake\n@@ -141,10 +141,6 @@\n     PATHS\n       \"${PERL_UPDATE_ARCHLIB}/CORE\"\n       \"${PERL_ARCHLIB}/CORE\"\n-      /usr/lib/perl5/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE\n-      /usr/lib/perl/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE\n-      /usr/lib/perl5/${PERL_VERSION_STRING}/CORE\n-      /usr/lib/perl/${PERL_VERSION_STRING}/CORE\n   )\n \n   ### PERL_LIBRARY\n@@ -154,10 +150,6 @@\n     PATHS\n       \"${PERL_UPDATE_ARCHLIB}/CORE\"\n       \"${PERL_ARCHLIB}/CORE\"\n-      /usr/lib/perl5/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE\n-      /usr/lib/perl/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE\n-      /usr/lib/perl5/${PERL_VERSION_STRING}/CORE\n-      /usr/lib/perl/${PERL_VERSION_STRING}/CORE\n   )\n \n endif ()\ndiff --git a/Modules/FindPhysFS.cmake b/Modules/FindPhysFS.cmake\nindex 1894498d9d..03c6e61853 100644\n--- a/Modules/FindPhysFS.cmake\n+++ b/Modules/FindPhysFS.cmake\n@@ -52,10 +52,6 @@\n   HINTS\n     ENV PHYSFSDIR\n   PATH_SUFFIXES include/physfs include\n-  PATHS\n-  ~/Library/Frameworks\n-  /Library/Frameworks\n-  /opt\n )\n \n find_library(PHYSFS_LIBRARY\n@@ -63,10 +59,6 @@\n   HINTS\n     ENV PHYSFSDIR\n   PATH_SUFFIXES lib\n-  PATHS\n-  ~/Library/Frameworks\n-  /Library/Frameworks\n-  /opt\n )\n \n include(FindPackageHandleStandardArgs)\ndiff --git a/Modules/FindPkgConfig.cmake b/Modules/FindPkgConfig.cmake\nindex b230eb5ef5..bf7b204406 100644\n--- a/Modules/FindPkgConfig.cmake\n+++ b/Modules/FindPkgConfig.cmake\n@@ -391,7 +391,7 @@\n     if(NOT DEFINED CMAKE_SYSTEM_NAME\n         OR (CMAKE_SYSTEM_NAME MATCHES \"^(Linux|GNU)$\"\n             AND NOT CMAKE_CROSSCOMPILING))\n-      if(EXISTS \"/etc/debian_version\") # is this a debian system ?\n+      if(FALSE) # is this a debian system ?\n         if(CMAKE_LIBRARY_ARCHITECTURE)\n           list(APPEND _lib_dirs \"lib/${CMAKE_LIBRARY_ARCHITECTURE}/pkgconfig\")\n         endif()\ndiff --git a/Modules/FindProducer.cmake b/Modules/FindProducer.cmake\nindex 1d034bc207..d176655f46 100644\n--- a/Modules/FindProducer.cmake\n+++ b/Modules/FindProducer.cmake\n@@ -100,9 +100,6 @@\n     ENV OSGDIR\n   PATH_SUFFIXES include\n   PATHS\n-    ~/Library/Frameworks\n-    /Library/Frameworks\n-    /opt\n     [HKEY_LOCAL_MACHINE\\\\SYSTEM\\\\CurrentControlSet\\\\Control\\\\Session\\ Manager\\\\Environment;OpenThreads_ROOT]\n     [HKEY_LOCAL_MACHINE\\\\SYSTEM\\\\CurrentControlSet\\\\Control\\\\Session\\ Manager\\\\Environment;OSG_ROOT]\n )\n@@ -114,8 +111,6 @@\n     ENV OSG_DIR\n     ENV OSGDIR\n   PATH_SUFFIXES lib\n-  PATHS\n-  /opt\n )\n \n include(FindPackageHandleStandardArgs)\ndiff --git a/Modules/FindPython/Support.cmake b/Modules/FindPython/Support.cmake\nindex a9441646d1..28ba743f60 100644\n--- a/Modules/FindPython/Support.cmake\n+++ b/Modules/FindPython/Support.cmake\n@@ -162,9 +162,6 @@\n     file(TO_CMAKE_PATH \"$ENV{CMAKE_FRAMEWORK_PATH}\" _pff_CMAKE_FRAMEWORK_PATH)\n     set (_pff_frameworks ${CMAKE_FRAMEWORK_PATH}\n                          ${_pff_CMAKE_FRAMEWORK_PATH}\n-                         ~/Library/Frameworks\n-                         /usr/local/Frameworks\n-                         /opt/homebrew/Frameworks\n                          ${CMAKE_SYSTEM_FRAMEWORK_PATH})\n     list (REMOVE_DUPLICATES _pff_frameworks)\n     foreach (_pff_implementation IN LISTS _${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS)\ndiff --git a/Modules/FindQt.cmake b/Modules/FindQt.cmake\nindex 98cd1e2abf..90ad88365d 100644\n--- a/Modules/FindQt.cmake\n+++ b/Modules/FindQt.cmake\n@@ -63,44 +63,6 @@\n   return()\n endif()\n \n-# look for signs of qt3 installations\n-file(GLOB GLOB_TEMP_VAR /usr/lib*/qt-3*/bin/qmake /usr/lib*/qt3*/bin/qmake)\n-if(GLOB_TEMP_VAR)\n-  set(QT3_INSTALLED TRUE)\n-endif()\n-set(GLOB_TEMP_VAR)\n-\n-file(GLOB GLOB_TEMP_VAR /usr/local/qt-x11-commercial-3*/bin/qmake)\n-if(GLOB_TEMP_VAR)\n-  set(QT3_INSTALLED TRUE)\n-endif()\n-set(GLOB_TEMP_VAR)\n-\n-file(GLOB GLOB_TEMP_VAR /usr/local/lib/qt3/bin/qmake)\n-if(GLOB_TEMP_VAR)\n-  set(QT3_INSTALLED TRUE)\n-endif()\n-set(GLOB_TEMP_VAR)\n-\n-# look for qt4 installations\n-file(GLOB GLOB_TEMP_VAR /usr/local/qt-x11-commercial-4*/bin/qmake)\n-if(GLOB_TEMP_VAR)\n-  set(QT4_INSTALLED TRUE)\n-endif()\n-set(GLOB_TEMP_VAR)\n-\n-file(GLOB GLOB_TEMP_VAR /usr/local/Trolltech/Qt-4*/bin/qmake)\n-if(GLOB_TEMP_VAR)\n-  set(QT4_INSTALLED TRUE)\n-endif()\n-set(GLOB_TEMP_VAR)\n-\n-file(GLOB GLOB_TEMP_VAR /usr/local/lib/qt4/bin/qmake)\n-if(GLOB_TEMP_VAR)\n-  set(QT4_INSTALLED TRUE)\n-endif()\n-set(GLOB_TEMP_VAR)\n-\n if (Qt_FIND_VERSION)\n   if (Qt_FIND_VERSION MATCHES \"^([34])(\\\\.[0-9]+.*)?$\")\n     set(DESIRED_QT_VERSION ${CMAKE_MATCH_1})\n@@ -135,9 +97,6 @@\n   \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Versions\\\\4.0.0;InstallDir]/include/Qt\"\n   ${qt_headers}/Qt\n   $ENV{QTDIR}/include/Qt\n-  /usr/lib/qt/include/Qt\n-  /usr/share/qt4/include/Qt\n-  /usr/local/include/X11/qt4/Qt\n   C:/Progra~1/qt/include/Qt\n   PATH_SUFFIXES qt/include/Qt include/Qt)\n \n@@ -152,9 +111,6 @@\n   \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.1.0;InstallDir]/include/Qt\"\n   C:/Qt/3.3.3Educational/include\n   $ENV{QTDIR}/include\n-  /usr/include/qt3/Qt\n-  /usr/share/qt3/include\n-  /usr/local/include/X11/qt3\n   C:/Progra~1/qt/include\n   PATH_SUFFIXES qt/include include/qt3)\n \ndiff --git a/Modules/FindQt3.cmake b/Modules/FindQt3.cmake\nindex 2c62a5f17f..772a8d88f6 100644\n--- a/Modules/FindQt3.cmake\n+++ b/Modules/FindQt3.cmake\n@@ -101,10 +101,6 @@\n endif()\n \n \n-file(GLOB GLOB_PATHS /usr/lib/qt-3*)\n-foreach(GLOB_PATH ${GLOB_PATHS})\n-  list(APPEND GLOB_PATHS_BIN \"${GLOB_PATH}/bin\")\n-endforeach()\n find_path(QT_INCLUDE_DIR\n   NAMES qt.h\n   PATHS\n@@ -112,10 +108,7 @@\n   \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.2.0;InstallDir]/include/Qt\"\n   \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.1.0;InstallDir]/include/Qt\"\n   $ENV{QTDIR}/include\n-  ${GLOB_PATHS}\n-  /usr/share/qt3/include\n   C:/Progra~1/qt/include\n-  /usr/local/include/X11/qt3\n   PATH_SUFFIXES lib/qt/include lib/qt3/include include/qt include/qt3 qt/include qt3/include\n   )\n \n@@ -137,7 +130,6 @@\n   set(QT_VERSION_STRING \"${qt_version_str}\")\n endif()\n \n-file(GLOB GLOB_PATHS_LIB /usr/lib/qt-3*/lib/)\n if (QT_MT_REQUIRED)\n   find_library(QT_QT_LIBRARY\n     NAMES\n@@ -148,8 +140,6 @@\n       \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.2.0;InstallDir]\"\n       \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.1.0;InstallDir]\"\n       ENV QTDIR\n-      ${GLOB_PATHS_LIB}\n-      /usr/share/qt3\n       C:/Progra~1/qt\n     PATH_SUFFIXES\n       lib lib/qt lib/qt3 qt qt3 qt/lib qt3/lib\n@@ -166,8 +156,6 @@\n       \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.2.0;InstallDir]\"\n       \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.1.0;InstallDir]\"\n       ENV QTDIR\n-      ${GLOB_PATHS_LIB}\n-      /usr/share/qt3\n       C:/Progra~1/qt/lib\n     PATH_SUFFIXES\n       lib lib/qt lib/qt3 qt qt3 qt/lib qt3/lib\n@@ -182,8 +170,6 @@\n     \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.2.0;InstallDir]\"\n     \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.1.0;InstallDir]\"\n     ENV QTDIR\n-    ${GLOB_PATHS_LIB}\n-    /usr/share/qt3\n     C:/Progra~1/qt\n   PATH_SUFFIXES\n     lib lib/qt lib/qt3 qt qt3 qt/lib qt3/lib\n@@ -198,8 +184,6 @@\n   \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.2.1;InstallDir]/include/Qt\"\n   \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.2.0;InstallDir]/include/Qt\"\n   \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.1.0;InstallDir]/include/Qt\"\n-  ${GLOB_PATHS_BIN}\n-    /usr/share/qt3\n     C:/Progra~1/qt\n   PATH_SUFFIXES\n     bin lib/qt lib/qt3 qt qt3 qt/bin qt3/bin lib/qt/bin lib/qt3/bin\n@@ -218,8 +202,6 @@\n   \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.2.1;InstallDir]/include/Qt\"\n   \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.2.0;InstallDir]/include/Qt\"\n   \"[HKEY_CURRENT_USER\\\\Software\\\\Trolltech\\\\Qt3Versions\\\\3.1.0;InstallDir]/include/Qt\"\n-  ${GLOB_PATHS_BIN}\n-    /usr/share/qt3\n     C:/Progra~1/qt\n   PATH_SUFFIXES\n     bin lib/qt lib/qt3 qt qt3 qt/bin qt3/bin lib/qt/bin lib/qt3/bin\ndiff --git a/Modules/FindRuby.cmake b/Modules/FindRuby.cmake\nindex 18b9e35855..dba9976565 100644\n--- a/Modules/FindRuby.cmake\n+++ b/Modules/FindRuby.cmake\n@@ -367,7 +367,6 @@\n           HINTS\n           ${Ruby_HDR_DIR}\n           ${Ruby_ARCH_DIR}\n-          /usr/lib/ruby/${_Ruby_VERSION_SHORT}/i586-linux-gnu/\n )\n \n set(Ruby_INCLUDE_DIRS ${Ruby_INCLUDE_DIR})\ndiff --git a/Modules/FindSDL.cmake b/Modules/FindSDL.cmake\nindex a720dcc3df..73e222a27c 100644\n--- a/Modules/FindSDL.cmake\n+++ b/Modules/FindSDL.cmake\n@@ -214,8 +214,6 @@\n       HINTS\n         ENV SDLDIR\n       PATH_SUFFIXES lib ${VC_LIB_PATH_SUFFIX}\n-      PATHS\n-      /opt\n     )\n   endif()\n endif()\ndiff --git a/Modules/FindSDL_sound.cmake b/Modules/FindSDL_sound.cmake\nindex 954303f3d3..26a5781e2a 100644\n--- a/Modules/FindSDL_sound.cmake\n+++ b/Modules/FindSDL_sound.cmake\n@@ -292,7 +292,6 @@\n           ENV MIKMODDIR\n           ENV SDLSOUNDDIR\n           ENV SDLDIR\n-          /opt\n         PATH_SUFFIXES\n           lib\n       )\n@@ -309,7 +308,6 @@\n           ENV MODPLUGDIR\n           ENV SDLSOUNDDIR\n           ENV SDLDIR\n-          /opt\n         PATH_SUFFIXES\n           lib\n       )\n@@ -328,7 +326,6 @@\n           ENV OGGDIR\n           ENV SDLSOUNDDIR\n           ENV SDLDIR\n-          /opt\n         PATH_SUFFIXES\n           lib\n         )\n@@ -343,7 +340,6 @@\n           ENV VORBISDIR\n           ENV SDLSOUNDDIR\n           ENV SDLDIR\n-          /opt\n         PATH_SUFFIXES\n           lib\n          )\n@@ -361,7 +357,6 @@\n           ENV SMPEGDIR\n           ENV SDLSOUNDDIR\n           ENV SDLDIR\n-          /opt\n         PATH_SUFFIXES\n           lib\n         )\n@@ -379,7 +374,6 @@\n           ENV FLACDIR\n           ENV SDLSOUNDDIR\n           ENV SDLDIR\n-          /opt\n         PATH_SUFFIXES\n           lib\n         )\n@@ -400,7 +394,6 @@\n           ENV SPEEXDIR\n           ENV SDLSOUNDDIR\n           ENV SDLDIR\n-          /opt\n         PATH_SUFFIXES\n           lib\n         )\n@@ -419,7 +412,6 @@\n             ENV SPEEXDIR\n             ENV SDLSOUNDDIR\n             ENV SDLDIR\n-            /opt\n           PATH_SUFFIXES lib\n           )\n         if(OGG_LIBRARY)\ndiff --git a/Modules/FindX11.cmake b/Modules/FindX11.cmake\nindex b2f23bd1dd..9a94529589 100644\n--- a/Modules/FindX11.cmake\n+++ b/Modules/FindX11.cmake\n@@ -138,22 +138,9 @@\n   set(CMAKE_REQUIRED_QUIET_SAVE ${CMAKE_REQUIRED_QUIET})\n   set(CMAKE_REQUIRED_QUIET ${X11_FIND_QUIETLY})\n   set(X11_INC_SEARCH_PATH\n-    /usr/pkg/xorg/include\n-    /usr/X11R6/include\n-    /usr/X11R7/include\n-    /usr/include/X11\n-    /usr/openwin/include\n-    /usr/openwin/share/include\n-    /opt/graphics/OpenGL/include\n-    /opt/X11/include\n   )\n \n   set(X11_LIB_SEARCH_PATH\n-    /usr/pkg/xorg/lib\n-    /usr/X11R6/lib\n-    /usr/X11R7/lib\n-    /usr/openwin/lib\n-    /opt/X11/lib\n   )\n \n   find_path(X11_X11_INCLUDE_PATH X11/X.h                             ${X11_INC_SEARCH_PATH})\ndiff --git a/Modules/GNUInstallDirs.cmake b/Modules/GNUInstallDirs.cmake\nindex ff9c11a9d7..706b34b087 100644\n--- a/Modules/GNUInstallDirs.cmake\n+++ b/Modules/GNUInstallDirs.cmake\n@@ -336,17 +336,6 @@\n       set(${out_var} \"conda\")\n     endif()\n   endif()\n-  # If we didn't detect conda from the previous step, check\n-  # for the linux variant\n-  if(NOT ${out_var})\n-    if (EXISTS \"/etc/alpine-release\")\n-      set(${out_var} \"alpine\")\n-    elseif (EXISTS \"/etc/arch-release\")\n-      set(${out_var} \"arch linux\")\n-    elseif (EXISTS \"/etc/debian_version\")\n-      set(${out_var} \"debian\")\n-    endif()\n-  endif()\n   return(PROPAGATE ${out_var})\n endfunction()\n \ndiff --git a/Modules/GetPrerequisites.cmake b/Modules/GetPrerequisites.cmake\nindex f1f5db7b7b..9b4bdddb36 100644\n--- a/Modules/GetPrerequisites.cmake\n+++ b/Modules/GetPrerequisites.cmake\n@@ -458,11 +458,9 @@\n   if(NOT resolved)\n     set(ri \"ri-NOTFOUND\")\n     find_file(ri \"${item}\" ${exepath} ${dirs} NO_DEFAULT_PATH)\n-    find_file(ri \"${item}\" ${exepath} ${dirs} /usr/lib)\n \n     get_filename_component(basename_item \"${item}\" NAME)\n     find_file(ri \"${basename_item}\" PATHS ${exepath} ${dirs} NO_DEFAULT_PATH)\n-    find_file(ri \"${basename_item}\" PATHS /usr/lib)\n \n     if(ri)\n       #message(STATUS \"info: 'find_file' in exepath/dirs (${ri})\")\n@@ -472,23 +470,6 @@\n     endif()\n   endif()\n \n-  if(NOT resolved)\n-    if(item MATCHES \"[^/]+\\\\.framework/\")\n-      set(fw \"fw-NOTFOUND\")\n-      find_file(fw \"${item}\"\n-        \"~/Library/Frameworks\"\n-        \"/Library/Frameworks\"\n-        \"/System/Library/Frameworks\"\n-      )\n-      if(fw)\n-        #message(STATUS \"info: 'find_file' found framework (${fw})\")\n-        set(resolved 1)\n-        set(resolved_item \"${fw}\")\n-        set(fw \"fw-NOTFOUND\")\n-      endif()\n-    endif()\n-  endif()\n-\n   # Using find_program on Windows will find dll files that are in the PATH.\n   # (Converting simple file names into full path names if found.)\n   #\ndiff --git a/Modules/Internal/CMakeCUDAFindToolkit.cmake b/Modules/Internal/CMakeCUDAFindToolkit.cmake\nindex 8fd408994f..61894813a2 100644\n--- a/Modules/Internal/CMakeCUDAFindToolkit.cmake\n+++ b/Modules/Internal/CMakeCUDAFindToolkit.cmake\n@@ -50,18 +50,8 @@\n     # if CUDAToolkit_ROOT is not specified, it is assumed that the symlinked\n     # directory is the desired location.\n     if(NOT _CUDA_NVCC_EXECUTABLE)\n-      if(UNIX)\n-        if(NOT APPLE)\n-          set(platform_base \"/usr/local/cuda-\")\n-        else()\n-          set(platform_base \"/Developer/NVIDIA/CUDA-\")\n-        endif()\n-      else()\n-        set(platform_base \"C:\\\\Program Files\\\\NVIDIA GPU Computing Toolkit\\\\CUDA\\\\v\")\n-      endif()\n-\n       # Build out a descending list of possible cuda installations, e.g.\n-      file(GLOB possible_paths \"${platform_base}*\")\n+      set(possible_paths)\n       # Iterate the glob results and create a descending list.\n       set(versions)\n       foreach(p ${possible_paths})\n@@ -77,14 +67,6 @@\n \n       # With a descending list of versions, populate possible paths to search.\n       set(search_paths)\n-      foreach(v ${versions})\n-        list(APPEND search_paths \"${platform_base}${v}\")\n-      endforeach()\n-\n-      # Force the global default /usr/local/cuda to the front on Unix.\n-      if(UNIX)\n-        list(INSERT search_paths 0 \"/usr/local/cuda\")\n-      endif()\n \n       # Now search for nvcc again using the platform default search paths.\n       find_program(_CUDA_NVCC_EXECUTABLE\n@@ -140,23 +122,13 @@\n     set(${lang_var_}LIBRARY_ROOT \"${_CUDA_COMPILER_LIBRARY_ROOT_FROM_NVVMIR_LIBRARY_DIR}\")\n   elseif(EXISTS \"${${lang_var_}TOOLKIT_ROOT}/nvvm/libdevice\")\n     set(${lang_var_}LIBRARY_ROOT \"${${lang_var_}TOOLKIT_ROOT}\")\n-  elseif(CMAKE_SYSROOT_LINK AND EXISTS \"${CMAKE_SYSROOT_LINK}/usr/lib/cuda/nvvm/libdevice\")\n-    set(${lang_var_}LIBRARY_ROOT \"${CMAKE_SYSROOT_LINK}/usr/lib/cuda\")\n-  elseif(EXISTS \"${CMAKE_SYSROOT}/usr/lib/cuda/nvvm/libdevice\")\n-    set(${lang_var_}LIBRARY_ROOT \"${CMAKE_SYSROOT}/usr/lib/cuda\")\n   else()\n     message(FATAL_ERROR \"Couldn't find CUDA library root.\")\n   endif()\n   unset(_CUDA_COMPILER_LIBRARY_ROOT_FROM_NVVMIR_LIBRARY_DIR)\n \n   # ${lang_var_}TOOLKIT_LIBRARY_ROOT contains the linking stubs necessary for device linking and other low-level library files.\n-  if(CMAKE_SYSROOT_LINK AND EXISTS \"${CMAKE_SYSROOT_LINK}/usr/lib/nvidia-cuda-toolkit/bin/crt/link.stub\")\n-    set(${lang_var_}TOOLKIT_LIBRARY_ROOT \"${CMAKE_SYSROOT_LINK}/usr/lib/nvidia-cuda-toolkit\")\n-  elseif(EXISTS \"${CMAKE_SYSROOT}/usr/lib/nvidia-cuda-toolkit/bin/crt/link.stub\")\n-    set(${lang_var_}TOOLKIT_LIBRARY_ROOT \"${CMAKE_SYSROOT}/usr/lib/nvidia-cuda-toolkit\")\n-  else()\n-    set(${lang_var_}TOOLKIT_LIBRARY_ROOT \"${${lang_var_}TOOLKIT_ROOT}\")\n-  endif()\n+  set(${lang_var_}TOOLKIT_LIBRARY_ROOT \"${${lang_var_}TOOLKIT_ROOT}\")\n \n   # For regular nvcc we the toolkit version is the same as the compiler version and we can parse it from the vendor test output.\n   # For Clang we need to invoke nvcc to get version output.\ndiff --git a/Modules/Internal/CPack/CPackRPM.cmake b/Modules/Internal/CPack/CPackRPM.cmake\nindex b733cfe964..90709f48e8 100644\n--- a/Modules/Internal/CPack/CPackRPM.cmake\n+++ b/Modules/Internal/CPack/CPackRPM.cmake\n@@ -640,7 +640,7 @@\n   endif()\n \n   # With debugedit we prepare source files list\n-  find_program(DEBUGEDIT_EXECUTABLE debugedit \"/usr/lib/rpm/\")\n+  find_program(DEBUGEDIT_EXECUTABLE debugedit)\n   if(NOT DEBUGEDIT_EXECUTABLE)\n     message(FATAL_ERROR \"CPackRPM: debugedit binary could not be found!\"\n       \" Required for debuginfo packaging. See documentation of\"\ndiff --git a/Modules/Platform/CYGWIN.cmake b/Modules/Platform/CYGWIN.cmake\nindex cf5e732833..1bbbfeca54 100644\n--- a/Modules/Platform/CYGWIN.cmake\n+++ b/Modules/Platform/CYGWIN.cmake\n@@ -15,13 +15,3 @@\n set(CMAKE_SHARED_LIBRARY_NAME_WITH_VERSION 1)\n \n include(Platform/UnixPaths)\n-\n-# Windows API on Cygwin\n-list(APPEND CMAKE_SYSTEM_INCLUDE_PATH\n-  /usr/include/w32api\n-  )\n-\n-# Windows API on Cygwin\n-list(APPEND CMAKE_SYSTEM_LIBRARY_PATH\n-  /usr/lib/w32api\n-  )\ndiff --git a/Modules/Platform/Darwin-Initialize.cmake b/Modules/Platform/Darwin-Initialize.cmake\nindex 7c4f123a1d..4cfd53de9f 100644\n--- a/Modules/Platform/Darwin-Initialize.cmake\n+++ b/Modules/Platform/Darwin-Initialize.cmake\n@@ -1,19 +1,7 @@\n set(APPLE 1)\n set(UNIX 1)\n \n-# Ask xcode-select where to find /Developer or fall back to ancient location.\n-execute_process(COMMAND xcode-select -print-path\n-  OUTPUT_VARIABLE _stdout\n-  OUTPUT_STRIP_TRAILING_WHITESPACE\n-  ERROR_VARIABLE _stderr\n-  RESULT_VARIABLE _failed)\n-if(NOT _failed AND IS_DIRECTORY ${_stdout})\n-  set(OSX_DEVELOPER_ROOT ${_stdout})\n-elseif(IS_DIRECTORY \"/Developer\")\n-  set(OSX_DEVELOPER_ROOT \"/Developer\")\n-else()\n-  set(OSX_DEVELOPER_ROOT \"\")\n-endif()\n+set(OSX_DEVELOPER_ROOT \"\")\n \n if(NOT CMAKE_CROSSCOMPILING)\n   execute_process(COMMAND @sw_vers@ -productVersion\ndiff --git a/Modules/Platform/Darwin.cmake b/Modules/Platform/Darwin.cmake\nindex 42c6b35424..f2985f3765 100644\n--- a/Modules/Platform/Darwin.cmake\n+++ b/Modules/Platform/Darwin.cmake\n@@ -166,7 +166,6 @@\n \n # set up the default search directories for frameworks\n set(CMAKE_SYSTEM_FRAMEWORK_PATH\n-  ~/Library/Frameworks\n   )\n if(_CMAKE_OSX_SYSROOT_PATH)\n   list(APPEND CMAKE_SYSTEM_FRAMEWORK_PATH\n@@ -201,10 +200,6 @@\n   list(APPEND CMAKE_SYSTEM_FRAMEWORK_PATH\n     ${OSX_DEVELOPER_ROOT}/Library/Frameworks)\n endif()\n-list(APPEND CMAKE_SYSTEM_FRAMEWORK_PATH\n-  /Library/Frameworks\n-  /Network/Library/Frameworks\n-  /System/Library/Frameworks)\n \n # Warn about known system misconfiguration case.\n if(CMAKE_OSX_SYSROOT)\n@@ -230,10 +225,6 @@\n # set up the default search directories for application bundles\n set(_apps_paths)\n foreach(_path\n-  \"~/Applications\"\n-  \"/Applications\"\n-  \"${OSX_DEVELOPER_ROOT}/../Applications\" # Xcode 4.3+\n-  \"${OSX_DEVELOPER_ROOT}/Applications\"    # pre-4.3\n   )\n   get_filename_component(_apps \"${_path}\" ABSOLUTE)\n   if(EXISTS \"${_apps}\")\n@@ -249,28 +240,6 @@\n \n include(Platform/UnixPaths)\n \n-if(CMAKE_SYSTEM_NAME STREQUAL \"Darwin\")\n-  execute_process(\n-    COMMAND brew --prefix\n-    OUTPUT_VARIABLE _cmake_homebrew_prefix\n-    RESULT_VARIABLE _brew_result\n-    OUTPUT_STRIP_TRAILING_WHITESPACE\n-  )\n-  if (_brew_result EQUAL 0 AND IS_DIRECTORY \"${_cmake_homebrew_prefix}\")\n-    list(PREPEND CMAKE_SYSTEM_PREFIX_PATH \"${_cmake_homebrew_prefix}\")\n-  elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL \"arm64\")\n-    list(PREPEND CMAKE_SYSTEM_PREFIX_PATH\n-      /opt/homebrew # Brew on Apple Silicon\n-      )\n-  else()\n-    list(PREPEND CMAKE_SYSTEM_PREFIX_PATH\n-      /usr/local # Brew on Intel\n-      )\n-  endif()\n-  unset(_cmake_homebrew_prefix)\n-  unset(_brew_result)\n-endif()\n-\n if(_CMAKE_OSX_SYSROOT_PATH)\n   if(EXISTS ${_CMAKE_OSX_SYSROOT_PATH}/usr/include)\n     list(INSERT CMAKE_SYSTEM_PREFIX_PATH 0 ${_CMAKE_OSX_SYSROOT_PATH}/usr)\n@@ -285,7 +254,3 @@\n     endforeach()\n   endif()\n endif()\n-list(APPEND CMAKE_SYSTEM_PREFIX_PATH\n-  /sw        # Fink\n-  /opt/local # MacPorts\n-  )\ndiff --git a/Modules/Platform/GNU.cmake b/Modules/Platform/GNU.cmake\nindex 6a25b00b81..2430bdb7e4 100644\n--- a/Modules/Platform/GNU.cmake\n+++ b/Modules/Platform/GNU.cmake\n@@ -48,13 +48,8 @@\n   # checking the platform every time.  This option is advanced enough\n   # that only package maintainers should need to adjust it.  They are\n   # capable of providing a setting on the command line.\n-  if(EXISTS \"/etc/debian_version\")\n-    set(CMAKE_INSTALL_SO_NO_EXE 1 CACHE INTERNAL\n-      \"Install .so files without execute permission.\")\n-  else()\n-    set(CMAKE_INSTALL_SO_NO_EXE 0 CACHE INTERNAL\n-      \"Install .so files without execute permission.\")\n-  endif()\n+  set(CMAKE_INSTALL_SO_NO_EXE 0 CACHE INTERNAL\n+    \"Install .so files without execute permission.\")\n endif()\n \n include(Platform/UnixPaths)\ndiff --git a/Modules/Platform/Linux.cmake b/Modules/Platform/Linux.cmake\nindex 5b61dd6b61..d324b903ed 100644\n--- a/Modules/Platform/Linux.cmake\n+++ b/Modules/Platform/Linux.cmake\n@@ -45,25 +45,8 @@\n   # checking the platform every time.  This option is advanced enough\n   # that only package maintainers should need to adjust it.  They are\n   # capable of providing a setting on the command line.\n-  if(EXISTS \"/etc/debian_version\")\n-    set(CMAKE_INSTALL_SO_NO_EXE 1 CACHE INTERNAL\n-      \"Install .so files without execute permission.\")\n-  else()\n-    set(CMAKE_INSTALL_SO_NO_EXE 0 CACHE INTERNAL\n-      \"Install .so files without execute permission.\")\n-  endif()\n+  set(CMAKE_INSTALL_SO_NO_EXE 0 CACHE INTERNAL\n+    \"Install .so files without execute permission.\")\n endif()\n \n include(Platform/UnixPaths)\n-\n-# Debian has lib32 and lib64 paths only for compatibility so they should not be\n-# searched.\n-if(NOT CMAKE_CROSSCOMPILING AND NOT CMAKE_COMPILER_SYSROOT)\n-  if (EXISTS \"/etc/debian_version\")\n-    set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB32_PATHS FALSE)\n-    set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS FALSE)\n-  endif()\n-  if (EXISTS \"/etc/arch-release\")\n-    set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS FALSE)\n-  endif()\n-endif()\ndiff --git a/Modules/Platform/OpenBSD.cmake b/Modules/Platform/OpenBSD.cmake\nindex 97e2a6a83e..02c607618c 100644\n--- a/Modules/Platform/OpenBSD.cmake\n+++ b/Modules/Platform/OpenBSD.cmake\n@@ -31,13 +31,9 @@\n \n if($ENV{LOCALBASE})\n   set(OPENBSD_LOCALBASE $ENV{LOCALBASE})\n-else()\n-  set(OPENBSD_LOCALBASE /usr/local)\n endif()\n if($ENV{X11BASE})\n   set(OPENBSD_X11BASE $ENV{X11BASE})\n-else()\n-  set(OPENBSD_X11BASE /usr/X11R6)\n endif()\n \n list(APPEND CMAKE_SYSTEM_PREFIX_PATH ${OPENBSD_LOCALBASE})\ndiff --git a/Modules/Platform/SunOS.cmake b/Modules/Platform/SunOS.cmake\nindex e01e892283..d044d81c88 100644\n--- a/Modules/Platform/SunOS.cmake\n+++ b/Modules/Platform/SunOS.cmake\n@@ -19,11 +19,6 @@\n \n include(Platform/UnixPaths)\n \n-list(APPEND CMAKE_SYSTEM_PREFIX_PATH\n-  /opt/csw\n-  /opt/openwin\n-  )\n-\n # The Sun linker needs to find transitive shared library dependencies\n # in the -L path.\n set(CMAKE_LINK_DEPENDENT_LIBRARY_DIRS 1)\ndiff --git a/Modules/Platform/UnixPaths.cmake b/Modules/Platform/UnixPaths.cmake\nindex bdf4155232..588064821d 100644\n--- a/Modules/Platform/UnixPaths.cmake\n+++ b/Modules/Platform/UnixPaths.cmake\n@@ -29,9 +29,6 @@\n # please make sure to keep Help/variable/CMAKE_SYSTEM_PREFIX_PATH.rst\n # synchronized\n list(APPEND CMAKE_SYSTEM_PREFIX_PATH\n-  # Standard\n-  /usr/local /usr /\n-\n   # CMake install location\n   \"${_CMAKE_INSTALL_DIR}\"\n   )\n@@ -49,28 +46,6 @@\n endif()\n _cmake_record_install_prefix()\n \n-# Non \"standard\" but common install prefixes\n-list(APPEND CMAKE_SYSTEM_PREFIX_PATH\n-  /usr/X11R6\n-  /usr/pkg\n-  /opt\n-  )\n-\n-# List common include file locations not under the common prefixes.\n-list(APPEND CMAKE_SYSTEM_INCLUDE_PATH\n-  # X11\n-  /usr/include/X11\n-  )\n-\n-list(APPEND CMAKE_SYSTEM_LIBRARY_PATH\n-  # X11\n-  /usr/lib/X11\n-  )\n-\n-list(APPEND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES\n-  /lib /lib32 /lib64 /usr/lib /usr/lib32 /usr/lib64\n-  )\n-\n # Add the Nix C library paths.\n if(DEFINED ENV{NIX_CC}\n   AND IS_DIRECTORY \"$ENV{NIX_CC}\"\ndiff --git a/Modules/Platform/WindowsPaths.cmake b/Modules/Platform/WindowsPaths.cmake\nindex c56dfaf9ac..4e0b250c1a 100644\n--- a/Modules/Platform/WindowsPaths.cmake\n+++ b/Modules/Platform/WindowsPaths.cmake\n@@ -69,11 +69,6 @@\n endif()\n _cmake_record_install_prefix()\n \n-if(CMAKE_CROSSCOMPILING AND NOT CMAKE_HOST_SYSTEM_NAME MATCHES \"Windows\")\n-  # MinGW (useful when cross compiling from linux with CMAKE_FIND_ROOT_PATH set)\n-  list(APPEND CMAKE_SYSTEM_PREFIX_PATH /)\n-endif()\n-\n list(APPEND CMAKE_SYSTEM_INCLUDE_PATH\n   )\n \ndiff --git a/Modules/ProcessorCount.cmake b/Modules/ProcessorCount.cmake\nindex ffb8fcd8d2..6b8fcf87dc 100644\n--- a/Modules/ProcessorCount.cmake\n+++ b/Modules/ProcessorCount.cmake\n@@ -128,7 +128,7 @@\n   if(NOT count)\n     # HPUX (systems with machinfo):\n     find_program(ProcessorCount_cmd_machinfo machinfo\n-      PATHS /usr/contrib/bin)\n+      )\n     mark_as_advanced(ProcessorCount_cmd_machinfo)\n     if(ProcessorCount_cmd_machinfo)\n       execute_process(COMMAND ${ProcessorCount_cmd_machinfo}\n@@ -160,7 +160,7 @@\n   if(NOT count)\n     # AIX (systems with lsconf):\n     find_program(ProcessorCount_cmd_lsconf lsconf\n-      PATHS /usr/sbin)\n+      )\n     mark_as_advanced(ProcessorCount_cmd_lsconf)\n     if(ProcessorCount_cmd_lsconf)\n       execute_process(COMMAND ${ProcessorCount_cmd_lsconf}\n@@ -190,7 +190,7 @@\n \n   if(NOT count)\n     # Sun (systems where psrinfo tool is available)\n-    find_program(ProcessorCount_cmd_psrinfo psrinfo PATHS /usr/sbin /sbin)\n+    find_program(ProcessorCount_cmd_psrinfo psrinfo)\n     mark_as_advanced(ProcessorCount_cmd_psrinfo)\n     if (ProcessorCount_cmd_psrinfo)\n       execute_process(COMMAND ${ProcessorCount_cmd_psrinfo} -p -v\ndiff --git a/Modules/UseJava.cmake b/Modules/UseJava.cmake\nindex b977d955ca..5ff835298d 100644\n--- a/Modules/UseJava.cmake\n+++ b/Modules/UseJava.cmake\n@@ -1125,8 +1125,6 @@\n     set(_jar_files)\n     set(_jar_versions)\n     set(_jar_paths\n-        /usr/share/java/\n-        /usr/local/share/java/\n         ${Java_JAR_PATHS})\n     set(_jar_doc \"NOTSET\")\n \ndiff --git a/Utilities/cmcurl/CMakeLists.txt b/Utilities/cmcurl/CMakeLists.txt\nindex 8ff651fd90..9659deedf5 100644\n--- a/Utilities/cmcurl/CMakeLists.txt\n+++ b/Utilities/cmcurl/CMakeLists.txt\n@@ -1826,43 +1826,6 @@\n   endif()\n   mark_as_advanced(CURL_CA_PATH_SET)\n \n-  if(CURL_CA_BUNDLE_SET AND _curl_ca_path_autodetect)\n-    # Skip auto-detection of unset CA path because CA bundle is set explicitly\n-  elseif(CURL_CA_PATH_SET AND _curl_ca_bundle_autodetect)\n-    # Skip auto-detection of unset CA bundle because CA path is set explicitly\n-  elseif(_curl_ca_bundle_autodetect OR _curl_ca_path_autodetect)\n-    # First try auto-detecting a CA bundle, then a CA path\n-\n-    if(_curl_ca_bundle_autodetect)\n-      foreach(_search_ca_bundle_path IN ITEMS\n-          \"/etc/ssl/certs/ca-certificates.crt\"\n-          \"/etc/pki/tls/certs/ca-bundle.crt\"\n-          \"/usr/share/ssl/certs/ca-bundle.crt\"\n-          \"/usr/local/share/certs/ca-root-nss.crt\"\n-          \"/etc/ssl/cert.pem\")\n-        if(EXISTS \"${_search_ca_bundle_path}\")\n-          message(STATUS \"Found CA bundle: ${_search_ca_bundle_path}\")\n-          set(CURL_CA_BUNDLE \"${_search_ca_bundle_path}\" CACHE\n-            STRING \"Path to the CA bundle. Set 'none' to disable or 'auto' for auto-detection. Defaults to 'auto'.\")\n-          set(CURL_CA_BUNDLE_SET TRUE CACHE BOOL \"Path to the CA bundle has been set\")\n-          break()\n-        endif()\n-      endforeach()\n-    endif()\n-\n-    if(_curl_ca_path_autodetect AND NOT CURL_CA_PATH_SET)\n-      set(_search_ca_path \"/etc/ssl/certs\")\n-      file(GLOB _curl_ca_files_found \"${_search_ca_path}/[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f].0\")\n-      if(_curl_ca_files_found)\n-        unset(_curl_ca_files_found)\n-        message(STATUS \"Found CA path: ${_search_ca_path}\")\n-        set(CURL_CA_PATH \"${_search_ca_path}\" CACHE\n-          STRING \"Location of default CA path. Set 'none' to disable or 'auto' for auto-detection. Defaults to 'auto'.\")\n-        set(CURL_CA_PATH_SET TRUE CACHE BOOL \"Path to the CA bundle has been set\")\n-      endif()\n-    endif()\n-  endif()\n-\n   set(CURL_CA_EMBED_SET FALSE)\n   if(BUILD_CURL_EXE AND NOT CURL_CA_EMBED STREQUAL \"\")\n     if(EXISTS \"${CURL_CA_EMBED}\")\ndiff --git a/Utilities/cmlibarchive/CMakeLists.txt b/Utilities/cmlibarchive/CMakeLists.txt\nindex e6ab5de99b..158a407c3e 100644\n--- a/Utilities/cmlibarchive/CMakeLists.txt\n+++ b/Utilities/cmlibarchive/CMakeLists.txt\n@@ -39,9 +39,6 @@\n        MATCHES \"^(DEBUG|RELEASE|RELWITHDEBINFO|MINSIZEREL|NONE)\\$\")\n ENDIF()\n \n-# On MacOS, prefer MacPorts libraries to system libraries.\n-# I haven't come up with a compelling argument for this to be conditional.\n-list(APPEND CMAKE_PREFIX_PATH /opt/local)\n # Enable @rpath in the install name.\n # detail in \"cmake  --help-policy CMP0042\"\n SET(CMAKE_MACOSX_RPATH ON)\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://cmake.org/files/v4.1/cmake-4.1.2.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "643f04182b7ba323ab31f526f785134fb79cba3188a852206ef0473fee282a15"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://cmake.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "q18jfxnilx7yc8zm0in2gk10fm2g802w-nasm-2.16.03",
      "name": "nasm",
      "version": "2.16.03",
      "description": "80x86 and x86-64 assembler designed for portability and modularity",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-2-Clause"
          }
        }
      ],
      "purl": "pkg:nix/nasm@2.16.03",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://www.nasm.us/pub/nasm/releasebuilds/2.16.03/nasm-2.16.03.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "1412a1c760bbd05db026b6c0d1657affd6631cd0a63cddb6f73cc6d4aa616148"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.nasm.us/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "q1a3bjhg3b4plgb7fk7zis1gi09rbi1d-bzip2-1.0.8-dev",
      "name": "bzip2",
      "version": "1.0.8",
      "description": "High-quality data compression program",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-4-Clause"
          }
        }
      ],
      "purl": "pkg:nix/bzip2@1.0.8",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "--- /dev/null\n+++ autogen.sh\n@@ -0,0 +1,8 @@\n+mv LICENSE COPYING\n+mv CHANGES NEWS\n+touch AUTHORS\n+touch ChangeLog\n+libtoolize --force\n+aclocal\n+automake --add-missing --gnu\n+autoconf\n--- /dev/null\n+++ README.autotools\n@@ -0,0 +1,41 @@\n+bzip2 autoconfiscated\n+=====================\n+\n+Temporarily at http://ftp.suse.com/pub/people/sbrabec/bzip2/ expecting\n+that it will become a new upstream version to prevent per-distribution\n+shared library patching done by nearly each Linux vendor separately.\n+\n+Autoconfiscation brings standard ./configure ; make ; make install\n+installation, seamless support of DESTDIR, automatic check for supported\n+CFLAGS, standard shared library support, automatic large files CFLAGS\n+check and all things that are supported by automake.\n+\n+It makes obsolete Makefile-libbz2_so and README.COMPILATION.PROBLEMS.\n+Now configure should automatically detect correct build flags.\n+\n+In case of any problem or question with autotools support feel free to\n+contact me: Stanislav Brabec <sbrabec@suse.cz>\n+\n+Autoconfiscated version binaries are exactly equal to\n+bzip2-1.0.6.tar.gz. There are only few changes. See below.\n+\n+\n+New features:\n+\n+Trivial link man pages for bzcat and bunzip2 added.\n+\n+bzip2.pc file for pkg-config. Packages can use it for checks.\n+\n+\n+Incompatible changes:\n+\n+soname change. Libtool has no support for two parts soname suffix (e. g.\n+libbz2.so.1.0). It must be a single number (e. g. libbz2.so.1). That is\n+why soname must change. But I see not a big problem with it. Several\n+distributions already use the new number instead of the non-standard\n+number from Makefile-libbz2_so.\n+\n+Shared library exports only public symbols.\n+\n+To be super-safe, I incremented minor number of the library file, so\n+both instances of the shared library can live together.\n--- /dev/null\n+++ configure.ac\n@@ -0,0 +1,62 @@\n+#                                               -*- Autoconf -*-\n+# Process this file with autoconf to produce a configure script.\n+\n+AC_PREREQ([2.57])\n+AC_INIT([bzip2], [1.0.6], [Julian Seward <jseward@bzip.org>])\n+BZIP2_LT_CURRENT=1\n+BZIP2_LT_REVISION=6\n+BZIP2_LT_AGE=0\n+AC_CONFIG_SRCDIR([bzlib.h])\n+AC_CONFIG_MACRO_DIR([m4])\n+\n+AM_INIT_AUTOMAKE([foreign subdir-objects])\n+AM_MAINTAINER_MODE\n+\n+# Checks for programs.\n+AC_PROG_AWK\n+AC_PROG_CC_STDC\n+AC_PROG_CC_C_O\n+AC_USE_SYSTEM_EXTENSIONS\n+AC_PROG_INSTALL\n+AC_PROG_LN_S\n+AC_PROG_MAKE_SET\n+LT_INIT([disable-static pic-only])\n+PKG_PROG_PKG_CONFIG\n+gl_VISIBILITY\n+# Checks for libraries.\n+\n+# Checks for header files.\n+\n+# Checks for typedefs, structures, and compiler characteristics.\n+\n+# Check for system features.\n+AC_SYS_LARGEFILE\n+\n+AC_MSG_CHECKING([whether compiler understands -Wall])\n+save_CFLAGS=\"$CFLAGS\"\n+CFLAGS=\"$CFLAGS -Wall\"\n+AC_TRY_COMPILE([], [], [\n+\tAC_MSG_RESULT([yes])\n+], [\n+\tAC_MSG_RESULT([no])\n+\tCFLAGS=\"$save_CFLAGS\"\n+])\n+\n+AC_MSG_CHECKING([whether compiler understands -Winline])\n+save_CFLAGS=\"$CFLAGS\"\n+CFLAGS=\"$CFLAGS -Winline\"\n+AC_TRY_COMPILE([], [], [\n+\tAC_MSG_RESULT([yes])\n+], [\n+\tAC_MSG_RESULT([no])\n+\tCFLAGS=\"$save_CFLAGS\"\n+])\n+\n+# Checks for library functions.\n+\n+# Write the output.\n+AC_SUBST([BZIP2_LT_CURRENT])\n+AC_SUBST([BZIP2_LT_REVISION])\n+AC_SUBST([BZIP2_LT_AGE])\n+AC_CONFIG_FILES([Makefile bzip2.pc])\n+AC_OUTPUT\n--- /dev/null\n+++ Makefile.am\n@@ -0,0 +1,137 @@\n+ACLOCAL_AMFLAGS = -I m4\n+lib_LTLIBRARIES = libbz2.la\n+AM_CFLAGS = $(CFLAG_VISIBILITY)\n+libbz2_la_SOURCES = \\\n+\tblocksort.c \\\n+\thuffman.c \\\n+\tcrctable.c \\\n+\trandtable.c \\\n+\tcompress.c \\\n+\tdecompress.c \\\n+\tbzlib.c\n+\n+libbz2_la_LDFLAGS = \\\n+\t-version-info $(BZIP2_LT_CURRENT):$(BZIP2_LT_REVISION):$(BZIP2_LT_AGE) \\\n+\t-no-undefined\n+\n+include_HEADERS = bzlib.h\n+\n+noinst_HEADERS = bzlib_private.h\n+\n+bin_PROGRAMS = bzip2 bzip2recover\n+\n+bzip2_SOURCES = bzip2.c\n+bzip2_LDADD = libbz2.la\n+\n+bzip2recover_SOURCES = bzip2recover.c\n+bzip2recover_LDADD = libbz2.la\n+\n+bin_SCRIPTS = bzgrep bzmore bzdiff\n+\n+man_MANS = bzip2.1 bzgrep.1 bzmore.1 bzdiff.1\n+\n+pkgconfigdir = $(libdir)/pkgconfig\n+pkgconfig_DATA = bzip2.pc\n+\n+$(pkgconfig_DATA): $(srcdir)/bzip2.pc.in config.status\n+\n+install-exec-hook:\n+\trm -f $(DESTDIR)$(bindir)/`echo \"bunzip2\" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`\n+\trm -f $(DESTDIR)$(bindir)/`echo \"bzcat\" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`\n+\trm -f $(DESTDIR)$(bindir)/`echo \"bzegrep\" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`\n+\trm -f $(DESTDIR)$(bindir)/`echo \"bzfgrep\" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`\n+\trm -f $(DESTDIR)$(bindir)/`echo \"bzless\" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`\n+\trm -f $(DESTDIR)$(bindir)/`echo \"bzcmp\" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`\n+\t$(LN_S) `echo \"bzip2\" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` $(DESTDIR)$(bindir)/`echo \"bunzip2\" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`\n+\t$(LN_S) `echo \"bzip2\" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` $(DESTDIR)$(bindir)/`echo \"bzcat\" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`\n+\t$(LN_S) `echo \"bzgrep\" | sed 's,^.*/,,;$(transform)'` $(DESTDIR)$(bindir)/`echo \"bzegrep\" | sed 's,^.*/,,;$(transform)'`\n+\t$(LN_S) `echo \"bzgrep\" | sed 's,^.*/,,;$(transform)'` $(DESTDIR)$(bindir)/`echo \"bzfgrep\" | sed 's,^.*/,,;$(transform)'`\n+\t$(LN_S) `echo \"bzmore\" | sed 's,^.*/,,;$(transform)'` $(DESTDIR)$(bindir)/`echo \"bzless\" | sed 's,^.*/,,;$(transform)'`\n+\t$(LN_S) `echo \"bzdiff\" | sed 's,^.*/,,;$(transform)'` $(DESTDIR)$(bindir)/`echo \"bzcmp\" | sed 's,^.*/,,;$(transform)'`\n+\n+install-data-hook:\n+\techo \".so man1/`echo \"bzip2\" | sed 's,^.*/,,;$(transform)'`.1\" >$(DESTDIR)$(mandir)/man1/`echo \"bunzip2\" | sed 's,^.*/,,;$(transform)'`.1\n+\techo \".so man1/`echo \"bzip2\" | sed 's,^.*/,,;$(transform)'`.1\" >$(DESTDIR)$(mandir)/man1/`echo \"bzcat\" | sed 's,^.*/,,;$(transform)'`.1\n+\techo \".so man1/`echo \"bzgrep\" | sed 's,^.*/,,;$(transform)'`.1\" >$(DESTDIR)$(mandir)/man1/`echo \"bzegrep\" | sed 's,^.*/,,;$(transform)'`.1\n+\techo \".so man1/`echo \"bzgrep\" | sed 's,^.*/,,;$(transform)'`.1\" >$(DESTDIR)$(mandir)/man1/`echo \"bzfgrep\" | sed 's,^.*/,,;$(transform)'`.1\n+\techo \".so man1/`echo \"bzmore\" | sed 's,^.*/,,;$(transform)'`.1\" >$(DESTDIR)$(mandir)/man1/`echo \"bzless\" | sed 's,^.*/,,;$(transform)'`.1\n+\techo \".so man1/`echo \"bzdiff\" | sed 's,^.*/,,;$(transform)'`.1\" >$(DESTDIR)$(mandir)/man1/`echo \"bzcmp\" | sed 's,^.*/,,;$(transform)'`.1\n+\n+uninstall-hook:\n+\trm -f $(DESTDIR)$(bindir)/`echo \"bunzip2\" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`\n+\trm -f $(DESTDIR)$(bindir)/`echo \"bzcat\" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`\n+\trm -f $(DESTDIR)$(bindir)/`echo \"bzegrep\" | sed 's,^.*/,,;$(transform)'`\n+\trm -f $(DESTDIR)$(bindir)/`echo \"bzfgrep\" | sed 's,^.*/,,;$(transform)'`\n+\trm -f $(DESTDIR)$(bindir)/`echo \"bzless\" | sed 's,^.*/,,;$(transform)'`\n+\trm -f $(DESTDIR)$(bindir)/`echo \"bzcmp\" | sed 's,^.*/,,;$(transform)'`\n+\trm -f $(DESTDIR)$(mandir)/man1/`echo \"bunzip2\" | sed 's,^.*/,,;$(transform)'`.1\n+\trm -f $(DESTDIR)$(mandir)/man1/`echo \"bzcat\" | sed 's,^.*/,,;$(transform)'`.1\n+\trm -f $(DESTDIR)$(mandir)/man1/`echo \"bzegrep\" | sed 's,^.*/,,;$(transform)'`.1\n+\trm -f $(DESTDIR)$(mandir)/man1/`echo \"bzfgrep\" | sed 's,^.*/,,;$(transform)'`.1\n+\trm -f $(DESTDIR)$(mandir)/man1/`echo \"bzless\" | sed 's,^.*/,,;$(transform)'`.1\n+\trm -f $(DESTDIR)$(mandir)/man1/`echo \"bzcmp\" | sed 's,^.*/,,;$(transform)'`.1\n+\n+test: bzip2\n+\t@cat $(srcdir)/words1\n+\t./bzip2 -1  <$(srcdir)/sample1.ref >sample1.rb2\n+\t./bzip2 -2  <$(srcdir)/sample2.ref >sample2.rb2\n+\t./bzip2 -3  <$(srcdir)/sample3.ref >sample3.rb2\n+\t./bzip2 -d  <$(srcdir)/sample1.bz2 >sample1.tst\n+\t./bzip2 -d  <$(srcdir)/sample2.bz2 >sample2.tst\n+\t./bzip2 -ds <$(srcdir)/sample3.bz2 >sample3.tst\n+\tcmp $(srcdir)/sample1.bz2 sample1.rb2\n+\tcmp $(srcdir)/sample2.bz2 sample2.rb2\n+\tcmp $(srcdir)/sample3.bz2 sample3.rb2\n+\tcmp sample1.tst $(srcdir)/sample1.ref\n+\tcmp sample2.tst $(srcdir)/sample2.ref\n+\tcmp sample3.tst $(srcdir)/sample3.ref\n+\t@cat $(srcdir)/words3\n+\n+manual: $(srcdir)/manual.html $(srcdir)/manual.ps $(srcdir)/manual.pdf\n+\n+manual.ps: $(MANUAL_SRCS)\n+\tcd $(srcdir); ./xmlproc.sh -ps manual.xml\n+\n+manual.pdf: $(MANUAL_SRCS)\n+\tcd $(srcdir); ./xmlproc.sh -pdf manual.xml\n+\n+manual.html: $(MANUAL_SRCS)\n+\tcd $(srcdir); ./xmlproc.sh -html manual.xml\n+\n+EXTRA_DIST = \\\n+\t$(bin_SCRIPTS) \\\n+\t$(man_MANS) \\\n+\tREADME.autotools \\\n+\tREADME.XML.STUFF \\\n+\tbz-common.xsl \\\n+\tbz-fo.xsl \\\n+\tbz-html.xsl \\\n+\tbzip.css \\\n+\tbzip2.1.preformatted \\\n+\tbzip2.pc.in \\\n+\tbzip2.txt \\\n+\tdlltest.c \\\n+\tdlltest.dsp \\\n+\tentities.xml \\\n+\tformat.pl \\\n+\tlibbz2.def \\\n+\tlibbz2.dsp \\\n+\tmakefile.msc \\\n+\tmanual.html \\\n+\tmanual.pdf \\\n+\tmanual.ps \\\n+\tmanual.xml \\\n+\tmk251.c \\\n+\tsample1.bz2 \\\n+\tsample1.ref \\\n+\tsample2.bz2 \\\n+\tsample2.ref \\\n+\tsample3.bz2 \\\n+\tsample3.ref \\\n+\tspewG.c \\\n+\tunzcrash.c \\\n+\twords0 \\\n+\twords1 \\\n+\twords2 \\\n+\twords3 \\\n+\txmlproc.sh\n--- /dev/null\n+++ bzip2.pc.in\n@@ -0,0 +1,11 @@\n+prefix=@prefix@\n+exec_prefix=@exec_prefix@\n+bindir=@bindir@\n+libdir=@libdir@\n+includedir=@includedir@\n+\n+Name: bzip2\n+Description: Lossless, block-sorting data compression\n+Version: @VERSION@\n+Libs: -L${libdir} -lbz2\n+Cflags: -I${includedir}\n--- /dev/null\n+++ m4/visibility.m4\n@@ -0,0 +1,78 @@\n+# visibility.m4 serial 4 (gettext-0.18.2)\n+dnl Copyright (C) 2005, 2008, 2010-2011 Free Software Foundation, Inc.\n+dnl This file is free software; the Free Software Foundation\n+dnl gives unlimited permission to copy and/or distribute it,\n+dnl with or without modifications, as long as this notice is preserved.\n+\n+dnl From Bruno Haible.\n+\n+dnl Tests whether the compiler supports the command-line option\n+dnl -fvisibility=hidden and the function and variable attributes\n+dnl __attribute__((__visibility__(\"hidden\"))) and\n+dnl __attribute__((__visibility__(\"default\"))).\n+dnl Does *not* test for __visibility__(\"protected\") - which has tricky\n+dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on\n+dnl MacOS X.\n+dnl Does *not* test for __visibility__(\"internal\") - which has processor\n+dnl dependent semantics.\n+dnl Does *not* test for #pragma GCC visibility push(hidden) - which is\n+dnl \"really only recommended for legacy code\".\n+dnl Set the variable CFLAG_VISIBILITY.\n+dnl Defines and sets the variable HAVE_VISIBILITY.\n+\n+AC_DEFUN([gl_VISIBILITY],\n+[\n+  AC_REQUIRE([AC_PROG_CC])\n+  CFLAG_VISIBILITY=\n+  HAVE_VISIBILITY=0\n+  if test -n \"$GCC\"; then\n+    dnl First, check whether -Werror can be added to the command line, or\n+    dnl whether it leads to an error because of some other option that the\n+    dnl user has put into $CC $CFLAGS $CPPFLAGS.\n+    AC_MSG_CHECKING([whether the -Werror option is usable])\n+    AC_CACHE_VAL([gl_cv_cc_vis_werror], [\n+      gl_save_CFLAGS=\"$CFLAGS\"\n+      CFLAGS=\"$CFLAGS -Werror\"\n+      AC_COMPILE_IFELSE(\n+        [AC_LANG_PROGRAM([[]], [[]])],\n+        [gl_cv_cc_vis_werror=yes],\n+        [gl_cv_cc_vis_werror=no])\n+      CFLAGS=\"$gl_save_CFLAGS\"])\n+    AC_MSG_RESULT([$gl_cv_cc_vis_werror])\n+    dnl Now check whether visibility declarations are supported.\n+    AC_MSG_CHECKING([for simple visibility declarations])\n+    AC_CACHE_VAL([gl_cv_cc_visibility], [\n+      gl_save_CFLAGS=\"$CFLAGS\"\n+      CFLAGS=\"$CFLAGS -fvisibility=hidden\"\n+      dnl We use the option -Werror and a function dummyfunc, because on some\n+      dnl platforms (Cygwin 1.7) the use of -fvisibility triggers a warning\n+      dnl \"visibility attribute not supported in this configuration; ignored\"\n+      dnl at the first function definition in every compilation unit, and we\n+      dnl don't want to use the option in this case.\n+      if test $gl_cv_cc_vis_werror = yes; then\n+        CFLAGS=\"$CFLAGS -Werror\"\n+      fi\n+      AC_COMPILE_IFELSE(\n+        [AC_LANG_PROGRAM(\n+           [[extern __attribute__((__visibility__(\"hidden\"))) int hiddenvar;\n+             extern __attribute__((__visibility__(\"default\"))) int exportedvar;\n+             extern __attribute__((__visibility__(\"hidden\"))) int hiddenfunc (void);\n+             extern __attribute__((__visibility__(\"default\"))) int exportedfunc (void);\n+             void dummyfunc (void) {}\n+           ]],\n+           [[]])],\n+        [gl_cv_cc_visibility=yes],\n+        [gl_cv_cc_visibility=no])\n+      CFLAGS=\"$gl_save_CFLAGS\"])\n+    AC_MSG_RESULT([$gl_cv_cc_visibility])\n+    if test $gl_cv_cc_visibility = yes; then\n+      CFLAG_VISIBILITY=\"-fvisibility=hidden\"\n+      HAVE_VISIBILITY=1\n+      AC_DEFINE([BZ_EXTERN], [__attribute__((__visibility__(\"default\")))], [To make symbol visible])\n+    fi\n+  fi\n+  AC_SUBST([CFLAG_VISIBILITY])\n+  AC_SUBST([HAVE_VISIBILITY])\n+  AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY],\n+    [Define to 1 or 0, depending whether the compiler supports simple visibility declarations.])\n+])\n--- bzlib.h.orig\n+++ bzlib.h\n@@ -91,9 +91,11 @@ typedef\n #   endif\n #else\n #   define BZ_API(func) func\n-#   define BZ_EXTERN extern\n #endif\n \n+#ifndef BZ_EXTERN\n+#define BZ_EXTERN extern\n+#endif\n \n /*-- Core (low-level) library functions --*/\n \n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.sourceware.org/bzip2"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "qfdr990iqw4ffjkscafdjb0i7cx8y906-python3.13-psutil-7.1.2",
      "name": "psutil",
      "version": "7.1.2",
      "description": "Process and system utilization information interface",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/psutil@7.1.2",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/giampaolo/psutil/archive/refs/tags/release-7.1.2.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "2f21a72ebabe4b30909b3f3f3f90ceba0a0d132b87d080bbb88a7c5003f01f45"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/giampaolo/psutil"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "qrwznp1ikdf0qw05wia2haiwi32ik5n0-patch-2.8",
      "name": "patch",
      "version": "2.8",
      "description": "GNU Patch, a program to apply differences to files",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/patch@2.8",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://ftpmirror.gnu.org/patch/patch-2.8.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "f87cee69eec2b4fcbf60a396b030ad6aa3415f192aa5f7ee84cad5e11f7f5ae3"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://savannah.gnu.org/projects/patch"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "r1hphwygfj8plqpykmpdgmfsh2g2i6ba-CUnit-2.1-3",
      "name": "CUnit",
      "version": "2.1-3",
      "description": "Unit Testing Framework for C",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "LGPL-2.0"
          }
        }
      ],
      "purl": "pkg:nix/CUnit@2.1-3",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://sourceforge/cunit/CUnit/2.1-3/CUnit-2.1-3.tar.bz2"
        },
        {
          "type": "website",
          "url": "https://cunit.sourceforge.net/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "rfllixh9lhqyrl8zbqbg24sacajnmpsp-catch2-3.11.0",
      "name": "catch2",
      "version": "3.11.0",
      "description": "Modern, C++-native, test framework for unit-tests",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSL-1.0"
          }
        }
      ],
      "purl": "pkg:nix/catch2@3.11.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/catchorg/Catch2/archive/refs/tags/v3.11.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "ec3c7b3e1b51c246e8f2f1c5e7bb009ecd9f419e38d83ddc3320addb946fcc97"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/catchorg/Catch2"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "rwj0jbi98wrrg4c4k8a5s63cp8r7s8a9-which-2.23",
      "name": "which",
      "version": "2.23",
      "description": "Shows the full path of (shell) commands",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/which@2.23",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://gnu/which/which-2.23.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "a2c558226fc4d9e4ce331bd2fd3c3f17f955115d2c00e447618a4ef9978a2a73"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/which/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "sif91qc5vfadqhxq3wjli84hlkin2vr2-xcb-proto-1.17.0",
      "name": "xcb-proto",
      "version": "1.17.0",
      "description": "XML-XCB protocol descriptions used by libxcb for the X11 protocol & extensions",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "X11"
          }
        }
      ],
      "purl": "pkg:nix/xcb-proto@1.17.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://xorg/individual/proto/xcb-proto-1.17.0.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "2c1bacd2110f4799f74de6ebb714b94cf6f80fb112316b1219480fd22562148c"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://gitlab.freedesktop.org/xorg/proto/xcbproto"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "swp822fdkl4hcv3784ivy67xvrj35skf-python3.13-gevent-25.5.1",
      "name": "gevent",
      "version": "25.5.1",
      "description": "Coroutine-based networking library",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ],
      "purl": "pkg:nix/gevent@25.5.1",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://pypi/g/gevent/gevent-25.5.1.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "582c948fa9a23188b890d0bc130734a506d039a2e5ad87dae276a456cc683e61"
            }
          ]
        },
        {
          "type": "website",
          "url": "http://www.gevent.org/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "v8n9whgxq9lr2hkj84gvsv4hw3g308vs-python3.13-idna-3.11-dist",
      "name": "idna",
      "version": "3.11",
      "description": "Internationalized Domain Names in Applications (IDNA)",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/idna@3.11",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/kjd/idna/archive/refs/tags/v3.11.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "e269d63a2b7e96b66756c955c9f6a5b7a96feea498a4b972bc44f9e774a99495"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/kjd/idna/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "vrkq2cvd4158ka5lyzg4s39zkkjm3kry-xxd-tinyxxd-1.3.7",
      "name": "xxd-tinyxxd-1.3.7",
      "version": "1.3.7",
      "scope": "required",
      "purl": "pkg:nix/xxd-tinyxxd-1.3.7@1.3.7"
    },
    {
      "type": "application",
      "bom-ref": "vwfprzg8aimy7mfjyn9qcj1swk0f0i82-bootstrap-stage0-glibc-bootstrapFiles",
      "name": "bootstrap-stage0-glibc",
      "version": "bootstrapFiles",
      "scope": "required",
      "purl": "pkg:nix/bootstrap-stage0-glibc@bootstrapFiles"
    },
    {
      "type": "application",
      "bom-ref": "way3psrj8a7y21wvib35fgni9vn0sxga-python3.13-alabaster-1.0.0",
      "name": "alabaster",
      "version": "1.0.0",
      "description": "Light, configurable Sphinx theme",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/alabaster@1.0.0",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://github.com/sphinx-doc/alabaster/archive/refs/tags/1.0.0.tar.gz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "690121159509b344e9b5fa63415a08548f55f5afb12a313639f4ad49a24a1c62"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://github.com/sphinx-doc/alabaster"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "wkrr1k8xsgmnjrbmw6wgwssk9c2xsvbl-docbook-xml-4.5",
      "name": "docbook-xml",
      "version": "4.5",
      "scope": "required",
      "purl": "pkg:nix/docbook-xml@4.5",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://docbook.org/xml/4.5/docbook-xml-4.5.zip"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "x3zjxxz8m4ki88axp0gn8q8m6bldybba-gnugrep-3.12",
      "name": "gnugrep",
      "version": "3.12",
      "description": "GNU implementation of the Unix grep command",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "GPL-3.0-or-later"
          }
        }
      ],
      "purl": "pkg:nix/gnugrep@3.12",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "Applies the following incremental gnulib commits:\n\n- 55a366a06fbd98bf13adc531579e3513cee97a32\n- 65ed9d3b24ad09fd61d326c83e7f1b05f6e9d65f\n- ce8e9de0bf34bc63dffc67ab384334c509175f64\n- 6164b4cb0887b5331a4e64449107decd37d32735\n\nWith adjustments specific to the structure & differences in gnugrep:\n\n- gnulib code is completely contained in gnulib-tests (flat, no separate lib directory)\n- A Makefile.in is used for the test flags instead of the fancy automake modules\n  in the upstream gnulib project, so we add -lm to the float test there.\n  Surrounding texts in this file are slightly different in every project.\n---\ndiff '--color=auto' -ruN a/gnulib-tests/float.c b/gnulib-tests/float.c\n--- a/gnulib-tests/float.c\t2025-01-02 03:33:12.000000000 +0100\n+++ b/gnulib-tests/float.c\t2025-07-09 06:45:05.176372632 +0200\n@@ -23,7 +23,7 @@\n #if GNULIB_defined_long_double_union\n # if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__\n const union gl_long_double_union gl_LDBL_MAX =\n-  { { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL } };\n+  { { DBL_MAX, DBL_MAX / 0x1p53 } };\n # elif defined __i386__\n const union gl_long_double_union gl_LDBL_MAX =\n   { { 0xFFFFFFFF, 0xFFFFFFFF, 32766 } };\ndiff '--color=auto' -ruN a/gnulib-tests/float.in.h b/gnulib-tests/float.in.h\n--- a/gnulib-tests/float.in.h\t2025-01-02 03:33:12.000000000 +0100\n+++ b/gnulib-tests/float.in.h\t2025-07-09 06:44:02.203541534 +0200\n@@ -113,44 +113,38 @@\n # define LDBL_MAX_10_EXP 4932\n #endif\n \n-/* On AIX 7.1 with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_MAX are\n-   wrong.\n-   On Linux/PowerPC with gcc 4.4, the value of LDBL_MAX is wrong.  */\n-#if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__\n+/* On PowerPC with gcc 15 when using __ibm128 long double, the value of\n+   LDBL_MIN_EXP, LDBL_MIN, LDBL_MAX, and LDBL_NORM_MAX are wrong.  */\n+#if ((defined _ARCH_PPC || defined _POWER) && LDBL_MANT_DIG == 106 \\\n+     && defined __GNUC__)\n # undef LDBL_MIN_EXP\n # define LDBL_MIN_EXP DBL_MIN_EXP\n # undef LDBL_MIN_10_EXP\n # define LDBL_MIN_10_EXP DBL_MIN_10_EXP\n # undef LDBL_MIN\n # define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */\n-#endif\n-#if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__\n # undef LDBL_MAX\n-/* LDBL_MAX is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xFFFFFFFF }.\n-   It is not easy to define:\n-     #define LDBL_MAX 1.79769313486231580793728971405302307166e308L\n-   is too small, whereas\n-     #define LDBL_MAX 1.79769313486231580793728971405302307167e308L\n-   is too large.  Apparently a bug in GCC decimal-to-binary conversion.\n-   Also, I can't get values larger than\n-     #define LDBL63 ((long double) (1ULL << 63))\n-     #define LDBL882 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63)\n-     #define LDBL945 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63)\n-     #define LDBL1008 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63)\n-     #define LDBL_MAX (LDBL1008 * 65535.0L + LDBL945 * (long double) 9223372036821221375ULL + LDBL882 * (long double) 4611686018427387904ULL)\n-   which is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xF8000000 }.\n-   So, define it like this through a reference to an external variable\n+/* LDBL_MAX is 2**1024 - 2**918, represented as: { 0x7FEFFFFF, 0xFFFFFFFF,\n+                                                   0x7C9FFFFF, 0xFFFFFFFF }.\n+\n+   Do not write it as a constant expression, as GCC would likely treat\n+   that as infinity due to the vagaries of this platform's funky arithmetic.\n+   Instead, define it through a reference to an external variable.\n+   Like the following, but using a union to avoid type mismatches:\n \n-     const double LDBL_MAX[2] = { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL };\n+     const double LDBL_MAX[2] = { DBL_MAX, DBL_MAX / 0x1p53 };\n      extern const long double LDBL_MAX;\n \n-   or through a pointer cast\n+   The following alternative would not work as well when GCC is optimizing:\n+\n+     #define LDBL_MAX (*(long double const *) (double[])\n+                       { DBL_MAX, DBL_MAX / 0x1p53 })\n \n-     #define LDBL_MAX \\\n-       (*(const long double *) (double[]) { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL })\n+   The following alternative would require GCC 6 or later:\n \n-   Unfortunately, this is not a constant expression, and the latter expression\n-   does not work well when GCC is optimizing..  */\n+     #define LDBL_MAX __builtin_pack_longdouble (DBL_MAX, DBL_MAX / 0x1p53)\n+\n+   Unfortunately none of the alternatives are constant expressions.  */\n # if !GNULIB_defined_long_double_union\n union gl_long_double_union\n   {\n@@ -161,6 +155,8 @@\n # endif\n extern const union gl_long_double_union gl_LDBL_MAX;\n # define LDBL_MAX (gl_LDBL_MAX.ld)\n+# undef LDBL_NORM_MAX\n+# define LDBL_NORM_MAX LDBL_MAX\n #endif\n \n /* On IRIX 6.5, with cc, the value of LDBL_MANT_DIG is wrong.\n@@ -181,6 +177,21 @@\n # endif\n #endif\n \n+/* On PowerPC platforms, 'long double' has a double-double representation.\n+   Up to ISO C 17, this was outside the scope of ISO C because it can represent\n+   numbers with mantissas of the form 1.<52 bits><many zeroes><52 bits>, such as\n+   1.0L + 4.94065645841246544176568792868221e-324L = 1 + 2^-1074; see\n+   ISO C 17 § 5.2.4.2.2.(3).\n+   In ISO C 23, wording has been included that makes this 'long double'\n+   representation compliant; see ISO C 23 § 5.2.5.3.3.(8)-(9).  In this setting,\n+   numbers with mantissas of the form 1.<52 bits><many zeroes><52 bits> are\n+   called \"unnormalized\".  And since LDBL_EPSILON must be normalized (per\n+   ISO C 23 § 5.2.5.3.3.(33)), it must be 2^-105.  */\n+#if defined __powerpc__ && LDBL_MANT_DIG == 106\n+# undef LDBL_EPSILON\n+# define LDBL_EPSILON 2.46519032881566189191165176650870696773e-32L /* 2^-105 */\n+#endif\n+\n /* ============================ ISO C11 support ============================ */\n \n /* 'float' properties */\n@@ -309,7 +320,11 @@\n # endif\n #endif\n #ifndef LDBL_NORM_MAX\n-# define LDBL_NORM_MAX LDBL_MAX\n+# ifdef __LDBL_NORM_MAX__\n+#  define LDBL_NORM_MAX __LDBL_NORM_MAX__\n+# else\n+#  define LDBL_NORM_MAX LDBL_MAX\n+# endif\n #endif\n #ifndef LDBL_SNAN\n /* For sh, beware of <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111814>.  */\ndiff '--color=auto' -ruN a/gnulib-tests/Makefile.in b/gnulib-tests/Makefile.in\n--- a/gnulib-tests/Makefile.in\t2025-04-10 17:51:23.000000000 +0200\n+++ b/gnulib-tests/Makefile.in\t2025-07-09 06:35:48.276939180 +0200\n@@ -1056,7 +1056,7 @@\n \t../lib/libgreputils.a libtests.a $(am__DEPENDENCIES_1)\n test_float_h_SOURCES = test-float-h.c\n test_float_h_OBJECTS = test-float-h.$(OBJEXT)\n-test_float_h_LDADD = $(LDADD)\n+test_float_h_LDADD = $(LDADD) -lm\n test_float_h_DEPENDENCIES = libtests.a ../lib/libgreputils.a \\\n \tlibtests.a ../lib/libgreputils.a libtests.a \\\n \t$(am__DEPENDENCIES_1)\ndiff '--color=auto' -ruN a/gnulib-tests/test-float-h.c b/gnulib-tests/test-float-h.c\n--- a/gnulib-tests/test-float-h.c\t2025-01-02 03:33:12.000000000 +0100\n+++ b/gnulib-tests/test-float-h.c\t2025-07-09 06:54:02.794407115 +0200\n@@ -101,6 +101,8 @@\n \n /* ------------------------------------------------------------------------- */\n \n+#include <math.h>\n+\n #include \"fpucw.h\"\n #include \"isnanf-nolibm.h\"\n #include \"isnand-nolibm.h\"\n@@ -396,6 +398,44 @@\n \n /* -------------------- Check macros for 'long double' -------------------- */\n \n+static int\n+test_isfinitel (long double volatile x)\n+{\n+  if (x != x)\n+    return 0;\n+  long double volatile zero = x * 0;\n+  return zero == 0;\n+}\n+\n+/* Return X after normalization.  This makes a difference on platforms\n+   where long double can represent unnormalized values.  For example,\n+   suppose x = 1 + 2**-106 on PowerPC with IBM long double where\n+   FLT_RADIX = 2, LDBL_MANT_DIG = 106, and LDBL_EPSILON = 2**-105.\n+   Then 1 < x < 1 + LDBL_EPSILON, and normalize_long_double (x) returns 1.  */\n+static long double\n+normalize_long_double (long double volatile x)\n+{\n+  if (FLT_RADIX == 2 && test_isfinitel (x))\n+    {\n+      int xexp;\n+      long double volatile\n+        frac = frexpl (x, &xexp),\n+        significand = frac * pow2l (LDBL_MANT_DIG),\n+        normalized_significand = truncl (significand),\n+        normalized_x = normalized_significand * pow2l (xexp - LDBL_MANT_DIG);\n+\n+      /* The test_isfinitel defends against PowerPC with IBM long double,\n+         which fritzes out near LDBL_MAX.  */\n+      if (test_isfinitel (normalized_x))\n+        x = normalized_x;\n+    }\n+  else\n+    {\n+      /* Hope that X is already normalized.  */\n+    }\n+  return x;\n+}\n+\n static void\n test_long_double (void)\n {\n@@ -455,7 +495,7 @@\n     for (n = 0; n <= 2 * LDBL_MANT_DIG; n++)\n       {\n         volatile long double half_n = pow2l (- n); /* 2^-n */\n-        volatile long double x = me - half_n;\n+        volatile long double x = normalize_long_double (me - half_n);\n         if (x < me)\n           ASSERT (x <= 1.0L);\n       }\n@@ -483,8 +523,12 @@\n   ASSERT (!LDBL_IS_IEC_60559);\n #endif\n \n+  printf(\"LDBL_NORM_MAX: %LF\\n\", LDBL_NORM_MAX);\n+  printf(\"LDBL_MAX: %LF\\n\", LDBL_MAX);\n+  printf(\"normalize_long_double(LDBL_MAX): %LF\\n\", normalize_long_double(LDBL_MAX));\n+\n   /* Check the value of LDBL_NORM_MAX.  */\n-  ASSERT (LDBL_NORM_MAX == LDBL_MAX);\n+  ASSERT (LDBL_NORM_MAX == normalize_long_double (LDBL_MAX));\n \n   /* Check the value of LDBL_SNAN.  */\n   ASSERT (isnanl (LDBL_SNAN));\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "vcs",
          "url": "https://ftpmirror.gnu.org/grep/grep-3.12.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "2649b27c0e90e632eadcd757be06c6e9a4f48d941de51e7c0f83ff76408a07b9"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://www.gnu.org/software/grep/"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "x4mixbjy6l0q98x8vlakgx4nzbsz84cx-binutils-patchelfed-ld-wrapper-2.44",
      "name": "binutils-patchelfed-ld-wrapper",
      "version": "2.44",
      "description": "System binary utilities (wrapper script)",
      "scope": "required",
      "purl": "pkg:nix/binutils-patchelfed-ld-wrapper@2.44"
    },
    {
      "type": "application",
      "bom-ref": "xnw6kxx9z8s1g0vs2sxkb625d7c4pk3m-binutils-patchelfed-ld-2.44",
      "name": "binutils-patchelfed-ld",
      "version": "2.44",
      "scope": "required",
      "purl": "pkg:nix/binutils-patchelfed-ld@2.44"
    },
    {
      "type": "application",
      "bom-ref": "y2i3bvh2vjzjacfzp47blbdpai3c6qxj-libyuv-1908",
      "name": "libyuv",
      "version": "1908",
      "description": "Open source project that includes YUV scaling and conversion functionality",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "BSD-3-Clause"
          }
        }
      ],
      "purl": "pkg:nix/libyuv@1908",
      "pedigree": {
        "patches": [
          {
            "type": "unofficial",
            "diff": {
              "text": {
                "contentType": "text/plain",
                "content": "diff '--color=auto' -ruN a/source/row_common.cc b/source/row_common.cc\n--- a/source/row_common.cc\t2025-07-15 17:55:24.611751521 +0200\n+++ b/source/row_common.cc\t2025-07-15 18:01:57.808312551 +0200\n@@ -104,8 +104,13 @@\n #if defined(__x86_64__) || defined(_M_X64) || defined(__i386__) || \\\n     defined(_M_IX86) || defined(__arm__) || defined(_M_ARM) ||     \\\n     (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)\n+#define WRITE16(p, v) *(uint16_t*)(p) = v\n #define WRITEWORD(p, v) *(uint32_t*)(p) = v\n #else\n+static inline void WRITE16(uint8_t* p, uint16_t v) {\n+  p[0] = (uint8_t)(v & 255);\n+  p[1] = (uint8_t)((v >> 8) & 255);\n+}\n static inline void WRITEWORD(uint8_t* p, uint32_t v) {\n   p[0] = (uint8_t)(v & 255);\n   p[1] = (uint8_t)((v >> 8) & 255);\n@@ -408,10 +413,10 @@\n     uint8_t b1 = STATIC_CAST(uint8_t, clamp255(src_argb[4] + dither1) >> 3);\n     uint8_t g1 = STATIC_CAST(uint8_t, clamp255(src_argb[5] + dither1) >> 2);\n     uint8_t r1 = STATIC_CAST(uint8_t, clamp255(src_argb[6] + dither1) >> 3);\n-    *(uint16_t*)(dst_rgb + 0) =\n-        STATIC_CAST(uint16_t, b0 | (g0 << 5) | (r0 << 11));\n-    *(uint16_t*)(dst_rgb + 2) =\n-        STATIC_CAST(uint16_t, b1 | (g1 << 5) | (r1 << 11));\n+    WRITE16((dst_rgb + 0),\n+        STATIC_CAST(uint16_t, b0 | (g0 << 5) | (r0 << 11)));\n+    WRITE16((dst_rgb + 2),\n+        STATIC_CAST(uint16_t, b1 | (g1 << 5) | (r1 << 11)));\n     dst_rgb += 4;\n     src_argb += 8;\n   }\n"
              }
            }
          }
        ]
      },
      "externalReferences": [
        {
          "type": "website",
          "url": "https://chromium.googlesource.com/libyuv/libyuv"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "zaykr1v65g6sridyimrykmbdqbqbfk0x-gi-docgen-2025.5",
      "name": "gi-docgen",
      "version": "2025.5",
      "description": "Documentation generator for GObject-based libraries",
      "scope": "required",
      "licenses": [
        {
          "license": {
            "id": "Apache-2.0"
          }
        }
      ],
      "purl": "pkg:nix/gi-docgen@2025.5",
      "externalReferences": [
        {
          "type": "vcs",
          "url": "mirror://gnome/sources/gi-docgen/2025/gi-docgen-2025.5.tar.xz",
          "hashes": [
            {
              "alg": "SHA-256",
              "content": "2579a33ff87b622d10d102c91b7d0ece506340b70e34dbb6522163e16c90aca3"
            }
          ]
        },
        {
          "type": "website",
          "url": "https://gitlab.gnome.org/GNOME/gi-docgen"
        }
      ]
    },
    {
      "type": "application",
      "bom-ref": "zq3ghlkzyr8rcxq2ajbrvrnccqzflmwf-bootstrap-stage0-binutils-wrapper-",
      "name": "bootstrap-stage0-binutils-wrapper",
      "version": "",
      "description": "System binary utilities (wrapper script)",
      "scope": "required",
      "purl": "pkg:nix/bootstrap-stage0-binutils-wrapper"
    }
  ]
}