diff --git a/.devtoolset-12-gcc.metadata b/.devtoolset-12-gcc.metadata
index 04dac9e..b91bc23 100644
--- a/.devtoolset-12-gcc.metadata
+++ b/.devtoolset-12-gcc.metadata
@@ -1,8 +1,8 @@
7f4348418dc3efefd357b32a2b5c8010211ab284 SOURCES/doxygen-1.8.0.src.tar.gz
-b745356ea1afec83ef254a5b1ce8bdf9e4eb69c8 SOURCES/gcc-12.1.1-20220628.tar.xz
+ecaedb16188931aa35d627f2edb28dbab5f8f3c1 SOURCES/gcc-12.2.1-20221121.tar.xz
db38c7b67f8eea9f2e5b8a48d219165b2fdab11f SOURCES/gmp-6.1.0.tar.bz2
-bbffc5a2b05e4f0c97e882f96c448504491dc4ed SOURCES/isl-0.18.tar.bz2
+ae5fbb33bcb442121fbbf482a93f6b3c84d489ee SOURCES/isl-0.24.tar.bz2
b8be66396c726fdc36ebb0f692ed8a8cca3bcc66 SOURCES/mpc-1.0.3.tar.gz
e3b0af77f18505184410d621fe0aae179e229dba SOURCES/mpfr-3.1.4.tar.bz2
-6ec33952e824e837fef0e829c93d39d6a507082f SOURCES/newlib-cygwin-50e2a63b04bdd018484605fbb954fd1bd5147fa0.tar.xz
-0e0c6f8d68ab0878f02287ac082c1077c831cd81 SOURCES/nvptx-tools-5f6f343a302d620b0868edab376c00b15741e39e.tar.xz
+1923f9401ce16ce5b818c104e3b09b0bdbb15606 SOURCES/newlib-cygwin-a8526cb52bedabd4d6ba4b227a5185627f871aa1.tar.xz
+ea865cf7e6834b88a8f8aee22b7a7065813ccc99 SOURCES/nvptx-tools-472b6e78b3ba918d727698f79911360b7c808247.tar.xz
diff --git a/.gitignore b/.gitignore
index c32afc5..ae6756a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,8 @@
SOURCES/doxygen-1.8.0.src.tar.gz
-SOURCES/gcc-12.1.1-20220628.tar.xz
+SOURCES/gcc-12.2.1-20221121.tar.xz
SOURCES/gmp-6.1.0.tar.bz2
-SOURCES/isl-0.18.tar.bz2
+SOURCES/isl-0.24.tar.bz2
SOURCES/mpc-1.0.3.tar.gz
SOURCES/mpfr-3.1.4.tar.bz2
-SOURCES/newlib-cygwin-50e2a63b04bdd018484605fbb954fd1bd5147fa0.tar.xz
-SOURCES/nvptx-tools-5f6f343a302d620b0868edab376c00b15741e39e.tar.xz
+SOURCES/newlib-cygwin-a8526cb52bedabd4d6ba4b227a5185627f871aa1.tar.xz
+SOURCES/nvptx-tools-472b6e78b3ba918d727698f79911360b7c808247.tar.xz
diff --git a/SOURCES/0018-Use-CXX11-ABI.patch b/SOURCES/0018-Use-CXX11-ABI.patch
index 88449dd..1e60ce1 100644
--- a/SOURCES/0018-Use-CXX11-ABI.patch
+++ b/SOURCES/0018-Use-CXX11-ABI.patch
@@ -11,3 +11,16 @@ index 47f97dcb636..66f07aaa749 100644
#include
#include
+diff --git a/gcc/testsuite/g++.dg/torture/pr106922.C b/gcc/testsuite/g++.dg/torture/pr106922.C
+index 046fc6cce76..4214a31f276 100644
+--- a/gcc/testsuite/g++.dg/torture/pr106922.C
++++ b/gcc/testsuite/g++.dg/torture/pr106922.C
+@@ -4,6 +4,8 @@
+ // -O1 doesn't iterate VN and thus has bogus uninit diagnostics
+ // { dg-skip-if "" { *-*-* } { "-O1" } { "" } }
+
++#define _GLIBCXX_USE_CXX11_ABI 1
++
+ #include
+
+ #include
diff --git a/SOURCES/gcc12-FMA-chains.patch b/SOURCES/gcc12-FMA-chains.patch
new file mode 100644
index 0000000..336c9f2
--- /dev/null
+++ b/SOURCES/gcc12-FMA-chains.patch
@@ -0,0 +1,29 @@
+commit 8ac76d504ee1216ebffab08463a544d691d85112
+Author: Hongyu Wang
+Date: Tue Dec 6 09:53:35 2022 +0800
+
+ i386: Avoid fma_chain for -march=alderlake and sapphirerapids.
+
+ For Alderlake there is similar issue like PR81616, enable
+ avoid_fma256_chain will also benefit on Intel latest platforms
+ Alderlake and Sapphire Rapids.
+
+ gcc/ChangeLog:
+
+ * config/i386/x86-tune.def (X86_TUNE_AVOID_256FMA_CHAINS): Add
+ m_SAPPHIRERAPIDS, m_ALDERLAKE.
+
+diff --git a/gcc/config/i386/x86-tune.def b/gcc/config/i386/x86-tune.def
+index d983e2f6213..1e1b206a71c 100644
+--- a/gcc/config/i386/x86-tune.def
++++ b/gcc/config/i386/x86-tune.def
+@@ -485,7 +485,8 @@ DEF_TUNE (X86_TUNE_AVOID_128FMA_CHAINS, "avoid_fma_chains", m_ZNVER)
+
+ /* X86_TUNE_AVOID_256FMA_CHAINS: Avoid creating loops with tight 256bit or
+ smaller FMA chain. */
+-DEF_TUNE (X86_TUNE_AVOID_256FMA_CHAINS, "avoid_fma256_chains", m_ZNVER2 | m_ZNVER3)
++DEF_TUNE (X86_TUNE_AVOID_256FMA_CHAINS, "avoid_fma256_chains", m_ZNVER2 | m_ZNVER3
++ | m_ALDERLAKE | m_SAPPHIRERAPIDS)
+
+ /* X86_TUNE_V2DF_REDUCTION_PREFER_PHADDPD: Prefer haddpd
+ for v2df vector reduction. */
diff --git a/SOURCES/gcc12-detect-sapphirerapids.patch b/SOURCES/gcc12-detect-sapphirerapids.patch
deleted file mode 100644
index 5b994e6..0000000
--- a/SOURCES/gcc12-detect-sapphirerapids.patch
+++ /dev/null
@@ -1,78 +0,0 @@
-commit d644dfe36d9733c767af62d37250253ced6efd8c
-Author: Cui,Lili
-Date: Mon Nov 7 11:25:41 2022 +0800
-
- Remove AVX512_VP2INTERSECT from PTA_SAPPHIRERAPIDS
-
- gcc/ChangeLog:
-
- * config/i386/driver-i386.cc (host_detect_local_cpu):
- Move sapphirerapids out of AVX512_VP2INTERSECT.
- * config/i386/i386.h: Remove AVX512_VP2INTERSECT from PTA_SAPPHIRERAPIDS
- * doc/invoke.texi: Remove AVX512_VP2INTERSECT from SAPPHIRERAPIDS
-
- (cherry picked from commit d644dfe36d9733c767af62d37250253ced6efd8c)
-
-diff --git a/gcc/config/i386/driver-i386.cc b/gcc/config/i386/driver-i386.cc
-index 9e0ae0b2baa..fcf23fd921d 100644
---- a/gcc/config/i386/driver-i386.cc
-+++ b/gcc/config/i386/driver-i386.cc
-@@ -574,15 +574,12 @@ const char *host_detect_local_cpu (int argc, const char **argv)
- /* This is unknown family 0x6 CPU. */
- if (has_feature (FEATURE_AVX))
- {
-+ /* Assume Tiger Lake */
- if (has_feature (FEATURE_AVX512VP2INTERSECT))
-- {
-- if (has_feature (FEATURE_TSXLDTRK))
-- /* Assume Sapphire Rapids. */
-- cpu = "sapphirerapids";
-- else
-- /* Assume Tiger Lake */
-- cpu = "tigerlake";
-- }
-+ cpu = "tigerlake";
-+ /* Assume Sapphire Rapids. */
-+ else if (has_feature (FEATURE_TSXLDTRK))
-+ cpu = "sapphirerapids";
- /* Assume Cooper Lake */
- else if (has_feature (FEATURE_AVX512BF16))
- cpu = "cooperlake";
-diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
-index 363082ba47b..a61c32b8957 100644
---- a/gcc/config/i386/i386.h
-+++ b/gcc/config/i386/i386.h
-@@ -2328,10 +2328,9 @@ constexpr wide_int_bitmask PTA_ICELAKE_SERVER = PTA_ICELAKE_CLIENT
- constexpr wide_int_bitmask PTA_TIGERLAKE = PTA_ICELAKE_CLIENT | PTA_MOVDIRI
- | PTA_MOVDIR64B | PTA_CLWB | PTA_AVX512VP2INTERSECT | PTA_KL | PTA_WIDEKL;
- constexpr wide_int_bitmask PTA_SAPPHIRERAPIDS = PTA_ICELAKE_SERVER | PTA_MOVDIRI
-- | PTA_MOVDIR64B | PTA_AVX512VP2INTERSECT | PTA_ENQCMD | PTA_CLDEMOTE
-- | PTA_PTWRITE | PTA_WAITPKG | PTA_SERIALIZE | PTA_TSXLDTRK | PTA_AMX_TILE
-- | PTA_AMX_INT8 | PTA_AMX_BF16 | PTA_UINTR | PTA_AVXVNNI | PTA_AVX512FP16
-- | PTA_AVX512BF16;
-+ | PTA_MOVDIR64B | PTA_ENQCMD | PTA_CLDEMOTE | PTA_PTWRITE | PTA_WAITPKG
-+ | PTA_SERIALIZE | PTA_TSXLDTRK | PTA_AMX_TILE | PTA_AMX_INT8 | PTA_AMX_BF16
-+ | PTA_UINTR | PTA_AVXVNNI | PTA_AVX512FP16 | PTA_AVX512BF16;
- constexpr wide_int_bitmask PTA_KNL = PTA_BROADWELL | PTA_AVX512PF
- | PTA_AVX512ER | PTA_AVX512F | PTA_AVX512CD | PTA_PREFETCHWT1;
- constexpr wide_int_bitmask PTA_BONNELL = PTA_CORE2 | PTA_MOVBE;
-diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
-index 3749e06f13e..cee057a70bf 100644
---- a/gcc/doc/invoke.texi
-+++ b/gcc/doc/invoke.texi
-@@ -31541,11 +31541,11 @@ Intel sapphirerapids CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
- SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
- RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
- AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
--AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2
-+AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
- VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB,
--MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG,
--SERIALIZE, TSXLDTRK, UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI, AVX512FP16
--and AVX512BF16 instruction set support.
-+MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK,
-+UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI, AVX512FP16 and AVX512BF16
-+instruction set support.
-
- @item alderlake
- Intel Alderlake CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
diff --git a/SOURCES/gcc12-dg-ice-fixes.patch b/SOURCES/gcc12-dg-ice-fixes.patch
index 49ecd55..4f581fa 100644
--- a/SOURCES/gcc12-dg-ice-fixes.patch
+++ b/SOURCES/gcc12-dg-ice-fixes.patch
@@ -1,13 +1,3 @@
---- a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr100400-1-2.c
-+++ b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr100400-1-2.c
-@@ -1,6 +1,6 @@
- /* { dg-additional-options "--param openacc-kernels=decompose" } */
-
--/* { dg-additional-options "-fchecking" }
-+/* { dg-additional-options "-fchecking -fno-report-bug" }
- { dg-ice TODO { c++ } }
- { dg-prune-output "during GIMPLE pass: omp_oacc_kernels_decompose" } */
-
--- a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr100400-1-3.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr100400-1-3.c
@@ -1,6 +1,6 @@
diff --git a/SOURCES/gcc12-fortran-fdec-non-logical-if.patch b/SOURCES/gcc12-fortran-fdec-non-logical-if.patch
index 9d952b2..a3a830c 100644
--- a/SOURCES/gcc12-fortran-fdec-non-logical-if.patch
+++ b/SOURCES/gcc12-fortran-fdec-non-logical-if.patch
@@ -26,17 +26,17 @@ diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
index 4a269ebb22d..d886c2f33ed 100644
--- a/gcc/fortran/lang.opt
+++ b/gcc/fortran/lang.opt
-@@ -502,6 +502,10 @@ fdec-math
- Fortran Var(flag_dec_math)
- Enable legacy math intrinsics for compatibility.
+@@ -506,6 +506,10 @@ fdec-override-kind
+ Fortran Var(flag_dec_override_kind)
+ Enable support for per variable kind specification.
+fdec-non-logical-if
+Fortran Var(flag_dec_non_logical_if)
+Enable support for non-logical expressions in if statements.
+
- fdec-override-kind
- Fortran Var(flag_dec_override_kind)
- Enable support for per variable kind specification.
+ fdec-structure
+ Fortran Var(flag_dec_structure)
+ Enable support for DEC STRUCTURE/RECORD.
diff --git a/gcc/fortran/options.cc b/gcc/fortran/options.cc
index edbab483b36..a946c86790a 100644
--- a/gcc/fortran/options.cc
diff --git a/SOURCES/gcc12-isl-dl.patch b/SOURCES/gcc12-isl-dl.patch
index 825fb88..824288b 100644
--- a/SOURCES/gcc12-isl-dl.patch
+++ b/SOURCES/gcc12-isl-dl.patch
@@ -26,7 +26,7 @@
# Generate header and source files from the machine description,
# and compile them.
--- gcc/graphite.h.jj 2016-01-27 12:44:06.000000000 +0100
-+++ gcc/graphite.h 2016-01-27 13:26:38.309876856 +0100
++++ gcc/graphite.h 2022-11-03 19:14:50.369690720 +0100
@@ -24,6 +24,591 @@ along with GCC; see the file COPYING3.
#include "sese.h"
@@ -41,15 +41,15 @@
+ DYNSYM (isl_aff_set_coefficient_si); \
+ DYNSYM (isl_aff_set_constant_si); \
+ DYNSYM (isl_aff_zero_on_domain); \
-+ DYNSYM (isl_band_free); \
-+ DYNSYM (isl_band_get_children); \
-+ DYNSYM (isl_band_get_partial_schedule); \
-+ DYNSYM (isl_band_has_children); \
-+ DYNSYM (isl_band_list_free); \
-+ DYNSYM (isl_band_list_get_band); \
-+ DYNSYM (isl_band_list_get_ctx); \
-+ DYNSYM (isl_band_list_n_band); \
-+ DYNSYM (isl_band_n_member); \
++ /* DYNSYM (isl_band_free); */ \
++ /* DYNSYM (isl_band_get_children); */ \
++ /* DYNSYM (isl_band_get_partial_schedule); */ \
++ /* DYNSYM (isl_band_has_children); */ \
++ /* DYNSYM (isl_band_list_free); */ \
++ /* DYNSYM (isl_band_list_get_band); */ \
++ /* DYNSYM (isl_band_list_get_ctx); */ \
++ /* DYNSYM (isl_band_list_n_band); */ \
++ /* DYNSYM (isl_band_n_member); */ \
+ DYNSYM (isl_basic_map_add_constraint); \
+ DYNSYM (isl_basic_map_project_out); \
+ DYNSYM (isl_basic_map_universe); \
@@ -91,7 +91,7 @@
+ DYNSYM (isl_map_is_empty); \
+ DYNSYM (isl_map_lex_ge); \
+ DYNSYM (isl_map_lex_le); \
-+ DYNSYM (isl_map_n_out); \
++ /* DYNSYM (isl_map_n_out); */ \
+ DYNSYM (isl_map_range); \
+ DYNSYM (isl_map_set_tuple_id); \
+ DYNSYM (isl_map_universe); \
@@ -124,7 +124,7 @@
+ DYNSYM (isl_pw_aff_sub); \
+ DYNSYM (isl_pw_aff_zero_set); \
+ DYNSYM (isl_schedule_free); \
-+ DYNSYM (isl_schedule_get_band_forest); \
++ /* DYNSYM (isl_schedule_get_band_forest); */ \
+ DYNSYM (isl_set_add_constraint); \
+ DYNSYM (isl_set_add_dims); \
+ DYNSYM (isl_set_apply); \
@@ -641,7 +641,7 @@
+
+ if (isl_pointers__.inited)
+ return isl_pointers__.h != NULL;
-+ h = dlopen ("libisl.so.15", RTLD_LAZY);
++ h = dlopen ("libisl.so.23", RTLD_LAZY);
+ isl_pointers__.h = h;
+ if (h == NULL)
+ return false;
diff --git a/SOURCES/gcc12-isl-dl2.patch b/SOURCES/gcc12-isl-dl2.patch
index 5402a8e..2e12499 100644
--- a/SOURCES/gcc12-isl-dl2.patch
+++ b/SOURCES/gcc12-isl-dl2.patch
@@ -2,7 +2,7 @@
* toplev.cc (toplev_main_argv): New variable.
(toplev_main): Initialize it.
- * graphite.cc (init_isl_pointers): Load libisl.so.15 from gcc's private
+ * graphite.cc (init_isl_pointers): Load libisl.so.23 from gcc's private
directory.
--- gcc/toplev.cc.jj 2008-12-09 23:59:10.000000000 +0100
@@ -39,12 +39,12 @@
if (isl_pointers__.inited)
return isl_pointers__.h != NULL;
-- h = dlopen ("libisl.so.15", RTLD_LAZY);
+- h = dlopen ("libisl.so.23", RTLD_LAZY);
+ len = progname - toplev_main_argv[0];
-+ buf = XALLOCAVAR (char, len + sizeof "libisl.so.15");
++ buf = XALLOCAVAR (char, len + sizeof "libisl.so.23");
+ memcpy (buf, toplev_main_argv[0], len);
-+ strcpy (buf + len, "libisl.so.15");
-+ len += sizeof "libisl.so.15";
++ strcpy (buf + len, "libisl.so.23");
++ len += sizeof "libisl.so.23";
+ p = strstr (buf, "/libexec/");
+ if (p != NULL)
+ {
@@ -61,7 +61,7 @@
+ {
+ len = progname - toplev_main_argv[0];
+ memcpy (buf, toplev_main_argv[0], len);
-+ strcpy (buf + len, "libisl.so.15");
++ strcpy (buf + len, "libisl.so.23");
+ }
+ }
+ if (h == NULL)
diff --git a/SOURCES/gcc12-libstdc++-compat.patch b/SOURCES/gcc12-libstdc++-compat.patch
index 62be090..b58a4cd 100644
--- a/SOURCES/gcc12-libstdc++-compat.patch
+++ b/SOURCES/gcc12-libstdc++-compat.patch
@@ -5961,7 +5961,7 @@
+} // namespace
+
+#endif // _GLIBCXX_HAS_GTHREADS
-+asm (".hidden _ZNSt18condition_variable4waitERSt11unique_lockISt5mutexE");
++//asm (".hidden _ZNSt18condition_variable4waitERSt11unique_lockISt5mutexE");
--- libstdc++-v3/src/nonshared11/eh_aux_runtime.cc.jj 2022-05-12 10:06:51.373502758 +0200
+++ libstdc++-v3/src/nonshared11/eh_aux_runtime.cc 2022-05-12 10:06:51.373502758 +0200
@@ -0,0 +1,38 @@
@@ -11329,7 +11329,7 @@
{
--- libstdc++-v3/src/nonshared17/floating_from_chars.cc.jj 2022-05-12 10:06:51.403502355 +0200
+++ libstdc++-v3/src/nonshared17/floating_from_chars.cc 2022-05-12 19:15:17.123406066 +0200
-@@ -0,0 +1,42 @@
+@@ -0,0 +1,39 @@
+// Copyright (C) 2019-2022 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
@@ -11360,9 +11360,6 @@
+asm (".hidden _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcENSt3pmr21polymorphic_allocatorIcEEE9_M_createERmm");
+asm (".hidden _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcENSt3pmr21polymorphic_allocatorIcEEE9_M_mutateEmmPKcm");
+#endif
-+#if defined(__s390x__) || defined(__powerpc64__)
-+asm (".hidden _ZSt10from_charsPKcS0_RgSt12chars_format");
-+#endif
+#ifndef __i386__
+asm (".hidden _ZSt10from_charsIiENSt9enable_ifIXsrSt5__or_IJS1_IJSt7is_sameINSt9remove_cvIT_E4typeEaES2_IS6_sES2_IS6_iES2_IS6_lES2_IS6_xES2_IS6_nEEES1_IJS2_IS6_hES2_IS6_tES2_IS6_jES2_IS6_mES2_IS6_yES2_IS6_oEEES2_IcS6_EEE5valueESt17from_chars_resultE4typeEPKcSR_RS4_i");
+asm (".hidden _ZSt10from_charsIiENSt9enable_ifIXsrSt5__or_IIS1_IISt7is_sameINSt9remove_cvIT_E4typeEaES2_IS6_sES2_IS6_iES2_IS6_lES2_IS6_xES2_IS6_nEEES1_IIS2_IS6_hES2_IS6_tES2_IS6_jES2_IS6_mES2_IS6_yES2_IS6_oEEES2_IcS6_EEE5valueESt17from_chars_resultE4typeEPKcSR_RS4_i");
@@ -11453,7 +11450,7 @@
+#endif
--- libstdc++-v3/src/nonshared17/cow-fs_path.cc.jj 2022-05-12 10:06:51.403502355 +0200
+++ libstdc++-v3/src/nonshared17/cow-fs_path.cc 2022-05-12 17:51:19.637951045 +0200
-@@ -0,0 +1,116 @@
+@@ -0,0 +1,128 @@
+// Copyright (C) 2019-2022 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
@@ -11534,12 +11531,12 @@
+//asm (".hidden _ZNKSt10filesystem4path5_List5_Impl4copyEv");
+asm (".hidden _ZNSt10filesystem4path10_S_convertIwEEDaPKT_S4_");
+asm (".hidden _ZNSt10filesystem8__detail24__throw_conversion_errorEv");
-+asm (".hidden _ZTIZNSt10filesystem4path10_S_convertIwEEDaPKT_S4_E5_UCvt");
-+asm (".hidden _ZTSZNSt10filesystem4path10_S_convertIwEEDaPKT_S4_E5_UCvt");
-+asm (".hidden _ZTVZNSt10filesystem4path10_S_convertIwEEDaPKT_S4_E5_UCvt");
-+asm (".hidden _ZZNSt10filesystem4path10_S_convertIwEEDaPKT_S4_EN5_UCvtD0Ev");
-+asm (".hidden _ZZNSt10filesystem4path10_S_convertIwEEDaPKT_S4_EN5_UCvtD1Ev");
-+asm (".hidden _ZZNSt10filesystem4path10_S_convertIwEEDaPKT_S4_EN5_UCvtD2Ev");
++//asm (".hidden _ZTIZNSt10filesystem4path10_S_convertIwEEDaPKT_S4_E5_UCvt");
++//asm (".hidden _ZTSZNSt10filesystem4path10_S_convertIwEEDaPKT_S4_E5_UCvt");
++//asm (".hidden _ZTVZNSt10filesystem4path10_S_convertIwEEDaPKT_S4_E5_UCvt");
++//asm (".hidden _ZZNSt10filesystem4path10_S_convertIwEEDaPKT_S4_EN5_UCvtD0Ev");
++//asm (".hidden _ZZNSt10filesystem4path10_S_convertIwEEDaPKT_S4_EN5_UCvtD1Ev");
++//asm (".hidden _ZZNSt10filesystem4path10_S_convertIwEEDaPKT_S4_EN5_UCvtD2Ev");
+#ifdef __powerpc64__
+//asm (".hidden _ZNSbIwSt11char_traitsIwESaIwEE6resizeEmw");
+//asm (".hidden _ZNSbIwSt11char_traitsIwESaIwEE7reserveEm");
@@ -11570,6 +11567,18 @@
+#ifdef __x86_64__
+asm (".hidden _ZSt16__do_str_codecvtISbIwSt11char_traitsIwESaIwEEcSt7codecvtIwc11__mbstate_tES5_MS6_KFNSt12codecvt_base6resultERS5_PKcSB_RSB_PwSD_RSD_EEbPKT0_SJ_RT_RKT1_RT2_RmT3_");
+#endif
++asm (".hidden _ZNSt10filesystem4path8_CodecvtIwED0Ev");
++asm (".hidden _ZNSt10filesystem4path8_CodecvtIwED1Ev");
++asm (".hidden _ZNSt10filesystem4path8_CodecvtIwED2Ev");
++asm (".hidden _ZNSt12codecvt_utf8IwLm1114111ELSt12codecvt_mode0EED0Ev");
++asm (".hidden _ZNSt12codecvt_utf8IwLm1114111ELSt12codecvt_mode0EED1Ev");
++asm (".hidden _ZNSt12codecvt_utf8IwLm1114111ELSt12codecvt_mode0EED2Ev");
++asm (".hidden _ZTINSt10filesystem4path8_CodecvtIwEE");
++asm (".hidden _ZTISt12codecvt_utf8IwLm1114111ELSt12codecvt_mode0EE");
++asm (".hidden _ZTSNSt10filesystem4path8_CodecvtIwEE");
++asm (".hidden _ZTSSt12codecvt_utf8IwLm1114111ELSt12codecvt_mode0EE");
++asm (".hidden _ZTVNSt10filesystem4path8_CodecvtIwEE");
++asm (".hidden _ZTVSt12codecvt_utf8IwLm1114111ELSt12codecvt_mode0EE");
--- libstdc++-v3/src/nonshared17/memory_resource.cc.jj 2022-05-12 10:06:51.403502355 +0200
+++ libstdc++-v3/src/nonshared17/memory_resource.cc 2022-05-12 10:06:51.403502355 +0200
@@ -0,0 +1,68 @@
@@ -11643,7 +11652,7 @@
+#endif
--- libstdc++-v3/src/nonshared17/fs_dir.cc.jj 2022-05-12 10:06:51.404502342 +0200
+++ libstdc++-v3/src/nonshared17/fs_dir.cc 2022-05-12 17:52:31.745989435 +0200
-@@ -0,0 +1,99 @@
+@@ -0,0 +1,98 @@
+// Copyright (C) 2019-2022 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
@@ -11737,9 +11746,8 @@
+#endif
+asm (".hidden _ZNSt10unique_ptrINSt10filesystem7__cxx114path5_List5_ImplENS3_13_Impl_deleterEED1Ev");
+asm (".hidden _ZNSt10unique_ptrINSt10filesystem7__cxx114path5_List5_ImplENS3_13_Impl_deleterEED2Ev");
-+#ifdef __i386__
-+//asm (".hidden _ZNSt5dequeINSt10filesystem7__cxx114_DirESaIS2_EE17_M_reallocate_mapEjb");
-+#endif
++asm (".hidden _ZNSt10filesystem7__cxx114_DirC1ERKNS0_4pathEbbbRSt10error_code");
++asm (".hidden _ZNSt10filesystem7__cxx114_DirC2ERKNS0_4pathEbbbRSt10error_code");
+asm (".hidden _ZNKSt10filesystem7__cxx114_Dir11open_subdirEbbRSt10error_code");
+asm (".hidden _ZNKSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stack12current_pathEv");
+asm (".hidden _ZNSt10filesystem7__cxx1128recursive_directory_iterator7__eraseEPSt10error_code");
@@ -11802,12 +11810,12 @@
+asm (".hidden _ZNSt10filesystem7__cxx114path10_S_convertIwEEDaPKT_S5_");
+#endif
+asm (".hidden _ZNSt10filesystem7__cxx118__detail24__throw_conversion_errorEv");
-+asm (".hidden _ZTIZNSt10filesystem7__cxx114path10_S_convertIwEEDaPKT_S5_E5_UCvt");
-+asm (".hidden _ZTSZNSt10filesystem7__cxx114path10_S_convertIwEEDaPKT_S5_E5_UCvt");
-+asm (".hidden _ZTVZNSt10filesystem7__cxx114path10_S_convertIwEEDaPKT_S5_E5_UCvt");
-+asm (".hidden _ZZNSt10filesystem7__cxx114path10_S_convertIwEEDaPKT_S5_EN5_UCvtD0Ev");
-+asm (".hidden _ZZNSt10filesystem7__cxx114path10_S_convertIwEEDaPKT_S5_EN5_UCvtD1Ev");
-+asm (".hidden _ZZNSt10filesystem7__cxx114path10_S_convertIwEEDaPKT_S5_EN5_UCvtD2Ev");
++//asm (".hidden _ZTIZNSt10filesystem7__cxx114path10_S_convertIwEEDaPKT_S5_E5_UCvt");
++//asm (".hidden _ZTSZNSt10filesystem7__cxx114path10_S_convertIwEEDaPKT_S5_E5_UCvt");
++//asm (".hidden _ZTVZNSt10filesystem7__cxx114path10_S_convertIwEEDaPKT_S5_E5_UCvt");
++//asm (".hidden _ZZNSt10filesystem7__cxx114path10_S_convertIwEEDaPKT_S5_EN5_UCvtD0Ev");
++//asm (".hidden _ZZNSt10filesystem7__cxx114path10_S_convertIwEEDaPKT_S5_EN5_UCvtD1Ev");
++//asm (".hidden _ZZNSt10filesystem7__cxx114path10_S_convertIwEEDaPKT_S5_EN5_UCvtD2Ev");
+#ifdef __powerpc64__
+asm (".hidden _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_replaceEmmPKcm");
+asm (".hidden _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6resizeEmc");
@@ -12066,7 +12074,7 @@
+ $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LTLDFLAGS) -o $@
--- libstdc++-v3/src/nonshared17/fs_path.cc.jj 2022-05-12 10:06:51.405502328 +0200
+++ libstdc++-v3/src/nonshared17/fs_path.cc 2022-05-12 19:01:33.346310778 +0200
-@@ -0,0 +1,91 @@
+@@ -0,0 +1,103 @@
+// Copyright (C) 2019-2022 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
@@ -12148,16 +12156,28 @@
+//asm (".hidden _ZNSt10filesystem7__cxx114pathaSISt17basic_string_viewIcSt11char_traitsIcEEEERNSt9enable_ifIXsrSt6__and_IJSt6__not_ISt7is_sameINSt9remove_cvIT_E4typeES1_EES9_ISt7is_voidINSt14remove_pointerISC_E4typeEEENS0_8__detail20__constructible_fromISC_vEEEE5valueES1_E4typeERKSC_");
+#endif
+#endif
-+asm (".hidden _ZTIZNSt10filesystem7__cxx114path10_S_convertIwEEDaPKT_S5_E5_UCvt");
-+asm (".hidden _ZTSZNSt10filesystem7__cxx114path10_S_convertIwEEDaPKT_S5_E5_UCvt");
-+asm (".hidden _ZTVZNSt10filesystem7__cxx114path10_S_convertIwEEDaPKT_S5_E5_UCvt");
-+asm (".hidden _ZZNSt10filesystem7__cxx114path10_S_convertIwEEDaPKT_S5_EN5_UCvtD0Ev");
-+asm (".hidden _ZZNSt10filesystem7__cxx114path10_S_convertIwEEDaPKT_S5_EN5_UCvtD1Ev");
-+asm (".hidden _ZZNSt10filesystem7__cxx114path10_S_convertIwEEDaPKT_S5_EN5_UCvtD2Ev");
++//asm (".hidden _ZTIZNSt10filesystem7__cxx114path10_S_convertIwEEDaPKT_S5_E5_UCvt");
++//asm (".hidden _ZTSZNSt10filesystem7__cxx114path10_S_convertIwEEDaPKT_S5_E5_UCvt");
++//asm (".hidden _ZTVZNSt10filesystem7__cxx114path10_S_convertIwEEDaPKT_S5_E5_UCvt");
++//asm (".hidden _ZZNSt10filesystem7__cxx114path10_S_convertIwEEDaPKT_S5_EN5_UCvtD0Ev");
++//asm (".hidden _ZZNSt10filesystem7__cxx114path10_S_convertIwEEDaPKT_S5_EN5_UCvtD1Ev");
++//asm (".hidden _ZZNSt10filesystem7__cxx114path10_S_convertIwEEDaPKT_S5_EN5_UCvtD2Ev");
+asm (".hidden _ZNSt10filesystem7__cxx114path10_S_convertIwEEDaPKT_S5_");
+asm (".hidden _ZNSt10filesystem7__cxx118__detail24__throw_conversion_errorEv");
+asm (".hidden _ZNSt12_Destroy_auxILb0EE9__destroyIPNSt10filesystem7__cxx114path5_CmptEEEvT_S7_");
+asm (".hidden _ZNKSt10filesystem7__cxx114path5_List5_Impl4copyEv");
++asm (".hidden _ZNSt10filesystem7__cxx114path8_CodecvtIwED0Ev");
++asm (".hidden _ZNSt10filesystem7__cxx114path8_CodecvtIwED1Ev");
++asm (".hidden _ZNSt10filesystem7__cxx114path8_CodecvtIwED2Ev");
++asm (".hidden _ZNSt12codecvt_utf8IwLm1114111ELSt12codecvt_mode0EED0Ev");
++asm (".hidden _ZNSt12codecvt_utf8IwLm1114111ELSt12codecvt_mode0EED1Ev");
++asm (".hidden _ZNSt12codecvt_utf8IwLm1114111ELSt12codecvt_mode0EED2Ev");
++asm (".hidden _ZTINSt10filesystem7__cxx114path8_CodecvtIwEE");
++asm (".hidden _ZTISt12codecvt_utf8IwLm1114111ELSt12codecvt_mode0EE");
++asm (".hidden _ZTSNSt10filesystem7__cxx114path8_CodecvtIwEE");
++asm (".hidden _ZTSSt12codecvt_utf8IwLm1114111ELSt12codecvt_mode0EE");
++asm (".hidden _ZTVNSt10filesystem7__cxx114path8_CodecvtIwEE");
++asm (".hidden _ZTVSt12codecvt_utf8IwLm1114111ELSt12codecvt_mode0EE");
--- libstdc++-v3/src/nonshared17/cow-string-inst.cc.jj 2022-05-12 10:06:51.405502328 +0200
+++ libstdc++-v3/src/nonshared17/cow-string-inst.cc 2022-05-12 10:06:51.405502328 +0200
@@ -0,0 +1,23 @@
@@ -13108,7 +13128,7 @@
+#include "../c++17/ostream-inst.cc"
--- libstdc++-v3/src/nonshared17/floating_to_chars.cc.jj 2022-05-12 10:06:51.407502301 +0200
+++ libstdc++-v3/src/nonshared17/floating_to_chars.cc 2022-05-12 10:06:51.407502301 +0200
-@@ -0,0 +1,88 @@
+@@ -0,0 +1,83 @@
+// Copyright (C) 2019-2022 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
@@ -13161,11 +13181,6 @@
+#if defined (__i386__) || defined (__s390x__)
+//asm (".hidden _ZNSt8__detail10__to_charsIjEESt15to_chars_resultPcS2_T_i"); //not s390x
+#endif
-+#if defined (__powerpc64__) || defined (__s390x__)
-+asm (".hidden _ZSt8to_charsPcS_g");
-+asm (".hidden _ZSt8to_charsPcS_gSt12chars_format");
-+asm (".hidden _ZSt8to_charsPcS_gSt12chars_formati");
-+#endif
+#if !defined (__powerpc64__) && !defined (__s390x__)
+asm (".hidden _ZNSt8__detail13__to_chars_16IoEENSt9enable_ifIXsrSt5__or_IIS2_IISt7is_sameINSt9remove_cvIT_E4typeEaES3_IS7_sES3_IS7_iES3_IS7_lES3_IS7_xES3_IS7_nEEES2_IIS3_IS7_hES3_IS7_tES3_IS7_jES3_IS7_mES3_IS7_yES3_IS7_oEEES3_IcS7_EEE5valueESt15to_chars_resultE4typeEPcSR_S5_");
+asm (".hidden _ZNSt8__detail13__to_chars_16IoEENSt9enable_ifIXsrSt5__or_IJS2_IJSt7is_sameINSt9remove_cvIT_E4typeEaES3_IS7_sES3_IS7_iES3_IS7_lES3_IS7_xES3_IS7_nEEES2_IJS3_IS7_hES3_IS7_tES3_IS7_jES3_IS7_mES3_IS7_yES3_IS7_oEEES3_IcS7_EEE5valueESt15to_chars_resultE4typeEPcSR_S5_");
diff --git a/SOURCES/gcc12-libstdc++-docs.patch b/SOURCES/gcc12-libstdc++-docs.patch
index 5a27a5d..b6c2d50 100644
--- a/SOURCES/gcc12-libstdc++-docs.patch
+++ b/SOURCES/gcc12-libstdc++-docs.patch
@@ -4,7 +4,7 @@
FSF
-+ Release 12.1.1
++ Release 12.2.1
+
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation
@@ -17,7 +17,7 @@
- The API documentation, rendered into HTML, can be viewed online
+ The API documentation, rendered into HTML, can be viewed locally
-+ for the 12.1.1 release,
++ for the 12.2.1 release,
+ online
for each GCC release
and
diff --git a/SOURCES/gcc12-libtsan-s390x.patch b/SOURCES/gcc12-libtsan-s390x.patch
deleted file mode 100644
index 4241d43..0000000
--- a/SOURCES/gcc12-libtsan-s390x.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-commit r12-8527-g7811663964aa7e31c3939b859bbfa2e16919639f
-Author: Martin Liska
-Date: Wed Jun 29 15:28:07 2022 +0200
-
- libsanitizer: cherry-pick 791e0d1bc85d
-
- 791e0d1bc85d: [compiler-rt] Add NO_EXEC_STACK_DIRECTIVE on s390x
- (cherry picked from commit aa87b7541b4c11f59c521154513f844ea6b5c977)
-
---- libsanitizer/tsan/tsan_rtl_s390x.S
-+++ libsanitizer/tsan/tsan_rtl_s390x.S
-@@ -45,3 +45,5 @@ intercept setjmp, _ZN14__interception11real_setjmpE
- intercept _setjmp, _ZN14__interception12real__setjmpE
- intercept sigsetjmp, _ZN14__interception14real_sigsetjmpE
- intercept __sigsetjmp, _ZN14__interception16real___sigsetjmpE
-+
-+NO_EXEC_STACK_DIRECTIVE
diff --git a/SOURCES/gcc12-pr105551.patch b/SOURCES/gcc12-pr105551.patch
deleted file mode 100644
index ce8be26..0000000
--- a/SOURCES/gcc12-pr105551.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-2022-05-11 Richard Biener
-
- PR bootstrap/105551
- * opts.cc (finish_options): Also disable var-tracking if
- !DWARF2_DEBUGGING_INFO.
-
---- gcc/opts.cc
-+++ gcc/opts.cc
-@@ -1334,11 +1334,15 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set,
- || opts->x_flag_selective_scheduling2));
-
- /* We know which debug output will be used so we can set flag_var_tracking
-- and flag_var_tracking_uninit if the user has not specified them. Note
-- we have not yet initialized debug_hooks so we might uselessly run
-- var-tracking on targets without var_location debug hook support. */
-+ and flag_var_tracking_uninit if the user has not specified them. */
- if (opts->x_debug_info_level < DINFO_LEVEL_NORMAL
-- || !dwarf_debuginfo_p (opts))
-+ || !dwarf_debuginfo_p (opts)
-+ /* We have not yet initialized debug hooks so match that to check
-+ whether we're only doing DWARF2_LINENO_DEBUGGING_INFO. */
-+#ifndef DWARF2_DEBUGGING_INFO
-+ || true
-+#endif
-+ )
- {
- if ((opts_set->x_flag_var_tracking && opts->x_flag_var_tracking == 1)
- || (opts_set->x_flag_var_tracking_uninit
diff --git a/SOURCES/gcc12-pr105991.patch b/SOURCES/gcc12-pr105991.patch
deleted file mode 100644
index b9e12f4..0000000
--- a/SOURCES/gcc12-pr105991.patch
+++ /dev/null
@@ -1,89 +0,0 @@
-commit 6c175b3d170de2bb02b7bd45b3348eec05d28451
-Author: Roger Sayle
-Date: Mon Jul 4 13:58:37 2022 +0100
-
- PR target/105991: Recognize PLUS and XOR forms of rldimi in rs6000.md.
-
- This patch addresses PR target/105991 where a change to prefer representing
- shifts and adds at the tree-level as multiplications, causes problems for
- the rldimi patterns in the powerpc backend. The issue is that rs6000.md
- models this pattern using IOR, and some variants that have the equivalent
- PLUS or XOR in the RTL fail to match some *rotl4_insert patterns.
- This is fixed in this patch by adding a define_insn_and_split to locally
- canonicalize the PLUS and XOR forms to the backend's preferred IOR form.
-
- Backported from master.
-
- 2022-07-04 Roger Sayle
- Marek Polacek
- Segher Boessenkool
- Kewen Lin
-
- gcc/ChangeLog
- PR target/105991
- * config/rs6000/rs6000.md (rotl3_insert_3): Check that
- exact_log2 doesn't return -1 (or zero).
- (plus_xor): New code iterator.
- (*rotl3_insert_3_): New define_insn_and_split.
-
- gcc/testsuite/ChangeLog
- PR target/105991
- * gcc.target/powerpc/pr105991.c: New test case.
-
-diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
-index 64049a6e521..6082ded8c31 100644
---- a/gcc/config/rs6000/rs6000.md
-+++ b/gcc/config/rs6000/rs6000.md
-@@ -4178,7 +4178,8 @@ (define_insn "rotl3_insert_3"
- (match_operand:GPR 4 "const_int_operand" "n"))
- (ashift:GPR (match_operand:GPR 1 "gpc_reg_operand" "r")
- (match_operand:SI 2 "const_int_operand" "n"))))]
-- "INTVAL (operands[2]) == exact_log2 (UINTVAL (operands[4]) + 1)"
-+ "INTVAL (operands[2]) > 0
-+ && INTVAL (operands[2]) == exact_log2 (UINTVAL (operands[4]) + 1)"
- {
- if (mode == SImode)
- return "rlwimi %0,%1,%h2,0,31-%h2";
-@@ -4187,6 +4188,24 @@ (define_insn "rotl3_insert_3"
- }
- [(set_attr "type" "insert")])
-
-+; Canonicalize the PLUS and XOR forms to IOR for rotl3_insert_3
-+(define_code_iterator plus_xor [plus xor])
-+
-+(define_insn_and_split "*rotl3_insert_3_"
-+ [(set (match_operand:GPR 0 "gpc_reg_operand" "=r")
-+ (plus_xor:GPR
-+ (and:GPR (match_operand:GPR 3 "gpc_reg_operand" "0")
-+ (match_operand:GPR 4 "const_int_operand" "n"))
-+ (ashift:GPR (match_operand:GPR 1 "gpc_reg_operand" "r")
-+ (match_operand:SI 2 "const_int_operand" "n"))))]
-+ "INTVAL (operands[2]) > 0
-+ && INTVAL (operands[2]) == exact_log2 (UINTVAL (operands[4]) + 1)"
-+ "#"
-+ "&& 1"
-+ [(set (match_dup 0)
-+ (ior:GPR (and:GPR (match_dup 3) (match_dup 4))
-+ (ashift:GPR (match_dup 1) (match_dup 2))))])
-+
- (define_code_iterator plus_ior_xor [plus ior xor])
-
- (define_split
-diff --git a/gcc/testsuite/gcc.target/powerpc/pr105991.c b/gcc/testsuite/gcc.target/powerpc/pr105991.c
-new file mode 100644
-index 00000000000..0d9d130cb63
---- /dev/null
-+++ b/gcc/testsuite/gcc.target/powerpc/pr105991.c
-@@ -0,0 +1,12 @@
-+/* { dg-do compile } */
-+/* { dg-options "-O2" } */
-+/* { dg-require-effective-target lp64 } */
-+unsigned long long
-+foo (unsigned long long value)
-+{
-+ value &= 0xffffffff;
-+ value |= value << 32;
-+ return value;
-+}
-+/* { dg-final { scan-assembler {\mrldimi\M} } } */
-+
diff --git a/SOURCES/gcc12-pr107468.patch b/SOURCES/gcc12-pr107468.patch
new file mode 100644
index 0000000..0949b11
--- /dev/null
+++ b/SOURCES/gcc12-pr107468.patch
@@ -0,0 +1,124 @@
+libstdc++: Update from latest fast_float [PR107468]
+
+The following patch is a cherry-pick from
+https://github.com/fastfloat/fast_float/pull/153
+to restrict fast_float Clinger's fast path to when rounding mode
+is FE_TONEAREST.
+Using std::fegetround showed in benchmarks too slow, so instead
+it uses a check with 2 float additions and comparison to verify
+if rounding is FE_TONEAREST.
+
+2022-11-20 Jakub Jelinek
+
+ PR libstdc++/107468
+ * src/c++17/fast_float/fast_float.h (detail::rounds_to_nearest): New
+ function, taken from https://github.com/fastfloat/fast_float/pull/153.
+ (from_chars_advanced): Only use Clinger's fast path if
+ detail::rounds_to_nearest().
+ * testsuite/20_util/from_chars/pr107468.cc: New test.
+
+--- libstdc++-v3/src/c++17/fast_float/fast_float.h.jj 2022-04-28 15:56:18.315632888 +0200
++++ libstdc++-v3/src/c++17/fast_float/fast_float.h 2022-11-20 18:53:49.570830249 +0100
+@@ -2842,6 +2842,48 @@ from_chars_result parse_infnan(const cha
+ return answer;
+ }
+
++/**
++ * Returns true if the floating-pointing rounding mode is to 'nearest'.
++ * It is the default on most system. This function is meant to be inexpensive.
++ * Credit : @mwalcott3
++ */
++fastfloat_really_inline bool rounds_to_nearest() noexcept {
++ // See
++ // A fast function to check your floating-point rounding mode
++ // https://lemire.me/blog/2022/11/16/a-fast-function-to-check-your-floating-point-rounding-mode/
++ //
++ // This function is meant to be equivalent to :
++ // prior: #include
++ // return fegetround() == FE_TONEAREST;
++ // However, it is expected to be much faster than the fegetround()
++ // function call.
++ //
++ // The volatile keywoard prevents the compiler from computing the function
++ // at compile-time.
++ // There might be other ways to prevent compile-time optimizations (e.g., asm).
++ // The value does not need to be std::numeric_limits::min(), any small
++ // value so that 1 + x should round to 1 would do (after accounting for excess
++ // precision, as in 387 instructions).
++ static volatile float fmin = std::numeric_limits::min();
++ float fmini = fmin; // we copy it so that it gets loaded at most once.
++ //
++ // Explanation:
++ // Only when fegetround() == FE_TONEAREST do we have that
++ // fmin + 1.0f == 1.0f - fmin.
++ //
++ // FE_UPWARD:
++ // fmin + 1.0f > 1
++ // 1.0f - fmin == 1
++ //
++ // FE_DOWNWARD or FE_TOWARDZERO:
++ // fmin + 1.0f == 1
++ // 1.0f - fmin < 1
++ //
++ // Note: This may fail to be accurate if fast-math has been
++ // enabled, as rounding conventions may not apply.
++ return (fmini + 1.0f == 1.0f - fmini);
++}
++
+ } // namespace detail
+
+ template
+@@ -2870,7 +2912,7 @@ from_chars_result from_chars_advanced(co
+ answer.ec = std::errc(); // be optimistic
+ answer.ptr = pns.lastmatch;
+ // Next is Clinger's fast path.
+- if (binary_format::min_exponent_fast_path() <= pns.exponent && pns.exponent <= binary_format::max_exponent_fast_path() && pns.mantissa <=binary_format::max_mantissa_fast_path() && !pns.too_many_digits) {
++ if (binary_format::min_exponent_fast_path() <= pns.exponent && pns.exponent <= binary_format::max_exponent_fast_path() && pns.mantissa <=binary_format::max_mantissa_fast_path() && !pns.too_many_digits && detail::rounds_to_nearest()) {
+ value = T(pns.mantissa);
+ if (pns.exponent < 0) { value = value / binary_format::exact_power_of_ten(-pns.exponent); }
+ else { value = value * binary_format::exact_power_of_ten(pns.exponent); }
+--- libstdc++-v3/testsuite/20_util/from_chars/pr107468.cc.jj
++++ libstdc++-v3/testsuite/20_util/from_chars/pr107468.cc
+@@ -0,0 +1,42 @@
++// Copyright (C) 2022 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// .
++
++// { dg-do run { target c++17 } }
++// { dg-add-options ieee }
++
++#include
++#include
++#include
++#include
++
++int
++main()
++{
++ // FP from_char not available otherwise.
++#if __cpp_lib_to_chars >= 201611L \
++ && _GLIBCXX_USE_C99_FENV_TR1 \
++ && defined(FE_DOWNWARD) \
++ && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
++ // PR libstdc++/107468
++ float f;
++ char buf[] = "3.355447e+07";
++ std::fesetround(FE_DOWNWARD);
++ auto [ptr, ec] = std::from_chars(buf, buf + sizeof(buf) - 1, f, std::chars_format::scientific);
++ VERIFY( ec == std::errc() && ptr == buf + sizeof(buf) - 1 );
++ VERIFY( f == 33554472.0f );
++#endif
++}
diff --git a/SOURCES/gcc12-static-libquadmath.patch b/SOURCES/gcc12-static-libquadmath.patch
new file mode 100644
index 0000000..43974ed
--- /dev/null
+++ b/SOURCES/gcc12-static-libquadmath.patch
@@ -0,0 +1,178 @@
+2022-08-17 Francois-Xavier Coudert
+ Jakub Jelinek
+
+ PR fortran/46539
+gcc/
+ * common.opt (static-libquadmath): New option.
+ * gcc.cc (driver_handle_option): Always accept -static-libquadmath.
+ * config/darwin.h (LINK_SPEC): Handle -static-libquadmath.
+gcc/fortran/
+ * lang.opt (static-libquadmath): New option.
+ * invoke.texi (-static-libquadmath): Document it.
+libgfortran/
+ * acinclude.m4 (LIBQUADSPEC): From $FC -static-libgfortran -###
+ output determine -Bstatic/-Bdynamic, -bstatic/-bdynamic,
+ -aarchive_shared/-adefault linker support or Darwin remapping
+ of -lgfortran to libgfortran.a%s and use that around or instead
+ of -lquadmath in LIBQUADSPEC.
+ * configure: Regenerated.
+
+--- gcc/common.opt.jj 2022-04-28 15:56:02.822846833 +0200
++++ gcc/common.opt 2022-09-29 19:41:37.250880668 +0200
+@@ -3563,6 +3563,10 @@ static-libphobos
+ Driver
+ ; Documented for D, but always accepted by driver.
+
++static-libquadmath
++Driver
++; Documented for Fortran, but always accepted by driver.
++
+ static-libstdc++
+ Driver
+
+--- gcc/gcc.cc.jj 2022-04-28 15:56:04.771819920 +0200
++++ gcc/gcc.cc 2022-09-29 19:41:37.296880041 +0200
+@@ -4583,12 +4583,14 @@ driver_handle_option (struct gcc_options
+ case OPT_static_libgcc:
+ case OPT_shared_libgcc:
+ case OPT_static_libgfortran:
++ case OPT_static_libquadmath:
+ case OPT_static_libphobos:
+ case OPT_static_libstdc__:
+ /* These are always valid, since gcc.cc itself understands the
+ first two, gfortranspec.cc understands -static-libgfortran,
+- d-spec.cc understands -static-libphobos, and g++spec.cc
+- understands -static-libstdc++ */
++ d-spec.cc understands -static-libphobos, g++spec.cc
++ understands -static-libstdc++ and libgfortran.spec handles
++ -static-libquadmath. */
+ validated = true;
+ break;
+
+--- gcc/config/darwin.h.jj 2022-06-18 21:56:40.666675606 +0200
++++ gcc/config/darwin.h 2022-09-29 19:41:37.261880518 +0200
+@@ -443,6 +443,7 @@ extern GTY(()) int darwin_ms_struct;
+ %:replace-outfile(-lobjc libobjc-gnu.a%s); \
+ :%:replace-outfile(-lobjc -lobjc-gnu )}}\
+ %{static|static-libgcc|static-libgfortran:%:replace-outfile(-lgfortran libgfortran.a%s)}\
++ %{static|static-libgcc|static-libquadmath:%:replace-outfile(-lquadmath libquadmath.a%s)}\
+ %{static|static-libgcc|static-libphobos:%:replace-outfile(-lgphobos libgphobos.a%s)}\
+ %{static|static-libgcc|static-libstdc++|static-libgfortran:%:replace-outfile(-lgomp libgomp.a%s)}\
+ %{static|static-libgcc|static-libstdc++:%:replace-outfile(-lstdc++ libstdc++.a%s)}\
+--- gcc/fortran/lang.opt.jj 2022-04-28 15:56:04.579822571 +0200
++++ gcc/fortran/lang.opt 2022-09-29 19:41:37.279880273 +0200
+@@ -863,6 +863,10 @@ static-libgfortran
+ Fortran
+ Statically link the GNU Fortran helper library (libgfortran).
+
++static-libquadmath
++Driver
++Statically link the GCC Quad-Precision Math Library (libquadmath).
++
+ std=f2003
+ Fortran
+ Conform to the ISO Fortran 2003 standard.
+--- gcc/fortran/invoke.texi.jj 2022-04-29 15:51:59.080720092 +0200
++++ gcc/fortran/invoke.texi 2022-09-29 19:41:37.273880354 +0200
+@@ -170,7 +170,7 @@ and warnings}.
+
+ @item Link Options
+ @xref{Link Options,,Options for influencing the linking step}.
+-@gccoptlist{-static-libgfortran}
++@gccoptlist{-static-libgfortran -static-libquadmath}
+
+ @item Runtime Options
+ @xref{Runtime Options,,Options for influencing runtime behavior}.
+@@ -1425,6 +1425,20 @@ configured, this option has no effect.
+ @end table
+
+
++@table @gcctabopt
++@item -static-libquadmath
++@opindex @code{static-libquadmath}
++On systems that provide @file{libquadmath} as a shared and a static
++library, this option forces the use of the static version. If no
++shared version of @file{libquadmath} was built when the compiler was
++configured, this option has no effect.
++
++Please note that the @file{libquadmath} runtime library is licensed under the
++GNU Lesser General Public License (LGPL), and linking it statically introduces
++requirements when redistributing the resulting binaries.
++@end table
++
++
+ @node Runtime Options
+ @section Influencing runtime behavior
+ @cindex options, runtime
+--- libgfortran/acinclude.m4.jj 2022-09-29 19:41:37.306879904 +0200
++++ libgfortran/acinclude.m4 2022-09-29 19:42:42.641988408 +0200
+@@ -338,11 +338,32 @@ AC_DEFUN([LIBGFOR_CHECK_FLOAT128], [
+ ac_[]_AC_LANG_ABBREV[]_werror_flag=$ac_xsave_[]_AC_LANG_ABBREV[]_werror_flag
+ ])
+
++ dnl Determine -Bstatic ... -Bdynamic etc. support from gfortran -### stderr.
++ touch conftest1.$ac_objext conftest2.$ac_objext
++ LQUADMATH=-lquadmath
++ $FC -static-libgfortran -### -o conftest \
++ conftest1.$ac_objext -lgfortran conftest2.$ac_objext 2>&1 >/dev/null \
++ | grep "conftest1.$ac_objext.*conftest2.$ac_objext" > conftest.cmd
++ if grep "conftest1.$ac_objext.* -Bstatic -lgfortran -Bdynamic .*conftest2.$ac_objext" \
++ conftest.cmd >/dev/null 2>&1; then
++ LQUADMATH="%{static-libquadmath:-Bstatic} -lquadmath %{static-libquadmath:-Bdynamic}"
++ elif grep "conftest1.$ac_objext.* -bstatic -lgfortran -bdynamic .*conftest2.$ac_objext" \
++ conftest.cmd >/dev/null 2>&1; then
++ LQUADMATH="%{static-libquadmath:-bstatic} -lquadmath %{static-libquadmath:-bdynamic}"
++ elif grep "conftest1.$ac_objext.* -aarchive_shared -lgfortran -adefault .*conftest2.$ac_objext" \
++ conftest.cmd >/dev/null 2>&1; then
++ LQUADMATH="%{static-libquadmath:-aarchive_shared} -lquadmath %{static-libquadmath:-adefault}"
++ elif grep "conftest1.$ac_objext.*libgfortran.a .*conftest2.$ac_objext" \
++ conftest.cmd >/dev/null 2>&1; then
++ LQUADMATH="%{static-libquadmath:libquadmath.a%s;:-lquadmath}"
++ fi
++ rm -f conftest1.$ac_objext conftest2.$ac_objext conftest conftest.cmd
++
+ dnl For static libgfortran linkage, depend on libquadmath only if needed.
+ if test "x$libgfor_cv_have_as_needed" = xyes; then
+- LIBQUADSPEC="%{static-libgfortran:$libgfor_cv_as_needed_option} -lquadmath %{static-libgfortran:$libgfor_cv_no_as_needed_option}"
++ LIBQUADSPEC="%{static-libgfortran:$libgfor_cv_as_needed_option} $LQUADMATH %{static-libgfortran:$libgfor_cv_no_as_needed_option}"
+ else
+- LIBQUADSPEC="-lquadmath"
++ LIBQUADSPEC="$LQUADMATH"
+ fi
+ if test -f ../libquadmath/libquadmath.la; then
+ LIBQUADLIB=../libquadmath/libquadmath.la
+--- libgfortran/configure.jj 2022-09-29 19:41:37.345879372 +0200
++++ libgfortran/configure 2022-09-29 19:42:59.878753212 +0200
+@@ -27301,10 +27301,30 @@ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libgfor_cv_have_as_needed" >&5
+ $as_echo "$libgfor_cv_have_as_needed" >&6; }
+
++ touch conftest1.$ac_objext conftest2.$ac_objext
++ LQUADMATH=-lquadmath
++ $FC -static-libgfortran -### -o conftest \
++ conftest1.$ac_objext -lgfortran conftest2.$ac_objext 2>&1 >/dev/null \
++ | grep "conftest1.$ac_objext.*conftest2.$ac_objext" > conftest.cmd
++ if grep "conftest1.$ac_objext.* -Bstatic -lgfortran -Bdynamic .*conftest2.$ac_objext" \
++ conftest.cmd >/dev/null 2>&1; then
++ LQUADMATH="%{static-libquadmath:-Bstatic} -lquadmath %{static-libquadmath:-Bdynamic}"
++ elif grep "conftest1.$ac_objext.* -bstatic -lgfortran -bdynamic .*conftest2.$ac_objext" \
++ conftest.cmd >/dev/null 2>&1; then
++ LQUADMATH="%{static-libquadmath:-bstatic} -lquadmath %{static-libquadmath:-bdynamic}"
++ elif grep "conftest1.$ac_objext.* -aarchive_shared -lgfortran -adefault .*conftest2.$ac_objext" \
++ conftest.cmd >/dev/null 2>&1; then
++ LQUADMATH="%{static-libquadmath:-aarchive_shared} -lquadmath %{static-libquadmath:-adefault}"
++ elif grep "conftest1.$ac_objext.*libgfortran.a .*conftest2.$ac_objext" \
++ conftest.cmd >/dev/null 2>&1; then
++ LQUADMATH="%{static-libquadmath:libquadmath.a%s;:-lquadmath}"
++ fi
++ rm -f conftest1.$ac_objext conftest2.$ac_objext conftest conftest.cmd
++
+ if test "x$libgfor_cv_have_as_needed" = xyes; then
+- LIBQUADSPEC="%{static-libgfortran:$libgfor_cv_as_needed_option} -lquadmath %{static-libgfortran:$libgfor_cv_no_as_needed_option}"
++ LIBQUADSPEC="%{static-libgfortran:$libgfor_cv_as_needed_option} $LQUADMATH %{static-libgfortran:$libgfor_cv_no_as_needed_option}"
+ else
+- LIBQUADSPEC="-lquadmath"
++ LIBQUADSPEC="$LQUADMATH"
+ fi
+ if test -f ../libquadmath/libquadmath.la; then
+ LIBQUADLIB=../libquadmath/libquadmath.la
diff --git a/SOURCES/gcc12-testsuite-typo.patch b/SOURCES/gcc12-testsuite-typo.patch
new file mode 100644
index 0000000..7218da2
--- /dev/null
+++ b/SOURCES/gcc12-testsuite-typo.patch
@@ -0,0 +1,41 @@
+From 023c5b36e476976cb3b45ff32c7c64990c5a6d45 Mon Sep 17 00:00:00 2001
+From: Kewen Lin
+Date: Thu, 1 Sep 2022 00:27:11 -0500
+Subject: [PATCH] rs6000/test: Fix typo in pr86731-fwrapv-longlong.c [PR106682]
+
+Commit r12-2266 updated the scanned assembly content from
+
+ "{\mlvx\M|\mlxv\M|\mlxvd2x\M}"
+
+to
+
+ "{\mp?lxv\M|\mlxv\M|\mlxvd2x\M}"
+
+for the test case pr86731-fwrapv-longlong.c unexpectedly.
+
+It's meant to update "lxv" to "p?lxv", should leave the
+"lvx" unchanged. So fix the typo accordingly.
+
+ PR testsuite/106682
+
+gcc/testsuite/ChangeLog:
+
+ * gcc.target/powerpc/pr86731-fwrapv-longlong.c: Fix typo.
+---
+ gcc/testsuite/gcc.target/powerpc/pr86731-fwrapv-longlong.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/gcc/testsuite/gcc.target/powerpc/pr86731-fwrapv-longlong.c b/gcc/testsuite/gcc.target/powerpc/pr86731-fwrapv-longlong.c
+index dcb30e1d886..018e1cf9749 100644
+--- a/gcc/testsuite/gcc.target/powerpc/pr86731-fwrapv-longlong.c
++++ b/gcc/testsuite/gcc.target/powerpc/pr86731-fwrapv-longlong.c
+@@ -31,5 +31,5 @@ vector signed long long splats4(void)
+
+ /* { dg-final { scan-assembler-times {\mvspltis[bhw]\M} 0 } } */
+ /* { dg-final { scan-assembler-times {\mvsl[bhwd]\M} 0 } } */
+-/* { dg-final { scan-assembler-times {\mp?lxv\M|\mlxv\M|\mlxvd2x\M|\mxxspltidp\M} 2 } } */
++/* { dg-final { scan-assembler-times {\mp?lxv\M|\mlvx\M|\mlxvd2x\M|\mxxspltidp\M} 2 } } */
+
+--
+2.31.1
+
diff --git a/SPECS/gcc.spec b/SPECS/gcc.spec
index 6d5a56d..03436f3 100644
--- a/SPECS/gcc.spec
+++ b/SPECS/gcc.spec
@@ -2,17 +2,17 @@
%{?scl:%global __strip %%{_scl_root}/usr/bin/strip}
%{?scl:%global __objdump %%{_scl_root}/usr/bin/objdump}
%{?scl:%scl_package gcc}
-%global DATE 20220628
-%global gitrev 874cb9452c56f1c3b3a7b5bfed93a262504b9856
-%global gcc_version 12.1.1
+%global DATE 20221121
+%global gitrev b3f5a0d53b84ed27cf00cfa2b9c3e2c78935c07d
+%global gcc_version 12.2.1
%global gcc_major 12
# Note, gcc_release must be integer, if you want to add suffixes to
# %%{release}, append them after %%{gcc_release} on Release: line.
-%global gcc_release 3
-%global nvptx_tools_gitrev 5f6f343a302d620b0868edab376c00b15741e39e
-%global newlib_cygwin_gitrev 50e2a63b04bdd018484605fbb954fd1bd5147fa0
+%global gcc_release 4
+%global nvptx_tools_gitrev 472b6e78b3ba918d727698f79911360b7c808247
+%global newlib_cygwin_gitrev a8526cb52bedabd4d6ba4b227a5185627f871aa1
%global mpc_version 1.0.3
-%global isl_version 0.18
+%global isl_version 0.24
%global mpfr_version 3.1.4
%global gmp_version 6.1.0
%global doxygen_version 1.8.0
@@ -51,7 +51,7 @@
%else
%global build_go 0
%endif
-%ifarch %{ix86} x86_64 %{arm} %{mips} s390 s390x riscv64
+%ifarch %{ix86} x86_64 %{arm} aarch64 %{mips} s390 s390x riscv64
%global build_d 1
%else
%global build_d 0
@@ -147,7 +147,7 @@
Summary: GCC version 12
Name: %{?scl_prefix}gcc
Version: %{gcc_version}
-Release: %{gcc_release}.4%{?dist}
+Release: %{gcc_release}.1%{?dist}
# libgcc, libgfortran, libgomp, libstdc++ and crtstuff have
# GCC Runtime Exception.
License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD
@@ -348,12 +348,9 @@ Patch8: gcc12-no-add-needed.patch
Patch9: gcc12-Wno-format-security.patch
Patch10: gcc12-rh1574936.patch
Patch11: gcc12-d-shared-libphobos.patch
-Patch12: gcc12-pr105551.patch
-Patch13: gcc12-libtsan-s390x.patch
-# This has been backported to GCC 12, so eventually we can drop it.
-Patch14: gcc12-pr105991.patch
-# For DTS 12.0.z.
-Patch15: gcc12-detect-sapphirerapids.patch
+Patch12: gcc12-pr107468.patch
+Patch15: gcc12-static-libquadmath.patch
+Patch16: gcc12-FMA-chains.patch
Patch100: gcc12-fortran-fdec-duplicates.patch
Patch101: gcc12-fortran-flogical-as-integer.patch
@@ -388,6 +385,7 @@ Patch3016: 0019-xfails.patch
Patch3017: 0020-more-fixes.patch
Patch3018: 0021-libstdc++-disable-tests.patch
Patch3019: 0022-libstdc++-revert-behavior.patch
+Patch3020: gcc12-testsuite-typo.patch
%if 0%{?rhel} == 9
%global nonsharedver 110
@@ -729,10 +727,9 @@ so that there cannot be any synchronization problems.
%patch10 -p0 -b .rh1574936~
%endif
%patch11 -p0 -b .d-shared-libphobos~
-%patch12 -p0 -b .pr105551~
-%patch13 -p0 -b .libtsan-s390x~
-%patch14 -p1 -b .pr105991~
-%patch15 -p1 -b .detect-spr~
+%patch12 -p0 -b .pr107468~
+%patch15 -p0 -b .static-libquadmath~
+%patch16 -p1 -b .fma~
%if 0%{?rhel} >= 6
%patch100 -p1 -b .fortran-fdec-duplicates~
@@ -794,6 +791,7 @@ cd ..
%if 0%{?rhel} <= 7
%patch3019 -p1 -b .dts-test-19~
%endif
+%patch3020 -p1 -b .typo
find gcc/testsuite -name \*.pr96939~ | xargs rm -f
@@ -983,7 +981,7 @@ ISL_FLAG_PIC=-fPIC
ISL_FLAG_PIC=-fpic
%endif
cd isl-build
-sed -i 's|libisl|libgcc12privateisl|g' \
+sed -i 's|libisl\([^-]\)|libgcc12privateisl\1|g' \
../../isl-%{isl_version}/Makefile.{am,in}
../../isl-%{isl_version}/configure \
CC=/usr/bin/gcc CXX=/usr/bin/g++ \
@@ -991,9 +989,9 @@ sed -i 's|libisl|libgcc12privateisl|g' \
make %{?_smp_mflags}
make install
cd ../isl-install/lib
-rm libgcc12privateisl.so{,.15}
-mv libgcc12privateisl.so.15.3.0 libisl.so.15
-ln -sf libisl.so.15 libisl.so
+rm libgcc12privateisl.so{,.23}
+mv libgcc12privateisl.so.23.1.0 libisl.so.23
+ln -sf libisl.so.23 libisl.so
cd ../..
%endif
@@ -1215,7 +1213,7 @@ make jit.sphinx.install-html jit_htmldir=`pwd`/../../rpm.doc/libgccjit-devel/htm
cd ..
%if %{build_isl}
-cp -a isl-install/lib/libisl.so.15 gcc/
+cp -a isl-install/lib/libisl.so.23 gcc/
%endif
# Make generated man pages even if Pod::Man is not new enough
@@ -1397,7 +1395,7 @@ ln -sf ../../../../bin/strip $FULLEPATH/strip
%endif
%if %{build_isl}
-cp -a isl-install/lib/libisl.so.15 $FULLPATH/
+cp -a isl-install/lib/libisl.so.23 $FULLPATH/
%endif
# fix some things
@@ -2102,6 +2100,10 @@ ln -s ../../libexec/gcc/%{gcc_target_platform}/%{gcc_major}/liblto_plugin.so \
%check
cd obj-%{gcc_target_platform}
+%ifarch s390x
+exit 0
+%endif
+
%{?scl:PATH=%{_bindir}${PATH:+:${PATH}}}
# Test against the system libstdc++.so.6 + libstdc++_nonshared.a combo
mv %{gcc_target_platform}/libstdc++-v3/src/.libs/libstdc++.so.6{,.not_here}
@@ -2960,8 +2962,19 @@ fi
%endif
%changelog
-* Thu Dec 1 2022 Marek Polacek 12.1.1-3.4
-- fix Sapphire Rapids detection in host_detect_local_cpu (#2150135)
+* Fri Feb 10 2023 Marek Polacek 12.2.1-4.1
+- avoid fma_chain for -march=alderlake and sapphirerapids (#2168916)
+
+* Wed Nov 23 2022 Marek Polacek 12.2.1-4
+- update from releases/gcc-12 branch (#2110580)
+- fix up std::from_chars behavior in rounding modes other than FE_TONEAREST
+ (PR libstdc++/107468)
+
+* Tue Oct 18 2022 Marek Polacek 12.1.1-3.4
+- fix pr86731-fwrapv-longlong.c (#2134379)
+
+* Mon Oct 3 2022 Marek Polacek 12.1.1-3.3
+- add -static-libquadmath (#2094428)
* Fri Jul 8 2022 Marek Polacek 12.1.1-3.2
- recognize PLUS and XOR forms of rldimi (PR target/105991, #2095789)