diff -Nrcpad gcc-17-20260628/ChangeLog gcc-17-20260705/ChangeLog
*** gcc-17-20260628/ChangeLog	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/ChangeLog	Sun Jul  5 22:32:05 2026
***************
*** 1,3 ****
--- 1,18 ----
+ 2026-07-02  Eugene Rozenfeld  <erozen@microsoft.com>
+ 
+ 	* MAINTAINERS: Update my email address.
+ 
+ 2026-06-29  Abhishek Kaushik  <abhishek.kaushik@arm.com>
+ 
+ 	* MAINTAINERS (Write After Approval): Add myself.
+ 
+ 2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* configure: Regenerate.
+ 	* configure.ac: Replace AC_TRY_COMPILE with AC_COMPILE_IFELSE.
+ 	Replace AC_TRY_LINK with AC_LINK_IFELSE.
+ 
  2026-06-23  Richard Earnshaw  <rearnsha@arm.com>
  
  	* MAINTAINERS (Write After): Add details for Robert Dubner,
diff -Nrcpad gcc-17-20260628/LAST_UPDATED gcc-17-20260705/LAST_UPDATED
*** gcc-17-20260628/LAST_UPDATED	Sun Jun 28 22:32:23 2026
--- gcc-17-20260705/LAST_UPDATED	Sun Jul  5 22:32:23 2026
***************
*** 1 ****
! Obtained from git: master revision 08944b7000261068c846532326c02e245d39ba7f
--- 1 ----
! Obtained from git: master revision 88752b86ff1af4589c61d5bd8592b17e481ab596
diff -Nrcpad gcc-17-20260628/MAINTAINERS gcc-17-20260705/MAINTAINERS
*** gcc-17-20260628/MAINTAINERS	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/MAINTAINERS	Sun Jul  5 22:32:05 2026
*************** Rust                    Philip Herron
*** 182,188 ****
  *gimpl*                 Jason Merrill           <jason@redhat.com>
  *vrp, ranger            Aldy Hernandez          <aldy@quesejoda.com>
  *vrp, ranger            Andrew MacLeod          <amacleod@redhat.com>
! AutoFDO                 Eugene Rozenfeld        <erozen@microsoft.com>
  build machinery (*.in)  Paolo Bonzini           <bonzini@gnu.org>
  build machinery (*.in)  Nathanael Nerode        <neroden@gcc.gnu.org>
  build machinery (*.in)  Alexandre Oliva         <aoliva@gcc.gnu.org>
--- 182,188 ----
  *gimpl*                 Jason Merrill           <jason@redhat.com>
  *vrp, ranger            Aldy Hernandez          <aldy@quesejoda.com>
  *vrp, ranger            Andrew MacLeod          <amacleod@redhat.com>
! AutoFDO                 Eugene Rozenfeld        <erozenfeld.pro@gmail.com>
  build machinery (*.in)  Paolo Bonzini           <bonzini@gnu.org>
  build machinery (*.in)  Nathanael Nerode        <neroden@gcc.gnu.org>
  build machinery (*.in)  Alexandre Oliva         <aoliva@gcc.gnu.org>
*************** Tomasz Kamiński                 tkamins
*** 593,598 ****
--- 593,599 ----
  Victor Kaplansky                victork         <victork@il.ibm.com>
  Evgeny Karpov                   eukarpov        <evgeny.karpov@arm.com>
  Filip Kastl                     pheeck          <fkastl@suse.cz>
+ Abhishek Kaushik                abhkau01        <abhishek.kaushik@arm.com>
  Geoffrey Keating                geoffk          <geoffk@geoffk.org>
  Brendan Kehoe                   brendan         <brendan@zen.org>
  Richard Kenner                  kenner          <kenner@nyu.edu>
*************** Craig Rodrigues                 rodrigc
*** 791,797 ****
  Erven Rohou                     erven           <erven.rohou@inria.fr>
  Ira Rosen                       irar            <irar@il.ibm.com>
  Yvan Roux                       yroux           <yvan.roux@linaro.org>
! Eugene Rozenfeld                erozen          <erozen@microsoft.com>
  Maciej W. Rozycki               macro           <macro@orcam.me.uk>
  Douglas Rupp                    rupp            <douglas.b.rupp@gmail.com>
  Silvius Rus                     rus             <rus@google.com>
--- 792,798 ----
  Erven Rohou                     erven           <erven.rohou@inria.fr>
  Ira Rosen                       irar            <irar@il.ibm.com>
  Yvan Roux                       yroux           <yvan.roux@linaro.org>
! Eugene Rozenfeld                erozen          <erozenfeld.pro@gmail.com>
  Maciej W. Rozycki               macro           <macro@orcam.me.uk>
  Douglas Rupp                    rupp            <douglas.b.rupp@gmail.com>
  Silvius Rus                     rus             <rus@google.com>
diff -Nrcpad gcc-17-20260628/MD5SUMS gcc-17-20260705/MD5SUMS
*** gcc-17-20260628/MD5SUMS	Sun Jun 28 22:32:28 2026
--- gcc-17-20260705/MD5SUMS	Sun Jul  5 22:32:28 2026
***************
*** 1,5 ****
  # This file contains the MD5 checksums of the files in the
! # gcc-17-20260628.tar.xz tarball.
  #
  # Besides verifying that all files in the tarball were correctly expanded,
  # it also can be used to determine if any files have changed since the
--- 1,5 ----
  # This file contains the MD5 checksums of the files in the
! # gcc-17-20260705.tar.xz tarball.
  #
  # Besides verifying that all files in the tarball were correctly expanded,
  # it also can be used to determine if any files have changed since the
*************** ac5a8807f431d3dab46a7425b96379e4  .gitig
*** 25,47 ****
  fe60d87048567d4fe8c8a0ed2448bcc8  COPYING.RUNTIME
  d32239bcb673463ab874e80d47fae504  COPYING3
  6a6a8e020838b23406c81b19c1d46df6  COPYING3.LIB
! bb62b46f29ca2bc16acf3b4dddcea02a  ChangeLog
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! e87a2d96b3c3df970e8e8e6b82fd9344  LAST_UPDATED
! 56daf5fe0f8a0ed972b31d33e9d8ac41  MAINTAINERS
  f1b0fe5b41f7272f173407bd21947846  Makefile.def
  fbda720c413d124746752b72dbcfff21  Makefile.in
  1c50f15d0e3e9ca32ee2b28db19f45bd  Makefile.tpl
  80d26bc3b1ad4f6969a96a24c9181bf5  README
  7be8773244474bc82211a4726f43c3c8  SECURITY.txt
  a657821f65bab77f4fbf3a75cdee6da9  ar-lib
! 2dc4db3355f2fbecf579078288724fd1  c++tools/ChangeLog
  273d1d1957789965760b4c176a6f9b31  c++tools/Makefile.in
  edf805e559bf9ecb62db313d2e6edb47  c++tools/config.h.in
! c5a60ac6626343968c4ef1fdf261bf62  c++tools/configure
! 44a27855020b30a2d8ef020dacb5d00f  c++tools/configure.ac
  3fdd6a0cf34010c304b517d666e6b660  c++tools/resolver.cc
  4069c433a158c5ff824c416492f10df1  c++tools/resolver.h
  1db3c564db9e3c9e8d3efa059788e6ca  c++tools/server.cc
--- 25,47 ----
  fe60d87048567d4fe8c8a0ed2448bcc8  COPYING.RUNTIME
  d32239bcb673463ab874e80d47fae504  COPYING3
  6a6a8e020838b23406c81b19c1d46df6  COPYING3.LIB
! 60b4abff2f9d655d6e38e87f6616ad87  ChangeLog
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! b6fc1660ec7655660a58aba7e8d65c25  LAST_UPDATED
! e13da154b062316b470a12743d14720d  MAINTAINERS
  f1b0fe5b41f7272f173407bd21947846  Makefile.def
  fbda720c413d124746752b72dbcfff21  Makefile.in
  1c50f15d0e3e9ca32ee2b28db19f45bd  Makefile.tpl
  80d26bc3b1ad4f6969a96a24c9181bf5  README
  7be8773244474bc82211a4726f43c3c8  SECURITY.txt
  a657821f65bab77f4fbf3a75cdee6da9  ar-lib
! 37771e37f884ee19495ddcaf484f2da7  c++tools/ChangeLog
  273d1d1957789965760b4c176a6f9b31  c++tools/Makefile.in
  edf805e559bf9ecb62db313d2e6edb47  c++tools/config.h.in
! 3710bac91dcef325adcbb734c44b0985  c++tools/configure
! 5bd45fc4a5c68201028f6ba572941231  c++tools/configure.ac
  3fdd6a0cf34010c304b517d666e6b660  c++tools/resolver.cc
  4069c433a158c5ff824c416492f10df1  c++tools/resolver.h
  1db3c564db9e3c9e8d3efa059788e6ca  c++tools/server.cc
*************** c5a60ac6626343968c4ef1fdf261bf62  c++too
*** 50,65 ****
  c64564b7c7563dae5ebe016f340c9cd9  config.guess
  040359150cf11493f973a46d8a25b06b  config.rpath
  111d54aa3a3019adbab413c8fb435f22  config.sub
! bcfdc9625544cd35d13d2fdfb3e6df85  config/ChangeLog
  e8365ab73da09dccff77a6e2ad006a68  config/acinclude.m4
! 45979039ae56d255a866095bc20985a4  config/acx.m4
! 6b030f5cf640bdd401ea739f54a667f8  config/asmcfi.m4
  a6bf9c39c62222092ea6d5d8551c077f  config/ax_check_define.m4
  fa1446baa94824d733d33eb615217d23  config/ax_count_cpus.m4
  7692c5eb50682b66afb7bb4ae906e470  config/ax_cxx_compile_stdcxx.m4
  828ebd563b5aae7d33c27d7aa3f1ee2b  config/ax_lib_socket_nsl.m4
! dd11d6ddf98d1e2066fa3aef4f8ce966  config/ax_pthread.m4
! 596c2296c23cda1b6445427d6c3ce3ad  config/bitfields.m4
  5c6a030699353abe2ff69294a495e4cd  config/bootstrap-O1.mk
  4d3304310a9b7b17872d6f644e1dd7c8  config/bootstrap-O3.mk
  772abbb55df582cb2630074d944b9f23  config/bootstrap-Og.mk
--- 50,65 ----
  c64564b7c7563dae5ebe016f340c9cd9  config.guess
  040359150cf11493f973a46d8a25b06b  config.rpath
  111d54aa3a3019adbab413c8fb435f22  config.sub
! 9c33904ec10298e219df9283f12bd212  config/ChangeLog
  e8365ab73da09dccff77a6e2ad006a68  config/acinclude.m4
! 409d638331fd2685c1b93ba929d09e96  config/acx.m4
! 4de461a68cd5bb679a47eb9ad5dbbec2  config/asmcfi.m4
  a6bf9c39c62222092ea6d5d8551c077f  config/ax_check_define.m4
  fa1446baa94824d733d33eb615217d23  config/ax_count_cpus.m4
  7692c5eb50682b66afb7bb4ae906e470  config/ax_cxx_compile_stdcxx.m4
  828ebd563b5aae7d33c27d7aa3f1ee2b  config/ax_lib_socket_nsl.m4
! b9caaa31af6c5153d68adef693033b66  config/ax_pthread.m4
! 34b60cea13f53766582f11e47445a36d  config/bitfields.m4
  5c6a030699353abe2ff69294a495e4cd  config/bootstrap-O1.mk
  4d3304310a9b7b17872d6f644e1dd7c8  config/bootstrap-O3.mk
  772abbb55df582cb2630074d944b9f23  config/bootstrap-Og.mk
*************** ece3bc716fac1aca84326d40b97a4b4b  config
*** 79,110 ****
  396cc6dfa851e80723ab6ffc37778a6b  config/bootstrap-native.mk
  f466ea6022e6627a2e3d94bb0cc7eeb9  config/bootstrap-time.mk
  065f6478cf9a6fdc999f666517cfb8b4  config/bootstrap-ubsan.mk
! 2ef96b7f5ed3e6a5fd105f2cb18b1887  config/cet.m4
  ecf21fe4f75a80b0f2efc9bf3625a267  config/clang-plugin.m4
! 04bdbef77f5fd2e282f7dee0bde60444  config/codeset.m4
  b5a5c394536a15e50be1998bd341fd02  config/depstand.m4
  a763364d451e805a934f6520b8b4d602  config/dfp.m4
  57534269dac398c79a36036eb35704a1  config/elf.m4
! 042203b305962ba9a8f8474ef80edeee  config/enable.m4
  15b8d5adf53ad5ec75f055b193a6b1c2  config/extensions.m4
  2f2de833dd86bba89d64e5813be81550  config/futex.m4
  d3eafe382a46e6747e3644cf4a55d5cc  config/gc++filt.m4
! e5bb8100763b19abf4b1367f96305a98  config/gcc-plugin.m4
  668132e429b5a64836ff6f2e6a52bcd2  config/gettext-sister.m4
  891029ae654600a455aee41cac4eb400  config/gettext.m4
  29c9c3d57667bc9e6f14d625b2cd5894  config/glibc21.m4
  eb34bdb36bd54aa68d81e8a2e5e9f481  config/gthr.m4
  c385066b0fe61ef55d44cf2619e79b26  config/gxx-include-dir.m4
! 8f800a90638a3f714bf44a8321cc5003  config/hwcaps.m4
  c5515337a3d16c0eabc21d8c8ddd0909  config/iconv.m4
  7cdde9f19fc614304e49342c660e2d47  config/intdiv0.m4
  b954ba3fbbb84859b0d9084516bb359d  config/intlmacosx.m4
  e32906a3177f3b368bcd56f9e86a620c  config/inttypes-pri.m4
  b17ad59a69316040fae6c3b09187bcbc  config/inttypes.m4
  0b63117973333c343e0d0819012b8187  config/inttypes_h.m4
! f8cc157a22bc4fae23cee0f7da613154  config/isl.m4
  07787fd35e89d9397661e5026802e457  config/largefile.m4
! 25b1c7366ebd60470729a703332ae585  config/lcmessage.m4
  cbcbd9977ef1239ccac0c5c54d214302  config/ld-symbolic.m4
  1cbbc8830601bf43a3c42ee10a01eecd  config/lead-dot.m4
  d9835512bc6d5a706cfd0cfa62810e86  config/lib-ld.m4
--- 79,110 ----
  396cc6dfa851e80723ab6ffc37778a6b  config/bootstrap-native.mk
  f466ea6022e6627a2e3d94bb0cc7eeb9  config/bootstrap-time.mk
  065f6478cf9a6fdc999f666517cfb8b4  config/bootstrap-ubsan.mk
! 77da9f59938d465e1a789775fcdd7c8c  config/cet.m4
  ecf21fe4f75a80b0f2efc9bf3625a267  config/clang-plugin.m4
! 14865572159143825c854516b9f799fc  config/codeset.m4
  b5a5c394536a15e50be1998bd341fd02  config/depstand.m4
  a763364d451e805a934f6520b8b4d602  config/dfp.m4
  57534269dac398c79a36036eb35704a1  config/elf.m4
! a81f67da2b779d7405d2f7fe38f8e2f2  config/enable.m4
  15b8d5adf53ad5ec75f055b193a6b1c2  config/extensions.m4
  2f2de833dd86bba89d64e5813be81550  config/futex.m4
  d3eafe382a46e6747e3644cf4a55d5cc  config/gc++filt.m4
! 7dd04203360677ccc6b4c9f5b1bcfc89  config/gcc-plugin.m4
  668132e429b5a64836ff6f2e6a52bcd2  config/gettext-sister.m4
  891029ae654600a455aee41cac4eb400  config/gettext.m4
  29c9c3d57667bc9e6f14d625b2cd5894  config/glibc21.m4
  eb34bdb36bd54aa68d81e8a2e5e9f481  config/gthr.m4
  c385066b0fe61ef55d44cf2619e79b26  config/gxx-include-dir.m4
! 776d41cbac5ae5d75a8e788877e0eee6  config/hwcaps.m4
  c5515337a3d16c0eabc21d8c8ddd0909  config/iconv.m4
  7cdde9f19fc614304e49342c660e2d47  config/intdiv0.m4
  b954ba3fbbb84859b0d9084516bb359d  config/intlmacosx.m4
  e32906a3177f3b368bcd56f9e86a620c  config/inttypes-pri.m4
  b17ad59a69316040fae6c3b09187bcbc  config/inttypes.m4
  0b63117973333c343e0d0819012b8187  config/inttypes_h.m4
! 9a8c3a1e1e7596182c541bd0a2c0231a  config/isl.m4
  07787fd35e89d9397661e5026802e457  config/largefile.m4
! 331acd425247d8fa225e7155fca28fde  config/lcmessage.m4
  cbcbd9977ef1239ccac0c5c54d214302  config/ld-symbolic.m4
  1cbbc8830601bf43a3c42ee10a01eecd  config/lead-dot.m4
  d9835512bc6d5a706cfd0cfa62810e86  config/lib-ld.m4
*************** c950e3234da1eb9ad5f29bc1c2d2ae74  config
*** 136,147 ****
  9af153786999225732c95595da5ebd52  config/mt-spu
  4641658da74a0c3af1b517487876ff0e  config/multi.m4
  120ec56e3aa27739a2945bc1c8a2530a  config/nls.m4
! 8f2bd36861dd8e2742bcd719a977271b  config/no-executables.m4
  1a7a7cdb62ea0c3cdec8787f3a229ce7  config/override.m4
  063c0e9a8ccaa04af0f829badcec290b  config/picflag.m4
  d7cfead8c20016c2dab7ea5b65b075d7  config/pkg.m4
  a155332d4af74bcf3f4c52b4dbadca34  config/plugins.m4
! 5413d2cdbde706860854a69f6fc12f81  config/po.m4
  b2d511a8a77414eda79bdee0daccfea8  config/proginstall.m4
  d3cecf02bb97035177818aefbb0e0833  config/progtest.m4
  c97b318db8e2775b81a9635ad4ce97e1  config/sjlj.m4
--- 136,147 ----
  9af153786999225732c95595da5ebd52  config/mt-spu
  4641658da74a0c3af1b517487876ff0e  config/multi.m4
  120ec56e3aa27739a2945bc1c8a2530a  config/nls.m4
! 5b3ea04c0bc774e02bd06ec11ef85667  config/no-executables.m4
  1a7a7cdb62ea0c3cdec8787f3a229ce7  config/override.m4
  063c0e9a8ccaa04af0f829badcec290b  config/picflag.m4
  d7cfead8c20016c2dab7ea5b65b075d7  config/pkg.m4
  a155332d4af74bcf3f4c52b4dbadca34  config/plugins.m4
! 003a4b55d23a8d27744cd48aab773e80  config/po.m4
  b2d511a8a77414eda79bdee0daccfea8  config/proginstall.m4
  d3cecf02bb97035177818aefbb0e0833  config/progtest.m4
  c97b318db8e2775b81a9635ad4ce97e1  config/sjlj.m4
*************** c68813632d46f086a6b4d48af1b8b6b1  config
*** 149,155 ****
  761497fd3445beb86a90919955d5aa20  config/stdint_h.m4
  e2dc6b4fd62b77bff96b7951ef74f78f  config/target-posix
  712f68fd585228bcc308a3cb4aa21df1  config/tcl.m4
! 9a7844d5b1c1cc8c4ed1f1d3e32f8872  config/tls.m4
  4e23c37c70ffc7de37887cd39f1cb870  config/toolexeclibdir.m4
  5e1e75893989d0ae3c0452451cf80280  config/uintmax_t.m4
  6b1c349fb182e74fbc464c50c88fe2ee  config/ulonglong.m4
--- 149,155 ----
  761497fd3445beb86a90919955d5aa20  config/stdint_h.m4
  e2dc6b4fd62b77bff96b7951ef74f78f  config/target-posix
  712f68fd585228bcc308a3cb4aa21df1  config/tcl.m4
! bb90b55d8a502415e26197700dd86a26  config/tls.m4
  4e23c37c70ffc7de37887cd39f1cb870  config/toolexeclibdir.m4
  5e1e75893989d0ae3c0452451cf80280  config/uintmax_t.m4
  6b1c349fb182e74fbc464c50c88fe2ee  config/ulonglong.m4
*************** dd20b4aa952e750070486e3525cba7bd  config
*** 159,167 ****
  7ef51b0adb98e5c5f7aba46d2c7293f1  config/weakref.m4
  0163b672c888aaf1c8ad3e867a0ec9f1  config/zlib.m4
  db74a73c3c9c3cc71edec37c2436e082  config/zstd.m4
! 07f145e2ab73fc50d9557c0c0e8db303  configure
! 2950c8550289b6a39cf4fd0697c88aae  configure.ac
! a37b750e129791479dedc9f1364c5cea  contrib/ChangeLog
  5fc435c7928f858246df931ea3f3ece7  contrib/ChangeLog.jit
  7af8d2979bf1a7cfa88e30d05fa22be2  contrib/ChangeLog.tree-ssa
  0928ae42250fbb57246cf6e9bff2276b  contrib/analyze_brprob.py
--- 159,167 ----
  7ef51b0adb98e5c5f7aba46d2c7293f1  config/weakref.m4
  0163b672c888aaf1c8ad3e867a0ec9f1  config/zlib.m4
  db74a73c3c9c3cc71edec37c2436e082  config/zstd.m4
! baf6ecfe9b98d4e43bffa20374340f5c  configure
! fadff482b53ef4a2375e66324a9693c0  configure.ac
! 42cad2fc0cfabd1041cab65a7e87a828  contrib/ChangeLog
  5fc435c7928f858246df931ea3f3ece7  contrib/ChangeLog.jit
  7af8d2979bf1a7cfa88e30d05fa22be2  contrib/ChangeLog.tree-ssa
  0928ae42250fbb57246cf6e9bff2276b  contrib/analyze_brprob.py
*************** e1d12a65b82fa451f8d0d4ef0f849895  contri
*** 195,201 ****
  d09c16bcb6b535fb130486ef9ee3beec  contrib/compareSumTests3
  c0b13a476b5e57b6d55b304f67f69581  contrib/compare_tests
  652ed31d99697495ddefe9885ce403da  contrib/compare_two_ftime_report_sets
! c4da2ac548c906e5fd9f8d7649a5769a  contrib/config-list.mk
  50d60ebb1e537550506cd7352443d454  contrib/dg-cmp-results.sh
  979a288476a0d77345492450f86966e3  contrib/dg-extract-results.py
  a72cf7608237ddae6dd5fe9bfb266f84  contrib/dg-extract-results.sh
--- 195,201 ----
  d09c16bcb6b535fb130486ef9ee3beec  contrib/compareSumTests3
  c0b13a476b5e57b6d55b304f67f69581  contrib/compare_tests
  652ed31d99697495ddefe9885ce403da  contrib/compare_two_ftime_report_sets
! c02def56b4e64e30fd41ebe49b32aa93  contrib/config-list.mk
  50d60ebb1e537550506cd7352443d454  contrib/dg-cmp-results.sh
  979a288476a0d77345492450f86966e3  contrib/dg-extract-results.py
  a72cf7608237ddae6dd5fe9bfb266f84  contrib/dg-extract-results.sh
*************** f251d49dd87647250fcd74dd50b7835f  contri
*** 335,341 ****
  e2829fc4af4f433a6a328a62d5ce8066  contrib/reghunt/examples/reg-watch
  afd863c2ec84c906e20f9b9787b1f0fe  contrib/reghunt/examples/reg-watch.awk
  8955535523d4b5f48006bcb851ba9b4b  contrib/reghunt/examples/testall
! 2936516559166a1c7d22d467f46af15e  contrib/regression/ChangeLog
  30553bfced1b2b46bf7ca01ef6ba69d1  contrib/regression/GCC_Regression_Tester.wdgt/Default.png
  ad38ddd771df222eb9d413e3c7f6a751  contrib/regression/GCC_Regression_Tester.wdgt/Icon.png
  777bd286c147cc02861811f66b9a4440  contrib/regression/GCC_Regression_Tester.wdgt/Info.plist
--- 335,341 ----
  e2829fc4af4f433a6a328a62d5ce8066  contrib/reghunt/examples/reg-watch
  afd863c2ec84c906e20f9b9787b1f0fe  contrib/reghunt/examples/reg-watch.awk
  8955535523d4b5f48006bcb851ba9b4b  contrib/reghunt/examples/testall
! a4553350580ffb6e11efb394a074161f  contrib/regression/ChangeLog
  30553bfced1b2b46bf7ca01ef6ba69d1  contrib/regression/GCC_Regression_Tester.wdgt/Default.png
  ad38ddd771df222eb9d413e3c7f6a751  contrib/regression/GCC_Regression_Tester.wdgt/Icon.png
  777bd286c147cc02861811f66b9a4440  contrib/regression/GCC_Regression_Tester.wdgt/Info.plist
*************** b017a8530c74c1d79f3b4436169ae9b0  contri
*** 344,350 ****
  3fd4bca42f39c06eff4024376b935265  contrib/regression/GCC_Regression_Tester.wdgt/ja.lproj/InfoPlist.strings
  29d821230a9a45b2556b3d0fec8ed277  contrib/regression/GCC_Regression_Tester.wdgt/widget.html
  1e4aedcd2db5dd845a6c778f4ba73b9b  contrib/regression/README
! ffb5b0e096bb67ab2b41be222ad61bdb  contrib/regression/btest-gcc.sh
  b17111db2534cd5454586f5670826489  contrib/regression/mkindex.pl
  6a5cb74b6ae5e8b4cde98c515353f5d9  contrib/regression/objs-gcc.sh
  dc562ddb86567c65e82953825713dc4b  contrib/regression/site.exp
--- 344,350 ----
  3fd4bca42f39c06eff4024376b935265  contrib/regression/GCC_Regression_Tester.wdgt/ja.lproj/InfoPlist.strings
  29d821230a9a45b2556b3d0fec8ed277  contrib/regression/GCC_Regression_Tester.wdgt/widget.html
  1e4aedcd2db5dd845a6c778f4ba73b9b  contrib/regression/README
! e247fe6c331ffd44499eadc1c9cc0ceb  contrib/regression/btest-gcc.sh
  b17111db2534cd5454586f5670826489  contrib/regression/mkindex.pl
  6a5cb74b6ae5e8b4cde98c515353f5d9  contrib/regression/objs-gcc.sh
  dc562ddb86567c65e82953825713dc4b  contrib/regression/site.exp
*************** e8b207b9c7a9bb52bc0c9235781da723  contri
*** 389,403 ****
  b524c6a57df4d9803b79df5ecd4f368f  contrib/vimrc
  da7aeedeb5a86ee6f5982e559a2d6dcc  contrib/warn_summary
  8b59f0d0a2dcdced14765c514fbad719  depcomp
! dee1559a59f4fee670d18000e7a5d6f0  fixincludes/ChangeLog
  4afe55f959b7cceb7055ff11a9ca0e32  fixincludes/Makefile.in
  faccd3495bc1e8ec7f076d7dd5935b91  fixincludes/README
  455903ad4ff71fa5c5340ef7ae41a0e6  fixincludes/README-fixinc
  1f4e46c32c0fe1905e25e75d991c931a  fixincludes/aclocal.m4
  06c68af3013771f49738a0ade1579050  fixincludes/check.tpl
  baef7ba9b787bf0e8083a807ade166c2  fixincludes/config.h.in
! 7c2caef8893c82b0279f7c5d67bdc48a  fixincludes/configure
! b6ffc204128adbd2c41ac0cb4ce98dc7  fixincludes/configure.ac
  2002770d703d59245d89f941a21f783d  fixincludes/fixfixes.c
  e5c012264bf10be63e36230140635373  fixincludes/fixinc.in
  f7e16772ef2f4a5463025aa042b43812  fixincludes/fixincl.c
--- 389,403 ----
  b524c6a57df4d9803b79df5ecd4f368f  contrib/vimrc
  da7aeedeb5a86ee6f5982e559a2d6dcc  contrib/warn_summary
  8b59f0d0a2dcdced14765c514fbad719  depcomp
! dbaf8ef10b7a2d6866c7d0addb4acbac  fixincludes/ChangeLog
  4afe55f959b7cceb7055ff11a9ca0e32  fixincludes/Makefile.in
  faccd3495bc1e8ec7f076d7dd5935b91  fixincludes/README
  455903ad4ff71fa5c5340ef7ae41a0e6  fixincludes/README-fixinc
  1f4e46c32c0fe1905e25e75d991c931a  fixincludes/aclocal.m4
  06c68af3013771f49738a0ade1579050  fixincludes/check.tpl
  baef7ba9b787bf0e8083a807ade166c2  fixincludes/config.h.in
! 4d875683b8fce3cd5590583e08aab03d  fixincludes/configure
! 3667fb4917e2a27f4c51c78ea35fc6c8  fixincludes/configure.ac
  2002770d703d59245d89f941a21f783d  fixincludes/fixfixes.c
  e5c012264bf10be63e36230140635373  fixincludes/fixinc.in
  f7e16772ef2f4a5463025aa042b43812  fixincludes/fixincl.c
*************** f15bc3c5de22eac0bdd4f611502139a0  gcc/AB
*** 532,538 ****
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 39aba32161e8ba77f2924fbfba69985a  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
--- 532,538 ----
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 27bae4ada5c2c6a2640561162cfd3ecd  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
*************** fb3fadb88e1d2b3b640cfaaa5ff11780  gcc/Ch
*** 570,576 ****
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! bb2b5334ef69c5c7ea149a0135bbd49a  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
--- 570,576 ----
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! da1968aef6ba926a5248481ca6bc0675  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
*************** a817c5577f2b35f8d2481c787e3ff7e2  gcc/LA
*** 579,588 ****
  6ea8b2e47589299bbb0a9f409e465831  gcc/Makefile.in
  ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
  c8c9dd1eaee4ffd4d5d9f3ab70fddd4b  gcc/README.Portability
! e05b8711bb51c17451a3e7f034cc4d95  gcc/acinclude.m4
  e74733ebf762151e601c9e0aa1461a20  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 207ac1ea06e6d928251c6d9f6a30a665  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
--- 579,588 ----
  6ea8b2e47589299bbb0a9f409e465831  gcc/Makefile.in
  ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
  c8c9dd1eaee4ffd4d5d9f3ab70fddd4b  gcc/README.Portability
! a9a7c60459b2407bfdf4e68c0ed4ad0a  gcc/acinclude.m4
  e74733ebf762151e601c9e0aa1461a20  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 74b34dda4dff8f18012490dca54ae644  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
*************** c40d997c0c713985ad13faa6d354b016  gcc/ad
*** 620,626 ****
  8a0369e13d0752dfaddb77dfd08c3d14  gcc/ada/adabkend.ads
  ee04249eeb43a0e8f19490fbaccd6169  gcc/ada/adadecode.c
  35aad1fa6496345e7a7a1a7c43ac1145  gcc/ada/adadecode.h
! 1466393d00196632041e610076a72d28  gcc/ada/adaint.c
  4f219c63c0efe4ac4863880bddf643c0  gcc/ada/adaint.h
  a82184f30accc8ed33746fffe377a4ed  gcc/ada/affinity.c
  0ed459e0096285586fcd5221bb4cfb52  gcc/ada/ali-util.adb
--- 620,626 ----
  8a0369e13d0752dfaddb77dfd08c3d14  gcc/ada/adabkend.ads
  ee04249eeb43a0e8f19490fbaccd6169  gcc/ada/adadecode.c
  35aad1fa6496345e7a7a1a7c43ac1145  gcc/ada/adadecode.h
! f09aa9d3af0ba465facad26545d709fb  gcc/ada/adaint.c
  4f219c63c0efe4ac4863880bddf643c0  gcc/ada/adaint.h
  a82184f30accc8ed33746fffe377a4ed  gcc/ada/affinity.c
  0ed459e0096285586fcd5221bb4cfb52  gcc/ada/ali-util.adb
*************** a5f9ea1ee979426b1e19ed469160cf3e  gcc/ad
*** 632,638 ****
  c601b751c9d562150f8e9defec4660ce  gcc/ada/argv.c
  242f0f8e8fab3b3e0a9709998f39d504  gcc/ada/aspects.adb
  f8bdb554af8bb8f5512768bc1446c478  gcc/ada/aspects.ads
! 6e1b6f3ca6da5c24f2b9c3e6637a1dbb  gcc/ada/atree.adb
  fd46d0d4940b9fd7cf5c96d9a66ed70a  gcc/ada/atree.ads
  6e0304e672e621021491b2c184e23f17  gcc/ada/atree.h
  e7c8de7478b236d5bfcd7fe95cb362e1  gcc/ada/aux-io.c
--- 632,638 ----
  c601b751c9d562150f8e9defec4660ce  gcc/ada/argv.c
  242f0f8e8fab3b3e0a9709998f39d504  gcc/ada/aspects.adb
  f8bdb554af8bb8f5512768bc1446c478  gcc/ada/aspects.ads
! 01d70c5d1a4fa4408e1e56c259ab8c93  gcc/ada/atree.adb
  fd46d0d4940b9fd7cf5c96d9a66ed70a  gcc/ada/atree.ads
  6e0304e672e621021491b2c184e23f17  gcc/ada/atree.h
  e7c8de7478b236d5bfcd7fe95cb362e1  gcc/ada/aux-io.c
*************** a012e0cb5df366014b5a4988036a509a  gcc/ad
*** 698,704 ****
  b2e701a565d6f7f9874142228be0e4dc  gcc/ada/doc/gnat_rm/about_this_guide.rst
  95f36013115a0d2964f52a340712b135  gcc/ada/doc/gnat_rm/compatibility_and_porting_guide.rst
  126af46980c709bfad54ec8cf873b1e0  gcc/ada/doc/gnat_rm/gnat_implementation_mode.rst
! e30abec9fafa50d63e5674b13debcfa9  gcc/ada/doc/gnat_rm/gnat_language_extensions.rst
  d18255d01b647c97e7cf2cbd3225f90d  gcc/ada/doc/gnat_rm/implementation_advice.rst
  0b495de70cb91f357d8a80fdad8d9508  gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst
  9049d3b299d7481521d14fab2ed136f1  gcc/ada/doc/gnat_rm/implementation_defined_attributes.rst
--- 698,704 ----
  b2e701a565d6f7f9874142228be0e4dc  gcc/ada/doc/gnat_rm/about_this_guide.rst
  95f36013115a0d2964f52a340712b135  gcc/ada/doc/gnat_rm/compatibility_and_porting_guide.rst
  126af46980c709bfad54ec8cf873b1e0  gcc/ada/doc/gnat_rm/gnat_implementation_mode.rst
! 571ab488e6b0771862f00c4cd38d2290  gcc/ada/doc/gnat_rm/gnat_language_extensions.rst
  d18255d01b647c97e7cf2cbd3225f90d  gcc/ada/doc/gnat_rm/implementation_advice.rst
  0b495de70cb91f357d8a80fdad8d9508  gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst
  9049d3b299d7481521d14fab2ed136f1  gcc/ada/doc/gnat_rm/implementation_defined_attributes.rst
*************** f1c71b64e1c84e240c7b5aea7331a32a  gcc/ad
*** 738,744 ****
  131c5684aa0b748d5f313386f06d1105  gcc/ada/einfo-utils.adb
  da059a962474e91072338a8f8e212b3d  gcc/ada/einfo-utils.ads
  97ce2e179e42e649dfe8affca8e3c302  gcc/ada/einfo.adb
! ce197494ba7d66a9f8806615fe8b6cb6  gcc/ada/einfo.ads
  fef3bb4012357f98b9b104dfa3daee51  gcc/ada/elists.adb
  52dc293e77a753c73be5d02f2661369f  gcc/ada/elists.ads
  30a82f1a7c5bfcc4e8be8d79dc60e23e  gcc/ada/elists.h
--- 738,744 ----
  131c5684aa0b748d5f313386f06d1105  gcc/ada/einfo-utils.adb
  da059a962474e91072338a8f8e212b3d  gcc/ada/einfo-utils.ads
  97ce2e179e42e649dfe8affca8e3c302  gcc/ada/einfo.adb
! fcc189b0bec63d3f93960007cd6eac5e  gcc/ada/einfo.ads
  fef3bb4012357f98b9b104dfa3daee51  gcc/ada/elists.adb
  52dc293e77a753c73be5d02f2661369f  gcc/ada/elists.ads
  30a82f1a7c5bfcc4e8be8d79dc60e23e  gcc/ada/elists.h
*************** cca5ee0694320e014df12c82cb9f56f0  gcc/ad
*** 752,765 ****
  33f47902242afa2110a6def083b718fd  gcc/ada/errid.adb
  1af164987170f38613191d2dbe084d15  gcc/ada/errid.ads
  84f28219501ec3f2ace259cad6375b8a  gcc/ada/errno.c
! 7374ee33295ac4402a56b21c583024ea  gcc/ada/errout.adb
  fb2e9135160244490d6f60efaeeb2993  gcc/ada/errout.ads
  8e13c8dff0b7b25b0b2034b8ec88934d  gcc/ada/erroutc-pretty_emitter.adb
  039052e81d94cd57e6732e2741d45971  gcc/ada/erroutc-pretty_emitter.ads
  fbb53860c83f330e1a5ca618e8aa95c8  gcc/ada/erroutc-sarif_emitter.adb
  891df43fdb6b576116301b6438c24ed9  gcc/ada/erroutc-sarif_emitter.ads
! 74b52b81cd17123a3d79c7814ba66be9  gcc/ada/erroutc.adb
! 838469bc2ff77818eec77cfe3a538862  gcc/ada/erroutc.ads
  9b6a6301822ff4e7a2961393ca29db8d  gcc/ada/errutil.adb
  6f419277ada6ce8a81349d41a22b2869  gcc/ada/errutil.ads
  3dc31e56d392ba3da0e312527adcd953  gcc/ada/eval_fat.adb
--- 752,765 ----
  33f47902242afa2110a6def083b718fd  gcc/ada/errid.adb
  1af164987170f38613191d2dbe084d15  gcc/ada/errid.ads
  84f28219501ec3f2ace259cad6375b8a  gcc/ada/errno.c
! 006574c07bdea292102c8ba7c084cc54  gcc/ada/errout.adb
  fb2e9135160244490d6f60efaeeb2993  gcc/ada/errout.ads
  8e13c8dff0b7b25b0b2034b8ec88934d  gcc/ada/erroutc-pretty_emitter.adb
  039052e81d94cd57e6732e2741d45971  gcc/ada/erroutc-pretty_emitter.ads
  fbb53860c83f330e1a5ca618e8aa95c8  gcc/ada/erroutc-sarif_emitter.adb
  891df43fdb6b576116301b6438c24ed9  gcc/ada/erroutc-sarif_emitter.ads
! 1772122d9d6eb3f91b97de5f3889f641  gcc/ada/erroutc.adb
! e21df15bc81f432d4de85b5af4ecc699  gcc/ada/erroutc.ads
  9b6a6301822ff4e7a2961393ca29db8d  gcc/ada/errutil.adb
  6f419277ada6ce8a81349d41a22b2869  gcc/ada/errutil.ads
  3dc31e56d392ba3da0e312527adcd953  gcc/ada/eval_fat.adb
*************** adb49f37416fce62d5759f9b4c733fe6  gcc/ad
*** 769,775 ****
  8d6933ec0ee945c50b4e8c114b1221b6  gcc/ada/exp_aggr.ads
  045a2ef4e4932ea2c0b17910db37af46  gcc/ada/exp_atag.adb
  2a027dfad5944cc346ee7c94c022d302  gcc/ada/exp_atag.ads
! c6258f9946c1129d79af9dd8379f0ba9  gcc/ada/exp_attr.adb
  4b748ed1db282b666860ed488c4ff28d  gcc/ada/exp_attr.ads
  cda4ccedf4fc1e7d7dbe6864ee5bf8ad  gcc/ada/exp_cg.adb
  a188d43ef2eb5780d4b7f98731302640  gcc/ada/exp_cg.ads
--- 769,775 ----
  8d6933ec0ee945c50b4e8c114b1221b6  gcc/ada/exp_aggr.ads
  045a2ef4e4932ea2c0b17910db37af46  gcc/ada/exp_atag.adb
  2a027dfad5944cc346ee7c94c022d302  gcc/ada/exp_atag.ads
! 50ae886ee678cb0e26b9b04d0e248315  gcc/ada/exp_attr.adb
  4b748ed1db282b666860ed488c4ff28d  gcc/ada/exp_attr.ads
  cda4ccedf4fc1e7d7dbe6864ee5bf8ad  gcc/ada/exp_cg.adb
  a188d43ef2eb5780d4b7f98731302640  gcc/ada/exp_cg.ads
*************** a84d191dad3158db125ec48c285b9667  gcc/ad
*** 782,794 ****
  371cc0c543b5d2502352758eb7b73e8f  gcc/ada/exp_ch13.ads
  ace7dfdd53834601d964efef9557e0f4  gcc/ada/exp_ch2.adb
  aec86f795b370fca1379a25f37651fdf  gcc/ada/exp_ch2.ads
! 56c0b56695ab0e16a29f022e8494d839  gcc/ada/exp_ch3.adb
  52ca7939bd6b0e1da9e20d902813d109  gcc/ada/exp_ch3.ads
  9e1783713357b27de95bf4196fb7d621  gcc/ada/exp_ch4.adb
  4410361f9df9739a168f50599c2f07b4  gcc/ada/exp_ch4.ads
  f2ee63cc3c5f9f1809803f876187e83a  gcc/ada/exp_ch5.adb
  962c51f1fad8395553b843179ba06b79  gcc/ada/exp_ch5.ads
! 7d03d787b4bd3aa3820aa8c5a0a906f7  gcc/ada/exp_ch6.adb
  06c642df831eac4b8b06e06e0cc2672b  gcc/ada/exp_ch6.ads
  209d78b894ee84003b9eb29efd6e6911  gcc/ada/exp_ch7.adb
  0328c88aa1134f7af3891cb24a0b27c8  gcc/ada/exp_ch7.ads
--- 782,794 ----
  371cc0c543b5d2502352758eb7b73e8f  gcc/ada/exp_ch13.ads
  ace7dfdd53834601d964efef9557e0f4  gcc/ada/exp_ch2.adb
  aec86f795b370fca1379a25f37651fdf  gcc/ada/exp_ch2.ads
! 91e381de1e823ce194e6c3486ed19ca8  gcc/ada/exp_ch3.adb
  52ca7939bd6b0e1da9e20d902813d109  gcc/ada/exp_ch3.ads
  9e1783713357b27de95bf4196fb7d621  gcc/ada/exp_ch4.adb
  4410361f9df9739a168f50599c2f07b4  gcc/ada/exp_ch4.ads
  f2ee63cc3c5f9f1809803f876187e83a  gcc/ada/exp_ch5.adb
  962c51f1fad8395553b843179ba06b79  gcc/ada/exp_ch5.ads
! d91fcfa20cb92bd61bb2f58a7f741a25  gcc/ada/exp_ch6.adb
  06c642df831eac4b8b06e06e0cc2672b  gcc/ada/exp_ch6.ads
  209d78b894ee84003b9eb29efd6e6911  gcc/ada/exp_ch7.adb
  0328c88aa1134f7af3891cb24a0b27c8  gcc/ada/exp_ch7.ads
*************** abc4adbcfcc5aec49e61dfe787dc8274  gcc/ad
*** 828,835 ****
  3372f4711ba5978adb3c0b71a6836ba0  gcc/ada/exp_tss.ads
  615035164b85c41e0511b0964debffb3  gcc/ada/exp_unst.adb
  36837947cf32d9b44ffd59a3faf56050  gcc/ada/exp_unst.ads
! 3f0705a62a425d5cb1237d0fcc4f791b  gcc/ada/exp_util.adb
! 43d879ef4447d808c855fab353d66eb3  gcc/ada/exp_util.ads
  da86db6b7d964bec3beb0995f66c2c49  gcc/ada/expander.adb
  ca321269d17552e01fce3be99a0a3452  gcc/ada/expander.ads
  da666491b0d26eef3aa08ba31f054d9b  gcc/ada/expect.c
--- 828,835 ----
  3372f4711ba5978adb3c0b71a6836ba0  gcc/ada/exp_tss.ads
  615035164b85c41e0511b0964debffb3  gcc/ada/exp_unst.adb
  36837947cf32d9b44ffd59a3faf56050  gcc/ada/exp_unst.ads
! ac419542bbde62629e0214cc29576245  gcc/ada/exp_util.adb
! 46f1110ac027e72dd5feeff377a45eb5  gcc/ada/exp_util.ads
  da86db6b7d964bec3beb0995f66c2c49  gcc/ada/expander.adb
  ca321269d17552e01fce3be99a0a3452  gcc/ada/expander.ads
  da666491b0d26eef3aa08ba31f054d9b  gcc/ada/expect.c
*************** e4204795e682e9a19f2c26c4b2410fc3  gcc/ad
*** 856,862 ****
  8d951ad5f91f626d3cc7ba6585129d29  gcc/ada/gcc-interface/ada.h
  f3edeff30f2d71e01f705dbeeea40b77  gcc/ada/gcc-interface/config-lang.in
  61292b93aaa82b358b5b4e2310c77d5b  gcc/ada/gcc-interface/cuintp.cc
! acc80d822fe8bfed94d7c151a2a1ad08  gcc/ada/gcc-interface/decl.cc
  07d1f164dc85932ebe1eab7ad2117218  gcc/ada/gcc-interface/gadaint.h
  0160223b92cc31ddb4ab99b5fd6a6cc8  gcc/ada/gcc-interface/gigi.h
  89108e218f6b9e9f07550c3675c059a7  gcc/ada/gcc-interface/lang-specs.h
--- 856,862 ----
  8d951ad5f91f626d3cc7ba6585129d29  gcc/ada/gcc-interface/ada.h
  f3edeff30f2d71e01f705dbeeea40b77  gcc/ada/gcc-interface/config-lang.in
  61292b93aaa82b358b5b4e2310c77d5b  gcc/ada/gcc-interface/cuintp.cc
! 1ab9714b45b08ff958a026efcb04adab  gcc/ada/gcc-interface/decl.cc
  07d1f164dc85932ebe1eab7ad2117218  gcc/ada/gcc-interface/gadaint.h
  0160223b92cc31ddb4ab99b5fd6a6cc8  gcc/ada/gcc-interface/gigi.h
  89108e218f6b9e9f07550c3675c059a7  gcc/ada/gcc-interface/lang-specs.h
*************** acc80d822fe8bfed94d7c151a2a1ad08  gcc/ad
*** 865,871 ****
  f34e54f7542f28025658b9fd6f01d110  gcc/ada/gcc-interface/misc.cc
  ec10f477ad1d3dba6056061ede6ff919  gcc/ada/gcc-interface/system.ads
  0f5dcb04296023a69000e9b3ab633c7c  gcc/ada/gcc-interface/targtyps.cc
! 80aa889cbda3eae1d793f281c543ec99  gcc/ada/gcc-interface/trans.cc
  9d36d8c03bd0a96c8694e0f4d47adf56  gcc/ada/gcc-interface/utils.cc
  61f921a0b83e0276983ebc2cfb11dc05  gcc/ada/gcc-interface/utils2.cc
  8d963d138d5f0baf938867c427038c61  gcc/ada/gen_il-fields.ads
--- 865,871 ----
  f34e54f7542f28025658b9fd6f01d110  gcc/ada/gcc-interface/misc.cc
  ec10f477ad1d3dba6056061ede6ff919  gcc/ada/gcc-interface/system.ads
  0f5dcb04296023a69000e9b3ab633c7c  gcc/ada/gcc-interface/targtyps.cc
! a266026adaade27edd6505a45abc1e33  gcc/ada/gcc-interface/trans.cc
  9d36d8c03bd0a96c8694e0f4d47adf56  gcc/ada/gcc-interface/utils.cc
  61f921a0b83e0276983ebc2cfb11dc05  gcc/ada/gcc-interface/utils2.cc
  8d963d138d5f0baf938867c427038c61  gcc/ada/gen_il-fields.ads
*************** c1f99a3d6e17232df36803792506b6f8  gcc/ad
*** 892,898 ****
  917ea7311a30ec4c5cec3e610ca640c2  gcc/ada/gnat2.gpr
  635312af629edb6333cf662c55ae7a0b  gcc/ada/gnat_cuda.adb
  a930631c7c5fdabf12e2010079214e38  gcc/ada/gnat_cuda.ads
! 1e6a0fe31bdb50798501cd6a34aef992  gcc/ada/gnat_rm.texi
  ab379d61794fd806214bd7b948c41e10  gcc/ada/gnat_ugn.texi
  97a151562fa533cd370413751bd18564  gcc/ada/gnatbind.adb
  cf407dc104ddb2d242f8c79a9b8166ec  gcc/ada/gnatbind.ads
--- 892,898 ----
  917ea7311a30ec4c5cec3e610ca640c2  gcc/ada/gnat2.gpr
  635312af629edb6333cf662c55ae7a0b  gcc/ada/gnat_cuda.adb
  a930631c7c5fdabf12e2010079214e38  gcc/ada/gnat_cuda.ads
! a8a4169515708211c324e6cf44e75a60  gcc/ada/gnat_rm.texi
  ab379d61794fd806214bd7b948c41e10  gcc/ada/gnat_ugn.texi
  97a151562fa533cd370413751bd18564  gcc/ada/gnatbind.adb
  cf407dc104ddb2d242f8c79a9b8166ec  gcc/ada/gnatbind.ads
*************** e990b94c2deda2688532716fbe75bb0e  gcc/ad
*** 927,933 ****
  2fa42d36d02ccd2dd6e280ff1b9e6959  gcc/ada/indepsw-gnu.adb
  eb3b6f429c0b93cc8e9788ea4ac4e8c6  gcc/ada/indepsw.adb
  18250f749f24e01ba1da7cf90a1d60c2  gcc/ada/indepsw.ads
! e90d589fb32fbd65ef6727e79d8ca1a8  gcc/ada/init.c
  bc9cb67c7c529d85eae0a62d8155e31e  gcc/ada/initialize.c
  845001c6ac077af4b2ce75f1c1b0f196  gcc/ada/inline.adb
  3dd5bae636367e30ea8d186d903cd54a  gcc/ada/inline.ads
--- 927,933 ----
  2fa42d36d02ccd2dd6e280ff1b9e6959  gcc/ada/indepsw-gnu.adb
  eb3b6f429c0b93cc8e9788ea4ac4e8c6  gcc/ada/indepsw.adb
  18250f749f24e01ba1da7cf90a1d60c2  gcc/ada/indepsw.ads
! 899b9e713ef6cc5b04a9d3faede264c1  gcc/ada/init.c
  bc9cb67c7c529d85eae0a62d8155e31e  gcc/ada/initialize.c
  845001c6ac077af4b2ce75f1c1b0f196  gcc/ada/inline.adb
  3dd5bae636367e30ea8d186d903cd54a  gcc/ada/inline.ads
*************** d8d1eb29fb20543458da1c7ee1404d1c  gcc/ad
*** 1289,1296 ****
  9f315b9db7cf8e22bfa842c893268987  gcc/ada/libgnat/a-colien.ads
  9fc2c79be4ec491cde7fadd6659ae71c  gcc/ada/libgnat/a-colire.adb
  2bec65439f4190fb470c89cc5f4a1960  gcc/ada/libgnat/a-colire.ads
! 3397d98808ff592a84c2aac1dd608949  gcc/ada/libgnat/a-comlin.adb
! 6bb1990f2f5f2cb0cdc45014cab6e530  gcc/ada/libgnat/a-comlin.ads
  f308f877760b1681e67e12d77a110d67  gcc/ada/libgnat/a-comutr.adb
  5d7f34cf163aa299b23e231faf74749c  gcc/ada/libgnat/a-comutr.ads
  3f5f8173bfd4efdf08dc056eb39c565e  gcc/ada/libgnat/a-conhel.adb
--- 1289,1296 ----
  9f315b9db7cf8e22bfa842c893268987  gcc/ada/libgnat/a-colien.ads
  9fc2c79be4ec491cde7fadd6659ae71c  gcc/ada/libgnat/a-colire.adb
  2bec65439f4190fb470c89cc5f4a1960  gcc/ada/libgnat/a-colire.ads
! 8f9ae2e2c77721fae91d1332d92379fe  gcc/ada/libgnat/a-comlin.adb
! 91bb8d2c10e7a3002b2d01ba0c02afaf  gcc/ada/libgnat/a-comlin.ads
  f308f877760b1681e67e12d77a110d67  gcc/ada/libgnat/a-comutr.adb
  5d7f34cf163aa299b23e231faf74749c  gcc/ada/libgnat/a-comutr.ads
  3f5f8173bfd4efdf08dc056eb39c565e  gcc/ada/libgnat/a-conhel.adb
*************** c4c82abff1dd8f6604582844f0db30a9  gcc/ad
*** 1601,1607 ****
  18a4c6eaf4a71398b19427182b133eca  gcc/ada/libgnat/a-teioed.adb
  557f2e82df4e73bea0ee43f6a2d6fbf6  gcc/ada/libgnat/a-teioed.ads
  47142fa11e1e09097f9cb44bcd1a8caa  gcc/ada/libgnat/a-textio.adb
! 8ab0eabbc4678cba0583a700698d0847  gcc/ada/libgnat/a-textio.ads
  c74a673b222c3d0037a22fb766c67488  gcc/ada/libgnat/a-tgdico.ads
  fb39064662a6ab88ec4192b4d6340afd  gcc/ada/libgnat/a-tiboio.adb
  7b163db9f1467e9392f347bee1400136  gcc/ada/libgnat/a-tiboio.ads
--- 1601,1607 ----
  18a4c6eaf4a71398b19427182b133eca  gcc/ada/libgnat/a-teioed.adb
  557f2e82df4e73bea0ee43f6a2d6fbf6  gcc/ada/libgnat/a-teioed.ads
  47142fa11e1e09097f9cb44bcd1a8caa  gcc/ada/libgnat/a-textio.adb
! abb069065b555909be21e115b47d93d2  gcc/ada/libgnat/a-textio.ads
  c74a673b222c3d0037a22fb766c67488  gcc/ada/libgnat/a-tgdico.ads
  fb39064662a6ab88ec4192b4d6340afd  gcc/ada/libgnat/a-tiboio.adb
  7b163db9f1467e9392f347bee1400136  gcc/ada/libgnat/a-tiboio.ads
*************** e4b4ce433ca66c06ce1b718dc7c73801  gcc/ad
*** 2802,2808 ****
  5b5a0f33d6b1cd316c17c759b05d17b6  gcc/ada/libgnat/text_io.ads
  22a85f08e1699f308a9b60bf5ce4a6d0  gcc/ada/libgnat/unchconv.ads
  91a6872657c72c6647e2e8f6edb008ba  gcc/ada/libgnat/unchdeal.ads
! b95c46355384fabf6de9e95bd3273fcd  gcc/ada/link.c
  6a1752b698e575236bc24fd72a80ac14  gcc/ada/live.adb
  b153e7d2cc4a598977832c17cafb7c4f  gcc/ada/live.ads
  cf7b146f9fc62f24c3787351e5ba9e68  gcc/ada/local_restrict.adb
--- 2802,2808 ----
  5b5a0f33d6b1cd316c17c759b05d17b6  gcc/ada/libgnat/text_io.ads
  22a85f08e1699f308a9b60bf5ce4a6d0  gcc/ada/libgnat/unchconv.ads
  91a6872657c72c6647e2e8f6edb008ba  gcc/ada/libgnat/unchdeal.ads
! 5fa3fa9996be77e026a74b83c410b6f6  gcc/ada/link.c
  6a1752b698e575236bc24fd72a80ac14  gcc/ada/live.adb
  b153e7d2cc4a598977832c17cafb7c4f  gcc/ada/live.ads
  cf7b146f9fc62f24c3787351e5ba9e68  gcc/ada/local_restrict.adb
*************** bf52dfdb3b0ad7b46acd6b6ec476611c  gcc/ad
*** 2849,2871 ****
  8426abd6df92901ee88cf9dc90afb3d5  gcc/ada/par-ch10.adb
  69a2e7867057d08861c69638310a6144  gcc/ada/par-ch11.adb
  ba0e112ae1cbefadd145a4e7c06f1642  gcc/ada/par-ch12.adb
! cb6fb30b0bafef175c164d6101fed9e4  gcc/ada/par-ch13.adb
! fc57966056b0077a0fadd4887212d6bd  gcc/ada/par-ch2.adb
  72384ae4f876d171cf561494dcce5966  gcc/ada/par-ch3.adb
! 63a2db0c45fffcb07ad9774a590ba474  gcc/ada/par-ch4.adb
  0585d7a7aad5f825e2f48c263b0e0ee8  gcc/ada/par-ch5.adb
! f60de53d7a547575a527746c23608afd  gcc/ada/par-ch6.adb
  558ef22825b7a759e5b43d40e9566848  gcc/ada/par-ch7.adb
  8088c92c25aa6f8d485fa42b1326be8d  gcc/ada/par-ch8.adb
  f1e8c6c878d014498b8b3b88dd99b012  gcc/ada/par-ch9.adb
  1f70b7cd17a7598b624b2901c6cea77c  gcc/ada/par-endh.adb
  4631e5d0cb69105860231a799366b230  gcc/ada/par-labl.adb
  7d004b6b482794a85e318cb7452f55ef  gcc/ada/par-load.adb
! b2c03c72a91079047ebbca1e688fc038  gcc/ada/par-prag.adb
  4f0a80ae4dcac15e0ae11b61ce2a351a  gcc/ada/par-sync.adb
  fd52cb07f6816c9f989d767432353844  gcc/ada/par-tchk.adb
  6a85b390d0cf809f2acc202c41a1e295  gcc/ada/par-util.adb
! 54bb999c25a3cea53498fa6a59d25b17  gcc/ada/par.adb
  dec03d93846b2cf0f195f599e6ebe085  gcc/ada/par.ads
  397a8c4eaae8d55eb7e4accd4d09745f  gcc/ada/par_sco.adb
  a2fb0d304cec6a62b7a0096915bbacc4  gcc/ada/par_sco.ads
--- 2849,2871 ----
  8426abd6df92901ee88cf9dc90afb3d5  gcc/ada/par-ch10.adb
  69a2e7867057d08861c69638310a6144  gcc/ada/par-ch11.adb
  ba0e112ae1cbefadd145a4e7c06f1642  gcc/ada/par-ch12.adb
! e97289a6cdcbffd0c274b6c4aceab306  gcc/ada/par-ch13.adb
! ab4e4f85485ed2510dbf934bac5a7044  gcc/ada/par-ch2.adb
  72384ae4f876d171cf561494dcce5966  gcc/ada/par-ch3.adb
! 050fcfc13b840032fe482b48081a818f  gcc/ada/par-ch4.adb
  0585d7a7aad5f825e2f48c263b0e0ee8  gcc/ada/par-ch5.adb
! f545707c2e3e6921f92471aaba9c15d4  gcc/ada/par-ch6.adb
  558ef22825b7a759e5b43d40e9566848  gcc/ada/par-ch7.adb
  8088c92c25aa6f8d485fa42b1326be8d  gcc/ada/par-ch8.adb
  f1e8c6c878d014498b8b3b88dd99b012  gcc/ada/par-ch9.adb
  1f70b7cd17a7598b624b2901c6cea77c  gcc/ada/par-endh.adb
  4631e5d0cb69105860231a799366b230  gcc/ada/par-labl.adb
  7d004b6b482794a85e318cb7452f55ef  gcc/ada/par-load.adb
! 415e480e264bdfc134e38627907f5ed0  gcc/ada/par-prag.adb
  4f0a80ae4dcac15e0ae11b61ce2a351a  gcc/ada/par-sync.adb
  fd52cb07f6816c9f989d767432353844  gcc/ada/par-tchk.adb
  6a85b390d0cf809f2acc202c41a1e295  gcc/ada/par-util.adb
! 2599c63ffa740692181bbe53a970b936  gcc/ada/par.adb
  dec03d93846b2cf0f195f599e6ebe085  gcc/ada/par.ads
  397a8c4eaae8d55eb7e4accd4d09745f  gcc/ada/par_sco.adb
  a2fb0d304cec6a62b7a0096915bbacc4  gcc/ada/par_sco.ads
*************** acf67cc2ad3c40fe466a03f76c6450e1  gcc/ad
*** 2912,2918 ****
  65869457d1676879dc545835475f7421  gcc/ada/sem.ads
  1f1ea5b059ab31ee369cc51ba1071c8c  gcc/ada/sem_aggr.adb
  d5ddab4fcf440bf2f49a9a190fd12829  gcc/ada/sem_aggr.ads
! b1c3315aa473548d42fb846c33d163d1  gcc/ada/sem_attr.adb
  f5a25d26b815f5d376e2873f3ab69359  gcc/ada/sem_attr.ads
  39892cb912c9fe4b0d512cfc104e5bd7  gcc/ada/sem_aux.adb
  5df4642fb17b29da9f787e48f24551b9  gcc/ada/sem_aux.ads
--- 2912,2918 ----
  65869457d1676879dc545835475f7421  gcc/ada/sem.ads
  1f1ea5b059ab31ee369cc51ba1071c8c  gcc/ada/sem_aggr.adb
  d5ddab4fcf440bf2f49a9a190fd12829  gcc/ada/sem_aggr.ads
! d261615708ed0e14a0e29537acdb46b5  gcc/ada/sem_attr.adb
  f5a25d26b815f5d376e2873f3ab69359  gcc/ada/sem_attr.ads
  39892cb912c9fe4b0d512cfc104e5bd7  gcc/ada/sem_aux.adb
  5df4642fb17b29da9f787e48f24551b9  gcc/ada/sem_aux.ads
*************** f5a25d26b815f5d376e2873f3ab69359  gcc/ad
*** 2920,2946 ****
  f682892145d1a369cdc5b3f73935f8d9  gcc/ada/sem_case.ads
  40833d5de1791e4a88cb023d6bd0ddb5  gcc/ada/sem_cat.adb
  8380d3577b9f637d6e110b2f500d0e0b  gcc/ada/sem_cat.ads
! bd02733d13b54612fc6d4cd0e340b3ea  gcc/ada/sem_ch10.adb
  ad2bb60b9c4c67653f4da4b0e70277d7  gcc/ada/sem_ch10.ads
  e3dc2d270994bba222e70ec02479ac37  gcc/ada/sem_ch11.adb
  7efb6a0f371113d8b55b421ee56dd1dd  gcc/ada/sem_ch11.ads
  e102106501ec17369ddacce53c1c6c05  gcc/ada/sem_ch12.adb
  2622dbf1c1774a89ada3cba34f1da316  gcc/ada/sem_ch12.ads
! a7cdba01724a5a0d104d93575163a3ea  gcc/ada/sem_ch13.adb
! ec60ecc54472eacb95e7a2bc99058514  gcc/ada/sem_ch13.ads
  260948dd8c7af25b5acaa288032c9327  gcc/ada/sem_ch2.adb
  ea86a0345845800d7aaf07f22bb4bf6c  gcc/ada/sem_ch2.ads
! 1df3c91b7668c3568b22f00077d2d2e2  gcc/ada/sem_ch3.adb
  2d8f83bc46638356bc311ccd50015b1f  gcc/ada/sem_ch3.ads
! b5b240fdd471e2c2d8f056282e5a0918  gcc/ada/sem_ch4.adb
  fdd750bd30c3186d912dfed4717a2c0c  gcc/ada/sem_ch4.ads
! a9398364ab25c6bd5af8f323cb3a4763  gcc/ada/sem_ch5.adb
! 0851668baacc82a6125a6cdd3254a804  gcc/ada/sem_ch5.ads
! 162c576c8b6697fc9f879c3e412a4c42  gcc/ada/sem_ch6.adb
  9ac8c4c57213097618cdb7c0b7b4f47b  gcc/ada/sem_ch6.ads
! 33013f2a509aa93b2c13c0a8a7636749  gcc/ada/sem_ch7.adb
  b15ba6dec89e775b188e9d07764efc63  gcc/ada/sem_ch7.ads
! 90c7969914972d9a9f9e40436b94bba1  gcc/ada/sem_ch8.adb
  5bcf24e9f3725dd07ba44097469a5101  gcc/ada/sem_ch8.ads
  705c86e7eb2e8956f7753dbcb1619557  gcc/ada/sem_ch9.adb
  11764389473d404a17921f767d1eadd4  gcc/ada/sem_ch9.ads
--- 2920,2946 ----
  f682892145d1a369cdc5b3f73935f8d9  gcc/ada/sem_case.ads
  40833d5de1791e4a88cb023d6bd0ddb5  gcc/ada/sem_cat.adb
  8380d3577b9f637d6e110b2f500d0e0b  gcc/ada/sem_cat.ads
! 478a9c5d081614d7b6bd7dc555067215  gcc/ada/sem_ch10.adb
  ad2bb60b9c4c67653f4da4b0e70277d7  gcc/ada/sem_ch10.ads
  e3dc2d270994bba222e70ec02479ac37  gcc/ada/sem_ch11.adb
  7efb6a0f371113d8b55b421ee56dd1dd  gcc/ada/sem_ch11.ads
  e102106501ec17369ddacce53c1c6c05  gcc/ada/sem_ch12.adb
  2622dbf1c1774a89ada3cba34f1da316  gcc/ada/sem_ch12.ads
! fe468d84a62f2f72acdbd42edefd07a3  gcc/ada/sem_ch13.adb
! 5a191101027e418c8b7f17e2de83974e  gcc/ada/sem_ch13.ads
  260948dd8c7af25b5acaa288032c9327  gcc/ada/sem_ch2.adb
  ea86a0345845800d7aaf07f22bb4bf6c  gcc/ada/sem_ch2.ads
! 16487e5a4beceeb61156eef9164b5a92  gcc/ada/sem_ch3.adb
  2d8f83bc46638356bc311ccd50015b1f  gcc/ada/sem_ch3.ads
! cfc168bf16bdebbf63caf777fdab624b  gcc/ada/sem_ch4.adb
  fdd750bd30c3186d912dfed4717a2c0c  gcc/ada/sem_ch4.ads
! d56d69896c39ceb528159bbbbc893f8d  gcc/ada/sem_ch5.adb
! e74090a112811016e80d43ac91dab627  gcc/ada/sem_ch5.ads
! e2df9d15abcb457e60ebe88e13c8516d  gcc/ada/sem_ch6.adb
  9ac8c4c57213097618cdb7c0b7b4f47b  gcc/ada/sem_ch6.ads
! b3b1b2c59583e619f79626acfa10b730  gcc/ada/sem_ch7.adb
  b15ba6dec89e775b188e9d07764efc63  gcc/ada/sem_ch7.ads
! 12ac203d7aca529a8cc07c861d7ef900  gcc/ada/sem_ch8.adb
  5bcf24e9f3725dd07ba44097469a5101  gcc/ada/sem_ch8.ads
  705c86e7eb2e8956f7753dbcb1619557  gcc/ada/sem_ch9.adb
  11764389473d404a17921f767d1eadd4  gcc/ada/sem_ch9.ads
*************** be5bd8727bcc81e7515f2a0386cf8af3  gcc/ad
*** 2962,2968 ****
  39b96f04803db97ae1f7376d30a0cfec  gcc/ada/sem_mech.ads
  ee6e41995c43f0c4420c529b33e9383b  gcc/ada/sem_prag.adb
  74c910ce428c01e6523f86e202f26040  gcc/ada/sem_prag.ads
! 37f6510313fc653044902a4c7269f6bd  gcc/ada/sem_res.adb
  8909dffcc7f45c0fbe30840278381a64  gcc/ada/sem_res.ads
  4e8a9bc2b398560942d0c08f4017fabb  gcc/ada/sem_scil.adb
  64ae38c93be63a67f143484eba77604b  gcc/ada/sem_scil.ads
--- 2962,2968 ----
  39b96f04803db97ae1f7376d30a0cfec  gcc/ada/sem_mech.ads
  ee6e41995c43f0c4420c529b33e9383b  gcc/ada/sem_prag.adb
  74c910ce428c01e6523f86e202f26040  gcc/ada/sem_prag.ads
! 0ab6d8474a7966b04fd6f35cd37e5786  gcc/ada/sem_res.adb
  8909dffcc7f45c0fbe30840278381a64  gcc/ada/sem_res.ads
  4e8a9bc2b398560942d0c08f4017fabb  gcc/ada/sem_scil.adb
  64ae38c93be63a67f143484eba77604b  gcc/ada/sem_scil.ads
*************** ee6e41995c43f0c4420c529b33e9383b  gcc/ad
*** 2970,2977 ****
  21afb93e10bb9446fcbf7577bbf39c7f  gcc/ada/sem_smem.ads
  e88c721aecd60ff49f0090121637484a  gcc/ada/sem_type.adb
  65653b347d1d3f800e49cd916a551d1c  gcc/ada/sem_type.ads
! b732c369e0629f74c79fb8f85ff57c97  gcc/ada/sem_util.adb
! 7945410f9fd30da644dbc987fbad7e90  gcc/ada/sem_util.ads
  9f2ddb5c1f96bfb925bc1c9fbbc0c3a5  gcc/ada/sem_warn.adb
  1952fbda97ea4c6506f452eac9934bb4  gcc/ada/sem_warn.ads
  75ee1e8bae201fd70d666856c4dbb8e5  gcc/ada/set_targ.adb
--- 2970,2977 ----
  21afb93e10bb9446fcbf7577bbf39c7f  gcc/ada/sem_smem.ads
  e88c721aecd60ff49f0090121637484a  gcc/ada/sem_type.adb
  65653b347d1d3f800e49cd916a551d1c  gcc/ada/sem_type.ads
! ffa135485c94c3ecc781ce9d9946c70e  gcc/ada/sem_util.adb
! 0343e7f40545d2aecba69365d6cd29ef  gcc/ada/sem_util.ads
  9f2ddb5c1f96bfb925bc1c9fbbc0c3a5  gcc/ada/sem_warn.adb
  1952fbda97ea4c6506f452eac9934bb4  gcc/ada/sem_warn.ads
  75ee1e8bae201fd70d666856c4dbb8e5  gcc/ada/set_targ.adb
*************** af6b93fe92dc2703693dbc958472e99d  gcc/ad
*** 3000,3007 ****
  1f835777da26c9f79fbc56b671e06655  gcc/ada/sinput-l.ads
  4c47a09e0165de090d03fa2396d99a7a  gcc/ada/sinput.adb
  29e03402590e97abf9061944873aaacf  gcc/ada/sinput.ads
! 83660dce94bca57b58843b48abc86554  gcc/ada/snames.adb-tmpl
! 82526b31467c89f21c69ede060995c7a  gcc/ada/snames.ads-tmpl
  0eae6e077005b627eacdbc0d53788ac6  gcc/ada/snames.h-tmpl
  96b1e5efcfe4df7fd150f5a977046c58  gcc/ada/socket.c
  2b5db13cfe242efb9e224cb722660071  gcc/ada/spark_xrefs.adb
--- 3000,3007 ----
  1f835777da26c9f79fbc56b671e06655  gcc/ada/sinput-l.ads
  4c47a09e0165de090d03fa2396d99a7a  gcc/ada/sinput.adb
  29e03402590e97abf9061944873aaacf  gcc/ada/sinput.ads
! 23c7e3d7e0ba66059d79b2b45dc91c35  gcc/ada/snames.adb-tmpl
! 95afb0e5d03b45d12eb3aa05203097a8  gcc/ada/snames.ads-tmpl
  0eae6e077005b627eacdbc0d53788ac6  gcc/ada/snames.h-tmpl
  96b1e5efcfe4df7fd150f5a977046c58  gcc/ada/socket.c
  2b5db13cfe242efb9e224cb722660071  gcc/ada/spark_xrefs.adb
*************** d39a228bc00567be8fb055d12f52ca9e  gcc/ad
*** 3038,3044 ****
  7d3f0ad91a40c454a9bcf4bbcd5dee41  gcc/ada/tbuild.adb
  d9026bdc2cb7c2a1fdb52eefe1467c6c  gcc/ada/tbuild.ads
  a8c81c0efe5427a150cfb60b39a14bb0  gcc/ada/terminals.c
! b34a23fedc707e4631da4bef3ff73b7a  gcc/ada/tracebak.c
  e2442eee8e93362ce0a36da7e748378f  gcc/ada/treepr.adb
  b3bbe99b27a0b92b6a959b36cbc316ee  gcc/ada/treepr.ads
  98ac01399ba1a6f424fafb018f08a955  gcc/ada/ttypes.ads
--- 3038,3044 ----
  7d3f0ad91a40c454a9bcf4bbcd5dee41  gcc/ada/tbuild.adb
  d9026bdc2cb7c2a1fdb52eefe1467c6c  gcc/ada/tbuild.ads
  a8c81c0efe5427a150cfb60b39a14bb0  gcc/ada/terminals.c
! c3d2651f151a43580bf75d04627946ab  gcc/ada/tracebak.c
  e2442eee8e93362ce0a36da7e748378f  gcc/ada/treepr.adb
  b3bbe99b27a0b92b6a959b36cbc316ee  gcc/ada/treepr.ads
  98ac01399ba1a6f424fafb018f08a955  gcc/ada/ttypes.ads
*************** aebb4c3b9e607164c25541593333b832  gcc/al
*** 3107,3113 ****
  778d47cffcd16d50f7105f7a8bd35d32  gcc/algol68/a68-low-strings.cc
  de4cb485173b396d55860a98e328be5b  gcc/algol68/a68-low-structs.cc
  7675b3dfcea25bedcbe52f98cecdf7e2  gcc/algol68/a68-low-unions.cc
! 8cfeddfa0b4320f1fa5ad5f98157333b  gcc/algol68/a68-low-units.cc
  5c0c66ed30007b50d34d279047ef4bc6  gcc/algol68/a68-low.cc
  57f5f332612b159fdee8fb6fb9d8ab16  gcc/algol68/a68-moids-diagnostics.cc
  c8f59e26255a9bc185068084b4135289  gcc/algol68/a68-moids-misc.cc
--- 3107,3113 ----
  778d47cffcd16d50f7105f7a8bd35d32  gcc/algol68/a68-low-strings.cc
  de4cb485173b396d55860a98e328be5b  gcc/algol68/a68-low-structs.cc
  7675b3dfcea25bedcbe52f98cecdf7e2  gcc/algol68/a68-low-unions.cc
! a1723a5397ce9b3b4794fa328fabb803  gcc/algol68/a68-low-units.cc
  5c0c66ed30007b50d34d279047ef4bc6  gcc/algol68/a68-low.cc
  57f5f332612b159fdee8fb6fb9d8ab16  gcc/algol68/a68-moids-diagnostics.cc
  c8f59e26255a9bc185068084b4135289  gcc/algol68/a68-moids-misc.cc
*************** eb200628692c30c1ade0eaeabcddf008  gcc/al
*** 3125,3131 ****
  3789b4b4b2b84341d4e2c050f5f10acf  gcc/algol68/a68-parser-moids-equivalence.cc
  7264507a5832537766582e01e375c299  gcc/algol68/a68-parser-pragmat.cc
  511e8c8cf5328832a3056cf53496ef3f  gcc/algol68/a68-parser-prelude.cc
! 7579b4ff69d8b1e981c1f7981f089889  gcc/algol68/a68-parser-scanner.cc
  31c1ad0a156b1f8ddff8568add436c78  gcc/algol68/a68-parser-scope.cc
  58e5a6738eeaab552950df71cf50d196  gcc/algol68/a68-parser-serial-dsa.cc
  2ecb898826a3cbba5b0001580ba56498  gcc/algol68/a68-parser-taxes.cc
--- 3125,3131 ----
  3789b4b4b2b84341d4e2c050f5f10acf  gcc/algol68/a68-parser-moids-equivalence.cc
  7264507a5832537766582e01e375c299  gcc/algol68/a68-parser-pragmat.cc
  511e8c8cf5328832a3056cf53496ef3f  gcc/algol68/a68-parser-prelude.cc
! abb214538a84d4f7813b560d3a1a8dd3  gcc/algol68/a68-parser-scanner.cc
  31c1ad0a156b1f8ddff8568add436c78  gcc/algol68/a68-parser-scope.cc
  58e5a6738eeaab552950df71cf50d196  gcc/algol68/a68-parser-serial-dsa.cc
  2ecb898826a3cbba5b0001580ba56498  gcc/algol68/a68-parser-taxes.cc
*************** ca4abac71b91773df74abdea22798551  gcc/al
*** 3144,3150 ****
  9c3d535a7da271c49e76b9709e556383  gcc/algol68/ga68-exports.pk
  f150e2c760036b980e94ec7bb14e1172  gcc/algol68/ga68-internals.texi
  9e575ac412a858aa8a5379d25d2c31f4  gcc/algol68/ga68.texi
! 95e36714ad60d57199b1727eb7970bea  gcc/algol68/ga68.vw
  0a91d85c360d5ee3eb6258aecdab4636  gcc/algol68/lang-specs.h
  55e32b4ac4d7a159a683785bd5ee4c7a  gcc/algol68/lang.opt
  411f26970a0d93b07c697a1bcfeda50c  gcc/algol68/lang.opt.urls
--- 3144,3150 ----
  9c3d535a7da271c49e76b9709e556383  gcc/algol68/ga68-exports.pk
  f150e2c760036b980e94ec7bb14e1172  gcc/algol68/ga68-internals.texi
  9e575ac412a858aa8a5379d25d2c31f4  gcc/algol68/ga68.texi
! 55f21b413e4afdb471156159a2a68e16  gcc/algol68/ga68.vw
  0a91d85c360d5ee3eb6258aecdab4636  gcc/algol68/lang-specs.h
  55e32b4ac4d7a159a683785bd5ee4c7a  gcc/algol68/lang.opt
  411f26970a0d93b07c697a1bcfeda50c  gcc/algol68/lang.opt.urls
*************** fea6b5b48893aa4b0ce22c46ca96691b  gcc/bu
*** 3299,3305 ****
  8925a4aab21fe60c0eff69d3baa0ab63  gcc/builtins.cc
  c69491e1e06e8252126bfd579bd74d4d  gcc/builtins.def
  4f577c1f20985f1ba3c1672476f1a2da  gcc/builtins.h
! e2b6e81c1bd4a132256deb55d818ee28  gcc/c-family/ChangeLog
  ea3fa1f4d7390a105fa3caab4f79aaf7  gcc/c-family/ChangeLog.gimple-classes
  aaea141fd41a559841cb76e33800c289  gcc/c-family/c-ada-spec.cc
  f60a13b470e8e51db83383bf9f9f921e  gcc/c-family/c-ada-spec.h
--- 3299,3305 ----
  8925a4aab21fe60c0eff69d3baa0ab63  gcc/builtins.cc
  c69491e1e06e8252126bfd579bd74d4d  gcc/builtins.def
  4f577c1f20985f1ba3c1672476f1a2da  gcc/builtins.h
! 64896a1193baf9f1fbdb77fe523041c8  gcc/c-family/ChangeLog
  ea3fa1f4d7390a105fa3caab4f79aaf7  gcc/c-family/ChangeLog.gimple-classes
  aaea141fd41a559841cb76e33800c289  gcc/c-family/c-ada-spec.cc
  f60a13b470e8e51db83383bf9f9f921e  gcc/c-family/c-ada-spec.h
*************** fba23d68ba623c33aef279b93a24ee01  gcc/c-
*** 3307,3313 ****
  abc75c3bf4cdfc2d9a6bb6075cf16204  gcc/c-family/c-common.cc
  6522339cd83ff225a1ff9e0eab971eab  gcc/c-family/c-common.def
  d8d1b26fe0f361bd790e9276ab8e5ae9  gcc/c-family/c-common.h
! bfd2965f7d480323f9543caf12c3ec8b  gcc/c-family/c-cppbuiltin.cc
  0b9194e38297d00cf3fac80365cc07af  gcc/c-family/c-dump.cc
  785b5f9c39e1d26ec0e4f70880e6202a  gcc/c-family/c-format.cc
  1adde7951b864b565a2b79c5461d43fa  gcc/c-family/c-format.h
--- 3307,3313 ----
  abc75c3bf4cdfc2d9a6bb6075cf16204  gcc/c-family/c-common.cc
  6522339cd83ff225a1ff9e0eab971eab  gcc/c-family/c-common.def
  d8d1b26fe0f361bd790e9276ab8e5ae9  gcc/c-family/c-common.h
! 5043f17c7fa7d40c7d1e5eb057228547  gcc/c-family/c-cppbuiltin.cc
  0b9194e38297d00cf3fac80365cc07af  gcc/c-family/c-dump.cc
  785b5f9c39e1d26ec0e4f70880e6202a  gcc/c-family/c-format.cc
  1adde7951b864b565a2b79c5461d43fa  gcc/c-family/c-format.h
*************** ea821c9d267c64dd8b74aad9d0189834  gcc/c-
*** 3335,3352 ****
  eb0fcc324140f72001698df8e19f05c4  gcc/c-family/c-ubsan.cc
  298f1278576690ff4398c33310700f52  gcc/c-family/c-ubsan.h
  309adcb76e5a3c3f022c2d30b3bbda93  gcc/c-family/c-warn.cc
! 78fb08f9aa24bf5c984caf3bdda019df  gcc/c-family/c.opt
! 625ce108c3e61a98b26097f6e07f2a8b  gcc/c-family/c.opt.urls
  6453e733397a8ab931434f4f73ee7d7b  gcc/c-family/cppspec.cc
  58ecef7621a9577e43ac42cfceae8864  gcc/c-family/known-headers.cc
  377686cbbf62a7d61d251d3f74cddb5b  gcc/c-family/known-headers.h
  431045382c41554804be1959c1596be4  gcc/c-family/name-hint.h
  3bae9e281cc87b35f63e906373f3b446  gcc/c-family/stub-objc.cc
! 1541c38e97bf723fada67295bb48f459  gcc/c/ChangeLog
  cbffb341640e7c4b16792e0951fffeca  gcc/c/Make-lang.in
  3920e3ee16f5b5955d40584fea53c441  gcc/c/c-aux-info.cc
  cd5bab8a4deeaa0369ae59b9403d06a2  gcc/c/c-convert.cc
! 6a0f501da87bbc7ed3a4ab43c87c05f5  gcc/c/c-decl.cc
  92707173973fa48fbb8dda88f5af625a  gcc/c/c-errors.cc
  fb28bfedbe8c8f41f339af7936b3b22f  gcc/c/c-fold.cc
  9087221c62ac81d002665b0e3ae2c55f  gcc/c/c-lang.cc
--- 3335,3352 ----
  eb0fcc324140f72001698df8e19f05c4  gcc/c-family/c-ubsan.cc
  298f1278576690ff4398c33310700f52  gcc/c-family/c-ubsan.h
  309adcb76e5a3c3f022c2d30b3bbda93  gcc/c-family/c-warn.cc
! 9c3666c11e703d428f5a5c74c71136af  gcc/c-family/c.opt
! bbfcfbcc99a479fc2ae2a14b2cc35697  gcc/c-family/c.opt.urls
  6453e733397a8ab931434f4f73ee7d7b  gcc/c-family/cppspec.cc
  58ecef7621a9577e43ac42cfceae8864  gcc/c-family/known-headers.cc
  377686cbbf62a7d61d251d3f74cddb5b  gcc/c-family/known-headers.h
  431045382c41554804be1959c1596be4  gcc/c-family/name-hint.h
  3bae9e281cc87b35f63e906373f3b446  gcc/c-family/stub-objc.cc
! 991286d54e2438c422945b426834e504  gcc/c/ChangeLog
  cbffb341640e7c4b16792e0951fffeca  gcc/c/Make-lang.in
  3920e3ee16f5b5955d40584fea53c441  gcc/c/c-aux-info.cc
  cd5bab8a4deeaa0369ae59b9403d06a2  gcc/c/c-convert.cc
! 376136c6838c9c6574ee40da09f65c76  gcc/c/c-decl.cc
  92707173973fa48fbb8dda88f5af625a  gcc/c/c-errors.cc
  fb28bfedbe8c8f41f339af7936b3b22f  gcc/c/c-fold.cc
  9087221c62ac81d002665b0e3ae2c55f  gcc/c/c-lang.cc
*************** f324d0b84a110790909734ef326e960a  gcc/c/
*** 3357,3363 ****
  f6b634d7c0204c419cf4fb7b48193fad  gcc/c/c-parser.h
  4db955734effe2d0c9aac0379d2e6a8c  gcc/c/c-tree.def
  b0201ab49a706ee18aa68d28efef4030  gcc/c/c-tree.h
! f1040ded443d558e5b8df46e4aac3fef  gcc/c/c-typeck.cc
  5804f7ee3eccdfb7c9a64e40b20ccc79  gcc/c/config-lang.in
  58370619d5c4739b7d81d5f899913a0c  gcc/c/gccspec.cc
  3006cd4ab743e1a8087fc267168774ce  gcc/c/gimple-parser.cc
--- 3357,3363 ----
  f6b634d7c0204c419cf4fb7b48193fad  gcc/c/c-parser.h
  4db955734effe2d0c9aac0379d2e6a8c  gcc/c/c-tree.def
  b0201ab49a706ee18aa68d28efef4030  gcc/c/c-tree.h
! dc649166cca516c59c1a184e7e551f81  gcc/c/c-typeck.cc
  5804f7ee3eccdfb7c9a64e40b20ccc79  gcc/c/config-lang.in
  58370619d5c4739b7d81d5f899913a0c  gcc/c/gccspec.cc
  3006cd4ab743e1a8087fc267168774ce  gcc/c/gimple-parser.cc
*************** b50dcacbe77c96809023aa599a556717  gcc/cg
*** 3394,3400 ****
  a9229e8ac3f0d366e296e57756becd23  gcc/cgraphunit.cc
  45b21ab7ea818c3a3ce60bf8d3cbd252  gcc/channels.h
  f2981f79a749a2269d7ea349ab37ca3e  gcc/cif-code.def
! 87756a34f10f46aa3afccd2d7229befa  gcc/cobol/ChangeLog
  7e9a5134b9a255eadbcb53d2153defa2  gcc/cobol/Make-lang.in
  0a84e784d2bc4066654d2377fc6a2930  gcc/cobol/TODO
  de7a1dd71b6ec640080ccccde82e384c  gcc/cobol/cbldiag.h
--- 3394,3400 ----
  a9229e8ac3f0d366e296e57756becd23  gcc/cgraphunit.cc
  45b21ab7ea818c3a3ce60bf8d3cbd252  gcc/channels.h
  f2981f79a749a2269d7ea349ab37ca3e  gcc/cif-code.def
! 66e38d3716b7b64e73cc14563a460419  gcc/cobol/ChangeLog
  7e9a5134b9a255eadbcb53d2153defa2  gcc/cobol/Make-lang.in
  0a84e784d2bc4066654d2377fc6a2930  gcc/cobol/TODO
  de7a1dd71b6ec640080ccccde82e384c  gcc/cobol/cbldiag.h
*************** de7a1dd71b6ec640080ccccde82e384c  gcc/co
*** 3403,3409 ****
  314ba2fe46efd7508b3cd6ef99aa964f  gcc/cobol/cdfval.h
  39a7cc8aae37a642491e77796d652ebe  gcc/cobol/cobol-system.h
  a800f30431cfe90b668018187bd2c2db  gcc/cobol/cobol1.cc
! b7fdf5b7df9733140ec9ca1b153cbf9c  gcc/cobol/compare.cc
  30fe1e768a76bb15b7d6d2d12bb53a3a  gcc/cobol/compare.h
  8b7f26d4855e5bb69a66eecc586d9742  gcc/cobol/config-lang.in
  7e43ef597462b3ceabf3c197b4017e7c  gcc/cobol/convert.cc
--- 3403,3409 ----
  314ba2fe46efd7508b3cd6ef99aa964f  gcc/cobol/cdfval.h
  39a7cc8aae37a642491e77796d652ebe  gcc/cobol/cobol-system.h
  a800f30431cfe90b668018187bd2c2db  gcc/cobol/cobol1.cc
! 92177669b306d7d54e7931f18dc097be  gcc/cobol/compare.cc
  30fe1e768a76bb15b7d6d2d12bb53a3a  gcc/cobol/compare.h
  8b7f26d4855e5bb69a66eecc586d9742  gcc/cobol/config-lang.in
  7e43ef597462b3ceabf3c197b4017e7c  gcc/cobol/convert.cc
*************** b14c53972a7aa91a15097c505f00473b  gcc/co
*** 3415,3428 ****
  5fd8a970faa5c6919d491732f242c58c  gcc/cobol/gcobol.1
  7a73ffe93cdd304879a42f225aa554ee  gcc/cobol/gcobol.3
  21b840090e9923bdd5cb47e4468e3fd9  gcc/cobol/gcobolspec.cc
! 6706b38ffb89e0e80c1b2fff552c98c3  gcc/cobol/genapi.cc
! 080b7c465c851dab0832fbd0f5cce8c7  gcc/cobol/genapi.h
! eeeca905e5679aa6edaec841b7363420  gcc/cobol/gengen.cc
  8d0ab0fc1957927b07dd60145858e817  gcc/cobol/gengen.h
! 463a149c0c51397aaf084b9d67787fdc  gcc/cobol/genmath.cc
  78d263e35c67698f367e118c95157cb4  gcc/cobol/genmath.h
! 56b6fd8f8c6944a74789c6d47587b1fe  gcc/cobol/genutil.cc
! 83670650e85afb5c91f00e75d86874dd  gcc/cobol/genutil.h
  7b9c1ead6f9d3661133f7f732811719c  gcc/cobol/help.gen
  0c56a591cf166a8d83553c2afd4b3ce3  gcc/cobol/inspect.h
  3d9b3d19800f5ee15910accfc528aeb8  gcc/cobol/lang-specs.h
--- 3415,3428 ----
  5fd8a970faa5c6919d491732f242c58c  gcc/cobol/gcobol.1
  7a73ffe93cdd304879a42f225aa554ee  gcc/cobol/gcobol.3
  21b840090e9923bdd5cb47e4468e3fd9  gcc/cobol/gcobolspec.cc
! 015903a9ad1927b4460141260a91eca6  gcc/cobol/genapi.cc
! 67a6e015d14ac5703597d5816867c493  gcc/cobol/genapi.h
! 926207c629ee8f5d569aaa7d746dfc2f  gcc/cobol/gengen.cc
  8d0ab0fc1957927b07dd60145858e817  gcc/cobol/gengen.h
! 01a4b10321e6de7af3668e2ad39dd21a  gcc/cobol/genmath.cc
  78d263e35c67698f367e118c95157cb4  gcc/cobol/genmath.h
! 7a9944037fe4c2afffd612d070c94309  gcc/cobol/genutil.cc
! 08e0c2c2ce1cdf0c25cc8ce8bddf99f0  gcc/cobol/genutil.h
  7b9c1ead6f9d3661133f7f732811719c  gcc/cobol/help.gen
  0c56a591cf166a8d83553c2afd4b3ce3  gcc/cobol/inspect.h
  3d9b3d19800f5ee15910accfc528aeb8  gcc/cobol/lang-specs.h
*************** fd4809576031a8df82aa91899e5e6a5f  gcc/co
*** 3431,3458 ****
  9fe73b216b79989a974880ca437017bc  gcc/cobol/lexio.cc
  c4e48ed28c747d296af503552da42055  gcc/cobol/lexio.h
  bd59aa9de483021d005bb9faa15e3f1f  gcc/cobol/messages.cc
! cb28269acbadaf664730e5112050f881  gcc/cobol/move.cc
! af3d6202a00c38602c163e641953b737  gcc/cobol/parse.y
! d5c128d288f27778bb9ca41b323e9514  gcc/cobol/parse_ante.h
  658e59750efa818db284c44387330580  gcc/cobol/parse_util.h
  43faec6ac9c62d787bdfae40292930d3  gcc/cobol/scan.l
  ff991b8a3eac20d9e6a54b25c2137986  gcc/cobol/scan_ante.h
  0e56ecd630e8eb4c45ccc8b2af09fc4a  gcc/cobol/scan_post.h
! 74a3f55d7d2740db3d3e1945335d4faa  gcc/cobol/show_parse.h
! 75161ca42023dad15cbea413b6d34380  gcc/cobol/structs.cc
! e82b261f1753be53d32fb056a39f498b  gcc/cobol/structs.h
  8adbe13738cf3039ac90116ebe6696c6  gcc/cobol/symbols.cc
  4adbb76938ce7cc9078da06487249df9  gcc/cobol/symbols.h
  2052d3215a215928b26c5296b9e2eea1  gcc/cobol/symfind.cc
  e46c348276950beff20df278e4e041c8  gcc/cobol/token_names.h
  434f4899280e27d0717b2e56d5bf12f2  gcc/cobol/udf/stored-char-length.cbl
! e246fcd7bc99c38f9910d124f8add039  gcc/cobol/util.cc
  395c97f0b12382690815b0e1c1702ec4  gcc/cobol/util.h
  8eceaeb8e762ac925b791d2a5d2a6e16  gcc/collect-utils.cc
  ac937838bf0c954b723fba6b6a088b4c  gcc/collect-utils.h
  38716fe5959af2b954c272008e158928  gcc/collect2-aix.cc
  a56f67bf9504f1f91df64d23b9ce6f3b  gcc/collect2-aix.h
! 5c269615904f73a96e61a487ef498a9e  gcc/collect2.cc
  d48c86bc52a7b8ee38281d6069d3eb6a  gcc/collect2.h
  9b54c6ade2ed5ee11859b498e663936e  gcc/color-macros.h
  903401554d90de06743fb9a836e6a45b  gcc/combine-stack-adj.cc
--- 3431,3458 ----
  9fe73b216b79989a974880ca437017bc  gcc/cobol/lexio.cc
  c4e48ed28c747d296af503552da42055  gcc/cobol/lexio.h
  bd59aa9de483021d005bb9faa15e3f1f  gcc/cobol/messages.cc
! 648fc64113e7fcef513d17bdf576cab3  gcc/cobol/move.cc
! 55901576fdebcc5b08ee6d67ae555da9  gcc/cobol/parse.y
! f3f9686494906e8f608a241fc83a8599  gcc/cobol/parse_ante.h
  658e59750efa818db284c44387330580  gcc/cobol/parse_util.h
  43faec6ac9c62d787bdfae40292930d3  gcc/cobol/scan.l
  ff991b8a3eac20d9e6a54b25c2137986  gcc/cobol/scan_ante.h
  0e56ecd630e8eb4c45ccc8b2af09fc4a  gcc/cobol/scan_post.h
! ee67526be0e3a05e98aa61ae737142ab  gcc/cobol/show_parse.h
! 8a8a8f6e836dff7e452f9cd030542599  gcc/cobol/structs.cc
! 015fac4a42a4bf03d101922bc6f68781  gcc/cobol/structs.h
  8adbe13738cf3039ac90116ebe6696c6  gcc/cobol/symbols.cc
  4adbb76938ce7cc9078da06487249df9  gcc/cobol/symbols.h
  2052d3215a215928b26c5296b9e2eea1  gcc/cobol/symfind.cc
  e46c348276950beff20df278e4e041c8  gcc/cobol/token_names.h
  434f4899280e27d0717b2e56d5bf12f2  gcc/cobol/udf/stored-char-length.cbl
! 1ffa101d977efa2e5166a7255ffb31e7  gcc/cobol/util.cc
  395c97f0b12382690815b0e1c1702ec4  gcc/cobol/util.h
  8eceaeb8e762ac925b791d2a5d2a6e16  gcc/collect-utils.cc
  ac937838bf0c954b723fba6b6a088b4c  gcc/collect-utils.h
  38716fe5959af2b954c272008e158928  gcc/collect2-aix.cc
  a56f67bf9504f1f91df64d23b9ce6f3b  gcc/collect2-aix.h
! 1c5df86c20403f6eef226d8ff2661694  gcc/collect2.cc
  d48c86bc52a7b8ee38281d6069d3eb6a  gcc/collect2.h
  9b54c6ade2ed5ee11859b498e663936e  gcc/color-macros.h
  903401554d90de06743fb9a836e6a45b  gcc/combine-stack-adj.cc
*************** b218f741c2f54f950d065bb40f5125ea  gcc/co
*** 3482,3491 ****
  4d82eb0ae58ac44e02bff98ed16ac27d  gcc/common/config/frv/frv-common.cc
  5b41dfaa1b910962a78074d1e5d611d6  gcc/common/config/gcn/gcn-common.cc
  30ff9a49f51b477d26fe8159736f2269  gcc/common/config/h8300/h8300-common.cc
! f574312c1a5605d4fb4dd6510d703a54  gcc/common/config/i386/cpuinfo.h
! 56038843a55180dec91a495433704ed1  gcc/common/config/i386/i386-common.cc
! 40b5989893d835614717d5893ee7965b  gcc/common/config/i386/i386-cpuinfo.h
! 37e6649cf36e5ffa1040bb2a7d9c55f2  gcc/common/config/i386/i386-isas.h
  9dda9971db0422e2c982905c5e39202c  gcc/common/config/ia64/ia64-common.cc
  24847f756d827cf6015cbb798500e296  gcc/common/config/iq2000/iq2000-common.cc
  df0aff91f92c028b3d1911a08cadc2eb  gcc/common/config/lm32/lm32-common.cc
--- 3482,3491 ----
  4d82eb0ae58ac44e02bff98ed16ac27d  gcc/common/config/frv/frv-common.cc
  5b41dfaa1b910962a78074d1e5d611d6  gcc/common/config/gcn/gcn-common.cc
  30ff9a49f51b477d26fe8159736f2269  gcc/common/config/h8300/h8300-common.cc
! 23d9eb066c68794813c10b8cfd9e563f  gcc/common/config/i386/cpuinfo.h
! f6e1c49ead973cf5c5b2ac79b0e045b7  gcc/common/config/i386/i386-common.cc
! 6a966c99530977a2c3c6e92c3407cd30  gcc/common/config/i386/i386-cpuinfo.h
! d1a06013ad8432341921643b06c69cc7  gcc/common/config/i386/i386-isas.h
  9dda9971db0422e2c982905c5e39202c  gcc/common/config/ia64/ia64-common.cc
  24847f756d827cf6015cbb798500e296  gcc/common/config/iq2000/iq2000-common.cc
  df0aff91f92c028b3d1911a08cadc2eb  gcc/common/config/lm32/lm32-common.cc
*************** b1b166d42b0cd3e8a21a0ad1a418bab7  gcc/co
*** 3505,3511 ****
  67a4e50b29a50485cecd1c144965e97d  gcc/common/config/pa/pa-common.cc
  500435c25f1e8769a7838c3e187195c1  gcc/common/config/pdp11/pdp11-common.cc
  3fe10d934c16b0a06d492096be6d8ee1  gcc/common/config/pru/pru-common.cc
! 44574d088132c471f634888a7570166f  gcc/common/config/riscv/riscv-common.cc
  d0f5525bd704195674a68288e7443aad  gcc/common/config/riscv/riscv-ext-bitmask.def
  c5805e3cf6610b64324ce388e3f5f855  gcc/common/config/rs6000/rs6000-common.cc
  b6c011cb2596e87fbedc97081867b691  gcc/common/config/rx/rx-common.cc
--- 3505,3511 ----
  67a4e50b29a50485cecd1c144965e97d  gcc/common/config/pa/pa-common.cc
  500435c25f1e8769a7838c3e187195c1  gcc/common/config/pdp11/pdp11-common.cc
  3fe10d934c16b0a06d492096be6d8ee1  gcc/common/config/pru/pru-common.cc
! aef7b3012673cbdd0ed03149a9855d06  gcc/common/config/riscv/riscv-common.cc
  d0f5525bd704195674a68288e7443aad  gcc/common/config/riscv/riscv-ext-bitmask.def
  c5805e3cf6610b64324ce388e3f5f855  gcc/common/config/rs6000/rs6000-common.cc
  b6c011cb2596e87fbedc97081867b691  gcc/common/config/rx/rx-common.cc
*************** d3b8ce30c6110489fd0b57d6792f3f29  gcc/co
*** 3520,3544 ****
  88eac990ca6879dcd747cf5113888b1e  gcc/compare-elim.cc
  6137f3da8f70ec4262acab21bb549148  gcc/conditions.h
  4250c8b8d57bf1315174cf436a74a88b  gcc/config.build
! afb930cfc53c99c2513d5b6fb4236004  gcc/config.gcc
  d8b0b26795a60b3a991dfbdafe4cd756  gcc/config.host
! ed5fcae0262853be51496f187c521cf0  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
  09ab460c021260083d94d95ece3cdb5d  gcc/config/aarch64/aarch64-abi-ms-protos.h
  c47b4191f7bac0196ab63ca2c66bfa98  gcc/config/aarch64/aarch64-abi-ms.cc
  148fedc3acd410f7a82133d0e78b02df  gcc/config/aarch64/aarch64-abi-ms.h
  9b6ffa67b7e7f7cc2348fa0dc728072e  gcc/config/aarch64/aarch64-arches.def
  c8a924cfcb693679febdcde3a0cc0809  gcc/config/aarch64/aarch64-builtin-pairs.def
! be19afb9fbd5d2090f0a7ed2fb55fc14  gcc/config/aarch64/aarch64-builtins.cc
! a1a7d26ecab3d6681a1d3f5c2cb77275  gcc/config/aarch64/aarch64-builtins.h
! e78b7b23b597b96f765584732788e2c2  gcc/config/aarch64/aarch64-c.cc
  5f567f76d6adf2e43af2f3a4704e87d6  gcc/config/aarch64/aarch64-coff.h
  a1f52502a32d1ceb3b7cf34c2a6c3e05  gcc/config/aarch64/aarch64-cores.def
  cd1537928dd0fadfa53b88b278af0ed2  gcc/config/aarch64/aarch64-cost-tables.h
  5d9722001af118d5011d62beba0e3879  gcc/config/aarch64/aarch64-d.cc
  3d35dd7bbc8358248117e8edb6f6895f  gcc/config/aarch64/aarch64-d.h
  79671a5430aaab0dd5caaa8bc6b82f82  gcc/config/aarch64/aarch64-early-ra.cc
! 0f04d4db0b98d93d624f6bf49c0b2c61  gcc/config/aarch64/aarch64-elf-metadata.cc
  3d5c9a06fc3373401b1a496b0c2d812a  gcc/config/aarch64/aarch64-elf-metadata.h
  cfe06f94751bf9d5dc61fd5b0184ba2c  gcc/config/aarch64/aarch64-elf-raw.h
  ad46aa5e72a5c2c30247bb3cf2ed9f20  gcc/config/aarch64/aarch64-elf.h
--- 3520,3546 ----
  88eac990ca6879dcd747cf5113888b1e  gcc/compare-elim.cc
  6137f3da8f70ec4262acab21bb549148  gcc/conditions.h
  4250c8b8d57bf1315174cf436a74a88b  gcc/config.build
! aa874308fd041bda98aae42db75b1b17  gcc/config.gcc
  d8b0b26795a60b3a991dfbdafe4cd756  gcc/config.host
! 4db5553c6a48dc11760752ed1aba0b68  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
  09ab460c021260083d94d95ece3cdb5d  gcc/config/aarch64/aarch64-abi-ms-protos.h
  c47b4191f7bac0196ab63ca2c66bfa98  gcc/config/aarch64/aarch64-abi-ms.cc
  148fedc3acd410f7a82133d0e78b02df  gcc/config/aarch64/aarch64-abi-ms.h
+ ae85513692d361bba19f28a2148fcad2  gcc/config/aarch64/aarch64-acle-builtins.cc
+ 9e84c6833cdbd017472f9daa9ead80f6  gcc/config/aarch64/aarch64-acle-builtins.h
  9b6ffa67b7e7f7cc2348fa0dc728072e  gcc/config/aarch64/aarch64-arches.def
  c8a924cfcb693679febdcde3a0cc0809  gcc/config/aarch64/aarch64-builtin-pairs.def
! 795a4867ad981ac883b2ec51b7194208  gcc/config/aarch64/aarch64-builtins.cc
! a3507dcb83cc22f280935ae25197c481  gcc/config/aarch64/aarch64-builtins.h
! 36db7b8469a291518753fb98894a6b15  gcc/config/aarch64/aarch64-c.cc
  5f567f76d6adf2e43af2f3a4704e87d6  gcc/config/aarch64/aarch64-coff.h
  a1f52502a32d1ceb3b7cf34c2a6c3e05  gcc/config/aarch64/aarch64-cores.def
  cd1537928dd0fadfa53b88b278af0ed2  gcc/config/aarch64/aarch64-cost-tables.h
  5d9722001af118d5011d62beba0e3879  gcc/config/aarch64/aarch64-d.cc
  3d35dd7bbc8358248117e8edb6f6895f  gcc/config/aarch64/aarch64-d.h
  79671a5430aaab0dd5caaa8bc6b82f82  gcc/config/aarch64/aarch64-early-ra.cc
! 72e39ce9ab43fffc2436bf28768f040c  gcc/config/aarch64/aarch64-elf-metadata.cc
  3d5c9a06fc3373401b1a496b0c2d812a  gcc/config/aarch64/aarch64-elf-metadata.h
  cfe06f94751bf9d5dc61fd5b0184ba2c  gcc/config/aarch64/aarch64-elf-raw.h
  ad46aa5e72a5c2c30247bb3cf2ed9f20  gcc/config/aarch64/aarch64-elf.h
*************** b5673de84eb78885b56917c7b8b92e97  gcc/co
*** 3561,3611 ****
  bfa2432e1ec80f8de2e43f3f3ba8da0e  gcc/config/aarch64/aarch64-linux.h
  842fb07798922cfc4114312c092bd08f  gcc/config/aarch64/aarch64-modes.def
  ed695db844c2f7ccc7b0b2a95b037a7c  gcc/config/aarch64/aarch64-narrow-gp-writes.cc
  c058178535c874c3d9f517b5db804691  gcc/config/aarch64/aarch64-neon-sve-bridge-builtins.def
  99262ad964faab9a1090f68a8b3d6d7a  gcc/config/aarch64/aarch64-netbsd.h
  4ac96a19bb5198741503893e13567775  gcc/config/aarch64/aarch64-option-extensions.def
  1fcf15030f24490613d6a45d6b439e61  gcc/config/aarch64/aarch64-opts.h
  c58a041b3d1a2f2c6c49f13e8ad85fdc  gcc/config/aarch64/aarch64-passes.def
! 387ff45b0c85ee31db12f38e8f73c2b5  gcc/config/aarch64/aarch64-protos.h
  7beff4ec013b184132d7c933faa51208  gcc/config/aarch64/aarch64-sched-dispatch.cc
  b824341b8f6fdb8eb1667425adf63db8  gcc/config/aarch64/aarch64-sched-dispatch.h
  da15606bcbef7961db958c042bf81c05  gcc/config/aarch64/aarch64-simd-builtin-types.def
! d8a09875663911c993135dcb394a85a2  gcc/config/aarch64/aarch64-simd-builtins.def
! 8f0acfd5455d9572e381b98441bf47a5  gcc/config/aarch64/aarch64-simd-pragma-builtins.def
! c3a2ed443506bfbfc4ed36cb25ef5e84  gcc/config/aarch64/aarch64-simd.md
  f27b31555e077ce25b7e0120a532cfdf  gcc/config/aarch64/aarch64-sme.md
  49d4ace4311e9b1d77ff31b3b8883769  gcc/config/aarch64/aarch64-speculation.cc
! e8ea80cf0a9cf06aaf082fccdec35c26  gcc/config/aarch64/aarch64-sve-builtins-base.cc
  8b08d9a2c35427a6672b61f1b4dcb6ee  gcc/config/aarch64/aarch64-sve-builtins-base.def
! a3c2d7ae7f5a958e8d85a84f0153cbc3  gcc/config/aarch64/aarch64-sve-builtins-base.h
! 3b74ccb1bb630368ce4bcb319e098b43  gcc/config/aarch64/aarch64-sve-builtins-functions.h
! c25b1ec2067960f97deb943a3a5d4f05  gcc/config/aarch64/aarch64-sve-builtins-shapes.cc
! 97c5fdc23b65bcb2ba85ccd1ce66af2e  gcc/config/aarch64/aarch64-sve-builtins-shapes.h
! 37015c038f8cceef0df52b2e378636d3  gcc/config/aarch64/aarch64-sve-builtins-sme.cc
  b7970cc46633371d0ac4e877297d804a  gcc/config/aarch64/aarch64-sve-builtins-sme.def
! 85e1ee139787d52dcd3b9e3d8240453e  gcc/config/aarch64/aarch64-sve-builtins-sme.h
! 72d9017965624c13dca47365eeec3166  gcc/config/aarch64/aarch64-sve-builtins-sve2.cc
! 379aa7f50bf3284a7f30799791cadff3  gcc/config/aarch64/aarch64-sve-builtins-sve2.def
! dee6542d81ff6dc82b52eb6d296ca061  gcc/config/aarch64/aarch64-sve-builtins-sve2.h
! 4b18b1308753ec5ff20bee8d6e7953d6  gcc/config/aarch64/aarch64-sve-builtins.cc
! 0aaa296fe7e877e67b85468885fdb8b5  gcc/config/aarch64/aarch64-sve-builtins.def
! 88f4473ff255da227dee1dbc66c11a5f  gcc/config/aarch64/aarch64-sve-builtins.h
! 64f79feffeec46d4287bb0bbde5d07c7  gcc/config/aarch64/aarch64-sve.md
! 99e2b5bf86169c73e478d3aa7c9f0ce4  gcc/config/aarch64/aarch64-sve2.md
  ce756734c2d086ac2b6f48267acb68ea  gcc/config/aarch64/aarch64-sys-regs.def
  e101bed95b5d0264c364d8bcf1a7705f  gcc/config/aarch64/aarch64-tune.md
  dec4c8fd03ac5636ba08d9523bee06be  gcc/config/aarch64/aarch64-tuning-enums.def
  95775c91d04e9c5cacdd63e6802ca879  gcc/config/aarch64/aarch64-tuning-flags.def
  0eec0dd3dbc5fa83349625d27ac091df  gcc/config/aarch64/aarch64-vxworks.h
! ece526effb9f548bbcca883e282b6b08  gcc/config/aarch64/aarch64.cc
! 753a74c5f9dbe74e4bb48a1c87e1f9b4  gcc/config/aarch64/aarch64.h
! f406cbc23fb4dfe94405d633070da548  gcc/config/aarch64/aarch64.md
  dabea943ce1adc1cd1db5e4de971fbeb  gcc/config/aarch64/aarch64.opt
  5bc2d62d910e1c00bd6eed6ffaa5a18d  gcc/config/aarch64/aarch64.opt.urls
  854a2fd8965d477c5b064388ed354bf1  gcc/config/aarch64/arm_acle.h
  bbf568122f7d6758ec96f71a60e862d8  gcc/config/aarch64/arm_bf16.h
  b156014d3463d59daa50c73ab8e10b54  gcc/config/aarch64/arm_fp16.h
! bc9f94a8fbc7fa3808cb887c3660f068  gcc/config/aarch64/arm_neon.h
  f2108dbfce0ac8bc8e9d922391b75555  gcc/config/aarch64/arm_neon_sve_bridge.h
  f30a98583d7c2cf50310b317a5f959be  gcc/config/aarch64/arm_private_fp8.h
  05ff50623c2d55e39715f09f1b461320  gcc/config/aarch64/arm_private_neon_types.h
--- 3563,3618 ----
  bfa2432e1ec80f8de2e43f3f3ba8da0e  gcc/config/aarch64/aarch64-linux.h
  842fb07798922cfc4114312c092bd08f  gcc/config/aarch64/aarch64-modes.def
  ed695db844c2f7ccc7b0b2a95b037a7c  gcc/config/aarch64/aarch64-narrow-gp-writes.cc
+ 593ed8dd234de53e39dff85783d13b54  gcc/config/aarch64/aarch64-neon-builtins-base.cc
+ 33c4b0a6314f1fa3c0558be828507499  gcc/config/aarch64/aarch64-neon-builtins-base.def
+ 602fef41baffd6cc8a9a75616fd23a2c  gcc/config/aarch64/aarch64-neon-builtins-base.h
+ 38e30e558555e42080b4f7d70fbae81d  gcc/config/aarch64/aarch64-neon-builtins-functions.h
+ 1e0d190d9a4911469b3571688e7af685  gcc/config/aarch64/aarch64-neon-builtins-shapes.cc
+ b548be6514d75d13c2d0e251911b4c80  gcc/config/aarch64/aarch64-neon-builtins-shapes.h
+ ded6adcc93742ca7fba0c4cffeaeabab  gcc/config/aarch64/aarch64-neon-builtins.def
  c058178535c874c3d9f517b5db804691  gcc/config/aarch64/aarch64-neon-sve-bridge-builtins.def
  99262ad964faab9a1090f68a8b3d6d7a  gcc/config/aarch64/aarch64-netbsd.h
  4ac96a19bb5198741503893e13567775  gcc/config/aarch64/aarch64-option-extensions.def
  1fcf15030f24490613d6a45d6b439e61  gcc/config/aarch64/aarch64-opts.h
  c58a041b3d1a2f2c6c49f13e8ad85fdc  gcc/config/aarch64/aarch64-passes.def
! b9b87da6467199531b0bc9f5936f39ec  gcc/config/aarch64/aarch64-protos.h
  7beff4ec013b184132d7c933faa51208  gcc/config/aarch64/aarch64-sched-dispatch.cc
  b824341b8f6fdb8eb1667425adf63db8  gcc/config/aarch64/aarch64-sched-dispatch.h
  da15606bcbef7961db958c042bf81c05  gcc/config/aarch64/aarch64-simd-builtin-types.def
! 07b97d98992798466794748f4e1f2889  gcc/config/aarch64/aarch64-simd-builtins.def
! 2fae3501b318ccd9be92a4b49710913e  gcc/config/aarch64/aarch64-simd-pragma-builtins.def
! 30e9efc832cfd407768379ffec0f579e  gcc/config/aarch64/aarch64-simd.md
  f27b31555e077ce25b7e0120a532cfdf  gcc/config/aarch64/aarch64-sme.md
  49d4ace4311e9b1d77ff31b3b8883769  gcc/config/aarch64/aarch64-speculation.cc
! a465f53092443637560aace59c14d816  gcc/config/aarch64/aarch64-sve-builtins-base.cc
  8b08d9a2c35427a6672b61f1b4dcb6ee  gcc/config/aarch64/aarch64-sve-builtins-base.def
! c21ba709d29fe9718239fabf22dcb9a9  gcc/config/aarch64/aarch64-sve-builtins-base.h
! e07dc533e5b0e4dc3b449e4c1adc288d  gcc/config/aarch64/aarch64-sve-builtins-functions.h
! 3363d50ec0697a876f95e9b1db7e856f  gcc/config/aarch64/aarch64-sve-builtins-shapes.cc
! 3e5ae654cf6c44284fe17547c40d20de  gcc/config/aarch64/aarch64-sve-builtins-shapes.h
! 7244f40a3d5184cd02fb8e2f1975d890  gcc/config/aarch64/aarch64-sve-builtins-sme.cc
  b7970cc46633371d0ac4e877297d804a  gcc/config/aarch64/aarch64-sve-builtins-sme.def
! 1cb175058a4da1ec265f07a8c37df781  gcc/config/aarch64/aarch64-sve-builtins-sme.h
! c5ef020286a62b05a3dc6492b4ce7a5c  gcc/config/aarch64/aarch64-sve-builtins-sve2.cc
! a5319d4e7a44a8b96aeb7f8a96f660d6  gcc/config/aarch64/aarch64-sve-builtins-sve2.def
! 977f50faf21613363e643a782cf84ca3  gcc/config/aarch64/aarch64-sve-builtins-sve2.h
! 9422a2eaa20d292eff64b10bcee8d4f0  gcc/config/aarch64/aarch64-sve-builtins.def
! 90d3781359296ff521d1617a69ed7eea  gcc/config/aarch64/aarch64-sve.md
! 2c33bf2afcc6c1e99efec231b38841d5  gcc/config/aarch64/aarch64-sve2.md
  ce756734c2d086ac2b6f48267acb68ea  gcc/config/aarch64/aarch64-sys-regs.def
  e101bed95b5d0264c364d8bcf1a7705f  gcc/config/aarch64/aarch64-tune.md
  dec4c8fd03ac5636ba08d9523bee06be  gcc/config/aarch64/aarch64-tuning-enums.def
  95775c91d04e9c5cacdd63e6802ca879  gcc/config/aarch64/aarch64-tuning-flags.def
  0eec0dd3dbc5fa83349625d27ac091df  gcc/config/aarch64/aarch64-vxworks.h
! a35fba3cd730a702aa6179b6bb53f8af  gcc/config/aarch64/aarch64.cc
! 060d5024adb45145fa0728ad37082b45  gcc/config/aarch64/aarch64.h
! 148e9de02cbf0ec4e00830cbddf4d3e9  gcc/config/aarch64/aarch64.md
  dabea943ce1adc1cd1db5e4de971fbeb  gcc/config/aarch64/aarch64.opt
  5bc2d62d910e1c00bd6eed6ffaa5a18d  gcc/config/aarch64/aarch64.opt.urls
  854a2fd8965d477c5b064388ed354bf1  gcc/config/aarch64/arm_acle.h
  bbf568122f7d6758ec96f71a60e862d8  gcc/config/aarch64/arm_bf16.h
  b156014d3463d59daa50c73ab8e10b54  gcc/config/aarch64/arm_fp16.h
! 31ad71db061c6989b90f2c1ac906bbe8  gcc/config/aarch64/arm_neon.h
  f2108dbfce0ac8bc8e9d922391b75555  gcc/config/aarch64/arm_neon_sve_bridge.h
  f30a98583d7c2cf50310b317a5f959be  gcc/config/aarch64/arm_private_fp8.h
  05ff50623c2d55e39715f09f1b461320  gcc/config/aarch64/arm_private_neon_types.h
*************** f16190eb3167c87740aaff80ebc646b5  gcc/co
*** 3624,3635 ****
  190b8ad2102cd90ce935883b736ff024  gcc/config/aarch64/geniterators.sh
  b8dedf1142526bb86368b620384f877a  gcc/config/aarch64/gentune.sh
  86eaf33edeb885c2c9ae2a9825879e59  gcc/config/aarch64/host-aarch64-darwin.cc
! eb4b27d2835b87f0005781658c069a43  gcc/config/aarch64/iterators.md
  811f43b19ba5f415244c59b4ab377445  gcc/config/aarch64/neoversev2.md
  b382a70dce13e2b3d554e31443c0dbf0  gcc/config/aarch64/olympus.md
  56d541392b6fc0157c039891f4d3f863  gcc/config/aarch64/predicates.md
  d28594900d3dd9c03845b0a6c7b79bb2  gcc/config/aarch64/rtems.h
! 995e17141128acc7d41cdf9081d39e84  gcc/config/aarch64/t-aarch64
  7e5e5f86679b2cd3564d95ac33603bc1  gcc/config/aarch64/t-aarch64-freebsd
  cbfacc8a400417ba418bcf35c9924095  gcc/config/aarch64/t-aarch64-linux
  1cb36852a4b0d051f70f43b3a8639779  gcc/config/aarch64/t-aarch64-mingw
--- 3631,3642 ----
  190b8ad2102cd90ce935883b736ff024  gcc/config/aarch64/geniterators.sh
  b8dedf1142526bb86368b620384f877a  gcc/config/aarch64/gentune.sh
  86eaf33edeb885c2c9ae2a9825879e59  gcc/config/aarch64/host-aarch64-darwin.cc
! 1228eac8069f6241b45c73c7f6a4ac60  gcc/config/aarch64/iterators.md
  811f43b19ba5f415244c59b4ab377445  gcc/config/aarch64/neoversev2.md
  b382a70dce13e2b3d554e31443c0dbf0  gcc/config/aarch64/olympus.md
  56d541392b6fc0157c039891f4d3f863  gcc/config/aarch64/predicates.md
  d28594900d3dd9c03845b0a6c7b79bb2  gcc/config/aarch64/rtems.h
! 635ba075ee81a2f7d3fac58313c3d74d  gcc/config/aarch64/t-aarch64
  7e5e5f86679b2cd3564d95ac33603bc1  gcc/config/aarch64/t-aarch64-freebsd
  cbfacc8a400417ba418bcf35c9924095  gcc/config/aarch64/t-aarch64-linux
  1cb36852a4b0d051f70f43b3a8639779  gcc/config/aarch64/t-aarch64-mingw
*************** ee1645bd7e049365c9b52b774f3e8324  gcc/co
*** 3663,3669 ****
  7d27c8a92a1bbd8c601e92fb38b15a56  gcc/config/aarch64/tuning_models/neoversen2.h
  5c45d6d9cdea0331a247e4c58d8d8f02  gcc/config/aarch64/tuning_models/neoversen3.h
  11c2bed9720fe99fe0bc3727ecca9875  gcc/config/aarch64/tuning_models/neoversev1.h
! 0e884947a64edcd1a0ab1c2d7f79ecc3  gcc/config/aarch64/tuning_models/neoversev2.h
  850f4e265f4d69a8db04fb6b9a509a73  gcc/config/aarch64/tuning_models/neoversev3.h
  da9eaf909c14d1ac8802b858a796dd0b  gcc/config/aarch64/tuning_models/neoversev3ae.h
  45f7d8d8c8f90694a2721e27d6347703  gcc/config/aarch64/tuning_models/olympus.h
--- 3670,3676 ----
  7d27c8a92a1bbd8c601e92fb38b15a56  gcc/config/aarch64/tuning_models/neoversen2.h
  5c45d6d9cdea0331a247e4c58d8d8f02  gcc/config/aarch64/tuning_models/neoversen3.h
  11c2bed9720fe99fe0bc3727ecca9875  gcc/config/aarch64/tuning_models/neoversev1.h
! 49777b801dff2122d966d9b334b720cf  gcc/config/aarch64/tuning_models/neoversev2.h
  850f4e265f4d69a8db04fb6b9a509a73  gcc/config/aarch64/tuning_models/neoversev3.h
  da9eaf909c14d1ac8802b858a796dd0b  gcc/config/aarch64/tuning_models/neoversev3ae.h
  45f7d8d8c8f90694a2721e27d6347703  gcc/config/aarch64/tuning_models/olympus.h
*************** c598d61cb4c62a43ca9f95d622837449  gcc/co
*** 3766,3772 ****
  dd68b000194684be096bab7e439eae6d  gcc/config/arm/arm-mve-builtins-base.def
  b89eb2d819ab7b39687f97a2e620112b  gcc/config/arm/arm-mve-builtins-base.h
  76c9ba52f5b1e8b2d2fe7e3750adbcbb  gcc/config/arm/arm-mve-builtins-functions.h
! 93cffac38cfef46376017c6e56b9ba49  gcc/config/arm/arm-mve-builtins-shapes.cc
  157421ab7aefe277d0d18d38ea429fdd  gcc/config/arm/arm-mve-builtins-shapes.h
  cbc9ce794eac388614494b30973bd668  gcc/config/arm/arm-mve-builtins.cc
  e0fbe1dcad67c21113339fdfd76d1a7d  gcc/config/arm/arm-mve-builtins.def
--- 3773,3779 ----
  dd68b000194684be096bab7e439eae6d  gcc/config/arm/arm-mve-builtins-base.def
  b89eb2d819ab7b39687f97a2e620112b  gcc/config/arm/arm-mve-builtins-base.h
  76c9ba52f5b1e8b2d2fe7e3750adbcbb  gcc/config/arm/arm-mve-builtins-functions.h
! ea72aee467f7e86d31310bb4332ccec2  gcc/config/arm/arm-mve-builtins-shapes.cc
  157421ab7aefe277d0d18d38ea429fdd  gcc/config/arm/arm-mve-builtins-shapes.h
  cbc9ce794eac388614494b30973bd668  gcc/config/arm/arm-mve-builtins.cc
  e0fbe1dcad67c21113339fdfd76d1a7d  gcc/config/arm/arm-mve-builtins.def
*************** d893aaf4f67074e751cfdcb34f3a8fb9  gcc/co
*** 3892,3900 ****
  7694efecfa1a86f5d70c1dcee34a8ffd  gcc/config/avr/avr-passes.def
  aed97a2b02b21f1df8924d81ddb284c9  gcc/config/avr/avr-protos.h
  4ee8705558d223eb1da7a1266af8c799  gcc/config/avr/avr-stdint.h
! 9af9f74ffb44867cb6d77db783b8b914  gcc/config/avr/avr.cc
  7e4633dda230d367d9859c29b7534ae4  gcc/config/avr/avr.h
! ceaabfa9f3ad7f42cc0e5417e7599750  gcc/config/avr/avr.md
  2c8e496ccc33a4c3b5ea998449a69941  gcc/config/avr/avr.opt
  f6cef551d36f0002a5f31e6f394d87af  gcc/config/avr/avr.opt.urls
  a2e6c4bc09c4af90d1c01745985baff7  gcc/config/avr/avrlibc.h
--- 3899,3907 ----
  7694efecfa1a86f5d70c1dcee34a8ffd  gcc/config/avr/avr-passes.def
  aed97a2b02b21f1df8924d81ddb284c9  gcc/config/avr/avr-protos.h
  4ee8705558d223eb1da7a1266af8c799  gcc/config/avr/avr-stdint.h
! ca87ed5498d66cca509bfbc9fdd00c42  gcc/config/avr/avr.cc
  7e4633dda230d367d9859c29b7534ae4  gcc/config/avr/avr.h
! 26fd810209d93e437ce0ad5e5c01972d  gcc/config/avr/avr.md
  2c8e496ccc33a4c3b5ea998449a69941  gcc/config/avr/avr.opt
  f6cef551d36f0002a5f31e6f394d87af  gcc/config/avr/avr.opt.urls
  a2e6c4bc09c4af90d1c01745985baff7  gcc/config/avr/avrlibc.h
*************** e8ba563b7eff9a7c1a380d760e1a30a9  gcc/co
*** 4027,4034 ****
  573bb1297b0b70aac60bf7462cd630fe  gcc/config/darwin-protos.h
  8e7a3be360635581116c45ad4ce9f11a  gcc/config/darwin-rust.cc
  cf8b9e265eb733c7c120218863142390  gcc/config/darwin-sections.def
! 5c46dffcbb4433019bee494363e4c4de  gcc/config/darwin.cc
! bac21aa0a86c8fcc448f29c200988083  gcc/config/darwin.h
  148592c1bf513e56d281629f94b70d9b  gcc/config/darwin.opt
  fa92b7f7b8bd38472af4bfd5a8254310  gcc/config/darwin.opt.urls
  4a5f649b74df564d653882eaeaa75adf  gcc/config/default-c.cc
--- 4034,4041 ----
  573bb1297b0b70aac60bf7462cd630fe  gcc/config/darwin-protos.h
  8e7a3be360635581116c45ad4ce9f11a  gcc/config/darwin-rust.cc
  cf8b9e265eb733c7c120218863142390  gcc/config/darwin-sections.def
! ff7718a3dbe11b4bc4c9a4b5988631f9  gcc/config/darwin.cc
! 594950dcd1b1ff70cbd9a14952b78170  gcc/config/darwin.h
  148592c1bf513e56d281629f94b70d9b  gcc/config/darwin.opt
  fa92b7f7b8bd38472af4bfd5a8254310  gcc/config/darwin.opt.urls
  4a5f649b74df564d653882eaeaa75adf  gcc/config/default-c.cc
*************** ca8c1935ac88d760dc3a5b7e97558f28  gcc/co
*** 4116,4122 ****
  613817ee55713099d08c4eb310ec3de7  gcc/config/gcn/gcn-tree.cc
  5cb7b740e8523be8f70427a45d6a7d83  gcc/config/gcn/gcn-valu.md
  67f9685f47f627440161ee40c397d2da  gcc/config/gcn/gcn.cc
! d632d949f3da7cfbae018411a2570acb  gcc/config/gcn/gcn.h
  94f21cc801fd72f666892531d5f883e4  gcc/config/gcn/gcn.md
  8b501b2f2909b52d8b1fcd7d73dc982a  gcc/config/gcn/gcn.opt
  8316cbfe8905418aa5882486602d17ca  gcc/config/gcn/gcn.opt.urls
--- 4123,4129 ----
  613817ee55713099d08c4eb310ec3de7  gcc/config/gcn/gcn-tree.cc
  5cb7b740e8523be8f70427a45d6a7d83  gcc/config/gcn/gcn-valu.md
  67f9685f47f627440161ee40c397d2da  gcc/config/gcn/gcn.cc
! 55244ab071b3b4cf8c0e2f783c4773ec  gcc/config/gcn/gcn.h
  94f21cc801fd72f666892531d5f883e4  gcc/config/gcn/gcn.md
  8b501b2f2909b52d8b1fcd7d73dc982a  gcc/config/gcn/gcn.opt
  8316cbfe8905418aa5882486602d17ca  gcc/config/gcn/gcn.opt.urls
*************** aa96e28006c1237f7a8e2632a3a27bc2  gcc/co
*** 4183,4189 ****
  f1e5f06c465f28afd9d7240d4a7707a0  gcc/config/i386/amxfp8intrin.h
  2c56a7888363879f35573beb9725066b  gcc/config/i386/amxint8intrin.h
  b2ceb0c53bdc26c9ea9142b726bc3dc9  gcc/config/i386/amxmovrsintrin.h
! 49453d9e5c167a646455658e4e34dfd3  gcc/config/i386/amxtf32intrin.h
  baf0560f4d6bf8da12e6556ae1b70476  gcc/config/i386/amxtileintrin.h
  8b7d938636a40959400e79691a773e29  gcc/config/i386/amxtransposeintrin.h
  ef11c556c4495659dcd70655f1559205  gcc/config/i386/athlon.md
--- 4190,4196 ----
  f1e5f06c465f28afd9d7240d4a7707a0  gcc/config/i386/amxfp8intrin.h
  2c56a7888363879f35573beb9725066b  gcc/config/i386/amxint8intrin.h
  b2ceb0c53bdc26c9ea9142b726bc3dc9  gcc/config/i386/amxmovrsintrin.h
! ed53acb43b7e50f8a3aa164159273a97  gcc/config/i386/amxtf32intrin.h
  baf0560f4d6bf8da12e6556ae1b70476  gcc/config/i386/amxtileintrin.h
  8b7d938636a40959400e79691a773e29  gcc/config/i386/amxtransposeintrin.h
  ef11c556c4495659dcd70655f1559205  gcc/config/i386/athlon.md
*************** dbcdd5d37809de3b588c89731b456a95  gcc/co
*** 4254,4260 ****
  1e33ea74ea0aac3b8f07f5a6a2b214fd  gcc/config/i386/cmpccxaddintrin.h
  e31d20e57fcc6b9a15aa65c66ea05643  gcc/config/i386/constraints.md
  6ba0c72d72717542a49115d882af3ce9  gcc/config/i386/core2.md
! 326f51003b15cc03ee3c50435caee6cd  gcc/config/i386/cpuid.h
  b7a784ebc5b7a408ce934c4c77d2f0df  gcc/config/i386/cross-stdarg.h
  eea748dea33c931f2a0211ffd279bd9d  gcc/config/i386/crtdll.h
  49eeb60bb4a4e67c0ca57b4e85355822  gcc/config/i386/cygming.h
--- 4261,4267 ----
  1e33ea74ea0aac3b8f07f5a6a2b214fd  gcc/config/i386/cmpccxaddintrin.h
  e31d20e57fcc6b9a15aa65c66ea05643  gcc/config/i386/constraints.md
  6ba0c72d72717542a49115d882af3ce9  gcc/config/i386/core2.md
! 9d5a9c0371e33928eb2afe6005bb2137  gcc/config/i386/cpuid.h
  b7a784ebc5b7a408ce934c4c77d2f0df  gcc/config/i386/cross-stdarg.h
  eea748dea33c931f2a0211ffd279bd9d  gcc/config/i386/crtdll.h
  49eeb60bb4a4e67c0ca57b4e85355822  gcc/config/i386/cygming.h
*************** eea748dea33c931f2a0211ffd279bd9d  gcc/co
*** 4263,4269 ****
  78fef08ce34bfd3a40c628948e8cd0c4  gcc/config/i386/cygwin.h
  caf754940377d593ccf417ef5d1a2b71  gcc/config/i386/cygwin.opt
  3b362955aab83912528fe683b571c289  gcc/config/i386/cygwin.opt.urls
! 38cb64d1c7c2478dab3692e54e60f46d  gcc/config/i386/darwin.h
  700269de5ce36bf877a561acd6a85d17  gcc/config/i386/darwin32-biarch.h
  1ebe9b73a1eb0eedca8986697cd94b89  gcc/config/i386/darwin64-biarch.h
  5191118040fda96e8e0a2657e346bbba  gcc/config/i386/djgpp-stdint.h
--- 4270,4276 ----
  78fef08ce34bfd3a40c628948e8cd0c4  gcc/config/i386/cygwin.h
  caf754940377d593ccf417ef5d1a2b71  gcc/config/i386/cygwin.opt
  3b362955aab83912528fe683b571c289  gcc/config/i386/cygwin.opt.urls
! c1815f27c510be9cef094b8f790b06e0  gcc/config/i386/darwin.h
  700269de5ce36bf877a561acd6a85d17  gcc/config/i386/darwin32-biarch.h
  1ebe9b73a1eb0eedca8986697cd94b89  gcc/config/i386/darwin64-biarch.h
  5191118040fda96e8e0a2657e346bbba  gcc/config/i386/djgpp-stdint.h
*************** b18770c338209a9276ef5d52a49bde7b  gcc/co
*** 4304,4321 ****
  0ba4d62f46027afe4bb4e8b65a9ab7c2  gcc/config/i386/i386-builtin.def
  8dbd55fdf807ba9b636b99fdf4277e4d  gcc/config/i386/i386-builtins.cc
  be7f06e3ea032dfb39fcda012c812683  gcc/config/i386/i386-builtins.h
! 50ad4cf0d315208b5fa32cdd199b1e01  gcc/config/i386/i386-c.cc
  a0261d6cc006fb86b99f338bdc94ae04  gcc/config/i386/i386-d.cc
  e9c7eebd4e344796f248c93990aa5166  gcc/config/i386/i386-d.h
! 4413b8a808e843b2cd2cf8d061666890  gcc/config/i386/i386-expand.cc
  386e1be7f608621b79970d4d036694f8  gcc/config/i386/i386-expand.h
! 60962eb72cae80af5ffcac0dd35ed997  gcc/config/i386/i386-features.cc
  52056c666db06e99d6978e69f82ed68d  gcc/config/i386/i386-features.h
! dca59d9c03f5b12366f9a926169f396d  gcc/config/i386/i386-isa.def
  848d1b1aa8faaad07d31b78764004e7f  gcc/config/i386/i386-jit.cc
  d743703707286fafa2ce425b1d062ee0  gcc/config/i386/i386-jit.h
  31871dc86b95e35e45aee6cbaaddb18d  gcc/config/i386/i386-modes.def
! 38dad08e84ed5898049e1a571842cfaf  gcc/config/i386/i386-options.cc
  106bb7043496820d393f0522178e1287  gcc/config/i386/i386-options.h
  2db6ec1e569468279f31d11379fe9d8f  gcc/config/i386/i386-opts.h
  9a75f0c116528508f4f48d128eceac38  gcc/config/i386/i386-passes.def
--- 4311,4328 ----
  0ba4d62f46027afe4bb4e8b65a9ab7c2  gcc/config/i386/i386-builtin.def
  8dbd55fdf807ba9b636b99fdf4277e4d  gcc/config/i386/i386-builtins.cc
  be7f06e3ea032dfb39fcda012c812683  gcc/config/i386/i386-builtins.h
! 3ca3efd35f47efb8789dc330b5b92a4f  gcc/config/i386/i386-c.cc
  a0261d6cc006fb86b99f338bdc94ae04  gcc/config/i386/i386-d.cc
  e9c7eebd4e344796f248c93990aa5166  gcc/config/i386/i386-d.h
! 3f09d8a195a87cf9f9e90fda4a3beca0  gcc/config/i386/i386-expand.cc
  386e1be7f608621b79970d4d036694f8  gcc/config/i386/i386-expand.h
! 36650a3206163cca372ce170228e3884  gcc/config/i386/i386-features.cc
  52056c666db06e99d6978e69f82ed68d  gcc/config/i386/i386-features.h
! a36300f5b0bbacff82dff3d8f9bb59ce  gcc/config/i386/i386-isa.def
  848d1b1aa8faaad07d31b78764004e7f  gcc/config/i386/i386-jit.cc
  d743703707286fafa2ce425b1d062ee0  gcc/config/i386/i386-jit.h
  31871dc86b95e35e45aee6cbaaddb18d  gcc/config/i386/i386-modes.def
! abc6148a96c8a75b93a7d239d900a31b  gcc/config/i386/i386-options.cc
  106bb7043496820d393f0522178e1287  gcc/config/i386/i386-options.h
  2db6ec1e569468279f31d11379fe9d8f  gcc/config/i386/i386-opts.h
  9a75f0c116528508f4f48d128eceac38  gcc/config/i386/i386-passes.def
*************** b27f555de50f373127abeb8bcafb02cc  gcc/co
*** 4323,4337 ****
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  91b8b50cba997aef17a61929b5b55a87  gcc/config/i386/i386-rust.cc
  25b3947a11eb9ca52892133ddb36f3f2  gcc/config/i386/i386-rust.h
! 2d821519a90c2e5e525b1eb1aecfb78d  gcc/config/i386/i386.cc
! 2bca9c740dfd2497bcc671f8c94c1c22  gcc/config/i386/i386.h
! 7edcde1f005212316cbb06c4cfb9176c  gcc/config/i386/i386.md
! 7f5e2eb20e3b7ca8af1b3ee7416e8eaf  gcc/config/i386/i386.opt
! b9e680863ab278314c1f2990d2d04fcc  gcc/config/i386/i386.opt.urls
  ec8782b40feb0fc958bf2d6974c70f12  gcc/config/i386/i386elf.h
  e91dbbea4abdb9b61d892b20c00503a9  gcc/config/i386/ia32intrin.h
  045de1254b57ade50e2bc57081860a9b  gcc/config/i386/iamcu.h
! 0140de888b545176ff52f5d176564cc1  gcc/config/i386/immintrin.h
  9a027df315b9256c36477b34d74941c0  gcc/config/i386/k6.md
  c6197d58fec9efd149df19e0da0ca626  gcc/config/i386/keylockerintrin.h
  14d50d2dfe2d4715911f4df64463f1cc  gcc/config/i386/kfreebsd-gnu.h
--- 4330,4344 ----
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  91b8b50cba997aef17a61929b5b55a87  gcc/config/i386/i386-rust.cc
  25b3947a11eb9ca52892133ddb36f3f2  gcc/config/i386/i386-rust.h
! 6305d3cfd8b5da3eb16e826eb4f88db6  gcc/config/i386/i386.cc
! 32ac32e8b15c1eb1d7bbf3e1e0ffd3fe  gcc/config/i386/i386.h
! 171d6e69d8e98fffcf5ee96e842d8332  gcc/config/i386/i386.md
! 28453dc70fa94816b467e1fff313e0cc  gcc/config/i386/i386.opt
! bf46bd00d604a9ea87a3339520bfdb81  gcc/config/i386/i386.opt.urls
  ec8782b40feb0fc958bf2d6974c70f12  gcc/config/i386/i386elf.h
  e91dbbea4abdb9b61d892b20c00503a9  gcc/config/i386/ia32intrin.h
  045de1254b57ade50e2bc57081860a9b  gcc/config/i386/iamcu.h
! 924812eb629ed67431b1c51c197c4db1  gcc/config/i386/immintrin.h
  9a027df315b9256c36477b34d74941c0  gcc/config/i386/k6.md
  c6197d58fec9efd149df19e0da0ca626  gcc/config/i386/keylockerintrin.h
  14d50d2dfe2d4715911f4df64463f1cc  gcc/config/i386/kfreebsd-gnu.h
*************** db114ac74c87743a142214fddaad2687  gcc/co
*** 4387,4393 ****
  92210572b9f9f6481e4649a42d9ac3b0  gcc/config/i386/sm4intrin.h
  5298b8261e081859bbf068b710158e8f  gcc/config/i386/smmintrin.h
  592f748733487ebc51326f6cbf8f1f54  gcc/config/i386/sol2.h
! 7d09275cd0e068df3d7dd3fe8543bce7  gcc/config/i386/sse.md
  52e0114cb9ab8d55aac3c17d06657d71  gcc/config/i386/ssemath.h
  8a6ab9e02097018bc9f1c2b347d29cfa  gcc/config/i386/stringop.def
  a626b4e6cd3e15f4e9d5c769b6391243  gcc/config/i386/subst.md
--- 4394,4400 ----
  92210572b9f9f6481e4649a42d9ac3b0  gcc/config/i386/sm4intrin.h
  5298b8261e081859bbf068b710158e8f  gcc/config/i386/smmintrin.h
  592f748733487ebc51326f6cbf8f1f54  gcc/config/i386/sol2.h
! bb911ba78cc14203852d42d56b356602  gcc/config/i386/sse.md
  52e0114cb9ab8d55aac3c17d06657d71  gcc/config/i386/ssemath.h
  8a6ab9e02097018bc9f1c2b347d29cfa  gcc/config/i386/stringop.def
  a626b4e6cd3e15f4e9d5c769b6391243  gcc/config/i386/subst.md
*************** b33fbb9cf814beaac0cdc5288c020e7b  gcc/co
*** 4461,4467 ****
  48a3beefeac065215e649dc6adc30cc2  gcc/config/ia64/elf.h
  2f9fa9d02defd16cd0d5d4d978f685b6  gcc/config/ia64/freebsd.h
  89edd175b4bfe583ec3ee965092fd5d0  gcc/config/ia64/hpux-unix2003.h
! 5f691f559a55faa543397e5891eeac1c  gcc/config/ia64/hpux.h
  910b1294d85fd32e07bab986de35d85a  gcc/config/ia64/ia64-c.cc
  5d32cfac5c80aa7f76a0fd9a9ee92529  gcc/config/ia64/ia64-modes.def
  25e74d0fdecab081ca69e7ef4c8582e0  gcc/config/ia64/ia64-opts.h
--- 4468,4474 ----
  48a3beefeac065215e649dc6adc30cc2  gcc/config/ia64/elf.h
  2f9fa9d02defd16cd0d5d4d978f685b6  gcc/config/ia64/freebsd.h
  89edd175b4bfe583ec3ee965092fd5d0  gcc/config/ia64/hpux-unix2003.h
! 778646a763caf6c942a7f13e8f14204e  gcc/config/ia64/hpux.h
  910b1294d85fd32e07bab986de35d85a  gcc/config/ia64/ia64-c.cc
  5d32cfac5c80aa7f76a0fd9a9ee92529  gcc/config/ia64/ia64-modes.def
  25e74d0fdecab081ca69e7ef4c8582e0  gcc/config/ia64/ia64-opts.h
*************** fc623524d75c7561f85f81615ecad0ac  gcc/co
*** 4561,4574 ****
  3cfb174db8bc99a9361e597a3e9bd35e  gcc/config/loongarch/loongarch-tune.h
  d56143e5f5703b89f55fb70217a28ac1  gcc/config/loongarch/loongarch.cc
  ad66539c6bf3f1a1fe18304e126ac7fc  gcc/config/loongarch/loongarch.h
! 1bee87f91939a40f1c758e1f7624494a  gcc/config/loongarch/loongarch.md
  62f9bea81246c3dac622d969dabefc1b  gcc/config/loongarch/loongarch.opt
  387011bb9dde5e25493f3602b2fd17bb  gcc/config/loongarch/loongarch.opt.urls
  0458c59163aaa92cd0aa1ca123aa25f6  gcc/config/loongarch/lsx.md
  c7466e5dbde45f48269999a0ee23e193  gcc/config/loongarch/lsxintrin.h
  fe51977e0ac69b0829287b1c8d3f5060  gcc/config/loongarch/musl.h
  e78139f4ba3ac368d8ff57fdf2b8f899  gcc/config/loongarch/predicates.md
! 3ad60f825d198d593a012bc81af17ad7  gcc/config/loongarch/simd.md
  8014a0ac6f61e6fb13b3189724a36103  gcc/config/loongarch/sync.md
  70d4362e3209c6d2b4d8ad4c79d65a4c  gcc/config/loongarch/t-linux
  19a269e2bff5187b276f7e58f79c667c  gcc/config/loongarch/t-loongarch
--- 4568,4581 ----
  3cfb174db8bc99a9361e597a3e9bd35e  gcc/config/loongarch/loongarch-tune.h
  d56143e5f5703b89f55fb70217a28ac1  gcc/config/loongarch/loongarch.cc
  ad66539c6bf3f1a1fe18304e126ac7fc  gcc/config/loongarch/loongarch.h
! b2d82445f8361f64ceed1232349e5595  gcc/config/loongarch/loongarch.md
  62f9bea81246c3dac622d969dabefc1b  gcc/config/loongarch/loongarch.opt
  387011bb9dde5e25493f3602b2fd17bb  gcc/config/loongarch/loongarch.opt.urls
  0458c59163aaa92cd0aa1ca123aa25f6  gcc/config/loongarch/lsx.md
  c7466e5dbde45f48269999a0ee23e193  gcc/config/loongarch/lsxintrin.h
  fe51977e0ac69b0829287b1c8d3f5060  gcc/config/loongarch/musl.h
  e78139f4ba3ac368d8ff57fdf2b8f899  gcc/config/loongarch/predicates.md
! 6f3ee35e09ae9ca83f475ba84e3d294a  gcc/config/loongarch/simd.md
  8014a0ac6f61e6fb13b3189724a36103  gcc/config/loongarch/sync.md
  70d4362e3209c6d2b4d8ad4c79d65a4c  gcc/config/loongarch/t-linux
  19a269e2bff5187b276f7e58f79c667c  gcc/config/loongarch/t-loongarch
*************** a0561d5189d936a2b3f76e586c0a2aa1  gcc/co
*** 4725,4734 ****
  9cb506f69bfb4828b4dc81c2e14b3238  gcc/config/mips/mips-ps-3d.md
  345d90586064a6b98108ed27f48d4599  gcc/config/mips/mips-tables.opt
  216c87627424d946f6245f736be7b5f1  gcc/config/mips/mips-tables.opt.urls
! 6780eb247f72ed9cdaa498ae66ca7454  gcc/config/mips/mips.cc
! 5341095aad822bd0c82d793e8fcd163a  gcc/config/mips/mips.h
  49c4faf7412dfa6a56c131062bfb11b4  gcc/config/mips/mips.md
! 09db4f2e8c03333595305c1b1c1c0fc7  gcc/config/mips/mips.opt
  e27efa10159c17e2479da7d6f900b631  gcc/config/mips/mips.opt.urls
  79c849472a0f91bdf81cbd76d4f9d348  gcc/config/mips/msa.h
  1f178b192f9ea0c39bef7f4b708fcb0f  gcc/config/mips/mti-elf.h
--- 4732,4741 ----
  9cb506f69bfb4828b4dc81c2e14b3238  gcc/config/mips/mips-ps-3d.md
  345d90586064a6b98108ed27f48d4599  gcc/config/mips/mips-tables.opt
  216c87627424d946f6245f736be7b5f1  gcc/config/mips/mips-tables.opt.urls
! a2fc481fb758826736ca9c99df7770d3  gcc/config/mips/mips.cc
! 2289b53a716433aefbf6ce34085efc0d  gcc/config/mips/mips.h
  49c4faf7412dfa6a56c131062bfb11b4  gcc/config/mips/mips.md
! 9e1d6da6faef49b794654a82c276f8d5  gcc/config/mips/mips.opt
  e27efa10159c17e2479da7d6f900b631  gcc/config/mips/mips.opt.urls
  79c849472a0f91bdf81cbd76d4f9d348  gcc/config/mips/msa.h
  1f178b192f9ea0c39bef7f4b708fcb0f  gcc/config/mips/mti-elf.h
*************** bbb2a2cf5c79743f967571a1b148fa76  gcc/co
*** 4900,4906 ****
  5ffc066c68d4afbfd07cc9455e6c32f8  gcc/config/nvptx/nvptx-protos.h
  fbb7de1e9945c721671a67496fd85db0  gcc/config/nvptx/nvptx-sm.def
  b71ce5a615149b6287ceee7848b8c5d6  gcc/config/nvptx/nvptx.cc
! e2305d74b98283e4f9a780049b4f3c82  gcc/config/nvptx/nvptx.h
  e15f6451f0dfff24af4b5ecafe6050ce  gcc/config/nvptx/nvptx.md
  7ef196e33d0fcc3be452238c20b9841d  gcc/config/nvptx/nvptx.opt
  f5c35e6fc1338d61e80f525ad1d27ead  gcc/config/nvptx/nvptx.opt.urls
--- 4907,4913 ----
  5ffc066c68d4afbfd07cc9455e6c32f8  gcc/config/nvptx/nvptx-protos.h
  fbb7de1e9945c721671a67496fd85db0  gcc/config/nvptx/nvptx-sm.def
  b71ce5a615149b6287ceee7848b8c5d6  gcc/config/nvptx/nvptx.cc
! c299717550e64c9e645078aab7fba1ed  gcc/config/nvptx/nvptx.h
  e15f6451f0dfff24af4b5ecafe6050ce  gcc/config/nvptx/nvptx.md
  7ef196e33d0fcc3be452238c20b9841d  gcc/config/nvptx/nvptx.opt
  f5c35e6fc1338d61e80f525ad1d27ead  gcc/config/nvptx/nvptx.opt.urls
*************** d9ed529190073197d920aa6a15ff07f7  gcc/co
*** 5017,5024 ****
  b7544a05ff53accc3d2defcb758626a9  gcc/config/riscv/arcv-rhx100.md
  4a634d8ec9f394f560c8538634cd937a  gcc/config/riscv/arcv-rmx100.md
  67bbc5a81e29ba7c346e27e6a7782608  gcc/config/riscv/autovec-opt.md
! 49c1131e6b1116d7b606f67b60199a26  gcc/config/riscv/autovec.md
! ba775667dc55efc0e0dbc0705c3cdd87  gcc/config/riscv/bitmanip.md
  79dfcd2a0bedb02de4194552f2712fe0  gcc/config/riscv/constraints.md
  cea5b702841429deff64e2e6fd0b626f  gcc/config/riscv/corev.def
  3541ce4817aa1b4ca8a8e3799ba716d8  gcc/config/riscv/corev.md
--- 5024,5031 ----
  b7544a05ff53accc3d2defcb758626a9  gcc/config/riscv/arcv-rhx100.md
  4a634d8ec9f394f560c8538634cd937a  gcc/config/riscv/arcv-rmx100.md
  67bbc5a81e29ba7c346e27e6a7782608  gcc/config/riscv/autovec-opt.md
! edf41a22232744259fbf44f2ae96a8a6  gcc/config/riscv/autovec.md
! 8c6fab8cc48abd58cbae573be6c52639  gcc/config/riscv/bitmanip.md
  79dfcd2a0bedb02de4194552f2712fe0  gcc/config/riscv/constraints.md
  cea5b702841429deff64e2e6fd0b626f  gcc/config/riscv/corev.def
  3541ce4817aa1b4ca8a8e3799ba716d8  gcc/config/riscv/corev.md
*************** bcda2f5a4a2728d5f6bc53cbbd26f90c  gcc/co
*** 5048,5065 ****
  5108deda32a010f8df8d518a2417ba81  gcc/config/riscv/riscv-builtins.cc
  5cb39713c38f481ef65328ccacfc067e  gcc/config/riscv/riscv-c.cc
  33dd09c63fb051a37d26d97469c451d9  gcc/config/riscv/riscv-cmo.def
! 545caffff860e80de36e4ab2e510e9df  gcc/config/riscv/riscv-cores.def
  165a5d0020971e2616fa7c9198c56338  gcc/config/riscv/riscv-d.cc
  c5d537324bd78e2ade1cf59d04fc1f54  gcc/config/riscv/riscv-d.h
  289aa3beac20448eac0ca053c2652b37  gcc/config/riscv/riscv-ext-andes.def
  73412120c98ad39a53f2d6116616035a  gcc/config/riscv/riscv-ext-corev.def
  bdea5a038db730633426d4ab8652a37c  gcc/config/riscv/riscv-ext-mips.def
  982f2f5023f638c594cd4100390ef617  gcc/config/riscv/riscv-ext-sifive.def
! 6aef0384f848e091b1f84d7e64ab667c  gcc/config/riscv/riscv-ext-spacemit.def
  0d561344b80507521c8e686db17fd207  gcc/config/riscv/riscv-ext-thead.def
  ca88603cd61372d621963af0d282a93b  gcc/config/riscv/riscv-ext-ventana.def
  35cc6091445e5818478b68bce82225ed  gcc/config/riscv/riscv-ext.def
! ce40c79a3b7c82c242dd41b984368a7f  gcc/config/riscv/riscv-ext.opt
  8463b74f5d66e1a7f0d58a7ae087d8ad  gcc/config/riscv/riscv-ext.opt.urls
  055aff307d7b174891aad40963ef1a9f  gcc/config/riscv/riscv-feature-bits.h
  70f0932c77decbbcedce26f2f38b3a3e  gcc/config/riscv/riscv-ftypes.def
--- 5055,5072 ----
  5108deda32a010f8df8d518a2417ba81  gcc/config/riscv/riscv-builtins.cc
  5cb39713c38f481ef65328ccacfc067e  gcc/config/riscv/riscv-c.cc
  33dd09c63fb051a37d26d97469c451d9  gcc/config/riscv/riscv-cmo.def
! 0ea6a5e2d81d28c0c554961f3ae68c3a  gcc/config/riscv/riscv-cores.def
  165a5d0020971e2616fa7c9198c56338  gcc/config/riscv/riscv-d.cc
  c5d537324bd78e2ade1cf59d04fc1f54  gcc/config/riscv/riscv-d.h
  289aa3beac20448eac0ca053c2652b37  gcc/config/riscv/riscv-ext-andes.def
  73412120c98ad39a53f2d6116616035a  gcc/config/riscv/riscv-ext-corev.def
  bdea5a038db730633426d4ab8652a37c  gcc/config/riscv/riscv-ext-mips.def
  982f2f5023f638c594cd4100390ef617  gcc/config/riscv/riscv-ext-sifive.def
! 0ef72b5510a7c21bd15a0d6f3660c36a  gcc/config/riscv/riscv-ext-spacemit.def
  0d561344b80507521c8e686db17fd207  gcc/config/riscv/riscv-ext-thead.def
  ca88603cd61372d621963af0d282a93b  gcc/config/riscv/riscv-ext-ventana.def
  35cc6091445e5818478b68bce82225ed  gcc/config/riscv/riscv-ext.def
! 467a60458b08615441009dde3c24f5f8  gcc/config/riscv/riscv-ext.opt
  8463b74f5d66e1a7f0d58a7ae087d8ad  gcc/config/riscv/riscv-ext.opt.urls
  055aff307d7b174891aad40963ef1a9f  gcc/config/riscv/riscv-feature-bits.h
  70f0932c77decbbcedce26f2f38b3a3e  gcc/config/riscv/riscv-ftypes.def
*************** ee8122b7c30f11ad5dc682dad7cf7f55  gcc/co
*** 5095,5101 ****
  3205f1e7859c9ef2f9de42d862780b0a  gcc/config/riscv/riscv-vsetvl.cc
  142fb9988d1433586e8fa0e3b072f655  gcc/config/riscv/riscv-vsetvl.def
  d87a1f40dfc9d93ed1ee9eb9243e12e3  gcc/config/riscv/riscv-zicfilp.cc
! f632af5a70328495b4db844ac40839b6  gcc/config/riscv/riscv.cc
  0b4d02debcffa4764cfdba37ddd0f549  gcc/config/riscv/riscv.h
  b3dc3caafb5f777606faf403f7929c33  gcc/config/riscv/riscv.md
  889bc6068f70f03b008968821d92ad40  gcc/config/riscv/riscv.opt
--- 5102,5108 ----
  3205f1e7859c9ef2f9de42d862780b0a  gcc/config/riscv/riscv-vsetvl.cc
  142fb9988d1433586e8fa0e3b072f655  gcc/config/riscv/riscv-vsetvl.def
  d87a1f40dfc9d93ed1ee9eb9243e12e3  gcc/config/riscv/riscv-zicfilp.cc
! 608ca849e2f08f9c6c723724a35d92b4  gcc/config/riscv/riscv.cc
  0b4d02debcffa4764cfdba37ddd0f549  gcc/config/riscv/riscv.h
  b3dc3caafb5f777606faf403f7929c33  gcc/config/riscv/riscv.md
  889bc6068f70f03b008968821d92ad40  gcc/config/riscv/riscv.opt
*************** ec68b0ff3863802f2f9160b535b38c31  gcc/co
*** 5169,5175 ****
  cbcf88f781d3b1c5edd096738693a993  gcc/config/rs6000/8540.md
  23e421c82ebbfa2eefdf48bcd530fd02  gcc/config/rs6000/a2.md
  a8b1f3ddfb1f6f99004ac2db6cd9dc74  gcc/config/rs6000/aix-stdint.h
! bbec8332d5720d79b0a99a056faab381  gcc/config/rs6000/aix.h
  1fceb97e97a40dc3014fd5d2a8ab5d07  gcc/config/rs6000/aix64.opt
  d70f08b893e019d12b16dc9a70754ef9  gcc/config/rs6000/aix64.opt.urls
  48e2c945bd49f48743765c272b092dc6  gcc/config/rs6000/aix71.h
--- 5176,5182 ----
  cbcf88f781d3b1c5edd096738693a993  gcc/config/rs6000/8540.md
  23e421c82ebbfa2eefdf48bcd530fd02  gcc/config/rs6000/a2.md
  a8b1f3ddfb1f6f99004ac2db6cd9dc74  gcc/config/rs6000/aix-stdint.h
! db8204ac9b6574ece6cdb34a8d1c5465  gcc/config/rs6000/aix.h
  1fceb97e97a40dc3014fd5d2a8ab5d07  gcc/config/rs6000/aix64.opt
  d70f08b893e019d12b16dc9a70754ef9  gcc/config/rs6000/aix64.opt.urls
  48e2c945bd49f48743765c272b092dc6  gcc/config/rs6000/aix71.h
*************** db237fc1717a4075e7b9480205a32fd5  gcc/co
*** 5243,5251 ****
  848a5a527b1584089ecf12aae20b7ca6  gcc/config/rs6000/predicates.md
  63ccc96ff2cef948c080eac4455d02b1  gcc/config/rs6000/rbtree.cc
  8ece9ca8167f5056fa411488a97c6131  gcc/config/rs6000/rbtree.h
! dc3521aad04477a2e9da096fa78d3fd6  gcc/config/rs6000/rs6000-builtin.cc
! ec1b2522c97c6fa2287c44de0618f714  gcc/config/rs6000/rs6000-builtins.def
! 15e52baa355b0c3b725c3e6e55524af0  gcc/config/rs6000/rs6000-c.cc
  f9e94bf7a9305993de9ddd700311aaaa  gcc/config/rs6000/rs6000-call.cc
  4579aba833c122ad0e6a91b573653e2c  gcc/config/rs6000/rs6000-cpus.def
  7b860836fdc33cdfdd29f6348a553096  gcc/config/rs6000/rs6000-d.cc
--- 5250,5258 ----
  848a5a527b1584089ecf12aae20b7ca6  gcc/config/rs6000/predicates.md
  63ccc96ff2cef948c080eac4455d02b1  gcc/config/rs6000/rbtree.cc
  8ece9ca8167f5056fa411488a97c6131  gcc/config/rs6000/rbtree.h
! 5a8a620d69be5ade28e15be87ec36b9a  gcc/config/rs6000/rs6000-builtin.cc
! 332f4f91cdf9a382701e5c41dfd1dc7e  gcc/config/rs6000/rs6000-builtins.def
! bb710aa9f6e98d46357a2a10104dda23  gcc/config/rs6000/rs6000-c.cc
  f9e94bf7a9305993de9ddd700311aaaa  gcc/config/rs6000/rs6000-call.cc
  4579aba833c122ad0e6a91b573653e2c  gcc/config/rs6000/rs6000-cpus.def
  7b860836fdc33cdfdd29f6348a553096  gcc/config/rs6000/rs6000-d.cc
*************** c5022a5818a013ca208704a71fbd6d48  gcc/co
*** 5256,5270 ****
  cd5e92a42bcde77a84b9fbe9e0a3238b  gcc/config/rs6000/rs6000-logue.cc
  108998dcf0201ccd3e147d71251ca9f6  gcc/config/rs6000/rs6000-modes.def
  e6f2820356a7ee18c353376ab3490fb6  gcc/config/rs6000/rs6000-opts.h
! 1a71e197cd01d5d44a4a904978186144  gcc/config/rs6000/rs6000-overload.def
  857d6101dc080e798b79af7bdbacfa9d  gcc/config/rs6000/rs6000-p8swap.cc
  ed259dbc10dcc21110d2d0d8ddde7497  gcc/config/rs6000/rs6000-passes.def
  384645a6c72587ac7501915a0c737e64  gcc/config/rs6000/rs6000-pcrel-opt.cc
! d3a1c98fd13be04e1250b073cb8dcef2  gcc/config/rs6000/rs6000-protos.h
  e6d989b64b588e3c16ea579031fed5ab  gcc/config/rs6000/rs6000-string.cc
  835f22c956cc4deb83970ee9a9b5b79b  gcc/config/rs6000/rs6000-tables.opt
  ce8de9a27f36b759a69194616c02eb38  gcc/config/rs6000/rs6000-tables.opt.urls
! 5cbc4a1ab47e7affb16e68211416d634  gcc/config/rs6000/rs6000.cc
  4517b5e939c3d673f16baceb4e1a371a  gcc/config/rs6000/rs6000.h
  8fab818cce107dc89e5776dc2ba74949  gcc/config/rs6000/rs6000.md
  e407423336f12658b509205c3e8f7130  gcc/config/rs6000/rs6000.opt
--- 5263,5277 ----
  cd5e92a42bcde77a84b9fbe9e0a3238b  gcc/config/rs6000/rs6000-logue.cc
  108998dcf0201ccd3e147d71251ca9f6  gcc/config/rs6000/rs6000-modes.def
  e6f2820356a7ee18c353376ab3490fb6  gcc/config/rs6000/rs6000-opts.h
! 6022d8f1134bcaa87e5c625e70285a24  gcc/config/rs6000/rs6000-overload.def
  857d6101dc080e798b79af7bdbacfa9d  gcc/config/rs6000/rs6000-p8swap.cc
  ed259dbc10dcc21110d2d0d8ddde7497  gcc/config/rs6000/rs6000-passes.def
  384645a6c72587ac7501915a0c737e64  gcc/config/rs6000/rs6000-pcrel-opt.cc
! 27554d327449762be03c44084bead914  gcc/config/rs6000/rs6000-protos.h
  e6d989b64b588e3c16ea579031fed5ab  gcc/config/rs6000/rs6000-string.cc
  835f22c956cc4deb83970ee9a9b5b79b  gcc/config/rs6000/rs6000-tables.opt
  ce8de9a27f36b759a69194616c02eb38  gcc/config/rs6000/rs6000-tables.opt.urls
! 280c604aea23cb28dc9418288135b892  gcc/config/rs6000/rs6000.cc
  4517b5e939c3d673f16baceb4e1a371a  gcc/config/rs6000/rs6000.h
  8fab818cce107dc89e5776dc2ba74949  gcc/config/rs6000/rs6000.md
  e407423336f12658b509205c3e8f7130  gcc/config/rs6000/rs6000.opt
*************** d57d0eb0a8e2193f5cef2aaf1ad6d722  gcc/co
*** 5275,5281 ****
  0a803e7432938644d0614c5d9ee60670  gcc/config/rs6000/si2vmx.h
  b1a1f1ea8636fe96381989b926619397  gcc/config/rs6000/smmintrin.h
  016514c870054ecd799330bad9520a9d  gcc/config/rs6000/spu2vmx.h
! 40cd285fb3dd80f3bf1933e6e5f29daf  gcc/config/rs6000/sync.md
  e8c76038df323d77e90f69c78138b1fd  gcc/config/rs6000/sysv4.h
  e51499a69ac94adadb730c6c5491b97d  gcc/config/rs6000/sysv4.opt
  0ca73e6f14270f4ed0893f866e64b36f  gcc/config/rs6000/sysv4.opt.urls
--- 5282,5288 ----
  0a803e7432938644d0614c5d9ee60670  gcc/config/rs6000/si2vmx.h
  b1a1f1ea8636fe96381989b926619397  gcc/config/rs6000/smmintrin.h
  016514c870054ecd799330bad9520a9d  gcc/config/rs6000/spu2vmx.h
! bcdca18eb657cc5434ae2c3bc89ffc1d  gcc/config/rs6000/sync.md
  e8c76038df323d77e90f69c78138b1fd  gcc/config/rs6000/sysv4.h
  e51499a69ac94adadb730c6c5491b97d  gcc/config/rs6000/sysv4.opt
  0ca73e6f14270f4ed0893f866e64b36f  gcc/config/rs6000/sysv4.opt.urls
*************** aa396b24681954cbcd0cd64bf19d469c  gcc/co
*** 5365,5371 ****
  4a9d0190b77f29fbb14fa9706732f297  gcc/config/s390/s390-protos.h
  29c1637ea8d0fc1f3065a75262ec1eac  gcc/config/s390/s390.cc
  ae1d48d5851707124525babf8404d97f  gcc/config/s390/s390.h
! 15fd6efd3a576891cc1cc229f258002f  gcc/config/s390/s390.md
  ae1754efd7785ad08c6cc930dd08c7ae  gcc/config/s390/s390.opt
  90a97a731513f3119bb12e022497e9ab  gcc/config/s390/s390.opt.urls
  07efe01a921b4fb261d6e59abf21a268  gcc/config/s390/s390intrin.h
--- 5372,5378 ----
  4a9d0190b77f29fbb14fa9706732f297  gcc/config/s390/s390-protos.h
  29c1637ea8d0fc1f3065a75262ec1eac  gcc/config/s390/s390.cc
  ae1d48d5851707124525babf8404d97f  gcc/config/s390/s390.h
! 6a3bb969660b1bffc823ebb0a006fb8d  gcc/config/s390/s390.md
  ae1754efd7785ad08c6cc930dd08c7ae  gcc/config/s390/s390.opt
  90a97a731513f3119bb12e022497e9ab  gcc/config/s390/s390.opt.urls
  07efe01a921b4fb261d6e59abf21a268  gcc/config/s390/s390intrin.h
*************** f5e56d5ff903f46152f37df8bef42eb8  gcc/co
*** 5381,5387 ****
  ac2fbb945245925177ec51f89c3b712c  gcc/config/s390/vector.md
  751941c51673f19ecce32d1d460e0161  gcc/config/s390/vx-builtins.md
  7813da5eac25ac16f589b0319ad43386  gcc/config/s390/x-native
! 863cb3cd0d518ad77cd0acb858da1c2e  gcc/config/sh/constraints.md
  376ad2c04eae328088f98c29c146e5a1  gcc/config/sh/divcost-analysis
  80af0fa1d884568e3a05139cf5cc0347  gcc/config/sh/divtab-sh4-300.cc
  7bb50ae0ccab92da680b0c5aa0a1cabc  gcc/config/sh/divtab-sh4.cc
--- 5388,5394 ----
  ac2fbb945245925177ec51f89c3b712c  gcc/config/s390/vector.md
  751941c51673f19ecce32d1d460e0161  gcc/config/s390/vx-builtins.md
  7813da5eac25ac16f589b0319ad43386  gcc/config/s390/x-native
! 2a15b2cbd3c0499a0d44908df3debdd6  gcc/config/sh/constraints.md
  376ad2c04eae328088f98c29c146e5a1  gcc/config/sh/divcost-analysis
  80af0fa1d884568e3a05139cf5cc0347  gcc/config/sh/divtab-sh4-300.cc
  7bb50ae0ccab92da680b0c5aa0a1cabc  gcc/config/sh/divtab-sh4.cc
*************** f3bf6262de9818c3c91f246d6eccc55d  gcc/co
*** 5392,5409 ****
  b0a510bf1f58701f9674f788dad82ea8  gcc/config/sh/little.h
  1660d28e811d351ce75968a0101a4ce2  gcc/config/sh/netbsd-elf.h
  28445836fce04f79af025f75d08dbefa  gcc/config/sh/newlib.h
! 0caf9a8a46858ee7951c45e38c2f8ca0  gcc/config/sh/predicates.md
  e9dbd0492efb19a466f4e3fc7d56ca09  gcc/config/sh/rtems.h
  ad3ebe150b650b4f81c17838c6fb7d44  gcc/config/sh/rtemself.h
  dfead17f6b810bf033f9fd649084b362  gcc/config/sh/sh-c.cc
! b63b15f14062a886192f5b2308a0983a  gcc/config/sh/sh-mem.cc
  db7b2e9490086922f942532dd544a0f6  gcc/config/sh/sh-modes.def
! fb8513c0c66fb1a6e8d5cde7b08975c5  gcc/config/sh/sh-protos.h
! 84e486cd4d15aa213bbd259ab32d3aa2  gcc/config/sh/sh.cc
! de5433ad4ca4e28cd54d4ff7e2862435  gcc/config/sh/sh.h
! ff0b04e39bd88976fa2ace0f82446a49  gcc/config/sh/sh.md
! 10ed22d9ca9d7ec14fcf6b1a936fbf8d  gcc/config/sh/sh.opt
! 8bfaebe9773073f4977ba6b37f472071  gcc/config/sh/sh.opt.urls
  95f5ec03805045e1d73c1e77a70ac975  gcc/config/sh/sh1.md
  ee09b0ce63dae54c2ff2eef9f850d4b4  gcc/config/sh/sh4-300.md
  fe9e266cedb0e7598f71d98357d80284  gcc/config/sh/sh4.md
--- 5399,5416 ----
  b0a510bf1f58701f9674f788dad82ea8  gcc/config/sh/little.h
  1660d28e811d351ce75968a0101a4ce2  gcc/config/sh/netbsd-elf.h
  28445836fce04f79af025f75d08dbefa  gcc/config/sh/newlib.h
! 186fc469d8925b8fbef65edcec7856cd  gcc/config/sh/predicates.md
  e9dbd0492efb19a466f4e3fc7d56ca09  gcc/config/sh/rtems.h
  ad3ebe150b650b4f81c17838c6fb7d44  gcc/config/sh/rtemself.h
  dfead17f6b810bf033f9fd649084b362  gcc/config/sh/sh-c.cc
! 0467048098e62a8e5c79bb026376feeb  gcc/config/sh/sh-mem.cc
  db7b2e9490086922f942532dd544a0f6  gcc/config/sh/sh-modes.def
! 84f985eac130f4a0c5315e522ba85a0c  gcc/config/sh/sh-protos.h
! 4f06ca33c895e46ee4fdb6dcdda2ce1a  gcc/config/sh/sh.cc
! a14774e7ec27ec79c522a4a65d056fdc  gcc/config/sh/sh.h
! dc152ceafff73b075a3f38bc065faffe  gcc/config/sh/sh.md
! 8650480d11fab8da979d1c8270e85a05  gcc/config/sh/sh.opt
! 14870c64d7c861bcbe252871ed1a448f  gcc/config/sh/sh.opt.urls
  95f5ec03805045e1d73c1e77a70ac975  gcc/config/sh/sh1.md
  ee09b0ce63dae54c2ff2eef9f850d4b4  gcc/config/sh/sh4-300.md
  fe9e266cedb0e7598f71d98357d80284  gcc/config/sh/sh4.md
*************** cfdd1bb6ebe601b4ecc5ae546c81c25a  gcc/co
*** 5413,5434 ****
  3028c82ddb0ffa9963584a28c0b6cbf7  gcc/config/sh/superh.h
  06158b0f1e33501120db330d7734228d  gcc/config/sh/superh.opt
  5561a4532b44f8176f955ae87b996363  gcc/config/sh/superh.opt.urls
! c2027f76e1c613f4adb6db82c3d13f2f  gcc/config/sh/sync.md
  88130a11ca77c8572260539cc46ef7ac  gcc/config/sh/t-linux
  ad88281b142c81e6c7017a842c281d5f  gcc/config/sh/t-rtems
  38c49facd08b494929a0e44e6ac7a08f  gcc/config/sh/t-sh
  9f0e9638f478c08d204c5dce468c95ce  gcc/config/sh/t-vxworks
  0504ed1a16bc44d0a761ec052476199f  gcc/config/sh/vxworks.h
  aab2cd881519c0970cb08be62dd3fe97  gcc/config/sol2-c.cc
! 5c26c2321d68d4724b0d0076803c6b89  gcc/config/sol2-clearcap.map
! 73dd11dea23019ab25cbbd70968694e7  gcc/config/sol2-clearcapv2.map
  fb6eddf49bf33b95bff884782f73dc7d  gcc/config/sol2-cxx.cc
  7294dbc57d5bab37880896fbb9fbe893  gcc/config/sol2-d.cc
  1851d233f5874c6c8995bfc6716529b0  gcc/config/sol2-protos.h
  605e41b649128712bf3488c99aa03901  gcc/config/sol2-rust.cc
  53a244939227800f19957d9a892cc302  gcc/config/sol2-stubs.cc
  4dae56c882cb0ac575bd764ae58b2d9b  gcc/config/sol2.cc
! a49c227701d085dc4c49c8a5f5ea5926  gcc/config/sol2.h
  50796270314632458d17ee73a2cd660d  gcc/config/sol2.opt
  4667efab34b488f96b36aff3e7c6c90b  gcc/config/sol2.opt.urls
  9b6245dbf34b906e35664b2135d3d709  gcc/config/sparc/biarch64.h
--- 5420,5440 ----
  3028c82ddb0ffa9963584a28c0b6cbf7  gcc/config/sh/superh.h
  06158b0f1e33501120db330d7734228d  gcc/config/sh/superh.opt
  5561a4532b44f8176f955ae87b996363  gcc/config/sh/superh.opt.urls
! a38c0058e57ea6ab51bd3f87d494cd31  gcc/config/sh/sync.md
  88130a11ca77c8572260539cc46ef7ac  gcc/config/sh/t-linux
  ad88281b142c81e6c7017a842c281d5f  gcc/config/sh/t-rtems
  38c49facd08b494929a0e44e6ac7a08f  gcc/config/sh/t-sh
  9f0e9638f478c08d204c5dce468c95ce  gcc/config/sh/t-vxworks
  0504ed1a16bc44d0a761ec052476199f  gcc/config/sh/vxworks.h
  aab2cd881519c0970cb08be62dd3fe97  gcc/config/sol2-c.cc
! 73dd11dea23019ab25cbbd70968694e7  gcc/config/sol2-clearcap.map
  fb6eddf49bf33b95bff884782f73dc7d  gcc/config/sol2-cxx.cc
  7294dbc57d5bab37880896fbb9fbe893  gcc/config/sol2-d.cc
  1851d233f5874c6c8995bfc6716529b0  gcc/config/sol2-protos.h
  605e41b649128712bf3488c99aa03901  gcc/config/sol2-rust.cc
  53a244939227800f19957d9a892cc302  gcc/config/sol2-stubs.cc
  4dae56c882cb0ac575bd764ae58b2d9b  gcc/config/sol2.cc
! 041b00263e87ff55da11c741db8c0a16  gcc/config/sol2.h
  50796270314632458d17ee73a2cd660d  gcc/config/sol2.opt
  4667efab34b488f96b36aff3e7c6c90b  gcc/config/sol2.opt.urls
  9b6245dbf34b906e35664b2135d3d709  gcc/config/sparc/biarch64.h
*************** b8ba776d5b2f46cbc54fa5140207dd1f  gcc/co
*** 5513,5519 ****
  d798d80089e236fd6882e69f3253e858  gcc/config/t-pnt16-warn
  501751f2be56698ed1c9cf18358b67ac  gcc/config/t-rtems
  51d3678acb41d4448cc332f7a8e8cb2e  gcc/config/t-slibgcc
! 700ed082195f3a9f58bc52b39360d161  gcc/config/t-sol2
  94b3e10150e75899d2fc1410cf218e3f  gcc/config/t-sysroot-suffix
  6f78c5decbfb4b465e7c289b60109023  gcc/config/t-uclibc
  21160c2abe49034807aa8c1d3ac4de10  gcc/config/t-vxworks
--- 5519,5525 ----
  d798d80089e236fd6882e69f3253e858  gcc/config/t-pnt16-warn
  501751f2be56698ed1c9cf18358b67ac  gcc/config/t-rtems
  51d3678acb41d4448cc332f7a8e8cb2e  gcc/config/t-slibgcc
! 35cce1d0b4fd0b2de62f5add26f26272  gcc/config/t-sol2
  94b3e10150e75899d2fc1410cf218e3f  gcc/config/t-sysroot-suffix
  6f78c5decbfb4b465e7c289b60109023  gcc/config/t-uclibc
  21160c2abe49034807aa8c1d3ac4de10  gcc/config/t-vxworks
*************** dc2ffce721fbd1b4990bc2f5750a38d4  gcc/co
*** 5549,5555 ****
  66c0ab6e6d9e5c4e98dfdb4cc2efb041  gcc/config/vax/vax.h
  3e6bcaa1860e1bf31f1be55de6b6e3ea  gcc/config/vax/vax.md
  c7013330181453774d802642df37d913  gcc/config/vax/vax.opt
! 6b9aaec7f058b5b0ddbc9c5cd1f028c3  gcc/config/vax/vax.opt.urls
  f3e64f50532fcd26c0ddd45f2a5ba1ca  gcc/config/visium/constraints.md
  dcf10059c5ded1ecbf1dd22a55284cb5  gcc/config/visium/elf.h
  30a28c7956b8371fe34677b89bcc5a56  gcc/config/visium/gr5.md
--- 5555,5561 ----
  66c0ab6e6d9e5c4e98dfdb4cc2efb041  gcc/config/vax/vax.h
  3e6bcaa1860e1bf31f1be55de6b6e3ea  gcc/config/vax/vax.md
  c7013330181453774d802642df37d913  gcc/config/vax/vax.opt
! 64839158e7b158d1ce7ea4cf2d277596  gcc/config/vax/vax.opt.urls
  f3e64f50532fcd26c0ddd45f2a5ba1ca  gcc/config/visium/constraints.md
  dcf10059c5ded1ecbf1dd22a55284cb5  gcc/config/visium/elf.h
  30a28c7956b8371fe34677b89bcc5a56  gcc/config/visium/gr5.md
*************** eabefa7848e30cb14ae3473ccb4f1c5e  gcc/co
*** 5633,5640 ****
  ab92d7ead48857ad8dfb2fbadb7845ab  gcc/config/xtensa/xtensa.md
  411cab921f0a965cbb5411dc8b28fc82  gcc/config/xtensa/xtensa.opt
  107b37908c9eb8a26c5b7a6074ccb338  gcc/config/xtensa/xtensa.opt.urls
! ce5782b52624fd569bfe409f5f5c2ee2  gcc/configure
! af339b554d2ec717f4bef66ffab73ea2  gcc/configure.ac
  a2bfe87830136c2d55b591b943cecd3f  gcc/configure.tgt
  8a46839a73059f70ef105be9706c2554  gcc/context.cc
  08023c1005def168a8b675813b95d9f4  gcc/context.h
--- 5639,5646 ----
  ab92d7ead48857ad8dfb2fbadb7845ab  gcc/config/xtensa/xtensa.md
  411cab921f0a965cbb5411dc8b28fc82  gcc/config/xtensa/xtensa.opt
  107b37908c9eb8a26c5b7a6074ccb338  gcc/config/xtensa/xtensa.opt.urls
! a500b52250eb387411316eb7131089fe  gcc/configure
! 9e8e50ccb30791032c6f1ed3e6ffecce  gcc/configure.ac
  a2bfe87830136c2d55b591b943cecd3f  gcc/configure.tgt
  8a46839a73059f70ef105be9706c2554  gcc/context.cc
  08023c1005def168a8b675813b95d9f4  gcc/context.h
*************** c5ad0142a191862e3e81ecd3573754b3  gcc/co
*** 5645,5651 ****
  a424415c72a544d25e6518e1cf699300  gcc/coroutine-passes.cc
  11fc0e33834de003c7fdd80427589041  gcc/coverage.cc
  d27317cee558d7c78afbdb6529e36649  gcc/coverage.h
! fd28dee1f4c7c5b40a0ed59446e0117e  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
--- 5651,5657 ----
  a424415c72a544d25e6518e1cf699300  gcc/coroutine-passes.cc
  11fc0e33834de003c7fdd80427589041  gcc/coverage.cc
  d27317cee558d7c78afbdb6529e36649  gcc/coverage.h
! 9adb883765e03f1f78c573c2a32bb897  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
*************** e51f295e858583af5f9cf88b9530adf7  gcc/cp
*** 5691,5697 ****
  44493039c741da0cbddb5a8d6d93701a  gcc/cp/constraint.cc
  51c78420b3d7944f7ee182eb3f9c7175  gcc/cp/contracts.cc
  e77a681f560f3e9500f126febdc67ef6  gcc/cp/contracts.h
! c8e24ad8f1872233434c288fad5b696d  gcc/cp/coroutines.cc
  1817def94193f0cfabd4fa5b321af011  gcc/cp/coroutines.h
  58f3fe93aaf5a16193a551b6f53ec13a  gcc/cp/cp-gimplify.cc
  5deb6a9935508ca534b8ee8e84b2a1cc  gcc/cp/cp-lang.cc
--- 5697,5703 ----
  44493039c741da0cbddb5a8d6d93701a  gcc/cp/constraint.cc
  51c78420b3d7944f7ee182eb3f9c7175  gcc/cp/contracts.cc
  e77a681f560f3e9500f126febdc67ef6  gcc/cp/contracts.h
! 37c0253792f8c7107a6beca6e8411c09  gcc/cp/coroutines.cc
  1817def94193f0cfabd4fa5b321af011  gcc/cp/coroutines.h
  58f3fe93aaf5a16193a551b6f53ec13a  gcc/cp/cp-gimplify.cc
  5deb6a9935508ca534b8ee8e84b2a1cc  gcc/cp/cp-lang.cc
*************** cdf476ca9d7dcc9c6f4e9e46f415a4ae  gcc/cp
*** 5706,5712 ****
  f067718cf3d629084d8347c4e017afd4  gcc/cp/cxx-pretty-print.cc
  1d04eec9859d91686ca501e9221f30ac  gcc/cp/cxx-pretty-print.h
  82a41d873e1c90067158c89e6c1bd4bb  gcc/cp/cxxapi-data.csv
! df3da39a3b152006e5e828564332e50b  gcc/cp/decl.cc
  6b0c9433f7d3f129a44b59d54babb4eb  gcc/cp/decl.h
  f7fd6f8b2943baf2a508fd07e569c802  gcc/cp/decl2.cc
  12ccd5244973d74a0536adf58261b416  gcc/cp/dump.cc
--- 5712,5718 ----
  f067718cf3d629084d8347c4e017afd4  gcc/cp/cxx-pretty-print.cc
  1d04eec9859d91686ca501e9221f30ac  gcc/cp/cxx-pretty-print.h
  82a41d873e1c90067158c89e6c1bd4bb  gcc/cp/cxxapi-data.csv
! 4fe65e80a8e5c10399796813507c6c00  gcc/cp/decl.cc
  6b0c9433f7d3f129a44b59d54babb4eb  gcc/cp/decl.h
  f7fd6f8b2943baf2a508fd07e569c802  gcc/cp/decl2.cc
  12ccd5244973d74a0536adf58261b416  gcc/cp/dump.cc
*************** fcac46fa653b5161f99b9e17df91bbb5  gcc/cp
*** 5721,5733 ****
  bc388fb8287f2de7cdf4d78eb8f5d998  gcc/cp/lang-specs.h
  ae7c1d49c3ae546f4a980c3ebc22690d  gcc/cp/lex.cc
  e4ccdd9cbe95dde4cce27394a7613dd9  gcc/cp/logic.cc
! 90440d154244c1156fd0ca2486e99de4  gcc/cp/mangle.cc
  3d68343c4a9d614bb00b91ad53e79a0b  gcc/cp/mapper-client.cc
  27465babcaf6195d4f438ed36bdd6aff  gcc/cp/mapper-client.h
  40847be23013a3a5aba415a0a2002926  gcc/cp/mapper-resolver.cc
  54609938d396496c7c5bf3f4cbfddaec  gcc/cp/metafns.gperf
  04fe5bec0bf79fcb3680aec9913ebc29  gcc/cp/metafns.h
! 5d378a90b5c1e3a3fc539ad68b2492c2  gcc/cp/method.cc
  0ec0e2eb8b9559fc2042971a8083931b  gcc/cp/module.cc
  36a03818ce45c595866cc280493ac112  gcc/cp/name-lookup.cc
  8448a5bd06f68228b8367e5fcdf57f98  gcc/cp/name-lookup.h
--- 5727,5739 ----
  bc388fb8287f2de7cdf4d78eb8f5d998  gcc/cp/lang-specs.h
  ae7c1d49c3ae546f4a980c3ebc22690d  gcc/cp/lex.cc
  e4ccdd9cbe95dde4cce27394a7613dd9  gcc/cp/logic.cc
! 13443985f1c81bab02f845e1e2489915  gcc/cp/mangle.cc
  3d68343c4a9d614bb00b91ad53e79a0b  gcc/cp/mapper-client.cc
  27465babcaf6195d4f438ed36bdd6aff  gcc/cp/mapper-client.h
  40847be23013a3a5aba415a0a2002926  gcc/cp/mapper-resolver.cc
  54609938d396496c7c5bf3f4cbfddaec  gcc/cp/metafns.gperf
  04fe5bec0bf79fcb3680aec9913ebc29  gcc/cp/metafns.h
! 0ca1fb4de15164af98fd16eefefa86de  gcc/cp/method.cc
  0ec0e2eb8b9559fc2042971a8083931b  gcc/cp/module.cc
  36a03818ce45c595866cc280493ac112  gcc/cp/name-lookup.cc
  8448a5bd06f68228b8367e5fcdf57f98  gcc/cp/name-lookup.h
*************** e4ccdd9cbe95dde4cce27394a7613dd9  gcc/cp
*** 5735,5749 ****
  9efebf39da56d681d4405dfb9e55e3f5  gcc/cp/optimize.cc
  63b3fc2981b655a151a01f7e210e1f67  gcc/cp/parser.cc
  fbc41b26ea2a336d3636c9d9c565d845  gcc/cp/parser.h
! 1102c1a166e35e37a627560910dd11c0  gcc/cp/pt.cc
  25322928eaff39cf167372554c639e02  gcc/cp/ptree.cc
! f39fc4606cde65082e8323484206305b  gcc/cp/reflect.cc
  6ae3f1ff3ba804579da14445501f9181  gcc/cp/rtti.cc
  e6a800b8f2f93cd8ed05ee026f824eca  gcc/cp/search.cc
  964718bf537b7b8307674808f38409ce  gcc/cp/semantics.cc
  64c36b2ea66c9f8f477b19d24e06a2cb  gcc/cp/std-name-hint.gperf
  15cc409f13a8952feb90e94d99ecefa2  gcc/cp/std-name-hint.h
! 2a5a7b359eae60fe5d8b58402732043a  gcc/cp/tree.cc
  01e9a381e6fcf3d016d0170ee0ad71d7  gcc/cp/type-utils.h
  f8acce2d62b5de5f6c73b511ce3dcf6e  gcc/cp/typeck.cc
  977a0037d150893837512a88f03fbdad  gcc/cp/typeck2.cc
--- 5741,5755 ----
  9efebf39da56d681d4405dfb9e55e3f5  gcc/cp/optimize.cc
  63b3fc2981b655a151a01f7e210e1f67  gcc/cp/parser.cc
  fbc41b26ea2a336d3636c9d9c565d845  gcc/cp/parser.h
! 5728ff8cec6ace01ab00875ddc896986  gcc/cp/pt.cc
  25322928eaff39cf167372554c639e02  gcc/cp/ptree.cc
! 9dc0572dc85db1afeac7e0a8b58130d3  gcc/cp/reflect.cc
  6ae3f1ff3ba804579da14445501f9181  gcc/cp/rtti.cc
  e6a800b8f2f93cd8ed05ee026f824eca  gcc/cp/search.cc
  964718bf537b7b8307674808f38409ce  gcc/cp/semantics.cc
  64c36b2ea66c9f8f477b19d24e06a2cb  gcc/cp/std-name-hint.gperf
  15cc409f13a8952feb90e94d99ecefa2  gcc/cp/std-name-hint.h
! 025b52f0214eacf0af0a8e82fdd29349  gcc/cp/tree.cc
  01e9a381e6fcf3d016d0170ee0ad71d7  gcc/cp/type-utils.h
  f8acce2d62b5de5f6c73b511ce3dcf6e  gcc/cp/typeck.cc
  977a0037d150893837512a88f03fbdad  gcc/cp/typeck2.cc
*************** ee65c9e3e7c3fb1fd0128c23f4130e51  gcc/do
*** 6130,6136 ****
  301ed7e567732d1f0d5899a624068bdd  gcc/doc/cppinternals.texi
  421cc3b7d98386e0eb0abba4242dd54a  gcc/doc/cppopts.texi
  d8b2becdc7d9c570f256e19e1b1ac4f1  gcc/doc/cppwarnopts.texi
! ff6fda21f2381665bb11d639bf8f0b1b  gcc/doc/extend.texi
  d4f889c42d5400f1d26328f8b49db9ba  gcc/doc/fragments.texi
  7fb1e4199b2e70228fda69b8065d83c4  gcc/doc/frontends.texi
  f0e190ef0119097dac4c73c2f9e34d9e  gcc/doc/gcc.texi
--- 6136,6142 ----
  301ed7e567732d1f0d5899a624068bdd  gcc/doc/cppinternals.texi
  421cc3b7d98386e0eb0abba4242dd54a  gcc/doc/cppopts.texi
  d8b2becdc7d9c570f256e19e1b1ac4f1  gcc/doc/cppwarnopts.texi
! 2aa9ce456b80b6cabb901f9d93b3e786  gcc/doc/extend.texi
  d4f889c42d5400f1d26328f8b49db9ba  gcc/doc/fragments.texi
  7fb1e4199b2e70228fda69b8065d83c4  gcc/doc/frontends.texi
  f0e190ef0119097dac4c73c2f9e34d9e  gcc/doc/gcc.texi
*************** c84639641b29cd79e61a0fe226b0bca7  gcc/do
*** 6153,6161 ****
  37d898a82683588b62cca104098ad182  gcc/doc/include/gcc-common.texi
  95c90bf85d3eab67f348ee3ce0bf4050  gcc/doc/include/gpl_v3.texi
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
! aef5770b278fde5359d28cea926a8d4c  gcc/doc/install.texi
  30a2209eee0a2bed76e2d9ff3bd646f2  gcc/doc/install.texi2html
! 01f98dd5e664bc3fa5351b3c6f920516  gcc/doc/invoke.texi
  dd9d4097ebfa9e936c41913343807268  gcc/doc/languages.texi
  46d2bbbd37002bb71569d0b1f27d7a5a  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
--- 6159,6167 ----
  37d898a82683588b62cca104098ad182  gcc/doc/include/gcc-common.texi
  95c90bf85d3eab67f348ee3ce0bf4050  gcc/doc/include/gpl_v3.texi
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
! b451bba01f9542a2041f2f54117bad61  gcc/doc/install.texi
  30a2209eee0a2bed76e2d9ff3bd646f2  gcc/doc/install.texi2html
! c1c201014bf6d5a218ddc2c60c25e86b  gcc/doc/invoke.texi
  dd9d4097ebfa9e936c41913343807268  gcc/doc/languages.texi
  46d2bbbd37002bb71569d0b1f27d7a5a  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
*************** c2fc9f8e6a1cb39a7237e4ac3d7fcd7f  gcc/do
*** 6193,6199 ****
  11e47b626bc937cc2bd4a8ac95a59aed  gcc/doc/lto.texi
  a0300f293e1294f68bbf43478b2f7e96  gcc/doc/makefile.texi
  721e689329cd07ff27ba55b5c090eae1  gcc/doc/match-and-simplify.texi
! 27c62dcbe10e18453110a73bcbe2ec20  gcc/doc/md.texi
  ea1e82bfc6105050a63b50c8e40571c0  gcc/doc/objc.texi
  8b826afc7f71e67445cf33bbcd457ab5  gcc/doc/optinfo.texi
  3abb75ff788f5434702f351bf7a279c9  gcc/doc/options.texi
--- 6199,6205 ----
  11e47b626bc937cc2bd4a8ac95a59aed  gcc/doc/lto.texi
  a0300f293e1294f68bbf43478b2f7e96  gcc/doc/makefile.texi
  721e689329cd07ff27ba55b5c090eae1  gcc/doc/match-and-simplify.texi
! 44bd8fdce8dc761674613c5d7c8d7c3e  gcc/doc/md.texi
  ea1e82bfc6105050a63b50c8e40571c0  gcc/doc/objc.texi
  8b826afc7f71e67445cf33bbcd457ab5  gcc/doc/optinfo.texi
  3abb75ff788f5434702f351bf7a279c9  gcc/doc/options.texi
*************** fdecd23a17ae3f56f5e4f046f0bb157b  gcc/do
*** 6202,6217 ****
  e54937e427a2584ac4045286c725fab1  gcc/doc/plugins.texi
  55ca097cff451ddbce4b20cdcbb9273e  gcc/doc/poly-int.texi
  213ccf5a355e5d07fc0dcef29825d6dd  gcc/doc/portability.texi
! 6941062861a0c4e90daece8f16f24e1a  gcc/doc/riscv-ext.texi
! 8c633e11fbedfdfe3d0ba6fee84c7754  gcc/doc/riscv-mcpu.texi
! 557b50d4a124bed410e403a84cc46647  gcc/doc/riscv-mtune.texi
  d148d8e42c694bcabb267855d8c863fb  gcc/doc/rtl.texi
  b12261ad56bcabd07b4a1b739f271527  gcc/doc/service.texi
! 8ac5d323a53f7d2a2c1dc7a11e5453e2  gcc/doc/sourcebuild.texi
  9b58fbc10917d12008925e09d91cab55  gcc/doc/specs.texi
  d2b53a62ec4e23a8e4cbe16d2843c100  gcc/doc/standards.texi
! d80ec1cbf9525082895f960bab3e730e  gcc/doc/tm.texi
! 44175714df251c0513e00e355e799e52  gcc/doc/tm.texi.in
  8c9d03a450c358d77823a84f9c62ba4d  gcc/doc/tree-ssa.texi
  2d263928ebdba30d4e096adf01758e79  gcc/doc/trouble.texi
  83ea8ece47a3447f8da5fddd982c9d29  gcc/doc/ux.texi
--- 6208,6223 ----
  e54937e427a2584ac4045286c725fab1  gcc/doc/plugins.texi
  55ca097cff451ddbce4b20cdcbb9273e  gcc/doc/poly-int.texi
  213ccf5a355e5d07fc0dcef29825d6dd  gcc/doc/portability.texi
! a8e76853373e3ec544dc38c1de090bc4  gcc/doc/riscv-ext.texi
! d9bd28712398e388129ab2de3ba1b97a  gcc/doc/riscv-mcpu.texi
! eda507c067bdb9d76452955705651419  gcc/doc/riscv-mtune.texi
  d148d8e42c694bcabb267855d8c863fb  gcc/doc/rtl.texi
  b12261ad56bcabd07b4a1b739f271527  gcc/doc/service.texi
! cfaead4d134e741f630ea0e3726b6ac1  gcc/doc/sourcebuild.texi
  9b58fbc10917d12008925e09d91cab55  gcc/doc/specs.texi
  d2b53a62ec4e23a8e4cbe16d2843c100  gcc/doc/standards.texi
! e9ef6a5d84982e29281c8fc2332a7afd  gcc/doc/tm.texi
! c02e71a71ecbd22eefc762acaabfe590  gcc/doc/tm.texi.in
  8c9d03a450c358d77823a84f9c62ba4d  gcc/doc/tree-ssa.texi
  2d263928ebdba30d4e096adf01758e79  gcc/doc/trouble.texi
  83ea8ece47a3447f8da5fddd982c9d29  gcc/doc/ux.texi
*************** d61f76c4b55102abe0d6908ab60489e7  gcc/ex
*** 6251,6257 ****
  e0ebf672695dc08e5686ca42b54e3a46  gcc/explow.h
  0e0b224e5ea82e4e2f9c34acdb018201  gcc/expmed.cc
  2431f17e1f416ef0b9c38b1b975942a4  gcc/expmed.h
! c5df7cad538eead0a6d78ac8d606f90c  gcc/expr.cc
  ca4a759ee689223d3551cae34e997224  gcc/expr.h
  4b31ce401d814250b89eb315bb94bdd1  gcc/ext-dce.cc
  8ca3dbbcb4ffeb7bd2c8f46140869732  gcc/fibonacci_heap.cc
--- 6257,6263 ----
  e0ebf672695dc08e5686ca42b54e3a46  gcc/explow.h
  0e0b224e5ea82e4e2f9c34acdb018201  gcc/expmed.cc
  2431f17e1f416ef0b9c38b1b975942a4  gcc/expmed.h
! c0cd01c88379d9eb383d2155f82a2017  gcc/expr.cc
  ca4a759ee689223d3551cae34e997224  gcc/expr.h
  4b31ce401d814250b89eb315bb94bdd1  gcc/ext-dce.cc
  8ca3dbbcb4ffeb7bd2c8f46140869732  gcc/fibonacci_heap.cc
*************** b4a18c8d0dacb99b95b772e94f976754  gcc/fi
*** 6267,6276 ****
  edda8d107262aa360baaeafc0bd0d4a1  gcc/flags.h
  f8396c35f56710f2dd577b8f6644d380  gcc/fold-const-call.cc
  0b4405bca4b699887c6a47e1d25b216c  gcc/fold-const-call.h
! 974aacaf134d3d80b85afee20c6ca71e  gcc/fold-const.cc
! 52f12f5f49a400327788ee826a094b1e  gcc/fold-const.h
  503251519661f1768b70d9b424bdc12b  gcc/fold-mem-offsets.cc
! 843c492da50a2b9905a06180c9f72975  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
--- 6273,6282 ----
  edda8d107262aa360baaeafc0bd0d4a1  gcc/flags.h
  f8396c35f56710f2dd577b8f6644d380  gcc/fold-const-call.cc
  0b4405bca4b699887c6a47e1d25b216c  gcc/fold-const-call.h
! 9a9b729b3a636e9299c4b91999f48ca0  gcc/fold-const.cc
! f1299c5a4233c844c86d68eb57ccc636  gcc/fold-const.h
  503251519661f1768b70d9b424bdc12b  gcc/fold-mem-offsets.cc
! 891e7615626d63e9937d2c585655c526  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
*************** d1595b2ed8fb2a33f6ce0dc595f4f33c  gcc/fo
*** 6296,6307 ****
  c38eb0f2f19a6cb4b79be761670131e8  gcc/fortran/ChangeLog-2024
  4ee7229a03b31d9caf0d344269fb71ad  gcc/fortran/ChangeLog-2025
  9e0636f92243fb9b3480e27cefc96749  gcc/fortran/ChangeLog.ptr
! 181571ce035e2781f9d8141b9163749a  gcc/fortran/Make-lang.in
  bcb129d4d143e6ec42b4ddec1fea30b8  gcc/fortran/arith.cc
  1f3ee645ab25a3d858b555c00c0327ae  gcc/fortran/arith.h
  dd3d4373e33e0a14abdf26814a44662b  gcc/fortran/array.cc
  bc40e87bca719f86583a020eff2d6a73  gcc/fortran/bbt.cc
! 71c62c6ee055ceb715a6a53b3b724e5a  gcc/fortran/check.cc
  6b442bef9d26ed0d7bcf02b1ab728f8e  gcc/fortran/class.cc
  298c8e9139027305d0c5530e148f0c82  gcc/fortran/coarray.cc
  ee80d28f835ba80db395760139037e11  gcc/fortran/config-lang.in
--- 6302,6313 ----
  c38eb0f2f19a6cb4b79be761670131e8  gcc/fortran/ChangeLog-2024
  4ee7229a03b31d9caf0d344269fb71ad  gcc/fortran/ChangeLog-2025
  9e0636f92243fb9b3480e27cefc96749  gcc/fortran/ChangeLog.ptr
! 04fc4a308eadeb2c8a2ddd07083d677d  gcc/fortran/Make-lang.in
  bcb129d4d143e6ec42b4ddec1fea30b8  gcc/fortran/arith.cc
  1f3ee645ab25a3d858b555c00c0327ae  gcc/fortran/arith.h
  dd3d4373e33e0a14abdf26814a44662b  gcc/fortran/array.cc
  bc40e87bca719f86583a020eff2d6a73  gcc/fortran/bbt.cc
! fc47d1d04a5d9c431ab592e145ac3a00  gcc/fortran/check.cc
  6b442bef9d26ed0d7bcf02b1ab728f8e  gcc/fortran/class.cc
  298c8e9139027305d0c5530e148f0c82  gcc/fortran/coarray.cc
  ee80d28f835ba80db395760139037e11  gcc/fortran/config-lang.in
*************** edad5176d72953374d67effefef0a605  gcc/fo
*** 6312,6328 ****
  48e7987762051d8cf68633af2633e50f  gcc/fortran/cpp.h
  213bc611adee1d275a412b3ed4886e79  gcc/fortran/data.cc
  ac7321680382b23989a6637e02dfb80e  gcc/fortran/data.h
! a7b7fe4a2d9b6fb6c2730fb248eae0d1  gcc/fortran/decl.cc
  1e7039f0bf7d560e4fcdb2cf95db4b7d  gcc/fortran/dependency.cc
  b66b99368e3cd17573ae64a38e36c1de  gcc/fortran/dependency.h
  5fc94c471cdb783f08d648c823689b18  gcc/fortran/dump-parse-tree.cc
  65aa25da09bdeee948cdad39cfc4d960  gcc/fortran/error.cc
! 8210b5c7adb3952169cd600412bce4ba  gcc/fortran/expr.cc
  c0284e23f561f80398df460d7c477675  gcc/fortran/f95-lang.cc
  aabeb93bbe7fb46864a337bef3c2ade5  gcc/fortran/frontend-passes.cc
  c85c9309a4274609c6ff6466621c90f6  gcc/fortran/gfc-diagnostic.def
  afb07146daad7f36a59c52e053f6772f  gcc/fortran/gfc-internals.texi
! 5c208b951e0a3d78eb51747878e59e31  gcc/fortran/gfortran.h
  13d7dc211e7c02525ba3c435e6ea201b  gcc/fortran/gfortran.texi
  11194f3565a8c394b76bd5117830b0ae  gcc/fortran/gfortranspec.cc
  f7e292210a78addc2aa6af8409ece064  gcc/fortran/interface.cc
--- 6318,6334 ----
  48e7987762051d8cf68633af2633e50f  gcc/fortran/cpp.h
  213bc611adee1d275a412b3ed4886e79  gcc/fortran/data.cc
  ac7321680382b23989a6637e02dfb80e  gcc/fortran/data.h
! 0f8d73479ed26054b29b275bce4fc216  gcc/fortran/decl.cc
  1e7039f0bf7d560e4fcdb2cf95db4b7d  gcc/fortran/dependency.cc
  b66b99368e3cd17573ae64a38e36c1de  gcc/fortran/dependency.h
  5fc94c471cdb783f08d648c823689b18  gcc/fortran/dump-parse-tree.cc
  65aa25da09bdeee948cdad39cfc4d960  gcc/fortran/error.cc
! 40d808f8a28c16bfb9ab2aaa5d36b72d  gcc/fortran/expr.cc
  c0284e23f561f80398df460d7c477675  gcc/fortran/f95-lang.cc
  aabeb93bbe7fb46864a337bef3c2ade5  gcc/fortran/frontend-passes.cc
  c85c9309a4274609c6ff6466621c90f6  gcc/fortran/gfc-diagnostic.def
  afb07146daad7f36a59c52e053f6772f  gcc/fortran/gfc-internals.texi
! 1bd3a35eb1aaecbe34644ef712b04dd7  gcc/fortran/gfortran.h
  13d7dc211e7c02525ba3c435e6ea201b  gcc/fortran/gfortran.texi
  11194f3565a8c394b76bd5117830b0ae  gcc/fortran/gfortranspec.cc
  f7e292210a78addc2aa6af8409ece064  gcc/fortran/interface.cc
*************** f7e292210a78addc2aa6af8409ece064  gcc/fo
*** 6330,6336 ****
  d7ffa84de49936bfc22cdb2a7ef87800  gcc/fortran/intrinsic.h
  5c41fec8827bcc0e1e524b99ce4bfd71  gcc/fortran/intrinsic.texi
  d1270efc97a26916a776b4a7c77118e7  gcc/fortran/invoke.texi
! de14e3bd57873acb2ba9e4b47f2770e0  gcc/fortran/io.cc
  02af2e093ad4f92649a6370fa6dc3215  gcc/fortran/ioparm.def
  1e9a62cdd76fcac49d91728090a8b2f6  gcc/fortran/iresolve.cc
  4983e51f5909bf7627062a5e3ace5455  gcc/fortran/iso-c-binding.def
--- 6336,6342 ----
  d7ffa84de49936bfc22cdb2a7ef87800  gcc/fortran/intrinsic.h
  5c41fec8827bcc0e1e524b99ce4bfd71  gcc/fortran/intrinsic.texi
  d1270efc97a26916a776b4a7c77118e7  gcc/fortran/invoke.texi
! 939e229d42387144bbb73627a845a594  gcc/fortran/io.cc
  02af2e093ad4f92649a6370fa6dc3215  gcc/fortran/ioparm.def
  1e9a62cdd76fcac49d91728090a8b2f6  gcc/fortran/iresolve.cc
  4983e51f5909bf7627062a5e3ace5455  gcc/fortran/iso-c-binding.def
*************** e5c0565c05cf7375c9978273f2e553e7  gcc/fo
*** 6339,6356 ****
  ab51c8a2ae0733888b4a71d477aa98a9  gcc/fortran/lang.opt
  54208069c9076f94d4a14191605630c0  gcc/fortran/lang.opt.urls
  c35102e7caaf40998fe2ead86d2716da  gcc/fortran/libgfortran.h
! e608b93ad2362c5630cb76e573f346ef  gcc/fortran/match.cc
  0971e0098b3cb0240602494090ed164b  gcc/fortran/match.h
  bf54232c4c950ed772f4964c4f79629e  gcc/fortran/matchexp.cc
  915f6b30a8c22a5fea18690269a5a4a4  gcc/fortran/mathbuiltins.def
  9687294592a5ccef5d0b8254ab33816b  gcc/fortran/misc.cc
  ba4a819765499ce29e3070e1ff83ed7b  gcc/fortran/module.cc
! 4bbbef796f65fa98fa16193b66eef4d8  gcc/fortran/openmp.cc
  7baca4fc0a6fcd712dcbccab22987c74  gcc/fortran/options.cc
  f96b91fecd5db62c95bc50a661965b6d  gcc/fortran/parse.cc
  c97a1f016de974126c688bb9c805f323  gcc/fortran/parse.h
  d8018f6b8422ec272ff0ef8a7bd1d39d  gcc/fortran/primary.cc
! 7a8081e90da823303bc28e6aa327cc6b  gcc/fortran/resolve.cc
  e23f6eefa51bb3b4caa3d75c0409cfcd  gcc/fortran/scanner.cc
  18963b3f6aacca960fd6aa72b429a9d2  gcc/fortran/scanner.h
  664f19f5a29de9abc4642568f758c47c  gcc/fortran/simplify.cc
--- 6345,6362 ----
  ab51c8a2ae0733888b4a71d477aa98a9  gcc/fortran/lang.opt
  54208069c9076f94d4a14191605630c0  gcc/fortran/lang.opt.urls
  c35102e7caaf40998fe2ead86d2716da  gcc/fortran/libgfortran.h
! e81a2e9754a8805bac11a3ecb1c666b5  gcc/fortran/match.cc
  0971e0098b3cb0240602494090ed164b  gcc/fortran/match.h
  bf54232c4c950ed772f4964c4f79629e  gcc/fortran/matchexp.cc
  915f6b30a8c22a5fea18690269a5a4a4  gcc/fortran/mathbuiltins.def
  9687294592a5ccef5d0b8254ab33816b  gcc/fortran/misc.cc
  ba4a819765499ce29e3070e1ff83ed7b  gcc/fortran/module.cc
! b98195ee75bf7d3e1ac8e01f6e4a6b51  gcc/fortran/openmp.cc
  7baca4fc0a6fcd712dcbccab22987c74  gcc/fortran/options.cc
  f96b91fecd5db62c95bc50a661965b6d  gcc/fortran/parse.cc
  c97a1f016de974126c688bb9c805f323  gcc/fortran/parse.h
  d8018f6b8422ec272ff0ef8a7bd1d39d  gcc/fortran/primary.cc
! 689150cd7685ddf0cae6105fdac93f30  gcc/fortran/resolve.cc
  e23f6eefa51bb3b4caa3d75c0409cfcd  gcc/fortran/scanner.cc
  18963b3f6aacca960fd6aa72b429a9d2  gcc/fortran/scanner.h
  664f19f5a29de9abc4642568f758c47c  gcc/fortran/simplify.cc
*************** e23f6eefa51bb3b4caa3d75c0409cfcd  gcc/fo
*** 6358,6378 ****
  7c0ce786abb30fa1b3dfd2c619faf5c3  gcc/fortran/symbol.cc
  4fa06f769be3f1b439a574ee842c82ca  gcc/fortran/target-memory.cc
  ea8837444e2a08a95a3ea747c94b8106  gcc/fortran/target-memory.h
! 18e3f54916a1e5ec4a84d54a3ebbd93d  gcc/fortran/trans-array.cc
! a0c40b654df0b5c5213047d26e48e97a  gcc/fortran/trans-array.h
  5c567026f9fbc4fea9b59c22743687c4  gcc/fortran/trans-common.cc
  98960d7450a15e1ecc9789bd0bde16a7  gcc/fortran/trans-const.cc
  0d5cf4117521dba2aea9c8fd7ac67888  gcc/fortran/trans-const.h
! 6d304de80d4d8e67d353c979b108ce01  gcc/fortran/trans-decl.cc
! dbc204c4f83e2a6e87c150ee83c46b51  gcc/fortran/trans-expr.cc
! 239bc2ec60f26ef7484e70d38222e6e8  gcc/fortran/trans-intrinsic.cc
! 269d2b121570a82898b133a3274071a7  gcc/fortran/trans-io.cc
! 0c53e623e9820754423b6d07303bfdd8  gcc/fortran/trans-openmp.cc
! 85a774b3580276912ca50b038f91e40b  gcc/fortran/trans-stmt.cc
  6fbc90714f9730e84515bbaadff313f9  gcc/fortran/trans-stmt.h
! c316935fcc55b37c53e3139685d4d965  gcc/fortran/trans-types.cc
  6b00c9b76b80a96feb87d86b4b06102b  gcc/fortran/trans-types.h
! 501a82d1878805678d668a392dc0e48a  gcc/fortran/trans.cc
  2d3f54b9ed7f3bbec54c23afc6cab082  gcc/fortran/trans.h
  95f35aeb3293f3036414b45c9c749d61  gcc/fortran/trigd_fe.inc
  928644592ed66fda7ace0b92b9d1d378  gcc/fortran/types.def
--- 6364,6386 ----
  7c0ce786abb30fa1b3dfd2c619faf5c3  gcc/fortran/symbol.cc
  4fa06f769be3f1b439a574ee842c82ca  gcc/fortran/target-memory.cc
  ea8837444e2a08a95a3ea747c94b8106  gcc/fortran/target-memory.h
! 7630b9b4f4c012b16fe9d6a393d38cde  gcc/fortran/trans-array.cc
! 579b2b79e8e64c99cf7a8101c42ba519  gcc/fortran/trans-array.h
  5c567026f9fbc4fea9b59c22743687c4  gcc/fortran/trans-common.cc
  98960d7450a15e1ecc9789bd0bde16a7  gcc/fortran/trans-const.cc
  0d5cf4117521dba2aea9c8fd7ac67888  gcc/fortran/trans-const.h
! 8782ee1d8818c7d41be4239346279912  gcc/fortran/trans-decl.cc
! 5f0963ac6011b620478aae7c2bee3d40  gcc/fortran/trans-descriptor.cc
! e4ae8da739e5243d01975094cbbe90a3  gcc/fortran/trans-descriptor.h
! 053b944c43b565c99b13f13fdec75224  gcc/fortran/trans-expr.cc
! 18dc449da2051bb0564304caddebfcd9  gcc/fortran/trans-intrinsic.cc
! 98da4f32a07d6a9049d5ebdb3a59119a  gcc/fortran/trans-io.cc
! 584d9b28ed9be158fb7f7c0dccbccd21  gcc/fortran/trans-openmp.cc
! f6f5d710c05836740d72e04e86c64838  gcc/fortran/trans-stmt.cc
  6fbc90714f9730e84515bbaadff313f9  gcc/fortran/trans-stmt.h
! 7ec4d9b209753a4deafc42c6c0424b71  gcc/fortran/trans-types.cc
  6b00c9b76b80a96feb87d86b4b06102b  gcc/fortran/trans-types.h
! 277d8774a336ae86806485275e4a700a  gcc/fortran/trans.cc
  2d3f54b9ed7f3bbec54c23afc6cab082  gcc/fortran/trans.h
  95f35aeb3293f3036414b45c9c749d61  gcc/fortran/trigd_fe.inc
  928644592ed66fda7ace0b92b9d1d378  gcc/fortran/types.def
*************** e4981e3b10513f53ed20b58620dfc56f  gcc/gc
*** 6395,6401 ****
  2e5199869e1ce8b2630e4784fbc6e5e6  gcc/gcc-urlifier.cc
  3ba51d67080efcd8791ea2eaf4103d72  gcc/gcc-urlifier.def
  9110b89a48e29f0f75e8c76eca85c6e2  gcc/gcc-urlifier.h
! 8dd26bc648f973113bee686a27c741d5  gcc/gcc.cc
  09d73a192ef597ac58c7300df5ae4eb3  gcc/gcc.h
  1edfbdaab776ee29780fe98d767e67ed  gcc/gcov-counter.def
  5254cb252da1522a0364a1ef41fa47b1  gcc/gcov-dump.cc
--- 6403,6409 ----
  2e5199869e1ce8b2630e4784fbc6e5e6  gcc/gcc-urlifier.cc
  3ba51d67080efcd8791ea2eaf4103d72  gcc/gcc-urlifier.def
  9110b89a48e29f0f75e8c76eca85c6e2  gcc/gcc-urlifier.h
! 35015453f062887f5b0e1accc2c30e8f  gcc/gcc.cc
  09d73a192ef597ac58c7300df5ae4eb3  gcc/gcc.h
  1edfbdaab776ee29780fe98d767e67ed  gcc/gcov-counter.def
  5254cb252da1522a0364a1ef41fa47b1  gcc/gcov-dump.cc
*************** ed229440036ea7e3f4f024ff36345e2e  gcc/gi
*** 6517,6523 ****
  a707182c5c79c8694b0faeca12bcdba0  gcc/gimple-ssa-sprintf.cc
  93223fccf371c4d63f17138772b09ed9  gcc/gimple-ssa-store-merging.cc
  80c188723b9e2d5da42c41d22ce38e94  gcc/gimple-ssa-strength-reduction.cc
! a035008b9a113df9ca4e9376961a5af8  gcc/gimple-ssa-warn-access.cc
  987d7fb5fd1bb73e756015bb5e1074bd  gcc/gimple-ssa-warn-access.h
  f7b0197d94bcfef5acc93f20515d5a8f  gcc/gimple-ssa-warn-alloca.cc
  e2a88567ecc62102958a6b3c637cfbe5  gcc/gimple-ssa-warn-restrict.cc
--- 6525,6531 ----
  a707182c5c79c8694b0faeca12bcdba0  gcc/gimple-ssa-sprintf.cc
  93223fccf371c4d63f17138772b09ed9  gcc/gimple-ssa-store-merging.cc
  80c188723b9e2d5da42c41d22ce38e94  gcc/gimple-ssa-strength-reduction.cc
! 83774d1be221825cb5bf89c4dc74085c  gcc/gimple-ssa-warn-access.cc
  987d7fb5fd1bb73e756015bb5e1074bd  gcc/gimple-ssa-warn-access.h
  f7b0197d94bcfef5acc93f20515d5a8f  gcc/gimple-ssa-warn-alloca.cc
  e2a88567ecc62102958a6b3c637cfbe5  gcc/gimple-ssa-warn-restrict.cc
*************** c7aaa3764ab30058c5d27da89f166ec2  gcc/gi
*** 6534,6540 ****
  83d74df09fe460c465e209cc1370a30b  gcc/gimple.h
  46bdb18976fdb25accadbfdc07f14a8e  gcc/gimplify-me.cc
  cc5b43d0554c69571cd007e727fbb7d1  gcc/gimplify-me.h
! 5fc6f66a724359ef6965098ce0388a18  gcc/gimplify.cc
  5015d194d6aebf6d8d4bbb3945a77e27  gcc/gimplify.h
  ba3039c0ed9645080c52c0d4bc46096f  gcc/gimplify_reg_info.h
  83f82d6779ea9f6500c863169abfca55  gcc/ginclude/float.h
--- 6542,6548 ----
  83d74df09fe460c465e209cc1370a30b  gcc/gimple.h
  46bdb18976fdb25accadbfdc07f14a8e  gcc/gimplify-me.cc
  cc5b43d0554c69571cd007e727fbb7d1  gcc/gimplify-me.h
! b5e1191de988e5e78c3fbfb0297b8464  gcc/gimplify.cc
  5015d194d6aebf6d8d4bbb3945a77e27  gcc/gimplify.h
  ba3039c0ed9645080c52c0d4bc46096f  gcc/gimplify_reg_info.h
  83f82d6779ea9f6500c863169abfca55  gcc/ginclude/float.h
*************** c6ab645f373e1d6e9ddd212bfc3a95ba  gcc/lo
*** 6862,6868 ****
  d49cf408f9415ef037523414c6e80764  gcc/lower-subreg.h
  1c331efaab50c9e240d3ebcebea56688  gcc/lra-assigns.cc
  5d1aa184ea3e3c5990e02acbdc762f00  gcc/lra-coalesce.cc
! d57a75deb0267effcf241ccb460ed3b4  gcc/lra-constraints.cc
  2b91fedbb37f334369acdf769a0ab194  gcc/lra-eliminations.cc
  74c62715a179f0277b7b036f21e1799f  gcc/lra-int.h
  568d6d2d43a7728ab0b54f7e837b653a  gcc/lra-lives.cc
--- 6870,6876 ----
  d49cf408f9415ef037523414c6e80764  gcc/lower-subreg.h
  1c331efaab50c9e240d3ebcebea56688  gcc/lra-assigns.cc
  5d1aa184ea3e3c5990e02acbdc762f00  gcc/lra-coalesce.cc
! f4584cb313bdb2181e7e8d1bd5d93189  gcc/lra-constraints.cc
  2b91fedbb37f334369acdf769a0ab194  gcc/lra-eliminations.cc
  74c62715a179f0277b7b036f21e1799f  gcc/lra-int.h
  568d6d2d43a7728ab0b54f7e837b653a  gcc/lra-lives.cc
*************** f9608e9005487c369e6c38949ab36fa1  gcc/m2
*** 7883,7890 ****
  2a18164ee5f162ac117e6fedb58158a2  gcc/machmode.def
  89d79df4a8d2185bb8557998f075e087  gcc/machmode.h
  197298337dae14fdd7ab928a1f03bec6  gcc/main.cc
! 778f0c1be3a4637991224c969fc45bba  gcc/match-sat-alu.pd
! a7e4d6c1f778db882d1825963489ffcf  gcc/match.pd
  b106a08a1793a5495dd87c412456484b  gcc/mcf.cc
  897c541ca992e145ad451c98941c7647  gcc/mem-stats-traits.h
  14700e76d554c9699481337fa9886be6  gcc/mem-stats.h
--- 7891,7898 ----
  2a18164ee5f162ac117e6fedb58158a2  gcc/machmode.def
  89d79df4a8d2185bb8557998f075e087  gcc/machmode.h
  197298337dae14fdd7ab928a1f03bec6  gcc/main.cc
! 11dfd6679ddc945a2c284204df360007  gcc/match-sat-alu.pd
! 985eee81b3c94b23c95a53dbcb5c5462  gcc/match.pd
  b106a08a1793a5495dd87c412456484b  gcc/mcf.cc
  897c541ca992e145ad451c98941c7647  gcc/mem-stats-traits.h
  14700e76d554c9699481337fa9886be6  gcc/mem-stats.h
*************** b106a08a1793a5495dd87c412456484b  gcc/mc
*** 7897,7927 ****
  b651f65860de6833efe242939d7edf33  gcc/modulo-sched.cc
  ab360f5772fb7a87b6119cf198a8246f  gcc/multiple_target.cc
  f98f5be75203b0e833e7bcf563eecf14  gcc/mux-utils.h
! 9a434f95c594c20c3bedb571f100adda  gcc/objc/ChangeLog
  e00206160b117e3384f6e554cb06b174  gcc/objc/Make-lang.in
  f3dbb06248bf04272bf34751540a8844  gcc/objc/config-lang.in
  296b176173a1ff046cbb5bb721d9f576  gcc/objc/lang-specs.h
! ba64c07a510dfabface1184a0edaec64  gcc/objc/objc-act.cc
! 981fb23a3b88a456c0faf448deb73df6  gcc/objc/objc-act.h
  5d0297127b71a7cb1df633c4778aa711  gcc/objc/objc-encoding.cc
  638ad042ad5712a6da28ea792d9e1853  gcc/objc/objc-encoding.h
! 5592fb91591ac18459f377d882097ac2  gcc/objc/objc-gnu-runtime-abi-01.cc
  451fcdf975303c6769b13a34755053ad  gcc/objc/objc-lang.cc
  c5cc36ec357f0ce91004dc9630309038  gcc/objc/objc-map.cc
  2e83b83e229310e3f7af16252ab26122  gcc/objc/objc-map.h
  2c06dd0b759fa7e00f5cd998818160a8  gcc/objc/objc-next-metadata-tags.h
! c9dc2763bcd3be814923a8a90faf8b03  gcc/objc/objc-next-runtime-abi-01.cc
! 038e6c110705222c3d8b8b0b4789637f  gcc/objc/objc-next-runtime-abi-02.cc
  d716426f842510f560782580a02b87e8  gcc/objc/objc-runtime-hooks.h
! 82b1fd82fb8a2ba9e2a8fc3f46ac8a81  gcc/objc/objc-runtime-shared-support.cc
! 6594f29228dbfaa3e7e65104fb3e5dcc  gcc/objc/objc-runtime-shared-support.h
  8a1060d8fadfe53ae2651c9f887142ef  gcc/objc/objc-tree.def
  c16eb18f00ae43b938286041a894539f  gcc/objcp/ChangeLog
  e38dd8b647ce35d00c6eff3980d2e270  gcc/objcp/Make-lang.in
  cd3aac34657824ccc664d7185e6737d4  gcc/objcp/config-lang.in
  e3efef0a89306a90708239222db79f43  gcc/objcp/lang-specs.h
  225d0e849f88420616b87987ed1e699b  gcc/objcp/objcp-decl.cc
! aa2631a800917f0a9b68ef9c3c6722fc  gcc/objcp/objcp-decl.h
  97d04fb525d43f26efcc1c10bb62a70e  gcc/objcp/objcp-lang.cc
  ac6f2a373c263368c4451f24860f50d6  gcc/obstack-utils.h
  b53e19ed2e5aad878bc3422b5ed77de8  gcc/omp-api.h
--- 7905,7935 ----
  b651f65860de6833efe242939d7edf33  gcc/modulo-sched.cc
  ab360f5772fb7a87b6119cf198a8246f  gcc/multiple_target.cc
  f98f5be75203b0e833e7bcf563eecf14  gcc/mux-utils.h
! 5b68d648496571ca055c60d57d6abd62  gcc/objc/ChangeLog
  e00206160b117e3384f6e554cb06b174  gcc/objc/Make-lang.in
  f3dbb06248bf04272bf34751540a8844  gcc/objc/config-lang.in
  296b176173a1ff046cbb5bb721d9f576  gcc/objc/lang-specs.h
! 82fd9122a6c51f546c14ff0d4a05f4ca  gcc/objc/objc-act.cc
! 02993b28ef2601a4983b31346f6da4b2  gcc/objc/objc-act.h
  5d0297127b71a7cb1df633c4778aa711  gcc/objc/objc-encoding.cc
  638ad042ad5712a6da28ea792d9e1853  gcc/objc/objc-encoding.h
! 024854e2c467f51670b7ca63474dd001  gcc/objc/objc-gnu-runtime-abi-01.cc
  451fcdf975303c6769b13a34755053ad  gcc/objc/objc-lang.cc
  c5cc36ec357f0ce91004dc9630309038  gcc/objc/objc-map.cc
  2e83b83e229310e3f7af16252ab26122  gcc/objc/objc-map.h
  2c06dd0b759fa7e00f5cd998818160a8  gcc/objc/objc-next-metadata-tags.h
! 03cd17b0bb9dfd54e327915f3d53cf02  gcc/objc/objc-next-runtime-abi-01.cc
! c66214911ff9cefd5bb2d8c7397725bc  gcc/objc/objc-next-runtime-abi-02.cc
  d716426f842510f560782580a02b87e8  gcc/objc/objc-runtime-hooks.h
! 59ebaddcdcfea87fd921164743acd4a4  gcc/objc/objc-runtime-shared-support.cc
! 00ae454319f2de26c30fc263347b00e9  gcc/objc/objc-runtime-shared-support.h
  8a1060d8fadfe53ae2651c9f887142ef  gcc/objc/objc-tree.def
  c16eb18f00ae43b938286041a894539f  gcc/objcp/ChangeLog
  e38dd8b647ce35d00c6eff3980d2e270  gcc/objcp/Make-lang.in
  cd3aac34657824ccc664d7185e6737d4  gcc/objcp/config-lang.in
  e3efef0a89306a90708239222db79f43  gcc/objcp/lang-specs.h
  225d0e849f88420616b87987ed1e699b  gcc/objcp/objcp-decl.cc
! 9d1cf37617d562e2123a81ab61765e37  gcc/objcp/objcp-decl.h
  97d04fb525d43f26efcc1c10bb62a70e  gcc/objcp/objcp-lang.cc
  ac6f2a373c263368c4451f24860f50d6  gcc/obstack-utils.h
  b53e19ed2e5aad878bc3422b5ed77de8  gcc/omp-api.h
*************** b53e19ed2e5aad878bc3422b5ed77de8  gcc/om
*** 7930,7936 ****
  2f6456a4cc816c9b75844b1625b26349  gcc/omp-expand.h
  188173a8efb4e631ba04f95371cb8804  gcc/omp-general.cc
  adfc442def98eba84925b435cfc8716a  gcc/omp-general.h
! 34bea268be6fd1acb54bf0756073046a  gcc/omp-low.cc
  1c84cef0613c186032b0fc0682b72ab8  gcc/omp-low.h
  e15278003e18a529caf759e00fbb8140  gcc/omp-oacc-kernels-decompose.cc
  e46559b06f0c63bac8a2626dcddfb876  gcc/omp-oacc-neuter-broadcast.cc
--- 7938,7944 ----
  2f6456a4cc816c9b75844b1625b26349  gcc/omp-expand.h
  188173a8efb4e631ba04f95371cb8804  gcc/omp-general.cc
  adfc442def98eba84925b435cfc8716a  gcc/omp-general.h
! d3cbb0f00a7ddd459da543d6fa42bbee  gcc/omp-low.cc
  1c84cef0613c186032b0fc0682b72ab8  gcc/omp-low.h
  e15278003e18a529caf759e00fbb8140  gcc/omp-oacc-kernels-decompose.cc
  e46559b06f0c63bac8a2626dcddfb876  gcc/omp-oacc-neuter-broadcast.cc
*************** a98a8f0aa188fa14ae528dfe8be52db4  gcc/po
*** 8014,8020 ****
  793b6858d4e3f63b57b893a499d3c32b  gcc/pointer-query.cc
  728738ceae729bc0f318f8accf6244c0  gcc/pointer-query.h
  8fb747d77281aa1c6e2fbc0f106ef7f5  gcc/poly-int-types.h
! 35977a15512165ff40e54711c2edb883  gcc/poly-int.h
  4cd887458a8f36ed38ce5b031dc61b73  gcc/postreload-gcse.cc
  5427037d6bab9dd24eef9cd5ef652539  gcc/postreload.cc
  c3931890b6ca4b8016e92f1657d4b99d  gcc/predict.cc
--- 8022,8028 ----
  793b6858d4e3f63b57b893a499d3c32b  gcc/pointer-query.cc
  728738ceae729bc0f318f8accf6244c0  gcc/pointer-query.h
  8fb747d77281aa1c6e2fbc0f106ef7f5  gcc/poly-int-types.h
! 49fe5f647a982fe184243d1be8ba5888  gcc/poly-int.h
  4cd887458a8f36ed38ce5b031dc61b73  gcc/postreload-gcse.cc
  5427037d6bab9dd24eef9cd5ef652539  gcc/postreload.cc
  c3931890b6ca4b8016e92f1657d4b99d  gcc/predict.cc
*************** ff662645190de703b9423727e52d659c  gcc/rt
*** 8120,8126 ****
  92e356710b1aae5aaabc8f47d6977fff  gcc/run-rtl-passes.cc
  f4eae48a3e90b34e88b5789e54f5f29a  gcc/run-rtl-passes.h
  add9bd82fcec23469a4d0f7df03d9589  gcc/rust/CONTRIBUTING.md
! af82b2a3c63ba0feee5f6be1e9744360  gcc/rust/ChangeLog
  668da3fc21da447732bf5b1b7a4589fb  gcc/rust/Make-lang.in
  f3527e161e6e2827d299c1a928ebe1c6  gcc/rust/README.md
  fbd9e5dbbbf2e1a3e28d730525b8eb78  gcc/rust/ast/rust-ast-builder.cc
--- 8128,8134 ----
  92e356710b1aae5aaabc8f47d6977fff  gcc/run-rtl-passes.cc
  f4eae48a3e90b34e88b5789e54f5f29a  gcc/run-rtl-passes.h
  add9bd82fcec23469a4d0f7df03d9589  gcc/rust/CONTRIBUTING.md
! f58b487d46918839d77052142877ca78  gcc/rust/ChangeLog
  668da3fc21da447732bf5b1b7a4589fb  gcc/rust/Make-lang.in
  f3527e161e6e2827d299c1a928ebe1c6  gcc/rust/README.md
  fbd9e5dbbbf2e1a3e28d730525b8eb78  gcc/rust/ast/rust-ast-builder.cc
*************** f7a30cc2e8344fa489739267da2d868b  gcc/se
*** 8683,8689 ****
  3f3d94e6f52cc07f64e195e1a75dc485  gcc/signop.h
  b4c90fe064bba484ce5c18adb1a9e544  gcc/simple-diagnostic-path.cc
  7affe31db6f7cb9c7fc77937feef0758  gcc/simple-diagnostic-path.h
! 797d47901bc84438ad8fdd15eb122d3f  gcc/simplify-rtx.cc
  d1aec926a9488869692e8fe2f61ca75f  gcc/sort.cc
  7daa38cb1d09a2f88958f00a965d40a1  gcc/sparseset.cc
  3883b6ff1845dcec7b2822124018ab05  gcc/sparseset.h
--- 8691,8697 ----
  3f3d94e6f52cc07f64e195e1a75dc485  gcc/signop.h
  b4c90fe064bba484ce5c18adb1a9e544  gcc/simple-diagnostic-path.cc
  7affe31db6f7cb9c7fc77937feef0758  gcc/simple-diagnostic-path.h
! 0f24e7b693fef32b47ece9c8f803bf97  gcc/simplify-rtx.cc
  d1aec926a9488869692e8fe2f61ca75f  gcc/sort.cc
  7daa38cb1d09a2f88958f00a965d40a1  gcc/sparseset.cc
  3883b6ff1845dcec7b2822124018ab05  gcc/sparseset.h
*************** d294651bcc46af1abb89e48cd851fd40  gcc/ta
*** 8732,8743 ****
  fe7cc01d7dd25103bc61ab1a33dd54dc  gcc/target-globals.h
  5f6f168a092c141ef64501f44439df42  gcc/target-hooks-macros.h
  f24751f278bee1ac8dc861467d9f96a3  gcc/target-insns.def
! 1546c32d2c000c66103931f46587776e  gcc/target.def
  4685fe9ae3053826ebb0e8a51092bb53  gcc/target.h
  8dfc7c2c4f5fcc8bae4e56f4908de008  gcc/targhooks.cc
  dcedef5930550e30cc9ea611bbffde5b  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! 16f0d7edc2946acb62ab0723d8dabe9f  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
--- 8740,8751 ----
  fe7cc01d7dd25103bc61ab1a33dd54dc  gcc/target-globals.h
  5f6f168a092c141ef64501f44439df42  gcc/target-hooks-macros.h
  f24751f278bee1ac8dc861467d9f96a3  gcc/target-insns.def
! 14bed6437e65edbd80cd5f75b149b723  gcc/target.def
  4685fe9ae3053826ebb0e8a51092bb53  gcc/target.h
  8dfc7c2c4f5fcc8bae4e56f4908de008  gcc/targhooks.cc
  dcedef5930550e30cc9ea611bbffde5b  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! d0c569babef18a8cd56d6284416c62fa  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
*************** e5736f7a95ff4089e7b2558c9d9421e5  gcc/te
*** 17033,17038 ****
--- 17041,17047 ----
  91f279c122cf9faf0ea51b9337c6e97a  gcc/testsuite/algol68/compile/compile.exp
  bc971283f5728545e6e3cd2df580d7f6  gcc/testsuite/algol68/compile/conditional-clause-1.a68
  16a4ce6f194f486dd0c2eb1dc635eb58  gcc/testsuite/algol68/compile/error-attr-format-token-1.a68
+ 437ca0e36f15cde8972725c2143556dd  gcc/testsuite/algol68/compile/error-bits-denotation-1.a68
  1ff689b9532dde45617e5f7a3826bf91  gcc/testsuite/algol68/compile/error-bold-taggle-1.a68
  712e2ae6e2d14b147adaaf3a2d4951a2  gcc/testsuite/algol68/compile/error-coercion-1.a68
  7387813dd068726b8857614ece1a4efb  gcc/testsuite/algol68/compile/error-coercion-2.a68
*************** dcdba3a1144fe7a17bead0fdaab5db51  gcc/te
*** 17088,17093 ****
--- 17097,17105 ----
  d444f95d7ebcab4d1578356ad9f289c7  gcc/testsuite/algol68/compile/error-radix-2.a68
  71a38033039539f53eda38c144d0a57c  gcc/testsuite/algol68/compile/error-radix-3.a68
  1149d2f12e64e21d8387cb81de9336fd  gcc/testsuite/algol68/compile/error-radix-4.a68
+ bcafdda7e40002273e70bdab6653b52b  gcc/testsuite/algol68/compile/error-radix-5.a68
+ ce84c2642fd908c400e18fdd6b49718b  gcc/testsuite/algol68/compile/error-radix-6.a68
+ ca9f2e3722b29edd049ba27b323acafd  gcc/testsuite/algol68/compile/error-radix-7.a68
  23ff6c5635bdcc50447c246c0de786b8  gcc/testsuite/algol68/compile/error-selector-1.a68
  cbc4b32a4422b77e2bbd1e4179c7fd7c  gcc/testsuite/algol68/compile/error-string-break-1.a68
  082e1aec4d3067022c46c5f48103bab4  gcc/testsuite/algol68/compile/error-string-break-2.a68
*************** b602de4d7ac9a6d1023dcc45983c25fa  gcc/te
*** 17140,17146 ****
  9beecedeeea6e22797a615259ef9da5b  gcc/testsuite/algol68/compile/mcgt-7.1.3a.a68
  866415cb9d8563f6b5063c4f3b64551c  gcc/testsuite/algol68/compile/module-1.a68
  aa02b40c24104f889489019e2f516e08  gcc/testsuite/algol68/compile/module-2.a68
! 36368510f5b54908ecf16098c9adf923  gcc/testsuite/algol68/compile/module-extracts-1.a68
  58f8a8146e64b14f207b30ac931202c1  gcc/testsuite/algol68/compile/module-mode-exports-1.a68
  3108816a0d7320ec6290ade299708451  gcc/testsuite/algol68/compile/module-mode-exports-2.a68
  65f06ef84b157a6b7a08b35a431ba0df  gcc/testsuite/algol68/compile/module-mode-exports-3.a68
--- 17152,17158 ----
  9beecedeeea6e22797a615259ef9da5b  gcc/testsuite/algol68/compile/mcgt-7.1.3a.a68
  866415cb9d8563f6b5063c4f3b64551c  gcc/testsuite/algol68/compile/module-1.a68
  aa02b40c24104f889489019e2f516e08  gcc/testsuite/algol68/compile/module-2.a68
! 4f00ac68c88ab9432ed4cc14a6e929ad  gcc/testsuite/algol68/compile/module-extracts-1.a68
  58f8a8146e64b14f207b30ac931202c1  gcc/testsuite/algol68/compile/module-mode-exports-1.a68
  3108816a0d7320ec6290ade299708451  gcc/testsuite/algol68/compile/module-mode-exports-2.a68
  65f06ef84b157a6b7a08b35a431ba0df  gcc/testsuite/algol68/compile/module-mode-exports-3.a68
*************** a30ee6cd63bedaff93b8e6fe5e3104c8  gcc/te
*** 17170,17178 ****
  09d1821ad1bac0c00d8936de3dd768a5  gcc/testsuite/algol68/compile/module-pub-mangling-4.a68
  802c03a836c31b45b3d87282ed957fbc  gcc/testsuite/algol68/compile/module-pub-mangling-5.a68
  76259e31cd83395a7b4e085144a96755  gcc/testsuite/algol68/compile/module-pub-mangling-6.a68
! 0b4169969cf1067eb9799385c8b1c10f  gcc/testsuite/algol68/compile/module-pub-mangling-7.a68
  60794c0d1c26ba1f2f284fa16dce9367  gcc/testsuite/algol68/compile/module-pub-mangling-8.a68
! 8df94e66c0218a933ffbabde87c98f0f  gcc/testsuite/algol68/compile/module-pub-mangling-9.a68
  57e64fa4245da0f8ca4b5b370648c45c  gcc/testsuite/algol68/compile/module-top-down-1.a68
  024779a0c3ca6cebec4e5274a99a57bc  gcc/testsuite/algol68/compile/modules/compile.exp
  1dcb757cdfc80354940aadcc2c058999  gcc/testsuite/algol68/compile/modules/module1.a68
--- 17182,17190 ----
  09d1821ad1bac0c00d8936de3dd768a5  gcc/testsuite/algol68/compile/module-pub-mangling-4.a68
  802c03a836c31b45b3d87282ed957fbc  gcc/testsuite/algol68/compile/module-pub-mangling-5.a68
  76259e31cd83395a7b4e085144a96755  gcc/testsuite/algol68/compile/module-pub-mangling-6.a68
! fbf4d11b39a29907d943aff3fcfaebc2  gcc/testsuite/algol68/compile/module-pub-mangling-7.a68
  60794c0d1c26ba1f2f284fa16dce9367  gcc/testsuite/algol68/compile/module-pub-mangling-8.a68
! 5617c577d3b19adc5fe172234709d42a  gcc/testsuite/algol68/compile/module-pub-mangling-9.a68
  57e64fa4245da0f8ca4b5b370648c45c  gcc/testsuite/algol68/compile/module-top-down-1.a68
  024779a0c3ca6cebec4e5274a99a57bc  gcc/testsuite/algol68/compile/modules/compile.exp
  1dcb757cdfc80354940aadcc2c058999  gcc/testsuite/algol68/compile/modules/module1.a68
*************** cfc81467b4bf5daec874923660541f47  gcc/te
*** 17255,17261 ****
  fe740957a67fc6db10529d51f119e57f  gcc/testsuite/algol68/execute/abs-int-negative-gnu-1.a68
  877202a2d772a79bce9870d2ac0b44a9  gcc/testsuite/algol68/execute/acos-1.a68
  119de340db84bbd87adf8675aec7b807  gcc/testsuite/algol68/execute/affirm-int-1.a68
! f87237bafdc31ea65a2222672f6068cd  gcc/testsuite/algol68/execute/and-bits-1.a68
  f031dc750c0419a945fa738fa7bfbd47  gcc/testsuite/algol68/execute/andf-1.a68
  2c08650c5f2ac77fa0c46febbde24f89  gcc/testsuite/algol68/execute/ascription-1.a68
  580da34269191b33c5d9b2af389f9c9c  gcc/testsuite/algol68/execute/asin-1.a68
--- 17267,17273 ----
  fe740957a67fc6db10529d51f119e57f  gcc/testsuite/algol68/execute/abs-int-negative-gnu-1.a68
  877202a2d772a79bce9870d2ac0b44a9  gcc/testsuite/algol68/execute/acos-1.a68
  119de340db84bbd87adf8675aec7b807  gcc/testsuite/algol68/execute/affirm-int-1.a68
! a19053ed5d2081d7b25b459b8c67fbdf  gcc/testsuite/algol68/execute/and-bits-1.a68
  f031dc750c0419a945fa738fa7bfbd47  gcc/testsuite/algol68/execute/andf-1.a68
  2c08650c5f2ac77fa0c46febbde24f89  gcc/testsuite/algol68/execute/ascription-1.a68
  580da34269191b33c5d9b2af389f9c9c  gcc/testsuite/algol68/execute/asin-1.a68
*************** ae090482307635cef763b8472c5f9f63  gcc/te
*** 17277,17286 ****
  2b96660f217790ef4d3c30d7967e272b  gcc/testsuite/algol68/execute/bin-negative-1.a68
  136cb319d4afa76d14581fab22962bda  gcc/testsuite/algol68/execute/bin-negative-gnu-1.a68
  05bdda461b233eed5f4c0836020e4da3  gcc/testsuite/algol68/execute/bits-clear-1.a68
  5fcb820655e1db838273df37eaa32743  gcc/testsuite/algol68/execute/bits-set-1.a68
  e7129df766858f1d3fa7cddc06870e34  gcc/testsuite/algol68/execute/bits-shift-1.a68
! 2106e23f362f111ec6348cd6f382cdec  gcc/testsuite/algol68/execute/bits-shift-2.a68
! 62eb1ffb4baa1314de645f7bc57cec6b  gcc/testsuite/algol68/execute/bits-shift-3.a68
  61680edfccb9d633594d35fd2c41a3cb  gcc/testsuite/algol68/execute/bits-shift-4.a68
  42b771eaf2ba3d0c0b83ad6df8905be4  gcc/testsuite/algol68/execute/bits-test-1.a68
  ec8d149dd4b8f99f91e13d231858cfcd  gcc/testsuite/algol68/execute/boolops-1.a68
--- 17289,17299 ----
  2b96660f217790ef4d3c30d7967e272b  gcc/testsuite/algol68/execute/bin-negative-1.a68
  136cb319d4afa76d14581fab22962bda  gcc/testsuite/algol68/execute/bin-negative-gnu-1.a68
  05bdda461b233eed5f4c0836020e4da3  gcc/testsuite/algol68/execute/bits-clear-1.a68
+ e580a7999bb0aa8e787c9279d3aac203  gcc/testsuite/algol68/execute/bits-radix-ten-1.a68
  5fcb820655e1db838273df37eaa32743  gcc/testsuite/algol68/execute/bits-set-1.a68
  e7129df766858f1d3fa7cddc06870e34  gcc/testsuite/algol68/execute/bits-shift-1.a68
! 6e62e28b8be069f91084d6a86c3896c0  gcc/testsuite/algol68/execute/bits-shift-2.a68
! 30f3d0c0ef87f02b6570d7615acbc015  gcc/testsuite/algol68/execute/bits-shift-3.a68
  61680edfccb9d633594d35fd2c41a3cb  gcc/testsuite/algol68/execute/bits-shift-4.a68
  42b771eaf2ba3d0c0b83ad6df8905be4  gcc/testsuite/algol68/execute/bits-test-1.a68
  ec8d149dd4b8f99f91e13d231858cfcd  gcc/testsuite/algol68/execute/boolops-1.a68
*************** e070795f8b04b8e2f8ff5fbadaff271d  gcc/te
*** 17584,17596 ****
  b9b109a4fdcef3416497eb4b8600f834  gcc/testsuite/algol68/execute/ne-int-1.a68
  eea358375ad488f7da2c71f3aecbc9be  gcc/testsuite/algol68/execute/ne-string-1.a68
  683b43888c99c8a0d7fb6f11e6b0880e  gcc/testsuite/algol68/execute/neg-int-1.a68
! 8e433ff3c3a2fbce5ff7da78ba59db2e  gcc/testsuite/algol68/execute/not-bits-1.a68
  e07dd61262594f1cf85e3325a21f82b6  gcc/testsuite/algol68/execute/odd-1.a68
  dfb40888726dc623d5e23e1d7fba6ce5  gcc/testsuite/algol68/execute/op-1.a68
  1865f49f5fec3fdc3fe3e7f52521490d  gcc/testsuite/algol68/execute/op-2.a68
  85fd59bc5bdaea8b520dca36ba74d35c  gcc/testsuite/algol68/execute/op-3.a68
  4d92776345f782ed902347f5a0aeb5ea  gcc/testsuite/algol68/execute/operator-declaration-1.a68
! 76c17a0183f7c9c062bef63353e9b0ae  gcc/testsuite/algol68/execute/or-bits-1.a68
  184b41afd6dcfc90a3d71fef9f555807  gcc/testsuite/algol68/execute/orf-1.a68
  20bffc0d0430394287bd0a3a8b0ab183  gcc/testsuite/algol68/execute/over-int-1.a68
  f4a9dc5f87811e0e5c798398e1bec653  gcc/testsuite/algol68/execute/overab-1.a68
--- 17597,17609 ----
  b9b109a4fdcef3416497eb4b8600f834  gcc/testsuite/algol68/execute/ne-int-1.a68
  eea358375ad488f7da2c71f3aecbc9be  gcc/testsuite/algol68/execute/ne-string-1.a68
  683b43888c99c8a0d7fb6f11e6b0880e  gcc/testsuite/algol68/execute/neg-int-1.a68
! 64d86b38a3ff62a4276a4b3c0cf24f24  gcc/testsuite/algol68/execute/not-bits-1.a68
  e07dd61262594f1cf85e3325a21f82b6  gcc/testsuite/algol68/execute/odd-1.a68
  dfb40888726dc623d5e23e1d7fba6ce5  gcc/testsuite/algol68/execute/op-1.a68
  1865f49f5fec3fdc3fe3e7f52521490d  gcc/testsuite/algol68/execute/op-2.a68
  85fd59bc5bdaea8b520dca36ba74d35c  gcc/testsuite/algol68/execute/op-3.a68
  4d92776345f782ed902347f5a0aeb5ea  gcc/testsuite/algol68/execute/operator-declaration-1.a68
! c8e046df80c33c32c95c4aa41cf4722d  gcc/testsuite/algol68/execute/or-bits-1.a68
  184b41afd6dcfc90a3d71fef9f555807  gcc/testsuite/algol68/execute/orf-1.a68
  20bffc0d0430394287bd0a3a8b0ab183  gcc/testsuite/algol68/execute/over-int-1.a68
  f4a9dc5f87811e0e5c798398e1bec653  gcc/testsuite/algol68/execute/overab-1.a68
*************** ed95c4aaf14a6f37cef7c267ce11b6d1  gcc/te
*** 19032,19038 ****
  fde879f54ff20a86db30c5a54e0013ec  gcc/testsuite/c-c++-common/cpp/embed-15.c
  5eee7c556d80a801b209b0ab02277d11  gcc/testsuite/c-c++-common/cpp/embed-16.c
  6743124548c2d87355d326129e97b58b  gcc/testsuite/c-c++-common/cpp/embed-17.c
! e034e52e70f1a316036addaf07256b28  gcc/testsuite/c-c++-common/cpp/embed-18.c
  3203a89e45a4f1940cd8d7a60b04bec7  gcc/testsuite/c-c++-common/cpp/embed-19.c
  61810e01d706d1be1a058d6b41e52872  gcc/testsuite/c-c++-common/cpp/embed-2.c
  8fe7d13dc25faa0da992a8464c703dd8  gcc/testsuite/c-c++-common/cpp/embed-20.c
--- 19045,19051 ----
  fde879f54ff20a86db30c5a54e0013ec  gcc/testsuite/c-c++-common/cpp/embed-15.c
  5eee7c556d80a801b209b0ab02277d11  gcc/testsuite/c-c++-common/cpp/embed-16.c
  6743124548c2d87355d326129e97b58b  gcc/testsuite/c-c++-common/cpp/embed-17.c
! f33efd38e76ad1e39382c23bb9c43b46  gcc/testsuite/c-c++-common/cpp/embed-18.c
  3203a89e45a4f1940cd8d7a60b04bec7  gcc/testsuite/c-c++-common/cpp/embed-19.c
  61810e01d706d1be1a058d6b41e52872  gcc/testsuite/c-c++-common/cpp/embed-2.c
  8fe7d13dc25faa0da992a8464c703dd8  gcc/testsuite/c-c++-common/cpp/embed-20.c
*************** dcd88cf4442d15fe1ee6cf0c65bec7ba  gcc/te
*** 19636,19642 ****
  338ba582f00391fbbba5113c8a1bb792  gcc/testsuite/c-c++-common/gomp/atomic-7.c
  99033a31ad0844a80bb561d39f21bc2c  gcc/testsuite/c-c++-common/gomp/atomic-8.c
  3cc6adb13ca30af2db982d07306a24d7  gcc/testsuite/c-c++-common/gomp/atomic-9.c
! bd57b53fdb02f6b6f97ba56e2f4df479  gcc/testsuite/c-c++-common/gomp/atomic-builtins-1.c
  1b4f8527462b94e090104af54692febb  gcc/testsuite/c-c++-common/gomp/attrs-1.c
  44c94a36e22b6327b21381bcca1c494e  gcc/testsuite/c-c++-common/gomp/attrs-2.c
  b18e853bf462cafe38d3448d58a4e05c  gcc/testsuite/c-c++-common/gomp/attrs-3.c
--- 19649,19655 ----
  338ba582f00391fbbba5113c8a1bb792  gcc/testsuite/c-c++-common/gomp/atomic-7.c
  99033a31ad0844a80bb561d39f21bc2c  gcc/testsuite/c-c++-common/gomp/atomic-8.c
  3cc6adb13ca30af2db982d07306a24d7  gcc/testsuite/c-c++-common/gomp/atomic-9.c
! 3d0cc374e5231269fe749d5fdda5258f  gcc/testsuite/c-c++-common/gomp/atomic-builtins-1.c
  1b4f8527462b94e090104af54692febb  gcc/testsuite/c-c++-common/gomp/attrs-1.c
  44c94a36e22b6327b21381bcca1c494e  gcc/testsuite/c-c++-common/gomp/attrs-2.c
  b18e853bf462cafe38d3448d58a4e05c  gcc/testsuite/c-c++-common/gomp/attrs-3.c
*************** dbc9807bc9d36dca6cbe7c26bce4a0fd  gcc/te
*** 20145,20155 ****
  b36b586a036a4dd648a9a73563a1397e  gcc/testsuite/c-c++-common/gomp/unroll-non-rect-2.c
  ac892fefdc113f9fa56af5822c49d8a0  gcc/testsuite/c-c++-common/gomp/unroll-non-rect-3.c
  f0fe4ca6700d6810bdfbe42f7a328581  gcc/testsuite/c-c++-common/gomp/unroll-simd-1.c
- c67d4ce1ba8835a7d5bba95cfee6a999  gcc/testsuite/c-c++-common/gomp/uses_allocators-1.c
- c990dbb84715f7cae212333d6c10df66  gcc/testsuite/c-c++-common/gomp/uses_allocators-2.c
- f467d80ae7a5dcb6ae64d06010a6bccd  gcc/testsuite/c-c++-common/gomp/uses_allocators-4.c
- 068da7e739dbe5d90ada7169c0588ca2  gcc/testsuite/c-c++-common/gomp/uses_allocators-7.c
- 09abc1993aff1439d6ea61d49f882f7a  gcc/testsuite/c-c++-common/gomp/uses_allocators-8.c
  ae581c139df3ad068476c3c0011b10df  gcc/testsuite/c-c++-common/guality/Og-dce-1.c
  77dfce37c98a7f3ba9475b987b487300  gcc/testsuite/c-c++-common/guality/Og-dce-2.c
  d8649d74f0435be9dfbda3d78613de4d  gcc/testsuite/c-c++-common/guality/Og-dce-3.c
--- 20158,20163 ----
*************** d12c64781ab6183048b2cc8948ce13c9  gcc/te
*** 21285,21292 ****
  474497d0d9932a1aab0b9170a17813c6  gcc/testsuite/cobol.dg/group2/ADD_CORRESPONDING.cob
  767d019c56f84421d2032de38d5d7a66  gcc/testsuite/cobol.dg/group2/ADD_SUBTRACT_CORR_mixed_fix___float.cob
  8fd96e62b5175b3043acd696faa33b48  gcc/testsuite/cobol.dg/group2/ADD_SUBTRACT_CORR_mixed_fix___float.out
- eae529e9de8401a6b88a0a22f80569c3  gcc/testsuite/cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.cob
- f9d32a79300147e1b6f95ef2dd537f0f  gcc/testsuite/cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.out
  c017584c96d9db008dbd43a3a4e80eb2  gcc/testsuite/cobol.dg/group2/ALLOCATE_Rules_6_-_9._Without_OPTION_INITIALIZE_Without_-fdefaultbyte___ASCII_.cob
  963c2eab1347373a7caff1cef7072a29  gcc/testsuite/cobol.dg/group2/ALLOCATE_Rules_6_-_9._Without_OPTION_INITIALIZE_Without_-fdefaultbyte___ASCII_.out
  70376d7db556318e4231a15aea4ed251  gcc/testsuite/cobol.dg/group2/ALLOCATE_Rules_6_-_9._Without_OPTION_INITIALIZE_Without_-fdefaultbyte___EBCDIC_.cob
--- 21293,21298 ----
*************** cb41fef7448625fa4e0c8fd96e24fc4d  gcc/te
*** 23256,23261 ****
--- 23262,23268 ----
  6487c0454968e62ff493f215450a35cc  gcc/testsuite/g++.dg/coroutines/coro1-ret-int-yield-int.h
  6ece11b45159f25b68242745f908d279  gcc/testsuite/g++.dg/coroutines/maybe-unused-1.C
  de5003b6efc45fbdb82fb3c9a14023b0  gcc/testsuite/g++.dg/coroutines/nodiscard-1.C
+ 0a13f0cd7afc41c2877a72c067b97b84  gcc/testsuite/g++.dg/coroutines/pmf-121094.C
  38480902b130e861149d8b8b006e7e6b  gcc/testsuite/g++.dg/coroutines/pr100127.C
  88574c0dc1395f31dc409f048bf37faf  gcc/testsuite/g++.dg/coroutines/pr100611.C
  46087ea7fe5f7e548d1db1fe2bd1cdf7  gcc/testsuite/g++.dg/coroutines/pr100673.C
*************** bdd30a73b1365621820d564740c53d71  gcc/te
*** 23522,23527 ****
--- 23529,23535 ----
  0c46a0da3de6e20a370e03838d0a76dd  gcc/testsuite/g++.dg/coroutines/torture/pr98704.C
  5e7bca6d14a61fe329d1a4e54dd0d041  gcc/testsuite/g++.dg/coroutines/torture/special-termination-00-sync-completion.C
  729d7261244a4b93f8caf0dadbea7c82  gcc/testsuite/g++.dg/coroutines/torture/special-termination-01-self-destruct.C
+ 08f9ad809a64e21f1f5f5369134ce944  gcc/testsuite/g++.dg/coroutines/torture/tuple-decomp-pr124584.C
  d571703303e59ab43d8a90e6e4926187  gcc/testsuite/g++.dg/coroutines/unevaluated.C
  074cd02b7474e8119248041c10f08ad3  gcc/testsuite/g++.dg/cpp/_Pragma1.C
  8ce78309bd631829da82f2798d24d628  gcc/testsuite/g++.dg/cpp/c++98-pedantic.C
*************** b8d20ab3fff2d35109e30a6a907845f1  gcc/te
*** 23560,23565 ****
--- 23568,23576 ----
  616061a95b206fb48748193f412fa24c  gcc/testsuite/g++.dg/cpp/embed-28.C
  c25d02a801170c4ea6811ff9f833a443  gcc/testsuite/g++.dg/cpp/embed-29.C
  518db3b2c551f0072b476c131c511910  gcc/testsuite/g++.dg/cpp/embed-3.C
+ ec2fb36d6acc54030842c2cf146bbb82  gcc/testsuite/g++.dg/cpp/embed-30.C
+ c1539f0705033df0e22199b4b49ccd45  gcc/testsuite/g++.dg/cpp/embed-31.C
+ 72e40fbe16621831d418bbb5d973e84f  gcc/testsuite/g++.dg/cpp/embed-32.C
  39e59b8a50db7adc52db30aeffc92f5c  gcc/testsuite/g++.dg/cpp/embed-4.C
  71d36e829a98f52caa2a8f034296db7c  gcc/testsuite/g++.dg/cpp/embed-5.C
  46803b17bcf5a02c2e8b41c2931b32b0  gcc/testsuite/g++.dg/cpp/embed-6.C
*************** c7e6cc6230f1d5b6c871906050eb4a8e  gcc/te
*** 24585,24609 ****
  f43c03a4784f2f2c60f5f1a33fb05baa  gcc/testsuite/g++.dg/cpp0x/defaulted49.C
  f850ce13cb38dd65e14979303082c6cf  gcc/testsuite/g++.dg/cpp0x/defaulted5.C
  758c3a05ba6b04dec3e4f589bacba06c  gcc/testsuite/g++.dg/cpp0x/defaulted50.C
! e926462fc6768aa751b7f2118d4285a1  gcc/testsuite/g++.dg/cpp0x/defaulted51.C
  f3d49ab44b711666dccaeba5221556c6  gcc/testsuite/g++.dg/cpp0x/defaulted52.C
  3c4e6840e5ab64aa5f2b9193f6fc9526  gcc/testsuite/g++.dg/cpp0x/defaulted53.C
  d58b6be8b3b759d44390d74f9990552b  gcc/testsuite/g++.dg/cpp0x/defaulted54.C
! 384335ae432ba6751d54746c7c7044be  gcc/testsuite/g++.dg/cpp0x/defaulted55.C
! 86568ed0cdc41e178119c55f8bcf2c53  gcc/testsuite/g++.dg/cpp0x/defaulted56.C
! 0f4c07be2972c75efbd7c98f7d454d51  gcc/testsuite/g++.dg/cpp0x/defaulted57.C
  e34c542dd6180cede36a7449b455c84f  gcc/testsuite/g++.dg/cpp0x/defaulted58.C
  3fd23f2dbacd20dc81a557098cf279d1  gcc/testsuite/g++.dg/cpp0x/defaulted59.C
  1983e4823fae7dc43730a329ff221148  gcc/testsuite/g++.dg/cpp0x/defaulted6.C
  ddf162f93428742a35931467028606d6  gcc/testsuite/g++.dg/cpp0x/defaulted60.C
  c2da4b34ee24f7f426afe3bde8de1d81  gcc/testsuite/g++.dg/cpp0x/defaulted61.C
  468183957200d4cd526f4a049536e8cd  gcc/testsuite/g++.dg/cpp0x/defaulted62.C
! 1d269df02cd2a45567e39b8643fa22b8  gcc/testsuite/g++.dg/cpp0x/defaulted63.C
! daa591e12254c313ca26c02da55ef90d  gcc/testsuite/g++.dg/cpp0x/defaulted64.C
! ddcd28461e906f90904ff163bf970148  gcc/testsuite/g++.dg/cpp0x/defaulted65.C
! 0d5f0f9f2a0bbb3c036a6e1bafb455ed  gcc/testsuite/g++.dg/cpp0x/defaulted66.C
! 0f815adf8c8057a9467214e2ec7eca93  gcc/testsuite/g++.dg/cpp0x/defaulted67.C
! c73d4f9a1e60a9101c9ca8b379538536  gcc/testsuite/g++.dg/cpp0x/defaulted68.C
  71064d42dbfc78b3fc659843ba2514a1  gcc/testsuite/g++.dg/cpp0x/defaulted69.C
  bbb1e584edf09356b8623f522ff03019  gcc/testsuite/g++.dg/cpp0x/defaulted7.C
  cbe0ba147a1df371f25c8ab8623476ef  gcc/testsuite/g++.dg/cpp0x/defaulted8.C
--- 24596,24620 ----
  f43c03a4784f2f2c60f5f1a33fb05baa  gcc/testsuite/g++.dg/cpp0x/defaulted49.C
  f850ce13cb38dd65e14979303082c6cf  gcc/testsuite/g++.dg/cpp0x/defaulted5.C
  758c3a05ba6b04dec3e4f589bacba06c  gcc/testsuite/g++.dg/cpp0x/defaulted50.C
! ea7ea98a9dc8497dbffe9fd042289ed9  gcc/testsuite/g++.dg/cpp0x/defaulted51.C
  f3d49ab44b711666dccaeba5221556c6  gcc/testsuite/g++.dg/cpp0x/defaulted52.C
  3c4e6840e5ab64aa5f2b9193f6fc9526  gcc/testsuite/g++.dg/cpp0x/defaulted53.C
  d58b6be8b3b759d44390d74f9990552b  gcc/testsuite/g++.dg/cpp0x/defaulted54.C
! 7eab2dc04f869e44d2007f26798930cc  gcc/testsuite/g++.dg/cpp0x/defaulted55.C
! 608722706d07adb4585e52003d67e471  gcc/testsuite/g++.dg/cpp0x/defaulted56.C
! f749d4210022a83be8548c897f073c2c  gcc/testsuite/g++.dg/cpp0x/defaulted57.C
  e34c542dd6180cede36a7449b455c84f  gcc/testsuite/g++.dg/cpp0x/defaulted58.C
  3fd23f2dbacd20dc81a557098cf279d1  gcc/testsuite/g++.dg/cpp0x/defaulted59.C
  1983e4823fae7dc43730a329ff221148  gcc/testsuite/g++.dg/cpp0x/defaulted6.C
  ddf162f93428742a35931467028606d6  gcc/testsuite/g++.dg/cpp0x/defaulted60.C
  c2da4b34ee24f7f426afe3bde8de1d81  gcc/testsuite/g++.dg/cpp0x/defaulted61.C
  468183957200d4cd526f4a049536e8cd  gcc/testsuite/g++.dg/cpp0x/defaulted62.C
! a9bc69d33d0f441662d141fc18068a19  gcc/testsuite/g++.dg/cpp0x/defaulted63.C
! e1aa35f788dd2dbd01336c67008ba315  gcc/testsuite/g++.dg/cpp0x/defaulted64.C
! e8ddf088e520c46a3ae735058102b1df  gcc/testsuite/g++.dg/cpp0x/defaulted65.C
! 1191ff13b0cc39bde713bec5eef88ec4  gcc/testsuite/g++.dg/cpp0x/defaulted66.C
! ddf8ac81f60b7d082d767d9700536f73  gcc/testsuite/g++.dg/cpp0x/defaulted67.C
! 474330c4341dca92d499490d11491944  gcc/testsuite/g++.dg/cpp0x/defaulted68.C
  71064d42dbfc78b3fc659843ba2514a1  gcc/testsuite/g++.dg/cpp0x/defaulted69.C
  bbb1e584edf09356b8623f522ff03019  gcc/testsuite/g++.dg/cpp0x/defaulted7.C
  cbe0ba147a1df371f25c8ab8623476ef  gcc/testsuite/g++.dg/cpp0x/defaulted8.C
*************** a0963c46378623804788982ece221428  gcc/te
*** 27005,27011 ****
  6656a414d9dfcfde451bf4c7cda15e23  gcc/testsuite/g++.dg/cpp1y/decltype-auto8.C
  bdf42806bc072f01f4ad0c2f053df450  gcc/testsuite/g++.dg/cpp1y/decltype-auto9.C
  65b797bf47a4fa03ba5b4e26282a3857  gcc/testsuite/g++.dg/cpp1y/defaulted1.C
! 74d827c0173d7300b32c1fd0adfcd4ff  gcc/testsuite/g++.dg/cpp1y/defaulted2.C
  516d0cef75f4267f67d755a810807bc2  gcc/testsuite/g++.dg/cpp1y/digit-sep-cxx11-neg.C
  689cbb9207e775c0f7572b0587fbd4fd  gcc/testsuite/g++.dg/cpp1y/digit-sep-line-neg.C
  b0b8339395130310f925dd038dff1c6c  gcc/testsuite/g++.dg/cpp1y/digit-sep-line.C
--- 27016,27022 ----
  6656a414d9dfcfde451bf4c7cda15e23  gcc/testsuite/g++.dg/cpp1y/decltype-auto8.C
  bdf42806bc072f01f4ad0c2f053df450  gcc/testsuite/g++.dg/cpp1y/decltype-auto9.C
  65b797bf47a4fa03ba5b4e26282a3857  gcc/testsuite/g++.dg/cpp1y/defaulted1.C
! 2b96067bd7293b64c9ce13321f881e24  gcc/testsuite/g++.dg/cpp1y/defaulted2.C
  516d0cef75f4267f67d755a810807bc2  gcc/testsuite/g++.dg/cpp1y/digit-sep-cxx11-neg.C
  689cbb9207e775c0f7572b0587fbd4fd  gcc/testsuite/g++.dg/cpp1y/digit-sep-line-neg.C
  b0b8339395130310f925dd038dff1c6c  gcc/testsuite/g++.dg/cpp1y/digit-sep-line.C
*************** a3a8cba4fbee69e46ecf1bdb30c7d924  gcc/te
*** 28521,28528 ****
  4fe3609f7385a1f131df362a10ee6065  gcc/testsuite/g++.dg/cpp26/variadic-comma5.C
  6ca56d56bbd9d4ac1e7cb5313516359b  gcc/testsuite/g++.dg/cpp26/variadic-friend1.C
  bfd759702f3238655df26d94d570e2d2  gcc/testsuite/g++.dg/cpp29/cplusplus.C
  3f7b16f4948f383cc9a4a2a13e0a3d0e  gcc/testsuite/g++.dg/cpp29/ext-floating1.C
! 5f9461fbe9c24ae7cce25be680e7df13  gcc/testsuite/g++.dg/cpp29/feat-cxx29.C
  c2dff1da8208f3291247a019d63b7dd9  gcc/testsuite/g++.dg/cpp29/lambda-order1.C
  59b50274ff1f8b0b48090fb61a763cf5  gcc/testsuite/g++.dg/cpp29/lambda-order2.C
  0492a660aacda6b5424130121221cc91  gcc/testsuite/g++.dg/cpp29/std-floating1.C
--- 28532,28545 ----
  4fe3609f7385a1f131df362a10ee6065  gcc/testsuite/g++.dg/cpp26/variadic-comma5.C
  6ca56d56bbd9d4ac1e7cb5313516359b  gcc/testsuite/g++.dg/cpp26/variadic-friend1.C
  bfd759702f3238655df26d94d570e2d2  gcc/testsuite/g++.dg/cpp29/cplusplus.C
+ 7107326920773a76ba2e727819370f4f  gcc/testsuite/g++.dg/cpp29/defaulted1.C
+ e2293005b0c015ae155330fad772c2c8  gcc/testsuite/g++.dg/cpp29/defaulted2.C
+ e00b0a5c5d4ee468cca225875b471f34  gcc/testsuite/g++.dg/cpp29/defaulted3.C
+ 233d9ec15e82040aba59d6635ff94529  gcc/testsuite/g++.dg/cpp29/defaulted4.C
+ 218a960e0c6d6c6b0ce872f28dbba793  gcc/testsuite/g++.dg/cpp29/defaulted5.C
+ a63671e971b0c82284033b313ca7896e  gcc/testsuite/g++.dg/cpp29/defaulted6.C
  3f7b16f4948f383cc9a4a2a13e0a3d0e  gcc/testsuite/g++.dg/cpp29/ext-floating1.C
! 36b4b3d165f16c296a2475317e4f3e51  gcc/testsuite/g++.dg/cpp29/feat-cxx29.C
  c2dff1da8208f3291247a019d63b7dd9  gcc/testsuite/g++.dg/cpp29/lambda-order1.C
  59b50274ff1f8b0b48090fb61a763cf5  gcc/testsuite/g++.dg/cpp29/lambda-order2.C
  0492a660aacda6b5424130121221cc91  gcc/testsuite/g++.dg/cpp29/std-floating1.C
*************** ea31517e527d7eb88edeeab341ec1a8b  gcc/te
*** 29296,29301 ****
--- 29313,29319 ----
  a36a7ca1d0eff1f81629dd71a462961f  gcc/testsuite/g++.dg/cpp2a/decomp1-aux.cc
  97d028d9e7af8226aa281ebcad5bf29f  gcc/testsuite/g++.dg/cpp2a/decomp1.C
  3f0f0087d8090182027f49fb3162aad7  gcc/testsuite/g++.dg/cpp2a/decomp10.C
+ b2e2cf90e50587433366cc7e1e2d8610  gcc/testsuite/g++.dg/cpp2a/decomp11.C
  b43ef64f974b1072708b231b049e3ed4  gcc/testsuite/g++.dg/cpp2a/decomp2.C
  8f3b9a6346c7c909ec6ae92d8da636ac  gcc/testsuite/g++.dg/cpp2a/decomp3.C
  c45bd99bf81821c6c33a6bec2da4fce3  gcc/testsuite/g++.dg/cpp2a/decomp4.C
*************** aa081a16610eaae6eaa83ad85ce8aa33  gcc/te
*** 31280,31285 ****
--- 31298,31304 ----
  3702c5ca025df0d43d103161203f0ddf  gcc/testsuite/g++.dg/ext/is_function.C
  421f56d6828967eabadae2f63452e22d  gcc/testsuite/g++.dg/ext/is_implicit_lifetime.C
  17ec903e307ff61c01e84ba3f010b82c  gcc/testsuite/g++.dg/ext/is_implicit_lifetime2.C
+ 42b15f70e9796dd7c6f85c9836d01d7c  gcc/testsuite/g++.dg/ext/is_implicit_lifetime3.C
  04356e7583c2b33f9d0c90103c46653f  gcc/testsuite/g++.dg/ext/is_invocable1.C
  0da83314cec6d313a123af04a33e386b  gcc/testsuite/g++.dg/ext/is_invocable2.C
  a880bbf4a2491686f32ef99587f1d5d7  gcc/testsuite/g++.dg/ext/is_invocable3.C
*************** fa44d88d6fab49c78847c2e58ab2fcb2  gcc/te
*** 31957,31963 ****
  e7b69c86d16171732a1c9ef74218d864  gcc/testsuite/g++.dg/gomp/depend-iterator-3.C
  740ed0612faf0dcfa1181d65d79b197b  gcc/testsuite/g++.dg/gomp/depobj-1.C
  877ebdd1bfc2c88bda8ef10ad16748e7  gcc/testsuite/g++.dg/gomp/deprecate-1.C
! d72b55aefb31276fa8a6bd1fcdd9c071  gcc/testsuite/g++.dg/gomp/deprecate-2.C
  a93deb73566f880b8420dd06c26750b5  gcc/testsuite/g++.dg/gomp/dispatch-1.C
  6a401190e5aa4ea61651f1080bd57637  gcc/testsuite/g++.dg/gomp/dispatch-2.C
  04a22e19298efac2e169e318609a8961  gcc/testsuite/g++.dg/gomp/dispatch-3.C
--- 31976,31982 ----
  e7b69c86d16171732a1c9ef74218d864  gcc/testsuite/g++.dg/gomp/depend-iterator-3.C
  740ed0612faf0dcfa1181d65d79b197b  gcc/testsuite/g++.dg/gomp/depobj-1.C
  877ebdd1bfc2c88bda8ef10ad16748e7  gcc/testsuite/g++.dg/gomp/deprecate-1.C
! b4786ef4e092b2ab0690afec671ee472  gcc/testsuite/g++.dg/gomp/deprecate-2.C
  a93deb73566f880b8420dd06c26750b5  gcc/testsuite/g++.dg/gomp/dispatch-1.C
  6a401190e5aa4ea61651f1080bd57637  gcc/testsuite/g++.dg/gomp/dispatch-2.C
  04a22e19298efac2e169e318609a8961  gcc/testsuite/g++.dg/gomp/dispatch-3.C
*************** f0d6ccb51f8211f0c1ac5d76df91ff55  gcc/te
*** 32282,32288 ****
  d3840191ee9d2327dc2c3db177e73ca9  gcc/testsuite/g++.dg/gomp/unroll-1.C
  37bc05caa8b8c6ca83c1173ea97e8834  gcc/testsuite/g++.dg/gomp/unroll-2.C
  cb34036a86169db3ce69df129f34b2aa  gcc/testsuite/g++.dg/gomp/unroll-3.C
- 8f5d0753dca3b55af329d67297d6fe2c  gcc/testsuite/g++.dg/gomp/uses_allocators-1.C
  2711e5dceb18883acf69e13dc1de71f8  gcc/testsuite/g++.dg/graphite/graphite.exp
  d3199be15373325638c3f80cd3a60955  gcc/testsuite/g++.dg/graphite/id-1.C
  5c6a1178f4fd620e8792644c534c29f8  gcc/testsuite/g++.dg/graphite/pr39447.C
--- 32301,32306 ----
*************** d2e46c2469499fd1b1cb32a384d6bc81  gcc/te
*** 35639,35644 ****
--- 35657,35663 ----
  020cc92178f45d27f797218781bfe02c  gcc/testsuite/g++.dg/no-stack-protector-attr.C
  8782d87c3ab6e3b20b317d9f1492e146  gcc/testsuite/g++.dg/opt/20050511-1.C
  5e1f1ec360f2ae54c78ee347de5c583f  gcc/testsuite/g++.dg/opt/20181025-1.C
+ 169bea5dd58c1746026b7e4924bbd199  gcc/testsuite/g++.dg/opt/20260703-1.C
  960bd912d3dccb44df0ecdebdfd45b44  gcc/testsuite/g++.dg/opt/alias1.C
  15bcb0db43b0a7c6f0b1a4ff014da35d  gcc/testsuite/g++.dg/opt/alias2.C
  91fe29b9b1f08a3ca87595896db03497  gcc/testsuite/g++.dg/opt/alias3.C
*************** ead957b0577914db81f592ac5a260cc6  gcc/te
*** 36082,36087 ****
--- 36101,36107 ----
  fbf31592874c852b0610411198cae900  gcc/testsuite/g++.dg/opt/pr94589-3.C
  c8d100425b84f9c19e66b664f68a043b  gcc/testsuite/g++.dg/opt/pr94589-4.C
  773505f38171e49de90c7709bc3fe5a4  gcc/testsuite/g++.dg/opt/pr94589-5.C
+ a487e6d74fd928756dcb4bab9f939e11  gcc/testsuite/g++.dg/opt/pr94589-5a.C
  ac325b8a5465a9069dcb40f706f71e15  gcc/testsuite/g++.dg/opt/pr94589-6.C
  dacd41d6dbf618fb881768d6a068d7f1  gcc/testsuite/g++.dg/opt/pr94618.C
  68efdf843522ab51908aa0aba5c03000  gcc/testsuite/g++.dg/opt/pr95080.C
*************** eda67a8394a25b381e47971e78264eba  gcc/te
*** 36359,36366 ****
  1dbd130359f81ed3f6a910388f6256c8  gcc/testsuite/g++.dg/other/i386-1.C
  9913a24914ce11f6a0606c70ed58cb96  gcc/testsuite/g++.dg/other/i386-10.C
  3dd6e4901e3efacc8cfe5e0a42c2f8ea  gcc/testsuite/g++.dg/other/i386-11.C
! 27eabfd8aa40ef3fb4f1382b3ddf69de  gcc/testsuite/g++.dg/other/i386-2.C
! 1e0dbc81c0a4edd132960b24f8edb8ac  gcc/testsuite/g++.dg/other/i386-3.C
  790380b4fd2857df28a8cc91aee8e723  gcc/testsuite/g++.dg/other/i386-4.C
  a47898b2c05fe055ea86fee50e074f30  gcc/testsuite/g++.dg/other/i386-7.C
  d92b54f21af3cda5d260ebf4a5d1b347  gcc/testsuite/g++.dg/other/i386-8.C
--- 36379,36386 ----
  1dbd130359f81ed3f6a910388f6256c8  gcc/testsuite/g++.dg/other/i386-1.C
  9913a24914ce11f6a0606c70ed58cb96  gcc/testsuite/g++.dg/other/i386-10.C
  3dd6e4901e3efacc8cfe5e0a42c2f8ea  gcc/testsuite/g++.dg/other/i386-11.C
! ef416bb75133f8e75c739b9ed1d2d9d2  gcc/testsuite/g++.dg/other/i386-2.C
! 31b802fabdfb1a2de4af52ea142c776a  gcc/testsuite/g++.dg/other/i386-3.C
  790380b4fd2857df28a8cc91aee8e723  gcc/testsuite/g++.dg/other/i386-4.C
  a47898b2c05fe055ea86fee50e074f30  gcc/testsuite/g++.dg/other/i386-7.C
  d92b54f21af3cda5d260ebf4a5d1b347  gcc/testsuite/g++.dg/other/i386-8.C
*************** a2c5daff71c5cc0345db4bd0e912e669  gcc/te
*** 38066,38071 ****
--- 38086,38092 ----
  07a4631eea7fe0c6bdb296ca77c1d3a2  gcc/testsuite/g++.dg/reflect/members_of14.C
  6a2f357760584b04cfa1a4685abd70a0  gcc/testsuite/g++.dg/reflect/members_of15.C
  0b728e20e7f8de90f291700373ee27f7  gcc/testsuite/g++.dg/reflect/members_of16.C
+ bdc095dcc326dfb5ea903e36b1c9b4ca  gcc/testsuite/g++.dg/reflect/members_of17.C
  689453102e4425f8d2c4ff89cb939595  gcc/testsuite/g++.dg/reflect/members_of2.C
  80a032eb31d0998f2d288e303356773a  gcc/testsuite/g++.dg/reflect/members_of3.C
  5ececa99994de569abffae1671b71870  gcc/testsuite/g++.dg/reflect/members_of4.C
*************** d1618ed5affc804f7f8cda302ecd3b2e  gcc/te
*** 38157,38162 ****
--- 38178,38184 ----
  0bfe2b4b0d52d493a24af0d81d278986  gcc/testsuite/g++.dg/reflect/pr125007.C
  ccc4415ba1de4b5fda2f4d61583fab4c  gcc/testsuite/g++.dg/reflect/pr125179.C
  c35e7ee674a0e569c67e5b1b3a3dc568  gcc/testsuite/g++.dg/reflect/pr125412.C
+ b5ad51bdbd04ae99b7c4d59988ca4ec5  gcc/testsuite/g++.dg/reflect/pr126036.C
  e6404856d4cc9cc02aa5ebec3e5ecb82  gcc/testsuite/g++.dg/reflect/qrn1.C
  4ef5fc49aed920d8bfc3bc57a9ddef71  gcc/testsuite/g++.dg/reflect/qrn2.C
  8a49e7b1ad0cad9ac48fdcf37ad900cf  gcc/testsuite/g++.dg/reflect/range_args.C
*************** b76f4161df54c8629782ef9e0d754bca  gcc/te
*** 45676,45682 ****
  8d30bac01e24683c2d4e58c15ccb4a99  gcc/testsuite/g++.target/aarch64/fp8_mangling.C
  e488781ad97c2cdafc1c66ede7aa1e0f  gcc/testsuite/g++.target/aarch64/fp8_scalar_typecheck_2.C
  4320de0414b96b162e7734443992dd38  gcc/testsuite/g++.target/aarch64/interference.C
! 277b5d3e6c910137a4093c33ad09513e  gcc/testsuite/g++.target/aarch64/lane-bound-1.C
  1d4d4a8de3da70578c27a82a12ea16d2  gcc/testsuite/g++.target/aarch64/mv-1.C
  58ae6c894ed5d99c839b1c81b5a97e52  gcc/testsuite/g++.target/aarch64/mv-and-mvc-error1.C
  ec07e0126ff8d719e4bd754ac0832156  gcc/testsuite/g++.target/aarch64/mv-and-mvc-error2.C
--- 45698,45704 ----
  8d30bac01e24683c2d4e58c15ccb4a99  gcc/testsuite/g++.target/aarch64/fp8_mangling.C
  e488781ad97c2cdafc1c66ede7aa1e0f  gcc/testsuite/g++.target/aarch64/fp8_scalar_typecheck_2.C
  4320de0414b96b162e7734443992dd38  gcc/testsuite/g++.target/aarch64/interference.C
! 14ca463e09c74620ac66706ca7be3d4d  gcc/testsuite/g++.target/aarch64/lane-bound-1.C
  1d4d4a8de3da70578c27a82a12ea16d2  gcc/testsuite/g++.target/aarch64/mv-1.C
  58ae6c894ed5d99c839b1c81b5a97e52  gcc/testsuite/g++.target/aarch64/mv-and-mvc-error1.C
  ec07e0126ff8d719e4bd754ac0832156  gcc/testsuite/g++.target/aarch64/mv-and-mvc-error2.C
*************** f35ce5ad20d4cbc9d7cf2df6f950dfc4  gcc/te
*** 45723,45729 ****
  846f32ec61a2c44d9395459e726dc310  gcc/testsuite/g++.target/aarch64/pr103147-3.C
  b45179fb4c2cb954cc481e0a385817d5  gcc/testsuite/g++.target/aarch64/pr103147-4.C
  61a760575cff2cf4bd17ba9244e96518  gcc/testsuite/g++.target/aarch64/pr103147-5.C
! e41794101e1163933e295ca13a5ea408  gcc/testsuite/g++.target/aarch64/pr103147-6.C
  02bff38b96b8706f58c3b373fea990f2  gcc/testsuite/g++.target/aarch64/pr103147-7.C
  8931dca56e54462bd94ce184b0a14e21  gcc/testsuite/g++.target/aarch64/pr103147-8.C
  18f8443138a6fbfd030458bc4aee321e  gcc/testsuite/g++.target/aarch64/pr103147-9.C
--- 45745,45751 ----
  846f32ec61a2c44d9395459e726dc310  gcc/testsuite/g++.target/aarch64/pr103147-3.C
  b45179fb4c2cb954cc481e0a385817d5  gcc/testsuite/g++.target/aarch64/pr103147-4.C
  61a760575cff2cf4bd17ba9244e96518  gcc/testsuite/g++.target/aarch64/pr103147-5.C
! 84735dceb8abdd7bf29c2b22df870d00  gcc/testsuite/g++.target/aarch64/pr103147-6.C
  02bff38b96b8706f58c3b373fea990f2  gcc/testsuite/g++.target/aarch64/pr103147-7.C
  8931dca56e54462bd94ce184b0a14e21  gcc/testsuite/g++.target/aarch64/pr103147-8.C
  18f8443138a6fbfd030458bc4aee321e  gcc/testsuite/g++.target/aarch64/pr103147-9.C
*************** af15d8508e94dffd343c693011e63fd4  gcc/te
*** 45734,45740 ****
  9b78f2399b3493ce846b6fb03c77ee6c  gcc/testsuite/g++.target/aarch64/pr109661-4.C
  642fe82936cfa8f9a1ed358581691f4f  gcc/testsuite/g++.target/aarch64/pr113356.C
  c30fa1a8e837444d0a3e1e6be628b06d  gcc/testsuite/g++.target/aarch64/pr116074.C
! c8698b784efebd06777683e03d5bbfc7  gcc/testsuite/g++.target/aarch64/pr117048.C
  6bf6be8a46ca37d38164b2be2534e2c7  gcc/testsuite/g++.target/aarch64/pr119498.C
  47d08c40b71990fcfb466ef02b924211  gcc/testsuite/g++.target/aarch64/pr121290_1.C
  8e1e90695dc0c9fe994d520fb00bb0c8  gcc/testsuite/g++.target/aarch64/pr122890.C
--- 45756,45762 ----
  9b78f2399b3493ce846b6fb03c77ee6c  gcc/testsuite/g++.target/aarch64/pr109661-4.C
  642fe82936cfa8f9a1ed358581691f4f  gcc/testsuite/g++.target/aarch64/pr113356.C
  c30fa1a8e837444d0a3e1e6be628b06d  gcc/testsuite/g++.target/aarch64/pr116074.C
! cf45e3dae0a9f4aedcd5c93faa7b6f5b  gcc/testsuite/g++.target/aarch64/pr117048.C
  6bf6be8a46ca37d38164b2be2534e2c7  gcc/testsuite/g++.target/aarch64/pr119498.C
  47d08c40b71990fcfb466ef02b924211  gcc/testsuite/g++.target/aarch64/pr121290_1.C
  8e1e90695dc0c9fe994d520fb00bb0c8  gcc/testsuite/g++.target/aarch64/pr122890.C
*************** a1e80c97392f15c445626accf3d33f52  gcc/te
*** 45762,45768 ****
  fc961318316b49991b985e2fdd2be83d  gcc/testsuite/g++.target/aarch64/spaceship_1.C
  4501fff92ad989d592916380d816d0d7  gcc/testsuite/g++.target/aarch64/spaceship_2.C
  43ef3ca7cf2796812900332b2f3aa1c3  gcc/testsuite/g++.target/aarch64/spaceship_3.C
! 9aa0f37bd2ae29b75385cac42236c2f2  gcc/testsuite/g++.target/aarch64/sve/aarch64-ssve.exp
  546af9a83b6016321f7eca8e57bd79bf  gcc/testsuite/g++.target/aarch64/sve/aarch64-sve.exp
  a6360472eed92aa68d9de7e0dcbbc077  gcc/testsuite/g++.target/aarch64/sve/abd_1.C
  4be94bbd6cb338300aa5e5978429a0f3  gcc/testsuite/g++.target/aarch64/sve/acle/aarch64-sve-acle-asm.exp
--- 45784,45790 ----
  fc961318316b49991b985e2fdd2be83d  gcc/testsuite/g++.target/aarch64/spaceship_1.C
  4501fff92ad989d592916380d816d0d7  gcc/testsuite/g++.target/aarch64/spaceship_2.C
  43ef3ca7cf2796812900332b2f3aa1c3  gcc/testsuite/g++.target/aarch64/spaceship_3.C
! c014dcf1b0c8995ba6d7bb429b7c1854  gcc/testsuite/g++.target/aarch64/sve/aarch64-ssve.exp
  546af9a83b6016321f7eca8e57bd79bf  gcc/testsuite/g++.target/aarch64/sve/aarch64-sve.exp
  a6360472eed92aa68d9de7e0dcbbc077  gcc/testsuite/g++.target/aarch64/sve/abd_1.C
  4be94bbd6cb338300aa5e5978429a0f3  gcc/testsuite/g++.target/aarch64/sve/acle/aarch64-sve-acle-asm.exp
*************** ea015573ee8ddabae38c2a615f8228fb  gcc/te
*** 46166,46172 ****
  38f98e80df657040e7cd34e280ccd4c0  gcc/testsuite/g++.target/i386/pr122446-amxfp8.C
  59ffb1a0656cc43a87c4b7e240fb28c6  gcc/testsuite/g++.target/i386/pr122446-amxint8.C
  d127e2f7300195708178a6cec8648544  gcc/testsuite/g++.target/i386/pr122446-amxmovrs.C
- f5a1d06c17cacf90f627c83c8b800a78  gcc/testsuite/g++.target/i386/pr122446-amxtf32.C
  ffbb5e0bd5668625c6d5cef769228118  gcc/testsuite/g++.target/i386/pr122446-amxtile.C
  59940f4c4aa7fabb09c136a75c51dbfc  gcc/testsuite/g++.target/i386/pr122906-1.C
  fe98d8bd643079ebf7d12496d3189d03  gcc/testsuite/g++.target/i386/pr123779.C
--- 46188,46193 ----
*************** c0aa169f53b6c831c9c42b449fec63b6  gcc/te
*** 46493,46503 ****
  d7689988bda934df8a112ceee887ccab  gcc/testsuite/g++.target/s390/s390.exp
  9ff1a8d8d1c6f294a317244992dec97a  gcc/testsuite/g++.target/s390/zvec-templ-1.C
  f27916a1de2b23d247fca90eb0d7191a  gcc/testsuite/g++.target/sh/sh.exp
! 09b8b53ce09543cb0dc494095977eb30  gcc/testsuite/g++.target/sh/torture/pr55212-c311.C
! c459a9b755a4a6fec4beda7e103a9a34  gcc/testsuite/g++.target/sh/torture/pr55212-c333.C
! 4c6c9e7f4529efcc8e887f067527d612  gcc/testsuite/g++.target/sh/torture/pr55212-c373.C
! 74ee7729e1f98918660311f23db5e309  gcc/testsuite/g++.target/sh/torture/pr55212-c384.C
! 810cbbd931332a2875c95ba17d0d4166  gcc/testsuite/g++.target/sh/torture/pr55212-c413.C
  0fa9f5acb348e8e9c4650d51b489be3c  gcc/testsuite/g++.target/sh/torture/sh-torture.exp
  9ec75dfed03d43e4480e98ac02f604a7  gcc/testsuite/g++.target/xtensa/pr95571.C
  dec6f1cdafe485fc846e6dfc971ba38c  gcc/testsuite/g++.target/xtensa/xtensa.exp
--- 46514,46524 ----
  d7689988bda934df8a112ceee887ccab  gcc/testsuite/g++.target/s390/s390.exp
  9ff1a8d8d1c6f294a317244992dec97a  gcc/testsuite/g++.target/s390/zvec-templ-1.C
  f27916a1de2b23d247fca90eb0d7191a  gcc/testsuite/g++.target/sh/sh.exp
! 3c0f6e165723ce21104a1e637ab342a5  gcc/testsuite/g++.target/sh/torture/pr55212-c311.C
! 188dd9c8b2b0310195ab17072f5a1fae  gcc/testsuite/g++.target/sh/torture/pr55212-c333.C
! 32aab6b35e7baa6139bc60d122d33e36  gcc/testsuite/g++.target/sh/torture/pr55212-c373.C
! ae177f3cf87dca81f14f9cc52c616ef1  gcc/testsuite/g++.target/sh/torture/pr55212-c384.C
! 75487a943fb0c27592ab24ffecf701e7  gcc/testsuite/g++.target/sh/torture/pr55212-c413.C
  0fa9f5acb348e8e9c4650d51b489be3c  gcc/testsuite/g++.target/sh/torture/sh-torture.exp
  9ec75dfed03d43e4480e98ac02f604a7  gcc/testsuite/g++.target/xtensa/pr95571.C
  dec6f1cdafe485fc846e6dfc971ba38c  gcc/testsuite/g++.target/xtensa/xtensa.exp
*************** fcd274aa9e98ef2eed6f4ff3d3a74b4c  gcc/te
*** 50793,50799 ****
  c78bbb71f763798ca7a0fb499b6de460  gcc/testsuite/gcc.dg/Warray-bounds-62.c
  ce896a75014d06ce0ca041baba249515  gcc/testsuite/gcc.dg/Warray-bounds-63.c
  9ea4759a96c75558f69e6cce54c34eb3  gcc/testsuite/gcc.dg/Warray-bounds-64.c
! 1df7f806db7a39bd9829ad74b9781b37  gcc/testsuite/gcc.dg/Warray-bounds-65.c
  f3fd7533759b1b91a93ea6b7dd8116ad  gcc/testsuite/gcc.dg/Warray-bounds-66.c
  f09603b4439bb0f94fdb3f82c122bb94  gcc/testsuite/gcc.dg/Warray-bounds-67.c
  51359502b5a5964989bb9a3452967e27  gcc/testsuite/gcc.dg/Warray-bounds-68.c
--- 50814,50820 ----
  c78bbb71f763798ca7a0fb499b6de460  gcc/testsuite/gcc.dg/Warray-bounds-62.c
  ce896a75014d06ce0ca041baba249515  gcc/testsuite/gcc.dg/Warray-bounds-63.c
  9ea4759a96c75558f69e6cce54c34eb3  gcc/testsuite/gcc.dg/Warray-bounds-64.c
! 17ae889889fffa3c7a4085d3bf13d67b  gcc/testsuite/gcc.dg/Warray-bounds-65.c
  f3fd7533759b1b91a93ea6b7dd8116ad  gcc/testsuite/gcc.dg/Warray-bounds-66.c
  f09603b4439bb0f94fdb3f82c122bb94  gcc/testsuite/gcc.dg/Warray-bounds-67.c
  51359502b5a5964989bb9a3452967e27  gcc/testsuite/gcc.dg/Warray-bounds-68.c
*************** b87b7ebc31064d6e57b0af0b3017afeb  gcc/te
*** 50853,50859 ****
  ab57b7d0ddff618e824f3e137b94be88  gcc/testsuite/gcc.dg/Wattributes-6.c
  fe25f03fdb469ad245f6cae14480ddad  gcc/testsuite/gcc.dg/Wattributes-7.c
  e6837d08b51cbdb5725ec33c460d55bb  gcc/testsuite/gcc.dg/Wattributes-8.c
! 3657d8392090a291a46e662e66ab20ac  gcc/testsuite/gcc.dg/Wbad-function-cast-1.c
  dec2067dc6cb85456e910b911face133  gcc/testsuite/gcc.dg/Wbool-operation-1.c
  fa34af530f0819d48745f85d1a99fb6d  gcc/testsuite/gcc.dg/Wbuiltin-declaration-mismatch-10.c
  1d4e59d5d533ad0cefc0a93ca198f44e  gcc/testsuite/gcc.dg/Wbuiltin-declaration-mismatch-11.c
--- 50874,50880 ----
  ab57b7d0ddff618e824f3e137b94be88  gcc/testsuite/gcc.dg/Wattributes-6.c
  fe25f03fdb469ad245f6cae14480ddad  gcc/testsuite/gcc.dg/Wattributes-7.c
  e6837d08b51cbdb5725ec33c460d55bb  gcc/testsuite/gcc.dg/Wattributes-8.c
! 00ec321f5cde994cf2213ead325e787c  gcc/testsuite/gcc.dg/Wbad-function-cast-1.c
  dec2067dc6cb85456e910b911face133  gcc/testsuite/gcc.dg/Wbool-operation-1.c
  fa34af530f0819d48745f85d1a99fb6d  gcc/testsuite/gcc.dg/Wbuiltin-declaration-mismatch-10.c
  1d4e59d5d533ad0cefc0a93ca198f44e  gcc/testsuite/gcc.dg/Wbuiltin-declaration-mismatch-11.c
*************** cf111ef8df94d8890401a187eda44ecf  gcc/te
*** 54681,54687 ****
  f564c6bf6e627218a15d1dca68379b72  gcc/testsuite/gcc.dg/debug/ctf/ctf-attr-used-1.c
  723beb2229407183028f21d19a7bc698  gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-1.c
  c5df10e225f51993952e25c8ef14a412  gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-2.c
! 6fbff40622fdbf03fa2c40f284cbeaf8  gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-3.c
  471a71b5cad90554ce1db3c0bf02fd0c  gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-4.c
  21583e135f77113c75ff68854820f8ec  gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-5.c
  8257cbdf2381e1ddbfcc341305c187d9  gcc/testsuite/gcc.dg/debug/ctf/ctf-complex-1.c
--- 54702,54708 ----
  f564c6bf6e627218a15d1dca68379b72  gcc/testsuite/gcc.dg/debug/ctf/ctf-attr-used-1.c
  723beb2229407183028f21d19a7bc698  gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-1.c
  c5df10e225f51993952e25c8ef14a412  gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-2.c
! 88e5110b51a24a31386412644e179281  gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-3.c
  471a71b5cad90554ce1db3c0bf02fd0c  gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-4.c
  21583e135f77113c75ff68854820f8ec  gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-5.c
  8257cbdf2381e1ddbfcc341305c187d9  gcc/testsuite/gcc.dg/debug/ctf/ctf-complex-1.c
*************** cbcc356a35e8a8665137c7ae64ec5914  gcc/te
*** 54834,54839 ****
--- 54855,54863 ----
  88466c37a4317f483dad470b7d9a7949  gcc/testsuite/gcc.dg/debug/dwarf2/pr111080.c
  57e3c1af8d86b03c1a81a092be62ec96  gcc/testsuite/gcc.dg/debug/dwarf2/pr114015.c
  6ffd262f8357f0ae6e1068247a329747  gcc/testsuite/gcc.dg/debug/dwarf2/pr125421.c
+ fdc49b9086e5cc10a9a154840a749afd  gcc/testsuite/gcc.dg/debug/dwarf2/pr125935-1.c
+ 2a508ce4d2d595024560192b6dc90fe2  gcc/testsuite/gcc.dg/debug/dwarf2/pr125935-2.c
+ abf2680cbd1431fb13cc37cb0b5bc33b  gcc/testsuite/gcc.dg/debug/dwarf2/pr125935-3.c
  250736f38c859fc89fb993ad3155eb20  gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-1.c
  8f522ee214d1db3d04f240eb20eb4474  gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-2.c
  43696edd12f5c0c32058d1ad1012e1e8  gcc/testsuite/gcc.dg/debug/dwarf2/pr31230.c
*************** d9fdf9f47a3764723441a571868d9cba  gcc/te
*** 56054,56060 ****
  51d79415450b7870aadd4c879fb233d4  gcc/testsuite/gcc.dg/gomp/declare-variant-2.c
  152a743c8e1c85299fd27e5eb3a7af96  gcc/testsuite/gcc.dg/gomp/declare-variant-3.c
  ccce92068aaec4ffe8e3c1817beae292  gcc/testsuite/gcc.dg/gomp/deprecate-1.c
! d72b55aefb31276fa8a6bd1fcdd9c071  gcc/testsuite/gcc.dg/gomp/deprecate-2.c
  40f2ea44239995df51ac3b38a7133338  gcc/testsuite/gcc.dg/gomp/dispatch-1.c
  8d3b27b739488aeb8d5cef6a8ede902f  gcc/testsuite/gcc.dg/gomp/dispatch-2.c
  daf23047f461270ab705201d4069235e  gcc/testsuite/gcc.dg/gomp/dispatch-3.c
--- 56078,56084 ----
  51d79415450b7870aadd4c879fb233d4  gcc/testsuite/gcc.dg/gomp/declare-variant-2.c
  152a743c8e1c85299fd27e5eb3a7af96  gcc/testsuite/gcc.dg/gomp/declare-variant-3.c
  ccce92068aaec4ffe8e3c1817beae292  gcc/testsuite/gcc.dg/gomp/deprecate-1.c
! b4786ef4e092b2ab0690afec671ee472  gcc/testsuite/gcc.dg/gomp/deprecate-2.c
  40f2ea44239995df51ac3b38a7133338  gcc/testsuite/gcc.dg/gomp/dispatch-1.c
  8d3b27b739488aeb8d5cef6a8ede902f  gcc/testsuite/gcc.dg/gomp/dispatch-2.c
  daf23047f461270ab705201d4069235e  gcc/testsuite/gcc.dg/gomp/dispatch-3.c
*************** efa708c21ad7551e498d6b97aa054cb5  gcc/te
*** 58294,58300 ****
  f932a68db380ed55129ab7dc6df6698a  gcc/testsuite/gcc.dg/plugin/poly-int-06_plugin.cc
  751abadab9f4d44286f1ee12966ab705  gcc/testsuite/gcc.dg/plugin/poly-int-07_plugin.cc
  57f33c5cba4ed25369a584b1ff775ed0  gcc/testsuite/gcc.dg/plugin/poly-int-test-1.c
! ecf889c1d7dbb40148c64cf892a125b3  gcc/testsuite/gcc.dg/plugin/poly-int-tests.h
  5d9a802715d28b4b62c9db362346bb3e  gcc/testsuite/gcc.dg/plugin/pr87562-a.h
  d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/gcc.dg/plugin/pr87562-b.h
  560049d478ac5c677c2fab6a819ba70b  gcc/testsuite/gcc.dg/plugin/progress_notifications_plugin.cc
--- 58318,58324 ----
  f932a68db380ed55129ab7dc6df6698a  gcc/testsuite/gcc.dg/plugin/poly-int-06_plugin.cc
  751abadab9f4d44286f1ee12966ab705  gcc/testsuite/gcc.dg/plugin/poly-int-07_plugin.cc
  57f33c5cba4ed25369a584b1ff775ed0  gcc/testsuite/gcc.dg/plugin/poly-int-test-1.c
! dc6451650c8793f73ca962f812b8137c  gcc/testsuite/gcc.dg/plugin/poly-int-tests.h
  5d9a802715d28b4b62c9db362346bb3e  gcc/testsuite/gcc.dg/plugin/pr87562-a.h
  d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/gcc.dg/plugin/pr87562-b.h
  560049d478ac5c677c2fab6a819ba70b  gcc/testsuite/gcc.dg/plugin/progress_notifications_plugin.cc
*************** be9ddb035cc83ea1227c7930f1a36f1b  gcc/te
*** 58438,58443 ****
--- 58462,58469 ----
  9437d2977418eec9749f3a9d06040a59  gcc/testsuite/gcc.dg/pr102140.c
  c26b978b685e1bfcc17c466b966d4919  gcc/testsuite/gcc.dg/pr102141.c
  5cf412326dc16b1707feb9f8a8d1aa05  gcc/testsuite/gcc.dg/pr102152.c
+ 554c46cecadf4553bfa81025a9c21fa0  gcc/testsuite/gcc.dg/pr102202-1.c
+ b9876d5b85d2c1e5c59ed27639781eb6  gcc/testsuite/gcc.dg/pr102202.c
  81b5db555bf4e99998ce86d5d737b15e  gcc/testsuite/gcc.dg/pr102207.c
  afb36cfd0415d59db229d4058c30853f  gcc/testsuite/gcc.dg/pr102224.c
  19014f75a82495dc3a06436ef24a4424  gcc/testsuite/gcc.dg/pr102269.c
*************** bf2535aab811e2223cfd0e68d61e0f3a  gcc/te
*** 58778,58783 ****
--- 58804,58811 ----
  1e774a8867399f8872470a93a3f6f213  gcc/testsuite/gcc.dg/pr112374-1.c
  08ae364b10587d221c0f17fe72ad034b  gcc/testsuite/gcc.dg/pr112374-2.c
  6ecf6d19b418f7c8ee60039498a300a7  gcc/testsuite/gcc.dg/pr112380.c
+ 8e6719f4cb481ca16b40dd55ca27d6ac  gcc/testsuite/gcc.dg/pr112390.c
+ 41a6ec16fb01d8cb34c5d5d09ba4804e  gcc/testsuite/gcc.dg/pr112390_bitint.c
  9c5576df7fa372f8b295b192e4e59c62  gcc/testsuite/gcc.dg/pr112430.c
  27b19c882a226e22e4e605adb16c80f8  gcc/testsuite/gcc.dg/pr112488-1.c
  875b0b66a0ec5a48d476bbaa272ce50b  gcc/testsuite/gcc.dg/pr112488-2.c
*************** f402be89e4891c76c691c8144fe168f7  gcc/te
*** 59061,59066 ****
--- 59089,59096 ----
  02130fab8e808e36f5a9d44f4ed8fccc  gcc/testsuite/gcc.dg/pr124303.c
  5bc3929959db4e7efdda8bc02c4c7e26  gcc/testsuite/gcc.dg/pr124454-1.c
  f733cdb22a88b058648393623d505a3f  gcc/testsuite/gcc.dg/pr124476.c
+ c3ef6cbbb169643be381d5f93db83a88  gcc/testsuite/gcc.dg/pr124545-2.c
+ 36ee7eea41c31945982771e0ffcb01dc  gcc/testsuite/gcc.dg/pr124545.c
  579ed8ebf6c470274c30ac557f9672d2  gcc/testsuite/gcc.dg/pr124576.c
  a0af6600ae1ec0429d2ce13c4ccc8a92  gcc/testsuite/gcc.dg/pr124630.c
  0b8c4e1486bc61b4cdb4efb2e7f08d74  gcc/testsuite/gcc.dg/pr124635.c
*************** ab60b475998ea1ed92a9002d6336bfd6  gcc/te
*** 59087,59093 ****
  cb2af6eb124c1d269b7aedc04681b314  gcc/testsuite/gcc.dg/pr125706.c
  02b3b3267e793ecee19ba15f99518c3d  gcc/testsuite/gcc.dg/pr125707-1.c
  5ab2cc7a06b876199ce2f02e0dd9b79b  gcc/testsuite/gcc.dg/pr125707.c
! 7113f605d92516b4ce0d7a828fecc304  gcc/testsuite/gcc.dg/pr125737.c
  8e990bb878c93bf33f60e5d7ebfcf826  gcc/testsuite/gcc.dg/pr125749.c
  780a210a91e38b3b391cc7a869bbcfc8  gcc/testsuite/gcc.dg/pr125756.c
  729e9d2c572b5740d1cb9d00d90885e9  gcc/testsuite/gcc.dg/pr125790-1.c
--- 59117,59124 ----
  cb2af6eb124c1d269b7aedc04681b314  gcc/testsuite/gcc.dg/pr125706.c
  02b3b3267e793ecee19ba15f99518c3d  gcc/testsuite/gcc.dg/pr125707-1.c
  5ab2cc7a06b876199ce2f02e0dd9b79b  gcc/testsuite/gcc.dg/pr125707.c
! f774e49194db2a0fbdafbddfc0c79487  gcc/testsuite/gcc.dg/pr125737-1.c
! 3adc221d0f1677213f1661f06776191c  gcc/testsuite/gcc.dg/pr125737-2.c
  8e990bb878c93bf33f60e5d7ebfcf826  gcc/testsuite/gcc.dg/pr125749.c
  780a210a91e38b3b391cc7a869bbcfc8  gcc/testsuite/gcc.dg/pr125756.c
  729e9d2c572b5740d1cb9d00d90885e9  gcc/testsuite/gcc.dg/pr125790-1.c
*************** ea3f6e969ab9dbd27c6e364f6cd1e41c  gcc/te
*** 60957,60963 ****
  5efa39dda2a7362c4a77e20cff834bae  gcc/testsuite/gcc.dg/pr94589-2.c
  27b4c51b7060236f318a98e7dfe635d6  gcc/testsuite/gcc.dg/pr94589-3.c
  ff1ea6723ba5f97b174e3719ef7092da  gcc/testsuite/gcc.dg/pr94589-4.c
! 7735aed032e40772cf70078c92544254  gcc/testsuite/gcc.dg/pr94589-5.c
  3f415487cf7489c02d6cb504e8979a05  gcc/testsuite/gcc.dg/pr94589-6.c
  9d934bfa6d016390e51f5246cf15a083  gcc/testsuite/gcc.dg/pr94600-1.c
  515ded7ae44445fdd45ad77c875a9139  gcc/testsuite/gcc.dg/pr94600-2.c
--- 60988,60995 ----
  5efa39dda2a7362c4a77e20cff834bae  gcc/testsuite/gcc.dg/pr94589-2.c
  27b4c51b7060236f318a98e7dfe635d6  gcc/testsuite/gcc.dg/pr94589-3.c
  ff1ea6723ba5f97b174e3719ef7092da  gcc/testsuite/gcc.dg/pr94589-4.c
! fa5cf07cf365e21805e497d9a47749bf  gcc/testsuite/gcc.dg/pr94589-5.c
! fceddc68e3f17ef4047b6e5964d03903  gcc/testsuite/gcc.dg/pr94589-5a.c
  3f415487cf7489c02d6cb504e8979a05  gcc/testsuite/gcc.dg/pr94589-6.c
  9d934bfa6d016390e51f5246cf15a083  gcc/testsuite/gcc.dg/pr94600-1.c
  515ded7ae44445fdd45ad77c875a9139  gcc/testsuite/gcc.dg/pr94600-2.c
*************** b569af91dd7275609d58f4469ba9e826  gcc/te
*** 62964,62969 ****
--- 62996,63002 ----
  c2d3ac4b0fce6da2e8aaeaf741803572  gcc/testsuite/gcc.dg/torture/pr124891.c
  fbe779467ae6f7cb7ee578922f1e8686  gcc/testsuite/gcc.dg/torture/pr125025.c
  2d0aa1742d8149a82fb6a3451c107e96  gcc/testsuite/gcc.dg/torture/pr125036-1.c
+ bc2955b0a92e5a341dd24f923e74809b  gcc/testsuite/gcc.dg/torture/pr125040.c
  a1f1d77d95276c64aa2096201f84fddf  gcc/testsuite/gcc.dg/torture/pr125080.c
  316cb36b881954d46a4c1708e1815538  gcc/testsuite/gcc.dg/torture/pr125124.c
  0b98b7e8b8fbe85216b8a10d8b6f2f06  gcc/testsuite/gcc.dg/torture/pr125139-1.c
*************** f56a66971ef2360d1150ae851eb9f24c  gcc/te
*** 62992,62997 ****
--- 63025,63031 ----
  63c0b8bffdfe448123d4936d22c33576  gcc/testsuite/gcc.dg/torture/pr125875.c
  33bce38bed8b70a3409f3aecbf20655f  gcc/testsuite/gcc.dg/torture/pr125923-1.c
  d37f980a2ba8a3f7fef2d2c9a4f2a81d  gcc/testsuite/gcc.dg/torture/pr125953.c
+ 14be17fc44652a0c0f9e613a6f758c8a  gcc/testsuite/gcc.dg/torture/pr126008.c
  ded4330fd1cd52783bd9b1761db038ef  gcc/testsuite/gcc.dg/torture/pr16104-1.c
  fc265ee05da2f29f0e92804661cd1f28  gcc/testsuite/gcc.dg/torture/pr17526.c
  01c583edb41b632b835aa892b9c1cb14  gcc/testsuite/gcc.dg/torture/pr17933-1.c
*************** f4c56a02709c699f81b07b81dd1a2c1e  gcc/te
*** 65446,65451 ****
--- 65480,65486 ----
  73226ac793de9237622d64ee6a7399cc  gcc/testsuite/gcc.dg/tree-ssa/pr122478.c
  fa7603643fb0875e44fb78188614e8a3  gcc/testsuite/gcc.dg/tree-ssa/pr122569-1.c
  06ddaf8bcdd0df63a4b72257bff42ef0  gcc/testsuite/gcc.dg/tree-ssa/pr122569-2.c
+ 592ff8296452a90640cda6fbbbecff26  gcc/testsuite/gcc.dg/tree-ssa/pr122569-3.c
  de81b2d2951773077a5d5e6d9db8a8e4  gcc/testsuite/gcc.dg/tree-ssa/pr122588-1.c
  63935006310fe21a6b06fca6cc5d6a98  gcc/testsuite/gcc.dg/tree-ssa/pr122629-1.c
  71eb14b3ae5faf81c5226dc766d48edd  gcc/testsuite/gcc.dg/tree-ssa/pr122976.c
*************** b656d217b1ddc88a7c1749790cc1eeba  gcc/te
*** 70066,70072 ****
  69d9b561b303bd96e74ea417f73e1ac5  gcc/testsuite/gcc.misc-tests/outputs-0.c
  773736389c2fb248099dd6dcee0ddb6b  gcc/testsuite/gcc.misc-tests/outputs-1.c
  4bffb1320eb13262d3eb5336a6683a84  gcc/testsuite/gcc.misc-tests/outputs-2.c
! 2367f917a0adbf66d94ba462e2939614  gcc/testsuite/gcc.misc-tests/outputs.exp
  259f70f46fd162868e7799c510dad04b  gcc/testsuite/gcc.misc-tests/pr111527.exp
  37d75aade49dd3329803e520456ae8a6  gcc/testsuite/gcc.misc-tests/sieve.c
  8b124ef23e45ad61bc2c14ba0e1096cc  gcc/testsuite/gcc.misc-tests/sieve.exp
--- 70101,70107 ----
  69d9b561b303bd96e74ea417f73e1ac5  gcc/testsuite/gcc.misc-tests/outputs-0.c
  773736389c2fb248099dd6dcee0ddb6b  gcc/testsuite/gcc.misc-tests/outputs-1.c
  4bffb1320eb13262d3eb5336a6683a84  gcc/testsuite/gcc.misc-tests/outputs-2.c
! 35df536be4daeb23a3ce3664857e3254  gcc/testsuite/gcc.misc-tests/outputs.exp
  259f70f46fd162868e7799c510dad04b  gcc/testsuite/gcc.misc-tests/pr111527.exp
  37d75aade49dd3329803e520456ae8a6  gcc/testsuite/gcc.misc-tests/sieve.c
  8b124ef23e45ad61bc2c14ba0e1096cc  gcc/testsuite/gcc.misc-tests/sieve.exp
*************** ae513bfb2896c38de994944b104fb7c8  gcc/te
*** 70267,70272 ****
--- 70302,70311 ----
  8f88bd456c760f16b7890a5d7c737492  gcc/testsuite/gcc.target/aarch64/acle/acle.exp
  cb3e8020430a2ad0a4a6603145f25950  gcc/testsuite/gcc.target/aarch64/acle/acle_fma.c
  a398a8cde23b80acd1694d02782f847d  gcc/testsuite/gcc.target/aarch64/acle/acle_sqrt.c
+ d537080dd8f691e6e981bde76c722ff4  gcc/testsuite/gcc.target/aarch64/acle/arm_sc_memchr.c
+ 6e15fee41151d087def091ff531167f3  gcc/testsuite/gcc.target/aarch64/acle/arm_sc_memcpy.c
+ a55771635d4d4e4052f40c0388604a66  gcc/testsuite/gcc.target/aarch64/acle/arm_sc_memmove.c
+ 536a38971690f590c5e39a4d0142fbbb  gcc/testsuite/gcc.target/aarch64/acle/arm_sc_memset.c
  a545b8f7fc60af12576f85397e1733cb  gcc/testsuite/gcc.target/aarch64/acle/armv8-r.c
  0bf250a6d37e5d42c73dac559da5ddce  gcc/testsuite/gcc.target/aarch64/acle/asm-inlined-sysreg-1.c
  25e08e40b9eef0597ddff96b9c752f1c  gcc/testsuite/gcc.target/aarch64/acle/asm-inlined-sysreg-2.c
*************** caf80fb3defd2872fa7d7dc3fa721878  gcc/te
*** 70367,70377 ****
  55ff9765cb94d7817c4c42421ab1deaa  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/README
  1b1d3935c9f2236e15404050005df779  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/advsimd-intrinsics.exp
  a89f5f18bfa6806c0515d09cdf2c151e  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/arm-neon-ref.h
! 0ffc458eaea796bb44028da88859ebc4  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_dup.c
  13fdac8c1ccc57731f09af48efde5d69  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_get-be.c
  91e542409f80a82d911b9bf4df782435  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_get.c
  ebd46f74a2c7a6abc8e49dc80272e3d1  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_reinterpret.c
! d4ef0512d140a7e30154fc8ff31d8334  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_vect_copy_lane_1.c
  c4567c23b44351a0b99fbcb9fb0d9d49  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_vldN_lane_1.c
  ceb2766a27eeeb5d6674fb8cba3e85d1  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_vldN_lane_2.c
  749c0ab50a2fd6d1e95369ac1890546d  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_vldn.c
--- 70406,70416 ----
  55ff9765cb94d7817c4c42421ab1deaa  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/README
  1b1d3935c9f2236e15404050005df779  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/advsimd-intrinsics.exp
  a89f5f18bfa6806c0515d09cdf2c151e  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/arm-neon-ref.h
! 95ce04f3d0cbfd5b39baad4767b818dc  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_dup.c
  13fdac8c1ccc57731f09af48efde5d69  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_get-be.c
  91e542409f80a82d911b9bf4df782435  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_get.c
  ebd46f74a2c7a6abc8e49dc80272e3d1  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_reinterpret.c
! 2de9c7e36972e1ee0cb6e10f055ec562  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_vect_copy_lane_1.c
  c4567c23b44351a0b99fbcb9fb0d9d49  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_vldN_lane_1.c
  ceb2766a27eeeb5d6674fb8cba3e85d1  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_vldN_lane_2.c
  749c0ab50a2fd6d1e95369ac1890546d  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_vldn.c
*************** adafad2cd221edb3fb3e0a7b52bc165c  gcc/te
*** 70464,70477 ****
  d54fffef4035aec24f0845fd1b80faa1  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vclz.c
  441c03ab2d4d17821e738deab650d8ee  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcnt.c
  e47e2f34dfaf286e766b12c74044f2b8  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcombine.c
! 81331fce93f079a2fbd6cdcbf89cd190  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_bf16_indices_1.c
! 121b63445e78ec0f9fef9c8fedbdb07d  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_bf16_indices_2.c
! c75c1797ee8c69e473e2c385bcf58d51  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_laneq_bf16_indices_1.c
! ff1194f1254c1e1d98c0cc8799b1877a  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_laneq_bf16_indices_2.c
! 165be20ba1801a5a843dd243728255d2  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopyq_lane_bf16_indices_1.c
! beb48a7d480beb85f0644694463f1739  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopyq_lane_bf16_indices_2.c
! ee59f0928396a69f17c02f71411fb9fd  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopyq_laneq_bf16_indices_1.c
! 2c304d219eb921385b226add94b3f09e  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopyq_laneq_bf16_indices_2.c
  71b3d6a7c07889cb589339c39d6478e3  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcreate.c
  02605c3ddba5557ff20275a979b9a402  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvt.c
  7239a07f803b77f6138600000612801b  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtX.inc
--- 70503,70509 ----
  d54fffef4035aec24f0845fd1b80faa1  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vclz.c
  441c03ab2d4d17821e738deab650d8ee  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcnt.c
  e47e2f34dfaf286e766b12c74044f2b8  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcombine.c
! 6a67021ba2af3142fbe475866c33c7e5  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_indices.c
  71b3d6a7c07889cb589339c39d6478e3  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcreate.c
  02605c3ddba5557ff20275a979b9a402  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvt.c
  7239a07f803b77f6138600000612801b  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcvtX.inc
*************** a897ae01d807185bd4ca7f1587e181d9  gcc/te
*** 71517,71523 ****
  7ac3aba210a75b796dd4d6293416a4a0  gcc/testsuite/gcc.target/aarch64/int_mov_immediate_1.c
  2feabf7a23a544e445cd6f1d402811d0  gcc/testsuite/gcc.target/aarch64/lane-bound-1.c
  49907aab7182a2a85495455c2d574117  gcc/testsuite/gcc.target/aarch64/lane-bound-2.c
! a2e2c14972d8ad4675b55c041ef37bd5  gcc/testsuite/gcc.target/aarch64/lane-bound-3.c
  81256a6fac965eea861536637ff35013  gcc/testsuite/gcc.target/aarch64/large_struct_copy.c
  508532c90ef5da7602402b5f0076c554  gcc/testsuite/gcc.target/aarch64/large_struct_copy_2.c
  62c012b4c7538ce969e5111f5f65ea32  gcc/testsuite/gcc.target/aarch64/ldapr-sext.c
--- 71549,71555 ----
  7ac3aba210a75b796dd4d6293416a4a0  gcc/testsuite/gcc.target/aarch64/int_mov_immediate_1.c
  2feabf7a23a544e445cd6f1d402811d0  gcc/testsuite/gcc.target/aarch64/lane-bound-1.c
  49907aab7182a2a85495455c2d574117  gcc/testsuite/gcc.target/aarch64/lane-bound-2.c
! 602db1530188d8d7dee5407a14afa517  gcc/testsuite/gcc.target/aarch64/lane-bound-3.c
  81256a6fac965eea861536637ff35013  gcc/testsuite/gcc.target/aarch64/large_struct_copy.c
  508532c90ef5da7602402b5f0076c554  gcc/testsuite/gcc.target/aarch64/large_struct_copy_2.c
  62c012b4c7538ce969e5111f5f65ea32  gcc/testsuite/gcc.target/aarch64/ldapr-sext.c
*************** c62a8a637de4eb00aef16c6f2aa34f7e  gcc/te
*** 71783,71788 ****
--- 71815,71854 ----
  5f2098a5ce1008a688e14bfab709ad09  gcc/testsuite/gcc.target/aarch64/neg_bf_1.c
  ab1aff01d0978c45cdf9c392a1f88408  gcc/testsuite/gcc.target/aarch64/neg_bf_2.c
  c8c679e672173f52fbc0d86757b5c05a  gcc/testsuite/gcc.target/aarch64/negs.c
+ 4f997a013b451645ee8fae7b80bb1c68  gcc/testsuite/gcc.target/aarch64/neon/aarch64-neon.exp
+ 382819e66c2ba8dc0caaedc391ba26b0  gcc/testsuite/gcc.target/aarch64/neon/arm_neon_test.h
+ aa14d8315d14629ead816b6d44e8b2b2  gcc/testsuite/gcc.target/aarch64/neon/vadd.c
+ ead21cdd1f6c7e08a697d831b6fb46d4  gcc/testsuite/gcc.target/aarch64/neon/vand.c
+ a3409a785aaf8a0fe2e839fc18adfa9b  gcc/testsuite/gcc.target/aarch64/neon/vbcax.c
+ 4e84fb14b57cd79da4e31fff4767a3ee  gcc/testsuite/gcc.target/aarch64/neon/vbic.c
+ cfb98d43adbf2f6a07422d726c2865a6  gcc/testsuite/gcc.target/aarch64/neon/vbsl.c
+ 8fdacf0805af57ebca092dd0c09214c3  gcc/testsuite/gcc.target/aarch64/neon/vcls.c
+ be495cb88cd88520998aa1526c7ecf32  gcc/testsuite/gcc.target/aarch64/neon/vclz.c
+ 760c24424455782305fa760a785cf05c  gcc/testsuite/gcc.target/aarch64/neon/vcnt.c
+ 46e5edb315d1427df750cef24620820d  gcc/testsuite/gcc.target/aarch64/neon/vcombine.c
+ fcf7348205a063f24add8756b430f3cf  gcc/testsuite/gcc.target/aarch64/neon/vcopy_lane.c
+ 8e77ea9cc7b64089b5d579b15046b718  gcc/testsuite/gcc.target/aarch64/neon/vcreate.c
+ 34dec28499daab37dcc3235a9c30e18a  gcc/testsuite/gcc.target/aarch64/neon/vdup.c
+ 65f91e1784083ef9f04e29172f3ce8fe  gcc/testsuite/gcc.target/aarch64/neon/vdup_lane.c
+ 0ccf81d396fb5e7484cd17a2a0d2f1c0  gcc/testsuite/gcc.target/aarch64/neon/veor.c
+ 283b76aae60ba07105afe4ecb107fb77  gcc/testsuite/gcc.target/aarch64/neon/veor3.c
+ 2bbf50124d841671af3eba996cc72265  gcc/testsuite/gcc.target/aarch64/neon/vext.c
+ 6a20aaea81e321bb6dc50154ce0ff24c  gcc/testsuite/gcc.target/aarch64/neon/vget_high.c
+ d75a14b592550fd1a685000e5508333e  gcc/testsuite/gcc.target/aarch64/neon/vget_lane.c
+ 69f40914236266ed1c6d361d6bca9a86  gcc/testsuite/gcc.target/aarch64/neon/vget_low.c
+ 909589f4e908fda86cfe8e63d2939016  gcc/testsuite/gcc.target/aarch64/neon/vmov_n.c
+ 69364932dc142f9533cb1dc8a79deef8  gcc/testsuite/gcc.target/aarch64/neon/vmvn.c
+ 96124541b4189d822001c94bf1562f26  gcc/testsuite/gcc.target/aarch64/neon/vorn.c
+ de12ae165ec786e9bc2515a75313e0ba  gcc/testsuite/gcc.target/aarch64/neon/vorr.c
+ 896f212c7c9a97345b78c9f32fa49f63  gcc/testsuite/gcc.target/aarch64/neon/vrax1.c
+ 9d656d97c44b06cd1307c18ee737eacc  gcc/testsuite/gcc.target/aarch64/neon/vrbit.c
+ 5399e401e67f77c451ea3a0a8389c6e5  gcc/testsuite/gcc.target/aarch64/neon/vreinterpret.c
+ 6f303695cf1249f122752b866c0bb410  gcc/testsuite/gcc.target/aarch64/neon/vrev.c
+ 432df3c6f4d5619a14955c07b3d6ce6a  gcc/testsuite/gcc.target/aarch64/neon/vset_lane.c
+ 9ab5206dc8bd90eea431137c418fc4e0  gcc/testsuite/gcc.target/aarch64/neon/vtrn.c
+ a2b6c432ef848e76d64cc78dcabb1e4f  gcc/testsuite/gcc.target/aarch64/neon/vuzp.c
+ e63a293c243f13e6ed200cc379f8c8b9  gcc/testsuite/gcc.target/aarch64/neon/vxar.c
+ ca584224172d7f308e1c9b57b36899ff  gcc/testsuite/gcc.target/aarch64/neon/vzip.c
  c73625ed2ccdb03a534164bcd8dc3145  gcc/testsuite/gcc.target/aarch64/neoverse_v1_1.c
  e0a1d6977840dab3483c837b58dbc9b9  gcc/testsuite/gcc.target/aarch64/neoverse_v1_2.c
  fdc40473e082836e4f8d1c485846b2f1  gcc/testsuite/gcc.target/aarch64/neoverse_v1_3.c
*************** e5f446ee7a8bf59f8a69767e708fbfb0  gcc/te
*** 71896,71902 ****
  27e2c5c9a0bcdfebf2133e263738b146  gcc/testsuite/gcc.target/aarch64/pr100028.c
  54fb26388022e156768595e3d8b46954  gcc/testsuite/gcc.target/aarch64/pr100056.c
  c3d44b74cbd361a863813180478ad6c8  gcc/testsuite/gcc.target/aarch64/pr100075.c
! 3557e732429595ae2db1f7874b2453ca  gcc/testsuite/gcc.target/aarch64/pr100518.c
  90ff787e2854382a010cb41d41d74b65  gcc/testsuite/gcc.target/aarch64/pr102008.c
  2b4e17d3d8fabfd5192210873467463b  gcc/testsuite/gcc.target/aarch64/pr102376.c
  8f357d4ccc6a0a50914dfbcfa3ad7dec  gcc/testsuite/gcc.target/aarch64/pr103085.c
--- 71962,71968 ----
  27e2c5c9a0bcdfebf2133e263738b146  gcc/testsuite/gcc.target/aarch64/pr100028.c
  54fb26388022e156768595e3d8b46954  gcc/testsuite/gcc.target/aarch64/pr100056.c
  c3d44b74cbd361a863813180478ad6c8  gcc/testsuite/gcc.target/aarch64/pr100075.c
! dc5aa999bf97074d46aa9453b2975d88  gcc/testsuite/gcc.target/aarch64/pr100518.c
  90ff787e2854382a010cb41d41d74b65  gcc/testsuite/gcc.target/aarch64/pr102008.c
  2b4e17d3d8fabfd5192210873467463b  gcc/testsuite/gcc.target/aarch64/pr102376.c
  8f357d4ccc6a0a50914dfbcfa3ad7dec  gcc/testsuite/gcc.target/aarch64/pr103085.c
*************** b4780965b308ea64a30faae3dd03ff0b  gcc/te
*** 71907,71913 ****
  331a1f2804cb2d624b662808784a18cf  gcc/testsuite/gcc.target/aarch64/pr103147-3.c
  1863cdd074e5a1878fd0fa3625c0bec4  gcc/testsuite/gcc.target/aarch64/pr103147-4.c
  ab51972a329f04042b40b8df694203cc  gcc/testsuite/gcc.target/aarch64/pr103147-5.c
! e41794101e1163933e295ca13a5ea408  gcc/testsuite/gcc.target/aarch64/pr103147-6.c
  02bff38b96b8706f58c3b373fea990f2  gcc/testsuite/gcc.target/aarch64/pr103147-7.c
  8931dca56e54462bd94ce184b0a14e21  gcc/testsuite/gcc.target/aarch64/pr103147-8.c
  18f8443138a6fbfd030458bc4aee321e  gcc/testsuite/gcc.target/aarch64/pr103147-9.c
--- 71973,71979 ----
  331a1f2804cb2d624b662808784a18cf  gcc/testsuite/gcc.target/aarch64/pr103147-3.c
  1863cdd074e5a1878fd0fa3625c0bec4  gcc/testsuite/gcc.target/aarch64/pr103147-4.c
  ab51972a329f04042b40b8df694203cc  gcc/testsuite/gcc.target/aarch64/pr103147-5.c
! 84735dceb8abdd7bf29c2b22df870d00  gcc/testsuite/gcc.target/aarch64/pr103147-6.c
  02bff38b96b8706f58c3b373fea990f2  gcc/testsuite/gcc.target/aarch64/pr103147-7.c
  8931dca56e54462bd94ce184b0a14e21  gcc/testsuite/gcc.target/aarch64/pr103147-8.c
  18f8443138a6fbfd030458bc4aee321e  gcc/testsuite/gcc.target/aarch64/pr103147-9.c
*************** e64015aa3333e77e13b230e2bc2580b0  gcc/te
*** 71968,71974 ****
  fe21fc167a8d34db237e8348c2a1fc85  gcc/testsuite/gcc.target/aarch64/pr113485.c
  f12479eade051fc653baa3b9e92457a8  gcc/testsuite/gcc.target/aarch64/pr113550.c
  5c93b32021bd32ca40c9fb5ec6a30f04  gcc/testsuite/gcc.target/aarch64/pr113552.c
! a3303d7dc6b509471d4e18418c9de113  gcc/testsuite/gcc.target/aarch64/pr113573.c
  5e8481e02f3cfad1b565c1fcf18a51b0  gcc/testsuite/gcc.target/aarch64/pr113613.c
  c3b3090c8cc6b28f90027aceb08f6ad7  gcc/testsuite/gcc.target/aarch64/pr113618.c
  78cb6c933e394e5b18e7d7fe34b8c790  gcc/testsuite/gcc.target/aarch64/pr113856.c
--- 72034,72040 ----
  fe21fc167a8d34db237e8348c2a1fc85  gcc/testsuite/gcc.target/aarch64/pr113485.c
  f12479eade051fc653baa3b9e92457a8  gcc/testsuite/gcc.target/aarch64/pr113550.c
  5c93b32021bd32ca40c9fb5ec6a30f04  gcc/testsuite/gcc.target/aarch64/pr113552.c
! 74e5808fbe3fbc149dcb03762725f512  gcc/testsuite/gcc.target/aarch64/pr113573.c
  5e8481e02f3cfad1b565c1fcf18a51b0  gcc/testsuite/gcc.target/aarch64/pr113613.c
  c3b3090c8cc6b28f90027aceb08f6ad7  gcc/testsuite/gcc.target/aarch64/pr113618.c
  78cb6c933e394e5b18e7d7fe34b8c790  gcc/testsuite/gcc.target/aarch64/pr113856.c
*************** c6eebf3e7952e61593d0c0e9db4a9363  gcc/te
*** 72134,72139 ****
--- 72200,72206 ----
  c000a74456afb8c466b7135446f4d58c  gcc/testsuite/gcc.target/aarch64/pr96757.c
  ba88fb91de44ac3dfbdb5d3f10f230a5  gcc/testsuite/gcc.target/aarch64/pr96968.c
  324c376896d6eaefbd8999f38e59c317  gcc/testsuite/gcc.target/aarch64/pr97150.c
+ 7022a36be1b5e48e16520f8aa232700b  gcc/testsuite/gcc.target/aarch64/pr97344.c
  bf82071ea86307b407ab979b320a2a98  gcc/testsuite/gcc.target/aarch64/pr97535.c
  c5ac198fcc683ea88b36ff21fc73e2c5  gcc/testsuite/gcc.target/aarch64/pr97638.c
  fd312dc569ccf5ce510dd16b64f1203b  gcc/testsuite/gcc.target/aarch64/pr97701.c
*************** da19e78ba6b795bf6d056fba82d425f7  gcc/te
*** 72160,72166 ****
  e8cef49c693fcaea364b5c6a5f1b0ba5  gcc/testsuite/gcc.target/aarch64/preserve_none_2.c
  6666e04f1fc6734c26f86b5bcfb57eaa  gcc/testsuite/gcc.target/aarch64/preserve_none_3.c
  81531e915fe63718751a4ae5e0976253  gcc/testsuite/gcc.target/aarch64/preserve_none_4.c
! ca87a92f658f31bd2868ad52e53005a1  gcc/testsuite/gcc.target/aarch64/preserve_none_5.c
  5fba9467f68256235ee9fec318000547  gcc/testsuite/gcc.target/aarch64/preserve_none_6.c
  ed3b3e076aa90a5fdffe91d0217a74e8  gcc/testsuite/gcc.target/aarch64/preserve_none_mingw_1.c
  d0bcbc3d9ff4ecc6817a33d0d9f3aed3  gcc/testsuite/gcc.target/aarch64/prfm_imm_offset_1.c
--- 72227,72233 ----
  e8cef49c693fcaea364b5c6a5f1b0ba5  gcc/testsuite/gcc.target/aarch64/preserve_none_2.c
  6666e04f1fc6734c26f86b5bcfb57eaa  gcc/testsuite/gcc.target/aarch64/preserve_none_3.c
  81531e915fe63718751a4ae5e0976253  gcc/testsuite/gcc.target/aarch64/preserve_none_4.c
! 45183bc8ed733aa615a30405d9e0a954  gcc/testsuite/gcc.target/aarch64/preserve_none_5.c
  5fba9467f68256235ee9fec318000547  gcc/testsuite/gcc.target/aarch64/preserve_none_6.c
  ed3b3e076aa90a5fdffe91d0217a74e8  gcc/testsuite/gcc.target/aarch64/preserve_none_mingw_1.c
  d0bcbc3d9ff4ecc6817a33d0d9f3aed3  gcc/testsuite/gcc.target/aarch64/prfm_imm_offset_1.c
*************** e1cf0d479bffab78f82341c69892e846  gcc/te
*** 72197,72202 ****
--- 72264,72270 ----
  65151001c6105e235d6d8525235d8b28  gcc/testsuite/gcc.target/aarch64/saturating_arithmetic_3.c
  5e10eb2aee000f456a453bbeb17aba62  gcc/testsuite/gcc.target/aarch64/saturating_arithmetic_4.c
  dff5614a018a2765dcb90ecb31013713  gcc/testsuite/gcc.target/aarch64/sbc.c
+ 67c9d23c350253f4ac112665873a8cbc  gcc/testsuite/gcc.target/aarch64/sbfiz-widen-mult-1.c
  3b9354b9a15c8705b143711e5a0eb3cd  gcc/testsuite/gcc.target/aarch64/scalar-mov.c
  b2b9b4bede373ccce7eb9870526caf86  gcc/testsuite/gcc.target/aarch64/scalar-vca.c
  49520376acef3c7fb07d0bdd6ead705b  gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c
*************** e21253a0b461c19afa3bd87ea01f5460  gcc/te
*** 72310,72316 ****
  231fbc62550eac68af09fe0296ecc2b7  gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_3.c
  597879377be3eeffce3944b61e8c8aec  gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_4.c
  cddb2940de62ee127a5f70eb1ee8525d  gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_5.c
! 2e0c31554895b90848474b60de0e3b87  gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_6.c
  504f31916b3f274eea930e1fc7da2e3c  gcc/testsuite/gcc.target/aarch64/simd/int_comparisons.x
  22d82645ad53737e5bfbe2ba9b98cc05  gcc/testsuite/gcc.target/aarch64/simd/int_comparisons_1.c
  f1c9e2aa3c435c9efdc1ea83da4e1eeb  gcc/testsuite/gcc.target/aarch64/simd/int_comparisons_2.c
--- 72378,72384 ----
  231fbc62550eac68af09fe0296ecc2b7  gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_3.c
  597879377be3eeffce3944b61e8c8aec  gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_4.c
  cddb2940de62ee127a5f70eb1ee8525d  gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_5.c
! b880552d13a78ecec9ddee45cfb60d15  gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_6.c
  504f31916b3f274eea930e1fc7da2e3c  gcc/testsuite/gcc.target/aarch64/simd/int_comparisons.x
  22d82645ad53737e5bfbe2ba9b98cc05  gcc/testsuite/gcc.target/aarch64/simd/int_comparisons_1.c
  f1c9e2aa3c435c9efdc1ea83da4e1eeb  gcc/testsuite/gcc.target/aarch64/simd/int_comparisons_2.c
*************** df08a7f1b91a8c0f914aab7f291c95e7  gcc/te
*** 72320,72326 ****
  060c37e72d9cafd6e03a9988b7a1d094  gcc/testsuite/gcc.target/aarch64/simd/lut-no-flag.c
  670855cbe72625722e02671619b6566b  gcc/testsuite/gcc.target/aarch64/simd/lut.c
  76fcad7f8e2bf57697f9f2f28439604a  gcc/testsuite/gcc.target/aarch64/simd/mf8_data_1.c
! 7a8dbe7357968ea67da61dae6606ebcd  gcc/testsuite/gcc.target/aarch64/simd/mf8_data_2.c
  77bcecb95fea0e774f3b59d6735b0334  gcc/testsuite/gcc.target/aarch64/simd/pr117048.c
  2797bd4410da16b66ebb2f474c595ee5  gcc/testsuite/gcc.target/aarch64/simd/pr117048_2.c
  67e9f00dffaa6f894241ef054cf29a1e  gcc/testsuite/gcc.target/aarch64/simd/pr121749.c
--- 72388,72394 ----
  060c37e72d9cafd6e03a9988b7a1d094  gcc/testsuite/gcc.target/aarch64/simd/lut-no-flag.c
  670855cbe72625722e02671619b6566b  gcc/testsuite/gcc.target/aarch64/simd/lut.c
  76fcad7f8e2bf57697f9f2f28439604a  gcc/testsuite/gcc.target/aarch64/simd/mf8_data_1.c
! 4e98c4f97b3d4106b3e4ddbd68a509fb  gcc/testsuite/gcc.target/aarch64/simd/mf8_data_2.c
  77bcecb95fea0e774f3b59d6735b0334  gcc/testsuite/gcc.target/aarch64/simd/pr117048.c
  2797bd4410da16b66ebb2f474c595ee5  gcc/testsuite/gcc.target/aarch64/simd/pr117048_2.c
  67e9f00dffaa6f894241ef054cf29a1e  gcc/testsuite/gcc.target/aarch64/simd/pr121749.c
*************** f1058ca0ffd7ecccb3ce52553d6f5e39  gcc/te
*** 72384,72413 ****
  316465198cc13e56db13f95b521d5d2d  gcc/testsuite/gcc.target/aarch64/simd/vect_su_add_sub.c
  193aaed5c334d9ba2fa37ff1394c985a  gcc/testsuite/gcc.target/aarch64/simd/vfma_f64.c
  e8a7b42845aa1c5b25930c4fb0a6a0ee  gcc/testsuite/gcc.target/aarch64/simd/vfms_f64.c
! 53a5c0ff886cf0f1a64184445c0bdee0  gcc/testsuite/gcc.target/aarch64/simd/vget_lane_f32_indices_1.c
! aaf893d92f0ba49c50ddcb67df509b29  gcc/testsuite/gcc.target/aarch64/simd/vget_lane_f64_indices_1.c
! bed52a3410b4938c4b91db5bb847ecd1  gcc/testsuite/gcc.target/aarch64/simd/vget_lane_p16_indices_1.c
! 5726f4052200760209930d0e53e4e996  gcc/testsuite/gcc.target/aarch64/simd/vget_lane_p8_indices_1.c
! c1cc02a8f97ca7d777f25f8b42a5615f  gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s16_indices_1.c
! 8442edeebc195da2540ebdbaba0912f4  gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s32_indices_1.c
! c492a64f19f8f8cd9e444f5fc8725560  gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s64_indices_1.c
! bf8dd8a8cfe616a14fe8051447dd0cb3  gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s8_indices_1.c
! 60d3bb55a2c2ca030be38e4aba8483dd  gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u16_indices_1.c
! 30ee7f807b8d1a541019a962701f7e81  gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u32_indices_1.c
! 72ead37475d35c634e57aa8f5033b015  gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u64_indices_1.c
! 5356270ade3570303f4fc7b81a6c657d  gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u8_indices_1.c
! 04a4fcdec57341445287758c6aee91a5  gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_f32_indices_1.c
! 7c282e0bdecb2c3c58a6d5c84b2c30b0  gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_f64_indices_1.c
! c7230ddd135d863d7bea122d56ba3436  gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_p16_indices_1.c
! 1af333afe8cf18e647505afd60441caa  gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_p8_indices_1.c
! fd28c63e2ee7517f66c49f6fa5cfc8c4  gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s16_indices_1.c
! 57105317901044270230a83a39ac2f28  gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s32_indices_1.c
! 658dbda7047bc990b22dd17ddeee02e6  gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s64_indices_1.c
! 64c651b28d1026575725e98cff40413a  gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s8_indices_1.c
! d694c3804921a8382e639f7dec1f9c1b  gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u16_indices_1.c
! a675084fb22386c9d27ff4bd900947af  gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u32_indices_1.c
! 83cf956b7cb17956c744f7db38fe3416  gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u64_indices_1.c
! 099bad0585432f164e86079dbf03595e  gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u8_indices_1.c
  56bbb856fadf79f0bc012a4a94a27593  gcc/testsuite/gcc.target/aarch64/simd/vldrq_p128_1.c
  402f69c526859444eac69ec5d29715ab  gcc/testsuite/gcc.target/aarch64/simd/vminmaxnm_1.c
  e101fae335b7ee05e94f44945ad9e568  gcc/testsuite/gcc.target/aarch64/simd/vmla_elem_1.c
--- 72452,72458 ----
  316465198cc13e56db13f95b521d5d2d  gcc/testsuite/gcc.target/aarch64/simd/vect_su_add_sub.c
  193aaed5c334d9ba2fa37ff1394c985a  gcc/testsuite/gcc.target/aarch64/simd/vfma_f64.c
  e8a7b42845aa1c5b25930c4fb0a6a0ee  gcc/testsuite/gcc.target/aarch64/simd/vfms_f64.c
! fea185df55b22fb5b09d2520906f5f26  gcc/testsuite/gcc.target/aarch64/simd/vget_lane_indices.c
  56bbb856fadf79f0bc012a4a94a27593  gcc/testsuite/gcc.target/aarch64/simd/vldrq_p128_1.c
  402f69c526859444eac69ec5d29715ab  gcc/testsuite/gcc.target/aarch64/simd/vminmaxnm_1.c
  e101fae335b7ee05e94f44945ad9e568  gcc/testsuite/gcc.target/aarch64/simd/vmla_elem_1.c
*************** b0d6479df19c40bdd8f43564d457cbe5  gcc/te
*** 72628,72634 ****
  ea00e722d71efdc7c8bc34e4f52f4267  gcc/testsuite/gcc.target/aarch64/simd/vrndns_f32_1.c
  32cd04568766eff83c2953e0e0896ed8  gcc/testsuite/gcc.target/aarch64/simd/vrndnzx_1.c
  d03add80ea999508d8a302babc5770b3  gcc/testsuite/gcc.target/aarch64/simd/vrshr_1.c
! b8ac02a599cbc267b2dbe3d141002d4e  gcc/testsuite/gcc.target/aarch64/simd/vset_lane_s16_const_1.c
  7a785e7a855c2dc76f687ba4daa9304b  gcc/testsuite/gcc.target/aarch64/simd/vsqrt_f64_1.c
  77b683f2806e42bd49a374316bbc9e35  gcc/testsuite/gcc.target/aarch64/simd/vstrq_p128_1.c
  956237e89e132a5fe69227f992d3d5ff  gcc/testsuite/gcc.target/aarch64/simd/vtrnf32.x
--- 72673,72679 ----
  ea00e722d71efdc7c8bc34e4f52f4267  gcc/testsuite/gcc.target/aarch64/simd/vrndns_f32_1.c
  32cd04568766eff83c2953e0e0896ed8  gcc/testsuite/gcc.target/aarch64/simd/vrndnzx_1.c
  d03add80ea999508d8a302babc5770b3  gcc/testsuite/gcc.target/aarch64/simd/vrshr_1.c
! 9bc096b62664a812c6d5e989f764052a  gcc/testsuite/gcc.target/aarch64/simd/vset_lane_s16_const_1.c
  7a785e7a855c2dc76f687ba4daa9304b  gcc/testsuite/gcc.target/aarch64/simd/vsqrt_f64_1.c
  77b683f2806e42bd49a374316bbc9e35  gcc/testsuite/gcc.target/aarch64/simd/vstrq_p128_1.c
  956237e89e132a5fe69227f992d3d5ff  gcc/testsuite/gcc.target/aarch64/simd/vtrnf32.x
*************** afe62fa89b5483576738572de037298b  gcc/te
*** 72885,72890 ****
--- 72930,72939 ----
  d6f0c95fd7a6f5179274aac3f6cc20c4  gcc/testsuite/gcc.target/aarch64/sme/arm_neon_1.c
  dadcd855a787ed42d61441acfdf07035  gcc/testsuite/gcc.target/aarch64/sme/arm_neon_2.c
  ee7a30eb13293817fbc0761ba471e1dc  gcc/testsuite/gcc.target/aarch64/sme/arm_neon_3.c
+ e8ad73c870d66205cd9246defcef8469  gcc/testsuite/gcc.target/aarch64/sme/arm_sc_memchr.c
+ 0ee94124bdb1ef36b3a24c3532b9b3b6  gcc/testsuite/gcc.target/aarch64/sme/arm_sc_memcpy.c
+ 256fa8b96c2f6d439250c7338ae8c12a  gcc/testsuite/gcc.target/aarch64/sme/arm_sc_memmove.c
+ 90bbf40e7144e0ce6382bae1f916a03d  gcc/testsuite/gcc.target/aarch64/sme/arm_sc_memset.c
  dfeb9468e1b18f8f90c9751f42f42c04  gcc/testsuite/gcc.target/aarch64/sme/call_sm_switch_1.c
  84feb7d27fbd53171100e87b74c92cb0  gcc/testsuite/gcc.target/aarch64/sme/call_sm_switch_10.c
  474123d4ffaf34a7e158ae1e06a11311  gcc/testsuite/gcc.target/aarch64/sme/call_sm_switch_11.c
*************** b1a33a791c89383f575f412606f068a3  gcc/te
*** 72907,72914 ****
  062d08488f4319f8147d8ea7541765cb  gcc/testsuite/gcc.target/aarch64/sme/clamp_5.c
  a877b4ec90c34ec3828d80d4d3cc637b  gcc/testsuite/gcc.target/aarch64/sme/inline-asm.c
  016560dc141726f25baa60ea9a10d721  gcc/testsuite/gcc.target/aarch64/sme/inlining_1.c
! 6c03deff04e9af5b436db5415f96f864  gcc/testsuite/gcc.target/aarch64/sme/inlining_10.c
! f45b72225fb0d71f35b6a6b77c7cb8b8  gcc/testsuite/gcc.target/aarch64/sme/inlining_11.c
  879f8cbda3bac2a9515ac7b25fe72355  gcc/testsuite/gcc.target/aarch64/sme/inlining_12.c
  cf0ef9d94d28540fd020773ed51d6006  gcc/testsuite/gcc.target/aarch64/sme/inlining_13.c
  bd862476d0822e624003a284b6549ab7  gcc/testsuite/gcc.target/aarch64/sme/inlining_14.c
--- 72956,72963 ----
  062d08488f4319f8147d8ea7541765cb  gcc/testsuite/gcc.target/aarch64/sme/clamp_5.c
  a877b4ec90c34ec3828d80d4d3cc637b  gcc/testsuite/gcc.target/aarch64/sme/inline-asm.c
  016560dc141726f25baa60ea9a10d721  gcc/testsuite/gcc.target/aarch64/sme/inlining_1.c
! 418e06c2f5f160b6d06d8009b848fa0c  gcc/testsuite/gcc.target/aarch64/sme/inlining_10.c
! 88daa927d53b40f7bf6fd7974cf50063  gcc/testsuite/gcc.target/aarch64/sme/inlining_11.c
  879f8cbda3bac2a9515ac7b25fe72355  gcc/testsuite/gcc.target/aarch64/sme/inlining_12.c
  cf0ef9d94d28540fd020773ed51d6006  gcc/testsuite/gcc.target/aarch64/sme/inlining_13.c
  bd862476d0822e624003a284b6549ab7  gcc/testsuite/gcc.target/aarch64/sme/inlining_14.c
*************** c4e807392dbe7079bb88acf040351299  gcc/te
*** 76126,76131 ****
--- 76175,76181 ----
  b47de1519a1ea6d899c2a6cd56b65cba  gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr114577_2.c
  4be435ec882c5745457b0a6378296096  gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr115464.c
  a37d20c2585b9553233fb42e281e9b03  gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr115464_2.c
+ d89029c6c298e54c0a0dc6727d17b1a8  gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr120027.c
  89320642fc28eb425a70fa1fc222f0b2  gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr120718.c
  c1f0d92266055a62f8c3a0b32cffca32  gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr121118_1.c
  4b3b421e52a2297ee3fdf3f39e2b6294  gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr123392.c
*************** b7e38288d184e5c029161b8ed1565bd2  gcc/te
*** 76439,76444 ****
--- 76489,76495 ----
  8d7ecba02de4f6f13e67abb27095c1ea  gcc/testsuite/gcc.target/aarch64/sve/const_fold_div_1.c
  3e10341bbad5f59e9c4238e5d9a9baaa  gcc/testsuite/gcc.target/aarch64/sve/const_fold_lsl_1.c
  91eee6bf2d1bca4f85df6d04b1f8f095  gcc/testsuite/gcc.target/aarch64/sve/const_fold_mul_1.c
+ 5a1feb58cb578a27fb3e1df8a60f419d  gcc/testsuite/gcc.target/aarch64/sve/copsi.c
  118d7e991ceeb7d74a95f49ebb9363de  gcc/testsuite/gcc.target/aarch64/sve/copysign_1.c
  3b8d8c231844e2b260881fd40e9fb96b  gcc/testsuite/gcc.target/aarch64/sve/copysign_1_run.c
  0504506a6311cc93887e1a557a45e7f9  gcc/testsuite/gcc.target/aarch64/sve/cost_model_1.c
*************** c2c643428e22f26ef60f0ac7fe72cab9  gcc/te
*** 77017,77022 ****
--- 77068,77075 ----
  ab7e96ffad0e120db206c2fe1d3866a9  gcc/testsuite/gcc.target/aarch64/sve/pr104474-1.c
  7730534c4e1ec8c38e74c96c2505af9f  gcc/testsuite/gcc.target/aarch64/sve/pr104474-2.c
  e30fd5dcda5a72ba3b2d66a5485b282a  gcc/testsuite/gcc.target/aarch64/sve/pr104474-3.c
+ f3d52f4be9c37a62f0780a635b22de41  gcc/testsuite/gcc.target/aarch64/sve/pr105116-run.c
+ 2b41a48946e9bcf9c2f116af8b14ed52  gcc/testsuite/gcc.target/aarch64/sve/pr105116.c
  a1eb5ddb5902496d5253fa3260ba71e1  gcc/testsuite/gcc.target/aarch64/sve/pr105197-1.c
  03657387d2c9ee82c783fb8d0980449a  gcc/testsuite/gcc.target/aarch64/sve/pr105197-2.c
  8cdf49618d3a0d6c619b66f29122607c  gcc/testsuite/gcc.target/aarch64/sve/pr106524.c
*************** bf992986a2da0a21868958cee0d10443  gcc/te
*** 77568,77573 ****
--- 77621,77628 ----
  7259ef4cdd51092907ceefd84572f162  gcc/testsuite/gcc.target/aarch64/sve/vect-reduc-bool-7.c
  12978375cb332a3483ab669ce4cc9062  gcc/testsuite/gcc.target/aarch64/sve/vect-reduc-bool-8.c
  a425f478505b12c7af785eb9c7bdc914  gcc/testsuite/gcc.target/aarch64/sve/vect-reduc-bool-9.c
+ de297cdbd24a01b8aa6309d185795fb7  gcc/testsuite/gcc.target/aarch64/sve/vect-unroll-1.c
+ d43bc544a36c52da0c520096c19fcf3c  gcc/testsuite/gcc.target/aarch64/sve/vect-unroll-2.c
  f0756c53ff3a98bc41d556c52afe94e6  gcc/testsuite/gcc.target/aarch64/sve/vusdot-autovec.c
  8f996475a52aff431b850bf794a5aeb4  gcc/testsuite/gcc.target/aarch64/sve/while_1.c
  bf66f155c3e51c7d9f592a9699731758  gcc/testsuite/gcc.target/aarch64/sve/while_10.c
*************** c4bc25c8f2e113ab5a32a55e0ba74a9c  gcc/te
*** 77698,77707 ****
  fe62ebda0f812ba066de42b5c9810c34  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwt_u16.c
  9a94723637fefd61d733cbf095ff7d4d  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwt_u32.c
  ba7ee78cdb8348039b7574c86d1cf21f  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwt_u64.c
! 5e45a37866be4133ad4d3fa548b80193  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aesd_u8.c
! effb20438dc42075bce3c0de4e5b297d  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aese_u8.c
! e3f6117cf6bfb81600aeae3af01548ef  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aesimc_u8.c
! def6e2e434633a418959e3a0166fcfd6  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aesmc_u8.c
  7d2639518c962b2c01a5de490a7c31af  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/amax_f16.c
  9006ba2fb7a1559e59eb1378e4988aeb  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/amax_f32.c
  5bddb3e8f16135f8819496e1c4681757  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/amax_f64.c
--- 77753,77762 ----
  fe62ebda0f812ba066de42b5c9810c34  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwt_u16.c
  9a94723637fefd61d733cbf095ff7d4d  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwt_u32.c
  ba7ee78cdb8348039b7574c86d1cf21f  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwt_u64.c
! f964791c5a84ece27e8bc2b901a41e1f  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aesd_u8.c
! 6e7dba6e8d863ff29dc7b657697a3aa3  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aese_u8.c
! 92963fb9e614cb437a40416e58527029  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aesimc_u8.c
! 4588cbc26824797b9e78b41c72181d25  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aesmc_u8.c
  7d2639518c962b2c01a5de490a7c31af  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/amax_f16.c
  9006ba2fb7a1559e59eb1378e4988aeb  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/amax_f32.c
  5bddb3e8f16135f8819496e1c4681757  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/amax_f64.c
*************** a96aa1ae16c36f4e8cb25773a2563ea3  gcc/te
*** 78319,78324 ****
--- 78374,78387 ----
  71b80a48556afdc2630b9b575a34448f  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mul_lane_u16.c
  df748332ac2a2c920d209427e79404e9  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mul_lane_u32.c
  de23ff3b54244d77275f148e0b8bc454  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mul_lane_u64.c
+ eb7bdc2ccd03bed9d739ede8c9c0132a  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_s16.c
+ 2a8cf2070a34467d4da06ae102648c06  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_s32.c
+ fb9c674de51fc608585b16aa53f3610c  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_s64.c
+ b28b5834021e5ede605317b25830cd68  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_s8.c
+ 45d9dc1eeb4da7b20f2665164dca7293  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_u16.c
+ 515d35d09cc10b922fccb301f00be9b1  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_u32.c
+ 0fde413d3ac1b042b2c0f1409bdb52fc  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_u64.c
+ 9b03f45614dda138c29b32921a88d969  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_u8.c
  4532f67db8c327724283ecfca1d83547  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_lane_s32.c
  5094112909eb9e93a546b7c3f2e2b87f  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_lane_s64.c
  78d62120ce6f0edb55c5ffc9fab87de8  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_lane_u32.c
*************** f87f898044cd78f2ebf530577d3cf7bb  gcc/te
*** 79258,79264 ****
  0168137c2b608147cb69283541a282f1  gcc/testsuite/gcc.target/aarch64/table-intrinsics.c
  e259ba8323c6ae474eebb9f1a89e0a1d  gcc/testsuite/gcc.target/aarch64/tail_indirect_call_1.c
  41ec27ca8c11639d09bb3405e7e9a3ab  gcc/testsuite/gcc.target/aarch64/target_attr_1.c
! 349d0154c3dbd1cf6f4537ed70cd2b88  gcc/testsuite/gcc.target/aarch64/target_attr_10.c
  bf9afeb6532edb2f9d5ea8620df5ab50  gcc/testsuite/gcc.target/aarch64/target_attr_11.c
  2a9edf7c483ff75cf1319b1811b18262  gcc/testsuite/gcc.target/aarch64/target_attr_12.c
  7057e6704db7a615c178821ca8216281  gcc/testsuite/gcc.target/aarch64/target_attr_13.c
--- 79321,79327 ----
  0168137c2b608147cb69283541a282f1  gcc/testsuite/gcc.target/aarch64/table-intrinsics.c
  e259ba8323c6ae474eebb9f1a89e0a1d  gcc/testsuite/gcc.target/aarch64/tail_indirect_call_1.c
  41ec27ca8c11639d09bb3405e7e9a3ab  gcc/testsuite/gcc.target/aarch64/target_attr_1.c
! 6ca08091e27dc4aa6e6322a95870d129  gcc/testsuite/gcc.target/aarch64/target_attr_10.c
  bf9afeb6532edb2f9d5ea8620df5ab50  gcc/testsuite/gcc.target/aarch64/target_attr_11.c
  2a9edf7c483ff75cf1319b1811b18262  gcc/testsuite/gcc.target/aarch64/target_attr_12.c
  7057e6704db7a615c178821ca8216281  gcc/testsuite/gcc.target/aarch64/target_attr_13.c
*************** ae3dcb9a10323462d2895ea14f4c6684  gcc/te
*** 79579,79585 ****
  cece2595bf2f930ad47cf5ce7584aa27  gcc/testsuite/gcc.target/aarch64/vls_sve_vec_dup_1.c
  62035331b5c5eb4d0fe9a0334d3e3e5e  gcc/testsuite/gcc.target/aarch64/vminmaxnm.c
  bdf9d08039684c459d9bd2f4906dba34  gcc/testsuite/gcc.target/aarch64/vmlsq_laneq.c
! 409b07ca9d40dc8382417b1603d0ef73  gcc/testsuite/gcc.target/aarch64/vmov_n_1.c
  f396728d36bed45894998d7b009efac3  gcc/testsuite/gcc.target/aarch64/vmul_element_cost.c
  be7b9112dd5058346e2ee26757774711  gcc/testsuite/gcc.target/aarch64/vmul_high_cost.c
  d2f71c9a8f824772ab107bdaf0839870  gcc/testsuite/gcc.target/aarch64/vmull_high.c
--- 79642,79648 ----
  cece2595bf2f930ad47cf5ce7584aa27  gcc/testsuite/gcc.target/aarch64/vls_sve_vec_dup_1.c
  62035331b5c5eb4d0fe9a0334d3e3e5e  gcc/testsuite/gcc.target/aarch64/vminmaxnm.c
  bdf9d08039684c459d9bd2f4906dba34  gcc/testsuite/gcc.target/aarch64/vmlsq_laneq.c
! a48c589297a328cd459827272cc04c0f  gcc/testsuite/gcc.target/aarch64/vmov_n_1.c
  f396728d36bed45894998d7b009efac3  gcc/testsuite/gcc.target/aarch64/vmul_element_cost.c
  be7b9112dd5058346e2ee26757774711  gcc/testsuite/gcc.target/aarch64/vmul_high_cost.c
  d2f71c9a8f824772ab107bdaf0839870  gcc/testsuite/gcc.target/aarch64/vmull_high.c
*************** b6d21b184b9363ec63310029743b3ec8  gcc/te
*** 80468,80477 ****
  bfc9c68e78fd72e08127df9f2211f1b7  gcc/testsuite/gcc.target/arm/lob4.c
  13689282306d2e12a0fe9eb87e9ecae4  gcc/testsuite/gcc.target/arm/lob5.c
  7d32b111ecb47a78d30e60ca38acffa1  gcc/testsuite/gcc.target/arm/lob6.c
! bf821309d2cd93b8c0d6b0704742bc45  gcc/testsuite/gcc.target/arm/long-calls-1.c
! 42a78271420e5c48df61165376eb067e  gcc/testsuite/gcc.target/arm/long-calls-2.c
! 045075d4c4f653f51cab15b6c12b3e09  gcc/testsuite/gcc.target/arm/long-calls-3.c
! 856b2cad766c5a53d737088d9056031b  gcc/testsuite/gcc.target/arm/long-calls-4.c
  bda0b982c40bee2fd28b1750fa6bc2bf  gcc/testsuite/gcc.target/arm/lp1189445.c
  907fdd46667ce02cd530e6e361337e71  gcc/testsuite/gcc.target/arm/lround-vcvt_1.c
  f362f2eaa3aeccd8f36ea7acbbc1b897  gcc/testsuite/gcc.target/arm/lto/lto.exp
--- 80531,80540 ----
  bfc9c68e78fd72e08127df9f2211f1b7  gcc/testsuite/gcc.target/arm/lob4.c
  13689282306d2e12a0fe9eb87e9ecae4  gcc/testsuite/gcc.target/arm/lob5.c
  7d32b111ecb47a78d30e60ca38acffa1  gcc/testsuite/gcc.target/arm/lob6.c
! 5a8693fd7703e6a21817ec0ec2455d5b  gcc/testsuite/gcc.target/arm/long-calls-1.c
! 086d7341668f43eea7c3eed221559433  gcc/testsuite/gcc.target/arm/long-calls-2.c
! a89b5e0e366636ce12c4d2fdcfdebdd3  gcc/testsuite/gcc.target/arm/long-calls-3.c
! f4dc3ba47c0ebc20091da77bcbf16400  gcc/testsuite/gcc.target/arm/long-calls-4.c
  bda0b982c40bee2fd28b1750fa6bc2bf  gcc/testsuite/gcc.target/arm/lp1189445.c
  907fdd46667ce02cd530e6e361337e71  gcc/testsuite/gcc.target/arm/lround-vcvt_1.c
  f362f2eaa3aeccd8f36ea7acbbc1b897  gcc/testsuite/gcc.target/arm/lto/lto.exp
*************** ae8b5a5d686fedd54544f4210ebf0d66  gcc/te
*** 84970,84976 ****
  d3f15f077bac4fdd98e262ff70319e29  gcc/testsuite/gcc.target/i386/amd64-abi-7.c
  41e281a8a41c48fe7dbd02b555d86032  gcc/testsuite/gcc.target/i386/amd64-abi-8.c
  29b2c8175a8aeb1de6d8e6148a11d79d  gcc/testsuite/gcc.target/i386/amd64-abi-9.c
! d946e35265c94b5e06f45c925ea03015  gcc/testsuite/gcc.target/i386/amx-check.h
  99e6ee6f6a0dd25151f9bd8e0350a8c3  gcc/testsuite/gcc.target/i386/amx-helper.h
  a93a298f547274ed3c2b935fceada10f  gcc/testsuite/gcc.target/i386/amxavx512-asmatt-1.c
  6a5fd66cc81baab9cac7cbbacb5f044a  gcc/testsuite/gcc.target/i386/amxavx512-asmintel-1.c
--- 85033,85039 ----
  d3f15f077bac4fdd98e262ff70319e29  gcc/testsuite/gcc.target/i386/amd64-abi-7.c
  41e281a8a41c48fe7dbd02b555d86032  gcc/testsuite/gcc.target/i386/amd64-abi-8.c
  29b2c8175a8aeb1de6d8e6148a11d79d  gcc/testsuite/gcc.target/i386/amd64-abi-9.c
! 32550b701ff45b10bd93235b3ec8a423  gcc/testsuite/gcc.target/i386/amx-check.h
  99e6ee6f6a0dd25151f9bd8e0350a8c3  gcc/testsuite/gcc.target/i386/amx-helper.h
  a93a298f547274ed3c2b935fceada10f  gcc/testsuite/gcc.target/i386/amxavx512-asmatt-1.c
  6a5fd66cc81baab9cac7cbbacb5f044a  gcc/testsuite/gcc.target/i386/amxavx512-asmintel-1.c
*************** fc50af06e61cf9d13887f2fe515b0e27  gcc/te
*** 85003,85011 ****
  c6e05c63e432fabb376eb84512c8c136  gcc/testsuite/gcc.target/i386/amxmovrs-asmatt-1.c
  452a0b261c066d49a3c3f303a70b6db8  gcc/testsuite/gcc.target/i386/amxmovrs-asmintel-1.c
  e733b32150a44e7be6c236ca11324770  gcc/testsuite/gcc.target/i386/amxmovrs-tileloaddrs-2.c
- 83f382a948fa479169644b56fee9247b  gcc/testsuite/gcc.target/i386/amxtf32-asmatt-1.c
- a44cf006e7d7dc3c6c4f6644cfe192cb  gcc/testsuite/gcc.target/i386/amxtf32-asmintel-1.c
- baf13b756391e3f11b0f7d619bd353a5  gcc/testsuite/gcc.target/i386/amxtf32-mmultf32ps-2.c
  4e7e8638f4652613beb251daa4730463  gcc/testsuite/gcc.target/i386/amxtile-2.c
  a455baf8f9990eb7494164842dce7c91  gcc/testsuite/gcc.target/i386/amxtile-3.c
  84fc02cc52ddc8bdd53d77902c0176fb  gcc/testsuite/gcc.target/i386/amxtile-4.c
--- 85066,85071 ----
*************** eb708969415212c746828c0aef00baee  gcc/te
*** 86120,86125 ****
--- 86180,86186 ----
  8e4cae79964202a24b6b470fcdb44c60  gcc/testsuite/gcc.target/i386/avx2-vpavgw-2.c
  5b2b749d344f2563ccd7be1eb4e9869b  gcc/testsuite/gcc.target/i386/avx2-vpblendd128-1.c
  c3bb57dca9ca226918b7ff406d777a62  gcc/testsuite/gcc.target/i386/avx2-vpblendd128-2.c
+ a44f67fb7c79355b83ee5d5aea696572  gcc/testsuite/gcc.target/i386/avx2-vpblendd128-3.c
  77b003a3959c9a9f68f657ca23547c3d  gcc/testsuite/gcc.target/i386/avx2-vpblendd256-1.c
  2a84250c3839624f82781a67dae235d1  gcc/testsuite/gcc.target/i386/avx2-vpblendd256-2.c
  73735cf4d6c3c7f8a14b9398d38affdc  gcc/testsuite/gcc.target/i386/avx2-vpblendvb-1.c
*************** d1b973f36a4fb5310a2535b0d664c5ad  gcc/te
*** 89341,89346 ****
--- 89402,89408 ----
  fcafca94a6ddec579b9fd4578f65246a  gcc/testsuite/gcc.target/i386/bt-6.c
  25e6ed4bc66962060462ab2c17189e9e  gcc/testsuite/gcc.target/i386/bt-7.c
  1d66356b098bb29d9c0d64471eee71a5  gcc/testsuite/gcc.target/i386/bt-8.c
+ 0857eab9c5665dd5ae93f422b60d897c  gcc/testsuite/gcc.target/i386/bt-cmov-1.c
  6dbb5dc871f1dd7658d1de2c1afb6157  gcc/testsuite/gcc.target/i386/bt-mask-1.c
  5c87482ed718acb45d6e0aa4764f8338  gcc/testsuite/gcc.target/i386/bt-mask-2.c
  1f88fce9add6e2963074b61473d3d63b  gcc/testsuite/gcc.target/i386/builtin-apply-mmx.c
*************** ca4ac7cac7f4e2b202119db822204403  gcc/te
*** 89388,89393 ****
--- 89450,89459 ----
  7233d5b85d2a3b0c5a37d3f93ad6aa94  gcc/testsuite/gcc.target/i386/builtin-memmove-13.c
  e581bb0a3fb7e1eadbb5e26f9c5c052c  gcc/testsuite/gcc.target/i386/builtin-memmove-14.c
  1196e40188bad91db0ea2bfa57e022f4  gcc/testsuite/gcc.target/i386/builtin-memmove-15.c
+ 0e442017ff8690aba6f3ec3db2e044fc  gcc/testsuite/gcc.target/i386/builtin-memmove-16.c
+ d6322296b543934cdca46c5bc8377205  gcc/testsuite/gcc.target/i386/builtin-memmove-17.c
+ 9b7889601307361f5e21c92e49221f6f  gcc/testsuite/gcc.target/i386/builtin-memmove-18a.c
+ 98e7ef2384fb14b090f898c5bf060dd7  gcc/testsuite/gcc.target/i386/builtin-memmove-18b.c
  b3d1977118e8680a2aa93f5ff59f54af  gcc/testsuite/gcc.target/i386/builtin-memmove-1a.c
  91dc1ae7b1d3070536b853d79edb3060  gcc/testsuite/gcc.target/i386/builtin-memmove-1b.c
  c7486eacb8f21a9faa7a88250552d23b  gcc/testsuite/gcc.target/i386/builtin-memmove-1c.c
*************** c1320fd604803bc04257c984f1e3ba77  gcc/te
*** 89770,89776 ****
  3dd864a351a6115db6a5b2ea1ee16ece  gcc/testsuite/gcc.target/i386/funcspec-3.c
  5af0527c599bf95f77628d48b1beb0ec  gcc/testsuite/gcc.target/i386/funcspec-4.c
  7568c1249431aafb7f8e2610a1e4a35e  gcc/testsuite/gcc.target/i386/funcspec-5.c
! 1a643a203c98df3dd079c5d36be23770  gcc/testsuite/gcc.target/i386/funcspec-56.inc
  b954a6c88c30f112db6bd140acb0162c  gcc/testsuite/gcc.target/i386/funcspec-6.c
  35655de5c9348f2a36254312a8d17908  gcc/testsuite/gcc.target/i386/funcspec-7.c
  0ba9f1b7368ea580cabab541b451aea8  gcc/testsuite/gcc.target/i386/funcspec-8.c
--- 89836,89842 ----
  3dd864a351a6115db6a5b2ea1ee16ece  gcc/testsuite/gcc.target/i386/funcspec-3.c
  5af0527c599bf95f77628d48b1beb0ec  gcc/testsuite/gcc.target/i386/funcspec-4.c
  7568c1249431aafb7f8e2610a1e4a35e  gcc/testsuite/gcc.target/i386/funcspec-5.c
! 5f7d0e0265096a86b346a63b152b1504  gcc/testsuite/gcc.target/i386/funcspec-56.inc
  b954a6c88c30f112db6bd140acb0162c  gcc/testsuite/gcc.target/i386/funcspec-6.c
  35655de5c9348f2a36254312a8d17908  gcc/testsuite/gcc.target/i386/funcspec-7.c
  0ba9f1b7368ea580cabab541b451aea8  gcc/testsuite/gcc.target/i386/funcspec-8.c
*************** c93af1b8273ac94a94f8677f1b5cd79e  gcc/te
*** 93163,93168 ****
--- 93229,93235 ----
  6066623ac8fb7000178efdaffd58159d  gcc/testsuite/gcc.target/i386/pr94857.c
  3d8c6ca4743fbe08e8aa51d6bce81048  gcc/testsuite/gcc.target/i386/pr94864.c
  ba4317c6fa488ec5175c503c317b326a  gcc/testsuite/gcc.target/i386/pr94865.c
+ 996275eb6d67a8bbf1ef4c898679e831  gcc/testsuite/gcc.target/i386/pr94871.c
  007c879779a72d2f63751a986ad2dbaf  gcc/testsuite/gcc.target/i386/pr94908.c
  86bbb5b72491974076a858614f1c432f  gcc/testsuite/gcc.target/i386/pr94913-1.c
  e88e5727a67218596a6069f1451699bf  gcc/testsuite/gcc.target/i386/pr94913-2.c
*************** bc6b7244a28a5688b5a5c75593461393  gcc/te
*** 93590,93598 ****
  cc8a162617784a2e883a5e726d28ebde  gcc/testsuite/gcc.target/i386/sse-1.c
  31f7ce4356be3b5523e49df7d4ad0951  gcc/testsuite/gcc.target/i386/sse-10.c
  49bde97b271274cb2bc26697ce2b19be  gcc/testsuite/gcc.target/i386/sse-11.c
! ff55b5f18a780244be00457bb8fcf8f3  gcc/testsuite/gcc.target/i386/sse-12.c
! cf9c97c0abfff2f0eb77349397a69677  gcc/testsuite/gcc.target/i386/sse-13.c
! f107027ef01062628bd31b407f3ff016  gcc/testsuite/gcc.target/i386/sse-14.c
  92ad37b5ad7426d489b1b6f1ba0f41ea  gcc/testsuite/gcc.target/i386/sse-15.c
  2e7b115c4bd7984925f1a8d17a5faf67  gcc/testsuite/gcc.target/i386/sse-16.c
  f660e67b22cb44e6a6b38a247b1d78c3  gcc/testsuite/gcc.target/i386/sse-17.c
--- 93657,93665 ----
  cc8a162617784a2e883a5e726d28ebde  gcc/testsuite/gcc.target/i386/sse-1.c
  31f7ce4356be3b5523e49df7d4ad0951  gcc/testsuite/gcc.target/i386/sse-10.c
  49bde97b271274cb2bc26697ce2b19be  gcc/testsuite/gcc.target/i386/sse-11.c
! 92eadacc4a4fd15470400eaf85e1bd0b  gcc/testsuite/gcc.target/i386/sse-12.c
! a07ceddb0a52108163df5e6ddeffaf93  gcc/testsuite/gcc.target/i386/sse-13.c
! fe4d075ea82a43cd2183aafcb837c7dc  gcc/testsuite/gcc.target/i386/sse-14.c
  92ad37b5ad7426d489b1b6f1ba0f41ea  gcc/testsuite/gcc.target/i386/sse-15.c
  2e7b115c4bd7984925f1a8d17a5faf67  gcc/testsuite/gcc.target/i386/sse-16.c
  f660e67b22cb44e6a6b38a247b1d78c3  gcc/testsuite/gcc.target/i386/sse-17.c
*************** f660e67b22cb44e6a6b38a247b1d78c3  gcc/te
*** 93601,93609 ****
  bb148b6e9dd40de90aed723794e38216  gcc/testsuite/gcc.target/i386/sse-2.c
  c23a0ea446a060d55e49e48429513f7d  gcc/testsuite/gcc.target/i386/sse-20.c
  d5e7e4c7d488a953399d853e48aa484e  gcc/testsuite/gcc.target/i386/sse-21.c
! 945a604e9ae7cbdf42bb4c546aee01c8  gcc/testsuite/gcc.target/i386/sse-22.c
  1c2df57cb3d7d6a3daf4084135ba9b1b  gcc/testsuite/gcc.target/i386/sse-22a.c
! efbd4e97f282fcd78e986c0b71e242a1  gcc/testsuite/gcc.target/i386/sse-23.c
  3fe1d48ff9d52631da56f04cc922a9cb  gcc/testsuite/gcc.target/i386/sse-24.c
  f839ec28fa786a06dabe541954c1b1ae  gcc/testsuite/gcc.target/i386/sse-25.c
  8bb465a190ed3492b3cf000afacb0a9a  gcc/testsuite/gcc.target/i386/sse-26.c
--- 93668,93676 ----
  bb148b6e9dd40de90aed723794e38216  gcc/testsuite/gcc.target/i386/sse-2.c
  c23a0ea446a060d55e49e48429513f7d  gcc/testsuite/gcc.target/i386/sse-20.c
  d5e7e4c7d488a953399d853e48aa484e  gcc/testsuite/gcc.target/i386/sse-21.c
! d994fd580cf5c8f3a8424fc4773db065  gcc/testsuite/gcc.target/i386/sse-22.c
  1c2df57cb3d7d6a3daf4084135ba9b1b  gcc/testsuite/gcc.target/i386/sse-22a.c
! 14fd0f14291c904b2f8835bec5590e76  gcc/testsuite/gcc.target/i386/sse-23.c
  3fe1d48ff9d52631da56f04cc922a9cb  gcc/testsuite/gcc.target/i386/sse-24.c
  f839ec28fa786a06dabe541954c1b1ae  gcc/testsuite/gcc.target/i386/sse-25.c
  8bb465a190ed3492b3cf000afacb0a9a  gcc/testsuite/gcc.target/i386/sse-26.c
*************** eb452255da68355f880cada63c730531  gcc/te
*** 93995,94000 ****
--- 94062,94068 ----
  81934d79e6df6c7fd43f1e2978ac3281  gcc/testsuite/gcc.target/i386/sse2-stv-3.c
  6da4abc673844a6c4f7943be5a464569  gcc/testsuite/gcc.target/i386/sse2-stv-4.c
  51975bf6c7ba6a98f8965708c1f07b8e  gcc/testsuite/gcc.target/i386/sse2-stv-5.c
+ fd18d6ffa9537240cbd33eff30fce198  gcc/testsuite/gcc.target/i386/sse2-stv-6.c
  9be13acc473ad924e8c8d9361b6bb102  gcc/testsuite/gcc.target/i386/sse2-subpd-1.c
  27c775be57a4cec6ca0c692df6b7b073  gcc/testsuite/gcc.target/i386/sse2-subsd-1.c
  29e42097b8a8d6b6700b13e1bd99e89d  gcc/testsuite/gcc.target/i386/sse2-ucomisd-1.c
*************** d8ba98681e844aa3cab41dadb293ad62  gcc/te
*** 94950,94955 ****
--- 95018,95024 ----
  46f4e137231cac38e7e10152e3340365  gcc/testsuite/gcc.target/loongarch/short-circuit.c
  f46bb4d68c80f94cd959f7aefc8389e4  gcc/testsuite/gcc.target/loongarch/shrink-wrap.c
  e1615ec0889043a33798fc33df9c0c5e  gcc/testsuite/gcc.target/loongarch/smulsi3_highpart.c
+ 506f4637a5717c9a039eac33d882f841  gcc/testsuite/gcc.target/loongarch/ssp-ilp32.c
  3df56316dc4cc5cf945f0b9f6e4238db  gcc/testsuite/gcc.target/loongarch/stack-check-alloca-1.c
  7b5305d29424075188fad0ef59ab43f4  gcc/testsuite/gcc.target/loongarch/stack-check-alloca-2.c
  53085da424a3a210284c337760b5fe5d  gcc/testsuite/gcc.target/loongarch/stack-check-alloca-3.c
*************** c32afe294b6ac61449492b3292f7530d  gcc/te
*** 94979,94984 ****
--- 95048,95054 ----
  fdc09cb25851254e708f2d7b35b30157  gcc/testsuite/gcc.target/loongarch/vector/lasx/abd-lasx.c
  10a58b0c68aafdaa8704cc0ab8a37e3c  gcc/testsuite/gcc.target/loongarch/vector/lasx/avg-ceil-lasx.c
  38e4e62393ad811f1092ea45b0c52b77  gcc/testsuite/gcc.target/loongarch/vector/lasx/avg-floor-lasx.c
+ 399667926b9da7a6e24189269219ad8d  gcc/testsuite/gcc.target/loongarch/vector/lasx/dot-prod-mixed-signedness.c
  ba1f9cd7776de398eabc15fb6f7d523b  gcc/testsuite/gcc.target/loongarch/vector/lasx/fnmam4-vec.c
  310196e47529f6c726239009748a1dc8  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-andn-iorn.c
  ff04753758847e0200cd4aee08b80f4a  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-builtin.c
*************** c59029e95de7d13850ad5e89322746aa  gcc/te
*** 95805,95810 ****
--- 95875,95881 ----
  7080332df14afa04ea934660dc2f0494  gcc/testsuite/gcc.target/mips/fpr-moves-6.c
  1ab987eb6bc2b1af6a0d05f9fa55cebb  gcc/testsuite/gcc.target/mips/fpr-moves-7.c
  f51e56f8225c7d3b3d5bde1b0519aedf  gcc/testsuite/gcc.target/mips/fpr-moves-8.c
+ c46228cf1a693aa6bcbb17c10d00289c  gcc/testsuite/gcc.target/mips/frame-barrier-1.c
  1275077666fdb159553a97d17608037d  gcc/testsuite/gcc.target/mips/frame-header-1.c
  6c512878face79ea73752c618369e9a2  gcc/testsuite/gcc.target/mips/frame-header-2.c
  2403fb1ed2a82ca1e79ee7a1ee345343  gcc/testsuite/gcc.target/mips/frame-header-3.c
*************** dbbd48736153257707cd3963aa82f121  gcc/te
*** 96021,96026 ****
--- 96092,96101 ----
  742864fcf01cb3ef0c88e05fdc619f50  gcc/testsuite/gcc.target/mips/mult-7.c
  2d64555e7a1192ed0a5abf3bc1995461  gcc/testsuite/gcc.target/mips/mult-8.c
  f84a034f7fdb21c836ab9bff8104218e  gcc/testsuite/gcc.target/mips/mult-9.c
+ 626b32e4bacb14cdde997b47448c8e97  gcc/testsuite/gcc.target/mips/mxu-compile-no.c
+ 2c38aeb8e2ea534c18303ecbebcb974b  gcc/testsuite/gcc.target/mips/mxu-compile.c
+ 813eaefb5b859149867252e11c6a4811  gcc/testsuite/gcc.target/mips/mxu-driver-no.c
+ 971e7890eb345c0fd08112a34158af61  gcc/testsuite/gcc.target/mips/mxu-driver.c
  8516b01c548a3dc33c3722a609a10af0  gcc/testsuite/gcc.target/mips/nan-2008.c
  e85b548694548ba941da6527e8b64b33  gcc/testsuite/gcc.target/mips/nan-legacy.c
  d9537ef2c19af319564e2250b13e87eb  gcc/testsuite/gcc.target/mips/nanf-2008.c
*************** bb8948b99ee40edd60fac5552a29094b  gcc/te
*** 96658,96663 ****
--- 96733,96741 ----
  9938ed030cece2cf20550a62ffe03b68  gcc/testsuite/gcc.target/powerpc/abd-vectorize-1.c
  839d34e1f1592bf45cfe5b598846b517  gcc/testsuite/gcc.target/powerpc/abd-vectorize-2.c
  3f8cb7e31c5c7de093b851e9d7eeedc7  gcc/testsuite/gcc.target/powerpc/abs128-1.c
+ 1c3dd2fcc33b780dbf70e4ad8f8354e5  gcc/testsuite/gcc.target/powerpc/acmp-tst-32bit.c
+ d3d9937409a146815a384e38f69c829a  gcc/testsuite/gcc.target/powerpc/acmp-tst-indexed.c
+ 51497862cbe2c65e679d0f8102a6c722  gcc/testsuite/gcc.target/powerpc/acmp-tst.c
  7e51ad94a84aa7e10974b09b04903e96  gcc/testsuite/gcc.target/powerpc/aes-builtin-1.c
  a230b59a8a08e65922c81f1a9237b840  gcc/testsuite/gcc.target/powerpc/aes-builtin-2.c
  b38a63566b67c129c09f0d282731b17b  gcc/testsuite/gcc.target/powerpc/aes-builtin-3.c
*************** f0050538b645310e4d0979e24d795aa2  gcc/te
*** 99270,99280 ****
  376ac48340c386427a1be7e5e884993a  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-7.c
  6a6f6da892e6ab1ee90807017ab944d9  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-8.c
  a9b38e5a37de52ced500d53d1d518b95  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-9.c
! 43abcee180b5304a1fef01db96126732  gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-1.c
! bd68f825f13abf87cf0dc41c546b6111  gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-2.c
  d537318f4778d476538830af75773636  gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-3.c
  e28a0c5ef6fd0537edfffa3640c7b4eb  gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-4.c
! 38c44990e18101bb4f8fdd534e7cc245  gcc/testsuite/gcc.target/powerpc/vsx_arith_vect_1.c
  26e40ebbd37f50c7f69089ac757f00d6  gcc/testsuite/gcc.target/powerpc/vsx_arith_vect_2.c
  c64a5cc2ce1d0b7ac9d881b4585a9313  gcc/testsuite/gcc.target/powerpc/vsx_mask-count-runnable.c
  37a4787409404cc5944ae67ed64e5513  gcc/testsuite/gcc.target/powerpc/vsx_mask-expand-runnable.c
--- 99348,99358 ----
  376ac48340c386427a1be7e5e884993a  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-7.c
  6a6f6da892e6ab1ee90807017ab944d9  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-8.c
  a9b38e5a37de52ced500d53d1d518b95  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-9.c
! c495fc3cc252932c6f0add0b15e138c6  gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-1.c
! 2a8562081fc2be68057b34ff92d83dd5  gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-2.c
  d537318f4778d476538830af75773636  gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-3.c
  e28a0c5ef6fd0537edfffa3640c7b4eb  gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-4.c
! 2611988bebbcd8f86ce3cabd52e22b5b  gcc/testsuite/gcc.target/powerpc/vsx_arith_vect_1.c
  26e40ebbd37f50c7f69089ac757f00d6  gcc/testsuite/gcc.target/powerpc/vsx_arith_vect_2.c
  c64a5cc2ce1d0b7ac9d881b4585a9313  gcc/testsuite/gcc.target/powerpc/vsx_mask-count-runnable.c
  37a4787409404cc5944ae67ed64e5513  gcc/testsuite/gcc.target/powerpc/vsx_mask-expand-runnable.c
*************** e2370c38a87d4cc60085fb7a8e611db5  gcc/te
*** 99445,99450 ****
--- 99523,99529 ----
  b6c3a11e4c9bd3883b232d9dc584ebf4  gcc/testsuite/gcc.target/riscv/abi/vls-gpr-9.c
  e576467327b6885418c9d8748492593a  gcc/testsuite/gcc.target/riscv/add-synthesis-1.c
  615a0e0c970edc01fb1779359e6d4069  gcc/testsuite/gcc.target/riscv/add-synthesis-2.c
+ 7849f30efba30e3cb8e029e6d0ef7e18  gcc/testsuite/gcc.target/riscv/add-synthesis-3.c
  d93c3e1c3636a89154ff39eafab30b70  gcc/testsuite/gcc.target/riscv/adddibeq.c
  8d0f5170831bd2bdc95068f618255b3b  gcc/testsuite/gcc.target/riscv/adddibfeq.c
  249c79a0f1d2f8b4e8a4dd4af89afe8f  gcc/testsuite/gcc.target/riscv/adddibfge.c
*************** adc74d0f17f6765898acaf25e4b80da2  gcc/te
*** 99619,99624 ****
--- 99698,99706 ----
  435a7b88323e1b422fbc6dd56ff2a323  gcc/testsuite/gcc.target/riscv/and-shift-1.c
  b446251fd8ececadfe514cc0a7b811cf  gcc/testsuite/gcc.target/riscv/and-shift32.c
  616dd45309bca9019fe3b9af69599baf  gcc/testsuite/gcc.target/riscv/and-shift64.c
+ e76a8ecc23a73f2b3119e7c5939c428d  gcc/testsuite/gcc.target/riscv/and-synthesis-1.c
+ f62a4c6236a8a2151d0cb6a51d0512d9  gcc/testsuite/gcc.target/riscv/and-synthesis-2.c
+ 7e0f171af9db31ba15073b39a46e6871  gcc/testsuite/gcc.target/riscv/and-synthesis-3.c
  d0db5e2267389a1185e58b9406371ee4  gcc/testsuite/gcc.target/riscv/arch-1.c
  3b7707b06c4df57de1fbf8812c8df071  gcc/testsuite/gcc.target/riscv/arch-10.c
  ec7f5ab1f99ea69345d1e5ac8e166932  gcc/testsuite/gcc.target/riscv/arch-11.c
*************** b1501e176991bdafb852ead7111b522d  gcc/te
*** 100134,100139 ****
--- 100216,100223 ----
  5159d9e2aee2c7fa385187b01c43e187  gcc/testsuite/gcc.target/riscv/mcpu-sifive-p450.c
  11dd7483f027ab8263d3f7bf312bc40f  gcc/testsuite/gcc.target/riscv/mcpu-sifive-p670.c
  0f7ebc2d65ebdb64c7b00775db650cdd  gcc/testsuite/gcc.target/riscv/mcpu-sifive-x280.c
+ 1e98805082752ae19404fb6ab5adf407  gcc/testsuite/gcc.target/riscv/mcpu-spacemit-a100.c
+ 6aca92b845bddc5351f8aaa2c10dc848  gcc/testsuite/gcc.target/riscv/mcpu-spacemit-x100.c
  d66b77cd3223498c6e933305c7a7ca13  gcc/testsuite/gcc.target/riscv/mcpu-thead-c906.c
  80b46a59e47fe5cb83685a398cf89368  gcc/testsuite/gcc.target/riscv/mcpu-tt-ascalon-d8.c
  dcced0272e68ebd6c311b4e558088af7  gcc/testsuite/gcc.target/riscv/mcpu-xiangshan-kunminghu.c
*************** e51815ddb1131553c1d3c8f51d41d185  gcc/te
*** 100433,100438 ****
--- 100517,100523 ----
  fd1ad27c6f6aa8e73524a95358b4fff8  gcc/testsuite/gcc.target/riscv/movsine-ventana.c
  529f76ee14377024369064d810c9dc2b  gcc/testsuite/gcc.target/riscv/movsine-zicond.c
  a253f6211e939c78d54f7413baa13d8c  gcc/testsuite/gcc.target/riscv/movsine.c
+ 940610f476cd921d9a614343ccb589d3  gcc/testsuite/gcc.target/riscv/multilib.exp
  ace2cf4b0d86b2a712b3e98f816f1d75  gcc/testsuite/gcc.target/riscv/mvc-warning1.c
  b79b998aeb58db66bd0a67b99288020e  gcc/testsuite/gcc.target/riscv/nozicond-1.c
  2ac773c640cc233a0124069480b6f47d  gcc/testsuite/gcc.target/riscv/nozicond-2.c
*************** fa61a6cc5030ebab9e9162f82fc6aa29  gcc/te
*** 101386,101392 ****
  200c284a34655274d55a300b2d41b4b2  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr111751.c
  903026ca308ec47dc91a6d1854bec473  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr111888.c
  48f4432dea058c64ee1ac21ec3131796  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112326.c
! 195b01e2c9c5f20a43f8ea2a247c028d  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112399.c
  2e9d988149c4714c87ea7521ebc651bb  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112438.c
  8fa663a0bc0997f26aed779402be388b  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112450.c
  61376420e242150ba16475077d458fc6  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112469.c
--- 101471,101477 ----
  200c284a34655274d55a300b2d41b4b2  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr111751.c
  903026ca308ec47dc91a6d1854bec473  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr111888.c
  48f4432dea058c64ee1ac21ec3131796  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112326.c
! 5f50e486d063824dd526e9bb23d0fb93  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112399.c
  2e9d988149c4714c87ea7521ebc651bb  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112438.c
  8fa663a0bc0997f26aed779402be388b  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112450.c
  61376420e242150ba16475077d458fc6  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112469.c
*************** bae2267e4176e92d1e66908110f5381f  gcc/te
*** 101517,101522 ****
--- 101602,101609 ----
  455f4d6d561c03a39a904e17bbb00820  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr125478.c
  6f0971d87cbc90246502d27273f008c2  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr125516.c
  cfd8a75e04799147b00e32b4c36ce0e7  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr125670.c
+ 75f645e1eb2bb8a096731cc0279484d0  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr125994.c
+ c3dec765eb396a84ec70aad7d3b6248f  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr126049.c
  ee8bcba5f6876f2027f0f263f81465aa  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/extract_last-1.c
  7ff884bfa2e6cf9bc4c6172466538515  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/extract_last-10.c
  b2792e9264dcd6fa2e88f495d51677e6  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/extract_last-11.c
*************** a8f53ad5180333afb72d569d125c3922  gcc/te
*** 105340,105346 ****
  fe865d9009af7551d830f6d4e3008ebe  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vlwu-vsw.c
  10c2fe61483d221e6648e72c6ff9f6a0  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vsext.c
  23788d7500abf7340ab20ef598d9da5e  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vzext.c
! f207abf1dfa7b01f923d7ca67d3a6705  gcc/testsuite/gcc.target/riscv/sat/sat_arith.h
  89d90b13c13c2658dcc8319771cd755f  gcc/testsuite/gcc.target/riscv/sat/sat_arith_data.h
  e52f03a6378cd78f7ea04149c2b8215a  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i16.c
  1de70dbaccb7e9fe73b8e90ec7430b4d  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i32.c
--- 105427,105433 ----
  fe865d9009af7551d830f6d4e3008ebe  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vlwu-vsw.c
  10c2fe61483d221e6648e72c6ff9f6a0  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vsext.c
  23788d7500abf7340ab20ef598d9da5e  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vzext.c
! 7f5993e564fd1deec179be34cfaf1a45  gcc/testsuite/gcc.target/riscv/sat/sat_arith.h
  89d90b13c13c2658dcc8319771cd755f  gcc/testsuite/gcc.target/riscv/sat/sat_arith_data.h
  e52f03a6378cd78f7ea04149c2b8215a  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i16.c
  1de70dbaccb7e9fe73b8e90ec7430b4d  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i32.c
*************** b95117157998bc4cde2556bdc83f2f2d  gcc/te
*** 105740,105748 ****
--- 105827,105913 ----
  0895d922976033ead760f3cbb2ba4144  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u8-from-u32.c
  b150a750e4d273b1be4172e71b82dfe0  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u8-from-u64.rv32.c
  fa1107d7a8c2a94f0feef17691300a9f  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u8-from-u64.rv64.c
+ 1d33954bb0e544c5c057ace1b60ca7e7  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u16-from-u128.c
+ 53e4efd01e2ac8bc5ae6b22a9fe04487  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u16-from-u32.c
+ d5b3ded543bb8261ee3e500e9383881b  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u16-from-u64.rv32.c
+ 61c477f97e106886ed61f77459965e5f  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u16-from-u64.rv64.c
+ 58a7320ae79c1b960b6abe5a59c53689  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u32-from-u128.c
+ 96e366a20e1a992ad5b2f21ad46bbc58  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u32-from-u64.rv32.c
+ ebf1c650fd8ead1688a3ddd6bf1a71af  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u32-from-u64.rv64.c
+ 87386bdbd6a09bf2c9953fe490750cb1  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u64-from-u128.c
+ 03b0243085f731f5cae6b503fd154e7a  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u8-from-u128.c
+ bea0df816019641561007597ebce1676  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u8-from-u16.c
+ f455cdfc048e67abb87c69a94138a292  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u8-from-u32.c
+ 44b0e3e672214bf8b1677428933608f6  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u8-from-u64.rv32.c
+ 680f50bef4904af466b285de456c10f1  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u8-from-u64.rv64.c
+ 3baee0c770ceded9bb257d23faa03384  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u16-from-u128.c
+ 328c5ef7d9d640ced6dc3946ad33d236  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u16-from-u32.c
+ 8b308d1b8c89fc35a0bce79c48abb927  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u16-from-u64.rv32.c
+ 9bd29cff3d0506bb55de2fd65d60b12a  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u16-from-u64.rv64.c
+ b7f22fe880455d0b1f75b0003ee3d8a8  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u32-from-u128.c
+ 326176158341d64ad0fed97fffa196cb  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u32-from-u64.rv32.c
+ 1925c2fa636e44377ad8063a5ca98933  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u32-from-u64.rv64.c
+ d2463c3b7aac83d10e995e75b348c800  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u64-from-u128.c
+ 9b5d18566b02719f33815f2e4a01011d  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u8-from-u128.c
+ f25d2a2e2923858fb141152abfe09be8  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u8-from-u16.c
+ 2aa70c0107348124f5774571ff3a6efe  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u8-from-u32.c
+ 704dda731da8560ed62e6f757f4a0404  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u8-from-u64.rv32.c
+ d3c74974a2b0c2672fb0aa6a67ddc757  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u8-from-u64.rv64.c
+ b59a1eeadbfe2af0bbf3bc49b2436773  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u16-from-u128.c
+ f12f65f7cef8a0c28dcffce984bb451f  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u16-from-u32.c
+ f4111c2dae2ad7fe22eaf1db1512a467  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u16-from-u64.rv32.c
+ 312041e6bac7a8e30cd3eb397d8bb8fc  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u16-from-u64.rv64.c
+ b3c5d67542a008430463cc1871acd0ed  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u32-from-u128.c
+ 3909db0032a3e1b369e6a3753f2cc3c0  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u32-from-u64.rv32.c
+ 4d54336923d45f70d4110a29fe0c98b7  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u32-from-u64.rv64.c
+ 425827d2c932acf143d80ee5714cbf9c  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u64-from-u128.c
+ cd04fd79bcef4a2f8d6ecaf70beef1fb  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u8-from-u128.c
+ 64c3f5b4ceda0b5a9b68d22abab66e70  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u8-from-u16.c
+ 2cd3487779bb987aaf4478c99e58fab3  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u8-from-u32.c
+ 60ccb72374e2a20b1ff69668dd248001  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u8-from-u64.rv32.c
+ cd910f26352c023612ea10dbbe999387  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u8-from-u64.rv64.c
+ 12b1dbc3909680312ac28242899a1370  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u16-from-u128.c
+ f5231063afd090d74c3394396dc385da  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u16-from-u32.c
+ 06159f53aa2efdaeee1d62f4d269ce12  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u16-from-u64.rv32.c
+ 18cff8e59136651f89ddf7351fdf0da2  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u16-from-u64.rv64.c
+ da03dc53668ea496c16ed091fa6da519  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u32-from-u128.c
+ 55565cc0b0bcb0cf119faa877cb6fda3  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u32-from-u64.rv32.c
+ 1c58977d6850512d261cc9c0a71738fc  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u32-from-u64.rv64.c
+ 3b4f2d7e168f23be67f4fc48487c9968  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u64-from-u128.c
+ 95e61be05f38243e1991542c4841fe78  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u8-from-u128.c
+ fbd91df7efd4ba052b8221703048a82c  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u8-from-u16.c
+ d17a2d6748e2769b0018543ef954372b  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u8-from-u32.c
+ 6631d03da25ddac1527ad4348cfbda8c  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u8-from-u64.rv32.c
+ 909caf1e756e501e3d0d68aea2753a47  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u8-from-u64.rv64.c
+ a93131b9cfada9cec912ac4b4a8b497d  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u16-from-u128.c
+ e4144da5dc350aa82f63ebe90885c976  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u16-from-u32.c
+ 2f06a721eb3b6176bc1977cf20a7ef10  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u16-from-u64.rv32.c
+ d6cfcf8d5a6e1f69836837aaeb6500eb  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u16-from-u64.rv64.c
+ 38a1be06977a4b3997b839b879587dc6  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u32-from-u128.c
+ 68d2f2314350a6b9843d0f3470cc8e26  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u32-from-u64.rv32.c
+ fac833849ec7601ebdc33c3e03510073  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u32-from-u64.rv64.c
+ e586e64832e5abe1da69c7a80fd5952e  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u64-from-u128.c
+ fd60c691b975e4136114633e0c860f9c  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u8-from-u128.c
+ b55de1925ecfb71a51b9b21aaed709cb  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u8-from-u16.c
+ 3ea74247b676c988a66f4fc03fce15c5  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u8-from-u32.c
+ f6353efc460e1362e85a24c770257e44  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u8-from-u64.rv32.c
+ 593b2e2584beeb1203880436d6bac86a  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u8-from-u64.rv64.c
  251cfaed4fc07574d958d0681d1dfec5  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-2-u16-from-u64.c
  5b0850fbdfe60f0c7b2f6b7451708398  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-2-u32-from-u64.c
  6543eb493f3a5de8524d7043324fb135  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-2-u8-from-u64.c
+ a0be414fb6257676d957acd680957138  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u16-from-u128.c
+ 66bd985ca6ef95517c6f1f327bf28c7a  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u16-from-u32.c
+ 5385ba2c812c6ed20af37a15a5da9018  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u16-from-u64.rv32.c
+ 8e300a55a775dae5f82aea1ec2eee3a1  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u16-from-u64.rv64.c
+ 4406cd0e81a9ed0994f9a9a49d5422d7  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u32-from-u128.c
+ b86cea2ca23ccd9d36d32eb9473876e6  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u32-from-u64.rv32.c
+ cfa90839a22f38026a9de9574efadc3f  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u32-from-u64.rv64.c
+ 20700acc614c561e1280cae6149027b3  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u64-from-u128.c
+ d72bcd51d72c7a34f9393b550a98510c  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u8-from-u128.c
+ 49994cb898a598dde2f185b13585ef19  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u8-from-u16.c
+ 4025e92e43eddb9f8e692c35e345fb47  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u8-from-u32.c
+ 9fb7462fa190c4a11d8dc3d0fd2f8502  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u8-from-u64.rv32.c
+ 653dbc0b4676243b6dd33482ca5df7d4  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u8-from-u64.rv64.c
  3ad49991c16ca99f3ab7d9759757e4f3  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-3-u16.c
  c00ace0b027f7e7b8f7fc73737789f57  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-3-u32.c
  2254754e9f4987daf69ae6a7d18e8ee3  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-3-u64.c
*************** fdd9500fa3b712baf5142fa776cf49a1  gcc/te
*** 105867,105872 ****
--- 106032,106097 ----
  a1f036c2547626e2b3f24e22bba7b348  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u8-from-u16.c
  4b35fc79d94f65ece071283d7aaa42d5  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u8-from-u32.c
  a65501bdd75b62f095b2fad943862a35  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u8-from-u64.c
+ e40f4b1a3fc976906f3bcde915b261f1  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u16-from-u128.c
+ a36210a6a6454491ee98a31d5076ea3f  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u16-from-u32.c
+ 05c01df1f716507191e573d63dac47a4  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u16-from-u64.c
+ f6da593e874fc2165409a22788dd9ca6  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u32-from-u128.c
+ 74703553b5162aa789fd312ca839f8e9  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u32-from-u64.c
+ 0b8ddc79ae7ea88cb7875d3b1c153eaf  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u64-from-u128.c
+ e40f4b1a3fc976906f3bcde915b261f1  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u8-from-u128.c
+ 39b9ef0253e8758f2f8cdb5d0d626439  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u8-from-u16.c
+ c1e0c9f92891d310d1880ce498c1b2e9  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u8-from-u32.c
+ d339b71d9001a84fc50ec118cb483d9d  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u8-from-u64.c
+ 7e3191e24071280f03e7905586ebc74d  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u16-from-u128.c
+ 6454534abc4dd4fddf3a4bf800bd2d10  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u16-from-u32.c
+ 00a36ddc140a7d8e78bc51e21ee41ca8  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u16-from-u64.c
+ c2863842ffe14ff8bc51ed79aad9b7ab  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u32-from-u128.c
+ e28856f3d0a96adfdd3934fb51910e59  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u32-from-u64.c
+ fda31f66586853d66bebafa2fb6408b2  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u64-from-u128.c
+ 7e3191e24071280f03e7905586ebc74d  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u8-from-u128.c
+ 2019012f6e67c798a19799ea9b215cca  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u8-from-u16.c
+ e3fb859f0cc0ebd35dd2602e57f3f8da  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u8-from-u32.c
+ 9f77ad17f5c6ce526a0c200cc7031109  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u8-from-u64.c
+ ab97280614dbdf88be6ee1885601ef73  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u16-from-u128.c
+ 45d17505185cca78922ef86bbedd7f19  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u16-from-u32.c
+ 689b96326707e70dbfd7b1850697c7a4  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u16-from-u64.c
+ caf58d480590b064dc4d62c9198e78cf  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u32-from-u128.c
+ 5129e8c284379a3743eb75c39c2cd8a1  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u32-from-u64.c
+ 7c06bd9cebf6da0ed651ef10b5d4862e  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u64-from-u128.c
+ ab97280614dbdf88be6ee1885601ef73  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u8-from-u128.c
+ 311d7fd4be0860e7db28e54092e61013  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u8-from-u16.c
+ 5871dc6cd57224e1cb9bafd908d3d2a3  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u8-from-u32.c
+ 9ce0cc62578227937cefd75840e0215b  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u8-from-u64.c
+ e888f07ab512140858533f984739c523  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u16-from-u128.c
+ 153f6b8b6f94cb0702deab1fa7ea2415  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u16-from-u32.c
+ a579e6c5326fa00a8ae205831b914deb  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u16-from-u64.c
+ 015430ca42946690203a6689ffe2c8e8  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u32-from-u128.c
+ 2f8cfc8d25e65d6e501e15db85a07d1b  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u32-from-u64.c
+ 572a1183a6be4c8cd4afcea517b02ba9  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u64-from-u128.c
+ e888f07ab512140858533f984739c523  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u8-from-u128.c
+ 8bbef17e7eb04d9e43c9131de5321739  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u8-from-u16.c
+ 87dd21a7a96a5bb226a4cd505afc231d  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u8-from-u32.c
+ 494aa6a4096d27d820af4699b472366a  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u8-from-u64.c
+ 676e099d68899ddbade404a0d06e1cb5  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u16-from-u128.c
+ 7f9c4e63a918a956a659a168b4358645  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u16-from-u32.c
+ 22992002347df922fe9630d014ab5134  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u16-from-u64.c
+ 597b595756d026fcdf1623249a352a1f  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u32-from-u128.c
+ c3e72a4efa58deb7d32b4a3a61582cd0  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u32-from-u64.c
+ 546a30dc512756832950d729778f0a8d  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u64-from-u128.c
+ 676e099d68899ddbade404a0d06e1cb5  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u8-from-u128.c
+ c89158926cbf024591dea6ac5844f606  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u8-from-u16.c
+ 31bc76bbce53f3063bb95bbf161e25ce  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u8-from-u32.c
+ 50fc29399f53cbed770dc8364ea3e5e5  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u8-from-u64.c
+ 8a68f2f620539081fe9e504cb3d5eb6d  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u16-from-u128.c
+ bffeb3ec25c10cc44e726d03385ce56c  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u16-from-u32.c
+ f836cca53664b91103835df7b5509619  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u16-from-u64.c
+ 2027aa2b8469669254ed0dd51f4105c2  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u32-from-u128.c
+ 68b047a41e9641a9bd40e28c316dc08f  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u32-from-u64.c
+ 7870d1a02cf4941db4e3eaa0998a05aa  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u64-from-u128.c
+ 8a68f2f620539081fe9e504cb3d5eb6d  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u8-from-u128.c
+ 28e5488de47531a5df4f1f51b6a32368  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u8-from-u16.c
+ 54622099ad16e6025f252206d622bf1b  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u8-from-u32.c
+ bfcf4642953b67ca9810f6ce5c5baa44  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u8-from-u64.c
  6e4e3e7e8157d61d92fd2d57b879983c  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-3-u16.c
  7c4b9349b8740bc9b8a5febcbb96897c  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-3-u32.c
  4c1f4994dcf2fb5cd55247f60b8383f3  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-3-u64.c
*************** fd162cca32b8c2cfa445df6c13e31c3f  gcc/te
*** 106333,106340 ****
  f25ebf355237e8ce7705dcccdff35a0d  gcc/testsuite/gcc.target/riscv/xandes/xandesperf-8.c
  8c04b3203c8f60387071542a21380de2  gcc/testsuite/gcc.target/riscv/xandes/xandesperf-9.c
  46c65ef5612e82f5d9ee2842af6c427b  gcc/testsuite/gcc.target/riscv/xor-synthesis-1.c
! 857d7c1adabe9cb7d94b5f83613082d2  gcc/testsuite/gcc.target/riscv/xor-synthesis-2.c
  9eb551876f81b7e2201fe6c61dc463a0  gcc/testsuite/gcc.target/riscv/xor-synthesis-3.c
  3a0dce9fff2935c0bd21176ef52d68a3  gcc/testsuite/gcc.target/riscv/xtheadba-addsl.c
  3bfc3f4f2cc9a87e45901bd3aaa79d03  gcc/testsuite/gcc.target/riscv/xtheadba.c
  dbc96b7e417aa40d019fa7730add3692  gcc/testsuite/gcc.target/riscv/xtheadbb-ext-1.c
--- 106558,106566 ----
  f25ebf355237e8ce7705dcccdff35a0d  gcc/testsuite/gcc.target/riscv/xandes/xandesperf-8.c
  8c04b3203c8f60387071542a21380de2  gcc/testsuite/gcc.target/riscv/xandes/xandesperf-9.c
  46c65ef5612e82f5d9ee2842af6c427b  gcc/testsuite/gcc.target/riscv/xor-synthesis-1.c
! c89b8b863e011d42f6182a3b2c4bc589  gcc/testsuite/gcc.target/riscv/xor-synthesis-2.c
  9eb551876f81b7e2201fe6c61dc463a0  gcc/testsuite/gcc.target/riscv/xor-synthesis-3.c
+ 3f3861fc44356e563e99562c7f53541f  gcc/testsuite/gcc.target/riscv/xor-synthesis-4.c
  3a0dce9fff2935c0bd21176ef52d68a3  gcc/testsuite/gcc.target/riscv/xtheadba-addsl.c
  3bfc3f4f2cc9a87e45901bd3aaa79d03  gcc/testsuite/gcc.target/riscv/xtheadba.c
  dbc96b7e417aa40d019fa7730add3692  gcc/testsuite/gcc.target/riscv/xtheadbb-ext-1.c
*************** c5b09d072962be55a3b282895afe41d6  gcc/te
*** 106900,106905 ****
--- 107126,107132 ----
  d49455031d1c0b8c6740f90cf831720a  gcc/testsuite/gcc.target/s390/pr124079.c
  d519a0e6ac82acfc25e0475e29ea6d80  gcc/testsuite/gcc.target/s390/pr125972.c
  86e19acef61e2b484623df454673168e  gcc/testsuite/gcc.target/s390/pr125992.c
+ 6280213261c923c72d3fdadfb7a04e12  gcc/testsuite/gcc.target/s390/pr126054.c
  765307a040de72f2f4376b7068d68018  gcc/testsuite/gcc.target/s390/pr20927.c
  85f31fb9b4b15529205376d3f6fa385c  gcc/testsuite/gcc.target/s390/pr24624.c
  7adacbd67601dc0845e556e5632cd718  gcc/testsuite/gcc.target/s390/pr27661.c
*************** d5753d3f6bf92409af4a8ed1584a9000  gcc/te
*** 107476,107481 ****
--- 107703,107710 ----
  ae8390e15b5eaf5fd9c40f8bb42c7724  gcc/testsuite/gcc.target/sh/memset.c
  cdd0e79dc0c4fb2425cf6753e465a85e  gcc/testsuite/gcc.target/sh/mfmovd.c
  9b3b2f0ae0e623bcfdf99761d1dad634  gcc/testsuite/gcc.target/sh/pr111814.c
+ 9b316078f1d5f0f08e4b0ba1a7d04b8c  gcc/testsuite/gcc.target/sh/pr116709.c
+ e0c2175829f132bf44d0a7d6f8cf419f  gcc/testsuite/gcc.target/sh/pr122948.c
  9439f7da71328f8113b757d9c4130319  gcc/testsuite/gcc.target/sh/pr21255-1.c
  de6f77c59627b198d6e5048192e2f128  gcc/testsuite/gcc.target/sh/pr21255-2-mb.c
  475ae84e95ba85931d38a06a5d6f12f8  gcc/testsuite/gcc.target/sh/pr21255-2-ml.c
*************** f01a6228581302d6d97b59085e8b8b1a  gcc/te
*** 107590,107596 ****
  6eb5add3ca1c643966e1cb503a52ead4  gcc/testsuite/gcc.target/sh/pr54760-6.c
  591dd31cc0ab14f1cf2e4efd0c73a6c2  gcc/testsuite/gcc.target/sh/pr55146.c
  f347bb22f41ec16d4bc6301927325f40  gcc/testsuite/gcc.target/sh/pr55160.c
- b7884938bd707424792dbcdd54c246cb  gcc/testsuite/gcc.target/sh/pr55212-c248.c
  8f717e44414a43985e9764ae6fd48b44  gcc/testsuite/gcc.target/sh/pr55303-1.c
  e1ee5790a1ff9502dcff1b9d308673c5  gcc/testsuite/gcc.target/sh/pr55303-2.c
  2e2164e7dcbf7f288bb8b6c95f7c502d  gcc/testsuite/gcc.target/sh/pr55303-3.c
--- 107819,107824 ----
*************** d3b27c220a0e1aa87b3cf870405b3ef5  gcc/te
*** 107607,107613 ****
  6f228716f948f58d78ffb0745b9c2589  gcc/testsuite/gcc.target/sh/pr63260.c
  dd022a0242724a06db264d6e13982998  gcc/testsuite/gcc.target/sh/pr64345-1.c
  a478446811d6b979a18a17f4ff64901e  gcc/testsuite/gcc.target/sh/pr64345-2.c
! 9e779eeef37eec7be469b401bae49c51  gcc/testsuite/gcc.target/sh/pr64366.c
  bb9e1708fea25409b27471e2af1254de  gcc/testsuite/gcc.target/sh/pr64507.c
  1682e3ee6996c505844b05871700df46  gcc/testsuite/gcc.target/sh/pr64659-0.h
  06f31612372bd44eff059fbab6d26af6  gcc/testsuite/gcc.target/sh/pr64659-1.c
--- 107835,107841 ----
  6f228716f948f58d78ffb0745b9c2589  gcc/testsuite/gcc.target/sh/pr63260.c
  dd022a0242724a06db264d6e13982998  gcc/testsuite/gcc.target/sh/pr64345-1.c
  a478446811d6b979a18a17f4ff64901e  gcc/testsuite/gcc.target/sh/pr64345-2.c
! 109b52768d19a9d58475abdbf8d61d4c  gcc/testsuite/gcc.target/sh/pr64366.c
  bb9e1708fea25409b27471e2af1254de  gcc/testsuite/gcc.target/sh/pr64507.c
  1682e3ee6996c505844b05871700df46  gcc/testsuite/gcc.target/sh/pr64659-0.h
  06f31612372bd44eff059fbab6d26af6  gcc/testsuite/gcc.target/sh/pr64659-1.c
*************** bb895226639a1aae7be7b56a7158df50  gcc/te
*** 107631,107638 ****
--- 107859,107869 ----
  2da472b9bfaf29fde692817c5612e075  gcc/testsuite/gcc.target/sh/pr64851-3.c
  7cf900944e15c19b0347cf838fc4aa68  gcc/testsuite/gcc.target/sh/pr64851-4.c
  1e560b149f127fbbe8e19a0786737e83  gcc/testsuite/gcc.target/sh/pr6526.c
+ 9c887b4086468f2d6fe1a5f3153cecd0  gcc/testsuite/gcc.target/sh/pr67643.c
  96ccc21c08a032884c88704b49d3a916  gcc/testsuite/gcc.target/sh/pr67675.c
  954cde0ffb96f31618f11766e0a02713  gcc/testsuite/gcc.target/sh/pr67731.c
+ 0aa42c5160cd4f7661898c3072958d40  gcc/testsuite/gcc.target/sh/pr69765.c
+ 0af75824ce8bb345fecac455b7c60805  gcc/testsuite/gcc.target/sh/pr81426.c
  3f7b73faf0fd1d90a4ea83808baabeda  gcc/testsuite/gcc.target/sh/pragma-isr-nosave_low_regs.c
  4f89e60f52b3ae8a20bde13055248307  gcc/testsuite/gcc.target/sh/pragma-isr-trap-exit.c
  db7a02bef0ea1d74a99297c9ee53c525  gcc/testsuite/gcc.target/sh/pragma-isr-trapa.c
*************** e73ba4d84a9f02f6e0c6433ac235ab7e  gcc/te
*** 107666,107676 ****
--- 107897,107912 ----
  70c60836d8100e4506408acd72b3fc1a  gcc/testsuite/gcc.target/sh/sp-switch.c
  efede2d1d5cccacefc4de5c919a14b01  gcc/testsuite/gcc.target/sh/strlen.c
  43057b515a1223c909e830f8f7068e1d  gcc/testsuite/gcc.target/sh/struct-arg-dw2.c
+ af8daf454ca121a7d21450eb8c796f95  gcc/testsuite/gcc.target/sh/torture/pr124778.c
  c420e8b5d1ad1e97bdbdadc212460a15  gcc/testsuite/gcc.target/sh/torture/pr17280.c
  e3304fa443d00dfb07ed96db3d7d911f  gcc/testsuite/gcc.target/sh/torture/pr30807.c
+ a5c0dd2e3d6e9a745dd0277882f65be7  gcc/testsuite/gcc.target/sh/torture/pr34777-1.c
  4c34097afd7b286028be7f7030fd597e  gcc/testsuite/gcc.target/sh/torture/pr34777.c
+ 3a2da0bb9c8802695a03090ef5a8797a  gcc/testsuite/gcc.target/sh/torture/pr55212-c248.c
+ 12d5420eb47721cee90975f5f01a13e6  gcc/testsuite/gcc.target/sh/torture/pr55212-c421.c
  5725e63ece230916d5eea624780c3d16  gcc/testsuite/gcc.target/sh/torture/pr55212-c464-1.c
  b1da7e8cb592c67d2bf91767319694df  gcc/testsuite/gcc.target/sh/torture/pr55212-c464-2.c
+ 382d79c0530cc450243a699f39bb6f77  gcc/testsuite/gcc.target/sh/torture/pr55212-c464-3.c
  d30d38c361043cbed33b4eb6d83b5657  gcc/testsuite/gcc.target/sh/torture/pr58314-2.c
  ea4b84c2a1538fdea01a68123c548440  gcc/testsuite/gcc.target/sh/torture/pr58314.c
  ea51469597a5cfee0e33fc77f92446d0  gcc/testsuite/gcc.target/sh/torture/pr58475.c
*************** e9f58df1de071d2b106b16b3af8f6764  gcc/te
*** 113615,113620 ****
--- 113851,113858 ----
  f3a2f2d532dfb58980122e4734146c0d  gcc/testsuite/gfortran.dg/asan/assumed_rank_26.f90
  32f63bfc5a1fd9dda988b63c860b03bd  gcc/testsuite/gfortran.dg/asan/finalize_1.f90
  08c0f919c44721b560036c804b8f4611  gcc/testsuite/gfortran.dg/asan/implied_do_alloc_comp_leak_1.f90
+ 9eba046ceaeb1b5d2ac8d3687c32b0a8  gcc/testsuite/gfortran.dg/asan/pdt_46.f03
+ 456fa5e42fccf2e35cf281b0aec14ef5  gcc/testsuite/gfortran.dg/asan/pdt_77.f03
  66de6cb3bf07d14487491fac7d1ee72f  gcc/testsuite/gfortran.dg/asan/pointer_assign_16.f90
  68c306b7235f43b669fee04a590362d9  gcc/testsuite/gfortran.dg/asan/pr110415-2.f90
  5ba36953a293a48947580de915906563  gcc/testsuite/gfortran.dg/asan/pr110415-3.f90
*************** cb50185eaf87f5357dad5873642eec33  gcc/te
*** 115165,115170 ****
--- 115403,115409 ----
  52a454e4516aaff2011d2696c96ca5ab  gcc/testsuite/gfortran.dg/contiguous_14.f90
  8621637c284842966acb59cdbfe4e51a  gcc/testsuite/gfortran.dg/contiguous_15.f90
  ffb54aced92284f6168ef0953f0396ea  gcc/testsuite/gfortran.dg/contiguous_16.f90
+ dc2299cf4c7a62af39c55807bb5e6d36  gcc/testsuite/gfortran.dg/contiguous_17.f90
  9975df3f787a3eaea63dd5664ff235eb  gcc/testsuite/gfortran.dg/contiguous_2.f90
  a59d0430a52a3cf47c280856725dee23  gcc/testsuite/gfortran.dg/contiguous_3.f90
  b81d56e35fe81ed4c9f6f67cca8a0ab2  gcc/testsuite/gfortran.dg/contiguous_4.f90
*************** b2a15eb44cc92a12d36531f8567b9335  gcc/te
*** 116758,116764 ****
  d1682241b0b1d37b06e65589cfa2336f  gcc/testsuite/gfortran.dg/gomp/all-memory-2.f90
  794c06e7ccb0401f5586d816e30cad08  gcc/testsuite/gfortran.dg/gomp/all-memory-3.f90
  5633756a662441452bd869456e985808  gcc/testsuite/gfortran.dg/gomp/allocatable_components_1.f90
! d8f891883879b40925714053d72765b2  gcc/testsuite/gfortran.dg/gomp/allocate-1.f90
  3655e2bfbc27b6480f578394283a4521  gcc/testsuite/gfortran.dg/gomp/allocate-10.f90
  764ec26a5a5268118b6c17514735371a  gcc/testsuite/gfortran.dg/gomp/allocate-11.f90
  8594f381e1344c5f1587ee1f8c22ed77  gcc/testsuite/gfortran.dg/gomp/allocate-12.f90
--- 116997,117003 ----
  d1682241b0b1d37b06e65589cfa2336f  gcc/testsuite/gfortran.dg/gomp/all-memory-2.f90
  794c06e7ccb0401f5586d816e30cad08  gcc/testsuite/gfortran.dg/gomp/all-memory-3.f90
  5633756a662441452bd869456e985808  gcc/testsuite/gfortran.dg/gomp/allocatable_components_1.f90
! 0c4c9585870ed87d82a81cf07a2e7a45  gcc/testsuite/gfortran.dg/gomp/allocate-1.f90
  3655e2bfbc27b6480f578394283a4521  gcc/testsuite/gfortran.dg/gomp/allocate-10.f90
  764ec26a5a5268118b6c17514735371a  gcc/testsuite/gfortran.dg/gomp/allocate-11.f90
  8594f381e1344c5f1587ee1f8c22ed77  gcc/testsuite/gfortran.dg/gomp/allocate-12.f90
*************** ae1839837ca664fa39559a7e703441e7  gcc/te
*** 117336,117342 ****
  c7709e0ef8d893a3fa9d2e893d1cb1a7  gcc/testsuite/gfortran.dg/gomp/scope-1.f90
  6d5ecca1c74a442d5b324bc5e3b1524a  gcc/testsuite/gfortran.dg/gomp/scope-2.f90
  c4ea98725e5c211b45cc9e83b4dca2be  gcc/testsuite/gfortran.dg/gomp/scope-5.f90
! 70cbd3f99d5ec34e89e7f2fb12f0938e  gcc/testsuite/gfortran.dg/gomp/scope-6.f90
  79dfa2e9e4441b4f7baa74120274ac19  gcc/testsuite/gfortran.dg/gomp/sharing-1.f90
  9dd19a9e9dfc0e4a98f98e8a7fc69049  gcc/testsuite/gfortran.dg/gomp/sharing-2.f90
  fc64cb37c3738dda4203d0b7f045abdc  gcc/testsuite/gfortran.dg/gomp/sharing-3.f90
--- 117575,117581 ----
  c7709e0ef8d893a3fa9d2e893d1cb1a7  gcc/testsuite/gfortran.dg/gomp/scope-1.f90
  6d5ecca1c74a442d5b324bc5e3b1524a  gcc/testsuite/gfortran.dg/gomp/scope-2.f90
  c4ea98725e5c211b45cc9e83b4dca2be  gcc/testsuite/gfortran.dg/gomp/scope-5.f90
! b5986a53328bb489154897146dcfa806  gcc/testsuite/gfortran.dg/gomp/scope-6.f90
  79dfa2e9e4441b4f7baa74120274ac19  gcc/testsuite/gfortran.dg/gomp/sharing-1.f90
  9dd19a9e9dfc0e4a98f98e8a7fc69049  gcc/testsuite/gfortran.dg/gomp/sharing-2.f90
  fc64cb37c3738dda4203d0b7f045abdc  gcc/testsuite/gfortran.dg/gomp/sharing-3.f90
*************** bec2533e5df9f9752162a8a81cc206d2  gcc/te
*** 119056,119066 ****
  26458fabdc3fb974b6ac96e29effd590  gcc/testsuite/gfortran.dg/pdt_43.f03
  c81eb638a36b687e5dc5d831b100a2ae  gcc/testsuite/gfortran.dg/pdt_44.f03
  21fba33fca53db94c9d9c501ea7a1a0d  gcc/testsuite/gfortran.dg/pdt_45.f03
! 3d693f5ae134fee41983008264ef3bb0  gcc/testsuite/gfortran.dg/pdt_46.f03
  743c13d00cb00139a1f209ced4c4ee65  gcc/testsuite/gfortran.dg/pdt_47.f03
  6300d0e63eabdd0e66d6748d290dfdd3  gcc/testsuite/gfortran.dg/pdt_48.f03
  b89a8aa7030c869fe0210fab0f943107  gcc/testsuite/gfortran.dg/pdt_49.f03
! 76d2005236b1088d103403938267e6e3  gcc/testsuite/gfortran.dg/pdt_50.f03
  1888f05e005525e88931abedd8a19054  gcc/testsuite/gfortran.dg/pdt_51.f03
  7d90ca2b7f479f61fde636fdfc7de7a4  gcc/testsuite/gfortran.dg/pdt_52.f03
  2704deb60c31f295fd0ec82e8b4a8bef  gcc/testsuite/gfortran.dg/pdt_53.f03
--- 119295,119305 ----
  26458fabdc3fb974b6ac96e29effd590  gcc/testsuite/gfortran.dg/pdt_43.f03
  c81eb638a36b687e5dc5d831b100a2ae  gcc/testsuite/gfortran.dg/pdt_44.f03
  21fba33fca53db94c9d9c501ea7a1a0d  gcc/testsuite/gfortran.dg/pdt_45.f03
! 5a7c933ab35c415f00dc427670b15fbe  gcc/testsuite/gfortran.dg/pdt_46.f03
  743c13d00cb00139a1f209ced4c4ee65  gcc/testsuite/gfortran.dg/pdt_47.f03
  6300d0e63eabdd0e66d6748d290dfdd3  gcc/testsuite/gfortran.dg/pdt_48.f03
  b89a8aa7030c869fe0210fab0f943107  gcc/testsuite/gfortran.dg/pdt_49.f03
! ec5b5ce46c4f53be5e910da096d6ae69  gcc/testsuite/gfortran.dg/pdt_50.f03
  1888f05e005525e88931abedd8a19054  gcc/testsuite/gfortran.dg/pdt_51.f03
  7d90ca2b7f479f61fde636fdfc7de7a4  gcc/testsuite/gfortran.dg/pdt_52.f03
  2704deb60c31f295fd0ec82e8b4a8bef  gcc/testsuite/gfortran.dg/pdt_53.f03
*************** c05f9d42843923ff0207255c3c60c7eb  gcc/te
*** 119082,119088 ****
  a5f0e5f6d1a0cf4437ef6c2b7d002852  gcc/testsuite/gfortran.dg/pdt_68.f03
  3444ff42a2ca850ccc8b0a46fec4a950  gcc/testsuite/gfortran.dg/pdt_69.f03
  d2c9dae0c6e2385c5712aba8e12a70ba  gcc/testsuite/gfortran.dg/pdt_7.f03
! eadd9a59a070a2b3455cb8918d9cbed1  gcc/testsuite/gfortran.dg/pdt_70.f03
  70790cc3e59c68bac699d7f64450affc  gcc/testsuite/gfortran.dg/pdt_71.f03
  e60c95d1e5b5c7e5f4c5c95f09cb14e5  gcc/testsuite/gfortran.dg/pdt_72.f03
  c6f893cb449a80625f83167f1ff5ba51  gcc/testsuite/gfortran.dg/pdt_73.f03
--- 119321,119327 ----
  a5f0e5f6d1a0cf4437ef6c2b7d002852  gcc/testsuite/gfortran.dg/pdt_68.f03
  3444ff42a2ca850ccc8b0a46fec4a950  gcc/testsuite/gfortran.dg/pdt_69.f03
  d2c9dae0c6e2385c5712aba8e12a70ba  gcc/testsuite/gfortran.dg/pdt_7.f03
! 63a3d073f8256447298c88667f00ce8a  gcc/testsuite/gfortran.dg/pdt_70.f03
  70790cc3e59c68bac699d7f64450affc  gcc/testsuite/gfortran.dg/pdt_71.f03
  e60c95d1e5b5c7e5f4c5c95f09cb14e5  gcc/testsuite/gfortran.dg/pdt_72.f03
  c6f893cb449a80625f83167f1ff5ba51  gcc/testsuite/gfortran.dg/pdt_73.f03
*************** f6695b4fb594606f02af64d62e1c0b75  gcc/te
*** 119099,119105 ****
  563711530085cf404f4c3314b360a937  gcc/testsuite/gfortran.dg/pdt_83.f03
  b4209f9f96c7dd6b54f255bf23c1dc15  gcc/testsuite/gfortran.dg/pdt_84.f03
  874410c75a218763c32521b445ecf6f0  gcc/testsuite/gfortran.dg/pdt_85.f03
! 2ca21ac09e6b30c6b75c52a6caaa7b45  gcc/testsuite/gfortran.dg/pdt_86.f03
  549d910fb6edbb2f39bd52042f69ba19  gcc/testsuite/gfortran.dg/pdt_87.f03
  f545f62c1e71dc7bd67638aeeb2db587  gcc/testsuite/gfortran.dg/pdt_88.f03
  9a4d72f9f692366ff871a56578313f20  gcc/testsuite/gfortran.dg/pdt_89.f03
--- 119338,119345 ----
  563711530085cf404f4c3314b360a937  gcc/testsuite/gfortran.dg/pdt_83.f03
  b4209f9f96c7dd6b54f255bf23c1dc15  gcc/testsuite/gfortran.dg/pdt_84.f03
  874410c75a218763c32521b445ecf6f0  gcc/testsuite/gfortran.dg/pdt_85.f03
! a374a096c7aea039d58eafb46a332bea  gcc/testsuite/gfortran.dg/pdt_86.f03
! bc6fae1f171bea09df92151d85a33b72  gcc/testsuite/gfortran.dg/pdt_86_reduced.f90
  549d910fb6edbb2f39bd52042f69ba19  gcc/testsuite/gfortran.dg/pdt_87.f03
  f545f62c1e71dc7bd67638aeeb2db587  gcc/testsuite/gfortran.dg/pdt_88.f03
  9a4d72f9f692366ff871a56578313f20  gcc/testsuite/gfortran.dg/pdt_89.f03
*************** c41bc69547a048a19ccb1adc57ce3bca  gcc/te
*** 119942,119947 ****
--- 120182,120188 ----
  e6d08fa65e9eb602b71f0e6a8b44a739  gcc/testsuite/gfortran.dg/pr84245.f90
  12af81a97aa86950b63e458f115e45c9  gcc/testsuite/gfortran.dg/pr84523.f90
  6d593814cbde3b81eb21e9501a48bac2  gcc/testsuite/gfortran.dg/pr84565.f90
+ 23d909fba08deae58c21a82df25e2f37  gcc/testsuite/gfortran.dg/pr84622.f90
  4cf62650961664b3e4bce16d177b5929  gcc/testsuite/gfortran.dg/pr84674.f90
  7cb3611bc701529711c1f596921afaa3  gcc/testsuite/gfortran.dg/pr84734.f90
  393795c1c91adc9f5adfd59c5ef5c172  gcc/testsuite/gfortran.dg/pr84779.f90
*************** eda033d11dfa20d82831e890722e7b13  gcc/te
*** 121012,121017 ****
--- 121253,121259 ----
  f17455bb508dcbb651b90b9ad85f6568  gcc/testsuite/gfortran.dg/stop_2.f
  14ed2a053c297aad56eb76ec48c1c0b5  gcc/testsuite/gfortran.dg/stop_3.f90
  3bf9babfd6f71221612abdea43e8413a  gcc/testsuite/gfortran.dg/stop_4.f90
+ 180b0b068207324b96b1cb4a0ef17cc0  gcc/testsuite/gfortran.dg/stop_function_code_1.f90
  ccb214601d7acab9a7a82e97b469c0c1  gcc/testsuite/gfortran.dg/stop_shouldfail.f90
  34548104ff9657cfd8eb971e0dad58e7  gcc/testsuite/gfortran.dg/storage_size_1.f08
  d05a12266ad47ee1cc684d7801d940a9  gcc/testsuite/gfortran.dg/storage_size_2.f08
*************** b2d90ce8d289d98767f7cc8b5ac0c821  gcc/te
*** 121774,121779 ****
--- 122016,122023 ----
  cb57540320d67acb41e7efaa7ba125d0  gcc/testsuite/gfortran.dg/warn_undefined_vars_2.f90
  56a3a5f8ff51a24ce353221e7324130b  gcc/testsuite/gfortran.dg/warn_undefined_vars_3.f90
  15546f4c6b4226c2e0d73ba60c0a5549  gcc/testsuite/gfortran.dg/warn_undefined_vars_4.f90
+ 75a12bce6dc3b8017a6e27c8207cbc31  gcc/testsuite/gfortran.dg/warn_undefined_vars_5.f90
+ ba0b6c81a0568ef939fdc05f16873c8c  gcc/testsuite/gfortran.dg/warn_undefined_vars_6.f90
  0018d0733d18a0f47c6da784c3973fb6  gcc/testsuite/gfortran.dg/warn_unused_but_set_1.f90
  822b5613939ca362acee8780262f85b3  gcc/testsuite/gfortran.dg/warn_unused_but_set_error_1.f90
  c259ba3b6590fa830ea50bba33344f9a  gcc/testsuite/gfortran.dg/warn_unused_but_set_variable_2.f90
*************** b639e95e2056957733aa779c0c757061  gcc/te
*** 125858,125863 ****
--- 126102,126110 ----
  af8caf054e9f24dae035badef90a8f2a  gcc/testsuite/gnat.dg/opt108.adb
  da70c6518095833df6c7b3cb03570cb2  gcc/testsuite/gnat.dg/opt108_pkg.adb
  ba997a6963d1723f3440798cec09d743  gcc/testsuite/gnat.dg/opt108_pkg.ads
+ 58aec5360cf6a7b787c344047abb0637  gcc/testsuite/gnat.dg/opt109.adb
+ 7c6f5264be5a2438f87e319fc58ca591  gcc/testsuite/gnat.dg/opt109_pkg.adb
+ 19461c2aa80ebf366c6f7b7741747348  gcc/testsuite/gnat.dg/opt109_pkg.ads
  5d50fb38b1ab84c39760906cb103c522  gcc/testsuite/gnat.dg/opt10_pkg.ads
  603264d4afdd2fd2174ea9c4cf4653ed  gcc/testsuite/gnat.dg/opt11.adb
  53160585b3a5d820b653e1e0d5f14c75  gcc/testsuite/gnat.dg/opt11.ads
*************** de9eeadec9703aff96169206e31a3a22  gcc/te
*** 129460,129466 ****
  275f7eb9618e6b097a58c1fba25cdb9c  gcc/testsuite/lib/scanwpaipa.exp
  9bc4cbcf0cb4f1aa30a8cf3142d157eb  gcc/testsuite/lib/target-libpath.exp
  6f6a566231f79b409eb113cf2e7f5132  gcc/testsuite/lib/target-supports-dg.exp
! a2a82ddbb4e3a5c8e4e622b4faec14a2  gcc/testsuite/lib/target-supports.exp
  b1eb2edcf4941bfb00c200eb000a0a7b  gcc/testsuite/lib/target-utils.exp
  98b890f6c455deafd6ca241993fc5d67  gcc/testsuite/lib/timeout-dg.exp
  0afb0c69501fa44908d13017be208db3  gcc/testsuite/lib/timeout.exp
--- 129707,129713 ----
  275f7eb9618e6b097a58c1fba25cdb9c  gcc/testsuite/lib/scanwpaipa.exp
  9bc4cbcf0cb4f1aa30a8cf3142d157eb  gcc/testsuite/lib/target-libpath.exp
  6f6a566231f79b409eb113cf2e7f5132  gcc/testsuite/lib/target-supports-dg.exp
! 145890915d71a1318ba73a4edb5d7620  gcc/testsuite/lib/target-supports.exp
  b1eb2edcf4941bfb00c200eb000a0a7b  gcc/testsuite/lib/target-utils.exp
  98b890f6c455deafd6ca241993fc5d67  gcc/testsuite/lib/timeout-dg.exp
  0afb0c69501fa44908d13017be208db3  gcc/testsuite/lib/timeout.exp
*************** cf495a272fe911f953544354d7af49e2  gcc/te
*** 130104,130110 ****
  febafb5ceeb1b769535d7b08ef9e8445  gcc/testsuite/objc.dg/has-feature.m
  6610c198e68db214bca9de5a0f6cfdec  gcc/testsuite/objc.dg/headers.m
  ee5085162cebc7a8efb9f3fb24b90cb1  gcc/testsuite/objc.dg/id-1.m
! 697c9889104dbd42200e3eaeb739692d  gcc/testsuite/objc.dg/image-info.m
  99315e3705c0a7956113586fc894eb1f  gcc/testsuite/objc.dg/incomplete-type-1.m
  8d395da4c7f0e34e6d1b71409c8d6329  gcc/testsuite/objc.dg/instancetype-0.m
  7965f2dab76d401f8398a30bcae85653  gcc/testsuite/objc.dg/invalid-method-1.m
--- 130351,130357 ----
  febafb5ceeb1b769535d7b08ef9e8445  gcc/testsuite/objc.dg/has-feature.m
  6610c198e68db214bca9de5a0f6cfdec  gcc/testsuite/objc.dg/headers.m
  ee5085162cebc7a8efb9f3fb24b90cb1  gcc/testsuite/objc.dg/id-1.m
! e18b60abb292beb1a0a9ffbab2552319  gcc/testsuite/objc.dg/image-info.m
  99315e3705c0a7956113586fc894eb1f  gcc/testsuite/objc.dg/incomplete-type-1.m
  8d395da4c7f0e34e6d1b71409c8d6329  gcc/testsuite/objc.dg/instancetype-0.m
  7965f2dab76d401f8398a30bcae85653  gcc/testsuite/objc.dg/invalid-method-1.m
*************** a4340dde4019e28f9fad54b2a7770c74  gcc/tr
*** 132275,132281 ****
  330c89392efb47062df1e82fff7ef01d  gcc/tree-affine.cc
  ed70c897fa5690940494f2b8b6e27f21  gcc/tree-affine.h
  80bb689c790bf8a20a1604f1fb450d2e  gcc/tree-assume.cc
! a0c02d542dbd50cb44704b2ffce2739c  gcc/tree-call-cdce.cc
  7e71a9607cb07b71df80b2c61aa198a8  gcc/tree-cfg.cc
  809e1f07de4be5a3fc990f66bd6d1105  gcc/tree-cfg.h
  930348a0e01a15c999f55d255a5b9f42  gcc/tree-cfgcleanup.cc
--- 132522,132528 ----
  330c89392efb47062df1e82fff7ef01d  gcc/tree-affine.cc
  ed70c897fa5690940494f2b8b6e27f21  gcc/tree-affine.h
  80bb689c790bf8a20a1604f1fb450d2e  gcc/tree-assume.cc
! 256b77a135d2615eb0f9808933a9b462  gcc/tree-call-cdce.cc
  7e71a9607cb07b71df80b2c61aa198a8  gcc/tree-cfg.cc
  809e1f07de4be5a3fc990f66bd6d1105  gcc/tree-cfg.h
  930348a0e01a15c999f55d255a5b9f42  gcc/tree-cfgcleanup.cc
*************** fe7cb8d01db48420c7b2914863f3580c  gcc/tr
*** 132325,132342 ****
  d370934f01e7c80fa4e88a80fabbcb95  gcc/tree-phinodes.h
  e955b77da9f61f19437f61d65861e763  gcc/tree-predcom.cc
  47856333edaecc32813dad93ecb96fbe  gcc/tree-pretty-print-markup.h
! d888f11a2d3c6e726662788b30484217  gcc/tree-pretty-print.cc
  c021bc7a8aa59f2b8184de8bff6b1d14  gcc/tree-pretty-print.h
  fb27a9c19b7277714515baa728b01a3e  gcc/tree-profile.cc
  a5d549b577480d9f00caa8fb844f28dc  gcc/tree-scalar-evolution.cc
  0ac41331ad8cbe754ee005d5ef9aff94  gcc/tree-scalar-evolution.h
  c3b5af33118e23a3f3b653f87a6181d3  gcc/tree-sra.cc
  3c8e89a03a1e2e77a99e5b05bb2976ae  gcc/tree-sra.h
! 39f64c2e1c6ae742ac610f096aa9e013  gcc/tree-ssa-address.cc
  2cc8f7ab186c793b91875224ed16edc6  gcc/tree-ssa-address.h
  bcc14a4de2b37f6c98080d60cd3a2c36  gcc/tree-ssa-alias-compare.h
! 644f6e23e1ad9eb6167ad0f8f072437c  gcc/tree-ssa-alias.cc
! 05510947cfea397a44870db7a92b253c  gcc/tree-ssa-alias.h
  7ea04656ca71cfab9d92b5810abd6687  gcc/tree-ssa-ccp.cc
  00bd4ac9fa4538263509ec504e606320  gcc/tree-ssa-ccp.h
  b36c3bd52f9df56746196a0cf2b3ac14  gcc/tree-ssa-coalesce.cc
--- 132572,132589 ----
  d370934f01e7c80fa4e88a80fabbcb95  gcc/tree-phinodes.h
  e955b77da9f61f19437f61d65861e763  gcc/tree-predcom.cc
  47856333edaecc32813dad93ecb96fbe  gcc/tree-pretty-print-markup.h
! 7e047cc8a5cfdc1db70f3b2bedf457b6  gcc/tree-pretty-print.cc
  c021bc7a8aa59f2b8184de8bff6b1d14  gcc/tree-pretty-print.h
  fb27a9c19b7277714515baa728b01a3e  gcc/tree-profile.cc
  a5d549b577480d9f00caa8fb844f28dc  gcc/tree-scalar-evolution.cc
  0ac41331ad8cbe754ee005d5ef9aff94  gcc/tree-scalar-evolution.h
  c3b5af33118e23a3f3b653f87a6181d3  gcc/tree-sra.cc
  3c8e89a03a1e2e77a99e5b05bb2976ae  gcc/tree-sra.h
! 6b789908da4ef6b57b1873aeeb83ab62  gcc/tree-ssa-address.cc
  2cc8f7ab186c793b91875224ed16edc6  gcc/tree-ssa-address.h
  bcc14a4de2b37f6c98080d60cd3a2c36  gcc/tree-ssa-alias-compare.h
! 78500dfd45dcc7b2b824b07df922c1c0  gcc/tree-ssa-alias.cc
! fe34bf127e446b91dd107c83db0ab4e5  gcc/tree-ssa-alias.h
  7ea04656ca71cfab9d92b5810abd6687  gcc/tree-ssa-ccp.cc
  00bd4ac9fa4538263509ec504e606320  gcc/tree-ssa-ccp.h
  b36c3bd52f9df56746196a0cf2b3ac14  gcc/tree-ssa-coalesce.cc
*************** df4e4238b30ad2c7205810ae235106fa  gcc/tr
*** 132348,132354 ****
  ec31925fe8431d27258939fc79f1f02e  gcc/tree-ssa-dom.h
  ec4fb47e62593f549e393a7e359eab42  gcc/tree-ssa-dse.cc
  1df01d660e0f98ade0ae7a3152aa33ed  gcc/tree-ssa-dse.h
! fd1bf671e636cb196f153568d80a7481  gcc/tree-ssa-forwprop.cc
  08b268d14a31ab5a2dcca17ab4a0afbd  gcc/tree-ssa-ifcombine.cc
  417a76837cd2f895f07d02485a3cdffe  gcc/tree-ssa-ifcombine.h
  b1c1f1362ac401ede3373f8aa23c02f1  gcc/tree-ssa-live.cc
--- 132595,132601 ----
  ec31925fe8431d27258939fc79f1f02e  gcc/tree-ssa-dom.h
  ec4fb47e62593f549e393a7e359eab42  gcc/tree-ssa-dse.cc
  1df01d660e0f98ade0ae7a3152aa33ed  gcc/tree-ssa-dse.h
! 39fd2c7bebbe9a6685673a75adf2075d  gcc/tree-ssa-forwprop.cc
  08b268d14a31ab5a2dcca17ab4a0afbd  gcc/tree-ssa-ifcombine.cc
  417a76837cd2f895f07d02485a3cdffe  gcc/tree-ssa-ifcombine.h
  b1c1f1362ac401ede3373f8aa23c02f1  gcc/tree-ssa-live.cc
*************** b1c1f1362ac401ede3373f8aa23c02f1  gcc/tr
*** 132356,132365 ****
  8810d451bbe1958d41d972bc0224c156  gcc/tree-ssa-loop-ch.cc
  f1057b330ee10c6234f1f927ffba2f4d  gcc/tree-ssa-loop-im.cc
  972578d2900bb38415f9eb02b271096c  gcc/tree-ssa-loop-ivcanon.cc
! 1bcce7949ea1ff7322a6dfc3db7e7755  gcc/tree-ssa-loop-ivopts.cc
  73db7c26eb3c2afa63524b388a9849fd  gcc/tree-ssa-loop-ivopts.h
! 9c2771407c6cb32b3d230d8b3c87a2b8  gcc/tree-ssa-loop-manip.cc
! d6013c7f2ea70d40b0d82c53eacccd45  gcc/tree-ssa-loop-manip.h
  2a09600087431bdcc8a3257287be029c  gcc/tree-ssa-loop-niter.cc
  4b19cd267d749c27d7e2b616b46fe8d6  gcc/tree-ssa-loop-niter.h
  1b3164ae2d55cbf742ebf0774d0106cf  gcc/tree-ssa-loop-prefetch.cc
--- 132603,132612 ----
  8810d451bbe1958d41d972bc0224c156  gcc/tree-ssa-loop-ch.cc
  f1057b330ee10c6234f1f927ffba2f4d  gcc/tree-ssa-loop-im.cc
  972578d2900bb38415f9eb02b271096c  gcc/tree-ssa-loop-ivcanon.cc
! 308323e045a628302bd95db1c98c32f9  gcc/tree-ssa-loop-ivopts.cc
  73db7c26eb3c2afa63524b388a9849fd  gcc/tree-ssa-loop-ivopts.h
! f084337b877c38fa179ae0f14738ee83  gcc/tree-ssa-loop-manip.cc
! 035c28a41f0d6337f42b24ced6477de5  gcc/tree-ssa-loop-manip.h
  2a09600087431bdcc8a3257287be029c  gcc/tree-ssa-loop-niter.cc
  4b19cd267d749c27d7e2b616b46fe8d6  gcc/tree-ssa-loop-niter.h
  1b3164ae2d55cbf742ebf0774d0106cf  gcc/tree-ssa-loop-prefetch.cc
*************** ba282fb45d22dd7b9f51e27d263cda3d  gcc/tr
*** 132371,132391 ****
  fa83f982a805985b3a3da2ca5e10e43a  gcc/tree-ssa-math-opts.h
  56d25f9d7a5f35aa3637460c00b7eb7e  gcc/tree-ssa-operands.cc
  f83d0b12185538e6f679296bebfe3d2f  gcc/tree-ssa-operands.h
! 3c7ab8fec2008943cc188cfe8cd9f8f3  gcc/tree-ssa-phiopt.cc
  fe5ca56c2551cb5cbd256cfafdcabecd  gcc/tree-ssa-phiprop.cc
! bc7a10fe1c5522f4d907263e36ac5945  gcc/tree-ssa-pre.cc
  f39acc236b21f9150a1ef4359aef585e  gcc/tree-ssa-propagate.cc
  d38017eb69a50f24b5e47ee97928afde  gcc/tree-ssa-propagate.h
  6e6117c73429cd3635e978bbc73398a5  gcc/tree-ssa-reassoc.cc
  9a67eb78dfcbdb36f2fbf9b5dd4ff29c  gcc/tree-ssa-reassoc.h
! eb3a66517ec5e91d910c12aead1a961d  gcc/tree-ssa-sccvn.cc
  969557a6ff2537ae4a6d36fde566e436  gcc/tree-ssa-sccvn.h
  2b138ac94e5d6a2e499018e91e58a737  gcc/tree-ssa-scopedtables.cc
  f9f30b312deca96b11a781af60153767  gcc/tree-ssa-scopedtables.h
  3b2415ac4cc87839b64bcb95bc5ba760  gcc/tree-ssa-sink.cc
  ccd81769582e0122376dc2d42e8c2af1  gcc/tree-ssa-strlen.cc
  7e86234d60a489dfd04ff6e6792e020e  gcc/tree-ssa-strlen.h
! ff50beb419088f374a4b656a71fd772a  gcc/tree-ssa-structalias.cc
  1cb62c7fa7db51a11ab31132b6a2edee  gcc/tree-ssa-structalias.h
  f3e7c56f55d15a7ad4c88bc40bad8aa5  gcc/tree-ssa-tail-merge.cc
  4835f0b56bdf88ee25d6d6e08808a7db  gcc/tree-ssa-ter.cc
--- 132618,132638 ----
  fa83f982a805985b3a3da2ca5e10e43a  gcc/tree-ssa-math-opts.h
  56d25f9d7a5f35aa3637460c00b7eb7e  gcc/tree-ssa-operands.cc
  f83d0b12185538e6f679296bebfe3d2f  gcc/tree-ssa-operands.h
! cdaff2baead7ddb0a086ee2326f62aed  gcc/tree-ssa-phiopt.cc
  fe5ca56c2551cb5cbd256cfafdcabecd  gcc/tree-ssa-phiprop.cc
! e44b0626464940cf1e9b857320ec790f  gcc/tree-ssa-pre.cc
  f39acc236b21f9150a1ef4359aef585e  gcc/tree-ssa-propagate.cc
  d38017eb69a50f24b5e47ee97928afde  gcc/tree-ssa-propagate.h
  6e6117c73429cd3635e978bbc73398a5  gcc/tree-ssa-reassoc.cc
  9a67eb78dfcbdb36f2fbf9b5dd4ff29c  gcc/tree-ssa-reassoc.h
! d366aae69955e13f3219a43bcbf801ea  gcc/tree-ssa-sccvn.cc
  969557a6ff2537ae4a6d36fde566e436  gcc/tree-ssa-sccvn.h
  2b138ac94e5d6a2e499018e91e58a737  gcc/tree-ssa-scopedtables.cc
  f9f30b312deca96b11a781af60153767  gcc/tree-ssa-scopedtables.h
  3b2415ac4cc87839b64bcb95bc5ba760  gcc/tree-ssa-sink.cc
  ccd81769582e0122376dc2d42e8c2af1  gcc/tree-ssa-strlen.cc
  7e86234d60a489dfd04ff6e6792e020e  gcc/tree-ssa-strlen.h
! fb76f347a318680a17ad215ab1fa7949  gcc/tree-ssa-structalias.cc
  1cb62c7fa7db51a11ab31132b6a2edee  gcc/tree-ssa-structalias.h
  f3e7c56f55d15a7ad4c88bc40bad8aa5  gcc/tree-ssa-tail-merge.cc
  4835f0b56bdf88ee25d6d6e08808a7db  gcc/tree-ssa-ter.cc
*************** f8119a019450befbbf3e3e40b010cf74  gcc/tr
*** 132410,132430 ****
  31edb0540b970325ae5c017fddf7eb02  gcc/tree-switch-conversion.cc
  fa20fc0102b6036d5fa58b953c127e15  gcc/tree-switch-conversion.h
  6a0f6268d598b3c59871ad41e01f33c1  gcc/tree-tailcall.cc
! 1e7175c3baf76e10f726ed4ce66e6c1c  gcc/tree-vect-data-refs.cc
  851cdeabb53d017910c4c7442f3afe61  gcc/tree-vect-generic.cc
! e831ebfca544eefb262286a3269fa8ce  gcc/tree-vect-loop-manip.cc
! 9de44d9b245ef555cc4d368457deb3a0  gcc/tree-vect-loop.cc
  14fdba1e6d50517ed4d832ad5d063740  gcc/tree-vect-patterns.cc
  4eab6d0f40af2653170a2f7ecf2d6fc1  gcc/tree-vect-slp-patterns.cc
! f702e9e693012b61afb43981b59768cb  gcc/tree-vect-slp.cc
! 2ad586c245e88f3a2b497f2769c9f7e8  gcc/tree-vect-stmts.cc
  42032e04f389a2e0f43fbb46ac091dac  gcc/tree-vector-builder.cc
  4a1b4947e64a076fdca46d14aab2181f  gcc/tree-vector-builder.h
  a87f80d9a1405f816a0b6d544400beef  gcc/tree-vectorizer.cc
! b987fb068f5b37935b7a2ef6533c8149  gcc/tree-vectorizer.h
  ca9cb422fed204a85a3a1a56b3ca8812  gcc/tree-vrp.cc
  c946b0d59b15393b95e356052c027eed  gcc/tree-vrp.h
! 492567c5d0718a51da88ab34330c3fed  gcc/tree.cc
  f88475a43ca5e7c59112c941875a762c  gcc/tree.def
  bfcb67830fe6ae74eda42e77329da480  gcc/tree.h
  56652e612288132aa8395fdf720b0146  gcc/treestruct.def
--- 132657,132677 ----
  31edb0540b970325ae5c017fddf7eb02  gcc/tree-switch-conversion.cc
  fa20fc0102b6036d5fa58b953c127e15  gcc/tree-switch-conversion.h
  6a0f6268d598b3c59871ad41e01f33c1  gcc/tree-tailcall.cc
! b02942e4c99b39c803f5dbb4d27d5ed6  gcc/tree-vect-data-refs.cc
  851cdeabb53d017910c4c7442f3afe61  gcc/tree-vect-generic.cc
! 8097a8b31ddd542184c52c26afb91da8  gcc/tree-vect-loop-manip.cc
! a24bebd0c765a4a97ecac1da1a798f8b  gcc/tree-vect-loop.cc
  14fdba1e6d50517ed4d832ad5d063740  gcc/tree-vect-patterns.cc
  4eab6d0f40af2653170a2f7ecf2d6fc1  gcc/tree-vect-slp-patterns.cc
! 6b495eb4a34811c5000eab4596a623ff  gcc/tree-vect-slp.cc
! 3f2b3ea8ac574facaa66e059db6a23e3  gcc/tree-vect-stmts.cc
  42032e04f389a2e0f43fbb46ac091dac  gcc/tree-vector-builder.cc
  4a1b4947e64a076fdca46d14aab2181f  gcc/tree-vector-builder.h
  a87f80d9a1405f816a0b6d544400beef  gcc/tree-vectorizer.cc
! 31766daa9141887d0af2afbaf39f8362  gcc/tree-vectorizer.h
  ca9cb422fed204a85a3a1a56b3ca8812  gcc/tree-vrp.cc
  c946b0d59b15393b95e356052c027eed  gcc/tree-vrp.h
! 3274b7d6d1a326dbca9dd4b097f64fd0  gcc/tree.cc
  f88475a43ca5e7c59112c941875a762c  gcc/tree.def
  bfcb67830fe6ae74eda42e77329da480  gcc/tree.h
  56652e612288132aa8395fdf720b0146  gcc/treestruct.def
*************** ca925427ce3affa856d0cada63a72951  gcc/wi
*** 132479,132500 ****
  9bbcc6c5fc2143d227f9bb62f34ddaed  gcc/xml-printer.h
  36083181908ce997d5ccb6a13d6a0420  gcc/xml.cc
  d3b8c9cd116758ef43c7e9f5026f80ad  gcc/xml.h
! dcf3f2f4e4ffd33fb3ff5cc277513014  gnattools/ChangeLog
  dd45099c09c4c5c5ef999f453c372b06  gnattools/Makefile.in
! 69a1a2005bd16d110bd6195bdbc8bafd  gnattools/configure
! b3ae75a952de14701af7879366182965  gnattools/configure.ac
! b02cf121e44636c2a8e605f3463baf06  gotools/ChangeLog
  d0cd4560ae9ca95137adac2f96734dfc  gotools/Makefile.am
  a9620fe98e0c9bf3a5beee26347a0a27  gotools/Makefile.in
  7e23031e2e274aaa07b61c1e8f18dc99  gotools/README
  bd839a9d17f6121cfd663f099d0bf44d  gotools/aclocal.m4
! 6f26693afa3dd1a6616f8bddb895d528  gotools/configure
! a4ce82fa38311db5bc035d511d44fe4f  gotools/configure.ac
  c4e8176c1964a5ebe0a55900f2141299  gotools/go.1
  eb2aeb3a6cffe7b26a8f1c8a2da23dcd  gotools/gofmt.1
  59530bdf33659b29e73d4adb9f9f6552  include/COPYING
  d32239bcb673463ab874e80d47fae504  include/COPYING3
! 02fcbee86a0e265e43edb7c4798b082c  include/ChangeLog
  4263432a72ff47ed8bf420208ee7eea5  include/ChangeLog-9103
  a43d76108493b20da790f953f829c6a5  include/ChangeLog.jit
  e4fcea241d25fd2866c6026dcccbe5bd  include/ansidecl.h
--- 132726,132747 ----
  9bbcc6c5fc2143d227f9bb62f34ddaed  gcc/xml-printer.h
  36083181908ce997d5ccb6a13d6a0420  gcc/xml.cc
  d3b8c9cd116758ef43c7e9f5026f80ad  gcc/xml.h
! 94e808bad7bbc0c9c8eb10163806ef35  gnattools/ChangeLog
  dd45099c09c4c5c5ef999f453c372b06  gnattools/Makefile.in
! be4ef2a329291967d86233c8cc8de499  gnattools/configure
! dacca351327a3fec68b5cb104ba08e64  gnattools/configure.ac
! 56c2660a74bd1146575cf02a3f8f3129  gotools/ChangeLog
  d0cd4560ae9ca95137adac2f96734dfc  gotools/Makefile.am
  a9620fe98e0c9bf3a5beee26347a0a27  gotools/Makefile.in
  7e23031e2e274aaa07b61c1e8f18dc99  gotools/README
  bd839a9d17f6121cfd663f099d0bf44d  gotools/aclocal.m4
! c0c367c12fe0dd4d7d6ce012e8ba671b  gotools/configure
! 0e590f85ebedcafbc545a96a9ac67e9b  gotools/configure.ac
  c4e8176c1964a5ebe0a55900f2141299  gotools/go.1
  eb2aeb3a6cffe7b26a8f1c8a2da23dcd  gotools/gofmt.1
  59530bdf33659b29e73d4adb9f9f6552  include/COPYING
  d32239bcb673463ab874e80d47fae504  include/COPYING3
! b19373248f97c5389a1e605a2806f6d6  include/ChangeLog
  4263432a72ff47ed8bf420208ee7eea5  include/ChangeLog-9103
  a43d76108493b20da790f953f829c6a5  include/ChangeLog.jit
  e4fcea241d25fd2866c6026dcccbe5bd  include/ansidecl.h
*************** c80f0d1413922b6c23015d781fb57ade  includ
*** 132519,132525 ****
  1f473e7d70366fbbe39ec745cde53247  include/gcc-interface.h
  449fdb595aee67684de51e4fd976f01b  include/gdb/gdb-index.h
  22135c8657b517d667c6d7e6b9b0de3c  include/getopt.h
! 013f4d737e62dfb41efc26395a3d5956  include/gomp-constants.h
  3c78dff688fb8d8a53788a7820f5f1f8  include/hashtab.h
  e10a926ac9146a394aa47259c571ac55  include/hsa.h
  834b1af17bcbcd3944b557484c126a73  include/hsa_ext_amd.h
--- 132766,132772 ----
  1f473e7d70366fbbe39ec745cde53247  include/gcc-interface.h
  449fdb595aee67684de51e4fd976f01b  include/gdb/gdb-index.h
  22135c8657b517d667c6d7e6b9b0de3c  include/getopt.h
! 3c273d72755b86c52499c87725d6ec8d  include/gomp-constants.h
  3c78dff688fb8d8a53788a7820f5f1f8  include/hashtab.h
  e10a926ac9146a394aa47259c571ac55  include/hsa.h
  834b1af17bcbcd3944b557484c126a73  include/hsa_ext_amd.h
*************** ad529dd460a9f8a6a0a6c8718141c8a1  includ
*** 132549,132563 ****
  f26e462c6f89f856041d649e1dfa527e  include/xtensa-config.h
  3d8d2eed6ccc2672f74fbceebee3e14e  include/xtensa-dynconfig.h
  361482dd6b5b5eb7090fff3986fba68a  install-sh
! 6ea97ce3384eda8db806477ec595357f  libada/ChangeLog
  5f5f2ee170291ec2f9aeead776bbefd1  libada/Makefile.in
  46d6319e8ffc7eabf27cbecd6141a912  libada/configure
! ab9e00e84d092822a6cc241ba44f609b  libada/configure.ac
  46d3fe6da7a771cc2d5420c4137a6861  libatomic/.gitignore
! 1c03aaf22fe7bd009812808b64e6eaa9  libatomic/ChangeLog
  7774b8df5edff5c25147dd50568e9695  libatomic/Makefile.am
  9d8df11efea7190e7628fd28505b1691  libatomic/Makefile.in
! 7ff46642515d8d59f1f5f78b96cf1b91  libatomic/acinclude.m4
  aca4499ba41919adee70a940d26e1b87  libatomic/aclocal.m4
  b741b38c451feebdcd9aedce6e37b702  libatomic/auto-config.h.in
  85778ae74823824ea052d5783265c513  libatomic/cas_n.c
--- 132796,132810 ----
  f26e462c6f89f856041d649e1dfa527e  include/xtensa-config.h
  3d8d2eed6ccc2672f74fbceebee3e14e  include/xtensa-dynconfig.h
  361482dd6b5b5eb7090fff3986fba68a  install-sh
! 6f7b987c7c62663a35d89b4b13073cd6  libada/ChangeLog
  5f5f2ee170291ec2f9aeead776bbefd1  libada/Makefile.in
  46d6319e8ffc7eabf27cbecd6141a912  libada/configure
! 3e7d52711fae1fd4af80bd16c05d2b37  libada/configure.ac
  46d3fe6da7a771cc2d5420c4137a6861  libatomic/.gitignore
! ff968044bde36380ebd71a1938280e1c  libatomic/ChangeLog
  7774b8df5edff5c25147dd50568e9695  libatomic/Makefile.am
  9d8df11efea7190e7628fd28505b1691  libatomic/Makefile.in
! 7dd564d7f01129269e58d4af35a5834a  libatomic/acinclude.m4
  aca4499ba41919adee70a940d26e1b87  libatomic/aclocal.m4
  b741b38c451feebdcd9aedce6e37b702  libatomic/auto-config.h.in
  85778ae74823824ea052d5783265c513  libatomic/cas_n.c
*************** ed3d69739cb2f35407547229f0393f92  libato
*** 132593,132599 ****
  ff7145d48440dfce80b40e64432d54b2  libatomic/config/x86/host-config.h
  9dba85cfea4771af56b0d0f71f9dd213  libatomic/config/x86/init.c
  e92d2e9aa4205d2a68d767a42e69d168  libatomic/configure
! 60d72b653adc80a0f9eb3e64a12806c5  libatomic/configure.ac
  0de16a62b4d69145d18c1019044e5415  libatomic/configure.tgt
  17dfc1d9215cf4dc01bf9f1341c7fadf  libatomic/exch_n.c
  76fb1d5ff64fb8b03a50051ea26a10b3  libatomic/fadd_n.c
--- 132840,132846 ----
  ff7145d48440dfce80b40e64432d54b2  libatomic/config/x86/host-config.h
  9dba85cfea4771af56b0d0f71f9dd213  libatomic/config/x86/init.c
  e92d2e9aa4205d2a68d767a42e69d168  libatomic/configure
! c9d7e07687f69d15abb6be6305693260  libatomic/configure.ac
  0de16a62b4d69145d18c1019044e5415  libatomic/configure.tgt
  17dfc1d9215cf4dc01bf9f1341c7fadf  libatomic/exch_n.c
  76fb1d5ff64fb8b03a50051ea26a10b3  libatomic/fadd_n.c
*************** c03a072efac9b30f8f8429ac52fd246b  libato
*** 132652,132658 ****
  8a7308fda7ed1543cb9e3be0f8e47bce  libatomic/testsuite/libatomic.c/atomic-store-5.c
  40618200985a15bcba64f871863da498  libatomic/testsuite/libatomic.c/c.exp
  97b0c9cdfcb733664bdf4efe0f5dc449  libatomic/testsuite/libatomic.c/generic-2.c
! 1db424010cb9c07992c559de76d5d453  libbacktrace/ChangeLog
  eb3a88b53140eb234a99a4b3a55e56bf  libbacktrace/ChangeLog.jit
  3666db75f4b55461411d215c60f35beb  libbacktrace/Makefile.am
  f9e4383641cb9203faa7433e51857ce2  libbacktrace/Makefile.in
--- 132899,132905 ----
  8a7308fda7ed1543cb9e3be0f8e47bce  libatomic/testsuite/libatomic.c/atomic-store-5.c
  40618200985a15bcba64f871863da498  libatomic/testsuite/libatomic.c/c.exp
  97b0c9cdfcb733664bdf4efe0f5dc449  libatomic/testsuite/libatomic.c/generic-2.c
! 846b845b1db3df8b88a715abb2571420  libbacktrace/ChangeLog
  eb3a88b53140eb234a99a4b3a55e56bf  libbacktrace/ChangeLog.jit
  3666db75f4b55461411d215c60f35beb  libbacktrace/Makefile.am
  f9e4383641cb9203faa7433e51857ce2  libbacktrace/Makefile.in
*************** f4b1ae56f4c4053efc21b5465684f95d  libbac
*** 132667,132674 ****
  71af7824d1973b034520c3322eb198ae  libbacktrace/backtrace.h
  d2bf0859654109e63b35816412d817f8  libbacktrace/btest.c
  1680f9d27c3626fb2d07ae4ee9206da6  libbacktrace/config.h.in
! af9ddebed2e099e1b87b2f3ca1d3c59d  libbacktrace/configure
! 1ac5ca3d6d16fbc88b35738285e37c6f  libbacktrace/configure.ac
  46ec0883605fc53660c7f51dbe16b83f  libbacktrace/dwarf.c
  883b410489e200aea1b6ecc248562d86  libbacktrace/edtest.c
  1908cd42481d0b1a8a32ff691f4eaeb9  libbacktrace/edtest2.c
--- 132914,132921 ----
  71af7824d1973b034520c3322eb198ae  libbacktrace/backtrace.h
  d2bf0859654109e63b35816412d817f8  libbacktrace/btest.c
  1680f9d27c3626fb2d07ae4ee9206da6  libbacktrace/config.h.in
! 4015d9af550e58bee77b58416310f544  libbacktrace/configure
! f2a850d5c04ceedd0964b863899fec42  libbacktrace/configure.ac
  46ec0883605fc53660c7f51dbe16b83f  libbacktrace/dwarf.c
  883b410489e200aea1b6ecc248562d86  libbacktrace/edtest.c
  1908cd42481d0b1a8a32ff691f4eaeb9  libbacktrace/edtest2.c
*************** c2c965e4a7a144af3e430d4191b2a091  libbac
*** 132701,132707 ****
  04137bad794f9bfb1236039f63227eef  libbacktrace/xztest.c
  eeca8e2df01fdc9fa455f2c703d1acee  libbacktrace/zstdtest.c
  ace1e49933e01dd308790e101ff593e2  libbacktrace/ztest.c
! 2bba393e96eff722fc2a34903416cd55  libcc1/ChangeLog
  8449193c9f9b6527fb64e695789dd4bf  libcc1/Makefile.am
  270e13d9f539c9eacc16d848641ecb9d  libcc1/Makefile.in
  e6c98f41e0035dd3e80d4c55a6301318  libcc1/aclocal.m4
--- 132948,132954 ----
  04137bad794f9bfb1236039f63227eef  libbacktrace/xztest.c
  eeca8e2df01fdc9fa455f2c703d1acee  libbacktrace/zstdtest.c
  ace1e49933e01dd308790e101ff593e2  libbacktrace/ztest.c
! 7c109b6165492941655c1d8db39bf2be  libcc1/ChangeLog
  8449193c9f9b6527fb64e695789dd4bf  libcc1/Makefile.am
  270e13d9f539c9eacc16d848641ecb9d  libcc1/Makefile.in
  e6c98f41e0035dd3e80d4c55a6301318  libcc1/aclocal.m4
*************** e6c98f41e0035dd3e80d4c55a6301318  libcc1
*** 132711,132718 ****
  4cc8bd95c8a09a52bc677c3990d40b64  libcc1/compiler-name.hh
  b81670f5b1782bfc90a1641a5b528a69  libcc1/compiler.cc
  9c3fd31e9505d2a9efdf9e1159e6193c  libcc1/compiler.hh
! ff280c71e6fd682745f98038e88fda46  libcc1/configure
! 2e075009cecb0c6309d63e3aa6cb1b02  libcc1/configure.ac
  642ffa3531181bf89d3bab42b8c5d1df  libcc1/connection.cc
  a75a7b35d84b12cff2515c2ef99a1060  libcc1/connection.hh
  5425ed3686d1684ba34ddbda63f3246f  libcc1/context.cc
--- 132958,132965 ----
  4cc8bd95c8a09a52bc677c3990d40b64  libcc1/compiler-name.hh
  b81670f5b1782bfc90a1641a5b528a69  libcc1/compiler.cc
  9c3fd31e9505d2a9efdf9e1159e6193c  libcc1/compiler.hh
! 7bf9b428cdf0051887c285230788f325  libcc1/configure
! 412bcafd0bacbcc4b03e0fc54ecf0ad3  libcc1/configure.ac
  642ffa3531181bf89d3bab42b8c5d1df  libcc1/connection.cc
  a75a7b35d84b12cff2515c2ef99a1060  libcc1/connection.hh
  5425ed3686d1684ba34ddbda63f3246f  libcc1/context.cc
*************** cffdeae41b78da05839b193e90188f55  libcod
*** 132757,132778 ****
  6419dfc879387358e95288142e569914  libcody/packet.cc
  688ece05c8b9d378b3df186808162e76  libcody/resolver.cc
  c94add0032978604acf65591bb86d2d6  libcody/server.cc
! 4ad2de10f86f9932a7fc89dc018003c2  libcpp/ChangeLog
  2bd831b17997584e38305782cebe6948  libcpp/ChangeLog.jit
  4f1e80b433907c013fc6e4eaf2b0e8aa  libcpp/Makefile.in
  b07c7863f0e7ad4e6a0915d66fc9e582  libcpp/aclocal.m4
  b6d00b61c96de9ec794bfec204304209  libcpp/charset.cc
  5b2f9d37e91d01eed5bf420a47dc8046  libcpp/combining-chars.inc
  4c25fc38f2b9d20ca1fbefba9ad34b45  libcpp/config.in
! ce84d633b2df3cc02e63c283e8c7cbd8  libcpp/configure
! 544c7a7a88b9eff04de422a131146f0d  libcpp/configure.ac
! 154834f1a6c5c86f0234b15fb1935611  libcpp/directives.cc
  e6648c5f8f4e111883be81dc9e8dd630  libcpp/errors.cc
  37523565269ad97ff6a5145be04df661  libcpp/expr.cc
  492ac13a792a1dcf2f9c99dae6140d14  libcpp/files.cc
  d7530c9a36bef9a00a690083401e3c83  libcpp/generated_cpp_wcwidth.h
  bf0c57c21ee2aeaa654ee6781e41cad5  libcpp/identifiers.cc
! 9299aac8dd1cd3362d437636af62d120  libcpp/include/cpplib.h
  a5730f5ab9435bb5d8446830fe8f3706  libcpp/include/label-text.h
  475c6ef3f91227b1431876de0297795a  libcpp/include/line-map.h
  6c27e4af6058e741469234cdf0f74c01  libcpp/include/mkdeps.h
--- 133004,133025 ----
  6419dfc879387358e95288142e569914  libcody/packet.cc
  688ece05c8b9d378b3df186808162e76  libcody/resolver.cc
  c94add0032978604acf65591bb86d2d6  libcody/server.cc
! 899cbdf9aba1b6cdb5d0cf5fe0889bc9  libcpp/ChangeLog
  2bd831b17997584e38305782cebe6948  libcpp/ChangeLog.jit
  4f1e80b433907c013fc6e4eaf2b0e8aa  libcpp/Makefile.in
  b07c7863f0e7ad4e6a0915d66fc9e582  libcpp/aclocal.m4
  b6d00b61c96de9ec794bfec204304209  libcpp/charset.cc
  5b2f9d37e91d01eed5bf420a47dc8046  libcpp/combining-chars.inc
  4c25fc38f2b9d20ca1fbefba9ad34b45  libcpp/config.in
! a686c816118835bf06d397b2152442a2  libcpp/configure
! ef346e7f90e112451208c7535ef5554c  libcpp/configure.ac
! 8b52631afa6e34c816b2122b045b384b  libcpp/directives.cc
  e6648c5f8f4e111883be81dc9e8dd630  libcpp/errors.cc
  37523565269ad97ff6a5145be04df661  libcpp/expr.cc
  492ac13a792a1dcf2f9c99dae6140d14  libcpp/files.cc
  d7530c9a36bef9a00a690083401e3c83  libcpp/generated_cpp_wcwidth.h
  bf0c57c21ee2aeaa654ee6781e41cad5  libcpp/identifiers.cc
! f4c0de4a7c7ad294e865f549c13b28f0  libcpp/include/cpplib.h
  a5730f5ab9435bb5d8446830fe8f3706  libcpp/include/label-text.h
  475c6ef3f91227b1431876de0297795a  libcpp/include/line-map.h
  6c27e4af6058e741469234cdf0f74c01  libcpp/include/mkdeps.h
*************** fc49680d0c6e77e437523ea496a6b8c4  libga6
*** 133342,133358 ****
  095aff369c31681c96b933fbedd8e05f  libga68/posix.a68
  b0d017b83148520411f1c1ebdbf28b58  libga68/sppp.awk
  4ad0dcaa2eb0b81efb58d47400b0933d  libga68/standard.a68.in
! a17f86342c11041bc91ba03feac48f43  libgcc/ChangeLog
! 9ce0b8c50fec68eb0555ae800e4e457e  libgcc/Makefile.in
  229424d0e39b7ca6486e3f691d3d6c91  libgcc/config.host
  46412830a2ee8a02503ccc921912c3cf  libgcc/config.in
  453dd2d1f5f7e9b0683ae1c960ef7eac  libgcc/config/aarch64/__aarch64_have_sme.c
  aee2000eefb98b188a6cd051fd4e1e72  libgcc/config/aarch64/__arm_get_current_vg.S
  7d502e88b830e778ab635542c94987fc  libgcc/config/aarch64/__arm_sme_state.S
  3d191b7f750c01d46058e6ae0cf0319f  libgcc/config/aarch64/__arm_tpidr2_restore.S
  b558b0fe1c1f3450c92a793927788906  libgcc/config/aarch64/__arm_tpidr2_save.S
  d1dea04ccca0a3e0d8c326ec80ed9e0b  libgcc/config/aarch64/__arm_za_disable.S
! d9c95ed0b01267713410196d13c6a218  libgcc/config/aarch64/aarch64-asm.h
  9f312c9f3db89426a0989d3893f9eff5  libgcc/config/aarch64/aarch64-unwind-def.h
  d8c6d1674d20f39198bf26d837ca394c  libgcc/config/aarch64/aarch64-unwind.h
  bd96de89003e020f3d23b68bd4e4eb93  libgcc/config/aarch64/cpuinfo.c
--- 133589,133608 ----
  095aff369c31681c96b933fbedd8e05f  libga68/posix.a68
  b0d017b83148520411f1c1ebdbf28b58  libga68/sppp.awk
  4ad0dcaa2eb0b81efb58d47400b0933d  libga68/standard.a68.in
! 2ed5df80c58f1b1fe212b2b892eb1e8b  libgcc/ChangeLog
! 6926dcea143d4f6166d7feff9e8ee35a  libgcc/Makefile.in
  229424d0e39b7ca6486e3f691d3d6c91  libgcc/config.host
  46412830a2ee8a02503ccc921912c3cf  libgcc/config.in
  453dd2d1f5f7e9b0683ae1c960ef7eac  libgcc/config/aarch64/__aarch64_have_sme.c
  aee2000eefb98b188a6cd051fd4e1e72  libgcc/config/aarch64/__arm_get_current_vg.S
+ e50594a330df53867a13146ffe726611  libgcc/config/aarch64/__arm_sc_memchr_scalar.S
+ 81816749b8c4ec710305c704a23821f2  libgcc/config/aarch64/__arm_sc_memcpy_scalar.S
+ c0d7a3cfbfadf9834e2dca30a4b55e96  libgcc/config/aarch64/__arm_sc_memset_scalar.S
  7d502e88b830e778ab635542c94987fc  libgcc/config/aarch64/__arm_sme_state.S
  3d191b7f750c01d46058e6ae0cf0319f  libgcc/config/aarch64/__arm_tpidr2_restore.S
  b558b0fe1c1f3450c92a793927788906  libgcc/config/aarch64/__arm_tpidr2_save.S
  d1dea04ccca0a3e0d8c326ec80ed9e0b  libgcc/config/aarch64/__arm_za_disable.S
! 426a22b209e3ba565bb671d2d91dc356  libgcc/config/aarch64/aarch64-asm.h
  9f312c9f3db89426a0989d3893f9eff5  libgcc/config/aarch64/aarch64-unwind-def.h
  d8c6d1674d20f39198bf26d837ca394c  libgcc/config/aarch64/aarch64-unwind.h
  bd96de89003e020f3d23b68bd4e4eb93  libgcc/config/aarch64/cpuinfo.c
*************** b7e4f2d06c74d19d48bfafcd4a25248a  libgcc
*** 133362,133368 ****
  fb3c17149662ef7ba5f888d29fb200ca  libgcc/config/aarch64/freebsd-unwind.h
  1bad18e7009a8e3ed758377f231290b0  libgcc/config/aarch64/gnu-unwind.h
  a077f95c64de11e67e5d9d909ec45b8c  libgcc/config/aarch64/heap-trampoline.c
! f898f05b96795036d5f23a860858ce6b  libgcc/config/aarch64/libgcc-sme.ver
  7ea2b001f5847f55482820526461d8a5  libgcc/config/aarch64/libgcc-softfp.ver
  e3618397e6a59f2287abe6415125231a  libgcc/config/aarch64/linux-unwind.h
  627917593b0d6f44367c6b0cc40bdc18  libgcc/config/aarch64/lse-init.c
--- 133612,133618 ----
  fb3c17149662ef7ba5f888d29fb200ca  libgcc/config/aarch64/freebsd-unwind.h
  1bad18e7009a8e3ed758377f231290b0  libgcc/config/aarch64/gnu-unwind.h
  a077f95c64de11e67e5d9d909ec45b8c  libgcc/config/aarch64/heap-trampoline.c
! 90791e0f3f12b33d09561b2eb27456f5  libgcc/config/aarch64/libgcc-sme.ver
  7ea2b001f5847f55482820526461d8a5  libgcc/config/aarch64/libgcc-softfp.ver
  e3618397e6a59f2287abe6415125231a  libgcc/config/aarch64/linux-unwind.h
  627917593b0d6f44367c6b0cc40bdc18  libgcc/config/aarch64/lse-init.c
*************** e3618397e6a59f2287abe6415125231a  libgcc
*** 133370,133376 ****
  9e1759944135a6e6112c178058e85af8  libgcc/config/aarch64/sfp-exceptions.c
  95145f9b96d4904049fc9632c844d4f6  libgcc/config/aarch64/sfp-machine.h
  3429871c178d431add24f31fe0f0c40a  libgcc/config/aarch64/sync-cache.c
! e285d996cc17616afc2142f182dcf46d  libgcc/config/aarch64/t-aarch64
  5711e1b4b7c7ceabdfb54e3632fcd89c  libgcc/config/aarch64/t-heap-trampoline
  f6faf82ffcac18f8015a25c68040cc15  libgcc/config/aarch64/t-lse
  c6e6cbb6c43ce130d0d7f7f64a205fd8  libgcc/config/aarch64/t-mingw
--- 133620,133626 ----
  9e1759944135a6e6112c178058e85af8  libgcc/config/aarch64/sfp-exceptions.c
  95145f9b96d4904049fc9632c844d4f6  libgcc/config/aarch64/sfp-machine.h
  3429871c178d431add24f31fe0f0c40a  libgcc/config/aarch64/sync-cache.c
! 4ebff4aeda3948b628c3a7dac50fb933  libgcc/config/aarch64/t-aarch64
  5711e1b4b7c7ceabdfb54e3632fcd89c  libgcc/config/aarch64/t-heap-trampoline
  f6faf82ffcac18f8015a25c68040cc15  libgcc/config/aarch64/t-lse
  c6e6cbb6c43ce130d0d7f7f64a205fd8  libgcc/config/aarch64/t-mingw
*************** d1bc698652ed847a9a315e51f8dfecc1  libgcc
*** 133490,133496 ****
  95293e26c6315a1abbf95359c6410a1f  libgcc/config/avr/lib1funcs.S
  622f81485f02d0eac2caaafa7d3a2fd1  libgcc/config/avr/lib2-object.mk
  c7a08febc167bf9a84c28593ca627617  libgcc/config/avr/lib2funcs.c
! 917132c185ae7bd80d7b1f0373ff05ea  libgcc/config/avr/libf7/ChangeLog
  1b3a595323fbea22cd1737fc614cc808  libgcc/config/avr/libf7/asm-defs.h
  9bd59f1ae77ab1aca77f15fb5ede4792  libgcc/config/avr/libf7/f7-renames.h
  92bbb0397c760b4e93af191f49964ad4  libgcc/config/avr/libf7/f7-wraps.h
--- 133740,133746 ----
  95293e26c6315a1abbf95359c6410a1f  libgcc/config/avr/lib1funcs.S
  622f81485f02d0eac2caaafa7d3a2fd1  libgcc/config/avr/lib2-object.mk
  c7a08febc167bf9a84c28593ca627617  libgcc/config/avr/lib2funcs.c
! 122bbba7b2f0ed4283449af510301a17  libgcc/config/avr/libf7/ChangeLog
  1b3a595323fbea22cd1737fc614cc808  libgcc/config/avr/libf7/asm-defs.h
  9bd59f1ae77ab1aca77f15fb5ede4792  libgcc/config/avr/libf7/f7-renames.h
  92bbb0397c760b4e93af191f49964ad4  libgcc/config/avr/libf7/f7-wraps.h
*************** ada9a39786da3b2e999f7440a17a1ed7  libgcc
*** 134607,134613 ****
  f199b38114ce849b77b38bd475d72cff  libgcc/config/t-crtfm
  060a49bb5c4a53a2125123d4cbd571de  libgcc/config/t-crtstuff-pic
  3189748f203afc9349dffab9fb4b3225  libgcc/config/t-darwin
! f699f9e7159ba2c6033406086c5c8299  libgcc/config/t-darwin-ehs
  1b055dd68e433300709a246c1b88d25b  libgcc/config/t-darwin-libgccs1
  5f05c653ae1e197bae3fc3fc5ca1e59d  libgcc/config/t-darwin-min-1
  b1115059309b9095620433d14c0042cf  libgcc/config/t-darwin-min-11
--- 134857,134863 ----
  f199b38114ce849b77b38bd475d72cff  libgcc/config/t-crtfm
  060a49bb5c4a53a2125123d4cbd571de  libgcc/config/t-crtstuff-pic
  3189748f203afc9349dffab9fb4b3225  libgcc/config/t-darwin
! 75f141eab7575727f4c39578dd723e4c  libgcc/config/t-darwin-ehs
  1b055dd68e433300709a246c1b88d25b  libgcc/config/t-darwin-libgccs1
  5f05c653ae1e197bae3fc3fc5ca1e59d  libgcc/config/t-darwin-min-1
  b1115059309b9095620433d14c0042cf  libgcc/config/t-darwin-min-11
*************** eb3161bf886026cdcf8a78cea885fdd2  libgcc
*** 134641,134647 ****
  429659ae1ff2531e3ba2fd0c676a320d  libgcc/config/t-slibgcc-hpux
  501bccd51e3c56bcc4e8382e70dc5663  libgcc/config/t-slibgcc-libgcc
  b5d3fe85dff400a82befa6b901b438ec  libgcc/config/t-slibgcc-nolc-override
! bb217aa78bbf6b6a7c7844f73152110d  libgcc/config/t-slibgcc-sld
  ff76526856565673089b174b185fab45  libgcc/config/t-slibgcc-vms
  8f30bfed0a658b61c1b975316bedde09  libgcc/config/t-softfp
  1ec9425eada0171d381f5f9b47b613a9  libgcc/config/t-softfp-compat
--- 134891,134897 ----
  429659ae1ff2531e3ba2fd0c676a320d  libgcc/config/t-slibgcc-hpux
  501bccd51e3c56bcc4e8382e70dc5663  libgcc/config/t-slibgcc-libgcc
  b5d3fe85dff400a82befa6b901b438ec  libgcc/config/t-slibgcc-nolc-override
! 31766f3a7db03780a4775419801baa8a  libgcc/config/t-slibgcc-sld
  ff76526856565673089b174b185fab45  libgcc/config/t-slibgcc-vms
  8f30bfed0a658b61c1b975316bedde09  libgcc/config/t-softfp
  1ec9425eada0171d381f5f9b47b613a9  libgcc/config/t-softfp-compat
*************** ce614fa17d52c2d7121d7e2d6f80b02d  libgcc
*** 134692,134699 ****
  3887e891f6c35841fabbfe9a8edfdb6a  libgcc/config/xtensa/unwind-dw2-xtensa.c
  f0d00382ed17e7f222caffb11bcfa0d7  libgcc/config/xtensa/unwind-dw2-xtensa.h
  7ab9e3e4b42feb0139bf1fa67e0bfe36  libgcc/config/xtensa/xtensa-config-builtin.h
! c293429b560dc0967529687c611226ad  libgcc/configure
! ada1dfec3104d95e2861d12a284a8840  libgcc/configure.ac
  a5267c42def0d7d222389e49a1f25937  libgcc/crtstuff.c
  93a24cef6f5e41c4aef0e0909cb4b9e4  libgcc/dfp-bit.c
  8cfa5184dd2b0f09bbfb9f387c946c3b  libgcc/dfp-bit.h
--- 134942,134949 ----
  3887e891f6c35841fabbfe9a8edfdb6a  libgcc/config/xtensa/unwind-dw2-xtensa.c
  f0d00382ed17e7f222caffb11bcfa0d7  libgcc/config/xtensa/unwind-dw2-xtensa.h
  7ab9e3e4b42feb0139bf1fa67e0bfe36  libgcc/config/xtensa/xtensa-config-builtin.h
! 7fee1b3dd5b087ae187503e683f0c7e7  libgcc/configure
! 698ff0478b6033f785225d68e14e3066  libgcc/configure.ac
  a5267c42def0d7d222389e49a1f25937  libgcc/crtstuff.c
  93a24cef6f5e41c4aef0e0909cb4b9e4  libgcc/dfp-bit.c
  8cfa5184dd2b0f09bbfb9f387c946c3b  libgcc/dfp-bit.h
*************** b7bdc64c03d62f87f61d3d8a61a75d2d  libgcc
*** 134920,134926 ****
  227525d7193394128a83ce15e7642842  libgcc/vtv_start.c
  23ad2a8d256ba5dca28382d64a20e8f2  libgcc/vtv_start_preinit.c
  e50c29294062dfe571c9c053a8ec217b  libgcobol/.gitignore
! 647e3c864b036b175ec2ee46eadb0564  libgcobol/ChangeLog
  bec1e79fc8ada70ed4ac3dc61a33d576  libgcobol/LICENSE
  8b9a5263fc79d367bdafa609a2ac1363  libgcobol/Makefile.am
  d97f1f2b9efb3a8fa8c9db9a04ea78db  libgcobol/Makefile.in
--- 135170,135176 ----
  227525d7193394128a83ce15e7642842  libgcc/vtv_start.c
  23ad2a8d256ba5dca28382d64a20e8f2  libgcc/vtv_start_preinit.c
  e50c29294062dfe571c9c053a8ec217b  libgcobol/.gitignore
! be285d0b51c458e642e1d795dcb6e4a3  libgcobol/ChangeLog
  bec1e79fc8ada70ed4ac3dc61a33d576  libgcobol/LICENSE
  8b9a5263fc79d367bdafa609a2ac1363  libgcobol/Makefile.am
  d97f1f2b9efb3a8fa8c9db9a04ea78db  libgcobol/Makefile.in
*************** b0657c8d818882b87c44a17db46300df  libgco
*** 134928,134934 ****
  a69c3f28d1be90eb0b0287fa450c3684  libgcobol/acinclude.m4
  916ce15e68376e661a41f183252a74ec  libgcobol/aclocal.m4
  1a36387a9e52a001f44000ab03cfe817  libgcobol/charmaps.cc
! 9426f381b268b4bbe246126f5d7d7ae5  libgcobol/charmaps.h
  94c48aaa30cd3785160dfbdf56b68d0a  libgcobol/common-defs.h
  fba8f609927b913d1ca3d30a27d0febc  libgcobol/compat/README.md
  69fc231dbe0ada7d183b3b115faee461  libgcobol/compat/gnu/cpy/cblproto.cpy
--- 135178,135184 ----
  a69c3f28d1be90eb0b0287fa450c3684  libgcobol/acinclude.m4
  916ce15e68376e661a41f183252a74ec  libgcobol/aclocal.m4
  1a36387a9e52a001f44000ab03cfe817  libgcobol/charmaps.cc
! 18e7fd26c059e1f9514add6c94c67059  libgcobol/charmaps.h
  94c48aaa30cd3785160dfbdf56b68d0a  libgcobol/common-defs.h
  fba8f609927b913d1ca3d30a27d0febc  libgcobol/compat/README.md
  69fc231dbe0ada7d183b3b115faee461  libgcobol/compat/gnu/cpy/cblproto.cpy
*************** fa09d031b2dd58cf363bbc9ef88e3638  libgco
*** 134958,134965 ****
  adf499647094ed626e7326c18d45e37b  libgcobol/compat/t/Makefile
  3f8e6d3c64398522d23c8f4d909b15ab  libgcobol/compat/t/smoke.cbl
  6a3b66323eab3b40a9c109aafd9f27c6  libgcobol/config.h.in
! 1e78d66aae2ef682c74a6a4a0bb60fdd  libgcobol/configure
! ede045a132a5720d5dd585db12f8c221  libgcobol/configure.ac
  491cba1b87576f84add391975992c7ce  libgcobol/configure.tgt
  ee9716a45633fbc51fcf882ae2a28ae7  libgcobol/constants.cc
  a5821ed24abf64b452f15f29da418d17  libgcobol/ec.h
--- 135208,135215 ----
  adf499647094ed626e7326c18d45e37b  libgcobol/compat/t/Makefile
  3f8e6d3c64398522d23c8f4d909b15ab  libgcobol/compat/t/smoke.cbl
  6a3b66323eab3b40a9c109aafd9f27c6  libgcobol/config.h.in
! e8c16e5b2ede5e3a542bedcf628acfe9  libgcobol/configure
! 9776a9c82755543d1938440cb8d4479b  libgcobol/configure.ac
  491cba1b87576f84add391975992c7ce  libgcobol/configure.tgt
  ee9716a45633fbc51fcf882ae2a28ae7  libgcobol/constants.cc
  a5821ed24abf64b452f15f29da418d17  libgcobol/ec.h
*************** a5821ed24abf64b452f15f29da418d17  libgco
*** 134970,134982 ****
  0ae92e32a618fa39e3ff18a50cbfff17  libgcobol/gfileio.h
  72c63fe79b2bdb5311dfa07fb32c9bcc  libgcobol/gmath.cc
  484b264b1c8d844ef5989f4d7075f520  libgcobol/gmath.h
! c8404659b04d33ae6f2fbfbe89c15080  libgcobol/inspect.cc
  8e756bd6d6fe25a0f758f96daa9d31e2  libgcobol/intrinsic.cc
  16dfd5dc1d9f83d11546c8d442151225  libgcobol/io.cc
  fbd32f035f7b4e73896b3d489e50e747  libgcobol/io.h
! 6fa2e26d11c71898dae520939b992484  libgcobol/libgcobol-fp.h
! d185b41a6d6e82c29b1d1a295603487f  libgcobol/libgcobol.cc
! b484db78f4117c923c0753a07ea73ea0  libgcobol/libgcobol.h
  469e0f6e21e357ff8b53b9d17373a6c8  libgcobol/libgcobol.spec.in
  88c1134ff3ee63c326541ce3f35f6699  libgcobol/m4/autoconf.m4
  96b721e88c5f79776cedad463373ad78  libgcobol/posix/README.md
--- 135220,135232 ----
  0ae92e32a618fa39e3ff18a50cbfff17  libgcobol/gfileio.h
  72c63fe79b2bdb5311dfa07fb32c9bcc  libgcobol/gmath.cc
  484b264b1c8d844ef5989f4d7075f520  libgcobol/gmath.h
! 85dd497f2ca6afe8d2440211eaf37ec6  libgcobol/inspect.cc
  8e756bd6d6fe25a0f758f96daa9d31e2  libgcobol/intrinsic.cc
  16dfd5dc1d9f83d11546c8d442151225  libgcobol/io.cc
  fbd32f035f7b4e73896b3d489e50e747  libgcobol/io.h
! 39a9dbab64d7e5acec671784d7ca4cde  libgcobol/libgcobol-fp.h
! 2b7aa112175786e5c6cf7f7f339bc38d  libgcobol/libgcobol.cc
! 8a5ee2382d4a52f09cae86593887d210  libgcobol/libgcobol.h
  469e0f6e21e357ff8b53b9d17373a6c8  libgcobol/libgcobol.spec.in
  88c1134ff3ee63c326541ce3f35f6699  libgcobol/m4/autoconf.m4
  96b721e88c5f79776cedad463373ad78  libgcobol/posix/README.md
*************** fa11a6e56c666d0f6aed79e8a76ee830  libgco
*** 135029,135040 ****
  859336a5b2670d1679e68d9e00bec381  libgcobol/posix/udf/posix-stat.cbl
  9c2b0ac9c647bc3a9b65244797bb88d7  libgcobol/posix/udf/posix-unlink.cbl
  f7f3ede57639856878087542116a625d  libgcobol/posix/udf/posix-write.cbl
! 1dc9043a932d4684a029d5bd1110f47c  libgcobol/stringbin.cc
  f49aafcc21e24a1ea3753658ab5250a9  libgcobol/stringbin.h
  d77d00934ab6b213d8c526ae0673969c  libgcobol/valconv.cc
  3466db9e6fc5748c08c947e71a566c07  libgcobol/valconv.h
  8485adf73f6988a83d317bb42594aa15  libgcobol/xmlparse.cc
! 53aee16fea4924a675a9cfc081eaaef6  libgfortran/ChangeLog
  d99469a76bfe825683f8d94fe07b508c  libgfortran/ChangeLog-2002
  522fdb2df6cefe6bcaed3c7c7311eae1  libgfortran/ChangeLog-2003
  5a3a93e76d878d063aba66079340cfe0  libgfortran/ChangeLog-2004
--- 135279,135290 ----
  859336a5b2670d1679e68d9e00bec381  libgcobol/posix/udf/posix-stat.cbl
  9c2b0ac9c647bc3a9b65244797bb88d7  libgcobol/posix/udf/posix-unlink.cbl
  f7f3ede57639856878087542116a625d  libgcobol/posix/udf/posix-write.cbl
! cbd083ee865e62b38cc23ffc179b2efb  libgcobol/stringbin.cc
  f49aafcc21e24a1ea3753658ab5250a9  libgcobol/stringbin.h
  d77d00934ab6b213d8c526ae0673969c  libgcobol/valconv.cc
  3466db9e6fc5748c08c947e71a566c07  libgcobol/valconv.h
  8485adf73f6988a83d317bb42594aa15  libgcobol/xmlparse.cc
! 20d35eb06b4aab62a01ab08b1dcf8c44  libgfortran/ChangeLog
  d99469a76bfe825683f8d94fe07b508c  libgfortran/ChangeLog-2002
  522fdb2df6cefe6bcaed3c7c7311eae1  libgfortran/ChangeLog-2003
  5a3a93e76d878d063aba66079340cfe0  libgfortran/ChangeLog-2004
*************** a1bbe79151b753b8b25205a178953376  libgfo
*** 135062,135068 ****
  7a9dd3c91b585f18a8d8a30c6e60d98f  libgfortran/ISO_Fortran_binding.h
  7cbace53ae182714e1886f1b5a55cae3  libgfortran/Makefile.am
  56822f371af0a90781525ea4df867290  libgfortran/Makefile.in
! f3cb49cb5b312a743f63d5d262c262c1  libgfortran/acinclude.m4
  d6bbf0d0b277cee1255f31f38d6cd5fb  libgfortran/aclocal.m4
  6d4f5918ea5082a0bc3b9bbe3455b876  libgfortran/c99_protos.h
  f19a2f7e21d9c27c667b2b50004edf9b  libgfortran/caf/caf_error.c
--- 135312,135318 ----
  7a9dd3c91b585f18a8d8a30c6e60d98f  libgfortran/ISO_Fortran_binding.h
  7cbace53ae182714e1886f1b5a55cae3  libgfortran/Makefile.am
  56822f371af0a90781525ea4df867290  libgfortran/Makefile.in
! 3879d8dc995bf27be4ecc7d20e919051  libgfortran/acinclude.m4
  d6bbf0d0b277cee1255f31f38d6cd5fb  libgfortran/aclocal.m4
  6d4f5918ea5082a0bc3b9bbe3455b876  libgfortran/c99_protos.h
  f19a2f7e21d9c27c667b2b50004edf9b  libgfortran/caf/caf_error.c
*************** ac74e4020ecd3c7da1e7f62154e313ae  libgfo
*** 135101,135108 ****
  a3016b0ad57cd1fac79d02298c4bb67e  libgfortran/config/fpu-sysv.h
  f9917563df7bac5d534cef935bdce401  libgfortran/config/t-aix
  3e9dd2029734b8f2c6a1eb2a364d1cbf  libgfortran/config/t-nvptx
! 70a1875f82700f5535acb321809751ff  libgfortran/configure
! dbdf31c591419e088be89d170a2a6add  libgfortran/configure.ac
  78e88d1cf66770f3359f0a232708eb4b  libgfortran/configure.host
  af09dd745a601ab5f0fb73fde635b041  libgfortran/generated/_abs_c10.F90
  67b33ddf5ad8c3dd65160a502c481ea8  libgfortran/generated/_abs_c16.F90
--- 135351,135358 ----
  a3016b0ad57cd1fac79d02298c4bb67e  libgfortran/config/fpu-sysv.h
  f9917563df7bac5d534cef935bdce401  libgfortran/config/t-aix
  3e9dd2029734b8f2c6a1eb2a364d1cbf  libgfortran/config/t-nvptx
! ba4029eb4b73fc0caa6f0c2f6aec356f  libgfortran/configure
! d42f751d6a49e1331d2b18f640344fa7  libgfortran/configure.ac
  78e88d1cf66770f3359f0a232708eb4b  libgfortran/configure.host
  af09dd745a601ab5f0fb73fde635b041  libgfortran/generated/_abs_c10.F90
  67b33ddf5ad8c3dd65160a502c481ea8  libgfortran/generated/_abs_c16.F90
*************** c04e4e4d264af0c1d4e39e88a93d6258  libgfo
*** 136085,136098 ****
  ac9900506f66729b67b81e0404c39eb1  libgfortran/runtime/select_inc.c
  fdc5bc5ac9f0f6c3348f4f076be6db95  libgfortran/runtime/stop.c
  48bdb4b17463d0fcaca2653d6e84ddaf  libgfortran/runtime/string.c
! 80230333955432c4b9d89febc7f88d8c  libgm2/ChangeLog
  81dadb03add7a7278a98cd845177e76a  libgm2/Makefile.am
  f26132364738756eeee0acf44fb5aadf  libgm2/Makefile.in
! 5655398e9c1e3027c587898dc4fce566  libgm2/acinclude.m4
  d4629d8a3f44bc8f1060e37d381418f6  libgm2/aclocal.m4
  ec51f8ac3552cbacd95bf08e21a6568a  libgm2/config.h.in
! 1c194c4a1b723e9f6f09954507f51382  libgm2/configure
! 4bed77912b0aeaafa4693cfab829153b  libgm2/configure.ac
  b52a0b00feee9e93f7dc34a66027a39f  libgm2/configure.host
  2a25928a1abd3989edcf11c8def19d00  libgm2/libm2cor/KeyBoardLEDs.cc
  f25de03fc822c5eebf7118fcf5283ebc  libgm2/libm2cor/Makefile.am
--- 136335,136348 ----
  ac9900506f66729b67b81e0404c39eb1  libgfortran/runtime/select_inc.c
  fdc5bc5ac9f0f6c3348f4f076be6db95  libgfortran/runtime/stop.c
  48bdb4b17463d0fcaca2653d6e84ddaf  libgfortran/runtime/string.c
! a95cf0fdf8e91508c4d6db8cd3f014b8  libgm2/ChangeLog
  81dadb03add7a7278a98cd845177e76a  libgm2/Makefile.am
  f26132364738756eeee0acf44fb5aadf  libgm2/Makefile.in
! cc0e852d9771f65adf2905912e55f880  libgm2/acinclude.m4
  d4629d8a3f44bc8f1060e37d381418f6  libgm2/aclocal.m4
  ec51f8ac3552cbacd95bf08e21a6568a  libgm2/config.h.in
! 78ec2b598118700ecb6c420bbfd644ff  libgm2/configure
! c96b91010e53cf611d2beda0416f19f4  libgm2/configure.ac
  b52a0b00feee9e93f7dc34a66027a39f  libgm2/configure.host
  2a25928a1abd3989edcf11c8def19d00  libgm2/libm2cor/KeyBoardLEDs.cc
  f25de03fc822c5eebf7118fcf5283ebc  libgm2/libm2cor/Makefile.am
*************** a3a7e9ca6057da9ca42e03e41e1c73f7  libgo/
*** 141622,141643 ****
  dcdf1b680b15b372bdb64cc5107d51b6  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! e10b9c517a12013659f80a8f58d6c5d5  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
  e1d869816ce58d8fdc05a55313f8c194  libgomp/Makefile.am
  4da024f3aacefa7a1d2396c494ae6526  libgomp/Makefile.in
  7f1d00b196788c5e20ac3392affbc699  libgomp/acc_prof.h
! 5e63b3cd1246f4c73a49880cad1844ee  libgomp/acinclude.m4
  5a46efd6e18e24c37640f51369238fe4  libgomp/aclocal.m4
  a518e5f5538c5ff629ba3a8f88128480  libgomp/affinity-fmt.c
  06478025336afe5fce9b998b4c7710b1  libgomp/affinity.c
  44e82ee5e47677da6205a78497c6a566  libgomp/alloc.c
  0c08d5aa3b537038621b9e3d7c3f28df  libgomp/alloc_cache.h
! 4eb87fef655de54484eccb7b204e5916  libgomp/allocator.c
  a33e006e46a2cc9bc17ff967a8169bac  libgomp/atomic.c
  4cc5b004a12e0e03b1d4c1fca9e65c4a  libgomp/barrier.c
  817a188fa4d37e0fffa03364d2f1507d  libgomp/basic-allocator.c
! 037ba614230cf1e1886c5ef589cae6d0  libgomp/config.h.in
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/libgomp-plugin.c
  451df5514a3250659e5266d6d645c806  libgomp/config/accel/lock.c
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/mutex.c
--- 141872,141893 ----
  dcdf1b680b15b372bdb64cc5107d51b6  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! 72d427a155c3a6911fa5a27499052cea  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
  e1d869816ce58d8fdc05a55313f8c194  libgomp/Makefile.am
  4da024f3aacefa7a1d2396c494ae6526  libgomp/Makefile.in
  7f1d00b196788c5e20ac3392affbc699  libgomp/acc_prof.h
! d5bdeb9c53c7e874c927a4795c438f56  libgomp/acinclude.m4
  5a46efd6e18e24c37640f51369238fe4  libgomp/aclocal.m4
  a518e5f5538c5ff629ba3a8f88128480  libgomp/affinity-fmt.c
  06478025336afe5fce9b998b4c7710b1  libgomp/affinity.c
  44e82ee5e47677da6205a78497c6a566  libgomp/alloc.c
  0c08d5aa3b537038621b9e3d7c3f28df  libgomp/alloc_cache.h
! 9ddd7826f38addb74cdb0713eb83dbbd  libgomp/allocator.c
  a33e006e46a2cc9bc17ff967a8169bac  libgomp/atomic.c
  4cc5b004a12e0e03b1d4c1fca9e65c4a  libgomp/barrier.c
  817a188fa4d37e0fffa03364d2f1507d  libgomp/basic-allocator.c
! 13cb48c7f07027151647270df75beca0  libgomp/config.h.in
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/libgomp-plugin.c
  451df5514a3250659e5266d6d645c806  libgomp/config/accel/lock.c
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/mutex.c
*************** c745b04e9a749c7bafebcab1952681bc  libgom
*** 141665,141671 ****
  c6f86d1001c53a2af99a97c2afa9475f  libgomp/config/darwin/plugin-suffix.h
  fedbd101d1e64cfcfca867a231cb58ec  libgomp/config/darwin/thread-stacksize.h
  1011707418d959e5fa254b216613f382  libgomp/config/gcn/affinity-fmt.c
! a149acaed82eaf065ecd5d28a16205ef  libgomp/config/gcn/allocator.c
  46bcab07ea0e608e96b549c06ff435b2  libgomp/config/gcn/bar.c
  c5f2f89f7f9ed2cb6bb0f26a7bb9d0e3  libgomp/config/gcn/bar.h
  29fc36d37c9ca7b0db1c04f766be1f6a  libgomp/config/gcn/doacross.h
--- 141915,141921 ----
  c6f86d1001c53a2af99a97c2afa9475f  libgomp/config/darwin/plugin-suffix.h
  fedbd101d1e64cfcfca867a231cb58ec  libgomp/config/darwin/thread-stacksize.h
  1011707418d959e5fa254b216613f382  libgomp/config/gcn/affinity-fmt.c
! 5dd83748a9e63931483e0e8b28bb57a3  libgomp/config/gcn/allocator.c
  46bcab07ea0e608e96b549c06ff435b2  libgomp/config/gcn/bar.c
  c5f2f89f7f9ed2cb6bb0f26a7bb9d0e3  libgomp/config/gcn/bar.h
  29fc36d37c9ca7b0db1c04f766be1f6a  libgomp/config/gcn/doacross.h
*************** d77d4ae9962036bcecc3a3ba0cc10040  libgom
*** 141691,141697 ****
  e7c5c296b51e59e33374488e93c9c6ab  libgomp/config/linux/mips/futex.h
  47e7a47aebd6958882eef3212804e900  libgomp/config/linux/mutex.c
  0e18908d6748091d5123412101b2a228  libgomp/config/linux/mutex.h
! a629129febd91dc2742200ef90fb4aae  libgomp/config/linux/numa.c
  7973e447504d3a02e64bae101b909b1a  libgomp/config/linux/omp-lock.h
  e75b2f29c2bf9217db7e9d912f650fc6  libgomp/config/linux/powerpc/futex.h
  4c0ff8c6c44815a5051b7050398c1bff  libgomp/config/linux/proc.c
--- 141941,141947 ----
  e7c5c296b51e59e33374488e93c9c6ab  libgomp/config/linux/mips/futex.h
  47e7a47aebd6958882eef3212804e900  libgomp/config/linux/mutex.c
  0e18908d6748091d5123412101b2a228  libgomp/config/linux/mutex.h
! 92aa0764303b06a037e1559eef41ffe8  libgomp/config/linux/numa.c
  7973e447504d3a02e64bae101b909b1a  libgomp/config/linux/omp-lock.h
  e75b2f29c2bf9217db7e9d912f650fc6  libgomp/config/linux/powerpc/futex.h
  4c0ff8c6c44815a5051b7050398c1bff  libgomp/config/linux/proc.c
*************** d3a72ccce26c398bd798deb83f170cb7  libgom
*** 141710,141716 ****
  05d455c76365fc3c7a98fb3db3fec9e1  libgomp/config/mingw32/proc.c
  fa13c699b8d4b45d835b66dfc07ef197  libgomp/config/mingw32/time.c
  79837f1bb85e98cd8a86efcae73be3c2  libgomp/config/nvptx/affinity-fmt.c
! 52fcf2d702ad06c1a3a7c0921a2567ab  libgomp/config/nvptx/allocator.c
  6bb7711f9ae2bc93662a9c5ece06f7ee  libgomp/config/nvptx/atomic.c
  d50200c4a7b88fc3fe0b27bd60040dc4  libgomp/config/nvptx/bar.c
  0f6ce310d9c3f02d080592923013e841  libgomp/config/nvptx/bar.h
--- 141960,141966 ----
  05d455c76365fc3c7a98fb3db3fec9e1  libgomp/config/mingw32/proc.c
  fa13c699b8d4b45d835b66dfc07ef197  libgomp/config/mingw32/time.c
  79837f1bb85e98cd8a86efcae73be3c2  libgomp/config/nvptx/affinity-fmt.c
! 068f59a17cf370502ed771ec877cf03a  libgomp/config/nvptx/allocator.c
  6bb7711f9ae2bc93662a9c5ece06f7ee  libgomp/config/nvptx/atomic.c
  d50200c4a7b88fc3fe0b27bd60040dc4  libgomp/config/nvptx/bar.c
  0f6ce310d9c3f02d080592923013e841  libgomp/config/nvptx/bar.h
*************** f0499683d858cdb2fa18624722532be0  libgom
*** 141721,141727 ****
  ca14627edee8edaa51ae0d2606f17be4  libgomp/config/nvptx/simple-bar.h
  d4ef411ea34a5e21bbc28b10c1f3b9cf  libgomp/config/nvptx/target.c
  1ccc40324f0cdb57674db555b003e81d  libgomp/config/nvptx/task.c
! 4e1466b25843542d995400bca06e4868  libgomp/config/nvptx/team.c
  6a2f12a09bf4819db6c48ee99a46a005  libgomp/config/nvptx/teams.c
  1e82aa2630626e511ff0d1341a76d2fb  libgomp/config/nvptx/time.c
  f71a2c1760df3cace4ad96cbc50e724c  libgomp/config/posix/bar.c
--- 141971,141977 ----
  ca14627edee8edaa51ae0d2606f17be4  libgomp/config/nvptx/simple-bar.h
  d4ef411ea34a5e21bbc28b10c1f3b9cf  libgomp/config/nvptx/target.c
  1ccc40324f0cdb57674db555b003e81d  libgomp/config/nvptx/task.c
! f3acd222abbaa3769c5ea50494029c42  libgomp/config/nvptx/team.c
  6a2f12a09bf4819db6c48ee99a46a005  libgomp/config/nvptx/teams.c
  1e82aa2630626e511ff0d1341a76d2fb  libgomp/config/nvptx/time.c
  f71a2c1760df3cace4ad96cbc50e724c  libgomp/config/posix/bar.c
*************** f3cf1a56a2c0bdc1d3163a84be663e4e  libgom
*** 141751,141758 ****
  efc434763cbe71b67359f1858f6c9480  libgomp/config/rtems/sem.c
  14ca4af6299649b5ee50274d7dc740ce  libgomp/config/rtems/sem.h
  af41d1d04a4112345554ca8b8a072ed9  libgomp/config/t-aix
! e24fbe0295408a451cb420526533051f  libgomp/configure
! 907661a423c189b9a0caa0cf988acbce  libgomp/configure.ac
  930b51fbaf703b3ba35215a18e3e0464  libgomp/configure.tgt
  32ee987623cb1d4e924d40431df6168d  libgomp/critical.c
  58467d214066591e724f1370bfeb505a  libgomp/env.c
--- 142001,142008 ----
  efc434763cbe71b67359f1858f6c9480  libgomp/config/rtems/sem.c
  14ca4af6299649b5ee50274d7dc740ce  libgomp/config/rtems/sem.h
  af41d1d04a4112345554ca8b8a072ed9  libgomp/config/t-aix
! 290c6879975020b04268e97dac5339ca  libgomp/configure
! dde4114403845ac867f58df6197f92c0  libgomp/configure.ac
  930b51fbaf703b3ba35215a18e3e0464  libgomp/configure.tgt
  32ee987623cb1d4e924d40431df6168d  libgomp/critical.c
  58467d214066591e724f1370bfeb505a  libgomp/env.c
*************** a1605e6bc0999c90a1c4e966af584f1c  libgom
*** 141764,141771 ****
  e40f7f1dbaf7de3643dec21493aed6b5  libgomp/iter.c
  6d019b48c2311268a20cabe9f65f73ad  libgomp/iter_ull.c
  e59f9d9c4947a5f7d4bdd011da890930  libgomp/libgomp-plugin.c
! 9304dc649fd491bbe591b24bd59dbca4  libgomp/libgomp-plugin.h
! 47525f7d91f1fb8f5ff4f471e17bae2c  libgomp/libgomp.h
  c227fce7002f7e0944869b5940e49fc8  libgomp/libgomp.map
  8b2aa50aecad82171348a6918309afd6  libgomp/libgomp.spec.in
  b7fa019d9bea4de0a9b979a11a262ebf  libgomp/libgomp.texi
--- 142014,142021 ----
  e40f7f1dbaf7de3643dec21493aed6b5  libgomp/iter.c
  6d019b48c2311268a20cabe9f65f73ad  libgomp/iter_ull.c
  e59f9d9c4947a5f7d4bdd011da890930  libgomp/libgomp-plugin.c
! 5159bdd2c1f79b781dc70f618a9c8f34  libgomp/libgomp-plugin.h
! 8ea87cdae5f8849f75c6e4c9e7a06439  libgomp/libgomp.h
  c227fce7002f7e0944869b5940e49fc8  libgomp/libgomp.map
  8b2aa50aecad82171348a6918309afd6  libgomp/libgomp.spec.in
  b7fa019d9bea4de0a9b979a11a262ebf  libgomp/libgomp.texi
*************** b7fa019d9bea4de0a9b979a11a262ebf  libgom
*** 141777,141783 ****
  806319a3f4077f3dfe6699ec2e9051c9  libgomp/numa.c
  6688bf57d8344fc3ab514e0ca98629a5  libgomp/oacc-async.c
  7685edcf1f7e7bced0d4ea02b83aa067  libgomp/oacc-cuda.c
! 61adf03be7b2d1afcc210f5648057a45  libgomp/oacc-host.c
  b3f833875984eab706157cc388a6e14a  libgomp/oacc-init.c
  051187f12f492968f6d4abb837e9d0c8  libgomp/oacc-int.h
  dd36fcbd7fd6cd40560a449ca272d054  libgomp/oacc-mem.c
--- 142027,142033 ----
  806319a3f4077f3dfe6699ec2e9051c9  libgomp/numa.c
  6688bf57d8344fc3ab514e0ca98629a5  libgomp/oacc-async.c
  7685edcf1f7e7bced0d4ea02b83aa067  libgomp/oacc-cuda.c
! 26f56345799422198bbf1812f0ab2c0f  libgomp/oacc-host.c
  b3f833875984eab706157cc388a6e14a  libgomp/oacc-init.c
  051187f12f492968f6d4abb837e9d0c8  libgomp/oacc-int.h
  dd36fcbd7fd6cd40560a449ca272d054  libgomp/oacc-mem.c
*************** a19fe470b125fddc580e5e0bbeee471d  libgom
*** 141799,141806 ****
  fab10af27c836c7b90303245f3965cb8  libgomp/plugin/configfrag.ac
  471ff3e1b4f9a16cc006a5fa4c1542d3  libgomp/plugin/cuda-lib.def
  d024ec56acbc3411cedc7899b8bbdd02  libgomp/plugin/mutex.c
! fdff70072a32c3f2c613c35948efa0b1  libgomp/plugin/plugin-gcn.c
! cc929b1986f7751d9e2014305ba999fb  libgomp/plugin/plugin-nvptx.c
  575940d2b8e2a941f78af850aac28928  libgomp/priority_queue.c
  c88620bad36f9c420348d0508bd4b346  libgomp/priority_queue.h
  20aaa72861afa50254f90e9a0839d451  libgomp/scope.c
--- 142049,142056 ----
  fab10af27c836c7b90303245f3965cb8  libgomp/plugin/configfrag.ac
  471ff3e1b4f9a16cc006a5fa4c1542d3  libgomp/plugin/cuda-lib.def
  d024ec56acbc3411cedc7899b8bbdd02  libgomp/plugin/mutex.c
! b619d4c1f8ffce0f77aa07ea9d2e2f30  libgomp/plugin/plugin-gcn.c
! d84b7e6e9eb6b2aeb644aed94c9d77c1  libgomp/plugin/plugin-nvptx.c
  575940d2b8e2a941f78af850aac28928  libgomp/priority_queue.c
  c88620bad36f9c420348d0508bd4b346  libgomp/priority_queue.h
  20aaa72861afa50254f90e9a0839d451  libgomp/scope.c
*************** ed195dc04ac3e252f89029dee0bc9c05  libgom
*** 141812,141818 ****
  bbb8b404de421c08a4468a7c149897e3  libgomp/splay-tree.h
  1775f6ebbed5a9aef1882e66136d9e2b  libgomp/target-cxa-dso-dtor.c
  efc6f457ddec802a552a289c9f6cec1d  libgomp/target-indirect.c
! 2709cc03bb2c86820c8b73bb127d0554  libgomp/target.c
  9423c0473a15a8d13b93375561ef5058  libgomp/task.c
  7f9c7ebe470f1e58806b1136258bd786  libgomp/taskloop.c
  abb5e2202aa84d67c967b7dc176fc937  libgomp/team.c
--- 142062,142068 ----
  bbb8b404de421c08a4468a7c149897e3  libgomp/splay-tree.h
  1775f6ebbed5a9aef1882e66136d9e2b  libgomp/target-cxa-dso-dtor.c
  efc6f457ddec802a552a289c9f6cec1d  libgomp/target-indirect.c
! 412555e48be05cd99c065a44045e1bda  libgomp/target.c
  9423c0473a15a8d13b93375561ef5058  libgomp/task.c
  7f9c7ebe470f1e58806b1136258bd786  libgomp/taskloop.c
  abb5e2202aa84d67c967b7dc176fc937  libgomp/team.c
*************** b4922a28ab71a1d4231946eaf7ccabe1  libgom
*** 141867,141873 ****
  5570f8e6ec5f898b0bde691dc573d667  libgomp/testsuite/libgomp.c++/bdv_module3.C
  644dd34f60516a94cf77ebcd1e370d44  libgomp/testsuite/libgomp.c++/bdv_module3_impl.C
  e4dad136e1e8d6b4c3650a1bf731c0a3  libgomp/testsuite/libgomp.c++/bdv_module3_main.C
! 56d205cefae539512ef991036c306d5d  libgomp/testsuite/libgomp.c++/c++.exp
  40e00f7e2acb12d4a4edc44e244a8475  libgomp/testsuite/libgomp.c++/cancel-for-1.C
  1390d00e8471a40c55b009573ddeaf72  libgomp/testsuite/libgomp.c++/cancel-for-2.C
  cc0fc2d47b008343a233c7c3955be678  libgomp/testsuite/libgomp.c++/cancel-parallel-1.C
--- 142117,142123 ----
  5570f8e6ec5f898b0bde691dc573d667  libgomp/testsuite/libgomp.c++/bdv_module3.C
  644dd34f60516a94cf77ebcd1e370d44  libgomp/testsuite/libgomp.c++/bdv_module3_impl.C
  e4dad136e1e8d6b4c3650a1bf731c0a3  libgomp/testsuite/libgomp.c++/bdv_module3_main.C
! c1ca84112ac0a1b299780c8a092fd9d2  libgomp/testsuite/libgomp.c++/c++.exp
  40e00f7e2acb12d4a4edc44e244a8475  libgomp/testsuite/libgomp.c++/cancel-for-1.C
  1390d00e8471a40c55b009573ddeaf72  libgomp/testsuite/libgomp.c++/cancel-for-2.C
  cc0fc2d47b008343a233c7c3955be678  libgomp/testsuite/libgomp.c++/cancel-parallel-1.C
*************** a0ed7c5ec445acca5bb4d3efd5041bbf  libgom
*** 142278,142283 ****
--- 142528,142534 ----
  5b43fe8aeb058a5021d2786d420de521  libgomp/testsuite/libgomp.c++/unroll-2.C
  4d68cef79cc288211337eec1a9a334bc  libgomp/testsuite/libgomp.c++/unroll-full-tile.C
  8226094333b3623182b438aa1ab9a557  libgomp/testsuite/libgomp.c++/use_device_ptr-1.C
+ f9f383a70f2e75489766fcf83dfaa420  libgomp/testsuite/libgomp.c++/uses_allocators-1.C
  9049517c3597f400ce3982fc59a9cb94  libgomp/testsuite/libgomp.c-c++-common/alloc-1.c
  fc7de9de760679e8b92e68cc05f02dcd  libgomp/testsuite/libgomp.c-c++-common/alloc-10.c
  bccf9e446fd11a6e948feeb14eed067f  libgomp/testsuite/libgomp.c-c++-common/alloc-11.c
*************** ca33c5f9c9903b757ed36247b61aad15  libgom
*** 142647,142652 ****
--- 142898,142912 ----
  448f5dd482b6ef3000923aaa33bb3bfb  libgomp/testsuite/libgomp.c-c++-common/unmap-infinity-2.c
  96f4675f2ddb3142834360b1350ca6e5  libgomp/testsuite/libgomp.c-c++-common/unroll-1.c
  9c2abbff55e05e4a43196cca67da7778  libgomp/testsuite/libgomp.c-c++-common/unroll-non-rect-1.c
+ c8f461dea3df3b1901f5816e62fda50e  libgomp/testsuite/libgomp.c-c++-common/uses_allocators-1.c
+ f63269ffba195cd625a7ad0b1c14de8b  libgomp/testsuite/libgomp.c-c++-common/uses_allocators-2.c
+ 8ef62c036dfa6d35bf96830c262631c6  libgomp/testsuite/libgomp.c-c++-common/uses_allocators-3.c
+ 4c376d937e9a5664c517a5a318b5b688  libgomp/testsuite/libgomp.c-c++-common/uses_allocators-4.c
+ 8d6467df4c395043ac7920d3d0f56183  libgomp/testsuite/libgomp.c-c++-common/uses_allocators-5.c
+ 6e3f4c30c91f58d9e9717644c6640416  libgomp/testsuite/libgomp.c-c++-common/uses_allocators-6.c
+ 537d04c97c377ad616b296d08d545a2d  libgomp/testsuite/libgomp.c-c++-common/uses_allocators-7.c
+ a2cac4db2f20f5fa2a61d09ae82d47d2  libgomp/testsuite/libgomp.c-c++-common/uses_allocators-8.c
+ 1a38eed796ab31d7d6ee4385402aba61  libgomp/testsuite/libgomp.c-c++-common/uses_allocators-9.c
  4a1473f6b61b19a2252d130f2617b930  libgomp/testsuite/libgomp.c-c++-common/variable-not-offloaded.c
  60d3668415895b69d193c5caa7d5f9af  libgomp/testsuite/libgomp.c-target/aarch64/aarch64.exp
  7a58e37c0b313a747771027b82cb2e03  libgomp/testsuite/libgomp.c-target/aarch64/firstprivate.c
*************** e55bb2fa22ecfad155b92c445e4128e4  libgom
*** 142723,142729 ****
  1332d360ab9db69538186f861d89a00c  libgomp/testsuite/libgomp.c/autopar-8.c
  0acbde9036da03fdaf1812938e4802fe  libgomp/testsuite/libgomp.c/barrier-1.c
  066b9d9d98732e0a73ac90df1395e15a  libgomp/testsuite/libgomp.c/bitint-1.c
! b7564639746915d44a752a4eb20f16a2  libgomp/testsuite/libgomp.c/c.exp
  02516a63eb7c2c6d10a65b41dd80b536  libgomp/testsuite/libgomp.c/cancel-for-1.c
  101271354eef60f5d929e89131fbe45a  libgomp/testsuite/libgomp.c/cancel-for-2.c
  71b770bf06e4ead110256be4cc3e96fd  libgomp/testsuite/libgomp.c/cancel-parallel-1.c
--- 142983,142989 ----
  1332d360ab9db69538186f861d89a00c  libgomp/testsuite/libgomp.c/autopar-8.c
  0acbde9036da03fdaf1812938e4802fe  libgomp/testsuite/libgomp.c/barrier-1.c
  066b9d9d98732e0a73ac90df1395e15a  libgomp/testsuite/libgomp.c/bitint-1.c
! cedea1681b2deecea00eda1f1bcee1ea  libgomp/testsuite/libgomp.c/c.exp
  02516a63eb7c2c6d10a65b41dd80b536  libgomp/testsuite/libgomp.c/cancel-for-1.c
  101271354eef60f5d929e89131fbe45a  libgomp/testsuite/libgomp.c/cancel-for-2.c
  71b770bf06e4ead110256be4cc3e96fd  libgomp/testsuite/libgomp.c/cancel-parallel-1.c
*************** c22d4261003f9e9a24b78eb85be81a5d  libgom
*** 143337,143343 ****
  482984a687deae231dd6cee06019eeb2  libgomp/testsuite/libgomp.fortran/declare-variant-mod-1-use.f90
  0d6d48032bdd88a941e4e9033c179a13  libgomp/testsuite/libgomp.fortran/declare-variant-mod-1.f90
  645acb6b48e623ae2033047eff79d0d5  libgomp/testsuite/libgomp.fortran/defaultmap-8.f90
! 46ec6b3bd3d025655aa5160872a5d974  libgomp/testsuite/libgomp.fortran/dep-uses-allocators.f90
  085b168af19aac8a6dd4f31eda256d5c  libgomp/testsuite/libgomp.fortran/depend-1.f90
  f528c60f59b52a75c434ced5c9a53e30  libgomp/testsuite/libgomp.fortran/depend-2.f90
  7ebb6e3f3faa4674c639dfcc079e08dc  libgomp/testsuite/libgomp.fortran/depend-3.f90
--- 143597,143603 ----
  482984a687deae231dd6cee06019eeb2  libgomp/testsuite/libgomp.fortran/declare-variant-mod-1-use.f90
  0d6d48032bdd88a941e4e9033c179a13  libgomp/testsuite/libgomp.fortran/declare-variant-mod-1.f90
  645acb6b48e623ae2033047eff79d0d5  libgomp/testsuite/libgomp.fortran/defaultmap-8.f90
! 1afad1c54a31c1c1b8fcd307b320e45e  libgomp/testsuite/libgomp.fortran/dep-uses-allocators.f90
  085b168af19aac8a6dd4f31eda256d5c  libgomp/testsuite/libgomp.fortran/depend-1.f90
  f528c60f59b52a75c434ced5c9a53e30  libgomp/testsuite/libgomp.fortran/depend-2.f90
  7ebb6e3f3faa4674c639dfcc079e08dc  libgomp/testsuite/libgomp.fortran/depend-3.f90
*************** ba23071854d45364a52aa56e0e3316ac  libgom
*** 143806,143814 ****
  145271a42e3885d82155f89fbb8a1d67  libgomp/testsuite/libgomp.fortran/use_device_ptr-optional-3.f90
  dc1df4b97d0fa5209eb509523fa08bfc  libgomp/testsuite/libgomp.fortran/use_device_ptr-optional-4.f90
  fd6becb20369d6ac5a1bacfc014b31a3  libgomp/testsuite/libgomp.fortran/use_intrinsic_1.f90
! 5bbc3937b27e07f6c9b7bee48bb532d7  libgomp/testsuite/libgomp.fortran/uses_allocators-7.f90
! ab50f7a0ebcd9518a07453800a1b5d15  libgomp/testsuite/libgomp.fortran/uses_allocators_1.f90
! 112d434e4f93bd46b5f504a2376b9129  libgomp/testsuite/libgomp.fortran/uses_allocators_2.f90
  fecda9fc3e70ac57c13ecf7a85196138  libgomp/testsuite/libgomp.fortran/vla1.f90
  4bd76ef74f55ed2027a8be5f22222133  libgomp/testsuite/libgomp.fortran/vla2.f90
  aadd57f9487c4584ba47a1bbdb07af7c  libgomp/testsuite/libgomp.fortran/vla3.f90
--- 144066,144079 ----
  145271a42e3885d82155f89fbb8a1d67  libgomp/testsuite/libgomp.fortran/use_device_ptr-optional-3.f90
  dc1df4b97d0fa5209eb509523fa08bfc  libgomp/testsuite/libgomp.fortran/use_device_ptr-optional-4.f90
  fd6becb20369d6ac5a1bacfc014b31a3  libgomp/testsuite/libgomp.fortran/use_intrinsic_1.f90
! 5f9e486115fc188a7bd77ba11463602b  libgomp/testsuite/libgomp.fortran/uses_allocators-1.f90
! ab50f7a0ebcd9518a07453800a1b5d15  libgomp/testsuite/libgomp.fortran/uses_allocators-2.f90
! 2e7955c7b8751d74f5905e203bc6e4e3  libgomp/testsuite/libgomp.fortran/uses_allocators-3.f90
! c69520ca63d2bd1fc48bec0b58445e67  libgomp/testsuite/libgomp.fortran/uses_allocators-4.f90
! 1009c9a890dba82a5f8b530055e5fadd  libgomp/testsuite/libgomp.fortran/uses_allocators-5.f90
! 550655c88f24a9cbd6988b8b98783506  libgomp/testsuite/libgomp.fortran/uses_allocators-6.f90
! a9d666245fdf9d1c2675ff27c2a18309  libgomp/testsuite/libgomp.fortran/uses_allocators-7.f90
! 6b509406046ad69effe4fc4f16d73e0a  libgomp/testsuite/libgomp.fortran/uses_allocators-8.f90
  fecda9fc3e70ac57c13ecf7a85196138  libgomp/testsuite/libgomp.fortran/vla1.f90
  4bd76ef74f55ed2027a8be5f22222133  libgomp/testsuite/libgomp.fortran/vla2.f90
  aadd57f9487c4584ba47a1bbdb07af7c  libgomp/testsuite/libgomp.fortran/vla3.f90
*************** e8a3245c095430c8ef2413afe2ee4c48  libgom
*** 144526,144537 ****
  1d2e2e1ab9f0d92351625f2c5661dbb8  libgomp/testsuite/libgomp.oacc-fortran/update-dt-array.f90
  989e6535f20045be32e9e91643a0b08f  libgomp/testsuite/libgomp.oacc-fortran/vector-routine.f90
  21ae8b0fcbc378578f1ab4fff5a03e13  libgomp/work.c
! 48d57463f7294267d34bdad26e773d23  libgrust/ChangeLog
  e61ce18b1a86e6764b3436d0638ec4d2  libgrust/Makefile.am
  4d65d186378f0d15c49ae12508c6f970  libgrust/Makefile.in
  721420f55c97c79b3d7ecacfc67a0714  libgrust/aclocal.m4
  ca21de5d193aaec73b079d98ab82b5c5  libgrust/configure
! 6e88162c13e29e24bf10ce9dcf460234  libgrust/configure.ac
  d4c7febd30951f7fbd584476dbb2dd70  libgrust/libformat_parser/.cargo/config.toml
  2fa265f924108a04b2f2c90b0a4354e0  libgrust/libformat_parser/Cargo.lock
  8cec9880de601ee65e80046d74137ca6  libgrust/libformat_parser/Cargo.toml
--- 144791,144802 ----
  1d2e2e1ab9f0d92351625f2c5661dbb8  libgomp/testsuite/libgomp.oacc-fortran/update-dt-array.f90
  989e6535f20045be32e9e91643a0b08f  libgomp/testsuite/libgomp.oacc-fortran/vector-routine.f90
  21ae8b0fcbc378578f1ab4fff5a03e13  libgomp/work.c
! 6b4f581e2e6f8f51e59444756f6b59a5  libgrust/ChangeLog
  e61ce18b1a86e6764b3436d0638ec4d2  libgrust/Makefile.am
  4d65d186378f0d15c49ae12508c6f970  libgrust/Makefile.in
  721420f55c97c79b3d7ecacfc67a0714  libgrust/aclocal.m4
  ca21de5d193aaec73b079d98ab82b5c5  libgrust/configure
! fafc89a9fdfa633314b8e602b2fe7a01  libgrust/configure.ac
  d4c7febd30951f7fbd584476dbb2dd70  libgrust/libformat_parser/.cargo/config.toml
  2fa265f924108a04b2f2c90b0a4354e0  libgrust/libformat_parser/Cargo.lock
  8cec9880de601ee65e80046d74137ca6  libgrust/libformat_parser/Cargo.toml
*************** d1c33a8b5e0f3d9a19ffe583f8e72f56  libgru
*** 145281,145292 ****
  c21183b1df7f7afb240d765035277db1  libgrust/rustc-lib/version-info
  99c2e5e712b990ee07be10f53e41f3fb  libiberty/.gitignore
  a916467b91076e631dd8edb7424769c7  libiberty/COPYING.LIB
! 49a1d8cc540f33ea761855b670d80694  libiberty/ChangeLog
  347c31392973de6a4872d540c1718dc1  libiberty/ChangeLog.jit
  de0b0731d5d06e748df71e896c6078a5  libiberty/Makefile.in
  8b93d0e0369daed24e2260ccfd102eb3  libiberty/README
  cfb5c6013ed34d9d349e8dc340c04af5  libiberty/_doprnt.c
! ae499efa54db8524b519ccf13d4d4458  libiberty/acinclude.m4
  9c7c0833924a60c564bf194e11b22795  libiberty/aclocal.m4
  44755c536efb9b79a3ebdfe6b0da5904  libiberty/alloca.c
  33f4debe21bcd0920f3e5a9abb30f59a  libiberty/argv.c
--- 145546,145557 ----
  c21183b1df7f7afb240d765035277db1  libgrust/rustc-lib/version-info
  99c2e5e712b990ee07be10f53e41f3fb  libiberty/.gitignore
  a916467b91076e631dd8edb7424769c7  libiberty/COPYING.LIB
! 73bd108de66fed9b419106b7c8b09bf2  libiberty/ChangeLog
  347c31392973de6a4872d540c1718dc1  libiberty/ChangeLog.jit
  de0b0731d5d06e748df71e896c6078a5  libiberty/Makefile.in
  8b93d0e0369daed24e2260ccfd102eb3  libiberty/README
  cfb5c6013ed34d9d349e8dc340c04af5  libiberty/_doprnt.c
! 23d95cd140ec69650ed3a8ad1b93540f  libiberty/acinclude.m4
  9c7c0833924a60c564bf194e11b22795  libiberty/aclocal.m4
  44755c536efb9b79a3ebdfe6b0da5904  libiberty/alloca.c
  33f4debe21bcd0920f3e5a9abb30f59a  libiberty/argv.c
*************** fe207e3e1c9a646419aca7d44b89eeba  libibe
*** 145311,145321 ****
  904bdcd9daf97fa55a9ca8901ffe7435  libiberty/config/mh-openedition
  38e76da568ab25260754fdb9d5080513  libiberty/config/mh-windows
  d7ddca59b1df9a618acbc9d39f4a7083  libiberty/configure
! 47e63e11ce9abb0cf59f7362df7256e2  libiberty/configure.ac
  193826e77c2cb5ea7289dc272ec23d5d  libiberty/configure.com
  95bcfe50b43ca9b1fd315a368b837401  libiberty/copying-lib.texi
  fe053283d3559af3ec5cac45f8ead009  libiberty/copysign.c
! 50f1d82156729462705650020792ea99  libiberty/cp-demangle.c
  3f778bba8cac0dc0b2ba7e95e6b6cba7  libiberty/cp-demangle.h
  9d8c6d653bfa24871a73c565b6d3e33b  libiberty/cp-demint.c
  03321912732b6b330b17b4be2c45e80e  libiberty/cplus-dem.c
--- 145576,145586 ----
  904bdcd9daf97fa55a9ca8901ffe7435  libiberty/config/mh-openedition
  38e76da568ab25260754fdb9d5080513  libiberty/config/mh-windows
  d7ddca59b1df9a618acbc9d39f4a7083  libiberty/configure
! e648e693965624b48324d7ad5424efd6  libiberty/configure.ac
  193826e77c2cb5ea7289dc272ec23d5d  libiberty/configure.com
  95bcfe50b43ca9b1fd315a368b837401  libiberty/copying-lib.texi
  fe053283d3559af3ec5cac45f8ead009  libiberty/copysign.c
! fc5e470f9d8596e971cfd9da8f5a24ab  libiberty/cp-demangle.c
  3f778bba8cac0dc0b2ba7e95e6b6cba7  libiberty/cp-demangle.h
  9d8c6d653bfa24871a73c565b6d3e33b  libiberty/cp-demint.c
  03321912732b6b330b17b4be2c45e80e  libiberty/cplus-dem.c
*************** e52d95644dc6f186070f349a5903ca72  libibe
*** 145451,145462 ****
  6f774a92661ca4a067f1691a7925524b  libiberty/xstrerror.c
  82039c5e76badca485d7ec27bf160ba4  libiberty/xstrndup.c
  2052196fd1de9a9efa8722031398f544  libiberty/xvasprintf.c
! 4c8ac3eb3fc76599f96bc1926a08e49f  libitm/ChangeLog
  763fe82c2e5c5ae9547defb28107952a  libitm/Makefile.am
  4fb260790809cc0a691787692a7d2d92  libitm/Makefile.in
  86465895a9d654faded88bc3fa075117  libitm/aatree.cc
  95728dd37e8694d4ccdcdb365595d1f4  libitm/aatree.h
! b4fe1884c3777b97fb937aba66e840eb  libitm/acinclude.m4
  c057faa22b091382c3fe2dc7fcc66132  libitm/aclocal.m4
  c698cef271968e273f64e6524284df79  libitm/alloc.cc
  8d808238ba54cd7fea551d4e70b4855a  libitm/alloc_c.cc
--- 145716,145727 ----
  6f774a92661ca4a067f1691a7925524b  libiberty/xstrerror.c
  82039c5e76badca485d7ec27bf160ba4  libiberty/xstrndup.c
  2052196fd1de9a9efa8722031398f544  libiberty/xvasprintf.c
! cfee045530db3bfc00a57fabb18086d9  libitm/ChangeLog
  763fe82c2e5c5ae9547defb28107952a  libitm/Makefile.am
  4fb260790809cc0a691787692a7d2d92  libitm/Makefile.in
  86465895a9d654faded88bc3fa075117  libitm/aatree.cc
  95728dd37e8694d4ccdcdb365595d1f4  libitm/aatree.h
! e45588c657afebcafcebd1f4306de222  libitm/acinclude.m4
  c057faa22b091382c3fe2dc7fcc66132  libitm/aclocal.m4
  c698cef271968e273f64e6524284df79  libitm/alloc.cc
  8d808238ba54cd7fea551d4e70b4855a  libitm/alloc_c.cc
*************** aa8f2630a2936b0e0a9b41f87cb03fc7  libitm
*** 145509,145515 ****
  d3a1591c1c6369e67ec11caecea31c4a  libitm/config/x86/x86_avx.cc
  484d4b9ccacf3bf7f6ecb13aae8b1baa  libitm/config/x86/x86_sse.cc
  5d6600af898b3834e2b634ed18c7bd65  libitm/configure
! bf279302b1746f89596e54fb64658210  libitm/configure.ac
  fbac9861d92da62020d608222ecf20a4  libitm/configure.tgt
  03a80c7dc2652bcaa734264355b95fd7  libitm/containers.h
  34471bd45c09fa5856a961fce894883e  libitm/dispatch.h
--- 145774,145780 ----
  d3a1591c1c6369e67ec11caecea31c4a  libitm/config/x86/x86_avx.cc
  484d4b9ccacf3bf7f6ecb13aae8b1baa  libitm/config/x86/x86_sse.cc
  5d6600af898b3834e2b634ed18c7bd65  libitm/configure
! 0cee4b8de32d0d056ed3c0671fb1f075  libitm/configure.ac
  fbac9861d92da62020d608222ecf20a4  libitm/configure.tgt
  03a80c7dc2652bcaa734264355b95fd7  libitm/containers.h
  34471bd45c09fa5856a961fce894883e  libitm/dispatch.h
*************** b4e503ecfdccc9f13da8f73eeb6f23a9  libitm
*** 145560,145566 ****
  ef24198422c19f99b0c41be6a16f7081  libitm/testsuite/libitm.c/txrelease.c
  c3e113a78c53f840b66af3b92db7cc07  libitm/useraction.cc
  c8b0fe8706ab17c3263ffd34537bb518  libitm/util.cc
! 0571216d00f839a34b64bdfcf2da65b9  libobjc/ChangeLog
  a4237dc680fa0aac2c2a15453d259981  libobjc/Makefile.in
  f4b2a5863178e458ee1144d43d67cfee  libobjc/NXConstStr.m
  0feb4f9789d438780bd87bb3cf14113d  libobjc/Object.m
--- 145825,145831 ----
  ef24198422c19f99b0c41be6a16f7081  libitm/testsuite/libitm.c/txrelease.c
  c3e113a78c53f840b66af3b92db7cc07  libitm/useraction.cc
  c8b0fe8706ab17c3263ffd34537bb518  libitm/util.cc
! 7a2c891ce6571beb3e172253180202f4  libobjc/ChangeLog
  a4237dc680fa0aac2c2a15453d259981  libobjc/Makefile.in
  f4b2a5863178e458ee1144d43d67cfee  libobjc/NXConstStr.m
  0feb4f9789d438780bd87bb3cf14113d  libobjc/Object.m
*************** d271ceeb6fd83495215ccddfaf312164  libobj
*** 145572,145579 ****
  ddc881248a93893607a35d7d02eec385  libobjc/aclocal.m4
  8ccfe69eeba35b5d00ca1280ba72a7fc  libobjc/class.c
  a9245d99d9418e18cecf891d7a93d664  libobjc/config.h.in
! c64c455f0ae2e261c09dc09c2fae721e  libobjc/configure
! e1a81370b4a31f32af61603004178e17  libobjc/configure.ac
  90b370aadc90d6feb7170e17655773fa  libobjc/encoding.c
  f631e12c8d20d11939eac9717081b63a  libobjc/error.c
  b45ee131ef377ca6dd36b04eff7b8425  libobjc/exception.c
--- 145837,145844 ----
  ddc881248a93893607a35d7d02eec385  libobjc/aclocal.m4
  8ccfe69eeba35b5d00ca1280ba72a7fc  libobjc/class.c
  a9245d99d9418e18cecf891d7a93d664  libobjc/config.h.in
! 1dffa8233bd88dc8193e0729ace95e65  libobjc/configure
! 966853bb00a7dcfd8fddb6186207f520  libobjc/configure.ac
  90b370aadc90d6feb7170e17655773fa  libobjc/encoding.c
  f631e12c8d20d11939eac9717081b63a  libobjc/error.c
  b45ee131ef377ca6dd36b04eff7b8425  libobjc/exception.c
*************** db97a70a62d75baf7c6133362b383ccb  libobj
*** 145617,145631 ****
  d1e7c7c92a4c08557a1274ac25bac6e2  libobjc/selector.c
  029b66bb69dc70e347fe3849fc60cfd3  libobjc/sendmsg.c
  e968027639cc91f736aa2aeaee56682c  libobjc/thr.c
! 98a61e357a4683054c1747ff2d1ee045  libphobos/ChangeLog
  958562279744f77373a0c5c9dc43b414  libphobos/Makefile.am
  a4ee57d4fc32508060fff33b4fc4f976  libphobos/Makefile.in
  ee88c20a7744a2305503e1670f3b7889  libphobos/README.gcc
  20b3967156eb78eebe5dd9dbb9ca4aad  libphobos/acinclude.m4
  5d61fe3538c61043be580f44d89a0ccd  libphobos/aclocal.m4
  0c33f8a64a5c7307de4f56c482966852  libphobos/config.h.in
! 8801ef01f6a4b0f374c625d57d497bd5  libphobos/configure
! 93f5dea1f6f8471657ee180f92f09f63  libphobos/configure.ac
  fe4d29c76b2813284a7595bb311d044e  libphobos/configure.tgt
  6bc36d3a1bb57ce2fd265f1abf3faa98  libphobos/d_rules.am
  e4224ccaecb14d942c71d31bef20d78c  libphobos/libdruntime/LICENSE.txt
--- 145882,145896 ----
  d1e7c7c92a4c08557a1274ac25bac6e2  libobjc/selector.c
  029b66bb69dc70e347fe3849fc60cfd3  libobjc/sendmsg.c
  e968027639cc91f736aa2aeaee56682c  libobjc/thr.c
! 3dba63427c4f440a902f353661899777  libphobos/ChangeLog
  958562279744f77373a0c5c9dc43b414  libphobos/Makefile.am
  a4ee57d4fc32508060fff33b4fc4f976  libphobos/Makefile.in
  ee88c20a7744a2305503e1670f3b7889  libphobos/README.gcc
  20b3967156eb78eebe5dd9dbb9ca4aad  libphobos/acinclude.m4
  5d61fe3538c61043be580f44d89a0ccd  libphobos/aclocal.m4
  0c33f8a64a5c7307de4f56c482966852  libphobos/config.h.in
! 9f9ca9d590c29dd2d5cba0fc6b35ab9a  libphobos/configure
! 04c04a204e657815625bdee9e8424a6c  libphobos/configure.ac
  fe4d29c76b2813284a7595bb311d044e  libphobos/configure.tgt
  6bc36d3a1bb57ce2fd265f1abf3faa98  libphobos/d_rules.am
  e4224ccaecb14d942c71d31bef20d78c  libphobos/libdruntime/LICENSE.txt
*************** f1e0e7f32e50c9d6628a251dd76fda9a  libpho
*** 146213,146222 ****
  013e9098f3754477999eab42054b5cc2  libphobos/libdruntime/rt/util/typeinfo.d
  b44590c842b754fede38a9a70a5b2d53  libphobos/libdruntime/rt/util/utility.d
  98e21634a122597ed7abb6150c41cdbf  libphobos/m4/autoconf.m4
! cbef578492ab132e253c07ad83e6ee8a  libphobos/m4/druntime.m4
! 2157f801b8e7e6a834559bcfe402c105  libphobos/m4/druntime/cpu.m4
  85906ebe53a95f2ccaa626b006ea0256  libphobos/m4/druntime/libraries.m4
! 9e6660cf64066a1db6917b8b90ffe9c8  libphobos/m4/druntime/os.m4
  be2340569194e9c072c40fc94eab3483  libphobos/m4/gcc_support.m4
  c49ab40607849fa623787878420e7207  libphobos/m4/gdc.m4
  458abf211dc60540bf28a9257d4bd4e5  libphobos/m4/libtool.m4
--- 146478,146487 ----
  013e9098f3754477999eab42054b5cc2  libphobos/libdruntime/rt/util/typeinfo.d
  b44590c842b754fede38a9a70a5b2d53  libphobos/libdruntime/rt/util/utility.d
  98e21634a122597ed7abb6150c41cdbf  libphobos/m4/autoconf.m4
! 982a29e8a68f0ce32507d8e2d0166f1a  libphobos/m4/druntime.m4
! 21f4ea102e72ea3c0b416fbc4696f601  libphobos/m4/druntime/cpu.m4
  85906ebe53a95f2ccaa626b006ea0256  libphobos/m4/druntime/libraries.m4
! fdb73cc8a764751f175350d21ff338dc  libphobos/m4/druntime/os.m4
  be2340569194e9c072c40fc94eab3483  libphobos/m4/gcc_support.m4
  c49ab40607849fa623787878420e7207  libphobos/m4/gdc.m4
  458abf211dc60540bf28a9257d4bd4e5  libphobos/m4/libtool.m4
*************** b394cf23a598d3271d7bd5c679c7febd  libpho
*** 146622,146635 ****
  0342110002aef9526eb42753cd0cfac9  libphobos/testsuite/libphobos.unittest/unittest.exp
  a8de1f183b347afc269d237f3fd14b61  libphobos/testsuite/testsuite_flags.in
  a916467b91076e631dd8edb7424769c7  libquadmath/COPYING.LIB
! b9296bf4f61a04786f15d0c6886fdb13  libquadmath/ChangeLog
  d981cb45023d55b1fe9629d54c616528  libquadmath/Makefile.am
  8b9db4fd541847f61d62cd2525d1554f  libquadmath/Makefile.in
  d9afbc1f1e04c7e461265ff9323cc6f4  libquadmath/acinclude.m4
  60e3e895657a5d17916b45bef8520907  libquadmath/aclocal.m4
  cf5a7864ff15ab4dd1604e0f6fe4e501  libquadmath/config.h.in
  a867164183e0a8e1b47d6e41f65f6163  libquadmath/configure
! c16d6073d91cefda754d990ede4d9e9f  libquadmath/configure.ac
  e9aac26552a4c62905a806a9341611de  libquadmath/libquadmath.texi
  77280bb7ee423875e03d9c0d34527df6  libquadmath/libtool-version
  452fee0ef153d65eb7413a5103c63a23  libquadmath/math/acoshq.c
--- 146887,146900 ----
  0342110002aef9526eb42753cd0cfac9  libphobos/testsuite/libphobos.unittest/unittest.exp
  a8de1f183b347afc269d237f3fd14b61  libphobos/testsuite/testsuite_flags.in
  a916467b91076e631dd8edb7424769c7  libquadmath/COPYING.LIB
! a455b784c66f6de6e0d2fa685b030425  libquadmath/ChangeLog
  d981cb45023d55b1fe9629d54c616528  libquadmath/Makefile.am
  8b9db4fd541847f61d62cd2525d1554f  libquadmath/Makefile.in
  d9afbc1f1e04c7e461265ff9323cc6f4  libquadmath/acinclude.m4
  60e3e895657a5d17916b45bef8520907  libquadmath/aclocal.m4
  cf5a7864ff15ab4dd1604e0f6fe4e501  libquadmath/config.h.in
  a867164183e0a8e1b47d6e41f65f6163  libquadmath/configure
! 6bae30535b84a28bc74c3e6288f30cc4  libquadmath/configure.ac
  e9aac26552a4c62905a806a9341611de  libquadmath/libquadmath.texi
  77280bb7ee423875e03d9c0d34527df6  libquadmath/libtool-version
  452fee0ef153d65eb7413a5103c63a23  libquadmath/math/acoshq.c
*************** a73fdec6746eaad8ccdc8e8403aac562  libqua
*** 146762,146768 ****
  af84fa5118f4adec8393614994e1c4d6  libquadmath/strtod/strtoflt128.c
  d15a18f7c46ba2add6148edc5b7563c0  libquadmath/strtod/tens_in_limb.c
  c302c3214d8b4d35988d1d26698e9cff  libquadmath/update-quadmath.py
! 823b7851e00bf3a6e2fa2578b8d27f0e  libsanitizer/ChangeLog
  63916ba64a3cfa7ce2809fb46ab38597  libsanitizer/HOWTO_MERGE
  0249c37748936faf5b1efd5789587909  libsanitizer/LICENSE.TXT
  f59c588c924fa6a8fdf5b39671ce29c5  libsanitizer/LOCAL_PATCHES
--- 147027,147033 ----
  af84fa5118f4adec8393614994e1c4d6  libquadmath/strtod/strtoflt128.c
  d15a18f7c46ba2add6148edc5b7563c0  libquadmath/strtod/tens_in_limb.c
  c302c3214d8b4d35988d1d26698e9cff  libquadmath/update-quadmath.py
! e26a626438a39358b657c158551aaa6f  libsanitizer/ChangeLog
  63916ba64a3cfa7ce2809fb46ab38597  libsanitizer/HOWTO_MERGE
  0249c37748936faf5b1efd5789587909  libsanitizer/LICENSE.TXT
  f59c588c924fa6a8fdf5b39671ce29c5  libsanitizer/LOCAL_PATCHES
*************** faf2a6ac3826446f8109f955fc331f15  libsan
*** 146841,146847 ****
  c8af4438003f230ddf6b43349c1c56c8  libsanitizer/builtins/assembly.h
  4d6948c4912be5da16e30aac001b87d7  libsanitizer/config.h.in
  1c7393d71f6c8c72587a1c6c5330f9e2  libsanitizer/configure
! 4fb8fe43cd5510b08a3abc9a38bc4ea3  libsanitizer/configure.ac
  c14a5dbebdad858b6ca59fc5c0a11155  libsanitizer/configure.tgt
  c5fe0662e5d5bbb3d31d1a11669cdbb8  libsanitizer/hwasan/Makefile.am
  7c6905ddf409ba02f8a5b7b2cf41f46c  libsanitizer/hwasan/Makefile.in
--- 147106,147112 ----
  c8af4438003f230ddf6b43349c1c56c8  libsanitizer/builtins/assembly.h
  4d6948c4912be5da16e30aac001b87d7  libsanitizer/config.h.in
  1c7393d71f6c8c72587a1c6c5330f9e2  libsanitizer/configure
! 9b4c84c63a03b785a2dd33d0ad57df84  libsanitizer/configure.ac
  c14a5dbebdad858b6ca59fc5c0a11155  libsanitizer/configure.tgt
  c5fe0662e5d5bbb3d31d1a11669cdbb8  libsanitizer/hwasan/Makefile.am
  7c6905ddf409ba02f8a5b7b2cf41f46c  libsanitizer/hwasan/Makefile.in
*************** f01966720c236be4a6f849bb79c2e3a0  libsan
*** 147258,147270 ****
  36c349526a8bcc6a104185c4571b5363  libsanitizer/ubsan/ubsan_value.cpp
  47cf5df0506b64613c633c0d5055e44b  libsanitizer/ubsan/ubsan_value.h
  f44dc970bc1adae9a128b178a339fd0e  libsanitizer/ubsan/ubsan_win_runtime_thunk.cpp
! 1debe6cecd293e1ba30822bc64546e30  libssp/ChangeLog
  37029f29d60169eff30092adbced1e51  libssp/Makefile.am
  caac5761d3acfaa5d0d86a84253ad38b  libssp/Makefile.in
  f1ead518e8acee1f9c1e0e49fd4fa51d  libssp/aclocal.m4
  91a807dee830170e3dc7cde11ae0662d  libssp/config.h.in
  563cc67967a0027e58563a64cb44bfa1  libssp/configure
! 89a15c32762c1812155bed2afe5a0ad0  libssp/configure.ac
  e91104423a6c39a9c8f262bb1b674cca  libssp/gets-chk.c
  0ac32b60459d1fdec670990324d7bdc6  libssp/libtool-version
  c821c0b03460a140fef7af5207503605  libssp/memcpy-chk.c
--- 147523,147535 ----
  36c349526a8bcc6a104185c4571b5363  libsanitizer/ubsan/ubsan_value.cpp
  47cf5df0506b64613c633c0d5055e44b  libsanitizer/ubsan/ubsan_value.h
  f44dc970bc1adae9a128b178a339fd0e  libsanitizer/ubsan/ubsan_win_runtime_thunk.cpp
! 37d8a525f433f8fc4f6152c6244bbc2a  libssp/ChangeLog
  37029f29d60169eff30092adbced1e51  libssp/Makefile.am
  caac5761d3acfaa5d0d86a84253ad38b  libssp/Makefile.in
  f1ead518e8acee1f9c1e0e49fd4fa51d  libssp/aclocal.m4
  91a807dee830170e3dc7cde11ae0662d  libssp/config.h.in
  563cc67967a0027e58563a64cb44bfa1  libssp/configure
! de0a6836b6f7358111d2fc6adbd9347b  libssp/configure.ac
  e91104423a6c39a9c8f262bb1b674cca  libssp/gets-chk.c
  0ac32b60459d1fdec670990324d7bdc6  libssp/libtool-version
  c821c0b03460a140fef7af5207503605  libssp/memcpy-chk.c
*************** c081b77fbf9129f8cd4308501efe591a  libssp
*** 147274,147280 ****
  7dffc47e6430d5a8c7e0d63d9300dc0d  libssp/snprintf-chk.c
  ff61182145b0fe37b9a0474cd31c3b3b  libssp/sprintf-chk.c
  50aafbd7feb497ab2845789a51cae706  libssp/ssp-local.c
! 6e46d177590ead8f77a1b12fa8906089  libssp/ssp.c
  a45e2fbfb70a8e0d68d726bb31ffe4cd  libssp/ssp.map
  a59863fd08a25585333b8939e76dc179  libssp/ssp/ssp.h.in
  f69a97f78a0e0692d3b4a2646f047585  libssp/ssp/stdio.h
--- 147539,147545 ----
  7dffc47e6430d5a8c7e0d63d9300dc0d  libssp/snprintf-chk.c
  ff61182145b0fe37b9a0474cd31c3b3b  libssp/sprintf-chk.c
  50aafbd7feb497ab2845789a51cae706  libssp/ssp-local.c
! 37803bcea29fee18ccbf3c7c5a0a1fac  libssp/ssp.c
  a45e2fbfb70a8e0d68d726bb31ffe4cd  libssp/ssp.map
  a59863fd08a25585333b8939e76dc179  libssp/ssp/ssp.h.in
  f69a97f78a0e0692d3b4a2646f047585  libssp/ssp/stdio.h
*************** a73d560a3ba317c5ad0a7919d87b4b6d  libssp
*** 147288,147294 ****
  7d75fa0d30318408fe4cd91d9cbe3ac7  libssp/vsnprintf-chk.c
  e9ff0f4bdd1be75a507480ed1267459d  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! ee9fbf398bab61dd29db86c1cfe55dc7  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
--- 147553,147559 ----
  7d75fa0d30318408fe4cd91d9cbe3ac7  libssp/vsnprintf-chk.c
  e9ff0f4bdd1be75a507480ed1267459d  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! fcd7a587dd6c6609c5dbef2933d38c3f  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
*************** f39d837ddbb7187c256a4f3a33ec580d  libstd
*** 147525,147531 ****
  0afaede288e1533644cb1445cf4ff813  libstdc++-v3/doc/doxygen/mainpage.html
  9a607c1f658face231aa4f4d3d617510  libstdc++-v3/doc/doxygen/stdheader.cc
  1273764cd133c402d2d3f22cf2913af5  libstdc++-v3/doc/doxygen/tables.html
! 23205b4c12f958aeda8f0336cd90ce85  libstdc++-v3/doc/doxygen/user.cfg.in
  66e139590a163a3e9d632f33fbe1d1b3  libstdc++-v3/doc/html/README
  6d16751d668adf69fac47cc69bde7d40  libstdc++-v3/doc/html/api.html
  08920438eea18325b4bfdf979379ff66  libstdc++-v3/doc/html/bk02.html
--- 147790,147796 ----
  0afaede288e1533644cb1445cf4ff813  libstdc++-v3/doc/doxygen/mainpage.html
  9a607c1f658face231aa4f4d3d617510  libstdc++-v3/doc/doxygen/stdheader.cc
  1273764cd133c402d2d3f22cf2913af5  libstdc++-v3/doc/doxygen/tables.html
! 1eebf39557126feb65153ee62dbcb0c8  libstdc++-v3/doc/doxygen/user.cfg.in
  66e139590a163a3e9d632f33fbe1d1b3  libstdc++-v3/doc/html/README
  6d16751d668adf69fac47cc69bde7d40  libstdc++-v3/doc/html/api.html
  08920438eea18325b4bfdf979379ff66  libstdc++-v3/doc/html/bk02.html
*************** bc0412a9556e7ed39afe5103b73f1f26  libstd
*** 147950,147957 ****
  7b70f0f77a50b976605aef6dbeb1e282  libstdc++-v3/doc/xml/spine.xml
  bd966b4a0df6f2a84f9770525581d45c  libstdc++-v3/doc/xsl/customization.xsl.in
  42d14268f2b16c54a6bc2f71538a838c  libstdc++-v3/fragment.am
! eec02ccdebd1149367f7bc78f5915644  libstdc++-v3/include/Makefile.am
! 619249ce9d71a5415f413a80166ab33b  libstdc++-v3/include/Makefile.in
  c43a95ade3f229bbf11e4df12e566d23  libstdc++-v3/include/backward/auto_ptr.h
  a5311733ecd17a8f51066f4a2a351abd  libstdc++-v3/include/backward/backward_warning.h
  5c3fe230b3089d4b9c58b4a86af57005  libstdc++-v3/include/backward/binders.h
--- 148215,148222 ----
  7b70f0f77a50b976605aef6dbeb1e282  libstdc++-v3/doc/xml/spine.xml
  bd966b4a0df6f2a84f9770525581d45c  libstdc++-v3/doc/xsl/customization.xsl.in
  42d14268f2b16c54a6bc2f71538a838c  libstdc++-v3/fragment.am
! bf5d1a10aa8cf56ce9c3d93487699cc8  libstdc++-v3/include/Makefile.am
! 28ea087ba7b362b48e7572905bc4f8b3  libstdc++-v3/include/Makefile.in
  c43a95ade3f229bbf11e4df12e566d23  libstdc++-v3/include/backward/auto_ptr.h
  a5311733ecd17a8f51066f4a2a351abd  libstdc++-v3/include/backward/backward_warning.h
  5c3fe230b3089d4b9c58b4a86af57005  libstdc++-v3/include/backward/binders.h
*************** e901edfc8eef441d1adabd54be25b807  libstd
*** 147971,147977 ****
  f67bb8f4c8c8e2352479c2540b62543f  libstdc++-v3/include/bits/atomic_wait.h
  65e262c95ca2a5021497a947a07b5d48  libstdc++-v3/include/bits/basic_ios.h
  e0d25c8ddeac5ee95a7b60861849f304  libstdc++-v3/include/bits/basic_ios.tcc
! 8b0994f4016528765cbb9391f5501619  libstdc++-v3/include/bits/basic_string.h
  2f7562208df92df6d82751520c3e1881  libstdc++-v3/include/bits/basic_string.tcc
  abf1c74de0fb52f696034bd48432d075  libstdc++-v3/include/bits/binders.h
  3bc144622d471efab1aef4ec705459d0  libstdc++-v3/include/bits/boost_concept_check.h
--- 148236,148242 ----
  f67bb8f4c8c8e2352479c2540b62543f  libstdc++-v3/include/bits/atomic_wait.h
  65e262c95ca2a5021497a947a07b5d48  libstdc++-v3/include/bits/basic_ios.h
  e0d25c8ddeac5ee95a7b60861849f304  libstdc++-v3/include/bits/basic_ios.tcc
! e533c7ad6cc31c69f61eb02aba0f473f  libstdc++-v3/include/bits/basic_string.h
  2f7562208df92df6d82751520c3e1881  libstdc++-v3/include/bits/basic_string.tcc
  abf1c74de0fb52f696034bd48432d075  libstdc++-v3/include/bits/binders.h
  3bc144622d471efab1aef4ec705459d0  libstdc++-v3/include/bits/boost_concept_check.h
*************** abf1c74de0fb52f696034bd48432d075  libstd
*** 147980,147989 ****
  5cbbd0fafb904f86c9ddce3fc54380f1  libstdc++-v3/include/bits/char_traits.h
  9a3227d14b324832ae22b4c7ec6979e2  libstdc++-v3/include/bits/charconv.h
  a15f9dcf8ee271924862e5e3c21b9bd5  libstdc++-v3/include/bits/chrono.h
! d0d10dddbd3971b63c4733b04e1bc69a  libstdc++-v3/include/bits/chrono_io.h
  1f26067336c4957237db887ab1ce6b55  libstdc++-v3/include/bits/codecvt.h
  53f7e45e350f1bb99b3d67e27f914b61  libstdc++-v3/include/bits/concept_check.h
! 3000c6dba4f53a32aed26e5c5cbccffc  libstdc++-v3/include/bits/cow_string.h
  97d90498ee103018406f19468a5500ec  libstdc++-v3/include/bits/cpp_type_traits.h
  8890a18d951d6a850abe7666583a1d50  libstdc++-v3/include/bits/cpyfunc_impl.h
  a00599dc44159a6b255d87ddbb7e237c  libstdc++-v3/include/bits/deque.tcc
--- 148245,148254 ----
  5cbbd0fafb904f86c9ddce3fc54380f1  libstdc++-v3/include/bits/char_traits.h
  9a3227d14b324832ae22b4c7ec6979e2  libstdc++-v3/include/bits/charconv.h
  a15f9dcf8ee271924862e5e3c21b9bd5  libstdc++-v3/include/bits/chrono.h
! 6ab2480302ccfc97622a99199bdbd6c4  libstdc++-v3/include/bits/chrono_io.h
  1f26067336c4957237db887ab1ce6b55  libstdc++-v3/include/bits/codecvt.h
  53f7e45e350f1bb99b3d67e27f914b61  libstdc++-v3/include/bits/concept_check.h
! 57c20bfd264af582740709b6953c165f  libstdc++-v3/include/bits/cow_string.h
  97d90498ee103018406f19468a5500ec  libstdc++-v3/include/bits/cpp_type_traits.h
  8890a18d951d6a850abe7666583a1d50  libstdc++-v3/include/bits/cpyfunc_impl.h
  a00599dc44159a6b255d87ddbb7e237c  libstdc++-v3/include/bits/deque.tcc
*************** a437a10ba7525a3935bec765a5604a4f  libstd
*** 148008,148013 ****
--- 148273,148279 ----
  07a51a3027551b0c542b2b86f6c59b13  libstdc++-v3/include/bits/hashtable_policy.h
  b06aeb018bc3d30652ee07af66a6a664  libstdc++-v3/include/bits/indirect.h
  286812f00b93c6b48c444cf624dc6983  libstdc++-v3/include/bits/indirect_array.h
+ 33cde309bf68b44a649202d107d9d1cd  libstdc++-v3/include/bits/inplace_tags.h
  02fc060959019f916137494b7725ead3  libstdc++-v3/include/bits/intcmp.h
  06b4263267a102d1ab00cc2f9647964c  libstdc++-v3/include/bits/invoke.h
  4150f8a8b9f1d62d09bec752e3f3476a  libstdc++-v3/include/bits/ios_base.h
*************** e088e7321950878babb11f672f90e1f1  libstd
*** 148038,148043 ****
--- 148304,148310 ----
  1b9f1c577b18d8325e7de09b66b12c27  libstdc++-v3/include/bits/new_except.h
  30068e814005895587eb706ab7c5c00c  libstdc++-v3/include/bits/new_throw.h
  ab1a2667b1fb6a0843b439656cb56a71  libstdc++-v3/include/bits/node_handle.h
+ ee7d962ba7f289c862abaea32274a7ba  libstdc++-v3/include/bits/optional_ref.h
  bce8ebbac6a08181f4a55b16ebfc95bc  libstdc++-v3/include/bits/ostream.h
  ad86ba065860cc280af4d463bd5ac78e  libstdc++-v3/include/bits/ostream.tcc
  333ebec6c7c2e0bb4d74617fba1dc835  libstdc++-v3/include/bits/ostream_insert.h
*************** cbd44f9447b308b0901004443db53e93  libstd
*** 148078,148092 ****
  3464ab6bcb3ccff1cae5bcff7a6eb9ca  libstdc++-v3/include/bits/shared_ptr_atomic.h
  36ef52638647251fcb35fa7716ff6856  libstdc++-v3/include/bits/shared_ptr_base.h
  a3287036233bd3e6387160d82f75e7dd  libstdc++-v3/include/bits/simd_alg.h
! 0befd3e7c5db787884829dec54e9a943  libstdc++-v3/include/bits/simd_details.h
  3173beedaa41588474c5481ec450cd20  libstdc++-v3/include/bits/simd_flags.h
  707046d01f2d965e0a84ca6c656e2046  libstdc++-v3/include/bits/simd_iterator.h
! 8e42eeccd6ced90cd4f50cececf358c9  libstdc++-v3/include/bits/simd_loadstore.h
! 76bfdd0a03cc20268cdb760ed633e53a  libstdc++-v3/include/bits/simd_mask.h
! 55677796a9d03b2fcab6c8eb9866efcb  libstdc++-v3/include/bits/simd_mask_reductions.h
  fce0564b07dd0ef981a64c683bfadc5a  libstdc++-v3/include/bits/simd_reductions.h
! 8ed5567f3889cfbc232623327c0d3b72  libstdc++-v3/include/bits/simd_vec.h
! 86eb307e0886ccc75570d22c33f78b3a  libstdc++-v3/include/bits/simd_x86.h
  c7864edd44ec162778d0cb89b0129937  libstdc++-v3/include/bits/slice_array.h
  78e195bd62ca638897505b698c3193de  libstdc++-v3/include/bits/specfun.h
  42139ff046a9321ce4a72fb8ee89a008  libstdc++-v3/include/bits/sstream.tcc
--- 148345,148362 ----
  3464ab6bcb3ccff1cae5bcff7a6eb9ca  libstdc++-v3/include/bits/shared_ptr_atomic.h
  36ef52638647251fcb35fa7716ff6856  libstdc++-v3/include/bits/shared_ptr_base.h
  a3287036233bd3e6387160d82f75e7dd  libstdc++-v3/include/bits/simd_alg.h
! 3ba0268d3c388b4d85b3ac335d00ad2c  libstdc++-v3/include/bits/simd_bit.h
! 9556c0d3896130a6a149cab635617a9b  libstdc++-v3/include/bits/simd_complex.h
! a5f924cad0261dcf0275233b5af04efe  libstdc++-v3/include/bits/simd_details.h
  3173beedaa41588474c5481ec450cd20  libstdc++-v3/include/bits/simd_flags.h
  707046d01f2d965e0a84ca6c656e2046  libstdc++-v3/include/bits/simd_iterator.h
! adb22b1b5347c3feee3bf118cf914f6d  libstdc++-v3/include/bits/simd_loadstore.h
! ddd5324ee251c78325d4a47b8a18cdea  libstdc++-v3/include/bits/simd_mask.h
! 71ba840e0efcba9d0844b67d317a8d5e  libstdc++-v3/include/bits/simd_mask_reductions.h
! 8764681e55d9cb9e915b0d0fab4f27c6  libstdc++-v3/include/bits/simd_math.h
  fce0564b07dd0ef981a64c683bfadc5a  libstdc++-v3/include/bits/simd_reductions.h
! a8d6c724afcbcf75edbb299b51fa13de  libstdc++-v3/include/bits/simd_vec.h
! d25c8fafcd12b48aa64fb5d49a33f6c2  libstdc++-v3/include/bits/simd_x86.h
  c7864edd44ec162778d0cb89b0129937  libstdc++-v3/include/bits/slice_array.h
  78e195bd62ca638897505b698c3193de  libstdc++-v3/include/bits/specfun.h
  42139ff046a9321ce4a72fb8ee89a008  libstdc++-v3/include/bits/sstream.tcc
*************** a9b017ab9e6eb2ad8847aa0ec2b12cff  libstd
*** 148098,148104 ****
  f9e306b8cee74f13390d2c91f994d69f  libstdc++-v3/include/bits/stdexcept_throw.h
  4ebc2f0739aa489c68b54dccba9f2290  libstdc++-v3/include/bits/stdexcept_throwdef.h
  9414705c520a817ae3b22dec29912b18  libstdc++-v3/include/bits/stdexcept_throwfwd.h
! ac8c75ff38bcadb8aebb2f0148bff370  libstdc++-v3/include/bits/stl_algo.h
  bb3f76482179ec4ebe183284d0d69874  libstdc++-v3/include/bits/stl_algobase.h
  93fb042c4fe4f9ba7e63ccbb7c5f3845  libstdc++-v3/include/bits/stl_bvector.h
  c53878727e94c56c0b362d17dfe0fca2  libstdc++-v3/include/bits/stl_construct.h
--- 148368,148374 ----
  f9e306b8cee74f13390d2c91f994d69f  libstdc++-v3/include/bits/stdexcept_throw.h
  4ebc2f0739aa489c68b54dccba9f2290  libstdc++-v3/include/bits/stdexcept_throwdef.h
  9414705c520a817ae3b22dec29912b18  libstdc++-v3/include/bits/stdexcept_throwfwd.h
! eae71ddcefd0eda0b73f00439edf8ed4  libstdc++-v3/include/bits/stl_algo.h
  bb3f76482179ec4ebe183284d0d69874  libstdc++-v3/include/bits/stl_algobase.h
  93fb042c4fe4f9ba7e63ccbb7c5f3845  libstdc++-v3/include/bits/stl_bvector.h
  c53878727e94c56c0b362d17dfe0fca2  libstdc++-v3/include/bits/stl_construct.h
*************** b1052f564f9839906c0d1f1f7a3296ea  libstd
*** 148139,148153 ****
  3e95bc3dafd1a579438226ba448f80e4  libstdc++-v3/include/bits/unordered_set.h
  4fbbeaf99e17abfaf62cec53ac3c9193  libstdc++-v3/include/bits/uses_allocator.h
  9d01cfbd90824dde5e36d65c0c160ad5  libstdc++-v3/include/bits/uses_allocator_args.h
! 84ada8040a2804613f2e65cf79127295  libstdc++-v3/include/bits/utility.h
  3c8c91dc88f2ee1e4b68dcc3f3aaa5e5  libstdc++-v3/include/bits/valarray_after.h
  d1cf5a35c4ad3820cb023d8f84762cc7  libstdc++-v3/include/bits/valarray_array.h
  ddd4bdc2fa29f8f2aa3386cead9ebcb2  libstdc++-v3/include/bits/valarray_array.tcc
  16c6db3f5b1e7b3e37c3febbf4dc4e8c  libstdc++-v3/include/bits/valarray_before.h
! 682dec8d9b388681bc1f171ba0c5590e  libstdc++-v3/include/bits/vec_ops.h
  fe1be23d00db0d87529a75faf3afb98a  libstdc++-v3/include/bits/vector.tcc
! 22927f0f08145352905ba0aaa58134ee  libstdc++-v3/include/bits/version.def
! 9daae6860a957a3a5a26eb21f7324d8e  libstdc++-v3/include/bits/version.h
  07c6aeb4ce2629a1da2d63d08e65c0f8  libstdc++-v3/include/bits/version.tpl
  d99b1b69e5f87e5a631c8a881d053766  libstdc++-v3/include/c/cassert
  7f5b12607c4d7cbbcf705b672613447b  libstdc++-v3/include/c/cctype
--- 148409,148423 ----
  3e95bc3dafd1a579438226ba448f80e4  libstdc++-v3/include/bits/unordered_set.h
  4fbbeaf99e17abfaf62cec53ac3c9193  libstdc++-v3/include/bits/uses_allocator.h
  9d01cfbd90824dde5e36d65c0c160ad5  libstdc++-v3/include/bits/uses_allocator_args.h
! 92cbb76c49c4dc3ea728212d6c99a1b2  libstdc++-v3/include/bits/utility.h
  3c8c91dc88f2ee1e4b68dcc3f3aaa5e5  libstdc++-v3/include/bits/valarray_after.h
  d1cf5a35c4ad3820cb023d8f84762cc7  libstdc++-v3/include/bits/valarray_array.h
  ddd4bdc2fa29f8f2aa3386cead9ebcb2  libstdc++-v3/include/bits/valarray_array.tcc
  16c6db3f5b1e7b3e37c3febbf4dc4e8c  libstdc++-v3/include/bits/valarray_before.h
! dce382334795c24946cb8838e6fed9e5  libstdc++-v3/include/bits/vec_ops.h
  fe1be23d00db0d87529a75faf3afb98a  libstdc++-v3/include/bits/vector.tcc
! dee55d68bedeb08918f18ae95aebd9af  libstdc++-v3/include/bits/version.def
! 058720e59b09c497a912ee429deee7e4  libstdc++-v3/include/bits/version.h
  07c6aeb4ce2629a1da2d63d08e65c0f8  libstdc++-v3/include/bits/version.tpl
  d99b1b69e5f87e5a631c8a881d053766  libstdc++-v3/include/c/cassert
  7f5b12607c4d7cbbcf705b672613447b  libstdc++-v3/include/c/cctype
*************** c64ab520b4f6639a904aff1b2898fe5d  libstd
*** 148715,148727 ****
  d1dc8325fc8c069a07bab71a935bced3  libstdc++-v3/include/std/filesystem
  5f6d1d543aa97204300a7a76284f8775  libstdc++-v3/include/std/flat_map
  c3b66598ccd8ea2009de9b04433b7dcf  libstdc++-v3/include/std/flat_set
! b16e263a86b68b229b29a2bbd0356402  libstdc++-v3/include/std/format
  821d1dff1ce8d861767808c7c5eab838  libstdc++-v3/include/std/forward_list
  10ba06a4268328778f0feab5e3778f91  libstdc++-v3/include/std/fstream
  5907213253b81e40fd9101e5d092fc82  libstdc++-v3/include/std/functional
  6fc93cafeb2ebce1111afdc9b6cf84c5  libstdc++-v3/include/std/future
  5e968d05fde7935769d507d4f2ff15bf  libstdc++-v3/include/std/generator
! ccba35168fe3cfa34a4699ed47f2bf2e  libstdc++-v3/include/std/inplace_vector
  1c55d0a56e95a92d4869875b32fb966a  libstdc++-v3/include/std/iomanip
  4def558fc37b3c6d78642dc4f86d2785  libstdc++-v3/include/std/ios
  cd03c7a97eb0db3f618710ef28e40fc3  libstdc++-v3/include/std/iosfwd
--- 148985,148997 ----
  d1dc8325fc8c069a07bab71a935bced3  libstdc++-v3/include/std/filesystem
  5f6d1d543aa97204300a7a76284f8775  libstdc++-v3/include/std/flat_map
  c3b66598ccd8ea2009de9b04433b7dcf  libstdc++-v3/include/std/flat_set
! 14af52719f1a2256a34af2a26160d1b8  libstdc++-v3/include/std/format
  821d1dff1ce8d861767808c7c5eab838  libstdc++-v3/include/std/forward_list
  10ba06a4268328778f0feab5e3778f91  libstdc++-v3/include/std/fstream
  5907213253b81e40fd9101e5d092fc82  libstdc++-v3/include/std/functional
  6fc93cafeb2ebce1111afdc9b6cf84c5  libstdc++-v3/include/std/future
  5e968d05fde7935769d507d4f2ff15bf  libstdc++-v3/include/std/generator
! 92dbcd3cff0bf76d425ffb95e028ed48  libstdc++-v3/include/std/inplace_vector
  1c55d0a56e95a92d4869875b32fb966a  libstdc++-v3/include/std/iomanip
  4def558fc37b3c6d78642dc4f86d2785  libstdc++-v3/include/std/ios
  cd03c7a97eb0db3f618710ef28e40fc3  libstdc++-v3/include/std/iosfwd
*************** f431aa799cd5cc175e6d5af7130ac487  libstd
*** 148740,148746 ****
  6042ceb95043702de02a8354f2507317  libstdc++-v3/include/std/mutex
  98a3e25011c5fb2383b3824b1c349d43  libstdc++-v3/include/std/numbers
  6a44514a47e24df75405dc1d397afc69  libstdc++-v3/include/std/numeric
! d7a1522758c56a28f5b8b9e4b3df08fc  libstdc++-v3/include/std/optional
  bcf1c0b79e2efd9cd34763d368f40966  libstdc++-v3/include/std/ostream
  e24e6fab84ab94b060b3c31ebc39b264  libstdc++-v3/include/std/print
  879fbfbd4d520dc45943e6e1c095a2e7  libstdc++-v3/include/std/queue
--- 149010,149016 ----
  6042ceb95043702de02a8354f2507317  libstdc++-v3/include/std/mutex
  98a3e25011c5fb2383b3824b1c349d43  libstdc++-v3/include/std/numbers
  6a44514a47e24df75405dc1d397afc69  libstdc++-v3/include/std/numeric
! fe7a6e270c022ad901db09ccea37802d  libstdc++-v3/include/std/optional
  bcf1c0b79e2efd9cd34763d368f40966  libstdc++-v3/include/std/ostream
  e24e6fab84ab94b060b3c31ebc39b264  libstdc++-v3/include/std/print
  879fbfbd4d520dc45943e6e1c095a2e7  libstdc++-v3/include/std/queue
*************** a5c4f3df840ba7c3fbc9b7b9d5567ef2  libstd
*** 148752,148758 ****
  a53d359dd7618cc0d3f2447f5f60fff3  libstdc++-v3/include/std/semaphore
  ef61193c582c0e8e18efb7f27f37f833  libstdc++-v3/include/std/set
  d9b30ac9f13a2d342a56ff319aca749e  libstdc++-v3/include/std/shared_mutex
! b6acc193775e3cf38850b9d166d46caf  libstdc++-v3/include/std/simd
  b3171714703fcfc5d8fe69ffe22d9cc8  libstdc++-v3/include/std/source_location
  e691e3e1c795a2e57f49580a98fc2058  libstdc++-v3/include/std/span
  34a41e551417785f45d2afdd48b7470b  libstdc++-v3/include/std/spanstream
--- 149022,149028 ----
  a53d359dd7618cc0d3f2447f5f60fff3  libstdc++-v3/include/std/semaphore
  ef61193c582c0e8e18efb7f27f37f833  libstdc++-v3/include/std/set
  d9b30ac9f13a2d342a56ff319aca749e  libstdc++-v3/include/std/shared_mutex
! 88afd00cee949042aba6fd1cbaf15a6f  libstdc++-v3/include/std/simd
  b3171714703fcfc5d8fe69ffe22d9cc8  libstdc++-v3/include/std/source_location
  e691e3e1c795a2e57f49580a98fc2058  libstdc++-v3/include/std/span
  34a41e551417785f45d2afdd48b7470b  libstdc++-v3/include/std/spanstream
*************** c98ff3b1b5a17a05cc9cfb0e20e31151  libstd
*** 148897,148903 ****
  316087e082126c09a3d338da3241b3e3  libstdc++-v3/libsupc++/exception
  459e01564c4f685bf53b6ee283e5897e  libstdc++-v3/libsupc++/exception.h
  8c37f5889a197aefe73cb172c20a39e5  libstdc++-v3/libsupc++/exception_defines.h
! 06f12af2281e7d26831daa048b14e4f6  libstdc++-v3/libsupc++/exception_ptr.h
  416538c35697d47139e058f1747f5fbe  libstdc++-v3/libsupc++/function_type_info.cc
  63a5e00b4953860d1a28c000823a1ece  libstdc++-v3/libsupc++/fundamental_type_info.cc
  8fa42469ba3fe7cf4ef3113d46c2ec67  libstdc++-v3/libsupc++/guard.cc
--- 149167,149173 ----
  316087e082126c09a3d338da3241b3e3  libstdc++-v3/libsupc++/exception
  459e01564c4f685bf53b6ee283e5897e  libstdc++-v3/libsupc++/exception.h
  8c37f5889a197aefe73cb172c20a39e5  libstdc++-v3/libsupc++/exception_defines.h
! 64ac5048768e174d3119f8538ceb0d2d  libstdc++-v3/libsupc++/exception_ptr.h
  416538c35697d47139e058f1747f5fbe  libstdc++-v3/libsupc++/function_type_info.cc
  63a5e00b4953860d1a28c000823a1ece  libstdc++-v3/libsupc++/fundamental_type_info.cc
  8fa42469ba3fe7cf4ef3113d46c2ec67  libstdc++-v3/libsupc++/guard.cc
*************** efc2d383fef2d2a712b15fabea12d717  libstd
*** 149020,149026 ****
  659a979550a9164c9cc00eadc56c1ec0  libstdc++-v3/src/c++11/mutex_pool.h
  bcc29315c82a14b52c6365db75dda9ca  libstdc++-v3/src/c++11/ostream-inst.cc
  e48ef7a6cf2da7685415cd5d955300bf  libstdc++-v3/src/c++11/placeholders.cc
! 4fd221907296ad6d12451aa0b4cc4e5c  libstdc++-v3/src/c++11/random.cc
  6bc08d9625685244d6b0aaf82383cbf3  libstdc++-v3/src/c++11/regex.cc
  0de8c751a515414ac6a35a29f43b4fa0  libstdc++-v3/src/c++11/shared_ptr.cc
  0b0cd40b1a6354ab1889e430bd8ecd11  libstdc++-v3/src/c++11/snprintf_lite.cc
--- 149290,149296 ----
  659a979550a9164c9cc00eadc56c1ec0  libstdc++-v3/src/c++11/mutex_pool.h
  bcc29315c82a14b52c6365db75dda9ca  libstdc++-v3/src/c++11/ostream-inst.cc
  e48ef7a6cf2da7685415cd5d955300bf  libstdc++-v3/src/c++11/placeholders.cc
! fd5694f36b477b65b6c47bbbdaa0da46  libstdc++-v3/src/c++11/random.cc
  6bc08d9625685244d6b0aaf82383cbf3  libstdc++-v3/src/c++11/regex.cc
  0de8c751a515414ac6a35a29f43b4fa0  libstdc++-v3/src/c++11/shared_ptr.cc
  0b0cd40b1a6354ab1889e430bd8ecd11  libstdc++-v3/src/c++11/snprintf_lite.cc
*************** cdf9c54ab7ea85aa42bbf32b2e749913  libstd
*** 149047,149053 ****
  8fccfe420c4b99cdf08023a4fc8ab137  libstdc++-v3/src/c++17/floating_from_chars.cc
  66709d03438eb17097ae45fa2a7b4d0b  libstdc++-v3/src/c++17/floating_to_chars.cc
  ab713104bd5f979c12c01a7037584aa9  libstdc++-v3/src/c++17/fs_dir.cc
! 22566e9052cc60799b49194e4a2296be  libstdc++-v3/src/c++17/fs_ops.cc
  9246ac24ff18dcedf681fb7ccbaa8cd5  libstdc++-v3/src/c++17/fs_path.cc
  702e1413956c4c9873d78ce075b24e4e  libstdc++-v3/src/c++17/memory_resource.cc
  5fc15b3f8bf3bb0c0b6b692daffe193e  libstdc++-v3/src/c++17/ostream-inst.cc
--- 149317,149323 ----
  8fccfe420c4b99cdf08023a4fc8ab137  libstdc++-v3/src/c++17/floating_from_chars.cc
  66709d03438eb17097ae45fa2a7b4d0b  libstdc++-v3/src/c++17/floating_to_chars.cc
  ab713104bd5f979c12c01a7037584aa9  libstdc++-v3/src/c++17/fs_dir.cc
! c2c31d841f1cbaae1ccfc04bbc3441ff  libstdc++-v3/src/c++17/fs_ops.cc
  9246ac24ff18dcedf681fb7ccbaa8cd5  libstdc++-v3/src/c++17/fs_path.cc
  702e1413956c4c9873d78ce075b24e4e  libstdc++-v3/src/c++17/memory_resource.cc
  5fc15b3f8bf3bb0c0b6b692daffe193e  libstdc++-v3/src/c++17/ostream-inst.cc
*************** c2bd27af25e57adce5807e0f01a2d0dc  libstd
*** 149078,149084 ****
  23187a5ee053acd65f32c0dc2ac4bdf7  libstdc++-v3/src/c++20/string-inst.cc
  50ac2e00d5794df965e47509f3c16cb5  libstdc++-v3/src/c++20/syncbuf.cc
  0dfa4a770289b4e926b8281770732d5a  libstdc++-v3/src/c++20/tzdata.zi
! c8e15a23e0318d4217cc91b00e606cee  libstdc++-v3/src/c++20/tzdb.cc
  ac7b7a080d5f7aa8fe6a26188631fc18  libstdc++-v3/src/c++20/windows_zones-map.h
  863fc49f52a3a3665416a7c88fc4f3e7  libstdc++-v3/src/c++23/Makefile.am
  0d7332606e5b7973ac0d4398f18cfd17  libstdc++-v3/src/c++23/Makefile.in
--- 149348,149354 ----
  23187a5ee053acd65f32c0dc2ac4bdf7  libstdc++-v3/src/c++20/string-inst.cc
  50ac2e00d5794df965e47509f3c16cb5  libstdc++-v3/src/c++20/syncbuf.cc
  0dfa4a770289b4e926b8281770732d5a  libstdc++-v3/src/c++20/tzdata.zi
! 3def762861fa84a86a87a40a7eeea704  libstdc++-v3/src/c++20/tzdb.cc
  ac7b7a080d5f7aa8fe6a26188631fc18  libstdc++-v3/src/c++20/windows_zones-map.h
  863fc49f52a3a3665416a7c88fc4f3e7  libstdc++-v3/src/c++23/Makefile.am
  0d7332606e5b7973ac0d4398f18cfd17  libstdc++-v3/src/c++23/Makefile.in
*************** b6eb8bb1cd9be8390c8051e209be07bb  libstd
*** 149142,149148 ****
  4e5208dea38714bba31a6423b752994c  libstdc++-v3/src/filesystem/cow-path.cc
  d0ede5bf6e0a8ece42e35e4991fea077  libstdc++-v3/src/filesystem/dir-common.h
  680a6a0fe67e137a04446aca13b2b0ab  libstdc++-v3/src/filesystem/dir.cc
! 4f9e06c08dce3fe4c6360e1e4194cc9f  libstdc++-v3/src/filesystem/ops-common.h
  708bef5c318e9dca58ef3f6ca51d417d  libstdc++-v3/src/filesystem/ops.cc
  22fb7f66282e5e6bcde7f86d4a562e6f  libstdc++-v3/src/filesystem/path.cc
  59acac69f8e68c8d18f337534074bf2a  libstdc++-v3/src/libbacktrace/Makefile.am
--- 149412,149418 ----
  4e5208dea38714bba31a6423b752994c  libstdc++-v3/src/filesystem/cow-path.cc
  d0ede5bf6e0a8ece42e35e4991fea077  libstdc++-v3/src/filesystem/dir-common.h
  680a6a0fe67e137a04446aca13b2b0ab  libstdc++-v3/src/filesystem/dir.cc
! 66c2c9befa8002b731eb7e547c1d955e  libstdc++-v3/src/filesystem/ops-common.h
  708bef5c318e9dca58ef3f6ca51d417d  libstdc++-v3/src/filesystem/ops.cc
  22fb7f66282e5e6bcde7f86d4a562e6f  libstdc++-v3/src/filesystem/path.cc
  59acac69f8e68c8d18f337534074bf2a  libstdc++-v3/src/libbacktrace/Makefile.am
*************** d67d5a0efba04970f3b97159730e13ca  libstd
*** 149242,149248 ****
  7f1e48da3198ac5896cf0d47b0b7922e  libstdc++-v3/testsuite/18_support/exception_ptr/90295.cc
  8907da30a344e71f1227eec1fae72f2b  libstdc++-v3/testsuite/18_support/exception_ptr/96657.cc
  a262e7ab157ec72b870c370b3d6ad31f  libstdc++-v3/testsuite/18_support/exception_ptr/current_exception.cc
! f1a7fc7d62b8f13b42b8e563bc3f5409  libstdc++-v3/testsuite/18_support/exception_ptr/exception_ptr_cast.cc
  959ee4d63d34bbe51eba76228340187a  libstdc++-v3/testsuite/18_support/exception_ptr/lifespan.cc
  67d9092ac3c34736c19133ae087e087f  libstdc++-v3/testsuite/18_support/exception_ptr/make_exception_ptr.cc
  b489ba270fa9b7f5366f13b43d4d3ad8  libstdc++-v3/testsuite/18_support/exception_ptr/make_exception_ptr_2.cc
--- 149512,149518 ----
  7f1e48da3198ac5896cf0d47b0b7922e  libstdc++-v3/testsuite/18_support/exception_ptr/90295.cc
  8907da30a344e71f1227eec1fae72f2b  libstdc++-v3/testsuite/18_support/exception_ptr/96657.cc
  a262e7ab157ec72b870c370b3d6ad31f  libstdc++-v3/testsuite/18_support/exception_ptr/current_exception.cc
! ecc07eda26d4c9001dbce083c6002f2b  libstdc++-v3/testsuite/18_support/exception_ptr/exception_ptr_cast.cc
  959ee4d63d34bbe51eba76228340187a  libstdc++-v3/testsuite/18_support/exception_ptr/lifespan.cc
  67d9092ac3c34736c19133ae087e087f  libstdc++-v3/testsuite/18_support/exception_ptr/make_exception_ptr.cc
  b489ba270fa9b7f5366f13b43d4d3ad8  libstdc++-v3/testsuite/18_support/exception_ptr/make_exception_ptr_2.cc
*************** c3633be19cc26ebd3041d6f7a8120295  libstd
*** 149481,149487 ****
  ae49058091ac2f31814de6246e958d6a  libstdc++-v3/testsuite/20_util/allocator/64135.cc
  3d6fd2416cfe20b40727679190a1acd5  libstdc++-v3/testsuite/20_util/allocator/8230.cc
  304feeda4411dd976033b709ad4dc9ed  libstdc++-v3/testsuite/20_util/allocator/89510.cc
! c00426efc55c8078b60f6b9281f6fb69  libstdc++-v3/testsuite/20_util/allocator/allocate_at_least.cc
  d55f539d63dcb12122252b549d678eb2  libstdc++-v3/testsuite/20_util/allocator/allocate_at_least2.cc
  efd50eb210f11e05083d51d5f197edce  libstdc++-v3/testsuite/20_util/allocator/allocate_at_least_neg.cc
  aee95679e97e16985af49532fadbba5c  libstdc++-v3/testsuite/20_util/allocator/lwg3190.cc
--- 149751,149757 ----
  ae49058091ac2f31814de6246e958d6a  libstdc++-v3/testsuite/20_util/allocator/64135.cc
  3d6fd2416cfe20b40727679190a1acd5  libstdc++-v3/testsuite/20_util/allocator/8230.cc
  304feeda4411dd976033b709ad4dc9ed  libstdc++-v3/testsuite/20_util/allocator/89510.cc
! 6c08401fc6c7afa2323af56643e7a281  libstdc++-v3/testsuite/20_util/allocator/allocate_at_least.cc
  d55f539d63dcb12122252b549d678eb2  libstdc++-v3/testsuite/20_util/allocator/allocate_at_least2.cc
  efd50eb210f11e05083d51d5f197edce  libstdc++-v3/testsuite/20_util/allocator/allocate_at_least_neg.cc
  aee95679e97e16985af49532fadbba5c  libstdc++-v3/testsuite/20_util/allocator/lwg3190.cc
*************** c8b062e721a64937626a9aef533a3121  libstd
*** 151222,151238 ****
  277d55d5d10b6b45480fdec991639a7d  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/64422.cc
  89506a2ca72334b3212f4c9fb2babf18  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/append_range.cc
  9da51955fbae1f849402246eb21098e8  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/char/1.cc
! f8cd7b4fdb89dafa1ecedfef861c67d6  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/char/2.cc
  8414405cf9ea21accf34c123777bf2d5  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/char/3.cc
  c4f33b7e2ac4f57f6af36f674cf535f3  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/char/4.cc
  ce02906e1efb3e30725f35430f65b127  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/wchar_t/1.cc
! 3c5674f7364d5955c395448eeaac4122  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/wchar_t/2.cc
  04083623a90950eadeb34aaf8ae6d129  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/wchar_t/3.cc
  dfea429c892ef77ec2b8abd51317f375  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/wchar_t/4.cc
  94b29218fb10d78f60975a6d63a4246b  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/assign_range.cc
  dfc69d419aeb6a926215799be42addc4  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/1.cc
  7e344142f41b4491e4c57a0c02767e69  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/2.cc
! 7910800970a15a8884d03b12f9c9074b  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/3.cc
  cb851ab523622319c7c3de789167012d  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/4.cc
  408690b37a2d66a127b837444db9dcf2  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/64657.cc
  1d62fc5ef2127d564a4c8f7d9ad296d7  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/87749.cc
--- 151492,151508 ----
  277d55d5d10b6b45480fdec991639a7d  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/64422.cc
  89506a2ca72334b3212f4c9fb2babf18  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/append_range.cc
  9da51955fbae1f849402246eb21098e8  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/char/1.cc
! 800d4d8eb8c190d6e8673936910b9004  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/char/2.cc
  8414405cf9ea21accf34c123777bf2d5  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/char/3.cc
  c4f33b7e2ac4f57f6af36f674cf535f3  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/char/4.cc
  ce02906e1efb3e30725f35430f65b127  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/wchar_t/1.cc
! 10136a20843b0f4fc1bc902f42da9b05  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/wchar_t/2.cc
  04083623a90950eadeb34aaf8ae6d129  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/wchar_t/3.cc
  dfea429c892ef77ec2b8abd51317f375  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/wchar_t/4.cc
  94b29218fb10d78f60975a6d63a4246b  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/assign_range.cc
  dfc69d419aeb6a926215799be42addc4  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/1.cc
  7e344142f41b4491e4c57a0c02767e69  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/2.cc
! 62416c25e0fc317a9122bbe184c0c094  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/3.cc
  cb851ab523622319c7c3de789167012d  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/4.cc
  408690b37a2d66a127b837444db9dcf2  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/64657.cc
  1d62fc5ef2127d564a4c8f7d9ad296d7  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/87749.cc
*************** cb851ab523622319c7c3de789167012d  libstd
*** 151240,151246 ****
  49e0737f8c01b24a42b4c0e40baba69f  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/move_assign_optim.cc
  adc632f4ad6efa747ac292f5efac5636  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/1.cc
  8793e8d85cb369bfde890c700f4c120e  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/2.cc
! f2b4433578235371a24526caac614b35  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/3.cc
  11912aaa7221bd4f9128b69f0d756706  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/4.cc
  6be7ba05532cc6cc949b202700f7f052  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/87749.cc
  9e897582e4b6f8b4483ca18079e74d7e  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/move_assign.cc
--- 151510,151516 ----
  49e0737f8c01b24a42b4c0e40baba69f  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/move_assign_optim.cc
  adc632f4ad6efa747ac292f5efac5636  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/1.cc
  8793e8d85cb369bfde890c700f4c120e  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/2.cc
! 4ab215d660e4b2d6fdf8370330190e77  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/3.cc
  11912aaa7221bd4f9128b69f0d756706  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/4.cc
  6be7ba05532cc6cc949b202700f7f052  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/87749.cc
  9e897582e4b6f8b4483ca18079e74d7e  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/move_assign.cc
*************** adf70c3108bb57e460f5e7f13e417f6c  libstd
*** 152559,152565 ****
  5aec8512568ce2f7543d9c77e6605c2c  libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/erase.cc
  32171ec785b1b967d1076d5da1536940  libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/erase_neg.cc
  c0610d745a0d882d53a58958367972f1  libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/multi_insert.cc
! 3c4148c567e8b15b2726a4d6154ede27  libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/single_insert.cc
  63a7d605a0bc39f3acfb0fa4bb289dda  libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/single_insert_neg.cc
  1b7fbaff011dd632225a4efffa9cd1a1  libstdc++-v3/testsuite/23_containers/inplace_vector/move.cc
  5518dafa57195a13905e6083cf064ace  libstdc++-v3/testsuite/23_containers/inplace_vector/relops.cc
--- 152829,152835 ----
  5aec8512568ce2f7543d9c77e6605c2c  libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/erase.cc
  32171ec785b1b967d1076d5da1536940  libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/erase_neg.cc
  c0610d745a0d882d53a58958367972f1  libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/multi_insert.cc
! 1fc9d00290a85aaa41872bfc1985222e  libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/single_insert.cc
  63a7d605a0bc39f3acfb0fa4bb289dda  libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/single_insert_neg.cc
  1b7fbaff011dd632225a4efffa9cd1a1  libstdc++-v3/testsuite/23_containers/inplace_vector/move.cc
  5518dafa57195a13905e6083cf064ace  libstdc++-v3/testsuite/23_containers/inplace_vector/relops.cc
*************** e2bd01cfb42800fef1fe5369d45810d4  libstd
*** 156384,156391 ****
  25a884862529116a233d9595647f3078  libstdc++-v3/testsuite/27_io/filesystem/operations/absolute.cc
  2430f4e5168c2a5f9a1edf6b65771d7e  libstdc++-v3/testsuite/27_io/filesystem/operations/all.cc
  c4a0f1988ab64c05d8acb1647b35c6b6  libstdc++-v3/testsuite/27_io/filesystem/operations/bitmask_types.cc
! adc6af2775128f30c704ec44557da0a1  libstdc++-v3/testsuite/27_io/filesystem/operations/canonical.cc
! 832f8d573494c3abf8c0f6500b2032dd  libstdc++-v3/testsuite/27_io/filesystem/operations/copy.cc
  e9e60d498c74c0a3d23036c3eba3d49b  libstdc++-v3/testsuite/27_io/filesystem/operations/copy_file.cc
  10b6e95add9984bd29138cd25bc3a19f  libstdc++-v3/testsuite/27_io/filesystem/operations/copy_file_108178.cc
  b525967ce54dc62a026c3eb55dbbc17a  libstdc++-v3/testsuite/27_io/filesystem/operations/copy_symlink/1.cc
--- 156654,156661 ----
  25a884862529116a233d9595647f3078  libstdc++-v3/testsuite/27_io/filesystem/operations/absolute.cc
  2430f4e5168c2a5f9a1edf6b65771d7e  libstdc++-v3/testsuite/27_io/filesystem/operations/all.cc
  c4a0f1988ab64c05d8acb1647b35c6b6  libstdc++-v3/testsuite/27_io/filesystem/operations/bitmask_types.cc
! b49d89866684b65f2a801102435f193e  libstdc++-v3/testsuite/27_io/filesystem/operations/canonical.cc
! 8599eb26ba00ad66f4d8e4a3a3b4f7d6  libstdc++-v3/testsuite/27_io/filesystem/operations/copy.cc
  e9e60d498c74c0a3d23036c3eba3d49b  libstdc++-v3/testsuite/27_io/filesystem/operations/copy_file.cc
  10b6e95add9984bd29138cd25bc3a19f  libstdc++-v3/testsuite/27_io/filesystem/operations/copy_file_108178.cc
  b525967ce54dc62a026c3eb55dbbc17a  libstdc++-v3/testsuite/27_io/filesystem/operations/copy_symlink/1.cc
*************** e11957df9e55154829ef2c88f05939da  libstd
*** 156407,156421 ****
  b647d57a9901c82d0129c5201acc9094  libstdc++-v3/testsuite/27_io/filesystem/operations/proximate.cc
  42bbabf2da09905ae37bbba098e11e54  libstdc++-v3/testsuite/27_io/filesystem/operations/read_symlink.cc
  7a4057ce0324bf3666a807bf226db6b0  libstdc++-v3/testsuite/27_io/filesystem/operations/relative.cc
! fa9cb661a609c85c1c56083ca7d1b07f  libstdc++-v3/testsuite/27_io/filesystem/operations/remove.cc
! 188d5d0c404da13d898e20d4f696b142  libstdc++-v3/testsuite/27_io/filesystem/operations/remove_all.cc
  1c86186d63e9b0d895cb79ffe26403e5  libstdc++-v3/testsuite/27_io/filesystem/operations/rename.cc
  5b1f139296baa9d7352b83f77632719d  libstdc++-v3/testsuite/27_io/filesystem/operations/resize_file.cc
  e7e092a06ff77f3e5512bfbdf499ef49  libstdc++-v3/testsuite/27_io/filesystem/operations/space.cc
  313722d3d10698a6eaaa7de110cb505b  libstdc++-v3/testsuite/27_io/filesystem/operations/status.cc
  7fa64d46c7f92f1329be5a82a8c0744d  libstdc++-v3/testsuite/27_io/filesystem/operations/symlink_status.cc
  b4eec234efb26b94b92ce5a57a3fe46e  libstdc++-v3/testsuite/27_io/filesystem/operations/temp_directory_path.cc
! bd3e7e9b4dd0fdc9590ee569b21617aa  libstdc++-v3/testsuite/27_io/filesystem/operations/weakly_canonical.cc
  6dfbc01f57a0a31caab30c71dc1b23ba  libstdc++-v3/testsuite/27_io/filesystem/path/108636.cc
  99c8b1451d6ba0a50947ce5524a5ec93  libstdc++-v3/testsuite/27_io/filesystem/path/append/path.cc
  6e7cc1a2d710ecf9800389c7cac2e647  libstdc++-v3/testsuite/27_io/filesystem/path/append/source.cc
--- 156677,156691 ----
  b647d57a9901c82d0129c5201acc9094  libstdc++-v3/testsuite/27_io/filesystem/operations/proximate.cc
  42bbabf2da09905ae37bbba098e11e54  libstdc++-v3/testsuite/27_io/filesystem/operations/read_symlink.cc
  7a4057ce0324bf3666a807bf226db6b0  libstdc++-v3/testsuite/27_io/filesystem/operations/relative.cc
! 28768832df166f29dc98fec17595917a  libstdc++-v3/testsuite/27_io/filesystem/operations/remove.cc
! 00050bb26e03fbc97e9daf25104b5185  libstdc++-v3/testsuite/27_io/filesystem/operations/remove_all.cc
  1c86186d63e9b0d895cb79ffe26403e5  libstdc++-v3/testsuite/27_io/filesystem/operations/rename.cc
  5b1f139296baa9d7352b83f77632719d  libstdc++-v3/testsuite/27_io/filesystem/operations/resize_file.cc
  e7e092a06ff77f3e5512bfbdf499ef49  libstdc++-v3/testsuite/27_io/filesystem/operations/space.cc
  313722d3d10698a6eaaa7de110cb505b  libstdc++-v3/testsuite/27_io/filesystem/operations/status.cc
  7fa64d46c7f92f1329be5a82a8c0744d  libstdc++-v3/testsuite/27_io/filesystem/operations/symlink_status.cc
  b4eec234efb26b94b92ce5a57a3fe46e  libstdc++-v3/testsuite/27_io/filesystem/operations/temp_directory_path.cc
! 6f4e2caa5ea39201df51e3f79a01fc15  libstdc++-v3/testsuite/27_io/filesystem/operations/weakly_canonical.cc
  6dfbc01f57a0a31caab30c71dc1b23ba  libstdc++-v3/testsuite/27_io/filesystem/path/108636.cc
  99c8b1451d6ba0a50947ce5524a5ec93  libstdc++-v3/testsuite/27_io/filesystem/path/append/path.cc
  6e7cc1a2d710ecf9800389c7cac2e647  libstdc++-v3/testsuite/27_io/filesystem/path/append/source.cc
*************** b694262e9c10340bdb562c2e01ff78bf  libstd
*** 158752,158766 ****
  5b2a0cc6d1227b9eae0206d48d932d77  libstdc++-v3/testsuite/std/ranges/view.cc
  e9dd29c8ada0e4f7673523df4dc8c5e7  libstdc++-v3/testsuite/std/ranges/zip/1.cc
  2a24268e29bff5326b9f5c3f611001c8  libstdc++-v3/testsuite/std/ranges/zip_transform/1.cc
! 88f23ff7953b52443e710f07c271552d  libstdc++-v3/testsuite/std/simd/arithmetic.cc
  aa6cc0dafe21bb155a7598b9d0487e44  libstdc++-v3/testsuite/std/simd/arithmetic_expensive.cc
! 0f4c54b7b254944dcf6c0f1855cc40df  libstdc++-v3/testsuite/std/simd/create_tests.h
  b9969eb6247f261e1966f0c0070da700  libstdc++-v3/testsuite/std/simd/creation.cc
  82a2d6d9521ef6d5858eb86a61177c1d  libstdc++-v3/testsuite/std/simd/creation_expensive.cc
  ea82ffeb62bbb0bd8a4761833f50983e  libstdc++-v3/testsuite/std/simd/loads.cc
  ce67aba9cf8e5641eaf7182f399be3ec  libstdc++-v3/testsuite/std/simd/loads_expensive.cc
  4d4a17d28a0fa2d5f4dd2911c4fca5ca  libstdc++-v3/testsuite/std/simd/mask.cc
! 794c42e7e4ed323401a8836006afde3f  libstdc++-v3/testsuite/std/simd/mask2.cc
  83717d1cc074fb79c8bf2eadccd417ae  libstdc++-v3/testsuite/std/simd/mask2_expensive.cc
  f74fe6b1be89ddeab7e498d76598a481  libstdc++-v3/testsuite/std/simd/mask_expensive.cc
  2bb833f148d075bbcf4bee2427a8d686  libstdc++-v3/testsuite/std/simd/reductions.cc
--- 159022,159037 ----
  5b2a0cc6d1227b9eae0206d48d932d77  libstdc++-v3/testsuite/std/ranges/view.cc
  e9dd29c8ada0e4f7673523df4dc8c5e7  libstdc++-v3/testsuite/std/ranges/zip/1.cc
  2a24268e29bff5326b9f5c3f611001c8  libstdc++-v3/testsuite/std/ranges/zip_transform/1.cc
! 12b3ef51472ddde6eb184c6edcceff9f  libstdc++-v3/testsuite/std/simd/arithmetic.cc
  aa6cc0dafe21bb155a7598b9d0487e44  libstdc++-v3/testsuite/std/simd/arithmetic_expensive.cc
! 0aa6864858c77c1bda2d055b2663e714  libstdc++-v3/testsuite/std/simd/complex_init.h
! 82a3a488c94b21e0aa350b6cc5513478  libstdc++-v3/testsuite/std/simd/create_tests.h
  b9969eb6247f261e1966f0c0070da700  libstdc++-v3/testsuite/std/simd/creation.cc
  82a2d6d9521ef6d5858eb86a61177c1d  libstdc++-v3/testsuite/std/simd/creation_expensive.cc
  ea82ffeb62bbb0bd8a4761833f50983e  libstdc++-v3/testsuite/std/simd/loads.cc
  ce67aba9cf8e5641eaf7182f399be3ec  libstdc++-v3/testsuite/std/simd/loads_expensive.cc
  4d4a17d28a0fa2d5f4dd2911c4fca5ca  libstdc++-v3/testsuite/std/simd/mask.cc
! f9816689c3a0e6cfe4e3d2996d423109  libstdc++-v3/testsuite/std/simd/mask2.cc
  83717d1cc074fb79c8bf2eadccd417ae  libstdc++-v3/testsuite/std/simd/mask2_expensive.cc
  f74fe6b1be89ddeab7e498d76598a481  libstdc++-v3/testsuite/std/simd/mask_expensive.cc
  2bb833f148d075bbcf4bee2427a8d686  libstdc++-v3/testsuite/std/simd/reductions.cc
*************** f74fe6b1be89ddeab7e498d76598a481  libstd
*** 158771,158782 ****
  d6862fc2c353bee6fd5c6a2912279384  libstdc++-v3/testsuite/std/simd/shift_right_expensive.cc
  02900bea7eadb949bc468a602069dff4  libstdc++-v3/testsuite/std/simd/simd_alg.cc
  8f79bd8ce1a05cfdbad14dd9e4b4fd4b  libstdc++-v3/testsuite/std/simd/simd_alg_expensive.cc
  546a3483b60e0e695e9a5f5c7d496895  libstdc++-v3/testsuite/std/simd/sse_intrin.cc
! e2493aaebd9a1a286017264515b56ba5  libstdc++-v3/testsuite/std/simd/stores.cc
  d020ffeed3a700de700dcd8ab75dcc70  libstdc++-v3/testsuite/std/simd/stores_expensive.cc
! 9555f30a8004fbe5c183c3d458dbe0c7  libstdc++-v3/testsuite/std/simd/test_setup.h
! 6fc3af6248205b9756a89ab36e7d57c7  libstdc++-v3/testsuite/std/simd/traits_common.cc
! 0ffabdc07e746d3063781ca77f8c03f8  libstdc++-v3/testsuite/std/simd/traits_impl.cc
  b9fbe2181e3faf5bba7943f5a46a4f00  libstdc++-v3/testsuite/std/simd/traits_math.cc
  a0efc42f3d3e1e881d69063fe7f2c586  libstdc++-v3/testsuite/std/text_encoding/cons.cc
  bfa6a93e5c5cd2d11c1eddd5572fd5de  libstdc++-v3/testsuite/std/text_encoding/members.cc
--- 159042,159055 ----
  d6862fc2c353bee6fd5c6a2912279384  libstdc++-v3/testsuite/std/simd/shift_right_expensive.cc
  02900bea7eadb949bc468a602069dff4  libstdc++-v3/testsuite/std/simd/simd_alg.cc
  8f79bd8ce1a05cfdbad14dd9e4b4fd4b  libstdc++-v3/testsuite/std/simd/simd_alg_expensive.cc
+ 157b30e8ad17fb66077c8dbc68e38824  libstdc++-v3/testsuite/std/simd/simd_bit.cc
+ 12d983755fb0a7069b2c1724bf7d65b8  libstdc++-v3/testsuite/std/simd/simd_bit_expensive.cc
  546a3483b60e0e695e9a5f5c7d496895  libstdc++-v3/testsuite/std/simd/sse_intrin.cc
! 09d32260e3ae63a4c3f5072f2bb59473  libstdc++-v3/testsuite/std/simd/stores.cc
  d020ffeed3a700de700dcd8ab75dcc70  libstdc++-v3/testsuite/std/simd/stores_expensive.cc
! 3b4b1f97188ecc8a55060b770c41e319  libstdc++-v3/testsuite/std/simd/test_setup.h
! 479bdc7882b6f9306204b51bd787900a  libstdc++-v3/testsuite/std/simd/traits_common.cc
! 38831dc3c2b84949b761e52214f0538f  libstdc++-v3/testsuite/std/simd/traits_impl.cc
  b9fbe2181e3faf5bba7943f5a46a4f00  libstdc++-v3/testsuite/std/simd/traits_math.cc
  a0efc42f3d3e1e881d69063fe7f2c586  libstdc++-v3/testsuite/std/text_encoding/cons.cc
  bfa6a93e5c5cd2d11c1eddd5572fd5de  libstdc++-v3/testsuite/std/text_encoding/members.cc
*************** e7f09baa4d21038e62d7914205579167  libstd
*** 158832,158837 ****
--- 159105,159111 ----
  c8926de8f6ede51b5698239a063bcac4  libstdc++-v3/testsuite/std/time/month_weekday/io.cc
  dd57c14e38e93b2a78361d6e4c7350b1  libstdc++-v3/testsuite/std/time/month_weekday_last/1.cc
  075601020e49a49a2f5131b011ff3b25  libstdc++-v3/testsuite/std/time/month_weekday_last/io.cc
+ cf4542818b82e245ea144438f5eb223f  libstdc++-v3/testsuite/std/time/ostream_insert.cc
  60231b6bb71cc9175500ebf6d9f92ceb  libstdc++-v3/testsuite/std/time/parse/114240.cc
  a0be85b8053be995a48a4cfec6a5b675  libstdc++-v3/testsuite/std/time/parse/114279.cc
  4547b0badce5668333f08490264f6870  libstdc++-v3/testsuite/std/time/parse/125369.cc
*************** f9d9d1cb483f1731762a8e5787c8020b  libstd
*** 158845,158850 ****
--- 159119,159125 ----
  efdc68d548df15089ce510e6bf1c33c7  libstdc++-v3/testsuite/std/time/time_zone/requirements.cc
  105f0ca3c8074ef3b2c1751d37ec2b96  libstdc++-v3/testsuite/std/time/time_zone/sys_info_abbrev.cc
  57d3f5cb0b34d16a612546952b82dafa  libstdc++-v3/testsuite/std/time/time_zone/until_day_on.cc
+ cec9d3acae7429decc9668323d30ecec  libstdc++-v3/testsuite/std/time/time_zone/wall_cascade.cc
  62c56a128f0d03b2e348296c7a54ee3f  libstdc++-v3/testsuite/std/time/traits/is_clock.cc
  3c922068cf98b21e732c0de16c319289  libstdc++-v3/testsuite/std/time/tzdb/1.cc
  c142573e06d5c52d53f0f20e1e72e973  libstdc++-v3/testsuite/std/time/tzdb/leap_seconds.cc
*************** d0e4c75a4430f932eef2e477748b50af  libstd
*** 159593,159599 ****
  2f0e564e1790e65e7676bc35cd73bddc  libstdc++-v3/testsuite/util/testsuite_containers.h
  68f190d026ec8d9681c1ce7518e6a58e  libstdc++-v3/testsuite/util/testsuite_counter_type.h
  842c7fdf6ded6fed0d44ed60cb219589  libstdc++-v3/testsuite/util/testsuite_error.h
! 19aeb98b8e8fcd98419c545224a6315e  libstdc++-v3/testsuite/util/testsuite_fs.h
  dd88c1603de1bfe3c556df86650af13a  libstdc++-v3/testsuite/util/testsuite_greedy_ops.h
  a61da9cbd87ad94712cf12bae7e1c98f  libstdc++-v3/testsuite/util/testsuite_hooks.cc
  37dbdb4efaa4756802e9d59a40b5f911  libstdc++-v3/testsuite/util/testsuite_hooks.h
--- 159868,159874 ----
  2f0e564e1790e65e7676bc35cd73bddc  libstdc++-v3/testsuite/util/testsuite_containers.h
  68f190d026ec8d9681c1ce7518e6a58e  libstdc++-v3/testsuite/util/testsuite_counter_type.h
  842c7fdf6ded6fed0d44ed60cb219589  libstdc++-v3/testsuite/util/testsuite_error.h
! 7a2ad7255b0942ea3d7d727da0319cac  libstdc++-v3/testsuite/util/testsuite_fs.h
  dd88c1603de1bfe3c556df86650af13a  libstdc++-v3/testsuite/util/testsuite_greedy_ops.h
  a61da9cbd87ad94712cf12bae7e1c98f  libstdc++-v3/testsuite/util/testsuite_hooks.cc
  37dbdb4efaa4756802e9d59a40b5f911  libstdc++-v3/testsuite/util/testsuite_hooks.h
*************** e0c9e50df8d41d05918efe7e86898b10  libstd
*** 159611,159623 ****
  c23461854edd139c3540b67fb3115386  libstdc++-v3/testsuite/util/thread/all.h
  b950d655469c477755252b1e18009596  libtool-ldflags
  6374ef1e93ad5c2e7bf0d958dedc541d  libtool.m4
! f1cb7f26b13d9714b7e7daffe6f6b49a  libvtv/ChangeLog
  5d7582cbb1b5b11fd2786f785fabb3db  libvtv/Makefile.am
  1f8c57ab70163566fc7c8ce5eb9ee70d  libvtv/Makefile.in
  3b765c4f4a0a0f606db1472bce2b8d29  libvtv/acinclude.m4
  9326b744fb18bad65d4738d0d25f70c7  libvtv/aclocal.m4
  93fbb34153b1d41d838700340ff70f4d  libvtv/configure
! aef48e6e222ecdfc5d416dc52541151f  libvtv/configure.ac
  cad5d2cb6e35193683f2f355da02a25c  libvtv/configure.tgt
  2caccd848c579fcddd2a8c8106cfaff9  libvtv/scripts/run-testsuite.sh
  09a6150d1619f2508d7844f860b3382c  libvtv/scripts/sum-vtv-counts.c
--- 159886,159898 ----
  c23461854edd139c3540b67fb3115386  libstdc++-v3/testsuite/util/thread/all.h
  b950d655469c477755252b1e18009596  libtool-ldflags
  6374ef1e93ad5c2e7bf0d958dedc541d  libtool.m4
! a2c8f7f9656386b8e620e3871aab0c40  libvtv/ChangeLog
  5d7582cbb1b5b11fd2786f785fabb3db  libvtv/Makefile.am
  1f8c57ab70163566fc7c8ce5eb9ee70d  libvtv/Makefile.in
  3b765c4f4a0a0f606db1472bce2b8d29  libvtv/acinclude.m4
  9326b744fb18bad65d4738d0d25f70c7  libvtv/aclocal.m4
  93fbb34153b1d41d838700340ff70f4d  libvtv/configure
! 3e6f7ba82d2c869d3ce2220d1117de04  libvtv/configure.ac
  cad5d2cb6e35193683f2f355da02a25c  libvtv/configure.tgt
  2caccd848c579fcddd2a8c8106cfaff9  libvtv/scripts/run-testsuite.sh
  09a6150d1619f2508d7844f860b3382c  libvtv/scripts/sum-vtv-counts.c
*************** fd44dfd4ba421163f0a14a74988ea97a  libvtv
*** 159694,159706 ****
  534c98ba47a56c08d77208f4c40a69fc  libvtv/vtv_utils.h
  247597a3fcc5b5aa8bd923351c59d853  ltgcc.m4
  2d10540be0b9516e14daf48616877aad  ltmain.sh
! 002620193630695a8abd8a0491803a79  lto-plugin/ChangeLog
  aced0d5ba993307440be577533b64eb3  lto-plugin/Makefile.am
  92f6f16bc389d92c31885942b6b0f390  lto-plugin/Makefile.in
  79b337b8e2e684d93cd124b348d1261a  lto-plugin/aclocal.m4
  26e3d7e6d62bd000d0ad9db3b610e91c  lto-plugin/config.h.in
! b386dde9241d1c015a642d8ab491fa30  lto-plugin/configure
! 40efd97088318d4823aab5e72c85acd0  lto-plugin/configure.ac
  c518e97b135d85c77d084731510e25ad  lto-plugin/lto-plugin.c
  d00a1ca9cd8ba450f1a1028fd3e60dc3  lto-plugin/lto-plugin.map
  dee72a6a60e99528b0d17bf3ff9a1e15  ltoptions.m4
--- 159969,159981 ----
  534c98ba47a56c08d77208f4c40a69fc  libvtv/vtv_utils.h
  247597a3fcc5b5aa8bd923351c59d853  ltgcc.m4
  2d10540be0b9516e14daf48616877aad  ltmain.sh
! 76af2e9d20043ffae8fd0f7a8290b054  lto-plugin/ChangeLog
  aced0d5ba993307440be577533b64eb3  lto-plugin/Makefile.am
  92f6f16bc389d92c31885942b6b0f390  lto-plugin/Makefile.in
  79b337b8e2e684d93cd124b348d1261a  lto-plugin/aclocal.m4
  26e3d7e6d62bd000d0ad9db3b610e91c  lto-plugin/config.h.in
! b1e8ab7660e332e34f0651d05a42bbc5  lto-plugin/configure
! 33d0525999e537e9e5d51ace3274d83e  lto-plugin/configure.ac
  c518e97b135d85c77d084731510e25ad  lto-plugin/lto-plugin.c
  d00a1ca9cd8ba450f1a1028fd3e60dc3  lto-plugin/lto-plugin.map
  dee72a6a60e99528b0d17bf3ff9a1e15  ltoptions.m4
diff -Nrcpad gcc-17-20260628/c++tools/ChangeLog gcc-17-20260705/c++tools/ChangeLog
*** gcc-17-20260628/c++tools/ChangeLog	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/c++tools/ChangeLog	Sun Jul  5 22:32:05 2026
***************
*** 1,3 ****
--- 1,9 ----
+ 2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* configure: Regenerate.
+ 	* configure.ac: Replace AC_CANONICAL_SYSTEM with AC_CANONICAL_TARGET.
+ 
  2025-06-02  Kito Cheng  <kito.cheng@sifive.com>
  
  	* configure.ac: Don't check `--enable-default-pie`.
diff -Nrcpad gcc-17-20260628/c++tools/configure gcc-17-20260705/c++tools/configure
*** gcc-17-20260628/c++tools/configure	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/c++tools/configure	Sun Jul  5 22:32:05 2026
*************** test -n "$target_alias" &&
*** 2180,2186 ****
    test "$program_prefix$program_suffix$program_transform_name" = \
      NONENONEs,x,x, &&
    program_prefix=${target_alias}-
- 
  # Find a good install program.  We prefer a C program (faster),
  # so one script is as good as another.  But avoid the broken or
  # incompatible versions:
--- 2180,2185 ----
diff -Nrcpad gcc-17-20260628/c++tools/configure.ac gcc-17-20260705/c++tools/configure.ac
*** gcc-17-20260628/c++tools/configure.ac	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/c++tools/configure.ac	Sun Jul  5 22:32:05 2026
*************** AC_CONFIG_SRCDIR([server.cc])
*** 30,36 ****
  # Determine the noncanonical names used for directories.
  ACX_NONCANONICAL_TARGET
  
! AC_CANONICAL_SYSTEM
  AC_PROG_INSTALL
  test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
  AC_SUBST(INSTALL_PROGRAM)
--- 30,36 ----
  # Determine the noncanonical names used for directories.
  ACX_NONCANONICAL_TARGET
  
! AC_CANONICAL_TARGET
  AC_PROG_INSTALL
  test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
  AC_SUBST(INSTALL_PROGRAM)
diff -Nrcpad gcc-17-20260628/config/ChangeLog gcc-17-20260705/config/ChangeLog
*** gcc-17-20260628/config/ChangeLog	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/config/ChangeLog	Sun Jul  5 22:32:05 2026
***************
*** 1,3 ****
--- 1,29 ----
+ 2026-07-01  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* ax_pthread.m4 (ax_pthread_check_macro) <solaris*>: Only require
+ 	_REENTRANT before Solaris 11.4
+ 
+ 2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* acx.m4: Remove uses of AC_CHECK_TOOL_PREFIX.  Replace AC_TRY_COMPILE
+ 	with AC_COMPILE_IFELSE.
+ 	* asmcfi.m4: Replace AC_TRY_COMPILE with AC_COMPILE_IFELSE.
+ 	* bitfields.m4: Likewise.
+ 	* cet.m4: Replace AC_TRY_LINK with AC_LINK_IFELSE.  Replace AC_TRY_RUN
+ 	with AC_RUN_IFELSE.
+ 	* codeset.m4: Replace AC_TRY_LINK with AC_LINK_IFELSE.
+ 	* enable.m4: Replace AC_HELP_STRING with AS_HELP_STRING.
+ 	* gcc-plugin.m4: Replace AC_TRY_LINK with AC_LINK_IFELSE.
+ 	* hwcaps.m4: Replace AC_TRY_COMPILE with AC_COMPILE_IFELSE.  Replace
+ 	AC_TRY_LINK with AC_LINK_IFELSE.
+ 	* isl.m4: Replace AC_TRY_LINK with AC_LINK_IFELSE.
+ 	* lcmessage.m4: Replace AC_TRY_LINK with AC_LINK_IFELSE.
+ 	* no-executables.m4: Replace AC_TRY_COMPILE with AC_COMPILE_IFELSE.
+ 	Replace AC_TRY_LINK with AC_LINK_IFELSE.
+ 	* po.m4: Replace AC_OUTPUT_COMMANDS with AC_CONFIG_COMMANDS.
+ 	* tls.m4: Add explicit 4th argument to AC_LINK_IFELSE.
+ 
  2026-05-05  Pietro Monteiro  <pietro@sociotechnical.xyz>
  
  	* visibility.m4: New file.
diff -Nrcpad gcc-17-20260628/config/acx.m4 gcc-17-20260705/config/acx.m4
*** gcc-17-20260628/config/acx.m4	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/config/acx.m4	Sun Jul  5 22:32:05 2026
*************** ac_c_preproc_warn_flag=yes])# AC_PROG_CP
*** 389,396 ****
  # Sets the shell variable have_gnat to yes or no as appropriate, and
  # substitutes GNATBIND and GNATMAKE.
  AC_DEFUN([ACX_PROG_GNAT],
! [AC_REQUIRE([AC_CHECK_TOOL_PREFIX])
! AC_REQUIRE([AC_PROG_CC])
  AC_CHECK_TOOL(GNATBIND, gnatbind, no)
  AC_CHECK_TOOL(GNATMAKE, gnatmake, no)
  AC_CACHE_CHECK([whether compiler driver understands Ada and is recent enough],
--- 389,395 ----
  # Sets the shell variable have_gnat to yes or no as appropriate, and
  # substitutes GNATBIND and GNATMAKE.
  AC_DEFUN([ACX_PROG_GNAT],
! [AC_REQUIRE([AC_PROG_CC])
  AC_CHECK_TOOL(GNATBIND, gnatbind, no)
  AC_CHECK_TOOL(GNATMAKE, gnatmake, no)
  AC_CACHE_CHECK([whether compiler driver understands Ada and is recent enough],
*************** fi])
*** 436,449 ****
  
  # Test for Algol 68
  AC_DEFUN([ACX_PROG_A68],
! [AC_REQUIRE([AC_CHECK_TOOL_PREFIX])
! AC_REQUIRE([AC_PROG_CC])
  AC_CHECK_TOOL(A68, ga68, no)])
  
  # Test for D.
  AC_DEFUN([ACX_PROG_GDC],
! [AC_REQUIRE([AC_CHECK_TOOL_PREFIX])
! AC_REQUIRE([AC_PROG_CC])
  AC_CHECK_TOOL(GDC, gdc, no)
  AC_CACHE_CHECK([whether the D compiler works],
  		 acx_cv_d_compiler_works,
--- 435,446 ----
  
  # Test for Algol 68
  AC_DEFUN([ACX_PROG_A68],
! [AC_REQUIRE([AC_PROG_CC])
  AC_CHECK_TOOL(A68, ga68, no)])
  
  # Test for D.
  AC_DEFUN([ACX_PROG_GDC],
! [AC_REQUIRE([AC_PROG_CC])
  AC_CHECK_TOOL(GDC, gdc, no)
  AC_CACHE_CHECK([whether the D compiler works],
  		 acx_cv_d_compiler_works,
*************** dnl See whether we can include both stri
*** 500,507 ****
  AC_DEFUN([ACX_HEADER_STRING],
  [AC_CACHE_CHECK([whether string.h and strings.h may both be included],
    gcc_cv_header_string,
! [AC_TRY_COMPILE([#include <string.h>
! #include <strings.h>], , gcc_cv_header_string=yes, gcc_cv_header_string=no)])
  if test $gcc_cv_header_string = yes; then
    AC_DEFINE(STRING_WITH_STRINGS, 1, [Define if you can safely include both <string.h> and <strings.h>.])
  fi
--- 497,505 ----
  AC_DEFUN([ACX_HEADER_STRING],
  [AC_CACHE_CHECK([whether string.h and strings.h may both be included],
    gcc_cv_header_string,
! [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <string.h>
! #include <strings.h>]], [[]])],
! 		   [gcc_cv_header_string=yes], [gcc_cv_header_string=no])])
  if test $gcc_cv_header_string = yes; then
    AC_DEFINE(STRING_WITH_STRINGS, 1, [Define if you can safely include both <string.h> and <strings.h>.])
  fi
diff -Nrcpad gcc-17-20260628/config/asmcfi.m4 gcc-17-20260705/config/asmcfi.m4
*** gcc-17-20260628/config/asmcfi.m4	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/config/asmcfi.m4	Sun Jul  5 22:32:05 2026
*************** AC_DEFUN([GCC_AS_CFI_PSEUDO_OP],
*** 4,12 ****
  [AC_CACHE_CHECK([assembler .cfi pseudo-op support],
      gcc_cv_as_cfi_pseudo_op, [
      gcc_cv_as_cfi_pseudo_op=unknown
!     AC_TRY_COMPILE([asm (".cfi_startproc\n\t.cfi_endproc");],,
! 		   [gcc_cv_as_cfi_pseudo_op=yes],
! 		   [gcc_cv_as_cfi_pseudo_op=no])
   ])
   if test "x$gcc_cv_as_cfi_pseudo_op" = xyes; then
      AC_DEFINE(HAVE_AS_CFI_PSEUDO_OP, 1,
--- 4,13 ----
  [AC_CACHE_CHECK([assembler .cfi pseudo-op support],
      gcc_cv_as_cfi_pseudo_op, [
      gcc_cv_as_cfi_pseudo_op=unknown
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[asm (".cfi_startproc\n\t.cfi_endproc");]],
! 				      [[]])],
! 		      [gcc_cv_as_cfi_pseudo_op=yes],
! 		      [gcc_cv_as_cfi_pseudo_op=no])
   ])
   if test "x$gcc_cv_as_cfi_pseudo_op" = xyes; then
      AC_DEFINE(HAVE_AS_CFI_PSEUDO_OP, 1,
diff -Nrcpad gcc-17-20260628/config/ax_pthread.m4 gcc-17-20260705/config/ax_pthread.m4
*** gcc-17-20260628/config/ax_pthread.m4	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/config/ax_pthread.m4	Sun Jul  5 22:32:05 2026
*************** AS_IF([test "x$GCC" = "xyes"],
*** 208,214 ****
  # correctly enabled
  
  case $host_os in
!         darwin* | hpux* | linux* | osf* | solaris*)
          ax_pthread_check_macro="_REENTRANT"
          ;;
  
--- 208,229 ----
  # correctly enabled
  
  case $host_os in
!         solaris*)
!         # Solaris 11.4 introduced XPG7 support and did away with the need for
!         # _REENTRANT.
! 
!         AC_EGREP_CPP([AX_PTHREAD_SOLARIS__REENTRANT],
!             [
! #            undef _XOPEN_SOURCE
! #            include <sys/feature_tests.h>
! #            if _XOPEN_VERSION < 700
!              AX_PTHREAD_SOLARIS__REENTRANT
! #            endif
!             ],
!             [ax_pthread_check_macro="_REENTRANT"],
!             [ax_pthread_check_macro="--"])
!         ;;
!         darwin* | hpux* | linux* | osf*)
          ax_pthread_check_macro="_REENTRANT"
          ;;
  
diff -Nrcpad gcc-17-20260628/config/bitfields.m4 gcc-17-20260705/config/bitfields.m4
*** gcc-17-20260628/config/bitfields.m4	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/config/bitfields.m4	Sun Jul  5 22:32:05 2026
*************** AC_DEFUN([gt_BITFIELD_TYPE_MATTERS],
*** 12,22 ****
  [
    AC_CACHE_CHECK([if the type of bitfields matters], gt_cv_bitfield_type_matters,
    [
!     AC_TRY_COMPILE(
!       [struct foo1 { char x; char y:1; char z; };
  struct foo2 { char x; long long int y:1; char z; };
! int foo1test[ sizeof (struct foo1) < sizeof (struct foo2) ? 1 : -1 ]; ],
!       [], gt_cv_bitfield_type_matters=yes, gt_cv_bitfield_type_matters=no)
    ])
    if test $gt_cv_bitfield_type_matters = yes; then
      AC_DEFINE(HAVE_BITFIELD_TYPE_MATTERS, 1,
--- 12,24 ----
  [
    AC_CACHE_CHECK([if the type of bitfields matters], gt_cv_bitfield_type_matters,
    [
!     AC_COMPILE_IFELSE(
!       [AC_LANG_PROGRAM([[struct foo1 { char x; char y:1; char z; };
  struct foo2 { char x; long long int y:1; char z; };
! int foo1test[ sizeof (struct foo1) < sizeof (struct foo2) ? 1 : -1 ]; ]],
!       [[]])],
!       [gt_cv_bitfield_type_matters=yes],
!       [gt_cv_bitfield_type_matters=no])
    ])
    if test $gt_cv_bitfield_type_matters = yes; then
      AC_DEFINE(HAVE_BITFIELD_TYPE_MATTERS, 1,
diff -Nrcpad gcc-17-20260628/config/cet.m4 gcc-17-20260705/config/cet.m4
*** gcc-17-20260628/config/cet.m4	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/config/cet.m4	Sun Jul  5 22:32:05 2026
*************** cet_save_LDFLAGS="$LDFLAGS"
*** 121,147 ****
  LDFLAGS="$LDFLAGS -Wl,-z,ibt,-z,shstk"
  if test x$may_have_cet = xyes; then
    # Check whether -fcf-protection=none -Wl,-z,ibt,-z,shstk work.
!   AC_TRY_LINK(
!     [],[return 0;],
      [may_have_cet=yes],
      [may_have_cet=no])
  fi
  
  if test x$may_have_cet = xyes; then
    if test x$cross_compiling = xno; then
!     AC_TRY_RUN([
  int
  main ()
  {
    asm ("endbr32");
    return 0;
  }
!     ],
      [have_multi_byte_nop=yes],
!     [have_multi_byte_nop=no])
      have_cet=no
      if test x$have_multi_byte_nop = xyes; then
!       AC_TRY_RUN([
  static void
  foo (void)
  {
--- 121,148 ----
  LDFLAGS="$LDFLAGS -Wl,-z,ibt,-z,shstk"
  if test x$may_have_cet = xyes; then
    # Check whether -fcf-protection=none -Wl,-z,ibt,-z,shstk work.
!   AC_LINK_IFELSE([AC_LANG_PROGRAM(
!     [[]],[[return 0;]])],
      [may_have_cet=yes],
      [may_have_cet=no])
  fi
  
  if test x$may_have_cet = xyes; then
    if test x$cross_compiling = xno; then
!     AC_RUN_IFELSE([AC_LANG_SOURCE([[
  int
  main ()
  {
    asm ("endbr32");
    return 0;
  }
!     ]])],
      [have_multi_byte_nop=yes],
!     [have_multi_byte_nop=no],
!     [AC_MSG_FAILURE(cannot run test program while cross compiling)])
      have_cet=no
      if test x$have_multi_byte_nop = xyes; then
!       AC_RUN_IFELSE([AC_LANG_SOURCE([[
  static void
  foo (void)
  {
*************** main ()
*** 167,175 ****
    bar ();
    return 0;
  }
!       ],
        [have_cet=no],
!       [have_cet=yes])
      fi
      if test x$enable_cet = xno -a x$have_cet = xyes; then
        AC_MSG_ERROR([Intel CET must be enabled on Intel CET enabled host])
--- 168,177 ----
    bar ();
    return 0;
  }
!       ]])],
        [have_cet=no],
!       [have_cet=yes],
!       [AC_MSG_FAILURE(cannot run test program while cross compiling)])
      fi
      if test x$enable_cet = xno -a x$have_cet = xyes; then
        AC_MSG_ERROR([Intel CET must be enabled on Intel CET enabled host])
diff -Nrcpad gcc-17-20260628/config/codeset.m4 gcc-17-20260705/config/codeset.m4
*** gcc-17-20260628/config/codeset.m4	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/config/codeset.m4	Sun Jul  5 22:32:05 2026
*************** dnl From Bruno Haible.
*** 11,20 ****
  AC_DEFUN([AM_LANGINFO_CODESET],
  [
    AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset,
!     [AC_TRY_LINK([#include <langinfo.h>],
!       [char* cs = nl_langinfo(CODESET);],
!       am_cv_langinfo_codeset=yes,
!       am_cv_langinfo_codeset=no)
      ])
    if test $am_cv_langinfo_codeset = yes; then
      AC_DEFINE(HAVE_LANGINFO_CODESET, 1,
--- 11,20 ----
  AC_DEFUN([AM_LANGINFO_CODESET],
  [
    AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset,
!     [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <langinfo.h>]],
!       [[char* cs = nl_langinfo(CODESET);]])],
!       [am_cv_langinfo_codeset=yes],
!       [am_cv_langinfo_codeset=no])
      ])
    if test $am_cv_langinfo_codeset = yes; then
      AC_DEFINE(HAVE_LANGINFO_CODESET, 1,
diff -Nrcpad gcc-17-20260628/config/enable.m4 gcc-17-20260705/config/enable.m4
*** gcc-17-20260628/config/enable.m4	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/config/enable.m4	Sun Jul  5 22:32:05 2026
*************** dnl See docs/html/17_intro/configury.htm
*** 11,17 ****
  dnl
  AC_DEFUN([GCC_ENABLE],[dnl
  m4_define([_g_switch],[--enable-$1])dnl
! m4_define([_g_help],[AC_HELP_STRING(_g_switch$3,[$4 @<:@default=$2@:>@])])dnl
   AC_ARG_ENABLE($1,_g_help,
    m4_bmatch([$5],
     [^permit ],
--- 11,17 ----
  dnl
  AC_DEFUN([GCC_ENABLE],[dnl
  m4_define([_g_switch],[--enable-$1])dnl
! m4_define([_g_help],[AS_HELP_STRING(_g_switch$3,[$4 @<:@default=$2@:>@])])dnl
   AC_ARG_ENABLE($1,_g_help,
    m4_bmatch([$5],
     [^permit ],
diff -Nrcpad gcc-17-20260628/config/gcc-plugin.m4 gcc-17-20260705/config/gcc-plugin.m4
*** gcc-17-20260628/config/gcc-plugin.m4	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/config/gcc-plugin.m4	Sun Jul  5 22:32:05 2026
*************** AC_DEFUN([GCC_ENABLE_PLUGINS],
*** 107,114 ****
         ;;
       esac
       AC_MSG_CHECKING([for -fPIC -shared])
!      AC_TRY_LINK(
!        [extern int X;],[return X == 0;],
         [AC_MSG_RESULT([yes]); have_pic_shared=yes],
         [AC_MSG_RESULT([no]); have_pic_shared=no])
       if test x"$have_pic_shared" != x"yes" -o x"$ac_cv_search_dlopen" = x"no"; then
--- 107,114 ----
         ;;
       esac
       AC_MSG_CHECKING([for -fPIC -shared])
!      AC_LINK_IFELSE([AC_LANG_PROGRAM(
!        [[extern int X;]],[[return X == 0;]])],
         [AC_MSG_RESULT([yes]); have_pic_shared=yes],
         [AC_MSG_RESULT([no]); have_pic_shared=no])
       if test x"$have_pic_shared" != x"yes" -o x"$ac_cv_search_dlopen" = x"no"; then
diff -Nrcpad gcc-17-20260628/config/hwcaps.m4 gcc-17-20260705/config/hwcaps.m4
*** gcc-17-20260628/config/hwcaps.m4	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/config/hwcaps.m4	Sun Jul  5 22:32:05 2026
*************** AC_DEFUN([GCC_CHECK_ASSEMBLER_HWCAP], [
*** 17,23 ****
        CFLAGS="$CFLAGS -Wa,-nH"
  
        AC_MSG_CHECKING([for as that supports -Wa,-nH])
!       AC_TRY_COMPILE([], [return 0;], [ac_hwcap_flags=yes],[ac_hwcap_flags=no])
        if test "$ac_hwcap_flags" = "yes"; then
  	HWCAP_CFLAGS="-Wa,-nH $HWCAP_CFLAGS"
        fi
--- 17,24 ----
        CFLAGS="$CFLAGS -Wa,-nH"
  
        AC_MSG_CHECKING([for as that supports -Wa,-nH])
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[return 0;]])],
! 			[ac_hwcap_flags=yes],[ac_hwcap_flags=no])
        if test "$ac_hwcap_flags" = "yes"; then
  	HWCAP_CFLAGS="-Wa,-nH $HWCAP_CFLAGS"
        fi
*************** AC_DEFUN([GCC_CHECK_LINKER_HWCAP], [
*** 47,53 ****
    LDFLAGS="$LFLAGS -mclear-hwcap"
  
    AC_MSG_CHECKING([for -mclear-hwcap])
!   AC_TRY_LINK([], [return 0;], [ac_hwcap_ldflags=yes],[ac_hwcap_ldflags=no])
    if test "$ac_hwcap_ldflags" = "yes"; then
      HWCAP_LDFLAGS="-mclear-hwcap $HWCAP_LDFLAGS"
    fi
--- 48,55 ----
    LDFLAGS="$LFLAGS -mclear-hwcap"
  
    AC_MSG_CHECKING([for -mclear-hwcap])
!   AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[return 0;]])],
! 		 [ac_hwcap_ldflags=yes],[ac_hwcap_ldflags=no])
    if test "$ac_hwcap_ldflags" = "yes"; then
      HWCAP_LDFLAGS="-mclear-hwcap $HWCAP_LDFLAGS"
    fi
diff -Nrcpad gcc-17-20260628/config/isl.m4 gcc-17-20260705/config/isl.m4
*** gcc-17-20260628/config/isl.m4	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/config/isl.m4	Sun Jul  5 22:32:05 2026
*************** AC_DEFUN([ISL_CHECK_VERSION],
*** 107,114 ****
      LIBS="${_isl_saved_LIBS} -lisl -lgmp"
  
      AC_MSG_CHECKING([for isl 0.15 or later])
!     AC_TRY_LINK([#include <isl/schedule.h>],
!                 [isl_options_set_schedule_serialize_sccs (NULL, 0);],
                  [gcc_cv_isl=yes],
                  [gcc_cv_isl=no])
      AC_MSG_RESULT([$gcc_cv_isl])
--- 107,114 ----
      LIBS="${_isl_saved_LIBS} -lisl -lgmp"
  
      AC_MSG_CHECKING([for isl 0.15 or later])
!     AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <isl/schedule.h>]],
!                 [[isl_options_set_schedule_serialize_sccs (NULL, 0);]])],
                  [gcc_cv_isl=yes],
                  [gcc_cv_isl=no])
      AC_MSG_RESULT([$gcc_cv_isl])
diff -Nrcpad gcc-17-20260628/config/lcmessage.m4 gcc-17-20260705/config/lcmessage.m4
*** gcc-17-20260628/config/lcmessage.m4	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/config/lcmessage.m4	Sun Jul  5 22:32:05 2026
*************** dnl   Ulrich Drepper <drepper@cygnus.com
*** 23,29 ****
  AC_DEFUN([AM_LC_MESSAGES],
  [
    AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
!     [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
         am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
    if test $am_cv_val_LC_MESSAGES = yes; then
      AC_DEFINE(HAVE_LC_MESSAGES, 1,
--- 23,30 ----
  AC_DEFUN([AM_LC_MESSAGES],
  [
    AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
!     [AC_LINK_IFELSE(
!       [AC_LANG_PROGRAM([[#include <locale.h>]], [[return LC_MESSAGES]])],
         am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
    if test $am_cv_val_LC_MESSAGES = yes; then
      AC_DEFINE(HAVE_LC_MESSAGES, 1,
diff -Nrcpad gcc-17-20260628/config/no-executables.m4 gcc-17-20260705/config/no-executables.m4
*** gcc-17-20260628/config/no-executables.m4	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/config/no-executables.m4	Sun Jul  5 22:32:05 2026
*************** fi)
*** 62,71 ****
  m4_divert_pop()dnl
  ])# GCC_NO_EXECUTABLES
  
! # Use the strongest available test out of AC_TRY_COMPILE and AC_TRY_LINK.
  AC_DEFUN([GCC_TRY_COMPILE_OR_LINK],
  [if test x$gcc_no_link = xyes; then
!   AC_TRY_COMPILE([$1], [$2], [$3], [$4])
  else
!   AC_TRY_LINK([$1], [$2], [$3], [$4])
  fi])
--- 62,71 ----
  m4_divert_pop()dnl
  ])# GCC_NO_EXECUTABLES
  
! # Use the strongest available test out of AC_COMPILE_IFELSE and AC_LINK_IFELSE
  AC_DEFUN([GCC_TRY_COMPILE_OR_LINK],
  [if test x$gcc_no_link = xyes; then
!   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[$1]], [[$2]])],[$3],[$4])
  else
!   AC_LINK_IFELSE([AC_LANG_PROGRAM([[$1]], [[$2]])],[$3],[$4])
  fi])
diff -Nrcpad gcc-17-20260628/config/po.m4 gcc-17-20260705/config/po.m4
*** gcc-17-20260628/config/po.m4	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/config/po.m4	Sun Jul  5 22:32:05 2026
*************** AC_DEFUN([AM_PO_SUBDIRS],
*** 86,92 ****
      rm -f messages.po
    fi
  
!   AC_OUTPUT_COMMANDS([
      for ac_file in $CONFIG_FILES; do
        # Support "outfile[:infile[:infile...]]"
        case "$ac_file" in
--- 86,92 ----
      rm -f messages.po
    fi
  
!   AC_CONFIG_COMMANDS([posubdirs], [[
      for ac_file in $CONFIG_FILES; do
        # Support "outfile[:infile[:infile...]]"
        case "$ac_file" in
*************** AC_DEFUN([AM_PO_SUBDIRS],
*** 186,197 ****
          fi
          ;;
        esac
!     done],
!    [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
      # POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it
      # from automake.
      eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
      # Capture the value of LINGUAS because we need it to compute CATALOGS.
      LINGUAS="${LINGUAS-%UNSET%}"
!    ])
  ])
--- 186,197 ----
          fi
          ;;
        esac
!     done]],
!    [[# Capture the value of obsolete ALL_LINGUAS because we need it to compute
      # POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it
      # from automake.
      eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
      # Capture the value of LINGUAS because we need it to compute CATALOGS.
      LINGUAS="${LINGUAS-%UNSET%}"
!    ]])
  ])
diff -Nrcpad gcc-17-20260628/config/tls.m4 gcc-17-20260705/config/tls.m4
*** gcc-17-20260628/config/tls.m4	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/config/tls.m4	Sun Jul  5 22:32:05 2026
*************** AC_DEFUN([GCC_CHECK_TLS], [
*** 12,18 ****
        LDFLAGS="-static $LDFLAGS"
        AC_LINK_IFELSE([AC_LANG_SOURCE([int main() { return 0; }])],
  	[AC_RUN_IFELSE([AC_LANG_SOURCE([__thread int a; int b; int main() { return a = b; }])],
! 		       [gcc_cv_have_tls=yes], [gcc_cv_have_tls=no],[])],
  	[gcc_cv_have_tls=yes])
        LDFLAGS="$chktls_save_LDFLAGS"
        if test $gcc_cv_have_tls = yes; then
--- 12,19 ----
        LDFLAGS="-static $LDFLAGS"
        AC_LINK_IFELSE([AC_LANG_SOURCE([int main() { return 0; }])],
  	[AC_RUN_IFELSE([AC_LANG_SOURCE([__thread int a; int b; int main() { return a = b; }])],
! 		       [gcc_cv_have_tls=yes], [gcc_cv_have_tls=no],
! 		       [AC_MSG_FAILURE(cannot run test program while cross compiling)])],
  	[gcc_cv_have_tls=yes])
        LDFLAGS="$chktls_save_LDFLAGS"
        if test $gcc_cv_have_tls = yes; then
*************** AC_DEFUN([GCC_CHECK_TLS], [
*** 64,70 ****
  		if (pthread_join (thread, &thread_retval))
  		  return 0;
  		return (a_in_other_thread == a_in_main_thread);])],
! 	     [gcc_cv_have_tls=yes], [gcc_cv_have_tls=no], [])
  	  CFLAGS="$chktls_save_CFLAGS"
  	fi
        fi],
--- 65,72 ----
  		if (pthread_join (thread, &thread_retval))
  		  return 0;
  		return (a_in_other_thread == a_in_main_thread);])],
! 	     [gcc_cv_have_tls=yes], [gcc_cv_have_tls=no],
! 	     [AC_MSG_FAILURE(cannot run test program while cross compiling)])
  	  CFLAGS="$chktls_save_CFLAGS"
  	fi
        fi],
diff -Nrcpad gcc-17-20260628/configure gcc-17-20260705/configure
*** gcc-17-20260628/configure	Sun Jun 28 22:32:22 2026
--- gcc-17-20260705/configure	Sun Jul  5 22:32:22 2026
*************** ac_compiler_gnu=$ac_cv_c_compiler_gnu
*** 5637,5644 ****
  fi
  
  
- 
- 
  if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}gnatbind", so it can be a program name with args.
  set dummy ${ac_tool_prefix}gnatbind; ac_word=$2
--- 5637,5642 ----
*************** else
*** 5860,5866 ****
  fi
  
  
- 
  if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ga68", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ga68; ac_word=$2
--- 5858,5863 ----
*************** else
*** 5954,5960 ****
  fi
  
  
- 
  if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}gdc", so it can be a program name with args.
  set dummy ${ac_tool_prefix}gdc; ac_word=$2
--- 5951,5956 ----
diff -Nrcpad gcc-17-20260628/configure.ac gcc-17-20260705/configure.ac
*** gcc-17-20260628/configure.ac	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/configure.ac	Sun Jul  5 22:32:05 2026
*************** if test "x$require_gmp" = xyes && test "
*** 1789,1824 ****
    CFLAGS="$CFLAGS $gmpinc"
    # Check for the recommended and required versions of GMP.
    AC_MSG_CHECKING([for the correct version of gmp.h])
!   AC_TRY_COMPILE([#include "gmp.h"],[
    #define GCC_GMP_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c))
    #define GCC_GMP_VERSION GCC_GMP_VERSION_NUM(__GNU_MP_VERSION,__GNU_MP_VERSION_MINOR,__GNU_MP_VERSION_PATCHLEVEL)
    #if GCC_GMP_VERSION < GCC_GMP_VERSION_NUM(4,2,3)
    choke me
    #endif
!   ], [AC_TRY_COMPILE([#include <gmp.h>],[
    #define GCC_GMP_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c))
    #define GCC_GMP_VERSION GCC_GMP_VERSION_NUM(__GNU_MP_VERSION,__GNU_MP_VERSION_MINOR,__GNU_MP_VERSION_PATCHLEVEL)
    #if GCC_GMP_VERSION < GCC_GMP_VERSION_NUM(4,3,2)
    choke me
    #endif
!   ], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([buggy but acceptable])])],
     [AC_MSG_RESULT([no]); have_gmp=no])
  
    # If we have GMP, check the MPFR version.
    if test x"$have_gmp" = xyes; then
      # Check for the recommended and required versions of MPFR.
      AC_MSG_CHECKING([for the correct version of mpfr.h])
!     AC_TRY_COMPILE([#include <gmp.h>
!     #include <mpfr.h>],[
      #if MPFR_VERSION < MPFR_VERSION_NUM(3,1,0)
      choke me
      #endif
!     ], [AC_TRY_COMPILE([#include <gmp.h>
!     #include <mpfr.h>],[
      #if MPFR_VERSION < MPFR_VERSION_NUM(3,1,6)
      choke me
      #endif
!     ], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([buggy but acceptable])])],
       [AC_MSG_RESULT([no]); have_gmp=no])
    fi
  
--- 1789,1824 ----
    CFLAGS="$CFLAGS $gmpinc"
    # Check for the recommended and required versions of GMP.
    AC_MSG_CHECKING([for the correct version of gmp.h])
!   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include "gmp.h"]], [[
    #define GCC_GMP_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c))
    #define GCC_GMP_VERSION GCC_GMP_VERSION_NUM(__GNU_MP_VERSION,__GNU_MP_VERSION_MINOR,__GNU_MP_VERSION_PATCHLEVEL)
    #if GCC_GMP_VERSION < GCC_GMP_VERSION_NUM(4,2,3)
    choke me
    #endif
!   ]])], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <gmp.h>]], [[
    #define GCC_GMP_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c))
    #define GCC_GMP_VERSION GCC_GMP_VERSION_NUM(__GNU_MP_VERSION,__GNU_MP_VERSION_MINOR,__GNU_MP_VERSION_PATCHLEVEL)
    #if GCC_GMP_VERSION < GCC_GMP_VERSION_NUM(4,3,2)
    choke me
    #endif
!   ]])], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([buggy but acceptable])])],
     [AC_MSG_RESULT([no]); have_gmp=no])
  
    # If we have GMP, check the MPFR version.
    if test x"$have_gmp" = xyes; then
      # Check for the recommended and required versions of MPFR.
      AC_MSG_CHECKING([for the correct version of mpfr.h])
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <gmp.h>
!     #include <mpfr.h>]],[[
      #if MPFR_VERSION < MPFR_VERSION_NUM(3,1,0)
      choke me
      #endif
!     ]])], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <gmp.h>
!     #include <mpfr.h>]],[[
      #if MPFR_VERSION < MPFR_VERSION_NUM(3,1,6)
      choke me
      #endif
!     ]])], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([buggy but acceptable])])],
       [AC_MSG_RESULT([no]); have_gmp=no])
    fi
  
*************** if test "x$require_gmp" = xyes && test "
*** 1826,1840 ****
    if test "x$require_mpc" = xyes && test x"$have_gmp" = xyes ; then
      # Check for the recommended and required versions of MPC.
      AC_MSG_CHECKING([for the correct version of mpc.h])
!     AC_TRY_COMPILE([#include <mpc.h>],[
      #if MPC_VERSION < MPC_VERSION_NUM(0,8,0)
      choke me
      #endif
!     ], [AC_TRY_COMPILE([#include <mpc.h>],[
      #if MPC_VERSION < MPC_VERSION_NUM(0,8,1)
      choke me
      #endif
!     ], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([buggy but acceptable])])],
       [AC_MSG_RESULT([no]); have_gmp=no])
    fi
  
--- 1826,1840 ----
    if test "x$require_mpc" = xyes && test x"$have_gmp" = xyes ; then
      # Check for the recommended and required versions of MPC.
      AC_MSG_CHECKING([for the correct version of mpc.h])
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <mpc.h>]], [[
      #if MPC_VERSION < MPC_VERSION_NUM(0,8,0)
      choke me
      #endif
!     ]])], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <mpc.h>]], [[
      #if MPC_VERSION < MPC_VERSION_NUM(0,8,1)
      choke me
      #endif
!     ]])], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([buggy but acceptable])])],
       [AC_MSG_RESULT([no]); have_gmp=no])
    fi
  
*************** if test "x$require_gmp" = xyes && test "
*** 1843,1849 ****
      saved_LIBS="$LIBS"
      LIBS="$LIBS $gmplibs"
      AC_MSG_CHECKING([for the correct version of the gmp/mpfr libraries])
!     AC_TRY_LINK([#include <mpfr.h>],[
      mpfr_t n;
      mpfr_t x;
      int t;
--- 1843,1849 ----
      saved_LIBS="$LIBS"
      LIBS="$LIBS $gmplibs"
      AC_MSG_CHECKING([for the correct version of the gmp/mpfr libraries])
!     AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <mpfr.h>]], [[
      mpfr_t n;
      mpfr_t x;
      int t;
*************** if test "x$require_gmp" = xyes && test "
*** 1854,1860 ****
      mpfr_subnormalize (x, t, MPFR_RNDN);
      mpfr_clear(n);
      mpfr_clear(x);
!     ], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]); have_gmp=no])
      LIBS="$saved_LIBS"
    fi
  
--- 1854,1860 ----
      mpfr_subnormalize (x, t, MPFR_RNDN);
      mpfr_clear(n);
      mpfr_clear(x);
!     ]])], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]); have_gmp=no])
      LIBS="$saved_LIBS"
    fi
  
*************** if test "x$require_gmp" = xyes && test "
*** 1863,1869 ****
      saved_LIBS="$LIBS"
      LIBS="$LIBS $gmplibs"
      AC_MSG_CHECKING([for the correct version of the mpc libraries])
!     AC_TRY_LINK([#include <mpc.h>],[
      mpc_t c;
      mpc_init2 (c, 53);
      mpc_set_ui_ui (c, 1, 1, MPC_RNDNN);
--- 1863,1869 ----
      saved_LIBS="$LIBS"
      LIBS="$LIBS $gmplibs"
      AC_MSG_CHECKING([for the correct version of the mpc libraries])
!     AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <mpc.h>]], [[
      mpc_t c;
      mpc_init2 (c, 53);
      mpc_set_ui_ui (c, 1, 1, MPC_RNDNN);
*************** if test "x$require_gmp" = xyes && test "
*** 1871,1877 ****
      mpc_pow (c, c, c, MPC_RNDNN);
      mpc_acosh (c, c, MPC_RNDNN);
      mpc_clear (c);
!     ], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]); have_gmp=no])
      LIBS="$saved_LIBS"
    fi
  
--- 1871,1877 ----
      mpc_pow (c, c, c, MPC_RNDNN);
      mpc_acosh (c, c, MPC_RNDNN);
      mpc_clear (c);
!     ]])], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]); have_gmp=no])
      LIBS="$saved_LIBS"
    fi
  
diff -Nrcpad gcc-17-20260628/contrib/ChangeLog gcc-17-20260705/contrib/ChangeLog
*** gcc-17-20260628/contrib/ChangeLog	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/contrib/ChangeLog	Sun Jul  5 22:32:05 2026
***************
*** 1,3 ****
--- 1,11 ----
+ 2026-07-01  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* config-list.mk (sparc64-sun-solaris2.11): Remove --with-gnu-ld.
+ 
+ 2026-07-01  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* config-list.mk (sparc64-sun-solaris2.11): Remove --with-gnu-as.
+ 
  2026-06-09  Jakub Jelinek  <jakub@redhat.com>
  
  	* gcc-changelog/git_update_version.py (ignored_commits): Add
diff -Nrcpad gcc-17-20260628/contrib/config-list.mk gcc-17-20260705/contrib/config-list.mk
*** gcc-17-20260628/contrib/config-list.mk	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/contrib/config-list.mk	Sun Jul  5 22:32:05 2026
*************** LIST = \
*** 99,105 ****
    sh-rtems sh-wrs-vxworks sparc-elf \
    sparc-leon-elf sparc-rtems sparc-linux-gnu \
    sparc-leon3-linux-gnuOPT-enable-target=all sparc-netbsdelf \
!   sparc64-sun-solaris2.11OPT-with-gnu-ldOPT-with-gnu-asOPT-enable-threads=posix \
    sparc-wrs-vxworks sparc64-elf sparc64-rtems sparc64-linux \
    sparc64-netbsd sparc64-openbsd \
    v850e1-elf v850e-elf v850-elf v850-rtems vax-linux-gnu \
--- 99,105 ----
    sh-rtems sh-wrs-vxworks sparc-elf \
    sparc-leon-elf sparc-rtems sparc-linux-gnu \
    sparc-leon3-linux-gnuOPT-enable-target=all sparc-netbsdelf \
!   sparc64-sun-solaris2.11OPT-enable-threads=posix \
    sparc-wrs-vxworks sparc64-elf sparc64-rtems sparc64-linux \
    sparc64-netbsd sparc64-openbsd \
    v850e1-elf v850e-elf v850-elf v850-rtems vax-linux-gnu \
diff -Nrcpad gcc-17-20260628/contrib/regression/ChangeLog gcc-17-20260705/contrib/regression/ChangeLog
*** gcc-17-20260628/contrib/regression/ChangeLog	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/contrib/regression/ChangeLog	Sun Jul  5 22:32:05 2026
***************
*** 1,3 ****
--- 1,11 ----
+ 2026-07-01  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* btest-gcc.sh (withopt): Likewise.
+ 
+ 2026-07-01  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* btest-gcc.sh (withopt): Remove --with-gnu-as.
+ 
  2023-11-23  Hans-Peter Nilsson  <hp@axis.com>
  
  	* btest-gcc.sh (--handle-xpass-as-fail): New option.
diff -Nrcpad gcc-17-20260628/contrib/regression/btest-gcc.sh gcc-17-20260705/contrib/regression/btest-gcc.sh
*** gcc-17-20260628/contrib/regression/btest-gcc.sh	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/contrib/regression/btest-gcc.sh	Sun Jul  5 22:32:05 2026
*************** if [ $H_HOST = $H_TARGET ] ; then
*** 138,147 ****
      make $dashj all || exit 1
    fi
  else
-   withopt="--with-gnu-ld --with-gnu-as"
    case "$H_TARGET" in
      *-linux*) ;;
!     *) withopt="$withopt --with-newlib";;
    esac
    $SOURCE/configure --prefix=$PREFIX --target=$H_TARGET $withopt || exit 1
    make $dashj || exit 1
--- 138,146 ----
      make $dashj all || exit 1
    fi
  else
    case "$H_TARGET" in
      *-linux*) ;;
!     *) withopt="--with-newlib";;
    esac
    $SOURCE/configure --prefix=$PREFIX --target=$H_TARGET $withopt || exit 1
    make $dashj || exit 1
diff -Nrcpad gcc-17-20260628/fixincludes/ChangeLog gcc-17-20260705/fixincludes/ChangeLog
*** gcc-17-20260628/fixincludes/ChangeLog	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/fixincludes/ChangeLog	Sun Jul  5 22:32:05 2026
***************
*** 1,3 ****
--- 1,9 ----
+ 2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* configure: Regenerate.
+ 	* configure.ac: Replace AC_CANONICAL_SYSTEM with AC_CANONICAL_TARGET.
+ 
  2026-06-27  Filip Kastl  <fkastl@suse.cz>
  
  	* fixincl.c (extract_quoted_files): Add a const char * helper
diff -Nrcpad gcc-17-20260628/fixincludes/configure gcc-17-20260705/fixincludes/configure
*** gcc-17-20260628/fixincludes/configure	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/fixincludes/configure	Sun Jul  5 22:32:05 2026
*************** test -n "$target_alias" &&
*** 3308,3314 ****
    test "$program_prefix$program_suffix$program_transform_name" = \
      NONENONEs,x,x, &&
    program_prefix=${target_alias}-
- 
  ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 3308,3313 ----
diff -Nrcpad gcc-17-20260628/fixincludes/configure.ac gcc-17-20260705/fixincludes/configure.ac
*** gcc-17-20260628/fixincludes/configure.ac	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/fixincludes/configure.ac	Sun Jul  5 22:32:05 2026
*************** AC_INIT(fixincludes, [ ])
*** 3,9 ****
  AC_CONFIG_SRCDIR(inclhack.def)
  AC_CONFIG_AUX_DIR(..)
  m4_sinclude(../libtool.m4)
! AC_CANONICAL_SYSTEM
  AC_PROG_CC
  AC_USE_SYSTEM_EXTENSIONS
  AC_PROG_SED
--- 3,9 ----
  AC_CONFIG_SRCDIR(inclhack.def)
  AC_CONFIG_AUX_DIR(..)
  m4_sinclude(../libtool.m4)
! AC_CANONICAL_TARGET
  AC_PROG_CC
  AC_USE_SYSTEM_EXTENSIONS
  AC_PROG_SED
diff -Nrcpad gcc-17-20260628/gcc/ChangeLog gcc-17-20260705/gcc/ChangeLog
*** gcc-17-20260628/gcc/ChangeLog	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/gcc/ChangeLog	Sun Jul  5 22:32:05 2026
***************
*** 1,3 ****
--- 1,1298 ----
+ 2026-07-04  Filip Kastl  <fkastl@suse.cz>
+ 
+ 	* config/i386/i386.cc: Add override specifier for
+ 	better_epilogue_loop_than_p.
+ 
+ 2026-07-03  Philipp Tomsich  <philipp.tomsich@vrull.eu>
+ 
+ 	PR tree-optimization/122569
+ 	* match.pd (clz_msb_iso_table_index): New match pattern.
+ 	* tree-ssa-forwprop.cc (gimple_clz_msb_iso_table_index): Declare.
+ 	(simplify_count_zeroes): Recognize the new pattern; route its
+ 	table validation through the CTZ checkfn.  Relax the element
+ 	type check to accept integer types up to 64 bits.
+ 
+ 2026-07-03  Philipp Tomsich  <philipp.tomsich@vrull.eu>
+ 
+ 	* match.pd (msb_or_cascade_32, msb_or_cascade_64): New match
+ 	helpers.
+ 	(clz_table_index): Rewrite the 32-bit and 64-bit forms to use
+ 	the cascade helpers.
+ 
+ 2026-07-03  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/106164
+ 	PR tree-optimization/126042
+ 	PR tree-optimization/94589
+ 	* fold-const.cc (combine_comparisons): Split into
+ 	2 versions. Also handle BIT_AND_EXPR and BIT_IOR_EXPR.
+ 	* fold-const.h (combine_comparisons): New declaration.
+ 	* match.pd (`(a CMP1 b) BITOP (a CMP2 b)`): New pattern.
+ 
+ 2026-07-03  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	* config/avr/avr.cc (avr_out_plus_1): Handle +/-1 on the
+ 	lower regs without needing a scratch.
+ 	* config/avr/avr.md (add<mode>3_clobber, *add<mode>3_clobber)
+ 	(add<mode>3, *add<mode>3, addpsi3, *addpsi3): Add constraint
+ 	alternative "Y01 Ym1" for +/-1 without scratch.
+ 
+ 2026-07-03  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	* config/riscv/riscv.cc (synthesize_add): Utilize shNadd.uw when
+ 	appropriate.
+ 
+ 2026-07-03  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	* config/riscv/riscv.cc (and_synthesis): Use riscv_integer_cost rather
+ 	than riscv_const_insns.  Use rotate+clear_bits+rotate when useful.
+ 
+ 2026-07-03  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-slp.cc (vect_bb_vectorization_profitable_p): Make
+ 	profitabilty decision easier to debug.
+ 
+ 2026-07-03  Naveen  <naveen.siddegowda@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/102202
+ 	* tree-call-cdce.cc: Include "tree-ssanames.h", "gimple-fold.h".
+ 	(len_has_boolean_range_p): New function.
+ 	(can_shrink_wrap_len_p): New function.
+ 	(gen_zero_len_conditions): New function.
+ 	(shrink_wrap_len_call): New function.
+ 	(shrink_wrap_conditional_dead_built_in_calls): Dispatch to
+ 	shrink_wrap_one_memset_call for memset calls eligible for the [0, 1]
+ 	length transform, ahead of the generic LHS and range-test paths.
+ 	(pass_call_cdce::execute): Collect memset calls satisfying
+ 	can_shrink_wrap_memset_p as shrink-wrap candidates.
+ 
+ 2026-07-03  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR target/120027
+ 	* config/aarch64/aarch64-sve-builtins-base.cc (svext_bhw_impl::fold):
+ 	New member function.  Fold the unsigned svextb/svexth/svextw
+ 	intrinsics to a bitwise AND when the merging form has an all-true
+ 	predicate.
+ 
+ 2026-07-03  Tamar Christina  <tamar.christina@arm.com>
+ 	    Chris Bazley  <Chris.Bazley@arm.com>
+ 
+ 	* expr.cc (store_constructor): Handle VLA vec_init support and generic
+ 	fall through piecewise copy.
+ 	* doc/md.texi: Document change
+ 
+ 2026-07-03  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	* config/riscv/riscv.cc (synthesize_ior_xor): Use riscv_integer_cost
+ 	rather than riscv_const_insns.
+ 
+ 2026-07-03  Oleg Endo  <olegendo@gcc.gnu.org>
+ 
+ 	* config/sh/sh.opt.urls: Renegerate.
+ 	* config/vax/vax.opt.urls: Renegerate.
+ 
+ 2026-07-03  Oleg Endo  <olegendo@gcc.gnu.org>
+ 
+ 	PR target/55212
+ 	* config/sh/sh.opt (mlra): Ignore option but keep it around
+ 	for compatibility.
+ 	* config/sh/sh.cc (TARGET_LRA_P): Remove.
+ 	(sh_lra_p): Move definition ...
+ 	* config/sh/sh-protos.h (sh_lra_p): ... here.  Always return true.
+ 	* doc/invoke.texi: Remove mention of -mlra for SH.
+ 
+ 2026-07-03  Oleg Endo  <olegendo@gcc.gnu.org>
+ 
+ 	PR target/55212
+ 	* config/sh/sh.md (movv2sf, movv2sf_i, unnamed splits): New patterns.
+ 	* config/sh/sh.cc (sh_hard_regno_mode_ok): Allow V2SF only in fp-regs.
+ 	(sh_max_mov_insn_displacement): Return 0 for any float mode.
+ 
+ 2026-07-03  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+ 
+ 	PR target/55212
+ 	* config/sh/sh.md (extend<mode>si2_short_mem_disp_z): New
+ 	insn_and_split.
+ 	(extend<mode>si2): Use it for LRA.
+ 	(mov<mode>_store_mem_index, *mov<mode>_store_mem_index): New patterns.
+ 	(mov<mode>): Use it for LRA.
+ 	(movsf_ie_store_mem_index, movsf_ie_load_mem_index,
+ 	*movsf_ie_store_mem_inde, *movsf_ie_load_mem_index): New patterns.
+ 	(movsf): Use it for LRA.
+ 
+ 2026-07-03  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+ 
+ 	PR target/55212
+ 	* config/sh/predicates.md (pc_relative_load_operand): New predicate.
+ 	* config/sh/sh-protos.h (sh_movsf_ie_ra_split_p): Remove.
+ 	(sh_movsf_ie_y_split_p): New proto.
+ 	(sh_movsf_ie_subreg_multiword_p): New proto.
+ 	* config/sh/sh.cc: (sh_movsf_ie_ra_split_p): Remove.
+ 	(sh_movsf_ie_y_split_p): New function.
+ 	(sh_movsf_ie_subreg_multiword_p): New function.
+ 	(broken_move): Take movsf_ie_ra into account for fldi cases.
+ 	* config/sh/sh.md (movdf_i4_F_z): New insn.
+ 	(movdf): Use it when expanding.
+ 	(movsf_ie_ra): Use define_insn instead of define_insn_and_split.
+ 	Adjust alternatives.
+ 	(movsf_ie_rffr): New insn_and_split.
+ 	(movsf_ie_F_z, movsf_ie_Q_z, movsf_ie_y): New insns.
+ 	(movsf): Use new patterns when expanding.
+ 
+ 2026-07-02  Pengfei Li  <Pengfei.Li2@arm.com>
+ 
+ 	* config/aarch64/aarch64.cc
+ 	(aarch64_vector_costs::determine_suggested_unroll_factor): Add a
+ 	loop_vec_info parameter.
+ 	(determine_suggested_unroll_factor): Cap the suggested unroll for
+ 	small-niters loops.
+ 	(aarch64_vector_costs::finish_cost): Pass loop_vinfo to
+ 	determine_suggested_unroll_factor.
+ 
+ 2026-07-02  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	* config/riscv/bitmanip.md (xor_for_plus_minint): New pattern.
+ 	* config/riscv/riscv.cc (synthesize_add): Handle INT_MIN as
+ 	bit inversion.  Add support for add.uw.  Use riscv_integer_cost
+ 	rather than riscv_const_insns.
+ 	(synthesize_add_extended): Use riscv_integer_cost rather than
+ 	riscv_const_insns.
+ 
+ 2026-07-02  Sivan Shani  <sivan.shani@arm.com>
+ 
+ 	* config/aarch64/aarch64-c.cc (aarch64_update_cpp_builtins):
+ 	Check for SVE2 and SVE_AES directly.
+ 	* config/aarch64/aarch64-sve-builtins-sve2.def (REQUIRED_EXTENSIONS):
+ 	Make AES builtins streaming-compatible with SSVE AES.
+ 	* config/aarch64/aarch64-sve2.md: Use TARGET_SVE_AES instead of
+ 	TARGET_SVE2_AES.
+ 	* config/aarch64/aarch64.h (TARGET_SVE2_AES): Rename to...
+ 	(TARGET_SVE_AES): Add support for SSVE AES.
+ 	* config/aarch64/iterators.md: Use TARGET_SVE2 for VNx2DI
+ 	PMULL pair mode.
+ 
+ 2026-07-02  Srinath Parvathaneni  <srinath.parvathaneni@arm.com>
+ 
+ 	PR target/97344
+ 	* config.in: Re-generate.
+ 	* config/aarch64/aarch64.cc (aarch64_output_dwarf_dtprel): Define
+ 	function.
+ 	(TARGET_ASM_OUTPUT_DWARF_DTPREL): Define macro.
+ 	* configure: Re-generate.
+ 	* configure.ac: Add assemler check for dtprel relocation.
+ 
+ 2026-07-02  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* config/arm/arm-mve-builtins-shapes.cc (SHAPE): Add a
+ 	trailing statement that lacks a semicolon.  Add that to all
+ 	existing uses.
+ 
+ 2026-07-02  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* config/aarch64/aarch64-sve-builtins-shapes.cc (SHAPE): Add a
+ 	trailing statement that lacks a semicolon.  Add that to all
+ 	existing uses.
+ 
+ 2026-07-02  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* configure.ac (gcc_fn_gld_min_version): New function.
+ 	(gcc_fn_gld_elf_min_version): Likewise.
+ 	Use them.
+ 	* configure: Regenerate.
+ 
+ 2026-07-02  Philipp Tomsich  <philipp.tomsich@vrull.eu>
+ 
+ 	PR tree-optimization/124545
+ 	* match.pd: Add (T)A +- CST -> (T)(A +- CST') for widening
+ 	conversions from a signed inner type with undefined overflow.
+ 
+ 2026-07-02  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+ 
+ 	PR target/117182
+ 	PR target/55212
+ 	* target.def (cannot_substitute_const_equiv_p): New target hook.
+ 	* doc/tm.texi.in: Add it.
+ 	* lra-constraints.cc (get_equiv): Use it.
+ 	* config/sh/sh.cc (sh_cannot_substitute_const_equiv_p): Override it.
+ 	* doc/tm.texi: Re-generate.
+ 
+ 2026-07-02  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+ 
+ 	PR target/55212
+ 	* config/sh/predicates.md (hard_reg_r0..r7): New predicates.
+ 	* config/sh/sh.md (udivsi3_i4, udivsi3_i4_single,
+ 	udivsi3_i1): Rewrite with match_operand and match_dup.
+ 	(block_lump_real, block_lump_real_i4): Ditto.
+ 	(udivsi3): Adjust for it.
+ 	* config/sh/sh-mem.cc (expand_block_move): Ditto.
+ 
+ 2026-07-01  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR objc/124260
+ 	* config/darwin.cc (darwin_objc2_section): Also allow meta data
+ 	in const_data.
+ 	(darwin_label_is_anonymous_local_objc_name): Make ClassList linker-
+ 	visible.
+ 	(darwin_file_end): Update comments on the ImageInfo flags.  Do not
+ 	claim we have signed pointers.
+ 
+ 2026-07-01  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* config/s390/s390.md: Annotate mnemonic for
+ 	extzv_<mode>_{srl,sll}<clobbercc_or_nocc>.
+ 
+ 2026-07-01  Icenowy Zheng  <zhengxingda@iscas.ac.cn>
+ 
+ 	PR target/126049
+ 	* config/riscv/autovec.md: Change fmin/fmax reduction initial
+ 	value from inf/-inf to NaN for proper semantics of corresponding
+ 	C funtion.
+ 
+ 2026-07-01  Robin Dapp  <robin.dapp@oss.qualcomm.com>
+ 
+ 	* doc/md.texi: Document new behavior.
+ 	* lra-constraints.cc (get_dependent_filter): Call filter with
+ 	INVALID_REGNUM ref op instead of allowing everything.
+ 
+ 2026-07-01  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	* config/gcn/gcn.h (ASM_V_SPEC): Define.
+ 
+ 2026-07-01  Alfie Richards  <alfie.richards@arm.com>
+ 
+ 	* tree-vect-loop-manip.cc (vect_set_loop_condition_normal):
+ 	Check if loop_vinfo is null before dereference.
+ 
+ 2026-07-01  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* config/i386/i386-features.cc (compute_convert_gain) <ZERO_EXTEND>:
+ 	Provide costs for the new transformation.
+ 	(convert_insn): Implement *zero_extendsidi2 using the backend's
+ 	vec_setv2di_0_zero_extendsi_1 pattern (i.e. movq mem, %xmm).
+ 	(general_scalar_to_vector_candidate_p): Consider the pattern
+ 	(zero_extend:DI (mem:SI ...)) to be a candidate for DImode STV.
+ 
+ 2026-07-01  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* simplify-rtx.cc (simplify_context::simplify_ternary_operation)
+ 	<case VEC_MERGE>: Simplify a vec_merge of a vec_merge with a
+ 	repeated operand.
+ 
+ 2026-07-01  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	PR target/126054
+ 	* config/s390/s390.md: Fix
+ 	extzv_<mode>_{srl,sll}<clobbercc_or_nocc> by adjusting the
+ 	bitmasks in the output templates.
+ 
+ 2026-07-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* config/aarch64/tuning_models/neoversev2.h
+ 	(neoversev2_dispatch_constraint_callback): Remove spurious semicolon.
+ 	* config/aarch64/aarch64-elf-metadata.cc
+ 	(gnu_property_features_to_string): Likewise.
+ 	* config/aarch64/aarch64-sve-builtins-shapes.cc (SHAPE (write_zt),
+ 	SHAPE (write_lane_zt)): Likewise.
+ 
+ 2026-07-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* config/aarch64/aarch64-neon-builtins-base.h: Use
+ 	namespace aarch64_acle { namespace functions { ... } } instead of
+ 	C++17 namespace aarch64_acle::functions { ... }.
+ 	* config/aarch64/aarch64-neon-builtins-shapes.h: Use
+ 	namespace aarch64_acle { namespace shapes { ... } } instead of
+ 	C++17 namespace aarch64_acle::shapes { ... }.
+ 	* config/aarch64/aarch64-neon-builtins-shapes.cc: Likewise.
+ 
+ 2026-07-01  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/125040
+ 	* tree-ssa-pre.cc (clean): Iterate processing.
+ 
+ 2026-07-01  Alfie Richards  <alfie.richards@arm.com>
+ 
+ 	* tree-ssa-loop-manip.h: Add argument to create_iv.
+ 	* tree-ssa-loop-manip.cc (create_iv): Change step to not
+ 	necessarily be loop invariant.
+ 	* tree-vect-data-refs.cc (bump_vector_ptr): Remove logic for
+ 	updating use-def chain.
+ 	* tree-vect-loop-manip.cc (vect_set_loop_controls_directly):
+ 	Change to use LOOP_VINFO_IV_INCREMENT instead of VF.
+ 	(vect_set_loop_condition_partial_vectors_avx512):
+ 	Change to use LOOP_VINFO_IV_INCREMENT instead of VF.
+ 	(vect_gen_vector_loop_niters): Update to handle
+ 	LOOP_VINFO_IV_INCREMENT.
+ 	(vect_get_loop_iv_increment): New function.
+ 	* tree-vect-loop.cc (vectorizable_induction): Update to use
+ 	LOOP_VINFO_IV_INCREMENT instead of VF, and remove SELECT_VL
+ 	logic.
+ 	(vect_update_ivs_after_vectorizer_for_early_breaks):
+ 	Update to use LOOP_VINFO_IV_INCREMENT over VF and move IV
+ 	update to vect_iv_increment_position.
+ 	(vect_transform_loop): Add initialization of
+ 	LOOP_VINFO_IV_INCREMENT.
+ 	* tree-vect-stmts.cc (vect_get_strided_load_store_ops):
+ 	Update to use dr_increment and dr_bump, remove SELECT_VL logic.
+ 	(vect_get_data_ptr_increment): Change to return the increment
+ 	needed to advance the pointer to the next iteration.
+ 	(vect_get_data_ptr_bump): New function.
+ 	(vectorizable_scan_store): Update to use vect_get_data_ptr_bump
+ 	and to remove SELECT_VL logic.
+ 	(vectorizable_store): Update to use vect_get_data_ptr_bump and
+ 	vect_get_data_ptr_increment.
+ 	(vectorizable_load): Update to use vect_get_data_ptr_bump and
+ 	vect_get_data_ptr_increment.
+ 	* tree-vectorizer.h (loop_vec_info): Add iv_increment field.
+ 	(LOOP_VINFO_IV_INCREMENT): New macro.
+ 	(LOOP_VINFO_IV_INCREMENT_INVARIANT_P): New macro.
+ 	(bump_vector_ptr): Remove incr_ptr argument.
+ 	(vect_get_loop_iv_increment): New function.
+ 
+ 2026-07-01  Alfie Richards  <alfie.richards@arm.com>
+ 
+ 	* tree-vect-data-refs.cc (vect_create_data_ref_ptr): Check for null
+ 	pntr_incr.
+ 
+ 2026-07-01  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/125040
+ 	* tree-ssa-pre.cc (sorted_array_from_bitmap_set): Compute
+ 	the set of entries to the value graph before building the
+ 	final sorted expression set.
+ 
+ 2026-07-01  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* configure.ac: Remove --with-gnu-ld, gnu_ld_flag.
+ 	* configure: Regenerate.
+ 	* config.gcc: Remove gnu_ld_flag.
+ 	* doc/install.texi (Configuration, --with-gnu-ld): Remove.
+ 	(Specific, all ELF targets): Remove GNU ld link.
+ 	* doc/invoke.texi (IA-64 Options, -mgnu-ld): Remove comment.
+ 
+ 2026-07-01  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* config.gcc: Remove gnu_ld.
+ 	<*-*-vms*>: Check ld_flavor instead of gnu_ld.
+ 	<ia64*-*-elf*> (target_cpu_default): Always add MASK_GNU_LD.
+ 	<mips*-*-*> (target_cpu_default2): Always add
+ 	MASK_SPLIT_ADDRESSES.
+ 	<hppa*64*-*-hpux11*> (target_cpu_default): Check ld_flavor instead
+ 	of gnu_ld.  Move ...
+ 	* configure.ac: ... here.
+ 	Remove gnu_ld.
+ 	Check ld_flavor instead of gnu_ld.
+ 	(gcc_cv_ld_static_dynamic) <*-*-hpux*>: Don't check gnu_ld.
+ 	(gcc_cv_ld_version_script): Check ld --help for --version-script.
+ 	(gcc_cv_ld_soname): Check ld --help for -soname.
+ 	<*-*-darwin*>: Always use Darwin version.
+ 	<*-*-solaris2*>: Always use Solaris version with Solaris ld.
+ 	(gcc_cv_ld_demangle): Don't check gnu_ld.
+ 	* configure: Regenerate.
+ 
+ 2026-07-01  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* configure.ac (HAVE_GNU_LD): Remove.
+ 	(gcc_cv_ld_at_file): New test.
+ 	* configure: Regenerate.
+ 	* config.in: Regenerate.
+ 	* collect2.cc: Check HAVE_LD_AT_FILE instead of HAVE_GNU_LD.
+ 
+ 2026-07-01  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* configure.ac: Remove --with-gnu-as, gas_flag.
+ 	* configure: Regenerate.
+ 	* config.gcc: Remove gas_flag.
+ 	* doc/install.texi (Configuration, --with-gnu-as): Remove.
+ 	(Specific, hppa64-hp-hpux11*): Remove --with-gnu-as reference.
+ 	(Specific, ia64-*-hpux*): Likewise.  Recomment --with-as instead.
+ 	* doc/invoke.texi (IA-64 Options, -mgnu-as): Remove comment.
+ 
+ 2026-07-01  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* acinclude.m4 (gcc_GAS_FLAGS): Check as_flavor instead of gas.
+ 	* config.gcc: Remove gas.
+ 	<ia64*-*-elf*> (target_cpu_defaults): Always add MASK_GNU_AS.
+ 	<ia64-hp-*vms*>: Likewise.
+ 	<hppa*-*-*> (target_cpu_default2): Always add MASK_GAS.
+ 	* configure.ac: Remove gas.
+ 	* configure: Regenerate.
+ 
+ 2026-07-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* tree-ssa-structalias.cc (set_uids_in_ptset): If ANYTHING is
+ 	present in the ESCAPED_RETURN solution, record that the global
+ 	solution has an escaped heap if FROM contains a heap variable.
+ 
+ 2026-07-01  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* gcc.cc (asm_options) [HAVE_GNU_AS]: Move to ...
+ 	(ASM_V_SPEC) ... this.
+ 	* config/nvptx/nvptx.h (ASM_SPEC): Rename to ASM_V_SPEC.
+ 	Adjust comment.
+ 	* config/rs6000/aix.h [HAVE_AIX_AS] (ASM_V_SPEC): Define.
+ 	* config/sol2.h (ASM_SPEC_BASE): Move -v handling to ...
+ 	[HAVE_SOLARIS_AS] (ASM_V_SPEC): ... this.  Also handle -w.
+ 	* doc/tm.texi.in (Driver, ASM_V_SPEC): Document.
+ 	* doc/tm.texi: Regenerate.
+ 	* config/darwin.h (ASM_OPTIONS): Remove.
+ 	* config/i386/darwin.h (ASM_SPEC): Remove ASM_OPTIONS.
+ 	* config/ia64/hpux.h (AS_NEEDS_DASH_FOR_PIPED_INPUT): Remove.
+ 	* configure.ac (HAVE_GNU_AS): Remove.
+ 	* configure: Regenerate.
+ 	* config.in: Regenerate.
+ 
+ 2026-07-01  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* acinclude.m4: Check as_flavor, ld_flavor instead of solaris_as,
+ 	solaris_ld.
+ 	* configure.ac: Likewise.
+ 	(as_flavor, ld_flavor): New variables.
+ 	Adapt messages.
+ 	Set based on as, ld version output.
+ 	(HAVE_AIX_AS): Define.
+ 	* configure: Regenerate.
+ 	* config.in: Regenerate.
+ 
+ 2026-07-01  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	* common/config/i386/cpuinfo.h
+ 	(get_available_features): Remove AMX-TF32.
+ 	* common/config/i386/i386-common.cc
+ 	(OPTION_MASK_ISA2_AMX_TF32_SET): Removed.
+ 	(OPTION_MASK_ISA2_AMX_TF32_UNSET): Ditto.
+ 	(OPTION_MASK_ISA2_AMX_TILE_UNSET): Remove AMX_TF32.
+ 	(ix86_handle_option): Ditto.
+ 	* common/config/i386/i386-cpuinfo.h
+ 	(enum processor_features): Remove FEATURE_AMX_TF32.
+ 	* common/config/i386/i386-isas.h: Remove AMX-TF32.
+ 	* config.gcc: Do not include amxtf32intrin.h.
+ 	* config/i386/amxtf32intrin.h: Remove AMX-TF32 intrins.
+ 	* config/i386/cpuid.h (bit_AMX_TF32): Removed.
+ 	* config/i386/i386-c.cc
+ 	(ix86_target_macros_internal): Remove AMX_TF32.
+ 	* config/i386/i386-isa.def (AMX_TF32): Removed.
+ 	* config/i386/i386-options.cc
+ 	(ix86_valid_target_attribute_inner_p): Remove AMX-TF32.
+ 	* config/i386/i386.opt: Ditto.
+ 	* config/i386/i386.opt.urls: Ditto.
+ 	* config/i386/immintrin.h: Do not include amxtf32intrin.h.
+ 	* doc/extend.texi: Remove amx-tf32.
+ 	* doc/invoke.texi: Ditto.
+ 	* doc/sourcebuild.texi: Ditto.
+ 
+ 2026-07-01  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	* config/i386/i386.h (PTA_DIAMONDRAPIDS): Remove PTA_AMX_TF32.
+ 	* doc/invoke.texi: Correct documentation.
+ 
+ 2026-06-30  Oleg Endo  <olegendo@gcc.gnu.org>
+ 
+ 	PR target/55212
+ 	* config/sh/predicates.md (simple_mem_operand):
+ 	Use 'satisfies_constraint_Sra'.
+ 	(post_inc_mem, pre_dec_mem): Use 'satisfies_constraint_Rab'.
+ 	* config/sh/constraints.md (Rab, Rai, Sgb): New constraints.
+ 	(Sua, Sdd, Snd, Ssd, Sbv, Sra, Ara, Add): Use Rab and Rai constraints.
+ 	* config/sh/sync.md (atomic_mem_operand_0, atomic_mem_operand_1): Reject
+ 	GBR addresses when hard-llcs atomic mode is enabled.
+ 
+ 2026-06-30  Abhishek Kaushik  <abhishek.kaushik@arm.com>
+ 
+ 	* config/aarch64/aarch64.cc: Include gimple-fold.h.
+ 	(aarch64_try_widen_mult_by_pow2): New function.
+ 	(aarch64_instruction_selection): Call it for conversion assignments.
+ 
+ 2026-06-30  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/125961
+ 	* tree-ssa-phiopt.cc (factor_out_conditional_operation): Use
+ 	remove_phi_node instead of gsi_remove for the phi node.
+ 	(factor_out_conditional_load): Likewise.
+ 
+ 2026-06-30  Karl Meakin  <karl.meakin@arm.com>
+ 
+ 	* config/aarch64/aarch64-acle-builtins.h
+ 	(TYPES_neon_reinterpret1, TYPES_neon_reinterpret,
+ 	TYPES_neon_reinterpretq1, TYPES_neon_reinterpretq,
+ 	neon_reinterpret, neon_reinterpretq): New type lists.
+ 	* config/aarch64/aarch64-builtins.cc (VREINTERPRET_BUILTIN2,
+ 	VREINTERPRET_BUILTINS1, VREINTERPRET_BUILTINS,
+ 	VREINTERPRETQ_BUILTIN2, VREINTERPRETQ_BUILTINS1,
+ 	VREINTERPRETQ_BUILTINS, VREINTERPRET_BUILTIN): Delete macros.
+ 	(AARCH64_SIMD_VREINTERPRET_BUILTINS): Delete enum member.
+ 	(aarch64_init_simd_intrinsics): Delete function.
+ 	(init_arm_neon_builtins): Delete call to
+ 	`aarch64_init_simd_intrinsics`.
+ 	(aarch64_general_fold_builtin): Delete case for
+ 	`AARCH64_SIMD_VREINTERPRET_BUILTINS`.
+ 	* config/aarch64/aarch64-neon-builtins-base.cc (struct
+ 	gimple_reinterpret): New struct.
+ 	(vreinterpret, vreinterpretq): New function bases.
+ 	* config/aarch64/aarch64-neon-builtins-base.def (vreinterpret,
+ 	vreinterpretq): New function groups.
+ 
+ 2026-06-30  Karl Meakin  <karl.meakin@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-pragma-builtins.def (vext_mf8,
+ 	vextq_mf8, vrev64_mf8, vrev64q_mf8, vrev32_mf8, vrev32q_mf8,
+ 	vrev16_mf8, vrev16q_mf8, vtrn1_mf8, vtrn1q_mf8, vtrn2_mf8,
+ 	vtrn2q_mf8, vtrn_mf8, vtrnq_mf8, vuzp1_mf8, vuzp1q_mf8,
+ 	vuzp2_mf8, vuzp2q_mf8, vuzp_mf8, vuzpq_mf8, vzip1_mf8,
+ 	vzip1q_mf8, vzip2_mf8, vzip2q_mf8, vzip_mf8, vzipq_mf8):
+ 	Delete functions.
+ 	* config/aarch64/aarch64-sve-builtins-shapes.cc (parse_type):
+ 	Handle `D` or `Q` followed by `x1,x2,x3,x4` to mean tuple
+ 	types.
+ 	* config/aarch64/aarch64-acle-builtins.h (TYPES_bh_poly,
+ 	TYPES_bhs_neon, TYPES_neon_rev16, TYPES_neon_rev32,
+ 	TYPES_neon_rev64): New type lists.
+ 	(bh_poly, bhs_neon, neon_rev16, neon_rev32, neon_rev64):
+ 	Likewise.
+ 	* config/aarch64/aarch64-builtins.cc (aarch64_simd_tuple_types):
+ 	Remove `static` qualifier.
+ 	* config/aarch64/aarch64-builtins.h (aarch64_simd_tuple_types):
+ 	New declaration.
+ 	* config/aarch64/aarch64-neon-builtins-base.cc (build_tuple_get,
+ 	build_tuple_set): New functions.
+ 	(class gimple_permute, class gimple_permute_pair): New classes.
+ 	(ext_mask, rev_mask, trn_mask, uzp_mask, zip_mask): New
+ 	functions.
+ 	(vext, vextq, vrev16, vrev16q, vrev32, vrev32q, vtrn1, vtrn1q,
+ 	btrn2, vtrn2q, vtrn, vtrnq, vuzp1, vuzp1q, vuzp2, vuzp2q, vuzp,
+ 	vuzpq, vzip1, vzip1q, vzip2, vzip2q, vzip, vzipq): New function
+ 	bases.
+ 	* config/aarch64/aarch64-neon-builtins-base.def (vext, vextq,
+ 	vrev16, vrev16q, vrev32, vrev32q, vrev64, vrev64q, vtrn,
+ 	vtrn1, vtrn1q, vtrn2, vtrn2q, vtrnq, vuzp, vuzp1, vuzp1q,
+ 	vuzp2, vuzp2q, vuzpq, vzip, vzip1, vzip1q, vzip2, vzip2q,
+ 	vzipq): New function groups.
+ 	* config/aarch64/aarch64-simd-builtins.def (zip1, zip2, uzp1,
+ 	uzp2, trn1, trn2): Delete builtin functions.
+ 	* config/aarch64/arm_neon.h (vext_f16, vext_f32, vext_f64,
+ 	vext_p8, vext_p16, vext_p64, vext_s8, vext_s16, vext_s32,
+ 	vext_s64, vext_u8, vext_u16, vext_u32, vext_u64, vextq_f16,
+ 	vextq_f32, vextq_f64, vextq_p8, vextq_p16, vextq_p64,
+ 	vextq_s8, vextq_s16, vextq_s32, vextq_s64, vextq_u8,
+ 	vextq_u16, vextq_u32, vextq_u64, vrev16_p8, vrev16_s8,
+ 	vrev16_u8, vrev16q_p8, vrev16q_s8, vrev16q_u8, vrev32_p8,
+ 	vrev32_p16, vrev32_s8, vrev32_s16, vrev32_u8, vrev32_u16,
+ 	vrev32q_p8, vrev32q_p16, vrev32q_s8, vrev32q_s16, vrev32q_u8,
+ 	vrev32q_u16, vrev64_f16, vrev64_f32, vrev64_p8, vrev64_p16,
+ 	vrev64_s8, vrev64_s16, vrev64_s32, vrev64_u8, vrev64_u16,
+ 	vrev64_u32, vrev64q_f16, vrev64q_f32, vrev64q_p8, vrev64q_p16,
+ 	vrev64q_s8, vrev64q_s16, vrev64q_s32, vrev64q_u8, vrev64q_u16,
+ 	vrev64q_u32, vtrn1_f16, vtrn1_f32, vtrn1_p8, vtrn1_p16,
+ 	vtrn1_s8, vtrn1_s16, vtrn1_s32, vtrn1_u8, vtrn1_u16,
+ 	vtrn1_u32, vtrn1q_f16, vtrn1q_f32, vtrn1q_f64, vtrn1q_p8,
+ 	vtrn1q_p16, vtrn1q_s8, vtrn1q_s16, vtrn1q_s32, vtrn1q_s64,
+ 	vtrn1q_u8, vtrn1q_u16, vtrn1q_u32, vtrn1q_p64, vtrn1q_u64,
+ 	vtrn2_f16, vtrn2_f32, vtrn2_p8, vtrn2_p16, vtrn2_s8,
+ 	vtrn2_s16, vtrn2_s32, vtrn2_u8, vtrn2_u16, vtrn2_u32,
+ 	vtrn2q_f16, vtrn2q_f32, vtrn2q_f64, vtrn2q_p8, vtrn2q_p16,
+ 	vtrn2q_s8, vtrn2q_s16, vtrn2q_s32, vtrn2q_s64, vtrn2q_u8,
+ 	vtrn2q_u16, vtrn2q_u32, vtrn2q_u64, vtrn2q_p64, vtrn_f16,
+ 	vtrn_f32, vtrn_p8, vtrn_p16, vtrn_s8, vtrn_s16, vtrn_s32,
+ 	vtrn_u8, vtrn_u16, vtrn_u32, vtrnq_f16, vtrnq_f32, vtrnq_p8,
+ 	vtrnq_p16, vtrnq_s8, vtrnq_s16, vtrnq_s32, vtrnq_u8,
+ 	vtrnq_u16, vtrnq_u32, vuzp1_f16, vuzp1_f32, vuzp1_p8,
+ 	vuzp1_p16, vuzp1_s8, vuzp1_s16, vuzp1_s32, vuzp1_u8,
+ 	vuzp1_u16, vuzp1_u32, vuzp1q_f16, vuzp1q_f32, vuzp1q_f64,
+ 	vuzp1q_p8, vuzp1q_p16, vuzp1q_s8, vuzp1q_s16, vuzp1q_s32,
+ 	vuzp1q_s64, vuzp1q_u8, vuzp1q_u16, vuzp1q_u32, vuzp1q_u64,
+ 	vuzp1q_p64, vuzp2_f16, vuzp2_f32, vuzp2_p8, vuzp2_p16,
+ 	vuzp2_s8, vuzp2_s16, vuzp2_s32, vuzp2_u8, vuzp2_u16,
+ 	vuzp2_u32, vuzp2q_f16, vuzp2q_f32, vuzp2q_f64, vuzp2q_p8,
+ 	vuzp2q_p16, vuzp2q_s8, vuzp2q_s16, vuzp2q_s32, vuzp2q_s64,
+ 	vuzp2q_u8, vuzp2q_u16, vuzp2q_u32, vuzp2q_u64, vuzp2q_p64,
+ 	vzip1_f16, vzip1_f32, vzip1_p8, vzip1_p16, vzip1_s8,
+ 	vzip1_s16, vzip1_s32, vzip1_u8, vzip1_u16, vzip1_u32,
+ 	vzip1q_f16, vzip1q_f32, vzip1q_f64, vzip1q_p8, vzip1q_p16,
+ 	vzip1q_s8, vzip1q_s16, vzip1q_s32, vzip1q_s64, vzip1q_u8,
+ 	vzip1q_u16, vzip1q_u32, vzip1q_u64, vzip1q_p64, vzip2_f16,
+ 	vzip2_f32, vzip2_p8, vzip2_p16, vzip2_s8, vzip2_s16,
+ 	vzip2_s32, vzip2_u8, vzip2_u16, vzip2_u32, vzip2q_f16,
+ 	vzip2q_f32, vzip2q_f64, vzip2q_p8, vzip2q_p16, vzip2q_s8,
+ 	vzip2q_s16, vzip2q_s32, vzip2q_s64, vzip2q_u8, vzip2q_u16,
+ 	vzip2q_u32, vzip2q_u64, vzip2q_p64): Delete functions.
+ 
+ 2026-06-30  Karl Meakin  <karl.meakin@arm.com>
+ 
+ 	* config/aarch64/aarch64.md (UNSPEC_BSL): Delete unspec.
+ 	* config/aarch64/aarch64-simd-pragma-builtins.def (vbsl_mf8,
+ 	vbslq_mf8): Delete functions.
+ 	* config/aarch64/aarch64-neon-builtins-base.cc (build_cast): New
+ 	function.
+ 	(class gimple_not_rhs, class gimple_bsl, class gimple_rbit,
+ 	class gimple_eor3, class gimple_bcax, class gimple_rax1, class
+ 	gimple_xar, class gimple_ifn): New classes.
+ 	(vand, vandq, vbic, vbicq, vbsl, vbslq, veor, veorq, vmvn,
+ 	vmvnq, vorn, vornq, vorr, vorrq, vrbit, vrbitq, vbcaxq, veor3q,
+ 	vrax1q, vxarq, vcls, vclsq, vclz, vclzq, vcnt, vcntq): New
+ 	function bases.
+ 	* config/aarch64/aarch64-neon-builtins-shapes.cc (shift): New function.
+ 	* config/aarch64/aarch64-builtins.cc
+ 	(aarch64_types_bsl_p_qualifiers,
+ 	aarch64_types_bsl_s_qualifiers,
+ 	aarch64_types_bsl_u_qualifiers): Delete unused qualifiers.
+ 	* config/aarch64/aarch64-simd.md
+ 	(@aarch64_rbit<mode><vczle><vczbe>): Add `@` modifier so that
+ 	it is callable from `aarch64-neon-builtins-base.cc`.
+ 	* config/aarch64/aarch64-acle-builtins.h (TYPES_b_neon,
+ 	TYPES_b_poly): New type lists.
+ 	* config/aarch64/aarch64-neon-builtins-base.def (vand, vandq,
+ 	vbic, vbicq, vbsl, vbslq, veor, veorq, vmvn, vmvnq, vorn,
+ 	vornq, vorr, vorrq, vrbit, vrbitq, vbcaxq, veor3q, vrax1q,
+ 	vxarq, vcls, vclsq, vclz, vclzq, vcnt, vcntq): New function
+ 	groups.
+ 	* config/aarch64/aarch64-simd-builtins.def (clrsb, clz, ctz,
+ 	popcount, rbit, simd_bsl): Delete builtin functions.
+ 	* config/aarch64/arm_neon.h (vbsl_f16, vbsl_f32, vbsl_f64,
+ 	vbsl_p8, vbsl_p16, vbsl_p64, vbsl_s8, vbsl_s16, vbsl_s32,
+ 	vbsl_s64, vbsl_u8, vbsl_u16, vbsl_u32, vbsl_u64, vbslq_f16,
+ 	vbslq_f32, vbslq_f64, vbslq_p8, vbslq_p16, vbslq_s8,
+ 	vbslq_s16, vbslq_p64, vbslq_s32, vbslq_s64, vbslq_u8,
+ 	vbslq_u16, vbslq_u32, vbslq_u64, vcls_s8, vcls_s16, vcls_s32,
+ 	vclsq_s8, vclsq_s16, vclsq_s32, vcls_u8, vcls_u16, vcls_u32,
+ 	vclsq_u8, vclsq_u16, vclsq_u32, vclz_s8, vclz_s16, vclz_s32,
+ 	vclz_u8, vclz_u16, vclz_u32, vclzq_s8, vclzq_s16, vclzq_s32,
+ 	vclzq_u8, vclzq_u16, vclzq_u32, vcnt_p8, vcnt_s8, vcnt_u8,
+ 	vcntq_p8, vcntq_s8, vcntq_u8, vrbit_p8, vrbit_s8, vrbit_u8,
+ 	vrbitq_p8, vrbitq_s8, vrbitq_u8, veor3q_u8, veor3q_u16,
+ 	veor3q_u32, veor3q_u64, veor3q_s8, veor3q_s16, veor3q_s32,
+ 	veor3q_s64, vrax1q_u64, vxarq_u64, vbcaxq_u8, vbcaxq_u16,
+ 	vbcaxq_u32, vbcaxq_u64, vbcaxq_s8, vbcaxq_s16, vbcaxq_s32,
+ 	vbcaxq_s64): Delete functions.
+ 
+ 2026-06-30  Karl Meakin  <karlwfmeakin@gmail.com>
+ 
+ 	* config/aarch64/aarch64-simd-pragma-builtins.def (
+ 	vcopy_lane_mf8, vcopyq_lane_mf8, vcopy_laneq_mf8,
+ 	vcopyq_laneq_mf8, vdup_lane_mf8, vdupq_lane_mf8,
+ 	vdup_laneq_mf8, vdupq_laneq_mf8, vset_lane_mf8,
+ 	vsetq_lane_mf8): Delete entries.
+ 	* config/aarch64/aarch64-builtins.cc
+ 	(AARCH64_SIMD_VGET_LOW_BUILTINS,
+ 	AARCH64_SIMD_VGET_HIGH_BUILTINS, VGET_LOW_BUILTIN,
+ 	VGET_HIGH_BUILTIN): Delete macros.
+ 	(enum aarch64_builtins): Delete
+ 	`AARCH64_SIMD_BUILTIN_LANE_CHECK`.
+ 	(aarch64_init_simd_builtin_functions): Delete code that
+ 	registers `__builtin_aarch64_im_lane_boundsi`.
+ 	(aarch64_pragma_builtins_checker::check): Delete cases for
+ 	`UNSPEC_DUP_LANE`, `UNSPEC_GET_LANE` and `UNSPEC_VEC_COPY`.
+ 	(aarch64_simd_expand_builtin): Delete case for
+ 	`AARCH64_SIMD_BUILTIN_LANE_CHECK`.
+ 	(aarch64_expand_pragma_builtin): Delete cases for
+ 	`UNSPEC_DUP_LANE` and `UNSPEC_VEC_COPY`.
+ 	(aarch64_general_fold_builtin): Delete cases for
+ 	`AARCH64_SIMD_VGET_LOW_BUILTINS`,
+ 	`AARCH64_SIMD_VGET_HIGH_BUILTINS` and
+ 	`AARCH64_SIMD_BUILTIN_LANE_CHECK`.
+ 	(aarch64_gimple_fold_pragma_builtin): Delete cases for
+ 	`UNSPEC_DUP_LANE` and `UNSPEC_VEC_COPY`.
+ 	(aarch64_general_gimple_fold_builtin): Delete cases for
+ 	`AARCH64_SIMD_BUILTIN_LANE_CHECK`.
+ 	* config/aarch64/aarch64.md (UNSPEC_DUP_LANE): Delete unspec.
+ 	* config/aarch64/aarch64-neon-builtins-shapes.cc (range, lane):
+ 	New functions.
+ 	(struct neon_shape): Add new fields for additional checks, and
+ 	call them in `check()`.
+ 	* config/aarch64/aarch64-acle-builtins.cc
+ 	(gimple_folder::force_val, gimple_folder::assign): New
+ 	functions.
+ 	* config/aarch64/aarch64-acle-builtins.h (TYPES_all_neon,
+ 	TYPES_bhsd_neon, TYPES_neon_copy_lane): New type lists.
+ 	* config/aarch64/iterators.md (VALL_F16_NO_V2Q): Add `V4BF` and `V8BF`.
+ 	* config/aarch64/aarch64-neon-builtins-base.def (vget_lane,
+ 	vgetq_lane, vget_high, vget_low, vset_lane, vsetq_lane,
+ 	vdup_lane, vdupq_lane, vdup_laneq, vdupq_laneq, vcopy_lane,
+ 	vcopy_laneq, vcopyq_lane, vcopyq_laneq): New function groups.
+ 	* config/aarch64/aarch64-neon-builtins-base.cc (build_lane_get,
+ 	build_lane_set, build_vec_dup): New functions.
+ 	(struct gimple_get_lane, struct gimple_get_half, struct
+ 	gimple_set_lane, struct gimple_copy_lane, struct gimple_dup,
+ 	struct gimple_dup_lane): New structs.
+ 	(vget_lane, vgetq_lane, vset_lane, vsetq_lane, vcopy_lane,
+ 	vcopyq_lane, vcopy_laneq, vcopyq_laneq, vdup_lane, vdupq_lane,
+ 	vdupq_lane, vdupq_laneq): New function bases.
+ 	* config/aarch64/arm_neon.h (__aarch64_vdup_lane_p8,
+ 	__aarch64_vdup_lane_p16, __aarch64_vdup_lane_p64,
+ 	__aarch64_vdup_lane_s8, __aarch64_vdup_lane_s16,
+ 	__aarch64_vdup_lane_s32, __aarch64_vdup_lane_s64,
+ 	__aarch64_vdup_lane_u8, __aarch64_vdup_lane_u16,
+ 	__aarch64_vdup_lane_u32, __aarch64_vdup_lane_u64,
+ 	__aarch64_vdup_laneq_p8, __aarch64_vdup_laneq_p16,
+ 	__aarch64_vdup_laneq_p64, __aarch64_vdup_laneq_s8,
+ 	__aarch64_vdup_laneq_s16, __aarch64_vdup_laneq_s32,
+ 	__aarch64_vdup_laneq_s64, __aarch64_vdup_laneq_u8,
+ 	__aarch64_vdup_laneq_u16, __aarch64_vdup_laneq_u32,
+ 	__aarch64_vdup_laneq_u64, __aarch64_vdupq_lane_p8,
+ 	__aarch64_vdupq_lane_p16, __aarch64_vdupq_lane_p64,
+ 	__aarch64_vdupq_lane_s8, __aarch64_vdupq_lane_s16,
+ 	__aarch64_vdupq_lane_s32, __aarch64_vdupq_lane_s64,
+ 	__aarch64_vdupq_lane_u8, __aarch64_vdupq_lane_u16,
+ 	__aarch64_vdupq_lane_u32, __aarch64_vdupq_lane_u64,
+ 	__aarch64_vdupq_laneq_p8, __aarch64_vdupq_laneq_p16,
+ 	__aarch64_vdupq_laneq_p64, __aarch64_vdupq_laneq_s8,
+ 	__aarch64_vdupq_laneq_s16, __aarch64_vdupq_laneq_s32,
+ 	__aarch64_vdupq_laneq_s64, __aarch64_vdupq_laneq_u8,
+ 	__aarch64_vdupq_laneq_u16, __aarch64_vdupq_laneq_u32,
+ 	__aarch64_vdupq_laneq_u64, __AARCH64_LANE_CHECK,
+ 	__aarch64_vget_lane_any, __aarch64_vset_lane_any): Delete
+ 	macros.
+ 	(vget_lane_f16, vget_lane_f32, vget_lane_f64, vget_lane_p8,
+ 	vget_lane_p16, vget_lane_p64, vget_lane_s8, vget_lane_s16,
+ 	vget_lane_s32, vget_lane_s64, vget_lane_u8, vget_lane_u16,
+ 	vget_lane_u32, vget_lane_u64, vgetq_lane_f16, vgetq_lane_f32,
+ 	vgetq_lane_f64, vgetq_lane_p8, vgetq_lane_p16, vgetq_lane_p64,
+ 	vgetq_lane_s8, vgetq_lane_s16, vgetq_lane_s32, vgetq_lane_s64,
+ 	vgetq_lane_u8, vgetq_lane_u16, vgetq_lane_u32, vgetq_lane_u64,
+ 	vset_lane_f16, vset_lane_f32, vset_lane_f64, vset_lane_p8,
+ 	vset_lane_p16, vset_lane_p64, vset_lane_s8, vset_lane_s16,
+ 	vset_lane_s32, vset_lane_s64, vset_lane_u8, vset_lane_u16,
+ 	vset_lane_u32, vset_lane_u64, vsetq_lane_f16, vsetq_lane_f32,
+ 	vsetq_lane_f64, vsetq_lane_p8, vsetq_lane_p16, vsetq_lane_p64,
+ 	vsetq_lane_s8, vsetq_lane_s16, vsetq_lane_s32, vsetq_lane_s64,
+ 	vsetq_lane_u8, vsetq_lane_u16, vsetq_lane_u32, vsetq_lane_u64,
+ 	vcopy_lane_f32, vcopy_lane_f64, vcopy_lane_p8, vcopy_lane_p16,
+ 	vcopy_lane_p64, vcopy_lane_s8, vcopy_lane_s16, vcopy_lane_s32,
+ 	vcopy_lane_s64, vcopy_lane_u8, vcopy_lane_u16, vcopy_lane_u32,
+ 	vcopy_lane_u64, vcopy_laneq_f32, vcopy_laneq_f64,
+ 	vcopy_laneq_p8, vcopy_laneq_p16, vcopy_laneq_p64,
+ 	vcopy_laneq_s8, vcopy_laneq_s16, vcopy_laneq_s32,
+ 	vcopy_laneq_s64, vcopy_laneq_u8, vcopy_laneq_u16,
+ 	vcopy_laneq_u32, vcopy_laneq_u64, vcopyq_lane_f32,
+ 	vcopyq_lane_f64, vcopyq_lane_p8, vcopyq_lane_p16,
+ 	vcopyq_lane_p64, vcopyq_lane_s8, vcopyq_lane_s16,
+ 	vcopyq_lane_s32, vcopyq_lane_s64, vcopyq_lane_u8,
+ 	vcopyq_lane_u16, vcopyq_lane_u32, vcopyq_lane_u64,
+ 	vcopyq_laneq_f32, vcopyq_laneq_f64, vcopyq_laneq_p8,
+ 	vcopyq_laneq_p16, vcopyq_laneq_p64, vcopyq_laneq_s8,
+ 	vcopyq_laneq_s16, vcopyq_laneq_s32, vcopyq_laneq_s64,
+ 	vcopyq_laneq_u8, vcopyq_laneq_u16, vcopyq_laneq_u32,
+ 	vcopyq_laneq_u64, vdup_lane_f16, vdup_lane_f32, vdup_lane_f64,
+ 	vdup_lane_p8, vdup_lane_p16, vdup_lane_p64, vdup_lane_s8,
+ 	vdup_lane_s16, vdup_lane_s32, vdup_lane_s64, vdup_lane_u8,
+ 	vdup_lane_u16, vdup_lane_u32, vdup_lane_u64, vdup_laneq_f16,
+ 	vdup_laneq_f32, vdup_laneq_f64, vdup_laneq_p8, vdup_laneq_p16,
+ 	vdup_laneq_p64, vdup_laneq_s8, vdup_laneq_s16, vdup_laneq_s32,
+ 	vdup_laneq_s64, vdup_laneq_u8, vdup_laneq_u16, vdup_laneq_u32,
+ 	vdup_laneq_u64, vdupq_lane_f16, vdupq_lane_f32,
+ 	vdupq_lane_f64, vdupq_lane_p8, vdupq_lane_p16, vdupq_lane_p64,
+ 	vdupq_lane_s8, vdupq_lane_s16, vdupq_lane_s32, vdupq_lane_s64,
+ 	vdupq_lane_u8, vdupq_lane_u16, vdupq_lane_u32, vdupq_lane_u64,
+ 	vdupq_laneq_f16, vdupq_laneq_f32, vdupq_laneq_f64,
+ 	vdupq_laneq_p8, vdupq_laneq_p16, vdupq_laneq_p64,
+ 	vdupq_laneq_s8, vdupq_laneq_s16, vdupq_laneq_s32,
+ 	vdupq_laneq_s64, vdupq_laneq_u8, vdupq_laneq_u16,
+ 	vdupq_laneq_u32, vdupq_laneq_u64, vmulq_lane_f64,
+ 	vset_lane_bf16, vsetq_lane_bf16, vget_lane_bf16,
+ 	vgetq_lane_bf16, vdup_lane_bf16, vdup_laneq_bf16,
+ 	vdupq_lane_bf16, vdupq_laneq_bf16, vcopy_lane_bf16,
+ 	vcopyq_lane_bf16, vcopy_laneq_bf16, vcopyq_laneq_bf16): Delete
+ 	functions.
+ 
+ 2026-06-30  Karl Meakin  <karlwfmeakin@gmail.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def (combine): Delete
+ 	function declarations.
+ 	* config/aarch64/aarch64-simd-pragma-builtins.def (vcombine_mf8,
+ 	vcreate_mf8, vdup_n_mf8, vdupq_n_mf8, vmov_n_mf8,
+ 	vmovq_n_mf8,): Delete entries.
+ 	(aarch64_expand_pragma_builtin): Delete cases for
+ 	`UNSPEC_COMBINE` and `UNSPEC_VCREATE`.
+ 	(aarch64_fold_combine): Delete function.
+ 	(aarch64_gimple_fold_pragma_builtin): Delete cases for
+ 	`UNSPEC_COMBINE` and `UNSPEC_VCREATE`.
+ 	(aarch64_general_gimple_fold_builtin): Delete cases for
+ 	`vcombine`.
+ 	* config/aarch64/aarch64.md (UNSPEC_COMBINE): Delete unspec.
+ 	* config/aarch64/aarch64-builtins.cc
+ 	(aarch64_expand_pragma_builtin): Delete cases for
+ 	`UNSPEC_COMBINE` and `UNSPEC_VCREATE`.
+ 	(aarch64_fold_combine): Delete function.
+ 	(aarch64_gimple_fold_pragma_builtin): Delete cases for
+ 	`UNSPEC_COMBINE` and `UNSPEC_VCREATE`.
+ 	(aarch64_general_gimple_fold_builtin): Delete cases for
+ 	`combine`.
+ 	* config/aarch64/aarch64-acle-builtins.cc
+ 	(gimple_folder::force_val, gimple_folder::assign): New
+ 	functions.
+ 	* config/aarch64/aarch64-acle-builtins.h (TYPES_all_neon,
+ 	TYPES_bhsd_neon): New type lists.
+ 	* config/aarch64/aarch64-neon-builtins-base.def (vcreate,
+ 	vcombine, vdup_n, vdupq_n, vmov_n, vmovq_n): New function groups.
+ 	* config/aarch64/aarch64-neon-builtins-base.cc (build_vec_dup): New function.
+ 	(struct gimple_create, struct gimple_combine, struct struct
+ 	gimple_dup): New structs.
+ 	(vcreate, vcombine, vdup_n, vdupq_n, vmov_n, vmovq_n): New
+ 	function bases.
+ 	* config/aarch64/arm_neon.h (vcreate_s8, vcreate_s16,
+ 	vcreate_s32, vcreate_s64, vcreate_f16, vcreate_f32,
+ 	vcreate_u8, vcreate_u16, vcreate_u32, vcreate_u64,
+ 	vcreate_f64, vcreate_p8, vcreate_p16, vcreate_p64,
+ 	vcombine_s8, vcombine_s16, vcombine_s32, vcombine_s64,
+ 	vcombine_f16, vcombine_f32, vcombine_u8, vcombine_u16,
+ 	vcombine_u32, vcombine_u64, vcombine_f64, vcombine_p8,
+ 	vcombine_p16, vcombine_p64, vdup_n_f16, vdup_n_f32,
+ 	vdup_n_f64, vdup_n_p8, vdup_n_p16, vdup_n_p64, vdup_n_s8,
+ 	vdup_n_s16, vdup_n_s32, vdup_n_s64, vdup_n_u8, vdup_n_u16,
+ 	vdup_n_u32, vdup_n_u64, vdupq_n_f16, vdupq_n_f32, vdupq_n_f64,
+ 	vdupq_n_p8, vdupq_n_p16, vdupq_n_p64, vdupq_n_s8, vdupq_n_s16,
+ 	vdupq_n_s32, vdupq_n_s64, vdupq_n_u8, vdupq_n_u16,
+ 	vdupq_n_u32, vdupq_n_u64, vmov_n_f16, vmov_n_f32, vmov_n_f64,
+ 	vmov_n_p8, vmov_n_p16, vmov_n_p64, vmov_n_s8, vmov_n_s16,
+ 	vmov_n_s32, vmov_n_s64, vmov_n_u8, vmov_n_u16, vmov_n_u32,
+ 	vmov_n_u64, vmovq_n_f16, vmovq_n_f32, vmovq_n_f64, vmovq_n_p8,
+ 	vmovq_n_p16, vmovq_n_p64, vmovq_n_s8, vmovq_n_s16,
+ 	vmovq_n_s32, vmovq_n_s64, vmovq_n_u8, vmovq_n_u16,
+ 	vmovq_n_u32, vmovq_n_u64, vcreate_bf16, vcombine_bf16,
+ 	vdup_n_bf16, vdupq_n_bf16): Delete functions.
+ 
+ 2026-06-30  Karl Meakin  <karl.meakin@arm.com>
+ 
+ 	* config/aarch64/aarch64-neon-builtins-base.cc: New file.
+ 	* config/aarch64/aarch64-neon-builtins-base.def: New file.
+ 	* config/aarch64/aarch64-neon-builtins-base.h: New file.
+ 	* config/aarch64/aarch64-neon-builtins-functions.h: New file.
+ 	* config/aarch64/aarch64-neon-builtins-shapes.cc: New file.
+ 	* config/aarch64/aarch64-neon-builtins-shapes.h: New file.
+ 	* config/aarch64/aarch64-neon-builtins.def: New file.
+ 	* config.gcc (extra_headers, extra_objs): Add new files and
+ 	reformat for readability.
+ 	* config/aarch64/t-aarch64: Add recipes for new files.
+ 	* config/aarch64/aarch64-protos.h (handle_arm_neon_h): Rename to
+ 	`init_arm_neon_builtins`.
+ 	* config/aarch64/aarch64-builtins.cc (handle_arm_neon_h): Likewise.
+ 	* config/aarch64/aarch64-c.cc (aarch64_pragma_aarch64): Call
+ 	`aarch64_acle::handle_arm_neon_h`.
+ 	* config/aarch64/aarch64-acle-builtins.cc (TYPES_*): Move to
+ 	aarch64-acle-builtins.h
+ 	(NONSTREAMING_SVE, SVE_AND_SME, SSVE): Likewise.
+ 	(neon_function_groups): New variable.
+ 	(arm_neon_h_handled): Likewise.
+ 	(handle_arm_neon_h): New function.
+ 	* config/aarch64/aarch64-sve-builtins-shapes.cc:
+ 	(gimple_folder::fold): Allow folding if `TARGET_SVE` is
+ 	false but `TARGET_SIMD` is true.
+ 	* config/aarch64/aarch64-sve-builtins.def (p8, p16, p64, 128):
+ 	New type suffixes.
+ 	* config/aarch64/aarch64-acle-builtins.h (enum
+ 	handle_pragma_index): New enum member `arm_neon_handle`.
+ 	(enum type_class_index): New enum member `TYPE_poly`.
+ 	(TYPES_*): Moved from `aarch64-acle-builtins.cc`.
+ 	(NONSTREAMING_SVE, SVE_AND_SME, SSVE): Likewise.
+ 	* config/aarch64/arm_neon.h (vadd_s8, vadd_s16, vadd_s32,
+ 	vadd_f32, vadd_f64, vadd_u8, vadd_u16, vadd_u32, vadd_s64,
+ 	vadd_u64, vaddq_s8, vaddq_s16, vaddq_s32, vaddq_s64,
+ 	vaddq_f32, vaddq_f64, vaddq_u8, vaddq_u16, vaddq_u32,
+ 	vaddq_u64, vadd_f16, vaddq_f16, vadd_p8, vadd_p16, vadd_p64,
+ 	vaddq_p8, vaddq_p16, vaddq_p64, vaddq_p128, vaddd_u64,
+ 	vaddd_s64): Delete function definitions.
+ 
+ 2026-06-30  Karl Meakin  <karl.meakin@arm.com>
+ 
+ 	* config.gcc (target_gtfiles): Rename
+ 	`aarch64-sve-builtins.{h,cc}` to
+ 	`aarch64-acle-builtins.{h,cc}`.
+ 	* config/aarch64/t-aarch64: Likewise.
+ 	* config/aarch64/aarch64-sve-builtins.h: Move to...
+ 	* config/aarch64/aarch64-acle-builtins.h: ...here.
+ 	* config/aarch64/aarch64-sve-builtins.cc: Move to...
+ 	* config/aarch64/aarch64-acle-builtins.cc: ...here.
+ 	* config/aarch64/aarch64-c.cc (aarch64_pragma_aarch64): Rename
+ 	namespace `aarch64_sve` to `aarch64_acle`.
+ 	(aarch64_resolve_overloaded_builtin): Likewise.
+ 	(aarch64_check_builtin_call): Likewise.
+ 	* config/aarch64/aarch64-protos.h: Likewise.
+ 	* config/aarch64/aarch64-sve-builtins-base.cc: Likewise.
+ 	* config/aarch64/aarch64-sve-builtins-base.h: Likewise.
+ 	* config/aarch64/aarch64-sve-builtins-functions.h: Likewise.
+ 	* config/aarch64/aarch64-sve-builtins-shapes.cc: Likewise.
+ 	* config/aarch64/aarch64-sve-builtins-shapes.h: Likewise.
+ 	* config/aarch64/aarch64-sve-builtins-sme.cc: Likewise.
+ 	* config/aarch64/aarch64-sve-builtins-sme.h: Likewise.
+ 	* config/aarch64/aarch64-sve-builtins-sve2.cc: Likewise.
+ 	* config/aarch64/aarch64-sve-builtins-sve2.h: Likewise.
+ 	* config/aarch64/aarch64.cc: Likewise.
+ 
+ 2026-06-30  Karl Meakin  <karl.meakin@arm.com>
+ 
+ 	* config.gcc: Reformat lists over several lines.
+ 
+ 2026-06-30  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	* config/riscv/riscv.cc (synthesize_ior_xor): If we must synthesize a
+ 	constant and Zbb is enabled, try both C and ~C to see which is cheaper.
+ 	(synthesize_and): Likewise.
+ 
+ 2026-06-30  Jim Lin  <jim@andestech.com>
+ 
+ 	PR target/125853
+ 	* common/config/riscv/riscv-common.cc (riscv_multi_lib_info_t::parse):
+ 	Remove the path parameter and compare multi_lib_info->path against
+ 	"." instead.
+ 	(riscv_compute_multilib): Update caller.
+ 
+ 2026-06-30  Jim Tsung-Chun Lin  <jim@andestech.com>
+ 
+ 	Backported from master:
+ 	2026-06-15  Jim Tsung-Chun Lin  <jim@andestech.com>
+ 
+ 	* common/config/riscv/riscv-common.cc (riscv_select_multilib):
+ 	Don't set riscv_no_matched_multi_lib here; let the caller own
+ 	the flag.
+ 	(riscv_compute_multilib): Drop the early return that accepted
+ 	the generic-matched multilib_dir; always run the smart matcher
+ 	and set riscv_no_matched_multi_lib when it finds no candidate.
+ 
+ 2026-06-30  Mark Zhuang  <zhuangqiubin@linux.spacemit.com>
+ 
+ 	* config/riscv/riscv-ext-spacemit.def (xsmtvdotii): New extension.
+ 	* config/riscv/riscv-ext.opt: Regenerate.
+ 	* config/riscv/riscv-cores.def (RISCV_TUNE): Add spacemit-a100.
+ 	(RISCV_CORE): Add spacemit-a100.
+ 	* doc/riscv-ext.texi: Regenerate.
+ 	* doc/riscv-mcpu.texi: Regenerate.
+ 	* doc/riscv-mtune.texi: Regenerate.
+ 
+ 2026-06-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-ssa-alias.h (pt_solution::vars_contains_auto): New.
+ 	(ptr_deref_may_alias_auto_p): Declare.
+ 	(pt_solution_includes_auto): Likewise.
+ 	* tree-ssa-structalias.cc (set_uids_in_ptset): Record auto
+ 	variables.
+ 	(pt_solution_includes_auto): New function.
+ 	(ipa_escaped_pt): Adjust.
+ 	* tree-ssa-alias.cc (ptr_deref_may_alias_auto_p): New function.
+ 
+ 2026-06-30  Christopher Bazley  <chris.bazley@arm.com>
+ 	    Richard Sandiford  <rdsandiford@googlemail.com>
+ 
+ 	* tree.cc (build_vector_from_ctor): Rename variables and
+ 	refactor assignments.
+ 
+ 2026-06-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-ssa-loop-ivopts.cc (rewrite_use_address): Always
+ 	avoid TARGET_MEM_REF with a base of zero.
+ 	* tree-ssa-sccvn.cc (vn_reference_maybe_forwprop_address): Do
+ 	not forward TARGET_MEM_REF addresses.
+ 
+ 2026-06-30  Alfie Richards  <alfie.richards@arm.com>
+ 
+ 	PR target/125838
+ 	* config/aarch64/aarch64.cc (aarch64_fntype_abi): Fall back to
+ 	AAPCS for preserve_none variadic calls.
+ 
+ 2026-06-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/126032
+ 	* gimple-ssa-warn-access.cc (maybe_warn_for_bound): Fixup
+ 	diagnostic string.
+ 
+ 2026-06-30  Chung-Lin Tang  <cltang@baylibre.com>
+ 
+ 	* gimplify.cc (enum gimplify_omp_var_data):
+ 	Add GOVD_USES_ALLOCATORS_ALLOCATOR.
+ 	(gimplify_bind_expr): Diagnose missing uses_allocators clause.
+ 	(omp_get_attachment): Add GOMP_MAP_USES_ALLOCATORS cases.
+ 	(omp_group_base): Likewise.
+ 	(gimplify_scan_omp_clauses): Handle uses_allocators.
+ 	(gimplify_adjust_omp_clauses_1): Handle GOVD_USES_ALLOCATORS_ALLOCATOR.
+ 	* omp-low.cc (scan_sharing_clauses): Check if ALLOCATE clause in target
+ 	region has containing USES_ALLOCATORS clause.
+ 	Add OMP_CLAUSE_USES_ALLOCATORS cases.
+ 	(lower_omp_target): Add OMP_CLAUSE_USES_ALLOCATORS cases.
+ 	* tree-pretty-print.cc (dump_omp_clause): Handle GOMP_MAP_USES_ALLOCATORS.
+ 
+ 2026-06-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/126008
+ 	* tree-ssa-loop-ivopts.cc (alloc_iv): Revert last change.
+ 	* tree-ssa-address.cc (add_to_parts): Use unsigned arithmetic
+ 	to accumulate to base.
+ 
+ 2026-06-30  Christopher Bazley  <chris.bazley@arm.com>
+ 	    Richard Sandiford  <rdsandiford@googlemail.com>
+ 
+ 	* poly-int.h (can_div_away_from_zero_p):
+ 	Exit early if |a| <= |b| instead of calling
+ 	can_div_trunc_p and returning false if it
+ 	returned false.
+ 
+ 2026-06-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/126034
+ 	* tree-vect-stmts.cc (vectorizable_load): Elide dead else if.
+ 
+ 2026-06-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/126030
+ 	* config/i386/sse.md (avx512vl_<code><mode>v4hi2_mask_store_1):
+ 	Use a single output pattern instead of conditionally returning
+ 	the same string based on a condition.
+ 
+ 2026-06-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/125837
+ 	* doc/invoke.texi (Wc++29-extensions): Document.
+ 
+ 2026-06-30  Avinash Jayakar  <avinashd@linux.ibm.com>
+ 	    Surya Kumari Jangala  <jskumari@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-builtin.cc (rs6000_expand_builtin): Add logic to
+ 	handle __builtin_ppc_atomic_cas_local.
+ 	* config/rs6000/rs6000-builtins.def: New builtins for
+ 	__builtin_ppc_atomic_cas_local with types.
+ 	* config/rs6000/rs6000-c.cc (altivec_build_resolved_builtin): Handle
+ 	builtins with up to 6 arguments.
+ 	* config/rs6000/rs6000-overload.def: Overload builtin for signed/unsiged
+ 	char, short, int, long, __int128.
+ 	* config/rs6000/rs6000-protos.h (rs6000_expand_atomic_compare_and_swap): Add
+ 	additional parameter 'local' to the prototype.
+ 	* config/rs6000/rs6000.cc (emit_load_locked): Add new parameter. Pass new
+ 	parameter to generate load-locked instruction.
+ 	(rs6000_expand_atomic_compare_and_swap): Add new parameter. Call
+ 	emit_load_locked() with additional parameter value of EH bit.
+ 	(rs6000_expand_atomic_exchange): Pass EH value 0 to emit_load_locked().
+ 	(rs6000_expand_atomic_op): Likewise.
+ 	* config/rs6000/sync.md (load_locked<mode>): Add new operand in RTL template.
+ 	Specify EH bit in the larx instruction.
+ 	(load_locked<QHI:mode>_si): Likewise.
+ 	(load_lockedpti): Likewise.
+ 	(load_lockedti): Add new operand in RTL template. Pass EH bit to
+ 	gen_load_lockedpti().
+ 	(atomic_compare_and_swap<mode>): Pass new parameter 'false' to
+ 	rs6000_expand_atomic_compare_and_swap.
+ 	(atomic_compare_and_swap_local<mode>): New define_expand.
+ 	* doc/extend.texi: Add documentation for new builtin.
+ 
+ 2026-06-30  Avinash Jayakar  <avinashd@linux.ibm.com>
+ 
+ 	Revert:
+ 	2026-06-30  Avinash Jayakar  <avinashd@linux.ibm.com>
+ 		    Surya Kumari Jangala  <jskumari@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-builtin.cc (rs6000_expand_builtin): Add logic to
+ 	handle __builtin_ppc_atomic_cas_local.
+ 	* config/rs6000/rs6000-builtins.def: New builtins for
+ 	__builtin_ppc_atomic_cas_local with types.
+ 	* config/rs6000/rs6000-c.cc (altivec_build_resolved_builtin): Handle
+ 	builtins with up to 6 arguments.
+ 	* config/rs6000/rs6000-overload.def: Overload builtin for signed/unsiged
+ 	char, short, int, long, __int128.
+ 	* config/rs6000/rs6000-protos.h (rs6000_expand_atomic_compare_and_swap): Add
+ 	additional parameter 'local' to the prototype.
+ 	* config/rs6000/rs6000.cc (emit_load_locked): Add new parameter. Pass new
+ 	parameter to generate load-locked instruction.
+ 	(rs6000_expand_atomic_compare_and_swap): Add new parameter. Call
+ 	emit_load_locked() with additional parameter value of EH bit.
+ 	(rs6000_expand_atomic_exchange): Pass EH value 0 to emit_load_locked().
+ 	(rs6000_expand_atomic_op): Likewise.
+ 	* config/rs6000/sync.md (load_locked<mode>): Add new operand in RTL template.
+ 	Specify EH bit in the larx instruction.
+ 	(load_locked<QHI:mode>_si): Likewise.
+ 	(load_lockedpti): Likewise.
+ 	(load_lockedti): Add new operand in RTL template. Pass EH bit to
+ 	gen_load_lockedpti().
+ 	(atomic_compare_and_swap<mode>): Pass new parameter 'false' to
+ 	rs6000_expand_atomic_compare_and_swap.
+ 	(atomic_compare_and_swap_local<mode>): New define_expand.
+ 	* doc/extend.texi: Add documentation for new builtin.
+ 
+ 2026-06-30  Avinash Jayakar  <avinashd@linux.ibm.com>
+ 	    Surya Kumari Jangala  <jskumari@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-builtin.cc (rs6000_expand_builtin): Add logic to
+ 	handle __builtin_ppc_atomic_cas_local.
+ 	* config/rs6000/rs6000-builtins.def: New builtins for
+ 	__builtin_ppc_atomic_cas_local with types.
+ 	* config/rs6000/rs6000-c.cc (altivec_build_resolved_builtin): Handle
+ 	builtins with up to 6 arguments.
+ 	* config/rs6000/rs6000-overload.def: Overload builtin for signed/unsiged
+ 	char, short, int, long, __int128.
+ 	* config/rs6000/rs6000-protos.h (rs6000_expand_atomic_compare_and_swap): Add
+ 	additional parameter 'local' to the prototype.
+ 	* config/rs6000/rs6000.cc (emit_load_locked): Add new parameter. Pass new
+ 	parameter to generate load-locked instruction.
+ 	(rs6000_expand_atomic_compare_and_swap): Add new parameter. Call
+ 	emit_load_locked() with additional parameter value of EH bit.
+ 	(rs6000_expand_atomic_exchange): Pass EH value 0 to emit_load_locked().
+ 	(rs6000_expand_atomic_op): Likewise.
+ 	* config/rs6000/sync.md (load_locked<mode>): Add new operand in RTL template.
+ 	Specify EH bit in the larx instruction.
+ 	(load_locked<QHI:mode>_si): Likewise.
+ 	(load_lockedpti): Likewise.
+ 	(load_lockedti): Add new operand in RTL template. Pass EH bit to
+ 	gen_load_lockedpti().
+ 	(atomic_compare_and_swap<mode>): Pass new parameter 'false' to
+ 	rs6000_expand_atomic_compare_and_swap.
+ 	(atomic_compare_and_swap_local<mode>): New define_expand.
+ 	* doc/extend.texi: Add documentation for new builtin.
+ 
+ 2026-06-30  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* config/loongarch/loongarch.md
+ 	(@stack_protect_combined_set_normal_<mode>): Replace `st.d'
+ 	with `st.<d>', reject stptr.d on LA32 with enabled attribute.
+ 	(@stack_protect_combined_test_internal_<mode>): Replace `ld.d'
+ 	with `ld.<d>', reject ldptr.d on LA32 with enabled attribute.
+ 	(@stack_protect_combined_set_extreme_<mode>): Rename to ...
+ 	(stack_protect_combined_set_extreme): ... here.  Force DImode.
+ 	Add TARGET_ABI_LP64 as the condition.
+ 	(stack_protect_combined_set): Adapt for the change of
+ 	stack_protect_combined_set_extreme.
+ 
+ 2026-06-30  Robin Dapp  <robin.dapp@oss.qualcomm.com>
+ 
+ 	PR target/125994
+ 	* config/riscv/riscv.cc (riscv_support_vector_misalignment):
+ 	Handle scalar modes.
+ 
+ 2026-06-29  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	* config/riscv/riscv.cc (synthesize_and): Use srliw to handle
+ 	clearing both upper and lower bits in some cases.
+ 	* config/riscv/bitmanip.md (ZBA splitter using sext.w): Do not
+ 	use in cases where we can use srliw to clear those upper bits.
+ 
+ 2026-06-29  Mark Zhuang  <zhuangqiubin@linux.spacemit.com>
+ 
+ 	* config/riscv/riscv-cores.def (RISCV_TUNE): Add spacemit-x100.
+ 	(RISCV_CORE): Add spacemit-x100.
+ 	* config/riscv/riscv.cc (spacemit_x100_tune_info): New.
+ 	* doc/riscv-mcpu.texi: Regenerate.
+ 	* doc/riscv-mtune.texi: Regenerate.
+ 
+ 2026-06-29  Matthew Fortune  <matthew.fortune@imgtec.com>
+ 
+ 	* config/mips/mips.h (ASM_SPEC): Add placeholders for -mmxu and
+ 	-mno-mxu.
+ 	* config/mips/mips.opt: New undocumented target option.
+ 
+ 2026-06-29  Matthew Fortune  <matthew.fortune@imgtec.com>
+ 
+ 	* config/mips/mips.cc (mips_frame_barrier): Upgrade to a full
+ 	blockage.
+ 
+ 2026-06-29  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	PR target/94871
+ 	* simplify-rtx.cc (simplify_unary_operation_1) <case NOT>:
+ 	Update (not (eq X Y)) -> (ne X Y) to support vector comparions
+ 	using VECTOR_STORE_FLAG_VALUE, and check SCALAR_INT_MODE_P
+ 	when checking STORE_FLAG_VALUE.  Add equivalent optimization
+ 	(not (neg (eq X Y))) -> (neg (ne X Y)) for targets with
+ 	STORE_FLAG_VALUE == 1 or VECTOR_STORE_FLAG_VALUE is const1_rtx.
+ 	* config/i386/sse.md (*<sse>_imaskcmp<mode>3_comm): Clone
+ 	of *<sse>_maskcmp<mode>3_comm pattern with integer vector
+ 	result.
+ 
+ 2026-06-29  Abhishek Kaushik  <abhishek.kaushik@arm.com>
+ 
+ 	* config/aarch64/aarch64-sve2.md: Add unpredicated high-part
+ 	multiplication section.
+ 	(@aarch64_sve2_<optab><mode>): New insn.
+ 	* config/aarch64/aarch64-sve.md (@aarch64_pred_<optab><mode>):
+ 	Change to define_insn_and_split and split SVE2 highpart
+ 	multiplication into unpredicated MUL_HIGHPART.
+ 
+ 2026-06-29  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/125469
+ 	* config/i386/i386.md (*add<mode>_1<nf_name>): Revert 2026-05-28
+ 	changes.
+ 	(define_split from *add<mode>_1_nf to *lea<mode>): Set INSN_CODE
+ 	to -1 if <LEAMODE> and <MODE> are the same.
+ 
+ 2026-06-29  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR target/105116
+ 	* lra-constraints.cc (simplify_operand_subreg): Reload a
+ 	non-representable narrowing subreg of a hard register through
+ 	memory instead of resolving it lossily.
+ 
+ 2026-06-29  Kael Andrew Alonzo Franco  <kaelfandrew@gmail.com>
+ 
+ 	PR tree-optimization/125737
+ 	* match.pd: Optimize X % Y < Y -> Y >= 0 and X % Y >= Y -> Y < 0
+ 
+ 2026-06-29  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/125968
+ 	* config/i386/i386-expand.cc (ix86_expand_movmem): Don't call
+ 	ix86_expand_n_overlapping_move_movmem when max size == 1.
+ 
+ 2026-06-29  Naveen  <naveen.siddegowda@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/112390
+ 	* match.pd: Add simplifications for combined sign-bit and
+ 	magnitude checks:
+ 	((signed)A >= 0) &/&& ((A & INT_MAX) != 0) -> (signed)A > 0
+ 	((signed)A <  0) |/|| ((A & INT_MAX) == 0) -> (signed)A <= 0
+ 
+ 2026-06-29  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/125907
+ 	* config/i386/i386.md (*cmov_bt<SWI248:mode>): New
+ 	define_insn_and_split handling a const_int false arm, forced into
+ 	a register by the splitter.  Leave the existing define_split for
+ 	the nonimmediate case unchanged.
+ 
+ 2026-06-29  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	PR target/125474
+ 	* config/loongarch/simd.md (usdot_prod<wvec_half><mode>): New
+ 	define_expand.
+ 	(usdot_prod<wvec_quarter><mode>): New define_expand.
+ 
+ 2026-06-29  Pan Li  <pan2.li@intel.com>
+ 
+ 	* match-sat-alu.pd: Add pattern for unsigned scalar
+ 	SAT_MUL form 14.
+ 
+ 2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* acinclude.m4: Replace AC_FOREACH with m4_foreach_w.  Replace
+ 	AC_TRY_LINK with AC_LINK_IFELSE.
+ 	* configure: Regenerate.
+ 	* configure.ac: Replace AC_HELP_STRING with AS_HELP_STRING.  Replace
+ 	AC_PROG_LIBTOOL with LT_INIT.
+ 
+ 2026-06-28  Kevin Stefanov  <kevinstefanov15@gmail.com>
+ 
+ 	PR middle-end/125274
+ 	* ctfc.h (ctf_dtdef): Likewise.
+ 	* dwarf2out.cc (die_struct): Likewise.
+ 	* dwarf2out.h (dw_cfa_location): Likewise.
+ 	* gengtype-lex.l (IWORD): Remove BOOL_BITFIELD.
+ 	* gimple-walk.h (walk_stmt_info): Replace BOOL_BITFIELD with bool.
+ 	* opts.h (cl_option): Likewise.
+ 	* config/i386/i386.h (machine_frame_state): Likewise.
+ 	(machine_function): Likewise.
+ 	* sched-int.h (deps_desc): Likewise.
+ 	* sel-sched-ir.h (_expr): Likewise.
+ 	(_fence): Likewise.
+ 	(transformed_insns): Likewise.
+ 	(_sel_insn_data): Likewise.
+ 	* sel-sched.cc (cmpd_local_params): Likewise.
+ 	* system.h: Remove #define for BOOL_BITFIELD.
+ 
+ 2026-06-28  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/115571
+ 	* match.pd (`(float)(a CMP b)`): New pattern.
+ 
+ 2026-06-28  Kael Andrew Alonzo Franco  <kaelfandrew@gmail.com>
+ 
+ 	PR tree-optimization/125749
+ 	PR tree-optimization/125749
+ 	* match.pd: Use tree_expr_nonnegative_p for MAX (A, B) (==,!=) 0 ->
+ 	(A|B) (==,!=) 0.
+ 
  2026-06-27  Jakub Jelinek  <jakub@redhat.com>
  
  	PR target/125992
diff -Nrcpad gcc-17-20260628/gcc/DATESTAMP gcc-17-20260705/gcc/DATESTAMP
*** gcc-17-20260628/gcc/DATESTAMP	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/gcc/DATESTAMP	Sun Jul  5 22:32:06 2026
***************
*** 1 ****
! 20260628
--- 1 ----
! 20260705
diff -Nrcpad gcc-17-20260628/gcc/acinclude.m4 gcc-17-20260705/gcc/acinclude.m4
*** gcc-17-20260628/gcc/acinclude.m4	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/gcc/acinclude.m4	Sun Jul  5 22:32:06 2026
*************** dnl Arrange to define HAVE_DECL_<FUNCTIO
*** 41,47 ****
  dnl gcc_AC_CHECK_DECLS(SYMBOLS,
  dnl 	[ACTION-IF-NEEDED [, ACTION-IF-NOT-NEEDED [, INCLUDES]]])
  AC_DEFUN([gcc_AC_CHECK_DECLS],
! [AC_FOREACH([gcc_AC_Func], [$1],
    [AH_TEMPLATE(AS_TR_CPP(HAVE_DECL_[]gcc_AC_Func),
    [Define to 1 if we found a declaration for ']gcc_AC_Func[', otherwise
     define to 0.])])dnl
--- 41,47 ----
  dnl gcc_AC_CHECK_DECLS(SYMBOLS,
  dnl 	[ACTION-IF-NEEDED [, ACTION-IF-NOT-NEEDED [, INCLUDES]]])
  AC_DEFUN([gcc_AC_CHECK_DECLS],
! [m4_foreach_w([gcc_AC_Func], [$1],
    [AH_TEMPLATE(AS_TR_CPP(HAVE_DECL_[]gcc_AC_Func),
    [Define to 1 if we found a declaration for ']gcc_AC_Func[', otherwise
     define to 0.])])dnl
*************** int (*fp) (void) __attribute__ ((section
*** 308,315 ****
  	    gcc_cv_initfini_array=yes
  	  fi
  	elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x -a x"$gcc_cv_objdump" != x ; then
! 	  case $target:$solaris_as in
! 	    i?86-*-solaris2*:yes | x86_64-*-solaris2*:yes)
  	      sh_flags='"a"'
  	      sh_type='@progbits'
  	      ;;
--- 308,315 ----
  	    gcc_cv_initfini_array=yes
  	  fi
  	elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x -a x"$gcc_cv_objdump" != x ; then
! 	  case $target:$as_flavor in
! 	    i?86-*-solaris2*:solaris | x86_64-*-solaris2*:solaris)
  	      sh_flags='"a"'
  	      sh_type='@progbits'
  	      ;;
*************** int (*fp) (void) __attribute__ ((section
*** 323,329 ****
  	      sh_type='%progbits'
  	      ;;
  	  esac
! 	  if test x$solaris_ld = xno; then
  	    cat > conftest.s <<EOF
  .section .dtors,$sh_flags,$sh_type
  .balign 4
--- 323,329 ----
  	      sh_type='%progbits'
  	      ;;
  	  esac
! 	  if test x$ld_flavor = xgnu; then
  	    cat > conftest.s <<EOF
  .section .dtors,$sh_flags,$sh_type
  .balign 4
*************** AC_DEFUN([gcc_CHECK_ATTRIBUTE_ALIAS], [
*** 444,453 ****
    AC_CACHE_CHECK([whether the host/build supports symbol aliases],
                   gcc_cv_have_attribute_alias, [
    if test "x${build}" = "x${host}"; then
!     AC_TRY_LINK([
  extern "C" void foo(void) { }
! extern void bar(void) __attribute__((alias("foo")));],
!     [bar();], gcc_cv_have_attribute_alias=yes, gcc_cv_have_attribute_alias=no)
    else
      gcc_cv_have_attribute_alias=no
    fi])
--- 444,454 ----
    AC_CACHE_CHECK([whether the host/build supports symbol aliases],
                   gcc_cv_have_attribute_alias, [
    if test "x${build}" = "x${host}"; then
!     AC_LINK_IFELSE([AC_LANG_PROGRAM([[
  extern "C" void foo(void) { }
! extern void bar(void) __attribute__((alias("foo")));]],
!     [[bar();]])],
!     [gcc_cv_have_attribute_alias=yes], [gcc_cv_have_attribute_alias=no])
    else
      gcc_cv_have_attribute_alias=no
    fi])
*************** dnl # Used by gcc_GAS_CHECK_FEATURE
*** 461,467 ****
  dnl #
  AC_DEFUN([gcc_GAS_FLAGS],
  [AC_CACHE_CHECK([assembler flags], gcc_cv_as_flags,
! [ case "$target:$gas" in
    *-*-darwin*:*)
      dnl Darwin with the native assembler uses -arch i386/x86_64/ppc/ppc64.
      dnl
--- 462,468 ----
  dnl #
  AC_DEFUN([gcc_GAS_FLAGS],
  [AC_CACHE_CHECK([assembler flags], gcc_cv_as_flags,
! [ case "$target:$as_flavor" in
    *-*-darwin*:*)
      dnl Darwin with the native assembler uses -arch i386/x86_64/ppc/ppc64.
      dnl
*************** AC_DEFUN([gcc_GAS_FLAGS],
*** 489,495 ****
  	;;
      esac
      ;;
!   *-*-solaris2*:no)
      dnl Solaris with the native assembler uses -m32/-m64 consistently.
      case "$target" in
        i?86-*-* | sparc-*-*)
--- 490,496 ----
  	;;
      esac
      ;;
!   *-*-solaris2*:solaris)
      dnl Solaris with the native assembler uses -m32/-m64 consistently.
      case "$target" in
        i?86-*-* | sparc-*-*)
diff -Nrcpad gcc-17-20260628/gcc/ada/ChangeLog gcc-17-20260705/gcc/ada/ChangeLog
*** gcc-17-20260628/gcc/ada/ChangeLog	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/gcc/ada/ChangeLog	Sun Jul  5 22:32:06 2026
***************
*** 1,3 ****
--- 1,230 ----
+ 2026-07-01  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* link.c: Check HAVE_LD_AT_FILE instead of HAVE_GNU_LD.
+ 	Update comment.
+ 	[VMS]: Remove.
+ 	[__svr4__ && __i386__]: Remove.
+ 
+ 2026-06-29  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/trans.cc (gnat_to_gnu): Return a NULL_EXPR for the
+ 	use of an intrinsic operator and exclude more cases explicitly.
+ 
+ 2026-06-29  Viljar Indus  <indus@adacore.com>
+ 
+ 	* gcc-interface/decl.cc (warn_on_field_placement): Improve error message.
+ 
+ 2026-06-29  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* einfo.ads (Initialization_Statements): Adjust description.
+ 	* exp_ch3.adb (Default_Initialize_Object): Use the special mechanism
+ 	of Initialization_Statements, if need be, instead of inserting the
+ 	initialization statements directly into the freeze actions.
+ 
+ 2026-06-29  Javier Miranda  <miranda@adacore.com>
+ 
+ 	* sem_ch6.adb (Constructor_Components_OK): New local subprogram of
+ 	Analyze_Direct_Attribute_Definition. Checks performed when processing
+ 	the body of a constructor.
+ 	(Analyze_Direct_Attribute_Definition) <Name_Constructor>: Report an
+ 	error on the body of a constructor for a derived type whose parent
+ 	type needs construction and has no default parameterless constructor
+ 	and has no Super aspect to initialize its parent components.
+ 	* sem_ch7.adb (Inspect_Components_Needing_Construction): New local
+ 	subprogram of Analyze_Package_Specification.
+ 	(Inspect_Abstract_Constructors_Completion): Rename formal parameter.
+ 	* exp_ch6.adb (Prepend_Constructor_Procedure_Prologue): Fix the order
+ 	of initialization of record type components: parent components must
+ 	be initialized first, then the own components following their
+ 	declaration order.
+ 	* sem_util.ads (First_Component_Declaration): New subprogram.
+ 	* sem_util.adb (First_Component_Declaration): New utility subprogram
+ 	that returns the first non-pragma non-inherited component declaration
+ 	of a record type.
+ 
+ 2026-06-29  Joffrey Huguet  <huguet@adacore.com>
+ 
+ 	* libgnat/a-comlin.ads (Argument_Count): Add global contract.
+ 	(Argument): Likewise.
+ 	(Command_Name): Likewise.
+ 	(Set_Exit_Status): Likewise.
+ 	* libgnat/a-comlin.adb: Refine abstract state.
+ 
+ 2026-06-29  Joffrey Huguet  <huguet@adacore.com>
+ 
+ 	* libgnat/a-textio.ads (Get): Add Data_Error in Exceptional_Cases contract.
+ 	(Look_Ahead): Likewise.
+ 	(Get_Immediate): Likewise.
+ 	(Get_Line): Likewise.
+ 
+ 2026-06-29  Olivier Hainque  <hainque@adacore.com>
+ 
+ 	* tracebak.c (trace_callback): Return early for pc == 0;
+ 
+ 2026-06-29  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_util.ads (Find_Optional_Prim_Op): Add Controlled_Op parameter
+ 	defaulting to False.
+ 	* exp_util.adb (Find_Optional_Prim_Op): Likewise.  When it is set to
+ 	True, test whether the primitive has the signature of the controlled
+ 	primitives.
+ 	* sem_ch13.adb (Resolve_Finalization_Procedure): Reset Is_Overloaded
+ 	once an interpretation has been selected among the set.
+ 
+ 2026-06-29  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* doc/gnat_rm/gnat_language_extensions.rst: Add documentation for
+ 	"attribute subprograms" extension feature.
+ 	* errout.adb (Set_Msg_Node): Remove special-case treatment for
+ 	attribute names (no longer call Replace_With_Attribute_Definition).
+ 	* erroutc.ads (Replace_With_Attribute_Definition): Removed.
+ 	* erroutc.adb (Replace_With_Attribute_Definition): Removed.
+ 	(Set_Msg_Insertion_Name): Remove special-case treatment for attribute
+ 	names.
+ 	* exp_attr.adb (Expand_N_Attribute_Reference): Add indexing, literal,
+ 	and Default_Iterator attributes as case choices in the alternative
+ 	that raises Program_Error.
+ 	* par-ch4.adb (Is_Parameterless_Attribute): Add various aspects as
+ 	entries in this table that are set to True (for proper handling of
+ 	actual parameters on subprogram calls made using the attribute name).
+ 	* par-ch6.adb (P_Subprogram): Add calls to procedure
+ 	Rewrite_Entity_If_Direct_Attribute_Def for subprogram renamings
+ 	and body stubs.
+ 	* sem_attr.adb (Analyze_Attribute): Add indexing, Default_Iterator,
+ 	and literal attributes to case choices. Rewrite_As_Attribute_Subp_Name
+ 	is called for those, as well as for stream and Put_Image attribute
+ 	cases (the latter group being guarded by a call to the following
+ 	new function).
+ 	(Is_Reference_To_Attribute_Subp_Name): New function to determine
+ 	whether to rewrite an N_Attribute_Reference as an N_Identifier
+ 	denoting an attribute subprogram.
+ 	(Rewrite_As_Attribute_Subp_Name): New procedure to rewrite an attribute
+ 	reference as an N_Identifier whose Chars field is the combined type
+ 	and aspect name, and call Analyze on that (providing support for use
+ 	in expanded names). Also validates that the prefix is a type and that
+ 	the type has the aspect corresponding to the attribute.
+ 	(Eval_Attribute): Add choices for the various subprogram-valued
+ 	aspects/attributes to the alternative that raises Program_Error.
+ 	* sem_ch3.adb (Set_Derived_Name): Construct a direct attribute name for
+ 	an inherited subprogram whose parent subprogram has such a name, and
+ 	augment spec comment.
+ 	* sem_ch6.adb (Create_And_Append_Aspect): New procedure local to
+ 	procedure Analyze_Direct_Attribute_Definition, for creating implicit
+ 	aspects on a type for aspects associated with attribute subprograms.
+ 	(Analyze_Direct_Attribute_Definition): Add handling for the various
+ 	subprogram-valued aspects, including special handling for "'Class"
+ 	aspects. Add an error check to prevent library attribute subprograms,
+ 	plus validate that "'Class" can only be written for stream cases and
+ 	when the prefix type is tagged.
+ 	* sem_ch8.adb (Find_Direct_Name): Add missing init on Msg to avoid
+ 	invalid data usages.
+ 	* sem_ch10.adb (Analyze_Subprogram_Body_Stub): Add an error check to
+ 	disallow attribute subprograms with bodies given by body stubs.
+ 	* sem_ch13.ads (Analyze_One_Aspect): Procedure declaration moved here
+ 	from package body.
+ 	* sem_ch13.adb
+ 	(Analyze_One_Aspect): Procedure declaration moved to package spec.
+ 	Save and restore Expander_Active (in Aspect_Initialize handling).
+ 	(Analyze_Put_Image_TSS_Definition): In the abstract-subprogram case,
+ 	flag the error on the subprogram rather than the attribute name.
+ 	When the attribute name is not Comes_From_Source, flag a bad subprogram
+ 	itself rather than flagging the attribute name.
+ 	(Analyze_Stream_TSS_Definition): Ditto.
+ 	(Analyze_Attribute_Definition_Clause, case Default_Iterator): Move
+ 	error check about untagged to the end of the case alternative, and
+ 	remove error about nonfunctions (checking in Check_Iterator_Functions
+ 	is sufficient).
+ 	(Check_Aspect_At_Freeze_Point, case Default_Iterator): Add test of
+ 	Is_Direct_Attribute_Subp_Name as additional condition for calling
+ 	Check_Iterator_Functions.
+ 	(Report_Ineligible_Indexing_Function): Don't issue warnings in the case
+ 	of attribute subprograms (always give an error). Flag the error on the
+ 	subprogram rather than the type in the case of attribute subprograms.
+ 	(Check_Function_For_Indexing_Aspect): Force error messages in the case
+ 	of attribute subprograms, despite Has_Eligible_Func being True.
+ 	(Check_Iterator_Functions): Minor improvement to message requiring Expr
+ 	to denote a function.
+ 	(Validate_Literal_Aspect): Add test of whether the aspect denotes
+ 	an attribute subprogram, to avoid returning early due to the
+ 	"not Comes_From_Source" condition. Code cleanup to traverse formals
+ 	rather than Parameter_Specifications. Flag the subprogram rather than
+ 	the aspect when found function is an attribute subprogram.
+ 	* sem_util.ads (Is_Direct_Attribute_Subp_Name): New function.
+ 	* sem_util.adb (Direct_Attribute_Definition_Name): Remove 'D' prefix
+ 	and "_Attr" suffix, plus adjust suffix to start with "'" rather than
+ 	"_". Handle class-wide stream attribute names, and remove error about
+ 	unsupported stream attributes. Add error check to reject child units.
+ 	(Corresponding_Op_Of_Derived_Type): Account for differences between
+ 	names of parent and descendant subprograms when they have direct
+ 	attribute names.
+ 	(Direct_Attribute_Names_Correspond): New function.
+ 	(Inherit_Nonoverridable_Aspect): Construct a new name denoted by an
+ 	inherited aspect when the parent aspect has a direct attribute name.
+ 	(Is_Direct_Attribute_Subp_Name): New function.
+ 	(Primitive_Names_Match): Add testing for direct attribute subprograms
+ 	to condition of return statement.
+ 	* snames.ads-tmpl: Move indexing and Default_Iterator aspect names
+ 	earlier in name ordering and move literal aspect names later (these
+ 	are all now considered to be recognized as attribute names).
+ 	(type Attribute_Id): Move indexing attribute names earlier in attribute
+ 	ordering (those no longer considered to be "internal" attribute names).
+ 	(subtype Internal_Attribute_Id): Adjust subtype bounds.
+ 	* snames.adb-tmpl (Get_Attribute_Id): Remove alternatives for
+ 	indexing and Default_Iterator names, as these now belong to the
+ 	"normal" attribute range.
+ 	(Is_Direct_Attribute_Definition_Name): Return True for indexing aspect
+ 	names, literal aspect names, stream attribute names, and Put_Image
+ 	and Default_Iterator aspect names.
+ 	* gnat_rm.texi: Regenerate.
+ 
+ 2026-06-29  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_ch3.adb (Expand_Freeze_Record_Type): Minor cleanup.
+ 	* sem_ch3.adb (Build_Derived_Private_Type.Copy_And_Build): Set the
+ 	Is_Implicit_Full_View flag early in the case of a record type.
+ 	(Build_Derived_Record_Type): Do not build the class-wide type for
+ 	an implicit full view.
+ 
+ 2026-06-29  Olivier Hainque  <hainque@adacore.com>
+ 
+ 	* adaint.c (__gnat_get_executable_load_address): Provide
+ 	an implementation based on dladdr(&main) and use it for Android.
+ 
+ 2026-06-29  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* par-ch13.adb (P_Modifies_Specification): Now public, so it can be
+ 	reused when parsing a pragma.
+ 	* par-ch2.adb (P_Pragma): Parse pragma Modifies with a custom syntax.
+ 	* par-prag.adb (Prag): A ??? comment is now implemented.
+ 	* par.adb (P_Modifies_Specification): Now public, so it can be reused.
+ 
+ 2026-06-29  Olivier Hainque  <hainque@adacore.com>
+ 
+ 	* init.c (__gnat_install_handler, __ANDROID__): Guard calls
+ 	to sigaction with a test for a possible 's' (System) interrupt
+ 	state.
+ 
+ 2026-06-29  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* atree.adb (Change_Node): Enable "nnd" debug hook.
+ 
+ 2026-06-29  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch3.adb (Preanalyze_And_Resolve_Assert_Expression): Fix style.
+ 
+ 2026-06-29  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sem_ch3.adb (Find_Type_Of_Object): In the subtype indication case
+ 	for a stand-alone object, invoke Process_Subtype during preanalysis
+ 	instead of partially reimplementing it.
+ 	* sem_ch5.ads (Has_Sec_Stack_Call): Move back declaration to...
+ 	* sem_ch5.adb (Has_Sec_Stack_Call): ...here.
+ 	* sem_ch4.adb (Analyze_Expression_With_Actions): Deal with transient
+ 	scopes created during analysis.
+ 	* sem_res.adb: Add clauses for Sem_Ch9 package.
+ 	(Resolve_Declare_Expression): Streamline and deal with transient
+ 	scopes created during resolution.
+ 
  2026-06-22  Javier Miranda  <miranda@adacore.com>
  
  	* par-ch6.adb (P_Subprogram): Add missing support for direct
diff -Nrcpad gcc-17-20260628/gcc/ada/adaint.c gcc-17-20260705/gcc/ada/adaint.c
*** gcc-17-20260628/gcc/ada/adaint.c	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/gcc/ada/adaint.c	Sun Jul  5 22:32:06 2026
*************** __gnat_cpu_set (int cpu, size_t count AT
*** 3481,3490 ****
  #include <link.h>
  #endif
  
  const void *
  __gnat_get_executable_load_address (void)
  {
! #if defined (__APPLE__)
    return _dyld_get_image_header (0);
  
  #elif defined (__linux__) && (defined (__GLIBC__) || defined (__UCLIBC__))
--- 3481,3532 ----
  #include <link.h>
  #endif
  
+ /* Even though Android is a variant of Linux, it doesn't expose
+    a _r_debug struct so handily as GLIBC.  Program headers from
+    dl_iterate_phdr show name/addr sequences of pairs such as
+ 
+    dpli_name                                       dpli_addr
+    /system/bin/linker64                            0x720f3d3000
+    /data/data/com.arachnoid.sshelper/home/testone  0x64f217f000 (exe)
+    [vdso]                                          0x720f3d2000
+    /apex/com.android.runtime/lib64/bionic/libc.so  0x720de25000
+    /apex/com.android.runtime/lib64/bionic/libdl.so 0x720ddd6000
+    /system/lib64/libnetd_client.so                 0x720dc83000
+    /system/lib64/libc++.so                         0x720d30b000
+    /apex/com.android.runtime/lib64/bionic/libm.so  0x720dcc3000
+ 
+    The name is not empty for the executable and there's no documentation
+    saying it would always come second or so, so this provides no obvious
+    reliable means to discriminate the exe load address.
+ 
+    As a variant of linux, the default link policy for Android authorizes
+    undefined refs when creating shared libs, with resolution deferred at least
+    until the lib is loaded. "main" will have to be available then, so resort
+    to dladdr(&main) to figure out the main module load address from here.
+ 
+    Achieve this through a local feature macro in case other platforms can use
+    such a facility.  */
+ 
+ #if defined (__ANDROID__)
+ #define _USE_DLADDR_MAIN
+ #endif
+ 
  const void *
  __gnat_get_executable_load_address (void)
  {
! #if defined (_USE_DLADDR_MAIN)
!   /* We might be in a shared libgnat here, so a ref to "main"
!      cannot be assumed to work on all platforms.  */
! 
!   #define _GNU_SOURCE
!   #include <dlfcn.h>
! 
!   extern int main();
!   Dl_info info;
! 
!   dladdr((void *)&main, &info);
!   return info.dli_fbase;
! #elif defined (__APPLE__)
    return _dyld_get_image_header (0);
  
  #elif defined (__linux__) && (defined (__GLIBC__) || defined (__UCLIBC__))
diff -Nrcpad gcc-17-20260628/gcc/ada/atree.adb gcc-17-20260705/gcc/ada/atree.adb
*** gcc-17-20260628/gcc/ada/atree.adb	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/gcc/ada/atree.adb	Sun Jul  5 22:32:06 2026
*************** package body Atree is
*** 1246,1251 ****
--- 1246,1253 ----
        if New_Kind in N_Subexpr then
           Set_Paren_Count (N, Par_Count);
        end if;
+ 
+       New_Node_Debugging_Output (N);
     end Change_Node;
  
     ------------------------
diff -Nrcpad gcc-17-20260628/gcc/ada/doc/gnat_rm/gnat_language_extensions.rst gcc-17-20260705/gcc/ada/doc/gnat_rm/gnat_language_extensions.rst
*** gcc-17-20260628/gcc/ada/doc/gnat_rm/gnat_language_extensions.rst	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/gcc/ada/doc/gnat_rm/gnat_language_extensions.rst	Sun Jul  5 22:32:06 2026
*************** Another example, which additionally uses
*** 2069,2071 ****
--- 2069,2170 ----
     begin
        Ada.Unchecked_Deallocation(Name => Integer_Access) (A);
     end;
+ 
+ Attribute Subprograms
+ ---------------------
+ 
+ This feature allows declaring subprograms that are associated with a named
+ aspect or attribute of a given type, as an alternative to explicitly
+ specifying the aspect or attribute for the type (using an aspect_specification
+ or attribute_definition_clause), by defining the name of the subprogram
+ using attribute syntax. In effect, this implicitly specifies the aspect
+ or attribute for the type, and is intended to be semantically equivalent to
+ using an explicit aspect specification, but without needing to give a specific
+ name in the aspect and subprogram. This is allowed for the various aspects that
+ denote subprograms (see below for the exact list of supported aspects).
+ 
+ Here is an example of the use of this feature for defining indexing functions
+ for a container type and an integer-literal function for the container's
+ element type:
+ 
+ .. code-block:: ada
+ 
+    package My_Container is
+ 
+       type Container is tagged ...;  -- Implicit indexing aspects
+ 
+       type Element_Type is ...;      -- Implicit Integer_Literal aspect
+ 
+       type Cursor_Type is ...;
+ 
+       type Reference_Type is ...;
+ 
+       function Container'Constant_Indexing (C : Container; Index : Positive)
+         return Element_Type;
+ 
+       function Container'Constant_Indexing (C : Container; Index : Cursor_Type)
+         return Element_Type;
+ 
+       function Container'Variable_Indexing
+         (C : in out Container; Index : Positive)
+          return Reference_Type;
+ 
+       function Element_Type'Integer_Literal (S : String) return Element_Type;
+ 
+    end My_Container;
+ 
+ Syntax
+ ^^^^^^
+ 
+ .. code-block:: text
+ 
+    defining_program_unit_name ::=
+      [parent_unit_name . ]defining_identifier
+    | defining_attribute_subprogram_name
+ 
+    defining_attribute_subprogram_name ::=
+      prefix'attribute_designator
+ 
+ Legality Rules
+ ^^^^^^^^^^^^^^
+ 
+ The prefix of a ``defining_attribute_subprogram_name`` shall be either
+ a ``direct_name`` denoting a type (more properly, a first subtype)
+ declared immediately within the scope where the associated subprogram
+ is declared, or else an attribute name itself whose ``attribute_designator``
+ is ``Class`` and whose prefix denotes a type subject to the same
+ declaration condition. A ``defining_program_unit_name`` that is
+ a ``defining_attribute_subprogram_name`` may only be used to define
+ the name of a subprogram that is neither a library subprogram nor
+ a subprogram whose body is given by a ``body_stub`` (nor can it be
+ used to define the name of a generic subprogram).
+ 
+ The ``attribute_designator`` given in a ``defining_attribute_subprogram_name``
+ shall name an aspect that is allowed to designate a subprogram. Specifically,
+ it shall be one of the predefined aspects ``Constant_Indexing``,
+ ``Variable_Indexing``, ``Default_Iterator``, ``Integer_Literal``,
+ ``Real_Literal``, ``String_Literal``, ``Put_Image``, ``Read``, ``Write``,
+ ``Input``, or ``Output``, or else one of the implementation-defined aspects
+ ``Constructor`` or ``Destructor``. (Note that this feature is not supported
+ for aspects that have elements that may designate a subprogram, such as the
+ ``Aggregate`` aspect.)
+ 
+ If the prefix of a ``defining_attribute_subprogram_name`` is an attribute name
+ whose ``attribute_designator`` is ``Class``, then the ``attribute_designator``
+ of the ``defining_attribute_subprogram_name`` shall be the name of a stream
+ attribute.
+ 
+ An attribute subprogram for a given type and aspect is subject to
+ the same restrictions as would be imposed on a subprogram denoted by
+ an explicit ``aspect_specification`` or ``attribute_definition_clause``
+ for that type and aspect. In particular, the profile of the subprogram
+ must satisfy any expected profile defined for the aspect.
+ 
+ If a subprogram is declared using a ``defining_attribute_subprogram_name``,
+ then the type named in the attribute subprogram's name shall not have
+ an explicit ``aspect_specification`` that specifies the same aspect as
+ that named by the subprogram, nor shall the type derive from an ancestor
+ type that explicitly specifies that aspect. Similarly, an explicit
+ ``aspect_specification`` shall not specify an aspect for a type that
+ is derived from a type for which any attribute subprograms have been
+ declared for the same aspect.
diff -Nrcpad gcc-17-20260628/gcc/ada/einfo.ads gcc-17-20260705/gcc/ada/einfo.ads
*** gcc-17-20260628/gcc/ada/einfo.ads	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/gcc/ada/einfo.ads	Sun Jul  5 22:32:06 2026
*************** package Einfo is
*** 2344,2351 ****
  --       call wrapper if available.
  
  --    Initialization_Statements
! --       Defined in constants and variables. For a composite object coming from
! --       source and initialized with an aggregate or a call expanded in place,
  --       points to a compound statement containing the assignment(s). This is
  --       used for a couple of purposes: 1) to defer the initialization to the
  --       freeze point if an address clause or a delayed aspect is present for
--- 2344,2351 ----
  --       call wrapper if available.
  
  --    Initialization_Statements
! --       Defined in constants and variables. For composite objects coming from
! --       source and (default-)initialized with an aggregate or a function call,
  --       points to a compound statement containing the assignment(s). This is
  --       used for a couple of purposes: 1) to defer the initialization to the
  --       freeze point if an address clause or a delayed aspect is present for
diff -Nrcpad gcc-17-20260628/gcc/ada/errout.adb gcc-17-20260705/gcc/ada/errout.adb
*** gcc-17-20260628/gcc/ada/errout.adb	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/gcc/ada/errout.adb	Sun Jul  5 22:32:06 2026
*************** package body Errout is
*** 3854,3869 ****
           Kill_Message := True;
        end if;
  
-       --  Replace compiler generated name for direct attribute definitions with
-       --  a nicer name.
- 
-       if Name_Len > 5
-         and then Name_Buffer (1) = 'D'
-         and then Name_Buffer (Name_Len - 3 .. Name_Len) = "_Att"
-       then
-          Replace_With_Attribute_Definition;
-       end if;
- 
        --  Remaining step is to adjust casing and possibly add 'Class
  
        Adjust_Name_Case (Global_Name_Buffer, Loc);
--- 3854,3859 ----
diff -Nrcpad gcc-17-20260628/gcc/ada/erroutc.adb gcc-17-20260705/gcc/ada/erroutc.adb
*** gcc-17-20260628/gcc/ada/erroutc.adb	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/gcc/ada/erroutc.adb	Sun Jul  5 22:32:06 2026
*************** package body Erroutc is
*** 1448,1488 ****
        end loop;
     end Prescan_Message;
  
-    ---------------------------------------
-    -- Replace_With_Attribute_Definition --
-    ---------------------------------------
- 
-    procedure Replace_With_Attribute_Definition is
-       First   : constant Integer := 2;
-       Last    : constant Integer := Name_Len - 4;
-       Att_Buf : Bounded_String (Max_Length => Name_Len - 7);
- 
-    begin
-       Until_Tick :
-       for J in First .. Last loop
- 
-          --  J could be at the position separating the prefix from the
-          --  attribute name.
- 
-          if Name_Buffer (J) = '_' then
-             Att_Buf.Length := 0;
-             Append (Att_Buf, Name_Buffer (J + 1 .. Last));
-             Set_Casing (Att_Buf, All_Lower_Case);
- 
-             if Is_Direct_Attribute_Definition_Name (Name_Find (Att_Buf)) then
-                Name_Buffer (J) := ''';
-                exit Until_Tick;
-             end if;
-          end if;
-       end loop Until_Tick;
- 
-       --  Remove prefix 'D' and suffix "_Att"
- 
-       Name_Buffer (1 .. Last - 1) := Name_Buffer (2 .. Last);
-       Name_Len := Last - 1;
-       Set_Casing (All_Lower_Case);
-    end Replace_With_Attribute_Definition;
- 
     ----------------
     -- Same_Error --
     ----------------
--- 1448,1453 ----
*************** package body Erroutc is
*** 1793,1808 ****
           --  Else output with surrounding quotes in proper casing mode
  
           else
!             --  Replace compiler generated name for direct attribute
!             --  definitions with a nicer one.
! 
!             if Name_Buffer (1) = 'D'
!               and then Name_Buffer (Name_Len - 3 .. Name_Len) = "_Att"
!             then
!                Replace_With_Attribute_Definition;
!             else
!                Set_Casing (Identifier_Casing (Flag_Source));
!             end if;
  
              Set_Msg_Quote;
              Set_Msg_Name_Buffer;
--- 1758,1764 ----
           --  Else output with surrounding quotes in proper casing mode
  
           else
!             Set_Casing (Identifier_Casing (Flag_Source));
  
              Set_Msg_Quote;
              Set_Msg_Name_Buffer;
diff -Nrcpad gcc-17-20260628/gcc/ada/erroutc.ads gcc-17-20260705/gcc/ada/erroutc.ads
*** gcc-17-20260628/gcc/ada/erroutc.ads	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/gcc/ada/erroutc.ads	Sun Jul  5 22:32:06 2026
*************** package Erroutc is
*** 770,781 ****
     --  Iterate over all of the errors in the error chain and mark all messages
     --  as deleted if they match the Filter.
  
-    procedure Replace_With_Attribute_Definition;
-    --  The caller has placed in Namet.Global_Name_Buffer the internal encoding
-    --  of a direct attribute definition; this subprogram rewrites that name to
-    --  a user-readable T'attribute string. The original source casing cannot
-    --  be recovered from the names table, so the result is all lowercase.
- 
     function Same_Error (M1, M2 : Error_Msg_Id) return Boolean;
     --  See if two messages have the same text. Returns true if the text of the
     --  two messages is identical, or if one of them is the same as the other
--- 770,775 ----
diff -Nrcpad gcc-17-20260628/gcc/ada/exp_attr.adb gcc-17-20260705/gcc/ada/exp_attr.adb
*** gcc-17-20260628/gcc/ada/exp_attr.adb	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/gcc/ada/exp_attr.adb	Sun Jul  5 22:32:06 2026
*************** package body Exp_Attr is
*** 9152,9159 ****
--- 9152,9161 ----
           | Attribute_Bit_Order
           | Attribute_Class
           | Attribute_Compiler_Version
+          | Attribute_Constant_Indexing
           | Attribute_Constructor
           | Attribute_Default_Bit_Order
+          | Attribute_Default_Iterator
           | Attribute_Default_Scalar_Storage_Order
           | Attribute_Definite
           | Attribute_Delta
*************** package body Exp_Attr is
*** 9168,9173 ****
--- 9170,9176 ----
           | Attribute_Has_Access_Values
           | Attribute_Has_Discriminants
           | Attribute_Has_Tagged_Values
+          | Attribute_Integer_Literal
           | Attribute_Large
           | Attribute_Last_Valid
           | Attribute_Library_Level
*************** package body Exp_Attr is
*** 9187,9192 ****
--- 9190,9196 ----
           | Attribute_Modulus
           | Attribute_Partition_ID
           | Attribute_Range
+          | Attribute_Real_Literal
           | Attribute_Restriction_Set
           | Attribute_Safe_Emax
           | Attribute_Safe_First
*************** package body Exp_Attr is
*** 9200,9205 ****
--- 9204,9210 ----
           | Attribute_Small_Denominator
           | Attribute_Small_Numerator
           | Attribute_Storage_Unit
+          | Attribute_String_Literal
           | Attribute_Stub_Type
           | Attribute_Super
           | Attribute_System_Allocator_Alignment
*************** package body Exp_Attr is
*** 9209,9214 ****
--- 9214,9220 ----
           | Attribute_Unconstrained_Array
           | Attribute_Universal_Literal_String
           | Attribute_Unsigned_Base_Range
+          | Attribute_Variable_Indexing
           | Attribute_Wchar_T_Size
           | Attribute_Word_Size
        =>
diff -Nrcpad gcc-17-20260628/gcc/ada/exp_ch3.adb gcc-17-20260705/gcc/ada/exp_ch3.adb
*** gcc-17-20260628/gcc/ada/exp_ch3.adb	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/gcc/ada/exp_ch3.adb	Sun Jul  5 22:32:06 2026
*************** package body Exp_Ch3 is
*** 6548,6569 ****
  
              Set_Is_Frozen (Typ);
  
!             if not Is_Derived_Type (Typ)
!               or else Is_Tagged_Type (Etype (Typ))
!             then
!                Set_All_DT_Position (Typ);
! 
!             --  If this is a type derived from an untagged private type whose
              --  full view is tagged, the type is marked tagged for layout
              --  reasons, but it has no dispatch table.
  
!             elsif Is_Derived_Type (Typ)
!               and then Is_Private_Type (Etype (Typ))
                and then not Is_Tagged_Type (Etype (Typ))
              then
                 return;
              end if;
  
              --  Create and decorate the tags. Suppress their creation when
              --  not Tagged_Type_Expansion because the dispatching mechanism is
              --  handled internally by the virtual target.
--- 6548,6566 ----
  
              Set_Is_Frozen (Typ);
  
!             --  If the type is derived from an untagged private type whose
              --  full view is tagged, the type is marked tagged for layout
              --  reasons, but it has no dispatch table.
  
!             if Is_Derived_Type (Typ)
                and then not Is_Tagged_Type (Etype (Typ))
              then
+                pragma Assert (Is_Private_Type (Etype (Typ)));
                 return;
              end if;
  
+             Set_All_DT_Position (Typ);
+ 
              --  Create and decorate the tags. Suppress their creation when
              --  not Tagged_Type_Expansion because the dispatching mechanism is
              --  handled internally by the virtual target.
*************** package body Exp_Ch3 is
*** 7507,7512 ****
--- 7504,7511 ----
        -------------------------------
  
        procedure Default_Initialize_Object (After : Node_Id) is
+          Marker : constant Node_Id := Next (After);
+ 
           Init_Expr  : Node_Id;
           Init_Stmts : List_Id;
  
*************** package body Exp_Ch3 is
*** 7560,7575 ****
              Init_Stmts := Build_Default_Initialization (N, Typ, Def_Id);
           end if;
  
!          --  Insert the whole initialization sequence into the tree. If the
!          --  object has a delayed freeze, as will be the case when it has
!          --  aspect specifications, the initialization sequence is part of
!          --  the freeze actions.
  
           if Present (Init_Stmts) then
!             if Has_Delayed_Freeze (Def_Id) then
!                Append_Freeze_Actions (Def_Id, Init_Stmts);
!             else
!                Insert_Actions_After (After, Init_Stmts);
              end if;
           end if;
        end Default_Initialize_Object;
--- 7559,7576 ----
              Init_Stmts := Build_Default_Initialization (N, Typ, Def_Id);
           end if;
  
!          --  Insert the whole initialization sequence into the tree. Park the
!          --  generated statements if the declaration requires it and is not the
!          --  node that is wrapped in a transient scope.
  
           if Present (Init_Stmts) then
!             Insert_Actions_After (After, Init_Stmts);
! 
!             if not Special_Ret_Obj
!               and then Needs_Initialization_Statements (N)
!               and then not (Scope_Is_Transient and then N = Node_To_Be_Wrapped)
!             then
!                Move_To_Initialization_Statements (N, Marker);
              end if;
           end if;
        end Default_Initialize_Object;
diff -Nrcpad gcc-17-20260628/gcc/ada/exp_ch6.adb gcc-17-20260705/gcc/ada/exp_ch6.adb
*** gcc-17-20260628/gcc/ada/exp_ch6.adb	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/gcc/ada/exp_ch6.adb	Sun Jul  5 22:32:06 2026
*************** package body Exp_Ch6 is
*** 6145,6157 ****
           Component        : Entity_Id;
  
           Comp_List        : constant List_Id := New_List;
-          Initialize_List  : constant List_Id := New_List;
           Tag_List         : constant List_Id := New_List;
           Parent_List      : constant List_Id := New_List;
!          --  Comp_List contains the list of default initializations, init
!          --  procedure calls, or constructor calls for components;
!          --  Initialize_List contains the list of component initializations
!          --  coming from the Initialize aspect;
           --  Tag_List contains the initialization for the tag;
           --  Parent_List contains the parent constructor call.
  
--- 6145,6158 ----
           Component        : Entity_Id;
  
           Comp_List        : constant List_Id := New_List;
           Tag_List         : constant List_Id := New_List;
           Parent_List      : constant List_Id := New_List;
!          --  Comp_List contains component initializations (from the Initialize
!          --  aspect or component default expressions), in record declaration
!          --  order; when a component is named in the Initialize aspect, that
!          --  expression takes priority over the component's default expression,
!          --  which is used only when the component is not mentioned in the
!          --  Initialize aspect;
           --  Tag_List contains the initialization for the tag;
           --  Parent_List contains the parent constructor call.
  
*************** package body Exp_Ch6 is
*** 6200,6209 ****
              end if;
  
              if Chars (Component) = Name_uTag then
!                Append_To (Tag_List,
!                  Make_Tag_Assignment_From_Type (Loc,
!                    Target => New_Occurrence_Of (First_Formal (Spec_Id), Loc),
!                    Typ    => First_Param_Type));
  
              elsif Chars (Component) = Name_uParent
                and then Needs_Construction (Etype (Component))
--- 6201,6213 ----
              end if;
  
              if Chars (Component) = Name_uTag then
!                if Tagged_Type_Expansion then
!                   Append_To (Tag_List,
!                     Make_Tag_Assignment_From_Type (Loc,
!                       Target =>
!                         New_Occurrence_Of (First_Formal (Spec_Id), Loc),
!                       Typ    => First_Param_Type));
!                end if;
  
              elsif Chars (Component) = Name_uParent
                and then Needs_Construction (Etype (Component))
*************** package body Exp_Ch6 is
*** 6215,6220 ****
--- 6219,6239 ----
                   Make_Parent_Constructor_Call
                     (Parent_Type => Etype (Component)));
  
+             --  Inherited components are handled by the parent constructor
+ 
+             elsif Original_Record_Component (Component) /= Component then
+                null;
+ 
+             --  A derived type with a parent that needs construction has a
+             --  Super aspect that initializes its parent components; otherwise
+             --  it had been rejected during semantic analysis (see subprogram
+             --  Sem_Ch6.Analyze_Direct_Attribute_Definition).
+ 
+             elsif Chars (Component) = Name_uParent
+               and then Needs_Construction (Etype (Component))
+             then
+                null;
+ 
              else
                 declare
                    Maybe_Initialize             : constant Node_Id :=
*************** package body Exp_Ch6 is
*** 6238,6255 ****
                    then
                       declare
                          Init : Node_Id;
-                         List : List_Id;
  
                       begin
                          if Present (Maybe_Initialize) then
                             Init := Maybe_Initialize;
-                            List := Initialize_List;
                          else
                             Init := Maybe_Default_Or_Constructor;
-                            List := Comp_List;
                          end if;
  
!                         Append_List_To (List,
                            Build_Component_Assignment (Loc,
                              Prefix       =>
                                New_Occurrence_Of (First_Formal (Spec_Id), Loc),
--- 6257,6271 ----
                    then
                       declare
                          Init : Node_Id;
  
                       begin
                          if Present (Maybe_Initialize) then
                             Init := Maybe_Initialize;
                          else
                             Init := Maybe_Default_Or_Constructor;
                          end if;
  
!                         Append_List_To (Comp_List,
                            Build_Component_Assignment (Loc,
                              Prefix       =>
                                New_Occurrence_Of (First_Formal (Spec_Id), Loc),
*************** package body Exp_Ch6 is
*** 6289,6302 ****
              Next_Entity (Component);
           end loop;
  
!          --  First, use default value initializations and init procedures,
!          --  then call the parent constructor (if any), then initialize all
!          --  other components through the Initialize aspect, last the tag.
  
!          Append_List (Tag_List, Initialize_List);
!          Append_List (Initialize_List, Parent_List);
!          Append_List (Parent_List, Comp_List);
!          Insert_List_Before_And_Analyze (First (L), Comp_List);
  
           End_Scope;
        end Prepend_Constructor_Procedure_Prologue;
--- 6305,6316 ----
              Next_Entity (Component);
           end loop;
  
!          --  First call the parent constructor (if any), then initialize all
!          --  components in record declaration order, then set the tag.
  
!          Append_List (Comp_List, Parent_List);
!          Append_List (Tag_List, Parent_List);
!          Insert_List_Before_And_Analyze (First (L), Parent_List);
  
           End_Scope;
        end Prepend_Constructor_Procedure_Prologue;
diff -Nrcpad gcc-17-20260628/gcc/ada/exp_util.adb gcc-17-20260705/gcc/ada/exp_util.adb
*** gcc-17-20260628/gcc/ada/exp_util.adb	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/gcc/ada/exp_util.adb	Sun Jul  5 22:32:06 2026
*************** package body Exp_Util is
*** 6393,6399 ****
           return Empty;
        end if;
  
!       return Find_Optional_Prim_Op (T, Op_Name);
     end Find_Controlled_Prim_Op;
  
     ------------------------
--- 6393,6399 ----
           return Empty;
        end if;
  
!       return Find_Optional_Prim_Op (T, Op_Name, Controlled_Op => True);
     end Find_Controlled_Prim_Op;
  
     ------------------------
*************** package body Exp_Util is
*** 7047,7057 ****
     ---------------------------
  
     function Find_Optional_Prim_Op
!      (T : Entity_Id; Name : Name_Id) return Entity_Id
     is
        Prim : Elmt_Id;
        Typ  : Entity_Id := T;
-       Op   : Entity_Id;
  
     begin
        if Is_Class_Wide_Type (Typ) then
--- 7047,7059 ----
     ---------------------------
  
     function Find_Optional_Prim_Op
!      (T             : Entity_Id;
!       Name          : Name_Id;
!       Controlled_Op : Boolean := False) return Entity_Id
     is
+       Op   : Entity_Id;
        Prim : Elmt_Id;
        Typ  : Entity_Id := T;
  
     begin
        if Is_Class_Wide_Type (Typ) then
*************** package body Exp_Util is
*** 7073,7086 ****
           Op := Node (Prim);
  
           --  We can retrieve primitive operations by name if it is an internal
!          --  name. For equality we must check that both of its operands have
!          --  the same type, to avoid confusion with user-defined equalities
!          --  than may have a asymmetric signature.
  
           exit when Chars (Op) = Name
             and then
               (Name /= Name_Op_Eq
!                or else Etype (First_Formal (Op)) = Etype (Last_Formal (Op)));
  
           Next_Elmt (Prim);
        end loop;
--- 7075,7097 ----
           Op := Node (Prim);
  
           --  We can retrieve primitive operations by name if it is an internal
!          --  name. For equality, we must check that both of its operands have
!          --  the same type, to avoid confusion with user-defined equalities,
!          --  which may have an asymmetric signature. For controlled operations,
!          --  we check that the primitive is a procedure with a single In Out
!          --  parameter of a non-access type.
  
           exit when Chars (Op) = Name
             and then
               (Name /= Name_Op_Eq
!                or else Etype (First_Formal (Op)) = Etype (Last_Formal (Op)))
!            and then
!              (not Controlled_Op
!                or else
!                  (Ekind (Op) = E_Procedure
!                    and then Ekind (First_Formal (Op)) = E_In_Out_Parameter
!                    and then not Is_Access_Type (Etype (First_Formal (Op)))
!                    and then No (Next_Formal (First_Formal (Op)))));
  
           Next_Elmt (Prim);
        end loop;
diff -Nrcpad gcc-17-20260628/gcc/ada/exp_util.ads gcc-17-20260705/gcc/ada/exp_util.ads
*** gcc-17-20260628/gcc/ada/exp_util.ads	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/gcc/ada/exp_util.ads	Sun Jul  5 22:32:06 2026
*************** package Exp_Util is
*** 672,678 ****
     --  although they are not master constructs in the language.
  
     function Find_Optional_Prim_Op
!      (T : Entity_Id; Name : Name_Id) return Entity_Id;
     function Find_Optional_Prim_Op
       (T    : Entity_Id;
        Name : TSS_Name_Type) return Entity_Id;
--- 672,684 ----
     --  although they are not master constructs in the language.
  
     function Find_Optional_Prim_Op
!      (T             : Entity_Id;
!       Name          : Name_Id;
!       Controlled_Op : Boolean := False) return Entity_Id;
!    --  Same as Find_Prim_Op but, if Controlled_Op is True, returns a primitive
!    --  only if it has the signature of the three primitives of controlled types
!    --  Initialize/Adjust/Finalize, and returns Empty if not found.
! 
     function Find_Optional_Prim_Op
       (T    : Entity_Id;
        Name : TSS_Name_Type) return Entity_Id;
diff -Nrcpad gcc-17-20260628/gcc/ada/gcc-interface/decl.cc gcc-17-20260705/gcc/ada/gcc-interface/decl.cc
*** gcc-17-20260628/gcc/ada/gcc-interface/decl.cc	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/gcc/ada/gcc-interface/decl.cc	Sun Jul  5 22:32:06 2026
*************** warn_on_field_placement (tree gnu_field,
*** 8432,8451 ****
        : "?.q?record layout may cause performance issues";
    const char *msg2
      = Ekind (gnat_field) == E_Discriminant
!       ? "?.q?discriminant & whose length is not multiple of a byte"
        : field_has_self_size (gnu_field)
! 	? "?.q?component & whose length depends on a discriminant"
  	: field_has_variable_size (gnu_field)
! 	  ? "?.q?component & whose length is not fixed"
! 	  : "?.q?component & whose length is not multiple of a byte";
    const char *msg3
      = do_reorder
!       ? "?.q?comes too early and was moved down"
!       : "?.q?comes too early and ought to be moved down";
  
!   post_error (msg1, gnat_field);
!   post_error_ne (msg2, gnat_field, gnat_field);
!   post_error (msg3, gnat_field);
  }
  
  /* Likewise but for every field present on GNU_FIELD_LIST.  */
--- 8432,8452 ----
        : "?.q?record layout may cause performance issues";
    const char *msg2
      = Ekind (gnat_field) == E_Discriminant
!       ? "\\?.q?discriminant &# whose length is not multiple of a byte"
        : field_has_self_size (gnu_field)
! 	? "\\?.q?component &# whose length depends on a discriminant"
  	: field_has_variable_size (gnu_field)
! 	  ? "\\?.q?component &# whose length is not fixed"
! 	  : "\\?.q?component &# whose length is not multiple of a byte";
    const char *msg3
      = do_reorder
!       ? "\\?.q?comes too early and was moved down"
!       : "\\?.q?comes too early and ought to be moved down";
  
!   post_error (msg1, gnat_record_type);
!   Error_Msg_Sloc = Sloc(gnat_field);
!   post_error_ne (msg2, gnat_record_type, gnat_field);
!   post_error (msg3, gnat_record_type);
  }
  
  /* Likewise but for every field present on GNU_FIELD_LIST.  */
diff -Nrcpad gcc-17-20260628/gcc/ada/gcc-interface/trans.cc gcc-17-20260705/gcc/ada/gcc-interface/trans.cc
*** gcc-17-20260628/gcc/ada/gcc-interface/trans.cc	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/gcc/ada/gcc-interface/trans.cc	Sun Jul  5 22:32:06 2026
*************** gnat_to_gnu (Node_Id gnat_node)
*** 6535,6546 ****
    if (type_annotate_only && statement_node_p (gnat_node))
      return alloc_stmt_list ();
  
!   /* If we are only annotating types and this node is a subexpression, return
!      a NULL_EXPR, but filter out nodes appearing in the expressions attached
!      to packed array implementation types.  */
    if (type_annotate_only
        && IN (kind, N_Subexpr)
!       && !(((IN (kind, N_Op) && kind != N_Op_Expon)
  	    || kind == N_Type_Conversion)
  	   && Is_Integer_Type (Etype (gnat_node)))
        && !(kind == N_Attribute_Reference
--- 6535,6549 ----
    if (type_annotate_only && statement_node_p (gnat_node))
      return alloc_stmt_list ();
  
!   /* If we are only annotating types and this node is a dynamic expression,
!      return a NULL_EXPR, but filter out nodes appearing in the expressions
!      attached to packed array implementation types.  */
    if (type_annotate_only
        && IN (kind, N_Subexpr)
!       && kind != N_Expanded_Name
!       && !IN (kind, N_Direct_Name)
!       && !IN (kind, N_Numeric_Or_String_Literal)
!       && !(((IN (kind, N_Op) && !Is_Intrinsic_Subprogram (Entity (gnat_node)))
  	    || kind == N_Type_Conversion)
  	   && Is_Integer_Type (Etype (gnat_node)))
        && !(kind == N_Attribute_Reference
*************** gnat_to_gnu (Node_Id gnat_node)
*** 6548,6555 ****
  	       || Get_Attribute_Id (Attribute_Name (gnat_node)) == Attr_Size)
  	   && Is_Constrained (Etype (Prefix (gnat_node)))
  	   && !Is_Constr_Subt_For_U_Nominal (Etype (Prefix (gnat_node))))
-       && kind != N_Expanded_Name
-       && kind != N_Identifier
        && !Compile_Time_Known_Value (gnat_node))
      return build1 (NULL_EXPR, get_unpadded_type (Etype (gnat_node)),
  		   build_call_raise (CE_Range_Check_Failed, gnat_node,
--- 6551,6556 ----
diff -Nrcpad gcc-17-20260628/gcc/ada/gnat_rm.texi gcc-17-20260705/gcc/ada/gnat_rm.texi
*** gcc-17-20260628/gcc/ada/gnat_rm.texi	Sun Jun 28 22:32:05 2026
--- gcc-17-20260705/gcc/ada/gnat_rm.texi	Sun Jul  5 22:32:06 2026
***************
*** 19,25 ****
  
  @copying
  @quotation
! GNAT Reference Manual , Jun 18, 2026
  
  AdaCore
  
--- 19,25 ----
  
  @copying
  @quotation
! GNAT Reference Manual , Jun 29, 2026
  
  AdaCore
  
*************** Experimental Language Extensions
*** 961,966 ****
--- 961,967 ----
  * Continue statement:: 
  * Destructors:: 
  * Structural Generic Instantiation:: 
+ * Attribute Subprograms:: 
  
  Storage Model
  
*************** Structural Generic Instantiation
*** 986,991 ****
--- 987,997 ----
  * Legality Rules: Legality Rules<3>. 
  * Static Semantics:: 
  
+ Attribute Subprograms
+ 
+ * Syntax: Syntax<4>. 
+ * Legality Rules: Legality Rules<4>. 
+ 
  Security Hardening Features
  
  * Register Scrubbing:: 
*************** Features activated via @code{-gnatX0} or
*** 31992,31997 ****
--- 31998,32004 ----
  * Continue statement:: 
  * Destructors:: 
  * Structural Generic Instantiation:: 
+ * Attribute Subprograms:: 
  
  @end menu
  
*************** procedure T2'Destructor (X : in out T2);
*** 33258,33264 ****
  When an object of type @code{T2} is finalized, there will be first a call to
  @code{T2'Destructor}, and then a call to @code{T1'Destructor} on the object.
  
! @node Structural Generic Instantiation,,Destructors,Experimental Language Extensions
  @anchor{gnat_rm/gnat_language_extensions structural-generic-instantiation}@anchor{488}
  @subsection Structural Generic Instantiation
  
--- 33265,33271 ----
  When an object of type @code{T2} is finalized, there will be first a call to
  @code{T2'Destructor}, and then a call to @code{T1'Destructor} on the object.
  
! @node Structural Generic Instantiation,Attribute Subprograms,Destructors,Experimental Language Extensions
  @anchor{gnat_rm/gnat_language_extensions structural-generic-instantiation}@anchor{488}
  @subsection Structural Generic Instantiation
  
*************** begin
*** 33466,33473 ****
  end;
  @end example
  
  @node Security Hardening Features,Obsolescent Features,GNAT language extensions,Top
! @anchor{gnat_rm/security_hardening_features doc}@anchor{48c}@anchor{gnat_rm/security_hardening_features id1}@anchor{48d}@anchor{gnat_rm/security_hardening_features security-hardening-features}@anchor{16}
  @chapter Security Hardening Features
  
  
--- 33473,33591 ----
  end;
  @end example
  
+ @node Attribute Subprograms,,Structural Generic Instantiation,Experimental Language Extensions
+ @anchor{gnat_rm/gnat_language_extensions attribute-subprograms}@anchor{48c}
+ @subsection Attribute Subprograms
+ 
+ 
+ This feature allows declaring subprograms that are associated with a named
+ aspect or attribute of a given type, as an alternative to explicitly
+ specifying the aspect or attribute for the type (using an aspect_specification
+ or attribute_definition_clause), by defining the name of the subprogram
+ using attribute syntax. In effect, this implicitly specifies the aspect
+ or attribute for the type, and is intended to be semantically equivalent to
+ using an explicit aspect specification, but without needing to give a specific
+ name in the aspect and subprogram. This is allowed for the various aspects that
+ denote subprograms (see below for the exact list of supported aspects).
+ 
+ Here is an example of the use of this feature for defining indexing functions
+ for a container type and an integer-literal function for the container’s
+ element type:
+ 
+ @example
+ package My_Container is
+ 
+    type Container is tagged ...;  -- Implicit indexing aspects
+ 
+    type Element_Type is ...;      -- Implicit Integer_Literal aspect
+ 
+    type Cursor_Type is ...;
+ 
+    type Reference_Type is ...;
+ 
+    function Container'Constant_Indexing (C : Container; Index : Positive)
+      return Element_Type;
+ 
+    function Container'Constant_Indexing (C : Container; Index : Cursor_Type)
+      return Element_Type;
+ 
+    function Container'Variable_Indexing
+      (C : in out Container; Index : Positive)
+       return Reference_Type;
+ 
+    function Element_Type'Integer_Literal (S : String) return Element_Type;
+ 
+ end My_Container;
+ @end example
+ 
+ @menu
+ * Syntax: Syntax<4>. 
+ * Legality Rules: Legality Rules<4>. 
+ 
+ @end menu
+ 
+ @node Syntax<4>,Legality Rules<4>,,Attribute Subprograms
+ @anchor{gnat_rm/gnat_language_extensions id9}@anchor{48d}
+ @subsubsection Syntax
+ 
+ 
+ @example
+ defining_program_unit_name ::=
+   [parent_unit_name . ]defining_identifier
+ | defining_attribute_subprogram_name
+ 
+ defining_attribute_subprogram_name ::=
+   prefix'attribute_designator
+ @end example
+ 
+ @node Legality Rules<4>,,Syntax<4>,Attribute Subprograms
+ @anchor{gnat_rm/gnat_language_extensions id10}@anchor{48e}
+ @subsubsection Legality Rules
+ 
+ 
+ The prefix of a @code{defining_attribute_subprogram_name} shall be either
+ a @code{direct_name} denoting a type (more properly, a first subtype)
+ declared immediately within the scope where the associated subprogram
+ is declared, or else an attribute name itself whose @code{attribute_designator}
+ is @code{Class} and whose prefix denotes a type subject to the same
+ declaration condition. A @code{defining_program_unit_name} that is
+ a @code{defining_attribute_subprogram_name} may only be used to define
+ the name of a subprogram that is neither a library subprogram nor
+ a subprogram whose body is given by a @code{body_stub} (nor can it be
+ used to define the name of a generic subprogram).
+ 
+ The @code{attribute_designator} given in a @code{defining_attribute_subprogram_name}
+ shall name an aspect that is allowed to designate a subprogram. Specifically,
+ it shall be one of the predefined aspects @code{Constant_Indexing},
+ @code{Variable_Indexing}, @code{Default_Iterator}, @code{Integer_Literal},
+ @code{Real_Literal}, @code{String_Literal}, @code{Put_Image}, @code{Read}, @code{Write},
+ @code{Input}, or @code{Output}, or else one of the implementation-defined aspects
+ @code{Constructor} or @code{Destructor}. (Note that this feature is not supported
+ for aspects that have elements that may designate a subprogram, such as the
+ @code{Aggregate} aspect.)
+ 
+ If the prefix of a @code{defining_attribute_subprogram_name} is an attribute name
+ whose @code{attribute_designator} is @code{Class}, then the @code{attribute_designator}
+ of the @code{defining_attribute_subprogram_name} shall be the name of a stream
+ attribute.
+ 
+ An attribute subprogram for a given type and aspect is subject to
+ the same restrictions as would be imposed on a subprogram denoted by
+ an explicit @code{aspect_specification} or @code{attribute_definition_clause}
+ for that type and aspect. In particular, the profile of the subprogram
+ must satisfy any expected profile defined for the aspect.
+ 
+ If a subprogram is declared using a @code{defining_attribute_subprogram_name},
+ then the type named in the attribute subprogram’s name shall not have
+ an explicit @code{aspect_specification} that specifies the same aspect as
+ that named by the subprogram, nor shall the type derive from an ancestor
+ type that explicitly specifies that aspect. Similarly, an explicit
+ @code{aspect_specification} shall not specify an aspect for a type that
+ is derived from a type for which any attribute subprograms have been
+ declared for the same aspect.
+ 
  @node Security Hardening Features,Obsolescent Features,GNAT language extensions,Top
! @anchor{gnat_rm/security_hardening_features doc}@anchor{48f}@anchor{gnat_rm/security_hardening_features id1}@anchor{490}@anchor{gnat_rm/security_hardening_features security-hardening-features}@anchor{16}
  @chapter Security Hardening Features
  
  
*************** These features are supported only by the
*** 33491,33497 ****
  @end menu
  
  @node Register Scrubbing,Stack Scrubbing,,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features register-scrubbing}@anchor{48e}
  @section Register Scrubbing
  
  
--- 33609,33615 ----
  @end menu
  
  @node Register Scrubbing,Stack Scrubbing,,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features register-scrubbing}@anchor{491}
  @section Register Scrubbing
  
  
*************** programming languages, see @cite{Using t
*** 33527,33533 ****
  @c Stack Scrubbing:
  
  @node Stack Scrubbing,Hardened Conditionals,Register Scrubbing,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features stack-scrubbing}@anchor{48f}
  @section Stack Scrubbing
  
  
--- 33645,33651 ----
  @c Stack Scrubbing:
  
  @node Stack Scrubbing,Hardened Conditionals,Register Scrubbing,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features stack-scrubbing}@anchor{492}
  @section Stack Scrubbing
  
  
*************** Bar_Callable_Ptr.
*** 33671,33677 ****
  @c Hardened Conditionals:
  
  @node Hardened Conditionals,Hardened Booleans,Stack Scrubbing,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features hardened-conditionals}@anchor{490}
  @section Hardened Conditionals
  
  
--- 33789,33795 ----
  @c Hardened Conditionals:
  
  @node Hardened Conditionals,Hardened Booleans,Stack Scrubbing,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features hardened-conditionals}@anchor{493}
  @section Hardened Conditionals
  
  
*************** be used with other programming languages
*** 33761,33767 ****
  @c Hardened Booleans:
  
  @node Hardened Booleans,Control Flow Redundancy,Hardened Conditionals,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features hardened-booleans}@anchor{491}
  @section Hardened Booleans
  
  
--- 33879,33885 ----
  @c Hardened Booleans:
  
  @node Hardened Booleans,Control Flow Redundancy,Hardened Conditionals,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features hardened-booleans}@anchor{494}
  @section Hardened Booleans
  
  
*************** and more details on that attribute, see
*** 33822,33828 ****
  @c Control Flow Redundancy:
  
  @node Control Flow Redundancy,,Hardened Booleans,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features control-flow-redundancy}@anchor{492}
  @section Control Flow Redundancy
  
  
--- 33940,33946 ----
  @c Control Flow Redundancy:
  
  @node Control Flow Redundancy,,Hardened Booleans,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features control-flow-redundancy}@anchor{495}
  @section Control Flow Redundancy
  
  
*************** see @cite{Using the GNU Compiler Collect
*** 33990,33996 ****
  can be used with other programming languages supported by GCC.
  
  @node Obsolescent Features,Compatibility and Porting Guide,Security Hardening Features,Top
! @anchor{gnat_rm/obsolescent_features doc}@anchor{493}@anchor{gnat_rm/obsolescent_features id1}@anchor{494}@anchor{gnat_rm/obsolescent_features obsolescent-features}@anchor{17}
  @chapter Obsolescent Features
  
  
--- 34108,34114 ----
  can be used with other programming languages supported by GCC.
  
  @node Obsolescent Features,Compatibility and Porting Guide,Security Hardening Features,Top
! @anchor{gnat_rm/obsolescent_features doc}@anchor{496}@anchor{gnat_rm/obsolescent_features id1}@anchor{497}@anchor{gnat_rm/obsolescent_features obsolescent-features}@anchor{17}
  @chapter Obsolescent Features
  
  
*************** historical compatibility purposes.
*** 34010,34016 ****
  @end menu
  
  @node PolyORB,pragma No_Run_Time,,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features id2}@anchor{495}@anchor{gnat_rm/obsolescent_features polyorb}@anchor{276}
  @section PolyORB
  
  
--- 34128,34134 ----
  @end menu
  
  @node PolyORB,pragma No_Run_Time,,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features id2}@anchor{498}@anchor{gnat_rm/obsolescent_features polyorb}@anchor{276}
  @section PolyORB
  
  
*************** release 28. After this release, there wi
*** 34019,34025 ****
  product. Contact AdaCore support to get recommendations for replacements.
  
  @node pragma No_Run_Time,pragma Ravenscar,PolyORB,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features id3}@anchor{496}@anchor{gnat_rm/obsolescent_features pragma-no-run-time}@anchor{497}
  @section pragma No_Run_Time
  
  
--- 34137,34143 ----
  product. Contact AdaCore support to get recommendations for replacements.
  
  @node pragma No_Run_Time,pragma Ravenscar,PolyORB,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features id3}@anchor{499}@anchor{gnat_rm/obsolescent_features pragma-no-run-time}@anchor{49a}
  @section pragma No_Run_Time
  
  
*************** preferred usage is to use an appropriate
*** 34032,34038 ****
  includes just those features that are to be made accessible.
  
  @node pragma Ravenscar,pragma Restricted_Run_Time,pragma No_Run_Time,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features id4}@anchor{498}@anchor{gnat_rm/obsolescent_features pragma-ravenscar}@anchor{499}
  @section pragma Ravenscar
  
  
--- 34150,34156 ----
  includes just those features that are to be made accessible.
  
  @node pragma Ravenscar,pragma Restricted_Run_Time,pragma No_Run_Time,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features id4}@anchor{49b}@anchor{gnat_rm/obsolescent_features pragma-ravenscar}@anchor{49c}
  @section pragma Ravenscar
  
  
*************** The pragma @code{Ravenscar} has exactly
*** 34041,34047 ****
  is part of the new Ada 2005 standard.
  
  @node pragma Restricted_Run_Time,pragma Task_Info,pragma Ravenscar,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features id5}@anchor{49a}@anchor{gnat_rm/obsolescent_features pragma-restricted-run-time}@anchor{49b}
  @section pragma Restricted_Run_Time
  
  
--- 34159,34165 ----
  is part of the new Ada 2005 standard.
  
  @node pragma Restricted_Run_Time,pragma Task_Info,pragma Ravenscar,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features id5}@anchor{49d}@anchor{gnat_rm/obsolescent_features pragma-restricted-run-time}@anchor{49e}
  @section pragma Restricted_Run_Time
  
  
*************** preferred since the Ada 2005 pragma @cod
*** 34051,34057 ****
  this kind of implementation dependent addition.
  
  @node pragma Task_Info,package System Task_Info s-tasinf ads,pragma Restricted_Run_Time,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features id6}@anchor{49c}@anchor{gnat_rm/obsolescent_features pragma-task-info}@anchor{49d}
  @section pragma Task_Info
  
  
--- 34169,34175 ----
  this kind of implementation dependent addition.
  
  @node pragma Task_Info,package System Task_Info s-tasinf ads,pragma Restricted_Run_Time,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features id6}@anchor{49f}@anchor{gnat_rm/obsolescent_features pragma-task-info}@anchor{4a0}
  @section pragma Task_Info
  
  
*************** in the spec of package System.Task_Info
*** 34077,34083 ****
  library.
  
  @node package System Task_Info s-tasinf ads,,pragma Task_Info,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features package-system-task-info}@anchor{49e}@anchor{gnat_rm/obsolescent_features package-system-task-info-s-tasinf-ads}@anchor{49f}
  @section package System.Task_Info (@code{s-tasinf.ads})
  
  
--- 34195,34201 ----
  library.
  
  @node package System Task_Info s-tasinf ads,,pragma Task_Info,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features package-system-task-info}@anchor{4a1}@anchor{gnat_rm/obsolescent_features package-system-task-info-s-tasinf-ads}@anchor{4a2}
  @section package System.Task_Info (@code{s-tasinf.ads})
  
  
*************** to support the @code{Task_Info} pragma.
*** 34087,34093 ****
  standard replacement for GNAT’s @code{Task_Info} functionality.
  
  @node Compatibility and Porting Guide,GNU Free Documentation License,Obsolescent Features,Top
! @anchor{gnat_rm/compatibility_and_porting_guide doc}@anchor{4a0}@anchor{gnat_rm/compatibility_and_porting_guide compatibility-and-porting-guide}@anchor{18}@anchor{gnat_rm/compatibility_and_porting_guide id1}@anchor{4a1}
  @chapter Compatibility and Porting Guide
  
  
--- 34205,34211 ----
  standard replacement for GNAT’s @code{Task_Info} functionality.
  
  @node Compatibility and Porting Guide,GNU Free Documentation License,Obsolescent Features,Top
! @anchor{gnat_rm/compatibility_and_porting_guide doc}@anchor{4a3}@anchor{gnat_rm/compatibility_and_porting_guide compatibility-and-porting-guide}@anchor{18}@anchor{gnat_rm/compatibility_and_porting_guide id1}@anchor{4a4}
  @chapter Compatibility and Porting Guide
  
  
*************** applications developed in other Ada envi
*** 34109,34115 ****
  @end menu
  
  @node Writing Portable Fixed-Point Declarations,Compatibility with Ada 83,,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide id2}@anchor{4a2}@anchor{gnat_rm/compatibility_and_porting_guide writing-portable-fixed-point-declarations}@anchor{4a3}
  @section Writing Portable Fixed-Point Declarations
  
  
--- 34227,34233 ----
  @end menu
  
  @node Writing Portable Fixed-Point Declarations,Compatibility with Ada 83,,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide id2}@anchor{4a5}@anchor{gnat_rm/compatibility_and_porting_guide writing-portable-fixed-point-declarations}@anchor{4a6}
  @section Writing Portable Fixed-Point Declarations
  
  
*************** If you follow this scheme you will be gu
*** 34231,34237 ****
  types will be portable.
  
  @node Compatibility with Ada 83,Compatibility between Ada 95 and Ada 2005,Writing Portable Fixed-Point Declarations,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-ada-83}@anchor{4a4}@anchor{gnat_rm/compatibility_and_porting_guide id3}@anchor{4a5}
  @section Compatibility with Ada 83
  
  
--- 34349,34355 ----
  types will be portable.
  
  @node Compatibility with Ada 83,Compatibility between Ada 95 and Ada 2005,Writing Portable Fixed-Point Declarations,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-ada-83}@anchor{4a7}@anchor{gnat_rm/compatibility_and_porting_guide id3}@anchor{4a8}
  @section Compatibility with Ada 83
  
  
*************** following subsections treat the most lik
*** 34259,34265 ****
  @end menu
  
  @node Legal Ada 83 programs that are illegal in Ada 95,More deterministic semantics,,Compatibility with Ada 83
! @anchor{gnat_rm/compatibility_and_porting_guide id4}@anchor{4a6}@anchor{gnat_rm/compatibility_and_porting_guide legal-ada-83-programs-that-are-illegal-in-ada-95}@anchor{4a7}
  @subsection Legal Ada 83 programs that are illegal in Ada 95
  
  
--- 34377,34383 ----
  @end menu
  
  @node Legal Ada 83 programs that are illegal in Ada 95,More deterministic semantics,,Compatibility with Ada 83
! @anchor{gnat_rm/compatibility_and_porting_guide id4}@anchor{4a9}@anchor{gnat_rm/compatibility_and_porting_guide legal-ada-83-programs-that-are-illegal-in-ada-95}@anchor{4aa}
  @subsection Legal Ada 83 programs that are illegal in Ada 95
  
  
*************** the fix is usually simply to add the @co
*** 34359,34365 ****
  @end itemize
  
  @node More deterministic semantics,Changed semantics,Legal Ada 83 programs that are illegal in Ada 95,Compatibility with Ada 83
! @anchor{gnat_rm/compatibility_and_porting_guide id5}@anchor{4a8}@anchor{gnat_rm/compatibility_and_porting_guide more-deterministic-semantics}@anchor{4a9}
  @subsection More deterministic semantics
  
  
--- 34477,34483 ----
  @end itemize
  
  @node More deterministic semantics,Changed semantics,Legal Ada 83 programs that are illegal in Ada 95,Compatibility with Ada 83
! @anchor{gnat_rm/compatibility_and_porting_guide id5}@anchor{4ab}@anchor{gnat_rm/compatibility_and_porting_guide more-deterministic-semantics}@anchor{4ac}
  @subsection More deterministic semantics
  
  
*************** which open select branches are executed.
*** 34387,34393 ****
  @end itemize
  
  @node Changed semantics,Other language compatibility issues,More deterministic semantics,Compatibility with Ada 83
! @anchor{gnat_rm/compatibility_and_porting_guide changed-semantics}@anchor{4aa}@anchor{gnat_rm/compatibility_and_porting_guide id6}@anchor{4ab}
  @subsection Changed semantics
  
  
--- 34505,34511 ----
  @end itemize
  
  @node Changed semantics,Other language compatibility issues,More deterministic semantics,Compatibility with Ada 83
! @anchor{gnat_rm/compatibility_and_porting_guide changed-semantics}@anchor{4ad}@anchor{gnat_rm/compatibility_and_porting_guide id6}@anchor{4ae}
  @subsection Changed semantics
  
  
*************** covers only the restricted range.
*** 34429,34435 ****
  @end itemize
  
  @node Other language compatibility issues,,Changed semantics,Compatibility with Ada 83
! @anchor{gnat_rm/compatibility_and_porting_guide id7}@anchor{4ac}@anchor{gnat_rm/compatibility_and_porting_guide other-language-compatibility-issues}@anchor{4ad}
  @subsection Other language compatibility issues
  
  
--- 34547,34553 ----
  @end itemize
  
  @node Other language compatibility issues,,Changed semantics,Compatibility with Ada 83
! @anchor{gnat_rm/compatibility_and_porting_guide id7}@anchor{4af}@anchor{gnat_rm/compatibility_and_porting_guide other-language-compatibility-issues}@anchor{4b0}
  @subsection Other language compatibility issues
  
  
*************** include @code{pragma Interface} and the
*** 34462,34468 ****
  @end itemize
  
  @node Compatibility between Ada 95 and Ada 2005,Implementation-dependent characteristics,Compatibility with Ada 83,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide compatibility-between-ada-95-and-ada-2005}@anchor{4ae}@anchor{gnat_rm/compatibility_and_porting_guide id8}@anchor{4af}
  @section Compatibility between Ada 95 and Ada 2005
  
  
--- 34580,34586 ----
  @end itemize
  
  @node Compatibility between Ada 95 and Ada 2005,Implementation-dependent characteristics,Compatibility with Ada 83,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide compatibility-between-ada-95-and-ada-2005}@anchor{4b1}@anchor{gnat_rm/compatibility_and_porting_guide id8}@anchor{4b2}
  @section Compatibility between Ada 95 and Ada 2005
  
  
*************** can declare a function returning a value
*** 34534,34540 ****
  @end itemize
  
  @node Implementation-dependent characteristics,Compatibility with Other Ada Systems,Compatibility between Ada 95 and Ada 2005,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide id9}@anchor{4b0}@anchor{gnat_rm/compatibility_and_porting_guide implementation-dependent-characteristics}@anchor{4b1}
  @section Implementation-dependent characteristics
  
  
--- 34652,34658 ----
  @end itemize
  
  @node Implementation-dependent characteristics,Compatibility with Other Ada Systems,Compatibility between Ada 95 and Ada 2005,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide id9}@anchor{4b3}@anchor{gnat_rm/compatibility_and_porting_guide implementation-dependent-characteristics}@anchor{4b4}
  @section Implementation-dependent characteristics
  
  
*************** transition from certain Ada 83 compilers
*** 34557,34563 ****
  @end menu
  
  @node Implementation-defined pragmas,Implementation-defined attributes,,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide id10}@anchor{4b2}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-pragmas}@anchor{4b3}
  @subsection Implementation-defined pragmas
  
  
--- 34675,34681 ----
  @end menu
  
  @node Implementation-defined pragmas,Implementation-defined attributes,,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide id10}@anchor{4b5}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-pragmas}@anchor{4b6}
  @subsection Implementation-defined pragmas
  
  
*************** avoiding compiler rejection of units tha
*** 34579,34585 ****
  relevant in a GNAT context and hence are not otherwise implemented.
  
  @node Implementation-defined attributes,Libraries,Implementation-defined pragmas,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide id11}@anchor{4b4}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-attributes}@anchor{4b5}
  @subsection Implementation-defined attributes
  
  
--- 34697,34703 ----
  relevant in a GNAT context and hence are not otherwise implemented.
  
  @node Implementation-defined attributes,Libraries,Implementation-defined pragmas,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide id11}@anchor{4b7}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-attributes}@anchor{4b8}
  @subsection Implementation-defined attributes
  
  
*************** Ada 83, GNAT supplies the attributes @co
*** 34593,34599 ****
  @code{Type_Class}.
  
  @node Libraries,Elaboration order,Implementation-defined attributes,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide id12}@anchor{4b6}@anchor{gnat_rm/compatibility_and_porting_guide libraries}@anchor{4b7}
  @subsection Libraries
  
  
--- 34711,34717 ----
  @code{Type_Class}.
  
  @node Libraries,Elaboration order,Implementation-defined attributes,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide id12}@anchor{4b9}@anchor{gnat_rm/compatibility_and_porting_guide libraries}@anchor{4ba}
  @subsection Libraries
  
  
*************** be preferable to retrofit the applicatio
*** 34622,34628 ****
  @end itemize
  
  @node Elaboration order,Target-specific aspects,Libraries,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide elaboration-order}@anchor{4b8}@anchor{gnat_rm/compatibility_and_porting_guide id13}@anchor{4b9}
  @subsection Elaboration order
  
  
--- 34740,34746 ----
  @end itemize
  
  @node Elaboration order,Target-specific aspects,Libraries,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide elaboration-order}@anchor{4bb}@anchor{gnat_rm/compatibility_and_porting_guide id13}@anchor{4bc}
  @subsection Elaboration order
  
  
*************** pragmas either globally (as an effect of
*** 34658,34664 ****
  @end itemize
  
  @node Target-specific aspects,,Elaboration order,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide id14}@anchor{4ba}@anchor{gnat_rm/compatibility_and_porting_guide target-specific-aspects}@anchor{4bb}
  @subsection Target-specific aspects
  
  
--- 34776,34782 ----
  @end itemize
  
  @node Target-specific aspects,,Elaboration order,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide id14}@anchor{4bd}@anchor{gnat_rm/compatibility_and_porting_guide target-specific-aspects}@anchor{4be}
  @subsection Target-specific aspects
  
  
*************** on the robustness of the original design
*** 34671,34680 ****
  Ada 2005, Ada 2012, and Ada 2022) are sometimes
  incompatible with typical Ada 83 compiler practices regarding implicit
  packing, the meaning of the Size attribute, and the size of access values.
! GNAT’s approach to these issues is described in @ref{4bc,,Representation Clauses}.
  
  @node Compatibility with Other Ada Systems,Representation Clauses,Implementation-dependent characteristics,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-other-ada-systems}@anchor{4bd}@anchor{gnat_rm/compatibility_and_porting_guide id15}@anchor{4be}
  @section Compatibility with Other Ada Systems
  
  
--- 34789,34798 ----
  Ada 2005, Ada 2012, and Ada 2022) are sometimes
  incompatible with typical Ada 83 compiler practices regarding implicit
  packing, the meaning of the Size attribute, and the size of access values.
! GNAT’s approach to these issues is described in @ref{4bf,,Representation Clauses}.
  
  @node Compatibility with Other Ada Systems,Representation Clauses,Implementation-dependent characteristics,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-other-ada-systems}@anchor{4c0}@anchor{gnat_rm/compatibility_and_porting_guide id15}@anchor{4c1}
  @section Compatibility with Other Ada Systems
  
  
*************** far beyond this minimal set, as describe
*** 34717,34723 ****
  @end itemize
  
  @node Representation Clauses,Compatibility with HP Ada 83,Compatibility with Other Ada Systems,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide id16}@anchor{4bf}@anchor{gnat_rm/compatibility_and_porting_guide representation-clauses}@anchor{4bc}
  @section Representation Clauses
  
  
--- 34835,34841 ----
  @end itemize
  
  @node Representation Clauses,Compatibility with HP Ada 83,Compatibility with Other Ada Systems,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide id16}@anchor{4c2}@anchor{gnat_rm/compatibility_and_porting_guide representation-clauses}@anchor{4bf}
  @section Representation Clauses
  
  
*************** with thin pointers.
*** 34810,34816 ****
  @end itemize
  
  @node Compatibility with HP Ada 83,,Representation Clauses,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-hp-ada-83}@anchor{4c0}@anchor{gnat_rm/compatibility_and_porting_guide id17}@anchor{4c1}
  @section Compatibility with HP Ada 83
  
  
--- 34928,34934 ----
  @end itemize
  
  @node Compatibility with HP Ada 83,,Representation Clauses,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-hp-ada-83}@anchor{4c3}@anchor{gnat_rm/compatibility_and_porting_guide id17}@anchor{4c4}
  @section Compatibility with HP Ada 83
  
  
*************** extension of package System.
*** 34840,34846 ****
  @end itemize
  
  @node GNU Free Documentation License,Index,Compatibility and Porting Guide,Top
! @anchor{share/gnu_free_documentation_license doc}@anchor{4c2}@anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{4c3}
  @chapter GNU Free Documentation License
  
  
--- 34958,34964 ----
  @end itemize
  
  @node GNU Free Documentation License,Index,Compatibility and Porting Guide,Top
! @anchor{share/gnu_free_documentation_license doc}@anchor{4c5}@anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{4c6}
  @chapter GNU Free Documentation License
  
  
diff -Nrcpad gcc-17-20260628/gcc/ada/init.c gcc-17-20260705/gcc/ada/init.c
*** gcc-17-20260628/gcc/ada/init.c	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/ada/init.c	Sun Jul  5 22:32:06 2026
*************** __gnat_install_handler (void)
*** 2943,2954 ****
    act.sa_flags = SA_NODEFER | SA_RESTART | SA_SIGINFO;
    sigemptyset (&act.sa_mask);
  
!   sigaction (SIGABRT, &act, NULL);
!   sigaction (SIGFPE,  &act, NULL);
!   sigaction (SIGILL,  &act, NULL);
!   sigaction (SIGBUS,  &act, NULL);
    act.sa_flags |= SA_ONSTACK;
!   sigaction (SIGSEGV, &act, NULL);
  
    __gnat_handler_installed = 1;
  }
--- 2943,2963 ----
    act.sa_flags = SA_NODEFER | SA_RESTART | SA_SIGINFO;
    sigemptyset (&act.sa_mask);
  
!   if (__gnat_get_interrupt_state (SIGABRT) != 's')
!     sigaction (SIGABRT, &act, NULL);
! 
!   if (__gnat_get_interrupt_state (SIGFPE) != 's')
!     sigaction (SIGFPE,  &act, NULL);
! 
!   if (__gnat_get_interrupt_state (SIGILL) != 's')
!     sigaction (SIGILL,  &act, NULL);
! 
!   if (__gnat_get_interrupt_state (SIGBUS) != 's')
!     sigaction (SIGBUS,  &act, NULL);
! 
    act.sa_flags |= SA_ONSTACK;
!   if (__gnat_get_interrupt_state (SIGSEGV) != 's')
!     sigaction (SIGSEGV, &act, NULL);
  
    __gnat_handler_installed = 1;
  }
diff -Nrcpad gcc-17-20260628/gcc/ada/libgnat/a-comlin.adb gcc-17-20260705/gcc/ada/libgnat/a-comlin.adb
*** gcc-17-20260628/gcc/ada/libgnat/a-comlin.adb	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/ada/libgnat/a-comlin.adb	Sun Jul  5 22:32:06 2026
***************
*** 31,37 ****
  
  with System; use System;
  
! package body Ada.Command_Line is
  
     function Arg_Count return Natural;
     pragma Import (C, Arg_Count, "__gnat_arg_count");
--- 31,39 ----
  
  with System; use System;
  
! package body Ada.Command_Line with
!    Refined_State => (Program_Exit_Status => null)
! is
  
     function Arg_Count return Natural;
     pragma Import (C, Arg_Count, "__gnat_arg_count");
diff -Nrcpad gcc-17-20260628/gcc/ada/libgnat/a-comlin.ads gcc-17-20260705/gcc/ada/libgnat/a-comlin.ads
*** gcc-17-20260628/gcc/ada/libgnat/a-comlin.ads	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/ada/libgnat/a-comlin.ads	Sun Jul  5 22:32:06 2026
***************
*** 37,46 ****
  --  command line arguments and to set the exit status of the program as defined
  --  by ARM A.15.
  
! package Ada.Command_Line is
     pragma Preelaborate;
  
!    function Argument_Count return Natural;
     --  If the external execution environment supports passing arguments to a
     --  program, then Argument_Count returns the number of arguments passed to
     --  the program invoking the function. Otherwise it return 0.
--- 37,50 ----
  --  command line arguments and to set the exit status of the program as defined
  --  by ARM A.15.
  
! package Ada.Command_Line with
!    Abstract_State => (Program_Exit_Status),
!    Initializes    => (Program_Exit_Status)
! is
     pragma Preelaborate;
  
!    function Argument_Count return Natural with
!       Global => null;
     --  If the external execution environment supports passing arguments to a
     --  program, then Argument_Count returns the number of arguments passed to
     --  the program invoking the function. Otherwise it return 0.
*************** package Ada.Command_Line is
*** 54,60 ****
     --  SPARK does not yet support raise expressions.
  
     function Argument (Number : Positive) return String with
!       Pre => Number <= Argument_Count;
     --  If the external execution environment supports passing arguments to
     --  a program, then Argument returns an implementation-defined value
     --  corresponding to the argument at relative position Number. If Number
--- 58,65 ----
     --  SPARK does not yet support raise expressions.
  
     function Argument (Number : Positive) return String with
!       Pre    => Number <= Argument_Count,
!       Global => null;
     --  If the external execution environment supports passing arguments to
     --  a program, then Argument returns an implementation-defined value
     --  corresponding to the argument at relative position Number. If Number
*************** package Ada.Command_Line is
*** 63,69 ****
     --
     --  in GNAT: Corresponds to argv [n] (for n > 0) in C.
  
!    function Command_Name return String;
     --  If the external execution environment supports passing arguments to
     --  a program, then Command_Name returns an implementation-defined value
     --  corresponding to the name of the command invoking the program.
--- 68,75 ----
     --
     --  in GNAT: Corresponds to argv [n] (for n > 0) in C.
  
!    function Command_Name return String with
!       Global => null;
     --  If the external execution environment supports passing arguments to
     --  a program, then Command_Name returns an implementation-defined value
     --  corresponding to the name of the command invoking the program.
*************** package Ada.Command_Line is
*** 76,82 ****
     Success : constant Exit_Status;
     Failure : constant Exit_Status;
  
!    procedure Set_Exit_Status (Code : Exit_Status);
  
     ------------------------------------
     -- Note on Interface Requirements --
--- 82,89 ----
     Success : constant Exit_Status;
     Failure : constant Exit_Status;
  
!    procedure Set_Exit_Status (Code : Exit_Status) with
!       Global => (Output => Program_Exit_Status);
  
     ------------------------------------
     -- Note on Interface Requirements --
diff -Nrcpad gcc-17-20260628/gcc/ada/libgnat/a-textio.ads gcc-17-20260705/gcc/ada/libgnat/a-textio.ads
*** gcc-17-20260628/gcc/ada/libgnat/a-textio.ads	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/ada/libgnat/a-textio.ads	Sun Jul  5 22:32:06 2026
*************** is
*** 414,427 ****
     procedure Get (File : File_Type; Item : out Character) with
       Pre               => Is_Open (File) and then Mode (File) = In_File,
       Global            => (In_Out => File_System),
!      Exceptional_Cases => (End_Error => Standard.True);
  
     procedure Get (Item : out Character) with
       Post              =>
         Line_Length'Old = Line_Length
         and Page_Length'Old = Page_Length,
       Global            => (In_Out => File_System),
!      Exceptional_Cases => (End_Error => Standard.True);
  
     procedure Put (File : File_Type; Item : Character) with
       Pre    => Is_Open (File) and then Mode (File) /= In_File,
--- 414,429 ----
     procedure Get (File : File_Type; Item : out Character) with
       Pre               => Is_Open (File) and then Mode (File) = In_File,
       Global            => (In_Out => File_System),
!      Exceptional_Cases => (End_Error  => Standard.True,
!                            Data_Error => Standard.True);
  
     procedure Get (Item : out Character) with
       Post              =>
         Line_Length'Old = Line_Length
         and Page_Length'Old = Page_Length,
       Global            => (In_Out => File_System),
!      Exceptional_Cases => (End_Error  => Standard.True,
!                            Data_Error => Standard.True);
  
     procedure Put (File : File_Type; Item : Character) with
       Pre    => Is_Open (File) and then Mode (File) /= In_File,
*************** is
*** 441,457 ****
        Item        : out Character;
        End_Of_Line : out Boolean)
     with
!      Pre    => Is_Open (File) and then Mode (File) = In_File,
!      Global => (Input => File_System);
  
     procedure Look_Ahead
       (Item        : out Character;
        End_Of_Line : out Boolean)
     with
!      Post   =>
         Line_Length'Old = Line_Length
         and Page_Length'Old = Page_Length,
!      Global => (Input => File_System);
  
     procedure Get_Immediate
       (File : File_Type;
--- 443,461 ----
        Item        : out Character;
        End_Of_Line : out Boolean)
     with
!      Pre               => Is_Open (File) and then Mode (File) = In_File,
!      Global            => (Input => File_System),
!      Exceptional_Cases => (Data_Error => Standard.True);
  
     procedure Look_Ahead
       (Item        : out Character;
        End_Of_Line : out Boolean)
     with
!      Post              =>
         Line_Length'Old = Line_Length
         and Page_Length'Old = Page_Length,
!      Global            => (Input => File_System),
!      Exceptional_Cases => (Data_Error => Standard.True);
  
     procedure Get_Immediate
       (File : File_Type;
*************** is
*** 459,465 ****
     with
       Pre               => Is_Open (File) and then Mode (File) = In_File,
       Global            => (In_Out => File_System),
!      Exceptional_Cases => (End_Error => Standard.True);
  
     procedure Get_Immediate
       (Item : out Character)
--- 463,470 ----
     with
       Pre               => Is_Open (File) and then Mode (File) = In_File,
       Global            => (In_Out => File_System),
!      Exceptional_Cases => (End_Error  => Standard.True,
!                            Data_Error => Standard.True);
  
     procedure Get_Immediate
       (Item : out Character)
*************** is
*** 468,474 ****
         Line_Length'Old = Line_Length
         and Page_Length'Old = Page_Length,
       Global            => (In_Out => File_System),
!      Exceptional_Cases => (End_Error => Standard.True);
  
     procedure Get_Immediate
       (File      : File_Type;
--- 473,480 ----
         Line_Length'Old = Line_Length
         and Page_Length'Old = Page_Length,
       Global            => (In_Out => File_System),
!      Exceptional_Cases => (End_Error  => Standard.True,
!                            Data_Error => Standard.True);
  
     procedure Get_Immediate
       (File      : File_Type;
*************** is
*** 477,483 ****
     with
       Pre               => Is_Open (File) and then Mode (File) = In_File,
       Global            => (In_Out => File_System),
!      Exceptional_Cases => (End_Error => Standard.True);
  
     procedure Get_Immediate
       (Item      : out Character;
--- 483,490 ----
     with
       Pre               => Is_Open (File) and then Mode (File) = In_File,
       Global            => (In_Out => File_System),
!      Exceptional_Cases => (End_Error  => Standard.True,
!                            Data_Error => Standard.True);
  
     procedure Get_Immediate
       (Item      : out Character;
*************** is
*** 487,493 ****
         Line_Length'Old = Line_Length
         and Page_Length'Old = Page_Length,
       Global            => (In_Out => File_System),
!      Exceptional_Cases => (End_Error => Standard.True);
  
     -------------------------
     -- String Input-Output --
--- 494,501 ----
         Line_Length'Old = Line_Length
         and Page_Length'Old = Page_Length,
       Global            => (In_Out => File_System),
!      Exceptional_Cases => (End_Error  => Standard.True,
!                            Data_Error => Standard.True);
  
     -------------------------
     -- String Input-Output --
*************** is
*** 496,509 ****
     procedure Get (File : File_Type; Item : out String) with
       Pre               => Is_Open (File) and then Mode (File) = In_File,
       Global            => (In_Out => File_System),
!      Exceptional_Cases => (End_Error => Item'Length'Old > 0);
  
     procedure Get (Item : out String) with
       Post              =>
         Line_Length'Old = Line_Length
         and Page_Length'Old = Page_Length,
       Global            => (In_Out => File_System),
!      Exceptional_Cases => (End_Error => Item'Length'Old > 0);
  
     procedure Put (File : File_Type; Item : String) with
       Pre    => Is_Open (File) and then Mode (File) /= In_File,
--- 504,519 ----
     procedure Get (File : File_Type; Item : out String) with
       Pre               => Is_Open (File) and then Mode (File) = In_File,
       Global            => (In_Out => File_System),
!      Exceptional_Cases => (End_Error  => Item'Length'Old > 0,
!                            Data_Error => Item'Length'Old > 0);
  
     procedure Get (Item : out String) with
       Post              =>
         Line_Length'Old = Line_Length
         and Page_Length'Old = Page_Length,
       Global            => (In_Out => File_System),
!      Exceptional_Cases => (End_Error  => Item'Length'Old > 0,
!                            Data_Error => Item'Length'Old > 0);
  
     procedure Put (File : File_Type; Item : String) with
       Pre    => Is_Open (File) and then Mode (File) /= In_File,
*************** is
*** 530,536 ****
          else Last = Item'First - 1)
         and (for all I in Item'First .. Last => Item (I)'Initialized),
       Global                 => (In_Out => File_System),
!      Exceptional_Cases      => (End_Error => Item'Length'Old > 0);
  
     procedure Get_Line
       (Item : out String;
--- 540,547 ----
          else Last = Item'First - 1)
         and (for all I in Item'First .. Last => Item (I)'Initialized),
       Global                 => (In_Out => File_System),
!      Exceptional_Cases      => (End_Error  => Item'Length'Old > 0,
!                                 Data_Error => Item'Length'Old > 0);
  
     procedure Get_Line
       (Item : out String;
*************** is
*** 544,550 ****
              else Last = Item'First - 1)
         and (for all I in Item'First .. Last => Item (I)'Initialized),
       Global                => (In_Out => File_System),
!      Exceptional_Cases     => (End_Error => Item'Length'Old > 0);
  
     function Get_Line (File : File_Type) return String with SPARK_Mode => Off;
     pragma Ada_05 (Get_Line);
--- 555,562 ----
              else Last = Item'First - 1)
         and (for all I in Item'First .. Last => Item (I)'Initialized),
       Global                => (In_Out => File_System),
!      Exceptional_Cases     => (End_Error  => Item'Length'Old > 0,
!                                Data_Error => Item'Length'Old > 0);
  
     function Get_Line (File : File_Type) return String with SPARK_Mode => Off;
     pragma Ada_05 (Get_Line);
diff -Nrcpad gcc-17-20260628/gcc/ada/link.c gcc-17-20260705/gcc/ada/link.c
*** gcc-17-20260628/gcc/ada/link.c	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/ada/link.c	Sun Jul  5 22:32:06 2026
*************** const char *__gnat_object_library_extens
*** 160,168 ****
  unsigned char __gnat_separate_run_path_options = 0;
  const char *__gnat_default_libgcc_subdir = "lib";
  
! #elif (HAVE_GNU_LD)
! /*  These are the settings for all systems that use gnu ld. GNU style response
!     file is supported, the shared library default is STATIC.  */
  
  const char *__gnat_object_file_option = "-Wl,@";
  const char *__gnat_run_path_option = "";
--- 160,168 ----
  unsigned char __gnat_separate_run_path_options = 0;
  const char *__gnat_default_libgcc_subdir = "lib";
  
! #elif (HAVE_LD_AT_FILE)
! /*  These are the settings for all other systems that support GNU style
!     response files.  The shared library default is STATIC.  */
  
  const char *__gnat_object_file_option = "-Wl,@";
  const char *__gnat_run_path_option = "";
*************** const char *__gnat_object_library_extens
*** 174,190 ****
  unsigned char __gnat_separate_run_path_options = 0;
  const char *__gnat_default_libgcc_subdir = "lib";
  
- #elif defined (VMS)
- const char *__gnat_object_file_option = "";
- const char *__gnat_run_path_option = "";
- char __gnat_shared_libgnat_default = STATIC;
- char __gnat_shared_libgcc_default = STATIC;
- int __gnat_link_max = 2147483647;
- unsigned char __gnat_objlist_file_supported = 0;
- const char *__gnat_object_library_extension = ".olb";
- unsigned char __gnat_separate_run_path_options = 0;
- const char *__gnat_default_libgcc_subdir = "lib";
- 
  #elif defined (__sun__)
  const char *__gnat_object_file_option = "";
  const char *__gnat_run_path_option = "-Wl,-R";
--- 174,179 ----
*************** const char *__gnat_default_libgcc_subdir
*** 202,218 ****
  const char *__gnat_default_libgcc_subdir = "lib";
  #endif
  
- #elif defined (__svr4__) && defined (__i386__)
- const char *__gnat_object_file_option = "";
- const char *__gnat_run_path_option = "";
- char __gnat_shared_libgnat_default = STATIC;
- char __gnat_shared_libgcc_default = STATIC;
- int __gnat_link_max = 2147483647;
- unsigned char __gnat_objlist_file_supported = 0;
- const char *__gnat_object_library_extension = ".a";
- unsigned char __gnat_separate_run_path_options = 0;
- const char *__gnat_default_libgcc_subdir = "lib";
- 
  #else
  
  /*  These are the default settings for all other systems. No response file
--- 191,196 ----
diff -Nrcpad gcc-17-20260628/gcc/ada/par-ch13.adb gcc-17-20260705/gcc/ada/par-ch13.adb
*** gcc-17-20260628/gcc/ada/par-ch13.adb	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/ada/par-ch13.adb	Sun Jul  5 22:32:06 2026
*************** package body Ch13 is
*** 36,42 ****
  
     function P_Component_Clause return Node_Id;
     function P_Mod_Clause return Node_Id;
-    function P_Modifies_Specification return Node_Id;
  
     -----------------------------------
     -- Aspect_Specifications_Present --
--- 36,41 ----
diff -Nrcpad gcc-17-20260628/gcc/ada/par-ch2.adb gcc-17-20260705/gcc/ada/par-ch2.adb
*** gcc-17-20260628/gcc/ada/par-ch2.adb	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/ada/par-ch2.adb	Sun Jul  5 22:32:06 2026
*************** package body Ch2 is
*** 403,413 ****
           loop
              Arg_Count := Arg_Count + 1;
  
!             Scan_Pragma_Argument_Association
!               (Identifier_Seen   => Identifier_Seen,
!                Association       => Assoc_Node,
!                Reserved_Words_OK =>
!                  Prag_Name in Name_Restriction_Warnings | Name_Restrictions);
  
              if Arg_Count = 2 and then Import_Check_Required then
                 --  Here is where we cancel the SIS active status if this pragma
--- 403,423 ----
           loop
              Arg_Count := Arg_Count + 1;
  
!             --  Syntax of the Modifies contract requires custom parsing
! 
!             if Chars (Ident_Node) = Name_Modifies then
!                Assoc_Node :=
!                  New_Node (N_Pragma_Argument_Association, Token_Ptr);
!                Set_Chars (Assoc_Node, No_Name);
!                Set_Expression (Assoc_Node, Ch13.P_Modifies_Specification);
!             else
!                Scan_Pragma_Argument_Association
!                  (Identifier_Seen   => Identifier_Seen,
!                   Association       => Assoc_Node,
!                   Reserved_Words_OK =>
!                     Prag_Name in Name_Restriction_Warnings
!                                | Name_Restrictions);
!             end if;
  
              if Arg_Count = 2 and then Import_Check_Required then
                 --  Here is where we cancel the SIS active status if this pragma
diff -Nrcpad gcc-17-20260628/gcc/ada/par-ch4.adb gcc-17-20260705/gcc/ada/par-ch4.adb
*** gcc-17-20260628/gcc/ada/par-ch4.adb	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/ada/par-ch4.adb	Sun Jul  5 22:32:06 2026
*************** package body Ch4 is
*** 35,57 ****
     --  Attributes that cannot have arguments
  
     Is_Parameterless_Attribute : constant Attribute_Set :=
!      (Attribute_Base         |
!       Attribute_Body_Version |
!       Attribute_Class        |
!       Attribute_External_Tag |
!       Attribute_Img          |
!       Attribute_Loop_Entry   |
!       Attribute_Old          |
!       Attribute_Result       |
!       Attribute_Stub_Type    |
!       Attribute_Version      |
!       Attribute_Type_Key     => True,
!       others                 => False);
!    --  This map contains True for parameterless attributes that return a string
!    --  or a type. For those attributes, a left parenthesis after the attribute
!    --  should not be analyzed as the beginning of a parameters list because it
!    --  may denote a slice operation (X'Img (1 .. 2)) or a type conversion
!    --  (X'Class (Y)).
  
     --  Note: Loop_Entry is in this list because, although it can take an
     --  optional argument (the loop name), we can't distinguish that at parse
--- 35,67 ----
     --  Attributes that cannot have arguments
  
     Is_Parameterless_Attribute : constant Attribute_Set :=
!      (Attribute_Base              |
!       Attribute_Body_Version      |
!       Attribute_Class             |
!       Attribute_Constant_Indexing |
!       Attribute_Constructor       |
!       Attribute_Default_Iterator  |
!       Attribute_Destructor        |
!       Attribute_External_Tag      |
!       Attribute_Img               |
!       Attribute_Integer_Literal   |
!       Attribute_Loop_Entry        |
!       Attribute_Old               |
!       Attribute_Real_Literal      |
!       Attribute_Result            |
!       Attribute_String_Literal    |
!       Attribute_Stub_Type         |
!       Attribute_Type_Key          |
!       Attribute_Variable_Indexing |
!       Attribute_Version           => True,
!       others                      => False);
!    --  This map contains True for parameterless attributes that return a value
!    --  or a type or correspond to subprogram-valued aspects. For those, a left
!    --  parenthesis after the attribute should not be analyzed as the beginning
!    --  of an arguments list because it may denote an indexing, slice operation
!    --  (such as X'Img (1 .. 2)), type conversion (such as X'Class (Y)), or
!    --  be the actual parameters for a subprogram call (such as for generalized
!    --  indexing).
  
     --  Note: Loop_Entry is in this list because, although it can take an
     --  optional argument (the loop name), we can't distinguish that at parse
diff -Nrcpad gcc-17-20260628/gcc/ada/par-ch6.adb gcc-17-20260705/gcc/ada/par-ch6.adb
*** gcc-17-20260628/gcc/ada/par-ch6.adb	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/ada/par-ch6.adb	Sun Jul  5 22:32:06 2026
*************** package body Ch6 is
*** 616,621 ****
--- 616,623 ----
              Scan; -- past RENAMES
              Set_Name (Rename_Node, P_Name);
              Set_Specification (Rename_Node, Specification_Node);
+             Rewrite_Entity_If_Direct_Attribute_Def
+               (Name_Node, Specification_Node);
              P_Aspect_Specifications (Rename_Node, Semicolon => True);
              TF_Semicolon;
              Pop_Scope_Stack;
*************** package body Ch6 is
*** 744,749 ****
--- 746,753 ----
              Stub_Node :=
                New_Node (N_Subprogram_Body_Stub, Sloc (Specification_Node));
              Set_Specification (Stub_Node, Specification_Node);
+             Rewrite_Entity_If_Direct_Attribute_Def
+               (Name_Node, Specification_Node);
  
              if Is_Non_Empty_List (Aspects) then
                 Error_Msg
diff -Nrcpad gcc-17-20260628/gcc/ada/par-prag.adb gcc-17-20260705/gcc/ada/par-prag.adb
*** gcc-17-20260628/gcc/ada/par-prag.adb	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/ada/par-prag.adb	Sun Jul  5 22:32:06 2026
*************** begin
*** 1507,1513 ****
           | Pragma_Max_Entry_Queue_Length
           | Pragma_Max_Queue_Length
           | Pragma_Memory_Size
!          | Pragma_Modifies  --  ??? this pragma needs custom parsing
           | Pragma_No_Body
           | Pragma_No_Caching
           | Pragma_No_Component_Reordering
--- 1507,1513 ----
           | Pragma_Max_Entry_Queue_Length
           | Pragma_Max_Queue_Length
           | Pragma_Memory_Size
!          | Pragma_Modifies
           | Pragma_No_Body
           | Pragma_No_Caching
           | Pragma_No_Component_Reordering
diff -Nrcpad gcc-17-20260628/gcc/ada/par.adb gcc-17-20260705/gcc/ada/par.adb
*** gcc-17-20260628/gcc/ada/par.adb	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/ada/par.adb	Sun Jul  5 22:32:06 2026
*************** function Par (Configuration_Pragmas : Bo
*** 1086,1091 ****
--- 1086,1095 ----
        --  identifier or a selected component). The current token is an
        --  apostrophe and the following token is either a left paren or
        --  RANGE (the latter being an error to be caught by P_Code_Statement.
+ 
+       function P_Modifies_Specification return Node_Id;
+       --  Parse a Modifies contract specification, which is also allowed to
+       --  appear as a pragma for compatibility with old versions of Ada.
     end Ch13;
  
     --  Note: the parsing for annexe J features (i.e. obsolescent features)
diff -Nrcpad gcc-17-20260628/gcc/ada/sem_attr.adb gcc-17-20260705/gcc/ada/sem_attr.adb
*** gcc-17-20260628/gcc/ada/sem_attr.adb	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/ada/sem_attr.adb	Sun Jul  5 22:32:06 2026
*************** package body Sem_Attr is
*** 467,472 ****
--- 467,488 ----
        --  second message Msg_Cont is useful to issue a continuation message
        --  before raising Bad_Attribute.
  
+       function Is_Reference_To_Attribute_Subp_Name
+         (N : Node_Id) return Boolean is
+           (No (Expressions (N))
+             and then Nkind (Parent (N)) = N_Selected_Component
+             and then Prefix (Parent (N)) = N);
+       --  Returns True if N, which is assumed to be an N_Attribute_Reference,
+       --  is being used as the prefix of an expanded name, such as when
+       --  referring to a local declaration of the body of an attribute
+       --  subprogram (for example, Pkg.T'Constant_Indexing.Local_Var).
+       --  This is used as a guard for calling Rewrite_As_Attribute_Subp_Name.
+       --
+       --  We test whether Expressions is present, and return False if it is,
+       --  because that indicates that the attribute is being used for a call,
+       --  in which case we definitely don't want to do the rewriting (like
+       --  in cases of calls to stream attributes).
+ 
        procedure Legal_Formal_Attribute;
        --  Common processing for attributes Definite and Has_Discriminants.
        --  Checks that prefix is generic indefinite formal type.
*************** package body Sem_Attr is
*** 478,483 ****
--- 494,508 ----
        procedure Min_Max;
        --  Common processing for attributes Max and Min
  
+       procedure Rewrite_As_Attribute_Subp_Name;
+       --  Checks that the attribute prefix is a type that has an aspect
+       --  corresponding to the attribute part of the name, and rewrites
+       --  the attribute name in the form of the name of an attribute
+       --  subprogram (usually an N_Identifier whose Chars is a name of
+       --  form "<type-id>'<attribute-name>", but possibly as an N_Expanded_Name
+       --  whose Selector denotes a name of that form in the case where the
+       --  prefix is an expanded name). The rewritten name is then analyzed.
+ 
        procedure Standard_Attribute (Val : Int);
        --  Used to process attributes whose prefix is package Standard which
        --  yield values of type Universal_Integer. The attribute reference
*************** package body Sem_Attr is
*** 3180,3185 ****
--- 3205,3252 ----
           end if;
        end Min_Max;
  
+       -------------------------------------
+       -- Rewrite_As_Attribute_Subp_Name --
+       -------------------------------------
+ 
+       procedure Rewrite_As_Attribute_Subp_Name is
+       begin
+          --  Verify that the prefix of an attribute associated with aspects
+          --  that denote subprograms is a type, and that the type specifies
+          --  the associated aspect. Note that such attribute names can only
+          --  occur for subprograms whose name has the form of an attribute
+          --  (a GNAT extension feature).
+ 
+          Check_Type;
+ 
+          if not Has_Aspect (Entity (P), Get_Aspect_Id (Aname)) then
+             Error_Attr_P ("aspect% not available for type");
+          end if;
+ 
+          --  Change the attribute name into a simple entity reference, so it
+          --  can be used as the prefix in expanded names like the name of a
+          --  normal scope entity. If the prefix of the attribute name is
+          --  itself an expanded name, then account for that in constructing
+          --  the name.
+ 
+          declare
+             Subp_Name : Node_Id :=
+               Make_Identifier (Sloc (N),
+                 Direct_Attribute_Definition_Name (Entity (P), Aname));
+          begin
+             if Nkind (P) = N_Expanded_Name then
+                Subp_Name := Make_Expanded_Name (Sloc (P),
+                               Chars         => Chars (Subp_Name),
+                               Prefix        => Prefix (P),
+                               Selector_Name => Subp_Name);
+             end if;
+ 
+             Rewrite (N, Subp_Name);
+          end;
+ 
+          Analyze (N);
+       end Rewrite_As_Attribute_Subp_Name;
+ 
        ------------------------
        -- Standard_Attribute --
        ------------------------
*************** package body Sem_Attr is
*** 4981,4989 ****
        -----------
  
        when Attribute_Input =>
!          Check_E1;
!          Check_Stream_Attribute (TSS_Stream_Input);
!          Set_Etype (N, P_Base_Type);
  
        -------------------
        -- Integer_Value --
--- 5048,5061 ----
        -----------
  
        when Attribute_Input =>
!          if Is_Reference_To_Attribute_Subp_Name (N) then
!             Rewrite_As_Attribute_Subp_Name;
! 
!          else
!             Check_E1;
!             Check_Stream_Attribute (TSS_Stream_Input);
!             Set_Etype (N, P_Base_Type);
!          end if;
  
        -------------------
        -- Integer_Value --
*************** package body Sem_Attr is
*** 6072,6081 ****
        ------------
  
        when Attribute_Output =>
!          Check_E2;
!          Check_Stream_Attribute (TSS_Stream_Output);
!          Set_Etype (N, Standard_Void_Type);
!          Resolve (N, Standard_Void_Type);
  
        ------------------
        -- Partition_ID --
--- 6144,6158 ----
        ------------
  
        when Attribute_Output =>
!          if Is_Reference_To_Attribute_Subp_Name (N) then
!             Rewrite_As_Attribute_Subp_Name;
! 
!          else
!             Check_E2;
!             Check_Stream_Attribute (TSS_Stream_Output);
!             Set_Etype (N, Standard_Void_Type);
!             Resolve (N, Standard_Void_Type);
!          end if;
  
        ------------------
        -- Partition_ID --
*************** package body Sem_Attr is
*** 6256,6265 ****
        ---------------
  
        when Attribute_Put_Image =>
!          Check_E2;
!          Check_Put_Image_Attribute;
!          Set_Etype (N, Standard_Void_Type);
!          Resolve (N, Standard_Void_Type);
  
        -----------
        -- Range --
--- 6333,6347 ----
        ---------------
  
        when Attribute_Put_Image =>
!          if Is_Reference_To_Attribute_Subp_Name (N) then
!             Rewrite_As_Attribute_Subp_Name;
! 
!          else
!             Check_E2;
!             Check_Put_Image_Attribute;
!             Set_Etype (N, Standard_Void_Type);
!             Resolve (N, Standard_Void_Type);
!          end if;
  
        -----------
        -- Range --
*************** package body Sem_Attr is
*** 6662,6672 ****
        ----------
  
        when Attribute_Read =>
!          Check_E2;
!          Check_Stream_Attribute (TSS_Stream_Read);
!          Set_Etype (N, Standard_Void_Type);
!          Resolve (N, Standard_Void_Type);
!          Note_Possible_Modification (E2, Sure => True);
  
        ---------
        -- Ref --
--- 6744,6759 ----
        ----------
  
        when Attribute_Read =>
!          if Is_Reference_To_Attribute_Subp_Name (N) then
!             Rewrite_As_Attribute_Subp_Name;
! 
!          else
!             Check_E2;
!             Check_Stream_Attribute (TSS_Stream_Read);
!             Set_Etype (N, Standard_Void_Type);
!             Resolve (N, Standard_Void_Type);
!             Note_Possible_Modification (E2, Sure => True);
!          end if;
  
        ---------
        -- Ref --
*************** package body Sem_Attr is
*** 8240,8250 ****
        -----------
  
        when Attribute_Write =>
!          Check_E2;
!          Check_Stream_Attribute (TSS_Stream_Write);
!          Set_Etype (N, Standard_Void_Type);
!          Resolve (N, Standard_Void_Type);
  
        end case;
  
        --  In SPARK certain attributes (see below) depend on Tasking_State.
--- 8327,8350 ----
        -----------
  
        when Attribute_Write =>
!          if Is_Reference_To_Attribute_Subp_Name (N) then
!             Rewrite_As_Attribute_Subp_Name;
! 
!          else
!             Check_E2;
!             Check_Stream_Attribute (TSS_Stream_Write);
!             Set_Etype (N, Standard_Void_Type);
!             Resolve (N, Standard_Void_Type);
!          end if;
  
+       when Attribute_Constant_Indexing
+          | Attribute_Default_Iterator
+          | Attribute_Integer_Literal
+          | Attribute_Real_Literal
+          | Attribute_String_Literal
+          | Attribute_Variable_Indexing
+       =>
+          Rewrite_As_Attribute_Subp_Name;
        end case;
  
        --  In SPARK certain attributes (see below) depend on Tasking_State.
*************** package body Sem_Attr is
*** 11636,11644 ****
--- 11736,11746 ----
           | Attribute_Class
           | Attribute_Code_Address
           | Attribute_Compiler_Version
+          | Attribute_Constant_Indexing
           | Attribute_Constructor
           | Attribute_Count
           | Attribute_Default_Bit_Order
+          | Attribute_Default_Iterator
           | Attribute_Default_Scalar_Storage_Order
           | Attribute_Deref
           | Attribute_Destructor
*************** package body Sem_Attr is
*** 11653,11658 ****
--- 11755,11761 ----
           | Attribute_Img
           | Attribute_Input
           | Attribute_Index
+          | Attribute_Integer_Literal
           | Attribute_Initialized
           | Attribute_Last_Bit
           | Attribute_Library_Level
*************** package body Sem_Attr is
*** 11666,11677 ****
--- 11769,11782 ----
           | Attribute_Priority
           | Attribute_Put_Image
           | Attribute_Read
+          | Attribute_Real_Literal
           | Attribute_Result
           | Attribute_Scalar_Storage_Order
           | Attribute_Simple_Storage_Pool
           | Attribute_Storage_Pool
           | Attribute_Storage_Size
           | Attribute_Storage_Unit
+          | Attribute_String_Literal
           | Attribute_Stub_Type
           | Attribute_Super
           | Attribute_System_Allocator_Alignment
*************** package body Sem_Attr is
*** 11687,11692 ****
--- 11792,11798 ----
           | Attribute_Valid_Scalars
           | Attribute_Valid_Value
           | Attribute_Value
+          | Attribute_Variable_Indexing
           | Attribute_Wchar_T_Size
           | Attribute_Wide_Value
           | Attribute_Wide_Wide_Value
diff -Nrcpad gcc-17-20260628/gcc/ada/sem_ch10.adb gcc-17-20260705/gcc/ada/sem_ch10.adb
*** gcc-17-20260628/gcc/ada/sem_ch10.adb	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/ada/sem_ch10.adb	Sun Jul  5 22:32:06 2026
*************** package body Sem_Ch10 is
*** 2420,2430 ****
     begin
        Check_Stub_Level (N);
  
        --  Verify that the identifier for the stub is unique within this
        --  declarative part.
  
!       if Nkind (Parent (N)) in
!            N_Block_Statement | N_Package_Body | N_Subprogram_Body
        then
           Decl := First (Declarations (Parent (N)));
           while Present (Decl) and then Decl /= N loop
--- 2420,2433 ----
     begin
        Check_Stub_Level (N);
  
+       if Is_Direct_Attribute_Subp_Spec (Specification (N)) then
+          Error_Msg_N ("body stubs not allowed for attribute subprograms", N);
+ 
        --  Verify that the identifier for the stub is unique within this
        --  declarative part.
  
!       elsif Nkind (Parent (N)) in
!         N_Block_Statement | N_Package_Body | N_Subprogram_Body
        then
           Decl := First (Declarations (Parent (N)));
           while Present (Decl) and then Decl /= N loop
diff -Nrcpad gcc-17-20260628/gcc/ada/sem_ch13.adb gcc-17-20260705/gcc/ada/sem_ch13.adb
*** gcc-17-20260628/gcc/ada/sem_ch13.adb	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/ada/sem_ch13.adb	Sun Jul  5 22:32:06 2026
*************** package body Sem_Ch13 is
*** 379,391 ****
     --  a corresponding pragma (or an attribute definition clause). This
     --  parallels what is done in sem_prag.adb (see Get_Argument).
  
-    procedure Analyze_One_Aspect
-      (N        : Node_Id;
-       E        : N_Entity_Id;
-       Aspect   : Node_Id);
-    --  N and E are what was passed to Analyze_Aspect_Specifications.
-    --  Aspect is one element of Aspect_Specifications (N).
- 
     -----------------------------------------------------------
     --  Visibility of Discriminants in Aspect Specifications --
     -----------------------------------------------------------
--- 379,384 ----
*************** package body Sem_Ch13 is
*** 5011,5027 ****
                 Next (Aspect_Comp);
              end loop;
  
!             --  Do a psuedo pass over the aggregate to ensure its
              --  validity. The expression with actions is required to
              --  have a valid node where to place the ABE check during
              --  resolution.
  
!             Expander_Active := False;
!             Dummy := Make_Expression_With_Actions (Loc,
!               Actions => Empty_List,
!               Expression => New_Copy_Tree (Expression (Aspect)));
!             Resolve_Aggregate (Expression (Dummy), Typ);
!             Expander_Active := True;
           end Initialize;
  
           --  Aspect Initializes is never delayed because it is equivalent
--- 5004,5026 ----
                 Next (Aspect_Comp);
              end loop;
  
!             --  Do a "pseudo" pass over the aggregate to ensure its
              --  validity. The expression with actions is required to
              --  have a valid node where to place the ABE check during
              --  resolution.
  
!             declare
!                EA_Save : constant Boolean := Expander_Active;
!             begin
!                Expander_Active := False;
! 
!                Dummy := Make_Expression_With_Actions (Loc,
!                  Actions => Empty_List,
!                  Expression => New_Copy_Tree (Expression (Aspect)));
!                Resolve_Aggregate (Expression (Dummy), Typ);
! 
!                Expander_Active := EA_Save;
!             end;
           end Initialize;
  
           --  Aspect Initializes is never delayed because it is equivalent
*************** package body Sem_Ch13 is
*** 6174,6183 ****
        -----------------------------------
  
        procedure Analyze_Put_Image_TSS_Definition is
!          Subp : Entity_Id := Empty;
!          I    : Interp_Index;
!          It   : Interp;
!          Pnam : Entity_Id;
  
           function Has_Good_Profile
             (Subp   : Entity_Id;
--- 6173,6185 ----
        -----------------------------------
  
        procedure Analyze_Put_Image_TSS_Definition is
!          Subp         : Entity_Id := Empty;
!          Bad_Subp     : Entity_Id := Empty;
!          Err_Node     : Node_Id   := Empty;
!          Is_Attr_Subp : Boolean;
!          I            : Interp_Index;
!          It           : Interp;
!          Pnam         : Entity_Id;
  
           function Has_Good_Profile
             (Subp   : Entity_Id;
*************** package body Sem_Ch13 is
*** 6305,6310 ****
--- 6307,6314 ----
              if not Is_Overloaded (Expr) then
                 if Has_Good_Profile (Entity (Expr), Report => True) then
                    Subp := Entity (Expr);
+                else
+                   Bad_Subp := Entity (Expr);
                 end if;
  
              else
*************** package body Sem_Ch13 is
*** 6313,6318 ****
--- 6317,6324 ----
                    if Has_Good_Profile (It.Nam) then
                       Subp := It.Nam;
                       exit;
+                   else
+                      Bad_Subp := It.Nam;
                    end if;
  
                    Get_Next_Interp (I, It);
*************** package body Sem_Ch13 is
*** 6320,6328 ****
              end if;
           end if;
  
           if Present (Subp) then
              if Is_Abstract_Subprogram (Subp) then
!                Error_Msg_N ("Put_Image subprogram must not be abstract", Expr);
                 return;
              end if;
  
--- 6326,6347 ----
              end if;
           end if;
  
+          --  If Expr does not come from source, then the clause must be
+          --  associated with an aspect_specification that was implicitly
+          --  created due to an attribute subprogram. When there are errors
+          --  on such a subprogram, we want to flag errors on the subprogram
+          --  itself rather than the type (which is where the errors would
+          --  end up being placed otherwise), so we set Err_Node accordingly.
+ 
+          Is_Attr_Subp := not Comes_From_Source (Expr);
+ 
+          Err_Node := (if not Is_Attr_Subp then Expr
+                       elsif Present (Bad_Subp) then Bad_Subp else Subp);
+ 
           if Present (Subp) then
              if Is_Abstract_Subprogram (Subp) then
!                Error_Msg_N
!                  ("Put_Image subprogram must not be abstract", Err_Node);
                 return;
              end if;
  
*************** package body Sem_Ch13 is
*** 6333,6339 ****
  
           else
              Error_Msg_Name_1 := Attr;
!             Error_Msg_N ("incorrect expression for% attribute", Expr);
           end if;
        end Analyze_Put_Image_TSS_Definition;
  
--- 6352,6361 ----
  
           else
              Error_Msg_Name_1 := Attr;
!             Error_Msg_N
!               ("incorrect "
!                & (if Is_Attr_Subp then "subprogram" else "expression")
!                & " for% attribute", Err_Node);
           end if;
        end Analyze_Put_Image_TSS_Definition;
  
*************** package body Sem_Ch13 is
*** 6342,6351 ****
        -----------------------------------
  
        procedure Analyze_Stream_TSS_Definition (TSS_Nam : TSS_Name_Type) is
!          Subp : Entity_Id := Empty;
!          I    : Interp_Index;
!          It   : Interp;
!          Pnam : Entity_Id;
  
           Is_Read : constant Boolean := (TSS_Nam = TSS_Stream_Read);
           --  True for Read attribute, False for other attributes
--- 6364,6376 ----
        -----------------------------------
  
        procedure Analyze_Stream_TSS_Definition (TSS_Nam : TSS_Name_Type) is
!          Subp         : Entity_Id := Empty;
!          Bad_Subp     : Entity_Id := Empty;
!          Err_Node     : Node_Id   := Empty;
!          Is_Attr_Subp : Boolean;
!          I            : Interp_Index;
!          It           : Interp;
!          Pnam         : Entity_Id;
  
           Is_Read : constant Boolean := (TSS_Nam = TSS_Stream_Read);
           --  True for Read attribute, False for other attributes
*************** package body Sem_Ch13 is
*** 6475,6480 ****
--- 6500,6507 ----
              if not Is_Overloaded (Expr) then
                 if Has_Good_Profile (Entity (Expr), Report => True) then
                    Subp := Entity (Expr);
+                else
+                   Bad_Subp := Entity (Expr);
                 end if;
  
              else
*************** package body Sem_Ch13 is
*** 6483,6488 ****
--- 6510,6517 ----
                    if Has_Good_Profile (It.Nam) then
                       Subp := It.Nam;
                       exit;
+                   else
+                      Bad_Subp := It.Nam;
                    end if;
  
                    Get_Next_Interp (I, It);
*************** package body Sem_Ch13 is
*** 6490,6498 ****
              end if;
           end if;
  
           if Present (Subp) then
              if Is_Abstract_Subprogram (Subp) then
!                Error_Msg_N ("stream subprogram must not be abstract", Expr);
                 return;
  
              --  A stream subprogram for an interface type must be a null
--- 6519,6540 ----
              end if;
           end if;
  
+          --  If Expr does not come from source, then the clause must be
+          --  associated with an aspect_specification that was implicitly
+          --  created due to an attribute subprogram. When there are errors
+          --  on such a subprogram, we want to flag errors on the subprogram
+          --  itself rather than the type (which is where the errors would
+          --  end up being placed otherwise), so we set Err_Node accordingly.
+ 
+          Is_Attr_Subp := not Comes_From_Source (Expr);
+ 
+          Err_Node := (if not Is_Attr_Subp then Expr
+                       elsif Present (Bad_Subp) then Bad_Subp else Subp);
+ 
           if Present (Subp) then
              if Is_Abstract_Subprogram (Subp) then
!                Error_Msg_N
!                  ("stream subprogram must not be abstract", Err_Node);
                 return;
  
              --  A stream subprogram for an interface type must be a null
*************** package body Sem_Ch13 is
*** 6511,6517 ****
              then
                 Error_Msg_N
                   ("stream subprogram for interface type must be null "
!                   & "procedure", Expr);
              end if;
  
              Set_Entity (Expr, Subp);
--- 6553,6559 ----
              then
                 Error_Msg_N
                   ("stream subprogram for interface type must be null "
!                   & "procedure", Err_Node);
              end if;
  
              Set_Entity (Expr, Subp);
*************** package body Sem_Ch13 is
*** 6524,6532 ****
  
              if Is_Class_Wide_Type (Base_Type (Ent)) then
                 Error_Msg_N
!                  ("incorrect expression for class-wide% attribute", Expr);
              else
!                Error_Msg_N ("incorrect expression for% attribute", Expr);
              end if;
           end if;
        end Analyze_Stream_TSS_Definition;
--- 6566,6579 ----
  
              if Is_Class_Wide_Type (Base_Type (Ent)) then
                 Error_Msg_N
!                  ("incorrect "
!                   & (if Is_Attr_Subp then "subprogram" else "expression")
!                   & " for class-wide% attribute", Err_Node);
              else
!                Error_Msg_N
!                  ("incorrect "
!                   & (if Is_Attr_Subp then "subprogram" else "expression")
!                   & " for% attribute", Err_Node);
              end if;
           end if;
        end Analyze_Stream_TSS_Definition;
*************** package body Sem_Ch13 is
*** 7383,7397 ****
  
           when Attribute_Default_Iterator => Default_Iterator : declare
           begin
-             --  If target type is untagged, further checks are irrelevant
- 
-             if not Is_Tagged_Type (U_Ent) then
-                Error_Msg_N
-                  ("aspect Default_Iterator can only apply to a tagged type",
-                   Nam);
-                return;
-             end if;
- 
              declare
                 Parent_Aspect : constant Node_Id :=
                   Find_Aspect (U_Ent, Aspect_Default_Iterator);
--- 7430,7435 ----
*************** package body Sem_Ch13 is
*** 7399,7408 ****
                 --  If the attribute definition clause comes from an aspect that
                 --  is not Comes_From_Source, then the aspect must be inherited
                 --  from a parent type, in which case the operation has already
!                --  been set properly, and there's no need to do the check.
  
                 if No (Parent_Aspect)
                   or else Comes_From_Source (Parent_Aspect)
                 then
                    Check_Iterator_Functions (Typ => U_Ent, Expr => Expr);
                 end if;
--- 7437,7451 ----
                 --  If the attribute definition clause comes from an aspect that
                 --  is not Comes_From_Source, then the aspect must be inherited
                 --  from a parent type, in which case the operation has already
!                --  been set properly, and there's no need to do the check,
!                --  except for the case of an implicit aspect that denotes
!                --  an attribute subprogram, where we do want to check.
  
                 if No (Parent_Aspect)
                   or else Comes_From_Source (Parent_Aspect)
+                  or else
+                    (Nkind (Expr) in N_Has_Chars
+                      and then Is_Direct_Attribute_Subp_Name (Chars (Expr)))
                 then
                    Check_Iterator_Functions (Typ => U_Ent, Expr => Expr);
                 end if;
*************** package body Sem_Ch13 is
*** 7410,7419 ****
  
              Analyze (Expr);
  
!             if not Is_Entity_Name (Expr)
!               or else Ekind (Entity (Expr)) /= E_Function
!             then
!                Error_Msg_N ("aspect Iterator must be a function", Expr);
                 return;
              end if;
           end Default_Iterator;
--- 7453,7472 ----
  
              Analyze (Expr);
  
!             --  If target type is untagged, further checks are irrelevant
! 
!             if not Is_Tagged_Type (U_Ent) then
! 
!                --  If an attribute subprogram is denoted, then flag the error
!                --  on the subprogram. Otherwise, flag the error on the type.
! 
!                Error_Msg_N
!                  ("aspect Default_Iterator can only apply to a tagged type",
!                   (if not Comes_From_Source (Expr)
!                      and then Is_Direct_Attribute_Subp_Name (Chars (Expr))
!                   then Entity (Expr)
!                   else Nam));
! 
                 return;
              end if;
           end Default_Iterator;
*************** package body Sem_Ch13 is
*** 12073,12083 ****
              --  If the aspect is not Comes_From_Source, then it's an inherited
              --  aspect, in which case the aspect's operation has already been
              --  set, and there's no need to call Check_Iterator_Functions.
  
!             if Comes_From_Source (ASN) then
                 Check_Iterator_Functions
                   (Typ => Entity (ASN), Expr => Expression (ASN));
              end if;
              return;
  
           --  Finalizable, legality checks in Validate_Finalizable_Aspect
--- 12126,12142 ----
              --  If the aspect is not Comes_From_Source, then it's an inherited
              --  aspect, in which case the aspect's operation has already been
              --  set, and there's no need to call Check_Iterator_Functions.
+             --  Except when the aspect expression is a name that's an attribute
+             --  name, so it denotes one or more attribute subprograms, and the
+             --  checks are needed.
  
!             if Comes_From_Source (ASN)
!               or else Is_Direct_Attribute_Subp_Name (Chars (Expr))
!             then
                 Check_Iterator_Functions
                   (Typ => Entity (ASN), Expr => Expression (ASN));
              end if;
+ 
              return;
  
           --  Finalizable, legality checks in Validate_Finalizable_Aspect
*************** package body Sem_Ch13 is
*** 12795,12807 ****
  
           --  Set Error_Msg_Warn based on whether errors are wanted, so that
           --  messages with "<<" will be reported appropriately as warnings
!          --  or errors.
  
!          Error_Msg_Warn := not Error_On_Ineligible;
!          Error_Msg_NE (Msg, ASN, Typ);
  
!          Error_Msg_Sloc := Sloc (Subp);
!          Error_Msg_NE ("\ineligible operation & declared#", ASN, Subp);
        end Report_Ineligible_Indexing_Function;
  
        ---------------------------
--- 12854,12880 ----
  
           --  Set Error_Msg_Warn based on whether errors are wanted, so that
           --  messages with "<<" will be reported appropriately as warnings
!          --  or errors. Note that we always want messages to be errors in
!          --  the case of attribute subprograms.
  
!          Error_Msg_Warn := not Error_On_Ineligible
!            and then not Is_Direct_Attribute_Subp_Name (Chars (Subp));
  
!          --  When the subprogram's name is an attribute name, then we flag
!          --  the error on the subprogram itself rather than the aspect, which
!          --  was implicitly created in this case (so the error would be flagged
!          --  on the type, which would be confusing). (Maybe we should always
!          --  flag these errors on the subprograms themselves???)
! 
!          if Is_Direct_Attribute_Subp_Name (Chars (Subp)) then
!             Error_Msg_NE (Msg, Subp, Typ);
! 
!          else
!             Error_Msg_NE (Msg, ASN, Typ);
! 
!             Error_Msg_Sloc := Sloc (Subp);
!             Error_Msg_NE ("\ineligible operation & declared#", ASN, Subp);
!          end if;
        end Report_Ineligible_Indexing_Function;
  
        ---------------------------
*************** package body Sem_Ch13 is
*** 12889,12894 ****
--- 12962,12971 ----
                (Param_Type    => Etype (First_Formal (Subp)),
                 Specific_Type => Typ);
  
+       No_Eligible_Func_Or_Is_Attr_Subp : constant Boolean :=
+         not Has_Eligible_Func
+           or else Is_Direct_Attribute_Subp_Name (Chars (Subp));
+ 
     --  Start of processing for Check_Function_For_Indexing_Aspect
  
     begin
*************** package body Sem_Ch13 is
*** 12916,12922 ****
        if Scope (Subp) /= Scope (Typ)
          and then not Has_Class_Wide_First_Formal
        then
!          if not Has_Eligible_Func and then Error_On_Ineligible then
              Report_Ineligible_Indexing_Function
                ("indexing aspect requires function with same scope as type&");
           end if;
--- 12993,12999 ----
        if Scope (Subp) /= Scope (Typ)
          and then not Has_Class_Wide_First_Formal
        then
!          if Error_On_Ineligible and then No_Eligible_Func_Or_Is_Attr_Subp then
              Report_Ineligible_Indexing_Function
                ("indexing aspect requires function with same scope as type&");
           end if;
*************** package body Sem_Ch13 is
*** 12928,12934 ****
        --  identified, and never issue a warning.
  
        elsif not Is_Overloadable (Subp) or else No (Ret_Type) then
!          if not Has_Eligible_Func and then Error_On_Ineligible then
              Report_Ineligible_Indexing_Function
                ("illegal indexing function for type&");
           end if;
--- 13005,13011 ----
        --  identified, and never issue a warning.
  
        elsif not Is_Overloadable (Subp) or else No (Ret_Type) then
!          if Error_On_Ineligible and then No_Eligible_Func_Or_Is_Attr_Subp then
              Report_Ineligible_Indexing_Function
                ("illegal indexing function for type&");
           end if;
*************** package body Sem_Ch13 is
*** 12936,12942 ****
           return;
  
        elsif No (First_Formal (Subp)) then
!          if not Has_Eligible_Func then
              Report_Ineligible_Indexing_Function
                ("indexing aspect requires a function that applies to type&<<");
           end if;
--- 13013,13019 ----
           return;
  
        elsif No (First_Formal (Subp)) then
!          if No_Eligible_Func_Or_Is_Attr_Subp then
              Report_Ineligible_Indexing_Function
                ("indexing aspect requires a function that applies to type&<<");
           end if;
*************** package body Sem_Ch13 is
*** 12946,12952 ****
        elsif not Subp_Is_Dispatching_Op_Of_Typ (Subp => Subp, Typ => Typ)
          and then not Has_Class_Wide_First_Formal
        then
!          if not Has_Eligible_Func then
              Report_Ineligible_Indexing_Function
                ("indexing aspect requires function with first formal "
                 & "applying to type& or its class-wide type<<");
--- 13023,13029 ----
        elsif not Subp_Is_Dispatching_Op_Of_Typ (Subp => Subp, Typ => Typ)
          and then not Has_Class_Wide_First_Formal
        then
!          if No_Eligible_Func_Or_Is_Attr_Subp then
              Report_Ineligible_Indexing_Function
                ("indexing aspect requires function with first formal "
                 & "applying to type& or its class-wide type<<");
*************** package body Sem_Ch13 is
*** 12954,12960 ****
           return;
  
        elsif No (Next_Formal (First_Formal (Subp))) then
!          if not Has_Eligible_Func then
              Report_Ineligible_Indexing_Function
                ("at least two parameters required for indexing function<<");
           end if;
--- 13031,13037 ----
           return;
  
        elsif No (Next_Formal (First_Formal (Subp))) then
!          if No_Eligible_Func_Or_Is_Attr_Subp then
              Report_Ineligible_Indexing_Function
                ("at least two parameters required for indexing function<<");
           end if;
*************** package body Sem_Ch13 is
*** 13147,13153 ****
        Analyze (Expr);
  
        if not Is_Entity_Name (Expr) then
!          Error_Msg_N ("aspect Default_Iterator must be a function name", Expr);
        end if;
  
        if not Is_Overloaded (Expr) then
--- 13224,13232 ----
        Analyze (Expr);
  
        if not Is_Entity_Name (Expr) then
!          Error_Msg_N ("aspect Default_Iterator must denote a function", Expr);
! 
!          return;
        end if;
  
        if not Is_Overloaded (Expr) then
*************** package body Sem_Ch13 is
*** 17934,17939 ****
--- 18013,18019 ----
              while Present (It.Typ) loop
                 if Is_Finalizable_Primitive (It.Nam) then
                    Set_Entity (N, It.Nam);
+                   Set_Is_Overloaded (N, False);
                    return True;
                 end if;
  
*************** package body Sem_Ch13 is
*** 19469,19474 ****
--- 19549,19555 ----
        Is_Match     : Boolean;
        Match        : Interp;
        Match2       : Entity_Id := Empty;
+       Subp         : Entity_Id := Empty;
  
        function Matching
          (Param_Id : Entity_Id; Param_Type : Entity_Id) return Boolean;
*************** package body Sem_Ch13 is
*** 19492,19499 ****
     begin
        --  If the aspect specification was effectively inherited from the parent
        --  type (so constructed anew by analysis), then no point in validating.
  
!       if not Comes_From_Source (ASN) then
           return;
        end if;
  
--- 19573,19584 ----
     begin
        --  If the aspect specification was effectively inherited from the parent
        --  type (so constructed anew by analysis), then no point in validating.
+       --  Except when the aspect expression is an attribute name, as it denotes
+       --  an attribute subprogram, and we do want to do the checks here.
  
!       if not Comes_From_Source (ASN)
!         and then not Is_Direct_Attribute_Subp_Name (Chars (Func_Name))
!       then
           return;
        end if;
  
*************** package body Sem_Ch13 is
*** 19551,19578 ****
             and then Base_Type (Etype (It.Nam)) = Base_Type (Typ)
           then
              declare
!                Params     : constant List_Id :=
!                  Parameter_Specifications (Parent (It.Nam));
!                Param_Spec : Node_Id;
  
              begin
!                if List_Length (Params) = 1 then
!                   Param_Spec := First (Params);
!                   Is_Match :=
!                     Matching (Defining_Identifier (Param_Spec), Param_Type);
  
                 --  Look for the optional overloaded 2-param Real_Literal
  
!                elsif List_Length (Params) = 2
                   and then A_Id = Aspect_Real_Literal
                 then
!                   Param_Spec := First (Params);
! 
!                   if Matching (Defining_Identifier (Param_Spec), Param_Type)
!                   then
!                      Param_Spec := Next (Param_Spec);
  
!                      if Matching (Defining_Identifier (Param_Spec), Param_Type)
                       then
                          if No (Match2) then
                             Match2 := It.Nam;
--- 19636,19662 ----
             and then Base_Type (Etype (It.Nam)) = Base_Type (Typ)
           then
              declare
!                Formal : Entity_Id := First_Formal (It.Nam);
  
              begin
!                Subp := It.Nam;
! 
!                if Present (Formal)
!                  and then not Present (Next_Formal (Formal))
!                then
!                   Is_Match := Matching (Formal, Param_Type);
  
                 --  Look for the optional overloaded 2-param Real_Literal
  
!                elsif Present (Formal)
!                  and then Present (Next_Formal (Formal))
                   and then A_Id = Aspect_Real_Literal
                 then
!                   if Matching (Formal, Param_Type) then
!                      Formal := Next_Formal (Formal);
  
!                      if not Present (Next_Formal (Formal))
!                        and then Matching (Formal, Param_Type)
                       then
                          if No (Match2) then
                             Match2 := It.Nam;
*************** package body Sem_Ch13 is
*** 19613,19620 ****
        end loop;
  
        if not Match_Found then
!          Error_Msg_N
!            ("function name in aspect specification cannot be resolved", ASN);
           return;
        end if;
  
--- 19697,19716 ----
        end loop;
  
        if not Match_Found then
!          if not Comes_From_Source (ASN)
!            and then Present (Subp)
!            and then Is_Direct_Attribute_Subp_Name (Chars (Subp))
!          then
!             Error_Msg_Name_1 := Chars (Identifier (ASN));
! 
!             Error_Msg_N
!               ("attribute subprogram not valid for aspect%", Subp);
!          else
!             Error_Msg_N
!               ("function name in aspect specification cannot be resolved",
!                ASN);
!          end if;
! 
           return;
        end if;
  
diff -Nrcpad gcc-17-20260628/gcc/ada/sem_ch13.ads gcc-17-20260705/gcc/ada/sem_ch13.ads
*** gcc-17-20260628/gcc/ada/sem_ch13.ads	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/ada/sem_ch13.ads	Sun Jul  5 22:32:06 2026
*************** package Sem_Ch13 is
*** 53,58 ****
--- 53,65 ----
     --  routine. This routine diagnoses misplaced aspects that should appear on
     --  the initial declaration of N and offers suggestions for replacements.
  
+    procedure Analyze_One_Aspect
+      (N        : Node_Id;
+       E        : N_Entity_Id;
+       Aspect   : Node_Id);
+    --  N and E are what was passed to Analyze_Aspect_Specifications.
+    --  Aspect is one element of Aspect_Specifications (N).
+ 
     procedure Adjust_Record_For_Reverse_Bit_Order (R : Entity_Id);
     --  Called from Freeze where R is a record entity for which reverse bit
     --  order is specified and there is at least one component clause. Note:
diff -Nrcpad gcc-17-20260628/gcc/ada/sem_ch3.adb gcc-17-20260705/gcc/ada/sem_ch3.adb
*** gcc-17-20260628/gcc/ada/sem_ch3.adb	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/ada/sem_ch3.adb	Sun Jul  5 22:32:06 2026
*************** package body Sem_Ch3 is
*** 8421,8433 ****
                 and then not Is_Generic_Type (Root_Type (Full_Parent)))
           then
              --  Copy and adjust declaration to provide a completion for what
!             --  is originally a private declaration. Indicate that full view
!             --  is internally generated.
  
              Set_Comes_From_Source (Full_N, False);
              Set_Comes_From_Source (Full_Der, False);
              Set_Parent (Full_Der, Full_N);
              Set_Defining_Identifier (Full_N, Full_Der);
  
              --  If there are no constraints, adjust the subtype mark
  
--- 8421,8435 ----
                 and then not Is_Generic_Type (Root_Type (Full_Parent)))
           then
              --  Copy and adjust declaration to provide a completion for what
!             --  is originally a private declaration. Indicate that the full
!             --  view is internally generated, and set Is_Implicit_Full_View
!             --  now for the sake of Build_Derived_Record_Type.
  
              Set_Comes_From_Source (Full_N, False);
              Set_Comes_From_Source (Full_Der, False);
              Set_Parent (Full_Der, Full_N);
              Set_Defining_Identifier (Full_N, Full_Der);
+             Set_Is_Implicit_Full_View (Full_Der);
  
              --  If there are no constraints, adjust the subtype mark
  
*************** package body Sem_Ch3 is
*** 10188,10197 ****
        --  Set fields for tagged types
  
        if Is_Tagged then
!          --  Minor optimization: there is no need to generate the class-wide
!          --  entity associated with an underlying record view.
  
!          if not Is_Underlying_Record_View (Derived_Type) then
              Make_Class_Wide_Type (Derived_Type);
           end if;
  
--- 10190,10201 ----
        --  Set fields for tagged types
  
        if Is_Tagged then
!          --  Small optimization: there is no need to generate the class-wide
!          --  entity for either an implicit full or an underlying record view.
  
!          if not Is_Implicit_Full_View (Derived_Type)
!            and then not Is_Underlying_Record_View (Derived_Type)
!          then
              Make_Class_Wide_Type (Derived_Type);
           end if;
  
*************** package body Sem_Ch3 is
*** 10423,10432 ****
        end if;
  
        --  Update the class-wide type, which shares the now-completed entity
!       --  list with its specific type. In case of underlying record views,
!       --  we do not generate the corresponding class wide entity.
  
        if Is_Tagged
          and then not Is_Underlying_Record_View (Derived_Type)
        then
           Set_First_Entity
--- 10427,10437 ----
        end if;
  
        --  Update the class-wide type, which shares the now-completed entity
!       --  list with its specific type. But in the cases of implicit full or
!       --  underlying record views, we do not generate the class-wide type.
  
        if Is_Tagged
+         and then not Is_Implicit_Full_View (Derived_Type)
          and then not Is_Underlying_Record_View (Derived_Type)
        then
           Set_First_Entity
*************** package body Sem_Ch3 is
*** 16562,16568 ****
        --  is normally just a copy of the parent name. An exception arises for
        --  type support subprograms, where the name is changed to reflect the
        --  name of the derived type, e.g. if type foo is derived from type bar,
!       --  then a procedure barDA is derived with a name fooDA.
  
        ---------------------------
        -- Is_Private_Overriding --
--- 16567,16576 ----
        --  is normally just a copy of the parent name. An exception arises for
        --  type support subprograms, where the name is changed to reflect the
        --  name of the derived type, e.g. if type foo is derived from type bar,
!       --  then a procedure barDA is derived with name fooDA. Another exception
!       --  is for the case of attribute subprograms, where the name is changed
!       --  to substitute the derived type's name for the parent type's name
!       --  (e.g., changing "parent'put_image" to "derived'put_image").
  
        ---------------------------
        -- Is_Private_Overriding --
*************** package body Sem_Ch3 is
*** 16734,16740 ****
        procedure Set_Derived_Name is
           Nm : constant TSS_Name_Type := Get_TSS_Name (Parent_Subp);
        begin
!          if Nm = TSS_Null then
              Set_Chars (New_Subp, Chars (Parent_Subp));
           else
              Set_Chars (New_Subp, Make_TSS_Name (Base_Type (Derived_Type), Nm));
--- 16742,16779 ----
        procedure Set_Derived_Name is
           Nm : constant TSS_Name_Type := Get_TSS_Name (Parent_Subp);
        begin
!          if Is_Direct_Attribute_Subp_Name (Chars (Parent_Subp)) then
!             declare
!                Derived_Type_Name : constant String :=
!                  Get_Name_String (Chars (Derived_Type));
! 
!                Parent_Subp_Name : constant String :=
!                  Get_Name_String (Chars (Parent_Subp));
! 
!                Att_Buf : Bounded_String
!                            (Max_Length => Derived_Type_Name'Length
!                              + Parent_Subp_Name'Length);
!             begin
!                for J in 2 .. Parent_Subp_Name'Length loop
! 
!                   --  J is at the position separating the prefix from the
!                   --  attribute name.
! 
!                   if Parent_Subp_Name (J) = ''' then
!                      Append (Att_Buf, Derived_Type_Name);
!                      Append (Att_Buf, "'");
!                      Append
!                        (Att_Buf,
!                         Parent_Subp_Name (J + 1 .. Parent_Subp_Name'Length));
! 
!                      exit;
!                   end if;
!                end loop;
! 
!                Set_Chars (New_Subp, Name_Find (Att_Buf));
!             end;
! 
!          elsif Nm = TSS_Null then
              Set_Chars (New_Subp, Chars (Parent_Subp));
           else
              Set_Chars (New_Subp, Make_TSS_Name (Base_Type (Derived_Type), Nm));
*************** package body Sem_Ch3 is
*** 19156,19164 ****
        elsif Nkind (P) /= N_Component_Declaration
          and then Def_Kind = N_Subtype_Indication
        then
-          --  Base name of subtype on object name, which will be unique in
-          --  the current scope.
- 
           --  If this is a duplicate declaration, return base type, to avoid
           --  generating duplicate anonymous types.
  
--- 19195,19200 ----
*************** package body Sem_Ch3 is
*** 19167,19219 ****
              return Entity (Subtype_Mark (Obj_Def));
           end if;
  
           Nam :=
              New_External_Name
               (Chars (Defining_Identifier (Related_Nod)), 'S', 0, 'T');
  
           T := Make_Defining_Identifier (Sloc (P), Nam);
  
-          --  If In_Spec_Expression, for example within a pre/postcondition,
-          --  provide enough information for use of the subtype without
-          --  depending on full analysis and freezing, which will happen when
-          --  building the corresponding subprogram.
- 
-          if In_Spec_Expression then
-             Analyze (Subtype_Mark (Obj_Def));
- 
-             declare
-                Base_T  : constant Entity_Id := Entity (Subtype_Mark (Obj_Def));
-                New_Def : constant Node_Id   := New_Copy_Tree (Obj_Def);
-                Decl    : constant Node_Id   :=
-                  Make_Subtype_Declaration (Sloc (P),
-                    Defining_Identifier => T,
-                    Subtype_Indication  => New_Def);
- 
-             begin
-                Set_Etype  (T, Base_T);
-                Mutate_Ekind  (T, Subtype_Kind (Ekind (Base_T)));
-                Set_Parent (T, Decl);
-                Set_Scope (T, Current_Scope);
- 
-                if Ekind (T) = E_Array_Subtype then
-                   Constrain_Array (T, New_Def, Related_Nod, T, 'P');
- 
-                elsif Ekind (T) = E_Record_Subtype then
-                   Set_First_Entity (T, First_Entity (Base_T));
-                   Set_Has_Discriminants (T, Has_Discriminants (Base_T));
-                   Set_Is_Constrained (T);
-                end if;
- 
-                Insert_Before (Related_Nod, Decl);
-             end;
- 
-             return T;
-          end if;
- 
           --  When generating code, insert subtype declaration ahead of
!          --  declaration that generated it. Similar behavior required under
!          --  preanalysis (including strict preanalysis) to perform the
!          --  minimum decoration, and avoid reporting spurious errors.
  
           Insert_Action (Obj_Def,
             Make_Subtype_Declaration (Sloc (P),
--- 19203,19230 ----
              return Entity (Subtype_Mark (Obj_Def));
           end if;
  
+          --  During preanalysis, for example within a pre/postcondition,
+          --  provide just enough information to use the subtype.
+ 
+          if Preanalysis_Active then
+             return
+               Process_Subtype
+                 (Obj_Def,
+                  Related_Nod,
+                  Excludes_Null => Null_Exclusion_Present (P));
+          end if;
+ 
+          --  Base name of subtype on object name, which will be unique in
+          --  the current scope.
+ 
           Nam :=
              New_External_Name
               (Chars (Defining_Identifier (Related_Nod)), 'S', 0, 'T');
  
           T := Make_Defining_Identifier (Sloc (P), Nam);
  
           --  When generating code, insert subtype declaration ahead of
!          --  declaration that generated it.
  
           Insert_Action (Obj_Def,
             Make_Subtype_Declaration (Sloc (P),
*************** package body Sem_Ch3 is
*** 21304,21312 ****
  
     procedure Preanalyze_And_Resolve_Assert_Expression (N : Node_Id) is
     begin
!       In_Assertion_Expr  := In_Assertion_Expr + 1;
        Preanalyze_And_Resolve_Spec_Expression (N);
!       In_Assertion_Expr  := In_Assertion_Expr - 1;
     end Preanalyze_And_Resolve_Assert_Expression;
  
     -----------------------------------------------
--- 21315,21323 ----
  
     procedure Preanalyze_And_Resolve_Assert_Expression (N : Node_Id) is
     begin
!       In_Assertion_Expr := In_Assertion_Expr + 1;
        Preanalyze_And_Resolve_Spec_Expression (N);
!       In_Assertion_Expr := In_Assertion_Expr - 1;
     end Preanalyze_And_Resolve_Assert_Expression;
  
     -----------------------------------------------
diff -Nrcpad gcc-17-20260628/gcc/ada/sem_ch4.adb gcc-17-20260705/gcc/ada/sem_ch4.adb
*** gcc-17-20260628/gcc/ada/sem_ch4.adb	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/ada/sem_ch4.adb	Sun Jul  5 22:32:06 2026
*************** package body Sem_Ch4 is
*** 2486,2491 ****
--- 2486,2492 ----
  
        A        : Node_Id;
        EWA_Scop : Entity_Id;
+       SE       : Scope_Stack_Entry;
  
     --  Start of processing for Analyze_Expression_With_Actions
  
*************** package body Sem_Ch4 is
*** 2523,2530 ****
--- 2524,2551 ----
           In_Declare_Expr := In_Declare_Expr - 1;
        end if;
  
+       --  If the analysis of the expression has created a transient
+       --  scope, we first need to save the transient scope and pop it.
+ 
+       if Scope_Is_Transient then
+          SE := Scope_Stack.Table (Scope_Stack.Last);
+          Scope_Stack.Decrement_Last;
+       else
+          SE.Is_Transient := False;
+       end if;
+ 
+       --  Remove the scope and its declarations from visibility. Note that
+       --  the scope is purely static and the EWA is not a master construct
+       --  (see AI22-0017) so the lifetime of the objects does not end here.
+ 
        pragma Assert (Current_Scope = Scope_Link (N));
        End_Scope;
+ 
+       --  Push again the transient scope, if any
+ 
+       if SE.Is_Transient then
+          Scope_Stack.Append (SE);
+       end if;
     end Analyze_Expression_With_Actions;
  
     ---------------------------
diff -Nrcpad gcc-17-20260628/gcc/ada/sem_ch5.adb gcc-17-20260705/gcc/ada/sem_ch5.adb
*** gcc-17-20260628/gcc/ada/sem_ch5.adb	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/ada/sem_ch5.adb	Sun Jul  5 22:32:06 2026
*************** package body Sem_Ch5 is
*** 94,99 ****
--- 94,110 ----
     --  statements. On success, the return value is the entity of the loop
     --  referenced by the statement.
  
+    function Has_Sec_Stack_Call (N : Node_Id) return Boolean;
+    --  N is the node for an arbitrary construct. This function searches the
+    --  construct N to see if it contains a function call that returns on the
+    --  secondary stack, returning True if any such call is found, and False
+    --  otherwise.
+ 
+    --  ??? The implementation invokes Sem_Util.Requires_Transient_Scope so it
+    --  will return True if N contains a function call that needs finalization,
+    --  in addition to the above specification. See Analyze_Loop_Statement for
+    --  a similar comment about this entanglement.
+ 
     procedure Preanalyze_Range (R_Copy : Node_Id);
     --  Determine expected type of range or domain of iteration of Ada 2012
     --  loop by analyzing separate copy. Do the analysis and resolution of the
diff -Nrcpad gcc-17-20260628/gcc/ada/sem_ch5.ads gcc-17-20260705/gcc/ada/sem_ch5.ads
*** gcc-17-20260628/gcc/ada/sem_ch5.ads	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/ada/sem_ch5.ads	Sun Jul  5 22:32:06 2026
*************** package Sem_Ch5 is
*** 51,66 ****
     --  an unconditional transfer of control or an apparent infinite loop. It
     --  checks to see if the statement is followed by some other statement, and
     --  if so generates an appropriate warning for unreachable code.
- 
-    function Has_Sec_Stack_Call (N : Node_Id) return Boolean;
-    --  N is the node for an arbitrary construct. This function searches the
-    --  construct N to see if it contains a function call that returns on the
-    --  secondary stack, returning True if any such call is found, and False
-    --  otherwise.
- 
-    --  ??? The implementation invokes Sem_Util.Requires_Transient_Scope so it
-    --  will return True if N contains a function call that needs finalization,
-    --  in addition to the above specification. See Analyze_Loop_Statement for
-    --  a similar comment about this entanglement.
- 
  end Sem_Ch5;
--- 51,54 ----
diff -Nrcpad gcc-17-20260628/gcc/ada/sem_ch6.adb gcc-17-20260705/gcc/ada/sem_ch6.adb
*** gcc-17-20260628/gcc/ada/sem_ch6.adb	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/ada/sem_ch6.adb	Sun Jul  5 22:32:06 2026
*************** package body Sem_Ch6 is
*** 5231,5236 ****
--- 5231,5258 ----
             (E : Entity_Id; T : Entity_Id) return Boolean;
           --  Returns whether E can be declared the destructor of T
  
+          procedure Create_And_Append_Aspect
+            (Aspect_Name : Name_Id;
+             Subp_Name   : Name_Id;
+             Typ         : Entity_Id);
+          --  Creates, adds, and analyzes an aspect spec for Aspect_Name that
+          --  specifies Subp_Name to Typ's list of representation items, unless
+          --  the type already has such an aspect, or the type is a derived type
+          --  that will inherit the aspect from its parent, or the aspect is
+          --  a nonoverridable aspect. An error will be issued for an attempt
+          --  to specify the aspect via an attribute subprogram if the type
+          --  already explicitly specifies the aspect or inherits the aspect
+          --  from a type that explicitly specifies it.
+ 
+          function Constructor_Components_OK
+            (Typ : Entity_Id; Subp : Node_Id) return Boolean;
+          --  Called when processing the body of a constructor for record type
+          --  Typ. Checks non-inherited components of Typ and reports an error
+          --  on each component whose type is a record type with no default
+          --  parameterless constructor, no default initialization, and no
+          --  explicit default expression. Returns True if no such component
+          --  is found, and False if at least one error was emitted.
+ 
           -----------------------------------
           -- Add_Default_Initialize_Aspect --
           -----------------------------------
*************** package body Sem_Ch6 is
*** 5275,5315 ****
                and then No (Next_Formal (First_Formal (E)));
           end Can_Be_Destructor_Of;
  
           --  Local variables
  
!          Att_N    : constant Node_Id := Original_Node (N);
!          Prefix_E : constant Entity_Id :=
!            Get_Full_View
!              (Current_Entity (Prefix (Defining_Unit_Name (Att_N))));
!          Att_Name : constant Name_Id :=
!            Attribute_Name (Defining_Unit_Name (Att_N));
  
        --  Start of processing for Analyze_Direct_Attribute_Definition
  
        begin
           pragma Assert (N /= Att_N);
  
           if not Is_Direct_Attribute_Definition_Name (Att_Name) then
-             Error_Msg_Name_1 := Att_Name;
              Error_Msg_N
                ("direct definition syntax not supported for attribute%",
                 Designator);
           end if;
  
           --  Handle each kind of attribute separately
  
           case Att_Name is
  
              when Name_Constructor =>
-                Error_Msg_Name_1 := Att_Name;
  
!                --  If missing, add a default initialization aspect for this
!                --  constructor's body stub: Initialize => (others => <>).
  
!                if Parent_Kind (N) not in N_Subprogram_Declaration
!                                        | N_Abstract_Subprogram_Declaration
!                then
!                   if not Has_Aspect (Designator, Aspect_Initialize) then
                       Add_Default_Initialize_Aspect;
                    end if;
  
--- 5297,5522 ----
                and then No (Next_Formal (First_Formal (E)));
           end Can_Be_Destructor_Of;
  
+          ------------------------------
+          -- Create_And_Append_Aspect --
+          ------------------------------
+ 
+          procedure Create_And_Append_Aspect
+            (Aspect_Name : Name_Id;
+             Subp_Name   : Name_Id;
+             Typ         : Entity_Id)
+          is
+             Loc : constant Source_Ptr := Sloc (Typ);
+ 
+             Subp_Aspect_Id : constant Aspect_Id :=
+               Get_Aspect_Id (Aspect_Name);
+ 
+             Subp_Aspect : Node_Id := Find_Aspect (Typ, Subp_Aspect_Id);
+ 
+             Type_Decl : constant Node_Id := Parent (Typ);
+ 
+          begin
+             --  We disallow attempts to use both forms of specifying the aspect
+             --  (an explicit aspect together with using attribute subprograms).
+             --  This also applies to derived types where the parent type has
+             --  an explicit aspect specification.
+ 
+             if Present (Subp_Aspect)
+               and then Comes_From_Source (Subp_Aspect)
+             then
+                Error_Msg_Sloc := Sloc (Designator);
+ 
+                Error_Msg_NE
+                  ("aspect% conflicts with use of attribute subprogram&#",
+                   Subp_Aspect, Designator);
+ 
+                return;
+             end if;
+ 
+             --  If the type doesn't already have an aspect associated with
+             --  itself, and it's not a derived type, or it is derived but
+             --  its parent type doesn't have the aspect (which, if it had
+             --  it, would be inherited in Inherit_Nonoverridable_Aspects),
+             --  or it's not a nonoverridable aspect (so it won't be inherited
+             --  from a parent type), then create the aspect now.
+ 
+             if (not Present (Subp_Aspect)
+                  or else Entity (Subp_Aspect) /= Typ)
+               and then
+                 (not Is_Derived_Type (Typ)
+                   or else
+                  not Present (Find_Aspect (Etype (Typ), Subp_Aspect_Id))
+                   or else
+                  Subp_Aspect_Id not in Nonoverridable_Aspect_Id)
+             then
+                Subp_Aspect :=
+                  Make_Aspect_Specification (Loc,
+                    Identifier => Make_Identifier (Loc, Aspect_Name),
+                    Expression => Make_Identifier (Loc, Subp_Name),
+                    Class_Present => Is_Class_Wide_Type (Typ));
+                Set_Entity (Subp_Aspect, Typ);
+ 
+                if No (Aspect_Specifications (Type_Decl)) then
+                   Set_Aspect_Specifications
+                     (Type_Decl, New_List (Subp_Aspect));
+                else
+                   Append_To
+                     (Aspect_Specifications (Type_Decl), Subp_Aspect);
+                end if;
+ 
+                Set_Expression_Copy
+                  (Subp_Aspect, New_Copy_Tree (Expression (Subp_Aspect)));
+ 
+                Analyze_One_Aspect (Type_Decl, Typ, Subp_Aspect);
+             end if;
+          end Create_And_Append_Aspect;
+ 
+          -------------------------------
+          -- Constructor_Components_OK --
+          -------------------------------
+ 
+          function Constructor_Components_OK
+            (Typ : Entity_Id; Subp : Node_Id) return Boolean
+          is
+             Comp_Decl : Node_Id;
+             Comp_Id   : Entity_Id;
+             Comp_Typ  : Entity_Id;
+             OK        : Boolean := True;
+ 
+          begin
+             Comp_Decl := First_Component_Declaration (Typ);
+             while Present (Comp_Decl) loop
+                if Nkind (Comp_Decl) = N_Component_Declaration then
+                   Comp_Id  := Defining_Identifier (Comp_Decl);
+                   Comp_Typ := Etype (Comp_Id);
+ 
+                   if Chars (Comp_Id) /= Name_uParent
+                     and then Is_Record_Type (Comp_Typ)
+                     and then not Has_Parameterless_Constructor (Comp_Typ)
+                     and then not Is_Fully_Initialized_Type (Comp_Typ)
+                     and then No (Expression (Comp_Decl))
+                   then
+                      Error_Msg_NE
+                        ("explicit initialization required for component &",
+                         Subp, Comp_Id);
+                      OK := False;
+                   end if;
+                end if;
+ 
+                Next_Non_Pragma (Comp_Decl);
+             end loop;
+ 
+             return OK;
+          end Constructor_Components_OK;
+ 
           --  Local variables
  
!          Att_N      : constant Node_Id   := Original_Node (N);
!          Def_Name   : constant Entity_Id := Defining_Unit_Name (Att_N);
!          Att_Name   : constant Name_Id   := Attribute_Name (Def_Name);
!          Att_Prefix : constant Node_Id   := Prefix (Def_Name);
! 
!          Is_Class_Wide_Attr : constant Boolean :=
!            Nkind (Att_Prefix) = N_Attribute_Reference
!              and then Attribute_Name (Att_Prefix) = Name_Class;
! 
!          Curr_Ent_In_Scope : constant Entity_Id :=
!            Current_Entity_In_Scope
!              (if Is_Class_Wide_Attr
!               then Prefix (Att_Prefix) -- cases like T'Class'Write
!               else Att_Prefix);
! 
!          Prefix_E : Entity_Id := Empty;
  
        --  Start of processing for Analyze_Direct_Attribute_Definition
  
        begin
+          --  This node has been rewritten by the parser subprogram
+          --  Rewrite_Entity_If_Direct_Attribute_Def (par-ch6.adb)
+ 
           pragma Assert (N /= Att_N);
  
+          Error_Msg_Name_1 := Att_Name;
+ 
           if not Is_Direct_Attribute_Definition_Name (Att_Name) then
              Error_Msg_N
                ("direct definition syntax not supported for attribute%",
                 Designator);
           end if;
  
+          if Is_Library_Level_Entity (Designator)
+            and then Scope (Designator) = Standard_Standard
+          then
+             Error_Msg_N
+               ("attribute names not allowed for library subprograms",
+                Designator);
+             return;
+          end if;
+ 
+          if Is_Class_Wide_Attr
+            and then
+              Att_Name not in Name_Input | Name_Output | Name_Read | Name_Write
+          then
+             Error_Msg_N
+               ("% not supported as class-wide attribute", Designator);
+             return;
+          end if;
+ 
+          if No (Curr_Ent_In_Scope) then
+             Error_Msg_N
+               ("prefix& of attribute% must be a type with same scope",
+                Att_Prefix);
+             return;
+ 
+          else
+             Prefix_E := Get_Full_View (Curr_Ent_In_Scope);
+ 
+             if Is_Class_Wide_Attr then
+                if Is_Tagged_Type (Prefix_E) then
+                   Prefix_E := Class_Wide_Type (Prefix_E);
+                else
+                   Error_Msg_N
+                     ("prefix& not allowed for untagged type", Att_Prefix);
+                   return;
+                end if;
+             end if;
+          end if;
+ 
           --  Handle each kind of attribute separately
  
           case Att_Name is
  
              when Name_Constructor =>
  
!                if Parent_Kind (N) = N_Subprogram_Body then
  
!                   --  A constructor body for a derived type whose parent type
!                   --  needs construction and has no parameterless constructor
!                   --  must call its parent constructor through a Super aspect
!                   --  to initialize its parent components.
! 
!                   if Present (Prefix_E)
!                     and then Is_Tagged_Type (Prefix_E)
!                     and then Is_Derived_Type (Prefix_E)
!                     and then Needs_Construction (Etype (Prefix_E))
!                     and then
!                       not Has_Parameterless_Constructor (Etype (Prefix_E))
!                     and then No (Find_Aspect (Designator, Aspect_Super))
!                   then
!                      Error_Msg_Name_1 := Name_Super;
!                      Error_Msg_NE
!                        ("missing % aspect to initialize components of parent"
!                         & " type &", Designator, Etype (Prefix_E));
!                   end if;
! 
!                   --  If missing, add a default initialization aspect for this
!                   --  constructor's body: Initialize => (others => <>).
! 
!                   if not Has_Aspect (Designator, Aspect_Initialize)
!                     and then Present (Prefix_E)
!                     and then Ekind (Prefix_E) = E_Record_Type
!                     and then Constructor_Components_OK (Prefix_E, Designator)
!                   then
                       Add_Default_Initialize_Aspect;
                    end if;
  
*************** package body Sem_Ch6 is
*** 5319,5325 ****
                 elsif No (Prefix_E) or else not Is_Type (Prefix_E) then
                    Error_Msg_N
                      ("prefix& of attribute% must be a type",
!                      Prefix (Defining_Unit_Name (Att_N)));
  
                 elsif Ekind (Designator) /= E_Procedure then
                    Error_Msg_N
--- 5526,5532 ----
                 elsif No (Prefix_E) or else not Is_Type (Prefix_E) then
                    Error_Msg_N
                      ("prefix& of attribute% must be a type",
!                      Prefix (Def_Name));
  
                 elsif Ekind (Designator) /= E_Procedure then
                    Error_Msg_N
*************** package body Sem_Ch6 is
*** 5336,5342 ****
                          then Sloc (N)
                          else Sloc (First_Formal (Designator)));
                    begin
!                      Error_Msg_Node_1 := Defining_Unit_Name (Att_N);
                       Error_Msg_Node_2 := Prefix_E;
                       Error_Msg
                         ("& must have a first IN OUT formal of type&", Problem);
--- 5543,5549 ----
                          then Sloc (N)
                          else Sloc (First_Formal (Designator)));
                    begin
!                      Error_Msg_Node_1 := Def_Name;
                       Error_Msg_Node_2 := Prefix_E;
                       Error_Msg
                         ("& must have a first IN OUT formal of type&", Problem);
*************** package body Sem_Ch6 is
*** 5374,5380 ****
              when Name_Destructor  =>
                 if Parent_Kind (N) not in N_Subprogram_Declaration then
                    return;
!                elsif not Is_Record_Type (Prefix_E) then
                    Error_Msg_N
                      ("destructors can only be specified for record types",
                       Designator);
--- 5581,5589 ----
              when Name_Destructor  =>
                 if Parent_Kind (N) not in N_Subprogram_Declaration then
                    return;
!                elsif not Present (Prefix_E)
!                  or else not Is_Record_Type (Prefix_E)
!                then
                    Error_Msg_N
                      ("destructors can only be specified for record types",
                       Designator);
*************** package body Sem_Ch6 is
*** 5404,5412 ****
                    Set_Destructor (Prefix_E, Designator);
                 end if;
  
!             when others           =>
!                null;
  
           end case;
        end Analyze_Direct_Attribute_Definition;
  
--- 5613,5651 ----
                    Set_Destructor (Prefix_E, Designator);
                 end if;
  
!             when Name_Constant_Indexing
!                | Name_Default_Iterator
!                | Name_Integer_Literal
!                | Name_Put_Image
!                | Name_Real_Literal
!                | Name_String_Literal
!                | Name_Variable_Indexing
!                | Name_Read
!                | Name_Input
!                | Name_Write
!                | Name_Output
!             =>
!                if Scope (Prefix_E) /= Current_Scope then
!                   Error_Msg_N ("subprogram for aspect must be declared in "
!                                & "same scope as&", Att_Prefix);
  
+                elsif not Is_Type (Prefix_E) then
+                   Error_Msg_N
+                     ("prefix& of attribute% must be a type with same scope",
+                      Att_Prefix);
+ 
+                --  Create an aspect for the appropriate type, unless we have
+                --  a subprogram body, since the aspect will already have been
+                --  created for the subprogram declaration. (Except maybe for
+                --  rare case of subp body that serves as the declaration? ???)
+ 
+                elsif Nkind (Parent (N)) /= N_Subprogram_Body then
+                   Create_And_Append_Aspect
+                     (Att_Name, Chars (Designator), Prefix_E);
+                end if;
+ 
+             when others =>
+                null;
           end case;
        end Analyze_Direct_Attribute_Definition;
  
diff -Nrcpad gcc-17-20260628/gcc/ada/sem_ch7.adb gcc-17-20260705/gcc/ada/sem_ch7.adb
*** gcc-17-20260628/gcc/ada/sem_ch7.adb	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/ada/sem_ch7.adb	Sun Jul  5 22:32:06 2026
*************** package body Sem_Ch7 is
*** 1337,1347 ****
        --  primitive equality operator and, if so, make it so that it will be
        --  used as the predefined operator of the private view of the record.
  
!       procedure Inspect_Abstract_Constructors_Completion (Id : Entity_Id);
        --  For each abstract constructor in the visible part of package Id,
        --  verify that a non-abstract counterpart exists in the private part
        --  of the package, and emit an error for each that lacks one.
  
        procedure Install_Parent_Private_Declarations (Inst_Id : Entity_Id);
        --  Given the package entity of a generic package instantiation or
        --  formal package whose corresponding generic is a child unit, installs
--- 1337,1354 ----
        --  primitive equality operator and, if so, make it so that it will be
        --  used as the predefined operator of the private view of the record.
  
!       procedure Inspect_Abstract_Constructors_Completion (Pkg_Id : Entity_Id);
        --  For each abstract constructor in the visible part of package Id,
        --  verify that a non-abstract counterpart exists in the private part
        --  of the package, and emit an error for each that lacks one.
  
+       procedure Inspect_Components_Needing_Construction (Pkg_Id : Entity_Id);
+       --  For each record type declared in package Id that does not require
+       --  a constructor, report an error on components that have a type that
+       --  requires explicit constructor initialization (that is, a type that
+       --  needs construction which has no default parameterless constructor
+       --  and no default initialization expression).
+ 
        procedure Install_Parent_Private_Declarations (Inst_Id : Entity_Id);
        --  Given the package entity of a generic package instantiation or
        --  formal package whose corresponding generic is a child unit, installs
*************** package body Sem_Ch7 is
*** 1458,1466 ****
        -- Inspect_Abstract_Constructors_Completion --
        ----------------------------------------------
  
!       procedure Inspect_Abstract_Constructors_Completion (Id : Entity_Id) is
!          First_Priv : constant Entity_Id := First_Private_Entity (Id);
!          Vis_E      : Entity_Id          := First_Entity (Id);
  
        begin
           while Present (Vis_E) and then Vis_E /= First_Priv loop
--- 1465,1474 ----
        -- Inspect_Abstract_Constructors_Completion --
        ----------------------------------------------
  
!       procedure Inspect_Abstract_Constructors_Completion (Pkg_Id : Entity_Id)
!       is
!          First_Priv : constant Entity_Id := First_Private_Entity (Pkg_Id);
!          Vis_E      : Entity_Id          := First_Entity (Pkg_Id);
  
        begin
           while Present (Vis_E) and then Vis_E /= First_Priv loop
*************** package body Sem_Ch7 is
*** 1498,1503 ****
--- 1506,1556 ----
           end loop;
        end Inspect_Abstract_Constructors_Completion;
  
+       ---------------------------------------------
+       -- Inspect_Components_Needing_Construction --
+       ---------------------------------------------
+ 
+       procedure Inspect_Components_Needing_Construction (Pkg_Id : Entity_Id) is
+          Comp_Decl : Node_Id;
+          Comp_Id   : Entity_Id;
+          Comp_Typ  : Entity_Id;
+          E         : Entity_Id;
+ 
+       begin
+          E := First_Entity (Pkg_Id);
+ 
+          while Present (E) loop
+             if Is_Record_Type (E)
+               and then not Needs_Construction (E)
+               and then Comes_From_Source (E)
+               and then not Is_Class_Wide_Type (E)
+               and then Nkind (Parent (E)) = N_Full_Type_Declaration
+             then
+                Comp_Decl := First_Component_Declaration (E);
+ 
+                while Present (Comp_Decl) loop
+                   if Nkind (Comp_Decl) = N_Component_Declaration then
+                      Comp_Id  := Defining_Identifier (Comp_Decl);
+                      Comp_Typ := Etype (Comp_Id);
+ 
+                      if Needs_Construction (Comp_Typ)
+                        and then not Has_Parameterless_Constructor (Comp_Typ)
+                        and then No (Expression (Comp_Decl))
+                      then
+                         Error_Msg_NE
+                           ("& needs explicit constructor call",
+                            Comp_Id, Comp_Id);
+                      end if;
+                   end if;
+ 
+                   Next_Non_Pragma (Comp_Decl);
+                end loop;
+             end if;
+ 
+             Next_Entity (E);
+          end loop;
+       end Inspect_Components_Needing_Construction;
+ 
        ----------------------------------------
        -- Inspect_Unchecked_Union_Completion --
        ----------------------------------------
*************** package body Sem_Ch7 is
*** 1945,1950 ****
--- 1998,2004 ----
  
        if Core_Extensions_Allowed then
           Inspect_Abstract_Constructors_Completion (Id);
+          Inspect_Components_Needing_Construction (Id);
        end if;
  
        E := First_Entity (Id);
diff -Nrcpad gcc-17-20260628/gcc/ada/sem_ch8.adb gcc-17-20260705/gcc/ada/sem_ch8.adb
*** gcc-17-20260628/gcc/ada/sem_ch8.adb	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/ada/sem_ch8.adb	Sun Jul  5 22:32:06 2026
*************** package body Sem_Ch8 is
*** 5647,5653 ****
     procedure Find_Direct_Name (N : Node_Id) is
        E   : Entity_Id;
        E2  : Entity_Id;
!       Msg : Boolean;
  
        Homonyms : Entity_Id;
        --  Saves start of homonym chain
--- 5647,5653 ----
     procedure Find_Direct_Name (N : Node_Id) is
        E   : Entity_Id;
        E2  : Entity_Id;
!       Msg : Boolean := False;
  
        Homonyms : Entity_Id;
        --  Saves start of homonym chain
diff -Nrcpad gcc-17-20260628/gcc/ada/sem_res.adb gcc-17-20260705/gcc/ada/sem_res.adb
*** gcc-17-20260628/gcc/ada/sem_res.adb	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/ada/sem_res.adb	Sun Jul  5 22:32:06 2026
*************** with Sem_Ch4;        use Sem_Ch4;
*** 67,72 ****
--- 67,73 ----
  with Sem_Ch5;        use Sem_Ch5;
  with Sem_Ch6;        use Sem_Ch6;
  with Sem_Ch8;        use Sem_Ch8;
+ with Sem_Ch9;        use Sem_Ch9;
  with Sem_Ch13;       use Sem_Ch13;
  with Sem_Dim;        use Sem_Dim;
  with Sem_Disp;       use Sem_Disp;
*************** package body Sem_Res is
*** 7752,7896 ****
     -- Resolve_Declare_Expression --
     --------------------------------
  
!    procedure Resolve_Declare_Expression
!      (N   : Node_Id;
!       Typ : Entity_Id)
!    is
!       Expr : constant Node_Id := Expression (N);
! 
!       Decl  : Node_Id;
!       Local : Entity_Id := Empty;
! 
!       Save_Hidden_Map : constant Elist_Id := New_Elmt_List;
!       --  Stores the map of identifiers, and corresponding entities, that
!       --  temporarily loose visibility due to homonym declarations in the
!       --  current declare expression.
! 
!       function Replace_Local (N  : Node_Id) return Traverse_Result;
!       --  Use a tree traversal to replace each occurrence of the name of
!       --  a local object declared in the construct, with the corresponding
!       --  entity. This replaces the usual way to perform name capture by
!       --  visibility, because it is not possible to place on the scope
!       --  stack the fake scope created for the analysis of the local
!       --  declarations; such a scope conflicts with the transient scopes
!       --  that may be generated if the expression includes function calls
!       --  requiring finalization.
! 
!       -------------------
!       -- Replace_Local --
!       -------------------
! 
!       function Replace_Local (N  : Node_Id) return Traverse_Result is
!       begin
!          --  The identifier may be the prefix of a selected component,
!          --  but not a selector name, because the local entities do not
!          --  have a scope that can be named: a selected component whose
!          --  selector is a homonym of a local entity must denote some
!          --  global entity.
! 
!          if Nkind (N) = N_Identifier
!            and then Chars (N) = Chars (Local)
!            and then No (Entity (N))
!            and then
!              (Nkind (Parent (N)) /= N_Selected_Component
!                or else N = Prefix (Parent (N)))
!          then
!             Set_Entity (N, Local);
!             Set_Etype (N, Etype (Local));
!             Generate_Reference (Local, N);
!          end if;
! 
!          return OK;
!       end Replace_Local;
! 
!       procedure Replace_Local_Ref is new Traverse_Proc (Replace_Local);
! 
!    --  Start of processing for Resolve_Declare_Expression
  
     begin
!       --  Create a transient scope if the type of this declare-expression
!       --  or its expression requires it; this must be done before we push
!       --  in the scope stack the scope of this declare expression (in order
!       --  to properly remove it from the stack on exit from this routine).
!       --  Given that we don't know yet if secondary stack management will
!       --  be needed, we assume the worst case.
! 
!       if Expander_Active
!         and then (Requires_Transient_Scope (Typ)
!                     or else Has_Sec_Stack_Call (Expr))
!       then
!          Establish_Transient_Scope (N, Manage_Sec_Stack => True);
!       end if;
  
        Push_Scope (Scope_Link (N));
  
!       Decl := First (Actions (N));
! 
!       while Present (Decl) loop
!          if Nkind (Decl) in
!             N_Object_Declaration | N_Object_Renaming_Declaration
!               and then Comes_From_Source (Defining_Identifier (Decl))
!          then
!             Local := Defining_Identifier (Decl);
!             Replace_Local_Ref (Expr);
! 
!             --  Traverse the expression to replace references to local
!             --  variables that occur within declarations of the
!             --  declare_expression.
! 
!             declare
!                D : Node_Id := Next (Decl);
!             begin
!                while Present (D) loop
!                   Replace_Local_Ref (D);
!                   Next (D);
!                end loop;
!             end;
! 
!             --  Homonyms of the new local declaration are saved to be restored
!             --  after the resolution of the declare block's expression.
! 
!             Append_Elmt (Local, Save_Hidden_Map);
!             Append_Elmt (Get_Name_Entity_Id (Chars (Local)), Save_Hidden_Map);
  
!             --  Update the references to local in the name table and make them
!             --  immediately visible to be available within the expression.
  
!             Set_Current_Entity (Local);
!             Set_Is_Immediately_Visible (Local);
!             Set_Is_Not_Self_Hidden (Local);
!          end if;
  
!          Next (Decl);
!       end loop;
  
!       --  The end of the declarative list is a freeze point for the
!       --  local declarations.
  
!       if Present (Local) then
!          Decl := Parent (Local);
!          Freeze_All (First_Entity (Scope (Local)), Decl);
        end if;
  
!       Resolve (Expr, Typ);
!       Check_Unset_Reference (Expr);
! 
!       --  Restore any hidden entity homonyms to a local one
! 
!       declare
!          Cursor : Elmt_Id := First_Elmt (Save_Hidden_Map);
!          Name : Name_Id;
!       begin
!          while Present (Cursor) loop
!             Name := Chars (Node (Cursor));
!             Next_Elmt (Cursor);
!             Set_Name_Entity_Id (Name, Node (Cursor));
!             Next_Elmt (Cursor);
!          end loop;
!       end;
  
        pragma Assert (Current_Scope = Scope_Link (N));
        End_Scope;
     end Resolve_Declare_Expression;
  
     -----------------------------------
--- 7753,7801 ----
     -- Resolve_Declare_Expression --
     --------------------------------
  
!    procedure Resolve_Declare_Expression (N : Node_Id; Typ : Entity_Id) is
!       After : Node_Id;
!       SE    : Scope_Stack_Entry;
  
     begin
!       --  First push the scope of the EWA and install its declarations
  
        Push_Scope (Scope_Link (N));
+       Install_Declarations (Scope_Link (N));
  
!       --  The end of the declarative list is a freezing point for the
!       --  local declarations.
  
!       After := Last (Actions (N));
!       Freeze_All (First_Entity (Scope_Link (N)), After);
  
!       --  Now resolve the expression
  
!       Resolve (Expression (N), Typ);
!       Check_Unset_Reference (Expression (N));
  
!       --  If the resolution of the expression has created a transient
!       --  scope, we first need to save the transient scope and pop it.
  
!       if Scope_Is_Transient then
!          SE := Scope_Stack.Table (Scope_Stack.Last);
!          Scope_Stack.Decrement_Last;
!       else
!          SE.Is_Transient := False;
        end if;
  
!       --  Remove the scope and its declarations from visibility. Note that
!       --  the scope is purely static and the EWA is not a master construct
!       --  (see AI22-0017) so the lifetime of the objects does not end here.
  
        pragma Assert (Current_Scope = Scope_Link (N));
        End_Scope;
+ 
+       --  Push again the transient scope, if any
+ 
+       if SE.Is_Transient then
+          Scope_Stack.Append (SE);
+       end if;
     end Resolve_Declare_Expression;
  
     -----------------------------------
diff -Nrcpad gcc-17-20260628/gcc/ada/sem_util.adb gcc-17-20260705/gcc/ada/sem_util.adb
*** gcc-17-20260628/gcc/ada/sem_util.adb	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/ada/sem_util.adb	Sun Jul  5 22:32:06 2026
*************** package body Sem_Util is
*** 111,116 ****
--- 111,122 ----
     --  and Build_Discriminal_Subtype_Of_Component. C is a list of constraints,
     --  Loc is the source location, T is the original subtype.
  
+    function Direct_Attribute_Names_Correspond
+      (Parent_Subp : Entity_Id; Candidate_Subp : Entity_Id) return Boolean;
+    --  Returns True if both Parent_Subp and Candidate_Subp are names of
+    --  attribute subprograms and the aspect parts of their names are for
+    --  the same aspect; otherwise returns False.
+ 
     procedure Examine_Array_Bounds
       (Typ        : Entity_Id;
        All_Static : out Boolean;
*************** package body Sem_Util is
*** 6392,6410 ****
     --------------------------------------
  
     function Direct_Attribute_Definition_Name
!      (Prefix : Entity_Id; Att_Name : Name_Id) return Name_Id is
     begin
!       if Nkind (Prefix) = N_Attribute_Reference then
!          Error_Msg_N ("attribute streams not supported in "
!                       & "direct attribute definitions",
!                       Prefix);
        end if;
  
        pragma Assert (Is_Attribute_Name (Att_Name));
        return New_External_Name
!                (Related_Id => Chars (Prefix),
!                 Suffix => "_" & Get_Name_String (Att_Name) & "_Att",
!                 Prefix => 'D');
     end Direct_Attribute_Definition_Name;
  
     --------------------------------------
--- 6398,6447 ----
     --------------------------------------
  
     function Direct_Attribute_Definition_Name
!      (Prefix : Entity_Id; Att_Name : Name_Id) return Name_Id
!    is
!       Initial_Prefix     : Entity_Id := Prefix;
!       Prefix_Attr_Name   : Name_Id;
!       Is_Class_Wide_Attr : Boolean := False;
! 
     begin
!       --  Account for "Class" attribute names (for stream attributes),
!       --  when either the prefix already denotes a class-wide type or
!       --  the prefix has the form "T'Class".
! 
!       if Is_Entity (Prefix) and then Is_Class_Wide_Type (Prefix) then
!          Initial_Prefix := Root_Type (Prefix);
!          Is_Class_Wide_Attr := True;
! 
!       elsif Nkind (Prefix) = N_Attribute_Reference then
!          Prefix_Attr_Name := Attribute_Name (Prefix);
! 
!          if Prefix_Attr_Name /= Name_Class then
!             Error_Msg_N ("unsupported kind of attribute in "
!                          & "direct attribute definition",
!                          Prefix);
!          else
!             Is_Class_Wide_Attr := True;
!          end if;
! 
!          Initial_Prefix := Sinfo.Nodes.Prefix (Prefix);
!       end if;
! 
!       if Nkind (Prefix) = N_Defining_Program_Unit_Name then
!          if Present (Name (Prefix)) then
!             Error_Msg_N
!               ("attribute names not allowed for library subprograms", Prefix);
!          end if;
! 
!          Initial_Prefix := Defining_Identifier (Prefix);
        end if;
  
        pragma Assert (Is_Attribute_Name (Att_Name));
        return New_External_Name
!                (Related_Id => Chars (Initial_Prefix),
!                 Suffix =>
!                   (if Is_Class_Wide_Attr then "'class" else "")
!                   & "'" & Get_Name_String (Att_Name));
     end Direct_Attribute_Definition_Name;
  
     --------------------------------------
*************** package body Sem_Util is
*** 6754,6763 ****
           --  but for predefined dispatching operations we cannot rely on
           --  the name of the primitive to identify a candidate since their
           --  name is internally built by adding a suffix to the name of the
!          --  tagged type.
  
           if Chars (Subp) = Chars (Ancestor_Op)
             or else Is_Predefined_Dispatching_Operation (Subp)
           then
              --  Handle case where Ancestor_Op is a primitive of a progenitor.
              --  We rely on internal entities that map interface primitives:
--- 6791,6803 ----
           --  but for predefined dispatching operations we cannot rely on
           --  the name of the primitive to identify a candidate since their
           --  name is internally built by adding a suffix to the name of the
!          --  tagged type. We also account for cases of attribute subprograms,
!          --  where the subprogram names may differ, but correspondence and
!          --  overriding can still occur.
  
           if Chars (Subp) = Chars (Ancestor_Op)
             or else Is_Predefined_Dispatching_Operation (Subp)
+            or else Direct_Attribute_Names_Correspond (Ancestor_Op, Subp)
           then
              --  Handle case where Ancestor_Op is a primitive of a progenitor.
              --  We rely on internal entities that map interface primitives:
*************** package body Sem_Util is
*** 7584,7589 ****
--- 7624,7669 ----
        end if;
     end Designate_Same_Unit;
  
+    ---------------------------------------
+    -- Direct_Attribute_Names_Correspond --
+    ---------------------------------------
+ 
+    function Direct_Attribute_Names_Correspond
+      (Parent_Subp : Entity_Id; Candidate_Subp : Entity_Id) return Boolean
+    is
+    begin
+       if not Is_Direct_Attribute_Subp_Name (Chars (Parent_Subp))
+         or else not Is_Direct_Attribute_Subp_Name (Chars (Candidate_Subp))
+       then
+          return False;
+ 
+       else
+          declare
+             Parent_Name       : constant String :=
+                                   Get_Name_String (Chars (Parent_Subp));
+             Parent_Attr_Start : Natural := 2;
+ 
+             Cand_Name         : constant String :=
+                                   Get_Name_String (Chars (Candidate_Subp));
+             Cand_Attr_Start   : Natural := 2;
+          begin
+             while Parent_Name (Parent_Attr_Start) /= ''' loop
+                Parent_Attr_Start := Parent_Attr_Start + 1;
+             end loop;
+ 
+             while Cand_Name (Cand_Attr_Start) /= ''' loop
+                Cand_Attr_Start := Cand_Attr_Start + 1;
+             end loop;
+ 
+             --  Compare the internal subprogram names from the apostrophe on,
+             --  to determine whether names are for the same aspect/attribute.
+ 
+             return Parent_Name (Parent_Attr_Start .. Parent_Name'Last)
+                      = Cand_Name (Cand_Attr_Start .. Cand_Name'Last);
+          end;
+       end if;
+    end Direct_Attribute_Names_Correspond;
+ 
     ------------------------
     -- Discriminated_Size --
     ------------------------
*************** package body Sem_Util is
*** 14135,14140 ****
--- 14215,14256 ----
        return Name_Find;
     end Add_Suffix;
  
+    ---------------------------------
+    -- First_Component_Declaration --
+    ---------------------------------
+ 
+    function First_Component_Declaration (Typ : Entity_Id) return Node_Id is
+       Type_Def  : Node_Id;
+       Comp_List : Node_Id := Empty;
+ 
+    begin
+       pragma Assert (Is_Record_Type (Typ)
+         and then Nkind (Parent (Typ)) = N_Full_Type_Declaration);
+ 
+       Type_Def := Type_Definition (Parent (Typ));
+ 
+       --  Locate the non-inherited component list: the record extension part
+       --  for a derived type, the type definition for a non-derived one.
+ 
+       if Is_Derived_Type (Typ) then
+          if Nkind (Type_Def) = N_Derived_Type_Definition
+            and then Present (Record_Extension_Part (Type_Def))
+          then
+             Comp_List := Component_List (Record_Extension_Part (Type_Def));
+          end if;
+ 
+       else
+          pragma Assert (Nkind (Type_Def) = N_Record_Definition);
+          Comp_List := Component_List (Type_Def);
+       end if;
+ 
+       if Present (Comp_List) then
+          return First_Non_Pragma (Component_Items (Comp_List));
+       else
+          return Empty;
+       end if;
+    end First_Component_Declaration;
+ 
     -------------------
     -- Remove_Suffix --
     -------------------
*************** package body Sem_Util is
*** 15426,15437 ****
           New_Item       : Node_Id;
           Item_Aspect_Id : constant Nonoverridable_Aspect_Id :=
             Get_Aspect_Id (Item);
  
        begin
           New_Item := Make_Aspect_Specification (
             Sloc => Loc,
             Identifier => Identifier (Item),
!            Expression => New_Copy_Tree (Expression (Item)));
           Set_Entity (New_Item, Typ);
  
           --  We are trying here to implement RM 13.1(15.5):
--- 15542,15571 ----
           New_Item       : Node_Id;
           Item_Aspect_Id : constant Nonoverridable_Aspect_Id :=
             Get_Aspect_Id (Item);
+          New_Expr       : Node_Id;
  
        begin
+          --  When the expression of the parent aspect is a name that has
+          --  the form of a direct attribute subprogram name, then construct
+          --  a new name using the derived type's name combined with the same
+          --  attribute/aspect name.
+ 
+          if Nkind (Expression (Item)) = N_Identifier
+            and then
+              Is_Direct_Attribute_Subp_Name (Chars (Expression (Item)))
+          then
+             New_Expr :=
+               Make_Identifier (Loc,
+                 Direct_Attribute_Definition_Name
+                   (Typ, Aspect_Names (Item_Aspect_Id)));
+          else
+             New_Expr := New_Copy_Tree (Expression (Item));
+          end if;
+ 
           New_Item := Make_Aspect_Specification (
             Sloc => Loc,
             Identifier => Identifier (Item),
!            Expression => New_Expr);
           Set_Entity (New_Item, Typ);
  
           --  We are trying here to implement RM 13.1(15.5):
*************** package body Sem_Util is
*** 16488,16493 ****
--- 16622,16645 ----
     end Is_Attribute_Result;
  
     -----------------------------------
+    -- Is_Direct_Attribute_Subp_Name --
+    -----------------------------------
+ 
+    function Is_Direct_Attribute_Subp_Name (Nam : Name_Id) return Boolean is
+       Name_Str : constant String := Get_Name_String (Nam);
+       Index    : Positive := 1;
+ 
+    begin
+       while Index < Name_Str'Length and then Name_Str (Index) /= ''' loop
+          Index := Index + 1;
+       end loop;
+ 
+       --  Return True iff an apostrophe is found before the end of the name
+ 
+       return Index < Name_Str'Length;
+    end Is_Direct_Attribute_Subp_Name;
+ 
+    -----------------------------------
     -- Is_Direct_Attribute_Subp_Spec --
     -----------------------------------
  
*************** package body Sem_Util is
*** 27543,27549 ****
               and then Is_Predefined_Dispatching_Operation (E2)
               and then Same_TSS (E1, E2))
          or else
!            (Is_Init_Proc (E1) and then Is_Init_Proc (E2));
     end Primitive_Names_Match;
  
     -----------------------
--- 27695,27703 ----
               and then Is_Predefined_Dispatching_Operation (E2)
               and then Same_TSS (E1, E2))
          or else
!            (Is_Init_Proc (E1) and then Is_Init_Proc (E2))
!         or else
!            Direct_Attribute_Names_Correspond (E1, E2);
     end Primitive_Names_Match;
  
     -----------------------
diff -Nrcpad gcc-17-20260628/gcc/ada/sem_util.ads gcc-17-20260705/gcc/ada/sem_util.ads
*** gcc-17-20260628/gcc/ada/sem_util.ads	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/ada/sem_util.ads	Sun Jul  5 22:32:06 2026
*************** package Sem_Util is
*** 1941,1946 ****
--- 1941,1951 ----
     function Is_Attribute_Result (N : Node_Id) return Boolean;
     --  Determine whether node N denotes attribute 'Result
  
+    function Is_Direct_Attribute_Subp_Name (Nam : Name_Id) return Boolean;
+    --  Determine whether Nam has the proper form for being the name of
+    --  a direct attribute definition subprogram (basically the function
+    --  tests that the name string includes an apostrophe).
+ 
     function Is_Direct_Attribute_Subp_Spec (N : Node_Id) return Boolean;
     --  Determine whether N denotes a direct attribute definition subprogram
     --  specification node.
*************** package Sem_Util is
*** 3180,3185 ****
--- 3185,3200 ----
     --  Inherit predicate functions and Has_Predicates flag from type From_Typ.
     --  Typ is the destination type.
  
+    function First_Component_Declaration (Typ : Entity_Id) return Node_Id;
+    --  Return the first non-pragma component declaration among the
+    --  non-inherited (own) components of record type Typ, or Empty when Typ
+    --  has no own component list or that list is empty. For a derived record
+    --  type the own components are those of the record extension part; for a
+    --  non-derived record type they are those of its type definition. Iterate
+    --  over the remaining own component declarations with Next_Non_Pragma. The
+    --  caller must ensure that Typ is a record type and Parent (Typ) is an
+    --  N_Full_Type_Declaration.
+ 
     procedure Record_Possible_Part_Of_Reference
       (Var_Id : Entity_Id;
        Ref    : Node_Id);
diff -Nrcpad gcc-17-20260628/gcc/ada/snames.adb-tmpl gcc-17-20260705/gcc/ada/snames.adb-tmpl
*** gcc-17-20260628/gcc/ada/snames.adb-tmpl	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/ada/snames.adb-tmpl	Sun Jul  5 22:32:06 2026
*************** package body Snames is
*** 126,137 ****
     function Get_Attribute_Id (N : Name_Id) return Attribute_Id is
     begin
        case N is
-          when Name_Constant_Indexing =>
-             return Attribute_Constant_Indexing;
           when Name_CPU =>
              return Attribute_CPU;
-          when Name_Default_Iterator =>
-             return Attribute_Default_Iterator;
           when Name_Dispatching_Domain =>
              return Attribute_Dispatching_Domain;
           when Name_Implicit_Dereference =>
--- 126,133 ----
*************** package body Snames is
*** 142,149 ****
              return Attribute_Iterable;
           when Name_Iterator_Element =>
              return Attribute_Iterator_Element;
-          when Name_Variable_Indexing =>
-             return Attribute_Variable_Indexing;
           when First_Attribute_Name .. Last_Attribute_Name =>
              return Attribute_Id'Val (N - First_Attribute_Name);
           when others =>
--- 138,143 ----
*************** package body Snames is
*** 419,425 ****
     function Is_Direct_Attribute_Definition_Name (N : Name_Id) return Boolean is
     begin
        return
!         Is_Attribute_Name (N) and then N in Name_Constructor | Name_Destructor;
     end Is_Direct_Attribute_Definition_Name;
  
     ------------------------------
--- 413,432 ----
     function Is_Direct_Attribute_Definition_Name (N : Name_Id) return Boolean is
     begin
        return
!         Is_Attribute_Name (N)
!           and then N in Name_Constant_Indexing
!                       | Name_Constructor
!                       | Name_Default_Iterator
!                       | Name_Destructor
!                       | Name_Input
!                       | Name_Integer_Literal
!                       | Name_Output
!                       | Name_Put_Image
!                       | Name_Read
!                       | Name_Real_Literal
!                       | Name_String_Literal
!                       | Name_Variable_Indexing
!                       | Name_Write;
     end Is_Direct_Attribute_Definition_Name;
  
     ------------------------------
diff -Nrcpad gcc-17-20260628/gcc/ada/snames.ads-tmpl gcc-17-20260705/gcc/ada/snames.ads-tmpl
*** gcc-17-20260628/gcc/ada/snames.ads-tmpl	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/ada/snames.ads-tmpl	Sun Jul  5 22:32:06 2026
*************** package Snames is
*** 159,175 ****
     Name_Finalizable                    : constant Name_Id := N + $;
     Name_Full_Access_Only               : constant Name_Id := N + $;
     Name_Ghost_Predicate                : constant Name_Id := N + $;
-    Name_Integer_Literal                : constant Name_Id := N + $;
     Name_Local_Restrictions             : constant Name_Id := N + $;
     Name_No_Controlled_Parts            : constant Name_Id := N + $;
     Name_No_Task_Parts                  : constant Name_Id := N + $;
     Name_Potentially_Invalid            : constant Name_Id := N + $;
-    Name_Real_Literal                   : constant Name_Id := N + $;
     Name_Relaxed_Initialization         : constant Name_Id := N + $;
     Name_Stable_Properties              : constant Name_Id := N + $;
     Name_Static_Predicate               : constant Name_Id := N + $;
     Name_Storage_Model_Type             : constant Name_Id := N + $;
-    Name_String_Literal                 : constant Name_Id := N + $;
     Name_Synchronization                : constant Name_Id := N + $;
     Name_Taint_Sanitizer                : constant Name_Id := N + $;
     Name_Taint_Sink                     : constant Name_Id := N + $;
--- 159,172 ----
*************** package Snames is
*** 960,969 ****
--- 957,968 ----
     Name_Compiler_Version               : constant Name_Id := N + $; -- GNAT
     Name_Component_Size                 : constant Name_Id := N + $;
     Name_Compose                        : constant Name_Id := N + $;
+    Name_Constant_Indexing              : constant Name_Id := N + $; -- Ada 05
     Name_Constrained                    : constant Name_Id := N + $;
     Name_Constructor                    : constant Name_Id := N + $;
     Name_Count                          : constant Name_Id := N + $;
     Name_Default_Bit_Order              : constant Name_Id := N + $; -- GNAT
+    Name_Default_Iterator               : constant Name_Id := N + $; -- GNAT
     Name_Default_Scalar_Storage_Order   : constant Name_Id := N + $; -- GNAT
     Name_Definite                       : constant Name_Id := N + $;
     Name_Delta                          : constant Name_Id := N + $;
*************** package Snames is
*** 994,999 ****
--- 993,999 ----
     Name_Identity                       : constant Name_Id := N + $;
     Name_Index                          : constant Name_Id := N + $; -- Ada 22
     Name_Initialized                    : constant Name_Id := N + $; -- GNAT
+    Name_Integer_Literal                : constant Name_Id := N + $; -- Ada 12
     Name_Integer_Value                  : constant Name_Id := N + $; -- GNAT
     Name_Invalid_Value                  : constant Name_Id := N + $; -- GNAT
     Name_Large                          : constant Name_Id := N + $; -- Ada 83
*************** package Snames is
*** 1037,1042 ****
--- 1037,1043 ----
     Name_Priority                       : constant Name_Id := N + $; -- Ada 05
     Name_Range                          : constant Name_Id := N + $;
     Name_Range_Length                   : constant Name_Id := N + $; -- GNAT
+    Name_Real_Literal                   : constant Name_Id := N + $; -- Ada 12
     Name_Reduce                         : constant Name_Id := N + $; -- Ada 22
     Name_Ref                            : constant Name_Id := N + $; -- GNAT
     Name_Restriction_Set                : constant Name_Id := N + $; -- GNAT
*************** package Snames is
*** 1058,1063 ****
--- 1059,1065 ----
     Name_Storage_Size                   : constant Name_Id := N + $;
     Name_Storage_Unit                   : constant Name_Id := N + $; -- GNAT
     Name_Stream_Size                    : constant Name_Id := N + $; -- Ada 05
+    Name_String_Literal                 : constant Name_Id := N + $; -- Ada 12
     Name_Super                          : constant Name_Id := N + $; -- GNAT
     Name_System_Allocator_Alignment     : constant Name_Id := N + $; -- GNAT
     Name_Tag                            : constant Name_Id := N + $;
*************** package Snames is
*** 1078,1083 ****
--- 1080,1086 ----
     Name_Valid                          : constant Name_Id := N + $;
     Name_Valid_Scalars                  : constant Name_Id := N + $; -- GNAT
     Name_Value_Size                     : constant Name_Id := N + $; -- GNAT
+    Name_Variable_Indexing              : constant Name_Id := N + $; -- Ada 05
     Name_Version                        : constant Name_Id := N + $;
     Name_Wchar_T_Size                   : constant Name_Id := N + $; -- GNAT
     Name_Wide_Wide_Width                : constant Name_Id := N + $; -- Ada 05
*************** package Snames is
*** 1168,1183 ****
     --  internal attributes is not permitted).
  
     First_Internal_Attribute_Name       : constant Name_Id := N + $;
-    Name_Constant_Indexing              : constant Name_Id := N + $; -- GNAT
     Name_CPU                            : constant Name_Id := N + $;
-    Name_Default_Iterator               : constant Name_Id := N + $; -- GNAT
     Name_Dispatching_Domain             : constant Name_Id := N + $;
     Name_Implicit_Dereference           : constant Name_Id := N + $; -- GNAT
     Name_Interrupt_Priority             : constant Name_Id := N + $;
     Name_Iterable                       : constant Name_Id := N + $; -- GNAT
     Name_Iterator_Element               : constant Name_Id := N + $; -- GNAT
     Name_Secondary_Stack_Size           : constant Name_Id := N + $; -- GNAT
-    Name_Variable_Indexing              : constant Name_Id := N + $; -- GNAT
     Last_Internal_Attribute_Name        : constant Name_Id := N + $;
  
     --  Names of recognized locking policy identifiers
--- 1171,1183 ----
*************** package Snames is
*** 1499,1508 ****
--- 1499,1510 ----
        Attribute_Compiler_Version,
        Attribute_Component_Size,
        Attribute_Compose,
+       Attribute_Constant_Indexing,
        Attribute_Constrained,
        Attribute_Constructor,
        Attribute_Count,
        Attribute_Default_Bit_Order,
+       Attribute_Default_Iterator,
        Attribute_Default_Scalar_Storage_Order,
        Attribute_Definite,
        Attribute_Delta,
*************** package Snames is
*** 1533,1538 ****
--- 1535,1541 ----
        Attribute_Identity,
        Attribute_Index,
        Attribute_Initialized,
+       Attribute_Integer_Literal,
        Attribute_Integer_Value,
        Attribute_Invalid_Value,
        Attribute_Large,
*************** package Snames is
*** 1576,1581 ****
--- 1579,1585 ----
        Attribute_Priority,
        Attribute_Range,
        Attribute_Range_Length,
+       Attribute_Real_Literal,
        Attribute_Reduce,
        Attribute_Ref,
        Attribute_Restriction_Set,
*************** package Snames is
*** 1597,1602 ****
--- 1601,1607 ----
        Attribute_Storage_Size,
        Attribute_Storage_Unit,
        Attribute_Stream_Size,
+       Attribute_String_Literal,
        Attribute_Super,
        Attribute_System_Allocator_Alignment,
        Attribute_Tag,
*************** package Snames is
*** 1617,1622 ****
--- 1622,1628 ----
        Attribute_Valid,
        Attribute_Valid_Scalars,
        Attribute_Value_Size,
+       Attribute_Variable_Indexing,
        Attribute_Version,
        Attribute_Wchar_T_Size,
        Attribute_Wide_Wide_Width,
*************** package Snames is
*** 1680,1697 ****
        --  the special processing required to deal with the fact that their
        --  names are not attribute names.
  
-       Attribute_Constant_Indexing,
        Attribute_CPU,
-       Attribute_Default_Iterator,
        Attribute_Dispatching_Domain,
        Attribute_Implicit_Dereference,
        Attribute_Interrupt_Priority,
        Attribute_Iterable,
!       Attribute_Iterator_Element,
!       Attribute_Variable_Indexing);
  
     subtype Internal_Attribute_Id is Attribute_Id
!      range Attribute_Constant_Indexing .. Attribute_Variable_Indexing;
  
     type Attribute_Set is array (Attribute_Id) of Boolean;
     --  Type used to build attribute classification flag arrays
--- 1686,1700 ----
        --  the special processing required to deal with the fact that their
        --  names are not attribute names.
  
        Attribute_CPU,
        Attribute_Dispatching_Domain,
        Attribute_Implicit_Dereference,
        Attribute_Interrupt_Priority,
        Attribute_Iterable,
!       Attribute_Iterator_Element);
  
     subtype Internal_Attribute_Id is Attribute_Id
!      range Attribute_CPU .. Attribute_Iterator_Element;
  
     type Attribute_Set is array (Attribute_Id) of Boolean;
     --  Type used to build attribute classification flag arrays
diff -Nrcpad gcc-17-20260628/gcc/ada/tracebak.c gcc-17-20260705/gcc/ada/tracebak.c
*** gcc-17-20260628/gcc/ada/tracebak.c	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/ada/tracebak.c	Sun Jul  5 22:32:06 2026
*************** trace_callback (struct _Unwind_Context *
*** 655,660 ****
--- 655,664 ----
    pc = (char *) _Unwind_GetIP (uw_context);
  #endif
  
+   /* Common case of top-of-call-chain reached.  */
+   if (pc == (char *)0)
+     return _URC_NORMAL_STOP;
+ 
    if (uw_data->n_frames_skipped < uw_data->n_frames_to_skip)
      {
        uw_data->n_frames_skipped ++;
diff -Nrcpad gcc-17-20260628/gcc/algol68/a68-low-units.cc gcc-17-20260705/gcc/algol68/a68-low-units.cc
*** gcc-17-20260628/gcc/algol68/a68-low-units.cc	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/algol68/a68-low-units.cc	Sun Jul  5 22:32:06 2026
*************** a68_lower_denotation (NODE_T *p, LOW_CTX
*** 302,307 ****
--- 302,315 ----
        uint64_t val = strtoull (end, &end, radix);
  #endif
        gcc_assert (errno == 0 && end[0] == '\0');
+ 
+       uint64_t max_positive = uint64_t (wi::max_value (type).to_uhwi ());
+       if (errno == ERANGE || val > max_positive)
+ 	{
+ 	  a68_moid_format_token m (moid);
+ 	  a68_error (s, "denotation is too large for %e", &m);
+ 	}
+ 
        return build_int_cst (type, val);
      }
    else if (moid == M_REAL
diff -Nrcpad gcc-17-20260628/gcc/algol68/a68-parser-scanner.cc gcc-17-20260705/gcc/algol68/a68-parser-scanner.cc
*** gcc-17-20260628/gcc/algol68/a68-parser-scanner.cc	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/algol68/a68-parser-scanner.cc	Sun Jul  5 22:32:06 2026
*************** get_next_token (bool in_format,
*** 1679,1684 ****
--- 1679,1695 ----
  	  uint64_t radix = strtoul (A68_PARSER (scan_buf), &end, 10);
  	  gcc_assert (errno == 0 && end != A68_PARSER (scan_buf) && *end == 'r');
  
+ 	  /* Validate radix.  */
+ 	  if (radix != 2
+ 	      && radix != 4
+ 	      && radix != 8
+ 	      && (OPTION_STRICT (&A68_JOB) || radix != 10)
+ 	      && radix != 16)
+ 	    {
+ 	      SCAN_ERROR (true, *start_l, *ref_s,
+ 			  "invalid radix in %<bits%> denotation");
+ 	    }
+ 
  	  /* Get the rest of the bits literal.  Typographical display features
  	     are allowed in the reference language between the digit symbols
  	     composing the denotation.  However, in SUPPER stropping this could
*************** get_next_token (bool in_format,
*** 1698,1703 ****
--- 1709,1715 ----
  	  while (((radix == 2 && (c == '0' || c == '1'))
  		  || (radix == 4 && (c >= '0' && c <= '3'))
  		  || (radix == 8 && (c >= '0' && c <= '7'))
+ 		  || (!OPTION_STRICT (&A68_JOB) && radix == 10 && ISDIGIT (c))
  		  || (radix == 16 && (ISDIGIT (c) || strchr ("abcdef", c) != NO_TEXT))))
  	    {
  	      (sym++)[0] = c;
diff -Nrcpad gcc-17-20260628/gcc/algol68/ga68.vw gcc-17-20260705/gcc/algol68/ga68.vw
*** gcc-17-20260628/gcc/algol68/ga68.vw	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/algol68/ga68.vw	Sun Jul  5 22:32:06 2026
***************
*** 43,48 ****
--- 43,51 ----
    [BF] This is the GNU68-2026-001-brief-selection GNU extension.  It
         adds support for a brief form of the selection construct.
  
+   [DR] This is the GNU68-2026-003-decimal-radices GNU extension.  It
+        adds support for using ten radix in bits denotations.
+ 
    The metaproduction rules, hyper-rules and hyper-alternatives
    introduced by each extension are clearly marked in the sections
    below.  You can easily search for them using the extensions tags in
*************** a) void denotation{80a} : empty{94b} sym
*** 1740,1748 ****
  
  8.2 Bits denotations
  
  8.2.1 Syntax
  
! A) RADIX :: radix two ; radix four ; radix eight ; radix sixteen.
  
  a) structured with row of boolean field
                LENGTH LENGTHETY letter aleph mode denotation{a,80a} :
--- 1743,1753 ----
  
  8.2 Bits denotations
  
+ { Extensions: [DR] }
+ 
  8.2.1 Syntax
  
! A) RADIX :: radix two ; radix four ; radix eight ; radix ten ; radix sixteen.
  
  a) structured with row of boolean field
                LENGTH LENGTHETY letter aleph mode denotation{a,80a} :
*************** b) structured with row of boolean field
*** 1754,1760 ****
         structured with row of boolean field SHORTHETY letter aleph mode denotation{b,c}.
  c) structured wih row of boolean field
                letter aleph mode denotation{a,b,80a} :
!      RADIX{d,e,f,g}, letter r symbol{94a}, RADIX digit{h,i,j,k} sequence.
  d) radix two{c,A347b} : digit two{94b} symbol.
  e) radix four{c,A347b} : digit four{94b} symbol.
  f) radix eight{c,A347b} : digit eight{94b} symbol.
--- 1759,1765 ----
         structured with row of boolean field SHORTHETY letter aleph mode denotation{b,c}.
  c) structured wih row of boolean field
                letter aleph mode denotation{a,b,80a} :
!      RADIX{d,e,f,g}, letter r symbol{94a}, RADIX digit{h,i,j,k,n} sequence.
  d) radix two{c,A347b} : digit two{94b} symbol.
  e) radix four{c,A347b} : digit four{94b} symbol.
  f) radix eight{c,A347b} : digit eight{94b} symbol.
*************** h) radix two digit{c,i} : digit zero sym
*** 1763,1775 ****
  i) radix four digit{c,j} :
       radix two digit{h} ; digit two symbol{94b} ;
       digit three symbol{94b}.
! j) raidx eight digit{c,k} :
       radix four digit{i} ; digit four symbol{94b} ;
       digit five symbol{94b} ; digit six symbol{94b} ;
       digit seven symbol{94b}.
  k) radix sixteen digit{c} :
!      radix eight digit{j} ; digit eight symbol{94b} ;
!      digit nine symbol{94b} ; letter a symbol{94a} ;
       letter b symbol{94a} ; letter e symbol{94a} ; letter d symbol{94a} ;
       letter e symbol{94a} ; letter f symbol{94a}.
  
--- 1768,1782 ----
  i) radix four digit{c,j} :
       radix two digit{h} ; digit two symbol{94b} ;
       digit three symbol{94b}.
! j) radix eight digit{c,n} :
       radix four digit{i} ; digit four symbol{94b} ;
       digit five symbol{94b} ; digit six symbol{94b} ;
       digit seven symbol{94b}.
+ n) radix ten digit{c,k} :
+      radix eight digit{c} ; digit eight symbol{94b} ;
+      digit nine symbol{94b}.
  k) radix sixteen digit{c} :
!      radix ten digit{n} ; letter a symbol{94a} ;
       letter b symbol{94a} ; letter e symbol{94a} ; letter d symbol{94a} ;
       letter e symbol{94a} ; letter f symbol{94a}.
  
diff -Nrcpad gcc-17-20260628/gcc/c/ChangeLog gcc-17-20260705/gcc/c/ChangeLog
*** gcc-17-20260628/gcc/c/ChangeLog	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/c/ChangeLog	Sun Jul  5 22:32:06 2026
***************
*** 1,3 ****
--- 1,23 ----
+ 2026-06-30  Chung-Lin Tang  <cltang@baylibre.com>
+ 
+ 	* c-typeck.cc (c_finish_omp_clauses): Fix comments.
+ 
+ 2026-06-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/125935
+ 	* c-decl.cc (c_init_decl_processing): Use "bool" rather than "_Bool"
+ 	as the name of boolean_type_node for C23+.
+ 
+ 2026-06-28  Kevin Stefanov  <kevinstefanov15@gmail.com>
+ 
+ 	PR middle-end/125274
+ 	* c-decl.cc (c_binding): Replace BOOL_BITFIELD with bool.
+ 	(c_scope): Likewise.
+ 	* c-parser.cc (c_parser): Likewise.
+ 	* c-tree.h (c_declspecs): Likewise.
+ 	(c_arg_info): Likewise.
+ 	(c_declarator): Likewise.
+ 
  2026-06-23  Kwok Cheung Yeung  <kcyeung@baylibre.com>
  	    Sandra Loosemore  <sloosemore@baylibre.com>
  
diff -Nrcpad gcc-17-20260628/gcc/c/c-decl.cc gcc-17-20260705/gcc/c/c-decl.cc
*** gcc-17-20260628/gcc/c/c-decl.cc	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/c/c-decl.cc	Sun Jul  5 22:32:06 2026
*************** c_init_decl_processing (void)
*** 4957,4963 ****
    truthvalue_false_node = integer_zero_node;
  
    /* Even in C99, which has a real boolean type.  */
!   pushdecl (build_decl (UNKNOWN_LOCATION, TYPE_DECL, get_identifier ("_Bool"),
  			boolean_type_node));
  
    /* C-specific nullptr initialization.  */
--- 4957,4964 ----
    truthvalue_false_node = integer_zero_node;
  
    /* Even in C99, which has a real boolean type.  */
!   pushdecl (build_decl (UNKNOWN_LOCATION, TYPE_DECL,
! 			get_identifier (flag_isoc23 ? "bool" : "_Bool"),
  			boolean_type_node));
  
    /* C-specific nullptr initialization.  */
diff -Nrcpad gcc-17-20260628/gcc/c/c-typeck.cc gcc-17-20260705/gcc/c/c-typeck.cc
*** gcc-17-20260628/gcc/c/c-typeck.cc	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/c/c-typeck.cc	Sun Jul  5 22:32:06 2026
*************** c_finish_omp_clauses (tree clauses, enum
*** 17419,17425 ****
  	  else if (TREE_CODE (t) == CONST_DECL)
  	    {
  	      /* omp_null_allocator is ignored and for predefined allocators,
! 		 not special handling is required; thus, remove them removed. */
  	      remove = true;
  
  	      if (OMP_CLAUSE_USES_ALLOCATORS_MEMSPACE (c)
--- 17419,17425 ----
  	  else if (TREE_CODE (t) == CONST_DECL)
  	    {
  	      /* omp_null_allocator is ignored and for predefined allocators,
! 		 no special handling is required; thus, mark them removed. */
  	      remove = true;
  
  	      if (OMP_CLAUSE_USES_ALLOCATORS_MEMSPACE (c)
diff -Nrcpad gcc-17-20260628/gcc/c-family/ChangeLog gcc-17-20260705/gcc/c-family/ChangeLog
*** gcc-17-20260628/gcc/c-family/ChangeLog	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/c-family/ChangeLog	Sun Jul  5 22:32:06 2026
***************
*** 1,3 ****
--- 1,15 ----
+ 2026-06-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/125837
+ 	* c.opt.urls: Regenerate.
+ 
+ 2026-06-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/125837
+ 	* c.opt (Wc++29-extensions): New option.
+ 	* c-cppbuiltin.cc (c_cpp_builtins): Change __cpp_pp_embed value for
+ 	C++29.
+ 
  2026-06-24  Paul-Antoine Arras  <parras@baylibre.com>
  
  	* c-omp.cc (c_finish_omp_barrier): Pass GOMP_BARRIER_EXPLICIT to
diff -Nrcpad gcc-17-20260628/gcc/c-family/c-cppbuiltin.cc gcc-17-20260705/gcc/c-family/c-cppbuiltin.cc
*** gcc-17-20260628/gcc/c-family/c-cppbuiltin.cc	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/c-family/c-cppbuiltin.cc	Sun Jul  5 22:32:06 2026
*************** c_cpp_builtins (cpp_reader *pfile)
*** 1115,1121 ****
  	  cpp_define (pfile, "__cpp_deleted_function=202403L");
  	  cpp_define (pfile, "__cpp_variadic_friend=202403L");
  	  cpp_define (pfile, "__cpp_pack_indexing=202311L");
! 	  cpp_define (pfile, "__cpp_pp_embed=202502L");
  	  cpp_define (pfile, "__cpp_constexpr_virtual_inheritance=202506L");
  	  cpp_define (pfile, "__cpp_expansion_statements=202506L");
  	  if (flag_reflection)
--- 1115,1122 ----
  	  cpp_define (pfile, "__cpp_deleted_function=202403L");
  	  cpp_define (pfile, "__cpp_variadic_friend=202403L");
  	  cpp_define (pfile, "__cpp_pack_indexing=202311L");
! 	  if (cxx_dialect <= cxx26)
! 	    cpp_define (pfile, "__cpp_pp_embed=202502L");
  	  cpp_define (pfile, "__cpp_constexpr_virtual_inheritance=202506L");
  	  cpp_define (pfile, "__cpp_expansion_statements=202506L");
  	  if (flag_reflection)
*************** c_cpp_builtins (cpp_reader *pfile)
*** 1124,1129 ****
--- 1125,1135 ----
  	    cpp_warn (pfile, "__cpp_impl_reflection");
  	  cpp_define (pfile, "__cpp_trivial_union=202502L");
  	}
+       if (cxx_dialect > cxx26)
+ 	{
+ 	  /* Set feature test macros for C++29.  */
+ 	  cpp_define (pfile, "__cpp_pp_embed=202606L");
+ 	}
        if (flag_concepts && cxx_dialect > cxx14)
  	cpp_define (pfile, "__cpp_concepts=202002L");
        else if (cxx_dialect >= cxx20)
diff -Nrcpad gcc-17-20260628/gcc/c-family/c.opt gcc-17-20260705/gcc/c-family/c.opt
*** gcc-17-20260628/gcc/c-family/c.opt	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/c-family/c.opt	Sun Jul  5 22:32:06 2026
*************** Wc++26-extensions
*** 531,536 ****
--- 531,540 ----
  C++ ObjC++ Var(warn_cxx26_extensions) Warning Init(1) CppReason(CPP_W_CXX26_EXTENSIONS)
  Warn about C++26 constructs in code compiled with an older standard.
  
+ Wc++29-extensions
+ C++ ObjC++ Var(warn_cxx29_extensions) Warning Init(1) CppReason(CPP_W_CXX29_EXTENSIONS)
+ Warn about C++29 constructs in code compiled with an older standard.
+ 
  Wcalloc-transposed-args
  C ObjC C++ ObjC++ Var(warn_calloc_transposed_args) Warning LangEnabledBy(C ObjC C++ ObjC++,Wextra)
  Warn about suspicious calls to calloc-like functions where sizeof expression is the earlier size argument and not the latter.
diff -Nrcpad gcc-17-20260628/gcc/c-family/c.opt.urls gcc-17-20260705/gcc/c-family/c.opt.urls
*** gcc-17-20260628/gcc/c-family/c.opt.urls	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/c-family/c.opt.urls	Sun Jul  5 22:32:06 2026
*************** UrlSuffix(gcc/Warning-Options.html#index
*** 370,375 ****
--- 370,378 ----
  Wc++26-extensions
  UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b26-extensions)
  
+ Wc++29-extensions
+ UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b29-extensions)
+ 
  Wcalloc-transposed-args
  UrlSuffix(gcc/Warning-Options.html#index-Wcalloc-transposed-args)
  
diff -Nrcpad gcc-17-20260628/gcc/cobol/ChangeLog gcc-17-20260705/gcc/cobol/ChangeLog
*** gcc-17-20260628/gcc/cobol/ChangeLog	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/cobol/ChangeLog	Sun Jul  5 22:32:07 2026
***************
*** 1,3 ****
--- 1,101 ----
+ 2026-06-30  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* compare.cc (alpha_compare_figconst): Make the code endian-agnostic.
+ 	(alpha_compare): Likewise.
+ 	(numeric_alpha_compare): Likewise.
+ 	(float_compare): Force proper data comparisons.
+ 	* genapi.cc (parser_goto): Use improved get_binary_value() routine.
+ 	(parser_perform_times): Likewise.
+ 	(internal_perform_through_times): Likewise.
+ 	(parser_display_internal): Set formal parameter to const.
+ 	(program_end_stuff): Use get_binary_value().
+ 	(parser_relop_long): Likewise.
+ 	(parser_see_stop_run): Likewise.
+ 	(parser_perform): Set formal parameter to const.
+ 	(parser_perform_inline_times): Use new get_binary_value().
+ 	(parser_file_write): Likewise.
+ 	(parser_file_start): Likewise.
+ 	(handle_gg_trim): Endian.
+ 	(parser_trim): Likewise.
+ 	(field_increment): Use new get_binary_value().
+ 	(parser_lsearch_start): Likewise.
+ 	(parser_release): Set formal parameter to const.
+ 	(parser_match_exception): Use new get_binary_value().
+ 	(parser_field_attr_set): Set formal parameter to const.
+ 	* genapi.h (parser_display_internal): Likewise.
+ 	(parser_perform_times): Likewise.
+ 	(parser_perform): Likewise.
+ 	(parser_goto): Likewise.
+ 	(parser_field_attr_set): Likewise.
+ 	(parser_file_start): Likewise.
+ 	(parser_release): Likewise.
+ 	* gengen.cc (gg_assign): Comment.
+ 	* genmath.cc (fast_add): New get_binary_value; address aliasing.
+ 	(fast_subtract): Likewise.
+ 	(fast_multiply): Likewise.
+ 	(fast_divide): Likewise.
+ 	* genutil.cc (get_scaled_rdigits): Set formal parameter to const.
+ 	(get_scaled_digits): Set formal parameter to const.
+ 	(get_integer_value): Improved data conversion; make local static.
+ 	(CHECK_FOR_FRACTIONAL_DIGITS): Moved here from genutil.h.
+ 	(giv_helper): New get_integer_value helper routine.
+ 	(get_and_check_refstart_and_reflen): get_binary_value and aliasing.
+ 	(get_depending_on_value_from_odo): Set some variables to const.
+ 	(get_data_offset): Use new get_integer_value() routine.
+ 	(digit): Eliminate as part of improved get_binary_value() conversion.
+ 	(num_disp_dive): Likewise.
+ 	(pd_dive): Likewise.
+ 	(get_pd_value): Likewise.
+ 	(get_binary_value_tree): Likewise.
+ 	(get_binary_value): New binary conversion routines.
+ 	(field_is_super_clean): Likewise.
+ 	(refer_is_working_storage): Likewise.
+ 	(is_working_storage): Likewise.
+ 	(refer_refmod_length): Likewise.
+ 	(binary_from_FldNumericBin5): Likewise.
+ 	(binary_from_FldLiteralN): Likewise.
+ 	(binary_from_FldNumericBinary): Likewise.
+ 	(binary_from_FldNumericDisplay): Likewise.
+ 	(binary_from_numdisp): Likewise.
+ 	(binary_from_comp_3): Likewise.
+ 	(b_from_c3): Likewise.
+ 	(binary_from_comp_6): Likewise.
+ 	(binary_from_FldPacked): Likewise.
+ 	(binary_from_FldFloat): Likewise.
+ 	(get_location): Avoid aliasing.
+ 	(safe_cast): Likewise.
+ 	(attribute_bit_clear): Set formal parameter to const.
+ 	(attribute_bit_get): Likewise.
+ 	(attribute_bit_set): Likewise.
+ 	(round_this_value): New routine for COBOL rounding.
+ 	* genutil.h (get_scaled_rdigits): Set formal parameter to const.
+ 	(get_scaled_digits): Set formal parameter to const.
+ 	(get_binary_value): Modified declaration.
+ 	(get_binary_value_tree): Eliminate.
+ 	(CHECK_FOR_FRACTIONAL_DIGITS): Move to genutil.cc.
+ 	(get_integer_value): Eliminated declaration.
+ 	(field_is_super_clean): New declaration.
+ 	(refer_is_working_storage): Changed to is_working_storage().
+ 	(is_working_storage): Eliminated.
+ 	(get_location): New declaration for field_t * overload.
+ 	(safe_cast): New declaration.
+ 	(attribute_bit_clear): Set formal parameter to const.
+ 	(attribute_bit_get): Likewise.
+ 	(attribute_bit_set): Likewise.
+ 	* move.cc (copy_little_endian_into_place): Changed to
+ 	copy_native_into_place().
+ 	(copy_native_into_place): Endian awareness.
+ 	(mh_little_endian): Change name to mh_to_binary.
+ 	(mh_to_binary): Endian awareness.
+ 	(move_helper): Use mh_to_binary.
+ 	* parse.y: Comment out code pending a bug fix.
+ 	* parse_ante.h (cbl_field_t::blank_initial): Endian awareness.
+ 	* show_parse.h: Make a variable const.
+ 	* structs.cc (member): Set formal parameter to const.
+ 	* structs.h (member): Likewise.
+ 	* util.cc (binary_initial): Endian awareness.
+ 	(cbl_field_t::encode_numeric): Endian and aliasing awareness.
+ 
  2026-06-25  Robert Dubner  <rdubner@symas.com>
  
  	* gengen.cc (gg_abs): Use fold_build1().
diff -Nrcpad gcc-17-20260628/gcc/cobol/compare.cc gcc-17-20260705/gcc/cobol/compare.cc
*** gcc-17-20260628/gcc/cobol/compare.cc	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/cobol/compare.cc	Sun Jul  5 22:32:07 2026
*************** alpha_compare_figconst( tree        &lef
*** 608,614 ****
                         __gg__get_charmap(left_side.field->codeset.encoding);
    charmap_t *charmap_right =
                         __gg__get_charmap(right_side.field->codeset.encoding);
!   cbl_char_t char_right = charmap_right->figconst_character(figconst_right);
  
    size_t nbytes;
    char *converted;
--- 608,620 ----
                         __gg__get_charmap(left_side.field->codeset.encoding);
    charmap_t *charmap_right =
                         __gg__get_charmap(right_side.field->codeset.encoding);
! 
!   // We know the result of this mapping has to be an 8-bit value, because
!   // all figconsts map to a single byte.  HIGH-VALUE is a bit of a problem,
!   // but when is it not?  It usually will be 0xFF in the low-order byte, so
!   // that's what we assume for now.
! 
!   uint8_t char_right = charmap_right->figconst_character(figconst_right);
  
    size_t nbytes;
    char *converted;
*************** alpha_compare(tree        &left,
*** 671,682 ****
    charmap_t *charmap_left  = __gg__get_charmap(left_side.field->codeset.encoding);
    cbl_figconst_t figconst_left
                     = (cbl_figconst_t)(left_side.field->attr & FIGCONST_MASK);
!   cbl_char_t char_left  = charmap_left->figconst_character(figconst_left);
  
    charmap_t *charmap_right = __gg__get_charmap(right_side.field->codeset.encoding);
    cbl_figconst_t figconst_right
                     = (cbl_figconst_t)(right_side.field->attr & FIGCONST_MASK);
!   cbl_char_t char_right = charmap_right->figconst_character(figconst_right);
  
    tree location_left;
    tree location_right;
--- 677,688 ----
    charmap_t *charmap_left  = __gg__get_charmap(left_side.field->codeset.encoding);
    cbl_figconst_t figconst_left
                     = (cbl_figconst_t)(left_side.field->attr & FIGCONST_MASK);
!   uint8_t char_left  = charmap_left->figconst_character(figconst_left);
  
    charmap_t *charmap_right = __gg__get_charmap(right_side.field->codeset.encoding);
    cbl_figconst_t figconst_right
                     = (cbl_figconst_t)(right_side.field->attr & FIGCONST_MASK);
!   uint8_t char_right = charmap_right->figconst_character(figconst_right);
  
    tree location_left;
    tree location_right;
*************** alpha_compare(tree        &left,
*** 792,799 ****
      // R.J.Dubner; 2026-05-08
      static const long MAGIC_NUMBER = 16;
  
!     // We are going to need the space character in this encoding space:
!     cbl_char_t space_char = charmap_left->mapped_character(ascii_space);
      const char *the_routine;
      switch( charmap_left->stride() )
        {
--- 798,807 ----
      // R.J.Dubner; 2026-05-08
      static const long MAGIC_NUMBER = 16;
  
!     // We are going to need the space character in this encoding space.  We
!     // know the result of the mapping has to fit into a byte, so we do that
!     // to make things work in both little-endian and big-endian.
!     uint8_t space_char = charmap_left->mapped_character(ascii_space);
      const char *the_routine;
      switch( charmap_left->stride() )
        {
*************** numeric_alpha_compare(tree        &left,
*** 1017,1023 ****
                           __gg__get_charmap(right_side.field->codeset.encoding);
    cbl_figconst_t figconst_right
                     = (cbl_figconst_t)(right_side.field->attr & FIGCONST_MASK);
!   cbl_char_t char_right = charmap_right->figconst_character(figconst_right);
  
    if( left_side.field->type == FldLiteralN )
      {
--- 1025,1031 ----
                           __gg__get_charmap(right_side.field->codeset.encoding);
    cbl_figconst_t figconst_right
                     = (cbl_figconst_t)(right_side.field->attr & FIGCONST_MASK);
!   uint8_t char_right = charmap_right->figconst_character(figconst_right);
  
    if( left_side.field->type == FldLiteralN )
      {
*************** float_compare(tree        &left,
*** 1266,1273 ****
          const cbl_refer_t &right_side)
    {
    // left is a float, and if right is also a float it is smaller than left
    get_binary_value(left, left_side);
-   tree type = TREE_TYPE(left);
    tree rightv;
    get_binary_value(rightv, right_side, type);
    right = gg_define_variable(type);
--- 1274,1281 ----
          const cbl_refer_t &right_side)
    {
    // left is a float, and if right is also a float it is smaller than left
+   tree type = tree_type_from_field(left_side.field);
    get_binary_value(left, left_side);
    tree rightv;
    get_binary_value(rightv, right_side, type);
    right = gg_define_variable(type);
diff -Nrcpad gcc-17-20260628/gcc/cobol/genapi.cc gcc-17-20260705/gcc/cobol/genapi.cc
*** gcc-17-20260628/gcc/cobol/genapi.cc	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/cobol/genapi.cc	Sun Jul  5 22:32:07 2026
*************** parser_alter( cbl_perform_tgt_t *tgt )
*** 2348,2356 ****
    }
  
  void
! parser_goto( cbl_refer_t value_ref, size_t narg, cbl_label_t * const labels[] )
!   // This routine takes
! {
    // This is part of the Terrible Trio of parser_perform, parser_goto and
    // parser_enter_[procedure].  parser_goto has an easier time of it than
    // the other two, because it just has to jump from here to the entry point
--- 2348,2357 ----
    }
  
  void
! parser_goto(const cbl_refer_t &value_ref,
!             size_t narg,
!             cbl_label_t * const labels[] )
!   {
    // This is part of the Terrible Trio of parser_perform, parser_goto and
    // parser_enter_[procedure].  parser_goto has an easier time of it than
    // the other two, because it just has to jump from here to the entry point
*************** parser_goto( cbl_refer_t value_ref, size
*** 2390,2400 ****
      {
      // We will implement the two or more fanout with a switch statement.
  
!     tree value = gg_define_int();
!     get_binary_value( value,
!                       NULL,
!                       value_ref.field,
!                       refer_offset(value_ref));
  
      // value is properly 1 through nargs
  
--- 2391,2398 ----
      {
      // We will implement the two or more fanout with a switch statement.
  
!     tree value;
!     get_binary_value(value, value_ref, INT);
  
      // value is properly 1 through nargs
  
*************** parser_goto( cbl_refer_t value_ref, size
*** 2439,2445 ****
    }
  
  void
! parser_perform_times( cbl_label_t *proc_1, cbl_refer_t count )
    {
    Analyze();
    SHOW_PARSE
--- 2437,2443 ----
    }
  
  void
! parser_perform_times( cbl_label_t *proc_1, const cbl_refer_t &count )
    {
    Analyze();
    SHOW_PARSE
*************** parser_perform_times( cbl_label_t *proc_
*** 2451,2457 ****
      char ach[32];
      sprintf(ach, " proc_1 is at %p", static_cast<void*>(proc_1));
      SHOW_PARSE_TEXT(ach)
!     sprintf(ach, " proc_1->proc is %p", static_cast<void*>(proc_1->structs.proc));
      SHOW_PARSE_TEXT(ach)
      SHOW_PARSE_END
      }
--- 2449,2456 ----
      char ach[32];
      sprintf(ach, " proc_1 is at %p", static_cast<void*>(proc_1));
      SHOW_PARSE_TEXT(ach)
!     sprintf(ach, " proc_1->proc is %p",
!             static_cast<void*>(proc_1->structs.proc));
      SHOW_PARSE_TEXT(ach)
      SHOW_PARSE_END
      }
*************** parser_perform_times( cbl_label_t *proc_
*** 2463,2475 ****
  
    perform_is_armed = CURRENT_LINE_NUMBER ;
  
-   tree counter       = gg_define_variable(LONG);
- 
    // Get the count:
!   get_binary_value( counter,
!                     NULL,
!                     count.field,
!                     refer_offset(count));
  
    // Make sure the initial count is valid:
    WHILE( counter, gt_op, gg_cast(LONG, integer_zero_node) )
--- 2462,2470 ----
  
    perform_is_armed = CURRENT_LINE_NUMBER ;
  
    // Get the count:
!   tree counter;
!   get_binary_value(counter, count, LONG);
  
    // Make sure the initial count is valid:
    WHILE( counter, gt_op, gg_cast(LONG, integer_zero_node) )
*************** parser_perform(cbl_label_t *label, bool
*** 2588,2594 ****
  static void
  internal_perform_through_times(   cbl_label_t *proc_1,
                                    cbl_label_t *proc_2,
!                                   cbl_refer_t &count)
    {
    Analyze();
    SHOW_PARSE
--- 2583,2589 ----
  static void
  internal_perform_through_times(   cbl_label_t *proc_1,
                                    cbl_label_t *proc_2,
!                             const cbl_refer_t &count)
    {
    Analyze();
    SHOW_PARSE
*************** internal_perform_through_times(   cbl_la
*** 2626,2636 ****
  
    perform_is_armed = CURRENT_LINE_NUMBER ;
  
!   tree counter       = gg_define_variable(LONG);
!   get_binary_value( counter,
!                     NULL,
!                     count.field,
!                     refer_offset(count));
    WHILE( counter, gt_op, gg_cast(LONG, integer_zero_node) )
      {
      internal_perform_through(proc_1, proc_2, true); // true means suppress_nexting
--- 2621,2628 ----
  
    perform_is_armed = CURRENT_LINE_NUMBER ;
  
!   tree counter;
!   get_binary_value(counter, count, LONG);
    WHILE( counter, gt_op, gg_cast(LONG, integer_zero_node) )
      {
      internal_perform_through(proc_1, proc_2, true); // true means suppress_nexting
*************** parser_display_literal(const char *liter
*** 4608,4614 ****
  
  void
  parser_display_internal(tree file_descriptor,
!                         cbl_refer_t refer,
                          bool advance)
    {
    Analyze();
--- 4600,4606 ----
  
  void
  parser_display_internal(tree file_descriptor,
!                   const cbl_refer_t &refer,
                          bool advance)
    {
    Analyze();
*************** program_end_stuff(cbl_refer_t refer,
*** 5632,5642 ****
          {
          // The field_type has a PICTURE string, so we need to convert from the
          // COBOL form to little-endian binary:
!         tree value   = gg_define_int128();
!         get_binary_value( value,
!                           NULL,
!                           returner,
!                           size_t_zero_node);
          gg_memcpy(gg_get_address_of(retval),
                    gg_get_address_of(value),
                    build_int_cst_type(SIZE_T, nbytes));
--- 5624,5631 ----
          {
          // The field_type has a PICTURE string, so we need to convert from the
          // COBOL form to little-endian binary:
!         tree value;
!         get_binary_value( value, returner, INT128);
          gg_memcpy(gg_get_address_of(retval),
                    gg_get_address_of(value),
                    build_int_cst_type(SIZE_T, nbytes));
*************** parser_relop_long(cbl_field_t *tgt,
*** 7210,7220 ****
      }
  
    tree tree_a  = build_int_cst_type(LONG, avalue);
!   tree tree_b  = gg_define_variable(LONG);
!   get_binary_value( tree_b,
!                     NULL,
!                     bref.field,
!                     refer_offset(bref) );
    tree comp_res = gg_define_variable(LONG);
    gg_assign(comp_res, gg_subtract(tree_a, tree_b));
  
--- 7199,7206 ----
      }
  
    tree tree_a  = build_int_cst_type(LONG, avalue);
!   tree tree_b;
!   get_binary_value( tree_b, bref.field, LONG);
    tree comp_res = gg_define_variable(LONG);
    gg_assign(comp_res, gg_subtract(tree_a, tree_b));
  
*************** parser_see_stop_run(struct cbl_refer_t e
*** 7327,7341 ****
      }
  
    // It's a stop run.  Return return-code to the operating system:
!   tree returned_value = gg_define_variable(INT);
! 
    if( exit_status.field )
      {
      // There is an exit_status, so it wins:
!     get_binary_value( returned_value,
!                       NULL,
!                       exit_status.field,
!                       refer_offset(exit_status));
      TRACE1
        {
        TRACE1_REFER(" exit_status ", exit_status, "")
--- 7313,7323 ----
      }
  
    // It's a stop run.  Return return-code to the operating system:
!   tree returned_value;
    if( exit_status.field )
      {
      // There is an exit_status, so it wins:
!     get_binary_value( returned_value, exit_status.field, INT);
      TRACE1
        {
        TRACE1_REFER(" exit_status ", exit_status, "")
*************** parser_see_stop_run(struct cbl_refer_t e
*** 7343,7348 ****
--- 7325,7331 ----
      }
    else
      {
+     returned_value = gg_define_variable(INT);
      gg_assign(returned_value, gg_cast(INT, current_function->var_decl_return));
      TRACE1
        {
*************** parser_classify(    cbl_field_t *tgt,
*** 7568,7574 ****
    }
  
  void
! parser_perform(const cbl_perform_tgt_t *tgt, cbl_refer_t how_many)
    {
    const cbl_field_t *N = how_many.field;
    // No SHOW_PARSE here; we want to fall through:
--- 7551,7557 ----
    }
  
  void
! parser_perform(const cbl_perform_tgt_t *tgt, const cbl_refer_t &how_many)
    {
    const cbl_field_t *N = how_many.field;
    // No SHOW_PARSE here; we want to fall through:
*************** parser_perform_inline_times(struct cbl_p
*** 8692,8702 ****
      }
  
    gcc_assert(tgt);
-   cbl_field_t *count = how_many.field;
-   CHECK_FIELD(count);
  
!   // This has to be on the stack, because performs can be nested
!   tree counter       = gg_define_variable(LONG);
  
    /*
                GOTO SETUP
--- 8675,8682 ----
      }
  
    gcc_assert(tgt);
  
!   tree counter = gg_define_variable(LONG);
  
    /*
                GOTO SETUP
*************** parser_perform_inline_times(struct cbl_p
*** 8764,8773 ****
      SHOW_PARSE_END
      }
  
!   get_binary_value( counter,
!                     NULL,
!                     count,
!                     refer_offset(how_many));
  
    SHOW_PARSE
      {
--- 8744,8752 ----
      SHOW_PARSE_END
      }
  
!   tree initial_value;
!   get_binary_value(initial_value, how_many, LONG);
!   gg_assign(counter, initial_value);
  
    SHOW_PARSE
      {
*************** parser_file_write( cbl_file_t *file,
*** 9430,9440 ****
    tree t_advance = gg_define_variable(INT);
    if(advance.field)
      {
!     tree value = gg_define_variable(INT);
!     get_binary_value( value,
!                       NULL,
!                       advance.field,
!                       refer_offset(advance));
      gg_assign(t_advance, gg_cast(INT, value));
      }
    else
--- 9409,9416 ----
    tree t_advance = gg_define_variable(INT);
    if(advance.field)
      {
!     tree value;
!     get_binary_value( value, advance, INT);
      gg_assign(t_advance, gg_cast(INT, value));
      }
    else
*************** void
*** 9741,9747 ****
  parser_file_start(struct cbl_file_t *file,
                    relop_t op,
                    int flk,
!                   cbl_refer_t length_ref )
    {
    Analyze();
    SHOW_PARSE
--- 9717,9723 ----
  parser_file_start(struct cbl_file_t *file,
                    relop_t op,
                    int flk,
!             const cbl_refer_t &length_ref )
    {
    Analyze();
    SHOW_PARSE
*************** parser_file_start(struct cbl_file_t *fil
*** 9797,9809 ****
      flk = -1;
      }
  
!   tree length = gg_define_variable(SIZE_T);
!   gg_assign(length, size_t_zero_node);
  
    if( flk > 0 && !length_ref.field )
      {
!     // We need a length, and we don't have one.  We have to calculate the length
!     // from the lengths of the fields that make up the specified key.
  
      size_t combined_length = 0;
  
--- 9773,9784 ----
      flk = -1;
      }
  
!   tree length = size_t_zero_node;
  
    if( flk > 0 && !length_ref.field )
      {
!     // We need a length, and we don't have one.  We have to calculate the
!     // length from the lengths of the fields that make up the specified key.
  
      size_t combined_length = 0;
  
*************** parser_file_start(struct cbl_file_t *fil
*** 9818,9831 ****
        cbl_field_t *field = cbl_field_of(symbol_at(nfield));
        combined_length += field->data.capacity();
        }
!     gg_assign(length, build_int_cst_type(SIZE_T, combined_length));
      }
    else if( flk > 0 )
      {
!     get_binary_value( length,
!                       NULL,
!                       length_ref.field,
!                       refer_offset(length_ref));
      }
  
    sv_is_i_o = true;
--- 9793,9803 ----
        cbl_field_t *field = cbl_field_of(symbol_at(nfield));
        combined_length += field->data.capacity();
        }
!     length = build_int_cst_type(SIZE_T, combined_length);
      }
    else if( flk > 0 )
      {
!     get_binary_value( length, length_ref, SIZE_T);
      }
  
    sv_is_i_o = true;
*************** handle_gg_trim(cbl_field_t *tgt,
*** 10820,10826 ****
                                              (arg.field->attr & FIGCONST_MASK);
          if( figconst )
            {
!           cbl_char_t figcst = charmap->figconst_character(figconst);
            tree tfigcst = build_int_cst_type(UCHAR, figcst);
            gg_assign(gg_indirect(char_p), tfigcst);
            }
--- 10792,10798 ----
                                              (arg.field->attr & FIGCONST_MASK);
          if( figconst )
            {
!           uint8_t figcst = charmap->figconst_character(figconst);
            tree tfigcst = build_int_cst_type(UCHAR, figcst);
            gg_assign(gg_indirect(char_p), tfigcst);
            }
*************** parser_trim( cbl_field_t *tgt,
*** 10878,10884 ****
                                            (arg.field->attr & FIGCONST_MASK);
        if( figconst )
          {
!         cbl_char_t figcst = charmap->figconst_character(figconst);
          tree tfigcst = build_int_cst_type(ULONG, figcst);
  
          gg_memcpy(char_p,
--- 10850,10856 ----
                                            (arg.field->attr & FIGCONST_MASK);
        if( figconst )
          {
!         uint8_t figcst = charmap->figconst_character(figconst);
          tree tfigcst = build_int_cst_type(ULONG, figcst);
  
          gg_memcpy(char_p,
*************** parser_intrinsic_call_4( cbl_field_t *tg
*** 11069,11085 ****
  static void
  field_increment(cbl_field_t *fld )
    {
!   static tree value   = gg_define_variable(INT128);
!   static tree rdigits = gg_define_variable(INT);
! 
!   get_binary_value(value, rdigits, fld, size_t_zero_node);
!   gg_assign(  value,
!               gg_add(value, gg_cast(SIZE_T, integer_one_node)));
    gg_call(VOID,
            "__gg__int128_to_field",
            gg_get_address_of(fld->var_decl_node),
!           value,
!           rdigits,
            build_int_cst_type(INT, truncation_e),
            null_pointer_node,
            NULL_TREE );
--- 11041,11055 ----
  static void
  field_increment(cbl_field_t *fld )
    {
!   // rdigits has to be zero.
!   tree value;
!   get_binary_value(value, fld, INT128);
!   gg_increment(value);
    gg_call(VOID,
            "__gg__int128_to_field",
            gg_get_address_of(fld->var_decl_node),
!           gg_cast(INT128, value),
!           integer_zero_node,
            build_int_cst_type(INT, truncation_e),
            null_pointer_node,
            NULL_TREE );
*************** parser_lsearch_start(   cbl_label_t *nam
*** 11164,11177 ****
    // Establish the initial value of our counter:
    lsearch->counter = gg_define_variable(LONG);
  
!   tree value   = gg_define_int128();
    if(varying)
      {
!     get_binary_value(value, NULL, varying, size_t_zero_node);
      }
    else if( index )
      {
!     get_binary_value(value, NULL, index, size_t_zero_node);
      }
    gg_assign(lsearch->counter, gg_cast(LONG, value));
  
--- 11134,11151 ----
    // Establish the initial value of our counter:
    lsearch->counter = gg_define_variable(LONG);
  
!   tree value;
    if(varying)
      {
!     get_binary_value(value, varying, SIZE_T);
      }
    else if( index )
      {
!     get_binary_value(value, index, SIZE_T);
!     }
!   else
!     {
!     gcc_unreachable();
      }
    gg_assign(lsearch->counter, gg_cast(LONG, value));
  
*************** parser_file_sort(   cbl_file_t *workfile
*** 11925,11931 ****
    }
  
  void
! parser_release( cbl_field_t *record_area )
    {
    Analyze();
    SHOW_PARSE
--- 11899,11905 ----
    }
  
  void
! parser_release( const cbl_field_t *record_area )
    {
    Analyze();
    SHOW_PARSE
*************** parser_match_exception(cbl_field_t *inde
*** 13943,13950 ****
  
    TRACE1
      {
!     tree index_val = gg_define_variable(INT);
!     get_binary_value(index_val, NULL, index, size_t_zero_node);
      TRACE1_INDENT
      gg_printf("returned value is 0x%x (%d)", index_val, index_val, NULL_TREE);
      TRACE1_END
--- 13917,13924 ----
  
    TRACE1
      {
!     tree index_val;
!     get_binary_value(index_val, index, INT);
      TRACE1_INDENT
      gg_printf("returned value is 0x%x (%d)", index_val, index_val, NULL_TREE);
      TRACE1_END
*************** parser_local_add(struct cbl_field_t *new
*** 14683,14689 ****
    }
  
  void
! parser_field_attr_set( cbl_field_t *tgt, cbl_field_attr_t attr, bool on_off )
    {
    if( on_off )
      {
--- 14657,14665 ----
    }
  
  void
! parser_field_attr_set(const cbl_field_t *tgt,
!                             cbl_field_attr_t attr,
!                             bool on_off )
    {
    if( on_off )
      {
diff -Nrcpad gcc-17-20260628/gcc/cobol/genapi.h gcc-17-20260705/gcc/cobol/genapi.h
*** gcc-17-20260628/gcc/cobol/genapi.h	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/cobol/genapi.h	Sun Jul  5 22:32:07 2026
*************** typedef struct TREEPLET
*** 47,53 ****
    } TREEPLET;
  
  void parser_display_internal( tree file_descriptor,
!                               cbl_refer_t refer,
                                bool advance=DISPLAY_NO_ADVANCE);
  
  void parser_first_statement( int lineno );
--- 47,53 ----
    } TREEPLET;
  
  void parser_display_internal( tree file_descriptor,
!                         const cbl_refer_t &refer,
                                bool advance=DISPLAY_NO_ADVANCE);
  
  void parser_first_statement( int lineno );
*************** void
*** 236,242 ****
  parser_perform( struct cbl_label_t *label, bool suppress_nexting=false );
  
  void
! parser_perform_times( struct cbl_label_t *label, cbl_refer_t count );
  
  void
  parser_perform_start( struct cbl_perform_tgt_t *tgt );
--- 236,242 ----
  parser_perform( struct cbl_label_t *label, bool suppress_nexting=false );
  
  void
! parser_perform_times( struct cbl_label_t *label, const cbl_refer_t &count );
  
  void
  parser_perform_start( struct cbl_perform_tgt_t *tgt );
*************** parser_perform_conditional_end( struct c
*** 253,259 ****
   * For an in-line loop body, tgt->from.type == LblLoop, and tgt->to is NULL.
   */
  void
! parser_perform( const cbl_perform_tgt_t *tgt, cbl_refer_t N );
  
  /*
   * A simple UNTIL loop uses 1 varys element.  For VARY loops, the
--- 253,259 ----
   * For an in-line loop body, tgt->from.type == LblLoop, and tgt->to is NULL.
   */
  void
! parser_perform( const cbl_perform_tgt_t *tgt, const cbl_refer_t &N );
  
  /*
   * A simple UNTIL loop uses 1 varys element.  For VARY loops, the
*************** callback_t *
*** 346,352 ****
  parser_label_addr( struct cbl_label_t *label );
  
  void
! parser_goto( cbl_refer_t value, size_t narg, cbl_label_t * const labels[] );
  
  void
  parser_alter( cbl_perform_tgt_t *tgt );
--- 346,352 ----
  parser_label_addr( struct cbl_label_t *label );
  
  void
! parser_goto( const cbl_refer_t &value, size_t narg, cbl_label_t * const labels[] );
  
  void
  parser_alter( cbl_perform_tgt_t *tgt );
*************** void
*** 357,364 ****
  parser_set_numeric(struct cbl_field_t *tgt, ssize_t value);
  
  void
! parser_field_attr_set( cbl_field_t *tgt, cbl_field_attr_t attr, bool on_off = true );
! 
  void
  parser_file_add(struct cbl_file_t *file);
  
--- 357,365 ----
  parser_set_numeric(struct cbl_field_t *tgt, ssize_t value);
  
  void
! parser_field_attr_set(const cbl_field_t *tgt,
!                       cbl_field_attr_t attr,
!                       bool on_off = true );
  void
  parser_file_add(struct cbl_file_t *file);
  
*************** parser_file_read( struct cbl_file_t *fil
*** 376,383 ****
                    int where );
  
  void
! parser_file_start( struct cbl_file_t *file, relop_t op, int flk,
!                    cbl_refer_t = cbl_refer_t() );
  
  /*
   * Write *field* to *file*.  *after* is a bool where false
--- 377,386 ----
                    int where );
  
  void
! parser_file_start( struct cbl_file_t *file,
!                    relop_t op,
!                    int flk,
!              const cbl_refer_t &length_ref = cbl_refer_t() );
  
  /*
   * Write *field* to *file*.  *after* is a bool where false
*************** parser_file_merge(  cbl_file_t *file,
*** 466,472 ****
                      cbl_perform_tgt_t *out_proc );
  
  void
! parser_release( cbl_field_t *record_area );
  
  void
  parser_exception_file( cbl_field_t *tgt, cbl_file_t* file = NULL );
--- 469,475 ----
                      cbl_perform_tgt_t *out_proc );
  
  void
! parser_release( const cbl_field_t *record_area );
  
  void
  parser_exception_file( cbl_field_t *tgt, cbl_file_t* file = NULL );
diff -Nrcpad gcc-17-20260628/gcc/cobol/gengen.cc gcc-17-20260705/gcc/cobol/gengen.cc
*** gcc-17-20260628/gcc/cobol/gengen.cc	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/cobol/gengen.cc	Sun Jul  5 22:32:07 2026
*************** gg_cast(tree type, tree var)
*** 398,403 ****
--- 398,409 ----
      }
  #endif
  
+   if(    TREE_CODE(type) == INTEGER_TYPE
+       && TREE_CODE(TREE_TYPE(var)) == REAL_TYPE )
+     {
+     return gg_trunc(type, var);
+     }
+ 
    return fold_convert(type, var);
    }
  
*************** gg_show_type(tree type)
*** 534,543 ****
  tree
  gg_assign(tree dest, const tree source)
    {
!   // This does the equivalent of a C/C++ "dest = source".  When X1 is set, it
!   // does some checking for conditions that can result in inefficient code, so
!   // that is useful during development when even an astute programmer might
!   // need an assist with keeping variable types straight.
  
    // This routine also provides for the possibility that the assignment is
    // for a source that is a function invocation, as in
--- 540,547 ----
  tree
  gg_assign(tree dest, const tree source)
    {
!   // This does the equivalent of a C/C++ "dest = source".  It does some
!   // checking for conditions that can result in inefficient code.
  
    // This routine also provides for the possibility that the assignment is
    // for a source that is a function invocation, as in
*************** gg_assign(tree dest, const tree source)
*** 578,584 ****
      // the same.  This is a compilation-time error, since we want the caller to
      // have sorted the types out explicitly.  If we don't throw an error here,
      // the gimple reduction will do so.  Better to do it here, when we know
!     // where we are.S
      static const int debugging = 1;
      if( debugging )
        {
--- 582,588 ----
      // the same.  This is a compilation-time error, since we want the caller to
      // have sorted the types out explicitly.  If we don't throw an error here,
      // the gimple reduction will do so.  Better to do it here, when we know
!     // where we are.
      static const int debugging = 1;
      if( debugging )
        {
diff -Nrcpad gcc-17-20260628/gcc/cobol/genmath.cc gcc-17-20260705/gcc/cobol/genmath.cc
*** gcc-17-20260628/gcc/cobol/genmath.cc	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/cobol/genmath.cc	Sun Jul  5 22:32:07 2026
*************** largest_binary_term(size_t nA, const cbl
*** 392,398 ****
  
  static bool
  fast_add( size_t nC, cbl_num_result_t *C,
!           size_t nA, cbl_refer_t *A,
            cbl_arith_format_t format,
      const cbl_label_t *error,
      const cbl_label_t *not_error)
--- 392,398 ----
  
  static bool
  fast_add( size_t nC, cbl_num_result_t *C,
!           size_t nA, const cbl_refer_t *A,
            cbl_arith_format_t format,
      const cbl_label_t *error,
      const cbl_label_t *not_error)
*************** fast_add( size_t nC, cbl_num_result_t *C
*** 426,454 ****
          // C, which is not how COBOL works.
  
          tree A_value;
!         if( refer_is_clean(A[0]) )
!           {
!           A_value = get_binary_value_tree(dest_type,
!                                           NULL, // No rdigits
!                                           A[0].field,
!                                           integer_zero_node);
!           }
!         else
!           {
!           A_value = get_binary_value_tree(dest_type,
!                                           NULL, // No rdigits
!                                           A[0].field,
!                                           refer_offset(A[0]));
!           }
          if( refer_is_clean(C[0].refer) )
            {
            // We are accumulating into memory
  
!           if(false &&    refer_is_working_storage(C[0].refer)
               && C[0].refer.field->offset == 0 )
              {
              gg_assign(  C[0].refer.field->data_decl_node,
!                         gg_cast(TREE_TYPE(C[0].refer.field->data_decl_node), gg_add( C[0].refer.field->data_decl_node, A_value)));
              }
            else
              {
--- 426,443 ----
          // C, which is not how COBOL works.
  
          tree A_value;
!         get_binary_value(A_value, A[0], dest_type);
! 
          if( refer_is_clean(C[0].refer) )
            {
            // We are accumulating into memory
  
!           if(is_working_storage(C[0].refer)
               && C[0].refer.field->offset == 0 )
              {
              gg_assign(  C[0].refer.field->data_decl_node,
!                         gg_cast(TREE_TYPE(C[0].refer.field->data_decl_node),
!                         gg_add( C[0].refer.field->data_decl_node, A_value)));
              }
            else
              {
*************** fast_add( size_t nC, cbl_num_result_t *C
*** 492,527 ****
            dest_addr = gg_cast(build_pointer_type(dest_type), dest_addr);
  
            tree A_value;
!           if( refer_is_clean(A[0]) )
!             {
!             A_value = get_binary_value_tree(dest_type,
!                                             NULL, // No rdigits
!                                             A[0].field,
!                                             integer_zero_node);
!             }
!           else
!             {
!             A_value = get_binary_value_tree(dest_type,
!                                             NULL, // No rdigits
!                                             A[0].field,
!                                             refer_offset(A[0]));
!             }
  
            tree B_value;
!           if( refer_is_clean(A[1]) )
!             {
!             B_value = get_binary_value_tree(dest_type,
!                                             NULL, // No rdigits
!                                             A[1].field,
!                                             integer_zero_node);
!             }
!           else
!             {
!             B_value = get_binary_value_tree(dest_type,
!                                             NULL, // No rdigits
!                                             A[1].field,
!                                             refer_offset(A[1]));
!             }
  
            gg_assign(  gg_indirect(dest_addr),
                        gg_add( A_value,
--- 481,490 ----
            dest_addr = gg_cast(build_pointer_type(dest_type), dest_addr);
  
            tree A_value;
!           get_binary_value(A_value, A[0], dest_type);
  
            tree B_value;
!           get_binary_value(B_value, A[1], dest_type);
  
            gg_assign(  gg_indirect(dest_addr),
                        gg_add( A_value,
*************** fast_add( size_t nC, cbl_num_result_t *C
*** 533,552 ****
          // We need to calculate the sum of all the A[] terms using term_type as
          // the intermediate type:
  
!         tree sum     = gg_define_variable(term_type);
!         tree addend  = gg_define_variable(term_type);
!         get_binary_value( sum,
!                           NULL,
!                           A[0].field,
!                           refer_offset(A[0]));
  
          // Add in the rest of them:
          for(size_t i=1; i<nA; i++)
            {
!           get_binary_value( addend,
!                             NULL,
!                             A[i].field,
!                             refer_offset(A[i]));
            gg_assign(sum, gg_add(sum, addend));
            }
  
--- 496,509 ----
          // We need to calculate the sum of all the A[] terms using term_type as
          // the intermediate type:
  
!         tree sum    ;
!         tree addend ;
!         get_binary_value(sum, A[0].field, term_type);
  
          // Add in the rest of them:
          for(size_t i=1; i<nA; i++)
            {
!           get_binary_value( addend, A[i].field, term_type);
            gg_assign(sum, gg_add(sum, addend));
            }
  
*************** fast_add( size_t nC, cbl_num_result_t *C
*** 580,587 ****
  
  static bool
  fast_subtract(size_t nC, cbl_num_result_t *C,
!               size_t nA, cbl_refer_t *A,
!               size_t nB, cbl_refer_t *B,
                cbl_arith_format_t format,
          const cbl_label_t *error,
          const cbl_label_t *not_error)
--- 537,544 ----
  
  static bool
  fast_subtract(size_t nC, cbl_num_result_t *C,
!               size_t nA, const cbl_refer_t *A,
!               size_t nB, const cbl_refer_t *B,
                cbl_arith_format_t format,
          const cbl_label_t *error,
          const cbl_label_t *not_error)
*************** fast_subtract(size_t nC, cbl_num_result_
*** 633,652 ****
          // This is the simplest case of all.  Just subtract A from C.
          tree dest_type = tree_type_from_refer(C[0].refer);
          tree A_value;
!         if( refer_is_clean(A[0]) )
!           {
!           A_value = get_binary_value_tree(dest_type,
!                                           NULL, // No rdigits
!                                           A[0].field,
!                                           integer_zero_node);
!           }
!         else
!           {
!           A_value = get_binary_value_tree(dest_type,
!                                           NULL, // No rdigits
!                                           A[0].field,
!                                           refer_offset(A[0]));
!           }
          if( format == giving_e )
            {
            // Make C = B - A
--- 590,596 ----
          // This is the simplest case of all.  Just subtract A from C.
          tree dest_type = tree_type_from_refer(C[0].refer);
          tree A_value;
!         get_binary_value(A_value, A[0], dest_type);
          if( format == giving_e )
            {
            // Make C = B - A
*************** fast_subtract(size_t nC, cbl_num_result_
*** 663,683 ****
            dest_addr = gg_cast(build_pointer_type(dest_type), dest_addr);
  
            tree B_value;
!           if( refer_is_clean(B[0]) )
!             {
!             B_value = get_binary_value_tree(dest_type,
!                                             NULL, // No rdigits
!                                             B[0].field,
!                                             integer_zero_node);
!             }
!           else
!             {
!             B_value = get_binary_value_tree(dest_type,
!                                             NULL, // No rdigits
!                                             B[0].field,
!                                             refer_offset(B[0]));
!             }
! 
            gg_assign(  gg_indirect(dest_addr),
                        gg_cast(dest_type, gg_subtract( B_value,
                                                        A_value)));
--- 607,613 ----
            dest_addr = gg_cast(build_pointer_type(dest_type), dest_addr);
  
            tree B_value;
!           get_binary_value(B_value, B[0], dest_type);
            gg_assign(  gg_indirect(dest_addr),
                        gg_cast(dest_type, gg_subtract( B_value,
                                                        A_value)));
*************** fast_subtract(size_t nC, cbl_num_result_
*** 713,726 ****
          // We need to calculate the sum of all the A[] terms using term_type as
          // the intermediate type:
  
!         tree sum     = gg_define_variable(term_type);
!         tree addend  = gg_define_variable(term_type);
!         get_binary_value(sum, NULL, A[0].field, refer_offset(A[0]));
  
          // Add in the rest of them:
          for(size_t i=1; i<nA; i++)
            {
!           get_binary_value(addend, NULL, A[i].field, refer_offset(A[i]));
            gg_assign(sum, gg_add(sum, addend));
            }
          //gg_printf("The intermediate sum is %ld\n", gg_cast(LONG, sum), NULL_TREE);
--- 643,656 ----
          // We need to calculate the sum of all the A[] terms using term_type as
          // the intermediate type:
  
!         tree sum    ;
!         tree addend ;
!         get_binary_value(sum, A[0].field, term_type);
  
          // Add in the rest of them:
          for(size_t i=1; i<nA; i++)
            {
!           get_binary_value(addend, A[i].field, term_type);
            gg_assign(sum, gg_add(sum, addend));
            }
          //gg_printf("The intermediate sum is %ld\n", gg_cast(LONG, sum), NULL_TREE);
*************** fast_subtract(size_t nC, cbl_num_result_
*** 728,734 ****
          if( format == giving_e )
            {
            // We now subtract the sum from B[0]
!           get_binary_value(addend, NULL, B[0].field, refer_offset(B[0]));
            gg_assign(sum, gg_subtract(addend, sum));
            }
  
--- 658,664 ----
          if( format == giving_e )
            {
            // We now subtract the sum from B[0]
!           get_binary_value(addend, B[0].field, term_type);
            gg_assign(sum, gg_subtract(addend, sum));
            }
  
*************** fast_subtract(size_t nC, cbl_num_result_
*** 762,769 ****
  
  static bool
  fast_multiply(size_t nC, cbl_num_result_t *C,
!               size_t nA, cbl_refer_t *A,
!               size_t nB, cbl_refer_t *B)
    {
    bool retval = false;
    if( all_results_integer(nC, C) )
--- 692,699 ----
  
  static bool
  fast_multiply(size_t nC, cbl_num_result_t *C,
!               size_t nA, const cbl_refer_t *A,
!               size_t nB, const cbl_refer_t *B)
    {
    bool retval = false;
    if( all_results_integer(nC, C) )
*************** fast_multiply(size_t nC, cbl_num_result_
*** 794,807 ****
        {
        // All the terms are things we can work with.
  
!       tree valA    = gg_define_variable(term_type);
!       tree valB    = gg_define_variable(term_type);
!       get_binary_value(valA, NULL, A[0].field, refer_offset(A[0]));
  
        if( nB )
          {
          // This is a MULTIPLY Format 2
!         get_binary_value(valB, NULL, B[0].field, refer_offset(B[0]));
          gg_assign(valA, gg_multiply(valA, valB));
          }
  
--- 724,737 ----
        {
        // All the terms are things we can work with.
  
!       tree valA ;
!       tree valB ;
!       get_binary_value(valA, A[0].field, term_type);
  
        if( nB )
          {
          // This is a MULTIPLY Format 2
!         get_binary_value(valB, B[0].field, term_type);
          gg_assign(valA, gg_multiply(valA, valB));
          }
  
*************** fast_multiply(size_t nC, cbl_num_result_
*** 834,841 ****
  
  static bool
  fast_divide(size_t nC, cbl_num_result_t *C,
!             size_t nA, cbl_refer_t *A,
!             size_t nB, cbl_refer_t *B,
        const cbl_refer_t             &remainder)
    {
    bool retval = false;
--- 764,771 ----
  
  static bool
  fast_divide(size_t nC, cbl_num_result_t *C,
!             size_t nA, const cbl_refer_t *A,
!             size_t nB, const cbl_refer_t *B,
        const cbl_refer_t             &remainder)
    {
    bool retval = false;
*************** fast_divide(size_t nC, cbl_num_result_t
*** 867,882 ****
        {
        // All the terms are things we can work with.
  
!       tree divisor  = gg_define_variable(term_type);
!       tree dividend = gg_define_variable(term_type);
        tree quotient = NULL_TREE;
!       get_binary_value(divisor, NULL, A[0].field, refer_offset(A[0]));
  
        if( nB )
          {
          // This is a MULTIPLY Format 2, where we are dividing A into B and
          // assigning that to C
!         get_binary_value(dividend, NULL, B[0].field, refer_offset(B[0]));
  
          quotient = gg_define_variable(term_type);
          // Yes, in this case the divisor and dividend are switched.  Things are
--- 797,812 ----
        {
        // All the terms are things we can work with.
  
!       tree divisor  ;
!       tree dividend ;
        tree quotient = NULL_TREE;
!       get_binary_value(divisor, A[0].field, term_type);
  
        if( nB )
          {
          // This is a MULTIPLY Format 2, where we are dividing A into B and
          // assigning that to C
!         get_binary_value(dividend, B[0].field, term_type);
  
          quotient = gg_define_variable(term_type);
          // Yes, in this case the divisor and dividend are switched.  Things are
diff -Nrcpad gcc-17-20260628/gcc/cobol/genutil.cc gcc-17-20260705/gcc/cobol/genutil.cc
*** gcc-17-20260628/gcc/cobol/genutil.cc	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/cobol/genutil.cc	Sun Jul  5 22:32:07 2026
***************
*** 41,46 ****
--- 41,47 ----
  #include "toplev.h"
  #include "function.h"
  #include "fold-const.h"
+ #include "target.h"
  #include "../../libgcobol/ec.h"
  #include "../../libgcobol/common-defs.h"
  #include "util.h"
*************** tree var_decl_dialects; // void* __gg__d
*** 120,126 ****
  #endif
  
  int
! get_scaled_rdigits(cbl_field_t *field)
    {
    int retval;
    if( !(field->attr & scaled_e) )
--- 121,127 ----
  #endif
  
  int
! get_scaled_rdigits(const cbl_field_t *field)
    {
    int retval;
    if( !(field->attr & scaled_e) )
*************** get_scaled_rdigits(cbl_field_t *field)
*** 149,155 ****
    }
  
  int
! get_scaled_digits(cbl_field_t *field)
    {
    int retval;
    if( !(field->attr & scaled_e) )
--- 150,156 ----
    }
  
  int
! get_scaled_digits(const cbl_field_t *field)
    {
    int retval;
    if( !(field->attr & scaled_e) )
*************** get_scaled_digits(cbl_field_t *field)
*** 178,192 ****
    return retval;
    }
  
! void
! get_integer_value(tree value, // We know this is a LONG
!                   cbl_field_t *field,
!                   tree         offset,
!                   bool check_for_fractional_digits)
    {
    if( field->type == FldLiteralN && field->data.rdigits==0 )
      {
!     gg_assign(value, gg_cast(LONG, field->data_decl_node));
      return;
      }
  
--- 179,194 ----
    return retval;
    }
  
! #define   CHECK_FOR_FRACTIONAL_DIGITS true
! static void
! giv_helper(tree retval, // We know this is a variable for the returned value.
!      const cbl_field_t *field,
!            tree value, // Comes in as INT128
!            bool check_for_fractional_digits)
    {
    if( field->type == FldLiteralN && field->data.rdigits==0 )
      {
!     gg_assign(retval, gg_cast(TREE_TYPE(retval), field->data_decl_node));
      return;
      }
  
*************** get_integer_value(tree value, // We know
*** 198,229 ****
    // If the field_i has rdigits, and if any of those rdigits are non-zero, we
    // return a 1 so that our caller can decide what to do.
  
-   tree temp    = gg_define_variable(INT128);
    tree rdigits = gg_define_variable(INT);
  
    if( field->attr & intermediate_e )
      {
-     // Get the binary value, which for 99V99 can be 1234, meaning 12.34
-     get_binary_value(temp, NULL, field, offset);
- 
      // Pick up the run-time number of rdigits:
      gg_assign(rdigits, gg_cast(INT, member(field, "rdigits")));
  
      // Scale by the number of rdigits, which turns 12.34 into 12.
      // When check_for_fractional_digits is true, __gg__rdigits will be set
      // to 1 for 12.34, and will be set to zero 12.00
!     scale_by_power_of_ten(temp,
                            gg_negate(rdigits),
                            check_for_fractional_digits);
      }
    else
      {
!     get_binary_value(temp, rdigits, field, offset);
!     scale_by_power_of_ten_N(temp,
                              -get_scaled_rdigits(field),
                              check_for_fractional_digits);
      }
!   gg_assign(value, gg_cast(TREE_TYPE(value), temp));
    }
  
  static
--- 200,246 ----
    // If the field_i has rdigits, and if any of those rdigits are non-zero, we
    // return a 1 so that our caller can decide what to do.
  
    tree rdigits = gg_define_variable(INT);
  
    if( field->attr & intermediate_e )
      {
      // Pick up the run-time number of rdigits:
      gg_assign(rdigits, gg_cast(INT, member(field, "rdigits")));
  
      // Scale by the number of rdigits, which turns 12.34 into 12.
      // When check_for_fractional_digits is true, __gg__rdigits will be set
      // to 1 for 12.34, and will be set to zero 12.00
!     scale_by_power_of_ten(value,
                            gg_negate(rdigits),
                            check_for_fractional_digits);
      }
    else
      {
!     scale_by_power_of_ten_N(value,
                              -get_scaled_rdigits(field),
                              check_for_fractional_digits);
      }
!   gg_assign(retval, gg_cast(TREE_TYPE(retval), value));
!   }
! 
! static void
! get_integer_value(tree retval,
!             const cbl_field_t *field,
!             bool check_for_fractional_digits = false)
!   {
!   tree value;
!   get_binary_value(value, field, INT128);
!   giv_helper(retval, field, value, check_for_fractional_digits);
!   }
! 
! static void
! get_integer_value(tree retval,
!             const cbl_refer_t &refer,
!             bool check_for_fractional_digits = false)
!   {
!   tree value;
!   get_binary_value(value, refer, INT128);
!   giv_helper(retval, refer.field, value, check_for_fractional_digits);
    }
  
  static
*************** get_and_check_refstart_and_reflen(  tree
*** 270,277 ****
      // disaster, disaster is what you get."
  
      get_integer_value(refstart,
!                       refer.refmod.from->field,
!                       refer_offset(*refer.refmod.from));
      gg_decrement(refstart);
      gg_assign(refstart, gg_multiply(refstart, stride));
  
--- 287,293 ----
      // disaster, disaster is what you get."
  
      get_integer_value(refstart,
!                       *refer.refmod.from);
      gg_decrement(refstart);
      gg_assign(refstart, gg_multiply(refstart, stride));
  
*************** get_and_check_refstart_and_reflen(  tree
*** 279,286 ****
        {
        // The length was specified, so that's what we return:
        get_integer_value(reflen,
!                         refer.refmod.len->field,
!                         refer_offset(*refer.refmod.len));
        // Modify refer.length by stride:
        gg_assign(reflen, gg_multiply(reflen, stride));
        }
--- 295,301 ----
        {
        // The length was specified, so that's what we return:
        get_integer_value(reflen,
!                         *refer.refmod.len);
        // Modify refer.length by stride:
        gg_assign(reflen, gg_multiply(reflen, stride));
        }
*************** get_and_check_refstart_and_reflen(  tree
*** 298,305 ****
    // ec_bound_ref_mode_e checking is enabled:
  
    get_integer_value(refstart,
!                     refer.refmod.from->field,
!                     refer_offset(*refer.refmod.from),
                      CHECK_FOR_FRACTIONAL_DIGITS);
  
    IF( var_decl_rdigits,
--- 313,319 ----
    // ec_bound_ref_mode_e checking is enabled:
  
    get_integer_value(refstart,
!                     *refer.refmod.from,
                      CHECK_FOR_FRACTIONAL_DIGITS);
  
    IF( var_decl_rdigits,
*************** get_and_check_refstart_and_reflen(  tree
*** 344,351 ****
        if( refer.refmod.len )
          {
          get_integer_value(reflen,
!                           refer.refmod.len->field,
!                           refer_offset(*refer.refmod.len),
                            CHECK_FOR_FRACTIONAL_DIGITS);
          gg_assign(reflen, gg_multiply(reflen, stride));
          IF( var_decl_rdigits,
--- 358,364 ----
        if( refer.refmod.len )
          {
          get_integer_value(reflen,
!                           *refer.refmod.len,
                            CHECK_FOR_FRACTIONAL_DIGITS);
          gg_assign(reflen, gg_multiply(reflen, stride));
          IF( var_decl_rdigits,
*************** get_depending_on_value_from_odo(tree ret
*** 429,435 ****
        */
    const cbl_enabled_exceptions_t&
                                  enabled_exceptions( cdf_enabled_exceptions() );
!   cbl_field_t *depending_on;
    depending_on = cbl_field_of(symbol_at(odo->occurs.depending_on));
  
    if( !enabled_exceptions.match(ec_bound_odo_e) )
--- 442,448 ----
        */
    const cbl_enabled_exceptions_t&
                                  enabled_exceptions( cdf_enabled_exceptions() );
!   const cbl_field_t *depending_on;
    depending_on = cbl_field_of(symbol_at(odo->occurs.depending_on));
  
    if( !enabled_exceptions.match(ec_bound_odo_e) )
*************** get_depending_on_value_from_odo(tree ret
*** 437,444 ****
      // With no exception testing, just pick up the value.  If there is an error
      // the programmer will simply have to live with the consequences.
      get_integer_value(retval,
!                       depending_on,
!                       NULL);
      return;
      }
  
--- 450,456 ----
      // With no exception testing, just pick up the value.  If there is an error
      // the programmer will simply have to live with the consequences.
      get_integer_value(retval,
!                       depending_on);
      return;
      }
  
*************** get_depending_on_value_from_odo(tree ret
*** 446,452 ****
    // between the lower and upper OCCURS limits:
    get_integer_value(retval,
                      depending_on,
-                     NULL,
                      CHECK_FOR_FRACTIONAL_DIGITS);
  
    IF( var_decl_rdigits, ne_op, integer_zero_node )
--- 458,463 ----
*************** get_data_offset(const cbl_refer_t &refer
*** 669,682 ****
            {
            // With no exception testing, just pick up the value
            get_integer_value(subscript,
!                             refer.subscripts[i].field,
!                             refer_offset(refer.subscripts[i]));
            }
          else
            {
            get_integer_value(subscript,
!                             refer.subscripts[i].field,
!                             refer_offset(refer.subscripts[i]),
                              CHECK_FOR_FRACTIONAL_DIGITS);
            IF( var_decl_rdigits,
                ne_op,
--- 680,691 ----
            {
            // With no exception testing, just pick up the value
            get_integer_value(subscript,
!                             refer.subscripts[i]);
            }
          else
            {
            get_integer_value(subscript,
!                             refer.subscripts[i],
                              CHECK_FOR_FRACTIONAL_DIGITS);
            IF( var_decl_rdigits,
                ne_op,
*************** get_data_offset(const cbl_refer_t &refer
*** 776,790 ****
    return retval;
    }
  
- static tree
- digit(tree location, int offset, int stride)
-   {
-   return gg_bitwise_and(gg_indirect(location,
-                                     build_int_cst_type(SIZE_T,
-                                                        offset*stride)),
-                         build_int_cst_type(UCHAR, 0x0F));
-   }
- 
  static const unsigned long pots[20] =
    {
    1ULL,                       // 00
--- 785,790 ----
*************** static const unsigned long pots[20] =
*** 809,1439 ****
    10000000000000000000ULL,    // 19
    };
  
- 
- static tree
- num_disp_dive(tree location,  // UCHAR_P to first digit
-               int  digits,    //
-               bool signable,
-               int stride)
-   {
-   tree retval;
-   tree type;
-   if( digits <= 9 )
-     {
-     type = signable ? INT : UINT;
-     }
-   else if( digits < 19 )
-     {
-     type = signable ? LONG : ULONG;
-     }
-   else
-     {
-     type = signable ? INT128 : UINT128;
-     }
-   retval = gg_define_variable(type);
- 
-   switch(digits)
-     {
-     case 1:
-       {
-       gg_assign(retval, gg_cast(type, digit(location, 0, stride)));
-       break;
-       }
-     case 2:
-       {
-       tree term_a = gg_multiply(gg_cast(type, digit(location, 0, stride)),
-                                 build_int_cst_type(type, 10));
-       tree term_b = gg_cast(type, digit(location, 1, stride));
-       gg_assign(retval,
-                 gg_add(term_a,
-                        term_b));
-       break;
-       }
-     case 3:
-       {
-       tree term_a = gg_multiply(gg_cast(type, digit(location, 0, stride)),
-                                 build_int_cst_type(type, 100));
-       tree term_b = gg_multiply(gg_cast(type, digit(location, 1, stride)),
-                                 build_int_cst_type(type, 10));
-       tree term_c = gg_cast(type, digit(location, 2, stride));
-       gg_assign(retval,
-                 gg_add(term_a,
-                        gg_add(term_b,
-                               term_c)));
-       break;
-       }
-     case 4:
-       {
-       tree term_a = gg_multiply(gg_cast(type, digit(location, 0, stride)),
-                                 build_int_cst_type(type, 1000));
-       tree term_b = gg_multiply(gg_cast(type, digit(location, 1, stride)),
-                                 build_int_cst_type(type, 100));
-       tree term_c = gg_multiply(gg_cast(type, digit(location, 2, stride)),
-                                 build_int_cst_type(type, 10));
-       tree term_d = gg_cast(type, digit(location, 3, stride));
-       gg_assign(retval,
-                 gg_add(term_a,
-                 gg_add(term_b,
-                 gg_add(term_c,
-                        term_d))));
-       break;
-       }
-     default:
-       {
-       // digits is between 5 and 38
-       int nright = digits/2;
-       int nleft  = digits - nright;
- 
-       int64_t right_factor = pots[nright];
-       tree term_a = gg_multiply(num_disp_dive(location,
-                                               nleft,
-                                               signable,
-                                               stride),
-                                 build_int_cst_type(type, right_factor));
-       tree term_b = num_disp_dive(gg_add(location,
-                                           build_int_cst_type(SIZE_T,
-                                                              nleft*stride)),
-                                   nright,
-                                   signable,
-                                   stride);
-       gg_assign(retval, gg_add(term_a, term_b));
-       break;
-       }
-     }
- 
-   return retval;
-   }
- 
- static tree
- pd_dive(tree location, int nbytes, bool signable)
-   {
-   tree type;
-   int digits = nbytes * 2;
-   if( digits < 10 )
-     {
-     type = signable ? INT : UINT;
-     }
-   else if(digits < 20 )
-     {
-     type = signable ? LONG : ULONG;
-     }
-   else
-     {
-     type = signable ? INT128 : UINT128;
-     }
-   tree retval = gg_define_variable(type);
- 
-   tree ten2 = build_int_cst_type(type, 100);
-   tree ten4 = build_int_cst_type(type, 10000);
-   tree ten6 = build_int_cst_type(type, 1000000);
- 
-   tree t1 = integer_one_node;
-   tree t2 = build_int_cst_type(INT, 2);
-   tree t3 = build_int_cst_type(INT, 3);
- 
-   switch(nbytes)
-     {
-     case 0:
-       retval =   integer_zero_node;
-       break;
-     case 1:
-       gg_assign(retval,
-                 gg_cast(type,
-                         gg_array_value(var_decl_dp2bin,
-                                        gg_indirect(location))));
-       break;
-     case 2:
-       {
-       tree A = gg_multiply(gg_cast(type,
-                                    gg_array_value(var_decl_dp2bin,
-                                                   gg_indirect(location))),
-                            ten2);
-       tree B = gg_cast(type,
-                        gg_array_value(var_decl_dp2bin,
-                                       gg_indirect(location, t1)));
-       gg_assign(retval, gg_add(A, B));
-       break;
-       }
-     case 3:
-       {
-       tree A = gg_multiply(gg_cast(type,
-                            gg_array_value(var_decl_dp2bin,
-                                           gg_indirect(location))),
-                            ten4);
-       tree B = gg_multiply(gg_cast(type,
-                         gg_array_value(var_decl_dp2bin,
-                                        gg_indirect(location, t1))),
-                            ten2);
-       tree C = gg_cast(type,
-                        gg_array_value(var_decl_dp2bin,
-                                       gg_indirect(location, t2)));
-       gg_assign(retval, gg_add(A, gg_add(B, C)));
-       break;
-       }
-     case 4:
-       {
-       tree A = gg_multiply(gg_cast(type,
-                            gg_array_value(var_decl_dp2bin,
-                                           gg_indirect(location))),
-                            ten6);
-       tree B = gg_multiply(gg_cast(type,
-                         gg_array_value(var_decl_dp2bin,
-                                        gg_indirect(location, t1))),
-                            ten4);
-       tree C = gg_multiply(gg_cast(type,
-                         gg_array_value(var_decl_dp2bin,
-                                        gg_indirect(location, t2))),
-                            ten2);
-       tree D = gg_cast(type,
-                        gg_array_value(var_decl_dp2bin,
-                                       gg_indirect(location, t3)));
-       gg_assign(retval, gg_add(A, gg_add(B, gg_add(C, D))));
-       break;
-       }
-     default:
-       {
-       int nright = nbytes/2;
-       int nleft  = nbytes - nright;
-       tree A = gg_multiply( gg_cast(type, pd_dive(location, nleft, signable)),
-                             build_int_cst_type(type, pots[nright*2]));
-       tree B = gg_cast(type, pd_dive(gg_add(location,
-                                             build_int_cst_type(SIZE_T, nleft)),
-                                      nright,
-                                      signable));
-       gg_assign(retval, gg_add(A, B));
-       break;
-       }
-     }
- 
-   return retval;
-   }
- 
- static tree
- get_pd_value(tree return_type, cbl_field_t *field, tree location)
-   {
-   tree retval = gg_define_variable(return_type);
-   bool has_sign_nybble =  !(field->attr & separate_e);
-   bool signable        = !!(field->attr & signable_e);
-   int nbytes = field->data.capacity();
- 
-   gg_assign(retval,
-             gg_cast(return_type,
-                     pd_dive(location,
-                             has_sign_nybble ? nbytes - 1 : nbytes,
-                             signable)));
-   if( has_sign_nybble )
-     {
-     gg_assign(retval,
-               gg_add(gg_multiply(retval,
-                                  build_int_cst_type(return_type, 10)),
-                      gg_cast(return_type,
-                              gg_rshift(gg_indirect(location,
-                                        build_int_cst_type(SIZE_T, nbytes-1)),
-                                        build_int_cst_type(SIZE_T, 4)))));
- 
-     IF( gg_bitwise_and(gg_indirect(location, build_int_cst_type(SIZE_T, nbytes-1)),
-                                    build_int_cst_type(UCHAR, 0x0F)),
-         eq_op,
-         build_int_cst_type(UCHAR, 0x0D) )
-       {
-       gg_assign(retval, gg_negate(retval));
-       }
-     ELSE
-       {
-       }
-     ENDIF
-     }
- 
-   return retval;
-   }
- 
- tree
- get_binary_value_tree(tree return_type,
-                       tree rdigits,
-                       cbl_field_t *field,
-                       tree         field_offset,
-                       tree         hilo
-                       )
-   {
-   tree retval = gg_define_variable(return_type);
- 
-   if( hilo )
-     {
-     gg_assign(hilo, integer_zero_node);
-     }
- 
-   bool needs_scaling = true;
-   static const bool debugging=false;
- 
-   // Very special case:
-   if( strcmp(field->name, "ZEROS") == 0 )
-     {
-     gg_assign(retval, gg_cast(return_type, integer_zero_node));
-     if( rdigits )
-       {
-       gg_assign(rdigits, gg_cast(TREE_TYPE(rdigits), integer_zero_node));
-       }
-     return retval;
-     }
- 
-   switch(field->type)
-     {
-     case FldLiteralN:
-       {
-       if( return_type == FLOAT )
-         {
-         cbl_internal_error("cannot get %<float%> value from %s", field->name);
-         }
-       else
-         {
-         if( rdigits )
-           {
-           gg_assign(rdigits, build_int_cst_type(TREE_TYPE(rdigits),
-                                                 field->data.rdigits));
-           }
-         gg_assign(retval, gg_cast(return_type, field->data_decl_node));
-         }
-       break;
-       }
- 
-     case FldNumericDisplay:
-       {
-       charmap_t *charmap = __gg__get_charmap(field->codeset.encoding);
-       int stride = charmap->stride();
-       // Establish the source
-       tree source_location = gg_define_variable(UCHAR_P);
-       gg_assign(source_location, get_data_address(field, field_offset));
-       tree sign_location;
-       if(    (field->attr & signable_e)
-           && (field->attr & leading_e)
-           && (field->attr & separate_e) )
-         {
-         sign_location = gg_define_variable(UCHAR_P);
-         gg_assign(sign_location, source_location);
-         gg_assign(source_location,
-                   gg_add(source_location,
-                          build_int_cst_type(SIZE_T, stride)));
-         }
-       // source_location points to the first digit.
- 
-       tree dive_value = num_disp_dive(source_location,
-                                       field->data.digits,
-                                       !!(field->attr & signable_e),
-                                       stride);
-       gg_assign(retval, gg_cast(return_type, dive_value));
- 
-       // retval is the absolute value of the numeric-display string.
- 
-       if( field->attr & signable_e )
-         {
-         // Because the source is signable, we have to check if it is flagged
-         // as negative:
-         if(   (field->attr & leading_e)
-            && (field->attr & separate_e) )
-           {
-           // We already know that sign_location is established
-           }
-         else if(   !(field->attr & leading_e)
-                 &&  (field->attr & separate_e) )
-           {
-           sign_location = gg_define_variable(UCHAR_P);
-           gg_assign(sign_location,
-                     gg_add(source_location,
-                            build_int_cst_type(SIZE_T,
-                                               field->data.digits*stride)));
-           }
-         else if(    (field->attr & leading_e)
-                 && !(field->attr & separate_e) )
-           {
-           sign_location = gg_define_variable(UCHAR_P);
-           gg_assign(sign_location, source_location);
-           }
-         else //if(   !(field->attr & leading_e)
-              //   && !(field->attr & separate_e) )
-           {
-           sign_location = gg_define_variable(UCHAR_P);
-           gg_assign(sign_location,
-                     gg_add(source_location,
-                            build_int_cst_type(SIZE_T,
-                                             (field->data.digits-1)*stride)));
-           }
-         if( field->attr & separate_e )
-           {
-           IF( gg_indirect(sign_location),
-               eq_op,
-               build_int_cst_type(UCHAR,
-                                  charmap->mapped_character(ascii_minus)) )
-             {
-             gg_assign(retval, gg_negate(retval));
-             }
-           ELSE
-             {
-             }
-           ENDIF
-           }
-         else
-           {
-           if( charmap->is_like_ebcdic() )
-             {
-             IF( gg_indirect(sign_location),
-                 lt_op,
-                 build_int_cst_type(UCHAR, 0xF0) )
-               {
-               // The digit is less than the EBCDIC '0'
-               gg_assign(retval, gg_negate(retval));
-               }
-             ELSE
-               {
-               }
-             ENDIF
-             }
-           else
-             {
-             IF( gg_indirect(sign_location),
-                 gt_op,
-                 build_int_cst_type(UCHAR, 0x39) )
-               {
-               // The digit is greater than the ASCII '9'
-               gg_assign(retval, gg_negate(retval));
-               }
-             ELSE
-               {
-               }
-             ENDIF
-             }
-           }
-         }
-       break;
-       }
- 
-     case FldNumericBinary:
-       {
-       // As of this writing, the source value is big-endian
-       // We have to convert it to a little-endian destination.
-       tree value = gg_define_variable(return_type);
-       tree dest   = gg_cast(build_pointer_type(UCHAR), gg_get_address_of(value));
-       tree source = get_data_address(field, field_offset);
- 
-       size_t dest_nbytes   =  TREE_INT_CST_LOW(TYPE_SIZE_UNIT(return_type));
-       size_t source_nbytes = field->data.capacity();
- 
-       if( debugging )
-         {
-         gg_printf("dest_bytes/source_bytes %ld/%ld\n",
-                   build_int_cst_type(SIZE_T, dest_nbytes),
-                   build_int_cst_type(SIZE_T, source_nbytes),
-                   NULL_TREE);
-         gg_printf("Starting value: ", NULL_TREE);
-         hex_dump(source, source_nbytes);
-         gg_printf("\n", NULL_TREE);
-         }
- 
-       if( dest_nbytes <= source_nbytes )
-         {
-         // Destination is too small.  We will move what we can, throwing away
-         // the most significant source bytes:
-         for(size_t i=0; i<dest_nbytes; i++)
-           {
-           gg_assign(gg_array_value(dest, i),
-                     gg_array_value(source, source_nbytes-1-i) );
-           }
-         }
-       else
-         {
-         // Destination is too big.  We'll need to fill the high-order bytes with
-         // either 0x00 for positive numbers, or 0xFF for negative
-         tree extension = gg_define_variable(UCHAR);
-         if( field->attr & signable_e )
-           {
-           IF( gg_array_value(gg_cast(build_pointer_type(SCHAR), source)),
-               lt_op,
-               gg_cast(SCHAR, integer_zero_node) )
-             {
-             gg_assign(extension, build_int_cst_type(UCHAR, 0xFF));
-             }
-           ELSE
-             {
-             gg_assign(extension, build_int_cst_type(UCHAR, 0));
-             }
-             ENDIF
-           }
-         else
-           {
-           gg_assign(extension, build_int_cst_type(UCHAR, 0));
-           }
- 
-         // Flip the source end-for-end and put it into the dest:
-         size_t i=0;
-         while(i < source_nbytes)
-           {
-           gg_assign(gg_array_value(dest, i),
-                     gg_array_value(source, source_nbytes-1-i) );
-           i += 1;
-           }
-           // Fill the extra high-end bytes with 0x00 or 0xFF extension
- 
-         while(i < dest_nbytes)
-           {
-           gg_assign(gg_array_value(dest, i),
-                     extension);
-           i += 1;
-           }
-         }
-       if( debugging )
-         {
-         gg_printf("Ending value:  ", NULL_TREE);
-         hex_dump(dest, dest_nbytes);
-         gg_printf("\n", NULL_TREE);
-         }
-       retval = value;
-       break;
-       }
- 
-     case FldNumericBin5:
-     case FldIndex:
-     case FldPointer:
-       {
-       if( field->attr & intermediate_e )
-         {
-         // It is a intermediate, so rdigits has to come from the run-time structure
-         if( rdigits )
-           {
-           gg_assign(rdigits,
-                     gg_cast( TREE_TYPE(rdigits),
-                              member(field, "rdigits")));
-           }
-         }
-       else
-         {
-         // It isn't an intermediate, so we can safely use field->rdigits
-         if( rdigits )
-           {
-           gg_assign(rdigits,
-                     build_int_cst_type( TREE_TYPE(rdigits),
-                                         get_scaled_rdigits(field)));
-           }
-         }
-       tree source_address = get_data_address(field, field_offset);
-       tree source_type = tree_type_from_field(field);
-       if( debugging && rdigits)
-         {
-         gg_printf("get_binary_value bin5 rdigits: %d\n", rdigits, NULL_TREE);
-         }
- 
-       retval = gg_cast(return_type,
-                        gg_indirect(gg_cast( build_pointer_type(source_type),
-                                             source_address )));
-       break;
-       }
- 
-     case FldPacked:
-       {
-       if( rdigits )
-         {
-         gg_assign(rdigits,
-                   build_int_cst_type( TREE_TYPE(rdigits),
-                                       get_scaled_rdigits(field)));
-         }
-       gg_assign(retval,
-                 get_pd_value(return_type,
-                              field,
-                              get_data_address( field, field_offset)));
-       break;
-       }
- 
-     case FldFloat:
-       {
-       // We are going to assume that the float value contains an integer.
-       if( rdigits )
-         {
-         gg_assign(rdigits,
-                   gg_cast( TREE_TYPE(rdigits), integer_zero_node));
-         }
-       tree value = gg_define_variable(return_type);
-       gg_assign(value, gg_cast(return_type,
-                                gg_call_expr( INT128,
-                                      "__gg__integer_from_float128",
-                                      gg_get_address_of(field->var_decl_node),
-                                      NULL_TREE)));
-       needs_scaling = false;
-       retval = value;
-       break;
-       }
- 
-     default:
-       {
-       char *err = xasprintf("%s(): We know not how to"
-                             " get a binary value from %s\n",
-                             __func__,
-                             cbl_field_type_str(field->type) );
-       cbl_internal_error("%s", err);
-       abort();
-       break;
-       }
-     }
- 
-   if( needs_scaling )
-     {
-     if( field->attr & scaled_e )
-       {
-       if( field->data.rdigits < 0 )
-         {
-         // Hey, Dubner!
-         // Should that test be != 0 rather than < 0?  Maybe not; this routine
-         // is supposed to be for integers.
-         tree value = gg_define_variable(return_type);
-         gg_assign(value, retval);
-         scale_by_power_of_ten_N(value, -field->data.rdigits);
-         retval = value;
-         }
-       }
-     }
-   return retval;
-   }
- 
- tree
- get_binary_value_tree(tree return_type,
-                       tree rdigits,
-                 const cbl_refer_t &refer,
-                       tree         hilo
-                       )
-   {
-   tree retval;
-   if( refer_is_clean(refer) )
-     {
-     retval = get_binary_value_tree(return_type,
-                                    rdigits,
-                                    refer.field,
-                                    integer_zero_node,
-                                    hilo);
-     }
-   else
-     {
-     retval = get_binary_value_tree(return_type,
-                                    rdigits,
-                                    refer.field,
-                                    refer_offset(refer),
-                                    hilo);
-     }
-   return retval;
-   }
- 
- void
- get_binary_value( tree value,
-                   tree rdigits,
-                   cbl_field_t *field,
-                   tree         field_offset,
-                   tree         hilo
-                   )
-   {
-   tree return_type = TREE_TYPE(value);
-   gg_assign(value, get_binary_value_tree( return_type,
-                                           rdigits,
-                                           field,
-                                           field_offset,
-                                           hilo ));
-   }
- 
  tree
  tree_type_from_field(const cbl_field_t *field)
    {
--- 809,814 ----
*************** refer_is_clean(const cbl_refer_t &refer)
*** 2061,2066 ****
--- 1436,1455 ----
            ;
    }
  
+ 
+ bool
+ field_is_super_clean(const cbl_field_t *field)
+   {
+   return     // refer.field->type == FldLiteralA ||
+              field->type == FldLiteralN
+           || !(field->attr & (  based_e
+                               | linkage_e
+                               | local_e
+                               | intermediate_e
+                               | any_length_e
+                               | external_e)) ;
+   }
+ 
  bool
  refer_is_super_clean(const cbl_refer_t &refer)
    {
*************** refer_is_super_clean(const cbl_refer_t &
*** 2085,2112 ****
    }
  
  bool
! refer_is_working_storage(const cbl_refer_t &refer)
    {
!   // This returns TRUE in cases where the refer.field->data_decl_node is
    // stored in .bss or .data, and is thus directly addressable.
!   bool retval = !( refer.field->attr & (  based_e
!                                         | linkage_e
!                                         | local_e
!                                         | intermediate_e) )
!                 || (refer.field->type == FldLiteralN);
    return retval;
    }
  
! /*  This routine returns the length portion of a refmod(start:length) reference.
!     It extracts both the start and the length so that it can add them together
!     to make sure that result falls within refer.capacity.
  
-     This routine shouldn't be called unless there is refmod involved.
-     */
  static
  tree  // size_t
  refer_refmod_length(const cbl_refer_t &refer)
    {
    Analyze();
    REFER("refstart and reflen");
    tree refstart = gg_define_variable(LONG);
--- 1474,1508 ----
    }
  
  bool
! is_working_storage(const cbl_field_t *field)
    {
!   // This returns TRUE in cases where the field->data_decl_node is
    // stored in .bss or .data, and is thus directly addressable.
!   bool retval = !( field->attr & (  based_e
!                                   | linkage_e
!                                   | local_e
!                                   | intermediate_e) )
!                 || (field->type == FldLiteralN);
    return retval;
    }
  
! bool
! is_working_storage(const cbl_refer_t &refer)
!   {
!   // This returns TRUE in cases where the refer.field->data_decl_node is
!   return is_working_storage(refer.field);
!   }
  
  static
  tree  // size_t
  refer_refmod_length(const cbl_refer_t &refer)
    {
+   /*  This routine returns the length portion of a refmod(start:length)
+       reference. It extracts both the start and the length so that it can add
+       them together to make sure that result falls within refer.capacity.
+ 
+       This routine shouldn't be called unless there is refmod involved.
+       */
    Analyze();
    REFER("refstart and reflen");
    tree refstart = gg_define_variable(LONG);
*************** is_pure_integer(const cbl_field_t *field
*** 2368,2494 ****
    return retval;
    }
  
! static bool
! binary_from_FldNumericBin5(tree &value, const cbl_refer_t &refer, tree type)
    {
!   bool retval = false;
! 
!   tree source_type = tree_type_from_field(refer.field);
! 
!   if( refer_is_working_storage(refer) )
!     {
!     if( !type )
!       {
!       type = source_type;
!       }
! 
!     value = gg_define_variable(type);
! 
!     if(  refer.field->offset == 0
!       && TREE_CODE(TREE_TYPE(refer.field->data_decl_node)) == INTEGER_TYPE)
!       {
!       // This is the cleanest method: We can just pick up the original base
!       // data.
  
! //#define FOUND_THE_ALIASING_PROBLEM
! #ifdef FOUND_THE_ALIASING_PROBLEM
!       // At the present writing, we can't just pick up the data_decl_node data,
!       // because the contents can be altered by pointer operations that the
!       // compiler doesn't know about.  And we get errors, first noted with the
!       // results of fast_add (which uses *(data *) to change the data.) Using
!       // -fno-strict-aliasing makes the problem go away.  Until we get that
!       // sorted out, we use the slightly less efficient method on the other
!       // side of the #else.
!       gg_assign(value, gg_cast(type, refer.field->data_decl_node));
! #else
!       tree base;
!       base = gg_cast(build_pointer_type(TREE_TYPE(refer.field->data_decl_node)),
!                                 member(refer.field->var_decl_node, "data"));
!       gg_assign(value,
!                 gg_cast(type,
!                         gg_indirect(gg_cast(build_pointer_type(source_type),
!                                             base))));
! #endif
!       }
!     else
!       {
!       // We can't just pick up the stuff at data_decl_node.  Either there is
!       // an offset from the 01 grandfather, or else there is a type mismatch,
!       // probably because of a REDEFINES.  So, we do the equivalent of
!       // *(type *)&thing;
!       tree base;
!       base = gg_cast(UCHAR_P, gg_get_address(refer.field->data_decl_node));
!       if( refer_is_clean(refer) )
!         {
!         if( refer.field->offset )
!           {
!           base = gg_add(base, build_int_cst_type(SIZE_T, refer.field->offset));
!           }
!         }
!       else
!         {
!         base = gg_add(base, refer_offset(refer));
!         }
!       gg_assign(value,
!                 gg_cast(type,
!                         gg_indirect(gg_cast(build_pointer_type(source_type),
!                                             base))));
!       }
!     retval = true;
!     }
!   else
!     {
!     if( !type )
!       {
!       type = tree_type_from_field(refer.field);
!       }
  
!     tree base;
!     get_location(base, refer);
!     value = gg_define_variable(type);
!     gg_assign(value,
!               gg_cast(type,
!                       gg_indirect(gg_cast(build_pointer_type(source_type),
!                                           base))));
!     retval = true;
!     }
!   return retval;
    }
  
! static bool
  binary_from_FldLiteralN(tree &value, const cbl_refer_t &refer, tree type)
    {
!   // The data_decl_node has the value we need.
  
!   tree source_type = tree_type_from_field(refer.field);
!   if( !type )
      {
!     type = source_type;
      }
- 
-   value = gg_define_variable(type);
-   gg_assign(value, gg_cast(type, refer.field->data_decl_node));
- 
-   return true;
    }
  
! 
! bool
  binary_from_FldNumericBinary(tree &value, const cbl_refer_t &refer, tree type)
    {
-   bool retval = false;
- 
-   // get the value as its own type.
    tree unflipped;
!   retval = binary_from_FldNumericBin5(unflipped, refer, NULL_TREE);
!   if( retval )
      {
      // The actual return value gets the flipped bytes:
-     value = gg_define_variable(type);
      gg_assign(value, gg_cast(type, gg_bswap(unflipped)));
      }
! 
!   return retval;
    }
  
  static void
--- 1764,1835 ----
    return retval;
    }
  
! static void
! binary_from_FldNumericBin5(tree &value, const cbl_field_t *field, tree dest_type)
    {
!   value = gg_define_variable(dest_type);
!   safe_cast(value, field);
!   }
  
! static void
! binary_from_FldNumericBin5(tree &value, const cbl_refer_t &refer, tree dest_type)
!   {
!   value = gg_define_variable(dest_type);
!   safe_cast(value, refer);
!   }
  
! static void
! binary_from_FldLiteralN(tree &value, const cbl_field_t *field, tree dest_type)
!   {
!   // The data_decl_node has the value we need.
!   value = gg_define_variable(dest_type);
!   gg_assign(value, gg_cast(dest_type, field->data_decl_node));
    }
  
! static void
  binary_from_FldLiteralN(tree &value, const cbl_refer_t &refer, tree type)
    {
!   binary_from_FldLiteralN(value, refer.field, type);
!   }
  
! static void
! binary_from_FldNumericBinary(tree &value, const cbl_field_t *field, tree type)
!   {
!   tree unflipped;
!   binary_from_FldNumericBin5(unflipped,
!                              field,
!                              tree_type_from_field(field));
!   // retval is in the machine's native encoding.
!   value = gg_define_variable(type);
!   if(!BYTES_BIG_ENDIAN)
      {
!     // The actual return value gets the flipped bytes:
!     gg_assign(value, gg_cast(type, gg_bswap(unflipped)));
!     }
!   else
!     {
!     gg_assign(value, gg_cast(type, unflipped));
      }
    }
  
! static void
  binary_from_FldNumericBinary(tree &value, const cbl_refer_t &refer, tree type)
    {
    tree unflipped;
!   binary_from_FldNumericBin5(unflipped,
!                              refer,
!                              tree_type_from_field(refer.field));
!   // retval is in the machine's native encoding.
!   value = gg_define_variable(type);
!   if(!BYTES_BIG_ENDIAN)
      {
      // The actual return value gets the flipped bytes:
      gg_assign(value, gg_cast(type, gg_bswap(unflipped)));
      }
!   else
!     {
!     gg_assign(value, gg_cast(type, unflipped));
!     }
    }
  
  static void
*************** d_and_q_num_disp( tree  &retval,   // We
*** 2651,2680 ****
      }
    }
  
! bool
! binary_from_FldNumericDisplay(tree &value,
!                               const cbl_refer_t &refer,
!                               tree return_type)
    {
-   // A return of false means we couldn't convert this value
-   bool retval = false;
- 
-   tree source_type = tree_type_from_field(refer.field);
-   if( !return_type )
-     {
-     return_type = source_type;
-     }
- 
    // This is where we build the actual numeric value of the digits of the
    // COBOL numeric display variable.  It is up to the caller to interpret
    // scaledness and rdigits and so forth.
    value = gg_define_variable(return_type);
  
-   // This is our address pointer, used for walking the digits.
-   tree base          = gg_define_variable(UCHAR_P);
- 
-   // This is the location of the byte holding the sign (if any)
-   tree sign_location = gg_define_variable(UCHAR_P);
    // This is the operational counter
    tree digit_count = gg_define_variable(SIZE_T);
  
--- 1992,2008 ----
      }
    }
  
! static void
! binary_from_numdisp(tree &value,
!               const cbl_field_t *field,
!                     tree location,
!                     tree return_type)
    {
    // This is where we build the actual numeric value of the digits of the
    // COBOL numeric display variable.  It is up to the caller to interpret
    // scaledness and rdigits and so forth.
    value = gg_define_variable(return_type);
  
    // This is the operational counter
    tree digit_count = gg_define_variable(SIZE_T);
  
*************** binary_from_FldNumericDisplay(tree &valu
*** 2683,2760 ****
    // or 2 or 4 for utf16 and utf32.
    tree stride;
  
!   // This works for all forms of storage:
!   gg_assign(base,
!             gg_cast(build_pointer_type(UCHAR_P),
!                     member(refer.field->var_decl_node,"data")));
!   if( !refer_is_clean(refer) )
!     {
!     gg_assign(base, gg_add(base, refer_offset(refer)));
!     }
! 
!   gg_assign(digit_count, build_int_cst_type(SIZE_T, refer.field->data.digits));
  
!   charmap_t *charmap = __gg__get_charmap(refer.field->codeset.encoding);
    size_t fstride = charmap->stride();
    stride = build_int_cst_type(SIZE_T, fstride);
  
!   if( refer.field->attr & signable_e )
      {
      // The value is signable.
!     if( refer.field->attr & separate_e )
        {
        // The sign byte is separate from the digits
!       if( refer.field->attr & leading_e )
          {
          // separate & leading.  sign_location is the first character.
!         gg_assign(sign_location, base);
!         gg_assign(base, gg_add(base, stride));
          }
        else
          {
          // separate & trailing.  The sign byte is after the last character:
          gg_assign(sign_location,
!                   gg_add(base,
                           build_int_cst_type(SIZE_T,
!                                         refer.field->data.digits * fstride)));
          }
        }
      else
        {
        // sign is internal:
!       if( refer.field->attr & leading_e )
          {
          // internal & leading
!         gg_assign(sign_location, base);
          }
        else
          {
          // internal & trailing
          gg_assign(sign_location,
!                   gg_add(base,
                           build_int_cst_type(SIZE_T,
                                              fstride *
!                                               (refer.field->data.digits-1))));
          }
        }
      }
  
!   size_t digits = refer.field->data.digits;
    // At this point, we have 'digits', which is the number of characters at
!   // 'base',  The obvious thing is a multiply-and-accumulate loop, but faster
!   // code can result from allowing the middle-end to create overlapping.
  
    // This divide-and-conquer algorithm gives the middle-end that flexibility.
    // It runs about three times faster than a multiply-accumulate when compiled
    // with -O0, and about 2.8 times faster when compiled with -O2.
  
    tree d_and_q;
!   d_and_q_num_disp(d_and_q, base, digits, fstride);
  
    // d_and_q contains our value.  We need to know if negativeness is involved.
!   if( refer.field->attr & signable_e )
      {
!     if( refer.field->attr & separate_e )
        {
        // If the sign location is a minus sign, we have to negate the value.
        IF( gg_indirect(sign_location),
--- 2011,2081 ----
    // or 2 or 4 for utf16 and utf32.
    tree stride;
  
!   gg_assign(digit_count, build_int_cst_type(SIZE_T, field->data.digits));
  
!   charmap_t *charmap = __gg__get_charmap(field->codeset.encoding);
    size_t fstride = charmap->stride();
    stride = build_int_cst_type(SIZE_T, fstride);
  
!   tree sign_location = gg_define_variable(UCHAR_P);
! 
!   if( field->attr & signable_e )
      {
      // The value is signable.
!     if( field->attr & separate_e )
        {
        // The sign byte is separate from the digits
!       if( field->attr & leading_e )
          {
          // separate & leading.  sign_location is the first character.
!         gg_assign(sign_location, location);
!         gg_assign(location, gg_add(location, stride));
          }
        else
          {
          // separate & trailing.  The sign byte is after the last character:
          gg_assign(sign_location,
!                   gg_add(location,
                           build_int_cst_type(SIZE_T,
!                                         field->data.digits * fstride)));
          }
        }
      else
        {
        // sign is internal:
!       if( field->attr & leading_e )
          {
          // internal & leading
!         gg_assign(sign_location, location);
          }
        else
          {
          // internal & trailing
          gg_assign(sign_location,
!                   gg_add(location,
                           build_int_cst_type(SIZE_T,
                                              fstride *
!                                               (field->data.digits-1))));
          }
        }
      }
  
!   size_t digits = field->data.digits;
    // At this point, we have 'digits', which is the number of characters at
!   // 'location',  The obvious thing is a multiply-and-accumulate loop, but
!   // faster code can result from allowing the middle-end to create overlapping.
  
    // This divide-and-conquer algorithm gives the middle-end that flexibility.
    // It runs about three times faster than a multiply-accumulate when compiled
    // with -O0, and about 2.8 times faster when compiled with -O2.
  
    tree d_and_q;
!   d_and_q_num_disp(d_and_q, location, digits, fstride);
  
    // d_and_q contains our value.  We need to know if negativeness is involved.
!   if( field->attr & signable_e )
      {
!     if( field->attr & separate_e )
        {
        // If the sign location is a minus sign, we have to negate the value.
        IF( gg_indirect(sign_location),
*************** binary_from_FldNumericDisplay(tree &valu
*** 2810,2835 ****
      {
      gg_assign(value, gg_cast(return_type, d_and_q));
      }
  
!   retval = true;
!   return retval;
    }
  
!   /* This is the GENERIC that creates
!   static const unsigned char dp2bin[160] =
!     {
!     00, 01, 02, 03, 04, 05, 06, 07,  8,  9,  0,  0,  0,  0,  0,  0, // 0x00
!     10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 10, 10, 10, 10, 10, 10, // 0x10
!     20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 20, 20, 20, 20, 20, 20, // 0x20
!     30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 30, 30, 30, 30, 30, 30, // 0x30
!     40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 40, 40, 40, 40, 40, 40, // 0x40
!     50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 50, 50, 50, 50, 50, 50, // 0x50
!     60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 60, 60, 60, 60, 60, 60, // 0x60
!     70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 70, 70, 70, 70, 70, 70, // 0x70
!     80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 80, 80, 80, 80, 80, 80, // 0x80
!     90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 90, 90, 90, 90, 90, 90, // 0x90
!     };
!   */
  
  static tree
  make_dp2bin_decl()
--- 2131,2163 ----
      {
      gg_assign(value, gg_cast(return_type, d_and_q));
      }
+   }
  
! static void
! binary_from_FldNumericDisplay(tree &value,
!                               const cbl_field_t *field,
!                               tree return_type)
!   {
!   tree location;
!   get_location(location, field);
!   binary_from_numdisp(value,
!                       field,
!                       location,
!                       return_type);
    }
  
! static void
! binary_from_FldNumericDisplay(tree &value,
!                               const cbl_refer_t &refer,
!                               tree return_type)
!   {
!   tree location;
!   get_location(location, refer);
!   binary_from_numdisp(value,
!                       refer.field,
!                       location,
!                       return_type);
!   }
  
  static tree
  make_dp2bin_decl()
*************** d_and_q_packed(tree &value, tree base, s
*** 2995,3040 ****
      }
    }
  
! static bool
! binary_from_comp_3(tree &value, const cbl_refer_t &refer, tree type)
    {
-   bool retval = false;
- 
    // This is where we build the actual numeric value of the digits of the
    // COBOL packed-decimal variable.  It is up to the caller to interpret
    // scaledness and rdigits and so forth.
  
!   tree source_type = tree_type_from_field(refer.field);
! 
!   if( !type )
!     {
!     type = source_type;
!     }
! 
    tree working = gg_define_variable(source_type);
  
-   tree base = gg_define_variable(UCHAR_P);
-   gg_assign(base,
-             gg_cast(build_pointer_type(UCHAR_P),
-                     member(refer.field->var_decl_node,"data")));
-   if( !refer_is_clean(refer) )
-     {
-     gg_assign(base, gg_add(base, refer_offset(refer)));
-     }
- 
    // This is the location of the byte holding the sign nybble
    tree sign_location = gg_define_variable(UCHAR_P);
  
    // The sign nybble is in the last byte:
    gg_assign(sign_location,
!             gg_add(base,
                     build_int_cst_type(SIZE_T,
!                                       refer.field->data.capacity()-1)));
    tree d_and_q;
    // Pick up the binary value of the first capacity-1 places
    d_and_q_packed(d_and_q,
!                  base,
!                  refer.field->data.capacity()-1);
    // Multiply that by 10
    tree d_and_q_10 = gg_multiply(gg_cast(source_type, d_and_q),
                                  build_int_cst_type(source_type, 10));
--- 2323,2351 ----
      }
    }
  
! static void
! b_from_c3(tree &value, const cbl_field_t *field, tree location, tree type)
    {
    // This is where we build the actual numeric value of the digits of the
    // COBOL packed-decimal variable.  It is up to the caller to interpret
    // scaledness and rdigits and so forth.
  
!   tree source_type = tree_type_from_field(field);
    tree working = gg_define_variable(source_type);
  
    // This is the location of the byte holding the sign nybble
    tree sign_location = gg_define_variable(UCHAR_P);
  
    // The sign nybble is in the last byte:
    gg_assign(sign_location,
!             gg_add(location,
                     build_int_cst_type(SIZE_T,
!                                       field->data.capacity()-1)));
    tree d_and_q;
    // Pick up the binary value of the first capacity-1 places
    d_and_q_packed(d_and_q,
!                  location,
!                  field->data.capacity()-1);
    // Multiply that by 10
    tree d_and_q_10 = gg_multiply(gg_cast(source_type, d_and_q),
                                  build_int_cst_type(source_type, 10));
*************** binary_from_comp_3(tree &value, const cb
*** 3057,3141 ****
  
    value = gg_define_variable(type);
    gg_assign(value, gg_cast(type, working));
  
!   retval = true;
!   return retval;
    }
  
! static bool
! binary_from_comp_6(tree &value, const cbl_refer_t &refer, tree type)
    {
!   bool retval = false;
  
    // This is where we build the actual numeric value of the digits of the
    // COBOL packed-decimal variable.  It is up to the caller to interpret
    // scaledness and rdigits and so forth.
    value = gg_define_variable(type);
  
!   tree base = gg_define_variable(UCHAR_P);
!   gg_assign(base,
!             gg_cast(build_pointer_type(UCHAR_P),
!                     member(refer.field->var_decl_node,"data")));
!   if( !refer_is_clean(refer) )
!     {
!     gg_assign(base, gg_add(base, refer_offset(refer)));
!     }
  
    tree d_and_q;
    d_and_q_packed(d_and_q,
                   base,
                   refer.field->data.capacity());
    gg_assign(value, gg_cast(type, d_and_q));
  
!   retval = true;
!   return retval;
    }
  
! bool
  binary_from_FldPacked(tree &value, const cbl_refer_t &refer, tree type)
    {
-   bool retval;
    if( refer.field->attr & packed_no_sign_e )
      {
!     retval = binary_from_comp_6(value, refer, type);
      }
    else
      {
!     retval = binary_from_comp_3(value, refer, type);
      }
-   return retval;
    }
  
! static
! bool binary_from_FldFloat(tree &value, const cbl_refer_t &refer, tree type)
    {
!   tree source_type = tree_type_from_field(refer.field);
  
!   if( !type )
      {
!     type = source_type;
      }
  
!   value = gg_define_variable(type);
  
!   tree base;
!   get_location(base, refer);
  
!   gg_assign(value,
!             gg_cast(type,
!                     gg_indirect(gg_cast(build_pointer_type(source_type),
!                                                                    base))));
  
!   return true;
    }
  
! bool
  get_binary_value(tree &value, const cbl_refer_t &refer, tree type)
    {
-   bool retval = false;
    /* There are other get binary value routines.  This one is intended to be the
       "best in class" version, incorporating everything that's been learned
!      about the process, and incorporating compiler SSA guidelines. */
  
    if( (refer.field->attr & FIGCONST_MASK) == zero_value_e )
      {
--- 2368,2533 ----
  
    value = gg_define_variable(type);
    gg_assign(value, gg_cast(type, working));
+   }
  
! static void
! binary_from_comp_3(tree &value, const cbl_field_t *field, tree type)
!   {
!   tree location;
!   get_location(location, field);
!   b_from_c3(value, field, location, type);
    }
  
! static void
! binary_from_comp_3(tree &value, const cbl_refer_t &refer, tree type)
    {
!   tree location;
!   get_location(location, refer);
!   b_from_c3(value, refer.field, location, type);
!   }
  
+ static void
+ binary_from_comp_6(tree &value, const cbl_field_t *field, tree type)
+   {
    // This is where we build the actual numeric value of the digits of the
    // COBOL packed-decimal variable.  It is up to the caller to interpret
    // scaledness and rdigits and so forth.
    value = gg_define_variable(type);
  
!   tree base;
!   get_location(base, field);
!   tree d_and_q;
!   d_and_q_packed(d_and_q,
!                  base,
!                  field->data.capacity());
!   gg_assign(value, gg_cast(type, d_and_q));
!   }
  
+ static void
+ binary_from_comp_6(tree &value, const cbl_refer_t &refer, tree type)
+   {
+   // This is where we build the actual numeric value of the digits of the
+   // COBOL packed-decimal variable.  It is up to the caller to interpret
+   // scaledness and rdigits and so forth.
+   value = gg_define_variable(type);
+ 
+   tree base;
+   get_location(base, refer);
    tree d_and_q;
    d_and_q_packed(d_and_q,
                   base,
                   refer.field->data.capacity());
    gg_assign(value, gg_cast(type, d_and_q));
+   }
  
! static void
! binary_from_FldPacked(tree &value, const cbl_field_t *field, tree type)
!   {
!   if( field->attr & packed_no_sign_e )
!     {
!     binary_from_comp_6(value, field, type);
!     }
!   else
!     {
!     binary_from_comp_3(value, field, type);
!     }
    }
  
! static void
  binary_from_FldPacked(tree &value, const cbl_refer_t &refer, tree type)
    {
    if( refer.field->attr & packed_no_sign_e )
      {
!     binary_from_comp_6(value, refer, type);
      }
    else
      {
!     binary_from_comp_3(value, refer, type);
      }
    }
  
! static void
! binary_from_FldFloat(tree &value, const cbl_field_t *field, tree type)
    {
!   value = gg_define_variable(type);
!   safe_cast(value, field);
!   }
  
! static void
! binary_from_FldFloat(tree &value, const cbl_refer_t &refer, tree type)
!   {
!   value = gg_define_variable(type);
!   safe_cast(value, refer);
!   }
! 
! void
! get_binary_value(tree &value, const cbl_field_t *field, tree type)
!   {
!   /* There are other get binary value routines.  This one is intended to be the
!      "best in class" version, incorporating everything that's been learned
!      about the process, and incorporating compiler SSA guidelines. */
! 
!   if( (field->attr & FIGCONST_MASK) == zero_value_e )
      {
!     // The ZERO figurative constant is not flagged as signed:
!     if( !type )
!       {
!       type = UINT;
!       }
!     value = gg_define_variable(type);
!     gg_assign(value, gg_cast(type, integer_zero_node));
      }
+   else
+     {
+     if( !type )
+       {
+       type = TREE_TYPE(value);
+       }
+     switch(field->type)
+       {
+       case FldLiteralN:
+         binary_from_FldLiteralN(value, field, type);
+         break;
  
!       case FldNumericBin5:
!       case FldIndex:
!       case FldPointer:
!         binary_from_FldNumericBin5(value, field, type);
!         break;
  
!       case FldNumericBinary:
!         binary_from_FldNumericBinary(value, field, type);
!         break;
  
!       case FldNumericDisplay:
!         binary_from_FldNumericDisplay(value, field, type);
!         break;
  
!       case FldPacked:
!         binary_from_FldPacked(value, field, type);
!         break;
! 
!       case FldFloat:
!         binary_from_FldFloat(value, field, type);
!         break;
! 
!       default:
!         gcc_unreachable();
!         break;
!       }
!     }
    }
  
! void
  get_binary_value(tree &value, const cbl_refer_t &refer, tree type)
    {
    /* There are other get binary value routines.  This one is intended to be the
       "best in class" version, incorporating everything that's been learned
!      about the process, and incorporating compiler SSA guidelines. 
!      
!      On entry, value should be unassigned.  It will be given the type 'type',
!      if present, and otherwise will be the same as the type derived from the
!      source.   */
  
    if( (refer.field->attr & FIGCONST_MASK) == zero_value_e )
      {
*************** get_binary_value(tree &value, const cbl_
*** 3146,3155 ****
        }
      value = gg_define_variable(type);
      gg_assign(value, gg_cast(type, integer_zero_node));
-     retval = true;
      }
    else if( refer.addr_of )
      {
      // The case of ADDRESS OF
      value = gg_define_variable(type);
      tree base = gg_define_variable(UCHAR_P);
--- 2538,2550 ----
        }
      value = gg_define_variable(type);
      gg_assign(value, gg_cast(type, integer_zero_node));
      }
    else if( refer.addr_of )
      {
+     if( !type )
+       {
+       type = tree_type_from_field(refer.field);
+       }
      // The case of ADDRESS OF
      value = gg_define_variable(type);
      tree base = gg_define_variable(UCHAR_P);
*************** get_binary_value(tree &value, const cbl_
*** 3162,3194 ****
      }
    else
      {
!     // We know that the refer is a type that involves an integer binary value.
      switch(refer.field->type)
        {
        case FldLiteralN:
!         retval = binary_from_FldLiteralN(value, refer, type);
          break;
  
        case FldNumericBin5:
        case FldIndex:
        case FldPointer:
!         retval = binary_from_FldNumericBin5(value, refer, type);
          break;
  
        case FldNumericBinary:
!         retval = binary_from_FldNumericBinary(value, refer, type);
          break;
  
        case FldNumericDisplay:
!         retval = binary_from_FldNumericDisplay(value, refer, type);
          break;
  
        case FldPacked:
!         retval = binary_from_FldPacked(value, refer, type);
          break;
  
        case FldFloat:
!         retval = binary_from_FldFloat(value, refer, type);
          break;
  
        default:
--- 2557,2592 ----
      }
    else
      {
!     if( !type )
!       {
!       type = tree_type_from_field(refer.field);
!       }
      switch(refer.field->type)
        {
        case FldLiteralN:
!         binary_from_FldLiteralN(value, refer, type);
          break;
  
        case FldNumericBin5:
        case FldIndex:
        case FldPointer:
!         binary_from_FldNumericBin5(value, refer, type);
          break;
  
        case FldNumericBinary:
!         binary_from_FldNumericBinary(value, refer, type);
          break;
  
        case FldNumericDisplay:
!         binary_from_FldNumericDisplay(value, refer, type);
          break;
  
        case FldPacked:
!         binary_from_FldPacked(value, refer, type);
          break;
  
        case FldFloat:
!         binary_from_FldFloat(value, refer, type);
          break;
  
        default:
*************** get_binary_value(tree &value, const cbl_
*** 3196,3234 ****
          break;
        }
      }
-   return retval;
    }
  
  void
! get_location(tree &retval, const cbl_refer_t &refer)
    {
-   // This routine looks at a refer and returns a UCHAR_P pointer to the data
-   // of the object.
    retval = gg_define_variable(UCHAR_P);
! 
!   if( refer_is_super_clean(refer) )
      {
!     // Working storage, not external, no refmods or subscripts.  That means
!     // we can work with the actual data item, and save a level of indirection.
! 
!     if( refer.field->offset )
        {
        gg_assign(retval,
                  gg_add(gg_cast(UCHAR_P,
!                                gg_get_address(refer.field->data_decl_node)),
!                 build_int_cst_type(SIZE_T, refer.field->offset)));
        }
      else
        {
        gg_assign(retval, gg_cast(UCHAR_P,
!                             gg_get_address(refer.field->data_decl_node)));
        }
      }
    else
      {
      // The variable is external, or intermediate_e, or there are subscripts, or
      // there are refmods. We use the run-time "data", and add the run-time
      // offset to it.
      gg_assign(retval,
                gg_add(member(refer.field->var_decl_node,"data"),
                       refer_offset(refer)));
--- 2594,2646 ----
          break;
        }
      }
    }
  
  void
! get_location(tree &retval, const cbl_field_t *field)
    {
    retval = gg_define_variable(UCHAR_P);
!   if( field_is_super_clean(field) )
      {
!     if( field->offset )
        {
        gg_assign(retval,
                  gg_add(gg_cast(UCHAR_P,
!                                gg_get_address(field->data_decl_node)),
!                 build_int_cst_type(SIZE_T, field->offset)));
        }
      else
        {
        gg_assign(retval, gg_cast(UCHAR_P,
!                             gg_get_address(field->data_decl_node)));
        }
      }
    else
      {
+     gg_assign(retval,
+               gg_add(member(field->var_decl_node,"data"),
+                      build_int_cst_type(SIZE_T, field->offset)));
+     }
+   }
+ 
+ void
+ get_location(tree &retval, const cbl_refer_t &refer)
+   {
+   /* This routine looks at a refer and returns a UCHAR_P pointer to the data
+      of the object. */
+ 
+   if( refer_is_super_clean(refer) )
+     {
+     // Working storage, not external, no refmods or subscripts.  That means
+     // we can work with the actual data item, and save a level of indirection.
+     get_location(retval, refer.field);
+     }
+   else
+     {
      // The variable is external, or intermediate_e, or there are subscripts, or
      // there are refmods. We use the run-time "data", and add the run-time
      // offset to it.
+     retval = gg_define_variable(UCHAR_P);
      gg_assign(retval,
                gg_add(member(refer.field->var_decl_node,"data"),
                       refer_offset(refer)));
*************** get_location(tree &retval, const cbl_ref
*** 3236,3241 ****
--- 2648,2696 ----
    }
  
  void
+ safe_cast(tree &target,         // A defined variable.
+           tree source_location, // A pointer, usually UCHAR_P.
+           tree source_type)     // The variable type pointed to by
+                                 // source_location.
+   {
+   /* The construction here does the safe equivalent of
+ 
+       int target = *(int *)location.
+ 
+    It does this by copying through memcpy rather than dereferencing
+    source_location as a source_type pointer.  This avoids creating a typed
+    lvalue access to storage whose effective/dynamic type may not be
+    source_type, and so avoids strict-aliasing violations. */
+ 
+   tree source = gg_define_variable(source_type);
+   gg_memcpy(gg_get_address_of(source),
+             source_location,
+             build_int_cst_type(SIZE_T, gg_sizeof(source_type)));
+   gg_assign(target,
+             gg_cast(TREE_TYPE(target), source));
+   }
+ 
+ void
+ safe_cast(tree &target,         // A defined variable.
+           const cbl_field_t *field)
+   {
+   tree source_type = tree_type_from_field(field);
+   tree source_location;
+   get_location(source_location, field);
+   safe_cast(target, source_location, source_type);
+   }
+ 
+ void
+ safe_cast(tree &target,         // A defined variable.
+           const cbl_refer_t &refer)
+   {
+   tree source_type = tree_type_from_field(refer.field);
+   tree source_location;
+   get_location(source_location, refer);
+   safe_cast(target, source_location, source_type);
+   }
+ 
+ void
  get_length(tree &retval, const cbl_refer_t &refer)
    {
    if(refer_is_clean(refer))
*************** data_decl_type_for(cbl_field_t *field)
*** 3405,3419 ****
    }
  
  void
! attribute_bit_clear(struct cbl_field_t *var, cbl_field_attr_t bits)
    {
    gg_assign(  member(var, "attr"),
                gg_bitwise_and( member(var, "attr"),
!                               gg_bitwise_not( build_int_cst_type(SIZE_T, bits) )));
    }
  
  tree
! attribute_bit_get(struct cbl_field_t *var, cbl_field_attr_t bits)
    {
    tree retval = gg_bitwise_and( member(var, "attr"),
                                  build_int_cst_type(SIZE_T, bits) );
--- 2860,2875 ----
    }
  
  void
! attribute_bit_clear(const struct cbl_field_t *var, cbl_field_attr_t bits)
    {
    gg_assign(  member(var, "attr"),
                gg_bitwise_and( member(var, "attr"),
!                               gg_bitwise_not( build_int_cst_type(SIZE_T,
!                                                                  bits))));
    }
  
  tree
! attribute_bit_get(const struct cbl_field_t *var, cbl_field_attr_t bits)
    {
    tree retval = gg_bitwise_and( member(var, "attr"),
                                  build_int_cst_type(SIZE_T, bits) );
*************** attribute_bit_get(struct cbl_field_t *va
*** 3421,3427 ****
    }
  
  void
! attribute_bit_set(struct cbl_field_t *var, cbl_field_attr_t bits)
    {
    gg_assign(  member(var, "attr"),
                gg_bitwise_or(member(var, "attr"),
--- 2877,2883 ----
    }
  
  void
! attribute_bit_set(const struct cbl_field_t *var, cbl_field_attr_t bits)
    {
    gg_assign(  member(var, "attr"),
                gg_bitwise_or(member(var, "attr"),
*************** round_this_value( tree &value,
*** 3728,3734 ****
        ELSE {} ENDIF
        break;
        }
!    
      case toward_lesser_e:
        {
        /* "If the TOWARD-LESS phrase is specified, and the arithmetic value
--- 3184,3190 ----
        ELSE {} ENDIF
        break;
        }
! 
      case toward_lesser_e:
        {
        /* "If the TOWARD-LESS phrase is specified, and the arithmetic value
diff -Nrcpad gcc-17-20260628/gcc/cobol/genutil.h gcc-17-20260705/gcc/cobol/genutil.h
*** gcc-17-20260628/gcc/cobol/genutil.h	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/cobol/genutil.h	Sun Jul  5 22:32:07 2026
*************** extern tree var_decl_entry_index; // voi
*** 63,85 ****
  extern tree var_decl_dialects;    // void* __gg__dialects
  extern tree var_decl_dp2bin;      // unsigned char * ___gg__dp2bin
  
! int       get_scaled_rdigits(cbl_field_t *field);
! int       get_scaled_digits(cbl_field_t *field);
  
- void      get_binary_value( tree value,
-                             tree rdigits,
-                             cbl_field_t *field,
-                             tree         field_offset,
-                             tree         hilo = NULL);
- tree      get_binary_value_tree(tree return_type,
-                                 tree rdigits,
-                                 cbl_field_t *field,
-                                 tree         field_offset,
-                                 tree         hilo = NULL);
- tree      get_binary_value_tree(tree return_type,
-                                 tree rdigits,
-                                 const cbl_refer_t &refer,
-                                 tree         hilo = NULL);
  tree      get_data_address( cbl_field_t *field,
                              tree         offset);
  
--- 63,71 ----
  extern tree var_decl_dialects;    // void* __gg__dialects
  extern tree var_decl_dp2bin;      // unsigned char * ___gg__dp2bin
  
! int       get_scaled_rdigits(const cbl_field_t *field);
! int       get_scaled_digits(const cbl_field_t *field);
  
  tree      get_data_address( cbl_field_t *field,
                              tree         offset);
  
*************** void      set_exception_code_func(ec_typ
*** 100,110 ****
                                    int from_raise_statement=0);
  #define set_exception_code(ec) set_exception_code_func(ec, __LINE__)
  bool      process_this_exception(const ec_type_t ec);
- #define   CHECK_FOR_FRACTIONAL_DIGITS true
- void      get_integer_value(tree value,  // This is always a LONG
-                             cbl_field_t *field,
-                             tree         offset=NULL,  // size_t
-                             bool check_for_fractional_digits=false);
  void      rt_error(const char *msg);
  tree      build_array_of_size_t( size_t  N,
                                   const size_t *values);
--- 86,91 ----
*************** void      parser_display_internal_field(
*** 114,121 ****
  char     *get_literal_string(cbl_field_t *field);
  
  bool      refer_is_clean(const cbl_refer_t &refer);
  bool      refer_is_super_clean(const cbl_refer_t &refer);
! bool      refer_is_working_storage(const cbl_refer_t &refer);
  
  tree      refer_offset(const cbl_refer_t &refer, int *pflags=NULL);
  tree      refer_size_source(const cbl_refer_t &refer);
--- 95,104 ----
  char     *get_literal_string(cbl_field_t *field);
  
  bool      refer_is_clean(const cbl_refer_t &refer);
+ bool      field_is_super_clean(const cbl_field_t *field);
  bool      refer_is_super_clean(const cbl_refer_t &refer);
! bool      is_working_storage(const cbl_refer_t &refer);
! bool      is_working_storage(const cbl_field_t *field);
  
  tree      refer_offset(const cbl_refer_t &refer, int *pflags=NULL);
  tree      refer_size_source(const cbl_refer_t &refer);
*************** bool      is_pure_integer(const cbl_fiel
*** 136,153 ****
  tree      tree_type_from_field(const cbl_field_t *field);
  tree      tree_type_from_refer(const cbl_refer_t &refer);
  
! bool      get_binary_value(tree &value, 
                       const cbl_refer_t &refer,
                             tree type = NULL_TREE);
  void      get_location(tree &retval, const cbl_refer_t &refer);
  void      get_length(tree &retval, const cbl_refer_t &refer);
  
  void treeplet_fill_source(TREEPLET &treeplet, const cbl_refer_t &refer);
  
  tree data_decl_type_for(cbl_field_t *field);
  
! void attribute_bit_clear(struct cbl_field_t *var, cbl_field_attr_t bits);
! tree attribute_bit_get(struct cbl_field_t *var, cbl_field_attr_t bits);
! void attribute_bit_set(struct cbl_field_t *var, cbl_field_attr_t bits);
  
  #endif
--- 119,152 ----
  tree      tree_type_from_field(const cbl_field_t *field);
  tree      tree_type_from_refer(const cbl_refer_t &refer);
  
! void      get_binary_value(tree &value,
!                      const cbl_field_t *field,
!                            tree type = NULL_TREE);
! 
! void      get_binary_value(tree &value,
                       const cbl_refer_t &refer,
                             tree type = NULL_TREE);
+ 
+ void      get_location(tree &retval, const cbl_field_t *field);
  void      get_location(tree &retval, const cbl_refer_t &refer);
+ 
+ void      safe_cast(tree &target,         // A defined variable.
+                     tree source_location, // A pointer, usually UCHAR_P.
+                     tree source_type);    // The variable type pointed to by
+                                           // source_location.
+ void      safe_cast(tree &target,         // A defined variable.
+                     const cbl_field_t *field);
+ void      safe_cast(tree &target,         // A defined variable.
+                     const cbl_refer_t &refer);
+ 
  void      get_length(tree &retval, const cbl_refer_t &refer);
  
  void treeplet_fill_source(TREEPLET &treeplet, const cbl_refer_t &refer);
  
  tree data_decl_type_for(cbl_field_t *field);
  
! void attribute_bit_clear(const struct cbl_field_t *var, cbl_field_attr_t bits);
! tree attribute_bit_get(const struct cbl_field_t *var, cbl_field_attr_t bits);
! void attribute_bit_set(const struct cbl_field_t *var, cbl_field_attr_t bits);
  
  #endif
diff -Nrcpad gcc-17-20260628/gcc/cobol/move.cc gcc-17-20260705/gcc/cobol/move.cc
*** gcc-17-20260628/gcc/cobol/move.cc	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/cobol/move.cc	Sun Jul  5 22:32:07 2026
*************** mh_binary_to_packed(const cbl_refer_t &d
*** 1790,1796 ****
    }
  
  static void
! copy_little_endian_into_place(cbl_field_t *dest,
                                tree         dest_offset,
                                tree value,
                                int rhs_rdigits,
--- 1790,1796 ----
    }
  
  static void
! copy_native_into_place(cbl_field_t *dest,
                                tree         dest_offset,
                                tree value,
                                int rhs_rdigits,
*************** copy_little_endian_into_place(cbl_field_
*** 1842,1848 ****
  
    if( dest->type == FldNumericBinary )
      {
!     gg_assign(target, gg_bswap(target));
      }
    // Copy the target to the destination.
    gg_memcpy(dest_pointer,
--- 1842,1861 ----
  
    if( dest->type == FldNumericBinary )
      {
!     // We need the target to be big-endian.
!     if( BYTES_BIG_ENDIAN )
!       {
!       // 'target' is already big-endian, so we can leave it be.
!       }
!     else
!       {
!       // 'target' is little-endian, so make it big-endian
!       gg_assign(target, gg_bswap(target));
!       }
!     }
!   else
!     {
!     // We need the target to be native binary, so just leave it be
      }
    // Copy the target to the destination.
    gg_memcpy(dest_pointer,
*************** copy_little_endian_into_place(cbl_field_
*** 1851,1864 ****
    }
  
  static bool
! mh_little_endian( const cbl_refer_t &destref,
                    const cbl_refer_t &sourceref,
                    const TREEPLET    &tsource,
                          bool check_for_error,
                          tree size_error)
    {
!   // The name of this routine is misleading.  It also handles big-endian
!   // destinations.
  
    bool moved = false;
  
--- 1864,1877 ----
    }
  
  static bool
! mh_to_binary( const cbl_refer_t &destref,
                    const cbl_refer_t &sourceref,
                    const TREEPLET    &tsource,
                          bool check_for_error,
                          tree size_error)
    {
!   // This routine moves a numeric value to a binary destination.  The dest
!   // can be little-endian or big-endian.
  
    bool moved = false;
  
*************** mh_little_endian( const cbl_refer_t &des
*** 1880,1886 ****
      SHOW_PARSE1
        {
        SHOW_PARSE_INDENT
!       SHOW_PARSE_TEXT("mh_little_endian")
        SHOW_PARSE_END
        }
  
--- 1893,1899 ----
      SHOW_PARSE1
        {
        SHOW_PARSE_INDENT
!       SHOW_PARSE_TEXT("mh_to_binary")
        SHOW_PARSE_END
        }
  
*************** mh_little_endian( const cbl_refer_t &des
*** 1907,1913 ****
  
        // Get binary value from float actually scales the source value to the
        // dest:: rdigits
!       copy_little_endian_into_place(destref.field,
                                      refer_offset(destref),
                                      source,
                                      destref.field->data.rdigits,
--- 1920,1926 ----
  
        // Get binary value from float actually scales the source value to the
        // dest:: rdigits
!       copy_native_into_place(destref.field,
                                      refer_offset(destref),
                                      source,
                                      destref.field->data.rdigits,
*************** mh_little_endian( const cbl_refer_t &des
*** 1918,1929 ****
      else
        {
        tree source_type = tree_type_from_refer(sourceref);
!       tree source = gg_define_variable(source_type);
!       get_binary_value( source,
!                         NULL,
!                         sourceref.field,
!                         tsource.offset);
!       copy_little_endian_into_place(destref.field,
                                      refer_offset(destref),
                                      source,
                                      sourceref.field->data.rdigits,
--- 1931,1939 ----
      else
        {
        tree source_type = tree_type_from_refer(sourceref);
!       tree source;
!       get_binary_value(source, sourceref, source_type);
!       copy_native_into_place(destref.field,
                                      refer_offset(destref),
                                      source,
                                      sourceref.field->data.rdigits,
*************** move_helper(tree size_error,        // T
*** 3450,3456 ****
  
    if( !moved )
      {
!     moved = mh_little_endian( destref,
                                sourceref,
                                tsource,
                                restore_on_error,
--- 3460,3466 ----
  
    if( !moved )
      {
!     moved = mh_to_binary( destref,
                                sourceref,
                                tsource,
                                restore_on_error,
diff -Nrcpad gcc-17-20260628/gcc/cobol/parse.y gcc-17-20260705/gcc/cobol/parse.y
*** gcc-17-20260628/gcc/cobol/parse.y	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/cobol/parse.y	Sun Jul  5 22:32:07 2026
*************** section_name:	NAME section_kw '.'
*** 8035,8061 ****
                  ;
  
  section_kw:     SECTION
!                 {
!                   if( $1 && dialect_ok(@1, IbmSectionSegmentW, "SECTION segment") ) {
! 		    cbl_message(@1, IbmSectionSegmentW,
!                                 "SECTION segment %qs was ignored", $1);
! 		    if( *$1 == '-' ) {
!                       cbl_message(@1, IbmSectionNegE,
!                                   "SECTION segment %qs is negative", $1);
!                     } else {
!                       int sectno;
!                       sscanf($1, "%d", &sectno);
!                       if( ! (0 <= sectno && sectno <= 99) ) {
!                         cbl_message(@1, IbmSectionRangeE,
!                                      "SECTION segment %qs must be 0-99", $1);
! 		      } 
!                     }
! 		  }
!                 }
!         |       SECTION error
!                 {
!                   error_msg(@1, "unknown section qualifier");
!                 }
                  ;
  
  stop:           STOP RUN exit_with
--- 8035,8065 ----
                  ;
  
  section_kw:     SECTION
! /* Dubner commented out this code on 2026-06-28 as part of getting the
!    compiler working on the IBM S390. It was failing in an off-by-one way;
!    the $1 parameter, on the S390, wasn't the section number, but rather the
!    section name.  */
! //                {
! //                  if( $1 && dialect_ok(@1, IbmSectionSegmentW, "SECTION segment") ) {
! //		    cbl_message(@1, IbmSectionSegmentW,
! //                                "SECTION segment %qs was ignored", $1);
! //		    if( *$1 == '-' ) {
! //                      cbl_message(@1, IbmSectionNegE,
! //                                  "SECTION segment %qs is negative", $1);
! //                    } else {
! //                      int sectno;
! //                      sscanf($1, "%d", &sectno);
! //                      if( ! (0 <= sectno && sectno <= 99) ) {
! //                        cbl_message(@1, IbmSectionRangeE,
! //                                     "SECTION segment %qs must be 0-99", $1);
! //		      } 
! //                    }
! //		  }
! //                }
! //        |       SECTION error
! //                {
! //                  error_msg(@1, "unknown section qualifier");
! //                }
                  ;
  
  stop:           STOP RUN exit_with
diff -Nrcpad gcc-17-20260628/gcc/cobol/parse_ante.h gcc-17-20260705/gcc/cobol/parse_ante.h
*** gcc-17-20260628/gcc/cobol/parse_ante.h	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/cobol/parse_ante.h	Sun Jul  5 22:32:07 2026
*************** cbl_field_t::blank_initial( size_t nchar
*** 3208,3217 ****
    
    switch(codeset.stride()) {
    case 1: 
!     blankit( reinterpret_cast<uint8_t*>(init), nchar, uint8_t(space_char) );
      break;
    case 2:
!     blankit( reinterpret_cast<uint16_t*>(init), nchar, uint16_t(space_char) );
      break;
    case 4:
      blankit( reinterpret_cast<uint32_t*>(init), nchar, uint32_t(space_char) );
--- 3208,3217 ----
    
    switch(codeset.stride()) {
    case 1: 
!     blankit( reinterpret_cast<uint8_t*>(init), nchar, uint8_t(space_char%0x100) );
      break;
    case 2:
!     blankit( reinterpret_cast<uint16_t*>(init), nchar, uint16_t(space_char%0x10000) );
      break;
    case 4:
      blankit( reinterpret_cast<uint32_t*>(init), nchar, uint32_t(space_char) );
diff -Nrcpad gcc-17-20260628/gcc/cobol/show_parse.h gcc-17-20260705/gcc/cobol/show_parse.h
*** gcc-17-20260628/gcc/cobol/show_parse.h	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/cobol/show_parse.h	Sun Jul  5 22:32:07 2026
*************** extern bool cursor_at_sol;
*** 317,323 ****
        gg_fprintf(trace_handle, 1, " (%s", gg_string_literal(cbl_field_type_str((b)->type))); \
        if( b->type != FldLiteralN && b->type != FldConditional ) \
          { \
!         cbl_field_t* B(b); \
          if( !b->var_decl_node ) \
            { \
            gg_fprintf(trace_handle, 0, #b "->var_decl_node is NULL", NULL_TREE); \
--- 317,323 ----
        gg_fprintf(trace_handle, 1, " (%s", gg_string_literal(cbl_field_type_str((b)->type))); \
        if( b->type != FldLiteralN && b->type != FldConditional ) \
          { \
!         const cbl_field_t* B(b); \
          if( !b->var_decl_node ) \
            { \
            gg_fprintf(trace_handle, 0, #b "->var_decl_node is NULL", NULL_TREE); \
diff -Nrcpad gcc-17-20260628/gcc/cobol/structs.cc gcc-17-20260705/gcc/cobol/structs.cc
*** gcc-17-20260628/gcc/cobol/structs.cc	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/cobol/structs.cc	Sun Jul  5 22:32:07 2026
*************** member(tree var, const char *member_name
*** 87,93 ****
      }
  
  tree
! member(cbl_field_t *var, const char *member_name)
      {
      return gg_struct_field_ref(var->var_decl_node, member_name);
      }
--- 87,93 ----
      }
  
  tree
! member(const cbl_field_t *var, const char *member_name)
      {
      return gg_struct_field_ref(var->var_decl_node, member_name);
      }
diff -Nrcpad gcc-17-20260628/gcc/cobol/structs.h gcc-17-20260705/gcc/cobol/structs.h
*** gcc-17-20260628/gcc/cobol/structs.h	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/cobol/structs.h	Sun Jul  5 22:32:07 2026
*************** extern tree var_decl_node_p_of( cbl_fiel
*** 34,41 ****
  
  // Simple fetch
  extern tree member(tree var, const char *member_name);
! extern tree member(cbl_field_t *var, const char *member_name);
! extern tree member(cbl_refer_t refer, const char *member_name);
  
  extern tree member(cbl_file_t *var, const char *member_name);
  extern tree member2(tree var, const char *member_name, const char *submember);
--- 34,40 ----
  
  // Simple fetch
  extern tree member(tree var, const char *member_name);
! extern tree member(const cbl_field_t *var, const char *member_name);
  
  extern tree member(cbl_file_t *var, const char *member_name);
  extern tree member2(tree var, const char *member_name, const char *submember);
diff -Nrcpad gcc-17-20260628/gcc/cobol/util.cc gcc-17-20260705/gcc/cobol/util.cc
*** gcc-17-20260628/gcc/cobol/util.cc	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/cobol/util.cc	Sun Jul  5 22:32:07 2026
***************
*** 65,70 ****
--- 65,73 ----
  #include "../../libgcobol/charmaps.h"
  #include "../../libgcobol/valconv.h"
  
+ #include "tm.h"
+ #include "target.h"
+ 
  #pragma GCC diagnostic ignored "-Wunused-result"
  #pragma GCC diagnostic ignored "-Wmissing-field-initializers"
  
*************** binary_initial( char *retval,
*** 1391,1397 ****
                  int drdigits)
    {
    // This routine returns an xmalloced buffer designed to replace the
!   // data.initial member of the incoming field
  
    int scaled_rdigits = get_scaled_rdigits(field);
  
--- 1394,1402 ----
                  int drdigits)
    {
    // This routine returns an xmalloced buffer designed to replace the
!   // data.initial member of the incoming field.  The 'retval' becomes the
!   // binary representation of 'value' in the target machine's native endian
!   // encoding.
  
    int scaled_rdigits = get_scaled_rdigits(field);
  
*************** cbl_field_t::encode_numeric( const char
*** 1685,1696 ****
          binary_initial(retval, this, value, l_rdigits);
          if( attr & big_endian_e )
            {
!           // This is a big-endian value, so swap retval end-for-end:
!           size_t left = 0;
!           size_t right = data.capacity() - 1;
!           while(left < right)
              {
!             std::swap(retval[left++], retval[right--]);
              }
            }
          break;
--- 1690,1700 ----
          binary_initial(retval, this, value, l_rdigits);
          if( attr & big_endian_e )
            {
!           if(!BYTES_BIG_ENDIAN)
              {
!             // The target is little-endian, so we have to swap our value to make
!             // it big-endian.
!             std::reverse(retval, retval + data.capacity());
              }
            }
          break;
*************** cbl_field_t::encode_numeric( const char
*** 1848,1854 ****
                          : retval + (data.digits-1) * charmap->stride() ;
            cbl_char_t schar = charmap->set_digit_negative(*sign_location,
                                                            negative);
!           memcpy(sign_location, &schar, charmap->stride());
            }
          break;
          }
--- 1852,1878 ----
                          : retval + (data.digits-1) * charmap->stride() ;
            cbl_char_t schar = charmap->set_digit_negative(*sign_location,
                                                            negative);
!           switch(charmap->stride())
!             {
!             case 1:
!               {
!               uint8_t v = schar;
!               memcpy(sign_location, &v, charmap->stride());
!               break;
!               }
!             case 2:
!               {
!               uint16_t v = schar;
!               memcpy(sign_location, &v, charmap->stride());
!               break;
!               }
!             case 4:
!               {
!               uint32_t v = schar;
!               memcpy(sign_location, &v, charmap->stride());
!               break;
!               }
!             }
            }
          break;
          }
diff -Nrcpad gcc-17-20260628/gcc/collect2.cc gcc-17-20260705/gcc/collect2.cc
*** gcc-17-20260628/gcc/collect2.cc	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/collect2.cc	Sun Jul  5 22:32:07 2026
*************** maybe_run_lto_and_relink (char **lto_ld_
*** 718,724 ****
  
        /* Run the linker again, this time replacing the object files
           optimized by the LTO with the temporary file generated by the LTO.  */
!       fork_execute ("ld", out_lto_ld_argv, HAVE_GNU_LD && at_file_supplied,
  		    "ld_args");
        /* We assume that temp files were created, and therefore we need to take
           that into account (maybe run dsymutil).  */
--- 718,724 ----
  
        /* Run the linker again, this time replacing the object files
           optimized by the LTO with the temporary file generated by the LTO.  */
!       fork_execute ("ld", out_lto_ld_argv, HAVE_LD_AT_FILE && at_file_supplied,
  		    "ld_args");
        /* We assume that temp files were created, and therefore we need to take
           that into account (maybe run dsymutil).  */
*************** maybe_run_lto_and_relink (char **lto_ld_
*** 731,737 ****
      {
        /* Our caller is relying on us to do the link
           even though there is no LTO back end work to be done.  */
!       fork_execute ("ld", lto_ld_argv, HAVE_GNU_LD && at_file_supplied,
  		    "ld_args");
        /* No LTO objects were found, so no new temp file.  */
        post_ld_pass (/*temp_file*/false);
--- 731,737 ----
      {
        /* Our caller is relying on us to do the link
           even though there is no LTO back end work to be done.  */
!       fork_execute ("ld", lto_ld_argv, HAVE_LD_AT_FILE && at_file_supplied,
  		    "ld_args");
        /* No LTO objects were found, so no new temp file.  */
        post_ld_pass (/*temp_file*/false);
*************** do_link (char **ld_argv, const char *ats
*** 749,755 ****
    const char *prog = "ld";
    pex = collect_execute (prog, ld_argv, NULL, NULL,
  			 PEX_LAST | PEX_SEARCH,
! 			 HAVE_GNU_LD && at_file_supplied, atsuffix);
    int ret = collect_wait (prog, pex);
    if (ret)
      {
--- 749,755 ----
    const char *prog = "ld";
    pex = collect_execute (prog, ld_argv, NULL, NULL,
  			 PEX_LAST | PEX_SEARCH,
! 			 HAVE_LD_AT_FILE && at_file_supplied, atsuffix);
    int ret = collect_wait (prog, pex);
    if (ret)
      {
*************** main (int argc, char **argv)
*** 1809,1815 ****
      maybe_run_lto_and_relink (ld2_argv, object_lst, object, true);
    else
      {
!       fork_execute ("ld", ld2_argv, HAVE_GNU_LD && at_file_supplied, "ld_args");
        post_ld_pass (/*temp_file*/false);
      }
  
--- 1809,1816 ----
      maybe_run_lto_and_relink (ld2_argv, object_lst, object, true);
    else
      {
!       fork_execute ("ld", ld2_argv, HAVE_LD_AT_FILE && at_file_supplied,
! 		    "ld_args");
        post_ld_pass (/*temp_file*/false);
      }
  
diff -Nrcpad gcc-17-20260628/gcc/common/config/i386/cpuinfo.h gcc-17-20260705/gcc/common/config/i386/cpuinfo.h
*** gcc-17-20260628/gcc/common/config/i386/cpuinfo.h	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/common/config/i386/cpuinfo.h	Sun Jul  5 22:32:07 2026
*************** get_available_features (struct __process
*** 1103,1110 ****
  	{
  	  if (eax & bit_AMX_AVX512)
  	    set_feature (FEATURE_AMX_AVX512);
- 	  if (eax & bit_AMX_TF32)
- 	    set_feature (FEATURE_AMX_TF32);
  	  if (eax & bit_AMX_FP8)
  	    set_feature (FEATURE_AMX_FP8);
  	  if (eax & bit_AMX_MOVRS)
--- 1103,1108 ----
diff -Nrcpad gcc-17-20260628/gcc/common/config/i386/i386-common.cc gcc-17-20260705/gcc/common/config/i386/i386-common.cc
*** gcc-17-20260628/gcc/common/config/i386/i386-common.cc	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/common/config/i386/i386-common.cc	Sun Jul  5 22:32:07 2026
*************** along with GCC; see the file COPYING3.
*** 132,139 ****
    (OPTION_MASK_ISA2_AVX10_1_SET | OPTION_MASK_ISA2_AVX10_2)
  #define OPTION_MASK_ISA2_AMX_AVX512_SET \
    (OPTION_MASK_ISA2_AMX_TILE_SET | OPTION_MASK_ISA2_AMX_AVX512)
- #define OPTION_MASK_ISA2_AMX_TF32_SET \
-   (OPTION_MASK_ISA2_AMX_TILE_SET | OPTION_MASK_ISA2_AMX_TF32)
  #define OPTION_MASK_ISA2_AMX_FP8_SET \
    (OPTION_MASK_ISA2_AMX_TILE_SET | OPTION_MASK_ISA2_AMX_FP8)
  #define OPTION_MASK_ISA2_MOVRS_SET OPTION_MASK_ISA2_MOVRS
--- 132,137 ----
*************** along with GCC; see the file COPYING3.
*** 303,310 ****
    (OPTION_MASK_ISA2_AMX_TILE | OPTION_MASK_ISA2_AMX_INT8_UNSET \
     | OPTION_MASK_ISA2_AMX_BF16_UNSET | OPTION_MASK_ISA2_AMX_FP16_UNSET \
     | OPTION_MASK_ISA2_AMX_COMPLEX_UNSET | OPTION_MASK_ISA2_AMX_AVX512_UNSET \
!    | OPTION_MASK_ISA2_AMX_TF32_UNSET | OPTION_MASK_ISA2_AMX_FP8_UNSET \
!    | OPTION_MASK_ISA2_AMX_MOVRS_UNSET)
  #define OPTION_MASK_ISA2_AMX_INT8_UNSET OPTION_MASK_ISA2_AMX_INT8
  #define OPTION_MASK_ISA2_AMX_BF16_UNSET OPTION_MASK_ISA2_AMX_BF16
  #define OPTION_MASK_ISA2_UINTR_UNSET OPTION_MASK_ISA2_UINTR
--- 301,307 ----
    (OPTION_MASK_ISA2_AMX_TILE | OPTION_MASK_ISA2_AMX_INT8_UNSET \
     | OPTION_MASK_ISA2_AMX_BF16_UNSET | OPTION_MASK_ISA2_AMX_FP16_UNSET \
     | OPTION_MASK_ISA2_AMX_COMPLEX_UNSET | OPTION_MASK_ISA2_AMX_AVX512_UNSET \
!    | OPTION_MASK_ISA2_AMX_FP8_UNSET | OPTION_MASK_ISA2_AMX_MOVRS_UNSET)
  #define OPTION_MASK_ISA2_AMX_INT8_UNSET OPTION_MASK_ISA2_AMX_INT8
  #define OPTION_MASK_ISA2_AMX_BF16_UNSET OPTION_MASK_ISA2_AMX_BF16
  #define OPTION_MASK_ISA2_UINTR_UNSET OPTION_MASK_ISA2_UINTR
*************** along with GCC; see the file COPYING3.
*** 329,335 ****
    (OPTION_MASK_ISA2_AVX10_1 | OPTION_MASK_ISA2_AVX10_2_UNSET)
  #define OPTION_MASK_ISA2_AVX10_2_UNSET OPTION_MASK_ISA2_AVX10_2
  #define OPTION_MASK_ISA2_AMX_AVX512_UNSET OPTION_MASK_ISA2_AMX_AVX512
- #define OPTION_MASK_ISA2_AMX_TF32_UNSET OPTION_MASK_ISA2_AMX_TF32
  #define OPTION_MASK_ISA2_AMX_FP8_UNSET OPTION_MASK_ISA2_AMX_FP8
  #define OPTION_MASK_ISA2_MOVRS_UNSET OPTION_MASK_ISA2_MOVRS
  #define OPTION_MASK_ISA2_AMX_MOVRS_UNSET OPTION_MASK_ISA2_AMX_MOVRS
--- 326,331 ----
*************** ix86_handle_option (struct gcc_options *
*** 1433,1451 ****
  	}
        return true;
  
-     case OPT_mamx_tf32:
-       if (value)
- 	{
- 	  opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AMX_TF32_SET;
- 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AMX_TF32_SET;
- 	}
-       else
- 	{
- 	  opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AMX_TF32_UNSET;
- 	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AMX_TF32_UNSET;
- 	}
-       return true;
- 
      case OPT_mamx_fp8:
        if (value)
  	{
--- 1429,1434 ----
diff -Nrcpad gcc-17-20260628/gcc/common/config/i386/i386-cpuinfo.h gcc-17-20260705/gcc/common/config/i386/i386-cpuinfo.h
*** gcc-17-20260628/gcc/common/config/i386/i386-cpuinfo.h	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/common/config/i386/i386-cpuinfo.h	Sun Jul  5 22:32:07 2026
*************** enum processor_features
*** 279,285 ****
    FEATURE_AVX10_1 = 114,
    FEATURE_AVX10_2 = 116,
    FEATURE_AMX_AVX512,
-   FEATURE_AMX_TF32,
    FEATURE_AMX_FP8 = 120,
    FEATURE_MOVRS,
    FEATURE_AMX_MOVRS,
--- 279,284 ----
diff -Nrcpad gcc-17-20260628/gcc/common/config/i386/i386-isas.h gcc-17-20260705/gcc/common/config/i386/i386-isas.h
*** gcc-17-20260628/gcc/common/config/i386/i386-isas.h	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/common/config/i386/i386-isas.h	Sun Jul  5 22:32:07 2026
*************** ISA_NAMES_TABLE_START
*** 187,193 ****
    ISA_NAMES_TABLE_ENTRY("avx10.2", FEATURE_AVX10_2, P_AVX10_2, "-mavx10.2")
    ISA_NAMES_TABLE_ENTRY("amx-avx512", FEATURE_AMX_AVX512, P_NONE,
  			"-mamx-avx512")
-   ISA_NAMES_TABLE_ENTRY("amx-tf32", FEATURE_AMX_TF32, P_NONE, "-mamx-tf32")
    ISA_NAMES_TABLE_ENTRY("amx-fp8", FEATURE_AMX_FP8, P_NONE, "-mamx-fp8")
    ISA_NAMES_TABLE_ENTRY("movrs", FEATURE_MOVRS, P_NONE, "-mmovrs")
    ISA_NAMES_TABLE_ENTRY("amx-movrs", FEATURE_AMX_MOVRS, P_NONE, "-mamx-movrs")
--- 187,192 ----
diff -Nrcpad gcc-17-20260628/gcc/common/config/riscv/riscv-common.cc gcc-17-20260705/gcc/common/config/riscv/riscv-common.cc
*** gcc-17-20260628/gcc/common/config/riscv/riscv-common.cc	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/common/config/riscv/riscv-common.cc	Sun Jul  5 22:32:07 2026
*************** struct riscv_multi_lib_info_t {
*** 332,338 ****
    riscv_subset_list *subset_list;
  
    static bool parse (struct riscv_multi_lib_info_t *,
- 		     const std::string &,
  		     const std::vector<std::string> &);
  };
  
--- 332,337 ----
*************** prefixed_with (const std::string &str, c
*** 1910,1922 ****
  bool
  riscv_multi_lib_info_t::parse (
    struct riscv_multi_lib_info_t *multi_lib_info,
-   const std::string &path,
    const std::vector<std::string> &conds)
  {
    const char *default_arch_str = STRINGIZING (TARGET_RISCV_DEFAULT_ARCH);
    const char *default_abi_str = STRINGIZING (TARGET_RISCV_DEFAULT_ABI);
    multi_lib_info->conds = conds;
!   if (path == ".")
      {
        multi_lib_info->arch_str = default_arch_str;
        multi_lib_info->abi_str = default_abi_str;
--- 1909,1920 ----
  bool
  riscv_multi_lib_info_t::parse (
    struct riscv_multi_lib_info_t *multi_lib_info,
    const std::vector<std::string> &conds)
  {
    const char *default_arch_str = STRINGIZING (TARGET_RISCV_DEFAULT_ARCH);
    const char *default_abi_str = STRINGIZING (TARGET_RISCV_DEFAULT_ABI);
    multi_lib_info->conds = conds;
!   if (multi_lib_info->path == ".")
      {
        multi_lib_info->arch_str = default_arch_str;
        multi_lib_info->abi_str = default_abi_str;
*************** riscv_select_multilib (
*** 2070,2081 ****
      }
  
    if (best_match_multi_lib == -1)
!     {
!       riscv_no_matched_multi_lib = true;
!       return NULL;
!     }
!   else
!     return xstrdup (multilib_infos[best_match_multi_lib].path.c_str ());
  }
  
  #ifndef RISCV_USE_CUSTOMISED_MULTI_LIB
--- 2068,2076 ----
      }
  
    if (best_match_multi_lib == -1)
!     return NULL;
! 
!   return xstrdup (multilib_infos[best_match_multi_lib].path.c_str ());
  }
  
  #ifndef RISCV_USE_CUSTOMISED_MULTI_LIB
*************** riscv_compute_multilib (
*** 2111,2119 ****
    std::string option_cond;
    riscv_multi_lib_info_t multilib_info;
  
!   /* Already found suitable, multi-lib, just use that.  */
!   if (multilib_dir != NULL)
!     return multilib_dir;
  
    /* Find march.  */
    riscv_current_arch_str =
--- 2106,2122 ----
    std::string option_cond;
    riscv_multi_lib_info_t multilib_info;
  
!   /* The generic textual matcher in gcc.cc:set_multilib_dir does not
!      understand RISC-V arch supersetting and treats MULTILIB_DEFAULTS
!      entries as if they were on the command line via default_arg ().
!      That can pick the wrong multilib when the user's -march is a
!      superset of one of MULTILIB_OPTIONS' arches but does not textually
!      match.  Run our own match-score-based selection regardless.  The
!      default "." multilib is included in multilib_infos with the
!      compiler's default arch/abi, so the smart matcher handles every
!      case the generic matcher can reach; if it still returns NULL the
!      request is genuinely incompatible and riscv_multi_lib_check will
!      emit the proper diagnostic.  */
  
    /* Find march.  */
    riscv_current_arch_str =
*************** riscv_compute_multilib (
*** 2194,2200 ****
        result =
  	riscv_multi_lib_info_t::parse (
  	  &multilib_info,
- 	  std::string (this_path, this_path_len),
  	  option_conds);
  
        if (result)
--- 2197,2202 ----
*************** riscv_compute_multilib (
*** 2203,2221 ****
        p++;
      }
  
    switch (select_kind)
      {
      case select_by_abi:
!       return riscv_select_multilib_by_abi (riscv_current_abi_str,
! 					   multilib_infos);
      case select_by_abi_arch_cmodel:
!       return riscv_select_multilib (riscv_current_abi_str, subset_list,
! 				    switches, n_switches, multilib_infos);
      case select_by_builtin:
-       gcc_unreachable ();
      default:
        gcc_unreachable ();
      }
  }
  
  #undef TARGET_COMPUTE_MULTILIB
--- 2205,2232 ----
        p++;
      }
  
+   const char *selected = NULL;
    switch (select_kind)
      {
      case select_by_abi:
!       selected = riscv_select_multilib_by_abi (riscv_current_abi_str,
! 					       multilib_infos);
!       break;
      case select_by_abi_arch_cmodel:
!       selected = riscv_select_multilib (riscv_current_abi_str, subset_list,
! 					switches, n_switches, multilib_infos);
!       break;
      case select_by_builtin:
      default:
        gcc_unreachable ();
      }
+ 
+   /* Either select function may return NULL when nothing is compatible;
+      ensure the flag is set so riscv_multi_lib_check fires its
+      "Cannot find suitable multilib" diagnostic.  */
+   if (selected == NULL)
+     riscv_no_matched_multi_lib = true;
+   return selected;
  }
  
  #undef TARGET_COMPUTE_MULTILIB
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-acle-builtins.cc gcc-17-20260705/gcc/config/aarch64/aarch64-acle-builtins.cc
*** gcc-17-20260628/gcc/config/aarch64/aarch64-acle-builtins.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/config/aarch64/aarch64-acle-builtins.cc	Sun Jul  5 22:32:07 2026
***************
*** 0 ****
--- 1,4654 ----
+ /* ACLE support for AArch64 SVE
+    Copyright (C) 2018-2026 Free Software Foundation, Inc.
+ 
+    This file is part of GCC.
+ 
+    GCC 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.
+ 
+    GCC 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 GCC; see the file COPYING3.  If not see
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #define IN_TARGET_CODE 1
+ 
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "tm.h"
+ #include "tree.h"
+ #include "rtl.h"
+ #include "tm_p.h"
+ #include "memmodel.h"
+ #include "insn-codes.h"
+ #include "optabs.h"
+ #include "recog.h"
+ #include "diagnostic.h"
+ #include "expr.h"
+ #include "basic-block.h"
+ #include "function.h"
+ #include "fold-const.h"
+ #include "gimple.h"
+ #include "gimple-iterator.h"
+ #include "gimplify.h"
+ #include "explow.h"
+ #include "emit-rtl.h"
+ #include "tree-vector-builder.h"
+ #include "stor-layout.h"
+ #include "alias.h"
+ #include "gimple-fold.h"
+ #include "langhooks.h"
+ #include "stringpool.h"
+ #include "attribs.h"
+ #include "value-range.h"
+ #include "tree-ssanames.h"
+ #include "aarch64-acle-builtins.h"
+ #include "aarch64-sve-builtins-base.h"
+ #include "aarch64-sve-builtins-sve2.h"
+ #include "aarch64-sve-builtins-sme.h"
+ #include "aarch64-sve-builtins-shapes.h"
+ #include "aarch64-neon-builtins-shapes.h"
+ #include "aarch64-neon-builtins-base.h"
+ #include "aarch64-builtins.h"
+ 
+ using namespace aarch64;
+ 
+ namespace aarch64_acle {
+ 
+ /* Static information about each single-predicate or single-vector
+    ABI and ACLE type.  */
+ struct vector_type_info
+ {
+   /* The name of the type as declared by arm_sve.h.  */
+   const char *acle_name;
+ 
+   /* The name of the type specified in AAPCS64.  The type is always
+      available under this name, even when arm_sve.h isn't included.  */
+   const char *abi_name;
+ 
+   /* The C++ mangling of ABI_NAME.  */
+   const char *mangled_name;
+ };
+ 
+ /* Describes a function decl.  */
+ class GTY(()) registered_function
+ {
+ public:
+   /* The ACLE function that the decl represents.  */
+   function_instance instance GTY ((skip));
+ 
+   /* The decl itself.  */
+   tree decl;
+ 
+   /* The architecture extensions that the function requires.  */
+   aarch64_required_extensions required_extensions;
+ 
+   /* True if the decl represents an overloaded function that needs to be
+      resolved by function_resolver.  */
+   bool overloaded_p;
+ };
+ 
+ /* Hash traits for registered_function.  */
+ struct registered_function_hasher : ggc_ptr_hash <registered_function>
+ {
+   typedef function_instance compare_type;
+ 
+   static hashval_t hash (value_type);
+   static bool equal (value_type, const compare_type &);
+ };
+ 
+ /* Information about each single-predicate or single-vector type.  */
+ static CONSTEXPR const vector_type_info vector_types[] = {
+ #define DEF_SVE_TYPE(ACLE_NAME, NCHARS, ABI_NAME, SCALAR_TYPE) \
+   { #ACLE_NAME, #ABI_NAME, "u" #NCHARS #ABI_NAME },
+ #include "aarch64-sve-builtins.def"
+ };
+ 
+ /* The function name suffix associated with each predication type.  */
+ static const char *const pred_suffixes[NUM_PREDS + 1] = {
+   "",
+   "",
+   "_m",
+   "_x",
+   "_z",
+   "_m",
+   ""
+ };
+ 
+ /* Static information about each mode_suffix_index.  */
+ CONSTEXPR const mode_suffix_info mode_suffixes[] = {
+ #define VECTOR_TYPE_none NUM_VECTOR_TYPES
+ #define DEF_SVE_MODE(NAME, BASE, DISPLACEMENT, UNITS) \
+   { "_" #NAME, VECTOR_TYPE_##BASE, VECTOR_TYPE_##DISPLACEMENT, UNITS_##UNITS },
+ #include "aarch64-sve-builtins.def"
+ #undef VECTOR_TYPE_none
+   { "", NUM_VECTOR_TYPES, NUM_VECTOR_TYPES, UNITS_none }
+ };
+ 
+ /* Static information about each type_suffix_index.  */
+ CONSTEXPR const type_suffix_info type_suffixes[NUM_TYPE_SUFFIXES + 1] = {
+ #define DEF_SVE_NEON_TYPE_SUFFIX(NAME, ACLE_TYPE, CLASS, BITS, MODE, \
+ 				 NEON64, NEON128) \
+   { "_" #NAME, \
+     VECTOR_TYPE_##ACLE_TYPE, \
+     TYPE_##CLASS, \
+     BITS, \
+     BITS / BITS_PER_UNIT, \
+     TYPE_##CLASS == TYPE_signed || TYPE_##CLASS == TYPE_unsigned, \
+     TYPE_##CLASS == TYPE_unsigned, \
+     TYPE_##CLASS == TYPE_float || TYPE_##CLASS == TYPE_bfloat, \
+     TYPE_##CLASS != TYPE_bool, \
+     TYPE_##CLASS == TYPE_bool, \
+     false, \
+     0, \
+     MODE, \
+     NEON64, \
+     NEON128 },
+ #define DEF_SVE_TYPE_SUFFIX(NAME, ACLE_TYPE, CLASS, BITS, MODE) \
+   DEF_SVE_NEON_TYPE_SUFFIX (NAME, ACLE_TYPE, CLASS, BITS, MODE, \
+ 			    ARM_NEON_H_TYPES_LAST, ARM_NEON_H_TYPES_LAST)
+ #define DEF_SME_ZA_SUFFIX(NAME, BITS, MODE) \
+   { "_" #NAME, \
+     NUM_VECTOR_TYPES, \
+     NUM_TYPE_CLASSES, \
+     BITS, \
+     BITS / BITS_PER_UNIT, \
+     false, \
+     false, \
+     false, \
+     false, \
+     false, \
+     true, \
+     0, \
+     MODE, \
+     ARM_NEON_H_TYPES_LAST, \
+     ARM_NEON_H_TYPES_LAST },
+ #include "aarch64-sve-builtins.def"
+   { "", NUM_VECTOR_TYPES, TYPE_bool, 0, 0, false, false, false, false,
+     false, false, 0, VOIDmode, ARM_NEON_H_TYPES_LAST, ARM_NEON_H_TYPES_LAST }
+ };
+ 
+ CONSTEXPR const group_suffix_info group_suffixes[] = {
+ #define DEF_SVE_GROUP_SUFFIX(NAME, VG, VECTORS_PER_TUPLE) \
+   { "_" #NAME, VG, VECTORS_PER_TUPLE },
+ #include "aarch64-sve-builtins.def"
+   { "", 0, 1 }
+ };
+ 
+ constexpr const aarch64_acle::function_group_info neon_function_groups[] = {
+ #define DEF_NEON_FUNCTION(NAME, TYPES, SHAPE_ARGS)			\
+   {									\
+     /* .base_name  = */ #NAME,						\
+     /* .base       = */ &aarch64_acle::functions::NAME,			\
+     /* .shape      = */ &aarch64_acle::shapes::SHAPE_NAME (NAME, TYPES),\
+     /* .types      = */ aarch64_acle::types_##TYPES,			\
+     /* .groups     = */ aarch64_acle::groups_none,			\
+     /* .preds      = */ aarch64_acle::preds_none,			\
+     /* .extensions = */ aarch64_required_extensions::REQUIRED_EXTENSIONS,\
+     /* .fpm_mode   = */ aarch64_acle::FPM_unused,			\
+   },
+ #include "aarch64-neon-builtins.def"
+ };
+ 
+ /* A list of all arm_sve.h functions.  */
+ static CONSTEXPR const function_group_info function_groups[] = {
+ #define DEF_SVE_FUNCTION_GS_FPM(NAME, SHAPE, TYPES, GROUPS, PREDS, FPM_MODE) \
+   { #NAME, &functions::NAME, &shapes::SHAPE, types_##TYPES, groups_##GROUPS, \
+     preds_##PREDS, aarch64_required_extensions::REQUIRED_EXTENSIONS, \
+     FPM_##FPM_MODE },
+ #include "aarch64-sve-builtins.def"
+ };
+ 
+ /* A list of all arm_neon_sve_bridge.h ACLE functions.  */
+ static CONSTEXPR const function_group_info neon_sve_function_groups[] = {
+ #define DEF_NEON_SVE_FUNCTION(NAME, SHAPE, TYPES, GROUPS, PREDS) \
+   { #NAME, &neon_sve_bridge_functions::NAME, &shapes::SHAPE, types_##TYPES, \
+     groups_##GROUPS, preds_##PREDS, aarch64_required_extensions::ssve (0), \
+     FPM_unused },
+ #include "aarch64-neon-sve-bridge-builtins.def"
+ };
+ 
+ /* A list of all arm_sme.h functions.  */
+ static CONSTEXPR const function_group_info sme_function_groups[] = {
+ #define DEF_SME_FUNCTION_GS_FPM(NAME, SHAPE, TYPES, GROUPS, PREDS, FPM_MODE) \
+   { #NAME, &functions::NAME, &shapes::SHAPE, types_##TYPES, groups_##GROUPS, \
+     preds_##PREDS, aarch64_required_extensions::REQUIRED_EXTENSIONS, \
+     FPM_##FPM_MODE },
+ #define DEF_SME_ZA_FUNCTION_GS_FPM(NAME, SHAPE, TYPES, GROUPS, PREDS, FPM_MODE) \
+   { #NAME, &functions::NAME##_za, &shapes::SHAPE, types_##TYPES, \
+     groups_##GROUPS, preds_##PREDS, \
+     aarch64_required_extensions::REQUIRED_EXTENSIONS \
+       .and_also (AARCH64_FL_ZA_ON), FPM_##FPM_MODE },
+ #include "aarch64-sve-builtins-sme.def"
+ };
+ 
+ /* The scalar type associated with each vector type.  */
+ extern GTY(()) tree scalar_types[NUM_VECTOR_TYPES + 1];
+ tree scalar_types[NUM_VECTOR_TYPES + 1];
+ 
+ /* The single-predicate and single-vector types, with their built-in
+    "__SV..._t" name.  Allow an index of NUM_VECTOR_TYPES, which always
+    yields a null tree.  */
+ static GTY(()) tree abi_vector_types[NUM_VECTOR_TYPES + 1];
+ 
+ /* Same, but with the arm_sve.h "sv..._t" name.  */
+ extern GTY(()) tree acle_vector_types[MAX_TUPLE_SIZE][NUM_VECTOR_TYPES + 1];
+ tree acle_vector_types[MAX_TUPLE_SIZE][NUM_VECTOR_TYPES + 1];
+ 
+ /* The svpattern enum type.  */
+ extern GTY(()) tree acle_svpattern;
+ tree acle_svpattern;
+ 
+ /* The svprfop enum type.  */
+ extern GTY(()) tree acle_svprfop;
+ tree acle_svprfop;
+ 
+ /* The list of all registered function decls, indexed by code.  */
+ static GTY(()) vec<registered_function *, va_gc> *registered_functions;
+ 
+ /* Stores the starting function index for each pragma handler.  */
+ static  GTY(()) unsigned int initial_indexes[NUM_PRAGMA_HANDLERS];
+ 
+ /* All registered function decls, hashed on the function_instance
+    that they implement.  This is used for looking up implementations of
+    overloaded functions.  */
+ static GTY(()) hash_table<registered_function_hasher> *function_table;
+ 
+ /* Index 0 maps all overloaded function names that we've registered so far to
+    their associated function_instances.  Index 1 does the same for functions
+    that we've skipped over without registering.  In both cases, the map keys
+    are IDENTIFIER_NODEs.  */
+ static GTY(()) hash_map<tree, registered_function *> *overload_names[2];
+ 
+ /* Record that TYPE is an ABI-defined SVE type that contains NUM_ZR SVE vectors
+    and NUM_PR SVE predicates.  MANGLED_NAME, if nonnull, is the ABI-defined
+    mangling of the type.  mangling of the type.  ACLE_NAME is the <arm_sve.h>
+    name of the type, or null if <arm_sve.h> does not provide the type.  */
+ void
+ add_sve_type_attribute (tree type, unsigned int num_zr, unsigned int num_pr,
+ 			const char *mangled_name, const char *acle_name)
+ {
+   tree mangled_name_tree
+     = (mangled_name ? get_identifier (mangled_name) : NULL_TREE);
+   tree acle_name_tree
+     = (acle_name ? get_identifier (acle_name) : NULL_TREE);
+ 
+   tree value = tree_cons (NULL_TREE, acle_name_tree, NULL_TREE);
+   value = tree_cons (NULL_TREE, mangled_name_tree, value);
+   value = tree_cons (NULL_TREE, size_int (num_pr), value);
+   value = tree_cons (NULL_TREE, size_int (num_zr), value);
+   TYPE_ATTRIBUTES (type) = tree_cons (get_identifier ("SVE type"), value,
+ 				      TYPE_ATTRIBUTES (type));
+ }
+ 
+ /* If TYPE is an ABI-defined SVE type, return its attribute descriptor,
+    otherwise return null.  */
+ static tree
+ lookup_sve_type_attribute (const_tree type)
+ {
+   if (type == error_mark_node)
+     return NULL_TREE;
+   return lookup_attribute ("SVE type", TYPE_ATTRIBUTES (type));
+ }
+ 
+ /* Force TYPE to be a sizeless type.  */
+ static void
+ make_type_sizeless (tree type)
+ {
+   TYPE_ATTRIBUTES (type) = tree_cons (get_identifier ("SVE sizeless type"),
+ 				      NULL_TREE, TYPE_ATTRIBUTES (type));
+ }
+ 
+ /* Return true if TYPE is a sizeless type.  */
+ static bool
+ sizeless_type_p (const_tree type)
+ {
+   if (type == error_mark_node)
+     return NULL_TREE;
+   return lookup_attribute ("SVE sizeless type", TYPE_ATTRIBUTES (type));
+ }
+ 
+ /* Return true if CANDIDATE is equivalent to MODEL_TYPE for overloading
+    purposes.  */
+ static bool
+ matches_type_p (const_tree model_type, const_tree candidate)
+ {
+   if (VECTOR_TYPE_P (model_type))
+     {
+       if (!VECTOR_TYPE_P (candidate)
+ 	  || maybe_ne (TYPE_VECTOR_SUBPARTS (model_type),
+ 		       TYPE_VECTOR_SUBPARTS (candidate))
+ 	  || TYPE_MODE (model_type) != TYPE_MODE (candidate))
+ 	return false;
+ 
+       model_type = TREE_TYPE (model_type);
+       candidate = TREE_TYPE (candidate);
+     }
+   return (candidate != error_mark_node
+ 	  && TYPE_MAIN_VARIANT (model_type) == TYPE_MAIN_VARIANT (candidate));
+ }
+ 
+ /* If TYPE is a valid SVE element type, return the corresponding type
+    suffix, otherwise return NUM_TYPE_SUFFIXES.  */
+ static type_suffix_index
+ find_type_suffix_for_scalar_type (const_tree type)
+ {
+   /* A linear search should be OK here, since the code isn't hot and
+      the number of types is only small.  */
+   for (unsigned int suffix_i = 0; suffix_i < NUM_TYPE_SUFFIXES; ++suffix_i)
+     if (type_suffixes[suffix_i].vector_p)
+       {
+ 	vector_type_index vector_i = type_suffixes[suffix_i].vector_type;
+ 	if (matches_type_p (scalar_types[vector_i], type))
+ 	  return type_suffix_index (suffix_i);
+       }
+   return NUM_TYPE_SUFFIXES;
+ }
+ 
+ /* Return the implicit group suffix for intrinsics that operate on NVECTORS
+    vectors.  */
+ static group_suffix_index
+ num_vectors_to_group (unsigned int nvectors)
+ {
+   switch (nvectors)
+     {
+     case 1: return GROUP_none;
+     case 2: return GROUP_x2;
+     case 3: return GROUP_x3;
+     case 4: return GROUP_x4;
+     }
+   gcc_unreachable ();
+ }
+ 
+ /* If FNDECL is an SVE builtin, return its function instance, otherwise
+    return null.  */
+ const function_instance *
+ lookup_fndecl (tree fndecl)
+ {
+   if (!fndecl_built_in_p (fndecl, BUILT_IN_MD))
+     return nullptr;
+ 
+   unsigned int code = DECL_MD_FUNCTION_CODE (fndecl);
+   if ((code & AARCH64_BUILTIN_CLASS) != AARCH64_BUILTIN_SVE)
+     return nullptr;
+ 
+   unsigned int subcode = code >> AARCH64_BUILTIN_SHIFT;
+   return &(*registered_functions)[subcode]->instance;
+ }
+ 
+ 
+ /* Try to fold constant arguments ARG1 and ARG2 using the given tree_code.
+    Operations are not treated as overflowing.  */
+ static tree
+ aarch64_const_binop (enum tree_code code, tree arg1, tree arg2)
+ {
+   if (poly_int_tree_p (arg1) && poly_int_tree_p (arg2))
+     {
+       poly_wide_int poly_res;
+       tree type = TREE_TYPE (arg1);
+       signop sign = TYPE_SIGN (type);
+       wi::overflow_type overflow = wi::OVF_NONE;
+ 
+       /* Return 0 for division by 0, like SDIV and UDIV do.  */
+       if (code == TRUNC_DIV_EXPR && integer_zerop (arg2))
+ 	return arg2;
+       /* Return 0 if shift amount is out of range. */
+       if (code == LSHIFT_EXPR
+ 	  && wi::geu_p (wi::to_wide (arg2), TYPE_PRECISION (type)))
+ 	return build_int_cst (type, 0);
+       if (!poly_int_binop (poly_res, code, arg1, arg2, sign, &overflow))
+ 	return NULL_TREE;
+       return force_fit_type (type, poly_res, false,
+ 			     TREE_OVERFLOW (arg1) | TREE_OVERFLOW (arg2));
+     }
+   return NULL_TREE;
+ }
+ 
+ /* Return the type that a vector base should have in a gather load or
+    scatter store involving vectors of type TYPE.  In an extending load,
+    TYPE is the result of the extension; in a truncating store, it is the
+    input to the truncation.
+ 
+    Index vectors have the same width as base vectors, but can be either
+    signed or unsigned.  */
+ type_suffix_index
+ function_shape::vector_base_type (type_suffix_index type) const
+ {
+   unsigned int required_bits = type_suffixes[type].element_bits;
+   gcc_assert (required_bits == 32 || required_bits == 64);
+   return required_bits == 32 ? TYPE_SUFFIX_u32 : TYPE_SUFFIX_u64;
+ }
+ 
+ /* Return a hash code for a function_instance.  */
+ hashval_t
+ function_instance::hash () const
+ {
+   inchash::hash h;
+   /* BASE uniquely determines BASE_NAME, so we don't need to hash both.  */
+   h.add_ptr (base);
+   h.add_ptr (shape);
+   h.add_int (mode_suffix_id);
+   h.add_int (type_suffix_ids[0]);
+   h.add_int (type_suffix_ids[1]);
+   h.add_int (type_suffix_ids[2]);
+   h.add_int (group_suffix_id);
+   h.add_int (pred);
+   h.add_int (fpm_mode);
+   return h.end ();
+ }
+ 
+ /* Return a set of CP_* flags that describe what the function could do,
+    taking the command-line flags into account.  */
+ unsigned int
+ function_instance::call_properties () const
+ {
+   unsigned int flags = base->call_properties (*this);
+ 
+   /* -fno-trapping-math means that we can assume any FP exceptions
+      are not user-visible.  */
+   if (!flag_trapping_math)
+     flags &= ~CP_RAISE_FP_EXCEPTIONS;
+ 
+   return flags;
+ }
+ 
+ /* Return true if calls to the function could read some form of
+    global state.  */
+ bool
+ function_instance::reads_global_state_p () const
+ {
+   unsigned int flags = call_properties ();
+ 
+   /* Preserve any dependence on rounding mode, flush to zero mode, etc.
+      There is currently no way of turning this off; in particular,
+      -fno-rounding-math (which is the default) means that we should make
+      the usual assumptions about rounding mode, which for intrinsics means
+      acting as the instructions do.  */
+   if (flags & CP_READ_FPCR)
+     return true;
+ 
+   /* Handle direct reads of global state.  */
+   return flags & (CP_READ_MEMORY | CP_READ_FFR | CP_READ_ZA | CP_READ_ZT0);
+ }
+ 
+ /* Return true if calls to the function could modify some form of
+    global state.  */
+ bool
+ function_instance::modifies_global_state_p () const
+ {
+   unsigned int flags = call_properties ();
+ 
+   /* Preserve any exception state written back to the FPCR,
+      unless -fno-trapping-math says this is unnecessary.  */
+   if (flags & CP_RAISE_FP_EXCEPTIONS)
+     return true;
+ 
+   /* Treat prefetches as modifying global state, since that's the
+      only means we have of keeping them in their correct position.  */
+   if (flags & CP_PREFETCH_MEMORY)
+     return true;
+ 
+   /* Handle direct modifications of global state.  */
+   return flags & (CP_WRITE_MEMORY | CP_WRITE_FFR | CP_WRITE_ZA | CP_WRITE_ZT0);
+ }
+ 
+ /* Return true if calls to the function could raise a signal.  */
+ bool
+ function_instance::could_trap_p () const
+ {
+   unsigned int flags = call_properties ();
+ 
+   /* Handle functions that could raise SIGFPE.  */
+   if (flags & CP_RAISE_FP_EXCEPTIONS)
+     return true;
+ 
+   /* Handle functions that could raise SIGBUS or SIGSEGV.  */
+   if (flags & (CP_READ_MEMORY | CP_WRITE_MEMORY))
+     return true;
+ 
+   return false;
+ }
+ 
+ inline hashval_t
+ registered_function_hasher::hash (value_type value)
+ {
+   return value->instance.hash ();
+ }
+ 
+ inline bool
+ registered_function_hasher::equal (value_type value, const compare_type &key)
+ {
+   return value->instance == key;
+ }
+ 
+ sve_alignment_switcher::sve_alignment_switcher ()
+ {
+   m_old_maximum_field_alignment = maximum_field_alignment;
+   maximum_field_alignment = 0;
+ }
+ 
+ sve_alignment_switcher::~sve_alignment_switcher ()
+ {
+   maximum_field_alignment = m_old_maximum_field_alignment;
+ }
+ 
+ function_builder::function_builder (handle_pragma_index pragma_index,
+ 				    bool function_nulls)
+ {
+   m_overload_type = build_function_type (void_type_node, void_list_node);
+   m_direct_overloads = lang_GNU_CXX () || in_lto_p;
+ 
+   if (initial_indexes[pragma_index] == 0)
+     {
+       unsigned int index = vec_safe_length (registered_functions);
+       initial_indexes[pragma_index] = index;
+     }
+ 
+   m_function_index = initial_indexes[pragma_index];
+   m_function_nulls = function_nulls;
+ 
+   gcc_obstack_init (&m_string_obstack);
+ 
+   if (!function_table)
+     function_table = hash_table<registered_function_hasher>::create_ggc (1023);
+ }
+ 
+ function_builder::~function_builder ()
+ {
+   obstack_free (&m_string_obstack, NULL);
+ }
+ 
+ /* Add NAME to the end of the function name being built.  */
+ void
+ function_builder::append_name (const char *name)
+ {
+   obstack_grow (&m_string_obstack, name, strlen (name));
+ }
+ 
+ /* Zero-terminate and complete the function name being built.  */
+ char *
+ function_builder::finish_name ()
+ {
+   obstack_1grow (&m_string_obstack, 0);
+   return (char *) obstack_finish (&m_string_obstack);
+ }
+ 
+ /* Return the overloaded or full function name for INSTANCE; OVERLOADED_P
+    selects which.  Allocate the string on m_string_obstack; the caller
+    must use obstack_free to free it after use.  */
+ char *
+ function_builder::get_name (const function_instance &instance,
+ 			    bool overloaded_p)
+ {
+   /* __arm_* functions are listed as arm_*, so that the associated GCC
+      code is not in the implementation namespace.  */
+   if (strncmp (instance.base_name, "arm_", 4) == 0)
+     append_name ("__");
+   append_name (instance.base_name);
+   if (overloaded_p)
+     switch (instance.displacement_units ())
+       {
+       case UNITS_none:
+ 	break;
+ 
+       case UNITS_bytes:
+ 	append_name ("_offset");
+ 	break;
+ 
+       case UNITS_elements:
+ 	append_name ("_index");
+ 	break;
+ 
+       case UNITS_vectors:
+ 	append_name ("_vnum");
+ 	break;
+       }
+   else
+     append_name (instance.mode_suffix ().string);
+   for (unsigned int i = 0; i < 3; ++i)
+     if (!overloaded_p || instance.shape->explicit_type_suffix_p (i))
+       append_name (instance.type_suffix (i).string);
+   if (!overloaded_p || instance.shape->explicit_group_suffix_p ())
+     append_name (instance.group_suffix ().string);
+   append_name (pred_suffixes[instance.pred]);
+   if (instance.fpm_mode == FPM_set)
+     append_name ("_fpm");
+   return finish_name ();
+ }
+ 
+ /* Add attribute NAME to ATTRS.  */
+ static tree
+ add_attribute (const char *name, tree attrs)
+ {
+   return tree_cons (get_identifier (name), NULL_TREE, attrs);
+ }
+ 
+ /* Add attribute NS::NAME to ATTRS.  */
+ static tree
+ add_attribute (const char *ns, const char *name, tree value, tree attrs)
+ {
+   return tree_cons (build_tree_list (get_identifier (ns),
+ 				     get_identifier (name)),
+ 		    value, attrs);
+ }
+ 
+ /* Attribute arm::NAME describes shared state that is an input if IS_IN
+    and an output if IS_OUT.  Check whether a call with call properties
+    CALL_FLAGS needs such an attribute.  Add it to in-progress attribute
+    list ATTRS if so.  Return the new attribute list.  */
+ static tree
+ add_shared_state_attribute (const char *name, bool is_in, bool is_out,
+ 			    unsigned int call_flags, tree attrs)
+ {
+   struct state_flag_info
+   {
+     const char *name;
+     unsigned int read_flag;
+     unsigned int write_flag;
+   };
+   static state_flag_info state_flags[] =
+   {
+     { "za", CP_READ_ZA, CP_WRITE_ZA },
+     { "zt0", CP_READ_ZT0, CP_WRITE_ZT0 }
+   };
+ 
+   tree args = NULL_TREE;
+   for (const auto &state_flag : state_flags)
+     {
+       auto all_flags = state_flag.read_flag | state_flag.write_flag;
+       auto these_flags = ((is_in ? state_flag.read_flag : 0)
+ 			  | (is_out ? state_flag.write_flag : 0));
+       if ((call_flags & all_flags) == these_flags)
+ 	{
+ 	  tree value = build_string (strlen (state_flag.name) + 1,
+ 				     state_flag.name);
+ 	  args = tree_cons (NULL_TREE, value, args);
+ 	}
+     }
+   if (args)
+     attrs = add_attribute ("arm", name, args, attrs);
+   return attrs;
+ }
+ 
+ /* Return the appropriate function attributes for INSTANCE, which requires
+    the architecture extensions in REQUIRED_EXTENSIONS.  */
+ tree
+ function_builder::get_attributes (const function_instance &instance,
+ 				  aarch64_required_extensions
+ 				    required_extensions)
+ {
+   tree attrs = NULL_TREE;
+ 
+   if (required_extensions.sm_off == 0)
+     attrs = add_attribute ("arm", "streaming", NULL_TREE, attrs);
+   else if (required_extensions.sm_on != 0)
+     attrs = add_attribute ("arm", "streaming_compatible", NULL_TREE, attrs);
+ 
+   attrs = add_shared_state_attribute ("in", true, false,
+ 				      instance.call_properties (), attrs);
+   attrs = add_shared_state_attribute ("out", false, true,
+ 				      instance.call_properties (), attrs);
+   attrs = add_shared_state_attribute ("inout", true, true,
+ 				      instance.call_properties (), attrs);
+ 
+   if (!instance.modifies_global_state_p ())
+     {
+       if (instance.reads_global_state_p ())
+ 	attrs = add_attribute ("pure", attrs);
+       else
+ 	attrs = add_attribute ("const", attrs);
+     }
+ 
+   if (!flag_non_call_exceptions || !instance.could_trap_p ())
+     attrs = add_attribute ("nothrow", attrs);
+ 
+   return add_attribute ("leaf", attrs);
+ }
+ 
+ /* Add a function called NAME with type FNTYPE and attributes ATTRS.
+    INSTANCE describes what the function does and OVERLOADED_P indicates
+    whether it is overloaded.  REQUIRED_EXTENSIONS describes the architecture
+    extensions that the function requires.  */
+ registered_function &
+ function_builder::add_function (const function_instance &instance,
+ 				const char *name, tree fntype, tree attrs,
+ 				aarch64_required_extensions
+ 				  required_extensions,
+ 				bool overloaded_p,
+ 				bool placeholder_p)
+ {
+   unsigned int length = vec_safe_length (registered_functions);
+   unsigned int code = (m_function_index << AARCH64_BUILTIN_SHIFT) | AARCH64_BUILTIN_SVE;
+   /* We need to be able to generate placeholders to ensure that we have a
+      consistent numbering scheme for function codes between the C and C++
+      frontends, so that everything ties up in LTO.
+ 
+      Currently, tree-streamer-in.cc:unpack_ts_function_decl_value_fields
+      validates that tree nodes returned by TARGET_BUILTIN_DECL are non-NULL and
+      some node other than error_mark_node. This is a holdover from when builtin
+      decls were streamed by code rather than by value.
+ 
+      Ultimately, we should be able to remove this validation of BUILT_IN_MD
+      nodes and remove the target hook. For now, however, we need to appease the
+      validation and return a non-NULL, non-error_mark_node node, so we
+      arbitrarily choose integer_zero_node.  */
+   tree decl = placeholder_p || m_function_nulls
+     ? integer_zero_node
+     : simulate_builtin_function_decl (input_location, name, fntype,
+ 				      code, NULL, attrs);
+ 
+   registered_function &rfn = *ggc_alloc <registered_function> ();
+   rfn.instance = instance;
+   rfn.decl = decl;
+   rfn.required_extensions = required_extensions;
+   rfn.overloaded_p = overloaded_p;
+   if (m_function_index >= length)
+     vec_safe_push (registered_functions, &rfn);
+   else
+     (*registered_functions)[m_function_index] = &rfn;
+   m_function_index++;
+ 
+   return rfn;
+ }
+ 
+ /* Add a built-in function for INSTANCE, with the argument types given
+    by ARGUMENT_TYPES and the return type given by RETURN_TYPE.
+    REQUIRED_EXTENSIONS describes the architecture extensions that the
+    function requires.  FORCE_DIRECT_OVERLOADS is true if there is a
+    one-to-one mapping between "short" and "full" names, and if standard
+    overload resolution therefore isn't necessary.  */
+ void
+ function_builder::
+ add_unique_function (const function_instance &instance,
+ 		     tree return_type,
+ 		     vec<tree> &argument_types,
+ 		     aarch64_required_extensions required_extensions,
+ 		     bool force_direct_overloads)
+ {
+   /* Add the function under its full (unique) name.  */
+   char *name = get_name (instance, false);
+   tree fntype = build_function_type_array (return_type,
+ 					   argument_types.length (),
+ 					   argument_types.address ());
+   tree attrs = get_attributes (instance, required_extensions);
+   registered_function &rfn = add_function (instance, name, fntype, attrs,
+ 					   required_extensions, false, false);
+ 
+   /* Enter the function into the hash table.  */
+   if (!m_function_nulls)
+     {
+       hashval_t hash = instance.hash ();
+       registered_function **rfn_slot
+ 	= function_table->find_slot_with_hash (instance, hash, INSERT);
+       gcc_assert (!*rfn_slot);
+       *rfn_slot = &rfn;
+     }
+ 
+   /* Also add the function under its overloaded alias, if we want
+      a separate decl for each instance of an overloaded function.  */
+   char *overload_name = get_name (instance, true);
+   if (strcmp (name, overload_name) != 0)
+     {
+       /* Attribute lists shouldn't be shared.  */
+       tree attrs = get_attributes (instance, required_extensions);
+       bool placeholder_p = !(m_direct_overloads || force_direct_overloads);
+       add_function (instance, overload_name, fntype, attrs,
+ 		    required_extensions, false, placeholder_p);
+     }
+ 
+   obstack_free (&m_string_obstack, name);
+ }
+ 
+ /* Add one function decl for INSTANCE, to be used with manual overload
+    resolution.  REQUIRED_EXTENSIONS describes the architecture extensions
+    that the function requires.
+ 
+    For simplicity, deal with duplicate attempts to add the same function,
+    including cases in which the new function requires more features than
+    the original one did.  In that case we'll check whether the required
+    features are available as part of resolving the function to the
+    relevant unique function.  */
+ void
+ function_builder::
+ add_overloaded_function (const function_instance &instance,
+ 			 aarch64_required_extensions required_extensions)
+ {
+   auto &name_map = overload_names[m_function_nulls];
+   if (!name_map)
+     name_map = hash_map<tree, registered_function *>::create_ggc ();
+ 
+   char *name = get_name (instance, true);
+   tree id = get_identifier (name);
+   if (registered_function **map_value = name_map->get (id))
+     {
+       auto &dst_extensions = (*map_value)->required_extensions;
+       /* Make sure that any streaming and streaming-compatible attributes
+ 	 on the function type are still correct.  (It might not matter if
+ 	 they aren't, so this could be relaxed in future if we're sure that
+ 	 it's safe.)  */
+       gcc_assert ((*map_value)->instance == instance
+ 		  && (dst_extensions.sm_off || !required_extensions.sm_off)
+ 		  && (dst_extensions.sm_on || !required_extensions.sm_on));
+       dst_extensions = dst_extensions.common_denominator (required_extensions);
+     }
+   else
+     {
+       registered_function &rfn
+ 	= add_function (instance, name, m_overload_type, NULL_TREE,
+ 			required_extensions, true, m_direct_overloads);
+       name_map->put (id, &rfn);
+     }
+   obstack_free (&m_string_obstack, name);
+ }
+ 
+ /* If we are using manual overload resolution, add one function decl
+    for each overloaded function in GROUP.  Take the function base name
+    from GROUP and the mode from MODE.  */
+ void
+ function_builder::add_overloaded_functions (const function_group_info &group,
+ 					    mode_suffix_index mode)
+ {
+   bool explicit_type0 = (*group.shape)->explicit_type_suffix_p (0);
+   bool explicit_type1 = (*group.shape)->explicit_type_suffix_p (1);
+   bool explicit_type2 = (*group.shape)->explicit_type_suffix_p (2);
+   bool explicit_group = (*group.shape)->explicit_group_suffix_p ();
+   auto add_function = [&](const type_suffix_triple &types,
+ 			  group_suffix_index group_suffix_id,
+ 			  unsigned int pi)
+     {
+       function_instance instance (group.base_name, *group.base,
+ 				  *group.shape, mode, types,
+ 				  group_suffix_id, group.preds[pi],
+ 				  group.fpm_mode);
+       add_overloaded_function (instance, group.required_extensions);
+     };
+ 
+   auto add_group_suffix = [&](group_suffix_index group_suffix_id,
+ 			      unsigned int pi)
+     {
+       if (mode == MODE_single
+ 	  && group_suffixes[group_suffix_id].vectors_per_tuple == 1)
+ 	return;
+ 
+       if (!explicit_type0 && !explicit_type1)
+ 	/* Deal with the common case in which there is one overloaded
+ 	   function for all type combinations.  */
+ 	add_function (types_none[0], group_suffix_id, pi);
+       else
+ 	for (unsigned int ti = 0; group.types[ti][0] != NUM_TYPE_SUFFIXES;
+ 	     ++ti)
+ 	  {
+ 	    /* Stub out the types that are determined by overload
+ 	       resolution.  */
+ 	    type_suffix_triple types = {
+ 	      explicit_type0 ? group.types[ti][0] : NUM_TYPE_SUFFIXES,
+ 	      explicit_type1 ? group.types[ti][1] : NUM_TYPE_SUFFIXES,
+ 	      explicit_type2 ? group.types[ti][2] : NUM_TYPE_SUFFIXES
+ 	    };
+ 	    add_function (types, group_suffix_id, pi);
+ 	  }
+     };
+ 
+   for (unsigned int pi = 0; group.preds[pi] != NUM_PREDS; ++pi)
+     if (explicit_group)
+       for (unsigned int gi = 0; group.groups[gi] != NUM_GROUP_SUFFIXES; ++gi)
+ 	add_group_suffix (group.groups[gi], pi);
+     else
+       add_group_suffix (GROUP_none, pi);
+ }
+ 
+ /* Register all the functions in GROUP.  */
+ void
+ function_builder::register_function_group (const function_group_info &group)
+ {
+   (*group.shape)->build (*this, group);
+ }
+ 
+ function_call_info::function_call_info (location_t location_in,
+ 					const function_instance &instance_in,
+ 					tree fndecl_in)
+   : function_instance (instance_in), location (location_in), fndecl (fndecl_in)
+ {
+ }
+ 
+ function_resolver::function_resolver (location_t location,
+ 				      const function_instance &instance,
+ 				      tree fndecl, vec<tree, va_gc> &arglist)
+   : function_call_info (location, instance, fndecl), m_arglist (arglist)
+ {
+ }
+ 
+ /* Return the <stdint.h> name associated with TYPE.  Using the <stdint.h>
+    name should be more user-friendly than the underlying canonical type,
+    since it makes the signedness and bitwidth explicit.  */
+ const char *
+ function_resolver::get_scalar_type_name (type_suffix_index type)
+ {
+   return vector_types[type_suffixes[type].vector_type].acle_name + 2;
+ }
+ 
+ /* Return the type of argument I, or error_mark_node if it isn't
+    well-formed.  */
+ tree
+ function_resolver::get_argument_type (unsigned int i)
+ {
+   tree arg = m_arglist[i];
+   return arg == error_mark_node ? arg : TREE_TYPE (arg);
+ }
+ 
+ /* Return true if argument I is some form of scalar value.  */
+ bool
+ function_resolver::scalar_argument_p (unsigned int i)
+ {
+   tree type = get_argument_type (i);
+   return (INTEGRAL_TYPE_P (type)
+ 	  /* Allow pointer types, leaving the frontend to warn where
+ 	     necessary.  */
+ 	  || POINTER_TYPE_P (type)
+ 	  || SCALAR_FLOAT_TYPE_P (type));
+ }
+ 
+ /* Report that argument ARGNO was expected to have NUM_VECTORS vectors.
+    TYPE is the type that ARGNO actually has.  */
+ void
+ function_resolver::report_incorrect_num_vectors (unsigned int argno,
+ 						 sve_type type,
+ 						 unsigned int num_vectors)
+ {
+   if (num_vectors == 1)
+     error_at (location, "passing %qT to argument %d of %qE, which"
+ 	      " expects a single SVE vector rather than a tuple",
+ 	      get_vector_type (type), argno + 1, fndecl);
+   else if (type.num_vectors == 1
+ 	   && type.type != TYPE_SUFFIX_b)
+     /* num_vectors is always != 1, so the singular isn't needed.  */
+     error_n (location, num_vectors, "%qT%d%qE%d",
+ 	     "passing single vector %qT to argument %d"
+ 	     " of %qE, which expects a tuple of %d vectors",
+ 	     get_vector_type (type), argno + 1, fndecl, num_vectors);
+   else
+     /* num_vectors is always != 1, so the singular isn't needed.  */
+     error_n (location, num_vectors, "%qT%d%qE%d",
+ 	     "passing %qT to argument %d of %qE, which"
+ 	     " expects a tuple of %d vectors", get_vector_type (type),
+ 	     argno + 1, fndecl, num_vectors);
+ }
+ 
+ /* Report that arguments FIRST_ARGNO and ARGNO have different numbers
+    of vectors, but are required to have the same number of vectors.
+    FIRST_TYPE and TYPE are the types that arguments FIRST_ARGNO and
+    ARGNO actually have.  */
+ void
+ function_resolver::report_mismatched_num_vectors (unsigned int first_argno,
+ 						  sve_type first_type,
+ 						  unsigned int argno,
+ 						  sve_type type)
+ {
+   /* If the tuple size is implied by the group suffix, and if the first
+      type had the right number of vectors, treat argument ARGNO as being
+      individually wrong, rather than wrong in relation to FIRST_ARGNO.  */
+   if (group_suffix_id != GROUP_none
+       && first_type.num_vectors == vectors_per_tuple ())
+     {
+       report_incorrect_num_vectors (argno, type, first_type.num_vectors);
+       return;
+     }
+ 
+   /* Make sure that FIRST_TYPE itself is sensible before using it
+      as a basis for an error message.  */
+   if (resolve_to (mode_suffix_id, first_type) == error_mark_node)
+     return;
+ 
+   if (type.num_vectors != 1 && first_type.num_vectors == 1)
+     error_at (location, "passing tuple %qT to argument %d of %qE after"
+ 	      " passing single vector %qT to argument %d",
+ 	      get_vector_type (type), argno + 1, fndecl,
+ 	      get_vector_type (first_type), first_argno + 1);
+   else if (type.num_vectors == 1 && first_type.num_vectors != 1)
+     error_at (location, "passing single vector %qT to argument %d"
+ 	      " of %qE after passing tuple %qT to argument %d",
+ 	      get_vector_type (type), argno + 1, fndecl,
+ 	      get_vector_type (first_type), first_argno + 1);
+   else
+     error_at (location, "passing mismatched tuple types %qT and %qT"
+ 	      " to arguments %d and %d of %qE",
+ 	      get_vector_type (first_type), get_vector_type (type),
+ 	      first_argno + 1, argno + 1, fndecl);
+ }
+ 
+ /* Report that the function has no form that takes type TYPE.
+    Return error_mark_node.  */
+ tree
+ function_resolver::report_no_such_form (sve_type type)
+ {
+   error_at (location, "%qE has no form that takes %qT arguments",
+ 	    fndecl, get_vector_type (type));
+   return error_mark_node;
+ }
+ 
+ /* Silently check whether there is an instance of the function with the
+    mode suffix given by MODE, the type suffixes given by TYPE0 and TYPE1,
+    and the group suffix given by GROUP.  Return its function decl if so,
+    otherwise return null.  */
+ tree
+ function_resolver::lookup_form (mode_suffix_index mode,
+ 				type_suffix_index type0,
+ 				type_suffix_index type1,
+ 				type_suffix_index type2,
+ 				group_suffix_index group)
+ {
+   type_suffix_triple types = { type0, type1, type2 };
+   function_instance instance (base_name, base, shape, mode, types, group, pred,
+ 			      fpm_mode);
+   registered_function *rfn
+     = function_table->find_with_hash (instance, instance.hash ());
+   return rfn ? rfn->decl : NULL_TREE;
+ }
+ 
+ /* Silently check whether there is an instance of the function that has the
+    mode suffix given by MODE and the type and group suffixes implied by TYPE.
+    If the overloaded function has an explicit first type suffix (like
+    conversions do), TYPE describes the implicit second type suffix.
+    Otherwise, TYPE describes the only type suffix.
+ 
+    Return the decl of the function if it exists, otherwise return null.  */
+ tree
+ function_resolver::lookup_form (mode_suffix_index mode, sve_type type)
+ {
+   type_suffix_index type0 = type_suffix_ids[0];
+   type_suffix_index type1 = type_suffix_ids[1];
+   type_suffix_index type2 = type_suffix_ids[2];
+   (type0 == NUM_TYPE_SUFFIXES ? type0 : type1) = type.type;
+ 
+   group_suffix_index group = group_suffix_id;
+   if (group == GROUP_none && type.num_vectors != vectors_per_tuple ())
+     group = num_vectors_to_group (type.num_vectors);
+ 
+   return lookup_form (mode, type0, type1, type2, group);
+ }
+ 
+ /* Resolve the function to one with the mode suffix given by MODE, the
+    type suffixes given by TYPE0 and TYPE1, and group suffix given by
+    GROUP.  Return its function decl on success, otherwise report an
+    error and return error_mark_node.  */
+ tree
+ function_resolver::resolve_to (mode_suffix_index mode,
+ 			       type_suffix_index type0,
+ 			       type_suffix_index type1,
+ 			       type_suffix_index type2,
+ 			       group_suffix_index group)
+ {
+   tree res = lookup_form (mode, type0, type1, type2, group);
+   if (!res)
+     {
+       if (type1 == NUM_TYPE_SUFFIXES)
+ 	return report_no_such_form (type0);
+       if (type0 == type_suffix_ids[0])
+ 	return report_no_such_form (type1);
+       error_at (location, "%qE has no form that takes %qT and %qT arguments",
+ 		fndecl, get_vector_type (type0), get_vector_type (type1));
+       return error_mark_node;
+     }
+   return res;
+ }
+ 
+ /* Resolve the function to one that has the suffixes associated with MODE
+    and TYPE; see lookup_form for how TYPE is interpreted.  Return the
+    function decl on success, otherwise report an error and return
+    error_mark_node.  */
+ tree
+ function_resolver::resolve_to (mode_suffix_index mode, sve_type type)
+ {
+   if (tree res = lookup_form (mode, type))
+     return res;
+ 
+   return report_no_such_form (type);
+ }
+ 
+ /* Like resolve_to, but used for a conversion function with the following
+    properties:
+ 
+    - The function has an explicit first type suffix.
+    - The elements of the argument (which has type TYPE) might be narrower
+      or wider than the elements of the return type.
+    - The return type has enough vectors to represent the converted value
+      of every element.
+    - The group suffix describes the wider of the argument type and the
+      return type.  */
+ tree
+ function_resolver::resolve_conversion (mode_suffix_index mode, sve_type type)
+ {
+   auto ret_type = type_suffix_ids[0];
+   unsigned int num_ret_vectors = (type.num_vectors
+ 				  * type_suffixes[ret_type].element_bits
+ 				  / type_suffixes[type.type].element_bits);
+   if (num_ret_vectors == 1
+       || num_ret_vectors == 2
+       || num_ret_vectors == 4)
+     {
+       unsigned int num_vectors = MAX (num_ret_vectors, type.num_vectors);
+       if (tree res = lookup_form (mode, { type.type, num_vectors }))
+ 	return res;
+     }
+   return report_no_such_form (type);
+ }
+ 
+ /* Require argument ARGNO to be an svbool_t or svcount_t predicate.
+    Return its type on success, otherwise report an error and return
+    NUM_VECTOR_TYPES.  */
+ vector_type_index
+ function_resolver::infer_predicate_type (unsigned int argno)
+ {
+   tree actual = get_argument_type (argno);
+   if (actual == error_mark_node)
+     return NUM_VECTOR_TYPES;
+ 
+   for (auto index : { VECTOR_TYPE_svbool_t, VECTOR_TYPE_svcount_t })
+     if (matches_type_p (acle_vector_types[0][index], actual))
+       return index;
+ 
+   error_at (location, "passing %qT to argument %d of %qE, which expects"
+ 	    " an %qs or %qs", actual, argno + 1, fndecl, "svbool_t",
+ 	    "svcount_t");
+   return NUM_VECTOR_TYPES;
+ }
+ 
+ /* Require argument ARGNO to be a 32-bit or 64-bit scalar integer type.
+    Return the associated type suffix on success, otherwise report an
+    error and return NUM_TYPE_SUFFIXES.  */
+ type_suffix_index
+ function_resolver::infer_integer_scalar_type (unsigned int argno)
+ {
+   tree actual = get_argument_type (argno);
+   if (actual == error_mark_node)
+     return NUM_TYPE_SUFFIXES;
+ 
+   /* Allow enums and booleans to decay to integers, for compatibility
+      with C++ overloading rules.  */
+   if (INTEGRAL_TYPE_P (actual))
+     {
+       bool uns_p = TYPE_UNSIGNED (actual);
+       /* Honor the usual integer promotions, so that resolution works
+ 	 in the same way as for C++.  */
+       if (TYPE_PRECISION (actual) < 32)
+ 	return TYPE_SUFFIX_s32;
+       if (TYPE_PRECISION (actual) == 32)
+ 	return uns_p ? TYPE_SUFFIX_u32 : TYPE_SUFFIX_s32;
+       if (TYPE_PRECISION (actual) == 64)
+ 	return uns_p ? TYPE_SUFFIX_u64 : TYPE_SUFFIX_s64;
+     }
+ 
+   error_at (location, "passing %qT to argument %d of %qE, which expects"
+ 	    " a 32-bit or 64-bit integer type", actual, argno + 1, fndecl);
+   return NUM_TYPE_SUFFIXES;
+ }
+ 
+ /* Return arguments ARGNO and ARGNO + 1 to be 64-bit scalar integers
+    of the same signedness, or be a combination that converts unambiguously
+    to such a pair.  Return the associated type suffix if they are,
+    otherwise report an error and return NUM_TYPE_SUFFIXES.  */
+ type_suffix_index
+ function_resolver::infer_64bit_scalar_integer_pair (unsigned int argno)
+ {
+   /* Require two scalar integers, with one having 64 bits and the other
+      one being no bigger.  */
+   tree types[] = { get_argument_type (argno), get_argument_type (argno + 1) };
+   if (!INTEGRAL_TYPE_P (types[0])
+       || !INTEGRAL_TYPE_P (types[1])
+       || MAX (TYPE_PRECISION (types[0]), TYPE_PRECISION (types[1])) != 64)
+     {
+       error_at (location, "passing %qT and %qT to arguments %d and %d of %qE,"
+ 		" which expects a pair of 64-bit integers", types[0], types[1],
+ 		argno + 1, argno + 2, fndecl);
+       return NUM_TYPE_SUFFIXES;
+     }
+ 
+   /* Allow signed integers smaller than int64_t to be paired with an int64_t.
+      Allow unsigned integers smaller than uint64_t to be paired with any
+      64-bit integer.  */
+   for (int i = 0; i < 2; ++i)
+     {
+       if (TYPE_PRECISION (types[i]) != 64)
+ 	continue;
+ 
+       if (TYPE_UNSIGNED (types[1 - i]) != TYPE_UNSIGNED (types[i]))
+ 	{
+ 	  if (TYPE_PRECISION (types[1 - i]) == 64)
+ 	    continue;
+ 	  if (!TYPE_UNSIGNED (types[1 - i]))
+ 	    continue;
+ 	}
+       return TYPE_UNSIGNED (types[i]) ? TYPE_SUFFIX_u64 : TYPE_SUFFIX_s64;
+     }
+ 
+   error_at (location, "passing mismatched integer types %qT and %qT"
+ 	    " to arguments %d and %d of %qE", types[0], types[1],
+ 	    argno + 1, argno + 2, fndecl);
+   return NUM_TYPE_SUFFIXES;
+ }
+ 
+ /* Require argument ARGNO to be a pointer to a scalar type that has a
+    corresponding type suffix.  Return that type suffix on success,
+    otherwise report an error and return NUM_TYPE_SUFFIXES.
+    GATHER_SCATTER_P is true if the function is a gather/scatter
+    operation.  RESTRICTIONS describes any additional restrictions
+    on the target type.  */
+ type_suffix_index
+ function_resolver::infer_pointer_type (unsigned int argno,
+ 				       bool gather_scatter_p,
+ 				       target_type_restrictions restrictions)
+ {
+   tree actual = get_argument_type (argno);
+   if (actual == error_mark_node)
+     return NUM_TYPE_SUFFIXES;
+ 
+   if (TREE_CODE (actual) != POINTER_TYPE)
+     {
+       error_at (location, "passing %qT to argument %d of %qE, which"
+ 		" expects a pointer type", actual, argno + 1, fndecl);
+       if (VECTOR_TYPE_P (actual) && gather_scatter_p)
+ 	inform (location, "an explicit type suffix is needed"
+ 		" when using a vector of base addresses");
+       return NUM_TYPE_SUFFIXES;
+     }
+ 
+   tree target = TREE_TYPE (actual);
+   type_suffix_index type = find_type_suffix_for_scalar_type (target);
+   if (type == NUM_TYPE_SUFFIXES)
+     {
+       error_at (location, "passing %qT to argument %d of %qE, but %qT is not"
+ 		" a valid SVE element type", actual, argno + 1, fndecl,
+ 		build_qualified_type (target, 0));
+       return NUM_TYPE_SUFFIXES;
+     }
+   unsigned int bits = type_suffixes[type].element_bits;
+   if (restrictions == TARGET_32_64 && bits != 32 && bits != 64)
+     {
+       error_at (location, "passing %qT to argument %d of %qE, which"
+ 		" expects a pointer to 32-bit or 64-bit elements",
+ 		actual, argno + 1, fndecl);
+       return NUM_TYPE_SUFFIXES;
+     }
+   if (displacement_units () == UNITS_elements && bits == 8)
+     {
+       error_at (location, "passing %qT to argument %d of %qE, which"
+ 		" expects the data to be 16 bits or wider",
+ 		actual, argno + 1, fndecl);
+       inform (location, "use the %<offset%> rather than %<index%> form"
+ 	      " for 8-bit data");
+       return NUM_TYPE_SUFFIXES;
+     }
+ 
+   return type;
+ }
+ 
+ /* If TYPE is an SVE predicate or vector type, or a tuple of such a type,
+    return the associated sve_type, otherwise return an invalid sve_type.  */
+ static sve_type
+ find_sve_type (const_tree type)
+ {
+   /* A linear search should be OK here, since the code isn't hot and
+      the number of types is only small.  */
+   for (unsigned int size_i = 0; size_i < MAX_TUPLE_SIZE; ++size_i)
+     for (unsigned int suffix_i = 0; suffix_i < NUM_TYPE_SUFFIXES; ++suffix_i)
+       {
+ 	vector_type_index type_i = type_suffixes[suffix_i].vector_type;
+ 	tree this_type = acle_vector_types[size_i][type_i];
+ 	if (this_type && matches_type_p (this_type, type))
+ 	  return { type_suffix_index (suffix_i), size_i + 1 };
+       }
+ 
+   return {};
+ }
+ 
+ /* Require argument ARGNO to be an SVE type (i.e. something that can be
+    represented by sve_type).  Return the (valid) type if it is, otherwise
+    report an error and return an invalid type.  */
+ sve_type
+ function_resolver::infer_sve_type (unsigned int argno)
+ {
+   tree actual = get_argument_type (argno);
+   if (actual == error_mark_node)
+     return {};
+ 
+   if (sve_type type = find_sve_type (actual))
+     return type;
+ 
+   if (scalar_argument_p (argno))
+     error_at (location, "passing %qT to argument %d of %qE, which"
+ 	      " expects an SVE type rather than a scalar type",
+ 	      actual, argno + 1, fndecl);
+   else
+     error_at (location, "passing %qT to argument %d of %qE, which"
+ 	      " expects an SVE type",
+ 	      actual, argno + 1, fndecl);
+   return {};
+ }
+ 
+ /* Require argument ARGNO to be a single vector or a tuple of NUM_VECTORS
+    vectors; NUM_VECTORS is 1 for the former.  Return the associated type
+    on success.  Report an error on failure.  */
+ sve_type
+ function_resolver::infer_vector_or_tuple_type (unsigned int argno,
+ 					       unsigned int num_vectors)
+ {
+   auto type = infer_sve_type (argno);
+   if (!type)
+     return type;
+ 
+   if (type.num_vectors == num_vectors)
+     return type;
+ 
+   report_incorrect_num_vectors (argno, type, num_vectors);
+   return {};
+ }
+ 
+ /* Require argument ARGNO to have some form of vector type.  Return the
+    associated type suffix on success, using TYPE_SUFFIX_b for predicates.
+    Report an error and return NUM_TYPE_SUFFIXES on failure.  */
+ type_suffix_index
+ function_resolver::infer_vector_type (unsigned int argno)
+ {
+   if (auto type = infer_vector_or_tuple_type (argno, 1))
+     return type.type;
+   return NUM_TYPE_SUFFIXES;
+ }
+ 
+ /* Like infer_vector_type, but also require the type to be integral.  */
+ type_suffix_index
+ function_resolver::infer_integer_vector_type (unsigned int argno)
+ {
+   type_suffix_index type = infer_vector_type (argno);
+   if (type == NUM_TYPE_SUFFIXES)
+     return type;
+ 
+   if (!type_suffixes[type].integer_p)
+     {
+       error_at (location, "passing %qT to argument %d of %qE, which"
+ 		" expects a vector of integers", get_argument_type (argno),
+ 		argno + 1, fndecl);
+       return NUM_TYPE_SUFFIXES;
+     }
+ 
+   return type;
+ }
+ 
+ /* Require argument ARGNO to have some form of NEON128 vector type.  Return the
+    associated type suffix on success.
+    Report an error and return NUM_TYPE_SUFFIXES on failure.  */
+ type_suffix_index
+ function_resolver::infer_neon128_vector_type (unsigned int argno)
+ {
+   tree actual = get_argument_type (argno);
+   if (actual == error_mark_node)
+     return NUM_TYPE_SUFFIXES;
+ 
+   for (unsigned int suffix_i = 0; suffix_i < NUM_TYPE_SUFFIXES; ++suffix_i)
+     {
+       int neon_index = type_suffixes[suffix_i].neon128_type;
+       if (neon_index != ARM_NEON_H_TYPES_LAST)
+ 	{
+ 	  tree type = aarch64_simd_types_trees[neon_index].itype;
+ 	  if (type && matches_type_p (type, actual))
+ 	    return type_suffix_index (suffix_i);
+ 	}
+     }
+ 
+   error_at (location, "passing %qT to argument %d of %qE, which"
+ 	    " expects a 128 bit NEON vector type", actual, argno + 1, fndecl);
+   return NUM_TYPE_SUFFIXES;
+ }
+ 
+ 
+ /* Like infer_vector_type, but also require the type to be an unsigned
+    integer.  */
+ type_suffix_index
+ function_resolver::infer_unsigned_vector_type (unsigned int argno)
+ {
+   type_suffix_index type = infer_vector_type (argno);
+   if (type == NUM_TYPE_SUFFIXES)
+     return type;
+ 
+   if (!type_suffixes[type].unsigned_p)
+     {
+       error_at (location, "passing %qT to argument %d of %qE, which"
+ 		" expects a vector of unsigned integers",
+ 		get_argument_type (argno), argno + 1, fndecl);
+       return NUM_TYPE_SUFFIXES;
+     }
+ 
+   return type;
+ }
+ 
+ /* Like infer_vector_type, but also require the element size to be
+    32 or 64 bits.  */
+ type_suffix_index
+ function_resolver::infer_sd_vector_type (unsigned int argno)
+ {
+   type_suffix_index type = infer_vector_type (argno);
+   if (type == NUM_TYPE_SUFFIXES)
+     return type;
+ 
+   unsigned int bits = type_suffixes[type].element_bits;
+   if (bits != 32 && bits != 64)
+     {
+       error_at (location, "passing %qT to argument %d of %qE, which"
+ 		" expects a vector of 32-bit or 64-bit elements",
+ 		get_argument_type (argno), argno + 1, fndecl);
+       return NUM_TYPE_SUFFIXES;
+     }
+ 
+   return type;
+ }
+ 
+ /* If the function operates on tuples of vectors, require argument ARGNO to be
+    a tuple with the appropriate number of vectors, otherwise require it to be
+    a single vector.  Return the associated type on success.  Report an error
+    on failure.  */
+ sve_type
+ function_resolver::infer_tuple_type (unsigned int argno)
+ {
+   return infer_vector_or_tuple_type (argno, vectors_per_tuple ());
+ }
+ 
+ /* PRED_TYPE is the type of a governing predicate argument and DATA_TYPE
+    is the type of an argument that it predicates.  Require the two types
+    to "agree": svcount_t must be used for multiple vectors and svbool_t
+    for single vectors.
+ 
+    Return true if they do agree, otherwise report an error and
+    return false.  */
+ bool function_resolver::
+ require_matching_predicate_type (vector_type_index pred_type,
+ 				 sve_type data_type)
+ {
+   if (pred_type == VECTOR_TYPE_svbool_t && data_type.num_vectors == 1)
+     return true;
+ 
+   if (pred_type == VECTOR_TYPE_svcount_t && data_type.num_vectors != 1)
+     return true;
+ 
+   /* Make sure that FIRST_TYPE itself is sensible before using it
+      as a basis for an error message.  */
+   if (resolve_to (mode_suffix_id, data_type) == error_mark_node)
+     return false;
+ 
+   if (data_type.num_vectors > 1)
+     error_at (location, "operations on multiple vectors must be predicated"
+ 	      " by %qs rather than %qs", "svcount_t", "svbool_t");
+   else
+     error_at (location, "operations on single vectors must be predicated"
+ 	      " by %qs rather than %qs", "svbool_t", "svcount_t");
+   return false;
+ }
+ 
+ /* Require argument ARGNO to be a vector or scalar argument.  Return true
+    if it is, otherwise report an appropriate error.  */
+ bool
+ function_resolver::require_vector_or_scalar_type (unsigned int argno)
+ {
+   tree actual = get_argument_type (argno);
+   if (actual == error_mark_node)
+     return false;
+ 
+   if (!scalar_argument_p (argno) && !VECTOR_TYPE_P (actual))
+     {
+       error_at (location, "passing %qT to argument %d of %qE, which"
+ 		" expects a vector or scalar type", actual, argno + 1, fndecl);
+       return false;
+     }
+ 
+   return true;
+ }
+ 
+ /* Require argument ARGNO to have vector type TYPE, in cases where this
+    requirement holds for all uses of the function.  Return true if the
+    argument has the right form, otherwise report an appropriate error.  */
+ bool
+ function_resolver::require_vector_type (unsigned int argno,
+ 					vector_type_index type)
+ {
+   tree expected = acle_vector_types[0][type];
+   tree actual = get_argument_type (argno);
+   if (actual == error_mark_node)
+     return false;
+ 
+   if (!matches_type_p (expected, actual))
+     {
+       error_at (location, "passing %qT to argument %d of %qE, which"
+ 		" expects %qT", actual, argno + 1, fndecl, expected);
+       return false;
+     }
+   return true;
+ }
+ 
+ /* Like require_vector_type, but TYPE is inferred from argument FIRST_ARGNO
+    rather than being a fixed part of the function signature.  This changes
+    the nature of the error messages.  */
+ bool
+ function_resolver::require_matching_vector_type (unsigned int argno,
+ 						 unsigned int first_argno,
+ 						 sve_type type)
+ {
+   sve_type new_type = infer_sve_type (argno);
+   if (!new_type)
+     return false;
+ 
+   if (type.num_vectors != new_type.num_vectors)
+     {
+       report_mismatched_num_vectors (first_argno, type, argno, new_type);
+       return false;
+     }
+ 
+   if (type != new_type)
+     {
+       error_at (location, "passing %qT to argument %d of %qE, but"
+ 		" argument %d had type %qT",
+ 		get_vector_type (new_type), argno + 1, fndecl,
+ 		first_argno + 1, get_vector_type (type));
+       return false;
+     }
+   return true;
+ }
+ 
+ /* Require argument ARGNO to be a vector or tuple type with the following
+    properties:
+ 
+    - the type class must be the same as FIRST_TYPE's if EXPECTED_TCLASS
+      is SAME_TYPE_CLASS, otherwise it must be EXPECTED_TCLASS itself.
+ 
+    - the element size must be:
+ 
+      - the same as FIRST_TYPE's if EXPECTED_BITS == SAME_SIZE
+      - half of FIRST_TYPE's if EXPECTED_BITS == HALF_SIZE
+      - a quarter of FIRST_TYPE's if EXPECTED_BITS == QUARTER_SIZE
+      - EXPECTED_BITS itself otherwise
+ 
+    - the number of vectors must be the same as FIRST_TYPE's if
+      EXPECTED_NUM_VECTORS is zero, otherwise it must be EXPECTED_NUM_VECTORS.
+ 
+    Return true if the argument has the required type, otherwise report
+    an appropriate error.
+ 
+    FIRST_ARGNO is the first argument that is known to have type FIRST_TYPE.
+    Usually it comes before ARGNO, but sometimes it is more natural to resolve
+    arguments out of order.
+ 
+    If the required properties depend on FIRST_TYPE then both FIRST_ARGNO and
+    ARGNO contribute to the resolution process.  If the required properties
+    are fixed, only FIRST_ARGNO contributes to the resolution process.
+ 
+    This function is a bit of a Swiss army knife.  The complication comes
+    from trying to give good error messages when FIRST_ARGNO and ARGNO are
+    inconsistent, since either of them might be wrong.  */
+ bool function_resolver::
+ require_derived_vector_type (unsigned int argno,
+ 			     unsigned int first_argno,
+ 			     sve_type first_type,
+ 			     type_class_index expected_tclass,
+ 			     unsigned int expected_bits,
+ 			     unsigned int expected_num_vectors)
+ {
+   /* If the type needs to match FIRST_ARGNO exactly, use the preferred
+      error message for that case.  */
+   if (expected_tclass == SAME_TYPE_CLASS
+       && expected_bits == SAME_SIZE
+       && expected_num_vectors == 0)
+     {
+       /* There's no need to resolve this case out of order.  */
+       gcc_assert (argno > first_argno);
+       return require_matching_vector_type (argno, first_argno, first_type);
+     }
+ 
+   /* Use FIRST_TYPE to get the expected type class and element size.  */
+   auto &first_type_suffix = type_suffixes[first_type.type];
+   type_class_index orig_expected_tclass = expected_tclass;
+   if (expected_tclass == NUM_TYPE_CLASSES)
+     expected_tclass = first_type_suffix.tclass;
+ 
+   unsigned int orig_expected_bits = expected_bits;
+   if (expected_bits == SAME_SIZE)
+     expected_bits = first_type_suffix.element_bits;
+   else if (expected_bits == HALF_SIZE)
+     expected_bits = first_type_suffix.element_bits / 2;
+   else if (expected_bits == QUARTER_SIZE)
+     expected_bits = first_type_suffix.element_bits / 4;
+ 
+   unsigned int orig_expected_num_vectors = expected_num_vectors;
+   if (expected_num_vectors == 0)
+     expected_num_vectors = first_type.num_vectors;
+ 
+   /* If the expected type doesn't depend on FIRST_TYPE at all,
+      just check for the fixed choice of vector type.  */
+   if (expected_tclass == orig_expected_tclass
+       && expected_bits == orig_expected_bits
+       && orig_expected_num_vectors == 1)
+     {
+       const type_suffix_info &expected_suffix
+ 	= type_suffixes[find_type_suffix (expected_tclass, expected_bits)];
+       return require_vector_type (argno, expected_suffix.vector_type);
+     }
+ 
+   /* Require the argument to be some form of SVE vector type,
+      without being specific about the type of vector we want.  */
+   sve_type actual_type = infer_sve_type (argno);
+   if (!actual_type)
+     return false;
+ 
+   if (actual_type.num_vectors != expected_num_vectors)
+     {
+       if (orig_expected_num_vectors == 0)
+ 	report_mismatched_num_vectors (first_argno, first_type,
+ 				       argno, actual_type);
+       else
+ 	report_incorrect_num_vectors (argno, actual_type,
+ 				      expected_num_vectors);
+       return false;
+     }
+ 
+   if (orig_expected_tclass == SAME_TYPE_CLASS
+       && orig_expected_bits == SAME_SIZE)
+     {
+       if (actual_type.type == first_type.type)
+ 	return true;
+ 
+       if (first_type.num_vectors > 1)
+ 	error_at (location, "passing %qT to argument %d of %qE, but"
+ 		  " argument %d was a tuple of %qT",
+ 		  get_vector_type (actual_type), argno + 1, fndecl,
+ 		  first_argno + 1, get_vector_type (first_type.type));
+       else
+ 	error_at (location, "passing %qT to argument %d of %qE, but"
+ 		  " argument %d had type %qT",
+ 		  get_vector_type (actual_type), argno + 1, fndecl,
+ 		  first_argno + 1, get_vector_type (first_type));
+       return false;
+     }
+ 
+   /* Exit now if we got the right type.  */
+   auto &actual_type_suffix = type_suffixes[actual_type.type];
+   bool tclass_ok_p = (actual_type_suffix.tclass == expected_tclass);
+   bool size_ok_p = (actual_type_suffix.element_bits == expected_bits);
+   if (tclass_ok_p && size_ok_p)
+     return true;
+ 
+   /* First look for cases in which the actual type contravenes a fixed
+      size requirement, without having to refer to FIRST_TYPE.  */
+   if (!size_ok_p && expected_bits == orig_expected_bits)
+     {
+       if (expected_num_vectors == 1)
+ 	error_at (location, "passing %qT to argument %d of %qE, which"
+ 		  " expects a vector of %d-bit elements",
+ 		  get_vector_type (actual_type), argno + 1, fndecl,
+ 		  expected_bits);
+       else
+ 	error_at (location, "passing %qT to argument %d of %qE, which"
+ 		  " expects vectors of %d-bit elements",
+ 		  get_vector_type (actual_type), argno + 1, fndecl,
+ 		  expected_bits);
+       return false;
+     }
+ 
+   /* Likewise for a fixed type class requirement.  This is only ever
+      needed for signed and unsigned types, so don't create unnecessary
+      translation work for other type classes.  */
+   if (!tclass_ok_p && orig_expected_tclass == TYPE_signed)
+     {
+       if (expected_num_vectors == 1)
+ 	error_at (location, "passing %qT to argument %d of %qE, which"
+ 		  " expects a vector of signed integers",
+ 		  get_vector_type (actual_type), argno + 1, fndecl);
+       else
+ 	/* Translation note: could also be written "expects a tuple of
+ 	   signed integer vectors".  */
+ 	error_at (location, "passing %qT to argument %d of %qE, which"
+ 		  " expects vectors of signed integers",
+ 		  get_vector_type (actual_type), argno + 1, fndecl);
+       return false;
+     }
+   if (!tclass_ok_p && orig_expected_tclass == TYPE_unsigned)
+     {
+       if (expected_num_vectors == 1)
+ 	error_at (location, "passing %qT to argument %d of %qE, which"
+ 		  " expects a vector of unsigned integers",
+ 		  get_vector_type (actual_type), argno + 1, fndecl);
+       else
+ 	/* Translation note: could also be written "expects a tuple of
+ 	   unsigned integer vectors".  */
+ 	error_at (location, "passing %qT to argument %d of %qE, which"
+ 		  " expects vectors of unsigned integers",
+ 		  get_vector_type (actual_type), argno + 1, fndecl);
+       return false;
+     }
+ 
+   /* Make sure that FIRST_TYPE itself is sensible before using it
+      as a basis for an error message.  */
+   if (resolve_to (mode_suffix_id, first_type) == error_mark_node)
+     return false;
+ 
+   /* If the arguments have consistent type classes, but a link between
+      the sizes has been broken, try to describe the error in those terms.  */
+   if (tclass_ok_p && orig_expected_bits == SAME_SIZE)
+     {
+       if (argno < first_argno)
+ 	{
+ 	  std::swap (argno, first_argno);
+ 	  std::swap (actual_type, first_type);
+ 	}
+       error_at (location, "arguments %d and %d of %qE must have the"
+ 		" same element size, but the values passed here have type"
+ 		" %qT and %qT respectively", first_argno + 1, argno + 1,
+ 		fndecl, get_vector_type (first_type),
+ 		get_vector_type (actual_type));
+       return false;
+     }
+ 
+   /* Likewise in reverse: look for cases in which the sizes are consistent
+      but a link between the type classes has been broken.  */
+   if (size_ok_p
+       && orig_expected_tclass == SAME_TYPE_CLASS
+       && first_type_suffix.integer_p
+       && actual_type_suffix.integer_p)
+     {
+       if (argno < first_argno)
+ 	{
+ 	  std::swap (argno, first_argno);
+ 	  std::swap (actual_type, first_type);
+ 	}
+       error_at (location, "arguments %d and %d of %qE must have the"
+ 		" same signedness, but the values passed here have type"
+ 		" %qT and %qT respectively", first_argno + 1, argno + 1,
+ 		fndecl, get_vector_type (first_type),
+ 		get_vector_type (actual_type));
+       return false;
+     }
+ 
+   /* The two arguments are wildly inconsistent.  */
+   type_suffix_index expected_type
+     = find_type_suffix (expected_tclass, expected_bits);
+   error_at (location, "passing %qT instead of the expected %qT to argument"
+ 	    " %d of %qE, after passing %qT to argument %d",
+ 	    get_vector_type (actual_type), get_vector_type (expected_type),
+ 	    argno + 1, fndecl, get_argument_type (first_argno),
+ 	    first_argno + 1);
+   return false;
+ }
+ 
+ /* Require argument ARGNO to match argument FIRST_ARGNO, which was inferred
+    to be a pointer to a scalar element of type TYPE.  */
+ bool
+ function_resolver::require_matching_pointer_type (unsigned int argno,
+ 						  unsigned int first_argno,
+ 						  type_suffix_index type)
+ {
+   type_suffix_index new_type = infer_pointer_type (argno);
+   if (new_type == NUM_TYPE_SUFFIXES)
+     return false;
+ 
+   if (type != new_type)
+     {
+       error_at (location, "passing %qT to argument %d of %qE, but"
+ 		" argument %d had type %qT", get_argument_type (argno),
+ 		argno + 1, fndecl, first_argno + 1,
+ 		get_argument_type (first_argno));
+       return false;
+     }
+   return true;
+ }
+ 
+ /* Require argument ARGNO to be a (possibly variable) scalar, using EXPECTED
+    as the name of its expected type.  Return true if the argument has the
+    right form, otherwise report an appropriate error.  */
+ bool
+ function_resolver::require_scalar_type (unsigned int argno,
+ 					const char *expected)
+ {
+   if (!scalar_argument_p (argno))
+     {
+       if (expected)
+ 	error_at (location, "passing %qT to argument %d of %qE, which"
+ 		  " expects %qs", get_argument_type (argno), argno + 1,
+ 		  fndecl, expected);
+       return false;
+     }
+   return true;
+ }
+ 
+ /* Require argument ARGNO to be a nonscalar type, given that it has already
+    passed require_vector_or_scalar_type.  Return true if it is, otherwise
+    report an error.  This is used when two sets of instructions share the
+    same overloaded function and one accepts scalars while the other
+    doesn't.  */
+ bool
+ function_resolver::require_nonscalar_type (unsigned int argno)
+ {
+   if (scalar_argument_p (argno))
+     {
+       error_at (location, "passing %qT to argument %d of %qE, which"
+ 		" does not accept scalars for this combination of arguments",
+ 		get_argument_type (argno), argno + 1, fndecl);
+       return false;
+     }
+   return true;
+ }
+ 
+ /* Require argument ARGNO to be some form of pointer, without being specific
+    about its target type.  Return true if the argument has the right form,
+    otherwise report an appropriate error.  */
+ bool
+ function_resolver::require_pointer_type (unsigned int argno)
+ {
+   if (!scalar_argument_p (argno))
+     {
+       error_at (location, "passing %qT to argument %d of %qE, which"
+ 		" expects a scalar pointer", get_argument_type (argno),
+ 		argno + 1, fndecl);
+       return false;
+     }
+   return true;
+ }
+ 
+ /* Argument FIRST_ARGNO is a scalar with type EXPECTED_TYPE, and argument
+    ARGNO should be consistent with it.  Return true if it is, otherwise
+    report an appropriate error.  */
+ bool function_resolver::
+ require_matching_integer_scalar_type (unsigned int argno,
+ 				      unsigned int first_argno,
+ 				      type_suffix_index expected_type)
+ {
+   type_suffix_index actual_type = infer_integer_scalar_type (argno);
+   if (actual_type == NUM_TYPE_SUFFIXES)
+     return false;
+ 
+   if (actual_type == expected_type)
+     return true;
+ 
+   error_at (location, "call to %qE is ambiguous; argument %d has type"
+ 	    " %qs but argument %d has type %qs", fndecl,
+ 	    first_argno + 1, get_scalar_type_name (expected_type),
+ 	    argno + 1, get_scalar_type_name (actual_type));
+   return false;
+ }
+ 
+ /* Require argument ARGNO to be a (possibly variable) scalar, expecting it
+    to have the following properties:
+ 
+    - the type class must be the same as for type suffix 0 if EXPECTED_TCLASS
+      is SAME_TYPE_CLASS, otherwise it must be EXPECTED_TCLASS itself.
+ 
+    - the element size must be the same as for type suffix 0 if EXPECTED_BITS
+      is SAME_TYPE_SIZE, otherwise it must be EXPECTED_BITS itself.
+ 
+    Return true if the argument is valid, otherwise report an appropriate error.
+ 
+    Note that we don't check whether the scalar type actually has the required
+    properties, since that's subject to implicit promotions and conversions.
+    Instead we just use the expected properties to tune the error message.  */
+ bool function_resolver::
+ require_derived_scalar_type (unsigned int argno,
+ 			     type_class_index expected_tclass,
+ 			     unsigned int expected_bits)
+ {
+   gcc_assert (expected_tclass == SAME_TYPE_CLASS
+ 	      || expected_tclass == TYPE_signed
+ 	      || expected_tclass == TYPE_unsigned);
+ 
+   /* If the expected type doesn't depend on the type suffix at all,
+      just check for the fixed choice of scalar type.  */
+   if (expected_tclass != SAME_TYPE_CLASS && expected_bits != SAME_SIZE)
+     {
+       type_suffix_index expected_type
+ 	= find_type_suffix (expected_tclass, expected_bits);
+       return require_scalar_type (argno, get_scalar_type_name (expected_type));
+     }
+ 
+   if (scalar_argument_p (argno))
+     return true;
+ 
+   if (expected_tclass == SAME_TYPE_CLASS)
+     /* It doesn't really matter whether the element is expected to be
+        the same size as type suffix 0.  */
+     error_at (location, "passing %qT to argument %d of %qE, which"
+ 	      " expects a scalar element", get_argument_type (argno),
+ 	      argno + 1, fndecl);
+   else
+     /* It doesn't seem useful to distinguish between signed and unsigned
+        scalars here.  */
+     error_at (location, "passing %qT to argument %d of %qE, which"
+ 	      " expects a scalar integer", get_argument_type (argno),
+ 	      argno + 1, fndecl);
+   return false;
+ }
+ 
+ /* Require argument ARGNO to be suitable for an integer constant expression.
+    Return true if it is, otherwise report an appropriate error.
+ 
+    function_checker checks whether the argument is actually constant and
+    has a suitable range.  The reason for distinguishing immediate arguments
+    here is because it provides more consistent error messages than
+    require_scalar_type would.  */
+ bool
+ function_resolver::require_integer_immediate (unsigned int argno)
+ {
+   if (!scalar_argument_p (argno))
+     {
+       report_non_ice (location, fndecl, argno);
+       return false;
+     }
+   return true;
+ }
+ 
+ /* Require argument ARGNO to be a vector base in a gather-style address.
+    Return its type on success, otherwise return NUM_VECTOR_TYPES.  */
+ vector_type_index
+ function_resolver::infer_vector_base_type (unsigned int argno)
+ {
+   type_suffix_index type = infer_vector_type (argno);
+   if (type == NUM_TYPE_SUFFIXES)
+     return NUM_VECTOR_TYPES;
+ 
+   if (type == TYPE_SUFFIX_u32 || type == TYPE_SUFFIX_u64)
+     return type_suffixes[type].vector_type;
+ 
+   error_at (location, "passing %qT to argument %d of %qE, which"
+ 	    " expects %qs or %qs", get_argument_type (argno),
+ 	    argno + 1, fndecl, "svuint32_t", "svuint64_t");
+   return NUM_VECTOR_TYPES;
+ }
+ 
+ /* Require argument ARGNO to be a vector displacement in a gather-style
+    address.  Return its type on success, otherwise return NUM_VECTOR_TYPES.  */
+ vector_type_index
+ function_resolver::infer_vector_displacement_type (unsigned int argno)
+ {
+   type_suffix_index type = infer_integer_vector_type (argno);
+   if (type == NUM_TYPE_SUFFIXES)
+     return NUM_VECTOR_TYPES;
+ 
+   if (type_suffixes[type].integer_p
+       && (type_suffixes[type].element_bits == 32
+ 	  || type_suffixes[type].element_bits == 64))
+     return type_suffixes[type].vector_type;
+ 
+   error_at (location, "passing %qT to argument %d of %qE, which"
+ 	    " expects a vector of 32-bit or 64-bit integers",
+ 	    get_argument_type (argno), argno + 1, fndecl);
+   return NUM_VECTOR_TYPES;
+ }
+ 
+ /* Require argument ARGNO to be a vector displacement in a gather-style
+    address.  There are three possible uses:
+ 
+    - for loading into elements of type TYPE (when LOAD_P is true)
+    - for storing from elements of type TYPE (when LOAD_P is false)
+    - for prefetching data (when TYPE is NUM_TYPE_SUFFIXES)
+ 
+    The overloaded function's mode suffix determines the units of the
+    displacement (bytes for "_offset", elements for "_index").
+ 
+    Return the associated mode on success, otherwise report an error
+    and return MODE_none.  */
+ mode_suffix_index
+ function_resolver::resolve_sv_displacement (unsigned int argno,
+ 					    type_suffix_index type,
+ 					    bool load_p)
+ {
+   if (type == NUM_TYPE_SUFFIXES)
+     {
+       /* For prefetches, the base is a void pointer and the displacement
+ 	 can be any valid offset or index type.  */
+       vector_type_index displacement_vector_type
+ 	= infer_vector_displacement_type (argno);
+       if (displacement_vector_type == NUM_VECTOR_TYPES)
+ 	return MODE_none;
+ 
+       mode_suffix_index mode = find_mode_suffix (NUM_VECTOR_TYPES,
+ 						 displacement_vector_type,
+ 						 displacement_units ());
+       gcc_assert (mode != MODE_none);
+       return mode;
+     }
+ 
+   auto base_type = shape->vector_base_type (type);
+   unsigned int required_bits = type_suffixes[base_type].element_bits;
+   if (required_bits == 32
+       && displacement_units () == UNITS_elements
+       && !lookup_form (MODE_s32index, type)
+       && !lookup_form (MODE_u32index, type))
+     {
+       if (lookup_form (MODE_u32base_index, type))
+ 	{
+ 	  if (type_suffix_ids[0] == NUM_TYPE_SUFFIXES)
+ 	    {
+ 	      gcc_assert (!load_p);
+ 	      error_at (location, "when storing %qT, %qE requires a vector"
+ 			" base and a scalar index", get_vector_type (type),
+ 			fndecl);
+ 	    }
+ 	  else
+ 	    error_at (location, "%qE requires a vector base and a scalar"
+ 		      " index", fndecl);
+ 	}
+       else
+ 	error_at (location, "%qE does not support 32-bit vector type %qT",
+ 		  fndecl, get_vector_type (type));
+       return MODE_none;
+     }
+ 
+   /* Check for some form of vector type, without naming any in particular
+      as being expected.  */
+   type_suffix_index displacement_type = infer_vector_type (argno);
+   if (displacement_type == NUM_TYPE_SUFFIXES)
+     return MODE_none;
+ 
+   /* If the displacement type is consistent with the data vector type,
+      try to find the associated mode suffix.  This will fall through
+      for non-integral displacement types.  */
+   if (type_suffixes[displacement_type].element_bits == required_bits)
+     {
+       vector_type_index displacement_vector_type
+ 	= type_suffixes[displacement_type].vector_type;
+       mode_suffix_index mode = find_mode_suffix (NUM_VECTOR_TYPES,
+ 						 displacement_vector_type,
+ 						 displacement_units ());
+       if (mode != MODE_none)
+ 	{
+ 	  if (mode == MODE_s32offset
+ 	      && !lookup_form (mode, type)
+ 	      && lookup_form (MODE_u32offset, type))
+ 	    {
+ 	      if (type_suffix_ids[0] == NUM_TYPE_SUFFIXES)
+ 		error_at (location, "%qE does not support 32-bit sign-extended"
+ 			  " offsets", fndecl);
+ 	      else
+ 		error_at (location, "%qE does not support sign-extended"
+ 			  " offsets", fndecl);
+ 	      return MODE_none;
+ 	    }
+ 	  return mode;
+ 	}
+     }
+ 
+   if (type_suffix_ids[0] == NUM_TYPE_SUFFIXES
+       && shape->vector_base_type (TYPE_SUFFIX_u32) == TYPE_SUFFIX_u32)
+     {
+       /* TYPE has been inferred rather than specified by the user,
+ 	 so mention it in the error messages.  */
+       if (load_p)
+ 	error_at (location, "passing %qT to argument %d of %qE, which when"
+ 		  " loading %qT expects a vector of %d-bit integers",
+ 		  get_argument_type (argno), argno + 1, fndecl,
+ 		  get_vector_type (type), required_bits);
+       else
+ 	error_at (location, "passing %qT to argument %d of %qE, which when"
+ 		  " storing %qT expects a vector of %d-bit integers",
+ 		  get_argument_type (argno), argno + 1, fndecl,
+ 		  get_vector_type (type), required_bits);
+     }
+   else
+     /* TYPE is part of the function name.  */
+     error_at (location, "passing %qT to argument %d of %qE, which"
+ 	      " expects a vector of %d-bit integers",
+ 	      get_argument_type (argno), argno + 1, fndecl, required_bits);
+   return MODE_none;
+ }
+ 
+ /* Require the arguments starting at ARGNO to form a gather-style address.
+    There are three possible uses:
+ 
+    - for loading into elements of type TYPE (when LOAD_P is true)
+    - for storing from elements of type TYPE (when LOAD_P is false)
+    - for prefetching data (when TYPE is NUM_TYPE_SUFFIXES)
+ 
+    The three possible addresses are:
+ 
+    - a vector base with no displacement
+    - a vector base and a scalar displacement
+    - a scalar (pointer) base and a vector displacement
+ 
+    The overloaded function's mode suffix determines whether there is
+    a displacement, and if so, what units it uses:
+ 
+    - MODE_none: no displacement
+    - MODE_offset: the displacement is measured in bytes
+    - MODE_index: the displacement is measured in elements
+ 
+    Return the mode of the non-overloaded function on success, otherwise
+    report an error and return MODE_none.  */
+ mode_suffix_index
+ function_resolver::resolve_gather_address (unsigned int argno,
+ 					   type_suffix_index type,
+ 					   bool load_p)
+ {
+   tree actual = get_argument_type (argno);
+   if (actual == error_mark_node)
+     return MODE_none;
+ 
+   if (displacement_units () != UNITS_none)
+     {
+       /* Some form of displacement is needed.  First handle a scalar
+ 	 pointer base and a vector displacement.  */
+       if (scalar_argument_p (argno))
+ 	/* Don't check the pointer type here, since there's only one valid
+ 	   choice.  Leave that to the frontend.  */
+ 	return resolve_sv_displacement (argno + 1, type, load_p);
+ 
+       if (!VECTOR_TYPE_P (actual))
+ 	{
+ 	  error_at (location, "passing %qT to argument %d of %qE,"
+ 		    " which expects a vector or pointer base address",
+ 		    actual, argno + 1, fndecl);
+ 	  return MODE_none;
+ 	}
+     }
+ 
+   /* Check for the correct choice of vector base type.  */
+   vector_type_index base_vector_type;
+   if (type == NUM_TYPE_SUFFIXES)
+     {
+       /* Since prefetches have no type suffix, there is a free choice
+ 	 between 32-bit and 64-bit base addresses.  */
+       base_vector_type = infer_vector_base_type (argno);
+       if (base_vector_type == NUM_VECTOR_TYPES)
+ 	return MODE_none;
+     }
+   else
+     {
+       /* Check for some form of vector type, without saying which type
+ 	 we expect.  */
+       type_suffix_index base_type = infer_vector_type (argno);
+       if (base_type == NUM_TYPE_SUFFIXES)
+ 	return MODE_none;
+ 
+       /* Check whether the type is the right one.  */
+       auto required_type = shape->vector_base_type (type);
+       if (required_type != base_type)
+ 	{
+ 	  error_at (location, "passing %qT to argument %d of %qE,"
+ 		    " which expects %qT", actual, argno + 1, fndecl,
+ 		    get_vector_type (required_type));
+ 	  return MODE_none;
+ 	}
+       base_vector_type = type_suffixes[base_type].vector_type;
+     }
+ 
+   /* Check the scalar displacement, if any.  */
+   if (displacement_units () != UNITS_none
+       && !require_scalar_type (argno + 1, "int64_t"))
+     return MODE_none;
+ 
+   /* Find the appropriate mode suffix.  The checks above should have
+      weeded out all erroneous cases.  */
+   for (unsigned int mode_i = 0; mode_i < ARRAY_SIZE (mode_suffixes); ++mode_i)
+     {
+       const mode_suffix_info &mode = mode_suffixes[mode_i];
+       if (mode.base_vector_type == base_vector_type
+ 	  && mode.displacement_vector_type == NUM_VECTOR_TYPES
+ 	  && mode.displacement_units == displacement_units ())
+ 	return mode_suffix_index (mode_i);
+     }
+ 
+   gcc_unreachable ();
+ }
+ 
+ /* Require arguments ARGNO and ARGNO + 1 to form an ADR-style address,
+    i.e. one with a vector of base addresses and a vector of displacements.
+    The overloaded function's mode suffix determines the units of the
+    displacement (bytes for "_offset", elements for "_index").
+ 
+    Return the associated mode suffix on success, otherwise report
+    an error and return MODE_none.  */
+ mode_suffix_index
+ function_resolver::resolve_adr_address (unsigned int argno)
+ {
+   vector_type_index base_type = infer_vector_base_type (argno);
+   if (base_type == NUM_VECTOR_TYPES)
+     return MODE_none;
+ 
+   vector_type_index displacement_type
+     = infer_vector_displacement_type (argno + 1);
+   if (displacement_type == NUM_VECTOR_TYPES)
+     return MODE_none;
+ 
+   mode_suffix_index mode = find_mode_suffix (base_type, displacement_type,
+ 					     displacement_units ());
+   if (mode == MODE_none)
+     {
+       if (mode_suffix_id == MODE_offset)
+ 	error_at (location, "cannot combine a base of type %qT with"
+ 		  " an offset of type %qT",
+ 		  get_argument_type (argno), get_argument_type (argno + 1));
+       else
+ 	error_at (location, "cannot combine a base of type %qT with"
+ 		  " an index of type %qT",
+ 		  get_argument_type (argno), get_argument_type (argno + 1));
+     }
+   return mode;
+ }
+ 
+ /* Require the function to have exactly EXPECTED arguments.  Return true
+    if it does, otherwise report an appropriate error.  */
+ bool
+ function_resolver::check_num_arguments (unsigned int expected)
+ {
+   if (m_arglist.length () < expected)
+     error_at (location, "too few arguments to function %qE", fndecl);
+   else if (m_arglist.length () > expected)
+     error_at (location, "too many arguments to function %qE", fndecl);
+   return m_arglist.length () == expected;
+ }
+ 
+ /* If the function is predicated, check that the first argument is a
+    suitable governing predicate.  Also check that there are NOPS further
+    arguments after any governing predicate, but don't check what they are.
+ 
+    Return true on success, otherwise report a suitable error.
+    When returning true:
+ 
+    - set I to the number of the first unchecked argument.
+    - set NARGS to the total number of arguments.  */
+ bool
+ function_resolver::check_gp_argument (unsigned int nops,
+ 				      unsigned int &i, unsigned int &nargs)
+ {
+   gcc_assert (pred != PRED_za_m);
+   i = 0;
+   unsigned int nfpm_args = (fpm_mode == FPM_set)? 1:0;
+   if (pred != PRED_none)
+     {
+       /* Unary merge operations should use resolve_unary instead.  */
+       gcc_assert (!shape->has_merge_argument_p (*this, nops));
+       nargs = nops + nfpm_args + 1;
+       if (!check_num_arguments (nargs)
+ 	  || !require_vector_type (i, gp_type_index ()))
+ 	return false;
+       i += 1;
+     }
+   else
+     {
+       nargs = nops + nfpm_args;
+       if (!check_num_arguments (nargs))
+ 	return false;
+     }
+ 
+   return true;
+ }
+ 
+ /* Finish resolving a function whose final argument can be a vector
+    or a scalar, with the function having an implicit "_n" suffix
+    in the latter case.  This "_n" form might only exist for certain
+    type suffixes.
+ 
+    ARGNO is the index of the final argument.  The inferred type suffix
+    was obtained from argument FIRST_ARGNO, which has type FIRST_TYPE.
+    EXPECTED_TCLASS and EXPECTED_BITS describe the expected properties
+    of the final vector or scalar argument, in the same way as for
+    require_derived_vector_type.  INFERRED_TYPE is the inferred type
+    suffix itself, or NUM_TYPE_SUFFIXES if it's the same as FIRST_TYPE.
+ 
+    Return the function decl of the resolved function on success,
+    otherwise report a suitable error and return error_mark_node.  */
+ tree function_resolver::
+ finish_opt_n_resolution (unsigned int argno, unsigned int first_argno,
+ 			 type_suffix_index first_type,
+ 			 type_class_index expected_tclass,
+ 			 unsigned int expected_bits,
+ 			 type_suffix_index inferred_type)
+ {
+   if (inferred_type == NUM_TYPE_SUFFIXES)
+     inferred_type = first_type;
+   tree scalar_form = lookup_form (MODE_n, inferred_type);
+ 
+   /* Allow the final argument to be scalar, if an _n form exists.  */
+   if (scalar_argument_p (argno))
+     {
+       if (scalar_form)
+ 	return scalar_form;
+ 
+       /* Check the vector form normally.  If that succeeds, raise an
+ 	 error about having no corresponding _n form.  */
+       tree res = resolve_to (mode_suffix_id, inferred_type);
+       if (res != error_mark_node)
+ 	error_at (location, "passing %qT to argument %d of %qE, but its"
+ 		  " %qT form does not accept scalars",
+ 		  get_argument_type (argno), argno + 1, fndecl,
+ 		  get_vector_type (first_type));
+       return error_mark_node;
+     }
+ 
+   /* If an _n form does exist, provide a more accurate message than
+      require_derived_vector_type would for arguments that are neither
+      vectors nor scalars.  */
+   if (scalar_form && !require_vector_or_scalar_type (argno))
+     return error_mark_node;
+ 
+   /* Check for the correct vector type.  */
+   if (!require_derived_vector_type (argno, first_argno, first_type,
+ 				    expected_tclass, expected_bits))
+     return error_mark_node;
+ 
+   return resolve_to (mode_suffix_id, inferred_type);
+ }
+ 
+ /* Finish resolving a function whose final argument can be a tuple
+    or a vector, with the function having an implicit "_single" suffix
+    in the latter case.  This "_single" form might only exist for certain
+    type suffixes.
+ 
+    ARGNO is the index of the final argument.  The inferred type suffix
+    was obtained from argument FIRST_ARGNO, which has type FIRST_TYPE.
+    EXPECTED_TCLASS gives the expected type class for the final tuple
+    or vector.
+ 
+    Return the function decl of the resolved function on success,
+    otherwise report a suitable error and return error_mark_node.  */
+ tree function_resolver::
+ finish_opt_single_resolution (unsigned int argno, unsigned int first_argno,
+ 			      sve_type first_type,
+ 			      type_class_index expected_tclass)
+ {
+   sve_type new_type = infer_sve_type (argno);
+   if (!new_type)
+     return error_mark_node;
+ 
+   /* If the type is a tuple, require it to match the group suffix.  */
+   unsigned int num_vectors = vectors_per_tuple ();
+   if (num_vectors != 1
+       && new_type.num_vectors != 1
+       && new_type.num_vectors != num_vectors)
+     {
+       report_incorrect_num_vectors (argno, new_type, num_vectors);
+       return error_mark_node;
+     }
+ 
+   auto expected_num_vectors = (new_type.num_vectors == 1 ? 1 : 0);
+   if (!require_derived_vector_type (argno, first_argno, first_type,
+ 				    expected_tclass, SAME_SIZE,
+ 				    expected_num_vectors))
+     return error_mark_node;
+ 
+   if (new_type.num_vectors == 1 && first_type.num_vectors > 1)
+     {
+       if (tree single_form = lookup_form (MODE_single, first_type))
+ 	return single_form;
+ 
+       if (resolve_to (mode_suffix_id, first_type) != error_mark_node)
+ 	error_at (location, "passing %qT to argument %d of %qE, but its"
+ 		  " %qT form does not accept single vectors",
+ 		  get_vector_type (new_type), argno + 1, fndecl,
+ 		  get_vector_type (first_type));
+       return error_mark_node;
+     }
+   return resolve_to (mode_suffix_id, first_type);
+ }
+ 
+ /* Resolve a (possibly predicated) unary function.  If the function uses
+    merge predication or if TREAT_AS_MERGE_P is true, there is an extra
+    vector argument before the governing predicate that specifies the
+    values of inactive elements.  This argument has the following
+    properties:
+ 
+    - the type class must be the same as for active elements if MERGE_TCLASS
+      is SAME_TYPE_CLASS, otherwise it must be MERGE_TCLASS itself.
+ 
+    - the element size must be the same as for active elements if MERGE_BITS
+      is SAME_TYPE_SIZE, otherwise it must be MERGE_BITS itself.
+ 
+    Return the function decl of the resolved function on success,
+    otherwise report a suitable error and return error_mark_node.  */
+ tree
+ function_resolver::resolve_unary (type_class_index merge_tclass,
+ 				  unsigned int merge_bits,
+ 				  bool treat_as_merge_p)
+ {
+   type_suffix_index type;
+   if (pred == PRED_m || treat_as_merge_p)
+     {
+       if (!check_num_arguments (3))
+ 	return error_mark_node;
+       if (merge_tclass == SAME_TYPE_CLASS && merge_bits == SAME_SIZE)
+ 	{
+ 	  /* The inactive elements are the same as the active elements,
+ 	     so we can use normal left-to-right resolution.  */
+ 	  if ((type = infer_vector_type (0)) == NUM_TYPE_SUFFIXES
+ 	      || !require_vector_type (1, VECTOR_TYPE_svbool_t)
+ 	      || !require_matching_vector_type (2, 0, type))
+ 	    return error_mark_node;
+ 	}
+       else
+ 	{
+ 	  /* The inactive element type is a function of the active one,
+ 	     so resolve the active one first.  */
+ 	  if (!require_vector_type (1, VECTOR_TYPE_svbool_t)
+ 	      || (type = infer_vector_type (2)) == NUM_TYPE_SUFFIXES
+ 	      || !require_derived_vector_type (0, 2, type, merge_tclass,
+ 					       merge_bits))
+ 	    return error_mark_node;
+ 	}
+     }
+   else
+     {
+       /* We just need to check the predicate (if any) and the single
+ 	 vector argument.  */
+       unsigned int i, nargs;
+       if (!check_gp_argument (1, i, nargs)
+ 	  || (type = infer_vector_type (i)) == NUM_TYPE_SUFFIXES)
+ 	return error_mark_node;
+     }
+ 
+   /* Handle convert-like functions in which the first type suffix is
+      explicit.  */
+   if (type_suffix_ids[0] != NUM_TYPE_SUFFIXES)
+     return resolve_to (mode_suffix_id, type_suffix_ids[0], type,
+ 		       NUM_TYPE_SUFFIXES, group_suffix_id);
+ 
+   return resolve_to (mode_suffix_id, type);
+ }
+ 
+ /* Resolve a (possibly predicated) function that takes NOPS like-typed
+    vector arguments followed by NIMM integer immediates.  Return the
+    function decl of the resolved function on success, otherwise report
+    a suitable error and return error_mark_node.  */
+ tree
+ function_resolver::resolve_uniform (unsigned int nops, unsigned int nimm)
+ {
+   unsigned int i, nargs;
+   type_suffix_index type;
+   if (!check_gp_argument (nops + nimm, i, nargs)
+       || (type = infer_vector_type (i)) == NUM_TYPE_SUFFIXES)
+     return error_mark_node;
+ 
+   unsigned int first_arg = i++;
+   for (; i < nargs - nimm; ++i)
+     if (!require_matching_vector_type (i, first_arg, type))
+       return error_mark_node;
+ 
+   for (; i < nargs; ++i)
+     if (!require_integer_immediate (i))
+       return error_mark_node;
+ 
+   return resolve_to (mode_suffix_id, type);
+ }
+ 
+ /* Resolve a (possibly predicated) function that offers a choice between
+    taking:
+ 
+    - NOPS like-typed vector arguments or
+    - NOPS - 1 like-typed vector arguments followed by a scalar argument
+ 
+    Return the function decl of the resolved function on success,
+    otherwise report a suitable error and return error_mark_node.  */
+ tree
+ function_resolver::resolve_uniform_opt_n (unsigned int nops)
+ {
+   unsigned int i, nargs;
+   type_suffix_index type;
+   if (!check_gp_argument (nops, i, nargs)
+       || (type = infer_vector_type (i)) == NUM_TYPE_SUFFIXES)
+     return error_mark_node;
+ 
+   unsigned int first_arg = i++;
+   for (; i < nargs - 1; ++i)
+     if (!require_matching_vector_type (i, first_arg, type))
+       return error_mark_node;
+ 
+   return finish_opt_n_resolution (i, first_arg, type);
+ }
+ 
+ /* If the call is erroneous, report an appropriate error and return
+    error_mark_node.  Otherwise, if the function is overloaded, return
+    the decl of the non-overloaded function.  Return NULL_TREE otherwise,
+    indicating that the call should be processed in the normal way.  */
+ tree
+ function_resolver::resolve ()
+ {
+   return shape->resolve (*this);
+ }
+ 
+ function_checker::function_checker (location_t location,
+ 				    const function_instance &instance,
+ 				    tree fndecl, tree fntype,
+ 				    unsigned int nargs, tree *args)
+   : function_call_info (location, instance, fndecl),
+     m_fntype (fntype), m_nargs (nargs), m_args (args),
+     m_base_arg (pred != PRED_none && pred != PRED_za_m ? 1 : 0)
+ {
+ }
+ 
+ /* Return true if argument ARGNO exists. which it might not for
+    erroneous calls.  It is safe to wave through checks if this
+    function returns false.  */
+ bool
+ function_checker::argument_exists_p (unsigned int argno)
+ {
+   gcc_assert (argno < (unsigned int) type_num_arguments (m_fntype));
+   return argno < m_nargs;
+ }
+ 
+ /* Check that argument ARGNO is an integer constant expression and
+    store its value in VALUE_OUT if so.  The caller should first
+    check that argument ARGNO exists.  */
+ bool
+ function_checker::require_immediate (unsigned int argno,
+ 				     HOST_WIDE_INT &value_out)
+ {
+   gcc_assert (argno < m_nargs);
+   tree arg = m_args[argno];
+ 
+   if (tree_fits_shwi_p (arg))
+     {
+       value_out = tree_to_shwi (arg);
+       return true;
+     }
+   else if (tree_fits_uhwi_p (arg))
+     {
+       value_out = tree_to_uhwi (arg);
+       return true;
+     }
+   else
+     {
+       report_non_ice (location, fndecl, argno);
+       return false;
+     }
+ }
+ 
+ /* Check that argument REL_ARGNO is an integer constant expression that
+    has the value VALUE0 or VALUE1.  REL_ARGNO counts from the end of the
+    predication arguments.  */
+ bool
+ function_checker::require_immediate_either_or (unsigned int rel_argno,
+ 					       HOST_WIDE_INT value0,
+ 					       HOST_WIDE_INT value1)
+ {
+   unsigned int argno = m_base_arg + rel_argno;
+   if (!argument_exists_p (argno))
+     return true;
+ 
+   HOST_WIDE_INT actual;
+   if (!require_immediate (argno, actual))
+     return false;
+ 
+   if (actual != value0 && actual != value1)
+     {
+       report_neither_nor (location, fndecl, argno, actual, value0, value1);
+       return false;
+     }
+ 
+   return true;
+ }
+ 
+ /* Check that argument REL_ARGNO is an integer constant expression that has
+    a valid value for enumeration type TYPE.  REL_ARGNO counts from the end
+    of the predication arguments.  */
+ bool
+ function_checker::require_immediate_enum (unsigned int rel_argno, tree type)
+ {
+   unsigned int argno = m_base_arg + rel_argno;
+   if (!argument_exists_p (argno))
+     return true;
+ 
+   HOST_WIDE_INT actual;
+   if (!require_immediate (argno, actual))
+     return false;
+ 
+   for (tree entry = TYPE_VALUES (type); entry; entry = TREE_CHAIN (entry))
+     {
+       /* The value is an INTEGER_CST for C and a CONST_DECL wrapper
+ 	 around an INTEGER_CST for C++.  */
+       tree value = TREE_VALUE (entry);
+       if (TREE_CODE (value) == CONST_DECL)
+ 	value = DECL_INITIAL (value);
+       if (wi::to_widest (value) == actual)
+ 	return true;
+     }
+ 
+   report_not_enum (location, fndecl, argno, actual, type);
+   return false;
+ }
+ 
+ /* The intrinsic conceptually divides vector argument REL_VEC_ARGNO into
+    groups of GROUP_SIZE elements.  Return true if argument REL_ARGNO is
+    a suitable constant index for selecting one of these groups.  The
+    selection happens within a 128-bit quadword, rather than the whole vector.
+ 
+    REL_ARGNO and REL_VEC_ARGNO count from the end of the predication
+    arguments.  */
+ bool
+ function_checker::require_immediate_lane_index (unsigned int rel_argno,
+ 						unsigned int rel_vec_argno,
+ 						unsigned int group_size)
+ {
+   unsigned int argno = m_base_arg + rel_argno;
+   if (!argument_exists_p (argno))
+     return true;
+ 
+   /* Get the type of the vector argument.  tree_argument_type wants a
+      1-based number, whereas VEC_ARGNO is 0-based.  */
+   unsigned int vec_argno = m_base_arg + rel_vec_argno;
+   machine_mode mode = TYPE_MODE (type_argument_type (m_fntype, vec_argno + 1));
+   gcc_assert (VECTOR_MODE_P (mode));
+   unsigned int nlanes = 128 / (group_size * GET_MODE_UNIT_BITSIZE (mode));
+   return require_immediate_range (rel_argno, 0, nlanes - 1);
+ }
+ 
+ /* Check that argument REL_ARGNO is an integer constant expression that
+    has one of the given values.  */
+ bool
+ function_checker::require_immediate_one_of (unsigned int rel_argno,
+ 					    HOST_WIDE_INT value0,
+ 					    HOST_WIDE_INT value1,
+ 					    HOST_WIDE_INT value2,
+ 					    HOST_WIDE_INT value3)
+ {
+   unsigned int argno = m_base_arg + rel_argno;
+   if (!argument_exists_p (argno))
+     return true;
+ 
+   HOST_WIDE_INT actual;
+   if (!require_immediate (argno, actual))
+     return false;
+ 
+   if (actual != value0
+       && actual != value1
+       && actual != value2
+       && actual != value3)
+     {
+       report_not_one_of (location, fndecl, argno, actual,
+ 			 value0, value1, value2, value3);
+       return false;
+     }
+ 
+   return true;
+ }
+ 
+ /* Check that argument REL_ARGNO is an integer constant expression in the
+    range [MIN, MAX].  REL_ARGNO counts from the end of the predication
+    arguments.  */
+ bool
+ function_checker::require_immediate_range (unsigned int rel_argno,
+ 					   HOST_WIDE_INT min,
+ 					   HOST_WIDE_INT max)
+ {
+   unsigned int argno = m_base_arg + rel_argno;
+   if (!argument_exists_p (argno))
+     return true;
+ 
+   /* Required because of the tree_to_uhwi -> HOST_WIDE_INT conversion
+      in require_immediate.  */
+   gcc_assert (min >= 0 && min <= max);
+   HOST_WIDE_INT actual;
+   if (!require_immediate (argno, actual))
+     return false;
+ 
+   if (!IN_RANGE (actual, min, max))
+     {
+       report_out_of_range (location, fndecl, argno, actual, min, max);
+       return false;
+     }
+ 
+   return true;
+ }
+ 
+ /* Perform semantic checks on the call.  Return true if the call is valid,
+    otherwise report a suitable error.  */
+ bool
+ function_checker::check ()
+ {
+   function_args_iterator iter;
+   tree type;
+   unsigned int i = 0;
+   FOREACH_FUNCTION_ARGS (m_fntype, type, iter)
+     {
+       if (type == void_type_node || i >= m_nargs)
+ 	break;
+ 
+       if (i >= m_base_arg
+ 	  && TREE_CODE (type) == ENUMERAL_TYPE
+ 	  && !require_immediate_enum (i - m_base_arg, type))
+ 	return false;
+ 
+       i += 1;
+     }
+ 
+   return shape->check (*this);
+ }
+ 
+ /* Return true if V is a vector constant and if, for every in-range integer I,
+    element STEP*I is equal to element 0.  */
+ bool
+ vector_cst_all_same (tree v, unsigned int step)
+ {
+   if (TREE_CODE (v) != VECTOR_CST)
+     return false;
+ 
+   /* VECTOR_CST_NELTS_PER_PATTERN applies to any multiple of
+      VECTOR_CST_NPATTERNS.  */
+   unsigned int lcm = least_common_multiple (step, VECTOR_CST_NPATTERNS (v));
+   unsigned int nelts = lcm * VECTOR_CST_NELTS_PER_PATTERN (v);
+   tree first_el = VECTOR_CST_ENCODED_ELT (v, 0);
+   for (unsigned int i = 0; i < nelts; i += step)
+     if (!operand_equal_p (VECTOR_CST_ELT (v, i), first_el, 0))
+       return false;
+ 
+   return true;
+ }
+ 
+ /* Return true if V is a constant predicate that acts as a ptrue when
+    predicating STEP-byte elements.  */
+ bool
+ is_ptrue (tree v, unsigned int step)
+ {
+   return (TREE_CODE (v) == VECTOR_CST
+ 	  && TYPE_MODE (TREE_TYPE (v)) == VNx16BImode
+ 	  && integer_nonzerop (VECTOR_CST_ENCODED_ELT (v, 0))
+ 	  && vector_cst_all_same (v, step));
+ }
+ 
+ /* Return true if V is a constant predicate that acts as a pfalse.  */
+ bool
+ is_pfalse (tree v)
+ {
+   return (TREE_CODE (v) == VECTOR_CST
+ 	  && TYPE_MODE (TREE_TYPE (v)) == VNx16BImode
+ 	  && integer_zerop (v));
+ }
+ 
+ gimple_folder::gimple_folder (const function_instance &instance, tree fndecl,
+ 			      gimple_stmt_iterator *gsi_in, gcall *call_in)
+   : function_call_info (gimple_location (call_in), instance, fndecl),
+     gsi (gsi_in), call (call_in), lhs (gimple_call_lhs (call_in))
+ {
+ }
+ 
+ /* VALUE might be a vector of type VECTYPE or a single scalar element.
+    Duplicate it into a vector of type VECTYPE in the latter case, adding any
+    new statements to STMTS.  */
+ tree
+ gimple_folder::force_vector (gimple_seq &stmts, tree vectype, tree value)
+ {
+   if (!VECTOR_TYPE_P (TREE_TYPE (value)))
+     value = gimple_build_vector_from_val (&stmts, vectype, value);
+   return value;
+ }
+ 
+ /* Convert predicate argument ARGNO so that it has the type appropriate for
+    an operation on VECTYPE.  Add any new statements to STMTS.  */
+ tree
+ gimple_folder::convert_pred (gimple_seq &stmts, tree vectype,
+ 			     unsigned int argno)
+ {
+   tree pred = gimple_call_arg (call, argno);
+   if (known_eq (TYPE_VECTOR_SUBPARTS (TREE_TYPE (pred)),
+ 		TYPE_VECTOR_SUBPARTS (vectype)))
+     return pred;
+ 
+   return gimple_build (&stmts, VIEW_CONVERT_EXPR,
+ 		       truth_type_for (vectype), pred);
+ }
+ 
+ /* Return a pointer to the address in a contiguous load or store,
+    given that each memory vector has type VECTYPE.  Add any new
+    statements to STMTS.  */
+ tree
+ gimple_folder::fold_contiguous_base (gimple_seq &stmts, tree vectype)
+ {
+   tree base = gimple_call_arg (call, 1);
+   if (mode_suffix_id == MODE_vnum)
+     {
+       tree offset = gimple_call_arg (call, 2);
+       offset = gimple_convert (&stmts, sizetype, offset);
+       offset = gimple_build (&stmts, MULT_EXPR, sizetype, offset,
+ 			     TYPE_SIZE_UNIT (vectype));
+       base = gimple_build (&stmts, POINTER_PLUS_EXPR, TREE_TYPE (base),
+ 			   base, offset);
+     }
+   return base;
+ }
+ 
+ /* Return the alignment and TBAA argument to an internal load or store
+    function like IFN_MASK_LOAD or IFN_MASK_STORE, given that it accesses
+    memory elements of type TYPE.  */
+ tree
+ gimple_folder::load_store_cookie (tree type)
+ {
+   return build_int_cst (build_pointer_type (type), TYPE_ALIGN (type));
+ }
+ 
+ /* Fold the call to a call to INSTANCE, with the same arguments.  */
+ gcall *
+ gimple_folder::redirect_call (const function_instance &instance)
+ {
+   registered_function *rfn
+     = function_table->find_with_hash (instance, instance.hash ());
+   if (!rfn)
+     return NULL;
+ 
+   gimple_call_set_fndecl (call, rfn->decl);
+   gimple_call_set_fntype (call, TREE_TYPE (rfn->decl));
+   return call;
+ }
+ 
+ /* Redirect _z and _m calls to _x functions if the predicate is all-true.
+    This allows us to use unpredicated instructions, where available.  */
+ gimple *
+ gimple_folder::redirect_pred_x ()
+ {
+   if (pred != PRED_z && pred != PRED_m)
+     return nullptr;
+ 
+   if (gimple_call_num_args (call) < 2)
+     return nullptr;
+ 
+   tree lhs_type = TREE_TYPE (TREE_TYPE (fndecl));
+   tree arg0_type = type_argument_type (TREE_TYPE (fndecl), 1);
+   tree arg1_type = type_argument_type (TREE_TYPE (fndecl), 2);
+   if (!VECTOR_TYPE_P (lhs_type)
+       || !VECTOR_TYPE_P (arg0_type)
+       || !VECTOR_TYPE_P (arg1_type))
+     return nullptr;
+ 
+   auto lhs_step = element_precision (lhs_type);
+   auto rhs_step = element_precision (arg1_type);
+   auto step = MAX (lhs_step, rhs_step);
+   if (!multiple_p (step, BITS_PER_UNIT)
+       || !is_ptrue (gimple_call_arg (call, 0), step / BITS_PER_UNIT))
+     return nullptr;
+ 
+   function_instance instance (*this);
+   instance.pred = PRED_x;
+   return redirect_call (instance);
+ }
+ 
+ /* Fold calls with predicate pfalse:
+    _m predication: lhs = op1.
+    _x or _z: lhs = {0, ...}.
+    Implicit predication that reads from memory: lhs = {0, ...}.
+    Implicit predication that writes to memory or prefetches: no-op.
+    Return the new gimple statement on success, else NULL.  */
+ gimple *
+ gimple_folder::fold_pfalse ()
+ {
+   tree gp = gp_value (call);
+   /* If there isn't a GP then we can't do any folding as the instruction isn't
+      predicated.  */
+   if (!gp)
+     return nullptr;
+ 
+   if (pred == PRED_m)
+     {
+       tree val = inactive_values (call);
+       if (is_pfalse (gp))
+ 	return fold_call_to (val);
+       return nullptr;
+     }
+   if ((pred == PRED_x || pred == PRED_z) && is_pfalse (gp))
+     return fold_call_to (build_zero_cst (TREE_TYPE (lhs)));
+   if (pred == PRED_implicit && is_pfalse (gp))
+     {
+       unsigned int flags = call_properties ();
+       /* Folding to lhs = {0, ...} is not appropriate for intrinsics with
+ 	 AGGREGATE types as lhs.  */
+       if ((flags & CP_READ_MEMORY)
+ 	  && !AGGREGATE_TYPE_P (TREE_TYPE (lhs)))
+ 	return fold_call_to (build_zero_cst (TREE_TYPE (lhs)));
+       if (flags & (CP_WRITE_MEMORY | CP_PREFETCH_MEMORY))
+ 	return fold_to_stmt_vops (gimple_build_nop ());
+     }
+   return nullptr;
+ }
+ 
+ /* Convert the lhs and all non-boolean vector-type operands to TYPE.
+    Pass the converted variables to the callback FP, and finally convert the
+    result back to the original type. Add the necessary conversion statements.
+    Return the new call. Note the tree argument to the callback FP, can only
+    be set once; it will always be a SSA_NAME.  */
+ gimple *
+ gimple_folder::convert_and_fold (tree type,
+ 				 gimple *(*fp) (gimple_folder &,
+ 						tree, vec<tree> &))
+ {
+   gcc_assert (VECTOR_TYPE_P (type)
+ 	      && TYPE_MODE (type) != VNx16BImode);
+   tree old_ty = TREE_TYPE (lhs);
+   gimple_seq stmts = NULL;
+   bool convert_lhs_p = !useless_type_conversion_p (type, old_ty);
+   tree lhs_conv = convert_lhs_p ? make_ssa_name (type) : lhs;
+   unsigned int num_args = gimple_call_num_args (call);
+   auto_vec<tree, 16> args_conv;
+   args_conv.safe_grow (num_args);
+   for (unsigned int i = 0; i < num_args; ++i)
+     {
+       tree op = gimple_call_arg (call, i);
+       tree op_ty = TREE_TYPE (op);
+       args_conv[i] =
+ 	(VECTOR_TYPE_P (op_ty)
+ 	 && TYPE_MODE (op_ty) != VNx16BImode
+ 	 && !useless_type_conversion_p (op_ty, type))
+ 	? gimple_build (&stmts, VIEW_CONVERT_EXPR, type, op) : op;
+     }
+ 
+   gimple *new_stmt = fp (*this, lhs_conv, args_conv);
+   gsi_insert_seq_before (gsi, stmts, GSI_SAME_STMT);
+   if (convert_lhs_p)
+     {
+       tree t = build1 (VIEW_CONVERT_EXPR, old_ty, lhs_conv);
+       gimple *g = gimple_build_assign (lhs, VIEW_CONVERT_EXPR, t);
+       gsi_insert_after (gsi, g, GSI_SAME_STMT);
+     }
+   return new_stmt;
+ }
+ 
+ /* Fold the call to constant VAL.  */
+ gimple *
+ gimple_folder::fold_to_cstu (poly_uint64 val)
+ {
+   return gimple_build_assign (lhs, build_int_cstu (TREE_TYPE (lhs), val));
+ }
+ 
+ /* Fold the call to a PTRUE, taking the element size from type suffix 0.  */
+ gimple *
+ gimple_folder::fold_to_ptrue ()
+ {
+   tree svbool_type = TREE_TYPE (lhs);
+   tree bool_type = TREE_TYPE (svbool_type);
+   unsigned int element_bytes = type_suffix (0).element_bytes;
+ 
+   /* The return type is svbool_t for all type suffixes, thus for b8 we
+      want { 1, 1, 1, 1, ... }, for b16 we want { 1, 0, 1, 0, ... }, etc.  */
+   tree_vector_builder builder (svbool_type, element_bytes, 1);
+   builder.quick_push (build_all_ones_cst (bool_type));
+   for (unsigned int i = 1; i < element_bytes; ++i)
+     builder.quick_push (build_zero_cst (bool_type));
+   return gimple_build_assign (lhs, builder.build ());
+ }
+ 
+ /* Fold the call to a PFALSE.  */
+ gimple *
+ gimple_folder::fold_to_pfalse ()
+ {
+   return gimple_build_assign (lhs, build_zero_cst (TREE_TYPE (lhs)));
+ }
+ 
+ /* Fold an operation to a constant predicate in which the first VL
+    elements are set and the rest are clear.  Take the element size
+    from type suffix 0.  */
+ gimple *
+ gimple_folder::fold_to_vl_pred (unsigned int vl)
+ {
+   tree vectype = TREE_TYPE (lhs);
+   tree element_type = TREE_TYPE (vectype);
+   tree minus_one = build_all_ones_cst (element_type);
+   tree zero = build_zero_cst (element_type);
+   unsigned int element_bytes = type_suffix (0).element_bytes;
+ 
+   /* Construct COUNT elements that contain the ptrue followed by
+      a repeating sequence of COUNT elements.  */
+   unsigned int count = constant_lower_bound (TYPE_VECTOR_SUBPARTS (vectype));
+   gcc_assert (vl * element_bytes <= count);
+   tree_vector_builder builder (vectype, count, 2);
+   for (unsigned int i = 0; i < count * 2; ++i)
+     {
+       bool bit = (i & (element_bytes - 1)) == 0 && i < vl * element_bytes;
+       builder.quick_push (bit ? minus_one : zero);
+     }
+   return gimple_build_assign (lhs, builder.build ());
+ }
+ 
+ /* Try to fold the call to a constant, given that, for integers, the call
+    is roughly equivalent to binary operation CODE.  aarch64_const_binop
+    handles any differences between CODE and the intrinsic.  */
+ gimple *
+ gimple_folder::fold_const_binary (enum tree_code code)
+ {
+   gcc_assert (gimple_call_num_args (call) == 3);
+   tree pg = gimple_call_arg (call, 0);
+   tree op1 = gimple_call_arg (call, 1);
+   tree op2 = gimple_call_arg (call, 2);
+ 
+   if (type_suffix (0).integer_p
+       && (pred == PRED_x || is_ptrue (pg, type_suffix (0).element_bytes)))
+     if (tree res = vector_const_binop (code, op1, op2, aarch64_const_binop))
+       return gimple_build_assign (lhs, res);
+ 
+   return NULL;
+ }
+ 
+ /* Fold the active lanes to X and set the inactive lanes according to the
+    predication.  Return the new statement.  */
+ gimple *
+ gimple_folder::fold_active_lanes_to (tree x)
+ {
+   /* If predication is _x or the predicate is ptrue, fold to X.  */
+   if (pred == PRED_x
+       || is_ptrue (gimple_call_arg (call, 0), type_suffix (0).element_bytes))
+     return gimple_build_assign (lhs, x);
+ 
+   /* If the predication is _z or _m, calculate a vector that supplies the
+      values of inactive lanes (the first vector argument for m and a zero
+      vector from z).  */
+   tree vec_inactive;
+   if (pred == PRED_z)
+     vec_inactive = build_zero_cst (TREE_TYPE (lhs));
+   else
+     vec_inactive = gimple_call_arg (call, 1);
+   if (operand_equal_p (x, vec_inactive, 0))
+     return gimple_build_assign (lhs, x);
+ 
+   gimple_seq stmts = NULL;
+   tree pred = convert_pred (stmts, vector_type (0), 0);
+   x = force_vector (stmts, TREE_TYPE (lhs), x);
+   gsi_insert_seq_before (gsi, stmts, GSI_SAME_STMT);
+   return gimple_build_assign (lhs, VEC_COND_EXPR, pred, x, vec_inactive);
+ }
+ 
+ /* Fold call to assignment statement lhs = t.  */
+ gimple *
+ gimple_folder::fold_call_to (tree t)
+ {
+   if (types_compatible_p (TREE_TYPE (lhs), TREE_TYPE (t)))
+     return fold_to_stmt_vops (gimple_build_assign (lhs, t));
+ 
+   tree rhs = build1 (VIEW_CONVERT_EXPR, TREE_TYPE (lhs), t);
+   return fold_to_stmt_vops (gimple_build_assign (lhs, VIEW_CONVERT_EXPR, rhs));
+ }
+ 
+ /* Fold call to G, incl. adjustments to the virtual operands.  */
+ gimple *
+ gimple_folder::fold_to_stmt_vops (gimple *g)
+ {
+   gimple_seq stmts = NULL;
+   gimple_seq_add_stmt_without_update (&stmts, g);
+   gsi_replace_with_seq_vops (gsi, stmts);
+   return g;
+ }
+ 
+ /* Try to fold the call.  Return the new statement on success and null
+    on failure.  */
+ gimple *
+ gimple_folder::fold ()
+ {
+   /* Don't fold anything when NEON/SVE are disabled; emit an error during
+      expansion instead.  */
+   if (!TARGET_SIMD && !TARGET_SVE)
+     return NULL;
+ 
+   /* Punt if the function has a return type and no result location is
+      provided.  The attributes should allow target-independent code to
+      remove the calls if appropriate.  */
+   if (!lhs && TREE_TYPE (gimple_call_fntype (call)) != void_type_node)
+     return NULL;
+ 
+   /* First try some simplifications that are common to many functions.  */
+   if (auto *call = redirect_pred_x ())
+     return call;
+   if (auto *call = fold_pfalse ())
+     return call;
+ 
+   return base->fold (*this);
+ }
+ 
+ /* Force EXPR to be a GIMPLE value, putting it into a new variable if
+    necessary.  */
+ tree
+ gimple_folder::force_val (tree expr)
+ {
+   if (is_gimple_val (expr))
+     return expr;
+ 
+   auto type = TREE_TYPE (expr);
+   auto var = create_tmp_var (type);
+   auto stmt = gimple_build_assign (var, expr);
+   gsi_insert_before (this->gsi, stmt, GSI_SAME_STMT);
+   return var;
+ }
+ 
+ /* Insert a `lhs = rhs` statement before the current statement.
+    Returns the new statement.  */
+ gassign *
+ gimple_folder::assign (tree lhs, tree rhs)
+ {
+   auto stmt = gimple_build_assign (lhs, rhs);
+   gsi_insert_before (this->gsi, stmt, GSI_SAME_STMT);
+   return stmt;
+ }
+ 
+ /* Insert a `lhs = code<rhs1, rhs2, rhs3>` statement before the current
+    statement.
+    Returns the new statement.  */
+ gassign *
+ gimple_folder::assign (tree lhs, tree_code code, tree rhs1, tree rhs2,
+ 		       tree rhs3)
+ {
+   auto stmt = gimple_build_assign (lhs, code, rhs1, rhs2, rhs3);
+   gsi_insert_before (this->gsi, stmt, GSI_SAME_STMT);
+   return stmt;
+ }
+ 
+ function_expander::function_expander (const function_instance &instance,
+ 				      tree fndecl, tree call_expr_in,
+ 				      rtx possible_target_in)
+   : function_call_info (EXPR_LOCATION (call_expr_in), instance, fndecl),
+     call_expr (call_expr_in), possible_target (possible_target_in)
+ {
+ }
+ 
+ /* Return the handler of direct optab OP for type suffix SUFFIX_I.  */
+ insn_code
+ function_expander::direct_optab_handler (optab op, unsigned int suffix_i)
+ {
+   return ::direct_optab_handler (op, tuple_mode (suffix_i));
+ }
+ 
+ /* Choose between signed and unsigned direct optabs SIGNED_OP and
+    UNSIGNED_OP based on the signedness of type suffix SUFFIX_I, then
+    pick the appropriate optab handler for the mode.  Use MODE as the
+    mode if given, otherwise use the mode of type suffix SUFFIX_I.  */
+ insn_code
+ function_expander::direct_optab_handler_for_sign (optab signed_op,
+ 						  optab unsigned_op,
+ 						  unsigned int suffix_i,
+ 						  machine_mode mode)
+ {
+   if (mode == VOIDmode)
+     mode = vector_mode (suffix_i);
+   optab op = type_suffix (suffix_i).unsigned_p ? unsigned_op : signed_op;
+   return ::direct_optab_handler (op, mode);
+ }
+ 
+ /* Choose between signed and unsigned convert optabs SIGNED_OP and
+    UNSIGNED_OP based on the signedness of type suffix SUFFIX_I, then
+    pick the appropriate optab handler for "converting" from FROM_MODE
+    to TO_MODE.  */
+ insn_code
+ function_expander::convert_optab_handler_for_sign (optab signed_op,
+ 						   optab unsigned_op,
+ 						   unsigned int suffix_i,
+ 						   machine_mode to_mode,
+ 						   machine_mode from_mode)
+ {
+   optab op = type_suffix (suffix_i).unsigned_p ? unsigned_op : signed_op;
+   return ::convert_optab_handler (op, to_mode, from_mode);
+ }
+ 
+ /* Return true if X overlaps any input.  */
+ bool
+ function_expander::overlaps_input_p (rtx x)
+ {
+   for (unsigned int i = 0; i < args.length (); ++i)
+     if (reg_overlap_mentioned_p (x, args[i]))
+       return true;
+   return false;
+ }
+ 
+ /* Convert ptr_mode value X to Pmode.  */
+ rtx
+ function_expander::convert_to_pmode (rtx x)
+ {
+   if (ptr_mode == SImode)
+     x = simplify_gen_unary (ZERO_EXTEND, DImode, x, SImode);
+   return x;
+ }
+ 
+ /* Return the base address for a contiguous load or store function.
+    MEM_MODE is the mode of the addressed memory, BASE_ARGNO is
+    the index of the base argument, and VNUM_ARGNO is the index of
+    the vnum offset argument (if any).  VL_ISA_MODE is AARCH64_FL_SM_ON
+    if the vnum argument is a factor of the SME vector length, 0 if it
+    is a factor of the current prevailing vector length.  */
+ rtx
+ function_expander::get_contiguous_base (machine_mode mem_mode,
+ 					unsigned int base_argno,
+ 					unsigned int vnum_argno,
+ 					aarch64_feature_flags vl_isa_mode)
+ {
+   rtx base = convert_to_pmode (args[base_argno]);
+   if (mode_suffix_id == MODE_vnum)
+     {
+       rtx vnum = args[vnum_argno];
+       if (vnum != const0_rtx)
+ 	{
+ 	  /* Use the size of the memory mode for extending loads and truncating
+ 	     stores.  Use the size of a full vector for non-extending loads
+ 	     and non-truncating stores (including svld[234] and svst[234]).  */
+ 	  poly_int64 size = ordered_min (GET_MODE_SIZE (mem_mode),
+ 					 BYTES_PER_SVE_VECTOR);
+ 	  rtx offset;
+ 	  if ((vl_isa_mode & AARCH64_FL_SM_ON)
+ 	      && !TARGET_STREAMING
+ 	      && !size.is_constant ())
+ 	    {
+ 	      gcc_assert (known_eq (size, BYTES_PER_SVE_VECTOR));
+ 	      if (CONST_INT_P (vnum) && IN_RANGE (INTVAL (vnum), -32, 31))
+ 		offset = aarch64_sme_vq_immediate (Pmode, INTVAL (vnum) * 16,
+ 						   AARCH64_ISA_MODE);
+ 	      else
+ 		{
+ 		  offset = aarch64_sme_vq_immediate (Pmode, 16,
+ 						     AARCH64_ISA_MODE);
+ 		  offset = simplify_gen_binary (MULT, Pmode, vnum, offset);
+ 		}
+ 	    }
+ 	  else
+ 	    {
+ 	      offset = gen_int_mode (size, Pmode);
+ 	      offset = simplify_gen_binary (MULT, Pmode, vnum, offset);
+ 	    }
+ 	  base = simplify_gen_binary (PLUS, Pmode, base, offset);
+ 	}
+     }
+   return base;
+ }
+ 
+ /* For a function that does the equivalent of:
+ 
+      OUTPUT = COND ? FN (INPUTS) : FALLBACK;
+ 
+    return the value of FALLBACK.
+ 
+    MODE is the mode of OUTPUT.  NOPS is the number of operands in INPUTS.
+    MERGE_ARGNO is the argument that provides FALLBACK for _m functions,
+    or DEFAULT_MERGE_ARGNO if we should apply the usual rules.
+ 
+    ARGNO is the caller's index into args.  If the returned value is
+    argument 0 (as for unary _m operations), increment ARGNO past the
+    returned argument.  */
+ rtx
+ function_expander::get_fallback_value (machine_mode mode, unsigned int nops,
+ 				       unsigned int merge_argno,
+ 				       unsigned int &argno)
+ {
+   if (pred == PRED_z)
+     return CONST0_RTX (mode);
+ 
+   gcc_assert (pred == PRED_m || pred == PRED_x);
+   if (merge_argno == DEFAULT_MERGE_ARGNO)
+     merge_argno = shape->has_merge_argument_p (*this, nops) ? 0 : 1;
+ 
+   if (merge_argno == 0)
+     return args[argno++];
+ 
+   return args[merge_argno];
+ }
+ 
+ /* Return a REG rtx that can be used for the result of the function,
+    using the preferred target if suitable.  */
+ rtx
+ function_expander::get_reg_target ()
+ {
+   machine_mode target_mode = result_mode ();
+   if (!possible_target
+       || !register_operand (possible_target, target_mode))
+     possible_target = gen_reg_rtx (target_mode);
+   return possible_target;
+ }
+ 
+ /* As for get_reg_target, but make sure that the returned REG does not
+    overlap any inputs.  */
+ rtx
+ function_expander::get_nonoverlapping_reg_target ()
+ {
+   if (possible_target && overlaps_input_p (possible_target))
+     possible_target = NULL_RTX;
+   return get_reg_target ();
+ }
+ 
+ /* Add an output operand to the instruction we're building, which has
+    code ICODE.  Bind the output to the preferred target rtx if possible.  */
+ void
+ function_expander::add_output_operand (insn_code icode)
+ {
+   unsigned int opno = m_ops.length ();
+   machine_mode mode = insn_data[icode].operand[opno].mode;
+   m_ops.safe_grow (opno + 1, true);
+   create_output_operand (&m_ops.last (), possible_target, mode);
+ }
+ 
+ /* Add an input operand to the instruction we're building, which has
+    code ICODE.  Calculate the value of the operand as follows:
+ 
+    - If the operand is a vector and X is not, broadcast X to fill a
+      vector of the appropriate mode.
+ 
+    - Otherwise, if the operand is a predicate, coerce X to have the
+      mode that the instruction expects.  In this case X is known to be
+      VNx16BImode (the mode of svbool_t).
+ 
+    - Otherwise use X directly.  The expand machinery checks that X has
+      the right mode for the instruction.  */
+ void
+ function_expander::add_input_operand (insn_code icode, rtx x)
+ {
+   unsigned int opno = m_ops.length ();
+   const insn_operand_data &operand = insn_data[icode].operand[opno];
+   machine_mode mode = operand.mode;
+   if (mode == VOIDmode)
+     {
+       /* The only allowable uses of VOIDmode are:
+ 
+ 	 - the wildcard aarch64_any_register_operand, which is used
+ 	   to avoid combinatorial explosion in the reinterpret patterns
+ 
+ 	 - pmode_register_operand, which always has mode Pmode.  */
+       if (operand.predicate == aarch64_any_register_operand)
+ 	mode = GET_MODE (x);
+       else if (operand.predicate == pmode_register_operand)
+ 	mode = Pmode;
+       else
+ 	gcc_unreachable ();
+     }
+   else if (!VECTOR_MODE_P (GET_MODE (x)) && VECTOR_MODE_P (mode))
+     x = expand_vector_broadcast (mode, x);
+   else if (GET_MODE_CLASS (mode) == MODE_VECTOR_BOOL)
+     {
+       gcc_assert (GET_MODE (x) == VNx16BImode);
+       x = gen_lowpart (mode, x);
+     }
+   m_ops.safe_grow (m_ops.length () + 1, true);
+   create_input_operand (&m_ops.last (), x, mode);
+ }
+ 
+ /* Add an integer operand with value X to the instruction.  */
+ void
+ function_expander::add_integer_operand (poly_int64 x)
+ {
+   m_ops.safe_grow (m_ops.length () + 1, true);
+   create_integer_operand (&m_ops.last (), x);
+ }
+ 
+ /* Add a memory operand with mode MODE and address ADDR.  */
+ void
+ function_expander::add_mem_operand (machine_mode mode, rtx addr)
+ {
+   /* Exception for OImode for the ld1ro intrinsics.
+      They act on 256 bit octaword data, and it's just easier to use a scalar
+      mode to represent that than add a new vector mode solely for the purpose
+      of this intrinsic.  */
+   gcc_assert (VECTOR_MODE_P (mode) || mode == OImode);
+   rtx mem = gen_rtx_MEM (mode, memory_address (mode, addr));
+   /* The memory is only guaranteed to be element-aligned.  */
+   set_mem_align (mem, GET_MODE_ALIGNMENT (GET_MODE_INNER (mode)));
+   add_fixed_operand (mem);
+ }
+ 
+ /* Add an address operand with value X.  The static operand data says
+    what mode and form the address must have.  */
+ void
+ function_expander::add_address_operand (rtx x)
+ {
+   m_ops.safe_grow (m_ops.length () + 1, true);
+   create_address_operand (&m_ops.last (), x);
+ }
+ 
+ /* Add an operand that must be X.  The only way of legitimizing an
+    invalid X is to reload the address of a MEM.  */
+ void
+ function_expander::add_fixed_operand (rtx x)
+ {
+   m_ops.safe_grow (m_ops.length () + 1, true);
+   create_fixed_operand (&m_ops.last (), x);
+ }
+ 
+ /* Generate instruction ICODE, given that its operands have already
+    been added to M_OPS.  Return the value of the first operand.  */
+ rtx
+ function_expander::generate_insn (insn_code icode)
+ {
+   expand_insn (icode, m_ops.length (), m_ops.address ());
+   return function_returns_void_p () ? const0_rtx : m_ops[0].value;
+ }
+ 
+ /* Convert the arguments to a gather/scatter function into the
+    associated md operands.  Argument ARGNO is the scalar or vector base and
+    argument ARGNO + 1 is the scalar or vector displacement (if applicable).
+    The md pattern expects:
+ 
+    - a scalar base
+    - a vector displacement
+ 
+    If SCALED_P is true, it also expects:
+ 
+    - a const_int that is 1 if the displacement is zero-extended from 32 bits
+    - a scaling multiplier (1 for bytes, 2 for .h indices, etc.).
+ 
+    If SCALED_P is false, the displacement is implicitly zero-extended
+    and the scaling multiplier is implicitly 1.  */
+ void
+ function_expander::prepare_gather_address_operands (unsigned int argno,
+ 						    bool scaled_p)
+ {
+   machine_mode mem_mode = memory_vector_mode ();
+   tree vector_type = base_vector_type ();
+   units_index units = displacement_units ();
+   int shift_idx = -1;
+   if (units == UNITS_none)
+     {
+       /* Vector base, no displacement.  Convert to an integer zero base
+ 	 and a vector byte offset.  */
+       args.quick_insert (argno, const0_rtx);
+       units = UNITS_bytes;
+     }
+   else if (vector_type)
+     {
+       /* Vector base, scalar displacement.  Convert to a scalar base and
+ 	 a vector byte offset.  */
+       std::swap (args[argno], args[argno + 1]);
+       if (units == UNITS_elements)
+ 	shift_idx = argno;
+     }
+   else
+     {
+       /* Scalar base, vector displacement.  This is the order that the md
+ 	 pattern wants.  */
+       args[argno] = convert_to_pmode (args[argno]);
+       vector_type = displacement_vector_type ();
+       if (units == UNITS_elements && !scaled_p)
+ 	shift_idx = argno + 1;
+     }
+   tree scalar_displacement_type = TREE_TYPE (vector_type);
+ 
+   if (shift_idx >= 0)
+     {
+       machine_mode arg_mode = GET_MODE (args[shift_idx]);
+       if (arg_mode == VOIDmode)
+ 	arg_mode = DImode;
+       unsigned int elt_bytes = GET_MODE_UNIT_SIZE (mem_mode);
+       rtx shift = gen_int_mode (exact_log2 (elt_bytes), DImode);
+       args[shift_idx] = simplify_gen_binary (ASHIFT, arg_mode,
+ 					     args[shift_idx], shift);
+       units = UNITS_bytes;
+     }
+ 
+   bool uxtw_p = (TYPE_PRECISION (scalar_displacement_type) == 64
+ 		 || TYPE_UNSIGNED (scalar_displacement_type));
+   unsigned int scale = (units == UNITS_bytes
+ 			? 1 : GET_MODE_UNIT_SIZE (mem_mode));
+ 
+   if (scaled_p)
+     {
+       args.quick_insert (argno + 2, GEN_INT (uxtw_p));
+       args.quick_insert (argno + 3, GEN_INT (scale));
+     }
+   else
+     gcc_assert (uxtw_p && scale == 1);
+ }
+ 
+ /* The final argument is an immediate svprfop value.  Add two fake arguments
+    to represent the rw and locality operands of a PREFETCH rtx.  */
+ void
+ function_expander::prepare_prefetch_operands ()
+ {
+   unsigned int prfop = INTVAL (args.last ());
+   /* Bit 3 of the prfop selects stores over loads.  */
+   args.quick_push (GEN_INT ((prfop & 8) != 0));
+   /* Bits 1 and 2 specify the locality; 0-based for svprfop but
+      1-based for PREFETCH.  */
+   args.quick_push (GEN_INT (((prfop >> 1) & 3) + 1));
+ }
+ 
+ /* Add a dummy argument to indicate whether predicate argument ARGNO
+    is all-true when interpreted in mode PRED_MODE.  The hint goes
+    immediately after ARGNO.  */
+ void
+ function_expander::add_ptrue_hint (unsigned int argno, machine_mode pred_mode)
+ {
+   rtx pred = gen_lowpart (pred_mode, args[argno]);
+   int hint = (pred == CONSTM1_RTX (pred_mode)
+ 	      ? SVE_KNOWN_PTRUE : SVE_MAYBE_NOT_PTRUE);
+   args.quick_insert (argno + 1, gen_int_mode (hint, SImode));
+ }
+ 
+ /* Rotate inputs args[START:END] one position to the left, so that
+    args[START] becomes args[END - 1].  */
+ void
+ function_expander::rotate_inputs_left (unsigned int start, unsigned int end)
+ {
+   rtx new_last = args[start];
+   for (unsigned int i = start; i < end - 1; ++i)
+     args[i] = args[i + 1];
+   args[end - 1] = new_last;
+ }
+ 
+ /* Return true if the negation of argument ARGNO can be folded away,
+    replacing it with the negated value if so.  MODE is the associated
+    vector mode, but the argument could be a single element.  The main
+    case this handles is constant arguments.  */
+ bool
+ function_expander::try_negating_argument (unsigned int argno,
+ 					  machine_mode mode)
+ {
+   rtx x = args[argno];
+   if (!VECTOR_MODE_P (GET_MODE (x)))
+     mode = GET_MODE_INNER (mode);
+ 
+   x = simplify_unary_operation (NEG, mode, x, mode);
+   if (!x)
+     return false;
+ 
+   args[argno] = x;
+   return true;
+ }
+ 
+ /* Implement the call using instruction ICODE, with a 1:1 mapping between
+    arguments and input operands.  */
+ rtx
+ function_expander::use_exact_insn (insn_code icode)
+ {
+   unsigned int nops = insn_data[icode].n_operands;
+   if (!function_returns_void_p ())
+     {
+       add_output_operand (icode);
+       nops -= 1;
+     }
+   for (unsigned int i = 0; i < nops; ++i)
+     add_input_operand (icode, args[i]);
+   return generate_insn (icode);
+ }
+ 
+ /* Implement the call using instruction ICODE, which does not use a
+    governing predicate.  We must therefore drop the GP from an _x call.  */
+ rtx
+ function_expander::use_unpred_insn (insn_code icode)
+ {
+   /* We can't drop the predicate for _z and _m.  */
+   gcc_assert (pred == PRED_x || pred == PRED_none);
+   /* Discount the output operand.  */
+   unsigned int nops = insn_data[icode].n_operands - 1;
+   /* Drop the predicate argument in the case of _x predication.  */
+   unsigned int bias = (pred == PRED_x ? 1 : 0);
+   unsigned int i = 0;
+ 
+   add_output_operand (icode);
+   for (; i < nops; ++i)
+     add_input_operand (icode, args[i + bias]);
+ 
+   return generate_insn (icode);
+ }
+ 
+ /* Implement the call using instruction ICODE, which is a predicated
+    operation that returns arbitrary values for inactive lanes.  */
+ rtx
+ function_expander::use_pred_x_insn (insn_code icode)
+ {
+   /* At present we never need to handle PRED_none, which would involve
+      creating a new predicate rather than using one supplied by the user.  */
+   gcc_assert (pred == PRED_x);
+   /* Discount the output operand.  */
+   unsigned int nops = args.length () - 1;
+ 
+   bool has_float_operand_p = FLOAT_MODE_P (insn_data[icode].operand[0].mode);
+ 
+   /* Add the normal operands.  */
+   add_output_operand (icode);
+   add_input_operand (icode, args[0]);
+   for (unsigned int i = 0; i < nops; ++i)
+     {
+       add_input_operand (icode, args[i + 1]);
+       if (FLOAT_MODE_P (GET_MODE (args[i + 1])))
+ 	has_float_operand_p = true;
+     }
+ 
+   if (has_float_operand_p
+       && insn_data[icode].n_operands > (int) nops + 2)
+     {
+       /* Add a flag that indicates whether unpredicated instructions
+ 	 are allowed.  */
+       rtx pred = m_ops[1].value;
+       if (flag_trapping_math && pred != CONST1_RTX (GET_MODE (pred)))
+ 	add_integer_operand (SVE_STRICT_GP);
+       else
+ 	add_integer_operand (SVE_RELAXED_GP);
+     }
+ 
+   return generate_insn (icode);
+ }
+ 
+ /* Implement the call using instruction ICODE, which does the equivalent of:
+ 
+      OUTPUT = COND ? FN (INPUTS) : FALLBACK;
+ 
+    The instruction operands are in the order above: OUTPUT, COND, INPUTS
+    and FALLBACK.  MERGE_ARGNO is the argument that provides FALLBACK for _m
+    functions, or DEFAULT_MERGE_ARGNO if we should apply the usual rules.  */
+ rtx
+ function_expander::use_cond_insn (insn_code icode, unsigned int merge_argno)
+ {
+   /* At present we never need to handle PRED_none, which would involve
+      creating a new predicate rather than using one supplied by the user.  */
+   gcc_assert (pred != PRED_none);
+   /* Discount the output, predicate and fallback value.  */
+   unsigned int nops = insn_data[icode].n_operands - 3;
+   machine_mode mode = insn_data[icode].operand[0].mode;
+ 
+   unsigned int opno = 0;
+   rtx fallback_arg = get_fallback_value (mode, nops, merge_argno, opno);
+   rtx pred = args[opno++];
+ 
+   add_output_operand (icode);
+   add_input_operand (icode, pred);
+   for (unsigned int i = 0; i < nops; ++i)
+     add_input_operand (icode, args[opno + i]);
+   if (fallback_arg == CONST0_RTX (mode)
+       && insn_operand_matches (icode, m_ops.length (), fallback_arg))
+     add_fixed_operand (fallback_arg);
+   else
+     add_input_operand (icode, fallback_arg);
+   return generate_insn (icode);
+ }
+ 
+ /* Implement the call using instruction ICODE, which is a select-like
+    operation with the following operands:
+ 
+    0: output
+    1: true value
+    2: false value
+    3: predicate
+ 
+    MERGE_ARGNO is the argument that provides the "false" value for _m
+    functions, or DEFAULT_MERGE_ARGNO if we should apply the usual rules.  */
+ rtx
+ function_expander::use_vcond_mask_insn (insn_code icode,
+ 					unsigned int merge_argno)
+ {
+   machine_mode mode = vector_mode (0);
+ 
+   unsigned int opno = 0;
+   rtx false_arg = get_fallback_value (mode, 1, merge_argno, opno);
+   rtx pred_arg = args[opno++];
+   rtx true_arg = args[opno++];
+ 
+   add_output_operand (icode);
+   add_input_operand (icode, true_arg);
+   add_input_operand (icode, false_arg);
+   add_input_operand (icode, pred_arg);
+   return generate_insn (icode);
+ }
+ 
+ /* Implement the call using instruction ICODE, which loads memory operand 1
+    into register operand 0 under the control of predicate operand 2.
+    Extending loads have a further predicate (operand 3) that nominally
+    controls the extension.
+    HAS_ELSE is true if the pattern has an additional operand that specifies
+    the values of inactive lanes.  This exists to match the general maskload
+    interface and is always zero for AArch64.  */
+ rtx
+ function_expander::use_contiguous_load_insn (insn_code icode, bool has_else)
+ {
+   machine_mode mem_mode = memory_vector_mode ();
+ 
+   add_output_operand (icode);
+   add_mem_operand (mem_mode, get_contiguous_base (mem_mode));
+   add_input_operand (icode, args[0]);
+   if (GET_MODE_UNIT_BITSIZE (mem_mode) < type_suffix (0).element_bits)
+     add_input_operand (icode, CONSTM1_RTX (VNx16BImode));
+ 
+   /* If we have an else operand, add it.  */
+   if (has_else)
+     add_input_operand (icode, CONST0_RTX (mem_mode));
+ 
+   return generate_insn (icode);
+ }
+ 
+ /* Implement the call using instruction ICODE, which prefetches from
+    address operand 1 under the control of predicate operand 0.
+    Operands 2, 3 and 4 respectively specify the svprfop value,
+    the PREFETCH rw flag and the PREFETCH locality.  */
+ rtx
+ function_expander::use_contiguous_prefetch_insn (insn_code icode)
+ {
+   add_input_operand (icode, args[0]);
+   add_address_operand (get_contiguous_base (VNx16QImode));
+   for (unsigned int i = args.length () - 3; i < args.length (); ++i)
+     add_input_operand (icode, args[i]);
+   return generate_insn (icode);
+ }
+ 
+ /* Implement the call using instruction ICODE, which stores register operand 1
+    into memory operand 0 under the control of predicate operand 2.  */
+ rtx
+ function_expander::use_contiguous_store_insn (insn_code icode)
+ {
+   machine_mode mem_mode = memory_vector_mode ();
+ 
+   add_mem_operand (mem_mode, get_contiguous_base (mem_mode));
+   add_input_operand (icode, args.last ());
+   add_input_operand (icode, args[0]);
+   return generate_insn (icode);
+ }
+ 
+ /* Implement the call using one of the following strategies, chosen in order:
+ 
+    (1) "aarch64_pred_<optab><mode>_z" for PRED_z predicate functions
+ 
+    (2) "aarch64_pred_<optab><mode>" for PRED_x functions
+ 
+    (3) a normal unpredicated optab for PRED_none and PRED_x functions,
+        dropping the predicate in the latter case
+ 
+    (4) an unpredicated "aarch64_sve_<code_optab><mode>" for PRED_none and
+        PRED_x functions, again dropping the predicate for PRED_x
+ 
+    (5) "cond_<optab><mode>" otherwise
+ 
+    where <optab> corresponds to:
+ 
+    - CODE_FOR_SINT for signed integers
+    - CODE_FOR_UINT for unsigned integers
+    - UNSPEC_FOR_COND_FP for predicated floating-point
+    - UNSPEC_FOR_UNCOND_FP for unpredicated floating-point
+ 
+    and where <code_optab> is like <optab>, but uses CODE_FOR_SINT instead
+    of UNSPEC_FOR_FP for floating-point values.
+ 
+    MERGE_ARGNO is the argument that provides the values of inactive lanes for
+    _m functions, or DEFAULT_MERGE_ARGNO if we should apply the usual rules.  */
+ rtx
+ function_expander::map_to_rtx_codes (rtx_code code_for_sint,
+ 				     rtx_code code_for_uint,
+ 				     int unspec_for_cond_fp,
+ 				     int unspec_for_uncond_fp,
+ 				     unsigned int merge_argno)
+ {
+   machine_mode mode = tuple_mode (0);
+   rtx_code code = (type_suffix (0).unsigned_p ? code_for_uint : code_for_sint);
+   insn_code icode;
+ 
+   if (mode_suffix_id == MODE_single)
+     {
+       gcc_assert (pred == PRED_none);
+       if (type_suffix (0).integer_p)
+ 	icode = code_for_aarch64_sve_single (code, mode);
+       else
+ 	icode = code_for_aarch64_sve_single (unspec_for_uncond_fp, mode);
+       return use_exact_insn (icode);
+     }
+ 
+   /* Handle predicate logic operations, which always use _z predication.  */
+   if (type_suffix (0).tclass == TYPE_bool)
+     {
+       gcc_assert (pred == PRED_z && code_for_uint == code_for_sint);
+       return use_exact_insn (code_for_aarch64_pred_z (code, mode));
+     }
+ 
+   /* First try using UNSPEC_PRED_X patterns for _x predication,
+      if available.  */
+   if (pred == PRED_x)
+     {
+       if (type_suffix (0).integer_p)
+ 	icode = maybe_code_for_aarch64_pred (code, mode);
+       else
+ 	icode = maybe_code_for_aarch64_pred (unspec_for_cond_fp, mode);
+       if (icode != CODE_FOR_nothing)
+ 	return use_pred_x_insn (icode);
+     }
+ 
+   /* Otherwise expand PRED_none and PRED_x operations without a predicate.
+      Floating-point operations conventionally use the signed rtx code.  */
+   if (pred == PRED_none || pred == PRED_x)
+     {
+       if (type_suffix (0).float_p && unspec_for_uncond_fp >= 0)
+ 	icode = maybe_code_for_aarch64_sve (unspec_for_uncond_fp, mode);
+       else
+ 	icode = direct_optab_handler (code_to_optab (code), 0);
+       if (icode == CODE_FOR_nothing)
+ 	icode = code_for_aarch64_sve (code, mode);
+       return use_unpred_insn (icode);
+     }
+ 
+   /* Don't use cond_*_optabs here, since not all codes have one yet.  */
+   if (type_suffix (0).integer_p)
+     icode = code_for_cond (code, mode);
+   else
+     icode = code_for_cond (unspec_for_cond_fp, mode);
+   return use_cond_insn (icode, merge_argno);
+ }
+ 
+ /* Implement the call using one of the following strategies, chosen in order:
+ 
+    (1) "aarch64_pred_<optab><mode>" for PRED_x functions; this is a
+        predicated pattern
+ 
+    (2) "aarch64_sve_<optab><mode>" for PRED_none and PRED_x functions;
+        this is an unpredicated pattern
+ 
+    (3) "cond_<optab><mode>" otherwise
+ 
+    where <optab> corresponds to:
+ 
+    - UNSPEC_FOR_SINT for signed integers
+    - UNSPEC_FOR_UINT for unsigned integers
+    - UNSPEC_FOR_FP for floating-point values
+ 
+    MERGE_ARGNO is the argument that provides the values of inactive lanes for
+    _m functions, or DEFAULT_MERGE_ARGNO if we should apply the usual rules.  */
+ rtx
+ function_expander::map_to_unspecs (int unspec_for_sint, int unspec_for_uint,
+ 				   int unspec_for_fp, unsigned int merge_argno)
+ {
+   machine_mode mode = tuple_mode (0);
+   int unspec = (!type_suffix (0).integer_p ? unspec_for_fp
+ 		: type_suffix (0).unsigned_p ? unspec_for_uint
+ 		: unspec_for_sint);
+ 
+   if (mode_suffix_id == MODE_single)
+     {
+       gcc_assert (pred == PRED_none);
+       return use_exact_insn (code_for_aarch64_sve_single (unspec, mode));
+     }
+ 
+   if (pred == PRED_x)
+     {
+       insn_code icode = maybe_code_for_aarch64_pred (unspec, mode);
+       if (icode != CODE_FOR_nothing)
+ 	return use_pred_x_insn (icode);
+     }
+ 
+   if (pred == PRED_none || pred == PRED_x)
+     {
+       insn_code icode = maybe_code_for_aarch64_sve (unspec, mode);
+       if (icode != CODE_FOR_nothing)
+ 	return use_unpred_insn (icode);
+     }
+ 
+   insn_code icode = code_for_cond (unspec, vector_mode (0));
+   return use_cond_insn (icode, merge_argno);
+ }
+ 
+ /* Expand the call and return its lhs.  */
+ rtx
+ function_expander::expand ()
+ {
+   unsigned int nargs = call_expr_nargs (call_expr);
+   args.reserve (nargs);
+   for (unsigned int i = 0; i < nargs; ++i)
+     args.quick_push (expand_normal (CALL_EXPR_ARG (call_expr, i)));
+ 
+   if (fpm_mode == FPM_set)
+     {
+       /* The last element of these functions is always an fpm_t that must be
+          written to FPMR before the call to the instruction itself. */
+       rtx fpm = args.last ();
+       gcc_assert (CONST_INT_P (fpm) || GET_MODE (fpm) == DImode);
+       emit_move_insn (gen_rtx_REG (DImode, FPM_REGNUM), fpm);
+     }
+   rtx result = base->expand (*this);
+   if (function_returns_void_p ())
+     gcc_assert (result == const0_rtx);
+   else
+     {
+       auto expected_mode = result_mode ();
+       if (GET_MODE_CLASS (expected_mode) == MODE_INT)
+ 	/* Scalar integer constants don't store a mode.
+ 
+ 	   It's OK for a variable result to have a different mode from the
+ 	   function return type.  In particular, some functions that return int
+ 	   expand into instructions that have a DImode result, with all 64 bits
+ 	   of the DImode being well-defined (usually zero).  */
+ 	gcc_assert (CONST_SCALAR_INT_P (result)
+ 		    || GET_MODE_CLASS (GET_MODE (result)) == MODE_INT);
+       else
+ 	/* In other cases, the return value should have the same mode
+ 	   as the return type.  */
+ 	gcc_assert (GET_MODE (result) == expected_mode);
+     }
+   return result;
+ }
+ 
+ /* Return a structure type that contains a single field of type FIELD_TYPE.
+    The field is called __val, but that's an internal detail rather than
+    an exposed part of the API.  */
+ static tree
+ wrap_type_in_struct (tree field_type)
+ {
+   tree field = build_decl (input_location, FIELD_DECL,
+ 			   get_identifier ("__val"), field_type);
+   tree struct_type = lang_hooks.types.make_type (RECORD_TYPE);
+   DECL_FIELD_CONTEXT (field) = struct_type;
+   TYPE_FIELDS (struct_type) = field;
+   make_type_sizeless (struct_type);
+   layout_type (struct_type);
+   return struct_type;
+ }
+ 
+ /* Register a built-in TYPE_DECL called NAME for TYPE.  This is used/needed
+    when TYPE is a structure type.  */
+ static void
+ register_type_decl (tree type, const char *name)
+ {
+   tree decl = build_decl (input_location, TYPE_DECL,
+ 			  get_identifier (name), type);
+   TYPE_NAME (type) = decl;
+   TYPE_STUB_DECL (type) = decl;
+   lang_hooks.decls.pushdecl (decl);
+   /* ??? Undo the effect of set_underlying_type for C.  The C frontend
+      doesn't recognize DECL as a built-in because (as intended) the decl has
+      a real location instead of BUILTINS_LOCATION.  The frontend therefore
+      treats the decl like a normal C "typedef struct foo foo;", expecting
+      the type for tag "struct foo" to have a dummy unnamed TYPE_DECL instead
+      of the named one we attached above.  It then sets DECL_ORIGINAL_TYPE
+      on the supposedly unnamed decl, creating a circularity that upsets
+      dwarf2out.
+ 
+      We don't want to follow the normal C model and create "struct foo"
+      tags for tuple types since (a) the types are supposed to be opaque
+      and (b) they couldn't be defined as a real struct anyway.  Treating
+      the TYPE_DECLs as "typedef struct foo foo;" without creating
+      "struct foo" would lead to confusing error messages.  */
+   DECL_ORIGINAL_TYPE (decl) = NULL_TREE;
+ }
+ 
+ /* Register the built-in SVE ABI types, such as __SVBool_t.  */
+ static void
+ register_builtin_types ()
+ {
+   sve_alignment_switcher switcher;
+ 
+ #define DEF_SVE_TYPE(ACLE_NAME, NCHARS, ABI_NAME, SCALAR_TYPE) \
+   scalar_types[VECTOR_TYPE_ ## ACLE_NAME] = SCALAR_TYPE;
+ #include "aarch64-sve-builtins.def"
+ 
+   for (unsigned int i = 0; i < NUM_VECTOR_TYPES; ++i)
+     {
+       tree vectype;
+       unsigned int num_zr = 0, num_pr = 0;
+       if (vector_type_index (i) == VECTOR_TYPE_svcount_t)
+ 	{
+ 	  vectype = abi_vector_types[VECTOR_TYPE_svbool_t];
+ 	  vectype = wrap_type_in_struct (vectype);
+ 	  num_pr = 1;
+ 	}
+       else
+ 	{
+ 	  tree eltype = scalar_types[i];
+ 	  if (eltype == boolean_type_node)
+ 	    {
+ 	      vectype = build_truth_vector_type_for_mode (BYTES_PER_SVE_VECTOR,
+ 							  VNx16BImode);
+ 	      num_pr = 1;
+ 	    }
+ 	  else
+ 	    {
+ 	      scalar_mode elmode = SCALAR_TYPE_MODE (eltype);
+ 	      unsigned int elbytes = GET_MODE_SIZE (elmode);
+ 	      poly_uint64 nunits = exact_div (BYTES_PER_SVE_VECTOR, elbytes);
+ 	      machine_mode mode
+ 		= aarch64_sve_data_mode (elmode, nunits).require ();
+ 	      vectype = build_vector_type_for_mode (eltype, mode);
+ 	      auto size = wi::to_poly_offset (TYPE_SIZE (vectype));
+ 	      gcc_assert (VECTOR_MODE_P (TYPE_MODE (vectype))
+ 			  && TYPE_MODE (vectype) == mode
+ 			  && TYPE_MODE_RAW (vectype) == mode
+ 			  && TYPE_ALIGN (vectype) == 128
+ 			  && known_eq (size, BITS_PER_SVE_VECTOR));
+ 	      num_zr = 1;
+ 	    }
+ 	  vectype = build_distinct_type_copy (vectype);
+ 	  gcc_assert (vectype == TYPE_MAIN_VARIANT (vectype));
+ 	  SET_TYPE_STRUCTURAL_EQUALITY (vectype);
+ 	  TYPE_ARTIFICIAL (vectype) = 1;
+ 	  TYPE_INDIVISIBLE_P (vectype) = 0;
+ 	  make_type_sizeless (vectype);
+ 	}
+       if (num_pr)
+ 	{
+ 	  auto size = wi::to_poly_offset (TYPE_SIZE (vectype));
+ 	  gcc_assert (TYPE_MODE (vectype) == VNx16BImode
+ 		      && TYPE_MODE (vectype) == TYPE_MODE_RAW (vectype)
+ 		      && TYPE_ALIGN (vectype) == 16
+ 		      && known_eq (size, BYTES_PER_SVE_VECTOR));
+ 	}
+       add_sve_type_attribute (vectype, num_zr, num_pr,
+ 			      vector_types[i].mangled_name,
+ 			      vector_types[i].acle_name);
+       abi_vector_types[i] = vectype;
+       if (TREE_CODE (vectype) == RECORD_TYPE)
+ 	register_type_decl (vectype, vector_types[i].abi_name);
+       else
+ 	lang_hooks.types.register_builtin_type (vectype,
+ 						vector_types[i].abi_name);
+     }
+ }
+ 
+ /* Initialize all compiler built-ins related to SVE that should be
+    defined at start-up.  */
+ void
+ init_builtins ()
+ {
+   aarch64_target_switcher switcher (AARCH64_FL_SVE);
+   register_builtin_types ();
+   if (in_lto_p)
+     {
+       aarch64_acle::handle_arm_neon_h (false);
+       handle_arm_sve_h (false);
+       handle_arm_sme_h (false);
+       handle_arm_neon_sve_bridge_h (false);
+     }
+ }
+ 
+ /* Register vector type TYPE under its arm_sve.h name.  */
+ static void
+ register_vector_type (vector_type_index type)
+ {
+   tree vectype = abi_vector_types[type];
+   tree id = get_identifier (vector_types[type].acle_name);
+   tree decl = build_decl (input_location, TYPE_DECL, id, vectype);
+   decl = lang_hooks.decls.pushdecl (decl);
+ 
+   /* Record the new ACLE type if pushdecl succeeded without error.  Use
+      the ABI type otherwise, so that the type we record at least has the
+      right form, even if it doesn't have the right name.  This should give
+      better error recovery behavior than installing error_mark_node or
+      installing an incorrect type.  */
+   if (decl
+       && TREE_CODE (decl) == TYPE_DECL
+       && TREE_TYPE (decl) != error_mark_node
+       && TYPE_MAIN_VARIANT (TREE_TYPE (decl)) == vectype)
+     vectype = TREE_TYPE (decl);
+   acle_vector_types[0][type] = vectype;
+ }
+ 
+ /* Register the tuple type that contains NUM_VECTORS vectors of type TYPE.  */
+ static void
+ register_tuple_type (unsigned int num_vectors, vector_type_index type)
+ {
+   tree vector_type = acle_vector_types[0][type];
+   bool is_pred = GET_MODE_CLASS (TYPE_MODE (vector_type)) == MODE_VECTOR_BOOL;
+ 
+   /* Work out the structure name.  */
+   char buffer[sizeof ("svbfloat16x4_t")];
+   const char *vector_type_name = vector_types[type].acle_name;
+   snprintf (buffer, sizeof (buffer), "%.*sx%d_t",
+ 	    (int) strlen (vector_type_name) - 2, vector_type_name,
+ 	    num_vectors);
+ 
+   /* The contents of the type are opaque, so we can define them in any
+      way that maps to the correct ABI type.
+ 
+      Here we choose to use the same layout as for arm_neon.h, but with
+      "__val" instead of "val":
+ 
+ 	struct svfooxN_t { svfoo_t __val[N]; };
+ 
+      (It wouldn't be possible to write that directly in C or C++ for
+      sizeless types, but that's not a problem for this function.)
+ 
+      Using arrays simplifies the handling of svget and svset for variable
+      arguments.  */
+   tree array_type = build_array_type_nelts (vector_type, num_vectors);
+   gcc_assert (VECTOR_MODE_P (TYPE_MODE (array_type))
+ 	      && TYPE_MODE_RAW (array_type) == TYPE_MODE (array_type)
+ 	      && TYPE_ALIGN (array_type) == (is_pred ? 16 : 128));
+ 
+   tree tuple_type = wrap_type_in_struct (array_type);
+   if (is_pred)
+     add_sve_type_attribute (tuple_type, 0, num_vectors, NULL, buffer);
+   else
+     add_sve_type_attribute (tuple_type, num_vectors, 0, NULL, buffer);
+   gcc_assert (VECTOR_MODE_P (TYPE_MODE (tuple_type))
+ 	      && TYPE_MODE_RAW (tuple_type) == TYPE_MODE (tuple_type)
+ 	      && TYPE_ALIGN (tuple_type) == TYPE_ALIGN (array_type));
+ 
+   register_type_decl (tuple_type, buffer);
+ 
+   acle_vector_types[num_vectors - 1][type] = tuple_type;
+ }
+ 
+ /* Register the svpattern enum.  */
+ static void
+ register_svpattern ()
+ {
+   auto_vec<string_int_pair, 32> values;
+ #define PUSH(UPPER, LOWER, VALUE) \
+     values.quick_push (string_int_pair ("SV_" #UPPER, VALUE));
+   AARCH64_FOR_SVPATTERN (PUSH)
+ #undef PUSH
+ 
+   acle_svpattern = lang_hooks.types.simulate_enum_decl (input_location,
+ 							"svpattern", &values);
+ }
+ 
+ /* Register the svprfop enum.  */
+ static void
+ register_svprfop ()
+ {
+   auto_vec<string_int_pair, 16> values;
+ #define PUSH(UPPER, LOWER, VALUE) \
+     values.quick_push (string_int_pair ("SV_" #UPPER, VALUE));
+   AARCH64_FOR_SVPRFOP (PUSH)
+ #undef PUSH
+ 
+   acle_svprfop = lang_hooks.types.simulate_enum_decl (input_location,
+ 						      "svprfop", &values);
+ }
+ 
+ static bool arm_neon_h_handled = false;
+ 
+ static bool arm_sve_h_handled = false;
+ static location_t arm_sve_h_location;
+ 
+ static bool arm_sme_h_handled = false;
+ static location_t arm_sme_h_location;
+ 
+ static bool arm_neon_sve_bridge_h_handled = false;
+ static location_t arm_neon_sve_bridge_h_location;
+ 
+ /* Implement #pragma GCC aarch64 "arm_neon.h".  */
+ void
+ handle_arm_neon_h (bool function_nulls_p)
+ {
+   if (arm_neon_h_handled)
+     return;
+ 
+   /* FIXME: Remove once all NEON intrinsics have been ported to the pragma-based
+     framework.  */
+   init_arm_neon_builtins ();
+ 
+   aarch64_target_switcher switcher;
+   aarch64_acle::function_builder builder (aarch64_acle::arm_neon_handle,
+ 					  function_nulls_p);
+ 
+   for (auto &group : neon_function_groups)
+     builder.register_function_group (group);
+ 
+   arm_neon_h_handled = true;
+ }
+ 
+ /* Implement #pragma GCC aarch64 "arm_sve.h".  */
+ void
+ handle_arm_sve_h (bool function_nulls_p)
+ {
+   if (!aarch64_acle::arm_neon_h_handled)
+     aarch64_acle::handle_arm_neon_h (false);
+ 
+   if (arm_sve_h_handled)
+     {
+       error ("duplicate definition of %qs", "arm_sve.h");
+       inform (arm_sve_h_location, "previous definition of %qs here",
+ 	      "arm_sve.h");
+       return;
+     }
+ 
+   aarch64_target_switcher switcher (AARCH64_FL_SVE);
+   sve_alignment_switcher alignment_switcher;
+ 
+   /* Define the vector and tuple types.  */
+   for (unsigned int type_i = 0; type_i < NUM_VECTOR_TYPES; ++type_i)
+     {
+       vector_type_index type = vector_type_index (type_i);
+       register_vector_type (type);
+       if (type != VECTOR_TYPE_svcount_t)
+ 	for (unsigned int count = 2; count <= MAX_TUPLE_SIZE; ++count)
+ 	  if (type != VECTOR_TYPE_svbool_t || count == 2 || count == 4)
+ 	    register_tuple_type (count, type);
+     }
+ 
+   /* Define the enums.  */
+   register_svpattern ();
+   register_svprfop ();
+ 
+   /* Define the functions.  */
+   function_builder builder (arm_sve_handle, function_nulls_p);
+   for (unsigned int i = 0; i < ARRAY_SIZE (function_groups); ++i)
+     builder.register_function_group (function_groups[i]);
+ 
+   arm_sve_h_handled = true;
+   arm_sve_h_location = input_location;
+ }
+ 
+ /* Implement #pragma GCC aarch64 "arm_neon_sve_bridge.h".  */
+ void
+ handle_arm_neon_sve_bridge_h (bool function_nulls_p)
+ {
+   if (!arm_sme_h_handled)
+     handle_arm_sme_h (true);
+ 
+   if (arm_neon_sve_bridge_h_handled)
+     {
+       error ("duplicate definition of %qs", "arm_neon_sve_bridge.h");
+       inform (arm_neon_sve_bridge_h_location, "previous definition of %qs here",
+ 	      "arm_neon_sve_bridge.h");
+       return;
+     }
+ 
+   aarch64_target_switcher switcher;
+ 
+   /* Define the functions.  */
+   function_builder builder (arm_neon_sve_handle, function_nulls_p);
+   for (unsigned int i = 0; i < ARRAY_SIZE (neon_sve_function_groups); ++i)
+     builder.register_function_group (neon_sve_function_groups[i]);
+ 
+   arm_neon_sve_bridge_h_handled = true;
+   arm_neon_sve_bridge_h_location = input_location;
+ }
+ 
+ /* Return the function decl with SVE function subcode CODE, or error_mark_node
+    if no such function exists.  */
+ tree
+ builtin_decl (unsigned int code, bool)
+ {
+   if (code >= vec_safe_length (registered_functions))
+     return error_mark_node;
+   return (*registered_functions)[code]->decl;
+ }
+ 
+ /* Implement #pragma GCC aarch64 "arm_sme.h".  */
+ void
+ handle_arm_sme_h (bool function_nulls_p)
+ {
+   if (!arm_sve_h_handled)
+     {
+       error ("%qs defined without first defining %qs",
+ 	     "arm_sme.h", "arm_sve.h");
+       return;
+     }
+ 
+   aarch64_target_switcher switcher (AARCH64_FL_SME);
+ 
+   function_builder builder (arm_sme_handle, function_nulls_p);
+   for (unsigned int i = 0; i < ARRAY_SIZE (sme_function_groups); ++i)
+     builder.register_function_group (sme_function_groups[i]);
+ 
+   arm_sme_h_handled = true;
+   arm_sme_h_location = input_location;
+ }
+ 
+ /* If we're implementing manual overloading, check whether the SVE
+    function with subcode CODE is overloaded, and if so attempt to
+    determine the corresponding non-overloaded function.  The call
+    occurs at location LOCATION and has the arguments given by ARGLIST.
+ 
+    If the call is erroneous, report an appropriate error and return
+    error_mark_node.  Otherwise, if the function is overloaded, return
+    the decl of the non-overloaded function.  Return NULL_TREE otherwise,
+    indicating that the call should be processed in the normal way.  */
+ tree
+ resolve_overloaded_builtin (location_t location, unsigned int code,
+ 			    vec<tree, va_gc> *arglist)
+ {
+   if (code >= vec_safe_length (registered_functions))
+     return NULL_TREE;
+ 
+   registered_function &rfn = *(*registered_functions)[code];
+   if (rfn.overloaded_p)
+     return function_resolver (location, rfn.instance, rfn.decl,
+ 			      *arglist).resolve ();
+   return NULL_TREE;
+ }
+ 
+ /* Perform any semantic checks needed for a call to the SVE function
+    with subcode CODE, such as testing for integer constant expressions.
+    The call occurs at location LOCATION and has NARGS arguments,
+    given by ARGS.  FNDECL is the original function decl, before
+    overload resolution.
+ 
+    Return true if the call is valid, otherwise report a suitable error.  */
+ bool
+ check_builtin_call (location_t location, vec<location_t>, unsigned int code,
+ 		    tree fndecl, unsigned int nargs, tree *args)
+ {
+   const registered_function &rfn = *(*registered_functions)[code];
+   if (!aarch64_check_required_extensions (location, rfn.decl,
+ 					  rfn.required_extensions))
+     return false;
+   return function_checker (location, rfn.instance, fndecl,
+ 			   TREE_TYPE (rfn.decl), nargs, args).check ();
+ }
+ 
+ /* Attempt to fold STMT, given that it's a call to the SVE function
+    with subcode CODE.  Return the new statement on success and null
+    on failure.  Insert any other new statements at GSI.  */
+ gimple *
+ gimple_fold_builtin (unsigned int code, gimple_stmt_iterator *gsi, gcall *stmt)
+ {
+   registered_function &rfn = *(*registered_functions)[code];
+   return gimple_folder (rfn.instance, rfn.decl, gsi, stmt).fold ();
+ }
+ 
+ /* Expand a call to the SVE function with subcode CODE.  EXP is the call
+    expression and TARGET is the preferred location for the result.
+    Return the value of the lhs.  */
+ rtx
+ expand_builtin (unsigned int code, tree exp, rtx target)
+ {
+   registered_function &rfn = *(*registered_functions)[code];
+   if (!aarch64_check_required_extensions (EXPR_LOCATION (exp), rfn.decl,
+ 					  rfn.required_extensions))
+     return target;
+   return function_expander (rfn.instance, rfn.decl, exp, target).expand ();
+ }
+ 
+ /* If TYPE is a built-in type defined by the SVE ABI, return the mangled name,
+    otherwise return NULL.  */
+ const char *
+ mangle_builtin_type (const_tree type)
+ {
+   /* ??? The C++ frontend normally strips qualifiers and attributes before
+      calling this hook, adding separate mangling for attributes that affect
+      type identity.  Fortunately the type copy will have the same TYPE_NAME
+      as the original, so we can get the attributes from there.  */
+   if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
+     type = TREE_TYPE (TYPE_NAME (type));
+   if (tree attr = lookup_sve_type_attribute (type))
+     if (tree id = TREE_VALUE (chain_index (2, TREE_VALUE (attr))))
+       return IDENTIFIER_POINTER (id);
+   return NULL;
+ }
+ 
+ /* Return true if TYPE is a built-in SVE type defined by the ABI or ACLE.  */
+ bool
+ builtin_type_p (const_tree type)
+ {
+   return lookup_sve_type_attribute (type);
+ }
+ 
+ /* Return true if TYPE is a built-in SVE type defined by the ABI or ACLE.
+    If so, store the number of constituent SVE vectors in *NUM_ZR and the
+    number of constituent SVE predicates in *NUM_PR.  */
+ bool
+ builtin_type_p (const_tree type, unsigned int *num_zr, unsigned int *num_pr)
+ {
+   if (tree attr = lookup_sve_type_attribute (type))
+     {
+       tree num_zr_node = TREE_VALUE (attr);
+       tree num_pr_node = TREE_CHAIN (num_zr_node);
+       *num_zr = tree_to_uhwi (TREE_VALUE (num_zr_node));
+       *num_pr = tree_to_uhwi (TREE_VALUE (num_pr_node));
+       return true;
+     }
+   return false;
+ }
+ 
+ /* ATTRS is the attribute list for a sizeless SVE type.  Return the
+    attributes of the associated fixed-length SVE type, taking the
+    "SVE type" attributes from NEW_SVE_TYPE_ARGS.  */
+ static tree
+ get_arm_sve_vector_bits_attributes (tree old_attrs, tree new_sve_type_args)
+ {
+   tree new_attrs = NULL_TREE;
+   tree *ptr = &new_attrs;
+   for (tree attr = old_attrs; attr; attr = TREE_CHAIN (attr))
+     {
+       tree name = get_attribute_name (attr);
+       if (is_attribute_p ("SVE sizeless type", name))
+ 	continue;
+ 
+       tree args = TREE_VALUE (attr);
+       if (is_attribute_p ("SVE type", name))
+ 	args = new_sve_type_args;
+       *ptr = tree_cons (TREE_PURPOSE (attr), args, NULL_TREE);
+       ptr = &TREE_CHAIN (*ptr);
+     }
+   return new_attrs;
+ }
+ 
+ /* An attribute callback for the "arm_sve_vector_bits" attribute.  */
+ tree
+ handle_arm_sve_vector_bits_attribute (tree *node, tree, tree args, int,
+ 				      bool *no_add_attrs)
+ {
+   *no_add_attrs = true;
+ 
+   tree type = *node;
+   tree attr = lookup_sve_type_attribute (type);
+   if (!attr)
+     {
+       error ("%qs applied to non-SVE type %qT", "arm_sve_vector_bits", type);
+       return NULL_TREE;
+     }
+ 
+   if (!VECTOR_TYPE_P (type))
+     {
+       error ("%qs applied to non-vector type %qT",
+ 	     "arm_sve_vector_bits", type);
+       return NULL_TREE;
+     }
+ 
+   if (!sizeless_type_p (type))
+     {
+       error ("%qs applied to type %qT, which already has a size",
+ 	     "arm_sve_vector_bits", type);
+       return NULL_TREE;
+     }
+ 
+   tree size = TREE_VALUE (args);
+   if (TREE_CODE (size) != INTEGER_CST)
+     {
+       error ("%qs requires an integer constant expression",
+ 	     "arm_sve_vector_bits");
+       return NULL_TREE;
+     }
+ 
+   unsigned HOST_WIDE_INT value = tree_to_uhwi (size);
+   if (maybe_ne (value, BITS_PER_SVE_VECTOR))
+     {
+       warning (OPT_Wattributes, "unsupported SVE vector size");
+       return NULL_TREE;
+     }
+ 
+   /* Construct a new list of "SVE type" attribute arguments.  */
+   tree new_sve_type_args = copy_list (TREE_VALUE (attr));
+ 
+   /* Mangle the type as an instance of the imaginary template:
+ 
+        __SVE_VLS<typename, unsigned>
+ 
+      where the first parameter is the SVE type and where the second
+      parameter is the SVE vector length in bits.  */
+   tree mangled_name_node = chain_index (2, new_sve_type_args);
+   const char *old_mangled_name
+     = IDENTIFIER_POINTER (TREE_VALUE (mangled_name_node));
+   char *new_mangled_name
+     = xasprintf ("9__SVE_VLSI%sLj%dEE", old_mangled_name, (int) value);
+   TREE_VALUE (mangled_name_node) = get_identifier (new_mangled_name);
+   free (new_mangled_name);
+ 
+   /* FIXME: The type ought to be a distinct copy in all cases, but
+      currently that makes the C frontend reject conversions between
+      svbool_t and its fixed-length variants.  Using a type variant
+      avoids that but means that we treat some ambiguous combinations
+      as valid.  */
+   tree new_type;
+   tree base_type = TYPE_MAIN_VARIANT (type);
+   if (lang_GNU_C () && VECTOR_BOOLEAN_TYPE_P (type))
+     new_type = build_variant_type_copy (base_type);
+   else
+     new_type = build_distinct_type_copy (base_type);
+ 
+   /* Construct a TYPE_DECL for the new type.  This serves two purposes:
+ 
+      - It ensures we don't print the original TYPE_DECL in error messages.
+        Printing the original name would be confusing because there are
+        situations in which the distinction between the original type and
+        the new type matters.  For example:
+ 
+ 	   __SVInt8_t __attribute__((arm_sve_vector_bits(512))) *a;
+ 	   __SVInt8_t *b;
+ 
+ 	   a = b;
+ 
+        is invalid in C++, but without this, we'd print both types in
+        the same way.
+ 
+      - Having a separate TYPE_DECL is necessary to ensure that C++
+        mangling works correctly.  See mangle_builtin_type for details.
+ 
+      The name of the decl is something like:
+ 
+        svint8_t __attribute__((arm_sve_vector_bits(512)))
+ 
+      This is a compromise.  It would be more accurate to use something like:
+ 
+        __SVInt8_t __attribute__((arm_sve_vector_bits(512)))
+ 
+      but the <arm_sve.h> name is likely to be more meaningful.  */
+   tree acle_name_node = TREE_CHAIN (mangled_name_node);
+   const char *old_type_name = IDENTIFIER_POINTER (TREE_VALUE (acle_name_node));
+   char *new_type_name
+     = xasprintf ("%s __attribute__((arm_sve_vector_bits(%d)))",
+ 		 old_type_name, (int) value);
+   tree decl = build_decl (BUILTINS_LOCATION, TYPE_DECL,
+ 			  get_identifier (new_type_name), new_type);
+   DECL_ARTIFICIAL (decl) = 1;
+   TYPE_NAME (new_type) = decl;
+   free (new_type_name);
+ 
+   /* Allow the GNU vector extensions to be applied to vectors.
+      The extensions aren't yet defined for packed predicates,
+      so continue to treat them as abstract entities for now.  */
+   if (!VECTOR_BOOLEAN_TYPE_P (new_type))
+     TYPE_INDIVISIBLE_P (new_type) = 0;
+ 
+   /* The new type is a normal sized type; it doesn't have the same
+      restrictions as sizeless types.  */
+   TYPE_ATTRIBUTES (new_type)
+     = get_arm_sve_vector_bits_attributes (TYPE_ATTRIBUTES (new_type),
+ 					  new_sve_type_args);
+ 
+   /* Apply the relevant attributes, qualifiers and alignment of TYPE,
+      if they differ from the original (sizeless) BASE_TYPE.  */
+   if (TYPE_ATTRIBUTES (base_type) != TYPE_ATTRIBUTES (type)
+       || TYPE_QUALS (base_type) != TYPE_QUALS (type))
+     {
+       tree attrs
+ 	= get_arm_sve_vector_bits_attributes (TYPE_ATTRIBUTES (type),
+ 					      new_sve_type_args);
+       new_type = build_type_attribute_qual_variant (new_type, attrs,
+ 						    TYPE_QUALS (type));
+     }
+   if (TYPE_ALIGN (base_type) != TYPE_ALIGN (type))
+     new_type = build_aligned_type (new_type, TYPE_ALIGN (type));
+ 
+   *node = new_type;
+   return NULL_TREE;
+ }
+ 
+ /* Implement TARGET_VERIFY_TYPE_CONTEXT for SVE types.  */
+ bool
+ verify_type_context (location_t loc, type_context_kind context,
+ 		     const_tree type, bool silent_p)
+ {
+   const_tree tmp = type;
+   if (omp_type_context (context) && POINTER_TYPE_P (type))
+     tmp = strip_pointer_types (tmp);
+ 
+   if (!sizeless_type_p (tmp))
+     return true;
+ 
+   switch (context)
+     {
+     case TCTX_SIZEOF:
+     case TCTX_STATIC_STORAGE:
+       if (!silent_p)
+ 	error_at (loc, "SVE type %qT does not have a fixed size", type);
+       return false;
+ 
+     case TCTX_ALIGNOF:
+       if (!silent_p)
+ 	error_at (loc, "SVE type %qT does not have a defined alignment", type);
+       return false;
+ 
+     case TCTX_THREAD_STORAGE:
+       if (!silent_p)
+ 	error_at (loc, "variables of type %qT cannot have thread-local"
+ 		  " storage duration", type);
+       return false;
+ 
+     case TCTX_POINTER_ARITH:
+       if (!silent_p)
+ 	error_at (loc, "arithmetic on pointer to SVE type %qT", type);
+       return false;
+ 
+     case TCTX_FIELD:
+       if (silent_p)
+ 	;
+       else if (lang_GNU_CXX ())
+ 	error_at (loc, "member variables cannot have SVE type %qT", type);
+       else
+ 	error_at (loc, "fields cannot have SVE type %qT", type);
+       return false;
+ 
+     case TCTX_ARRAY_ELEMENT:
+       if (!silent_p)
+ 	error_at (loc, "array elements cannot have SVE type %qT", type);
+       return false;
+ 
+     case TCTX_ALLOCATION:
+       if (!silent_p)
+ 	error_at (loc, "cannot allocate objects with SVE type %qT", type);
+       return false;
+ 
+     case TCTX_DEALLOCATION:
+       if (!silent_p)
+ 	error_at (loc, "cannot delete objects with SVE type %qT", type);
+       return false;
+ 
+     case TCTX_EXCEPTIONS:
+       if (!silent_p)
+ 	error_at (loc, "cannot throw or catch SVE type %qT", type);
+       return false;
+ 
+     case TCTX_CAPTURE_BY_COPY:
+       if (!silent_p)
+ 	error_at (loc, "capture by copy of SVE type %qT", type);
+       return false;
+ 
+     case TCTX_OMP_MAP:
+       if (!silent_p)
+ 	error_at (loc, "SVE type %qT not allowed in %<map%> clause", type);
+       return false;
+ 
+     case TCTX_OMP_MAP_IMP_REF:
+       if (!silent_p)
+ 	error ("cannot reference %qT object types in %<target%> region", type);
+       return false;
+ 
+     case TCTX_OMP_PRIVATE:
+       if (!silent_p)
+ 	error_at (loc, "SVE type %qT not allowed in"
+ 		  " %<target%> %<private%> clause", type);
+       return false;
+ 
+     case TCTX_OMP_FIRSTPRIVATE:
+       if (!silent_p)
+ 	error_at (loc, "SVE type %qT not allowed in"
+ 		  " %<target%> %<firstprivate%> clause", type);
+       return false;
+ 
+     case TCTX_OMP_DEVICE_ADDR:
+       if (!silent_p)
+ 	error_at (loc, "SVE type %qT not allowed in"
+ 		  " %<target%> device clauses", type);
+       return false;
+ 
+     default:
+       break;
+     }
+   gcc_unreachable ();
+ }
+ 
+ }
+ 
+ using namespace aarch64_acle;
+ 
+ inline void
+ gt_ggc_mx (function_instance *)
+ {
+ }
+ 
+ inline void
+ gt_pch_nx (function_instance *)
+ {
+ }
+ 
+ inline void
+ gt_pch_nx (function_instance *, gt_pointer_operator, void *)
+ {
+ }
+ 
+ #include "gt-aarch64-acle-builtins.h"
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-acle-builtins.h gcc-17-20260705/gcc/config/aarch64/aarch64-acle-builtins.h
*** gcc-17-20260628/gcc/config/aarch64/aarch64-acle-builtins.h	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/config/aarch64/aarch64-acle-builtins.h	Sun Jul  5 22:32:07 2026
***************
*** 0 ****
--- 1,2173 ----
+ /* ACLE support for AArch64 NEON and SVE
+    Copyright (C) 2018-2026 Free Software Foundation, Inc.
+ 
+    This file is part of GCC.
+ 
+    GCC 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.
+ 
+    GCC 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 GCC; see the file COPYING3.  If not see
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #ifndef GCC_AARCH64_ACLE_BUILTINS_H
+ #define GCC_AARCH64_ACLE_BUILTINS_H
+ 
+ #include "aarch64-builtins.h"
+ 
+ /* The full name of an SVE ACLE function is the concatenation of:
+ 
+    - the base name ("svadd", etc.)
+    - the "mode" suffix ("_n", "_index", etc.)
+    - the type suffixes ("_s32", "_b8", etc.)
+    - the predication suffix ("_x", "_z", etc.)
+    - the "_fpm" suffix when the floating point mode register is set
+ 
+    Each piece of information is individually useful, so we retain this
+    classification throughout:
+ 
+    - function_base represents the base name
+ 
+    - mode_suffix_index represents the mode suffix
+ 
+    - type_suffix_index represents individual type suffixes, while
+      type_suffix_triple represents a tuple of them
+ 
+    - prediction_index extends the predication suffix with an additional
+      alternative: PRED_implicit for implicitly-predicated operations
+ 
+    - fpm_mode represents whether the fpm register is set or not
+ 
+    In addition to its unique full name, a function may have a shorter
+    overloaded alias.  This alias removes pieces of the suffixes that
+    can be inferred from the arguments, such as by shortening the mode
+    suffix or dropping some of the type suffixes.  The base name and the
+    predication suffix stay the same.
+ 
+    The function_shape class describes what arguments a given function
+    takes and what its overloaded alias is called.  In broad terms,
+    function_base describes how the underlying instruction behaves while
+    function_shape describes how that instruction has been presented at
+    the language level.
+ 
+    The static arrays of function_group_info (function_groups,
+    neon_sve_function_groups, sme_function_groups) use function_group to describe
+    a group of related functions.  The function_builder class is responsible for
+    expanding these static description into a list of individual functions
+    and registering the associated built-in functions.  function_instance
+    describes one of these individual functions in terms of the properties
+    described above.
+ 
+    The classes involved in compiling a function call are:
+ 
+    - function_resolver, which resolves an overloaded function call to a
+      specific function_instance and its associated function decl
+ 
+    - function_checker, which checks whether the values of the arguments
+      conform to the ACLE specification
+ 
+    - gimple_folder, which tries to fold a function call at the gimple level
+ 
+    - function_expander, which expands a function call into rtl instructions
+ 
+    function_resolver and function_checker operate at the language level
+    and so are associated with the function_shape.  gimple_folder and
+    function_expander are concerned with the behavior of the function
+    and so are associated with the function_base.
+ 
+    Note that we've specifically chosen not to fold calls in the frontend,
+    since SVE intrinsics will hardly ever fold a useful language-level
+    constant.  */
+ namespace aarch64_acle {
+ /* The maximum number of vectors in an ACLE tuple type.  */
+ const unsigned int MAX_TUPLE_SIZE = 4;
+ 
+ /* Used to represent the default merge argument index for _m functions.
+    The actual index depends on how many arguments the function takes.  */
+ const unsigned int DEFAULT_MERGE_ARGNO = ~0U;
+ 
+ /* Flags that describe what a function might do, in addition to reading
+    its arguments and returning a result.  */
+ const unsigned int CP_READ_FPCR = 1U << 0;
+ const unsigned int CP_RAISE_FP_EXCEPTIONS = 1U << 1;
+ const unsigned int CP_READ_MEMORY = 1U << 2;
+ const unsigned int CP_PREFETCH_MEMORY = 1U << 3;
+ const unsigned int CP_WRITE_MEMORY = 1U << 4;
+ const unsigned int CP_READ_FFR = 1U << 5;
+ const unsigned int CP_WRITE_FFR = 1U << 6;
+ const unsigned int CP_READ_ZA = 1U << 7;
+ const unsigned int CP_WRITE_ZA = 1U << 8;
+ const unsigned int CP_READ_ZT0 = 1U << 9;
+ const unsigned int CP_WRITE_ZT0 = 1U << 10;
+ 
+ /* Enumerates the SVE predicate and (data) vector types, together called
+    "vector types" for brevity.  */
+ enum vector_type_index
+ {
+ #define DEF_SVE_TYPE(ACLE_NAME, NCHARS, ABI_NAME, SCALAR_TYPE) \
+   VECTOR_TYPE_ ## ACLE_NAME,
+ #include "aarch64-sve-builtins.def"
+   NUM_VECTOR_TYPES
+ };
+ 
+ /* Classifies the available measurement units for an address displacement.  */
+ enum units_index
+ {
+   UNITS_none,
+   UNITS_bytes,
+   UNITS_elements,
+   UNITS_vectors
+ };
+ 
+ /* Enumerates the pragma handlers.  */
+ enum handle_pragma_index
+ {
+   arm_neon_handle,
+   arm_sve_handle,
+   arm_sme_handle,
+   arm_neon_sve_handle,
+   NUM_PRAGMA_HANDLERS
+ };
+ 
+ /* Describes the various uses of a governing predicate.  */
+ enum predication_index
+ {
+   /* No governing predicate is present.  */
+   PRED_none,
+ 
+   /* A governing predicate is present but there is no predication suffix
+      associated with it.  This is used when the result is neither a vector
+      nor a predicate, since the distinction between "zeroing" and "merging"
+      doesn't apply in that case.  It is also used when a suffix would be
+      redundant (such as for loads and comparisons, which are inherently
+      zeroing operations).  */
+   PRED_implicit,
+ 
+   /* Merging predication: copy inactive lanes from the first data argument
+      to the vector result.  */
+   PRED_m,
+ 
+   /* "Don't care" predication: set inactive lanes of the vector result
+      to arbitrary values.  */
+   PRED_x,
+ 
+   /* Zero predication: set inactive lanes of the vector result to zero.  */
+   PRED_z,
+ 
+   /* Merging predication for SME's ZA: merge into slices of the array
+      instead of overwriting the whole slices.  */
+   PRED_za_m,
+ 
+   NUM_PREDS
+ };
+ 
+ /* Classifies intrinsics on whether they set the FPM register */
+ enum fpm_mode_index
+ {
+   FPM_unused,
+   FPM_set,
+   NUM_FPM_MODES
+ };
+ 
+ /* Classifies element types, based on type suffixes with the bit count
+    removed.  "count" isn't really an element type, but we pretend it is
+    for consistency.  */
+ enum type_class_index
+ {
+   TYPE_bool,
+   TYPE_bfloat,
+   TYPE_count,
+   TYPE_float,
+   TYPE_mfloat,
+   TYPE_signed,
+   TYPE_unsigned,
+   TYPE_poly,
+   NUM_TYPE_CLASSES
+ };
+ 
+ /* Classifies an operation into "modes"; for example, to distinguish
+    vector-scalar operations from vector-vector operations, or to
+    distinguish between different addressing modes.  This classification
+    accounts for the function suffixes that occur between the base name
+    and the first type suffix.  */
+ enum mode_suffix_index
+ {
+ #define DEF_SVE_MODE(NAME, BASE, DISPLACEMENT, UNITS) MODE_##NAME,
+ #include "aarch64-sve-builtins.def"
+   MODE_none
+ };
+ 
+ /* Enumerates the possible type suffixes.  Each suffix is associated with
+    a vector type, but for predicates provides extra information about the
+    element size.  */
+ enum type_suffix_index
+ {
+ #define DEF_SVE_TYPE_SUFFIX(NAME, ACLE_TYPE, CLASS, BITS, MODE) \
+   TYPE_SUFFIX_ ## NAME,
+ #define DEF_SME_ZA_SUFFIX(NAME, BITS, MODE) \
+   TYPE_SUFFIX_ ## NAME,
+ #include "aarch64-sve-builtins.def"
+   NUM_TYPE_SUFFIXES
+ };
+ 
+ /* Enumerates the possible group suffixes.  Each suffix combines two
+    optional pieces of information: the vector group size in a ZA index,
+    and the number of vectors in the largest tuple argument.  */
+ enum group_suffix_index
+ {
+ #define DEF_SVE_GROUP_SUFFIX(NAME, VG, VECTORS_PER_TUPLE) GROUP_##NAME,
+ #include "aarch64-sve-builtins.def"
+   GROUP_none,
+   NUM_GROUP_SUFFIXES
+ };
+ 
+ /* Combines three type suffixes.  */
+ typedef enum type_suffix_index type_suffix_triple[3];
+ 
+ class function_base;
+ class function_shape;
+ 
+ /* Static information about a mode suffix.  */
+ struct mode_suffix_info
+ {
+   /* The suffix string itself.  */
+   const char *string;
+ 
+   /* The type of the vector base address, or NUM_VECTOR_TYPES if the
+      mode does not include a vector base address.  */
+   vector_type_index base_vector_type;
+ 
+   /* The type of the vector displacement, or NUM_VECTOR_TYPES if the
+      mode does not include a vector displacement.  (Note that scalar
+      displacements are always int64_t.)  */
+   vector_type_index displacement_vector_type;
+ 
+   /* The units in which the vector or scalar displacement is measured,
+      or UNITS_none if the mode doesn't take a displacement.  */
+   units_index displacement_units;
+ };
+ 
+ #define ENTRY(E, M, Q, G) E,
+ enum aarch64_simd_type
+ {
+ #include "aarch64-simd-builtin-types.def"
+   ARM_NEON_H_TYPES_LAST
+ };
+ #undef ENTRY
+ 
+ /* Static information about a type suffix.  */
+ struct type_suffix_info
+ {
+   /* The suffix string itself.  */
+   const char *string;
+ 
+   /* The associated ACLE vector or predicate type.  */
+   vector_type_index vector_type : 8;
+ 
+   /* What kind of type the suffix represents.  */
+   type_class_index tclass : 8;
+ 
+   /* The number of bits and bytes in an element.  For predicates this
+      measures the associated data elements.  */
+   unsigned int element_bits : 8;
+   unsigned int element_bytes : 8;
+ 
+   /* True if the suffix is for an integer type.  */
+   unsigned int integer_p : 1;
+   /* True if the suffix is for an unsigned type.  */
+   unsigned int unsigned_p : 1;
+   /* True if the suffix is for a floating-point type.  */
+   unsigned int float_p : 1;
+   /* True if the suffix is for a vector type (integer or float).  */
+   unsigned int vector_p : 1;
+   /* True if the suffix is for a boolean type.  */
+   unsigned int bool_p : 1;
+   /* True if the suffix is for SME's ZA.  */
+   unsigned int za_p : 1;
+   unsigned int spare : 10;
+ 
+   /* The associated vector or predicate mode.  */
+   machine_mode vector_mode : 16;
+ 
+   /* The corresponding 64-bit and 128-bit arm_neon.h types, or
+      ARM_NEON_H_TYPES_LAST if none.  */
+   aarch64_simd_type neon64_type;
+   aarch64_simd_type neon128_type;
+ };
+ 
+ /* Static information about a group suffix.  */
+ struct group_suffix_info
+ {
+   /* The suffix string itself.  */
+   const char *string;
+ 
+   /* If the suffix describes a vector group in a ZA index, this is the
+      size of that group, otherwise it is zero.  */
+   unsigned int vg;
+ 
+   /* The number of vectors in the largest (or only) tuple argument,
+      or 1 if the suffix does not convey this information.  */
+   unsigned int vectors_per_tuple;
+ };
+ 
+ /* Represents an SVE vector, predicate, tuple of vectors, or tuple of
+    predicates.  There is also a representation of "no type"/"invalid type".  */
+ struct sve_type
+ {
+   sve_type () = default;
+   sve_type (type_suffix_index type) : type (type), num_vectors (1) {}
+   sve_type (type_suffix_index type, unsigned int num_vectors)
+     : type (type), num_vectors (num_vectors) {}
+ 
+   /* Return true if the type is valid.  */
+   explicit operator bool () const { return type != NUM_TYPE_SUFFIXES; }
+ 
+   bool operator== (const sve_type &) const;
+   bool operator!= (const sve_type &x) const { return !operator== (x); }
+ 
+   /* This is one of:
+ 
+      - TYPE_SUFFIX_b for svbool_t-based types
+      - TYPE_SUFFIX_c for svcount_t-based types
+      - the type suffix of a data element for SVE data vectors and tuples
+      - NUM_TYPE_SUFFIXES for invalid types.  */
+   type_suffix_index type = NUM_TYPE_SUFFIXES;
+ 
+   /* If the type is a tuple, this is the number of vectors in the tuple,
+      otherwise it is 1.  */
+   unsigned int num_vectors = 1;
+ };
+ 
+ inline bool
+ sve_type::operator== (const sve_type &other) const
+ {
+   return type == other.type && num_vectors == other.num_vectors;
+ }
+ 
+ /* Static information about a set of functions.  */
+ struct function_group_info
+ {
+   /* The base name, as a string.  */
+   const char *base_name;
+ 
+   /* Describes the behavior associated with the function base name.  */
+   const function_base *const *base;
+ 
+   /* The shape of the functions, as described above the class definition.
+      It's possible to have entries with the same base name but different
+      shapes.  */
+   const function_shape *const *shape;
+ 
+   /* A list of the available type suffixes, group suffixes, and predication
+      types.  The function supports every combination of the three.
+ 
+      The list of type suffixes is terminated by three NUM_TYPE_SUFFIXES.
+      It is lexicographically ordered based on the index value.
+ 
+      The list of group suffixes is terminated by NUM_GROUP_SUFFIXES
+      and the list of predication types is terminated by NUM_PREDS.  */
+   const type_suffix_triple *types;
+   const group_suffix_index *groups;
+   const predication_index *preds;
+ 
+   /* The architecture extensions that the functions require.  */
+   aarch64_required_extensions required_extensions;
+ 
+   /* Whether the floating point register is set */
+   fpm_mode_index fpm_mode;
+ };
+ 
+ /* Describes a single fully-resolved function (i.e. one that has a
+    unique full name).  */
+ class GTY((user)) function_instance
+ {
+ public:
+   function_instance (const char *, const function_base *,
+ 		     const function_shape *, mode_suffix_index,
+ 		     const type_suffix_triple &, group_suffix_index,
+ 		     predication_index, fpm_mode_index);
+ 
+   bool operator== (const function_instance &) const;
+   bool operator!= (const function_instance &) const;
+   hashval_t hash () const;
+ 
+   unsigned int call_properties () const;
+   bool reads_global_state_p () const;
+   bool modifies_global_state_p () const;
+   bool could_trap_p () const;
+ 
+   vector_type_index gp_type_index () const;
+   tree gp_value (gcall *) const;
+   tree inactive_values (gcall *) const;
+   tree gp_type () const;
+ 
+   unsigned int vectors_per_tuple () const;
+   tree memory_scalar_type () const;
+   machine_mode memory_vector_mode () const;
+ 
+   const mode_suffix_info &mode_suffix () const;
+   tree base_vector_type () const;
+   tree displacement_vector_type () const;
+   units_index displacement_units () const;
+ 
+   unsigned int num_za_tiles () const;
+ 
+   const type_suffix_info &type_suffix (unsigned int) const;
+   const group_suffix_info &group_suffix () const;
+ 
+   tree scalar_type (unsigned int) const;
+   tree vector_type (unsigned int) const;
+   tree tuple_type (unsigned int) const;
+   unsigned int elements_per_vq (unsigned int) const;
+   machine_mode vector_mode (unsigned int) const;
+   machine_mode tuple_mode (unsigned int) const;
+   machine_mode gp_mode (unsigned int) const;
+ 
+   /* The properties of the function.  */
+   const char *base_name;
+   const function_base *base;
+   const function_shape *shape;
+   mode_suffix_index mode_suffix_id;
+   type_suffix_triple type_suffix_ids;
+   group_suffix_index group_suffix_id;
+   predication_index pred;
+   fpm_mode_index fpm_mode;
+   int gp_index;
+ };
+ 
+ class registered_function;
+ 
+ /* A class for building and registering function decls.  */
+ class function_builder
+ {
+ public:
+   function_builder (handle_pragma_index, bool);
+   ~function_builder ();
+ 
+   void add_unique_function (const function_instance &, tree,
+ 			    vec<tree> &, aarch64_required_extensions, bool);
+   void add_overloaded_function (const function_instance &,
+ 				aarch64_required_extensions);
+   void add_overloaded_functions (const function_group_info &,
+ 				 mode_suffix_index);
+ 
+   void register_function_group (const function_group_info &);
+ 
+ private:
+   void append_name (const char *);
+   char *finish_name ();
+ 
+   char *get_name (const function_instance &, bool);
+ 
+   tree get_attributes (const function_instance &, aarch64_required_extensions);
+ 
+   registered_function &add_function (const function_instance &,
+ 				     const char *, tree, tree,
+ 				     aarch64_required_extensions, bool, bool);
+ 
+   /* The function type to use for functions that are resolved by
+      function_resolver.  */
+   tree m_overload_type;
+ 
+   /* True if we should create a separate decl for each instance of an
+      overloaded function, instead of using function_resolver.  */
+   bool m_direct_overloads;
+ 
+   /* Used for building up function names.  */
+   obstack m_string_obstack;
+ 
+   /* Used to store the index for the current function.  */
+   unsigned int m_function_index;
+ 
+   /* Stores the mode of the current pragma handler.  */
+   bool m_function_nulls;
+ };
+ 
+ /* A base class for handling calls to built-in functions.  */
+ class function_call_info : public function_instance
+ {
+ public:
+   function_call_info (location_t, const function_instance &, tree);
+ 
+   bool function_returns_void_p ();
+ 
+   /* The location of the call.  */
+   location_t location;
+ 
+   /* The FUNCTION_DECL that is being called.  */
+   tree fndecl;
+ };
+ 
+ /* A class for resolving an overloaded function call.  */
+ class function_resolver : public function_call_info
+ {
+ public:
+   enum target_type_restrictions { TARGET_ANY, TARGET_32_64 };
+   enum { SAME_SIZE = 256, HALF_SIZE, QUARTER_SIZE };
+   static const type_class_index SAME_TYPE_CLASS = NUM_TYPE_CLASSES;
+ 
+   function_resolver (location_t, const function_instance &, tree,
+ 		     vec<tree, va_gc> &);
+ 
+   const char *get_scalar_type_name (type_suffix_index);
+   tree get_argument_type (unsigned int);
+   bool scalar_argument_p (unsigned int);
+ 
+   void report_incorrect_num_vectors (unsigned int, sve_type, unsigned int);
+   void report_mismatched_num_vectors (unsigned int, sve_type,
+ 				      unsigned int, sve_type);
+ 
+   tree report_no_such_form (sve_type);
+   tree lookup_form (mode_suffix_index,
+ 		    type_suffix_index = NUM_TYPE_SUFFIXES,
+ 		    type_suffix_index = NUM_TYPE_SUFFIXES,
+ 		    type_suffix_index = NUM_TYPE_SUFFIXES,
+ 		    group_suffix_index = GROUP_none);
+   tree lookup_form (mode_suffix_index, sve_type);
+   tree resolve_to (mode_suffix_index,
+ 		   type_suffix_index = NUM_TYPE_SUFFIXES,
+ 		   type_suffix_index = NUM_TYPE_SUFFIXES,
+ 		   type_suffix_index = NUM_TYPE_SUFFIXES,
+ 		   group_suffix_index = GROUP_none);
+   tree resolve_to (mode_suffix_index, sve_type);
+   tree resolve_conversion (mode_suffix_index, sve_type);
+ 
+   vector_type_index infer_predicate_type (unsigned int);
+   type_suffix_index infer_integer_scalar_type (unsigned int);
+   type_suffix_index infer_64bit_scalar_integer_pair (unsigned int);
+   type_suffix_index infer_pointer_type (unsigned int, bool = false,
+ 					target_type_restrictions = TARGET_ANY);
+   sve_type infer_sve_type (unsigned int);
+   sve_type infer_vector_or_tuple_type (unsigned int, unsigned int);
+   type_suffix_index infer_vector_type (unsigned int);
+   type_suffix_index infer_integer_vector_type (unsigned int);
+   type_suffix_index infer_neon128_vector_type (unsigned int);
+   type_suffix_index infer_unsigned_vector_type (unsigned int);
+   type_suffix_index infer_sd_vector_type (unsigned int);
+   sve_type infer_tuple_type (unsigned int);
+ 
+   bool require_vector_or_scalar_type (unsigned int);
+ 
+   bool require_matching_predicate_type (vector_type_index, sve_type);
+   bool require_vector_type (unsigned int, vector_type_index);
+   bool require_matching_vector_type (unsigned int, unsigned int, sve_type);
+   bool require_derived_vector_type (unsigned int, unsigned int, sve_type,
+ 				    type_class_index = SAME_TYPE_CLASS,
+ 				    unsigned int = SAME_SIZE,
+ 				    unsigned int = 1);
+ 
+   bool require_scalar_type (unsigned int, const char *);
+   bool require_nonscalar_type (unsigned int);
+   bool require_pointer_type (unsigned int);
+   bool require_matching_integer_scalar_type (unsigned int, unsigned int,
+ 					     type_suffix_index);
+   bool require_derived_scalar_type (unsigned int, type_class_index,
+ 				    unsigned int = SAME_SIZE);
+   bool require_matching_pointer_type (unsigned int, unsigned int,
+ 				      type_suffix_index);
+   bool require_integer_immediate (unsigned int);
+ 
+   vector_type_index infer_vector_base_type (unsigned int);
+   vector_type_index infer_vector_displacement_type (unsigned int);
+ 
+   mode_suffix_index resolve_sv_displacement (unsigned int,
+ 					     type_suffix_index, bool);
+   mode_suffix_index resolve_gather_address (unsigned int,
+ 					    type_suffix_index, bool);
+   mode_suffix_index resolve_adr_address (unsigned int);
+ 
+   bool check_num_arguments (unsigned int);
+   bool check_gp_argument (unsigned int, unsigned int &, unsigned int &);
+   tree resolve_unary (type_class_index = SAME_TYPE_CLASS,
+ 		      unsigned int = SAME_SIZE, bool = false);
+   tree resolve_uniform (unsigned int, unsigned int = 0);
+   tree resolve_uniform_opt_n (unsigned int);
+   tree finish_opt_n_resolution (unsigned int, unsigned int, type_suffix_index,
+ 				type_class_index = SAME_TYPE_CLASS,
+ 				unsigned int = SAME_SIZE,
+ 				type_suffix_index = NUM_TYPE_SUFFIXES);
+   tree finish_opt_single_resolution (unsigned int, unsigned int, sve_type,
+ 				     type_class_index = SAME_TYPE_CLASS);
+ 
+   tree resolve ();
+ 
+ private:
+   /* The arguments to the overloaded function.  */
+   vec<tree, va_gc> &m_arglist;
+ };
+ 
+ /* A class for checking that the semantic constraints on a function call are
+    satisfied, such as arguments being integer constant expressions with
+    a particular range.  The parent class's FNDECL is the decl that was
+    called in the original source, before overload resolution.  */
+ class function_checker : public function_call_info
+ {
+ public:
+   function_checker (location_t, const function_instance &, tree,
+ 		    tree, unsigned int, tree *);
+ 
+   bool require_immediate_either_or (unsigned int, HOST_WIDE_INT,
+ 				    HOST_WIDE_INT);
+   bool require_immediate_enum (unsigned int, tree);
+   bool require_immediate_lane_index (unsigned int, unsigned int,
+ 				     unsigned int = 1);
+   bool require_immediate_one_of (unsigned int, HOST_WIDE_INT, HOST_WIDE_INT,
+ 				 HOST_WIDE_INT, HOST_WIDE_INT);
+   bool require_immediate_range (unsigned int, HOST_WIDE_INT, HOST_WIDE_INT);
+ 
+   bool check ();
+ 
+ private:
+   bool argument_exists_p (unsigned int);
+ 
+   bool require_immediate (unsigned int, HOST_WIDE_INT &);
+ 
+   /* The type of the resolved function.  */
+   tree m_fntype;
+ 
+   /* The arguments to the function.  */
+   unsigned int m_nargs;
+   tree *m_args;
+ 
+   /* The first argument not associated with the function's predication
+      type.  */
+   unsigned int m_base_arg;
+ };
+ 
+ /* A class for folding a gimple function call.  */
+ class gimple_folder : public function_call_info
+ {
+ public:
+   gimple_folder (const function_instance &, tree,
+ 		 gimple_stmt_iterator *, gcall *);
+ 
+   tree force_vector (gimple_seq &, tree, tree);
+   tree convert_pred (gimple_seq &, tree, unsigned int);
+   tree fold_contiguous_base (gimple_seq &, tree);
+   tree load_store_cookie (tree);
+ 
+   gcall *redirect_call (const function_instance &);
+   gimple *redirect_pred_x ();
+   gimple *fold_pfalse ();
+   gimple *convert_and_fold (tree, gimple *(*) (gimple_folder &,
+ 					       tree, vec<tree> &));
+ 
+   tree force_val (tree expr);
+   gassign *assign (tree lhs, tree rhs);
+   gassign *assign (tree lhs, tree_code code, tree rhs1, tree rhs2 = NULL_TREE,
+ 		   tree rhs3 = NULL_TREE);
+ 
+   gimple *fold_to_cstu (poly_uint64);
+   gimple *fold_to_pfalse ();
+   gimple *fold_to_ptrue ();
+   gimple *fold_to_vl_pred (unsigned int);
+   gimple *fold_const_binary (enum tree_code);
+   gimple *fold_active_lanes_to (tree);
+   gimple *fold_call_to (tree);
+   gimple *fold_to_stmt_vops (gimple *);
+ 
+   gimple *fold ();
+ 
+   /* Where to insert extra statements that feed the final replacement.  */
+   gimple_stmt_iterator *gsi;
+ 
+   /* The call we're folding.  */
+   gcall *call;
+ 
+   /* The result of the call, or null if none.  */
+   tree lhs;
+ };
+ 
+ /* A class for expanding a function call into RTL.  */
+ class function_expander : public function_call_info
+ {
+ public:
+   function_expander (const function_instance &, tree, tree, rtx);
+   rtx expand ();
+ 
+   insn_code direct_optab_handler (optab, unsigned int = 0);
+   insn_code direct_optab_handler_for_sign (optab, optab, unsigned int = 0,
+ 					   machine_mode = E_VOIDmode);
+   insn_code convert_optab_handler_for_sign (optab, optab, unsigned int,
+ 					    machine_mode, machine_mode);
+ 
+   machine_mode result_mode () const;
+ 
+   bool overlaps_input_p (rtx);
+ 
+   rtx convert_to_pmode (rtx);
+   rtx get_contiguous_base (machine_mode, unsigned int = 1, unsigned int = 2,
+ 			   aarch64_feature_flags = 0);
+   rtx get_fallback_value (machine_mode, unsigned int,
+ 			  unsigned int, unsigned int &);
+   rtx get_reg_target ();
+   rtx get_nonoverlapping_reg_target ();
+ 
+   void add_output_operand (insn_code);
+   void add_input_operand (insn_code, rtx);
+   void add_integer_operand (poly_int64);
+   void add_mem_operand (machine_mode, rtx);
+   void add_address_operand (rtx);
+   void add_fixed_operand (rtx);
+   rtx generate_insn (insn_code);
+ 
+   void prepare_gather_address_operands (unsigned int, bool = true);
+   void prepare_prefetch_operands ();
+   void add_ptrue_hint (unsigned int, machine_mode);
+   void rotate_inputs_left (unsigned int, unsigned int);
+   bool try_negating_argument (unsigned int, machine_mode);
+ 
+   rtx use_exact_insn (insn_code);
+   rtx use_unpred_insn (insn_code);
+   rtx use_pred_x_insn (insn_code);
+   rtx use_cond_insn (insn_code, unsigned int = DEFAULT_MERGE_ARGNO);
+   rtx use_vcond_mask_insn (insn_code, unsigned int = DEFAULT_MERGE_ARGNO);
+   rtx use_contiguous_load_insn (insn_code, bool = false);
+   rtx use_contiguous_prefetch_insn (insn_code);
+   rtx use_contiguous_store_insn (insn_code);
+ 
+   rtx map_to_rtx_codes (rtx_code, rtx_code, int, int,
+ 			unsigned int = DEFAULT_MERGE_ARGNO);
+   rtx map_to_unspecs (int, int, int, unsigned int = DEFAULT_MERGE_ARGNO);
+ 
+   /* The function call expression.  */
+   tree call_expr;
+ 
+   /* For functions that return a value, this is the preferred location
+      of that value.  It could be null or could have a different mode
+      from the function return type.  */
+   rtx possible_target;
+ 
+   /* The expanded arguments.  */
+   auto_vec<rtx, 16> args;
+ 
+ private:
+   /* Used to build up the operands to an instruction.  */
+   auto_vec<expand_operand, 8> m_ops;
+ };
+ 
+ /* Provides information about a particular function base name, and handles
+    tasks related to the base name.  */
+ class function_base
+ {
+ public:
+   /* Return a set of CP_* flags that describe what the function might do,
+      in addition to reading its arguments and returning a result.  */
+   virtual unsigned int call_properties (const function_instance &) const;
+ 
+   /* If the function operates on tuples of vectors, return the number
+      of vectors in the tuples, otherwise return 1.  */
+   virtual unsigned int vectors_per_tuple (const function_instance &) const;
+ 
+   /* If the function addresses memory, return the type of a single
+      scalar memory element.  */
+   virtual tree
+   memory_scalar_type (const function_instance &) const
+   {
+     gcc_unreachable ();
+   }
+ 
+   /* If the function addresses memory, return a vector mode whose
+      GET_MODE_NUNITS is the number of elements addressed and whose
+      GET_MODE_INNER is the mode of a single scalar memory element.  */
+   virtual machine_mode
+   memory_vector_mode (const function_instance &) const
+   {
+     gcc_unreachable ();
+   }
+ 
+   /* Try to fold the given gimple call.  Return the new gimple statement
+      on success, otherwise return null.  */
+   virtual gimple *fold (gimple_folder &) const { return NULL; }
+ 
+   /* Expand the given call into rtl.  Return the result of the function,
+      or an arbitrary value if the function doesn't return a result.  */
+   virtual rtx expand (function_expander &) const = 0;
+ };
+ 
+ /* Classifies functions into "shapes".  The idea is to take all the
+    type signatures for a set of functions, remove the governing predicate
+    (if any), and classify what's left based on:
+ 
+    - the number of arguments
+ 
+    - the process of determining the types in the signature from the mode
+      and type suffixes in the function name (including types that are not
+      affected by the suffixes)
+ 
+    - which arguments must be integer constant expressions, and what range
+      those arguments have
+ 
+    - the process for mapping overloaded names to "full" names.  */
+ class function_shape
+ {
+ public:
+   virtual bool has_merge_argument_p (const function_instance &,
+ 				     unsigned int) const;
+ 
+   virtual bool has_gp_argument_p (const function_instance &) const;
+ 
+   virtual bool explicit_type_suffix_p (unsigned int) const = 0;
+ 
+   /* True if the group suffix is present in overloaded names.
+      This isn't meaningful for pre-SME intrinsics, and true is
+      more common than false, so provide a default definition.  */
+   virtual bool explicit_group_suffix_p () const { return true; }
+ 
+   virtual type_suffix_index vector_base_type (type_suffix_index) const;
+ 
+   /* Define all functions associated with the given group.  */
+   virtual void build (function_builder &,
+ 		      const function_group_info &) const = 0;
+ 
+   /* Try to resolve the overloaded call.  Return the non-overloaded
+      function decl on success and error_mark_node on failure.  */
+   virtual tree resolve (function_resolver &) const = 0;
+ 
+   /* Check whether the given call is semantically valid.  Return true
+      if it is, otherwise report an error and return false.  */
+   virtual bool check (function_checker &) const { return true; }
+ };
+ 
+ /* RAII class for temporarily disabling the effect of any -fpack-struct option.
+    This is used to ensure that sve vector tuple types are defined with the
+    correct alignment.  */
+ class sve_alignment_switcher
+ {
+ public:
+   sve_alignment_switcher ();
+   ~sve_alignment_switcher ();
+ 
+ private:
+   unsigned int m_old_maximum_field_alignment;
+ };
+ 
+ extern const type_suffix_info type_suffixes[NUM_TYPE_SUFFIXES + 1];
+ extern const mode_suffix_info mode_suffixes[MODE_none + 1];
+ extern const group_suffix_info group_suffixes[NUM_GROUP_SUFFIXES];
+ 
+ extern tree scalar_types[NUM_VECTOR_TYPES + 1];
+ extern tree acle_vector_types[MAX_TUPLE_SIZE][NUM_VECTOR_TYPES + 1];
+ extern tree acle_svpattern;
+ extern tree acle_svprfop;
+ 
+ bool vector_cst_all_same (tree, unsigned int);
+ bool is_ptrue (tree, unsigned int);
+ bool is_pfalse (tree);
+ const function_instance *lookup_fndecl (tree);
+ 
+ /* Try to find a mode with the given mode_suffix_info fields.  Return the
+    mode on success or MODE_none on failure.  */
+ inline mode_suffix_index
+ find_mode_suffix (vector_type_index base_vector_type,
+ 		  vector_type_index displacement_vector_type,
+ 		  units_index displacement_units)
+ {
+   for (unsigned int mode_i = 0; mode_i < ARRAY_SIZE (mode_suffixes); ++mode_i)
+     {
+       const mode_suffix_info &mode = mode_suffixes[mode_i];
+       if (mode.base_vector_type == base_vector_type
+ 	  && mode.displacement_vector_type == displacement_vector_type
+ 	  && mode.displacement_units == displacement_units)
+ 	return mode_suffix_index (mode_i);
+     }
+   return MODE_none;
+ }
+ 
+ /* Return the type suffix associated with ELEMENT_BITS-bit elements of type
+    class TCLASS.  */
+ inline type_suffix_index
+ find_type_suffix (type_class_index tclass, unsigned int element_bits)
+ {
+   for (unsigned int i = 0; i < NUM_TYPE_SUFFIXES; ++i)
+     if (type_suffixes[i].tclass == tclass
+ 	&& type_suffixes[i].element_bits == element_bits)
+       return type_suffix_index (i);
+   gcc_unreachable ();
+ }
+ 
+ /* Return the single field in tuple type TYPE.  */
+ inline tree
+ tuple_type_field (tree type)
+ {
+   for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
+     if (TREE_CODE (field) == FIELD_DECL)
+       return field;
+   gcc_unreachable ();
+ }
+ 
+ /* Return the vector type associated with TYPE.  */
+ inline tree
+ get_vector_type (sve_type type)
+ {
+   auto vector_type = type_suffixes[type.type].vector_type;
+   return acle_vector_types[type.num_vectors - 1][vector_type];
+ }
+ 
+ inline function_instance::
+ function_instance (const char *base_name_in, const function_base *base_in,
+ 		   const function_shape *shape_in,
+ 		   mode_suffix_index mode_suffix_id_in,
+ 		   const type_suffix_triple &type_suffix_ids_in,
+ 		   group_suffix_index group_suffix_id_in,
+ 		   predication_index pred_in, fpm_mode_index fpm_mode_in)
+   : base_name (base_name_in), base (base_in), shape (shape_in),
+     mode_suffix_id (mode_suffix_id_in), group_suffix_id (group_suffix_id_in),
+     pred (pred_in), fpm_mode (fpm_mode_in)
+ {
+   memcpy (type_suffix_ids, type_suffix_ids_in, sizeof (type_suffix_ids));
+ }
+ 
+ inline bool
+ function_instance::operator== (const function_instance &other) const
+ {
+   return (base == other.base
+ 	  && shape == other.shape
+ 	  && mode_suffix_id == other.mode_suffix_id
+ 	  && type_suffix_ids[0] == other.type_suffix_ids[0]
+ 	  && type_suffix_ids[1] == other.type_suffix_ids[1]
+ 	  && type_suffix_ids[2] == other.type_suffix_ids[2]
+ 	  && group_suffix_id == other.group_suffix_id
+ 	  && pred == other.pred
+ 	  && fpm_mode == other.fpm_mode);
+ }
+ 
+ inline bool
+ function_instance::operator!= (const function_instance &other) const
+ {
+   return !operator== (other);
+ }
+ 
+ /* Return the index of the type that should be used as the governing
+    predicate of this function.  */
+ inline vector_type_index
+ function_instance::gp_type_index () const
+ {
+   if (group_suffix ().vectors_per_tuple > 1)
+     return VECTOR_TYPE_svcount_t;
+   return VECTOR_TYPE_svbool_t;
+ }
+ 
+ /* Return the type that should be used as the governing predicate of
+    this function.  */
+ inline tree
+ function_instance::gp_type () const
+ {
+   return acle_vector_types[0][gp_type_index ()];
+ }
+ 
+ /* Return the tree value that should be used as the governing predicate of
+    this function.  If none then return NULL_TREE.  */
+ inline tree
+ function_instance::gp_value (gcall *call) const
+ {
+   if (gp_index < 0)
+     return NULL_TREE;
+ 
+   return gimple_call_arg (call, gp_index);
+ }
+ 
+ /* Return the tree value that should be used for the inactive lanes should this
+    function be a predicated function with a gp.  Otherwise return NULL_TREE.  */
+ inline tree
+ function_instance::inactive_values (gcall *call) const
+ {
+   if (gp_index < 0)
+     return NULL_TREE;
+ 
+   /* Function is unary with m predicate.  */
+   if (gp_index == 1)
+     return gimple_call_arg (call, 0);
+ 
+   /* Else the inactive values are the next element.  */
+   return gimple_call_arg (call, 1);
+ }
+ 
+ /* If the function operates on tuples of vectors, return the number
+    of vectors in the tuples, otherwise return 1.  */
+ inline unsigned int
+ function_instance::vectors_per_tuple () const
+ {
+   return base->vectors_per_tuple (*this);
+ }
+ 
+ /* If the function addresses memory, return the type of a single
+    scalar memory element.  */
+ inline tree
+ function_instance::memory_scalar_type () const
+ {
+   return base->memory_scalar_type (*this);
+ }
+ 
+ /* If the function addresses memory, return a vector mode whose
+    GET_MODE_NUNITS is the number of elements addressed and whose
+    GET_MODE_INNER is the mode of a single scalar memory element.  */
+ inline machine_mode
+ function_instance::memory_vector_mode () const
+ {
+   return base->memory_vector_mode (*this);
+ }
+ 
+ /* Return information about the function's mode suffix.  */
+ inline const mode_suffix_info &
+ function_instance::mode_suffix () const
+ {
+   return mode_suffixes[mode_suffix_id];
+ }
+ 
+ /* Return the type of the function's vector base address argument,
+    or null it doesn't have a vector base address.  */
+ inline tree
+ function_instance::base_vector_type () const
+ {
+   return acle_vector_types[0][mode_suffix ().base_vector_type];
+ }
+ 
+ /* Return the type of the function's vector index or offset argument,
+    or null if doesn't have a vector index or offset argument.  */
+ inline tree
+ function_instance::displacement_vector_type () const
+ {
+   return acle_vector_types[0][mode_suffix ().displacement_vector_type];
+ }
+ 
+ /* Return the number of ZA tiles associated with the _za<N> suffix
+    (which is always the first type suffix).  */
+ inline unsigned int
+ function_instance::num_za_tiles () const
+ {
+   auto &suffix = type_suffix (0);
+   gcc_checking_assert (suffix.za_p);
+   return suffix.element_bytes;
+ }
+ 
+ /* If the function takes a vector or scalar displacement, return the units
+    in which the displacement is measured, otherwise return UNITS_none.  */
+ inline units_index
+ function_instance::displacement_units () const
+ {
+   return mode_suffix ().displacement_units;
+ }
+ 
+ /* Return information about type suffix I.  */
+ inline const type_suffix_info &
+ function_instance::type_suffix (unsigned int i) const
+ {
+   return type_suffixes[type_suffix_ids[i]];
+ }
+ 
+ /* Return information about the function's group suffix.  */
+ inline const group_suffix_info &
+ function_instance::group_suffix () const
+ {
+   return group_suffixes[group_suffix_id];
+ }
+ 
+ /* Return the scalar type associated with type suffix I.  */
+ inline tree
+ function_instance::scalar_type (unsigned int i) const
+ {
+   return scalar_types[type_suffix (i).vector_type];
+ }
+ 
+ /* Return the vector type associated with type suffix I.  */
+ inline tree
+ function_instance::vector_type (unsigned int i) const
+ {
+   return acle_vector_types[0][type_suffix (i).vector_type];
+ }
+ 
+ /* If the function operates on tuples of vectors, return the tuple type
+    associated with type suffix I, otherwise return the vector type associated
+    with type suffix I.  */
+ inline tree
+ function_instance::tuple_type (unsigned int i) const
+ {
+   unsigned int num_vectors = vectors_per_tuple ();
+   return acle_vector_types[num_vectors - 1][type_suffix (i).vector_type];
+ }
+ 
+ /* Return the number of elements of type suffix I that fit within a
+    128-bit block.  */
+ inline unsigned int
+ function_instance::elements_per_vq (unsigned int i) const
+ {
+   return 128 / type_suffix (i).element_bits;
+ }
+ 
+ /* Return the vector or predicate mode associated with type suffix I.  */
+ inline machine_mode
+ function_instance::vector_mode (unsigned int i) const
+ {
+   return type_suffix (i).vector_mode;
+ }
+ 
+ /* Return the mode of tuple_type (I).  */
+ inline machine_mode
+ function_instance::tuple_mode (unsigned int i) const
+ {
+   if (group_suffix ().vectors_per_tuple > 1)
+     return TYPE_MODE (tuple_type (i));
+   return vector_mode (i);
+ }
+ 
+ /* Return the mode of the governing predicate to use when operating on
+    type suffix I.  */
+ inline machine_mode
+ function_instance::gp_mode (unsigned int i) const
+ {
+   /* Multi-vector operations are predicated on an svcount_t, which has
+      mode VNx16BI.  */
+   if (group_suffix ().vectors_per_tuple > 1)
+     return VNx16BImode;
+   return aarch64_sve_pred_mode (type_suffix (i).element_bytes).require ();
+ }
+ 
+ /* Return true if the function has no return value.  */
+ inline bool
+ function_call_info::function_returns_void_p ()
+ {
+   return TREE_TYPE (TREE_TYPE (fndecl)) == void_type_node;
+ }
+ 
+ /* Default implementation of function::call_properties, with conservatively
+    correct behavior for floating-point instructions.  */
+ inline unsigned int
+ function_base::call_properties (const function_instance &instance) const
+ {
+   unsigned int flags = 0;
+   if (instance.type_suffix (0).float_p || instance.type_suffix (1).float_p)
+     flags |= CP_READ_FPCR | CP_RAISE_FP_EXCEPTIONS;
+   return flags;
+ }
+ 
+ inline unsigned int
+ function_base::vectors_per_tuple (const function_instance &instance) const
+ {
+   return instance.group_suffix ().vectors_per_tuple;
+ }
+ 
+ /* Return true if INSTANCE (which has NARGS arguments) has an initial
+    vector argument whose only purpose is to specify the values of
+    inactive lanes.  */
+ inline bool
+ function_shape::has_merge_argument_p (const function_instance &instance,
+ 				      unsigned int nargs) const
+ {
+   return nargs == 1 && instance.pred == PRED_m;
+ }
+ 
+ /* Return true if INSTANCE has an predicate argument that can be used as the global
+    predicate.  */
+ inline bool
+ function_shape::has_gp_argument_p (const function_instance &instance) const
+ {
+   return instance.pred != PRED_none;
+ }
+ 
+ /* Return the mode of the result of a call.  */
+ inline machine_mode
+ function_expander::result_mode () const
+ {
+   return TYPE_MODE (TREE_TYPE (TREE_TYPE (fndecl)));
+ }
+ 
+ /* Define a TYPES_<combination> macro for each combination of type
+    suffixes that an ACLE function can have, where <combination> is the
+    name used in DEF_SVE_FUNCTION entries.
+ 
+    Use S (T) for single type suffix T and D (T1, T2) for a pair of type
+    suffixes T1 and T2.  Use commas to separate the suffixes.
+ 
+    Although the order shouldn't matter, the convention is to sort the
+    suffixes lexicographically after dividing suffixes into a type
+    class ("b", "f", etc.) and a numerical bit count.  */
+ 
+ /* _b8 _b16 _b32 _b64.  */
+ #define TYPES_all_pred(S, D, T) \
+   S (b8), S (b16), S (b32), S (b64)
+ 
+ /* _c8 _c16 _c32 _c64.  */
+ #define TYPES_all_count(S, D, T) \
+   S (c8), S (c16), S (c32), S (c64)
+ 
+ /* _b8 _b16 _b32 _b64
+    _c8 _c16 _c32 _c64.  */
+ #define TYPES_all_pred_count(S, D, T) \
+   TYPES_all_pred (S, D, T), \
+   TYPES_all_count (S, D, T)
+ 
+ /* _f16 _f32 _f64.  */
+ #define TYPES_all_float(S, D, T) \
+   S (f16), S (f32), S (f64)
+ 
+ /* _f32 _f64.  */
+ #define TYPES_sd_float(S, D, T) \
+   S (f32), S (f64)
+ 
+ /* _s8 _s16 _s32 _s64.  */
+ #define TYPES_all_signed(S, D, T) \
+   S (s8), S (s16), S (s32), S (s64)
+ 
+ /*     _f16 _f32 _f64
+    _s8 _s16 _s32 _s64.  */
+ #define TYPES_all_float_and_signed(S, D, T) \
+   TYPES_all_float (S, D, T), TYPES_all_signed (S, D, T)
+ 
+ /* _u8 _u16 _u32 _u64.  */
+ #define TYPES_all_unsigned(S, D, T) \
+   S (u8), S (u16), S (u32), S (u64)
+ 
+ /* _s8 _s16 _s32 _s64
+    _u8 _u16 _u32 _u64.  */
+ #define TYPES_all_integer(S, D, T) \
+   TYPES_all_signed (S, D, T), TYPES_all_unsigned (S, D, T)
+ 
+ /*     _f16 _f32 _f64
+    _s8 _s16 _s32 _s64
+    _u8 _u16 _u32 _u64.  */
+ #define TYPES_all_arith(S, D, T) \
+   TYPES_all_float (S, D, T), TYPES_all_integer (S, D, T)
+ 
+ /*	    _f32 _f64
+    _s8 _s16 _s32 _s64
+    _u8 _u16 _u32 _u64.  */
+ #define TYPES_all_arith_no_fp16(S, D, T) \
+   S (f32), S (f64), \
+   TYPES_all_integer (S, D, T)
+ 
+ #define TYPES_all_data(S, D, T) \
+   TYPES_b_data (S, D, T), \
+   TYPES_h_data (S, D, T), \
+   TYPES_s_data (S, D, T), \
+   TYPES_d_data (S, D, T)
+ 
+ /* _b only.  */
+ #define TYPES_b(S, D, T) \
+   S (b)
+ 
+ /* _c only.  */
+ #define TYPES_c(S, D, T) \
+   S (c)
+ 
+ /* _u8.  */
+ #define TYPES_b_unsigned(S, D, T) \
+   S (u8)
+ 
+ /* _s8
+    _u8.  */
+ #define TYPES_b_integer(S, D, T) \
+   S (s8), TYPES_b_unsigned (S, D, T)
+ 
+ /* _mf8
+    _s8
+    _u8.  */
+ #define TYPES_b_data(S, D, T) \
+   S (mf8), TYPES_b_integer (S, D, T)
+ 
+ /* _s8 _s16
+    _u8 _u16.  */
+ #define TYPES_bh_integer(S, D, T) \
+   S (s8), S (s16), S (u8), S (u16)
+ 
+ /* _u8 _u32.  */
+ #define TYPES_bs_unsigned(S, D, T) \
+   S (u8), S (u32)
+ 
+ /* _s8 _s16 _s32.  */
+ #define TYPES_bhs_signed(S, D, T) \
+   S (s8), S (s16), S (s32)
+ 
+ /* _u8 _u16 _u32.  */
+ #define TYPES_bhs_unsigned(S, D, T) \
+   S (u8), S (u16), S (u32)
+ 
+ /* _s8 _s16 _s32
+    _u8 _u16 _u32.  */
+ #define TYPES_bhs_integer(S, D, T) \
+   TYPES_bhs_signed (S, D, T), TYPES_bhs_unsigned (S, D, T)
+ 
+ #define TYPES_bh_data(S, D, T)			\
+   TYPES_b_data (S, D, T), \
+   TYPES_h_data (S, D, T)
+ 
+ #define TYPES_bhs_data(S, D, T)			\
+   TYPES_b_data (S, D, T), \
+   TYPES_h_data (S, D, T), \
+   TYPES_s_data (S, D, T)
+ 
+ /* _s16_s8  _s32_s16  _s64_s32
+    _u16_u8  _u32_u16  _u64_u32.  */
+ #define TYPES_bhs_widen(S, D, T) \
+   D (s16, s8), D (s32, s16), D (s64, s32), \
+   D (u16, u8), D (u32, u16), D (u64, u32)
+ 
+ /* _mf8.  */
+ #define TYPES_b_float(S, D, T) \
+   S (mf8)
+ 
+ /* _bf16.  */
+ #define TYPES_h_bfloat(S, D, T) \
+   S (bf16)
+ 
+ /* _f16.  */
+ #define TYPES_h_float(S, D, T) \
+   S (f16)
+ 
+ /* _s16
+    _u16.  */
+ #define TYPES_h_integer(S, D, T) \
+   S (s16), S (u16)
+ 
+ /* _bf16
+    _f16
+    _s16
+    _u16.  */
+ #define TYPES_h_data(S, D, T) \
+   S (bf16), S (f16), TYPES_h_integer (S, D, T)
+ 
+ /* _s16 _s32.  */
+ #define TYPES_hs_signed(S, D, T) \
+   S (s16), S (s32)
+ 
+ /* _s16 _s32
+    _u16 _u32.  */
+ #define TYPES_hs_integer(S, D, T) \
+   TYPES_hs_signed (S, D, T), S (u16), S (u32)
+ 
+ /* _f16 _f32.  */
+ #define TYPES_hs_float(S, D, T) \
+   S (f16), S (f32)
+ 
+ #define TYPES_hs_data(S, D, T) \
+   TYPES_h_data (S, D, T), \
+   TYPES_s_data (S, D, T)
+ 
+ /* _u16 _u64.  */
+ #define TYPES_hd_unsigned(S, D, T) \
+   S (u16), S (u64)
+ 
+ /* _s16 _s32 _s64.  */
+ #define TYPES_hsd_signed(S, D, T) \
+   S (s16), S (s32), S (s64)
+ 
+ /* _s16 _s32 _s64
+    _u16 _u32 _u64.  */
+ #define TYPES_hsd_integer(S, D, T) \
+   TYPES_hsd_signed (S, D, T), S (u16), S (u32), S (u64)
+ 
+ #define TYPES_hsd_data(S, D, T) \
+   TYPES_h_data (S, D, T), \
+   TYPES_s_data (S, D, T), \
+   TYPES_d_data (S, D, T)
+ 
+ /* _f16_mf8.  */
+ #define TYPES_h_float_mf8(S, D, T) \
+   D (f16, mf8)
+ 
+ /* _f32.  */
+ #define TYPES_s_float(S, D, T) \
+   S (f32)
+ 
+ /* _f32_mf8.  */
+ #define TYPES_s_float_mf8(S, D, T) \
+   D (f32, mf8)
+ 
+ /*      _f32
+    _s16 _s32 _s64
+    _u16 _u32 _u64.  */
+ #define TYPES_s_float_hsd_integer(S, D, T) \
+   TYPES_s_float (S, D, T), TYPES_hsd_integer (S, D, T)
+ 
+ /* _f32
+    _s32 _s64
+    _u32 _u64.  */
+ #define TYPES_s_float_sd_integer(S, D, T) \
+   TYPES_s_float (S, D, T), TYPES_sd_integer (S, D, T)
+ 
+ /* _s32.  */
+ #define TYPES_s_signed(S, D, T) \
+   S (s32)
+ 
+ /* _u32.  */
+ #define TYPES_s_unsigned(S, D, T) \
+   S (u32)
+ 
+ /* _s32
+    _u32.  */
+ #define TYPES_s_integer(S, D, T) \
+   TYPES_s_signed (S, D, T), TYPES_s_unsigned (S, D, T)
+ 
+ /* _f32
+    _s32
+    _u32.  */
+ #define TYPES_s_data(S, D, T) \
+   TYPES_s_float (S, D, T), TYPES_s_integer (S, D, T)
+ 
+ /* _s32 _s64.  */
+ #define TYPES_sd_signed(S, D, T) \
+   S (s32), S (s64)
+ 
+ /* _u32 _u64.  */
+ #define TYPES_sd_unsigned(S, D, T) \
+   S (u32), S (u64)
+ 
+ /* _s32 _s64
+    _u32 _u64.  */
+ #define TYPES_sd_integer(S, D, T) \
+   TYPES_sd_signed (S, D, T), TYPES_sd_unsigned (S, D, T)
+ 
+ #define TYPES_sd_data(S, D, T) \
+   TYPES_s_data (S, D, T), \
+   TYPES_d_data (S, D, T)
+ 
+ /* _f16 _f32 _f64
+ 	_s32 _s64
+ 	_u32 _u64.  */
+ #define TYPES_all_float_and_sd_integer(S, D, T) \
+   TYPES_all_float (S, D, T), TYPES_sd_integer (S, D, T)
+ 
+ /* _f64.  */
+ #define TYPES_d_float(S, D, T) \
+   S (f64)
+ 
+ /* _u64.  */
+ #define TYPES_d_unsigned(S, D, T) \
+   S (u64)
+ 
+ /* _s64
+    _u64.  */
+ #define TYPES_d_integer(S, D, T) \
+   S (s64), TYPES_d_unsigned (S, D, T)
+ 
+ /* _f64
+    _s64
+    _u64.  */
+ #define TYPES_d_data(S, D, T) \
+   TYPES_d_float (S, D, T), TYPES_d_integer (S, D, T)
+ 
+ /* All the type combinations allowed by svcvt.  */
+ #define TYPES_cvt(S, D, T) \
+   D (f16, f32), D (f16, f64), \
+   D (f16, s16), D (f16, s32), D (f16, s64), \
+   D (f16, u16), D (f16, u32), D (f16, u64), \
+   \
+   D (f32, f16), D (f32, f64), \
+   D (f32, s32), D (f32, s64), \
+   D (f32, u32), D (f32, u64), \
+   \
+   D (f64, f16), D (f64, f32), \
+   D (f64, s32), D (f64, s64), \
+   D (f64, u32), D (f64, u64), \
+   \
+   D (s16, f16), \
+   D (s32, f16), D (s32, f32), D (s32, f64), \
+   D (s64, f16), D (s64, f32), D (s64, f64), \
+   \
+   D (u16, f16), \
+   D (u32, f16), D (u32, f32), D (u32, f64), \
+   D (u64, f16), D (u64, f32), D (u64, f64)
+ 
+ /* _bf16_f32.  */
+ #define TYPES_cvt_bfloat(S, D, T) \
+   D (bf16, f32)
+ 
+ /* { _bf16 _f16 } x _f32.  */
+ #define TYPES_cvt_h_s_float(S, D, T) \
+   D (bf16, f32), D (f16, f32)
+ 
+ /* _f32_f16.  */
+ #define TYPES_cvt_f32_f16(S, D, T) \
+   D (f32, f16)
+ 
+ /* _f32_f16
+    _f64_f32.  */
+ #define TYPES_cvt_long(S, D, T) \
+   D (f32, f16), D (f64, f32)
+ 
+ /* _f32_f64.  */
+ #define TYPES_cvt_narrow_s(S, D, T) \
+   D (f32, f64)
+ 
+ /* _f16_f32
+    _f32_f64.  */
+ #define TYPES_cvt_narrow(S, D, T) \
+   D (f16, f32), TYPES_cvt_narrow_s (S, D, T)
+ 
+ /* { _s32 _u32 } x _f32
+ 
+    _f32 x { _s32 _u32 }.  */
+ #define TYPES_cvt_s_s(S, D, T) \
+   D (s32, f32), \
+   D (u32, f32), \
+   D (f32, s32), \
+   D (f32, u32)
+ 
+ /* _f16_mf8
+    _bf16_mf8.  */
+ #define TYPES_cvt_mf8(S, D, T) \
+   D (f16, mf8), D (bf16, mf8)
+ 
+ /* _mf8_f16
+    _mf8_bf16.  */
+ #define TYPES_cvtn_mf8(S, D, T) \
+   D (mf8, f16), D (mf8, bf16)
+ 
+ /* _mf8_f32.  */
+ #define TYPES_cvtnx_mf8(S, D, T) \
+   D (mf8, f32)
+ 
+ /* { _s32 _s64 } x { _b8 _b16 _b32 _b64 }
+    { _u32 _u64 }.  */
+ #define TYPES_inc_dec_n1(D, A) \
+   D (A, b8), D (A, b16), D (A, b32), D (A, b64)
+ #define TYPES_inc_dec_n(S, D, T) \
+   TYPES_inc_dec_n1 (D, s32), \
+   TYPES_inc_dec_n1 (D, s64), \
+   TYPES_inc_dec_n1 (D, u32), \
+   TYPES_inc_dec_n1 (D, u64)
+ 
+ /* { _s16 _u16 } x _s32
+ 
+    {      _u16 } x _u32.  */
+ #define TYPES_qcvt_x2(S, D, T) \
+   D (s16, s32), \
+   D (u16, u32), \
+   D (u16, s32)
+ 
+ /* { _s8  _u8  } x _s32
+ 
+    {      _u8  } x _u32
+ 
+    { _s16 _u16 } x _s64
+ 
+    {      _u16 } x _u64.  */
+ #define TYPES_qcvt_x4(S, D, T) \
+   D (s8, s32), \
+   D (u8, u32), \
+   D (u8, s32), \
+   D (s16, s64), \
+   D (u16, u64), \
+   D (u16, s64)
+ 
+ /* _s16_s32
+    _u16_u32.  */
+ #define TYPES_qrshr_x2(S, D, T) \
+   D (s16, s32), \
+   D (u16, u32)
+ 
+ /* _u16_s32.  */
+ #define TYPES_qrshru_x2(S, D, T) \
+   D (u16, s32)
+ 
+ /* _s8_s32
+    _s16_s64
+    _u8_u32
+    _u16_u64.  */
+ #define TYPES_qrshr_x4(S, D, T) \
+   D (s8, s32), \
+   D (s16, s64), \
+   D (u8, u32), \
+   D (u16, u64)
+ 
+ /* _u8_s32
+    _u16_s64.  */
+ #define TYPES_qrshru_x4(S, D, T) \
+   D (u8, s32), \
+   D (u16, s64)
+ 
+ /* { _mf8 _bf16		 }   { _mf8 _bf16	   }
+    {      _f16 _f32 _f64 }   {      _f16 _f32 _f64 }
+    { _s8  _s16 _s32 _s64 } x { _s8  _s16 _s32 _s64 }
+    { _u8  _u16 _u32 _u64 }   { _u8  _u16 _u32 _u64 }.  */
+ #define TYPES_reinterpret1(D, A) \
+   D (A, mf8), \
+   D (A, bf16), \
+   D (A, f16), D (A, f32), D (A, f64), \
+   D (A, s8), D (A, s16), D (A, s32), D (A, s64), \
+   D (A, u8), D (A, u16), D (A, u32), D (A, u64)
+ #define TYPES_reinterpret(S, D, T) \
+   TYPES_reinterpret1 (D, mf8), \
+   TYPES_reinterpret1 (D, bf16), \
+   TYPES_reinterpret1 (D, f16), \
+   TYPES_reinterpret1 (D, f32), \
+   TYPES_reinterpret1 (D, f64), \
+   TYPES_reinterpret1 (D, s8), \
+   TYPES_reinterpret1 (D, s16), \
+   TYPES_reinterpret1 (D, s32), \
+   TYPES_reinterpret1 (D, s64), \
+   TYPES_reinterpret1 (D, u8), \
+   TYPES_reinterpret1 (D, u16), \
+   TYPES_reinterpret1 (D, u32), \
+   TYPES_reinterpret1 (D, u64)
+ 
+ /* _b_c
+    _c_b.  */
+ #define TYPES_reinterpret_b(S, D, T) \
+   D (b, c), \
+   D (c, b)
+ 
+ /* { _b8 _b16 _b32 _b64 } x { _s32 _s64 }
+ 			    { _u32 _u64 } */
+ #define TYPES_while1(D, bn) \
+   D (bn, s32), D (bn, s64), D (bn, u32), D (bn, u64)
+ #define TYPES_while(S, D, T) \
+   TYPES_while1 (D, b8), \
+   TYPES_while1 (D, b16), \
+   TYPES_while1 (D, b32), \
+   TYPES_while1 (D, b64)
+ 
+ /* { _b8 _b16 _b32 _b64 } x { _s64 }
+ 			    { _u64 } */
+ #define TYPES_while_x(S, D, T) \
+   D (b8, s64), D (b8, u64), \
+   D (b16, s64), D (b16, u64), \
+   D (b32, s64), D (b32, u64), \
+   D (b64, s64), D (b64, u64)
+ 
+ /* { _c8 _c16 _c32 _c64 } x { _s64 }
+ 			    { _u64 } */
+ #define TYPES_while_x_c(S, D, T) \
+   D (c8, s64), D (c8, u64), \
+   D (c16, s64), D (c16, u64), \
+   D (c32, s64), D (c32, u64), \
+   D (c64, s64), D (c64, u64)
+ 
+ /* _f32_f16
+    _s32_s16
+    _u32_u16.  */
+ #define TYPES_s_narrow_fsu(S, D, T) \
+   D (f32, f16), D (s32, s16), D (u32, u16)
+ 
+ /* _za8 _za16 _za32 _za64 _za128.  */
+ #define TYPES_all_za(S, D, T) \
+   S (za8), S (za16), S (za32), S (za64), S (za128)
+ 
+ /* _za64.  */
+ #define TYPES_d_za(S, D, T) \
+   S (za64)
+ 
+ /* {   _za8 } x {  _mf8       _s8  _u8 }
+    {  _za16 } x { _bf16 _f16 _s16 _u16 }
+    {  _za32 } x {       _f32 _s32 _u32 }
+    {  _za64 } x {       _f64 _s64 _u64 }.  */
+ #define TYPES_za_bhsd_data(S, D, T) \
+   D (za8, mf8), D (za8, s8), D (za8, u8), \
+   D (za16, bf16), D (za16, f16), D (za16, s16), D (za16, u16), \
+   D (za32, f32), D (za32, s32), D (za32, u32), \
+   D (za64, f64), D (za64, s64), D (za64, u64)
+ 
+ /* Likewise, plus:
+ 
+    { _za128 } x {      _bf16	       }
+ 		{       _f16 _f32 _f64 }
+ 		{ _s8   _s16 _s32 _s64 }
+ 		{ _u8   _u16 _u32 _u64 }.  */
+ 
+ #define TYPES_za_all_data(S, D, T) \
+   TYPES_za_bhsd_data (S, D, T), \
+   TYPES_reinterpret1 (D, za128)
+ 
+ /* _za16_mf8.  */
+ #define TYPES_za_h_mf8(S, D, T) \
+   D (za16, mf8)
+ 
+ /* { _za_16 _za_32 } x _mf8.  */
+ #define TYPES_za_hs_mf8(S, D, T) \
+   D (za16, mf8), D (za32, mf8)
+ 
+ /* _za16_bf16.  */
+ #define TYPES_za_h_bfloat(S, D, T) \
+   D (za16, bf16)
+ 
+ /* _za16_f16.  */
+ #define TYPES_za_h_float(S, D, T) \
+   D (za16, f16)
+ 
+ /* _za32_s8.  */
+ #define TYPES_za_s_b_signed(S, D, T) \
+    D (za32, s8)
+ 
+ /* _za32_u8.  */
+ #define TYPES_za_s_b_unsigned(S, D, T) \
+    D (za32, u8)
+ 
+ /* _za32 x { _s8 _u8 }.  */
+ #define TYPES_za_s_b_integer(S, D, T) \
+   D (za32, s8), D (za32, u8)
+ 
+ /* _za32 x { _s16 _u16 }.  */
+ #define TYPES_za_s_h_integer(S, D, T) \
+   D (za32, s16), D (za32, u16)
+ 
+ /* _za32 x { _bf16 _f16 _s16 _u16 }.  */
+ #define TYPES_za_s_h_data(S, D, T) \
+   D (za32, bf16), D (za32, f16), D (za32, s16), D (za32, u16)
+ 
+ /* _za32_u32.  */
+ #define TYPES_za_s_unsigned(S, D, T) \
+   D (za32, u32)
+ 
+ /* _za32 x { _s32 _u32 }.  */
+ #define TYPES_za_s_integer(S, D, T) \
+   D (za32, s32), D (za32, u32)
+ 
+ /* _za32_mf8.  */
+ #define TYPES_za_s_mf8(S, D, T) \
+   D (za32, mf8)
+ 
+ /* _za32_f32.  */
+ #define TYPES_za_s_float(S, D, T) \
+   D (za32, f32)
+ 
+ /* _za32 x { _f32 _s32 _u32 }.  */
+ #define TYPES_za_s_data(S, D, T) \
+   D (za32, f32), D (za32, s32), D (za32, u32)
+ 
+ /* _za64 x { _s16 _u16 }.  */
+ #define TYPES_za_d_h_integer(S, D, T) \
+   D (za64, s16), D (za64, u16)
+ 
+ /* _za64_f64.  */
+ #define TYPES_za_d_float(S, D, T) \
+   D (za64, f64)
+ 
+ /* _za64 x { _s64 _u64 }.  */
+ #define TYPES_za_d_integer(S, D, T) \
+   D (za64, s64), D (za64, u64)
+ 
+ /* _za32 x { _s8 _u8 _bf16 _f16 _f32 }.  */
+ #define TYPES_mop_base(S, D, T) \
+   D (za32, s8), D (za32, u8), D (za32, bf16), D (za32, f16), D (za32, f32)
+ 
+ /* _za32_s8.  */
+ #define TYPES_mop_base_signed(S, D, T) \
+   D (za32, s8)
+ 
+ /* _za32_u8.  */
+ #define TYPES_mop_base_unsigned(S, D, T) \
+   D (za32, u8)
+ 
+ /* _za64 x { _s16 _u16 }.  */
+ #define TYPES_mop_i16i64(S, D, T) \
+   D (za64, s16), D (za64, u16)
+ 
+ /* _za64_s16.  */
+ #define TYPES_mop_i16i64_signed(S, D, T) \
+   D (za64, s16)
+ 
+ /* _za64_u16.  */
+ #define TYPES_mop_i16i64_unsigned(S, D, T) \
+   D (za64, u16)
+ 
+ /* _za.  */
+ #define TYPES_za(S, D, T) \
+   S (za)
+ 
+ /* _p16 _s16 _u16 _f16 _bf16.  */
+ #define TYPES_h_neon(S, D, T) \
+   S (p16), S (s16), S (u16), S (f16), S (bf16)
+ 
+ /* _p8  _s8  _u8  _mf8
+    _p16 _s16 _u16 _f16 _bf16
+ 	_s32 _u32 _f32
+    _p64 _s64 _u64 _f64.  */
+ #define TYPES_all_neon(S, D, T) \
+   TYPES_bhsd_neon (S, D, T), \
+   TYPES_h_bfloat (S, D, T)
+ 
+ /* _p8 _s8 _u8.  */
+ #define TYPES_b_neon(S, D, T) \
+   S (p8), S (s8), S (u8)
+ 
+ /* _p8.  */
+ #define TYPES_b_poly(S, D, T) \
+   S (p8)
+ 
+ /* _p8 _p16 _p64.  */
+ #define TYPES_bhd_poly(S, D, T) \
+   S (p8), S (p16), S (p64)
+ 
+ /* _p8 _p16.  */
+ #define TYPES_bh_poly(S, D, T) \
+   S (p8), S (p16)
+ 
+ /* _p16.  */
+ #define TYPES_h_poly(S, D, T) \
+   S (p16)
+ 
+ /* _p8 _p16 _p64 _p128.  */
+ #define TYPES_bhdq_poly(S, D, T) \
+   S (p8), S (p16), S (p64), S (p128)
+ 
+ /* _p8  _s8  _u8  _mf8
+    _p16 _s16 _u16 _f16
+ 	_s32 _u32 _f32.  */
+ #define TYPES_bhs_neon(S, D, T) \
+   TYPES_bh_poly (S, D, T), S (mf8), \
+   TYPES_bhs_integer (S, D, T), \
+   TYPES_hs_float (S, D, T)
+ 
+ /* _p8  _s8  _u8  _mf8
+    _p16 _s16 _u16 _f16
+ 	_s32 _u32 _f32
+    _p64 _s64 _u64 _f64.  */
+ #define TYPES_bhsd_neon(S, D, T) \
+   TYPES_bhd_poly (S, D, T), S (mf8), \
+   TYPES_all_integer (S, D, T), \
+   TYPES_all_float (S, D, T)
+ 
+ /* _p8  _s8  _u8  _mf8
+    _p16 _s16 _u16 _bf16
+ 	_s32 _u32 _f32
+    _p64 _s64 _u64 _f64.  */
+ #define TYPES_neon_copy_lane(S, D, T) \
+   TYPES_bhd_poly (S, D, T), \
+   TYPES_all_integer (S, D, T), \
+   S (mf8), S (bf16), S (f32), S (f64)
+ 
+ /* _p8 _s8 _u8.  */
+ #define TYPES_b_neon(S, D, T) \
+   S (p8), S (s8), S (u8)
+ 
+ /* _p8 _s8 _u8 _mf8.  */
+ #define TYPES_neon_rev16(S, D, T) \
+   S (p8), S (s8), S (u8), S (mf8)
+ 
+ /* _p8  _s8  _u8  _mf8
+    _p16 _s16 _u16.  */
+ #define TYPES_neon_rev32(S, D, T) \
+   S (p8),  S (s8),  S (u8), S (mf8), \
+   S (p16), S (s16), S (u16)
+ 
+ /* _p8  _s8  _u8  _mf8
+    _p16 _s16 _u16 _f16
+ 	_s32 _u32 _f32.  */
+ #define TYPES_neon_rev64(S, D, T) \
+   S (p8),  S (s8),  S (u8),  S (mf8), \
+   S (p16), S (s16), S (u16), S (f16), \
+ 	   S (s32), S (u32), S (f32)
+ 
+ /* vreinterpret intrinsics are defined for any pair of element types.
+    { _mf8		 }   { _mf8		   }
+    {     _bf16		 }   {     _bf16	   }
+    {      _f16 _f32 _f64 }   {      _f16 _f32 _f64 }
+    { _s8  _s16 _s32 _s64 } x { _s8  _s16 _s32 _s64 }
+    { _u8  _u16 _u32 _u64 }   { _u8  _u16 _u32 _u64 }
+    { _p8  _p16      _p64 }   { _p8  _p16      _p64 }.  */
+ #define TYPES_neon_reinterpret1(D, A) \
+   D (A, mf8), \
+ 	     D (A, bf16), \
+ 	     D (A, f16), D (A, f32), D (A, f64), \
+   D (A, s8), D (A, s16), D (A, s32), D (A, s64), \
+   D (A, u8), D (A, u16), D (A, u32), D (A, u64), \
+   D (A, p8), D (A, p16)		   , D (A, p64)
+ #define TYPES_neon_reinterpret(S, D, T) \
+   TYPES_neon_reinterpret1 (D, mf8), \
+   TYPES_neon_reinterpret1 (D, bf16), \
+   TYPES_neon_reinterpret1 (D, f16), \
+   TYPES_neon_reinterpret1 (D, f32), \
+   TYPES_neon_reinterpret1 (D, f64), \
+   TYPES_neon_reinterpret1 (D, s8), \
+   TYPES_neon_reinterpret1 (D, s16), \
+   TYPES_neon_reinterpret1 (D, s32), \
+   TYPES_neon_reinterpret1 (D, s64), \
+   TYPES_neon_reinterpret1 (D, u8), \
+   TYPES_neon_reinterpret1 (D, u16), \
+   TYPES_neon_reinterpret1 (D, u32), \
+   TYPES_neon_reinterpret1 (D, u64), \
+   TYPES_neon_reinterpret1 (D, p8), \
+   TYPES_neon_reinterpret1 (D, p16), \
+   TYPES_neon_reinterpret1 (D, p64)
+ 
+ /* vreinterpretq intrinsics are additionally defined for p128.
+    {     _bf16		       }   {     _bf16		       }
+    {      _f16 _f32 _f64       }   {      _f16 _f32 _f64       }
+    { _mf8		       }   { _mf8		       }
+    { _s8  _s16 _s32 _s64       } x { _s8  _s16 _s32 _s64       }
+    { _u8  _u16 _u32 _u64       }   { _u8  _u16 _u32 _u64       }
+    { _p8  _p16      _p64 _p128 }   { _p8  _p16      _p64 _p128 }.  */
+ #define TYPES_neon_reinterpretq1(D, A) \
+   D (A, mf8), \
+ 	     D (A, bf16), \
+ 	     D (A, f16), D (A, f32), D (A, f64), \
+   D (A, s8), D (A, s16), D (A, s32), D (A, s64), \
+   D (A, u8), D (A, u16), D (A, u32), D (A, u64), \
+   D (A, p8), D (A, p16)		   , D (A, p64), D (A, p128)
+ #define TYPES_neon_reinterpretq(S, D, T) \
+   TYPES_neon_reinterpretq1 (D, mf8), \
+   TYPES_neon_reinterpretq1 (D, bf16), \
+   TYPES_neon_reinterpretq1 (D, f16), \
+   TYPES_neon_reinterpretq1 (D, f32), \
+   TYPES_neon_reinterpretq1 (D, f64), \
+   TYPES_neon_reinterpretq1 (D, s8), \
+   TYPES_neon_reinterpretq1 (D, s16), \
+   TYPES_neon_reinterpretq1 (D, s32), \
+   TYPES_neon_reinterpretq1 (D, s64), \
+   TYPES_neon_reinterpretq1 (D, u8), \
+   TYPES_neon_reinterpretq1 (D, u16), \
+   TYPES_neon_reinterpretq1 (D, u32), \
+   TYPES_neon_reinterpretq1 (D, u64), \
+   TYPES_neon_reinterpretq1 (D, p8), \
+   TYPES_neon_reinterpretq1 (D, p16), \
+   TYPES_neon_reinterpretq1 (D, p64), \
+   TYPES_neon_reinterpretq1 (D, p128)
+ 
+ /* Describe a tuple of type suffixes in which only the first is used.  */
+ #define DEF_VECTOR_TYPE(X) \
+   { TYPE_SUFFIX_ ## X, NUM_TYPE_SUFFIXES, NUM_TYPE_SUFFIXES }
+ 
+ /* Describe a tuple of type suffixes in which only the first two are used.  */
+ #define DEF_DOUBLE_TYPE(X, Y) \
+   { TYPE_SUFFIX_ ## X, TYPE_SUFFIX_ ## Y, NUM_TYPE_SUFFIXES }
+ 
+ /* Describe a tuple of type suffixes in which three elements are used.  */
+ #define DEF_TRIPLE_TYPE(X, Y, Z) \
+   { TYPE_SUFFIX_ ## X, TYPE_SUFFIX_ ## Y, TYPE_SUFFIX_ ## Z }
+ 
+ /* Create an array that can be used in aarch64-sve-builtins.def to
+    select the type suffixes in TYPES_<NAME>.  */
+ #define DEF_SVE_TYPES_ARRAY(NAME) \
+   static const type_suffix_triple types_##NAME[] = { \
+     TYPES_##NAME (DEF_VECTOR_TYPE, DEF_DOUBLE_TYPE, DEF_TRIPLE_TYPE), \
+     { NUM_TYPE_SUFFIXES, NUM_TYPE_SUFFIXES, NUM_TYPE_SUFFIXES } \
+   }
+ 
+ /* For functions that don't take any type suffixes.  */
+ static const type_suffix_triple types_none[] = {
+   { NUM_TYPE_SUFFIXES, NUM_TYPE_SUFFIXES, NUM_TYPE_SUFFIXES },
+   { NUM_TYPE_SUFFIXES, NUM_TYPE_SUFFIXES, NUM_TYPE_SUFFIXES }
+ };
+ 
+ /* Create an array for each TYPES_<combination> macro above.  */
+ DEF_SVE_TYPES_ARRAY (all_pred);
+ DEF_SVE_TYPES_ARRAY (all_count);
+ DEF_SVE_TYPES_ARRAY (all_pred_count);
+ DEF_SVE_TYPES_ARRAY (all_float);
+ DEF_SVE_TYPES_ARRAY (sd_float);
+ DEF_SVE_TYPES_ARRAY (all_signed);
+ DEF_SVE_TYPES_ARRAY (all_float_and_signed);
+ DEF_SVE_TYPES_ARRAY (all_unsigned);
+ DEF_SVE_TYPES_ARRAY (all_integer);
+ DEF_SVE_TYPES_ARRAY (all_arith);
+ DEF_SVE_TYPES_ARRAY (all_arith_no_fp16);
+ DEF_SVE_TYPES_ARRAY (all_data);
+ DEF_SVE_TYPES_ARRAY (b);
+ DEF_SVE_TYPES_ARRAY (b_unsigned);
+ DEF_SVE_TYPES_ARRAY (b_integer);
+ DEF_SVE_TYPES_ARRAY (bh_integer);
+ DEF_SVE_TYPES_ARRAY (bs_unsigned);
+ DEF_SVE_TYPES_ARRAY (bhs_signed);
+ DEF_SVE_TYPES_ARRAY (bhs_unsigned);
+ DEF_SVE_TYPES_ARRAY (bhs_integer);
+ DEF_SVE_TYPES_ARRAY (bh_data);
+ DEF_SVE_TYPES_ARRAY (bhs_data);
+ DEF_SVE_TYPES_ARRAY (bhs_widen);
+ DEF_SVE_TYPES_ARRAY (c);
+ DEF_SVE_TYPES_ARRAY (h_bfloat);
+ DEF_SVE_TYPES_ARRAY (h_float);
+ DEF_SVE_TYPES_ARRAY (h_float_mf8);
+ DEF_SVE_TYPES_ARRAY (h_integer);
+ DEF_SVE_TYPES_ARRAY (h_data);
+ DEF_SVE_TYPES_ARRAY (hs_signed);
+ DEF_SVE_TYPES_ARRAY (hs_integer);
+ DEF_SVE_TYPES_ARRAY (hs_float);
+ DEF_SVE_TYPES_ARRAY (hs_data);
+ DEF_SVE_TYPES_ARRAY (hd_unsigned);
+ DEF_SVE_TYPES_ARRAY (hsd_signed);
+ DEF_SVE_TYPES_ARRAY (hsd_integer);
+ DEF_SVE_TYPES_ARRAY (hsd_data);
+ DEF_SVE_TYPES_ARRAY (s_float);
+ DEF_SVE_TYPES_ARRAY (s_float_hsd_integer);
+ DEF_SVE_TYPES_ARRAY (s_float_mf8);
+ DEF_SVE_TYPES_ARRAY (s_float_sd_integer);
+ DEF_SVE_TYPES_ARRAY (s_signed);
+ DEF_SVE_TYPES_ARRAY (s_unsigned);
+ DEF_SVE_TYPES_ARRAY (s_integer);
+ DEF_SVE_TYPES_ARRAY (s_data);
+ DEF_SVE_TYPES_ARRAY (sd_signed);
+ DEF_SVE_TYPES_ARRAY (sd_unsigned);
+ DEF_SVE_TYPES_ARRAY (sd_integer);
+ DEF_SVE_TYPES_ARRAY (sd_data);
+ DEF_SVE_TYPES_ARRAY (all_float_and_sd_integer);
+ DEF_SVE_TYPES_ARRAY (d_float);
+ DEF_SVE_TYPES_ARRAY (d_unsigned);
+ DEF_SVE_TYPES_ARRAY (d_integer);
+ DEF_SVE_TYPES_ARRAY (d_data);
+ DEF_SVE_TYPES_ARRAY (cvt);
+ DEF_SVE_TYPES_ARRAY (cvt_bfloat);
+ DEF_SVE_TYPES_ARRAY (cvt_h_s_float);
+ DEF_SVE_TYPES_ARRAY (cvt_f32_f16);
+ DEF_SVE_TYPES_ARRAY (cvt_long);
+ DEF_SVE_TYPES_ARRAY (cvt_mf8);
+ DEF_SVE_TYPES_ARRAY (cvt_narrow_s);
+ DEF_SVE_TYPES_ARRAY (cvt_narrow);
+ DEF_SVE_TYPES_ARRAY (cvt_s_s);
+ DEF_SVE_TYPES_ARRAY (cvtn_mf8);
+ DEF_SVE_TYPES_ARRAY (cvtnx_mf8);
+ DEF_SVE_TYPES_ARRAY (inc_dec_n);
+ DEF_SVE_TYPES_ARRAY (qcvt_x2);
+ DEF_SVE_TYPES_ARRAY (qcvt_x4);
+ DEF_SVE_TYPES_ARRAY (qrshr_x2);
+ DEF_SVE_TYPES_ARRAY (qrshr_x4);
+ DEF_SVE_TYPES_ARRAY (qrshru_x2);
+ DEF_SVE_TYPES_ARRAY (qrshru_x4);
+ DEF_SVE_TYPES_ARRAY (reinterpret);
+ DEF_SVE_TYPES_ARRAY (reinterpret_b);
+ DEF_SVE_TYPES_ARRAY (while);
+ DEF_SVE_TYPES_ARRAY (while_x);
+ DEF_SVE_TYPES_ARRAY (while_x_c);
+ DEF_SVE_TYPES_ARRAY (s_narrow_fsu);
+ DEF_SVE_TYPES_ARRAY (all_za);
+ DEF_SVE_TYPES_ARRAY (d_za);
+ DEF_SVE_TYPES_ARRAY (za_bhsd_data);
+ DEF_SVE_TYPES_ARRAY (za_all_data);
+ DEF_SVE_TYPES_ARRAY (za_h_mf8);
+ DEF_SVE_TYPES_ARRAY (za_h_bfloat);
+ DEF_SVE_TYPES_ARRAY (za_h_float);
+ DEF_SVE_TYPES_ARRAY (za_s_b_signed);
+ DEF_SVE_TYPES_ARRAY (za_s_b_unsigned);
+ DEF_SVE_TYPES_ARRAY (za_s_b_integer);
+ DEF_SVE_TYPES_ARRAY (za_s_h_integer);
+ DEF_SVE_TYPES_ARRAY (za_s_h_data);
+ DEF_SVE_TYPES_ARRAY (za_s_unsigned);
+ DEF_SVE_TYPES_ARRAY (za_s_integer);
+ DEF_SVE_TYPES_ARRAY (za_s_mf8);
+ DEF_SVE_TYPES_ARRAY (za_hs_mf8);
+ DEF_SVE_TYPES_ARRAY (za_s_float);
+ DEF_SVE_TYPES_ARRAY (za_s_data);
+ DEF_SVE_TYPES_ARRAY (za_d_h_integer);
+ DEF_SVE_TYPES_ARRAY (za_d_float);
+ DEF_SVE_TYPES_ARRAY (za_d_integer);
+ DEF_SVE_TYPES_ARRAY (mop_base);
+ DEF_SVE_TYPES_ARRAY (mop_base_signed);
+ DEF_SVE_TYPES_ARRAY (mop_base_unsigned);
+ DEF_SVE_TYPES_ARRAY (mop_i16i64);
+ DEF_SVE_TYPES_ARRAY (mop_i16i64_signed);
+ DEF_SVE_TYPES_ARRAY (mop_i16i64_unsigned);
+ DEF_SVE_TYPES_ARRAY (za);
+ 
+ DEF_SVE_TYPES_ARRAY (b_float);
+ DEF_SVE_TYPES_ARRAY (all_neon);
+ DEF_SVE_TYPES_ARRAY (b_neon);
+ DEF_SVE_TYPES_ARRAY (h_neon);
+ DEF_SVE_TYPES_ARRAY (b_poly);
+ DEF_SVE_TYPES_ARRAY (h_poly);
+ DEF_SVE_TYPES_ARRAY (bh_poly);
+ DEF_SVE_TYPES_ARRAY (bhd_poly);
+ DEF_SVE_TYPES_ARRAY (bhdq_poly);
+ DEF_SVE_TYPES_ARRAY (bhs_neon);
+ DEF_SVE_TYPES_ARRAY (bhsd_neon);
+ DEF_SVE_TYPES_ARRAY (neon_copy_lane);
+ DEF_SVE_TYPES_ARRAY (neon_rev16);
+ DEF_SVE_TYPES_ARRAY (neon_rev32);
+ DEF_SVE_TYPES_ARRAY (neon_rev64);
+ DEF_SVE_TYPES_ARRAY (neon_reinterpret);
+ DEF_SVE_TYPES_ARRAY (neon_reinterpretq);
+ 
+ static const group_suffix_index groups_none[] = {
+   GROUP_none, NUM_GROUP_SUFFIXES
+ };
+ 
+ static const group_suffix_index groups_x2[] = { GROUP_x2, NUM_GROUP_SUFFIXES };
+ 
+ static const group_suffix_index groups_x12[] = {
+   GROUP_none, GROUP_x2, NUM_GROUP_SUFFIXES
+ };
+ 
+ static const group_suffix_index groups_x4[] = { GROUP_x4, NUM_GROUP_SUFFIXES };
+ 
+ static const group_suffix_index groups_x24[] = {
+   GROUP_x2, GROUP_x4, NUM_GROUP_SUFFIXES
+ };
+ 
+ static const group_suffix_index groups_x124[] = {
+   GROUP_none, GROUP_x2, GROUP_x4, NUM_GROUP_SUFFIXES
+ };
+ 
+ static const group_suffix_index groups_x1234[] = {
+   GROUP_none, GROUP_x2, GROUP_x3, GROUP_x4, NUM_GROUP_SUFFIXES
+ };
+ 
+ static const group_suffix_index groups_vg1x2[] = {
+   GROUP_vg1x2, NUM_GROUP_SUFFIXES
+ };
+ 
+ static const group_suffix_index groups_vg1x4[] = {
+   GROUP_vg1x4, NUM_GROUP_SUFFIXES
+ };
+ 
+ static const group_suffix_index groups_vg1x24[] = {
+   GROUP_vg1x2, GROUP_vg1x4, NUM_GROUP_SUFFIXES
+ };
+ 
+ static const group_suffix_index groups_vg2[] = {
+   GROUP_vg2x1, GROUP_vg2x2, GROUP_vg2x4, NUM_GROUP_SUFFIXES
+ };
+ 
+ static const group_suffix_index groups_vg4[] = {
+   GROUP_vg4x1, GROUP_vg4x2, GROUP_vg4x4, NUM_GROUP_SUFFIXES
+ };
+ 
+ static const group_suffix_index groups_vg24[] = {
+   GROUP_vg2, GROUP_vg4, NUM_GROUP_SUFFIXES
+ };
+ 
+ /* Used by functions that have no governing predicate.  */
+ static const predication_index preds_none[] = { PRED_none, NUM_PREDS };
+ 
+ /* Used by functions that have a governing predicate but do not have an
+    explicit suffix.  */
+ static const predication_index preds_implicit[] = { PRED_implicit, NUM_PREDS };
+ 
+ /* Used by functions that only support "_m" predication.  */
+ static const predication_index preds_m[] = { PRED_m, NUM_PREDS };
+ 
+ /* Used by functions that allow merging and "don't care" predication,
+    but are not suitable for predicated MOVPRFX.  */
+ static const predication_index preds_mx[] = {
+   PRED_m, PRED_x, NUM_PREDS
+ };
+ 
+ /* Used by functions that allow merging, zeroing and "don't care"
+    predication.  */
+ static const predication_index preds_mxz[] = {
+   PRED_m, PRED_x, PRED_z, NUM_PREDS
+ };
+ 
+ /* Used by functions that have the mxz predicated forms above, and in addition
+    have an unpredicated form.  */
+ static const predication_index preds_mxz_or_none[] = {
+   PRED_m, PRED_x, PRED_z, PRED_none, NUM_PREDS
+ };
+ 
+ /* Used by functions that allow merging and zeroing predication but have
+    no "_x" form.  */
+ static const predication_index preds_mz[] = { PRED_m, PRED_z, NUM_PREDS };
+ 
+ /* Used by functions that have an unpredicated form and a _z predicated
+    form.  */
+ static const predication_index preds_z_or_none[] = {
+   PRED_z, PRED_none, NUM_PREDS
+ };
+ 
+ /* Used by (mostly predicate) functions that only support "_z" predication.  */
+ static const predication_index preds_z[] = { PRED_z, NUM_PREDS };
+ 
+ /* Used by SME instructions that always merge into ZA.  */
+ static const predication_index preds_za_m[] = { PRED_za_m, NUM_PREDS };
+ 
+ void build_all (function_builder &b, const char *signature,
+ 		const function_group_info &group,
+ 		mode_suffix_index mode_suffix_id,
+ 		bool force_direct_overloads = false);
+ }
+ 
+ #endif
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-builtins.cc gcc-17-20260705/gcc/config/aarch64/aarch64-builtins.cc
*** gcc-17-20260628/gcc/config/aarch64/aarch64-builtins.cc	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/aarch64-builtins.cc	Sun Jul  5 22:32:07 2026
*************** aarch64_types_loadstruct_lane_p_qualifie
*** 416,437 ****
        qualifier_poly, qualifier_struct_load_store_lane_index };
  #define TYPES_LOADSTRUCT_LANE_P (aarch64_types_loadstruct_lane_p_qualifiers)
  
- static enum aarch64_type_qualifiers
- aarch64_types_bsl_p_qualifiers[SIMD_MAX_BUILTIN_ARGS]
-   = { qualifier_poly, qualifier_unsigned,
-       qualifier_poly, qualifier_poly };
- #define TYPES_BSL_P (aarch64_types_bsl_p_qualifiers)
- static enum aarch64_type_qualifiers
- aarch64_types_bsl_s_qualifiers[SIMD_MAX_BUILTIN_ARGS]
-   = { qualifier_none, qualifier_unsigned,
-       qualifier_none, qualifier_none };
- #define TYPES_BSL_S (aarch64_types_bsl_s_qualifiers)
- static enum aarch64_type_qualifiers
- aarch64_types_bsl_u_qualifiers[SIMD_MAX_BUILTIN_ARGS]
-   = { qualifier_unsigned, qualifier_unsigned,
-       qualifier_unsigned, qualifier_unsigned };
- #define TYPES_BSL_U (aarch64_types_bsl_u_qualifiers)
- 
  /* The first argument (return type) of a store should be void type,
     which we represent with qualifier_void.  Their first operand will be
     a DImode pointer to the location to store to, so we must use
--- 416,421 ----
*************** static aarch64_simd_builtin_datum aarch6
*** 606,745 ****
    FCMLA_LANEQ_BUILTIN (270, v4hf, fcmla_laneq, V4HF, true) \
  
  
- /* vreinterpret intrinsics are defined for any pair of element types.
-    {     _bf16           }   {     _bf16           }
-    {      _f16 _f32 _f64 }   {      _f16 _f32 _f64 }
-    { _mf8                }   { _mf8                }
-    { _s8  _s16 _s32 _s64 } x { _s8  _s16 _s32 _s64 }
-    { _u8  _u16 _u32 _u64 }   { _u8  _u16 _u32 _u64 }
-    { _p8  _p16      _p64 }   { _p8  _p16      _p64 }.  */
- #define VREINTERPRET_BUILTIN2(A, B) \
-   VREINTERPRET_BUILTIN (A, B, d)
- 
- #define VREINTERPRET_BUILTINS1(A) \
-   VREINTERPRET_BUILTIN2 (A, bf16) \
-   VREINTERPRET_BUILTIN2 (A, f16) \
-   VREINTERPRET_BUILTIN2 (A, f32) \
-   VREINTERPRET_BUILTIN2 (A, f64) \
-   VREINTERPRET_BUILTIN2 (A, mf8) \
-   VREINTERPRET_BUILTIN2 (A, s8) \
-   VREINTERPRET_BUILTIN2 (A, s16) \
-   VREINTERPRET_BUILTIN2 (A, s32) \
-   VREINTERPRET_BUILTIN2 (A, s64) \
-   VREINTERPRET_BUILTIN2 (A, u8) \
-   VREINTERPRET_BUILTIN2 (A, u16) \
-   VREINTERPRET_BUILTIN2 (A, u32) \
-   VREINTERPRET_BUILTIN2 (A, u64) \
-   VREINTERPRET_BUILTIN2 (A, p8) \
-   VREINTERPRET_BUILTIN2 (A, p16) \
-   VREINTERPRET_BUILTIN2 (A, p64)
- 
- #define VREINTERPRET_BUILTINS \
-   VREINTERPRET_BUILTINS1 (bf16) \
-   VREINTERPRET_BUILTINS1 (f16) \
-   VREINTERPRET_BUILTINS1 (f32) \
-   VREINTERPRET_BUILTINS1 (f64) \
-   VREINTERPRET_BUILTINS1 (mf8) \
-   VREINTERPRET_BUILTINS1 (s8) \
-   VREINTERPRET_BUILTINS1 (s16) \
-   VREINTERPRET_BUILTINS1 (s32) \
-   VREINTERPRET_BUILTINS1 (s64) \
-   VREINTERPRET_BUILTINS1 (u8) \
-   VREINTERPRET_BUILTINS1 (u16) \
-   VREINTERPRET_BUILTINS1 (u32) \
-   VREINTERPRET_BUILTINS1 (u64) \
-   VREINTERPRET_BUILTINS1 (p8) \
-   VREINTERPRET_BUILTINS1 (p16) \
-   VREINTERPRET_BUILTINS1 (p64)
- 
- /* vreinterpretq intrinsics are additionally defined for p128.
-    {     _bf16                 }   {     _bf16                 }
-    {      _f16 _f32 _f64       }   {      _f16 _f32 _f64       }
-    { _mf8                      }   { _mf8                      }
-    { _s8  _s16 _s32 _s64       } x { _s8  _s16 _s32 _s64       }
-    { _u8  _u16 _u32 _u64       }   { _u8  _u16 _u32 _u64       }
-    { _p8  _p16      _p64 _p128 }   { _p8  _p16      _p64 _p128 }.  */
- #define VREINTERPRETQ_BUILTIN2(A, B) \
-   VREINTERPRET_BUILTIN (A, B, q)
- 
- #define VREINTERPRETQ_BUILTINS1(A) \
-   VREINTERPRETQ_BUILTIN2 (A, bf16) \
-   VREINTERPRETQ_BUILTIN2 (A, f16) \
-   VREINTERPRETQ_BUILTIN2 (A, f32) \
-   VREINTERPRETQ_BUILTIN2 (A, f64) \
-   VREINTERPRETQ_BUILTIN2 (A, mf8) \
-   VREINTERPRETQ_BUILTIN2 (A, s8) \
-   VREINTERPRETQ_BUILTIN2 (A, s16) \
-   VREINTERPRETQ_BUILTIN2 (A, s32) \
-   VREINTERPRETQ_BUILTIN2 (A, s64) \
-   VREINTERPRETQ_BUILTIN2 (A, u8) \
-   VREINTERPRETQ_BUILTIN2 (A, u16) \
-   VREINTERPRETQ_BUILTIN2 (A, u32) \
-   VREINTERPRETQ_BUILTIN2 (A, u64) \
-   VREINTERPRETQ_BUILTIN2 (A, p8) \
-   VREINTERPRETQ_BUILTIN2 (A, p16) \
-   VREINTERPRETQ_BUILTIN2 (A, p64) \
-   VREINTERPRETQ_BUILTIN2 (A, p128)
- 
- #define VREINTERPRETQ_BUILTINS \
-   VREINTERPRETQ_BUILTINS1 (bf16) \
-   VREINTERPRETQ_BUILTINS1 (f16) \
-   VREINTERPRETQ_BUILTINS1 (f32) \
-   VREINTERPRETQ_BUILTINS1 (f64) \
-   VREINTERPRETQ_BUILTINS1 (mf8) \
-   VREINTERPRETQ_BUILTINS1 (s8) \
-   VREINTERPRETQ_BUILTINS1 (s16) \
-   VREINTERPRETQ_BUILTINS1 (s32) \
-   VREINTERPRETQ_BUILTINS1 (s64) \
-   VREINTERPRETQ_BUILTINS1 (u8) \
-   VREINTERPRETQ_BUILTINS1 (u16) \
-   VREINTERPRETQ_BUILTINS1 (u32) \
-   VREINTERPRETQ_BUILTINS1 (u64) \
-   VREINTERPRETQ_BUILTINS1 (p8) \
-   VREINTERPRETQ_BUILTINS1 (p16) \
-   VREINTERPRETQ_BUILTINS1 (p64) \
-   VREINTERPRETQ_BUILTINS1 (p128)
- 
- #define AARCH64_SIMD_VREINTERPRET_BUILTINS \
-   VREINTERPRET_BUILTINS \
-   VREINTERPRETQ_BUILTINS
- 
- #define AARCH64_SIMD_VGET_LOW_BUILTINS \
-   VGET_LOW_BUILTIN(mf8) \
-   VGET_LOW_BUILTIN(f16) \
-   VGET_LOW_BUILTIN(f32) \
-   VGET_LOW_BUILTIN(f64) \
-   VGET_LOW_BUILTIN(p8) \
-   VGET_LOW_BUILTIN(p16) \
-   VGET_LOW_BUILTIN(p64) \
-   VGET_LOW_BUILTIN(s8) \
-   VGET_LOW_BUILTIN(s16) \
-   VGET_LOW_BUILTIN(s32) \
-   VGET_LOW_BUILTIN(s64) \
-   VGET_LOW_BUILTIN(u8) \
-   VGET_LOW_BUILTIN(u16) \
-   VGET_LOW_BUILTIN(u32) \
-   VGET_LOW_BUILTIN(u64) \
-   VGET_LOW_BUILTIN(bf16)
- 
- #define AARCH64_SIMD_VGET_HIGH_BUILTINS \
-   VGET_HIGH_BUILTIN(mf8) \
-   VGET_HIGH_BUILTIN(f16) \
-   VGET_HIGH_BUILTIN(f32) \
-   VGET_HIGH_BUILTIN(f64) \
-   VGET_HIGH_BUILTIN(p8) \
-   VGET_HIGH_BUILTIN(p16) \
-   VGET_HIGH_BUILTIN(p64) \
-   VGET_HIGH_BUILTIN(s8) \
-   VGET_HIGH_BUILTIN(s16) \
-   VGET_HIGH_BUILTIN(s32) \
-   VGET_HIGH_BUILTIN(s64) \
-   VGET_HIGH_BUILTIN(u8) \
-   VGET_HIGH_BUILTIN(u16) \
-   VGET_HIGH_BUILTIN(u32) \
-   VGET_HIGH_BUILTIN(u64) \
-   VGET_HIGH_BUILTIN(bf16)
- 
  #include "aarch64-builtin-pairs.def"
  
  #define LO_HI_PAIRINGS \
--- 590,595 ----
*************** typedef struct
*** 786,800 ****
  #define FCMLA_LANEQ_BUILTIN(I, N, X, M, T) \
    AARCH64_SIMD_BUILTIN_FCMLA_LANEQ##I##_##M,
  
- #define VREINTERPRET_BUILTIN(A, B, L) \
-   AARCH64_SIMD_BUILTIN_VREINTERPRET##L##_##A##_##B,
- 
- #define VGET_LOW_BUILTIN(A) \
-   AARCH64_SIMD_BUILTIN_VGET_LOW_##A,
- 
- #define VGET_HIGH_BUILTIN(A)                     \
-   AARCH64_SIMD_BUILTIN_VGET_HIGH_##A,
- 
  #undef VAR1
  #define VAR1(T, N, MAP, FLAG, A) \
    AARCH64_SIMD_BUILTIN_##T##_##N##A,
--- 636,641 ----
*************** enum aarch64_builtins
*** 833,841 ****
    AARCH64_CRC32_BUILTINS
    AARCH64_CRC32_BUILTIN_MAX,
    /* SIMD intrinsic builtins.  */
-   AARCH64_SIMD_VREINTERPRET_BUILTINS
-   AARCH64_SIMD_VGET_LOW_BUILTINS
-   AARCH64_SIMD_VGET_HIGH_BUILTINS
    /* ARMv8.3-A Pointer Authentication Builtins.  */
    AARCH64_PAUTH_BUILTIN_AUTIA1716,
    AARCH64_PAUTH_BUILTIN_PACIA1716,
--- 674,679 ----
*************** static aarch64_fcmla_laneq_builtin_datum
*** 936,982 ****
    AARCH64_SIMD_FCMLA_LANEQ_BUILTINS
  };
  
- #undef VREINTERPRET_BUILTIN
- #define VREINTERPRET_BUILTIN(A, B, L) \
-   {"vreinterpret" SIMD_INTR_LENGTH_CHAR(L) "_" #A "_" #B, \
-    AARCH64_SIMD_BUILTIN_VREINTERPRET##L##_##A##_##B, \
-    2, \
-    { SIMD_INTR_MODE(A, L), SIMD_INTR_MODE(B, L) }, \
-    { SIMD_INTR_QUAL(A), SIMD_INTR_QUAL(B) }, \
-    FLAG_DEFAULT, \
-    SIMD_INTR_MODE(A, L) == SIMD_INTR_MODE(B, L) \
-      && SIMD_INTR_QUAL(A) == SIMD_INTR_QUAL(B) \
-   },
- 
- #undef VGET_LOW_BUILTIN
- #define VGET_LOW_BUILTIN(A) \
-   {"vget_low_" #A, \
-    AARCH64_SIMD_BUILTIN_VGET_LOW_##A, \
-    2, \
-    { SIMD_INTR_MODE(A, d), SIMD_INTR_MODE(A, q) }, \
-    { SIMD_INTR_QUAL(A), SIMD_INTR_QUAL(A) }, \
-    FLAG_DEFAULT, \
-    false \
-   },
- 
- #undef VGET_HIGH_BUILTIN
- #define VGET_HIGH_BUILTIN(A) \
-   {"vget_high_" #A, \
-    AARCH64_SIMD_BUILTIN_VGET_HIGH_##A, \
-    2, \
-    { SIMD_INTR_MODE(A, d), SIMD_INTR_MODE(A, q) }, \
-    { SIMD_INTR_QUAL(A), SIMD_INTR_QUAL(A) }, \
-    FLAG_DEFAULT, \
-    false \
-   },
- 
- static const aarch64_simd_intrinsic_datum aarch64_simd_intrinsic_data[] = {
-   AARCH64_SIMD_VREINTERPRET_BUILTINS
-   AARCH64_SIMD_VGET_LOW_BUILTINS
-   AARCH64_SIMD_VGET_HIGH_BUILTINS
- };
- 
- 
  #undef CRC32_BUILTIN
  
  static GTY(()) tree aarch64_builtin_decls[AARCH64_BUILTIN_MAX];
--- 774,779 ----
*************** struct aarch64_simd_type_info_trees
*** 1027,1033 ****
  aarch64_simd_types_trees[ARRAY_SIZE (aarch64_simd_types)];
  
  static machine_mode aarch64_simd_tuple_modes[ARM_NEON_H_TYPES_LAST][3];
! static GTY(()) tree aarch64_simd_tuple_types[ARM_NEON_H_TYPES_LAST][3];
  
  static GTY(()) tree aarch64_simd_intOI_type_node = NULL_TREE;
  static GTY(()) tree aarch64_simd_intCI_type_node = NULL_TREE;
--- 824,830 ----
  aarch64_simd_types_trees[ARRAY_SIZE (aarch64_simd_types)];
  
  static machine_mode aarch64_simd_tuple_modes[ARM_NEON_H_TYPES_LAST][3];
! GTY (()) tree aarch64_simd_tuple_types[ARM_NEON_H_TYPES_LAST][3];
  
  static GTY(()) tree aarch64_simd_intOI_type_node = NULL_TREE;
  static GTY(()) tree aarch64_simd_intCI_type_node = NULL_TREE;
*************** aarch64_init_fcmla_laneq_builtins (void)
*** 1491,1534 ****
  }
  
  void
- aarch64_init_simd_intrinsics (void)
- {
-   unsigned int i = 0;
- 
-   for (i = 0; i < ARRAY_SIZE (aarch64_simd_intrinsic_data); ++i)
-     {
-       auto d = &aarch64_simd_intrinsic_data[i];
- 
-       if (d->skip)
- 	continue;
- 
-       tree return_type = void_type_node;
-       tree args = void_list_node;
- 
-       for (int op_num = d->op_count - 1; op_num >= 0; op_num--)
- 	{
- 	  machine_mode op_mode = d->op_modes[op_num];
- 	  enum aarch64_type_qualifiers qualifiers = d->qualifiers[op_num];
- 
- 	  tree eltype = aarch64_simd_builtin_type (op_mode, qualifiers);
- 
- 	  if (op_num == 0)
- 	    return_type = eltype;
- 	  else
- 	    args = tree_cons (NULL_TREE, eltype, args);
- 	}
- 
-       tree ftype = build_function_type (return_type, args);
-       tree attrs = aarch64_get_attributes (d->flags, d->op_modes[0]);
-       unsigned int code
- 	      = (d->fcode << AARCH64_BUILTIN_SHIFT | AARCH64_BUILTIN_GENERAL);
-       tree fndecl = simulate_builtin_function_decl (input_location, d->name,
- 						    ftype, code, NULL, attrs);
-       aarch64_builtin_decls[d->fcode] = fndecl;
-     }
- }
- 
- void
  aarch64_init_simd_builtin_functions (bool called_from_pragma)
  {
    unsigned int i, fcode = AARCH64_SIMD_PATTERN_START;
--- 1288,1293 ----
*************** aarch64_target_switcher::~aarch64_target
*** 1940,1951 ****
  	  sizeof (have_regs_of_mode));
  }
  
! /* Implement #pragma GCC aarch64 "arm_neon.h".
! 
!    The types and functions defined here need to be available internally
!    during LTO as well.  */
  void
! handle_arm_neon_h (void)
  {
    aarch64_target_switcher switcher (AARCH64_FL_SIMD);
  
--- 1699,1709 ----
  	  sizeof (have_regs_of_mode));
  }
  
! /* Initialize NEON builtins using the old framework.
!    Delete once NEON all intrinsics have been ported to the pragma-based
!    framework.  */
  void
! init_arm_neon_builtins (void)
  {
    aarch64_target_switcher switcher (AARCH64_FL_SIMD);
  
*************** handle_arm_neon_h (void)
*** 1956,1962 ****
  	register_tuple_type (count, i);
  
    aarch64_init_simd_builtin_functions (true);
-   aarch64_init_simd_intrinsics ();
    aarch64_init_pragma_builtins ();
  }
  
--- 1714,1719 ----
*************** aarch64_init_simd_builtins (void)
*** 1973,1979 ****
  
    aarch64_init_simd_builtin_functions (false);
    if (in_lto_p)
!     handle_arm_neon_h ();
  
    /* Initialize the remaining fcmla_laneq intrinsics.  */
    aarch64_init_fcmla_laneq_builtins ();
--- 1730,1736 ----
  
    aarch64_init_simd_builtin_functions (false);
    if (in_lto_p)
!     init_arm_neon_builtins ();
  
    /* Initialize the remaining fcmla_laneq intrinsics.  */
    aarch64_init_fcmla_laneq_builtins ();
*************** aarch64_pragma_builtins_checker::check (
*** 2898,2905 ****
  
    switch (builtin_data.unspec)
      {
-     case UNSPEC_DUP_LANE:
-     case UNSPEC_GET_LANE:
      case UNSPEC_LD2_LANE:
      case UNSPEC_LD3_LANE:
      case UNSPEC_LD4_LANE:
--- 2655,2660 ----
*************** aarch64_pragma_builtins_checker::check (
*** 2910,2918 ****
      case UNSPEC_ST4_LANE:
        return require_immediate_lane_index (nargs - 1, nargs - 2);
  
-     case UNSPEC_EXT:
-       return require_immediate_range (2, 0, types[2].nunits () - 1);
- 
      case UNSPEC_FDOT_LANE_FP8:
        return require_immediate_lane_index (nargs - 2, nargs - 3, 0);
  
--- 2665,2670 ----
*************** aarch64_pragma_builtins_checker::check (
*** 2944,2954 ****
  	return require_immediate_range (nargs - 1, 0, high);
        }
  
-     case UNSPEC_VEC_COPY:
-       /* & rather than && so that we report errors against both indices.  */
-       return (require_immediate_lane_index (1, 0)
- 	      & require_immediate_lane_index (3, 2));
- 
      default:
        return true;
      }
--- 2696,2701 ----
*************** aarch64_simd_expand_builtin (int fcode,
*** 3188,3199 ****
  	  && UINTVAL (totalsize) != 0)
  	{
  	  rtx lane_idx = expand_normal (CALL_EXPR_ARG (exp, 2));
!           if (CONST_INT_P (lane_idx))
  	    aarch64_simd_lane_bounds (lane_idx, 0,
  				      UINTVAL (totalsize)
  				       / UINTVAL (elementsize),
  				      exp);
!           else
  	    error_at (EXPR_LOCATION (exp),
  		      "lane index must be a constant immediate");
  	}
--- 2935,2946 ----
  	  && UINTVAL (totalsize) != 0)
  	{
  	  rtx lane_idx = expand_normal (CALL_EXPR_ARG (exp, 2));
! 	  if (CONST_INT_P (lane_idx))
  	    aarch64_simd_lane_bounds (lane_idx, 0,
  				      UINTVAL (totalsize)
  				       / UINTVAL (elementsize),
  				      exp);
! 	  else
  	    error_at (EXPR_LOCATION (exp),
  		      "lane index must be a constant immediate");
  	}
*************** aarch64_get_low_unspec (int unspec)
*** 4095,4118 ****
      }
  }
  
- /* OPS contains the operands for one of the permute pair functions vtrn,
-    vuzp or vzip.  Expand the call, given that PERMUTE1 is the unspec for
-    the first permute and PERMUTE2 is the unspec for the second permute.  */
- static rtx
- aarch64_expand_permute_pair (vec<expand_operand> &ops, int permute1,
- 			     int permute2)
- {
-   rtx op0 = force_reg (ops[1].mode, ops[1].value);
-   rtx op1 = force_reg (ops[2].mode, ops[2].value);
-   rtx target = gen_reg_rtx (ops[0].mode);
-   rtx target0 = gen_rtx_SUBREG (ops[1].mode, target, 0);
-   rtx target1 = gen_rtx_SUBREG (ops[1].mode, target,
- 				GET_MODE_SIZE (ops[1].mode));
-   emit_insn (gen_aarch64 (permute1, ops[1].mode, target0, op0, op1));
-   emit_insn (gen_aarch64 (permute2, ops[1].mode, target1, op0, op1));
-   return target;
- }
- 
  /* Emit a TBL or TBX instruction with inputs INPUTS and a result of mode
     MODE.  Return the result of the instruction.
  
--- 3842,3847 ----
*************** aarch64_expand_pragma_builtin (tree exp,
*** 4286,4316 ****
    insn_code icode;
    switch (builtin_data.unspec)
      {
-     case UNSPEC_BSL:
-       icode = code_for_aarch64_simd_bsl (ops[0].mode);
-       break;
- 
-     case UNSPEC_COMBINE:
-       icode = code_for_aarch64_combine (ops[1].mode);
-       break;
- 
      case UNSPEC_DUP:
        if (builtin_data.signature == aarch64_builtin_signatures::load)
  	aarch64_dereference_pointer (&ops[1], GET_MODE_INNER (ops[0].mode));
        return expand_vector_broadcast (ops[0].mode, ops[1].value);
  
-     case UNSPEC_DUP_LANE:
-       aarch64_canonicalize_lane (&ops[2], ops[1].mode);
-       if (ops[0].mode == ops[1].mode)
- 	icode = code_for_aarch64_dup_lane (ops[0].mode);
-       else
- 	icode = code_for_aarch64_dup_lane (ops[0].mode, ops[0].mode);
-       break;
- 
-     case UNSPEC_EXT:
-       icode = code_for_aarch64_ext (ops[0].mode);
-       break;
- 
      case UNSPEC_FAMAX:
      case UNSPEC_FAMIN:
      case UNSPEC_FMMLA:
--- 4015,4025 ----
*************** aarch64_expand_pragma_builtin (tree exp,
*** 4318,4329 ****
      case UNSPEC_F2CVTL_FP8:
      case UNSPEC_FDOT_FP8:
      case UNSPEC_FSCALE:
-     case UNSPEC_TRN1:
-     case UNSPEC_TRN2:
-     case UNSPEC_UZP1:
-     case UNSPEC_UZP2:
-     case UNSPEC_ZIP1:
-     case UNSPEC_ZIP2:
        icode = code_for_aarch64 (builtin_data.unspec, ops[0].mode);
        break;
  
--- 4027,4032 ----
*************** aarch64_expand_pragma_builtin (tree exp,
*** 4380,4390 ****
  	gcc_unreachable ();
        break;
  
-     case UNSPEC_GET_LANE:
-       aarch64_canonicalize_lane (&ops[2], ops[1].mode);
-       icode = code_for_aarch64_get_lane (ops[1].mode);
-       break;
- 
      case UNSPEC_LD1:
        icode = code_for_aarch64_ld1 (ops[0].mode);
        break;
--- 4083,4088 ----
*************** aarch64_expand_pragma_builtin (tree exp,
*** 4436,4447 ****
        icode = code_for_aarch64_lut (ops[1].mode, ops[2].mode);
        break;
  
-     case UNSPEC_REV16:
-     case UNSPEC_REV32:
-     case UNSPEC_REV64:
-       icode = code_for_aarch64_rev (builtin_data.unspec, ops[0].mode);
-       break;
- 
      case UNSPEC_SET_LANE:
        if (builtin_data.signature == aarch64_builtin_signatures::load_lane)
  	aarch64_dereference_pointer (&ops[1], GET_MODE_INNER (ops[0].mode));
--- 4134,4139 ----
*************** aarch64_expand_pragma_builtin (tree exp,
*** 4492,4521 ****
      case UNSPEC_TBX:
        return aarch64_expand_tbl_tbx (ops, builtin_data.unspec);
  
-     case UNSPEC_TRN:
-       return aarch64_expand_permute_pair (ops, UNSPEC_TRN1, UNSPEC_TRN2);
- 
-     case UNSPEC_UZP:
-       return aarch64_expand_permute_pair (ops, UNSPEC_UZP1, UNSPEC_UZP2);
- 
-     case UNSPEC_VCREATE:
-       return force_lowpart_subreg (ops[0].mode, ops[1].value, ops[1].mode);
- 
-     case UNSPEC_VEC_COPY:
-       {
- 	aarch64_convert_to_lane_mask (&ops[2], ops[1].mode);
- 	aarch64_canonicalize_lane (&ops[4], ops[3].mode);
- 	if (ops[1].mode == ops[3].mode)
- 	  icode = code_for_aarch64_simd_vec_copy_lane (ops[1].mode);
- 	else
- 	  icode = code_for_aarch64_simd_vec_copy_lane (ops[1].mode,
- 						       ops[1].mode);
- 	break;
-       }
- 
-     case UNSPEC_ZIP:
-       return aarch64_expand_permute_pair (ops, UNSPEC_ZIP1, UNSPEC_ZIP2);
- 
      default:
        gcc_unreachable ();
      }
--- 4184,4189 ----
*************** aarch64_fold_builtin_lane_check (tree ar
*** 4821,4838 ****
  #define VAR1(T, N, MAP, FLAG, A) \
    case AARCH64_SIMD_BUILTIN_##T##_##N##A:
  
- #undef VREINTERPRET_BUILTIN
- #define VREINTERPRET_BUILTIN(A, B, L) \
-   case AARCH64_SIMD_BUILTIN_VREINTERPRET##L##_##A##_##B:
- 
- #undef VGET_LOW_BUILTIN
- #define VGET_LOW_BUILTIN(A) \
-   case AARCH64_SIMD_BUILTIN_VGET_LOW_##A:
- 
- #undef VGET_HIGH_BUILTIN
- #define VGET_HIGH_BUILTIN(A) \
-   case AARCH64_SIMD_BUILTIN_VGET_HIGH_##A:
- 
  /* Try to fold a call to the built-in function with subcode FCODE.  The
     function is passed the N_ARGS arguments in ARGS and it returns a value
     of type TYPE.  Return the new expression on success and NULL_TREE on
--- 4489,4494 ----
*************** aarch64_general_fold_builtin (unsigned i
*** 4849,4870 ****
        VAR1 (UNOP, floatv4si, 2, ALL, v4sf)
        VAR1 (UNOP, floatv2di, 2, ALL, v2df)
  	return fold_build1 (FLOAT_EXPR, type, args[0]);
-       AARCH64_SIMD_VREINTERPRET_BUILTINS
- 	return fold_build1 (VIEW_CONVERT_EXPR, type, args[0]);
-       AARCH64_SIMD_VGET_LOW_BUILTINS
- 	{
- 	  auto pos = BYTES_BIG_ENDIAN ? 64 : 0;
- 
- 	  return fold_build3 (BIT_FIELD_REF, type, args[0], bitsize_int (64),
- 			      bitsize_int (pos));
- 	}
-       AARCH64_SIMD_VGET_HIGH_BUILTINS
- 	{
- 	  auto pos = BYTES_BIG_ENDIAN ? 0 : 64;
- 
- 	  return fold_build3 (BIT_FIELD_REF, type, args[0], bitsize_int (64),
- 			      bitsize_int (pos));
- 	}
        case AARCH64_SIMD_BUILTIN_LANE_CHECK:
  	gcc_assert (n_args == 3);
  	if (aarch64_fold_builtin_lane_check (args[0], args[1], args[2]))
--- 4505,4510 ----
*************** aarch64_set_lane (tree lhs, tree elt, tr
*** 5056,5082 ****
    return gimple_build_assign (lhs, BIT_INSERT_EXPR, vec, elt, bit);
  }
  
- /* Fold a call to vcombine.  */
- static gimple *
- aarch64_fold_combine (gcall *stmt)
- {
-   tree first_part, second_part;
-   if (BYTES_BIG_ENDIAN)
-     {
-       second_part = gimple_call_arg (stmt, 0);
-       first_part = gimple_call_arg (stmt, 1);
-     }
-   else
-     {
-       first_part = gimple_call_arg (stmt, 0);
-       second_part = gimple_call_arg (stmt, 1);
-     }
-   tree ret_type = gimple_call_return_type (stmt);
-   tree ctor = build_constructor_va (ret_type, 2, NULL_TREE, first_part,
- 				    NULL_TREE, second_part);
-   return gimple_build_assign (gimple_call_lhs (stmt), ctor);
- }
- 
  /* Fold a call to vaeseq_u8 and vaesdq_u8.
     That is `vaeseq_u8 (x ^ y, 0)` gets folded
     into `vaeseq_u8 (x, y)`.*/
--- 4696,4701 ----
*************** aarch64_fold_store (gcall *stmt, tree ty
*** 5135,5213 ****
    return nullptr;
  }
  
- /* An aarch64_fold_permute callback for vext.  SELECTOR is the value of
-    the final argument.  */
- static unsigned int
- aarch64_ext_index (unsigned int, unsigned int selector, unsigned int i)
- {
-   return selector + i;
- }
- 
- /* An aarch64_fold_permute callback for vrev.  SELECTOR is the number
-    of elements in each reversal group.  */
- static unsigned int
- aarch64_rev_index (unsigned int, unsigned int selector, unsigned int i)
- {
-   return ROUND_DOWN (i, selector) + (selector - 1) - (i % selector);
- }
- 
- /* An aarch64_fold_permute callback for vtrn.  SELECTOR is 0 for TRN1
-    and 1 for TRN2.  */
- static unsigned int
- aarch64_trn_index (unsigned int nelts, unsigned int selector, unsigned int i)
- {
-   return (i % 2) * nelts + ROUND_DOWN (i, 2) + selector;
- }
- 
- /* An aarch64_fold_permute callback for vuzp.  SELECTOR is 0 for UZP1
-    and 1 for UZP2.  */
- static unsigned int
- aarch64_uzp_index (unsigned int, unsigned int selector, unsigned int i)
- {
-   return i * 2 + selector;
- }
- 
- /* An aarch64_fold_permute callback for vzip.  SELECTOR is 0 for ZIP1
-    and 1 for ZIP2.  */
- static unsigned int
- aarch64_zip_index (unsigned int nelts, unsigned int selector, unsigned int i)
- {
-   return (i % 2) * nelts + (i / 2) + selector * (nelts / 2);
- }
- 
- /* Fold STMT to a VEC_PERM_EXPR on the first NINPUTS arguments.
-    Make the VEC_PERM_EXPR emulate an NINPUTS-input TBL in which
-    architectural lane I of the result selects architectural lane:
- 
-      GET_INDEX (NELTS, SELECTOR, I)
- 
-    of the input table.  NELTS is the number of elements in one vector.  */
- static gimple *
- aarch64_fold_permute (gcall *stmt, unsigned int ninputs,
- 		      unsigned int (*get_index) (unsigned int, unsigned int,
- 						 unsigned int),
- 		      unsigned int selector)
- {
-   tree op0 = gimple_call_arg (stmt, 0);
-   tree op1 = ninputs == 2 ? gimple_call_arg (stmt, 1) : op0;
-   auto nelts = TYPE_VECTOR_SUBPARTS (TREE_TYPE (op0)).to_constant ();
-   vec_perm_builder sel (nelts, nelts, 1);
-   for (unsigned int i = 0; i < nelts; ++i)
-     {
-       unsigned int index = get_index (nelts, selector,
- 				      ENDIAN_LANE_N (nelts, i));
-       unsigned int vec = index / nelts;
-       unsigned int elt = ENDIAN_LANE_N (nelts, index % nelts);
-       sel.quick_push (vec * nelts + elt);
-     }
- 
-   vec_perm_indices indices (sel, ninputs, nelts);
-   tree mask_type = build_vector_type (ssizetype, nelts);
-   tree mask = vec_perm_indices_to_tree (mask_type, indices);
-   return gimple_build_assign (gimple_call_lhs (stmt), VEC_PERM_EXPR,
- 			      op0, op1, mask);
- }
- 
  /* Try to fold STMT (at GSI), given that it is a call to the builtin
     described by BUILTIN_DATA.  Return the new statement on success,
     otherwise return null.  */
--- 4754,4759 ----
*************** aarch64_gimple_fold_pragma_builtin
*** 5220,5277 ****
  
    switch (builtin_data.unspec)
      {
-     case UNSPEC_COMBINE:
-       return aarch64_fold_combine (stmt);
- 
      case UNSPEC_DUP:
-     case UNSPEC_DUP_LANE:
        {
  	tree arg = gimple_call_arg (stmt, 0);
  	tree type = types[0].type ();
  	if (builtin_data.signature == aarch64_builtin_signatures::load)
  	  arg = aarch64_dereference (arg, TREE_TYPE (type));
- 	else if (builtin_data.unspec == UNSPEC_DUP_LANE)
- 	  arg = aarch64_get_lane (arg, gimple_call_arg (stmt, 1));
  	arg = aarch64_force_gimple_val (gsi, arg);
  
  	tree dup = build_vector_from_val (type, arg);
  	return aarch64_fold_to_val (stmt, gsi, nullptr, dup);
        }
  
-     case UNSPEC_EXT:
-       {
- 	auto index = tree_to_uhwi (gimple_call_arg (stmt, 2));
- 	return aarch64_fold_permute (stmt, 2, aarch64_ext_index, index);
-       }
- 
-     case UNSPEC_GET_LANE:
-       {
- 	tree val = aarch64_get_lane (gimple_call_arg (stmt, 0),
- 				     gimple_call_arg (stmt, 1));
- 	return gimple_build_assign (gimple_call_lhs (stmt), val);
-       }
- 
      case UNSPEC_LD1:
        return aarch64_fold_load (stmt, types[0].type ());
  
-     case UNSPEC_REV16:
-       {
- 	auto selector = 16 / GET_MODE_UNIT_BITSIZE (types[0].mode);
- 	return aarch64_fold_permute (stmt, 1, aarch64_rev_index, selector);
-       }
- 
-     case UNSPEC_REV32:
-       {
- 	auto selector = 32 / GET_MODE_UNIT_BITSIZE (types[0].mode);
- 	return aarch64_fold_permute (stmt, 1, aarch64_rev_index, selector);
-       }
- 
-     case UNSPEC_REV64:
-       {
- 	auto selector = 64 / GET_MODE_UNIT_BITSIZE (types[0].mode);
- 	return aarch64_fold_permute (stmt, 1, aarch64_rev_index, selector);
-       }
- 
      case UNSPEC_SET_LANE:
        {
  	tree elt = gimple_call_arg (stmt, 0);
--- 4766,4786 ----
*************** aarch64_gimple_fold_pragma_builtin
*** 5298,5337 ****
  	return aarch64_copy_vops (gimple_build_assign (mem, val), stmt);
        }
  
-     case UNSPEC_TRN1:
-       return aarch64_fold_permute (stmt, 2, aarch64_trn_index, 0);
- 
-     case UNSPEC_TRN2:
-       return aarch64_fold_permute (stmt, 2, aarch64_trn_index, 1);
- 
-     case UNSPEC_UZP1:
-       return aarch64_fold_permute (stmt, 2, aarch64_uzp_index, 0);
- 
-     case UNSPEC_UZP2:
-       return aarch64_fold_permute (stmt, 2, aarch64_uzp_index, 1);
- 
-     case UNSPEC_VCREATE:
-       return gimple_build_assign (gimple_call_lhs (stmt),
- 				  fold_build1 (VIEW_CONVERT_EXPR,
- 					       types[0].type (),
- 					       gimple_call_arg (stmt, 0)));
- 
-     case UNSPEC_VEC_COPY:
-       {
- 	tree elt = aarch64_get_lane (gimple_call_arg (stmt, 2),
- 				     gimple_call_arg (stmt, 3));
- 	elt = aarch64_force_gimple_val (gsi, elt);
- 	return aarch64_set_lane (gimple_call_lhs (stmt), elt,
- 				 gimple_call_arg (stmt, 0),
- 				 gimple_call_arg (stmt, 1));
-       }
- 
-     case UNSPEC_ZIP1:
-       return aarch64_fold_permute (stmt, 2, aarch64_zip_index, 0);
- 
-     case UNSPEC_ZIP2:
-       return aarch64_fold_permute (stmt, 2, aarch64_zip_index, 1);
- 
      default:
        return nullptr;
      }
--- 4807,4812 ----
*************** aarch64_general_gimple_fold_builtin (uns
*** 5535,5546 ****
  	gimple_call_set_lhs (new_stmt, gimple_call_lhs (stmt));
  	break;
  
-      BUILTIN_VDC (BINOP, combine, 0, QUIET)
-      BUILTIN_VD_I (BINOPU, combine, 0, DEFAULT)
-      BUILTIN_VDC_P (BINOPP, combine, 0, DEFAULT)
-        new_stmt = aarch64_fold_combine (stmt);
-        break;
- 
       /*lower store and load neon builtins to gimple.  */
       BUILTIN_VALL_F16 (LOAD1, ld1, 0, LOAD)
       BUILTIN_VDQ_I (LOAD1_U, ld1, 0, LOAD)
--- 5010,5015 ----
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-builtins.h gcc-17-20260705/gcc/config/aarch64/aarch64-builtins.h
*** gcc-17-20260628/gcc/config/aarch64/aarch64-builtins.h	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/aarch64-builtins.h	Sun Jul  5 22:32:07 2026
*************** struct GTY(()) aarch64_simd_type_info_tr
*** 110,114 ****
--- 110,115 ----
  
  extern const aarch64_simd_type_info aarch64_simd_types[];
  extern aarch64_simd_type_info_trees aarch64_simd_types_trees[];
+ extern tree aarch64_simd_tuple_types[ARM_NEON_H_TYPES_LAST][3];
  
  #endif
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-c.cc gcc-17-20260705/gcc/config/aarch64/aarch64-c.cc
*** gcc-17-20260628/gcc/config/aarch64/aarch64-c.cc	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/aarch64-c.cc	Sun Jul  5 22:32:07 2026
***************
*** 33,39 ****
  #include "langhooks.h"
  #include "target.h"
  
- 
  #define builtin_define(TXT) cpp_define (pfile, TXT)
  #define builtin_assert(TXT) cpp_assert (pfile, TXT)
  
--- 33,38 ----
*************** aarch64_update_cpp_builtins (cpp_reader
*** 226,232 ****
  			&& (AARCH64_HAVE_ISA (SVE2) || TARGET_SME2),
  			"__ARM_FEATURE_SVE_B16B16", pfile);
    aarch64_def_or_undef (AARCH64_HAVE_ISA (SVE2), "__ARM_FEATURE_SVE2", pfile);
!   aarch64_def_or_undef (TARGET_SVE2_AES, "__ARM_FEATURE_SVE2_AES", pfile);
    aarch64_def_or_undef (AARCH64_HAVE_ISA (SVE_BITPERM)
  			&& AARCH64_HAVE_ISA (SVE2),
  			"__ARM_FEATURE_SVE2_BITPERM", pfile);
--- 225,232 ----
  			&& (AARCH64_HAVE_ISA (SVE2) || TARGET_SME2),
  			"__ARM_FEATURE_SVE_B16B16", pfile);
    aarch64_def_or_undef (AARCH64_HAVE_ISA (SVE2), "__ARM_FEATURE_SVE2", pfile);
!   aarch64_def_or_undef (AARCH64_HAVE_ISA (SVE2) && AARCH64_HAVE_ISA (SVE_AES),
! 			"__ARM_FEATURE_SVE2_AES", pfile);
    aarch64_def_or_undef (AARCH64_HAVE_ISA (SVE_BITPERM)
  			&& AARCH64_HAVE_ISA (SVE2),
  			"__ARM_FEATURE_SVE2_BITPERM", pfile);
*************** aarch64_pragma_aarch64 (cpp_reader *)
*** 413,427 ****
  
    const char *name = TREE_STRING_POINTER (x);
    if (strcmp (name, "arm_sve.h") == 0)
!     aarch64_sve::handle_arm_sve_h (false);
    else if (strcmp (name, "arm_sme.h") == 0)
!     aarch64_sve::handle_arm_sme_h (false);
    else if (strcmp (name, "arm_neon.h") == 0)
!     handle_arm_neon_h ();
    else if (strcmp (name, "arm_acle.h") == 0)
      handle_arm_acle_h ();
    else if (strcmp (name, "arm_neon_sve_bridge.h") == 0)
!     aarch64_sve::handle_arm_neon_sve_bridge_h (false);
    else
      error ("unknown %<#pragma GCC aarch64%> option %qs", name);
  }
--- 413,427 ----
  
    const char *name = TREE_STRING_POINTER (x);
    if (strcmp (name, "arm_sve.h") == 0)
!     aarch64_acle::handle_arm_sve_h (false);
    else if (strcmp (name, "arm_sme.h") == 0)
!     aarch64_acle::handle_arm_sme_h (false);
    else if (strcmp (name, "arm_neon.h") == 0)
!     aarch64_acle::handle_arm_neon_h (false);
    else if (strcmp (name, "arm_acle.h") == 0)
      handle_arm_acle_h ();
    else if (strcmp (name, "arm_neon_sve_bridge.h") == 0)
!     aarch64_acle::handle_arm_neon_sve_bridge_h (false);
    else
      error ("unknown %<#pragma GCC aarch64%> option %qs", name);
  }
*************** aarch64_resolve_overloaded_builtin (loca
*** 445,452 ****
  							 uncast_arglist);
        break;
      case AARCH64_BUILTIN_SVE:
!       new_fndecl = aarch64_sve::resolve_overloaded_builtin (location, subcode,
! 							    arglist);
        break;
      }
    if (new_fndecl == NULL_TREE || new_fndecl == error_mark_node)
--- 445,452 ----
  							 uncast_arglist);
        break;
      case AARCH64_BUILTIN_SVE:
!       new_fndecl = aarch64_acle::resolve_overloaded_builtin (location, subcode,
! 							     arglist);
        break;
      }
    if (new_fndecl == NULL_TREE || new_fndecl == error_mark_node)
*************** aarch64_check_builtin_call (location_t l
*** 469,476 ****
        return aarch64_general_check_builtin_call (loc, arg_loc, subcode,
  						 orig_fndecl, nargs, args);
      case AARCH64_BUILTIN_SVE:
!       return aarch64_sve::check_builtin_call (loc, arg_loc, subcode,
! 					      orig_fndecl, nargs, args);
      }
    gcc_unreachable ();
  }
--- 469,476 ----
        return aarch64_general_check_builtin_call (loc, arg_loc, subcode,
  						 orig_fndecl, nargs, args);
      case AARCH64_BUILTIN_SVE:
!       return aarch64_acle::check_builtin_call (loc, arg_loc, subcode,
! 					       orig_fndecl, nargs, args);
      }
    gcc_unreachable ();
  }
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-elf-metadata.cc gcc-17-20260705/gcc/config/aarch64/aarch64-elf-metadata.cc
*** gcc-17-20260628/gcc/config/aarch64/aarch64-elf-metadata.cc	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/aarch64-elf-metadata.cc	Sun Jul  5 22:32:07 2026
*************** gnu_property_features_to_string (unsigne
*** 68,74 ****
  	separator = ", ";
        }
    return s_features;
! };
  
  } // namespace anonymous
  
--- 68,74 ----
  	separator = ", ";
        }
    return s_features;
! }
  
  } // namespace anonymous
  
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-neon-builtins-base.cc gcc-17-20260705/gcc/config/aarch64/aarch64-neon-builtins-base.cc
*** gcc-17-20260628/gcc/config/aarch64/aarch64-neon-builtins-base.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/config/aarch64/aarch64-neon-builtins-base.cc	Sun Jul  5 22:32:07 2026
***************
*** 0 ****
--- 1,824 ----
+ /* ACLE support for AArch64 NEON (__ARM_FEATURE_SIMD intrinsics)
+    Copyright (C) 2026-2026 Free Software Foundation, Inc.
+ 
+    This file is part of GCC.
+ 
+    GCC 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.
+ 
+    GCC 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 GCC; see the file COPYING3.  If not see
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "tm.h"
+ #include "tree.h"
+ #include "rtl.h"
+ #include "tm_p.h"
+ #include "memmodel.h"
+ #include "insn-codes.h"
+ #include "optabs.h"
+ #include "recog.h"
+ #include "expr.h"
+ #include "basic-block.h"
+ #include "function.h"
+ #include "fold-const.h"
+ #include "gimple.h"
+ #include "gimple-iterator.h"
+ #include "gimplify.h"
+ #include "explow.h"
+ #include "tree-vector-builder.h"
+ #include "rtx-vector-builder.h"
+ #include "vec-perm-indices.h"
+ #include "aarch64-acle-builtins.h"
+ #include "aarch64-neon-builtins-base.h"
+ #include "aarch64-neon-builtins-functions.h"
+ #include "gimple-fold.h"
+ 
+ namespace aarch64_acle {
+ /* Build a cast expression, `(TYPE)EXPR`, if necessary to make an expression
+    with type TYPE.  */
+ tree
+ build_cast (tree type, tree expr)
+ {
+   return TREE_TYPE (expr) != type ? fold_build1 (VIEW_CONVERT_EXPR, type, expr)
+ 				  : expr;
+ }
+ 
+ /* Convert a lane index to the correct index for the target endianness.
+    For little-endian targets, this is a no-op.
+    For big-endian targets, this is `len - index - 1`.  */
+ tree
+ convert_lane_index (poly_uint64 len, tree index)
+ {
+   auto index_type = TREE_TYPE (index);
+   return !BYTES_BIG_ENDIAN
+ 	   ? index
+ 	   : fold_build2 (MINUS_EXPR, index_type,
+ 			  fold_build2 (MINUS_EXPR, index_type,
+ 				       build_int_cst_type (index_type, len),
+ 				       index),
+ 			  build_one_cst (index_type));
+ }
+ 
+ /* Build a `VEC[INDEX]` expression.  */
+ tree
+ build_lane_get (tree vec, tree index)
+ {
+   auto vec_type = TREE_TYPE (vec);
+   auto vec_len = TYPE_VECTOR_SUBPARTS (vec_type);
+   auto elem_type = TREE_TYPE (vec_type);
+   auto elem_size = TYPE_SIZE (elem_type);
+   auto offset = fold_build2 (MULT_EXPR, bitsizetype, elem_size,
+ 			     convert_lane_index (vec_len, index));
+   return fold_build3 (BIT_FIELD_REF, elem_type, vec, elem_size, offset);
+ }
+ 
+ /* Build a `VEC[INDEX] = ELEM;` statement.
+    Returns an expression representing the updated VEC.  */
+ tree
+ build_lane_set (tree vec, tree index, tree elem)
+ {
+   auto vec_type = TREE_TYPE (vec);
+   auto vec_len = TYPE_VECTOR_SUBPARTS (vec_type);
+   auto elem_type = TREE_TYPE (vec_type);
+   auto elem_size = TYPE_SIZE (elem_type);
+   auto offset = fold_build2 (MULT_EXPR, bitsizetype, elem_size,
+ 			     convert_lane_index (vec_len, index));
+   return fold_build3 (BIT_INSERT_EXPR, vec_type, vec, elem, offset);
+ }
+ 
+ /* Build an expression for a vector with all lanes set to `ELEM`.  */
+ tree
+ build_vec_dup (tree type, tree elem)
+ {
+   return known_eq (TYPE_VECTOR_SUBPARTS (type), 1U)
+ 	   ? fold_build1 (VIEW_CONVERT_EXPR, type, elem)
+ 	   : fold_build1 (VEC_DUPLICATE_EXPR, type, elem);
+ }
+ 
+ /* Build a `TUPLE.val[INDEX]` expression.  */
+ tree
+ build_tuple_get (tree tuple, tree index)
+ {
+   auto tuple_type = TREE_TYPE (tuple);
+   auto field = tuple_type_field (tuple_type);
+   auto array_type = TREE_TYPE (field);
+   auto vec_type = TREE_TYPE (array_type);
+ 
+   auto field_ref = fold_build3 (COMPONENT_REF, array_type, unshare_expr (tuple),
+ 				field, NULL_TREE);
+   auto array_ref
+     = build4 (ARRAY_REF, vec_type, field_ref, index, NULL_TREE, NULL_TREE);
+ 
+   return array_ref;
+ }
+ 
+ /* Build a `TUPLE.val[INDEX][LANE]` expression.  */
+ tree
+ build_tuple_get (gimple_folder &f, tree tuple, tree index, tree lane)
+ {
+   auto vec = f.force_val (build_tuple_get (tuple, index));
+   return build_lane_get (vec, lane);
+ }
+ 
+ /* Build a `TUPLE.val[INDEX] = ELEM;` statement.
+    Returns an expression representing the updated tuple.  */
+ tree
+ build_tuple_set (gimple_folder &f, tree tuple, tree index, tree elem)
+ {
+   f.assign (build_tuple_get (tuple, index), elem);
+   return tuple;
+ }
+ 
+ /* Build a `TUPLE.val[INDEX][LANE] = ELEM;` statement.
+    Returns an expression representing the updated tuple.  */
+ tree
+ build_tuple_set (gimple_folder &f, tree tuple, tree index, tree lane, tree elem)
+ {
+   auto vec = f.force_val (build_tuple_get (tuple, index));
+   vec = f.force_val (build_lane_set (vec, lane, elem));
+   return build_tuple_set (f, tuple, index, vec);
+ }
+ 
+ /* Base class for all function expanders.
+    At least one of `expand` or `fold` must be overriden by derived classes.  */
+ class gimple_function_base : public function_base
+ {
+   rtx expand (function_expander &) const override { gcc_unreachable (); }
+   gimple *fold (gimple_folder &) const override { gcc_unreachable (); }
+ };
+ 
+ /* For intrinsics that map to a single GIMPLE expression with no argument
+    preparation necessary.  */
+ class gimple_expr : public gimple_function_base
+ {
+   tree_code m_int_code;
+   tree_code m_float_code;
+   tree_code m_poly_code;
+ 
+ public:
+   constexpr gimple_expr (tree_code code)
+     : m_int_code (code),
+       m_float_code (code),
+       m_poly_code (code)
+     {}
+ 
+   constexpr gimple_expr (tree_code int_code,
+ 			 tree_code float_code,
+ 			 tree_code poly_code)
+     : m_int_code (int_code),
+       m_float_code (float_code),
+       m_poly_code (poly_code)
+     {}
+ 
+   gimple *fold (gimple_folder &f) const override
+   {
+     auto nargs = gimple_call_num_args (f.call);
+     auto arg0 = nargs >= 1 ? gimple_call_arg (f.call, 0) : nullptr;
+     auto arg1 = nargs >= 2 ? gimple_call_arg (f.call, 1) : nullptr;
+     auto arg2 = nargs >= 3 ? gimple_call_arg (f.call, 2) : nullptr;
+ 
+     auto type_class = f.type_suffix (0).tclass;
+     switch (type_class)
+       {
+       case TYPE_signed:
+       case TYPE_unsigned:
+ 	return gimple_build_assign (f.lhs, m_int_code, arg0, arg1, arg2);
+       case TYPE_float:
+ 	return gimple_build_assign (f.lhs, m_float_code, arg0, arg1, arg2);
+       case TYPE_poly:
+ 	return gimple_build_assign (f.lhs, m_poly_code, arg0, arg1, arg2);
+       default:
+ 	gcc_unreachable ();
+       }
+   }
+ };
+ 
+ struct gimple_create : public gimple_function_base
+ {
+   gimple *fold (gimple_folder &f) const override
+   {
+     auto arg = gimple_call_arg (f.call, 0);
+     return gimple_build_assign (f.lhs, fold_build1 (VIEW_CONVERT_EXPR,
+ 						    TREE_TYPE (f.lhs), arg));
+   }
+ };
+ 
+ struct gimple_combine : public gimple_function_base
+ {
+   gimple *fold (gimple_folder &f) const override
+   {
+     auto arg1 = gimple_call_arg (f.call, 0);
+     auto arg2 = gimple_call_arg (f.call, 1);
+     auto arg_type = TREE_TYPE (arg1);
+     auto elem_type = TREE_TYPE (arg_type);
+     auto ret_type = TREE_TYPE (f.lhs);
+ 
+     if (known_eq (TYPE_VECTOR_SUBPARTS (arg_type), 1U))
+       {
+ 	arg1 = f.force_val (fold_build1 (VIEW_CONVERT_EXPR, elem_type, arg1));
+ 	arg2 = f.force_val (fold_build1 (VIEW_CONVERT_EXPR, elem_type, arg2));
+       }
+ 
+     if (BYTES_BIG_ENDIAN)
+       std::swap (arg1, arg2);
+ 
+     return gimple_build_assign (f.lhs,
+ 				build_constructor_va (ret_type, 2, NULL_TREE,
+ 						      arg1, NULL_TREE, arg2));
+   }
+ };
+ 
+ struct gimple_get_lane : public gimple_function_base
+ {
+   gimple *fold (gimple_folder &f) const override
+   {
+     auto src = gimple_call_arg (f.call, 0);
+     auto lane = gimple_call_arg (f.call, 1);
+     return gimple_build_assign (f.lhs, build_lane_get (src, lane));
+   }
+ };
+ 
+ template <bool high_half_p>
+ struct gimple_get_half : public gimple_function_base
+ {
+   gimple *fold (gimple_folder &f) const override
+   {
+     auto src = gimple_call_arg (f.call, 0);
+     auto half
+       = fold_build3 (BIT_FIELD_REF, TREE_TYPE (f.lhs), src, bitsize_int (64),
+ 		     bitsize_int (high_half_p ^ BYTES_BIG_ENDIAN ? 64 : 0));
+     return gimple_build_assign (f.lhs, half);
+   }
+ };
+ 
+ struct gimple_set_lane : public gimple_function_base
+ {
+   gimple *fold (gimple_folder &f) const override
+   {
+     auto elem = gimple_call_arg (f.call, 0);
+     auto src = gimple_call_arg (f.call, 1);
+     auto lane = gimple_call_arg (f.call, 2);
+     return gimple_build_assign (f.lhs, build_lane_set (src, lane, elem));
+   }
+ };
+ 
+ struct gimple_copy_lane : public gimple_function_base
+ {
+   gimple *fold (gimple_folder &f) const override
+   {
+     auto vec1 = gimple_call_arg (f.call, 0);
+     auto lane1 = gimple_call_arg (f.call, 1);
+     auto vec2 = gimple_call_arg (f.call, 2);
+     auto lane2 = gimple_call_arg (f.call, 3);
+ 
+     // tmp1 = vec2[lane2]
+     auto tmp1 = f.force_val (build_lane_get (vec2, lane2));
+ 
+     // vec1[lane1] = tmp1
+     // lhs = vec1
+     return gimple_build_assign (f.lhs, build_lane_set (vec1, lane1, tmp1));
+   }
+ };
+ 
+ struct gimple_dup : public gimple_function_base
+ {
+   gimple *fold (gimple_folder &f) const override
+   {
+     auto elem = gimple_call_arg (f.call, 0);
+     auto ret_type = TREE_TYPE (f.lhs);
+     return gimple_build_assign (f.lhs, build_vec_dup (ret_type, elem));
+   }
+ };
+ 
+ // Vector creation
+ NEON_FUNCTION (vcreate,		gimple_create,)
+ NEON_FUNCTION (vcombine,	gimple_combine,)
+ NEON_FUNCTION (vdup_n,		gimple_dup,)
+ NEON_FUNCTION (vdupq_n,		gimple_dup,)
+ NEON_FUNCTION (vmov_n,		gimple_dup,)
+ NEON_FUNCTION (vmovq_n,		gimple_dup,)
+ 
+ struct gimple_dup_lane : public gimple_function_base
+ {
+   gimple *fold (gimple_folder &f) const override
+   {
+     auto vec = gimple_call_arg (f.call, 0);
+     auto lane = gimple_call_arg (f.call, 1);
+     auto type = TREE_TYPE (f.lhs);
+ 
+     // tmp1 = vec[lane]
+     auto tmp1 = f.force_val (build_lane_get (vec, lane));
+ 
+     // lhs = VEC_DUP (vec[lane])
+     return gimple_build_assign (f.lhs, build_vec_dup (type, tmp1));
+   }
+ };
+ 
+ /* For intrinsics that map to a GIMPLE expression with a `BIT_NOT` applied to
+    the second argument.  */
+ class gimple_not_rhs : public gimple_function_base
+ {
+   tree_code m_code;
+ 
+ public:
+   constexpr gimple_not_rhs (tree_code code)
+     : m_code (code)
+     {}
+ 
+   gimple *fold (gimple_folder &f) const override
+   {
+     auto lhs = gimple_call_arg (f.call, 0);
+     auto rhs = gimple_call_arg (f.call, 1);
+     auto type = TREE_TYPE (lhs);
+ 
+     // tmp1 = ~rhs
+     auto tmp1 = f.force_val (fold_build1 (BIT_NOT_EXPR, type, rhs));
+     return gimple_build_assign (f.lhs, this->m_code, lhs, tmp1);
+   }
+ };
+ 
+ /* BSL (d, n, m) == m ^ ((m ^ n) & d).  */
+ class gimple_bsl : public gimple_function_base
+ {
+ public:
+   gimple *fold (gimple_folder &f) const override
+   {
+     auto d = gimple_call_arg (f.call, 0);
+     auto n = gimple_call_arg (f.call, 1);
+     auto m = gimple_call_arg (f.call, 2);
+ 
+     auto uint_type = TREE_TYPE (d);
+     auto ret_type = TREE_TYPE (f.lhs);
+ 
+     // Cast to unsigned integer type if necessary.
+     m = f.force_val (build_cast (uint_type, m));
+     n = f.force_val (build_cast (uint_type, n));
+ 
+     // tmp1 = m ^ n
+     auto tmp1 = f.force_val (fold_build2 (BIT_XOR_EXPR, uint_type, m, n));
+ 
+     // tmp2 = (m ^ n) & d
+     auto tmp2 = f.force_val (fold_build2 (BIT_AND_EXPR, uint_type, tmp1, d));
+ 
+     // tmp3 = m ^ ((m ^ n) & d)
+     auto tmp3 = f.force_val (fold_build2 (BIT_XOR_EXPR, uint_type, m, tmp2));
+ 
+     return gimple_build_assign (f.lhs, build_cast (ret_type, tmp3));
+   }
+ };
+ 
+ /* SHA3 intrinsics expand to RTL at `-O0` because we want to emit one
+    instruction for them even when optimizations are disabled.  */
+ 
+ /* EOR3 (n, m, a) = (n ^ m) ^ a.  */
+ class gimple_eor3 : public gimple_function_base
+ {
+ public:
+   gimple *fold (gimple_folder &f) const override
+   {
+     if (optimize == 0)
+       return nullptr;
+ 
+     auto n = gimple_call_arg (f.call, 0);
+     auto m = gimple_call_arg (f.call, 1);
+     auto a = gimple_call_arg (f.call, 2);
+     auto type = TREE_TYPE (f.lhs);
+ 
+     // tmp1 = n ^ m
+     auto tmp1 = f.force_val (fold_build2 (BIT_XOR_EXPR, type, n, m));
+ 
+     // lhs = (n ^ m) ^ a
+     return gimple_build_assign (f.lhs, BIT_XOR_EXPR, tmp1, a);
+   }
+ 
+   rtx expand (function_expander &e) const override
+   {
+     return e.use_exact_insn (code_for_eor3q4 (e.args[0]->mode));
+   }
+ };
+ 
+ /* BCAX (n, m, a) = n ^ (m & ~a).  */
+ class gimple_bcax : public gimple_function_base
+ {
+ public:
+   gimple *fold (gimple_folder &f) const override
+   {
+     if (optimize == 0)
+       return nullptr;
+ 
+     auto n = gimple_call_arg (f.call, 0);
+     auto m = gimple_call_arg (f.call, 1);
+     auto a = gimple_call_arg (f.call, 2);
+     auto arg_type = TREE_TYPE (n);
+ 
+     // tmp1 = ~a
+     auto tmp1 = f.force_val (fold_build1 (BIT_NOT_EXPR, arg_type, a));
+ 
+     // tmp2 = m & ~a
+     auto tmp2 = f.force_val (fold_build2 (BIT_AND_EXPR, arg_type, m, tmp1));
+ 
+     // lhs = n ^ (m & ~a)
+     return gimple_build_assign (f.lhs, BIT_XOR_EXPR, n, tmp2);
+   }
+ 
+   rtx expand (function_expander &e) const override
+   {
+     return e.use_exact_insn (code_for_bcaxq4 (e.args[0]->mode));
+   }
+ };
+ 
+ /* RAX1 (n, m) = n ^ rotl (m, splat (1)).  */
+ class gimple_rax1 : public gimple_function_base
+ {
+ public:
+   gimple *fold (gimple_folder &f) const override
+   {
+     if (optimize == 0)
+       return nullptr;
+ 
+     auto n = gimple_call_arg (f.call, 0);
+     auto m = gimple_call_arg (f.call, 1);
+     auto arg_type = TREE_TYPE (n);
+ 
+     // tmp1 = rotl (m, 1)
+     auto tmp1 = f.force_val (
+       fold_build2 (LROTATE_EXPR, arg_type, m, build_one_cst (arg_type)));
+ 
+     // lhs = n ^ rotl (m, 1)
+     return gimple_build_assign (f.lhs, BIT_XOR_EXPR, n, tmp1);
+   }
+ 
+   rtx expand (function_expander &e) const override
+   {
+     return e.use_exact_insn (CODE_FOR_aarch64_rax1qv2di);
+   }
+ };
+ 
+ /* XAR (n, m, imm6) = rotr (n ^ m, imm6).  */
+ class gimple_xar : public gimple_function_base
+ {
+ public:
+   gimple *fold (gimple_folder &f) const override
+   {
+     if (optimize == 0)
+       return nullptr;
+ 
+     auto n = gimple_call_arg (f.call, 0);
+     auto m = gimple_call_arg (f.call, 1);
+     auto imm6 = gimple_call_arg (f.call, 2);
+     auto type = TREE_TYPE (f.lhs);
+ 
+     // tmp1 = n ^ m
+     auto tmp1 = f.force_val (fold_build2 (BIT_XOR_EXPR, type, n, m));
+ 
+     // lhs = rotr (n ^ m, imm6)
+     return gimple_build_assign (f.lhs, RROTATE_EXPR, tmp1, imm6);
+   }
+ 
+   rtx expand (function_expander &e) const override
+   {
+     return e.use_exact_insn (CODE_FOR_aarch64_xarqv2di);
+   }
+ };
+ 
+ /* For intrinsics that map to a single GIMPLE IFN with no argument
+    preparation necessary.  */
+ class gimple_ifn : public gimple_function_base
+ {
+   internal_fn m_ifn;
+ 
+ public:
+   constexpr gimple_ifn (internal_fn fn)
+     : m_ifn (fn)
+       {}
+ 
+   gimple *fold (gimple_folder &f) const override
+   {
+     vec<tree> args{};
+     for (unsigned i = 0; i < gimple_call_num_args (f.call); i++)
+       args.safe_push (gimple_call_arg (f.call, i));
+ 
+     auto call = gimple_build_call_internal_vec (this->m_ifn, args);
+     gimple_call_set_lhs (call, f.lhs);
+     return call;
+   }
+ };
+ 
+ using mask_fn_t = tree (*) (gimple_folder &);
+ 
+ /* For intrinsics that map to a VEC_PERM (A, B, MASK) expression.
+    A and B come the intrinsic's arguments, MASK is genereted by calling the
+    provided MASK_FN with gimple_folder.  */
+ class gimple_permute : public gimple_function_base
+ {
+   mask_fn_t m_mask_fn;
+ 
+ public:
+   constexpr gimple_permute (mask_fn_t mask_fn)
+     : m_mask_fn (mask_fn)
+       {}
+ 
+   gimple *fold (gimple_folder &f) const override
+   {
+     auto a = gimple_call_arg (f.call, 0);
+     auto b
+       = gimple_call_num_args (f.call) >= 2 ? gimple_call_arg (f.call, 1) : a;
+ 
+     if (BYTES_BIG_ENDIAN)
+       std::swap (a, b);
+ 
+     auto mask = this->m_mask_fn (f);
+     return gimple_build_assign (f.lhs, VEC_PERM_EXPR, a, b, mask);
+   }
+ };
+ 
+ class gimple_permute_pair : public gimple_function_base
+ {
+   mask_fn_t m_mask_fn_1;
+   mask_fn_t m_mask_fn_2;
+ 
+ public:
+   constexpr gimple_permute_pair (mask_fn_t mask_fn_1, mask_fn_t mask_fn_2)
+     : m_mask_fn_1 (mask_fn_1), m_mask_fn_2 (mask_fn_2)
+   {}
+ 
+   gimple *fold (gimple_folder &f) const override
+   {
+     auto a = gimple_call_arg (f.call, 0);
+     auto b = gimple_call_arg (f.call, 1);
+ 
+     if (BYTES_BIG_ENDIAN)
+       std::swap (a, b);
+ 
+     auto arg_type = TREE_TYPE (a);
+     gcc_assert (arg_type == TREE_TYPE (b));
+ 
+     auto tuple_type = TREE_TYPE (f.lhs);
+     auto tuple = create_tmp_var (tuple_type);
+     f.assign (tuple, build_clobber (tuple_type));
+     for (auto i = 0; i < 2; i++)
+       {
+ 	auto mask = i == 0 ? this->m_mask_fn_1 (f) : this->m_mask_fn_2 (f);
+ 	auto permuted
+ 	  = f.force_val (fold_build3 (VEC_PERM_EXPR, arg_type, a, b, mask));
+ 	build_tuple_set (f, tuple, size_int (i), permuted);
+       }
+ 
+     return gimple_build_assign (f.lhs, tuple);
+   }
+ };
+ 
+ tree
+ ext_mask (gimple_folder &f)
+ {
+   auto vec_type = TREE_TYPE (gimple_call_arg (f.call, 0));
+   auto start = int_cst_value (gimple_call_arg (f.call, 2));
+   auto len = TYPE_VECTOR_SUBPARTS (vec_type).to_constant ();
+   auto mask_type = build_vector_type (sizetype, len);
+   return build_vec_series (mask_type,
+ 			   size_int (!BYTES_BIG_ENDIAN ? start : len - start),
+ 			   size_int (1));
+ }
+ 
+ /* vrev16_u8  => {{1, 0}, {3, 2}, {5, 4}, {7, 6}}
+    vrev16q_u8 => {{1, 0}, {3, 2}, {5, 4}, {7, 6},
+ 		  {9, 8}, {11, 10}, {13, 12}, {15, 14}}
+ 
+    vrev32_u8   => {{3, 2, 1, 0}, {7, 6, 5, 4}}
+    vrev32q_u8  => {{3, 2, 1, 0}, {7, 6, 5, 4}, {11, 10, 9, 8}, {15, 14, 13, 12}}
+    vrev32_u16  => {{1, 0}, {3, 2}}
+    vrev32q_p16 => {{1, 0}, {3, 2}, {5, 4}, {7, 6}}
+ 
+    rev64_u8   => {{7, 6, 5, 4, 3, 2, 1, 0}}
+    rev64q_u8  => {{7, 6, 5, 4, 3, 2, 1, 0}, {15, 14, 13, 12, 11, 10, 9, 8}}
+    rev64_u16  => {{3, 2, 1, 0}}
+    rev64q_u16 => {{3, 2, 1, 0}, {7, 6, 5, 4}}
+    rev64_u32  => {{1, 0}}
+    rev64q_u32 => {{1, 0}, {3, 2}}
+ */
+ template <unsigned int bits_per_word>
+ tree
+ rev_mask (gimple_folder &f)
+ {
+   auto vec_type = TREE_TYPE (gimple_call_arg (f.call, 0));
+ 
+   auto elem_type = TREE_TYPE (vec_type);
+   auto len = TYPE_VECTOR_SUBPARTS (vec_type).to_constant ();
+   auto mask_type = build_vector_type (sizetype, len);
+ 
+   auto num_elems_per_word
+     = bits_per_word / int_cst_value (TYPE_SIZE (elem_type));
+   auto num_groups = len / num_elems_per_word;
+ 
+   tree_vector_builder builder (mask_type, len, 1);
+ 
+   for (auto i = 1U; i <= num_groups; i++)
+     for (auto j = 1U; j <= num_elems_per_word; j++)
+       builder.quick_push (size_int (i * num_elems_per_word - j));
+ 
+   return builder.build ();
+ }
+ 
+ /* TRN1 ({a0, a1},	   {b0, b1})	     = {a0, b0}
+ 					     = VEC_PERM (a, b, {0, 2})
+    TRN1 ({a0, a1, a2, a3}, {b0, b1, b2, b3}) = {a0, b0, a2, b2}
+ 					     = VEC_PERM (a, b, {0, 4, 2, 6})
+ 
+    TRN2 ({a0, a1},	   {b0, b1})	     = {a1, b1}
+ 					     = VEC_PERM (a, b, {1, 3})
+    TRN2 ({a0, a1, a2, a3}, {b0, b1, b2, b3}) = {a1, b1, a3, b3}
+ 					     = VEC_PERM (a, b, {1, 5, 3, 7})
+ */
+ template <bool secondary_p>
+ tree
+ trn_mask (gimple_folder &f)
+ {
+   auto vec_type = TREE_TYPE (gimple_call_arg (f.call, 0));
+   auto len = TYPE_VECTOR_SUBPARTS (vec_type).to_constant ();
+   auto mask_type = build_vector_type (sizetype, len);
+   tree_vector_builder builder (mask_type, len, 1);
+ 
+   for (auto i = 0U; i < len / 2; i++)
+     {
+       builder.quick_push (size_int (i * 2 + (secondary_p ^ BYTES_BIG_ENDIAN)));
+       builder.quick_push (
+ 	size_int (len + i * 2 + (secondary_p ^ BYTES_BIG_ENDIAN)));
+     }
+ 
+   return builder.build ();
+ }
+ 
+ /* UZP1 ({a0, a1},	   {b0, b1})	     = {a0, b0}
+ 					     = VEC_PERM (a, b, {0, 2})
+    UZP1 ({a0, a1, a2, a3}, {b0, b1, b2, b3}) = {a0, a2, b0, b2}
+ 					     = VEC_PERM (a, b, {0, 2, 4, 6})
+ 
+    UZP2 ({a0, a1},	   {b0, b1})	     = {a1, b1}
+ 					     = VEC_PERM (a, b, {1, 3})
+    UZP2 ({a0, a1, a2, a3}, {b0, b1, b2, b3}) = {a1, a3, b1, b3}
+ 					     = VEC_PERM (a, b, {1, 3, 5, 7})
+ */
+ template <bool secondary_p>
+ tree
+ uzp_mask (gimple_folder &f)
+ {
+   auto vec_type = TREE_TYPE (gimple_call_arg (f.call, 0));
+   auto len = TYPE_VECTOR_SUBPARTS (vec_type).to_constant ();
+   auto mask_type = build_vector_type (sizetype, len);
+   return build_vec_series (mask_type, size_int (secondary_p ^ BYTES_BIG_ENDIAN),
+ 			   size_int (2));
+ }
+ 
+ /* ZIP1 ({a0, a1},	   {b0, b1})	     = {a0, b0}
+ 					     = VEC_PERM (a, b, {0, 2})
+    ZIP1 ({a0, a1, a2, a3}, {b0, b1, b2, b3}) = {a0, b0, a1, b1}
+ 					     = VEC_PERM (a, b, {0, 4, 1, 5})
+ 
+    ZIP2 ({a0, a1},	   {b0, b1})	     = {a1, b1}
+ 					     = VEC_PERM (a, b, {1, 3})
+    ZIP2 ({a0, a1, a2, a3}, {b0, b1, b2, b3}) = {a2, b2, a3, b3}
+ 					     = VEC_PERM (a, b, {2, 6, 3, 7})
+ */
+ template <bool secondary_p>
+ tree
+ zip_mask (gimple_folder &f)
+ {
+   auto vec_type = TREE_TYPE (gimple_call_arg (f.call, 0));
+   auto len = TYPE_VECTOR_SUBPARTS (vec_type).to_constant ();
+   auto mask_type = build_vector_type (sizetype, len);
+ 
+   auto start = (secondary_p ^ BYTES_BIG_ENDIAN) ? len / 2 : 0;
+   tree_vector_builder builder (mask_type, len, 1);
+ 
+   for (auto i = 0U; i < len / 2; i++)
+     {
+       builder.quick_push (size_int (start + i));
+       builder.quick_push (size_int (len + start + i));
+     }
+   return builder.build ();
+ }
+ 
+ struct gimple_reinterpret : public gimple_function_base
+ {
+   gimple *fold (gimple_folder &f) const override
+   {
+     auto input = gimple_call_arg (f.call, 0);
+     auto ret_type = TREE_TYPE (f.lhs);
+     auto reinterpret = fold_build1 (VIEW_CONVERT_EXPR, ret_type, input);
+     return gimple_build_assign (f.lhs, reinterpret);
+   }
+ };
+ 
+ // Reinterpret
+ NEON_FUNCTION (vreinterpret,  gimple_reinterpret,)
+ NEON_FUNCTION (vreinterpretq, gimple_reinterpret,)
+ 
+ // Lane get/set
+ NEON_FUNCTION (vget_lane,    gimple_get_lane,)
+ NEON_FUNCTION (vgetq_lane,   gimple_get_lane,)
+ NEON_FUNCTION (vget_low,     gimple_get_half<false>,)
+ NEON_FUNCTION (vget_high,    gimple_get_half<true>,)
+ NEON_FUNCTION (vset_lane,    gimple_set_lane,)
+ NEON_FUNCTION (vsetq_lane,   gimple_set_lane,)
+ NEON_FUNCTION (vcopy_lane,   gimple_copy_lane,)
+ NEON_FUNCTION (vcopy_laneq,  gimple_copy_lane,)
+ NEON_FUNCTION (vcopyq_laneq, gimple_copy_lane,)
+ NEON_FUNCTION (vcopyq_lane,  gimple_copy_lane,)
+ NEON_FUNCTION (vdup_lane,    gimple_dup_lane,)
+ NEON_FUNCTION (vdupq_lane,   gimple_dup_lane,)
+ NEON_FUNCTION (vdup_laneq,   gimple_dup_lane,)
+ NEON_FUNCTION (vdupq_laneq,  gimple_dup_lane,)
+ NEON_FUNCTION (vdupb_lane,   gimple_get_lane,)
+ NEON_FUNCTION (vdupb_laneq,  gimple_get_lane,)
+ NEON_FUNCTION (vduph_lane,   gimple_get_lane,)
+ NEON_FUNCTION (vduph_laneq,  gimple_get_lane,)
+ NEON_FUNCTION (vdups_lane,   gimple_get_lane,)
+ NEON_FUNCTION (vdups_laneq,  gimple_get_lane,)
+ NEON_FUNCTION (vdupd_lane,   gimple_get_lane,)
+ NEON_FUNCTION (vdupd_laneq,  gimple_get_lane,)
+ 
+ // Lanewise arithmetic
+ NEON_FUNCTION (vaddd, gimple_expr, (PLUS_EXPR))
+ NEON_FUNCTION (vadd,  gimple_expr, (PLUS_EXPR, PLUS_EXPR, BIT_XOR_EXPR))
+ NEON_FUNCTION (vaddq, gimple_expr, (PLUS_EXPR, PLUS_EXPR, BIT_XOR_EXPR))
+ 
+ // Bitwise operations
+ NEON_FUNCTION (vand,   gimple_expr,    (BIT_AND_EXPR))
+ NEON_FUNCTION (vandq,  gimple_expr,    (BIT_AND_EXPR))
+ NEON_FUNCTION (vbic,   gimple_not_rhs, (BIT_AND_EXPR))
+ NEON_FUNCTION (vbicq,  gimple_not_rhs, (BIT_AND_EXPR))
+ NEON_FUNCTION (vbsl,   gimple_bsl,)
+ NEON_FUNCTION (vbslq,  gimple_bsl,)
+ NEON_FUNCTION (veor,   gimple_expr,    (BIT_XOR_EXPR))
+ NEON_FUNCTION (veorq,  gimple_expr,    (BIT_XOR_EXPR))
+ NEON_FUNCTION (vmvn,   gimple_expr,    (BIT_NOT_EXPR))
+ NEON_FUNCTION (vmvnq,  gimple_expr,    (BIT_NOT_EXPR))
+ NEON_FUNCTION (vorn,   gimple_not_rhs, (BIT_IOR_EXPR))
+ NEON_FUNCTION (vornq,  gimple_not_rhs, (BIT_IOR_EXPR))
+ NEON_FUNCTION (vorr,   gimple_expr,    (BIT_IOR_EXPR))
+ NEON_FUNCTION (vorrq,  gimple_expr,    (BIT_IOR_EXPR))
+ NEON_FUNCTION (vrbit,  gimple_ifn,     (IFN_BITREVERSE))
+ NEON_FUNCTION (vrbitq, gimple_ifn,     (IFN_BITREVERSE))
+ 
+ // Bitwise operations (SHA3)
+ NEON_FUNCTION (vbcaxq, gimple_bcax,)
+ NEON_FUNCTION (veor3q, gimple_eor3,)
+ NEON_FUNCTION (vrax1q, gimple_rax1,)
+ NEON_FUNCTION (vxarq,  gimple_xar,)
+ 
+ // Bit counting operations
+ NEON_FUNCTION (vcls,  gimple_ifn, (IFN_CLRSB))
+ NEON_FUNCTION (vclsq, gimple_ifn, (IFN_CLRSB))
+ NEON_FUNCTION (vclz,  gimple_ifn, (IFN_CLZ))
+ NEON_FUNCTION (vclzq, gimple_ifn, (IFN_CLZ))
+ NEON_FUNCTION (vcnt,  gimple_ifn, (IFN_POPCOUNT))
+ NEON_FUNCTION (vcntq, gimple_ifn, (IFN_POPCOUNT))
+ 
+ // Permutations
+ // Extract
+ NEON_FUNCTION (vext,  gimple_permute, (ext_mask))
+ NEON_FUNCTION (vextq, gimple_permute, (ext_mask))
+ 
+ // Reverse
+ NEON_FUNCTION (vrev16,  gimple_permute, (rev_mask<16>))
+ NEON_FUNCTION (vrev16q, gimple_permute, (rev_mask<16>))
+ NEON_FUNCTION (vrev32,  gimple_permute, (rev_mask<32>))
+ NEON_FUNCTION (vrev32q, gimple_permute, (rev_mask<32>))
+ NEON_FUNCTION (vrev64,  gimple_permute, (rev_mask<64>))
+ NEON_FUNCTION (vrev64q, gimple_permute, (rev_mask<64>))
+ 
+ // Transpose
+ NEON_FUNCTION (vtrn1,  gimple_permute,      (trn_mask<false>))
+ NEON_FUNCTION (vtrn1q, gimple_permute,      (trn_mask<false>))
+ NEON_FUNCTION (vtrn2,  gimple_permute,      (trn_mask<true>))
+ NEON_FUNCTION (vtrn2q, gimple_permute,      (trn_mask<true>))
+ NEON_FUNCTION (vtrn,   gimple_permute_pair, (trn_mask<false>, trn_mask<true>))
+ NEON_FUNCTION (vtrnq,  gimple_permute_pair, (trn_mask<false>, trn_mask<true>))
+ 
+ // Unzip
+ NEON_FUNCTION (vuzp1,  gimple_permute,      (uzp_mask<false>))
+ NEON_FUNCTION (vuzp1q, gimple_permute,      (uzp_mask<false>))
+ NEON_FUNCTION (vuzp2,  gimple_permute,      (uzp_mask<true>))
+ NEON_FUNCTION (vuzp2q, gimple_permute,      (uzp_mask<true>))
+ NEON_FUNCTION (vuzp,   gimple_permute_pair, (uzp_mask<false>, uzp_mask<true>))
+ NEON_FUNCTION (vuzpq,  gimple_permute_pair, (uzp_mask<false>, uzp_mask<true>))
+ 
+ // Zip
+ NEON_FUNCTION (vzip1,  gimple_permute,      (zip_mask<false>))
+ NEON_FUNCTION (vzip1q, gimple_permute,      (zip_mask<false>))
+ NEON_FUNCTION (vzip2,  gimple_permute,      (zip_mask<true>))
+ NEON_FUNCTION (vzip2q, gimple_permute,      (zip_mask<true>))
+ NEON_FUNCTION (vzip,   gimple_permute_pair, (zip_mask<false>, zip_mask<true>))
+ NEON_FUNCTION (vzipq,  gimple_permute_pair, (zip_mask<false>, zip_mask<true>))
+ }
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-neon-builtins-base.def gcc-17-20260705/gcc/config/aarch64/aarch64-neon-builtins-base.def
*** gcc-17-20260628/gcc/config/aarch64/aarch64-neon-builtins-base.def	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/config/aarch64/aarch64-neon-builtins-base.def	Sun Jul  5 22:32:07 2026
***************
*** 0 ****
--- 1,147 ----
+ /* ACLE support for AArch64 NEON (__ARM_FEATURE_SIMD intrinsics)
+    Copyright (C) 2026-2026 Free Software Foundation, Inc.
+ 
+    This file is part of GCC.
+ 
+    GCC 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.
+ 
+    GCC 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 GCC; see the file COPYING3.  If not see
+    <http://www.gnu.org/licenses/>.  */
+ 
+ // Reinterpret
+ #define REQUIRED_EXTENSIONS nonstreaming_only (AARCH64_FL_SIMD)
+ DEF_NEON_FUNCTION (vreinterpret,  neon_reinterpret,  ("D0,D1"))
+ DEF_NEON_FUNCTION (vreinterpretq, neon_reinterpretq, ("Q0,Q1"))
+ #undef REQUIRED_EXTENSIONS
+ 
+ // Lane manipulation
+ #define REQUIRED_EXTENSIONS nonstreaming_only (AARCH64_FL_SIMD)
+ DEF_NEON_FUNCTION (vcreate,     all_neon,  ("D0,su64"))
+ DEF_NEON_FUNCTION (vcombine,    all_neon,  ("Q0,D0,D0"))
+ DEF_NEON_FUNCTION (vget_lane,   all_neon,  ("s0,D0,ss32",    lane<1>))
+ DEF_NEON_FUNCTION (vgetq_lane,  all_neon,  ("s0,Q0,ss32",    lane<1>))
+ DEF_NEON_FUNCTION (vget_high,   all_neon,  ("D0,Q0"))
+ DEF_NEON_FUNCTION (vget_low,    all_neon,  ("D0,Q0"))
+ DEF_NEON_FUNCTION (vset_lane,   all_neon,  ("D0,s0,D0,ss32", lane<2>))
+ DEF_NEON_FUNCTION (vsetq_lane,  all_neon,  ("Q0,s0,Q0,ss32", lane<2>))
+ DEF_NEON_FUNCTION (vdup_lane,   all_neon,  ("D0,D0,ss32",    lane<1>))
+ DEF_NEON_FUNCTION (vdupq_lane,  all_neon,  ("Q0,D0,ss32",    lane<1>))
+ DEF_NEON_FUNCTION (vdup_laneq,  all_neon,  ("D0,Q0,ss32",    lane<1>))
+ DEF_NEON_FUNCTION (vdupq_laneq, all_neon,  ("Q0,Q0,ss32",    lane<1>))
+ DEF_NEON_FUNCTION (vdupb_lane,  b_neon,    ("s0,D0,ss32",    lane<1>))
+ DEF_NEON_FUNCTION (vdupb_laneq, b_neon,    ("s0,Q0,ss32",    lane<1>))
+ DEF_NEON_FUNCTION (vdupb_lane,  b_float,   ("s0,D0,ss32",    lane<1>))
+ DEF_NEON_FUNCTION (vdupb_laneq, b_float,   ("s0,Q0,ss32",    lane<1>))
+ DEF_NEON_FUNCTION (vduph_lane,  h_neon,    ("s0,D0,ss32",    lane<1>))
+ DEF_NEON_FUNCTION (vduph_laneq, h_neon,    ("s0,Q0,ss32",    lane<1>))
+ DEF_NEON_FUNCTION (vdups_lane,  s_data,    ("s0,D0,ss32",    lane<1>))
+ DEF_NEON_FUNCTION (vdups_laneq, s_data,    ("s0,Q0,ss32",    lane<1>))
+ DEF_NEON_FUNCTION (vdupd_lane,  d_data,    ("s0,D0,ss32",    lane<1>))
+ DEF_NEON_FUNCTION (vdupd_laneq, d_data,    ("s0,Q0,ss32",    lane<1>))
+ DEF_NEON_FUNCTION (vdup_n,      all_neon,  ("D0,s0"))
+ DEF_NEON_FUNCTION (vdupq_n,     all_neon,  ("Q0,s0"))
+ DEF_NEON_FUNCTION (vmov_n,      bhsd_neon, ("D0,s0"))
+ DEF_NEON_FUNCTION (vmovq_n,     bhsd_neon, ("Q0,s0"))
+ DEF_NEON_FUNCTION (vcopy_lane,  neon_copy_lane,
+ 		   ("D0,D0,ss32,D0,ss32", lane<1>, lane<3>))
+ DEF_NEON_FUNCTION (vcopy_laneq, neon_copy_lane,
+ 		   ("D0,D0,ss32,Q0,ss32", lane<1>, lane<3>))
+ DEF_NEON_FUNCTION (vcopyq_lane, neon_copy_lane,
+ 		   ("Q0,Q0,ss32,D0,ss32", lane<1>, lane<3>))
+ DEF_NEON_FUNCTION (vcopyq_laneq, neon_copy_lane,
+ 		   ("Q0,Q0,ss32,Q0,ss32", lane<1>, lane<3>))
+ #undef REQUIRED_EXTENSIONS
+ 
+ // Lanewise arithmetic
+ #define REQUIRED_EXTENSIONS nonstreaming_only (AARCH64_FL_SIMD)
+ DEF_NEON_FUNCTION (vaddd, d_integer,	     ("s0,s0,s0"))
+ DEF_NEON_FUNCTION (vadd,  all_arith_no_fp16, ("D0,D0,D0"))
+ DEF_NEON_FUNCTION (vadd,  bhd_poly,	     ("D0,D0,D0"))
+ DEF_NEON_FUNCTION (vaddq, all_arith_no_fp16, ("Q0,Q0,Q0"))
+ DEF_NEON_FUNCTION (vaddq, bhdq_poly,	     ("Q0,Q0,Q0"))
+ #undef REQUIRED_EXTENSIONS
+ 
+ // Lanewise arithmetic (FP16)
+ #define REQUIRED_EXTENSIONS nonstreaming_only (AARCH64_FL_SIMD | AARCH64_FL_F16)
+ DEF_NEON_FUNCTION (vadd,  h_float, ("D0,D0,D0"))
+ DEF_NEON_FUNCTION (vaddq, h_float, ("Q0,Q0,Q0"))
+ #undef REQUIRED_EXTENSIONS
+ 
+ // Bitwise operations
+ #define REQUIRED_EXTENSIONS nonstreaming_only (AARCH64_FL_SIMD)
+ DEF_NEON_FUNCTION (vand,   all_integer, ("D0,D0,D0"))
+ DEF_NEON_FUNCTION (vandq,  all_integer, ("Q0,Q0,Q0"))
+ DEF_NEON_FUNCTION (vbic,   all_integer, ("D0,D0,D0"))
+ DEF_NEON_FUNCTION (vbicq,  all_integer, ("Q0,Q0,Q0"))
+ DEF_NEON_FUNCTION (vbsl,   bhsd_neon,   ("D0,Du0,D0,D0"))
+ DEF_NEON_FUNCTION (vbslq,  bhsd_neon,   ("Q0,Qu0,Q0,Q0"))
+ DEF_NEON_FUNCTION (veor,   all_integer, ("D0,D0,D0"))
+ DEF_NEON_FUNCTION (veorq,  all_integer, ("Q0,Q0,Q0"))
+ DEF_NEON_FUNCTION (vmvn,   b_poly,      ("D0,D0"))
+ DEF_NEON_FUNCTION (vmvnq,  b_poly,      ("Q0,Q0"))
+ DEF_NEON_FUNCTION (vmvn,   bhs_integer, ("D0,D0"))
+ DEF_NEON_FUNCTION (vmvnq,  bhs_integer, ("Q0,Q0"))
+ DEF_NEON_FUNCTION (vorn,   all_integer, ("D0,D0,D0"))
+ DEF_NEON_FUNCTION (vornq,  all_integer, ("Q0,Q0,Q0"))
+ DEF_NEON_FUNCTION (vorr,   all_integer, ("D0,D0,D0"))
+ DEF_NEON_FUNCTION (vorrq,  all_integer, ("Q0,Q0,Q0"))
+ DEF_NEON_FUNCTION (vrbit,  b_neon,      ("D0,D0"))
+ DEF_NEON_FUNCTION (vrbitq, b_neon,      ("Q0,Q0"))
+ #undef REQUIRED_EXTENSIONS
+ 
+ // Bitwise operations (FEAT_SHA3)
+ #define REQUIRED_EXTENSIONS nonstreaming_only (AARCH64_FL_SHA3)
+ DEF_NEON_FUNCTION (vbcaxq, all_integer, ("Q0,Q0,Q0,Q0"))
+ DEF_NEON_FUNCTION (veor3q, all_integer, ("Q0,Q0,Q0,Q0"))
+ DEF_NEON_FUNCTION (vrax1q, d_unsigned,  ("Q0,Q0,Q0"))
+ DEF_NEON_FUNCTION (vxarq,  d_unsigned,  ("Q0,Q0,Q0,ss32", shift<2>))
+ #undef REQUIRED_EXTENSIONS
+ 
+ // Bit counting operations
+ #define REQUIRED_EXTENSIONS nonstreaming_only (AARCH64_FL_SIMD)
+ DEF_NEON_FUNCTION (vcls,  bhs_integer, ("Ds0,D0"))
+ DEF_NEON_FUNCTION (vclsq, bhs_integer, ("Qs0,Q0"))
+ DEF_NEON_FUNCTION (vclz,  bhs_integer, ("D0,D0"))
+ DEF_NEON_FUNCTION (vclzq, bhs_integer, ("Q0,Q0"))
+ DEF_NEON_FUNCTION (vcnt,  b_neon,      ("D0,D0"))
+ DEF_NEON_FUNCTION (vcntq, b_neon,      ("Q0,Q0"))
+ #undef REQUIRED_EXTENSIONS
+ 
+ // Permutations
+ #define REQUIRED_EXTENSIONS nonstreaming_only (AARCH64_FL_SIMD)
+ DEF_NEON_FUNCTION (vext,    bhsd_neon,  ("D0,D0,D0,ss32", lane<2>))
+ DEF_NEON_FUNCTION (vextq,   bhsd_neon,  ("Q0,Q0,Q0,ss32", lane<2>))
+ DEF_NEON_FUNCTION (vrev16,  neon_rev16, ("D0,D0"))
+ DEF_NEON_FUNCTION (vrev16q, neon_rev16, ("Q0,Q0"))
+ DEF_NEON_FUNCTION (vrev32,  neon_rev32, ("D0,D0"))
+ DEF_NEON_FUNCTION (vrev32q, neon_rev32, ("Q0,Q0"))
+ DEF_NEON_FUNCTION (vrev64,  neon_rev64, ("D0,D0"))
+ DEF_NEON_FUNCTION (vrev64q, neon_rev64, ("Q0,Q0"))
+ DEF_NEON_FUNCTION (vtrn,    bhs_neon,   ("D0x2,D0,D0"))
+ DEF_NEON_FUNCTION (vtrn1,   bhs_neon,   ("D0,D0,D0"))
+ DEF_NEON_FUNCTION (vtrn1q,  bhsd_neon,  ("Q0,Q0,Q0"))
+ DEF_NEON_FUNCTION (vtrn2,   bhs_neon,   ("D0,D0,D0"))
+ DEF_NEON_FUNCTION (vtrn2q,  bhsd_neon,  ("Q0,Q0,Q0"))
+ DEF_NEON_FUNCTION (vtrnq,   bhs_neon,   ("Q0x2,Q0,Q0"))
+ DEF_NEON_FUNCTION (vuzp,    bhs_neon,   ("D0x2,D0,D0"))
+ DEF_NEON_FUNCTION (vuzp1,   bhs_neon,   ("D0,D0,D0"))
+ DEF_NEON_FUNCTION (vuzp1q,  bhsd_neon,  ("Q0,Q0,Q0"))
+ DEF_NEON_FUNCTION (vuzp2,   bhs_neon,   ("D0,D0,D0"))
+ DEF_NEON_FUNCTION (vuzp2q,  bhsd_neon,  ("Q0,Q0,Q0"))
+ DEF_NEON_FUNCTION (vuzpq,   bhs_neon,   ("Q0x2,Q0,Q0"))
+ DEF_NEON_FUNCTION (vzip,    bhs_neon,   ("D0x2,D0,D0"))
+ DEF_NEON_FUNCTION (vzip1,   bhs_neon,   ("D0,D0,D0"))
+ DEF_NEON_FUNCTION (vzip1q,  bhsd_neon,  ("Q0,Q0,Q0"))
+ DEF_NEON_FUNCTION (vzip2,   bhs_neon,   ("D0,D0,D0"))
+ DEF_NEON_FUNCTION (vzip2q,  bhsd_neon,  ("Q0,Q0,Q0"))
+ DEF_NEON_FUNCTION (vzipq,   bhs_neon,   ("Q0x2,Q0,Q0"))
+ #undef REQUIRED_EXTENSIONS
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-neon-builtins-base.h gcc-17-20260705/gcc/config/aarch64/aarch64-neon-builtins-base.h
*** gcc-17-20260628/gcc/config/aarch64/aarch64-neon-builtins-base.h	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/config/aarch64/aarch64-neon-builtins-base.h	Sun Jul  5 22:32:07 2026
***************
*** 0 ****
--- 1,31 ----
+ /* ACLE support for AArch64 NEON (__ARM_FEATURE_SIMD intrinsics)
+    Copyright (C) 2026-2026 Free Software Foundation, Inc.
+ 
+    This file is part of GCC.
+ 
+    GCC 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.
+ 
+    GCC 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 GCC; see the file COPYING3.  If not see
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #ifndef GCC_AARCH64_NEON_BUILTINS_BASE_H
+ #define GCC_AARCH64_NEON_BUILTINS_BASE_H
+ 
+ namespace aarch64_acle {
+   namespace functions {
+ #define DEF_NEON_FUNCTION(NAME, ...) \
+     extern const aarch64_acle::function_base *const NAME;
+ #include "aarch64-neon-builtins.def"
+   }
+ }
+ 
+ #endif
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-neon-builtins-functions.h gcc-17-20260705/gcc/config/aarch64/aarch64-neon-builtins-functions.h
*** gcc-17-20260628/gcc/config/aarch64/aarch64-neon-builtins-functions.h	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/config/aarch64/aarch64-neon-builtins-functions.h	Sun Jul  5 22:32:07 2026
***************
*** 0 ****
--- 1,29 ----
+ /* ACLE support for AArch64 NEON (function_base classes)
+    Copyright (C) 2026-2026 Free Software Foundation, Inc.
+ 
+    This file is part of GCC.
+ 
+    GCC 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.
+ 
+    GCC 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 GCC; see the file COPYING3.  If not see
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #ifndef GCC_AARCH64_NEON_BUILTINS_FUNCTIONS_H
+ #define GCC_AARCH64_NEON_BUILTINS_FUNCTIONS_H
+ 
+ /* Declare the global function base NAME, creating it from an instance
+    of class CLASS with constructor arguments ARGS.  */
+ #define NEON_FUNCTION(NAME, CLASS, ARGS)				\
+   namespace { static constexpr const CLASS NAME##_obj ARGS; }		\
+   const function_base *const aarch64_acle::functions::NAME = &NAME##_obj;
+ 
+ #endif
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-neon-builtins-shapes.cc gcc-17-20260705/gcc/config/aarch64/aarch64-neon-builtins-shapes.cc
*** gcc-17-20260628/gcc/config/aarch64/aarch64-neon-builtins-shapes.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/config/aarch64/aarch64-neon-builtins-shapes.cc	Sun Jul  5 22:32:07 2026
***************
*** 0 ****
--- 1,136 ----
+ /* ACLE support for AArch64 NEON (function shapes)
+    Copyright (C) 2026-2026 Free Software Foundation, Inc.
+ 
+    This file is part of GCC.
+ 
+    GCC 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.
+ 
+    GCC 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 GCC; see the file COPYING3.  If not see
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #define INCLUDE_ALGORITHM
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "tm.h"
+ #include "basic-block.h"
+ #include "tree.h"
+ #include "function.h"
+ #include "gimple.h"
+ #include "rtl.h"
+ #include "tm_p.h"
+ #include "memmodel.h"
+ #include "insn-codes.h"
+ #include "optabs.h"
+ #include "aarch64-acle-builtins.h"
+ #include "aarch64-sve-builtins-shapes.h"
+ #include "aarch64-builtins.h"
+ 
+ using namespace aarch64_acle;
+ 
+ /* Require that the parameter at PARAM_INDEX is in the range MIN to MAX
+    (inclusive).  */
+ template <unsigned int PARAM_INDEX, int MIN, int MAX>
+ bool
+ range (function_checker &c)
+ {
+   return c.require_immediate_range (PARAM_INDEX, MIN, MAX);
+ }
+ 
+ /* Require that the parameter at PARAM_INDEX is a valid lane index for the
+    vector at PARAM_INDEX - 1.  */
+ template <unsigned int PARAM_INDEX>
+ bool
+ lane (function_checker &c)
+ {
+   auto vec_param_index = PARAM_INDEX - 1;
+   auto fn_type = TREE_TYPE (c.fndecl);
+   auto args = TYPE_ARG_TYPES (fn_type);
+ 
+   for (auto i = 0U; i < vec_param_index; i++)
+     args = TREE_CHAIN (args);
+   auto arg_type = TREE_VALUE (args);
+ 
+   unsigned element_count;
+   if (VECTOR_TYPE_P (arg_type))
+     element_count = TYPE_VECTOR_SUBPARTS (arg_type).to_constant ();
+   else
+     {
+       auto field = tuple_type_field (arg_type);
+       auto array_type = TREE_TYPE (field);
+       auto vec_type = TREE_TYPE (array_type);
+       element_count = TYPE_VECTOR_SUBPARTS (vec_type).to_constant ();
+     }
+   return c.require_immediate_range (PARAM_INDEX, 0, element_count - 1);
+ }
+ 
+ /* Require that the parameter at PARAM_INDEX is a valid shift amount.  */
+ template <unsigned int PARAM_INDEX>
+ bool
+ shift (function_checker &c)
+ {
+   auto bits = c.type_suffix (0).element_bits;
+   return c.require_immediate_range (PARAM_INDEX, 0, bits - 1);
+ }
+ 
+ /* A checker that always returns true.  */
+ bool
+ trivial (function_checker &)
+ {
+   return true;
+ }
+ 
+ using check_fn_t = bool (*) (function_checker &);
+ 
+ /* All NEON functions are non-overloaded, so we don't need bespoke
+   function shapes.  Instead, we can just use a single shape for all NEON
+   functions, parameterised by a signature and optional validity checkers.  */
+ struct neon_shape : public function_shape
+ {
+   constexpr neon_shape (const char *signature,
+ 			check_fn_t check_fn1 = trivial,
+ 			check_fn_t check_fn2 = trivial)
+     : m_signature (signature),
+       m_check_fn1 (check_fn1),
+       m_check_fn2 (check_fn2)
+   {}
+ 
+   const char *m_signature;
+   check_fn_t m_check_fn1;
+   check_fn_t m_check_fn2;
+ 
+   void build (function_builder &b,
+ 	      const function_group_info &group) const override
+   {
+     aarch64_acle::build_all (b, this->m_signature, group, MODE_none);
+   }
+ 
+   bool check (function_checker &c) const override
+   {
+     /* Use strict `&` rather than short-circuiting `&&` so that we report errors
+        from both checkers.  */
+     return this->m_check_fn1 (c) & this->m_check_fn2 (c);
+   }
+ 
+   bool explicit_type_suffix_p (unsigned int) const override { return true; }
+   tree resolve (function_resolver &) const override { gcc_unreachable (); }
+ };
+ 
+ namespace aarch64_acle {
+   namespace shapes {
+ #define DEF_NEON_FUNCTION(NAME, TYPES, SHAPE_ARGS)			\
+     static constexpr const neon_shape OBJ_NAME (NAME, TYPES) SHAPE_ARGS;\
+     const aarch64_acle::function_shape *SHAPE_NAME (NAME, TYPES)	\
+       = &OBJ_NAME (NAME, TYPES);
+ #include "aarch64-neon-builtins.def"
+   }
+ }
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-neon-builtins-shapes.h gcc-17-20260705/gcc/config/aarch64/aarch64-neon-builtins-shapes.h
*** gcc-17-20260628/gcc/config/aarch64/aarch64-neon-builtins-shapes.h	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/config/aarch64/aarch64-neon-builtins-shapes.h	Sun Jul  5 22:32:07 2026
***************
*** 0 ****
--- 1,31 ----
+ /* ACLE support for AArch64 NEON (function shapes)
+    Copyright (C) 2026-2026 Free Software Foundation, Inc.
+ 
+    This file is part of GCC.
+ 
+    GCC 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.
+ 
+    GCC 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 GCC; see the file COPYING3.  If not see
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #ifndef GCC_AARCH64_NEON_BUILTINS_SHAPES_H
+ #define GCC_AARCH64_NEON_BUILTINS_SHAPES_H
+ 
+ namespace aarch64_acle {
+   namespace shapes {
+ #define DEF_NEON_FUNCTION(NAME, TYPES, SHAPE_ARGS) \
+     extern const aarch64_acle::function_shape *const SHAPE_NAME (NAME, TYPES);
+ #include "aarch64-neon-builtins.def"
+   }
+ }
+ 
+ #endif
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-neon-builtins.def gcc-17-20260705/gcc/config/aarch64/aarch64-neon-builtins.def
*** gcc-17-20260628/gcc/config/aarch64/aarch64-neon-builtins.def	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/config/aarch64/aarch64-neon-builtins.def	Sun Jul  5 22:32:07 2026
***************
*** 0 ****
--- 1,40 ----
+ /* ACLE support for AArch64 NEON (__ARM_FEATURE_SIMD intrinsics)
+    Copyright (C) 2026-2026 Free Software Foundation, Inc.
+ 
+    This file is part of GCC.
+ 
+    GCC 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.
+ 
+    GCC 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 GCC; see the file COPYING3.  If not see
+    <http://www.gnu.org/licenses/>.  */
+ 
+ /* Code organization: See block comment at the top of
+    aarch64-sve-builtins.def.  */
+ 
+ /* Define a new function group.  */
+ #ifndef DEF_NEON_FUNCTION
+ #define DEF_NEON_FUNCTION(NAME, TYPES, SHAPE_ARGS)
+ #endif
+ 
+ /* Helper for generating the name of the function_group's corresponding
+    neon_shape instance.  */
+ #define OBJ_NAME(NAME, TYPES) NAME ## _ ## TYPES ## _obj
+ 
+ /* Helper for generating the name of the function_group's corresponding
+    function_shape.  */
+ #define SHAPE_NAME(NAME, TYPES) NAME ## _ ## TYPES ## _shape
+ 
+ #include "aarch64-neon-builtins-base.def"
+ 
+ #undef DEF_NEON_FUNCTION
+ #undef OBJ_NAME
+ #undef SHAPE_NAME
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-protos.h gcc-17-20260705/gcc/config/aarch64/aarch64-protos.h
*** gcc-17-20260628/gcc/config/aarch64/aarch64-protos.h	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/aarch64-protos.h	Sun Jul  5 22:32:07 2026
*************** tree aarch64_general_builtin_decl (unsig
*** 1157,1163 ****
  tree aarch64_general_builtin_rsqrt (unsigned int);
  void aarch64_ms_variadic_abi_init_builtins (void);
  void handle_arm_acle_h (void);
! void handle_arm_neon_h (void);
  
  bool aarch64_check_required_extensions (location_t, tree,
  					aarch64_required_extensions);
--- 1157,1163 ----
  tree aarch64_general_builtin_rsqrt (unsigned int);
  void aarch64_ms_variadic_abi_init_builtins (void);
  void handle_arm_acle_h (void);
! void init_arm_neon_builtins (void);
  
  bool aarch64_check_required_extensions (location_t, tree,
  					aarch64_required_extensions);
*************** namespace aarch64 {
*** 1179,1189 ****
    void report_not_enum (location_t, tree, unsigned int, HOST_WIDE_INT, tree);
  }
  
! namespace aarch64_sve {
    void init_builtins ();
    void handle_arm_sve_h (bool);
    void handle_arm_sme_h (bool);
    void handle_arm_neon_sve_bridge_h (bool);
    tree builtin_decl (unsigned, bool);
    bool builtin_type_p (const_tree);
    bool builtin_type_p (const_tree, unsigned int *, unsigned int *);
--- 1179,1190 ----
    void report_not_enum (location_t, tree, unsigned int, HOST_WIDE_INT, tree);
  }
  
! namespace aarch64_acle {
    void init_builtins ();
    void handle_arm_sve_h (bool);
    void handle_arm_sme_h (bool);
    void handle_arm_neon_sve_bridge_h (bool);
+   void handle_arm_neon_h (bool);
    tree builtin_decl (unsigned, bool);
    bool builtin_type_p (const_tree);
    bool builtin_type_p (const_tree, unsigned int *, unsigned int *);
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-simd-builtins.def gcc-17-20260705/gcc/config/aarch64/aarch64-simd-builtins.def
*** gcc-17-20260628/gcc/config/aarch64/aarch64-simd-builtins.def	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/aarch64-simd-builtins.def	Sun Jul  5 22:32:07 2026
***************
*** 50,58 ****
    BUILTIN_V12DI (STORESTRUCT_LANE_U, vec_stl1_lane, 0, ALL)
    BUILTIN_V12DI (STORESTRUCT_LANE_P, vec_stl1_lane, 0, ALL)
  
-   BUILTIN_VDC (BINOP, combine, 0, QUIET)
-   BUILTIN_VD_I (BINOPU, combine, 0, DEFAULT)
-   BUILTIN_VDC_P (BINOPP, combine, 0, DEFAULT)
    BUILTIN_VB (BINOPP, pmul, 0, DEFAULT)
    VAR1 (BINOPP, pmull, 0, DEFAULT, v8qi)
    VAR1 (BINOPP, pmull_hi, 0, DEFAULT, v16qi)
--- 50,55 ----
***************
*** 60,69 ****
    BUILTIN_VHSDF_HSDF (UNOP, sqrt, 2, FP)
    BUILTIN_VDQ_I (BINOP, addp, 0, DEFAULT)
    BUILTIN_VDQ_I (BINOPU, addp, 0, DEFAULT)
-   BUILTIN_VDQ_BHSI (UNOP, clrsb, 2, DEFAULT)
-   BUILTIN_VDQ_BHSI (UNOP, clz, 2, DEFAULT)
-   BUILTIN_VS (UNOP, ctz, 2, DEFAULT)
-   BUILTIN_VB (UNOP, popcount, 2, DEFAULT)
  
    /* Implemented by aarch64_<sur>q<r>shl<mode>.  */
    BUILTIN_VSDQ_I (BINOP, sqshl, 0, DEFAULT)
--- 57,62 ----
***************
*** 667,685 ****
    VAR1 (UNOP, floatunsv4si, 2, FP, v4sf)
    VAR1 (UNOP, floatunsv2di, 2, FP, v2df)
  
-   VAR5 (UNOPU, bswap, 2, DEFAULT, v4hi, v8hi, v2si, v4si, v2di)
- 
-   BUILTIN_VB (UNOP, rbit, 0, DEFAULT)
- 
-   /* Implemented by
-      aarch64_<PERMUTE:perm_insn><mode>.  */
-   BUILTIN_VALL (BINOP, zip1, 0, QUIET)
-   BUILTIN_VALL (BINOP, zip2, 0, QUIET)
-   BUILTIN_VALL (BINOP, uzp1, 0, QUIET)
-   BUILTIN_VALL (BINOP, uzp2, 0, QUIET)
-   BUILTIN_VALL (BINOP, trn1, 0, QUIET)
-   BUILTIN_VALL (BINOP, trn2, 0, QUIET)
- 
    BUILTIN_GPF_F16 (UNOP, frecpe, 0, FP)
    BUILTIN_GPF_F16 (UNOP, frecpx, 0, FP)
  
--- 660,665 ----
***************
*** 732,743 ****
    BUILTIN_VDQSF (QUADOP_LANE, float_mla_laneq, 0, FP)
    BUILTIN_VDQSF (QUADOP_LANE, float_mls_laneq, 0, FP)
  
-   /* Implemented by aarch64_simd_bsl<mode>.  */
-   BUILTIN_VDQQH (BSL_P, simd_bsl, 0, DEFAULT)
-   VAR2 (BSL_P, simd_bsl,0, DEFAULT, di, v2di)
-   BUILTIN_VSDQ_I_DI (BSL_U, simd_bsl, 0, DEFAULT)
-   BUILTIN_VALLDIF (BSL_S, simd_bsl, 0, QUIET)
- 
    /* Implemented by aarch64_crypto_aes<op><mode>.  */
    VAR1 (BINOPU, crypto_aese, 0, DEFAULT, v16qi)
    VAR1 (BINOPU, crypto_aesd, 0, DEFAULT, v16qi)
--- 712,717 ----
***************
*** 900,915 ****
    VAR1 (BINOPU, crypto_sha512su0q, 0, DEFAULT, v2di)
    /* Implemented by aarch64_crypto_sha512su1qv2di.  */
    VAR1 (TERNOPU, crypto_sha512su1q, 0, DEFAULT, v2di)
-   /* Implemented by eor3q<mode>4.  */
-   BUILTIN_VQ_I (TERNOPU, eor3q, 4, DEFAULT)
-   BUILTIN_VQ_I (TERNOP, eor3q, 4, DEFAULT)
-   /* Implemented by aarch64_rax1qv2di.  */
-   VAR1 (BINOPU, rax1q, 0, DEFAULT, v2di)
-   /* Implemented by aarch64_xarqv2di.  */
-   VAR1 (TERNOPUI, xarq, 0, DEFAULT, v2di)
-   /* Implemented by bcaxq<mode>4.  */
-   BUILTIN_VQ_I (TERNOPU, bcaxq, 4, DEFAULT)
-   BUILTIN_VQ_I (TERNOP, bcaxq, 4, DEFAULT)
  
    /* Implemented by aarch64_fml<f16mac1>l<f16quad>_low<mode>.  */
    VAR1 (TERNOP, fmlal_low, 0, FP, v2sf)
--- 874,879 ----
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-simd-pragma-builtins.def gcc-17-20260705/gcc/config/aarch64/aarch64-simd-pragma-builtins.def
*** gcc-17-20260628/gcc/config/aarch64/aarch64-simd-pragma-builtins.def	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/aarch64-simd-pragma-builtins.def	Sun Jul  5 22:32:07 2026
*************** ENTRY_FMA_FPM (vmlalltb, f32, UNSPEC_FML
*** 196,252 ****
  ENTRY_FMA_FPM (vmlalltt, f32, UNSPEC_FMLALLTT_FP8)
  #undef REQUIRED_EXTENSIONS
  
- // bsl
- #define REQUIRED_EXTENSIONS nonstreaming_only (AARCH64_FL_SIMD)
- ENTRY_TERNARY (vbsl_mf8, mf8, u8, mf8, mf8, UNSPEC_BSL, QUIET)
- ENTRY_TERNARY (vbslq_mf8, mf8q, u8q, mf8q, mf8q, UNSPEC_BSL, QUIET)
- #undef REQUIRED_EXTENSIONS
- 
- // combine
- #define REQUIRED_EXTENSIONS nonstreaming_only (0)
- ENTRY_BINARY (vcombine_mf8, mf8q, mf8, mf8, UNSPEC_COMBINE, QUIET)
- #undef REQUIRED_EXTENSIONS
- 
- // copy_lane
- #define REQUIRED_EXTENSIONS nonstreaming_only (AARCH64_FL_SIMD)
- ENTRY_BINARY_TWO_LANES (vcopy_lane_mf8, mf8, mf8, mf8,
- 			UNSPEC_VEC_COPY, QUIET)
- ENTRY_BINARY_TWO_LANES (vcopyq_lane_mf8, mf8q, mf8q, mf8,
- 			UNSPEC_VEC_COPY, QUIET)
- ENTRY_BINARY_TWO_LANES (vcopy_laneq_mf8, mf8, mf8, mf8q,
- 			UNSPEC_VEC_COPY, QUIET)
- ENTRY_BINARY_TWO_LANES (vcopyq_laneq_mf8, mf8q, mf8q, mf8q,
- 			UNSPEC_VEC_COPY, QUIET)
- #undef REQUIRED_EXTENSIONS
- 
- // create
- #define REQUIRED_EXTENSIONS nonstreaming_only (AARCH64_FL_SIMD)
- ENTRY_UNARY (vcreate_mf8, mf8, u64_scalar, UNSPEC_VCREATE, QUIET)
- #undef REQUIRED_EXTENSIONS
- 
- // dup
- #define REQUIRED_EXTENSIONS nonstreaming_only (AARCH64_FL_SIMD)
- ENTRY_UNARY (vdup_n_mf8, mf8, mf8_scalar, UNSPEC_DUP, QUIET)
- ENTRY_UNARY (vdupq_n_mf8, mf8q, mf8_scalar, UNSPEC_DUP, QUIET)
- 
- ENTRY_UNARY_LANE (vdup_lane_mf8, mf8, mf8, UNSPEC_DUP_LANE, QUIET)
- ENTRY_UNARY_LANE (vdupq_lane_mf8, mf8q, mf8, UNSPEC_DUP_LANE, QUIET)
- ENTRY_UNARY_LANE (vdup_laneq_mf8, mf8, mf8q, UNSPEC_DUP_LANE, QUIET)
- ENTRY_UNARY_LANE (vdupq_laneq_mf8, mf8q, mf8q, UNSPEC_DUP_LANE, QUIET)
- #undef REQUIRED_EXTENSIONS
- 
- // dupb_lane
- #define REQUIRED_EXTENSIONS nonstreaming_only (AARCH64_FL_SIMD)
- ENTRY_UNARY_LANE (vdupb_lane_mf8, mf8_scalar, mf8, UNSPEC_GET_LANE, QUIET)
- ENTRY_UNARY_LANE (vdupb_laneq_mf8, mf8_scalar, mf8q, UNSPEC_GET_LANE, QUIET)
- #undef REQUIRED_EXTENSIONS
- 
- // ext
- #define REQUIRED_EXTENSIONS nonstreaming_only (AARCH64_FL_SIMD)
- ENTRY_BINARY_LANE (vext_mf8, mf8, mf8, mf8, UNSPEC_EXT, QUIET)
- ENTRY_BINARY_LANE (vextq_mf8, mf8q, mf8q, mf8q, UNSPEC_EXT, QUIET)
- #undef REQUIRED_EXTENSIONS
- 
  // ld1
  #define REQUIRED_EXTENSIONS nonstreaming_only (AARCH64_FL_SIMD)
  ENTRY_LOAD (vld1_mf8, mf8, mf8_scalar_const_ptr, UNSPEC_LD1)
--- 196,201 ----
*************** ENTRY_TERNARY (vmmlaq_f16_mf8, f16q, f16
*** 306,335 ****
  ENTRY_TERNARY (vmmlaq_f32_mf8, f32q, f32q, mf8q, mf8q, UNSPEC_FMMLA, FP8)
  #undef REQUIRED_EXTENSIONS
  
- // mov
- #define REQUIRED_EXTENSIONS nonstreaming_only (AARCH64_FL_SIMD)
- ENTRY_UNARY (vmov_n_mf8, mf8, mf8_scalar, UNSPEC_DUP, QUIET)
- ENTRY_UNARY (vmovq_n_mf8, mf8q, mf8_scalar, UNSPEC_DUP, QUIET)
- #undef REQUIRED_EXTENSIONS
- 
- // rev
- #define REQUIRED_EXTENSIONS nonstreaming_only (AARCH64_FL_SIMD)
- ENTRY_UNARY (vrev64_mf8, mf8, mf8, UNSPEC_REV64, QUIET)
- ENTRY_UNARY (vrev64q_mf8, mf8q, mf8q, UNSPEC_REV64, QUIET)
- 
- ENTRY_UNARY (vrev32_mf8, mf8, mf8, UNSPEC_REV32, QUIET)
- ENTRY_UNARY (vrev32q_mf8, mf8q, mf8q, UNSPEC_REV32, QUIET)
- 
- ENTRY_UNARY (vrev16_mf8, mf8, mf8, UNSPEC_REV16, QUIET)
- ENTRY_UNARY (vrev16q_mf8, mf8q, mf8q, UNSPEC_REV16, QUIET)
- #undef REQUIRED_EXTENSIONS
- 
- // set_lane
- #define REQUIRED_EXTENSIONS nonstreaming_only (AARCH64_FL_SIMD)
- ENTRY_BINARY_LANE (vset_lane_mf8, mf8, mf8_scalar, mf8, UNSPEC_SET_LANE, QUIET)
- ENTRY_BINARY_LANE (vsetq_lane_mf8, mf8q, mf8_scalar, mf8q, UNSPEC_SET_LANE, QUIET)
- #undef REQUIRED_EXTENSIONS
- 
  // st1
  #define REQUIRED_EXTENSIONS nonstreaming_only (AARCH64_FL_SIMD)
  ENTRY_STORE (vst1_mf8, mf8_scalar_ptr, mf8, UNSPEC_ST1)
--- 255,260 ----
*************** ENTRY_TERNARY (vqtbx3q_mf8, mf8q, mf8q,
*** 396,428 ****
  ENTRY_TERNARY (vqtbx4_mf8, mf8, mf8, mf8qx4, u8, UNSPEC_TBX, QUIET)
  ENTRY_TERNARY (vqtbx4q_mf8, mf8q, mf8q, mf8qx4, u8q, UNSPEC_TBX, QUIET)
  #undef REQUIRED_EXTENSIONS
- 
- // trn<n>
- #define REQUIRED_EXTENSIONS nonstreaming_only (AARCH64_FL_SIMD)
- ENTRY_BINARY (vtrn1_mf8, mf8, mf8, mf8, UNSPEC_TRN1, QUIET)
- ENTRY_BINARY (vtrn1q_mf8, mf8q, mf8q, mf8q, UNSPEC_TRN1, QUIET)
- ENTRY_BINARY (vtrn2_mf8, mf8, mf8, mf8, UNSPEC_TRN2, QUIET)
- ENTRY_BINARY (vtrn2q_mf8, mf8q, mf8q, mf8q, UNSPEC_TRN2, QUIET)
- ENTRY_BINARY (vtrn_mf8, mf8x2, mf8, mf8, UNSPEC_TRN, QUIET)
- ENTRY_BINARY (vtrnq_mf8, mf8qx2, mf8q, mf8q, UNSPEC_TRN, QUIET)
- #undef REQUIRED_EXTENSIONS
- 
- // uzp<n>
- #define REQUIRED_EXTENSIONS nonstreaming_only (AARCH64_FL_SIMD)
- ENTRY_BINARY (vuzp1_mf8, mf8, mf8, mf8, UNSPEC_UZP1, QUIET)
- ENTRY_BINARY (vuzp1q_mf8, mf8q, mf8q, mf8q, UNSPEC_UZP1, QUIET)
- ENTRY_BINARY (vuzp2_mf8, mf8, mf8, mf8, UNSPEC_UZP2, QUIET)
- ENTRY_BINARY (vuzp2q_mf8, mf8q, mf8q, mf8q, UNSPEC_UZP2, QUIET)
- ENTRY_BINARY (vuzp_mf8, mf8x2, mf8, mf8, UNSPEC_UZP, QUIET)
- ENTRY_BINARY (vuzpq_mf8, mf8qx2, mf8q, mf8q, UNSPEC_UZP, QUIET)
- #undef REQUIRED_EXTENSIONS
- 
- // zip<n>
- #define REQUIRED_EXTENSIONS nonstreaming_only (AARCH64_FL_SIMD)
- ENTRY_BINARY (vzip1_mf8, mf8, mf8, mf8, UNSPEC_ZIP1, QUIET)
- ENTRY_BINARY (vzip1q_mf8, mf8q, mf8q, mf8q, UNSPEC_ZIP1, QUIET)
- ENTRY_BINARY (vzip2_mf8, mf8, mf8, mf8, UNSPEC_ZIP2, QUIET)
- ENTRY_BINARY (vzip2q_mf8, mf8q, mf8q, mf8q, UNSPEC_ZIP2, QUIET)
- ENTRY_BINARY (vzip_mf8, mf8x2, mf8, mf8, UNSPEC_ZIP, QUIET)
- ENTRY_BINARY (vzipq_mf8, mf8qx2, mf8q, mf8q, UNSPEC_ZIP, QUIET)
- #undef REQUIRED_EXTENSIONS
--- 321,323 ----
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-simd.md gcc-17-20260705/gcc/config/aarch64/aarch64-simd.md
*** gcc-17-20260628/gcc/config/aarch64/aarch64-simd.md	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/aarch64-simd.md	Sun Jul  5 22:32:07 2026
***************
*** 509,515 ****
    "TARGET_SIMD"
    "")
  
! (define_insn "aarch64_rbit<mode><vczle><vczbe>"
    [(set (match_operand:VB 0 "register_operand" "=w")
  	(bitreverse:VB (match_operand:VB 1 "register_operand" "w")))]
    "TARGET_SIMD"
--- 509,515 ----
    "TARGET_SIMD"
    "")
  
! (define_insn "@aarch64_rbit<mode><vczle><vczbe>"
    [(set (match_operand:VB 0 "register_operand" "=w")
  	(bitreverse:VB (match_operand:VB 1 "register_operand" "w")))]
    "TARGET_SIMD"
***************
*** 8002,8014 ****
  
  ;; cmtst
  
  ;; Although neg (ne (and x y) 0) is the natural way of expressing a cmtst,
! ;; we don't have any insns using ne, and aarch64_vcond outputs
! ;; not (neg (eq (and x y) 0))
! ;; which is rewritten by simplify_rtx as
! ;; plus (eq (and x y) 0) -1.
  
! (define_insn "aarch64_cmtst<mode><vczle><vczbe>"
    [(set (match_operand:<V_INT_EQUIV> 0 "register_operand" "=w")
  	(plus:<V_INT_EQUIV>
  	  (eq:<V_INT_EQUIV>
--- 8002,8024 ----
  
  ;; cmtst
  
+ (define_insn "aarch64_cmtst<mode><vczle><vczbe>"
+   [(set (match_operand:<V_INT_EQUIV> 0 "register_operand" "=w")
+ 	(neg:<V_INT_EQUIV>
+ 	  (ne:<V_INT_EQUIV>
+ 	    (and:VDQ_I
+ 	      (match_operand:VDQ_I 1 "register_operand" "w")
+ 	      (match_operand:VDQ_I 2 "register_operand" "w"))
+ 	    (match_operand:VDQ_I 3 "aarch64_simd_imm_zero"))))
+   ]
+   "TARGET_SIMD"
+   "cmtst\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>"
+   [(set_attr "type" "neon_tst<q>")]
+ )
  ;; Although neg (ne (and x y) 0) is the natural way of expressing a cmtst,
! ;; earlier versions of GCC simplified this as plus (eq (and x y) 0) -1.
  
! (define_insn "*aarch64_cmtst<mode><vczle><vczbe>"
    [(set (match_operand:<V_INT_EQUIV> 0 "register_operand" "=w")
  	(plus:<V_INT_EQUIV>
  	  (eq:<V_INT_EQUIV>
***************
*** 8024,8029 ****
--- 8034,8055 ----
  )
  
  ;; One can also get a cmtsts by having to combine a
+ ;; neg (ne x 0) in which case you rewrite it to
+ ;; a comparison against itself
+ 
+ (define_insn "*aarch64_cmtst_same_<mode><vczle><vczbe>"
+   [(set (match_operand:<V_INT_EQUIV> 0 "register_operand" "=w")
+ 	(neg:<V_INT_EQUIV>
+ 	  (ne:<V_INT_EQUIV>
+ 	    (match_operand:VDQ_I 1 "register_operand" "w")
+ 	    (match_operand:VDQ_I 2 "aarch64_simd_imm_zero"))))
+   ]
+   "TARGET_SIMD"
+   "cmtst\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>1<Vmtype>"
+   [(set_attr "type" "neon_tst<q>")]
+ )
+ 
+ ;; One can also get a cmtsts by having to combine a
  ;; not (neq (eq x 0)) in which case you rewrite it to
  ;; a comparison against itself
  
***************
*** 9819,9825 ****
  
  ;; sha3
  
! (define_insn "eor3q<mode>4"
    [(set (match_operand:VDQ_I 0 "register_operand" "=w")
  	(xor:VDQ_I
  	 (xor:VDQ_I
--- 9845,9851 ----
  
  ;; sha3
  
! (define_insn "@eor3q<mode>4"
    [(set (match_operand:VDQ_I 0 "register_operand" "=w")
  	(xor:VDQ_I
  	 (xor:VDQ_I
***************
*** 9843,9854 ****
    [(set_attr "type" "crypto_sha3")]
  )
  
  (define_insn "aarch64_rax1qv2di"
    [(set (match_operand:V2DI 0 "register_operand" "=w")
  	(xor:V2DI
  	 (rotate:V2DI
  	  (match_operand:V2DI 2 "register_operand" "w")
! 	  (const_int 1))
  	 (match_operand:V2DI 1 "register_operand" "w")))]
    "TARGET_SHA3"
    "rax1\\t%0.2d, %1.2d, %2.2d"
--- 9869,9881 ----
    [(set_attr "type" "crypto_sha3")]
  )
  
+ ;; matches 'Vd = Vn ^ rotl (Vm, splat (1))'
  (define_insn "aarch64_rax1qv2di"
    [(set (match_operand:V2DI 0 "register_operand" "=w")
  	(xor:V2DI
  	 (rotate:V2DI
  	  (match_operand:V2DI 2 "register_operand" "w")
! 	  (const_vector:V2DI [(const_int 1) (const_int 1)]))
  	 (match_operand:V2DI 1 "register_operand" "w")))]
    "TARGET_SHA3"
    "rax1\\t%0.2d, %1.2d, %2.2d"
***************
*** 9899,9905 ****
    }
  )
  
! (define_insn "bcaxq<mode>4"
    [(set (match_operand:VDQ_I 0 "register_operand" "=w")
  	(xor:VDQ_I
  	 (and:VDQ_I
--- 9926,9932 ----
    }
  )
  
! (define_insn "@bcaxq<mode>4"
    [(set (match_operand:VDQ_I 0 "register_operand" "=w")
  	(xor:VDQ_I
  	 (and:VDQ_I
***************
*** 10974,10977 ****
       [ w        , 0 , w , w ] <insn>\t%0.<Vtype>, %2.16b, %3.16b
    }
  )
- 
--- 11001,11003 ----
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-sve-builtins-base.cc gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-base.cc
*** gcc-17-20260628/gcc/config/aarch64/aarch64-sve-builtins-base.cc	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-base.cc	Sun Jul  5 22:32:07 2026
***************
*** 40,46 ****
  #include "tree-vector-builder.h"
  #include "rtx-vector-builder.h"
  #include "vec-perm-indices.h"
! #include "aarch64-sve-builtins.h"
  #include "aarch64-sve-builtins-shapes.h"
  #include "aarch64-sve-builtins-base.h"
  #include "aarch64-sve-builtins-functions.h"
--- 40,46 ----
  #include "tree-vector-builder.h"
  #include "rtx-vector-builder.h"
  #include "vec-perm-indices.h"
! #include "aarch64-acle-builtins.h"
  #include "aarch64-sve-builtins-shapes.h"
  #include "aarch64-sve-builtins-base.h"
  #include "aarch64-sve-builtins-functions.h"
***************
*** 49,55 ****
  #include "gimple-fold.h"
  #include "tree-ssa.h"
  
! using namespace aarch64_sve;
  
  namespace {
  
--- 49,55 ----
  #include "gimple-fold.h"
  #include "tree-ssa.h"
  
! using namespace aarch64_acle;
  
  namespace {
  
*************** public:
*** 779,785 ****
        {
  	machine_mode mode0 = e.result_mode ();
  	machine_mode mode1 = GET_MODE (e.args[0]);
! 	if (e.fpm_mode == aarch64_sve::FPM_set)
  	  icode = code_for_aarch64_sme2_fp8_cvt (mode1);
  	else
  	  {
--- 779,785 ----
        {
  	machine_mode mode0 = e.result_mode ();
  	machine_mode mode1 = GET_MODE (e.args[0]);
! 	if (e.fpm_mode == aarch64_acle::FPM_set)
  	  icode = code_for_aarch64_sme2_fp8_cvt (mode1);
  	else
  	  {
*************** public:
*** 945,951 ****
    expand (function_expander &e) const override
    {
      insn_code icode;
!     if (e.fpm_mode == aarch64_sve::FPM_set)
        icode = code_for_aarch64_sve_dot (e.result_mode ());
      else
        {
--- 945,951 ----
    expand (function_expander &e) const override
    {
      insn_code icode;
!     if (e.fpm_mode == aarch64_acle::FPM_set)
        icode = code_for_aarch64_sve_dot (e.result_mode ());
      else
        {
*************** public:
*** 979,985 ****
      insn_code icode;
      machine_mode mode0 = GET_MODE (e.args[0]);
      machine_mode mode1 = GET_MODE (e.args[1]);
!     if (e.fpm_mode == aarch64_sve::FPM_set)
        {
  	icode = code_for_aarch64_sve_dot_lane (mode0);
        }
--- 979,985 ----
      insn_code icode;
      machine_mode mode0 = GET_MODE (e.args[0]);
      machine_mode mode1 = GET_MODE (e.args[1]);
!     if (e.fpm_mode == aarch64_acle::FPM_set)
        {
  	icode = code_for_aarch64_sve_dot_lane (mode0);
        }
*************** public:
*** 1311,1316 ****
--- 1311,1335 ----
    CONSTEXPR svext_bhw_impl (scalar_int_mode from_mode)
      : m_from_mode (from_mode) {}
  
+   gimple *
+   fold (gimple_folder &f) const override
+   {
+     /* For unsigned types this is a zero-extend, i.e. a bitwise AND with a
+        constant mask.  The _x form and an all-true _z already lower to that
+        AND; fold the merging form with an all-true predicate to it too, since
+        the predicate makes the inactive operand dead.  */
+     if (f.pred != PRED_m
+ 	|| !f.type_suffix (0).unsigned_p
+ 	|| !is_ptrue (f.gp_value (f.call), f.type_suffix (0).element_bytes))
+       return NULL;
+ 
+     tree op = gimple_call_arg (f.call, 2);
+     tree mask = build_int_cstu (TREE_TYPE (TREE_TYPE (f.lhs)),
+ 				GET_MODE_MASK (m_from_mode));
+     tree mask_vec = build_vector_from_val (TREE_TYPE (f.lhs), mask);
+     return gimple_build_assign (f.lhs, BIT_AND_EXPR, op, mask_vec);
+   }
+ 
    rtx
    expand (function_expander &e) const override
    {
*************** public:
*** 2339,2345 ****
         Unpredicated functions have only 2 arguments (rn, rm) so will cause the
         code below to crash.  Also skip if it does not operate on integers,
         since all the optimizations below are for integer multiplication.  */
!     if (!f.type_suffix (0).integer_p || f.pred == aarch64_sve::PRED_none)
        return nullptr;
  
      if (auto *res = f.fold_const_binary (MULT_EXPR))
--- 2358,2364 ----
         Unpredicated functions have only 2 arguments (rn, rm) so will cause the
         code below to crash.  Also skip if it does not operate on integers,
         since all the optimizations below are for integer multiplication.  */
!     if (!f.type_suffix (0).integer_p || f.pred == aarch64_acle::PRED_none)
        return nullptr;
  
      if (auto *res = f.fold_const_binary (MULT_EXPR))
*************** public:
*** 3517,3523 ****
  
  } /* end anonymous namespace */
  
! namespace aarch64_sve {
  
  FUNCTION (svabd, svabd_impl,)
  FUNCTION (svabs, quiet<rtx_code_function>, (ABS, ABS, UNSPEC_COND_FABS))
--- 3536,3542 ----
  
  } /* end anonymous namespace */
  
! namespace aarch64_acle {
  
  FUNCTION (svabd, svabd_impl,)
  FUNCTION (svabs, quiet<rtx_code_function>, (ABS, ABS, UNSPEC_COND_FABS))
*************** NEON_SVE_BRIDGE_FUNCTION (svget_neonq, s
*** 3820,3823 ****
  NEON_SVE_BRIDGE_FUNCTION (svset_neonq, svset_neonq_impl,)
  NEON_SVE_BRIDGE_FUNCTION (svdup_neonq, svdup_neonq_impl,)
  
! } /* end namespace aarch64_sve */
--- 3839,3842 ----
  NEON_SVE_BRIDGE_FUNCTION (svset_neonq, svset_neonq_impl,)
  NEON_SVE_BRIDGE_FUNCTION (svdup_neonq, svdup_neonq_impl,)
  
! }
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-sve-builtins-base.h gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-base.h
*** gcc-17-20260628/gcc/config/aarch64/aarch64-sve-builtins-base.h	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-base.h	Sun Jul  5 22:32:07 2026
***************
*** 20,26 ****
  #ifndef GCC_AARCH64_SVE_BUILTINS_BASE_H
  #define GCC_AARCH64_SVE_BUILTINS_BASE_H
  
! namespace aarch64_sve
  {
    namespace functions
    {
--- 20,26 ----
  #ifndef GCC_AARCH64_SVE_BUILTINS_BASE_H
  #define GCC_AARCH64_SVE_BUILTINS_BASE_H
  
! namespace aarch64_acle
  {
    namespace functions
    {
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-sve-builtins-functions.h gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-functions.h
*** gcc-17-20260628/gcc/config/aarch64/aarch64-sve-builtins-functions.h	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-functions.h	Sun Jul  5 22:32:07 2026
***************
*** 20,26 ****
  #ifndef GCC_AARCH64_SVE_BUILTINS_FUNCTIONS_H
  #define GCC_AARCH64_SVE_BUILTINS_FUNCTIONS_H
  
! namespace aarch64_sve {
  
  /* Wrap T, which is derived from function_base, and indicate that the
     function never has side effects.  It is only necessary to use this
--- 20,26 ----
  #ifndef GCC_AARCH64_SVE_BUILTINS_FUNCTIONS_H
  #define GCC_AARCH64_SVE_BUILTINS_FUNCTIONS_H
  
! namespace aarch64_acle {
  
  /* Wrap T, which is derived from function_base, and indicate that the
     function never has side effects.  It is only necessary to use this
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc
*** gcc-17-20260628/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc	Sun Jul  5 22:32:07 2026
***************
*** 31,37 ****
  #include "memmodel.h"
  #include "insn-codes.h"
  #include "optabs.h"
! #include "aarch64-sve-builtins.h"
  #include "aarch64-sve-builtins-shapes.h"
  #include "aarch64-builtins.h"
  
--- 31,37 ----
  #include "memmodel.h"
  #include "insn-codes.h"
  #include "optabs.h"
! #include "aarch64-acle-builtins.h"
  #include "aarch64-sve-builtins-shapes.h"
  #include "aarch64-builtins.h"
  
***************
*** 48,54 ****
     but this does not affect the prototype, which is always
     "svbool_t(svbool_t, svbool_t)".  */
  
! namespace aarch64_sve {
  
  /* Return a representation of "const T *".  */
  static tree
--- 48,54 ----
     but this does not affect the prototype, which is always
     "svbool_t(svbool_t, svbool_t)".  */
  
! namespace aarch64_acle {
  
  /* Return a representation of "const T *".  */
  static tree
*************** parse_element_type (const function_insta
*** 205,210 ****
--- 205,212 ----
     v<elt>  - a vector with the given element suffix
     D<elt>  - a 64 bit neon vector
     Q<elt>  - a 128 bit neon vector
+    D<elt>x<n>  - an n-tuple of 64 bit neon vectors
+    Q<elt>x<n>  - an n-tuple of 128 bit neon vectors
  
     where <elt> has the format described above parse_element_type
  
*************** parse_type (const function_instance &ins
*** 277,282 ****
--- 279,296 ----
    if (ch == 's')
      {
        type_suffix_index suffix = parse_element_type (instance, format);
+ 
+       // HACK: remove once all NEON intrinsics have been ported to the
+       // pragma-based framework.
+       if (suffix == TYPE_SUFFIX_p8)
+ 	return aarch64_simd_types_trees[Poly8_t].eltype;
+       if (suffix == TYPE_SUFFIX_p16)
+ 	return aarch64_simd_types_trees[Poly16_t].eltype;
+       if (suffix == TYPE_SUFFIX_p64)
+ 	return aarch64_simd_types_trees[Poly64_t].eltype;
+       if (suffix == TYPE_SUFFIX_p128)
+ 	return aarch64_simd_types_trees[Poly128_t].eltype;
+ 
        return scalar_types[type_suffixes[suffix].vector_type];
      }
  
*************** parse_type (const function_instance &ins
*** 309,326 ****
        return acle_vector_types[0][type_suffixes[suffix].vector_type];
      }
  
!   if (ch == 'D')
!     {
!       type_suffix_index suffix = parse_element_type (instance, format);
!       int neon_index = type_suffixes[suffix].neon64_type;
!       return aarch64_simd_types_trees[neon_index].itype;
!     }
! 
!   if (ch == 'Q')
      {
        type_suffix_index suffix = parse_element_type (instance, format);
!       int neon_index = type_suffixes[suffix].neon128_type;
!       return aarch64_simd_types_trees[neon_index].itype;
      }
  
    gcc_unreachable ();
--- 323,345 ----
        return acle_vector_types[0][type_suffixes[suffix].vector_type];
      }
  
!   if (ch == 'D' || ch == 'Q')
      {
        type_suffix_index suffix = parse_element_type (instance, format);
!       aarch64_simd_type neon_index = ch == 'D'
! 				       ? type_suffixes[suffix].neon64_type
! 				       : type_suffixes[suffix].neon128_type;
!       unsigned int num_vectors = 1;
!       if (format[0] == 'x')
! 	{
! 	  int ch = format[1];
! 	  format += 2;
! 	  gcc_assert (IN_RANGE (ch, '1', '4'));
! 	  num_vectors = ch - '0';
! 	}
!       return num_vectors == 1
! 	       ? aarch64_simd_types_trees[neon_index].itype
! 	       : aarch64_simd_tuple_types[neon_index][num_vectors - 2];
      }
  
    gcc_unreachable ();
*************** build_vs_offset (function_builder &b, co
*** 530,539 ****
     predicate.  FORCE_DIRECT_OVERLOADS is true if there is a one-to-one
     mapping between "short" and "full" names, and if standard overload
     resolution therefore isn't necessary.  */
! static void
  build_all (function_builder &b, const char *signature,
  	   const function_group_info &group, mode_suffix_index mode_suffix_id,
! 	   bool force_direct_overloads = false)
  {
    for (unsigned int pi = 0; group.preds[pi] != NUM_PREDS; ++pi)
      for (unsigned int gi = 0; group.groups[gi] != NUM_GROUP_SUFFIXES; ++gi)
--- 549,558 ----
     predicate.  FORCE_DIRECT_OVERLOADS is true if there is a one-to-one
     mapping between "short" and "full" names, and if standard overload
     resolution therefore isn't necessary.  */
! void
  build_all (function_builder &b, const char *signature,
  	   const function_group_info &group, mode_suffix_index mode_suffix_id,
! 	   bool force_direct_overloads)
  {
    for (unsigned int pi = 0; group.preds[pi] != NUM_PREDS; ++pi)
      for (unsigned int gi = 0; group.groups[gi] != NUM_GROUP_SUFFIXES; ++gi)
*************** long_type_suffix (function_resolver &r,
*** 560,568 ****
  
  /* Declare the function shape NAME, pointing it to an instance
     of class <NAME>_def.  */
! #define SHAPE(NAME) \
!   static CONSTEXPR const NAME##_def NAME##_obj; \
!   namespace shapes { const function_shape *const NAME = &NAME##_obj; }
  
  /* Base class for functions that are not overloaded.  */
  struct nonoverloaded_base : public function_shape
--- 579,588 ----
  
  /* Declare the function shape NAME, pointing it to an instance
     of class <NAME>_def.  */
! #define SHAPE(NAME)							\
!   static CONSTEXPR const NAME##_def NAME##_obj;				\
!   namespace shapes { const function_shape *const NAME = &NAME##_obj; }	\
!   extern int __require_trailing_semicolon ATTRIBUTE_UNUSED
  
  /* Base class for functions that are not overloaded.  */
  struct nonoverloaded_base : public function_shape
*************** struct luti_base : public overloaded_bas
*** 985,994 ****
  
  /* Specializations for 2-bit and 4-bit indices.  */
  using luti2_def = luti_base<2>;
! SHAPE (luti2)
  
  using luti4_def = luti_base<4>;
! SHAPE (luti4)
  
  
  /* sv<t0>x<g>_t svfoo_t0_g(uint64_t, svuint8_t, uint64_t)
--- 1005,1014 ----
  
  /* Specializations for 2-bit and 4-bit indices.  */
  using luti2_def = luti_base<2>;
! SHAPE (luti2);
  
  using luti4_def = luti_base<4>;
! SHAPE (luti4);
  
  
  /* sv<t0>x<g>_t svfoo_t0_g(uint64_t, svuint8_t, uint64_t)
*************** struct mmla_def : public overloaded_base
*** 1098,1104 ****
      return res;
    }
  };
! SHAPE (mmla)
  
  /* Base class for prefetch_gather_index and prefetch_gather_offset,
     which differ only in the units of the displacement.  */
--- 1118,1124 ----
      return res;
    }
  };
! SHAPE (mmla);
  
  /* Base class for prefetch_gather_index and prefetch_gather_offset,
     which differ only in the units of the displacement.  */
*************** struct adr_index_def : public adr_base
*** 1398,1404 ****
      build_all (b, "b,b,d", group, MODE_u64base_u64index);
    }
  };
! SHAPE (adr_index)
  
  /* sv<m0>_t svfoo[_m0base]_[m1]offset(sv<m0>_t, sv<m1>_t).
  
--- 1418,1424 ----
      build_all (b, "b,b,d", group, MODE_u64base_u64index);
    }
  };
! SHAPE (adr_index);
  
  /* sv<m0>_t svfoo[_m0base]_[m1]offset(sv<m0>_t, sv<m1>_t).
  
*************** struct adr_offset_def : public adr_base
*** 1416,1422 ****
      build_all (b, "b,b,d", group, MODE_u64base_u64offset);
    }
  };
! SHAPE (adr_offset)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0>_t)
  
--- 1436,1442 ----
      build_all (b, "b,b,d", group, MODE_u64base_u64offset);
    }
  };
! SHAPE (adr_offset);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0>_t)
  
*************** struct binary_def : public overloaded_ba
*** 1436,1442 ****
      return r.resolve_uniform (2);
    }
  };
! SHAPE (binary)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0:int>_t)
     sv<t0>_t svfoo[_n_t0](sv<t0>_t, <t0:int>_t).
--- 1456,1462 ----
      return r.resolve_uniform (2);
    }
  };
! SHAPE (binary);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0:int>_t)
     sv<t0>_t svfoo[_n_t0](sv<t0>_t, <t0:int>_t).
*************** struct binary_int_opt_n_def : public ove
*** 1465,1471 ****
      return r.finish_opt_n_resolution (i + 1, i, type, TYPE_signed);
    }
  };
! SHAPE (binary_int_opt_n)
  
  /* Like binary_int_opt_n for single vectors.  For tuples:
  
--- 1485,1491 ----
      return r.finish_opt_n_resolution (i + 1, i, type, TYPE_signed);
    }
  };
! SHAPE (binary_int_opt_n);
  
  /* Like binary_int_opt_n for single vectors.  For tuples:
  
*************** struct binary_int_opt_single_n_def : pub
*** 1500,1506 ****
  	    : r.finish_opt_single_resolution (i + 1, i, type, TYPE_signed));
    }
  };
! SHAPE (binary_int_opt_single_n)
  
  /* sv<t0>_t svfoo_<t0>(sv<t0>_t, sv<t0>_t, uint64_t)
  
--- 1520,1526 ----
  	    : r.finish_opt_single_resolution (i + 1, i, type, TYPE_signed));
    }
  };
! SHAPE (binary_int_opt_single_n);
  
  /* sv<t0>_t svfoo_<t0>(sv<t0>_t, sv<t0>_t, uint64_t)
  
*************** struct binary_lane_def : public overload
*** 1527,1533 ****
      return c.require_immediate_lane_index (2, 1);
    }
  };
! SHAPE (binary_lane)
  
  /* sv<t0>_t svfoo[_t0](sv<t0:half>_t, sv<t0:half>_t, uint64_t).
  
--- 1547,1553 ----
      return c.require_immediate_lane_index (2, 1);
    }
  };
! SHAPE (binary_lane);
  
  /* sv<t0>_t svfoo[_t0](sv<t0:half>_t, sv<t0:half>_t, uint64_t).
  
*************** struct binary_long_lane_def : public ove
*** 1566,1572 ****
      return c.require_immediate_lane_index (2, 1);
    }
  };
! SHAPE (binary_long_lane)
  
  /* sv<t0>_t svfoo[_t0](sv<t0:half>_t, sv<t0:half>_t)
     sv<t0>_t svfoo[_n_t0](sv<t0:half>_t, <t0:half>_t).  */
--- 1586,1592 ----
      return c.require_immediate_lane_index (2, 1);
    }
  };
! SHAPE (binary_long_lane);
  
  /* sv<t0>_t svfoo[_t0](sv<t0:half>_t, sv<t0:half>_t)
     sv<t0>_t svfoo[_n_t0](sv<t0:half>_t, <t0:half>_t).  */
*************** struct binary_long_opt_n_def : public ov
*** 1594,1600 ****
  				      r.SAME_SIZE, result_type);
    }
  };
! SHAPE (binary_long_opt_n)
  
  /* sv<t0>_t svfoo[_n_t0](sv<t0>_t, <t0>_t).
  
--- 1614,1620 ----
  				      r.SAME_SIZE, result_type);
    }
  };
! SHAPE (binary_long_opt_n);
  
  /* sv<t0>_t svfoo[_n_t0](sv<t0>_t, <t0>_t).
  
*************** struct binary_n_def : public overloaded_
*** 1622,1628 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binary_n)
  
  /* sv<t0:half>_t svfoo[_t0](sv<t0>_t, sv<t0>_t)
     sv<t0:half>_t svfoo[_n_t0](sv<t0>_t, <t0>_t)
--- 1642,1648 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binary_n);
  
  /* sv<t0:half>_t svfoo[_t0](sv<t0>_t, sv<t0>_t)
     sv<t0:half>_t svfoo[_n_t0](sv<t0>_t, <t0>_t)
*************** struct binary_narrowb_opt_n_def : public
*** 1645,1651 ****
      return r.resolve_uniform_opt_n (2);
    }
  };
! SHAPE (binary_narrowb_opt_n)
  
  /* sv<t0:half>_t svfoo[_t0](sv<t0:half>_t, sv<t0>_t, sv<t0>_t)
     sv<t0:half>_t svfoo[_n_t0](sv<t0:half>_t, sv<t0>_t, <t0>_t)
--- 1665,1671 ----
      return r.resolve_uniform_opt_n (2);
    }
  };
! SHAPE (binary_narrowb_opt_n);
  
  /* sv<t0:half>_t svfoo[_t0](sv<t0:half>_t, sv<t0>_t, sv<t0>_t)
     sv<t0:half>_t svfoo[_n_t0](sv<t0:half>_t, sv<t0>_t, <t0>_t)
*************** struct binary_narrowt_opt_n_def : public
*** 1675,1681 ****
      return r.finish_opt_n_resolution (i + 2, i + 1, type);
    }
  };
! SHAPE (binary_narrowt_opt_n)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0>_t)
     sv<t0>_t svfoo[_n_t0](sv<t0>_t, <t0>_t)
--- 1695,1701 ----
      return r.finish_opt_n_resolution (i + 2, i + 1, type);
    }
  };
! SHAPE (binary_narrowt_opt_n);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0>_t)
     sv<t0>_t svfoo[_n_t0](sv<t0>_t, <t0>_t)
*************** struct binary_opt_n_def : public overloa
*** 1704,1710 ****
      return r.resolve_uniform_opt_n (2);
    }
  };
! SHAPE (binary_opt_n)
  
  /* Like binary_opt_n for single vectors.  For tuples:
  
--- 1724,1730 ----
      return r.resolve_uniform_opt_n (2);
    }
  };
! SHAPE (binary_opt_n);
  
  /* Like binary_opt_n for single vectors.  For tuples:
  
*************** struct binary_opt_single_n_def : public
*** 1739,1745 ****
  	    : r.finish_opt_single_resolution (i + 1, i, type));
    }
  };
! SHAPE (binary_opt_single_n)
  
  /* svbool_t svfoo(svbool_t, svbool_t).  */
  struct binary_pred_def : public nonoverloaded_base
--- 1759,1765 ----
  	    : r.finish_opt_single_resolution (i + 1, i, type));
    }
  };
! SHAPE (binary_opt_single_n);
  
  /* svbool_t svfoo(svbool_t, svbool_t).  */
  struct binary_pred_def : public nonoverloaded_base
*************** struct binary_pred_def : public nonoverl
*** 1750,1756 ****
      build_all (b, "v0,v0,v0", group, MODE_none);
    }
  };
! SHAPE (binary_pred)
  
  /* sv<t0>_t svfoo[_<t0>](sv<t0>_t, sv<t0>_t, uint64_t)
  
--- 1770,1776 ----
      build_all (b, "v0,v0,v0", group, MODE_none);
    }
  };
! SHAPE (binary_pred);
  
  /* sv<t0>_t svfoo[_<t0>](sv<t0>_t, sv<t0>_t, uint64_t)
  
*************** struct binary_rotate_def : public overlo
*** 1776,1782 ****
      return c.require_immediate_either_or (2, 90, 270);
    }
  };
! SHAPE (binary_rotate)
  
  /* sv<t0>_t svfoo_t0(<t0>_t, <t0>_t)
  
--- 1796,1802 ----
      return c.require_immediate_either_or (2, 90, 270);
    }
  };
! SHAPE (binary_rotate);
  
  /* sv<t0>_t svfoo_t0(<t0>_t, <t0>_t)
  
*************** struct binary_scalar_def : public nonove
*** 1790,1796 ****
      build_all (b, "v0,s0,s0", group, MODE_none);
    }
  };
! SHAPE (binary_scalar)
  
  /* sv<t0>x<g>_t svfoo[_single_t0_g](sv<t0>x<g>_t, sv<t0>_t).  */
  struct binary_single_def : public overloaded_base<0>
--- 1810,1816 ----
      build_all (b, "v0,s0,s0", group, MODE_none);
    }
  };
! SHAPE (binary_scalar);
  
  /* sv<t0>x<g>_t svfoo[_single_t0_g](sv<t0>x<g>_t, sv<t0>_t).  */
  struct binary_single_def : public overloaded_base<0>
*************** struct binary_single_def : public overlo
*** 1817,1823 ****
      return r.resolve_to (MODE_single, type);
    }
  };
! SHAPE (binary_single)
  
  /* sv<t0:uint>_t svfoo[_t0](sv<t0>_t, sv<t0>_t).
  
--- 1837,1843 ----
      return r.resolve_to (MODE_single, type);
    }
  };
! SHAPE (binary_single);
  
  /* sv<t0:uint>_t svfoo[_t0](sv<t0>_t, sv<t0>_t).
  
*************** struct binary_to_uint_def : public overl
*** 1837,1843 ****
      return r.resolve_uniform (2);
    }
  };
! SHAPE (binary_to_uint)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0:uint>_t)
  
--- 1857,1863 ----
      return r.resolve_uniform (2);
    }
  };
! SHAPE (binary_to_uint);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0:uint>_t)
  
*************** struct binary_uint_def : public overload
*** 1865,1871 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binary_uint)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, <t0:uint>_t)
  
--- 1885,1891 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binary_uint);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, <t0:uint>_t)
  
*************** struct binary_uint_n_def : public overlo
*** 1893,1899 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binary_uint_n)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0:uint>_t)
     sv<t0>_t svfoo[_n_t0](sv<t0>_t, <t0:uint>_t)
--- 1913,1919 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binary_uint_n);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0:uint>_t)
     sv<t0>_t svfoo[_n_t0](sv<t0>_t, <t0:uint>_t)
*************** struct binary_uint_opt_n_def : public ov
*** 1922,1928 ****
      return r.finish_opt_n_resolution (i + 1, i, type, TYPE_unsigned);
    }
  };
! SHAPE (binary_uint_opt_n)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, uint64_t).
  
--- 1942,1948 ----
      return r.finish_opt_n_resolution (i + 1, i, type, TYPE_unsigned);
    }
  };
! SHAPE (binary_uint_opt_n);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, uint64_t).
  
*************** struct binary_uint64_n_def : public over
*** 1950,1956 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binary_uint64_n)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, svuint64_t)
     sv<t0>_t svfoo[_n_t0](sv<t0>_t, uint64_t)
--- 1970,1976 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binary_uint64_n);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, svuint64_t)
     sv<t0>_t svfoo[_n_t0](sv<t0>_t, uint64_t)
*************** struct binary_uint64_opt_n_def : public
*** 1979,1985 ****
      return r.finish_opt_n_resolution (i + 1, i, type, TYPE_unsigned, 64);
    }
  };
! SHAPE (binary_uint64_opt_n)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0:half>_t).  */
  struct binary_wide_def : public overloaded_base<0>
--- 1999,2005 ----
      return r.finish_opt_n_resolution (i + 1, i, type, TYPE_unsigned, 64);
    }
  };
! SHAPE (binary_uint64_opt_n);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0:half>_t).  */
  struct binary_wide_def : public overloaded_base<0>
*************** struct binary_wide_def : public overload
*** 2005,2011 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binary_wide)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0:half>_t)
     sv<t0>_t svfoo[_n_t0](sv<t0>_t, <t0:half>_t).  */
--- 2025,2031 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binary_wide);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0:half>_t)
     sv<t0>_t svfoo[_n_t0](sv<t0>_t, <t0:half>_t).  */
*************** struct binary_wide_opt_n_def : public ov
*** 2032,2038 ****
  				      r.HALF_SIZE);
    }
  };
! SHAPE (binary_wide_opt_n)
  
  /* void svfoo_t0[_t1]_g(uint64_t, svbool_t, svbool_t, sv<t1>x<g>_t,
  			sv<t1:int>x<g>_t)
--- 2052,2058 ----
  				      r.HALF_SIZE);
    }
  };
! SHAPE (binary_wide_opt_n);
  
  /* void svfoo_t0[_t1]_g(uint64_t, svbool_t, svbool_t, sv<t1>x<g>_t,
  			sv<t1:int>x<g>_t)
*************** struct binary_za_int_m_def : public bina
*** 2047,2053 ****
      build_all (b, "_,su64,vp,vp,t1,ts1", group, MODE_none);
    }
  };
! SHAPE (binary_za_int_m)
  
  /* void svfoo_t0[_t1]_g(uint64_t, svbool_t, svbool_t, sv<t1>x<g>_t,
  			sv<t1>x<g>_t)
--- 2067,2073 ----
      build_all (b, "_,su64,vp,vp,t1,ts1", group, MODE_none);
    }
  };
! SHAPE (binary_za_int_m);
  
  /* void svfoo_t0[_t1]_g(uint64_t, svbool_t, svbool_t, sv<t1>x<g>_t,
  			sv<t1>x<g>_t)
*************** struct binary_za_m_def : public binary_z
*** 2068,2074 ****
        build_all (b, "_,su64,vp,vp,t1,t1", group, MODE_none);
    }
  };
! SHAPE (binary_za_m)
  
  /* void svfoo_lane_t0[_t1]_g(uint32_t, sv<t1>x<g>_t, sv<t1>_t, uint64_t)
  
--- 2088,2094 ----
        build_all (b, "_,su64,vp,vp,t1,t1", group, MODE_none);
    }
  };
! SHAPE (binary_za_m);
  
  /* void svfoo_lane_t0[_t1]_g(uint32_t, sv<t1>x<g>_t, sv<t1>_t, uint64_t)
  
*************** struct binary_za_slice_lane_def : public
*** 2078,2084 ****
  {
    constexpr binary_za_slice_lane_def () : binary_za_slice_lane_base<> (1) {}
  };
! SHAPE (binary_za_slice_lane)
  
  /* void svfoo_t0[_t1]_g(uint32_t, sv<t1>x<g>_t, sv<t1:int>x<g>_t)
     void svfoo[_single]_t0[_t1]_g(uint32_t, sv<t1>x<g>_t, sv<t1:int>_t).
--- 2098,2104 ----
  {
    constexpr binary_za_slice_lane_def () : binary_za_slice_lane_base<> (1) {}
  };
! SHAPE (binary_za_slice_lane);
  
  /* void svfoo_t0[_t1]_g(uint32_t, sv<t1>x<g>_t, sv<t1:int>x<g>_t)
     void svfoo[_single]_t0[_t1]_g(uint32_t, sv<t1>x<g>_t, sv<t1:int>_t).
*************** struct binary_za_slice_int_opt_single_de
*** 2095,2101 ****
      build_all (b, "_,su32,t1,vs1", group, MODE_single);
    }
  };
! SHAPE (binary_za_slice_int_opt_single)
  
  /* void svfoo_t0[_t1]_g(uint32_t, sv<t1>x<g>_t, sv<t1>x<g>_t)
     void svfoo[_single]_t0[_t1]_g(uint32_t, sv<t1>x<g>_t, sv<t1>_t)
--- 2115,2121 ----
      build_all (b, "_,su32,t1,vs1", group, MODE_single);
    }
  };
! SHAPE (binary_za_slice_int_opt_single);
  
  /* void svfoo_t0[_t1]_g(uint32_t, sv<t1>x<g>_t, sv<t1>x<g>_t)
     void svfoo[_single]_t0[_t1]_g(uint32_t, sv<t1>x<g>_t, sv<t1>_t)
*************** struct binary_za_slice_opt_single_def
*** 2112,2118 ****
      build_all (b, "_,su32,t1,v1", group, MODE_single);
    }
  };
! SHAPE (binary_za_slice_opt_single)
  
  /* void svfoo_t0[_t1]_g(uint32_t, sv<t1>x<g>_t, sv<t1:uint>x<g>_t)
     void svfoo[_single]_t0[_t1]_g(uint32_t, sv<t1>x<g>_t, sv<t1:uint>_t)
--- 2132,2138 ----
      build_all (b, "_,su32,t1,v1", group, MODE_single);
    }
  };
! SHAPE (binary_za_slice_opt_single);
  
  /* void svfoo_t0[_t1]_g(uint32_t, sv<t1>x<g>_t, sv<t1:uint>x<g>_t)
     void svfoo[_single]_t0[_t1]_g(uint32_t, sv<t1>x<g>_t, sv<t1:uint>_t)
*************** struct binary_za_slice_uint_opt_single_d
*** 2129,2135 ****
      build_all (b, "_,su32,t1,vu1", group, MODE_single);
    }
  };
! SHAPE (binary_za_slice_uint_opt_single)
  
  /* void svfoo_t0[_t1]_g(uint64_t, svbool_t, svbool_t, sv<t1>x<g>_t,
  			sv<t1:uint>x<g>_t)
--- 2149,2155 ----
      build_all (b, "_,su32,t1,vu1", group, MODE_single);
    }
  };
! SHAPE (binary_za_slice_uint_opt_single);
  
  /* void svfoo_t0[_t1]_g(uint64_t, svbool_t, svbool_t, sv<t1>x<g>_t,
  			sv<t1:uint>x<g>_t)
*************** struct binary_za_uint_m_def : public bin
*** 2144,2150 ****
      build_all (b, "_,su64,vp,vp,t1,tu1", group, MODE_none);
    }
  };
! SHAPE (binary_za_uint_m)
  
  /* sv<t0>x<g>_t svfoo[_t0_t1_g](sv<t0>x<g>_t, sv<t0>x<g>_t).  */
  struct binaryxn_def : public overloaded_base<0>
--- 2164,2170 ----
      build_all (b, "_,su64,vp,vp,t1,tu1", group, MODE_none);
    }
  };
! SHAPE (binary_za_uint_m);
  
  /* sv<t0>x<g>_t svfoo[_t0_t1_g](sv<t0>x<g>_t, sv<t0>x<g>_t).  */
  struct binaryxn_def : public overloaded_base<0>
*************** struct binaryxn_def : public overloaded_
*** 2173,2179 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binaryxn)
  
  /* bool svfoo().  */
  struct bool_inherent_def : public nonoverloaded_base
--- 2193,2199 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binaryxn);
  
  /* bool svfoo().  */
  struct bool_inherent_def : public nonoverloaded_base
*************** struct bool_inherent_def : public nonove
*** 2184,2190 ****
      build_all (b, "sp", group, MODE_none);
    }
  };
! SHAPE (bool_inherent)
  
  /* Either:
  
--- 2204,2210 ----
      build_all (b, "sp", group, MODE_none);
    }
  };
! SHAPE (bool_inherent);
  
  /* Either:
  
*************** struct clamp_def : public overloaded_bas
*** 2223,2229 ****
      return r.resolve_to (mode, type);
    }
  };
! SHAPE (clamp)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0>_t)
     <t0>_t svfoo[_n_t0](<t0>_t, sv<t0>_t).  */
--- 2243,2249 ----
      return r.resolve_to (mode, type);
    }
  };
! SHAPE (clamp);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0>_t)
     <t0>_t svfoo[_n_t0](<t0>_t, sv<t0>_t).  */
*************** struct clast_def : public overloaded_bas
*** 2263,2269 ****
        }
    }
  };
! SHAPE (clast)
  
  /* svbool_t svfoo[_t0](sv<t0>_t, sv<t0>_t).  */
  struct compare_def : public overloaded_base<0>
--- 2283,2289 ----
        }
    }
  };
! SHAPE (clast);
  
  /* svbool_t svfoo[_t0](sv<t0>_t, sv<t0>_t).  */
  struct compare_def : public overloaded_base<0>
*************** struct compare_def : public overloaded_b
*** 2281,2287 ****
      return r.resolve_uniform (2);
    }
  };
! SHAPE (compare)
  
  /* svbool_t svfoo[_t0](sv<t0>_t, sv<t0>_t)
     svbool_t svfoo[_n_t0](sv<t0>_t, <t0>_t)
--- 2301,2307 ----
      return r.resolve_uniform (2);
    }
  };
! SHAPE (compare);
  
  /* svbool_t svfoo[_t0](sv<t0>_t, sv<t0>_t)
     svbool_t svfoo[_n_t0](sv<t0>_t, <t0>_t)
*************** struct compare_opt_n_def : public overlo
*** 2303,2309 ****
      return r.resolve_uniform_opt_n (2);
    }
  };
! SHAPE (compare_opt_n)
  
  /* svbool_t svfoo[_t0](const <t0>_t *, const <t0>_t *).  */
  struct compare_ptr_def : public overloaded_base<0>
--- 2323,2329 ----
      return r.resolve_uniform_opt_n (2);
    }
  };
! SHAPE (compare_opt_n);
  
  /* svbool_t svfoo[_t0](const <t0>_t *, const <t0>_t *).  */
  struct compare_ptr_def : public overloaded_base<0>
*************** struct compare_ptr_def : public overload
*** 2328,2334 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (compare_ptr)
  
  /* svboolx<g>_t svfoo_t0[_t1]_g(<t1>_t, <t1>_t)
  
--- 2348,2354 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (compare_ptr);
  
  /* svboolx<g>_t svfoo_t0[_t1]_g(<t1>_t, <t1>_t)
  
*************** struct compare_scalar_def : public overl
*** 2358,2364 ****
  			 NUM_TYPE_SUFFIXES, r.group_suffix_id);
    }
  };
! SHAPE (compare_scalar)
  
  /* svcount_t svfoo_t0[_t1](<t1>_t, <t1>_t, uint64_t)
  
--- 2378,2384 ----
  			 NUM_TYPE_SUFFIXES, r.group_suffix_id);
    }
  };
! SHAPE (compare_scalar);
  
  /* svcount_t svfoo_t0[_t1](<t1>_t, <t1>_t, uint64_t)
  
*************** struct compare_scalar_count_def : public
*** 2393,2399 ****
      return c.require_immediate_either_or (2, 2, 4);
    }
  };
! SHAPE (compare_scalar_count)
  
  /* svbool_t svfoo[_t0](sv<t0>_t, svint64_t)  (for signed t0)
     svbool_t svfoo[_n_t0](sv<t0>_t, int64_t)  (for signed t0)
--- 2413,2419 ----
      return c.require_immediate_either_or (2, 2, 4);
    }
  };
! SHAPE (compare_scalar_count);
  
  /* svbool_t svfoo[_t0](sv<t0>_t, svint64_t)  (for signed t0)
     svbool_t svfoo[_n_t0](sv<t0>_t, int64_t)  (for signed t0)
*************** struct compare_wide_opt_n_def : public o
*** 2423,2429 ****
      return r.finish_opt_n_resolution (i + 1, i, type, r.SAME_TYPE_CLASS, 64);
    }
  };
! SHAPE (compare_wide_opt_n)
  
  /* uint64_t svfoo().  */
  struct count_inherent_def : public nonoverloaded_base
--- 2443,2449 ----
      return r.finish_opt_n_resolution (i + 1, i, type, r.SAME_TYPE_CLASS, 64);
    }
  };
! SHAPE (compare_wide_opt_n);
  
  /* uint64_t svfoo().  */
  struct count_inherent_def : public nonoverloaded_base
*************** struct count_inherent_def : public nonov
*** 2434,2440 ****
      build_all (b, "su64", group, MODE_none);
    }
  };
! SHAPE (count_inherent)
  
  /* uint64_t svfoo(enum svpattern).  */
  struct count_pat_def : public nonoverloaded_base
--- 2454,2460 ----
      build_all (b, "su64", group, MODE_none);
    }
  };
! SHAPE (count_inherent);
  
  /* uint64_t svfoo(enum svpattern).  */
  struct count_pat_def : public nonoverloaded_base
*************** struct count_pat_def : public nonoverloa
*** 2445,2451 ****
      build_all (b, "su64,epattern", group, MODE_none);
    }
  };
! SHAPE (count_pat)
  
  /* uint64_t svfoo(svbool_t).  */
  struct count_pred_def : public nonoverloaded_base
--- 2465,2471 ----
      build_all (b, "su64,epattern", group, MODE_none);
    }
  };
! SHAPE (count_pat);
  
  /* uint64_t svfoo(svbool_t).  */
  struct count_pred_def : public nonoverloaded_base
*************** struct count_pred_def : public nonoverlo
*** 2456,2462 ****
      build_all (b, "su64,vp", group, MODE_none);
    }
  };
! SHAPE (count_pred)
  
  /* uint64_t svfoo_t0(sv<t0>_t, uint64_t)
  
--- 2476,2482 ----
      build_all (b, "su64,vp", group, MODE_none);
    }
  };
! SHAPE (count_pred);
  
  /* uint64_t svfoo_t0(sv<t0>_t, uint64_t)
  
*************** struct count_pred_c_def : public nonover
*** 2475,2481 ****
      return c.require_immediate_either_or (1, 2, 4);
    }
  };
! SHAPE (count_pred_c)
  
  /* uint64_t svfoo[_t0](sv<t0>_t).  */
  struct count_vector_def : public overloaded_base<0>
--- 2495,2501 ----
      return c.require_immediate_either_or (1, 2, 4);
    }
  };
! SHAPE (count_pred_c);
  
  /* uint64_t svfoo[_t0](sv<t0>_t).  */
  struct count_vector_def : public overloaded_base<0>
*************** struct count_vector_def : public overloa
*** 2493,2499 ****
      return r.resolve_uniform (1);
    }
  };
! SHAPE (count_vector)
  
  /* sv<t0>xN_t svfoo[_t0](sv<t0>_t, ..., sv<t0>_t)
  
--- 2513,2519 ----
      return r.resolve_uniform (1);
    }
  };
! SHAPE (count_vector);
  
  /* sv<t0>xN_t svfoo[_t0](sv<t0>_t, ..., sv<t0>_t)
  
*************** struct create_def : public overloaded_ba
*** 2513,2519 ****
      return r.resolve_uniform (r.vectors_per_tuple ());
    }
  };
! SHAPE (create)
  
  /* void svfoo_lane_t0[_t1]_g(uint32_t, sv<t1>x<g>_t, sv<t1:int>_t, uint64_t)
  
--- 2533,2539 ----
      return r.resolve_uniform (r.vectors_per_tuple ());
    }
  };
! SHAPE (create);
  
  /* void svfoo_lane_t0[_t1]_g(uint32_t, sv<t1>x<g>_t, sv<t1:int>_t, uint64_t)
  
*************** struct dot_za_slice_int_lane_def
*** 2532,2538 ****
      build_all (b, "_,su32,t1,vs1,su64", group, MODE_none);
    }
  };
! SHAPE (dot_za_slice_int_lane)
  
  /* void svfoo_lane_t0[_t1]_g(uint32_t, sv<t1>x<g>_t, sv<t1>_t, uint64_t)
  
--- 2552,2558 ----
      build_all (b, "_,su32,t1,vs1,su64", group, MODE_none);
    }
  };
! SHAPE (dot_za_slice_int_lane);
  
  /* void svfoo_lane_t0[_t1]_g(uint32_t, sv<t1>x<g>_t, sv<t1>_t, uint64_t)
  
*************** struct dot_za_slice_lane_def : public bi
*** 2542,2548 ****
  {
    constexpr dot_za_slice_lane_def () : binary_za_slice_lane_base<> (0) {}
  };
! SHAPE (dot_za_slice_lane)
  
  /* void svvdott_lane_za32[_mf8]_vg1x4_fpm (uint32_t slice, svmfloat8x2_t zn,
  					   svmfloat8_t zm, uint64_t imm_idx,
--- 2562,2568 ----
  {
    constexpr dot_za_slice_lane_def () : binary_za_slice_lane_base<> (0) {}
  };
! SHAPE (dot_za_slice_lane);
  
  /* void svvdott_lane_za32[_mf8]_vg1x4_fpm (uint32_t slice, svmfloat8x2_t zn,
  					   svmfloat8_t zm, uint64_t imm_idx,
*************** struct dot_half_za_slice_lane_def : publ
*** 2579,2585 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (dot_half_za_slice_lane)
  
  /* void svfoo_lane_t0[_t1]_g(uint32_t, sv<t1>x<g>_t, sv<t1:uint>_t, uint64_t)
  
--- 2599,2605 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (dot_half_za_slice_lane);
  
  /* void svfoo_lane_t0[_t1]_g(uint32_t, sv<t1>x<g>_t, sv<t1:uint>_t, uint64_t)
  
*************** struct dot_za_slice_uint_lane_def
*** 2598,2604 ****
      build_all (b, "_,su32,t1,vu1,su64", group, MODE_none);
    }
  };
! SHAPE (dot_za_slice_uint_lane)
  
  /* sv<t0>_t svfoo[_n]_t0(<t0>_t, ..., <t0>_t)
  
--- 2618,2624 ----
      build_all (b, "_,su32,t1,vu1,su64", group, MODE_none);
    }
  };
! SHAPE (dot_za_slice_uint_lane);
  
  /* sv<t0>_t svfoo[_n]_t0(<t0>_t, ..., <t0>_t)
  
*************** struct dupq_def : public overloaded_base
*** 2621,2627 ****
      gcc_unreachable ();
    }
  };
! SHAPE (dupq)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0>_t, uint64_t)
  
--- 2641,2647 ----
      gcc_unreachable ();
    }
  };
! SHAPE (dupq);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0>_t, uint64_t)
  
*************** struct ext_def : public ext_base
*** 2636,2642 ****
      return c.require_immediate_range (2, 0, 256 / bytes - 1);
    }
  };
! SHAPE (ext)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0>_t, uint64_t)
  
--- 2656,2662 ----
      return c.require_immediate_range (2, 0, 256 / bytes - 1);
    }
  };
! SHAPE (ext);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0>_t, uint64_t)
  
*************** struct extq_def : public ext_base
*** 2651,2657 ****
      return c.require_immediate_range (2, 0, 16 / bytes - 1);
    }
  };
! SHAPE (extq)
  
  /* svboolx<g>_t svfoo_t0_g(sv<t0>_t, sv<t0>_t, uint32_t).  */
  struct extract_pred_def : public nonoverloaded_base
--- 2671,2677 ----
      return c.require_immediate_range (2, 0, 16 / bytes - 1);
    }
  };
! SHAPE (extq);
  
  /* svboolx<g>_t svfoo_t0_g(sv<t0>_t, sv<t0>_t, uint32_t).  */
  struct extract_pred_def : public nonoverloaded_base
*************** struct extract_pred_def : public nonover
*** 2669,2675 ****
      return c.require_immediate_range (1, 0, 4 / size - 1);
    }
  };
! SHAPE (extract_pred)
  
  /* <t0>_t svfoo[_t0](<t0>_t, sv<t0>_t).  */
  struct fold_left_def : public overloaded_base<0>
--- 2689,2695 ----
      return c.require_immediate_range (1, 0, 4 / size - 1);
    }
  };
! SHAPE (extract_pred);
  
  /* <t0>_t svfoo[_t0](<t0>_t, sv<t0>_t).  */
  struct fold_left_def : public overloaded_base<0>
*************** struct fold_left_def : public overloaded
*** 2694,2700 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (fold_left)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>xN_t, uint64_t)
  
--- 2714,2720 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (fold_left);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>xN_t, uint64_t)
  
*************** struct get_def : public overloaded_base<
*** 2729,2735 ****
      return c.require_immediate_range (1, 0, nvectors - 1);
    }
  };
! SHAPE (get)
  
  /* <t0>xN_t svfoo[_t0](sv<t0>_t).  */
  struct get_neonq_def : public overloaded_base<0>
--- 2749,2755 ----
      return c.require_immediate_range (1, 0, nvectors - 1);
    }
  };
! SHAPE (get);
  
  /* <t0>xN_t svfoo[_t0](sv<t0>_t).  */
  struct get_neonq_def : public overloaded_base<0>
*************** struct get_neonq_def : public overloaded
*** 2746,2752 ****
      return r.resolve_unary ();
    }
  };
! SHAPE (get_neonq)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, <t0>xN_t).  */
  struct set_neonq_def : public overloaded_base<0>
--- 2766,2772 ----
      return r.resolve_unary ();
    }
  };
! SHAPE (get_neonq);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, <t0>xN_t).  */
  struct set_neonq_def : public overloaded_base<0>
*************** struct set_neonq_def : public overloaded
*** 2768,2774 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (set_neonq)
  
  /* sv<t0>_t svfoo[_t0](<t0>xN_t).  */
  struct dup_neonq_def : public overloaded_base<0>
--- 2788,2794 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (set_neonq);
  
  /* sv<t0>_t svfoo[_t0](<t0>xN_t).  */
  struct dup_neonq_def : public overloaded_base<0>
*************** struct dup_neonq_def : public overloaded
*** 2790,2796 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (dup_neonq)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, uint64_t)
     <t0>_t svfoo[_n_t0](<t0>_t, uint64_t)
--- 2810,2816 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (dup_neonq);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, uint64_t)
     <t0>_t svfoo[_n_t0](<t0>_t, uint64_t)
*************** struct inc_dec_def : public inc_dec_base
*** 2815,2821 ****
        build_all (b, "s0,s0,su64", group, MODE_n);
    }
  };
! SHAPE (inc_dec)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, enum svpattern, uint64_t)
     <t0>_t svfoo[_n_t0](<t0>_t, enum svpattern, uint64_t)
--- 2835,2841 ----
        build_all (b, "s0,s0,su64", group, MODE_n);
    }
  };
! SHAPE (inc_dec);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, enum svpattern, uint64_t)
     <t0>_t svfoo[_n_t0](<t0>_t, enum svpattern, uint64_t)
*************** struct inc_dec_pat_def : public inc_dec_
*** 2840,2846 ****
        build_all (b, "s0,s0,epattern,su64", group, MODE_n);
    }
  };
! SHAPE (inc_dec_pat)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, svbool_t).  */
  struct inc_dec_pred_def : public overloaded_base<0>
--- 2860,2866 ----
        build_all (b, "s0,s0,epattern,su64", group, MODE_n);
    }
  };
! SHAPE (inc_dec_pat);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, svbool_t).  */
  struct inc_dec_pred_def : public overloaded_base<0>
*************** struct inc_dec_pred_def : public overloa
*** 2865,2871 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (inc_dec_pred)
  
  /* <t0>_t svfoo[_n_t0]_t1(<t0>_t, svbool_t)
  
--- 2885,2891 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (inc_dec_pred);
  
  /* <t0>_t svfoo[_n_t0]_t1(<t0>_t, svbool_t)
  
*************** struct inc_dec_pred_scalar_def : public
*** 2892,2898 ****
      return r.resolve_to (r.mode_suffix_id, type, r.type_suffix_ids[1]);
    }
  };
! SHAPE (inc_dec_pred_scalar)
  
  /* sv<t0>[xN]_t svfoo_t0().  */
  struct inherent_def : public nonoverloaded_base
--- 2912,2918 ----
      return r.resolve_to (r.mode_suffix_id, type, r.type_suffix_ids[1]);
    }
  };
! SHAPE (inc_dec_pred_scalar);
  
  /* sv<t0>[xN]_t svfoo_t0().  */
  struct inherent_def : public nonoverloaded_base
*************** struct inherent_def : public nonoverload
*** 2903,2909 ****
      build_all (b, "t0", group, MODE_none);
    }
  };
! SHAPE (inherent)
  
  /* svbool_t svfoo[_b]().  */
  struct inherent_b_def : public overloaded_base<0>
--- 2923,2929 ----
      build_all (b, "t0", group, MODE_none);
    }
  };
! SHAPE (inherent);
  
  /* svbool_t svfoo[_b]().  */
  struct inherent_b_def : public overloaded_base<0>
*************** struct inherent_b_def : public overloade
*** 2923,2929 ****
      gcc_unreachable ();
    }
  };
! SHAPE (inherent_b)
  
  /* void svfoo_t0().  */
  struct inherent_za_def : public nonoverloaded_base
--- 2943,2949 ----
      gcc_unreachable ();
    }
  };
! SHAPE (inherent_b);
  
  /* void svfoo_t0().  */
  struct inherent_za_def : public nonoverloaded_base
*************** struct inherent_za_def : public nonoverl
*** 2934,2940 ****
      build_all (b, "_", group, MODE_none);
    }
  };
! SHAPE (inherent_za)
  
  /* void svfoo_t0(uint64_t).  */
  struct inherent_za_slice_def : public nonoverloaded_base
--- 2954,2960 ----
      build_all (b, "_", group, MODE_none);
    }
  };
! SHAPE (inherent_za);
  
  /* void svfoo_t0(uint64_t).  */
  struct inherent_za_slice_def : public nonoverloaded_base
*************** struct inherent_za_slice_def : public no
*** 2945,2951 ****
      build_all (b, "_,su32", group, MODE_none);
    }
  };
! SHAPE (inherent_za_slice)
  
  /* void svfoo_zt(uint64_t)
  
--- 2965,2971 ----
      build_all (b, "_,su32", group, MODE_none);
    }
  };
! SHAPE (inherent_za_slice);
  
  /* void svfoo_zt(uint64_t)
  
*************** struct inherent_zt_def : public nonoverl
*** 2964,2970 ****
      return c.require_immediate_range (0, 0, 0);
    }
  };
! SHAPE (inherent_zt)
  
  /* void svfoo_t0(uint64_t)
  
--- 2984,2990 ----
      return c.require_immediate_range (0, 0, 0);
    }
  };
! SHAPE (inherent_zt);
  
  /* void svfoo_t0(uint64_t)
  
*************** struct inherent_mask_za_def : public non
*** 2983,2989 ****
      return c.require_immediate_range (0, 0, 255);
    }
  };
! SHAPE (inherent_mask_za)
  
  /* void svfoo_t0(uint32_t, const void *)
     void svfoo_vnum_t0(uint32_t, const void *, int64_t)
--- 3003,3009 ----
      return c.require_immediate_range (0, 0, 255);
    }
  };
! SHAPE (inherent_mask_za);
  
  /* void svfoo_t0(uint32_t, const void *)
     void svfoo_vnum_t0(uint32_t, const void *, int64_t)
*************** struct ldr_za_def : public nonoverloaded
*** 2998,3004 ****
      build_all (b, "_,su32,al,ss64", group, MODE_vnum);
    }
  };
! SHAPE (ldr_za)
  
  /* void svfoo_zt(uint64_t, const void *)
  
--- 3018,3024 ----
      build_all (b, "_,su32,al,ss64", group, MODE_vnum);
    }
  };
! SHAPE (ldr_za);
  
  /* void svfoo_zt(uint64_t, const void *)
  
*************** struct ldr_zt_def : public nonoverloaded
*** 3017,3023 ****
      return c.require_immediate_range (0, 0, 0);
    }
  };
! SHAPE (ldr_zt)
  
  /* sv<t0>[xN]_t svfoo[_t0]_g(const <t0>_t *)
     sv<t0>[xN]_t svfoo_vnum[_t0]_g(const <t0>_t *, int64_t).  */
--- 3037,3043 ----
      return c.require_immediate_range (0, 0, 0);
    }
  };
! SHAPE (ldr_zt);
  
  /* sv<t0>[xN]_t svfoo[_t0]_g(const <t0>_t *)
     sv<t0>[xN]_t svfoo_vnum[_t0]_g(const <t0>_t *, int64_t).  */
*************** struct load_def : public load_contiguous
*** 3032,3038 ****
      build_all (b, "t0,al,ss64", group, MODE_vnum);
    }
  };
! SHAPE (load)
  
  /* sv<t0>_t svfoo_t0(const <X>_t *)
     sv<t0>_t svfoo_vnum_t0(const <X>_t *, int64_t)
--- 3052,3058 ----
      build_all (b, "t0,al,ss64", group, MODE_vnum);
    }
  };
! SHAPE (load);
  
  /* sv<t0>_t svfoo_t0(const <X>_t *)
     sv<t0>_t svfoo_vnum_t0(const <X>_t *, int64_t)
*************** struct load_ext_def : public nonoverload
*** 3047,3053 ****
      build_all (b, "t0,al,ss64", group, MODE_vnum);
    }
  };
! SHAPE (load_ext)
  
  /* sv<t0>_t svfoo_[s32]index_t0(const <X>_t *, svint32_t)
     sv<t0>_t svfoo_[s64]index_t0(const <X>_t *, svint64_t)
--- 3067,3073 ----
      build_all (b, "t0,al,ss64", group, MODE_vnum);
    }
  };
! SHAPE (load_ext);
  
  /* sv<t0>_t svfoo_[s32]index_t0(const <X>_t *, svint32_t)
     sv<t0>_t svfoo_[s64]index_t0(const <X>_t *, svint64_t)
*************** struct load_ext_gather_index_def : publi
*** 3068,3074 ****
      build_vs_index (b, "t0,b,ss64", group);
    }
  };
! SHAPE (load_ext_gather_index)
  
  /* sv<t0>_t svfoo_[s64]index_t0(const <X>_t *, svint64_t)
     sv<t0>_t svfoo_[u64]index_t0(const <X>_t *, svuint64_t)
--- 3088,3094 ----
      build_vs_index (b, "t0,b,ss64", group);
    }
  };
! SHAPE (load_ext_gather_index);
  
  /* sv<t0>_t svfoo_[s64]index_t0(const <X>_t *, svint64_t)
     sv<t0>_t svfoo_[u64]index_t0(const <X>_t *, svuint64_t)
*************** struct load_ext_gather_index_restricted_
*** 3088,3094 ****
      build_vs_index (b, "t0,b,ss64", group);
    }
  };
! SHAPE (load_ext_gather_index_restricted)
  
  /* sv<t0>_t svfoo_[s32]offset_t0(const <X>_t *, svint32_t)
     sv<t0>_t svfoo_[s64]offset_t0(const <X>_t *, svint64_t)
--- 3108,3114 ----
      build_vs_index (b, "t0,b,ss64", group);
    }
  };
! SHAPE (load_ext_gather_index_restricted);
  
  /* sv<t0>_t svfoo_[s32]offset_t0(const <X>_t *, svint32_t)
     sv<t0>_t svfoo_[s64]offset_t0(const <X>_t *, svint64_t)
*************** struct load_ext_gather_offset_def : publ
*** 3113,3119 ****
      build_vs_offset (b, "t0,b,ss64", group);
    }
  };
! SHAPE (load_ext_gather_offset)
  
  /* sv<t0>_t svfoo_[s64]offset_t0(const <X>_t *, svint64_t)
     sv<t0>_t svfoo_[u32]offset_t0(const <X>_t *, svuint32_t)
--- 3133,3139 ----
      build_vs_offset (b, "t0,b,ss64", group);
    }
  };
! SHAPE (load_ext_gather_offset);
  
  /* sv<t0>_t svfoo_[s64]offset_t0(const <X>_t *, svint64_t)
     sv<t0>_t svfoo_[u32]offset_t0(const <X>_t *, svuint32_t)
*************** struct load_ext_gather_offset_restricted
*** 3138,3144 ****
      build_vs_offset (b, "t0,b,ss64", group);
    }
  };
! SHAPE (load_ext_gather_offset_restricted)
  
  /* sv<t0>_t svfoo_[s32]index[_t0](const <t0>_t *, svint32_t)
     sv<t0>_t svfoo_[s64]index[_t0](const <t0>_t *, svint64_t)
--- 3158,3164 ----
      build_vs_offset (b, "t0,b,ss64", group);
    }
  };
! SHAPE (load_ext_gather_offset_restricted);
  
  /* sv<t0>_t svfoo_[s32]index[_t0](const <t0>_t *, svint32_t)
     sv<t0>_t svfoo_[s64]index[_t0](const <t0>_t *, svint64_t)
*************** struct load_gather_sv_def : public load_
*** 3160,3166 ****
      build_sv_offset (b, "t0,al,d", group);
    }
  };
! SHAPE (load_gather_sv)
  
  /* sv<t0>_t svfoo_[u32]index[_t0](const <t0>_t *, svuint32_t)
     sv<t0>_t svfoo_[u64]index[_t0](const <t0>_t *, svuint64_t)
--- 3180,3186 ----
      build_sv_offset (b, "t0,al,d", group);
    }
  };
! SHAPE (load_gather_sv);
  
  /* sv<t0>_t svfoo_[u32]index[_t0](const <t0>_t *, svuint32_t)
     sv<t0>_t svfoo_[u64]index[_t0](const <t0>_t *, svuint64_t)
*************** struct load_gather_sv_restricted_def : p
*** 3182,3188 ****
      build_sv_uint_offset (b, "t0,al,d", group);
    }
  };
! SHAPE (load_gather_sv_restricted)
  
  /* sv<t0>_t svfoo[_u32base]_t0(svuint32_t)
     sv<t0>_t svfoo[_u64base]_t0(svuint64_t)
--- 3202,3208 ----
      build_sv_uint_offset (b, "t0,al,d", group);
    }
  };
! SHAPE (load_gather_sv_restricted);
  
  /* sv<t0>_t svfoo[_u32base]_t0(svuint32_t)
     sv<t0>_t svfoo[_u64base]_t0(svuint64_t)
*************** struct load_gather_vs_def : public overl
*** 3213,3219 ****
      gcc_unreachable ();
    }
  };
! SHAPE (load_gather_vs)
  
  /* sv<t0>_t svfoo_[s64]index[_t0](const <t0>_t *, svint64_t)
     sv<t0>_t svfoo_[u64]index[_t0](const <t0>_t *, svuint64_t).  */
--- 3233,3239 ----
      gcc_unreachable ();
    }
  };
! SHAPE (load_gather_vs);
  
  /* sv<t0>_t svfoo_[s64]index[_t0](const <t0>_t *, svint64_t)
     sv<t0>_t svfoo_[u64]index[_t0](const <t0>_t *, svuint64_t).  */
*************** struct load_gather64_sv_index_def : publ
*** 3227,3233 ****
      build_all (b, "t0,al,d", group, MODE_u64index);
    }
  };
! SHAPE (load_gather64_sv_index)
  
  /* sv<t0>_t svfoo_[s64]offset[_t0](const <t0>_t *, svint64_t)
     sv<t0>_t svfoo_[u64]offset[_t0](const <t0>_t *, svuint64_t).  */
--- 3247,3253 ----
      build_all (b, "t0,al,d", group, MODE_u64index);
    }
  };
! SHAPE (load_gather64_sv_index);
  
  /* sv<t0>_t svfoo_[s64]offset[_t0](const <t0>_t *, svint64_t)
     sv<t0>_t svfoo_[u64]offset[_t0](const <t0>_t *, svuint64_t).  */
*************** struct load_gather64_sv_offset_def : pub
*** 3241,3247 ****
      build_all (b, "t0,al,d", group, MODE_u64offset);
    }
  };
! SHAPE (load_gather64_sv_offset)
  
  /* sv<t0>_t svfoo[_u64base]_index_t0(svuint64_t, int64_t).  */
  struct load_gather64_vs_index_def : public nonoverloaded_base
--- 3261,3267 ----
      build_all (b, "t0,al,d", group, MODE_u64offset);
    }
  };
! SHAPE (load_gather64_sv_offset);
  
  /* sv<t0>_t svfoo[_u64base]_index_t0(svuint64_t, int64_t).  */
  struct load_gather64_vs_index_def : public nonoverloaded_base
*************** struct load_gather64_vs_index_def : publ
*** 3260,3266 ****
      gcc_unreachable ();
    }
  };
! SHAPE (load_gather64_vs_index)
  
  /* sv<t0>_t svfoo[_u64base]_t0(svuint64_t)
  
--- 3280,3286 ----
      gcc_unreachable ();
    }
  };
! SHAPE (load_gather64_vs_index);
  
  /* sv<t0>_t svfoo[_u64base]_t0(svuint64_t)
  
*************** struct load_gather64_vs_offset_def : pub
*** 3282,3288 ****
      gcc_unreachable ();
    }
  };
! SHAPE (load_gather64_vs_offset)
  
  /* sv<t0>_t svfoo[_t0](const <t0>_t *)
  
--- 3302,3308 ----
      gcc_unreachable ();
    }
  };
! SHAPE (load_gather64_vs_offset);
  
  /* sv<t0>_t svfoo[_t0](const <t0>_t *)
  
*************** struct load_replicate_def : public load_
*** 3296,3302 ****
      build_all (b, "t0,al", group, MODE_none);
    }
  };
! SHAPE (load_replicate)
  
  /* void svfoo_t0(uint64_t, uint32_t, svbool_t, const void *)
     void svfoo_vnum_t0(uint64_t, uint32_t, svbool_t, const void *, int64_t)
--- 3316,3322 ----
      build_all (b, "t0,al", group, MODE_none);
    }
  };
! SHAPE (load_replicate);
  
  /* void svfoo_t0(uint64_t, uint32_t, svbool_t, const void *)
     void svfoo_vnum_t0(uint64_t, uint32_t, svbool_t, const void *, int64_t)
*************** struct load_za_def : public nonoverloade
*** 3317,3332 ****
      return c.require_immediate_range (0, 0, c.num_za_tiles () - 1);
    }
  };
! SHAPE (load_za)
  
  using luti2_lane_zt_def = luti_lane_zt_base<2>;
! SHAPE (luti2_lane_zt)
  
  using luti4_lane_zt_def = luti_lane_zt_base<4>;
! SHAPE (luti4_lane_zt)
  
  using luti4_zt_def = luti_zt_base<4>;
! SHAPE (luti4_zt)
  
  /* svbool_t svfoo(enum svpattern).  */
  struct pattern_pred_def : public nonoverloaded_base
--- 3337,3352 ----
      return c.require_immediate_range (0, 0, c.num_za_tiles () - 1);
    }
  };
! SHAPE (load_za);
  
  using luti2_lane_zt_def = luti_lane_zt_base<2>;
! SHAPE (luti2_lane_zt);
  
  using luti4_lane_zt_def = luti_lane_zt_base<4>;
! SHAPE (luti4_lane_zt);
  
  using luti4_zt_def = luti_zt_base<4>;
! SHAPE (luti4_zt);
  
  /* svbool_t svfoo(enum svpattern).  */
  struct pattern_pred_def : public nonoverloaded_base
*************** struct pattern_pred_def : public nonover
*** 3337,3343 ****
      build_all (b, "vp,epattern", group, MODE_none);
    }
  };
! SHAPE (pattern_pred)
  
  /* svbool_t svfoo[_t0](sv<t0>_t).  */
  struct pmov_from_vector_def : public overloaded_base<0>
--- 3357,3363 ----
      build_all (b, "vp,epattern", group, MODE_none);
    }
  };
! SHAPE (pattern_pred);
  
  /* svbool_t svfoo[_t0](sv<t0>_t).  */
  struct pmov_from_vector_def : public overloaded_base<0>
*************** struct pmov_from_vector_def : public ove
*** 3355,3361 ****
      return r.resolve_uniform (1);
    }
  };
! SHAPE (pmov_from_vector)
  
  /* svbool_t svfoo[_t0](sv<t0>_t, uint64_t)
  
--- 3375,3381 ----
      return r.resolve_uniform (1);
    }
  };
! SHAPE (pmov_from_vector);
  
  /* svbool_t svfoo[_t0](sv<t0>_t, uint64_t)
  
*************** struct pmov_from_vector_lane_def : publi
*** 3383,3389 ****
      return c.require_immediate_range (1, 0, bytes - 1);
    }
  };
! SHAPE (pmov_from_vector_lane)
  
  /* sv<t0>_t svfoo_t0(uint64_t)
  
--- 3403,3409 ----
      return c.require_immediate_range (1, 0, bytes - 1);
    }
  };
! SHAPE (pmov_from_vector_lane);
  
  /* sv<t0>_t svfoo_t0(uint64_t)
  
*************** struct pmov_to_vector_lane_def : public
*** 3431,3437 ****
      return false;
    }
  };
! SHAPE (pmov_to_vector_lane)
  
  /* void svfoo(const void *, svprfop)
     void svfoo_vnum(const void *, int64_t, svprfop).  */
--- 3451,3457 ----
      return false;
    }
  };
! SHAPE (pmov_to_vector_lane);
  
  /* void svfoo(const void *, svprfop)
     void svfoo_vnum(const void *, int64_t, svprfop).  */
*************** struct prefetch_def : public nonoverload
*** 3444,3450 ****
      build_all (b, "_,ap,ss64,eprfop", group, MODE_vnum);
    }
  };
! SHAPE (prefetch)
  
  /* void svfoo_[s32]index(const void *, svint32_t, svprfop)
     void svfoo_[s64]index(const void *, svint64_t, svprfop)
--- 3464,3470 ----
      build_all (b, "_,ap,ss64,eprfop", group, MODE_vnum);
    }
  };
! SHAPE (prefetch);
  
  /* void svfoo_[s32]index(const void *, svint32_t, svprfop)
     void svfoo_[s64]index(const void *, svint64_t, svprfop)
*************** struct prefetch_gather_index_def : publi
*** 3468,3474 ****
      build_vs_index (b, "_,b,ss64,eprfop", group);
    }
  };
! SHAPE (prefetch_gather_index)
  
  /* void svfoo_[s32]offset(const void *, svint32_t, svprfop)
     void svfoo_[s64]offset(const void *, svint64_t, svprfop)
--- 3488,3494 ----
      build_vs_index (b, "_,b,ss64,eprfop", group);
    }
  };
! SHAPE (prefetch_gather_index);
  
  /* void svfoo_[s32]offset(const void *, svint32_t, svprfop)
     void svfoo_[s64]offset(const void *, svint64_t, svprfop)
*************** struct prefetch_gather_offset_def : publ
*** 3492,3498 ****
      build_vs_offset (b, "_,b,ss64,eprfop", group);
    }
  };
! SHAPE (prefetch_gather_offset)
  
  /* bool svfoo(svbool_t).  */
  struct ptest_def : public nonoverloaded_base
--- 3512,3518 ----
      build_vs_offset (b, "_,b,ss64,eprfop", group);
    }
  };
! SHAPE (prefetch_gather_offset);
  
  /* bool svfoo(svbool_t).  */
  struct ptest_def : public nonoverloaded_base
*************** struct ptest_def : public nonoverloaded_
*** 3503,3509 ****
      build_all (b, "sp,vp", group, MODE_none);
    }
  };
! SHAPE (ptest)
  
  /* svbool_t svfoo().  */
  struct rdffr_def : public nonoverloaded_base
--- 3523,3529 ----
      build_all (b, "sp,vp", group, MODE_none);
    }
  };
! SHAPE (ptest);
  
  /* svbool_t svfoo().  */
  struct rdffr_def : public nonoverloaded_base
*************** struct rdffr_def : public nonoverloaded_
*** 3514,3520 ****
      build_all (b, "vp", group, MODE_none);
    }
  };
! SHAPE (rdffr)
  
  /* sv<t1>x<g>_t svfoo_t0_t1_g(uint64_t, uint32_t).  */
  struct read_za_def : public nonoverloaded_base
--- 3534,3540 ----
      build_all (b, "vp", group, MODE_none);
    }
  };
! SHAPE (rdffr);
  
  /* sv<t1>x<g>_t svfoo_t0_t1_g(uint64_t, uint32_t).  */
  struct read_za_def : public nonoverloaded_base
*************** struct read_za_def : public nonoverloade
*** 3531,3537 ****
      return c.require_immediate_range (0, 0, c.num_za_tiles () - 1);
    }
  };
! SHAPE (read_za)
  
  /* sv<t1>_t svfoo_t0[_t1](uint64_t, uint32_t)
  
--- 3551,3557 ----
      return c.require_immediate_range (0, 0, c.num_za_tiles () - 1);
    }
  };
! SHAPE (read_za);
  
  /* sv<t1>_t svfoo_t0[_t1](uint64_t, uint32_t)
  
*************** struct read_za_m_def : public overloaded
*** 3573,3579 ****
      return c.require_immediate_range (1, 0, c.num_za_tiles () - 1);
    }
  };
! SHAPE (read_za_m)
  
  /* sv<t1>x<g>_t svfoo_t0_t1_g(uint32_t).  */
  struct read_za_slice_def : public nonoverloaded_base
--- 3593,3599 ----
      return c.require_immediate_range (1, 0, c.num_za_tiles () - 1);
    }
  };
! SHAPE (read_za_m);
  
  /* sv<t1>x<g>_t svfoo_t0_t1_g(uint32_t).  */
  struct read_za_slice_def : public nonoverloaded_base
*************** struct read_za_slice_def : public nonove
*** 3584,3590 ****
      build_all (b, "t1,su32", group, MODE_none);
    }
  };
! SHAPE (read_za_slice)
  
  /* <t0>_t svfoo[_t0](sv<t0>_t).  */
  struct reduction_def : public overloaded_base<0>
--- 3604,3610 ----
      build_all (b, "t1,su32", group, MODE_none);
    }
  };
! SHAPE (read_za_slice);
  
  /* <t0>_t svfoo[_t0](sv<t0>_t).  */
  struct reduction_def : public overloaded_base<0>
*************** struct reduction_def : public overloaded
*** 3602,3608 ****
      return r.resolve_uniform (1);
    }
  };
! SHAPE (reduction)
  
  /* <t0>xN_t svfoo[_t0](sv<t0>_t).  */
  struct reduction_neonq_def : public overloaded_base<0>
--- 3622,3628 ----
      return r.resolve_uniform (1);
    }
  };
! SHAPE (reduction);
  
  /* <t0>xN_t svfoo[_t0](sv<t0>_t).  */
  struct reduction_neonq_def : public overloaded_base<0>
*************** struct reduction_neonq_def : public over
*** 3620,3626 ****
      return r.resolve_uniform (1);
    }
  };
! SHAPE (reduction_neonq)
  
  /* int64_t svfoo[_t0](sv<t0>_t)  (for signed t0)
     uint64_t svfoo[_t0](sv<t0>_t)  (for unsigned t0)
--- 3640,3646 ----
      return r.resolve_uniform (1);
    }
  };
! SHAPE (reduction_neonq);
  
  /* int64_t svfoo[_t0](sv<t0>_t)  (for signed t0)
     uint64_t svfoo[_t0](sv<t0>_t)  (for unsigned t0)
*************** struct reduction_wide_def : public overl
*** 3643,3649 ****
      return r.resolve_uniform (1);
    }
  };
! SHAPE (reduction_wide)
  
  /* sv<t0>x<g>_t svfoo_t0[_t1_g](sv<t1>x<g>_t)
  
--- 3663,3669 ----
      return r.resolve_uniform (1);
    }
  };
! SHAPE (reduction_wide);
  
  /* sv<t0>x<g>_t svfoo_t0[_t1_g](sv<t1>x<g>_t)
  
*************** struct reinterpret_def : public overload
*** 3671,3677 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (reinterpret)
  
  /* sv<t0>_t svfoo_t0(sv<t0>_t, sv<t0>_t, uint32_t).  */
  struct select_pred_def : public nonoverloaded_base
--- 3691,3697 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (reinterpret);
  
  /* sv<t0>_t svfoo_t0(sv<t0>_t, sv<t0>_t, uint32_t).  */
  struct select_pred_def : public nonoverloaded_base
*************** struct select_pred_def : public nonoverl
*** 3682,3688 ****
      build_all (b, "v0,v0,vp,su32", group, MODE_none);
    }
  };
! SHAPE (select_pred)
  
  /* sv<t0>xN_t svfoo[_t0](sv<t0>xN_t, uint64_t, sv<t0>_t)
  
--- 3702,3708 ----
      build_all (b, "v0,v0,vp,su32", group, MODE_none);
    }
  };
! SHAPE (select_pred);
  
  /* sv<t0>xN_t svfoo[_t0](sv<t0>xN_t, uint64_t, sv<t0>_t)
  
*************** struct set_def : public overloaded_base<
*** 3718,3724 ****
      return c.require_immediate_range (1, 0, nvectors - 1);
    }
  };
! SHAPE (set)
  
  /* void svfoo().  */
  struct setffr_def : public nonoverloaded_base
--- 3738,3744 ----
      return c.require_immediate_range (1, 0, nvectors - 1);
    }
  };
! SHAPE (set);
  
  /* void svfoo().  */
  struct setffr_def : public nonoverloaded_base
*************** struct setffr_def : public nonoverloaded
*** 3729,3735 ****
      build_all (b, "_", group, MODE_none);
    }
  };
! SHAPE (setffr)
  
  /* sv<t0>_t svfoo[_n_t0])(sv<t0>_t, uint64_t)
  
--- 3749,3755 ----
      build_all (b, "_", group, MODE_none);
    }
  };
! SHAPE (setffr);
  
  /* sv<t0>_t svfoo[_n_t0])(sv<t0>_t, uint64_t)
  
*************** struct shift_left_imm_def : public overl
*** 3757,3763 ****
      return c.require_immediate_range (1, 0, bits - 1);
    }
  };
! SHAPE (shift_left_imm)
  
  /* sv<t0>_t svfoo[_n_t0])(sv<t0:half>_t, uint64_t)
  
--- 3777,3783 ----
      return c.require_immediate_range (1, 0, bits - 1);
    }
  };
! SHAPE (shift_left_imm);
  
  /* sv<t0>_t svfoo[_n_t0])(sv<t0:half>_t, uint64_t)
  
*************** struct shift_left_imm_long_def : public
*** 3772,3778 ****
      return c.require_immediate_range (1, 0, bits - 1);
    }
  };
! SHAPE (shift_left_imm_long)
  
  /* sv<t0:uint>_t svfoo[_n_t0])(sv<t0>_t, uint64_t)
  
--- 3792,3798 ----
      return c.require_immediate_range (1, 0, bits - 1);
    }
  };
! SHAPE (shift_left_imm_long);
  
  /* sv<t0:uint>_t svfoo[_n_t0])(sv<t0>_t, uint64_t)
  
*************** struct shift_left_imm_to_uint_def : publ
*** 3787,3793 ****
      build_all (b, "vu0,v0,su64", group, MODE_n);
    }
  };
! SHAPE (shift_left_imm_to_uint)
  
  /* sv<t0>_t svfoo[_n_t0])(sv<t0>_t, uint64_t)
  
--- 3807,3813 ----
      build_all (b, "vu0,v0,su64", group, MODE_n);
    }
  };
! SHAPE (shift_left_imm_to_uint);
  
  /* sv<t0>_t svfoo[_n_t0])(sv<t0>_t, uint64_t)
  
*************** struct shift_right_imm_def : public over
*** 3815,3821 ****
      return c.require_immediate_range (1, 1, bits);
    }
  };
! SHAPE (shift_right_imm)
  
  /* sv<t0:half>_t svfoo[_n_t0])(sv<t0>_t, uint64_t)
  
--- 3835,3841 ----
      return c.require_immediate_range (1, 1, bits);
    }
  };
! SHAPE (shift_right_imm);
  
  /* sv<t0:half>_t svfoo[_n_t0])(sv<t0>_t, uint64_t)
  
*************** SHAPE (shift_right_imm)
*** 3823,3829 ****
     range [1, sizeof (<t0>_t) * 4].  */
  typedef shift_right_imm_narrow_wrapper<binary_imm_narrowb_base<>, 1>
    shift_right_imm_narrowb_def;
! SHAPE (shift_right_imm_narrowb)
  
  /* sv<t0:half>_t svfoo[_n_t0])(sv<t0:half>_t, sv<t0>_t, uint64_t)
  
--- 3843,3849 ----
     range [1, sizeof (<t0>_t) * 4].  */
  typedef shift_right_imm_narrow_wrapper<binary_imm_narrowb_base<>, 1>
    shift_right_imm_narrowb_def;
! SHAPE (shift_right_imm_narrowb);
  
  /* sv<t0:half>_t svfoo[_n_t0])(sv<t0:half>_t, sv<t0>_t, uint64_t)
  
*************** SHAPE (shift_right_imm_narrowb)
*** 3831,3837 ****
     range [1, sizeof (<t0>_t) * 4].  */
  typedef shift_right_imm_narrow_wrapper<binary_imm_narrowt_base<>, 2>
    shift_right_imm_narrowt_def;
! SHAPE (shift_right_imm_narrowt)
  
  /* sv<t0:uint:half>_t svfoo[_n_t0])(sv<t0>_t, uint64_t)
  
--- 3851,3857 ----
     range [1, sizeof (<t0>_t) * 4].  */
  typedef shift_right_imm_narrow_wrapper<binary_imm_narrowt_base<>, 2>
    shift_right_imm_narrowt_def;
! SHAPE (shift_right_imm_narrowt);
  
  /* sv<t0:uint:half>_t svfoo[_n_t0])(sv<t0>_t, uint64_t)
  
*************** typedef binary_imm_narrowb_base<TYPE_uns
*** 3841,3847 ****
    binary_imm_narrowb_base_unsigned;
  typedef shift_right_imm_narrow_wrapper<binary_imm_narrowb_base_unsigned, 1>
    shift_right_imm_narrowb_to_uint_def;
! SHAPE (shift_right_imm_narrowb_to_uint)
  
  /* sv<t0:uint:half>_t svfoo[_n_t0])(sv<t0:uint:half>_t, sv<t0>_t, uint64_t)
  
--- 3861,3867 ----
    binary_imm_narrowb_base_unsigned;
  typedef shift_right_imm_narrow_wrapper<binary_imm_narrowb_base_unsigned, 1>
    shift_right_imm_narrowb_to_uint_def;
! SHAPE (shift_right_imm_narrowb_to_uint);
  
  /* sv<t0:uint:half>_t svfoo[_n_t0])(sv<t0:uint:half>_t, sv<t0>_t, uint64_t)
  
*************** typedef binary_imm_narrowt_base<TYPE_uns
*** 3851,3857 ****
    binary_imm_narrowt_base_unsigned;
  typedef shift_right_imm_narrow_wrapper<binary_imm_narrowt_base_unsigned, 2>
    shift_right_imm_narrowt_to_uint_def;
! SHAPE (shift_right_imm_narrowt_to_uint)
  
  /* sv<t0>_t svfoo[_n_t0])(sv<t0>_t, uint64_t)
  
--- 3871,3877 ----
    binary_imm_narrowt_base_unsigned;
  typedef shift_right_imm_narrow_wrapper<binary_imm_narrowt_base_unsigned, 2>
    shift_right_imm_narrowt_to_uint_def;
! SHAPE (shift_right_imm_narrowt_to_uint);
  
  /* sv<t0>_t svfoo[_n_t0])(sv<t0>_t, uint64_t)
  
*************** struct shift_right_imm_narrowxn_def : pu
*** 3887,3893 ****
      return c.require_immediate_range (1, 1, bits);
    }
  };
! SHAPE (shift_right_imm_narrowxn)
  
  /* void svfoo[_t0](<X>_t *, sv<t0>[xN]_t)
     void svfoo_vnum[_t0](<X>_t *, int64_t, sv<t0>[xN]_t)
--- 3907,3913 ----
      return c.require_immediate_range (1, 1, bits);
    }
  };
! SHAPE (shift_right_imm_narrowxn);
  
  /* void svfoo[_t0](<X>_t *, sv<t0>[xN]_t)
     void svfoo_vnum[_t0](<X>_t *, int64_t, sv<t0>[xN]_t)
*************** struct store_def : public overloaded_bas
*** 3922,3928 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (store)
  
  /* void svfoo_[s32]index[_t0](<X>_t *, svint32_t, sv<t0>_t)
     void svfoo_[s64]index[_t0](<X>_t *, svint64_t, sv<t0>_t)
--- 3942,3948 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (store);
  
  /* void svfoo_[s32]index[_t0](<X>_t *, svint32_t, sv<t0>_t)
     void svfoo_[s64]index[_t0](<X>_t *, svint64_t, sv<t0>_t)
*************** struct store_scatter_index_def : public
*** 3944,3950 ****
      build_vs_index (b, "_,b,ss64,t0", group);
    }
  };
! SHAPE (store_scatter_index)
  
  /* void svfoo_[s64]index[_t0](<X>_t *, svint64_t, sv<t0>_t)
     void svfoo_[u64]index[_t0](<X>_t *, svuint64_t, sv<t0>_t)
--- 3964,3970 ----
      build_vs_index (b, "_,b,ss64,t0", group);
    }
  };
! SHAPE (store_scatter_index);
  
  /* void svfoo_[s64]index[_t0](<X>_t *, svint64_t, sv<t0>_t)
     void svfoo_[u64]index[_t0](<X>_t *, svuint64_t, sv<t0>_t)
*************** struct store_scatter_index_restricted_de
*** 3964,3970 ****
      build_vs_index (b, "_,b,ss64,t0", group);
    }
  };
! SHAPE (store_scatter_index_restricted)
  
  /* void svfoo_[s32]offset[_t0](<X>_t *, svint32_t, sv<t0>_t)
     void svfoo_[s64]offset[_t0](<X>_t *, svint64_t, sv<t0>_t)
--- 3984,3990 ----
      build_vs_index (b, "_,b,ss64,t0", group);
    }
  };
! SHAPE (store_scatter_index_restricted);
  
  /* void svfoo_[s32]offset[_t0](<X>_t *, svint32_t, sv<t0>_t)
     void svfoo_[s64]offset[_t0](<X>_t *, svint64_t, sv<t0>_t)
*************** struct store_scatter_offset_def : public
*** 3991,3997 ****
      build_vs_offset (b, "_,b,ss64,t0", group);
    }
  };
! SHAPE (store_scatter_offset)
  
  /* void svfoo_[s64]offset[_t0](<X>_t *, svint64_t, sv<t0>_t)
     void svfoo_[u32]offset[_t0](<X>_t *, svuint32_t, sv<t0>_t)
--- 4011,4017 ----
      build_vs_offset (b, "_,b,ss64,t0", group);
    }
  };
! SHAPE (store_scatter_offset);
  
  /* void svfoo_[s64]offset[_t0](<X>_t *, svint64_t, sv<t0>_t)
     void svfoo_[u32]offset[_t0](<X>_t *, svuint32_t, sv<t0>_t)
*************** struct store_scatter_offset_restricted_d
*** 4017,4023 ****
      build_vs_offset (b, "_,b,ss64,t0", group);
    }
  };
! SHAPE (store_scatter_offset_restricted)
  
  /* void svfoo_[s64]index[_t0](<t0>_t *, svint64_t, sv<t0>_t)
     void svfoo_[u64]index[_t0](<t0>_t *, svuint64_t, sv<t0>_t)
--- 4037,4043 ----
      build_vs_offset (b, "_,b,ss64,t0", group);
    }
  };
! SHAPE (store_scatter_offset_restricted);
  
  /* void svfoo_[s64]index[_t0](<t0>_t *, svint64_t, sv<t0>_t)
     void svfoo_[u64]index[_t0](<t0>_t *, svuint64_t, sv<t0>_t)
*************** struct store_scatter64_index_def : publi
*** 4034,4040 ****
      build_all (b, "_,b,ss64,t0", group, MODE_u64base_index);
    }
  };
! SHAPE (store_scatter64_index)
  
  /* void svfoo_[s64]offset[_t0](<t0>_t *, svint64_t, sv<t0>_t)
     void svfoo_[u64]offset[_t0](<t0>_t *, svuint64_t, sv<t0>_t)
--- 4054,4060 ----
      build_all (b, "_,b,ss64,t0", group, MODE_u64base_index);
    }
  };
! SHAPE (store_scatter64_index);
  
  /* void svfoo_[s64]offset[_t0](<t0>_t *, svint64_t, sv<t0>_t)
     void svfoo_[u64]offset[_t0](<t0>_t *, svuint64_t, sv<t0>_t)
*************** struct store_scatter64_offset_def : publ
*** 4055,4061 ****
      build_all (b, "_,b,ss64,t0", group, MODE_u64base_offset);
    }
  };
! SHAPE (store_scatter64_offset)
  
  /* void svfoo_t0(uint64_t, uint32_t, svbool_t, void *)
     void svfoo_vnum_t0(uint64_t, uint32_t, svbool_t, void *, int64_t)
--- 4075,4081 ----
      build_all (b, "_,b,ss64,t0", group, MODE_u64base_offset);
    }
  };
! SHAPE (store_scatter64_offset);
  
  /* void svfoo_t0(uint64_t, uint32_t, svbool_t, void *)
     void svfoo_vnum_t0(uint64_t, uint32_t, svbool_t, void *, int64_t)
*************** struct store_za_def : public nonoverload
*** 4076,4082 ****
      return c.require_immediate_range (0, 0, c.num_za_tiles () - 1);
    }
  };
! SHAPE (store_za)
  
  /* void svfoo[_t0_g](<X>_t *, sv<t0>x<g>_t)
     void svfoo_vnum[_t0_g](<X>_t *, int64_t, sv<t0>x<g>_t)
--- 4096,4102 ----
      return c.require_immediate_range (0, 0, c.num_za_tiles () - 1);
    }
  };
! SHAPE (store_za);
  
  /* void svfoo[_t0_g](<X>_t *, sv<t0>x<g>_t)
     void svfoo_vnum[_t0_g](<X>_t *, int64_t, sv<t0>x<g>_t)
*************** struct storexn_def : public store_def
*** 4107,4113 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (storexn)
  
  /* void svfoo_t0(uint32_t, void *)
     void svfoo_vnum_t0(uint32_t, void *, int64_t)
--- 4127,4133 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (storexn);
  
  /* void svfoo_t0(uint32_t, void *)
     void svfoo_vnum_t0(uint32_t, void *, int64_t)
*************** struct str_za_def : public nonoverloaded
*** 4122,4128 ****
      build_all (b, "_,su32,as,ss64", group, MODE_vnum);
    }
  };
! SHAPE (str_za)
  
  /* void svfoo_zt(uint64_t, void *)
  
--- 4142,4148 ----
      build_all (b, "_,su32,as,ss64", group, MODE_vnum);
    }
  };
! SHAPE (str_za);
  
  /* void svfoo_zt(uint64_t, void *)
  
*************** struct str_zt_def : public nonoverloaded
*** 4141,4147 ****
      return c.require_immediate_range (0, 0, 0);
    }
  };
! SHAPE (str_zt)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>xN_t, sv<t0:uint>_t).  */
  struct tbl_tuple_def : public overloaded_base<0>
--- 4161,4167 ----
      return c.require_immediate_range (0, 0, 0);
    }
  };
! SHAPE (str_zt);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>xN_t, sv<t0:uint>_t).  */
  struct tbl_tuple_def : public overloaded_base<0>
*************** struct tbl_tuple_def : public overloaded
*** 4166,4172 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (tbl_tuple)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, svbfloatt16_t, svbfloat16_t).  */
  struct ternary_bfloat_def
--- 4186,4192 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (tbl_tuple);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, svbfloatt16_t, svbfloat16_t).  */
  struct ternary_bfloat_def
*************** struct ternary_bfloat_def
*** 4179,4185 ****
      build_all (b, "v0,v0,vB,vB", group, MODE_none);
    }
  };
! SHAPE (ternary_bfloat)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, svmfloat8_t, svmfloat8_t).  */
  struct ternary_mfloat8_def
--- 4199,4205 ----
      build_all (b, "v0,v0,vB,vB", group, MODE_none);
    }
  };
! SHAPE (ternary_bfloat);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, svmfloat8_t, svmfloat8_t).  */
  struct ternary_mfloat8_def
*************** struct ternary_mfloat8_def
*** 4208,4228 ****
  			 NUM_TYPE_SUFFIXES, GROUP_none);
    }
  };
! SHAPE (ternary_mfloat8)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, svbfloat16_t, svbfloat16_t, uint64_t)
  
     where the final argument is an integer constant expression in the range
     [0, 7].  */
  typedef ternary_bfloat_lane_base<1> ternary_bfloat_lane_def;
! SHAPE (ternary_bfloat_lane)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, svbfloat16_t, svbfloat16_t, uint64_t)
  
     where the final argument is an integer constant expression in the range
     [0, 3].  */
  typedef ternary_bfloat_lane_base<2> ternary_bfloat_lanex2_def;
! SHAPE (ternary_bfloat_lanex2)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, svmfloat8_t, svmfloat8_t, uint64_t)
  
--- 4228,4248 ----
  			 NUM_TYPE_SUFFIXES, GROUP_none);
    }
  };
! SHAPE (ternary_mfloat8);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, svbfloat16_t, svbfloat16_t, uint64_t)
  
     where the final argument is an integer constant expression in the range
     [0, 7].  */
  typedef ternary_bfloat_lane_base<1> ternary_bfloat_lane_def;
! SHAPE (ternary_bfloat_lane);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, svbfloat16_t, svbfloat16_t, uint64_t)
  
     where the final argument is an integer constant expression in the range
     [0, 3].  */
  typedef ternary_bfloat_lane_base<2> ternary_bfloat_lanex2_def;
! SHAPE (ternary_bfloat_lanex2);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, svmfloat8_t, svmfloat8_t, uint64_t)
  
*************** struct ternary_mfloat8_lane_def
*** 4261,4267 ****
  			 NUM_TYPE_SUFFIXES, GROUP_none);
    }
  };
! SHAPE (ternary_mfloat8_lane)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, svmfloat8_t, svmfloat8_t, uint64_t)
  
--- 4281,4287 ----
  			 NUM_TYPE_SUFFIXES, GROUP_none);
    }
  };
! SHAPE (ternary_mfloat8_lane);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, svmfloat8_t, svmfloat8_t, uint64_t)
  
*************** struct ternary_mfloat8_lane_group_select
*** 4281,4287 ****
      gcc_unreachable ();
    }
  };
! SHAPE (ternary_mfloat8_lane_group_selection)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, svbfloatt16_t, svbfloat16_t)
     sv<t0>_t svfoo[_n_t0](sv<t0>_t, svbfloat16_t, bfloat16_t).  */
--- 4301,4307 ----
      gcc_unreachable ();
    }
  };
! SHAPE (ternary_mfloat8_lane_group_selection);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, svbfloatt16_t, svbfloat16_t)
     sv<t0>_t svfoo[_n_t0](sv<t0>_t, svbfloat16_t, bfloat16_t).  */
*************** struct ternary_bfloat_opt_n_def
*** 4296,4302 ****
      build_all (b, "v0,v0,vB,sB", group, MODE_n);
    }
  };
! SHAPE (ternary_bfloat_opt_n)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, svmfloatt8_t, svmfloat8_t)
     sv<t0>_t svfoo[_n_t0](sv<t0>_t, svmfloat8_t, bfloat8_t).  */
--- 4316,4322 ----
      build_all (b, "v0,v0,vB,sB", group, MODE_n);
    }
  };
! SHAPE (ternary_bfloat_opt_n);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, svmfloatt8_t, svmfloat8_t)
     sv<t0>_t svfoo[_n_t0](sv<t0>_t, svmfloat8_t, bfloat8_t).  */
*************** struct ternary_mfloat8_opt_n_def
*** 4333,4339 ****
  			 GROUP_none);
    }
  };
! SHAPE (ternary_mfloat8_opt_n)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0:int:quarter>_t, sv<t0:uint:quarter>_t,
  		       uint64_t)
--- 4353,4359 ----
  			 GROUP_none);
    }
  };
! SHAPE (ternary_mfloat8_opt_n);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0:int:quarter>_t, sv<t0:uint:quarter>_t,
  		       uint64_t)
*************** struct ternary_intq_uintq_lane_def
*** 4350,4356 ****
      build_all (b, "v0,v0,vqs0,vqu0,su64", group, MODE_none);
    }
  };
! SHAPE (ternary_intq_uintq_lane)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0:int:quarter>_t, sv<t0:uint:quarter>_t)
     sv<t0>_t svfoo[_n_t0](sv<t0>_t, sv<t0:int:quarter>_t,
--- 4370,4376 ----
      build_all (b, "v0,v0,vqs0,vqu0,su64", group, MODE_none);
    }
  };
! SHAPE (ternary_intq_uintq_lane);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0:int:quarter>_t, sv<t0:uint:quarter>_t)
     sv<t0>_t svfoo[_n_t0](sv<t0>_t, sv<t0:int:quarter>_t,
*************** struct ternary_intq_uintq_opt_n_def
*** 4367,4373 ****
      build_all (b, "v0,v0,vqs0,squ0", group, MODE_n);
    }
  };
! SHAPE (ternary_intq_uintq_opt_n)
  
  /* svbool_t svfoo[_<t0>](sv<t0>_t, sv<t0>_t, sv<t0>_t, uint64_t)
  
--- 4387,4393 ----
      build_all (b, "v0,v0,vqs0,squ0", group, MODE_n);
    }
  };
! SHAPE (ternary_intq_uintq_opt_n);
  
  /* svbool_t svfoo[_<t0>](sv<t0>_t, sv<t0>_t, sv<t0>_t, uint64_t)
  
*************** struct ternary_lane_def : public overloa
*** 4394,4400 ****
      return c.require_immediate_lane_index (3, 2);
    }
  };
! SHAPE (ternary_lane)
  
  /* svbool_t svfoo[_<t0>](sv<t0>_t, sv<t0>_t, sv<t0>_t, uint64_t, uint64_t)
  
--- 4414,4420 ----
      return c.require_immediate_lane_index (3, 2);
    }
  };
! SHAPE (ternary_lane);
  
  /* svbool_t svfoo[_<t0>](sv<t0>_t, sv<t0>_t, sv<t0>_t, uint64_t, uint64_t)
  
*************** struct ternary_lane_rotate_def : public
*** 4423,4429 ****
  	    && c.require_immediate_one_of (4, 0, 90, 180, 270));
    }
  };
! SHAPE (ternary_lane_rotate)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0:half>_t, sv<t0:half>_t, uint64_t)
  
--- 4443,4449 ----
  	    && c.require_immediate_one_of (4, 0, 90, 180, 270));
    }
  };
! SHAPE (ternary_lane_rotate);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0:half>_t, sv<t0:half>_t, uint64_t)
  
*************** struct ternary_long_lane_def
*** 4445,4451 ****
      return c.require_immediate_lane_index (3, 2);
    }
  };
! SHAPE (ternary_long_lane)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0:half>_t, sv<t0:half>_t)
     sv<t0>_t svfoo[_n_t0](sv<t0>_t, sv<t0:half>_t, <t0:half>_t)
--- 4465,4471 ----
      return c.require_immediate_lane_index (3, 2);
    }
  };
! SHAPE (ternary_long_lane);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0:half>_t, sv<t0:half>_t)
     sv<t0>_t svfoo[_n_t0](sv<t0>_t, sv<t0:half>_t, <t0:half>_t)
*************** struct ternary_long_opt_n_def
*** 4464,4470 ****
      build_all (b, "v0,v0,vh0,sh0", group, MODE_n);
    }
  };
! SHAPE (ternary_long_opt_n)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0>_t, sv<t0>_t)
     sv<t0>_t svfoo[_n_t0](sv<t0>_t, sv<t0>_t, <t0>_t)
--- 4484,4490 ----
      build_all (b, "v0,v0,vh0,sh0", group, MODE_n);
    }
  };
! SHAPE (ternary_long_opt_n);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0>_t, sv<t0>_t)
     sv<t0>_t svfoo[_n_t0](sv<t0>_t, sv<t0>_t, <t0>_t)
*************** struct ternary_opt_n_def : public overlo
*** 4487,4493 ****
      return r.resolve_uniform_opt_n (3);
    }
  };
! SHAPE (ternary_opt_n)
  
  /* A choice between:
  
--- 4507,4513 ----
      return r.resolve_uniform_opt_n (3);
    }
  };
! SHAPE (ternary_opt_n);
  
  /* A choice between:
  
*************** struct ternary_qq_or_011_lane_def : publ
*** 4531,4537 ****
      return r.resolve_to (r.mode_suffix_id, type0, type1);
    }
  };
! SHAPE (ternary_qq_or_011_lane)
  
  /* svbool_t svfoo[_<t0>](sv<t0>_t, sv<t0:quarter>_t, sv<t0:quarter>_t,
  			 uint64_t)
--- 4551,4557 ----
      return r.resolve_to (r.mode_suffix_id, type0, type1);
    }
  };
! SHAPE (ternary_qq_or_011_lane);
  
  /* svbool_t svfoo[_<t0>](sv<t0>_t, sv<t0:quarter>_t, sv<t0:quarter>_t,
  			 uint64_t)
*************** struct ternary_qq_lane_rotate_def : publ
*** 4572,4578 ****
  	    && c.require_immediate_one_of (4, 0, 90, 180, 270));
    }
  };
! SHAPE (ternary_qq_lane_rotate)
  
  /* A choice between:
  
--- 4592,4598 ----
  	    && c.require_immediate_one_of (4, 0, 90, 180, 270));
    }
  };
! SHAPE (ternary_qq_lane_rotate);
  
  /* A choice between:
  
*************** struct ternary_qq_opt_n_or_011_def
*** 4631,4637 ****
      return r.resolve_to (r.mode_suffix_id, type0, type1);
    }
  };
! SHAPE (ternary_qq_opt_n_or_011)
  
  /* svbool_t svfoo[_<t0>](sv<t0>_t, sv<t0:quarter>_t, sv<t0:quarter>_t,
  			 uint64_t)
--- 4651,4657 ----
      return r.resolve_to (r.mode_suffix_id, type0, type1);
    }
  };
! SHAPE (ternary_qq_opt_n_or_011);
  
  /* svbool_t svfoo[_<t0>](sv<t0>_t, sv<t0:quarter>_t, sv<t0:quarter>_t,
  			 uint64_t)
*************** struct ternary_qq_rotate_def : public ov
*** 4670,4676 ****
      return c.require_immediate_one_of (3, 0, 90, 180, 270);
    }
  };
! SHAPE (ternary_qq_rotate)
  
  /* svbool_t svfoo[_<t0>](sv<t0>_t, sv<t0>_t, sv<t0>_t, uint64_t)
  
--- 4690,4696 ----
      return c.require_immediate_one_of (3, 0, 90, 180, 270);
    }
  };
! SHAPE (ternary_qq_rotate);
  
  /* svbool_t svfoo[_<t0>](sv<t0>_t, sv<t0>_t, sv<t0>_t, uint64_t)
  
*************** struct ternary_rotate_def : public overl
*** 4697,4703 ****
      return c.require_immediate_one_of (3, 0, 90, 180, 270);
    }
  };
! SHAPE (ternary_rotate)
  
  /* sv<t0>_t svfoo[_n_t0])(sv<t0>_t, sv<t0>_t, uint64_t)
  
--- 4717,4723 ----
      return c.require_immediate_one_of (3, 0, 90, 180, 270);
    }
  };
! SHAPE (ternary_rotate);
  
  /* sv<t0>_t svfoo[_n_t0])(sv<t0>_t, sv<t0>_t, uint64_t)
  
*************** struct ternary_shift_left_imm_def : publ
*** 4712,4718 ****
      return c.require_immediate_range (2, 0, bits - 1);
    }
  };
! SHAPE (ternary_shift_left_imm)
  
  /* sv<t0>_t svfoo[_n_t0])(sv<t0>_t, sv<t0>_t, uint64_t)
  
--- 4732,4738 ----
      return c.require_immediate_range (2, 0, bits - 1);
    }
  };
! SHAPE (ternary_shift_left_imm);
  
  /* sv<t0>_t svfoo[_n_t0])(sv<t0>_t, sv<t0>_t, uint64_t)
  
*************** struct ternary_shift_right_imm_def : pub
*** 4727,4733 ****
      return c.require_immediate_range (2, 1, bits);
    }
  };
! SHAPE (ternary_shift_right_imm)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0>_t, sv<t0:uint>_t).  */
  struct ternary_uint_def : public overloaded_base<0>
--- 4747,4753 ----
      return c.require_immediate_range (2, 1, bits);
    }
  };
! SHAPE (ternary_shift_right_imm);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0>_t, sv<t0:uint>_t).  */
  struct ternary_uint_def : public overloaded_base<0>
*************** struct ternary_uint_def : public overloa
*** 4753,4759 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (ternary_uint)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, svu<t0:uint:quarter>_t,
  		       sv<t0:int:quarter>_t).  */
--- 4773,4779 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (ternary_uint);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, svu<t0:uint:quarter>_t,
  		       sv<t0:int:quarter>_t).  */
*************** struct ternary_uintq_intq_def
*** 4768,4774 ****
      build_all (b, "v0,v0,vqu0,vqs0", group, MODE_none);
    }
  };
! SHAPE (ternary_uintq_intq)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0:uint:quarter>_t, sv<t0:int:quarter>_t,
  		       uint64_t)
--- 4788,4794 ----
      build_all (b, "v0,v0,vqu0,vqs0", group, MODE_none);
    }
  };
! SHAPE (ternary_uintq_intq);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0:uint:quarter>_t, sv<t0:int:quarter>_t,
  		       uint64_t)
*************** struct ternary_uintq_intq_lane_def
*** 4785,4791 ****
      build_all (b, "v0,v0,vqu0,vqs0,su64", group, MODE_none);
    }
  };
! SHAPE (ternary_uintq_intq_lane)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0:uint:quarter>_t, sv<t0:int:quarter>_t)
     sv<t0>_t svfoo[_n_t0](sv<t0>_t, sv<t0:uint:quarter>_t,
--- 4805,4811 ----
      build_all (b, "v0,v0,vqu0,vqs0,su64", group, MODE_none);
    }
  };
! SHAPE (ternary_uintq_intq_lane);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0:uint:quarter>_t, sv<t0:int:quarter>_t)
     sv<t0>_t svfoo[_n_t0](sv<t0>_t, sv<t0:uint:quarter>_t,
*************** struct ternary_uintq_intq_opt_n_def
*** 4802,4808 ****
      build_all (b, "v0,v0,vqu0,sqs0", group, MODE_n);
    }
  };
! SHAPE (ternary_uintq_intq_opt_n)
  
  /* svbool_t svfoo[_<t0>](sv<t0>_t, sv<t0>_t, uint64_t)
  
--- 4822,4828 ----
      build_all (b, "v0,v0,vqu0,sqs0", group, MODE_n);
    }
  };
! SHAPE (ternary_uintq_intq_opt_n);
  
  /* svbool_t svfoo[_<t0>](sv<t0>_t, sv<t0>_t, uint64_t)
  
*************** struct tmad_def : public overloaded_base
*** 4829,4835 ****
      return c.require_immediate_range (2, 0, 7);
    }
  };
! SHAPE (tmad)
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t)
  
--- 4849,4855 ----
      return c.require_immediate_range (2, 0, 7);
    }
  };
! SHAPE (tmad);
  
  /* sv<t0>_t svfoo[_t0](sv<t0>_t)
  
*************** struct unary_def : public overloaded_bas
*** 4850,4856 ****
      return r.resolve_unary ();
    }
  };
! SHAPE (unary)
  
  /* sv<t0>_t svfoo_t0[_t1](sv<t1>_t)
  
--- 4870,4876 ----
      return r.resolve_unary ();
    }
  };
! SHAPE (unary);
  
  /* sv<t0>_t svfoo_t0[_t1](sv<t1>_t)
  
*************** struct unary_convert_def : public overlo
*** 4872,4878 ****
  			    r.type_suffix (0).element_bits);
    }
  };
! SHAPE (unary_convert)
  
  /* sv<t0>_t svfoo_t0[_t1](sv<t0>_t, sv<t1>_t)
  
--- 4892,4898 ----
  			    r.type_suffix (0).element_bits);
    }
  };
! SHAPE (unary_convert);
  
  /* sv<t0>_t svfoo_t0[_t1](sv<t0>_t, sv<t1>_t)
  
*************** struct unary_convert_narrowt_def : publi
*** 4901,4907 ****
  			    r.type_suffix (0).element_bits, true);
    }
  };
! SHAPE (unary_convert_narrowt)
  
  /* sv<t0>_t svfoo_t0[_t1_g](sv<t0>_t, sv<t1>x<g_t, fpm_t)
  
--- 4921,4927 ----
  			    r.type_suffix (0).element_bits, true);
    }
  };
! SHAPE (unary_convert_narrowt);
  
  /* sv<t0>_t svfoo_t0[_t1_g](sv<t0>_t, sv<t1>x<g_t, fpm_t)
  
*************** struct unary_convertxn_narrowt_def : pub
*** 4941,4947 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (unary_convertxn_narrowt)
  
  /* sv<t0>x<g0>_t svfoo_t0[_t1_g](sv<t1>x<g1>_t)
  
--- 4961,4967 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (unary_convertxn_narrowt);
  
  /* sv<t0>x<g0>_t svfoo_t0[_t1_g](sv<t1>x<g1>_t)
  
*************** struct unary_convertxn_def : public unar
*** 4973,4979 ****
      return r.resolve_conversion (r.mode_suffix_id, type);
    }
  };
! SHAPE (unary_convertxn)
  
  /* sv<t0>_t svfoo_t0[_t1_g](sv<t1>x<g1>_t)
  
--- 4993,4999 ----
      return r.resolve_conversion (r.mode_suffix_id, type);
    }
  };
! SHAPE (unary_convertxn);
  
  /* sv<t0>_t svfoo_t0[_t1_g](sv<t1>x<g1>_t)
  
*************** struct unary_convertxn_narrow_def : publ
*** 5009,5015 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (unary_convertxn_narrow)
  
  /* sv<t0>_t svfoo_<t0>(sv<t0>_t, uint64_t)
  
--- 5029,5035 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (unary_convertxn_narrow);
  
  /* sv<t0>_t svfoo_<t0>(sv<t0>_t, uint64_t)
  
*************** struct unary_lane_def : public overloade
*** 5036,5042 ****
      return c.require_immediate_lane_index (1, 0);
    }
  };
! SHAPE (unary_lane)
  
  /* sv<t0>_t svfoo[_t0](sv<t0:half>_t).  */
  struct unary_long_def : public overloaded_base<0>
--- 5056,5062 ----
      return c.require_immediate_lane_index (1, 0);
    }
  };
! SHAPE (unary_lane);
  
  /* sv<t0>_t svfoo[_t0](sv<t0:half>_t).  */
  struct unary_long_def : public overloaded_base<0>
*************** struct unary_long_def : public overloade
*** 5064,5070 ****
      return r.report_no_such_form (type);
    }
  };
! SHAPE (unary_long)
  
  /* sv<t0>_t svfoo[_n]_t0(<t0>_t).  */
  struct unary_n_def : public overloaded_base<1>
--- 5084,5090 ----
      return r.report_no_such_form (type);
    }
  };
! SHAPE (unary_long);
  
  /* sv<t0>_t svfoo[_n]_t0(<t0>_t).  */
  struct unary_n_def : public overloaded_base<1>
*************** struct unary_n_def : public overloaded_b
*** 5084,5106 ****
      gcc_unreachable ();
    }
  };
! SHAPE (unary_n)
  
  /* sv<t0:half>_t svfoo[_t0](sv<t0>_t).  */
  typedef unary_narrowb_base<> unary_narrowb_def;
! SHAPE (unary_narrowb)
  
  /* sv<t0:half>_t svfoo[_t0](sv<t0:half>_t, sv<t0>_t).  */
  typedef unary_narrowt_base<> unary_narrowt_def;
! SHAPE (unary_narrowt)
  
  /* sv<t0:uint:half>_t svfoo[_t0](sv<t0>_t).  */
  typedef unary_narrowb_base<TYPE_unsigned> unary_narrowb_to_uint_def;
! SHAPE (unary_narrowb_to_uint)
  
  /* sv<t0:uint:half>_t svfoo[_t0](sv<t0:uint:half>_t, sv<t0>_t).  */
  typedef unary_narrowt_base<TYPE_unsigned> unary_narrowt_to_uint_def;
! SHAPE (unary_narrowt_to_uint)
  
  /* svbool_t svfoo(svbool_t).  */
  struct unary_pred_def : public nonoverloaded_base
--- 5104,5126 ----
      gcc_unreachable ();
    }
  };
! SHAPE (unary_n);
  
  /* sv<t0:half>_t svfoo[_t0](sv<t0>_t).  */
  typedef unary_narrowb_base<> unary_narrowb_def;
! SHAPE (unary_narrowb);
  
  /* sv<t0:half>_t svfoo[_t0](sv<t0:half>_t, sv<t0>_t).  */
  typedef unary_narrowt_base<> unary_narrowt_def;
! SHAPE (unary_narrowt);
  
  /* sv<t0:uint:half>_t svfoo[_t0](sv<t0>_t).  */
  typedef unary_narrowb_base<TYPE_unsigned> unary_narrowb_to_uint_def;
! SHAPE (unary_narrowb_to_uint);
  
  /* sv<t0:uint:half>_t svfoo[_t0](sv<t0:uint:half>_t, sv<t0>_t).  */
  typedef unary_narrowt_base<TYPE_unsigned> unary_narrowt_to_uint_def;
! SHAPE (unary_narrowt_to_uint);
  
  /* svbool_t svfoo(svbool_t).  */
  struct unary_pred_def : public nonoverloaded_base
*************** struct unary_pred_def : public nonoverlo
*** 5111,5117 ****
      build_all (b, "v0,v0", group, MODE_none);
    }
  };
! SHAPE (unary_pred)
  
  /* sv<t0:int>_t svfoo[_t0](sv<t0>_t)
  
--- 5131,5137 ----
      build_all (b, "v0,v0", group, MODE_none);
    }
  };
! SHAPE (unary_pred);
  
  /* sv<t0:int>_t svfoo[_t0](sv<t0>_t)
  
*************** struct unary_to_int_def : public overloa
*** 5132,5138 ****
      return r.resolve_unary (TYPE_signed);
    }
  };
! SHAPE (unary_to_int)
  
  /* sv<t0:uint>_t svfoo[_t0](sv<t0>_t)
  
--- 5152,5158 ----
      return r.resolve_unary (TYPE_signed);
    }
  };
! SHAPE (unary_to_int);
  
  /* sv<t0:uint>_t svfoo[_t0](sv<t0>_t)
  
*************** struct unary_to_uint_def : public overlo
*** 5153,5159 ****
      return r.resolve_unary (TYPE_unsigned);
    }
  };
! SHAPE (unary_to_uint)
  
  /* sv<t0>_t svfoo[_t0](sv<t0:uint>_t)
  
--- 5173,5179 ----
      return r.resolve_unary (TYPE_unsigned);
    }
  };
! SHAPE (unary_to_uint);
  
  /* sv<t0>_t svfoo[_t0](sv<t0:uint>_t)
  
*************** struct unary_uint_def : public overloade
*** 5189,5195 ****
      return r.report_no_such_form (type);
    }
  };
! SHAPE (unary_uint)
  
  /* sv<t0>_t svfoo[_<t0>](sv<t0:half>_t)
  
--- 5209,5215 ----
      return r.report_no_such_form (type);
    }
  };
! SHAPE (unary_uint);
  
  /* sv<t0>_t svfoo[_<t0>](sv<t0:half>_t)
  
*************** struct unary_widen_def : public overload
*** 5230,5236 ****
      return r.report_no_such_form (type);
    }
  };
! SHAPE (unary_widen)
  
  /* void svfoo_t0[_t1](uint64_t, svbool_t, svbool_t, sv<t1>_t)
  
--- 5250,5256 ----
      return r.report_no_such_form (type);
    }
  };
! SHAPE (unary_widen);
  
  /* void svfoo_t0[_t1](uint64_t, svbool_t, svbool_t, sv<t1>_t)
  
*************** struct unary_za_m_def : public overloade
*** 5264,5270 ****
      return c.require_immediate_range (0, 0, c.num_za_tiles () - 1);
    }
  };
! SHAPE (unary_za_m)
  
  /* void svfoo_t0[_t1]_g(uint32_t, sv<t1>x<g>_t).  */
  struct unary_za_slice_def : public overloaded_base<1>
--- 5284,5290 ----
      return c.require_immediate_range (0, 0, c.num_za_tiles () - 1);
    }
  };
! SHAPE (unary_za_m);
  
  /* void svfoo_t0[_t1]_g(uint32_t, sv<t1>x<g>_t).  */
  struct unary_za_slice_def : public overloaded_base<1>
*************** struct unary_za_slice_def : public overl
*** 5289,5295 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (unary_za_slice)
  
  /* sv<t0>x<g>_t svfoo[_t0_g](sv<t0>x<g>_t).  */
  struct unaryxn_def : public unary_def
--- 5309,5315 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (unary_za_slice);
  
  /* sv<t0>x<g>_t svfoo[_t0_g](sv<t0>x<g>_t).  */
  struct unaryxn_def : public unary_def
*************** struct unaryxn_def : public unary_def
*** 5310,5316 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (unaryxn)
  
  /* void svfoo_t0[_t1_g](uint64_t, uint32_t, sv<t1>x<g>_t).  */
  struct write_za_def : public overloaded_base<1>
--- 5330,5336 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (unaryxn);
  
  /* void svfoo_t0[_t1_g](uint64_t, uint32_t, sv<t1>x<g>_t).  */
  struct write_za_def : public overloaded_base<1>
*************** struct write_za_def : public overloaded_
*** 5341,5347 ****
      return c.require_immediate_range (0, 0, c.num_za_tiles () - 1);
    }
  };
! SHAPE (write_za)
  
  /* void svfoo_t0[_t1](uint64_t, uint32_t, svbool_t, sv<t1>_t)
  
--- 5361,5367 ----
      return c.require_immediate_range (0, 0, c.num_za_tiles () - 1);
    }
  };
! SHAPE (write_za);
  
  /* void svfoo_t0[_t1](uint64_t, uint32_t, svbool_t, sv<t1>_t)
  
*************** struct write_za_m_def : public overloade
*** 5375,5381 ****
      return c.require_immediate_range (0, 0, c.num_za_tiles () - 1);
    }
  };
! SHAPE (write_za_m)
  
  /* void svfoo_t0[_t1_g](uint32_t, sv<t1>x<g>_t).  */
  struct write_za_slice_def : public overloaded_base<1>
--- 5395,5401 ----
      return c.require_immediate_range (0, 0, c.num_za_tiles () - 1);
    }
  };
! SHAPE (write_za_m);
  
  /* void svfoo_t0[_t1_g](uint32_t, sv<t1>x<g>_t).  */
  struct write_za_slice_def : public overloaded_base<1>
*************** struct write_za_slice_def : public overl
*** 5399,5405 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (write_za_slice)
  
  /* MOVT (vector to table)
     Variants are also available for:
--- 5419,5425 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (write_za_slice);
  
  /* MOVT (vector to table)
     Variants are also available for:
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-sve-builtins-shapes.h gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-shapes.h
*** gcc-17-20260628/gcc/config/aarch64/aarch64-sve-builtins-shapes.h	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-shapes.h	Sun Jul  5 22:32:07 2026
***************
*** 20,26 ****
  #ifndef GCC_AARCH64_SVE_BUILTINS_SHAPES_H
  #define GCC_AARCH64_SVE_BUILTINS_SHAPES_H
  
! namespace aarch64_sve
  {
    /* The naming convention is:
  
--- 20,26 ----
  #ifndef GCC_AARCH64_SVE_BUILTINS_SHAPES_H
  #define GCC_AARCH64_SVE_BUILTINS_SHAPES_H
  
! namespace aarch64_acle
  {
    /* The naming convention is:
  
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-sve-builtins-sme.cc gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-sme.cc
*** gcc-17-20260628/gcc/config/aarch64/aarch64-sve-builtins-sme.cc	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-sme.cc	Sun Jul  5 22:32:07 2026
***************
*** 37,49 ****
  #include "gimplify.h"
  #include "explow.h"
  #include "emit-rtl.h"
! #include "aarch64-sve-builtins.h"
  #include "aarch64-sve-builtins-shapes.h"
  #include "aarch64-sve-builtins-base.h"
  #include "aarch64-sve-builtins-sme.h"
  #include "aarch64-sve-builtins-functions.h"
  
! using namespace aarch64_sve;
  
  namespace {
  
--- 37,49 ----
  #include "gimplify.h"
  #include "explow.h"
  #include "emit-rtl.h"
! #include "aarch64-acle-builtins.h"
  #include "aarch64-sve-builtins-shapes.h"
  #include "aarch64-sve-builtins-base.h"
  #include "aarch64-sve-builtins-sme.h"
  #include "aarch64-sve-builtins-functions.h"
  
! using namespace aarch64_acle;
  
  namespace {
  
*************** public:
*** 609,615 ****
  
  } /* end anonymous namespace */
  
! namespace aarch64_sve {
  
  FUNCTION (arm_has_sme, arm_has_sme_impl, )
  FUNCTION (arm_in_streaming_mode, arm_in_streaming_mode_impl, )
--- 609,615 ----
  
  } /* end anonymous namespace */
  
! namespace aarch64_acle {
  
  FUNCTION (arm_has_sme, arm_has_sme_impl, )
  FUNCTION (arm_in_streaming_mode, arm_in_streaming_mode_impl, )
*************** FUNCTION (svzero_mask_za, svzero_mask_za
*** 700,703 ****
  FUNCTION (svzero_za, svzero_za_impl, )
  FUNCTION (svzero_zt, svzero_zt_impl, )
  
! } /* end namespace aarch64_sve */
--- 700,703 ----
  FUNCTION (svzero_za, svzero_za_impl, )
  FUNCTION (svzero_zt, svzero_zt_impl, )
  
! }
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-sve-builtins-sme.h gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-sme.h
*** gcc-17-20260628/gcc/config/aarch64/aarch64-sve-builtins-sme.h	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-sme.h	Sun Jul  5 22:32:07 2026
***************
*** 20,26 ****
  #ifndef GCC_AARCH64_SVE_BUILTINS_SME_H
  #define GCC_AARCH64_SVE_BUILTINS_SME_H
  
! namespace aarch64_sve
  {
    namespace functions
    {
--- 20,26 ----
  #ifndef GCC_AARCH64_SVE_BUILTINS_SME_H
  #define GCC_AARCH64_SVE_BUILTINS_SME_H
  
! namespace aarch64_acle
  {
    namespace functions
    {
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-sve-builtins-sve2.cc gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-sve2.cc
*** gcc-17-20260628/gcc/config/aarch64/aarch64-sve-builtins-sve2.cc	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-sve2.cc	Sun Jul  5 22:32:07 2026
***************
*** 40,52 ****
  #include "tree-vector-builder.h"
  #include "rtx-vector-builder.h"
  #include "vec-perm-indices.h"
! #include "aarch64-sve-builtins.h"
  #include "aarch64-sve-builtins-shapes.h"
  #include "aarch64-sve-builtins-base.h"
  #include "aarch64-sve-builtins-sve2.h"
  #include "aarch64-sve-builtins-functions.h"
  
! using namespace aarch64_sve;
  
  namespace {
  
--- 40,52 ----
  #include "tree-vector-builder.h"
  #include "rtx-vector-builder.h"
  #include "vec-perm-indices.h"
! #include "aarch64-acle-builtins.h"
  #include "aarch64-sve-builtins-shapes.h"
  #include "aarch64-sve-builtins-base.h"
  #include "aarch64-sve-builtins-sve2.h"
  #include "aarch64-sve-builtins-functions.h"
  
! using namespace aarch64_acle;
  
  namespace {
  
*************** public:
*** 1019,1025 ****
  
  } /* end anonymous namespace */
  
! namespace aarch64_sve {
  
  FUNCTION (svaba, svaba_impl,)
  FUNCTION (svabalb, unspec_based_add_function, (UNSPEC_SABDLB,
--- 1019,1025 ----
  
  } /* end anonymous namespace */
  
! namespace aarch64_acle {
  
  FUNCTION (svaba, svaba_impl,)
  FUNCTION (svabalb, unspec_based_add_function, (UNSPEC_SABDLB,
*************** FUNCTION (svzipq2, svzipq_impl, (1))
*** 1317,1320 ****
  FUNCTION (svluti2_lane, svluti_lane_impl, (2))
  FUNCTION (svluti4_lane, svluti_lane_impl, (4))
  
! } /* end namespace aarch64_sve */
--- 1317,1320 ----
  FUNCTION (svluti2_lane, svluti_lane_impl, (2))
  FUNCTION (svluti4_lane, svluti_lane_impl, (4))
  
! }
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-sve-builtins-sve2.def gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-sve2.def
*** gcc-17-20260628/gcc/config/aarch64/aarch64-sve-builtins-sve2.def	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-sve2.def	Sun Jul  5 22:32:07 2026
*************** DEF_SVE_FUNCTION (svstnt1w_scatter, stor
*** 195,202 ****
  DEF_SVE_FUNCTION (svstnt1w_scatter, store_scatter_offset_restricted, d_integer, implicit)
  #undef REQUIRED_EXTENSIONS
  
! #define REQUIRED_EXTENSIONS nonstreaming_sve (AARCH64_FL_SVE2 \
! 					      | AARCH64_FL_SVE_AES)
  DEF_SVE_FUNCTION (svaesd, binary, b_unsigned, none)
  DEF_SVE_FUNCTION (svaese, binary, b_unsigned, none)
  DEF_SVE_FUNCTION (svaesimc, unary, b_unsigned, none)
--- 195,203 ----
  DEF_SVE_FUNCTION (svstnt1w_scatter, store_scatter_offset_restricted, d_integer, implicit)
  #undef REQUIRED_EXTENSIONS
  
! #define REQUIRED_EXTENSIONS streaming_compatible (AARCH64_FL_SVE2 \
! 					    | AARCH64_FL_SVE_AES, \
! 					    AARCH64_FL_SSVE_AES)
  DEF_SVE_FUNCTION (svaesd, binary, b_unsigned, none)
  DEF_SVE_FUNCTION (svaese, binary, b_unsigned, none)
  DEF_SVE_FUNCTION (svaesimc, unary, b_unsigned, none)
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-sve-builtins-sve2.h gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-sve2.h
*** gcc-17-20260628/gcc/config/aarch64/aarch64-sve-builtins-sve2.h	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins-sve2.h	Sun Jul  5 22:32:07 2026
***************
*** 20,26 ****
  #ifndef GCC_AARCH64_SVE_BUILTINS_SVE2_H
  #define GCC_AARCH64_SVE_BUILTINS_SVE2_H
  
! namespace aarch64_sve
  {
    namespace functions
    {
--- 20,26 ----
  #ifndef GCC_AARCH64_SVE_BUILTINS_SVE2_H
  #define GCC_AARCH64_SVE_BUILTINS_SVE2_H
  
! namespace aarch64_acle
  {
    namespace functions
    {
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-sve-builtins.cc gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins.cc
*** gcc-17-20260628/gcc/config/aarch64/aarch64-sve-builtins.cc	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,5353 ****
- /* ACLE support for AArch64 SVE
-    Copyright (C) 2018-2026 Free Software Foundation, Inc.
- 
-    This file is part of GCC.
- 
-    GCC 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.
- 
-    GCC 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 GCC; see the file COPYING3.  If not see
-    <http://www.gnu.org/licenses/>.  */
- 
- #define IN_TARGET_CODE 1
- 
- #include "config.h"
- #include "system.h"
- #include "coretypes.h"
- #include "tm.h"
- #include "tree.h"
- #include "rtl.h"
- #include "tm_p.h"
- #include "memmodel.h"
- #include "insn-codes.h"
- #include "optabs.h"
- #include "recog.h"
- #include "diagnostic.h"
- #include "expr.h"
- #include "basic-block.h"
- #include "function.h"
- #include "fold-const.h"
- #include "gimple.h"
- #include "gimple-iterator.h"
- #include "gimplify.h"
- #include "explow.h"
- #include "emit-rtl.h"
- #include "tree-vector-builder.h"
- #include "stor-layout.h"
- #include "alias.h"
- #include "gimple-fold.h"
- #include "langhooks.h"
- #include "stringpool.h"
- #include "attribs.h"
- #include "value-range.h"
- #include "tree-ssanames.h"
- #include "aarch64-sve-builtins.h"
- #include "aarch64-sve-builtins-base.h"
- #include "aarch64-sve-builtins-sve2.h"
- #include "aarch64-sve-builtins-sme.h"
- #include "aarch64-sve-builtins-shapes.h"
- #include "aarch64-builtins.h"
- 
- using namespace aarch64;
- 
- namespace aarch64_sve {
- 
- /* Static information about each single-predicate or single-vector
-    ABI and ACLE type.  */
- struct vector_type_info
- {
-   /* The name of the type as declared by arm_sve.h.  */
-   const char *acle_name;
- 
-   /* The name of the type specified in AAPCS64.  The type is always
-      available under this name, even when arm_sve.h isn't included.  */
-   const char *abi_name;
- 
-   /* The C++ mangling of ABI_NAME.  */
-   const char *mangled_name;
- };
- 
- /* Describes a function decl.  */
- class GTY(()) registered_function
- {
- public:
-   /* The ACLE function that the decl represents.  */
-   function_instance instance GTY ((skip));
- 
-   /* The decl itself.  */
-   tree decl;
- 
-   /* The architecture extensions that the function requires.  */
-   aarch64_required_extensions required_extensions;
- 
-   /* True if the decl represents an overloaded function that needs to be
-      resolved by function_resolver.  */
-   bool overloaded_p;
- };
- 
- /* Hash traits for registered_function.  */
- struct registered_function_hasher : ggc_ptr_hash <registered_function>
- {
-   typedef function_instance compare_type;
- 
-   static hashval_t hash (value_type);
-   static bool equal (value_type, const compare_type &);
- };
- 
- /* Information about each single-predicate or single-vector type.  */
- static CONSTEXPR const vector_type_info vector_types[] = {
- #define DEF_SVE_TYPE(ACLE_NAME, NCHARS, ABI_NAME, SCALAR_TYPE) \
-   { #ACLE_NAME, #ABI_NAME, "u" #NCHARS #ABI_NAME },
- #include "aarch64-sve-builtins.def"
- };
- 
- /* The function name suffix associated with each predication type.  */
- static const char *const pred_suffixes[NUM_PREDS + 1] = {
-   "",
-   "",
-   "_m",
-   "_x",
-   "_z",
-   "_m",
-   ""
- };
- 
- /* Static information about each mode_suffix_index.  */
- CONSTEXPR const mode_suffix_info mode_suffixes[] = {
- #define VECTOR_TYPE_none NUM_VECTOR_TYPES
- #define DEF_SVE_MODE(NAME, BASE, DISPLACEMENT, UNITS) \
-   { "_" #NAME, VECTOR_TYPE_##BASE, VECTOR_TYPE_##DISPLACEMENT, UNITS_##UNITS },
- #include "aarch64-sve-builtins.def"
- #undef VECTOR_TYPE_none
-   { "", NUM_VECTOR_TYPES, NUM_VECTOR_TYPES, UNITS_none }
- };
- 
- /* Static information about each type_suffix_index.  */
- CONSTEXPR const type_suffix_info type_suffixes[NUM_TYPE_SUFFIXES + 1] = {
- #define DEF_SVE_NEON_TYPE_SUFFIX(NAME, ACLE_TYPE, CLASS, BITS, MODE, \
- 				 NEON64, NEON128) \
-   { "_" #NAME, \
-     VECTOR_TYPE_##ACLE_TYPE, \
-     TYPE_##CLASS, \
-     BITS, \
-     BITS / BITS_PER_UNIT, \
-     TYPE_##CLASS == TYPE_signed || TYPE_##CLASS == TYPE_unsigned, \
-     TYPE_##CLASS == TYPE_unsigned, \
-     TYPE_##CLASS == TYPE_float || TYPE_##CLASS == TYPE_bfloat, \
-     TYPE_##CLASS != TYPE_bool, \
-     TYPE_##CLASS == TYPE_bool, \
-     false, \
-     0, \
-     MODE, \
-     NEON64, \
-     NEON128 },
- #define DEF_SVE_TYPE_SUFFIX(NAME, ACLE_TYPE, CLASS, BITS, MODE) \
-   DEF_SVE_NEON_TYPE_SUFFIX (NAME, ACLE_TYPE, CLASS, BITS, MODE, \
- 			    ARM_NEON_H_TYPES_LAST, ARM_NEON_H_TYPES_LAST)
- #define DEF_SME_ZA_SUFFIX(NAME, BITS, MODE) \
-   { "_" #NAME, \
-     NUM_VECTOR_TYPES, \
-     NUM_TYPE_CLASSES, \
-     BITS, \
-     BITS / BITS_PER_UNIT, \
-     false, \
-     false, \
-     false, \
-     false, \
-     false, \
-     true, \
-     0, \
-     MODE, \
-     ARM_NEON_H_TYPES_LAST, \
-     ARM_NEON_H_TYPES_LAST },
- #include "aarch64-sve-builtins.def"
-   { "", NUM_VECTOR_TYPES, TYPE_bool, 0, 0, false, false, false, false,
-     false, false, 0, VOIDmode, ARM_NEON_H_TYPES_LAST, ARM_NEON_H_TYPES_LAST }
- };
- 
- CONSTEXPR const group_suffix_info group_suffixes[] = {
- #define DEF_SVE_GROUP_SUFFIX(NAME, VG, VECTORS_PER_TUPLE) \
-   { "_" #NAME, VG, VECTORS_PER_TUPLE },
- #include "aarch64-sve-builtins.def"
-   { "", 0, 1 }
- };
- 
- /* Define a TYPES_<combination> macro for each combination of type
-    suffixes that an ACLE function can have, where <combination> is the
-    name used in DEF_SVE_FUNCTION entries.
- 
-    Use S (T) for single type suffix T and D (T1, T2) for a pair of type
-    suffixes T1 and T2.  Use commas to separate the suffixes.
- 
-    Although the order shouldn't matter, the convention is to sort the
-    suffixes lexicographically after dividing suffixes into a type
-    class ("b", "f", etc.) and a numerical bit count.  */
- 
- /* _b8 _b16 _b32 _b64.  */
- #define TYPES_all_pred(S, D, T) \
-   S (b8), S (b16), S (b32), S (b64)
- 
- /* _c8 _c16 _c32 _c64.  */
- #define TYPES_all_count(S, D, T) \
-   S (c8), S (c16), S (c32), S (c64)
- 
- /* _b8 _b16 _b32 _b64
-    _c8 _c16 _c32 _c64.  */
- #define TYPES_all_pred_count(S, D, T) \
-   TYPES_all_pred (S, D, T), \
-   TYPES_all_count (S, D, T)
- 
- /* _f16 _f32 _f64.  */
- #define TYPES_all_float(S, D, T) \
-   S (f16), S (f32), S (f64)
- 
- /* _f32 _f64.  */
- #define TYPES_sd_float(S, D, T) \
-   S (f32), S (f64)
- 
- /* _s8 _s16 _s32 _s64.  */
- #define TYPES_all_signed(S, D, T) \
-   S (s8), S (s16), S (s32), S (s64)
- 
- /*     _f16 _f32 _f64
-    _s8 _s16 _s32 _s64.  */
- #define TYPES_all_float_and_signed(S, D, T) \
-   TYPES_all_float (S, D, T), TYPES_all_signed (S, D, T)
- 
- /* _u8 _u16 _u32 _u64.  */
- #define TYPES_all_unsigned(S, D, T) \
-   S (u8), S (u16), S (u32), S (u64)
- 
- /* _s8 _s16 _s32 _s64
-    _u8 _u16 _u32 _u64.  */
- #define TYPES_all_integer(S, D, T) \
-   TYPES_all_signed (S, D, T), TYPES_all_unsigned (S, D, T)
- 
- /*     _f16 _f32 _f64
-    _s8 _s16 _s32 _s64
-    _u8 _u16 _u32 _u64.  */
- #define TYPES_all_arith(S, D, T) \
-   TYPES_all_float (S, D, T), TYPES_all_integer (S, D, T)
- 
- #define TYPES_all_data(S, D, T) \
-   TYPES_b_data (S, D, T), \
-   TYPES_h_data (S, D, T), \
-   TYPES_s_data (S, D, T), \
-   TYPES_d_data (S, D, T)
- 
- /* _b only.  */
- #define TYPES_b(S, D, T) \
-   S (b)
- 
- /* _c only.  */
- #define TYPES_c(S, D, T) \
-   S (c)
- 
- /* _u8.  */
- #define TYPES_b_unsigned(S, D, T) \
-   S (u8)
- 
- /* _s8
-    _u8.  */
- #define TYPES_b_integer(S, D, T) \
-   S (s8), TYPES_b_unsigned (S, D, T)
- 
- /* _mf8
-    _s8
-    _u8.  */
- #define TYPES_b_data(S, D, T) \
-   S (mf8), TYPES_b_integer (S, D, T)
- 
- /* _s8 _s16
-    _u8 _u16.  */
- #define TYPES_bh_integer(S, D, T) \
-   S (s8), S (s16), S (u8), S (u16)
- 
- /* _u8 _u32.  */
- #define TYPES_bs_unsigned(S, D, T) \
-   S (u8), S (u32)
- 
- /* _s8 _s16 _s32.  */
- #define TYPES_bhs_signed(S, D, T) \
-   S (s8), S (s16), S (s32)
- 
- /* _u8 _u16 _u32.  */
- #define TYPES_bhs_unsigned(S, D, T) \
-   S (u8), S (u16), S (u32)
- 
- /* _s8 _s16 _s32
-    _u8 _u16 _u32.  */
- #define TYPES_bhs_integer(S, D, T) \
-   TYPES_bhs_signed (S, D, T), TYPES_bhs_unsigned (S, D, T)
- 
- #define TYPES_bh_data(S, D, T)			\
-   TYPES_b_data (S, D, T), \
-   TYPES_h_data (S, D, T)
- 
- #define TYPES_bhs_data(S, D, T)			\
-   TYPES_b_data (S, D, T), \
-   TYPES_h_data (S, D, T), \
-   TYPES_s_data (S, D, T)
- 
- /* _s16_s8  _s32_s16  _s64_s32
-    _u16_u8  _u32_u16  _u64_u32.  */
- #define TYPES_bhs_widen(S, D, T) \
-   D (s16, s8), D (s32, s16), D (s64, s32), \
-   D (u16, u8), D (u32, u16), D (u64, u32)
- 
- /* _bf16.  */
- #define TYPES_h_bfloat(S, D, T) \
-   S (bf16)
- 
- /* _f16.  */
- #define TYPES_h_float(S, D, T) \
-   S (f16)
- 
- /* _s16
-    _u16.  */
- #define TYPES_h_integer(S, D, T) \
-   S (s16), S (u16)
- 
- /* _bf16
-    _f16
-    _s16
-    _u16.  */
- #define TYPES_h_data(S, D, T) \
-   S (bf16), S (f16), TYPES_h_integer (S, D, T)
- 
- /* _s16 _s32.  */
- #define TYPES_hs_signed(S, D, T) \
-   S (s16), S (s32)
- 
- /* _s16 _s32
-    _u16 _u32.  */
- #define TYPES_hs_integer(S, D, T) \
-   TYPES_hs_signed (S, D, T), S (u16), S (u32)
- 
- /* _f16 _f32.  */
- #define TYPES_hs_float(S, D, T) \
-   S (f16), S (f32)
- 
- #define TYPES_hs_data(S, D, T) \
-   TYPES_h_data (S, D, T), \
-   TYPES_s_data (S, D, T)
- 
- /* _u16 _u64.  */
- #define TYPES_hd_unsigned(S, D, T) \
-   S (u16), S (u64)
- 
- /* _s16 _s32 _s64.  */
- #define TYPES_hsd_signed(S, D, T) \
-   S (s16), S (s32), S (s64)
- 
- /* _s16 _s32 _s64
-    _u16 _u32 _u64.  */
- #define TYPES_hsd_integer(S, D, T) \
-   TYPES_hsd_signed (S, D, T), S (u16), S (u32), S (u64)
- 
- #define TYPES_hsd_data(S, D, T) \
-   TYPES_h_data (S, D, T), \
-   TYPES_s_data (S, D, T), \
-   TYPES_d_data (S, D, T)
- 
- /* _f16_mf8.  */
- #define TYPES_h_float_mf8(S, D, T) \
-   D (f16, mf8)
- 
- /* _f32.  */
- #define TYPES_s_float(S, D, T) \
-   S (f32)
- 
- /* _f32_mf8.  */
- #define TYPES_s_float_mf8(S, D, T) \
-   D (f32, mf8)
- 
- /*      _f32
-    _s16 _s32 _s64
-    _u16 _u32 _u64.  */
- #define TYPES_s_float_hsd_integer(S, D, T) \
-   TYPES_s_float (S, D, T), TYPES_hsd_integer (S, D, T)
- 
- /* _f32
-    _s32 _s64
-    _u32 _u64.  */
- #define TYPES_s_float_sd_integer(S, D, T) \
-   TYPES_s_float (S, D, T), TYPES_sd_integer (S, D, T)
- 
- /* _s32.  */
- #define TYPES_s_signed(S, D, T) \
-   S (s32)
- 
- /* _u32.  */
- #define TYPES_s_unsigned(S, D, T) \
-   S (u32)
- 
- /* _s32
-    _u32.  */
- #define TYPES_s_integer(S, D, T) \
-   TYPES_s_signed (S, D, T), TYPES_s_unsigned (S, D, T)
- 
- /* _f32
-    _s32
-    _u32.  */
- #define TYPES_s_data(S, D, T) \
-   TYPES_s_float (S, D, T), TYPES_s_integer (S, D, T)
- 
- /* _s32 _s64.  */
- #define TYPES_sd_signed(S, D, T) \
-   S (s32), S (s64)
- 
- /* _u32 _u64.  */
- #define TYPES_sd_unsigned(S, D, T) \
-   S (u32), S (u64)
- 
- /* _s32 _s64
-    _u32 _u64.  */
- #define TYPES_sd_integer(S, D, T) \
-   TYPES_sd_signed (S, D, T), TYPES_sd_unsigned (S, D, T)
- 
- #define TYPES_sd_data(S, D, T) \
-   TYPES_s_data (S, D, T), \
-   TYPES_d_data (S, D, T)
- 
- /* _f16 _f32 _f64
- 	_s32 _s64
- 	_u32 _u64.  */
- #define TYPES_all_float_and_sd_integer(S, D, T) \
-   TYPES_all_float (S, D, T), TYPES_sd_integer (S, D, T)
- 
- /* _f64.  */
- #define TYPES_d_float(S, D, T) \
-   S (f64)
- 
- /* _u64.  */
- #define TYPES_d_unsigned(S, D, T) \
-   S (u64)
- 
- /* _s64
-    _u64.  */
- #define TYPES_d_integer(S, D, T) \
-   S (s64), TYPES_d_unsigned (S, D, T)
- 
- /* _f64
-    _s64
-    _u64.  */
- #define TYPES_d_data(S, D, T) \
-   TYPES_d_float (S, D, T), TYPES_d_integer (S, D, T)
- 
- /* All the type combinations allowed by svcvt.  */
- #define TYPES_cvt(S, D, T) \
-   D (f16, f32), D (f16, f64), \
-   D (f16, s16), D (f16, s32), D (f16, s64), \
-   D (f16, u16), D (f16, u32), D (f16, u64), \
-   \
-   D (f32, f16), D (f32, f64), \
-   D (f32, s32), D (f32, s64), \
-   D (f32, u32), D (f32, u64), \
-   \
-   D (f64, f16), D (f64, f32), \
-   D (f64, s32), D (f64, s64), \
-   D (f64, u32), D (f64, u64), \
-   \
-   D (s16, f16), \
-   D (s32, f16), D (s32, f32), D (s32, f64), \
-   D (s64, f16), D (s64, f32), D (s64, f64), \
-   \
-   D (u16, f16), \
-   D (u32, f16), D (u32, f32), D (u32, f64), \
-   D (u64, f16), D (u64, f32), D (u64, f64)
- 
- /* _bf16_f32.  */
- #define TYPES_cvt_bfloat(S, D, T) \
-   D (bf16, f32)
- 
- /* { _bf16 _f16 } x _f32.  */
- #define TYPES_cvt_h_s_float(S, D, T) \
-   D (bf16, f32), D (f16, f32)
- 
- /* _f32_f16.  */
- #define TYPES_cvt_f32_f16(S, D, T) \
-   D (f32, f16)
- 
- /* _f32_f16
-    _f64_f32.  */
- #define TYPES_cvt_long(S, D, T) \
-   D (f32, f16), D (f64, f32)
- 
- /* _f32_f64.  */
- #define TYPES_cvt_narrow_s(S, D, T) \
-   D (f32, f64)
- 
- /* _f16_f32
-    _f32_f64.  */
- #define TYPES_cvt_narrow(S, D, T) \
-   D (f16, f32), TYPES_cvt_narrow_s (S, D, T)
- 
- /* { _s32 _u32 } x _f32
- 
-    _f32 x { _s32 _u32 }.  */
- #define TYPES_cvt_s_s(S, D, T) \
-   D (s32, f32), \
-   D (u32, f32), \
-   D (f32, s32), \
-   D (f32, u32)
- 
- /* _f16_mf8
-    _bf16_mf8.  */
- #define TYPES_cvt_mf8(S, D, T) \
-   D (f16, mf8), D (bf16, mf8)
- 
- /* _mf8_f16
-    _mf8_bf16.  */
- #define TYPES_cvtn_mf8(S, D, T) \
-   D (mf8, f16), D (mf8, bf16)
- 
- /* _mf8_f32.  */
- #define TYPES_cvtnx_mf8(S, D, T) \
-   D (mf8, f32)
- 
- /* { _s32 _s64 } x { _b8 _b16 _b32 _b64 }
-    { _u32 _u64 }.  */
- #define TYPES_inc_dec_n1(D, A) \
-   D (A, b8), D (A, b16), D (A, b32), D (A, b64)
- #define TYPES_inc_dec_n(S, D, T) \
-   TYPES_inc_dec_n1 (D, s32), \
-   TYPES_inc_dec_n1 (D, s64), \
-   TYPES_inc_dec_n1 (D, u32), \
-   TYPES_inc_dec_n1 (D, u64)
- 
- /* { _s16 _u16 } x _s32
- 
-    {      _u16 } x _u32.  */
- #define TYPES_qcvt_x2(S, D, T) \
-   D (s16, s32), \
-   D (u16, u32), \
-   D (u16, s32)
- 
- /* { _s8  _u8  } x _s32
- 
-    {      _u8  } x _u32
- 
-    { _s16 _u16 } x _s64
- 
-    {      _u16 } x _u64.  */
- #define TYPES_qcvt_x4(S, D, T) \
-   D (s8, s32), \
-   D (u8, u32), \
-   D (u8, s32), \
-   D (s16, s64), \
-   D (u16, u64), \
-   D (u16, s64)
- 
- /* _s16_s32
-    _u16_u32.  */
- #define TYPES_qrshr_x2(S, D, T) \
-   D (s16, s32), \
-   D (u16, u32)
- 
- /* _u16_s32.  */
- #define TYPES_qrshru_x2(S, D, T) \
-   D (u16, s32)
- 
- /* _s8_s32
-    _s16_s64
-    _u8_u32
-    _u16_u64.  */
- #define TYPES_qrshr_x4(S, D, T) \
-   D (s8, s32), \
-   D (s16, s64), \
-   D (u8, u32), \
-   D (u16, u64)
- 
- /* _u8_s32
-    _u16_s64.  */
- #define TYPES_qrshru_x4(S, D, T) \
-   D (u8, s32), \
-   D (u16, s64)
- 
- /* { _mf8 _bf16          }   { _mf8 _bf16          }
-    {      _f16 _f32 _f64 }   {      _f16 _f32 _f64 }
-    { _s8  _s16 _s32 _s64 } x { _s8  _s16 _s32 _s64 }
-    { _u8  _u16 _u32 _u64 }   { _u8  _u16 _u32 _u64 }.  */
- #define TYPES_reinterpret1(D, A) \
-   D (A, mf8), \
-   D (A, bf16), \
-   D (A, f16), D (A, f32), D (A, f64), \
-   D (A, s8), D (A, s16), D (A, s32), D (A, s64), \
-   D (A, u8), D (A, u16), D (A, u32), D (A, u64)
- #define TYPES_reinterpret(S, D, T) \
-   TYPES_reinterpret1 (D, mf8), \
-   TYPES_reinterpret1 (D, bf16), \
-   TYPES_reinterpret1 (D, f16), \
-   TYPES_reinterpret1 (D, f32), \
-   TYPES_reinterpret1 (D, f64), \
-   TYPES_reinterpret1 (D, s8), \
-   TYPES_reinterpret1 (D, s16), \
-   TYPES_reinterpret1 (D, s32), \
-   TYPES_reinterpret1 (D, s64), \
-   TYPES_reinterpret1 (D, u8), \
-   TYPES_reinterpret1 (D, u16), \
-   TYPES_reinterpret1 (D, u32), \
-   TYPES_reinterpret1 (D, u64)
- 
- /* _b_c
-    _c_b.  */
- #define TYPES_reinterpret_b(S, D, T) \
-   D (b, c), \
-   D (c, b)
- 
- /* { _b8 _b16 _b32 _b64 } x { _s32 _s64 }
- 			    { _u32 _u64 } */
- #define TYPES_while1(D, bn) \
-   D (bn, s32), D (bn, s64), D (bn, u32), D (bn, u64)
- #define TYPES_while(S, D, T) \
-   TYPES_while1 (D, b8), \
-   TYPES_while1 (D, b16), \
-   TYPES_while1 (D, b32), \
-   TYPES_while1 (D, b64)
- 
- /* { _b8 _b16 _b32 _b64 } x { _s64 }
- 			    { _u64 } */
- #define TYPES_while_x(S, D, T) \
-   D (b8, s64), D (b8, u64), \
-   D (b16, s64), D (b16, u64), \
-   D (b32, s64), D (b32, u64), \
-   D (b64, s64), D (b64, u64)
- 
- /* { _c8 _c16 _c32 _c64 } x { _s64 }
- 			    { _u64 } */
- #define TYPES_while_x_c(S, D, T) \
-   D (c8, s64), D (c8, u64), \
-   D (c16, s64), D (c16, u64), \
-   D (c32, s64), D (c32, u64), \
-   D (c64, s64), D (c64, u64)
- 
- /* _f32_f16
-    _s32_s16
-    _u32_u16.  */
- #define TYPES_s_narrow_fsu(S, D, T) \
-   D (f32, f16), D (s32, s16), D (u32, u16)
- 
- /* _za8 _za16 _za32 _za64 _za128.  */
- #define TYPES_all_za(S, D, T) \
-   S (za8), S (za16), S (za32), S (za64), S (za128)
- 
- /* _za64.  */
- #define TYPES_d_za(S, D, T) \
-   S (za64)
- 
- /* {   _za8 } x {  _mf8       _s8  _u8 }
- 
-    {  _za16 } x { _bf16 _f16 _s16 _u16 }
- 
-    {  _za32 } x {       _f32 _s32 _u32 }
- 
-    {  _za64 } x {       _f64 _s64 _u64 }.  */
- #define TYPES_za_bhsd_data(S, D, T) \
-   D (za8, mf8), D (za8, s8), D (za8, u8), \
-   D (za16, bf16), D (za16, f16), D (za16, s16), D (za16, u16), \
-   D (za32, f32), D (za32, s32), D (za32, u32), \
-   D (za64, f64), D (za64, s64), D (za64, u64)
- 
- /* Likewise, plus:
- 
-    { _za128 } x {      _bf16           }
- 		{       _f16 _f32 _f64 }
- 		{ _s8   _s16 _s32 _s64 }
- 		{ _u8   _u16 _u32 _u64 }.  */
- 
- #define TYPES_za_all_data(S, D, T) \
-   TYPES_za_bhsd_data (S, D, T), \
-   TYPES_reinterpret1 (D, za128)
- 
- /* _za16_mf8.  */
- #define TYPES_za_h_mf8(S, D, T) \
-   D (za16, mf8)
- 
- /* { _za_16 _za_32 } x _mf8.  */
- #define TYPES_za_hs_mf8(S, D, T) \
-   D (za16, mf8), D (za32, mf8)
- 
- /* _za16_bf16.  */
- #define TYPES_za_h_bfloat(S, D, T) \
-   D (za16, bf16)
- 
- /* _za16_f16.  */
- #define TYPES_za_h_float(S, D, T) \
-   D (za16, f16)
- 
- /* _za32_s8.  */
- #define TYPES_za_s_b_signed(S, D, T) \
-    D (za32, s8)
- 
- /* _za32_u8.  */
- #define TYPES_za_s_b_unsigned(S, D, T) \
-    D (za32, u8)
- 
- /* _za32 x { _s8 _u8 }.  */
- #define TYPES_za_s_b_integer(S, D, T) \
-   D (za32, s8), D (za32, u8)
- 
- /* _za32 x { _s16 _u16 }.  */
- #define TYPES_za_s_h_integer(S, D, T) \
-   D (za32, s16), D (za32, u16)
- 
- /* _za32 x { _bf16 _f16 _s16 _u16 }.  */
- #define TYPES_za_s_h_data(S, D, T) \
-   D (za32, bf16), D (za32, f16), D (za32, s16), D (za32, u16)
- 
- /* _za32_u32.  */
- #define TYPES_za_s_unsigned(S, D, T) \
-   D (za32, u32)
- 
- /* _za32 x { _s32 _u32 }.  */
- #define TYPES_za_s_integer(S, D, T) \
-   D (za32, s32), D (za32, u32)
- 
- /* _za32_mf8.  */
- #define TYPES_za_s_mf8(S, D, T) \
-   D (za32, mf8)
- 
- /* _za32_f32.  */
- #define TYPES_za_s_float(S, D, T) \
-   D (za32, f32)
- 
- /* _za32 x { _f32 _s32 _u32 }.  */
- #define TYPES_za_s_data(S, D, T) \
-   D (za32, f32), D (za32, s32), D (za32, u32)
- 
- /* _za64 x { _s16 _u16 }.  */
- #define TYPES_za_d_h_integer(S, D, T) \
-   D (za64, s16), D (za64, u16)
- 
- /* _za64_f64.  */
- #define TYPES_za_d_float(S, D, T) \
-   D (za64, f64)
- 
- /* _za64 x { _s64 _u64 }.  */
- #define TYPES_za_d_integer(S, D, T) \
-   D (za64, s64), D (za64, u64)
- 
- /* _za32 x { _s8 _u8 _bf16 _f16 _f32 }.  */
- #define TYPES_mop_base(S, D, T) \
-   D (za32, s8), D (za32, u8), D (za32, bf16), D (za32, f16), D (za32, f32)
- 
- /* _za32_s8.  */
- #define TYPES_mop_base_signed(S, D, T) \
-   D (za32, s8)
- 
- /* _za32_u8.  */
- #define TYPES_mop_base_unsigned(S, D, T) \
-   D (za32, u8)
- 
- /* _za64 x { _s16 _u16 }.  */
- #define TYPES_mop_i16i64(S, D, T) \
-   D (za64, s16), D (za64, u16)
- 
- /* _za64_s16.  */
- #define TYPES_mop_i16i64_signed(S, D, T) \
-   D (za64, s16)
- 
- /* _za64_u16.  */
- #define TYPES_mop_i16i64_unsigned(S, D, T) \
-   D (za64, u16)
- 
- /* _za.  */
- #define TYPES_za(S, D, T) \
-   S (za)
- 
- /* Describe a tuple of type suffixes in which only the first is used.  */
- #define DEF_VECTOR_TYPE(X) \
-   { TYPE_SUFFIX_ ## X, NUM_TYPE_SUFFIXES, NUM_TYPE_SUFFIXES }
- 
- /* Describe a tuple of type suffixes in which only the first two are used.  */
- #define DEF_DOUBLE_TYPE(X, Y) \
-   { TYPE_SUFFIX_ ## X, TYPE_SUFFIX_ ## Y, NUM_TYPE_SUFFIXES }
- 
- /* Describe a tuple of type suffixes in which three elements are used.  */
- #define DEF_TRIPLE_TYPE(X, Y, Z) \
-   { TYPE_SUFFIX_ ## X, TYPE_SUFFIX_ ## Y, TYPE_SUFFIX_ ## Z }
- 
- /* Create an array that can be used in aarch64-sve-builtins.def to
-    select the type suffixes in TYPES_<NAME>.  */
- #define DEF_SVE_TYPES_ARRAY(NAME) \
-   static const type_suffix_triple types_##NAME[] = { \
-     TYPES_##NAME (DEF_VECTOR_TYPE, DEF_DOUBLE_TYPE, DEF_TRIPLE_TYPE), \
-     { NUM_TYPE_SUFFIXES, NUM_TYPE_SUFFIXES, NUM_TYPE_SUFFIXES } \
-   }
- 
- /* For functions that don't take any type suffixes.  */
- static const type_suffix_triple types_none[] = {
-   { NUM_TYPE_SUFFIXES, NUM_TYPE_SUFFIXES, NUM_TYPE_SUFFIXES },
-   { NUM_TYPE_SUFFIXES, NUM_TYPE_SUFFIXES, NUM_TYPE_SUFFIXES }
- };
- 
- /* Create an array for each TYPES_<combination> macro above.  */
- DEF_SVE_TYPES_ARRAY (all_pred);
- DEF_SVE_TYPES_ARRAY (all_count);
- DEF_SVE_TYPES_ARRAY (all_pred_count);
- DEF_SVE_TYPES_ARRAY (all_float);
- DEF_SVE_TYPES_ARRAY (all_signed);
- DEF_SVE_TYPES_ARRAY (all_float_and_signed);
- DEF_SVE_TYPES_ARRAY (all_unsigned);
- DEF_SVE_TYPES_ARRAY (all_integer);
- DEF_SVE_TYPES_ARRAY (all_arith);
- DEF_SVE_TYPES_ARRAY (all_data);
- DEF_SVE_TYPES_ARRAY (b);
- DEF_SVE_TYPES_ARRAY (b_unsigned);
- DEF_SVE_TYPES_ARRAY (b_integer);
- DEF_SVE_TYPES_ARRAY (bh_integer);
- DEF_SVE_TYPES_ARRAY (bs_unsigned);
- DEF_SVE_TYPES_ARRAY (bhs_signed);
- DEF_SVE_TYPES_ARRAY (bhs_unsigned);
- DEF_SVE_TYPES_ARRAY (bhs_integer);
- DEF_SVE_TYPES_ARRAY (bh_data);
- DEF_SVE_TYPES_ARRAY (bhs_data);
- DEF_SVE_TYPES_ARRAY (bhs_widen);
- DEF_SVE_TYPES_ARRAY (c);
- DEF_SVE_TYPES_ARRAY (h_bfloat);
- DEF_SVE_TYPES_ARRAY (h_float);
- DEF_SVE_TYPES_ARRAY (h_float_mf8);
- DEF_SVE_TYPES_ARRAY (h_integer);
- DEF_SVE_TYPES_ARRAY (h_data);
- DEF_SVE_TYPES_ARRAY (hs_signed);
- DEF_SVE_TYPES_ARRAY (hs_integer);
- DEF_SVE_TYPES_ARRAY (hs_float);
- DEF_SVE_TYPES_ARRAY (hs_data);
- DEF_SVE_TYPES_ARRAY (hd_unsigned);
- DEF_SVE_TYPES_ARRAY (hsd_signed);
- DEF_SVE_TYPES_ARRAY (hsd_integer);
- DEF_SVE_TYPES_ARRAY (hsd_data);
- DEF_SVE_TYPES_ARRAY (s_float);
- DEF_SVE_TYPES_ARRAY (s_float_hsd_integer);
- DEF_SVE_TYPES_ARRAY (s_float_mf8);
- DEF_SVE_TYPES_ARRAY (s_float_sd_integer);
- DEF_SVE_TYPES_ARRAY (s_signed);
- DEF_SVE_TYPES_ARRAY (s_unsigned);
- DEF_SVE_TYPES_ARRAY (s_integer);
- DEF_SVE_TYPES_ARRAY (s_data);
- DEF_SVE_TYPES_ARRAY (sd_float);
- DEF_SVE_TYPES_ARRAY (sd_signed);
- DEF_SVE_TYPES_ARRAY (sd_unsigned);
- DEF_SVE_TYPES_ARRAY (sd_integer);
- DEF_SVE_TYPES_ARRAY (sd_data);
- DEF_SVE_TYPES_ARRAY (all_float_and_sd_integer);
- DEF_SVE_TYPES_ARRAY (d_float);
- DEF_SVE_TYPES_ARRAY (d_unsigned);
- DEF_SVE_TYPES_ARRAY (d_integer);
- DEF_SVE_TYPES_ARRAY (d_data);
- DEF_SVE_TYPES_ARRAY (cvt);
- DEF_SVE_TYPES_ARRAY (cvt_bfloat);
- DEF_SVE_TYPES_ARRAY (cvt_h_s_float);
- DEF_SVE_TYPES_ARRAY (cvt_f32_f16);
- DEF_SVE_TYPES_ARRAY (cvt_long);
- DEF_SVE_TYPES_ARRAY (cvt_mf8);
- DEF_SVE_TYPES_ARRAY (cvt_narrow_s);
- DEF_SVE_TYPES_ARRAY (cvt_narrow);
- DEF_SVE_TYPES_ARRAY (cvt_s_s);
- DEF_SVE_TYPES_ARRAY (cvtn_mf8);
- DEF_SVE_TYPES_ARRAY (cvtnx_mf8);
- DEF_SVE_TYPES_ARRAY (inc_dec_n);
- DEF_SVE_TYPES_ARRAY (qcvt_x2);
- DEF_SVE_TYPES_ARRAY (qcvt_x4);
- DEF_SVE_TYPES_ARRAY (qrshr_x2);
- DEF_SVE_TYPES_ARRAY (qrshr_x4);
- DEF_SVE_TYPES_ARRAY (qrshru_x2);
- DEF_SVE_TYPES_ARRAY (qrshru_x4);
- DEF_SVE_TYPES_ARRAY (reinterpret);
- DEF_SVE_TYPES_ARRAY (reinterpret_b);
- DEF_SVE_TYPES_ARRAY (while);
- DEF_SVE_TYPES_ARRAY (while_x);
- DEF_SVE_TYPES_ARRAY (while_x_c);
- DEF_SVE_TYPES_ARRAY (s_narrow_fsu);
- DEF_SVE_TYPES_ARRAY (all_za);
- DEF_SVE_TYPES_ARRAY (d_za);
- DEF_SVE_TYPES_ARRAY (za_bhsd_data);
- DEF_SVE_TYPES_ARRAY (za_all_data);
- DEF_SVE_TYPES_ARRAY (za_h_mf8);
- DEF_SVE_TYPES_ARRAY (za_h_bfloat);
- DEF_SVE_TYPES_ARRAY (za_h_float);
- DEF_SVE_TYPES_ARRAY (za_s_b_signed);
- DEF_SVE_TYPES_ARRAY (za_s_b_unsigned);
- DEF_SVE_TYPES_ARRAY (za_s_b_integer);
- DEF_SVE_TYPES_ARRAY (za_s_h_integer);
- DEF_SVE_TYPES_ARRAY (za_s_h_data);
- DEF_SVE_TYPES_ARRAY (za_s_unsigned);
- DEF_SVE_TYPES_ARRAY (za_s_integer);
- DEF_SVE_TYPES_ARRAY (za_s_mf8);
- DEF_SVE_TYPES_ARRAY (za_hs_mf8);
- DEF_SVE_TYPES_ARRAY (za_s_float);
- DEF_SVE_TYPES_ARRAY (za_s_data);
- DEF_SVE_TYPES_ARRAY (za_d_h_integer);
- DEF_SVE_TYPES_ARRAY (za_d_float);
- DEF_SVE_TYPES_ARRAY (za_d_integer);
- DEF_SVE_TYPES_ARRAY (mop_base);
- DEF_SVE_TYPES_ARRAY (mop_base_signed);
- DEF_SVE_TYPES_ARRAY (mop_base_unsigned);
- DEF_SVE_TYPES_ARRAY (mop_i16i64);
- DEF_SVE_TYPES_ARRAY (mop_i16i64_signed);
- DEF_SVE_TYPES_ARRAY (mop_i16i64_unsigned);
- DEF_SVE_TYPES_ARRAY (za);
- 
- static const group_suffix_index groups_none[] = {
-   GROUP_none, NUM_GROUP_SUFFIXES
- };
- 
- static const group_suffix_index groups_x2[] = { GROUP_x2, NUM_GROUP_SUFFIXES };
- 
- static const group_suffix_index groups_x12[] = {
-   GROUP_none, GROUP_x2, NUM_GROUP_SUFFIXES
- };
- 
- static const group_suffix_index groups_x4[] = { GROUP_x4, NUM_GROUP_SUFFIXES };
- 
- static const group_suffix_index groups_x24[] = {
-   GROUP_x2, GROUP_x4, NUM_GROUP_SUFFIXES
- };
- 
- static const group_suffix_index groups_x124[] = {
-   GROUP_none, GROUP_x2, GROUP_x4, NUM_GROUP_SUFFIXES
- };
- 
- static const group_suffix_index groups_x1234[] = {
-   GROUP_none, GROUP_x2, GROUP_x3, GROUP_x4, NUM_GROUP_SUFFIXES
- };
- 
- static const group_suffix_index groups_vg1x2[] = {
-   GROUP_vg1x2, NUM_GROUP_SUFFIXES
- };
- 
- static const group_suffix_index groups_vg1x4[] = {
-   GROUP_vg1x4, NUM_GROUP_SUFFIXES
- };
- 
- static const group_suffix_index groups_vg1x24[] = {
-   GROUP_vg1x2, GROUP_vg1x4, NUM_GROUP_SUFFIXES
- };
- 
- static const group_suffix_index groups_vg2[] = {
-   GROUP_vg2x1, GROUP_vg2x2, GROUP_vg2x4, NUM_GROUP_SUFFIXES
- };
- 
- static const group_suffix_index groups_vg4[] = {
-   GROUP_vg4x1, GROUP_vg4x2, GROUP_vg4x4, NUM_GROUP_SUFFIXES
- };
- 
- static const group_suffix_index groups_vg24[] = {
-   GROUP_vg2, GROUP_vg4, NUM_GROUP_SUFFIXES
- };
- 
- /* Used by functions that have no governing predicate.  */
- static const predication_index preds_none[] = { PRED_none, NUM_PREDS };
- 
- /* Used by functions that have a governing predicate but do not have an
-    explicit suffix.  */
- static const predication_index preds_implicit[] = { PRED_implicit, NUM_PREDS };
- 
- /* Used by functions that only support "_m" predication.  */
- static const predication_index preds_m[] = { PRED_m, NUM_PREDS };
- 
- /* Used by functions that allow merging and "don't care" predication,
-    but are not suitable for predicated MOVPRFX.  */
- static const predication_index preds_mx[] = {
-   PRED_m, PRED_x, NUM_PREDS
- };
- 
- /* Used by functions that allow merging, zeroing and "don't care"
-    predication.  */
- static const predication_index preds_mxz[] = {
-   PRED_m, PRED_x, PRED_z, NUM_PREDS
- };
- 
- /* Used by functions that have the mxz predicated forms above, and in addition
-    have an unpredicated form.  */
- static const predication_index preds_mxz_or_none[] = {
-   PRED_m, PRED_x, PRED_z, PRED_none, NUM_PREDS
- };
- 
- /* Used by functions that allow merging and zeroing predication but have
-    no "_x" form.  */
- static const predication_index preds_mz[] = { PRED_m, PRED_z, NUM_PREDS };
- 
- /* Used by functions that have an unpredicated form and a _z predicated
-    form.  */
- static const predication_index preds_z_or_none[] = {
-   PRED_z, PRED_none, NUM_PREDS
- };
- 
- /* Used by (mostly predicate) functions that only support "_z" predication.  */
- static const predication_index preds_z[] = { PRED_z, NUM_PREDS };
- 
- /* Used by SME instructions that always merge into ZA.  */
- static const predication_index preds_za_m[] = { PRED_za_m, NUM_PREDS };
- 
- #define NONSTREAMING_SVE(X) nonstreaming_only (AARCH64_FL_SVE | (X))
- #define SVE_AND_SME(X, Y) streaming_compatible (AARCH64_FL_SVE | (X), (Y))
- #define SSVE(X) SVE_AND_SME (X, X)
- 
- /* A list of all arm_sve.h functions.  */
- static CONSTEXPR const function_group_info function_groups[] = {
- #define DEF_SVE_FUNCTION_GS_FPM(NAME, SHAPE, TYPES, GROUPS, PREDS, FPM_MODE) \
-   { #NAME, &functions::NAME, &shapes::SHAPE, types_##TYPES, groups_##GROUPS, \
-     preds_##PREDS, aarch64_required_extensions::REQUIRED_EXTENSIONS, \
-     FPM_##FPM_MODE },
- #include "aarch64-sve-builtins.def"
- };
- 
- /* A list of all arm_neon_sve_bridge.h ACLE functions.  */
- static CONSTEXPR const function_group_info neon_sve_function_groups[] = {
- #define DEF_NEON_SVE_FUNCTION(NAME, SHAPE, TYPES, GROUPS, PREDS) \
-   { #NAME, &neon_sve_bridge_functions::NAME, &shapes::SHAPE, types_##TYPES, \
-     groups_##GROUPS, preds_##PREDS, aarch64_required_extensions::ssve (0), \
-     FPM_unused },
- #include "aarch64-neon-sve-bridge-builtins.def"
- };
- 
- /* A list of all arm_sme.h functions.  */
- static CONSTEXPR const function_group_info sme_function_groups[] = {
- #define DEF_SME_FUNCTION_GS_FPM(NAME, SHAPE, TYPES, GROUPS, PREDS, FPM_MODE) \
-   { #NAME, &functions::NAME, &shapes::SHAPE, types_##TYPES, groups_##GROUPS, \
-     preds_##PREDS, aarch64_required_extensions::REQUIRED_EXTENSIONS, \
-     FPM_##FPM_MODE },
- #define DEF_SME_ZA_FUNCTION_GS_FPM(NAME, SHAPE, TYPES, GROUPS, PREDS, FPM_MODE) \
-   { #NAME, &functions::NAME##_za, &shapes::SHAPE, types_##TYPES, \
-     groups_##GROUPS, preds_##PREDS, \
-     aarch64_required_extensions::REQUIRED_EXTENSIONS \
-       .and_also (AARCH64_FL_ZA_ON), FPM_##FPM_MODE },
- #include "aarch64-sve-builtins-sme.def"
- };
- 
- /* The scalar type associated with each vector type.  */
- extern GTY(()) tree scalar_types[NUM_VECTOR_TYPES + 1];
- tree scalar_types[NUM_VECTOR_TYPES + 1];
- 
- /* The single-predicate and single-vector types, with their built-in
-    "__SV..._t" name.  Allow an index of NUM_VECTOR_TYPES, which always
-    yields a null tree.  */
- static GTY(()) tree abi_vector_types[NUM_VECTOR_TYPES + 1];
- 
- /* Same, but with the arm_sve.h "sv..._t" name.  */
- extern GTY(()) tree acle_vector_types[MAX_TUPLE_SIZE][NUM_VECTOR_TYPES + 1];
- tree acle_vector_types[MAX_TUPLE_SIZE][NUM_VECTOR_TYPES + 1];
- 
- /* The svpattern enum type.  */
- extern GTY(()) tree acle_svpattern;
- tree acle_svpattern;
- 
- /* The svprfop enum type.  */
- extern GTY(()) tree acle_svprfop;
- tree acle_svprfop;
- 
- /* The list of all registered function decls, indexed by code.  */
- static GTY(()) vec<registered_function *, va_gc> *registered_functions;
- 
- /* Stores the starting function index for each pragma handler.  */
- static  GTY(()) unsigned int initial_indexes[NUM_PRAGMA_HANDLERS];
- 
- /* All registered function decls, hashed on the function_instance
-    that they implement.  This is used for looking up implementations of
-    overloaded functions.  */
- static GTY(()) hash_table<registered_function_hasher> *function_table;
- 
- /* Index 0 maps all overloaded function names that we've registered so far to
-    their associated function_instances.  Index 1 does the same for functions
-    that we've skipped over without registering.  In both cases, the map keys
-    are IDENTIFIER_NODEs.  */
- static GTY(()) hash_map<tree, registered_function *> *overload_names[2];
- 
- /* Record that TYPE is an ABI-defined SVE type that contains NUM_ZR SVE vectors
-    and NUM_PR SVE predicates.  MANGLED_NAME, if nonnull, is the ABI-defined
-    mangling of the type.  mangling of the type.  ACLE_NAME is the <arm_sve.h>
-    name of the type, or null if <arm_sve.h> does not provide the type.  */
- void
- add_sve_type_attribute (tree type, unsigned int num_zr, unsigned int num_pr,
- 			const char *mangled_name, const char *acle_name)
- {
-   tree mangled_name_tree
-     = (mangled_name ? get_identifier (mangled_name) : NULL_TREE);
-   tree acle_name_tree
-     = (acle_name ? get_identifier (acle_name) : NULL_TREE);
- 
-   tree value = tree_cons (NULL_TREE, acle_name_tree, NULL_TREE);
-   value = tree_cons (NULL_TREE, mangled_name_tree, value);
-   value = tree_cons (NULL_TREE, size_int (num_pr), value);
-   value = tree_cons (NULL_TREE, size_int (num_zr), value);
-   TYPE_ATTRIBUTES (type) = tree_cons (get_identifier ("SVE type"), value,
- 				      TYPE_ATTRIBUTES (type));
- }
- 
- /* If TYPE is an ABI-defined SVE type, return its attribute descriptor,
-    otherwise return null.  */
- static tree
- lookup_sve_type_attribute (const_tree type)
- {
-   if (type == error_mark_node)
-     return NULL_TREE;
-   return lookup_attribute ("SVE type", TYPE_ATTRIBUTES (type));
- }
- 
- /* Force TYPE to be a sizeless type.  */
- static void
- make_type_sizeless (tree type)
- {
-   TYPE_ATTRIBUTES (type) = tree_cons (get_identifier ("SVE sizeless type"),
- 				      NULL_TREE, TYPE_ATTRIBUTES (type));
- }
- 
- /* Return true if TYPE is a sizeless type.  */
- static bool
- sizeless_type_p (const_tree type)
- {
-   if (type == error_mark_node)
-     return NULL_TREE;
-   return lookup_attribute ("SVE sizeless type", TYPE_ATTRIBUTES (type));
- }
- 
- /* Return true if CANDIDATE is equivalent to MODEL_TYPE for overloading
-    purposes.  */
- static bool
- matches_type_p (const_tree model_type, const_tree candidate)
- {
-   if (VECTOR_TYPE_P (model_type))
-     {
-       if (!VECTOR_TYPE_P (candidate)
- 	  || maybe_ne (TYPE_VECTOR_SUBPARTS (model_type),
- 		       TYPE_VECTOR_SUBPARTS (candidate))
- 	  || TYPE_MODE (model_type) != TYPE_MODE (candidate))
- 	return false;
- 
-       model_type = TREE_TYPE (model_type);
-       candidate = TREE_TYPE (candidate);
-     }
-   return (candidate != error_mark_node
- 	  && TYPE_MAIN_VARIANT (model_type) == TYPE_MAIN_VARIANT (candidate));
- }
- 
- /* If TYPE is a valid SVE element type, return the corresponding type
-    suffix, otherwise return NUM_TYPE_SUFFIXES.  */
- static type_suffix_index
- find_type_suffix_for_scalar_type (const_tree type)
- {
-   /* A linear search should be OK here, since the code isn't hot and
-      the number of types is only small.  */
-   for (unsigned int suffix_i = 0; suffix_i < NUM_TYPE_SUFFIXES; ++suffix_i)
-     if (type_suffixes[suffix_i].vector_p)
-       {
- 	vector_type_index vector_i = type_suffixes[suffix_i].vector_type;
- 	if (matches_type_p (scalar_types[vector_i], type))
- 	  return type_suffix_index (suffix_i);
-       }
-   return NUM_TYPE_SUFFIXES;
- }
- 
- /* Return the implicit group suffix for intrinsics that operate on NVECTORS
-    vectors.  */
- static group_suffix_index
- num_vectors_to_group (unsigned int nvectors)
- {
-   switch (nvectors)
-     {
-     case 1: return GROUP_none;
-     case 2: return GROUP_x2;
-     case 3: return GROUP_x3;
-     case 4: return GROUP_x4;
-     }
-   gcc_unreachable ();
- }
- 
- /* If FNDECL is an SVE builtin, return its function instance, otherwise
-    return null.  */
- const function_instance *
- lookup_fndecl (tree fndecl)
- {
-   if (!fndecl_built_in_p (fndecl, BUILT_IN_MD))
-     return nullptr;
- 
-   unsigned int code = DECL_MD_FUNCTION_CODE (fndecl);
-   if ((code & AARCH64_BUILTIN_CLASS) != AARCH64_BUILTIN_SVE)
-     return nullptr;
- 
-   unsigned int subcode = code >> AARCH64_BUILTIN_SHIFT;
-   return &(*registered_functions)[subcode]->instance;
- }
- 
- 
- /* Try to fold constant arguments ARG1 and ARG2 using the given tree_code.
-    Operations are not treated as overflowing.  */
- static tree
- aarch64_const_binop (enum tree_code code, tree arg1, tree arg2)
- {
-   if (poly_int_tree_p (arg1) && poly_int_tree_p (arg2))
-     {
-       poly_wide_int poly_res;
-       tree type = TREE_TYPE (arg1);
-       signop sign = TYPE_SIGN (type);
-       wi::overflow_type overflow = wi::OVF_NONE;
- 
-       /* Return 0 for division by 0, like SDIV and UDIV do.  */
-       if (code == TRUNC_DIV_EXPR && integer_zerop (arg2))
- 	return arg2;
-       /* Return 0 if shift amount is out of range. */
-       if (code == LSHIFT_EXPR
- 	  && wi::geu_p (wi::to_wide (arg2), TYPE_PRECISION (type)))
- 	return build_int_cst (type, 0);
-       if (!poly_int_binop (poly_res, code, arg1, arg2, sign, &overflow))
- 	return NULL_TREE;
-       return force_fit_type (type, poly_res, false,
- 			     TREE_OVERFLOW (arg1) | TREE_OVERFLOW (arg2));
-     }
-   return NULL_TREE;
- }
- 
- /* Return the type that a vector base should have in a gather load or
-    scatter store involving vectors of type TYPE.  In an extending load,
-    TYPE is the result of the extension; in a truncating store, it is the
-    input to the truncation.
- 
-    Index vectors have the same width as base vectors, but can be either
-    signed or unsigned.  */
- type_suffix_index
- function_shape::vector_base_type (type_suffix_index type) const
- {
-   unsigned int required_bits = type_suffixes[type].element_bits;
-   gcc_assert (required_bits == 32 || required_bits == 64);
-   return required_bits == 32 ? TYPE_SUFFIX_u32 : TYPE_SUFFIX_u64;
- }
- 
- /* Return a hash code for a function_instance.  */
- hashval_t
- function_instance::hash () const
- {
-   inchash::hash h;
-   /* BASE uniquely determines BASE_NAME, so we don't need to hash both.  */
-   h.add_ptr (base);
-   h.add_ptr (shape);
-   h.add_int (mode_suffix_id);
-   h.add_int (type_suffix_ids[0]);
-   h.add_int (type_suffix_ids[1]);
-   h.add_int (type_suffix_ids[2]);
-   h.add_int (group_suffix_id);
-   h.add_int (pred);
-   h.add_int (fpm_mode);
-   return h.end ();
- }
- 
- /* Return a set of CP_* flags that describe what the function could do,
-    taking the command-line flags into account.  */
- unsigned int
- function_instance::call_properties () const
- {
-   unsigned int flags = base->call_properties (*this);
- 
-   /* -fno-trapping-math means that we can assume any FP exceptions
-      are not user-visible.  */
-   if (!flag_trapping_math)
-     flags &= ~CP_RAISE_FP_EXCEPTIONS;
- 
-   return flags;
- }
- 
- /* Return true if calls to the function could read some form of
-    global state.  */
- bool
- function_instance::reads_global_state_p () const
- {
-   unsigned int flags = call_properties ();
- 
-   /* Preserve any dependence on rounding mode, flush to zero mode, etc.
-      There is currently no way of turning this off; in particular,
-      -fno-rounding-math (which is the default) means that we should make
-      the usual assumptions about rounding mode, which for intrinsics means
-      acting as the instructions do.  */
-   if (flags & CP_READ_FPCR)
-     return true;
- 
-   /* Handle direct reads of global state.  */
-   return flags & (CP_READ_MEMORY | CP_READ_FFR | CP_READ_ZA | CP_READ_ZT0);
- }
- 
- /* Return true if calls to the function could modify some form of
-    global state.  */
- bool
- function_instance::modifies_global_state_p () const
- {
-   unsigned int flags = call_properties ();
- 
-   /* Preserve any exception state written back to the FPCR,
-      unless -fno-trapping-math says this is unnecessary.  */
-   if (flags & CP_RAISE_FP_EXCEPTIONS)
-     return true;
- 
-   /* Treat prefetches as modifying global state, since that's the
-      only means we have of keeping them in their correct position.  */
-   if (flags & CP_PREFETCH_MEMORY)
-     return true;
- 
-   /* Handle direct modifications of global state.  */
-   return flags & (CP_WRITE_MEMORY | CP_WRITE_FFR | CP_WRITE_ZA | CP_WRITE_ZT0);
- }
- 
- /* Return true if calls to the function could raise a signal.  */
- bool
- function_instance::could_trap_p () const
- {
-   unsigned int flags = call_properties ();
- 
-   /* Handle functions that could raise SIGFPE.  */
-   if (flags & CP_RAISE_FP_EXCEPTIONS)
-     return true;
- 
-   /* Handle functions that could raise SIGBUS or SIGSEGV.  */
-   if (flags & (CP_READ_MEMORY | CP_WRITE_MEMORY))
-     return true;
- 
-   return false;
- }
- 
- inline hashval_t
- registered_function_hasher::hash (value_type value)
- {
-   return value->instance.hash ();
- }
- 
- inline bool
- registered_function_hasher::equal (value_type value, const compare_type &key)
- {
-   return value->instance == key;
- }
- 
- sve_alignment_switcher::sve_alignment_switcher ()
- {
-   m_old_maximum_field_alignment = maximum_field_alignment;
-   maximum_field_alignment = 0;
- }
- 
- sve_alignment_switcher::~sve_alignment_switcher ()
- {
-   maximum_field_alignment = m_old_maximum_field_alignment;
- }
- 
- function_builder::function_builder (handle_pragma_index pragma_index,
- 				    bool function_nulls)
- {
-   m_overload_type = build_function_type (void_type_node, void_list_node);
-   m_direct_overloads = lang_GNU_CXX () || in_lto_p;
- 
-   if (initial_indexes[pragma_index] == 0)
-     {
-       unsigned int index = vec_safe_length (registered_functions);
-       initial_indexes[pragma_index] = index;
-     }
- 
-   m_function_index = initial_indexes[pragma_index];
-   m_function_nulls = function_nulls;
- 
-   gcc_obstack_init (&m_string_obstack);
- }
- 
- function_builder::~function_builder ()
- {
-   obstack_free (&m_string_obstack, NULL);
- }
- 
- /* Add NAME to the end of the function name being built.  */
- void
- function_builder::append_name (const char *name)
- {
-   obstack_grow (&m_string_obstack, name, strlen (name));
- }
- 
- /* Zero-terminate and complete the function name being built.  */
- char *
- function_builder::finish_name ()
- {
-   obstack_1grow (&m_string_obstack, 0);
-   return (char *) obstack_finish (&m_string_obstack);
- }
- 
- /* Return the overloaded or full function name for INSTANCE; OVERLOADED_P
-    selects which.  Allocate the string on m_string_obstack; the caller
-    must use obstack_free to free it after use.  */
- char *
- function_builder::get_name (const function_instance &instance,
- 			    bool overloaded_p)
- {
-   /* __arm_* functions are listed as arm_*, so that the associated GCC
-      code is not in the implementation namespace.  */
-   if (strncmp (instance.base_name, "arm_", 4) == 0)
-     append_name ("__");
-   append_name (instance.base_name);
-   if (overloaded_p)
-     switch (instance.displacement_units ())
-       {
-       case UNITS_none:
- 	break;
- 
-       case UNITS_bytes:
- 	append_name ("_offset");
- 	break;
- 
-       case UNITS_elements:
- 	append_name ("_index");
- 	break;
- 
-       case UNITS_vectors:
- 	append_name ("_vnum");
- 	break;
-       }
-   else
-     append_name (instance.mode_suffix ().string);
-   for (unsigned int i = 0; i < 3; ++i)
-     if (!overloaded_p || instance.shape->explicit_type_suffix_p (i))
-       append_name (instance.type_suffix (i).string);
-   if (!overloaded_p || instance.shape->explicit_group_suffix_p ())
-     append_name (instance.group_suffix ().string);
-   append_name (pred_suffixes[instance.pred]);
-   if (instance.fpm_mode == FPM_set)
-     append_name ("_fpm");
-   return finish_name ();
- }
- 
- /* Add attribute NAME to ATTRS.  */
- static tree
- add_attribute (const char *name, tree attrs)
- {
-   return tree_cons (get_identifier (name), NULL_TREE, attrs);
- }
- 
- /* Add attribute NS::NAME to ATTRS.  */
- static tree
- add_attribute (const char *ns, const char *name, tree value, tree attrs)
- {
-   return tree_cons (build_tree_list (get_identifier (ns),
- 				     get_identifier (name)),
- 		    value, attrs);
- }
- 
- /* Attribute arm::NAME describes shared state that is an input if IS_IN
-    and an output if IS_OUT.  Check whether a call with call properties
-    CALL_FLAGS needs such an attribute.  Add it to in-progress attribute
-    list ATTRS if so.  Return the new attribute list.  */
- static tree
- add_shared_state_attribute (const char *name, bool is_in, bool is_out,
- 			    unsigned int call_flags, tree attrs)
- {
-   struct state_flag_info
-   {
-     const char *name;
-     unsigned int read_flag;
-     unsigned int write_flag;
-   };
-   static state_flag_info state_flags[] =
-   {
-     { "za", CP_READ_ZA, CP_WRITE_ZA },
-     { "zt0", CP_READ_ZT0, CP_WRITE_ZT0 }
-   };
- 
-   tree args = NULL_TREE;
-   for (const auto &state_flag : state_flags)
-     {
-       auto all_flags = state_flag.read_flag | state_flag.write_flag;
-       auto these_flags = ((is_in ? state_flag.read_flag : 0)
- 			  | (is_out ? state_flag.write_flag : 0));
-       if ((call_flags & all_flags) == these_flags)
- 	{
- 	  tree value = build_string (strlen (state_flag.name) + 1,
- 				     state_flag.name);
- 	  args = tree_cons (NULL_TREE, value, args);
- 	}
-     }
-   if (args)
-     attrs = add_attribute ("arm", name, args, attrs);
-   return attrs;
- }
- 
- /* Return the appropriate function attributes for INSTANCE, which requires
-    the architecture extensions in REQUIRED_EXTENSIONS.  */
- tree
- function_builder::get_attributes (const function_instance &instance,
- 				  aarch64_required_extensions
- 				    required_extensions)
- {
-   tree attrs = NULL_TREE;
- 
-   if (required_extensions.sm_off == 0)
-     attrs = add_attribute ("arm", "streaming", NULL_TREE, attrs);
-   else if (required_extensions.sm_on != 0)
-     attrs = add_attribute ("arm", "streaming_compatible", NULL_TREE, attrs);
- 
-   attrs = add_shared_state_attribute ("in", true, false,
- 				      instance.call_properties (), attrs);
-   attrs = add_shared_state_attribute ("out", false, true,
- 				      instance.call_properties (), attrs);
-   attrs = add_shared_state_attribute ("inout", true, true,
- 				      instance.call_properties (), attrs);
- 
-   if (!instance.modifies_global_state_p ())
-     {
-       if (instance.reads_global_state_p ())
- 	attrs = add_attribute ("pure", attrs);
-       else
- 	attrs = add_attribute ("const", attrs);
-     }
- 
-   if (!flag_non_call_exceptions || !instance.could_trap_p ())
-     attrs = add_attribute ("nothrow", attrs);
- 
-   return add_attribute ("leaf", attrs);
- }
- 
- /* Add a function called NAME with type FNTYPE and attributes ATTRS.
-    INSTANCE describes what the function does and OVERLOADED_P indicates
-    whether it is overloaded.  REQUIRED_EXTENSIONS describes the architecture
-    extensions that the function requires.  */
- registered_function &
- function_builder::add_function (const function_instance &instance,
- 				const char *name, tree fntype, tree attrs,
- 				aarch64_required_extensions
- 				  required_extensions,
- 				bool overloaded_p,
- 				bool placeholder_p)
- {
-   unsigned int length = vec_safe_length (registered_functions);
-   unsigned int code = (m_function_index << AARCH64_BUILTIN_SHIFT) | AARCH64_BUILTIN_SVE;
-   /* We need to be able to generate placeholders to ensure that we have a
-      consistent numbering scheme for function codes between the C and C++
-      frontends, so that everything ties up in LTO.
- 
-      Currently, tree-streamer-in.cc:unpack_ts_function_decl_value_fields
-      validates that tree nodes returned by TARGET_BUILTIN_DECL are non-NULL and
-      some node other than error_mark_node. This is a holdover from when builtin
-      decls were streamed by code rather than by value.
- 
-      Ultimately, we should be able to remove this validation of BUILT_IN_MD
-      nodes and remove the target hook. For now, however, we need to appease the
-      validation and return a non-NULL, non-error_mark_node node, so we
-      arbitrarily choose integer_zero_node.  */
-   tree decl = placeholder_p || m_function_nulls
-     ? integer_zero_node
-     : simulate_builtin_function_decl (input_location, name, fntype,
- 				      code, NULL, attrs);
- 
-   registered_function &rfn = *ggc_alloc <registered_function> ();
-   rfn.instance = instance;
-   rfn.decl = decl;
-   rfn.required_extensions = required_extensions;
-   rfn.overloaded_p = overloaded_p;
-   if (m_function_index >= length)
-     vec_safe_push (registered_functions, &rfn);
-   else
-     (*registered_functions)[m_function_index] = &rfn;
-   m_function_index++;
- 
-   return rfn;
- }
- 
- /* Add a built-in function for INSTANCE, with the argument types given
-    by ARGUMENT_TYPES and the return type given by RETURN_TYPE.
-    REQUIRED_EXTENSIONS describes the architecture extensions that the
-    function requires.  FORCE_DIRECT_OVERLOADS is true if there is a
-    one-to-one mapping between "short" and "full" names, and if standard
-    overload resolution therefore isn't necessary.  */
- void
- function_builder::
- add_unique_function (const function_instance &instance,
- 		     tree return_type,
- 		     vec<tree> &argument_types,
- 		     aarch64_required_extensions required_extensions,
- 		     bool force_direct_overloads)
- {
-   /* Add the function under its full (unique) name.  */
-   char *name = get_name (instance, false);
-   tree fntype = build_function_type_array (return_type,
- 					   argument_types.length (),
- 					   argument_types.address ());
-   tree attrs = get_attributes (instance, required_extensions);
-   registered_function &rfn = add_function (instance, name, fntype, attrs,
- 					   required_extensions, false, false);
- 
-   /* Enter the function into the hash table.  */
-   if (!m_function_nulls)
-     {
-       hashval_t hash = instance.hash ();
-       registered_function **rfn_slot
- 	= function_table->find_slot_with_hash (instance, hash, INSERT);
-       gcc_assert (!*rfn_slot);
-       *rfn_slot = &rfn;
-     }
- 
-   /* Also add the function under its overloaded alias, if we want
-      a separate decl for each instance of an overloaded function.  */
-   char *overload_name = get_name (instance, true);
-   if (strcmp (name, overload_name) != 0)
-     {
-       /* Attribute lists shouldn't be shared.  */
-       tree attrs = get_attributes (instance, required_extensions);
-       bool placeholder_p = !(m_direct_overloads || force_direct_overloads);
-       add_function (instance, overload_name, fntype, attrs,
- 		    required_extensions, false, placeholder_p);
-     }
- 
-   obstack_free (&m_string_obstack, name);
- }
- 
- /* Add one function decl for INSTANCE, to be used with manual overload
-    resolution.  REQUIRED_EXTENSIONS describes the architecture extensions
-    that the function requires.
- 
-    For simplicity, deal with duplicate attempts to add the same function,
-    including cases in which the new function requires more features than
-    the original one did.  In that case we'll check whether the required
-    features are available as part of resolving the function to the
-    relevant unique function.  */
- void
- function_builder::
- add_overloaded_function (const function_instance &instance,
- 			 aarch64_required_extensions required_extensions)
- {
-   auto &name_map = overload_names[m_function_nulls];
-   if (!name_map)
-     name_map = hash_map<tree, registered_function *>::create_ggc ();
- 
-   char *name = get_name (instance, true);
-   tree id = get_identifier (name);
-   if (registered_function **map_value = name_map->get (id))
-     {
-       auto &dst_extensions = (*map_value)->required_extensions;
-       /* Make sure that any streaming and streaming-compatible attributes
- 	 on the function type are still correct.  (It might not matter if
- 	 they aren't, so this could be relaxed in future if we're sure that
- 	 it's safe.)  */
-       gcc_assert ((*map_value)->instance == instance
- 		  && (dst_extensions.sm_off || !required_extensions.sm_off)
- 		  && (dst_extensions.sm_on || !required_extensions.sm_on));
-       dst_extensions = dst_extensions.common_denominator (required_extensions);
-     }
-   else
-     {
-       registered_function &rfn
- 	= add_function (instance, name, m_overload_type, NULL_TREE,
- 			required_extensions, true, m_direct_overloads);
-       name_map->put (id, &rfn);
-     }
-   obstack_free (&m_string_obstack, name);
- }
- 
- /* If we are using manual overload resolution, add one function decl
-    for each overloaded function in GROUP.  Take the function base name
-    from GROUP and the mode from MODE.  */
- void
- function_builder::add_overloaded_functions (const function_group_info &group,
- 					    mode_suffix_index mode)
- {
-   bool explicit_type0 = (*group.shape)->explicit_type_suffix_p (0);
-   bool explicit_type1 = (*group.shape)->explicit_type_suffix_p (1);
-   bool explicit_type2 = (*group.shape)->explicit_type_suffix_p (2);
-   bool explicit_group = (*group.shape)->explicit_group_suffix_p ();
-   auto add_function = [&](const type_suffix_triple &types,
- 			  group_suffix_index group_suffix_id,
- 			  unsigned int pi)
-     {
-       function_instance instance (group.base_name, *group.base,
- 				  *group.shape, mode, types,
- 				  group_suffix_id, group.preds[pi],
- 				  group.fpm_mode);
-       add_overloaded_function (instance, group.required_extensions);
-     };
- 
-   auto add_group_suffix = [&](group_suffix_index group_suffix_id,
- 			      unsigned int pi)
-     {
-       if (mode == MODE_single
- 	  && group_suffixes[group_suffix_id].vectors_per_tuple == 1)
- 	return;
- 
-       if (!explicit_type0 && !explicit_type1)
- 	/* Deal with the common case in which there is one overloaded
- 	   function for all type combinations.  */
- 	add_function (types_none[0], group_suffix_id, pi);
-       else
- 	for (unsigned int ti = 0; group.types[ti][0] != NUM_TYPE_SUFFIXES;
- 	     ++ti)
- 	  {
- 	    /* Stub out the types that are determined by overload
- 	       resolution.  */
- 	    type_suffix_triple types = {
- 	      explicit_type0 ? group.types[ti][0] : NUM_TYPE_SUFFIXES,
- 	      explicit_type1 ? group.types[ti][1] : NUM_TYPE_SUFFIXES,
- 	      explicit_type2 ? group.types[ti][2] : NUM_TYPE_SUFFIXES
- 	    };
- 	    add_function (types, group_suffix_id, pi);
- 	  }
-     };
- 
-   for (unsigned int pi = 0; group.preds[pi] != NUM_PREDS; ++pi)
-     if (explicit_group)
-       for (unsigned int gi = 0; group.groups[gi] != NUM_GROUP_SUFFIXES; ++gi)
- 	add_group_suffix (group.groups[gi], pi);
-     else
-       add_group_suffix (GROUP_none, pi);
- }
- 
- /* Register all the functions in GROUP.  */
- void
- function_builder::register_function_group (const function_group_info &group)
- {
-   (*group.shape)->build (*this, group);
- }
- 
- function_call_info::function_call_info (location_t location_in,
- 					const function_instance &instance_in,
- 					tree fndecl_in)
-   : function_instance (instance_in), location (location_in), fndecl (fndecl_in)
- {
- }
- 
- function_resolver::function_resolver (location_t location,
- 				      const function_instance &instance,
- 				      tree fndecl, vec<tree, va_gc> &arglist)
-   : function_call_info (location, instance, fndecl), m_arglist (arglist)
- {
- }
- 
- /* Return the <stdint.h> name associated with TYPE.  Using the <stdint.h>
-    name should be more user-friendly than the underlying canonical type,
-    since it makes the signedness and bitwidth explicit.  */
- const char *
- function_resolver::get_scalar_type_name (type_suffix_index type)
- {
-   return vector_types[type_suffixes[type].vector_type].acle_name + 2;
- }
- 
- /* Return the type of argument I, or error_mark_node if it isn't
-    well-formed.  */
- tree
- function_resolver::get_argument_type (unsigned int i)
- {
-   tree arg = m_arglist[i];
-   return arg == error_mark_node ? arg : TREE_TYPE (arg);
- }
- 
- /* Return true if argument I is some form of scalar value.  */
- bool
- function_resolver::scalar_argument_p (unsigned int i)
- {
-   tree type = get_argument_type (i);
-   return (INTEGRAL_TYPE_P (type)
- 	  /* Allow pointer types, leaving the frontend to warn where
- 	     necessary.  */
- 	  || POINTER_TYPE_P (type)
- 	  || SCALAR_FLOAT_TYPE_P (type));
- }
- 
- /* Report that argument ARGNO was expected to have NUM_VECTORS vectors.
-    TYPE is the type that ARGNO actually has.  */
- void
- function_resolver::report_incorrect_num_vectors (unsigned int argno,
- 						 sve_type type,
- 						 unsigned int num_vectors)
- {
-   if (num_vectors == 1)
-     error_at (location, "passing %qT to argument %d of %qE, which"
- 	      " expects a single SVE vector rather than a tuple",
- 	      get_vector_type (type), argno + 1, fndecl);
-   else if (type.num_vectors == 1
- 	   && type.type != TYPE_SUFFIX_b)
-     /* num_vectors is always != 1, so the singular isn't needed.  */
-     error_n (location, num_vectors, "%qT%d%qE%d",
- 	     "passing single vector %qT to argument %d"
- 	     " of %qE, which expects a tuple of %d vectors",
- 	     get_vector_type (type), argno + 1, fndecl, num_vectors);
-   else
-     /* num_vectors is always != 1, so the singular isn't needed.  */
-     error_n (location, num_vectors, "%qT%d%qE%d",
- 	     "passing %qT to argument %d of %qE, which"
- 	     " expects a tuple of %d vectors", get_vector_type (type),
- 	     argno + 1, fndecl, num_vectors);
- }
- 
- /* Report that arguments FIRST_ARGNO and ARGNO have different numbers
-    of vectors, but are required to have the same number of vectors.
-    FIRST_TYPE and TYPE are the types that arguments FIRST_ARGNO and
-    ARGNO actually have.  */
- void
- function_resolver::report_mismatched_num_vectors (unsigned int first_argno,
- 						  sve_type first_type,
- 						  unsigned int argno,
- 						  sve_type type)
- {
-   /* If the tuple size is implied by the group suffix, and if the first
-      type had the right number of vectors, treat argument ARGNO as being
-      individually wrong, rather than wrong in relation to FIRST_ARGNO.  */
-   if (group_suffix_id != GROUP_none
-       && first_type.num_vectors == vectors_per_tuple ())
-     {
-       report_incorrect_num_vectors (argno, type, first_type.num_vectors);
-       return;
-     }
- 
-   /* Make sure that FIRST_TYPE itself is sensible before using it
-      as a basis for an error message.  */
-   if (resolve_to (mode_suffix_id, first_type) == error_mark_node)
-     return;
- 
-   if (type.num_vectors != 1 && first_type.num_vectors == 1)
-     error_at (location, "passing tuple %qT to argument %d of %qE after"
- 	      " passing single vector %qT to argument %d",
- 	      get_vector_type (type), argno + 1, fndecl,
- 	      get_vector_type (first_type), first_argno + 1);
-   else if (type.num_vectors == 1 && first_type.num_vectors != 1)
-     error_at (location, "passing single vector %qT to argument %d"
- 	      " of %qE after passing tuple %qT to argument %d",
- 	      get_vector_type (type), argno + 1, fndecl,
- 	      get_vector_type (first_type), first_argno + 1);
-   else
-     error_at (location, "passing mismatched tuple types %qT and %qT"
- 	      " to arguments %d and %d of %qE",
- 	      get_vector_type (first_type), get_vector_type (type),
- 	      first_argno + 1, argno + 1, fndecl);
- }
- 
- /* Report that the function has no form that takes type TYPE.
-    Return error_mark_node.  */
- tree
- function_resolver::report_no_such_form (sve_type type)
- {
-   error_at (location, "%qE has no form that takes %qT arguments",
- 	    fndecl, get_vector_type (type));
-   return error_mark_node;
- }
- 
- /* Silently check whether there is an instance of the function with the
-    mode suffix given by MODE, the type suffixes given by TYPE0 and TYPE1,
-    and the group suffix given by GROUP.  Return its function decl if so,
-    otherwise return null.  */
- tree
- function_resolver::lookup_form (mode_suffix_index mode,
- 				type_suffix_index type0,
- 				type_suffix_index type1,
- 				type_suffix_index type2,
- 				group_suffix_index group)
- {
-   type_suffix_triple types = { type0, type1, type2 };
-   function_instance instance (base_name, base, shape, mode, types, group, pred,
- 			      fpm_mode);
-   registered_function *rfn
-     = function_table->find_with_hash (instance, instance.hash ());
-   return rfn ? rfn->decl : NULL_TREE;
- }
- 
- /* Silently check whether there is an instance of the function that has the
-    mode suffix given by MODE and the type and group suffixes implied by TYPE.
-    If the overloaded function has an explicit first type suffix (like
-    conversions do), TYPE describes the implicit second type suffix.
-    Otherwise, TYPE describes the only type suffix.
- 
-    Return the decl of the function if it exists, otherwise return null.  */
- tree
- function_resolver::lookup_form (mode_suffix_index mode, sve_type type)
- {
-   type_suffix_index type0 = type_suffix_ids[0];
-   type_suffix_index type1 = type_suffix_ids[1];
-   type_suffix_index type2 = type_suffix_ids[2];
-   (type0 == NUM_TYPE_SUFFIXES ? type0 : type1) = type.type;
- 
-   group_suffix_index group = group_suffix_id;
-   if (group == GROUP_none && type.num_vectors != vectors_per_tuple ())
-     group = num_vectors_to_group (type.num_vectors);
- 
-   return lookup_form (mode, type0, type1, type2, group);
- }
- 
- /* Resolve the function to one with the mode suffix given by MODE, the
-    type suffixes given by TYPE0 and TYPE1, and group suffix given by
-    GROUP.  Return its function decl on success, otherwise report an
-    error and return error_mark_node.  */
- tree
- function_resolver::resolve_to (mode_suffix_index mode,
- 			       type_suffix_index type0,
- 			       type_suffix_index type1,
- 			       type_suffix_index type2,
- 			       group_suffix_index group)
- {
-   tree res = lookup_form (mode, type0, type1, type2, group);
-   if (!res)
-     {
-       if (type1 == NUM_TYPE_SUFFIXES)
- 	return report_no_such_form (type0);
-       if (type0 == type_suffix_ids[0])
- 	return report_no_such_form (type1);
-       error_at (location, "%qE has no form that takes %qT and %qT arguments",
- 		fndecl, get_vector_type (type0), get_vector_type (type1));
-       return error_mark_node;
-     }
-   return res;
- }
- 
- /* Resolve the function to one that has the suffixes associated with MODE
-    and TYPE; see lookup_form for how TYPE is interpreted.  Return the
-    function decl on success, otherwise report an error and return
-    error_mark_node.  */
- tree
- function_resolver::resolve_to (mode_suffix_index mode, sve_type type)
- {
-   if (tree res = lookup_form (mode, type))
-     return res;
- 
-   return report_no_such_form (type);
- }
- 
- /* Like resolve_to, but used for a conversion function with the following
-    properties:
- 
-    - The function has an explicit first type suffix.
-    - The elements of the argument (which has type TYPE) might be narrower
-      or wider than the elements of the return type.
-    - The return type has enough vectors to represent the converted value
-      of every element.
-    - The group suffix describes the wider of the argument type and the
-      return type.  */
- tree
- function_resolver::resolve_conversion (mode_suffix_index mode, sve_type type)
- {
-   auto ret_type = type_suffix_ids[0];
-   unsigned int num_ret_vectors = (type.num_vectors
- 				  * type_suffixes[ret_type].element_bits
- 				  / type_suffixes[type.type].element_bits);
-   if (num_ret_vectors == 1
-       || num_ret_vectors == 2
-       || num_ret_vectors == 4)
-     {
-       unsigned int num_vectors = MAX (num_ret_vectors, type.num_vectors);
-       if (tree res = lookup_form (mode, { type.type, num_vectors }))
- 	return res;
-     }
-   return report_no_such_form (type);
- }
- 
- /* Require argument ARGNO to be an svbool_t or svcount_t predicate.
-    Return its type on success, otherwise report an error and return
-    NUM_VECTOR_TYPES.  */
- vector_type_index
- function_resolver::infer_predicate_type (unsigned int argno)
- {
-   tree actual = get_argument_type (argno);
-   if (actual == error_mark_node)
-     return NUM_VECTOR_TYPES;
- 
-   for (auto index : { VECTOR_TYPE_svbool_t, VECTOR_TYPE_svcount_t })
-     if (matches_type_p (acle_vector_types[0][index], actual))
-       return index;
- 
-   error_at (location, "passing %qT to argument %d of %qE, which expects"
- 	    " an %qs or %qs", actual, argno + 1, fndecl, "svbool_t",
- 	    "svcount_t");
-   return NUM_VECTOR_TYPES;
- }
- 
- /* Require argument ARGNO to be a 32-bit or 64-bit scalar integer type.
-    Return the associated type suffix on success, otherwise report an
-    error and return NUM_TYPE_SUFFIXES.  */
- type_suffix_index
- function_resolver::infer_integer_scalar_type (unsigned int argno)
- {
-   tree actual = get_argument_type (argno);
-   if (actual == error_mark_node)
-     return NUM_TYPE_SUFFIXES;
- 
-   /* Allow enums and booleans to decay to integers, for compatibility
-      with C++ overloading rules.  */
-   if (INTEGRAL_TYPE_P (actual))
-     {
-       bool uns_p = TYPE_UNSIGNED (actual);
-       /* Honor the usual integer promotions, so that resolution works
- 	 in the same way as for C++.  */
-       if (TYPE_PRECISION (actual) < 32)
- 	return TYPE_SUFFIX_s32;
-       if (TYPE_PRECISION (actual) == 32)
- 	return uns_p ? TYPE_SUFFIX_u32 : TYPE_SUFFIX_s32;
-       if (TYPE_PRECISION (actual) == 64)
- 	return uns_p ? TYPE_SUFFIX_u64 : TYPE_SUFFIX_s64;
-     }
- 
-   error_at (location, "passing %qT to argument %d of %qE, which expects"
- 	    " a 32-bit or 64-bit integer type", actual, argno + 1, fndecl);
-   return NUM_TYPE_SUFFIXES;
- }
- 
- /* Return arguments ARGNO and ARGNO + 1 to be 64-bit scalar integers
-    of the same signedness, or be a combination that converts unambiguously
-    to such a pair.  Return the associated type suffix if they are,
-    otherwise report an error and return NUM_TYPE_SUFFIXES.  */
- type_suffix_index
- function_resolver::infer_64bit_scalar_integer_pair (unsigned int argno)
- {
-   /* Require two scalar integers, with one having 64 bits and the other
-      one being no bigger.  */
-   tree types[] = { get_argument_type (argno), get_argument_type (argno + 1) };
-   if (!INTEGRAL_TYPE_P (types[0])
-       || !INTEGRAL_TYPE_P (types[1])
-       || MAX (TYPE_PRECISION (types[0]), TYPE_PRECISION (types[1])) != 64)
-     {
-       error_at (location, "passing %qT and %qT to arguments %d and %d of %qE,"
- 		" which expects a pair of 64-bit integers", types[0], types[1],
- 		argno + 1, argno + 2, fndecl);
-       return NUM_TYPE_SUFFIXES;
-     }
- 
-   /* Allow signed integers smaller than int64_t to be paired with an int64_t.
-      Allow unsigned integers smaller than uint64_t to be paired with any
-      64-bit integer.  */
-   for (int i = 0; i < 2; ++i)
-     {
-       if (TYPE_PRECISION (types[i]) != 64)
- 	continue;
- 
-       if (TYPE_UNSIGNED (types[1 - i]) != TYPE_UNSIGNED (types[i]))
- 	{
- 	  if (TYPE_PRECISION (types[1 - i]) == 64)
- 	    continue;
- 	  if (!TYPE_UNSIGNED (types[1 - i]))
- 	    continue;
- 	}
-       return TYPE_UNSIGNED (types[i]) ? TYPE_SUFFIX_u64 : TYPE_SUFFIX_s64;
-     }
- 
-   error_at (location, "passing mismatched integer types %qT and %qT"
- 	    " to arguments %d and %d of %qE", types[0], types[1],
- 	    argno + 1, argno + 2, fndecl);
-   return NUM_TYPE_SUFFIXES;
- }
- 
- /* Require argument ARGNO to be a pointer to a scalar type that has a
-    corresponding type suffix.  Return that type suffix on success,
-    otherwise report an error and return NUM_TYPE_SUFFIXES.
-    GATHER_SCATTER_P is true if the function is a gather/scatter
-    operation.  RESTRICTIONS describes any additional restrictions
-    on the target type.  */
- type_suffix_index
- function_resolver::infer_pointer_type (unsigned int argno,
- 				       bool gather_scatter_p,
- 				       target_type_restrictions restrictions)
- {
-   tree actual = get_argument_type (argno);
-   if (actual == error_mark_node)
-     return NUM_TYPE_SUFFIXES;
- 
-   if (TREE_CODE (actual) != POINTER_TYPE)
-     {
-       error_at (location, "passing %qT to argument %d of %qE, which"
- 		" expects a pointer type", actual, argno + 1, fndecl);
-       if (VECTOR_TYPE_P (actual) && gather_scatter_p)
- 	inform (location, "an explicit type suffix is needed"
- 		" when using a vector of base addresses");
-       return NUM_TYPE_SUFFIXES;
-     }
- 
-   tree target = TREE_TYPE (actual);
-   type_suffix_index type = find_type_suffix_for_scalar_type (target);
-   if (type == NUM_TYPE_SUFFIXES)
-     {
-       error_at (location, "passing %qT to argument %d of %qE, but %qT is not"
- 		" a valid SVE element type", actual, argno + 1, fndecl,
- 		build_qualified_type (target, 0));
-       return NUM_TYPE_SUFFIXES;
-     }
-   unsigned int bits = type_suffixes[type].element_bits;
-   if (restrictions == TARGET_32_64 && bits != 32 && bits != 64)
-     {
-       error_at (location, "passing %qT to argument %d of %qE, which"
- 		" expects a pointer to 32-bit or 64-bit elements",
- 		actual, argno + 1, fndecl);
-       return NUM_TYPE_SUFFIXES;
-     }
-   if (displacement_units () == UNITS_elements && bits == 8)
-     {
-       error_at (location, "passing %qT to argument %d of %qE, which"
- 		" expects the data to be 16 bits or wider",
- 		actual, argno + 1, fndecl);
-       inform (location, "use the %<offset%> rather than %<index%> form"
- 	      " for 8-bit data");
-       return NUM_TYPE_SUFFIXES;
-     }
- 
-   return type;
- }
- 
- /* If TYPE is an SVE predicate or vector type, or a tuple of such a type,
-    return the associated sve_type, otherwise return an invalid sve_type.  */
- static sve_type
- find_sve_type (const_tree type)
- {
-   /* A linear search should be OK here, since the code isn't hot and
-      the number of types is only small.  */
-   for (unsigned int size_i = 0; size_i < MAX_TUPLE_SIZE; ++size_i)
-     for (unsigned int suffix_i = 0; suffix_i < NUM_TYPE_SUFFIXES; ++suffix_i)
-       {
- 	vector_type_index type_i = type_suffixes[suffix_i].vector_type;
- 	tree this_type = acle_vector_types[size_i][type_i];
- 	if (this_type && matches_type_p (this_type, type))
- 	  return { type_suffix_index (suffix_i), size_i + 1 };
-       }
- 
-   return {};
- }
- 
- /* Require argument ARGNO to be an SVE type (i.e. something that can be
-    represented by sve_type).  Return the (valid) type if it is, otherwise
-    report an error and return an invalid type.  */
- sve_type
- function_resolver::infer_sve_type (unsigned int argno)
- {
-   tree actual = get_argument_type (argno);
-   if (actual == error_mark_node)
-     return {};
- 
-   if (sve_type type = find_sve_type (actual))
-     return type;
- 
-   if (scalar_argument_p (argno))
-     error_at (location, "passing %qT to argument %d of %qE, which"
- 	      " expects an SVE type rather than a scalar type",
- 	      actual, argno + 1, fndecl);
-   else
-     error_at (location, "passing %qT to argument %d of %qE, which"
- 	      " expects an SVE type",
- 	      actual, argno + 1, fndecl);
-   return {};
- }
- 
- /* Require argument ARGNO to be a single vector or a tuple of NUM_VECTORS
-    vectors; NUM_VECTORS is 1 for the former.  Return the associated type
-    on success.  Report an error on failure.  */
- sve_type
- function_resolver::infer_vector_or_tuple_type (unsigned int argno,
- 					       unsigned int num_vectors)
- {
-   auto type = infer_sve_type (argno);
-   if (!type)
-     return type;
- 
-   if (type.num_vectors == num_vectors)
-     return type;
- 
-   report_incorrect_num_vectors (argno, type, num_vectors);
-   return {};
- }
- 
- /* Require argument ARGNO to have some form of vector type.  Return the
-    associated type suffix on success, using TYPE_SUFFIX_b for predicates.
-    Report an error and return NUM_TYPE_SUFFIXES on failure.  */
- type_suffix_index
- function_resolver::infer_vector_type (unsigned int argno)
- {
-   if (auto type = infer_vector_or_tuple_type (argno, 1))
-     return type.type;
-   return NUM_TYPE_SUFFIXES;
- }
- 
- /* Like infer_vector_type, but also require the type to be integral.  */
- type_suffix_index
- function_resolver::infer_integer_vector_type (unsigned int argno)
- {
-   type_suffix_index type = infer_vector_type (argno);
-   if (type == NUM_TYPE_SUFFIXES)
-     return type;
- 
-   if (!type_suffixes[type].integer_p)
-     {
-       error_at (location, "passing %qT to argument %d of %qE, which"
- 		" expects a vector of integers", get_argument_type (argno),
- 		argno + 1, fndecl);
-       return NUM_TYPE_SUFFIXES;
-     }
- 
-   return type;
- }
- 
- /* Require argument ARGNO to have some form of NEON128 vector type.  Return the
-    associated type suffix on success.
-    Report an error and return NUM_TYPE_SUFFIXES on failure.  */
- type_suffix_index
- function_resolver::infer_neon128_vector_type (unsigned int argno)
- {
-   tree actual = get_argument_type (argno);
-   if (actual == error_mark_node)
-     return NUM_TYPE_SUFFIXES;
- 
-   for (unsigned int suffix_i = 0; suffix_i < NUM_TYPE_SUFFIXES; ++suffix_i)
-     {
-       int neon_index = type_suffixes[suffix_i].neon128_type;
-       if (neon_index != ARM_NEON_H_TYPES_LAST)
- 	{
- 	  tree type = aarch64_simd_types_trees[neon_index].itype;
- 	  if (type && matches_type_p (type, actual))
- 	    return type_suffix_index (suffix_i);
- 	}
-     }
- 
-   error_at (location, "passing %qT to argument %d of %qE, which"
- 	    " expects a 128 bit NEON vector type", actual, argno + 1, fndecl);
-   return NUM_TYPE_SUFFIXES;
- }
- 
- 
- /* Like infer_vector_type, but also require the type to be an unsigned
-    integer.  */
- type_suffix_index
- function_resolver::infer_unsigned_vector_type (unsigned int argno)
- {
-   type_suffix_index type = infer_vector_type (argno);
-   if (type == NUM_TYPE_SUFFIXES)
-     return type;
- 
-   if (!type_suffixes[type].unsigned_p)
-     {
-       error_at (location, "passing %qT to argument %d of %qE, which"
- 		" expects a vector of unsigned integers",
- 		get_argument_type (argno), argno + 1, fndecl);
-       return NUM_TYPE_SUFFIXES;
-     }
- 
-   return type;
- }
- 
- /* Like infer_vector_type, but also require the element size to be
-    32 or 64 bits.  */
- type_suffix_index
- function_resolver::infer_sd_vector_type (unsigned int argno)
- {
-   type_suffix_index type = infer_vector_type (argno);
-   if (type == NUM_TYPE_SUFFIXES)
-     return type;
- 
-   unsigned int bits = type_suffixes[type].element_bits;
-   if (bits != 32 && bits != 64)
-     {
-       error_at (location, "passing %qT to argument %d of %qE, which"
- 		" expects a vector of 32-bit or 64-bit elements",
- 		get_argument_type (argno), argno + 1, fndecl);
-       return NUM_TYPE_SUFFIXES;
-     }
- 
-   return type;
- }
- 
- /* If the function operates on tuples of vectors, require argument ARGNO to be
-    a tuple with the appropriate number of vectors, otherwise require it to be
-    a single vector.  Return the associated type on success.  Report an error
-    on failure.  */
- sve_type
- function_resolver::infer_tuple_type (unsigned int argno)
- {
-   return infer_vector_or_tuple_type (argno, vectors_per_tuple ());
- }
- 
- /* PRED_TYPE is the type of a governing predicate argument and DATA_TYPE
-    is the type of an argument that it predicates.  Require the two types
-    to "agree": svcount_t must be used for multiple vectors and svbool_t
-    for single vectors.
- 
-    Return true if they do agree, otherwise report an error and
-    return false.  */
- bool function_resolver::
- require_matching_predicate_type (vector_type_index pred_type,
- 				 sve_type data_type)
- {
-   if (pred_type == VECTOR_TYPE_svbool_t && data_type.num_vectors == 1)
-     return true;
- 
-   if (pred_type == VECTOR_TYPE_svcount_t && data_type.num_vectors != 1)
-     return true;
- 
-   /* Make sure that FIRST_TYPE itself is sensible before using it
-      as a basis for an error message.  */
-   if (resolve_to (mode_suffix_id, data_type) == error_mark_node)
-     return false;
- 
-   if (data_type.num_vectors > 1)
-     error_at (location, "operations on multiple vectors must be predicated"
- 	      " by %qs rather than %qs", "svcount_t", "svbool_t");
-   else
-     error_at (location, "operations on single vectors must be predicated"
- 	      " by %qs rather than %qs", "svbool_t", "svcount_t");
-   return false;
- }
- 
- /* Require argument ARGNO to be a vector or scalar argument.  Return true
-    if it is, otherwise report an appropriate error.  */
- bool
- function_resolver::require_vector_or_scalar_type (unsigned int argno)
- {
-   tree actual = get_argument_type (argno);
-   if (actual == error_mark_node)
-     return false;
- 
-   if (!scalar_argument_p (argno) && !VECTOR_TYPE_P (actual))
-     {
-       error_at (location, "passing %qT to argument %d of %qE, which"
- 		" expects a vector or scalar type", actual, argno + 1, fndecl);
-       return false;
-     }
- 
-   return true;
- }
- 
- /* Require argument ARGNO to have vector type TYPE, in cases where this
-    requirement holds for all uses of the function.  Return true if the
-    argument has the right form, otherwise report an appropriate error.  */
- bool
- function_resolver::require_vector_type (unsigned int argno,
- 					vector_type_index type)
- {
-   tree expected = acle_vector_types[0][type];
-   tree actual = get_argument_type (argno);
-   if (actual == error_mark_node)
-     return false;
- 
-   if (!matches_type_p (expected, actual))
-     {
-       error_at (location, "passing %qT to argument %d of %qE, which"
- 		" expects %qT", actual, argno + 1, fndecl, expected);
-       return false;
-     }
-   return true;
- }
- 
- /* Like require_vector_type, but TYPE is inferred from argument FIRST_ARGNO
-    rather than being a fixed part of the function signature.  This changes
-    the nature of the error messages.  */
- bool
- function_resolver::require_matching_vector_type (unsigned int argno,
- 						 unsigned int first_argno,
- 						 sve_type type)
- {
-   sve_type new_type = infer_sve_type (argno);
-   if (!new_type)
-     return false;
- 
-   if (type.num_vectors != new_type.num_vectors)
-     {
-       report_mismatched_num_vectors (first_argno, type, argno, new_type);
-       return false;
-     }
- 
-   if (type != new_type)
-     {
-       error_at (location, "passing %qT to argument %d of %qE, but"
- 		" argument %d had type %qT",
- 		get_vector_type (new_type), argno + 1, fndecl,
- 		first_argno + 1, get_vector_type (type));
-       return false;
-     }
-   return true;
- }
- 
- /* Require argument ARGNO to be a vector or tuple type with the following
-    properties:
- 
-    - the type class must be the same as FIRST_TYPE's if EXPECTED_TCLASS
-      is SAME_TYPE_CLASS, otherwise it must be EXPECTED_TCLASS itself.
- 
-    - the element size must be:
- 
-      - the same as FIRST_TYPE's if EXPECTED_BITS == SAME_SIZE
-      - half of FIRST_TYPE's if EXPECTED_BITS == HALF_SIZE
-      - a quarter of FIRST_TYPE's if EXPECTED_BITS == QUARTER_SIZE
-      - EXPECTED_BITS itself otherwise
- 
-    - the number of vectors must be the same as FIRST_TYPE's if
-      EXPECTED_NUM_VECTORS is zero, otherwise it must be EXPECTED_NUM_VECTORS.
- 
-    Return true if the argument has the required type, otherwise report
-    an appropriate error.
- 
-    FIRST_ARGNO is the first argument that is known to have type FIRST_TYPE.
-    Usually it comes before ARGNO, but sometimes it is more natural to resolve
-    arguments out of order.
- 
-    If the required properties depend on FIRST_TYPE then both FIRST_ARGNO and
-    ARGNO contribute to the resolution process.  If the required properties
-    are fixed, only FIRST_ARGNO contributes to the resolution process.
- 
-    This function is a bit of a Swiss army knife.  The complication comes
-    from trying to give good error messages when FIRST_ARGNO and ARGNO are
-    inconsistent, since either of them might be wrong.  */
- bool function_resolver::
- require_derived_vector_type (unsigned int argno,
- 			     unsigned int first_argno,
- 			     sve_type first_type,
- 			     type_class_index expected_tclass,
- 			     unsigned int expected_bits,
- 			     unsigned int expected_num_vectors)
- {
-   /* If the type needs to match FIRST_ARGNO exactly, use the preferred
-      error message for that case.  */
-   if (expected_tclass == SAME_TYPE_CLASS
-       && expected_bits == SAME_SIZE
-       && expected_num_vectors == 0)
-     {
-       /* There's no need to resolve this case out of order.  */
-       gcc_assert (argno > first_argno);
-       return require_matching_vector_type (argno, first_argno, first_type);
-     }
- 
-   /* Use FIRST_TYPE to get the expected type class and element size.  */
-   auto &first_type_suffix = type_suffixes[first_type.type];
-   type_class_index orig_expected_tclass = expected_tclass;
-   if (expected_tclass == NUM_TYPE_CLASSES)
-     expected_tclass = first_type_suffix.tclass;
- 
-   unsigned int orig_expected_bits = expected_bits;
-   if (expected_bits == SAME_SIZE)
-     expected_bits = first_type_suffix.element_bits;
-   else if (expected_bits == HALF_SIZE)
-     expected_bits = first_type_suffix.element_bits / 2;
-   else if (expected_bits == QUARTER_SIZE)
-     expected_bits = first_type_suffix.element_bits / 4;
- 
-   unsigned int orig_expected_num_vectors = expected_num_vectors;
-   if (expected_num_vectors == 0)
-     expected_num_vectors = first_type.num_vectors;
- 
-   /* If the expected type doesn't depend on FIRST_TYPE at all,
-      just check for the fixed choice of vector type.  */
-   if (expected_tclass == orig_expected_tclass
-       && expected_bits == orig_expected_bits
-       && orig_expected_num_vectors == 1)
-     {
-       const type_suffix_info &expected_suffix
- 	= type_suffixes[find_type_suffix (expected_tclass, expected_bits)];
-       return require_vector_type (argno, expected_suffix.vector_type);
-     }
- 
-   /* Require the argument to be some form of SVE vector type,
-      without being specific about the type of vector we want.  */
-   sve_type actual_type = infer_sve_type (argno);
-   if (!actual_type)
-     return false;
- 
-   if (actual_type.num_vectors != expected_num_vectors)
-     {
-       if (orig_expected_num_vectors == 0)
- 	report_mismatched_num_vectors (first_argno, first_type,
- 				       argno, actual_type);
-       else
- 	report_incorrect_num_vectors (argno, actual_type,
- 				      expected_num_vectors);
-       return false;
-     }
- 
-   if (orig_expected_tclass == SAME_TYPE_CLASS
-       && orig_expected_bits == SAME_SIZE)
-     {
-       if (actual_type.type == first_type.type)
- 	return true;
- 
-       if (first_type.num_vectors > 1)
- 	error_at (location, "passing %qT to argument %d of %qE, but"
- 		  " argument %d was a tuple of %qT",
- 		  get_vector_type (actual_type), argno + 1, fndecl,
- 		  first_argno + 1, get_vector_type (first_type.type));
-       else
- 	error_at (location, "passing %qT to argument %d of %qE, but"
- 		  " argument %d had type %qT",
- 		  get_vector_type (actual_type), argno + 1, fndecl,
- 		  first_argno + 1, get_vector_type (first_type));
-       return false;
-     }
- 
-   /* Exit now if we got the right type.  */
-   auto &actual_type_suffix = type_suffixes[actual_type.type];
-   bool tclass_ok_p = (actual_type_suffix.tclass == expected_tclass);
-   bool size_ok_p = (actual_type_suffix.element_bits == expected_bits);
-   if (tclass_ok_p && size_ok_p)
-     return true;
- 
-   /* First look for cases in which the actual type contravenes a fixed
-      size requirement, without having to refer to FIRST_TYPE.  */
-   if (!size_ok_p && expected_bits == orig_expected_bits)
-     {
-       if (expected_num_vectors == 1)
- 	error_at (location, "passing %qT to argument %d of %qE, which"
- 		  " expects a vector of %d-bit elements",
- 		  get_vector_type (actual_type), argno + 1, fndecl,
- 		  expected_bits);
-       else
- 	error_at (location, "passing %qT to argument %d of %qE, which"
- 		  " expects vectors of %d-bit elements",
- 		  get_vector_type (actual_type), argno + 1, fndecl,
- 		  expected_bits);
-       return false;
-     }
- 
-   /* Likewise for a fixed type class requirement.  This is only ever
-      needed for signed and unsigned types, so don't create unnecessary
-      translation work for other type classes.  */
-   if (!tclass_ok_p && orig_expected_tclass == TYPE_signed)
-     {
-       if (expected_num_vectors == 1)
- 	error_at (location, "passing %qT to argument %d of %qE, which"
- 		  " expects a vector of signed integers",
- 		  get_vector_type (actual_type), argno + 1, fndecl);
-       else
- 	/* Translation note: could also be written "expects a tuple of
- 	   signed integer vectors".  */
- 	error_at (location, "passing %qT to argument %d of %qE, which"
- 		  " expects vectors of signed integers",
- 		  get_vector_type (actual_type), argno + 1, fndecl);
-       return false;
-     }
-   if (!tclass_ok_p && orig_expected_tclass == TYPE_unsigned)
-     {
-       if (expected_num_vectors == 1)
- 	error_at (location, "passing %qT to argument %d of %qE, which"
- 		  " expects a vector of unsigned integers",
- 		  get_vector_type (actual_type), argno + 1, fndecl);
-       else
- 	/* Translation note: could also be written "expects a tuple of
- 	   unsigned integer vectors".  */
- 	error_at (location, "passing %qT to argument %d of %qE, which"
- 		  " expects vectors of unsigned integers",
- 		  get_vector_type (actual_type), argno + 1, fndecl);
-       return false;
-     }
- 
-   /* Make sure that FIRST_TYPE itself is sensible before using it
-      as a basis for an error message.  */
-   if (resolve_to (mode_suffix_id, first_type) == error_mark_node)
-     return false;
- 
-   /* If the arguments have consistent type classes, but a link between
-      the sizes has been broken, try to describe the error in those terms.  */
-   if (tclass_ok_p && orig_expected_bits == SAME_SIZE)
-     {
-       if (argno < first_argno)
- 	{
- 	  std::swap (argno, first_argno);
- 	  std::swap (actual_type, first_type);
- 	}
-       error_at (location, "arguments %d and %d of %qE must have the"
- 		" same element size, but the values passed here have type"
- 		" %qT and %qT respectively", first_argno + 1, argno + 1,
- 		fndecl, get_vector_type (first_type),
- 		get_vector_type (actual_type));
-       return false;
-     }
- 
-   /* Likewise in reverse: look for cases in which the sizes are consistent
-      but a link between the type classes has been broken.  */
-   if (size_ok_p
-       && orig_expected_tclass == SAME_TYPE_CLASS
-       && first_type_suffix.integer_p
-       && actual_type_suffix.integer_p)
-     {
-       if (argno < first_argno)
- 	{
- 	  std::swap (argno, first_argno);
- 	  std::swap (actual_type, first_type);
- 	}
-       error_at (location, "arguments %d and %d of %qE must have the"
- 		" same signedness, but the values passed here have type"
- 		" %qT and %qT respectively", first_argno + 1, argno + 1,
- 		fndecl, get_vector_type (first_type),
- 		get_vector_type (actual_type));
-       return false;
-     }
- 
-   /* The two arguments are wildly inconsistent.  */
-   type_suffix_index expected_type
-     = find_type_suffix (expected_tclass, expected_bits);
-   error_at (location, "passing %qT instead of the expected %qT to argument"
- 	    " %d of %qE, after passing %qT to argument %d",
- 	    get_vector_type (actual_type), get_vector_type (expected_type),
- 	    argno + 1, fndecl, get_argument_type (first_argno),
- 	    first_argno + 1);
-   return false;
- }
- 
- /* Require argument ARGNO to match argument FIRST_ARGNO, which was inferred
-    to be a pointer to a scalar element of type TYPE.  */
- bool
- function_resolver::require_matching_pointer_type (unsigned int argno,
- 						  unsigned int first_argno,
- 						  type_suffix_index type)
- {
-   type_suffix_index new_type = infer_pointer_type (argno);
-   if (new_type == NUM_TYPE_SUFFIXES)
-     return false;
- 
-   if (type != new_type)
-     {
-       error_at (location, "passing %qT to argument %d of %qE, but"
- 		" argument %d had type %qT", get_argument_type (argno),
- 		argno + 1, fndecl, first_argno + 1,
- 		get_argument_type (first_argno));
-       return false;
-     }
-   return true;
- }
- 
- /* Require argument ARGNO to be a (possibly variable) scalar, using EXPECTED
-    as the name of its expected type.  Return true if the argument has the
-    right form, otherwise report an appropriate error.  */
- bool
- function_resolver::require_scalar_type (unsigned int argno,
- 					const char *expected)
- {
-   if (!scalar_argument_p (argno))
-     {
-       if (expected)
- 	error_at (location, "passing %qT to argument %d of %qE, which"
- 		  " expects %qs", get_argument_type (argno), argno + 1,
- 		  fndecl, expected);
-       return false;
-     }
-   return true;
- }
- 
- /* Require argument ARGNO to be a nonscalar type, given that it has already
-    passed require_vector_or_scalar_type.  Return true if it is, otherwise
-    report an error.  This is used when two sets of instructions share the
-    same overloaded function and one accepts scalars while the other
-    doesn't.  */
- bool
- function_resolver::require_nonscalar_type (unsigned int argno)
- {
-   if (scalar_argument_p (argno))
-     {
-       error_at (location, "passing %qT to argument %d of %qE, which"
- 		" does not accept scalars for this combination of arguments",
- 		get_argument_type (argno), argno + 1, fndecl);
-       return false;
-     }
-   return true;
- }
- 
- /* Require argument ARGNO to be some form of pointer, without being specific
-    about its target type.  Return true if the argument has the right form,
-    otherwise report an appropriate error.  */
- bool
- function_resolver::require_pointer_type (unsigned int argno)
- {
-   if (!scalar_argument_p (argno))
-     {
-       error_at (location, "passing %qT to argument %d of %qE, which"
- 		" expects a scalar pointer", get_argument_type (argno),
- 		argno + 1, fndecl);
-       return false;
-     }
-   return true;
- }
- 
- /* Argument FIRST_ARGNO is a scalar with type EXPECTED_TYPE, and argument
-    ARGNO should be consistent with it.  Return true if it is, otherwise
-    report an appropriate error.  */
- bool function_resolver::
- require_matching_integer_scalar_type (unsigned int argno,
- 				      unsigned int first_argno,
- 				      type_suffix_index expected_type)
- {
-   type_suffix_index actual_type = infer_integer_scalar_type (argno);
-   if (actual_type == NUM_TYPE_SUFFIXES)
-     return false;
- 
-   if (actual_type == expected_type)
-     return true;
- 
-   error_at (location, "call to %qE is ambiguous; argument %d has type"
- 	    " %qs but argument %d has type %qs", fndecl,
- 	    first_argno + 1, get_scalar_type_name (expected_type),
- 	    argno + 1, get_scalar_type_name (actual_type));
-   return false;
- }
- 
- /* Require argument ARGNO to be a (possibly variable) scalar, expecting it
-    to have the following properties:
- 
-    - the type class must be the same as for type suffix 0 if EXPECTED_TCLASS
-      is SAME_TYPE_CLASS, otherwise it must be EXPECTED_TCLASS itself.
- 
-    - the element size must be the same as for type suffix 0 if EXPECTED_BITS
-      is SAME_TYPE_SIZE, otherwise it must be EXPECTED_BITS itself.
- 
-    Return true if the argument is valid, otherwise report an appropriate error.
- 
-    Note that we don't check whether the scalar type actually has the required
-    properties, since that's subject to implicit promotions and conversions.
-    Instead we just use the expected properties to tune the error message.  */
- bool function_resolver::
- require_derived_scalar_type (unsigned int argno,
- 			     type_class_index expected_tclass,
- 			     unsigned int expected_bits)
- {
-   gcc_assert (expected_tclass == SAME_TYPE_CLASS
- 	      || expected_tclass == TYPE_signed
- 	      || expected_tclass == TYPE_unsigned);
- 
-   /* If the expected type doesn't depend on the type suffix at all,
-      just check for the fixed choice of scalar type.  */
-   if (expected_tclass != SAME_TYPE_CLASS && expected_bits != SAME_SIZE)
-     {
-       type_suffix_index expected_type
- 	= find_type_suffix (expected_tclass, expected_bits);
-       return require_scalar_type (argno, get_scalar_type_name (expected_type));
-     }
- 
-   if (scalar_argument_p (argno))
-     return true;
- 
-   if (expected_tclass == SAME_TYPE_CLASS)
-     /* It doesn't really matter whether the element is expected to be
-        the same size as type suffix 0.  */
-     error_at (location, "passing %qT to argument %d of %qE, which"
- 	      " expects a scalar element", get_argument_type (argno),
- 	      argno + 1, fndecl);
-   else
-     /* It doesn't seem useful to distinguish between signed and unsigned
-        scalars here.  */
-     error_at (location, "passing %qT to argument %d of %qE, which"
- 	      " expects a scalar integer", get_argument_type (argno),
- 	      argno + 1, fndecl);
-   return false;
- }
- 
- /* Require argument ARGNO to be suitable for an integer constant expression.
-    Return true if it is, otherwise report an appropriate error.
- 
-    function_checker checks whether the argument is actually constant and
-    has a suitable range.  The reason for distinguishing immediate arguments
-    here is because it provides more consistent error messages than
-    require_scalar_type would.  */
- bool
- function_resolver::require_integer_immediate (unsigned int argno)
- {
-   if (!scalar_argument_p (argno))
-     {
-       report_non_ice (location, fndecl, argno);
-       return false;
-     }
-   return true;
- }
- 
- /* Require argument ARGNO to be a vector base in a gather-style address.
-    Return its type on success, otherwise return NUM_VECTOR_TYPES.  */
- vector_type_index
- function_resolver::infer_vector_base_type (unsigned int argno)
- {
-   type_suffix_index type = infer_vector_type (argno);
-   if (type == NUM_TYPE_SUFFIXES)
-     return NUM_VECTOR_TYPES;
- 
-   if (type == TYPE_SUFFIX_u32 || type == TYPE_SUFFIX_u64)
-     return type_suffixes[type].vector_type;
- 
-   error_at (location, "passing %qT to argument %d of %qE, which"
- 	    " expects %qs or %qs", get_argument_type (argno),
- 	    argno + 1, fndecl, "svuint32_t", "svuint64_t");
-   return NUM_VECTOR_TYPES;
- }
- 
- /* Require argument ARGNO to be a vector displacement in a gather-style
-    address.  Return its type on success, otherwise return NUM_VECTOR_TYPES.  */
- vector_type_index
- function_resolver::infer_vector_displacement_type (unsigned int argno)
- {
-   type_suffix_index type = infer_integer_vector_type (argno);
-   if (type == NUM_TYPE_SUFFIXES)
-     return NUM_VECTOR_TYPES;
- 
-   if (type_suffixes[type].integer_p
-       && (type_suffixes[type].element_bits == 32
- 	  || type_suffixes[type].element_bits == 64))
-     return type_suffixes[type].vector_type;
- 
-   error_at (location, "passing %qT to argument %d of %qE, which"
- 	    " expects a vector of 32-bit or 64-bit integers",
- 	    get_argument_type (argno), argno + 1, fndecl);
-   return NUM_VECTOR_TYPES;
- }
- 
- /* Require argument ARGNO to be a vector displacement in a gather-style
-    address.  There are three possible uses:
- 
-    - for loading into elements of type TYPE (when LOAD_P is true)
-    - for storing from elements of type TYPE (when LOAD_P is false)
-    - for prefetching data (when TYPE is NUM_TYPE_SUFFIXES)
- 
-    The overloaded function's mode suffix determines the units of the
-    displacement (bytes for "_offset", elements for "_index").
- 
-    Return the associated mode on success, otherwise report an error
-    and return MODE_none.  */
- mode_suffix_index
- function_resolver::resolve_sv_displacement (unsigned int argno,
- 					    type_suffix_index type,
- 					    bool load_p)
- {
-   if (type == NUM_TYPE_SUFFIXES)
-     {
-       /* For prefetches, the base is a void pointer and the displacement
- 	 can be any valid offset or index type.  */
-       vector_type_index displacement_vector_type
- 	= infer_vector_displacement_type (argno);
-       if (displacement_vector_type == NUM_VECTOR_TYPES)
- 	return MODE_none;
- 
-       mode_suffix_index mode = find_mode_suffix (NUM_VECTOR_TYPES,
- 						 displacement_vector_type,
- 						 displacement_units ());
-       gcc_assert (mode != MODE_none);
-       return mode;
-     }
- 
-   auto base_type = shape->vector_base_type (type);
-   unsigned int required_bits = type_suffixes[base_type].element_bits;
-   if (required_bits == 32
-       && displacement_units () == UNITS_elements
-       && !lookup_form (MODE_s32index, type)
-       && !lookup_form (MODE_u32index, type))
-     {
-       if (lookup_form (MODE_u32base_index, type))
- 	{
- 	  if (type_suffix_ids[0] == NUM_TYPE_SUFFIXES)
- 	    {
- 	      gcc_assert (!load_p);
- 	      error_at (location, "when storing %qT, %qE requires a vector"
- 			" base and a scalar index", get_vector_type (type),
- 			fndecl);
- 	    }
- 	  else
- 	    error_at (location, "%qE requires a vector base and a scalar"
- 		      " index", fndecl);
- 	}
-       else
- 	error_at (location, "%qE does not support 32-bit vector type %qT",
- 		  fndecl, get_vector_type (type));
-       return MODE_none;
-     }
- 
-   /* Check for some form of vector type, without naming any in particular
-      as being expected.  */
-   type_suffix_index displacement_type = infer_vector_type (argno);
-   if (displacement_type == NUM_TYPE_SUFFIXES)
-     return MODE_none;
- 
-   /* If the displacement type is consistent with the data vector type,
-      try to find the associated mode suffix.  This will fall through
-      for non-integral displacement types.  */
-   if (type_suffixes[displacement_type].element_bits == required_bits)
-     {
-       vector_type_index displacement_vector_type
- 	= type_suffixes[displacement_type].vector_type;
-       mode_suffix_index mode = find_mode_suffix (NUM_VECTOR_TYPES,
- 						 displacement_vector_type,
- 						 displacement_units ());
-       if (mode != MODE_none)
- 	{
- 	  if (mode == MODE_s32offset
- 	      && !lookup_form (mode, type)
- 	      && lookup_form (MODE_u32offset, type))
- 	    {
- 	      if (type_suffix_ids[0] == NUM_TYPE_SUFFIXES)
- 		error_at (location, "%qE does not support 32-bit sign-extended"
- 			  " offsets", fndecl);
- 	      else
- 		error_at (location, "%qE does not support sign-extended"
- 			  " offsets", fndecl);
- 	      return MODE_none;
- 	    }
- 	  return mode;
- 	}
-     }
- 
-   if (type_suffix_ids[0] == NUM_TYPE_SUFFIXES
-       && shape->vector_base_type (TYPE_SUFFIX_u32) == TYPE_SUFFIX_u32)
-     {
-       /* TYPE has been inferred rather than specified by the user,
- 	 so mention it in the error messages.  */
-       if (load_p)
- 	error_at (location, "passing %qT to argument %d of %qE, which when"
- 		  " loading %qT expects a vector of %d-bit integers",
- 		  get_argument_type (argno), argno + 1, fndecl,
- 		  get_vector_type (type), required_bits);
-       else
- 	error_at (location, "passing %qT to argument %d of %qE, which when"
- 		  " storing %qT expects a vector of %d-bit integers",
- 		  get_argument_type (argno), argno + 1, fndecl,
- 		  get_vector_type (type), required_bits);
-     }
-   else
-     /* TYPE is part of the function name.  */
-     error_at (location, "passing %qT to argument %d of %qE, which"
- 	      " expects a vector of %d-bit integers",
- 	      get_argument_type (argno), argno + 1, fndecl, required_bits);
-   return MODE_none;
- }
- 
- /* Require the arguments starting at ARGNO to form a gather-style address.
-    There are three possible uses:
- 
-    - for loading into elements of type TYPE (when LOAD_P is true)
-    - for storing from elements of type TYPE (when LOAD_P is false)
-    - for prefetching data (when TYPE is NUM_TYPE_SUFFIXES)
- 
-    The three possible addresses are:
- 
-    - a vector base with no displacement
-    - a vector base and a scalar displacement
-    - a scalar (pointer) base and a vector displacement
- 
-    The overloaded function's mode suffix determines whether there is
-    a displacement, and if so, what units it uses:
- 
-    - MODE_none: no displacement
-    - MODE_offset: the displacement is measured in bytes
-    - MODE_index: the displacement is measured in elements
- 
-    Return the mode of the non-overloaded function on success, otherwise
-    report an error and return MODE_none.  */
- mode_suffix_index
- function_resolver::resolve_gather_address (unsigned int argno,
- 					   type_suffix_index type,
- 					   bool load_p)
- {
-   tree actual = get_argument_type (argno);
-   if (actual == error_mark_node)
-     return MODE_none;
- 
-   if (displacement_units () != UNITS_none)
-     {
-       /* Some form of displacement is needed.  First handle a scalar
- 	 pointer base and a vector displacement.  */
-       if (scalar_argument_p (argno))
- 	/* Don't check the pointer type here, since there's only one valid
- 	   choice.  Leave that to the frontend.  */
- 	return resolve_sv_displacement (argno + 1, type, load_p);
- 
-       if (!VECTOR_TYPE_P (actual))
- 	{
- 	  error_at (location, "passing %qT to argument %d of %qE,"
- 		    " which expects a vector or pointer base address",
- 		    actual, argno + 1, fndecl);
- 	  return MODE_none;
- 	}
-     }
- 
-   /* Check for the correct choice of vector base type.  */
-   vector_type_index base_vector_type;
-   if (type == NUM_TYPE_SUFFIXES)
-     {
-       /* Since prefetches have no type suffix, there is a free choice
- 	 between 32-bit and 64-bit base addresses.  */
-       base_vector_type = infer_vector_base_type (argno);
-       if (base_vector_type == NUM_VECTOR_TYPES)
- 	return MODE_none;
-     }
-   else
-     {
-       /* Check for some form of vector type, without saying which type
- 	 we expect.  */
-       type_suffix_index base_type = infer_vector_type (argno);
-       if (base_type == NUM_TYPE_SUFFIXES)
- 	return MODE_none;
- 
-       /* Check whether the type is the right one.  */
-       auto required_type = shape->vector_base_type (type);
-       if (required_type != base_type)
- 	{
- 	  error_at (location, "passing %qT to argument %d of %qE,"
- 		    " which expects %qT", actual, argno + 1, fndecl,
- 		    get_vector_type (required_type));
- 	  return MODE_none;
- 	}
-       base_vector_type = type_suffixes[base_type].vector_type;
-     }
- 
-   /* Check the scalar displacement, if any.  */
-   if (displacement_units () != UNITS_none
-       && !require_scalar_type (argno + 1, "int64_t"))
-     return MODE_none;
- 
-   /* Find the appropriate mode suffix.  The checks above should have
-      weeded out all erroneous cases.  */
-   for (unsigned int mode_i = 0; mode_i < ARRAY_SIZE (mode_suffixes); ++mode_i)
-     {
-       const mode_suffix_info &mode = mode_suffixes[mode_i];
-       if (mode.base_vector_type == base_vector_type
- 	  && mode.displacement_vector_type == NUM_VECTOR_TYPES
- 	  && mode.displacement_units == displacement_units ())
- 	return mode_suffix_index (mode_i);
-     }
- 
-   gcc_unreachable ();
- }
- 
- /* Require arguments ARGNO and ARGNO + 1 to form an ADR-style address,
-    i.e. one with a vector of base addresses and a vector of displacements.
-    The overloaded function's mode suffix determines the units of the
-    displacement (bytes for "_offset", elements for "_index").
- 
-    Return the associated mode suffix on success, otherwise report
-    an error and return MODE_none.  */
- mode_suffix_index
- function_resolver::resolve_adr_address (unsigned int argno)
- {
-   vector_type_index base_type = infer_vector_base_type (argno);
-   if (base_type == NUM_VECTOR_TYPES)
-     return MODE_none;
- 
-   vector_type_index displacement_type
-     = infer_vector_displacement_type (argno + 1);
-   if (displacement_type == NUM_VECTOR_TYPES)
-     return MODE_none;
- 
-   mode_suffix_index mode = find_mode_suffix (base_type, displacement_type,
- 					     displacement_units ());
-   if (mode == MODE_none)
-     {
-       if (mode_suffix_id == MODE_offset)
- 	error_at (location, "cannot combine a base of type %qT with"
- 		  " an offset of type %qT",
- 		  get_argument_type (argno), get_argument_type (argno + 1));
-       else
- 	error_at (location, "cannot combine a base of type %qT with"
- 		  " an index of type %qT",
- 		  get_argument_type (argno), get_argument_type (argno + 1));
-     }
-   return mode;
- }
- 
- /* Require the function to have exactly EXPECTED arguments.  Return true
-    if it does, otherwise report an appropriate error.  */
- bool
- function_resolver::check_num_arguments (unsigned int expected)
- {
-   if (m_arglist.length () < expected)
-     error_at (location, "too few arguments to function %qE", fndecl);
-   else if (m_arglist.length () > expected)
-     error_at (location, "too many arguments to function %qE", fndecl);
-   return m_arglist.length () == expected;
- }
- 
- /* If the function is predicated, check that the first argument is a
-    suitable governing predicate.  Also check that there are NOPS further
-    arguments after any governing predicate, but don't check what they are.
- 
-    Return true on success, otherwise report a suitable error.
-    When returning true:
- 
-    - set I to the number of the first unchecked argument.
-    - set NARGS to the total number of arguments.  */
- bool
- function_resolver::check_gp_argument (unsigned int nops,
- 				      unsigned int &i, unsigned int &nargs)
- {
-   gcc_assert (pred != PRED_za_m);
-   i = 0;
-   unsigned int nfpm_args = (fpm_mode == FPM_set)? 1:0;
-   if (pred != PRED_none)
-     {
-       /* Unary merge operations should use resolve_unary instead.  */
-       gcc_assert (!shape->has_merge_argument_p (*this, nops));
-       nargs = nops + nfpm_args + 1;
-       if (!check_num_arguments (nargs)
- 	  || !require_vector_type (i, gp_type_index ()))
- 	return false;
-       i += 1;
-     }
-   else
-     {
-       nargs = nops + nfpm_args;
-       if (!check_num_arguments (nargs))
- 	return false;
-     }
- 
-   return true;
- }
- 
- /* Finish resolving a function whose final argument can be a vector
-    or a scalar, with the function having an implicit "_n" suffix
-    in the latter case.  This "_n" form might only exist for certain
-    type suffixes.
- 
-    ARGNO is the index of the final argument.  The inferred type suffix
-    was obtained from argument FIRST_ARGNO, which has type FIRST_TYPE.
-    EXPECTED_TCLASS and EXPECTED_BITS describe the expected properties
-    of the final vector or scalar argument, in the same way as for
-    require_derived_vector_type.  INFERRED_TYPE is the inferred type
-    suffix itself, or NUM_TYPE_SUFFIXES if it's the same as FIRST_TYPE.
- 
-    Return the function decl of the resolved function on success,
-    otherwise report a suitable error and return error_mark_node.  */
- tree function_resolver::
- finish_opt_n_resolution (unsigned int argno, unsigned int first_argno,
- 			 type_suffix_index first_type,
- 			 type_class_index expected_tclass,
- 			 unsigned int expected_bits,
- 			 type_suffix_index inferred_type)
- {
-   if (inferred_type == NUM_TYPE_SUFFIXES)
-     inferred_type = first_type;
-   tree scalar_form = lookup_form (MODE_n, inferred_type);
- 
-   /* Allow the final argument to be scalar, if an _n form exists.  */
-   if (scalar_argument_p (argno))
-     {
-       if (scalar_form)
- 	return scalar_form;
- 
-       /* Check the vector form normally.  If that succeeds, raise an
- 	 error about having no corresponding _n form.  */
-       tree res = resolve_to (mode_suffix_id, inferred_type);
-       if (res != error_mark_node)
- 	error_at (location, "passing %qT to argument %d of %qE, but its"
- 		  " %qT form does not accept scalars",
- 		  get_argument_type (argno), argno + 1, fndecl,
- 		  get_vector_type (first_type));
-       return error_mark_node;
-     }
- 
-   /* If an _n form does exist, provide a more accurate message than
-      require_derived_vector_type would for arguments that are neither
-      vectors nor scalars.  */
-   if (scalar_form && !require_vector_or_scalar_type (argno))
-     return error_mark_node;
- 
-   /* Check for the correct vector type.  */
-   if (!require_derived_vector_type (argno, first_argno, first_type,
- 				    expected_tclass, expected_bits))
-     return error_mark_node;
- 
-   return resolve_to (mode_suffix_id, inferred_type);
- }
- 
- /* Finish resolving a function whose final argument can be a tuple
-    or a vector, with the function having an implicit "_single" suffix
-    in the latter case.  This "_single" form might only exist for certain
-    type suffixes.
- 
-    ARGNO is the index of the final argument.  The inferred type suffix
-    was obtained from argument FIRST_ARGNO, which has type FIRST_TYPE.
-    EXPECTED_TCLASS gives the expected type class for the final tuple
-    or vector.
- 
-    Return the function decl of the resolved function on success,
-    otherwise report a suitable error and return error_mark_node.  */
- tree function_resolver::
- finish_opt_single_resolution (unsigned int argno, unsigned int first_argno,
- 			      sve_type first_type,
- 			      type_class_index expected_tclass)
- {
-   sve_type new_type = infer_sve_type (argno);
-   if (!new_type)
-     return error_mark_node;
- 
-   /* If the type is a tuple, require it to match the group suffix.  */
-   unsigned int num_vectors = vectors_per_tuple ();
-   if (num_vectors != 1
-       && new_type.num_vectors != 1
-       && new_type.num_vectors != num_vectors)
-     {
-       report_incorrect_num_vectors (argno, new_type, num_vectors);
-       return error_mark_node;
-     }
- 
-   auto expected_num_vectors = (new_type.num_vectors == 1 ? 1 : 0);
-   if (!require_derived_vector_type (argno, first_argno, first_type,
- 				    expected_tclass, SAME_SIZE,
- 				    expected_num_vectors))
-     return error_mark_node;
- 
-   if (new_type.num_vectors == 1 && first_type.num_vectors > 1)
-     {
-       if (tree single_form = lookup_form (MODE_single, first_type))
- 	return single_form;
- 
-       if (resolve_to (mode_suffix_id, first_type) != error_mark_node)
- 	error_at (location, "passing %qT to argument %d of %qE, but its"
- 		  " %qT form does not accept single vectors",
- 		  get_vector_type (new_type), argno + 1, fndecl,
- 		  get_vector_type (first_type));
-       return error_mark_node;
-     }
-   return resolve_to (mode_suffix_id, first_type);
- }
- 
- /* Resolve a (possibly predicated) unary function.  If the function uses
-    merge predication or if TREAT_AS_MERGE_P is true, there is an extra
-    vector argument before the governing predicate that specifies the
-    values of inactive elements.  This argument has the following
-    properties:
- 
-    - the type class must be the same as for active elements if MERGE_TCLASS
-      is SAME_TYPE_CLASS, otherwise it must be MERGE_TCLASS itself.
- 
-    - the element size must be the same as for active elements if MERGE_BITS
-      is SAME_TYPE_SIZE, otherwise it must be MERGE_BITS itself.
- 
-    Return the function decl of the resolved function on success,
-    otherwise report a suitable error and return error_mark_node.  */
- tree
- function_resolver::resolve_unary (type_class_index merge_tclass,
- 				  unsigned int merge_bits,
- 				  bool treat_as_merge_p)
- {
-   type_suffix_index type;
-   if (pred == PRED_m || treat_as_merge_p)
-     {
-       if (!check_num_arguments (3))
- 	return error_mark_node;
-       if (merge_tclass == SAME_TYPE_CLASS && merge_bits == SAME_SIZE)
- 	{
- 	  /* The inactive elements are the same as the active elements,
- 	     so we can use normal left-to-right resolution.  */
- 	  if ((type = infer_vector_type (0)) == NUM_TYPE_SUFFIXES
- 	      || !require_vector_type (1, VECTOR_TYPE_svbool_t)
- 	      || !require_matching_vector_type (2, 0, type))
- 	    return error_mark_node;
- 	}
-       else
- 	{
- 	  /* The inactive element type is a function of the active one,
- 	     so resolve the active one first.  */
- 	  if (!require_vector_type (1, VECTOR_TYPE_svbool_t)
- 	      || (type = infer_vector_type (2)) == NUM_TYPE_SUFFIXES
- 	      || !require_derived_vector_type (0, 2, type, merge_tclass,
- 					       merge_bits))
- 	    return error_mark_node;
- 	}
-     }
-   else
-     {
-       /* We just need to check the predicate (if any) and the single
- 	 vector argument.  */
-       unsigned int i, nargs;
-       if (!check_gp_argument (1, i, nargs)
- 	  || (type = infer_vector_type (i)) == NUM_TYPE_SUFFIXES)
- 	return error_mark_node;
-     }
- 
-   /* Handle convert-like functions in which the first type suffix is
-      explicit.  */
-   if (type_suffix_ids[0] != NUM_TYPE_SUFFIXES)
-     return resolve_to (mode_suffix_id, type_suffix_ids[0], type,
- 		       NUM_TYPE_SUFFIXES, group_suffix_id);
- 
-   return resolve_to (mode_suffix_id, type);
- }
- 
- /* Resolve a (possibly predicated) function that takes NOPS like-typed
-    vector arguments followed by NIMM integer immediates.  Return the
-    function decl of the resolved function on success, otherwise report
-    a suitable error and return error_mark_node.  */
- tree
- function_resolver::resolve_uniform (unsigned int nops, unsigned int nimm)
- {
-   unsigned int i, nargs;
-   type_suffix_index type;
-   if (!check_gp_argument (nops + nimm, i, nargs)
-       || (type = infer_vector_type (i)) == NUM_TYPE_SUFFIXES)
-     return error_mark_node;
- 
-   unsigned int first_arg = i++;
-   for (; i < nargs - nimm; ++i)
-     if (!require_matching_vector_type (i, first_arg, type))
-       return error_mark_node;
- 
-   for (; i < nargs; ++i)
-     if (!require_integer_immediate (i))
-       return error_mark_node;
- 
-   return resolve_to (mode_suffix_id, type);
- }
- 
- /* Resolve a (possibly predicated) function that offers a choice between
-    taking:
- 
-    - NOPS like-typed vector arguments or
-    - NOPS - 1 like-typed vector arguments followed by a scalar argument
- 
-    Return the function decl of the resolved function on success,
-    otherwise report a suitable error and return error_mark_node.  */
- tree
- function_resolver::resolve_uniform_opt_n (unsigned int nops)
- {
-   unsigned int i, nargs;
-   type_suffix_index type;
-   if (!check_gp_argument (nops, i, nargs)
-       || (type = infer_vector_type (i)) == NUM_TYPE_SUFFIXES)
-     return error_mark_node;
- 
-   unsigned int first_arg = i++;
-   for (; i < nargs - 1; ++i)
-     if (!require_matching_vector_type (i, first_arg, type))
-       return error_mark_node;
- 
-   return finish_opt_n_resolution (i, first_arg, type);
- }
- 
- /* If the call is erroneous, report an appropriate error and return
-    error_mark_node.  Otherwise, if the function is overloaded, return
-    the decl of the non-overloaded function.  Return NULL_TREE otherwise,
-    indicating that the call should be processed in the normal way.  */
- tree
- function_resolver::resolve ()
- {
-   return shape->resolve (*this);
- }
- 
- function_checker::function_checker (location_t location,
- 				    const function_instance &instance,
- 				    tree fndecl, tree fntype,
- 				    unsigned int nargs, tree *args)
-   : function_call_info (location, instance, fndecl),
-     m_fntype (fntype), m_nargs (nargs), m_args (args),
-     m_base_arg (pred != PRED_none && pred != PRED_za_m ? 1 : 0)
- {
- }
- 
- /* Return true if argument ARGNO exists. which it might not for
-    erroneous calls.  It is safe to wave through checks if this
-    function returns false.  */
- bool
- function_checker::argument_exists_p (unsigned int argno)
- {
-   gcc_assert (argno < (unsigned int) type_num_arguments (m_fntype));
-   return argno < m_nargs;
- }
- 
- /* Check that argument ARGNO is an integer constant expression and
-    store its value in VALUE_OUT if so.  The caller should first
-    check that argument ARGNO exists.  */
- bool
- function_checker::require_immediate (unsigned int argno,
- 				     HOST_WIDE_INT &value_out)
- {
-   gcc_assert (argno < m_nargs);
-   tree arg = m_args[argno];
- 
-   /* The type and range are unsigned, so read the argument as an
-      unsigned rather than signed HWI.  */
-   if (!tree_fits_uhwi_p (arg))
-     {
-       report_non_ice (location, fndecl, argno);
-       return false;
-     }
- 
-   /* ...but treat VALUE_OUT as signed for error reporting, since printing
-      -1 is more user-friendly than the maximum uint64_t value.  */
-   value_out = tree_to_uhwi (arg);
-   return true;
- }
- 
- /* Check that argument REL_ARGNO is an integer constant expression that
-    has the value VALUE0 or VALUE1.  REL_ARGNO counts from the end of the
-    predication arguments.  */
- bool
- function_checker::require_immediate_either_or (unsigned int rel_argno,
- 					       HOST_WIDE_INT value0,
- 					       HOST_WIDE_INT value1)
- {
-   unsigned int argno = m_base_arg + rel_argno;
-   if (!argument_exists_p (argno))
-     return true;
- 
-   HOST_WIDE_INT actual;
-   if (!require_immediate (argno, actual))
-     return false;
- 
-   if (actual != value0 && actual != value1)
-     {
-       report_neither_nor (location, fndecl, argno, actual, value0, value1);
-       return false;
-     }
- 
-   return true;
- }
- 
- /* Check that argument REL_ARGNO is an integer constant expression that has
-    a valid value for enumeration type TYPE.  REL_ARGNO counts from the end
-    of the predication arguments.  */
- bool
- function_checker::require_immediate_enum (unsigned int rel_argno, tree type)
- {
-   unsigned int argno = m_base_arg + rel_argno;
-   if (!argument_exists_p (argno))
-     return true;
- 
-   HOST_WIDE_INT actual;
-   if (!require_immediate (argno, actual))
-     return false;
- 
-   for (tree entry = TYPE_VALUES (type); entry; entry = TREE_CHAIN (entry))
-     {
-       /* The value is an INTEGER_CST for C and a CONST_DECL wrapper
- 	 around an INTEGER_CST for C++.  */
-       tree value = TREE_VALUE (entry);
-       if (TREE_CODE (value) == CONST_DECL)
- 	value = DECL_INITIAL (value);
-       if (wi::to_widest (value) == actual)
- 	return true;
-     }
- 
-   report_not_enum (location, fndecl, argno, actual, type);
-   return false;
- }
- 
- /* The intrinsic conceptually divides vector argument REL_VEC_ARGNO into
-    groups of GROUP_SIZE elements.  Return true if argument REL_ARGNO is
-    a suitable constant index for selecting one of these groups.  The
-    selection happens within a 128-bit quadword, rather than the whole vector.
- 
-    REL_ARGNO and REL_VEC_ARGNO count from the end of the predication
-    arguments.  */
- bool
- function_checker::require_immediate_lane_index (unsigned int rel_argno,
- 						unsigned int rel_vec_argno,
- 						unsigned int group_size)
- {
-   unsigned int argno = m_base_arg + rel_argno;
-   if (!argument_exists_p (argno))
-     return true;
- 
-   /* Get the type of the vector argument.  tree_argument_type wants a
-      1-based number, whereas VEC_ARGNO is 0-based.  */
-   unsigned int vec_argno = m_base_arg + rel_vec_argno;
-   machine_mode mode = TYPE_MODE (type_argument_type (m_fntype, vec_argno + 1));
-   gcc_assert (VECTOR_MODE_P (mode));
-   unsigned int nlanes = 128 / (group_size * GET_MODE_UNIT_BITSIZE (mode));
-   return require_immediate_range (rel_argno, 0, nlanes - 1);
- }
- 
- /* Check that argument REL_ARGNO is an integer constant expression that
-    has one of the given values.  */
- bool
- function_checker::require_immediate_one_of (unsigned int rel_argno,
- 					    HOST_WIDE_INT value0,
- 					    HOST_WIDE_INT value1,
- 					    HOST_WIDE_INT value2,
- 					    HOST_WIDE_INT value3)
- {
-   unsigned int argno = m_base_arg + rel_argno;
-   if (!argument_exists_p (argno))
-     return true;
- 
-   HOST_WIDE_INT actual;
-   if (!require_immediate (argno, actual))
-     return false;
- 
-   if (actual != value0
-       && actual != value1
-       && actual != value2
-       && actual != value3)
-     {
-       report_not_one_of (location, fndecl, argno, actual,
- 			 value0, value1, value2, value3);
-       return false;
-     }
- 
-   return true;
- }
- 
- /* Check that argument REL_ARGNO is an integer constant expression in the
-    range [MIN, MAX].  REL_ARGNO counts from the end of the predication
-    arguments.  */
- bool
- function_checker::require_immediate_range (unsigned int rel_argno,
- 					   HOST_WIDE_INT min,
- 					   HOST_WIDE_INT max)
- {
-   unsigned int argno = m_base_arg + rel_argno;
-   if (!argument_exists_p (argno))
-     return true;
- 
-   /* Required because of the tree_to_uhwi -> HOST_WIDE_INT conversion
-      in require_immediate.  */
-   gcc_assert (min >= 0 && min <= max);
-   HOST_WIDE_INT actual;
-   if (!require_immediate (argno, actual))
-     return false;
- 
-   if (!IN_RANGE (actual, min, max))
-     {
-       report_out_of_range (location, fndecl, argno, actual, min, max);
-       return false;
-     }
- 
-   return true;
- }
- 
- /* Perform semantic checks on the call.  Return true if the call is valid,
-    otherwise report a suitable error.  */
- bool
- function_checker::check ()
- {
-   function_args_iterator iter;
-   tree type;
-   unsigned int i = 0;
-   FOREACH_FUNCTION_ARGS (m_fntype, type, iter)
-     {
-       if (type == void_type_node || i >= m_nargs)
- 	break;
- 
-       if (i >= m_base_arg
- 	  && TREE_CODE (type) == ENUMERAL_TYPE
- 	  && !require_immediate_enum (i - m_base_arg, type))
- 	return false;
- 
-       i += 1;
-     }
- 
-   return shape->check (*this);
- }
- 
- /* Return true if V is a vector constant and if, for every in-range integer I,
-    element STEP*I is equal to element 0.  */
- bool
- vector_cst_all_same (tree v, unsigned int step)
- {
-   if (TREE_CODE (v) != VECTOR_CST)
-     return false;
- 
-   /* VECTOR_CST_NELTS_PER_PATTERN applies to any multiple of
-      VECTOR_CST_NPATTERNS.  */
-   unsigned int lcm = least_common_multiple (step, VECTOR_CST_NPATTERNS (v));
-   unsigned int nelts = lcm * VECTOR_CST_NELTS_PER_PATTERN (v);
-   tree first_el = VECTOR_CST_ENCODED_ELT (v, 0);
-   for (unsigned int i = 0; i < nelts; i += step)
-     if (!operand_equal_p (VECTOR_CST_ELT (v, i), first_el, 0))
-       return false;
- 
-   return true;
- }
- 
- /* Return true if V is a constant predicate that acts as a ptrue when
-    predicating STEP-byte elements.  */
- bool
- is_ptrue (tree v, unsigned int step)
- {
-   return (TREE_CODE (v) == VECTOR_CST
- 	  && TYPE_MODE (TREE_TYPE (v)) == VNx16BImode
- 	  && integer_nonzerop (VECTOR_CST_ENCODED_ELT (v, 0))
- 	  && vector_cst_all_same (v, step));
- }
- 
- /* Return true if V is a constant predicate that acts as a pfalse.  */
- bool
- is_pfalse (tree v)
- {
-   return (TREE_CODE (v) == VECTOR_CST
- 	  && TYPE_MODE (TREE_TYPE (v)) == VNx16BImode
- 	  && integer_zerop (v));
- }
- 
- gimple_folder::gimple_folder (const function_instance &instance, tree fndecl,
- 			      gimple_stmt_iterator *gsi_in, gcall *call_in)
-   : function_call_info (gimple_location (call_in), instance, fndecl),
-     gsi (gsi_in), call (call_in), lhs (gimple_call_lhs (call_in))
- {
- }
- 
- /* VALUE might be a vector of type VECTYPE or a single scalar element.
-    Duplicate it into a vector of type VECTYPE in the latter case, adding any
-    new statements to STMTS.  */
- tree
- gimple_folder::force_vector (gimple_seq &stmts, tree vectype, tree value)
- {
-   if (!VECTOR_TYPE_P (TREE_TYPE (value)))
-     value = gimple_build_vector_from_val (&stmts, vectype, value);
-   return value;
- }
- 
- /* Convert predicate argument ARGNO so that it has the type appropriate for
-    an operation on VECTYPE.  Add any new statements to STMTS.  */
- tree
- gimple_folder::convert_pred (gimple_seq &stmts, tree vectype,
- 			     unsigned int argno)
- {
-   tree pred = gimple_call_arg (call, argno);
-   if (known_eq (TYPE_VECTOR_SUBPARTS (TREE_TYPE (pred)),
- 		TYPE_VECTOR_SUBPARTS (vectype)))
-     return pred;
- 
-   return gimple_build (&stmts, VIEW_CONVERT_EXPR,
- 		       truth_type_for (vectype), pred);
- }
- 
- /* Return a pointer to the address in a contiguous load or store,
-    given that each memory vector has type VECTYPE.  Add any new
-    statements to STMTS.  */
- tree
- gimple_folder::fold_contiguous_base (gimple_seq &stmts, tree vectype)
- {
-   tree base = gimple_call_arg (call, 1);
-   if (mode_suffix_id == MODE_vnum)
-     {
-       tree offset = gimple_call_arg (call, 2);
-       offset = gimple_convert (&stmts, sizetype, offset);
-       offset = gimple_build (&stmts, MULT_EXPR, sizetype, offset,
- 			     TYPE_SIZE_UNIT (vectype));
-       base = gimple_build (&stmts, POINTER_PLUS_EXPR, TREE_TYPE (base),
- 			   base, offset);
-     }
-   return base;
- }
- 
- /* Return the alignment and TBAA argument to an internal load or store
-    function like IFN_MASK_LOAD or IFN_MASK_STORE, given that it accesses
-    memory elements of type TYPE.  */
- tree
- gimple_folder::load_store_cookie (tree type)
- {
-   return build_int_cst (build_pointer_type (type), TYPE_ALIGN (type));
- }
- 
- /* Fold the call to a call to INSTANCE, with the same arguments.  */
- gcall *
- gimple_folder::redirect_call (const function_instance &instance)
- {
-   registered_function *rfn
-     = function_table->find_with_hash (instance, instance.hash ());
-   if (!rfn)
-     return NULL;
- 
-   gimple_call_set_fndecl (call, rfn->decl);
-   gimple_call_set_fntype (call, TREE_TYPE (rfn->decl));
-   return call;
- }
- 
- /* Redirect _z and _m calls to _x functions if the predicate is all-true.
-    This allows us to use unpredicated instructions, where available.  */
- gimple *
- gimple_folder::redirect_pred_x ()
- {
-   if (pred != PRED_z && pred != PRED_m)
-     return nullptr;
- 
-   if (gimple_call_num_args (call) < 2)
-     return nullptr;
- 
-   tree lhs_type = TREE_TYPE (TREE_TYPE (fndecl));
-   tree arg0_type = type_argument_type (TREE_TYPE (fndecl), 1);
-   tree arg1_type = type_argument_type (TREE_TYPE (fndecl), 2);
-   if (!VECTOR_TYPE_P (lhs_type)
-       || !VECTOR_TYPE_P (arg0_type)
-       || !VECTOR_TYPE_P (arg1_type))
-     return nullptr;
- 
-   auto lhs_step = element_precision (lhs_type);
-   auto rhs_step = element_precision (arg1_type);
-   auto step = MAX (lhs_step, rhs_step);
-   if (!multiple_p (step, BITS_PER_UNIT)
-       || !is_ptrue (gimple_call_arg (call, 0), step / BITS_PER_UNIT))
-     return nullptr;
- 
-   function_instance instance (*this);
-   instance.pred = PRED_x;
-   return redirect_call (instance);
- }
- 
- /* Fold calls with predicate pfalse:
-    _m predication: lhs = op1.
-    _x or _z: lhs = {0, ...}.
-    Implicit predication that reads from memory: lhs = {0, ...}.
-    Implicit predication that writes to memory or prefetches: no-op.
-    Return the new gimple statement on success, else NULL.  */
- gimple *
- gimple_folder::fold_pfalse ()
- {
-   tree gp = gp_value (call);
-   /* If there isn't a GP then we can't do any folding as the instruction isn't
-      predicated.  */
-   if (!gp)
-     return nullptr;
- 
-   if (pred == PRED_m)
-     {
-       tree val = inactive_values (call);
-       if (is_pfalse (gp))
- 	return fold_call_to (val);
-       return nullptr;
-     }
-   if ((pred == PRED_x || pred == PRED_z) && is_pfalse (gp))
-     return fold_call_to (build_zero_cst (TREE_TYPE (lhs)));
-   if (pred == PRED_implicit && is_pfalse (gp))
-     {
-       unsigned int flags = call_properties ();
-       /* Folding to lhs = {0, ...} is not appropriate for intrinsics with
- 	 AGGREGATE types as lhs.  */
-       if ((flags & CP_READ_MEMORY)
- 	  && !AGGREGATE_TYPE_P (TREE_TYPE (lhs)))
- 	return fold_call_to (build_zero_cst (TREE_TYPE (lhs)));
-       if (flags & (CP_WRITE_MEMORY | CP_PREFETCH_MEMORY))
- 	return fold_to_stmt_vops (gimple_build_nop ());
-     }
-   return nullptr;
- }
- 
- /* Convert the lhs and all non-boolean vector-type operands to TYPE.
-    Pass the converted variables to the callback FP, and finally convert the
-    result back to the original type. Add the necessary conversion statements.
-    Return the new call. Note the tree argument to the callback FP, can only
-    be set once; it will always be a SSA_NAME.  */
- gimple *
- gimple_folder::convert_and_fold (tree type,
- 				 gimple *(*fp) (gimple_folder &,
- 						tree, vec<tree> &))
- {
-   gcc_assert (VECTOR_TYPE_P (type)
- 	      && TYPE_MODE (type) != VNx16BImode);
-   tree old_ty = TREE_TYPE (lhs);
-   gimple_seq stmts = NULL;
-   bool convert_lhs_p = !useless_type_conversion_p (type, old_ty);
-   tree lhs_conv = convert_lhs_p ? make_ssa_name (type) : lhs;
-   unsigned int num_args = gimple_call_num_args (call);
-   auto_vec<tree, 16> args_conv;
-   args_conv.safe_grow (num_args);
-   for (unsigned int i = 0; i < num_args; ++i)
-     {
-       tree op = gimple_call_arg (call, i);
-       tree op_ty = TREE_TYPE (op);
-       args_conv[i] =
- 	(VECTOR_TYPE_P (op_ty)
- 	 && TYPE_MODE (op_ty) != VNx16BImode
- 	 && !useless_type_conversion_p (op_ty, type))
- 	? gimple_build (&stmts, VIEW_CONVERT_EXPR, type, op) : op;
-     }
- 
-   gimple *new_stmt = fp (*this, lhs_conv, args_conv);
-   gsi_insert_seq_before (gsi, stmts, GSI_SAME_STMT);
-   if (convert_lhs_p)
-     {
-       tree t = build1 (VIEW_CONVERT_EXPR, old_ty, lhs_conv);
-       gimple *g = gimple_build_assign (lhs, VIEW_CONVERT_EXPR, t);
-       gsi_insert_after (gsi, g, GSI_SAME_STMT);
-     }
-   return new_stmt;
- }
- 
- /* Fold the call to constant VAL.  */
- gimple *
- gimple_folder::fold_to_cstu (poly_uint64 val)
- {
-   return gimple_build_assign (lhs, build_int_cstu (TREE_TYPE (lhs), val));
- }
- 
- /* Fold the call to a PTRUE, taking the element size from type suffix 0.  */
- gimple *
- gimple_folder::fold_to_ptrue ()
- {
-   tree svbool_type = TREE_TYPE (lhs);
-   tree bool_type = TREE_TYPE (svbool_type);
-   unsigned int element_bytes = type_suffix (0).element_bytes;
- 
-   /* The return type is svbool_t for all type suffixes, thus for b8 we
-      want { 1, 1, 1, 1, ... }, for b16 we want { 1, 0, 1, 0, ... }, etc.  */
-   tree_vector_builder builder (svbool_type, element_bytes, 1);
-   builder.quick_push (build_all_ones_cst (bool_type));
-   for (unsigned int i = 1; i < element_bytes; ++i)
-     builder.quick_push (build_zero_cst (bool_type));
-   return gimple_build_assign (lhs, builder.build ());
- }
- 
- /* Fold the call to a PFALSE.  */
- gimple *
- gimple_folder::fold_to_pfalse ()
- {
-   return gimple_build_assign (lhs, build_zero_cst (TREE_TYPE (lhs)));
- }
- 
- /* Fold an operation to a constant predicate in which the first VL
-    elements are set and the rest are clear.  Take the element size
-    from type suffix 0.  */
- gimple *
- gimple_folder::fold_to_vl_pred (unsigned int vl)
- {
-   tree vectype = TREE_TYPE (lhs);
-   tree element_type = TREE_TYPE (vectype);
-   tree minus_one = build_all_ones_cst (element_type);
-   tree zero = build_zero_cst (element_type);
-   unsigned int element_bytes = type_suffix (0).element_bytes;
- 
-   /* Construct COUNT elements that contain the ptrue followed by
-      a repeating sequence of COUNT elements.  */
-   unsigned int count = constant_lower_bound (TYPE_VECTOR_SUBPARTS (vectype));
-   gcc_assert (vl * element_bytes <= count);
-   tree_vector_builder builder (vectype, count, 2);
-   for (unsigned int i = 0; i < count * 2; ++i)
-     {
-       bool bit = (i & (element_bytes - 1)) == 0 && i < vl * element_bytes;
-       builder.quick_push (bit ? minus_one : zero);
-     }
-   return gimple_build_assign (lhs, builder.build ());
- }
- 
- /* Try to fold the call to a constant, given that, for integers, the call
-    is roughly equivalent to binary operation CODE.  aarch64_const_binop
-    handles any differences between CODE and the intrinsic.  */
- gimple *
- gimple_folder::fold_const_binary (enum tree_code code)
- {
-   gcc_assert (gimple_call_num_args (call) == 3);
-   tree pg = gimple_call_arg (call, 0);
-   tree op1 = gimple_call_arg (call, 1);
-   tree op2 = gimple_call_arg (call, 2);
- 
-   if (type_suffix (0).integer_p
-       && (pred == PRED_x || is_ptrue (pg, type_suffix (0).element_bytes)))
-     if (tree res = vector_const_binop (code, op1, op2, aarch64_const_binop))
-       return gimple_build_assign (lhs, res);
- 
-   return NULL;
- }
- 
- /* Fold the active lanes to X and set the inactive lanes according to the
-    predication.  Return the new statement.  */
- gimple *
- gimple_folder::fold_active_lanes_to (tree x)
- {
-   /* If predication is _x or the predicate is ptrue, fold to X.  */
-   if (pred == PRED_x
-       || is_ptrue (gimple_call_arg (call, 0), type_suffix (0).element_bytes))
-     return gimple_build_assign (lhs, x);
- 
-   /* If the predication is _z or _m, calculate a vector that supplies the
-      values of inactive lanes (the first vector argument for m and a zero
-      vector from z).  */
-   tree vec_inactive;
-   if (pred == PRED_z)
-     vec_inactive = build_zero_cst (TREE_TYPE (lhs));
-   else
-     vec_inactive = gimple_call_arg (call, 1);
-   if (operand_equal_p (x, vec_inactive, 0))
-     return gimple_build_assign (lhs, x);
- 
-   gimple_seq stmts = NULL;
-   tree pred = convert_pred (stmts, vector_type (0), 0);
-   x = force_vector (stmts, TREE_TYPE (lhs), x);
-   gsi_insert_seq_before (gsi, stmts, GSI_SAME_STMT);
-   return gimple_build_assign (lhs, VEC_COND_EXPR, pred, x, vec_inactive);
- }
- 
- /* Fold call to assignment statement lhs = t.  */
- gimple *
- gimple_folder::fold_call_to (tree t)
- {
-   if (types_compatible_p (TREE_TYPE (lhs), TREE_TYPE (t)))
-     return fold_to_stmt_vops (gimple_build_assign (lhs, t));
- 
-   tree rhs = build1 (VIEW_CONVERT_EXPR, TREE_TYPE (lhs), t);
-   return fold_to_stmt_vops (gimple_build_assign (lhs, VIEW_CONVERT_EXPR, rhs));
- }
- 
- /* Fold call to G, incl. adjustments to the virtual operands.  */
- gimple *
- gimple_folder::fold_to_stmt_vops (gimple *g)
- {
-   gimple_seq stmts = NULL;
-   gimple_seq_add_stmt_without_update (&stmts, g);
-   gsi_replace_with_seq_vops (gsi, stmts);
-   return g;
- }
- 
- /* Try to fold the call.  Return the new statement on success and null
-    on failure.  */
- gimple *
- gimple_folder::fold ()
- {
-   /* Don't fold anything when SVE is disabled; emit an error during
-      expansion instead.  */
-   if (!TARGET_SVE)
-     return NULL;
- 
-   /* Punt if the function has a return type and no result location is
-      provided.  The attributes should allow target-independent code to
-      remove the calls if appropriate.  */
-   if (!lhs && TREE_TYPE (gimple_call_fntype (call)) != void_type_node)
-     return NULL;
- 
-   /* First try some simplifications that are common to many functions.  */
-   if (auto *call = redirect_pred_x ())
-     return call;
-   if (auto *call = fold_pfalse ())
-     return call;
- 
-   return base->fold (*this);
- }
- 
- function_expander::function_expander (const function_instance &instance,
- 				      tree fndecl, tree call_expr_in,
- 				      rtx possible_target_in)
-   : function_call_info (EXPR_LOCATION (call_expr_in), instance, fndecl),
-     call_expr (call_expr_in), possible_target (possible_target_in)
- {
- }
- 
- /* Return the handler of direct optab OP for type suffix SUFFIX_I.  */
- insn_code
- function_expander::direct_optab_handler (optab op, unsigned int suffix_i)
- {
-   return ::direct_optab_handler (op, tuple_mode (suffix_i));
- }
- 
- /* Choose between signed and unsigned direct optabs SIGNED_OP and
-    UNSIGNED_OP based on the signedness of type suffix SUFFIX_I, then
-    pick the appropriate optab handler for the mode.  Use MODE as the
-    mode if given, otherwise use the mode of type suffix SUFFIX_I.  */
- insn_code
- function_expander::direct_optab_handler_for_sign (optab signed_op,
- 						  optab unsigned_op,
- 						  unsigned int suffix_i,
- 						  machine_mode mode)
- {
-   if (mode == VOIDmode)
-     mode = vector_mode (suffix_i);
-   optab op = type_suffix (suffix_i).unsigned_p ? unsigned_op : signed_op;
-   return ::direct_optab_handler (op, mode);
- }
- 
- /* Choose between signed and unsigned convert optabs SIGNED_OP and
-    UNSIGNED_OP based on the signedness of type suffix SUFFIX_I, then
-    pick the appropriate optab handler for "converting" from FROM_MODE
-    to TO_MODE.  */
- insn_code
- function_expander::convert_optab_handler_for_sign (optab signed_op,
- 						   optab unsigned_op,
- 						   unsigned int suffix_i,
- 						   machine_mode to_mode,
- 						   machine_mode from_mode)
- {
-   optab op = type_suffix (suffix_i).unsigned_p ? unsigned_op : signed_op;
-   return ::convert_optab_handler (op, to_mode, from_mode);
- }
- 
- /* Return true if X overlaps any input.  */
- bool
- function_expander::overlaps_input_p (rtx x)
- {
-   for (unsigned int i = 0; i < args.length (); ++i)
-     if (reg_overlap_mentioned_p (x, args[i]))
-       return true;
-   return false;
- }
- 
- /* Convert ptr_mode value X to Pmode.  */
- rtx
- function_expander::convert_to_pmode (rtx x)
- {
-   if (ptr_mode == SImode)
-     x = simplify_gen_unary (ZERO_EXTEND, DImode, x, SImode);
-   return x;
- }
- 
- /* Return the base address for a contiguous load or store function.
-    MEM_MODE is the mode of the addressed memory, BASE_ARGNO is
-    the index of the base argument, and VNUM_ARGNO is the index of
-    the vnum offset argument (if any).  VL_ISA_MODE is AARCH64_FL_SM_ON
-    if the vnum argument is a factor of the SME vector length, 0 if it
-    is a factor of the current prevailing vector length.  */
- rtx
- function_expander::get_contiguous_base (machine_mode mem_mode,
- 					unsigned int base_argno,
- 					unsigned int vnum_argno,
- 					aarch64_feature_flags vl_isa_mode)
- {
-   rtx base = convert_to_pmode (args[base_argno]);
-   if (mode_suffix_id == MODE_vnum)
-     {
-       rtx vnum = args[vnum_argno];
-       if (vnum != const0_rtx)
- 	{
- 	  /* Use the size of the memory mode for extending loads and truncating
- 	     stores.  Use the size of a full vector for non-extending loads
- 	     and non-truncating stores (including svld[234] and svst[234]).  */
- 	  poly_int64 size = ordered_min (GET_MODE_SIZE (mem_mode),
- 					 BYTES_PER_SVE_VECTOR);
- 	  rtx offset;
- 	  if ((vl_isa_mode & AARCH64_FL_SM_ON)
- 	      && !TARGET_STREAMING
- 	      && !size.is_constant ())
- 	    {
- 	      gcc_assert (known_eq (size, BYTES_PER_SVE_VECTOR));
- 	      if (CONST_INT_P (vnum) && IN_RANGE (INTVAL (vnum), -32, 31))
- 		offset = aarch64_sme_vq_immediate (Pmode, INTVAL (vnum) * 16,
- 						   AARCH64_ISA_MODE);
- 	      else
- 		{
- 		  offset = aarch64_sme_vq_immediate (Pmode, 16,
- 						     AARCH64_ISA_MODE);
- 		  offset = simplify_gen_binary (MULT, Pmode, vnum, offset);
- 		}
- 	    }
- 	  else
- 	    {
- 	      offset = gen_int_mode (size, Pmode);
- 	      offset = simplify_gen_binary (MULT, Pmode, vnum, offset);
- 	    }
- 	  base = simplify_gen_binary (PLUS, Pmode, base, offset);
- 	}
-     }
-   return base;
- }
- 
- /* For a function that does the equivalent of:
- 
-      OUTPUT = COND ? FN (INPUTS) : FALLBACK;
- 
-    return the value of FALLBACK.
- 
-    MODE is the mode of OUTPUT.  NOPS is the number of operands in INPUTS.
-    MERGE_ARGNO is the argument that provides FALLBACK for _m functions,
-    or DEFAULT_MERGE_ARGNO if we should apply the usual rules.
- 
-    ARGNO is the caller's index into args.  If the returned value is
-    argument 0 (as for unary _m operations), increment ARGNO past the
-    returned argument.  */
- rtx
- function_expander::get_fallback_value (machine_mode mode, unsigned int nops,
- 				       unsigned int merge_argno,
- 				       unsigned int &argno)
- {
-   if (pred == PRED_z)
-     return CONST0_RTX (mode);
- 
-   gcc_assert (pred == PRED_m || pred == PRED_x);
-   if (merge_argno == DEFAULT_MERGE_ARGNO)
-     merge_argno = shape->has_merge_argument_p (*this, nops) ? 0 : 1;
- 
-   if (merge_argno == 0)
-     return args[argno++];
- 
-   return args[merge_argno];
- }
- 
- /* Return a REG rtx that can be used for the result of the function,
-    using the preferred target if suitable.  */
- rtx
- function_expander::get_reg_target ()
- {
-   machine_mode target_mode = result_mode ();
-   if (!possible_target
-       || !register_operand (possible_target, target_mode))
-     possible_target = gen_reg_rtx (target_mode);
-   return possible_target;
- }
- 
- /* As for get_reg_target, but make sure that the returned REG does not
-    overlap any inputs.  */
- rtx
- function_expander::get_nonoverlapping_reg_target ()
- {
-   if (possible_target && overlaps_input_p (possible_target))
-     possible_target = NULL_RTX;
-   return get_reg_target ();
- }
- 
- /* Add an output operand to the instruction we're building, which has
-    code ICODE.  Bind the output to the preferred target rtx if possible.  */
- void
- function_expander::add_output_operand (insn_code icode)
- {
-   unsigned int opno = m_ops.length ();
-   machine_mode mode = insn_data[icode].operand[opno].mode;
-   m_ops.safe_grow (opno + 1, true);
-   create_output_operand (&m_ops.last (), possible_target, mode);
- }
- 
- /* Add an input operand to the instruction we're building, which has
-    code ICODE.  Calculate the value of the operand as follows:
- 
-    - If the operand is a vector and X is not, broadcast X to fill a
-      vector of the appropriate mode.
- 
-    - Otherwise, if the operand is a predicate, coerce X to have the
-      mode that the instruction expects.  In this case X is known to be
-      VNx16BImode (the mode of svbool_t).
- 
-    - Otherwise use X directly.  The expand machinery checks that X has
-      the right mode for the instruction.  */
- void
- function_expander::add_input_operand (insn_code icode, rtx x)
- {
-   unsigned int opno = m_ops.length ();
-   const insn_operand_data &operand = insn_data[icode].operand[opno];
-   machine_mode mode = operand.mode;
-   if (mode == VOIDmode)
-     {
-       /* The only allowable uses of VOIDmode are:
- 
- 	 - the wildcard aarch64_any_register_operand, which is used
- 	   to avoid combinatorial explosion in the reinterpret patterns
- 
- 	 - pmode_register_operand, which always has mode Pmode.  */
-       if (operand.predicate == aarch64_any_register_operand)
- 	mode = GET_MODE (x);
-       else if (operand.predicate == pmode_register_operand)
- 	mode = Pmode;
-       else
- 	gcc_unreachable ();
-     }
-   else if (!VECTOR_MODE_P (GET_MODE (x)) && VECTOR_MODE_P (mode))
-     x = expand_vector_broadcast (mode, x);
-   else if (GET_MODE_CLASS (mode) == MODE_VECTOR_BOOL)
-     {
-       gcc_assert (GET_MODE (x) == VNx16BImode);
-       x = gen_lowpart (mode, x);
-     }
-   m_ops.safe_grow (m_ops.length () + 1, true);
-   create_input_operand (&m_ops.last (), x, mode);
- }
- 
- /* Add an integer operand with value X to the instruction.  */
- void
- function_expander::add_integer_operand (poly_int64 x)
- {
-   m_ops.safe_grow (m_ops.length () + 1, true);
-   create_integer_operand (&m_ops.last (), x);
- }
- 
- /* Add a memory operand with mode MODE and address ADDR.  */
- void
- function_expander::add_mem_operand (machine_mode mode, rtx addr)
- {
-   /* Exception for OImode for the ld1ro intrinsics.
-      They act on 256 bit octaword data, and it's just easier to use a scalar
-      mode to represent that than add a new vector mode solely for the purpose
-      of this intrinsic.  */
-   gcc_assert (VECTOR_MODE_P (mode) || mode == OImode);
-   rtx mem = gen_rtx_MEM (mode, memory_address (mode, addr));
-   /* The memory is only guaranteed to be element-aligned.  */
-   set_mem_align (mem, GET_MODE_ALIGNMENT (GET_MODE_INNER (mode)));
-   add_fixed_operand (mem);
- }
- 
- /* Add an address operand with value X.  The static operand data says
-    what mode and form the address must have.  */
- void
- function_expander::add_address_operand (rtx x)
- {
-   m_ops.safe_grow (m_ops.length () + 1, true);
-   create_address_operand (&m_ops.last (), x);
- }
- 
- /* Add an operand that must be X.  The only way of legitimizing an
-    invalid X is to reload the address of a MEM.  */
- void
- function_expander::add_fixed_operand (rtx x)
- {
-   m_ops.safe_grow (m_ops.length () + 1, true);
-   create_fixed_operand (&m_ops.last (), x);
- }
- 
- /* Generate instruction ICODE, given that its operands have already
-    been added to M_OPS.  Return the value of the first operand.  */
- rtx
- function_expander::generate_insn (insn_code icode)
- {
-   expand_insn (icode, m_ops.length (), m_ops.address ());
-   return function_returns_void_p () ? const0_rtx : m_ops[0].value;
- }
- 
- /* Convert the arguments to a gather/scatter function into the
-    associated md operands.  Argument ARGNO is the scalar or vector base and
-    argument ARGNO + 1 is the scalar or vector displacement (if applicable).
-    The md pattern expects:
- 
-    - a scalar base
-    - a vector displacement
- 
-    If SCALED_P is true, it also expects:
- 
-    - a const_int that is 1 if the displacement is zero-extended from 32 bits
-    - a scaling multiplier (1 for bytes, 2 for .h indices, etc.).
- 
-    If SCALED_P is false, the displacement is implicitly zero-extended
-    and the scaling multiplier is implicitly 1.  */
- void
- function_expander::prepare_gather_address_operands (unsigned int argno,
- 						    bool scaled_p)
- {
-   machine_mode mem_mode = memory_vector_mode ();
-   tree vector_type = base_vector_type ();
-   units_index units = displacement_units ();
-   int shift_idx = -1;
-   if (units == UNITS_none)
-     {
-       /* Vector base, no displacement.  Convert to an integer zero base
- 	 and a vector byte offset.  */
-       args.quick_insert (argno, const0_rtx);
-       units = UNITS_bytes;
-     }
-   else if (vector_type)
-     {
-       /* Vector base, scalar displacement.  Convert to a scalar base and
- 	 a vector byte offset.  */
-       std::swap (args[argno], args[argno + 1]);
-       if (units == UNITS_elements)
- 	shift_idx = argno;
-     }
-   else
-     {
-       /* Scalar base, vector displacement.  This is the order that the md
- 	 pattern wants.  */
-       args[argno] = convert_to_pmode (args[argno]);
-       vector_type = displacement_vector_type ();
-       if (units == UNITS_elements && !scaled_p)
- 	shift_idx = argno + 1;
-     }
-   tree scalar_displacement_type = TREE_TYPE (vector_type);
- 
-   if (shift_idx >= 0)
-     {
-       machine_mode arg_mode = GET_MODE (args[shift_idx]);
-       if (arg_mode == VOIDmode)
- 	arg_mode = DImode;
-       unsigned int elt_bytes = GET_MODE_UNIT_SIZE (mem_mode);
-       rtx shift = gen_int_mode (exact_log2 (elt_bytes), DImode);
-       args[shift_idx] = simplify_gen_binary (ASHIFT, arg_mode,
- 					     args[shift_idx], shift);
-       units = UNITS_bytes;
-     }
- 
-   bool uxtw_p = (TYPE_PRECISION (scalar_displacement_type) == 64
- 		 || TYPE_UNSIGNED (scalar_displacement_type));
-   unsigned int scale = (units == UNITS_bytes
- 			? 1 : GET_MODE_UNIT_SIZE (mem_mode));
- 
-   if (scaled_p)
-     {
-       args.quick_insert (argno + 2, GEN_INT (uxtw_p));
-       args.quick_insert (argno + 3, GEN_INT (scale));
-     }
-   else
-     gcc_assert (uxtw_p && scale == 1);
- }
- 
- /* The final argument is an immediate svprfop value.  Add two fake arguments
-    to represent the rw and locality operands of a PREFETCH rtx.  */
- void
- function_expander::prepare_prefetch_operands ()
- {
-   unsigned int prfop = INTVAL (args.last ());
-   /* Bit 3 of the prfop selects stores over loads.  */
-   args.quick_push (GEN_INT ((prfop & 8) != 0));
-   /* Bits 1 and 2 specify the locality; 0-based for svprfop but
-      1-based for PREFETCH.  */
-   args.quick_push (GEN_INT (((prfop >> 1) & 3) + 1));
- }
- 
- /* Add a dummy argument to indicate whether predicate argument ARGNO
-    is all-true when interpreted in mode PRED_MODE.  The hint goes
-    immediately after ARGNO.  */
- void
- function_expander::add_ptrue_hint (unsigned int argno, machine_mode pred_mode)
- {
-   rtx pred = gen_lowpart (pred_mode, args[argno]);
-   int hint = (pred == CONSTM1_RTX (pred_mode)
- 	      ? SVE_KNOWN_PTRUE : SVE_MAYBE_NOT_PTRUE);
-   args.quick_insert (argno + 1, gen_int_mode (hint, SImode));
- }
- 
- /* Rotate inputs args[START:END] one position to the left, so that
-    args[START] becomes args[END - 1].  */
- void
- function_expander::rotate_inputs_left (unsigned int start, unsigned int end)
- {
-   rtx new_last = args[start];
-   for (unsigned int i = start; i < end - 1; ++i)
-     args[i] = args[i + 1];
-   args[end - 1] = new_last;
- }
- 
- /* Return true if the negation of argument ARGNO can be folded away,
-    replacing it with the negated value if so.  MODE is the associated
-    vector mode, but the argument could be a single element.  The main
-    case this handles is constant arguments.  */
- bool
- function_expander::try_negating_argument (unsigned int argno,
- 					  machine_mode mode)
- {
-   rtx x = args[argno];
-   if (!VECTOR_MODE_P (GET_MODE (x)))
-     mode = GET_MODE_INNER (mode);
- 
-   x = simplify_unary_operation (NEG, mode, x, mode);
-   if (!x)
-     return false;
- 
-   args[argno] = x;
-   return true;
- }
- 
- /* Implement the call using instruction ICODE, with a 1:1 mapping between
-    arguments and input operands.  */
- rtx
- function_expander::use_exact_insn (insn_code icode)
- {
-   unsigned int nops = insn_data[icode].n_operands;
-   if (!function_returns_void_p ())
-     {
-       add_output_operand (icode);
-       nops -= 1;
-     }
-   for (unsigned int i = 0; i < nops; ++i)
-     add_input_operand (icode, args[i]);
-   return generate_insn (icode);
- }
- 
- /* Implement the call using instruction ICODE, which does not use a
-    governing predicate.  We must therefore drop the GP from an _x call.  */
- rtx
- function_expander::use_unpred_insn (insn_code icode)
- {
-   /* We can't drop the predicate for _z and _m.  */
-   gcc_assert (pred == PRED_x || pred == PRED_none);
-   /* Discount the output operand.  */
-   unsigned int nops = insn_data[icode].n_operands - 1;
-   /* Drop the predicate argument in the case of _x predication.  */
-   unsigned int bias = (pred == PRED_x ? 1 : 0);
-   unsigned int i = 0;
- 
-   add_output_operand (icode);
-   for (; i < nops; ++i)
-     add_input_operand (icode, args[i + bias]);
- 
-   return generate_insn (icode);
- }
- 
- /* Implement the call using instruction ICODE, which is a predicated
-    operation that returns arbitrary values for inactive lanes.  */
- rtx
- function_expander::use_pred_x_insn (insn_code icode)
- {
-   /* At present we never need to handle PRED_none, which would involve
-      creating a new predicate rather than using one supplied by the user.  */
-   gcc_assert (pred == PRED_x);
-   /* Discount the output operand.  */
-   unsigned int nops = args.length () - 1;
- 
-   bool has_float_operand_p = FLOAT_MODE_P (insn_data[icode].operand[0].mode);
- 
-   /* Add the normal operands.  */
-   add_output_operand (icode);
-   add_input_operand (icode, args[0]);
-   for (unsigned int i = 0; i < nops; ++i)
-     {
-       add_input_operand (icode, args[i + 1]);
-       if (FLOAT_MODE_P (GET_MODE (args[i + 1])))
- 	has_float_operand_p = true;
-     }
- 
-   if (has_float_operand_p
-       && insn_data[icode].n_operands > (int) nops + 2)
-     {
-       /* Add a flag that indicates whether unpredicated instructions
- 	 are allowed.  */
-       rtx pred = m_ops[1].value;
-       if (flag_trapping_math && pred != CONST1_RTX (GET_MODE (pred)))
- 	add_integer_operand (SVE_STRICT_GP);
-       else
- 	add_integer_operand (SVE_RELAXED_GP);
-     }
- 
-   return generate_insn (icode);
- }
- 
- /* Implement the call using instruction ICODE, which does the equivalent of:
- 
-      OUTPUT = COND ? FN (INPUTS) : FALLBACK;
- 
-    The instruction operands are in the order above: OUTPUT, COND, INPUTS
-    and FALLBACK.  MERGE_ARGNO is the argument that provides FALLBACK for _m
-    functions, or DEFAULT_MERGE_ARGNO if we should apply the usual rules.  */
- rtx
- function_expander::use_cond_insn (insn_code icode, unsigned int merge_argno)
- {
-   /* At present we never need to handle PRED_none, which would involve
-      creating a new predicate rather than using one supplied by the user.  */
-   gcc_assert (pred != PRED_none);
-   /* Discount the output, predicate and fallback value.  */
-   unsigned int nops = insn_data[icode].n_operands - 3;
-   machine_mode mode = insn_data[icode].operand[0].mode;
- 
-   unsigned int opno = 0;
-   rtx fallback_arg = get_fallback_value (mode, nops, merge_argno, opno);
-   rtx pred = args[opno++];
- 
-   add_output_operand (icode);
-   add_input_operand (icode, pred);
-   for (unsigned int i = 0; i < nops; ++i)
-     add_input_operand (icode, args[opno + i]);
-   if (fallback_arg == CONST0_RTX (mode)
-       && insn_operand_matches (icode, m_ops.length (), fallback_arg))
-     add_fixed_operand (fallback_arg);
-   else
-     add_input_operand (icode, fallback_arg);
-   return generate_insn (icode);
- }
- 
- /* Implement the call using instruction ICODE, which is a select-like
-    operation with the following operands:
- 
-    0: output
-    1: true value
-    2: false value
-    3: predicate
- 
-    MERGE_ARGNO is the argument that provides the "false" value for _m
-    functions, or DEFAULT_MERGE_ARGNO if we should apply the usual rules.  */
- rtx
- function_expander::use_vcond_mask_insn (insn_code icode,
- 					unsigned int merge_argno)
- {
-   machine_mode mode = vector_mode (0);
- 
-   unsigned int opno = 0;
-   rtx false_arg = get_fallback_value (mode, 1, merge_argno, opno);
-   rtx pred_arg = args[opno++];
-   rtx true_arg = args[opno++];
- 
-   add_output_operand (icode);
-   add_input_operand (icode, true_arg);
-   add_input_operand (icode, false_arg);
-   add_input_operand (icode, pred_arg);
-   return generate_insn (icode);
- }
- 
- /* Implement the call using instruction ICODE, which loads memory operand 1
-    into register operand 0 under the control of predicate operand 2.
-    Extending loads have a further predicate (operand 3) that nominally
-    controls the extension.
-    HAS_ELSE is true if the pattern has an additional operand that specifies
-    the values of inactive lanes.  This exists to match the general maskload
-    interface and is always zero for AArch64.  */
- rtx
- function_expander::use_contiguous_load_insn (insn_code icode, bool has_else)
- {
-   machine_mode mem_mode = memory_vector_mode ();
- 
-   add_output_operand (icode);
-   add_mem_operand (mem_mode, get_contiguous_base (mem_mode));
-   add_input_operand (icode, args[0]);
-   if (GET_MODE_UNIT_BITSIZE (mem_mode) < type_suffix (0).element_bits)
-     add_input_operand (icode, CONSTM1_RTX (VNx16BImode));
- 
-   /* If we have an else operand, add it.  */
-   if (has_else)
-     add_input_operand (icode, CONST0_RTX (mem_mode));
- 
-   return generate_insn (icode);
- }
- 
- /* Implement the call using instruction ICODE, which prefetches from
-    address operand 1 under the control of predicate operand 0.
-    Operands 2, 3 and 4 respectively specify the svprfop value,
-    the PREFETCH rw flag and the PREFETCH locality.  */
- rtx
- function_expander::use_contiguous_prefetch_insn (insn_code icode)
- {
-   add_input_operand (icode, args[0]);
-   add_address_operand (get_contiguous_base (VNx16QImode));
-   for (unsigned int i = args.length () - 3; i < args.length (); ++i)
-     add_input_operand (icode, args[i]);
-   return generate_insn (icode);
- }
- 
- /* Implement the call using instruction ICODE, which stores register operand 1
-    into memory operand 0 under the control of predicate operand 2.  */
- rtx
- function_expander::use_contiguous_store_insn (insn_code icode)
- {
-   machine_mode mem_mode = memory_vector_mode ();
- 
-   add_mem_operand (mem_mode, get_contiguous_base (mem_mode));
-   add_input_operand (icode, args.last ());
-   add_input_operand (icode, args[0]);
-   return generate_insn (icode);
- }
- 
- /* Implement the call using one of the following strategies, chosen in order:
- 
-    (1) "aarch64_pred_<optab><mode>_z" for PRED_z predicate functions
- 
-    (2) "aarch64_pred_<optab><mode>" for PRED_x functions
- 
-    (3) a normal unpredicated optab for PRED_none and PRED_x functions,
-        dropping the predicate in the latter case
- 
-    (4) an unpredicated "aarch64_sve_<code_optab><mode>" for PRED_none and
-        PRED_x functions, again dropping the predicate for PRED_x
- 
-    (5) "cond_<optab><mode>" otherwise
- 
-    where <optab> corresponds to:
- 
-    - CODE_FOR_SINT for signed integers
-    - CODE_FOR_UINT for unsigned integers
-    - UNSPEC_FOR_COND_FP for predicated floating-point
-    - UNSPEC_FOR_UNCOND_FP for unpredicated floating-point
- 
-    and where <code_optab> is like <optab>, but uses CODE_FOR_SINT instead
-    of UNSPEC_FOR_FP for floating-point values.
- 
-    MERGE_ARGNO is the argument that provides the values of inactive lanes for
-    _m functions, or DEFAULT_MERGE_ARGNO if we should apply the usual rules.  */
- rtx
- function_expander::map_to_rtx_codes (rtx_code code_for_sint,
- 				     rtx_code code_for_uint,
- 				     int unspec_for_cond_fp,
- 				     int unspec_for_uncond_fp,
- 				     unsigned int merge_argno)
- {
-   machine_mode mode = tuple_mode (0);
-   rtx_code code = (type_suffix (0).unsigned_p ? code_for_uint : code_for_sint);
-   insn_code icode;
- 
-   if (mode_suffix_id == MODE_single)
-     {
-       gcc_assert (pred == PRED_none);
-       if (type_suffix (0).integer_p)
- 	icode = code_for_aarch64_sve_single (code, mode);
-       else
- 	icode = code_for_aarch64_sve_single (unspec_for_uncond_fp, mode);
-       return use_exact_insn (icode);
-     }
- 
-   /* Handle predicate logic operations, which always use _z predication.  */
-   if (type_suffix (0).tclass == TYPE_bool)
-     {
-       gcc_assert (pred == PRED_z && code_for_uint == code_for_sint);
-       return use_exact_insn (code_for_aarch64_pred_z (code, mode));
-     }
- 
-   /* First try using UNSPEC_PRED_X patterns for _x predication,
-      if available.  */
-   if (pred == PRED_x)
-     {
-       if (type_suffix (0).integer_p)
- 	icode = maybe_code_for_aarch64_pred (code, mode);
-       else
- 	icode = maybe_code_for_aarch64_pred (unspec_for_cond_fp, mode);
-       if (icode != CODE_FOR_nothing)
- 	return use_pred_x_insn (icode);
-     }
- 
-   /* Otherwise expand PRED_none and PRED_x operations without a predicate.
-      Floating-point operations conventionally use the signed rtx code.  */
-   if (pred == PRED_none || pred == PRED_x)
-     {
-       if (type_suffix (0).float_p && unspec_for_uncond_fp >= 0)
- 	icode = maybe_code_for_aarch64_sve (unspec_for_uncond_fp, mode);
-       else
- 	icode = direct_optab_handler (code_to_optab (code), 0);
-       if (icode == CODE_FOR_nothing)
- 	icode = code_for_aarch64_sve (code, mode);
-       return use_unpred_insn (icode);
-     }
- 
-   /* Don't use cond_*_optabs here, since not all codes have one yet.  */
-   if (type_suffix (0).integer_p)
-     icode = code_for_cond (code, mode);
-   else
-     icode = code_for_cond (unspec_for_cond_fp, mode);
-   return use_cond_insn (icode, merge_argno);
- }
- 
- /* Implement the call using one of the following strategies, chosen in order:
- 
-    (1) "aarch64_pred_<optab><mode>" for PRED_x functions; this is a
-        predicated pattern
- 
-    (2) "aarch64_sve_<optab><mode>" for PRED_none and PRED_x functions;
-        this is an unpredicated pattern
- 
-    (3) "cond_<optab><mode>" otherwise
- 
-    where <optab> corresponds to:
- 
-    - UNSPEC_FOR_SINT for signed integers
-    - UNSPEC_FOR_UINT for unsigned integers
-    - UNSPEC_FOR_FP for floating-point values
- 
-    MERGE_ARGNO is the argument that provides the values of inactive lanes for
-    _m functions, or DEFAULT_MERGE_ARGNO if we should apply the usual rules.  */
- rtx
- function_expander::map_to_unspecs (int unspec_for_sint, int unspec_for_uint,
- 				   int unspec_for_fp, unsigned int merge_argno)
- {
-   machine_mode mode = tuple_mode (0);
-   int unspec = (!type_suffix (0).integer_p ? unspec_for_fp
- 		: type_suffix (0).unsigned_p ? unspec_for_uint
- 		: unspec_for_sint);
- 
-   if (mode_suffix_id == MODE_single)
-     {
-       gcc_assert (pred == PRED_none);
-       return use_exact_insn (code_for_aarch64_sve_single (unspec, mode));
-     }
- 
-   if (pred == PRED_x)
-     {
-       insn_code icode = maybe_code_for_aarch64_pred (unspec, mode);
-       if (icode != CODE_FOR_nothing)
- 	return use_pred_x_insn (icode);
-     }
- 
-   if (pred == PRED_none || pred == PRED_x)
-     {
-       insn_code icode = maybe_code_for_aarch64_sve (unspec, mode);
-       if (icode != CODE_FOR_nothing)
- 	return use_unpred_insn (icode);
-     }
- 
-   insn_code icode = code_for_cond (unspec, vector_mode (0));
-   return use_cond_insn (icode, merge_argno);
- }
- 
- /* Expand the call and return its lhs.  */
- rtx
- function_expander::expand ()
- {
-   unsigned int nargs = call_expr_nargs (call_expr);
-   args.reserve (nargs);
-   for (unsigned int i = 0; i < nargs; ++i)
-     args.quick_push (expand_normal (CALL_EXPR_ARG (call_expr, i)));
- 
-   if (fpm_mode == FPM_set)
-     {
-       /* The last element of these functions is always an fpm_t that must be
-          written to FPMR before the call to the instruction itself. */
-       rtx fpm = args.last ();
-       gcc_assert (CONST_INT_P (fpm) || GET_MODE (fpm) == DImode);
-       emit_move_insn (gen_rtx_REG (DImode, FPM_REGNUM), fpm);
-     }
-   rtx result = base->expand (*this);
-   if (function_returns_void_p ())
-     gcc_assert (result == const0_rtx);
-   else
-     {
-       auto expected_mode = result_mode ();
-       if (GET_MODE_CLASS (expected_mode) == MODE_INT)
- 	/* Scalar integer constants don't store a mode.
- 
- 	   It's OK for a variable result to have a different mode from the
- 	   function return type.  In particular, some functions that return int
- 	   expand into instructions that have a DImode result, with all 64 bits
- 	   of the DImode being well-defined (usually zero).  */
- 	gcc_assert (CONST_SCALAR_INT_P (result)
- 		    || GET_MODE_CLASS (GET_MODE (result)) == MODE_INT);
-       else
- 	/* In other cases, the return value should have the same mode
- 	   as the return type.  */
- 	gcc_assert (GET_MODE (result) == expected_mode);
-     }
-   return result;
- }
- 
- /* Return a structure type that contains a single field of type FIELD_TYPE.
-    The field is called __val, but that's an internal detail rather than
-    an exposed part of the API.  */
- static tree
- wrap_type_in_struct (tree field_type)
- {
-   tree field = build_decl (input_location, FIELD_DECL,
- 			   get_identifier ("__val"), field_type);
-   tree struct_type = lang_hooks.types.make_type (RECORD_TYPE);
-   DECL_FIELD_CONTEXT (field) = struct_type;
-   TYPE_FIELDS (struct_type) = field;
-   make_type_sizeless (struct_type);
-   layout_type (struct_type);
-   return struct_type;
- }
- 
- /* Register a built-in TYPE_DECL called NAME for TYPE.  This is used/needed
-    when TYPE is a structure type.  */
- static void
- register_type_decl (tree type, const char *name)
- {
-   tree decl = build_decl (input_location, TYPE_DECL,
- 			  get_identifier (name), type);
-   TYPE_NAME (type) = decl;
-   TYPE_STUB_DECL (type) = decl;
-   lang_hooks.decls.pushdecl (decl);
-   /* ??? Undo the effect of set_underlying_type for C.  The C frontend
-      doesn't recognize DECL as a built-in because (as intended) the decl has
-      a real location instead of BUILTINS_LOCATION.  The frontend therefore
-      treats the decl like a normal C "typedef struct foo foo;", expecting
-      the type for tag "struct foo" to have a dummy unnamed TYPE_DECL instead
-      of the named one we attached above.  It then sets DECL_ORIGINAL_TYPE
-      on the supposedly unnamed decl, creating a circularity that upsets
-      dwarf2out.
- 
-      We don't want to follow the normal C model and create "struct foo"
-      tags for tuple types since (a) the types are supposed to be opaque
-      and (b) they couldn't be defined as a real struct anyway.  Treating
-      the TYPE_DECLs as "typedef struct foo foo;" without creating
-      "struct foo" would lead to confusing error messages.  */
-   DECL_ORIGINAL_TYPE (decl) = NULL_TREE;
- }
- 
- /* Register the built-in SVE ABI types, such as __SVBool_t.  */
- static void
- register_builtin_types ()
- {
-   sve_alignment_switcher switcher;
- 
- #define DEF_SVE_TYPE(ACLE_NAME, NCHARS, ABI_NAME, SCALAR_TYPE) \
-   scalar_types[VECTOR_TYPE_ ## ACLE_NAME] = SCALAR_TYPE;
- #include "aarch64-sve-builtins.def"
- 
-   for (unsigned int i = 0; i < NUM_VECTOR_TYPES; ++i)
-     {
-       tree vectype;
-       unsigned int num_zr = 0, num_pr = 0;
-       if (vector_type_index (i) == VECTOR_TYPE_svcount_t)
- 	{
- 	  vectype = abi_vector_types[VECTOR_TYPE_svbool_t];
- 	  vectype = wrap_type_in_struct (vectype);
- 	  num_pr = 1;
- 	}
-       else
- 	{
- 	  tree eltype = scalar_types[i];
- 	  if (eltype == boolean_type_node)
- 	    {
- 	      vectype = build_truth_vector_type_for_mode (BYTES_PER_SVE_VECTOR,
- 							  VNx16BImode);
- 	      num_pr = 1;
- 	    }
- 	  else
- 	    {
- 	      scalar_mode elmode = SCALAR_TYPE_MODE (eltype);
- 	      unsigned int elbytes = GET_MODE_SIZE (elmode);
- 	      poly_uint64 nunits = exact_div (BYTES_PER_SVE_VECTOR, elbytes);
- 	      machine_mode mode
- 		= aarch64_sve_data_mode (elmode, nunits).require ();
- 	      vectype = build_vector_type_for_mode (eltype, mode);
- 	      auto size = wi::to_poly_offset (TYPE_SIZE (vectype));
- 	      gcc_assert (VECTOR_MODE_P (TYPE_MODE (vectype))
- 			  && TYPE_MODE (vectype) == mode
- 			  && TYPE_MODE_RAW (vectype) == mode
- 			  && TYPE_ALIGN (vectype) == 128
- 			  && known_eq (size, BITS_PER_SVE_VECTOR));
- 	      num_zr = 1;
- 	    }
- 	  vectype = build_distinct_type_copy (vectype);
- 	  gcc_assert (vectype == TYPE_MAIN_VARIANT (vectype));
- 	  SET_TYPE_STRUCTURAL_EQUALITY (vectype);
- 	  TYPE_ARTIFICIAL (vectype) = 1;
- 	  TYPE_INDIVISIBLE_P (vectype) = 0;
- 	  make_type_sizeless (vectype);
- 	}
-       if (num_pr)
- 	{
- 	  auto size = wi::to_poly_offset (TYPE_SIZE (vectype));
- 	  gcc_assert (TYPE_MODE (vectype) == VNx16BImode
- 		      && TYPE_MODE (vectype) == TYPE_MODE_RAW (vectype)
- 		      && TYPE_ALIGN (vectype) == 16
- 		      && known_eq (size, BYTES_PER_SVE_VECTOR));
- 	}
-       add_sve_type_attribute (vectype, num_zr, num_pr,
- 			      vector_types[i].mangled_name,
- 			      vector_types[i].acle_name);
-       abi_vector_types[i] = vectype;
-       if (TREE_CODE (vectype) == RECORD_TYPE)
- 	register_type_decl (vectype, vector_types[i].abi_name);
-       else
- 	lang_hooks.types.register_builtin_type (vectype,
- 						vector_types[i].abi_name);
-     }
- }
- 
- /* Initialize all compiler built-ins related to SVE that should be
-    defined at start-up.  */
- void
- init_builtins ()
- {
-   aarch64_target_switcher switcher (AARCH64_FL_SVE);
-   register_builtin_types ();
-   if (in_lto_p)
-     {
-       handle_arm_sve_h (false);
-       handle_arm_sme_h (false);
-       handle_arm_neon_sve_bridge_h (false);
-     }
- }
- 
- /* Register vector type TYPE under its arm_sve.h name.  */
- static void
- register_vector_type (vector_type_index type)
- {
-   tree vectype = abi_vector_types[type];
-   tree id = get_identifier (vector_types[type].acle_name);
-   tree decl = build_decl (input_location, TYPE_DECL, id, vectype);
-   decl = lang_hooks.decls.pushdecl (decl);
- 
-   /* Record the new ACLE type if pushdecl succeeded without error.  Use
-      the ABI type otherwise, so that the type we record at least has the
-      right form, even if it doesn't have the right name.  This should give
-      better error recovery behavior than installing error_mark_node or
-      installing an incorrect type.  */
-   if (decl
-       && TREE_CODE (decl) == TYPE_DECL
-       && TREE_TYPE (decl) != error_mark_node
-       && TYPE_MAIN_VARIANT (TREE_TYPE (decl)) == vectype)
-     vectype = TREE_TYPE (decl);
-   acle_vector_types[0][type] = vectype;
- }
- 
- /* Register the tuple type that contains NUM_VECTORS vectors of type TYPE.  */
- static void
- register_tuple_type (unsigned int num_vectors, vector_type_index type)
- {
-   tree vector_type = acle_vector_types[0][type];
-   bool is_pred = GET_MODE_CLASS (TYPE_MODE (vector_type)) == MODE_VECTOR_BOOL;
- 
-   /* Work out the structure name.  */
-   char buffer[sizeof ("svbfloat16x4_t")];
-   const char *vector_type_name = vector_types[type].acle_name;
-   snprintf (buffer, sizeof (buffer), "%.*sx%d_t",
- 	    (int) strlen (vector_type_name) - 2, vector_type_name,
- 	    num_vectors);
- 
-   /* The contents of the type are opaque, so we can define them in any
-      way that maps to the correct ABI type.
- 
-      Here we choose to use the same layout as for arm_neon.h, but with
-      "__val" instead of "val":
- 
- 	struct svfooxN_t { svfoo_t __val[N]; };
- 
-      (It wouldn't be possible to write that directly in C or C++ for
-      sizeless types, but that's not a problem for this function.)
- 
-      Using arrays simplifies the handling of svget and svset for variable
-      arguments.  */
-   tree array_type = build_array_type_nelts (vector_type, num_vectors);
-   gcc_assert (VECTOR_MODE_P (TYPE_MODE (array_type))
- 	      && TYPE_MODE_RAW (array_type) == TYPE_MODE (array_type)
- 	      && TYPE_ALIGN (array_type) == (is_pred ? 16 : 128));
- 
-   tree tuple_type = wrap_type_in_struct (array_type);
-   if (is_pred)
-     add_sve_type_attribute (tuple_type, 0, num_vectors, NULL, buffer);
-   else
-     add_sve_type_attribute (tuple_type, num_vectors, 0, NULL, buffer);
-   gcc_assert (VECTOR_MODE_P (TYPE_MODE (tuple_type))
- 	      && TYPE_MODE_RAW (tuple_type) == TYPE_MODE (tuple_type)
- 	      && TYPE_ALIGN (tuple_type) == TYPE_ALIGN (array_type));
- 
-   register_type_decl (tuple_type, buffer);
- 
-   acle_vector_types[num_vectors - 1][type] = tuple_type;
- }
- 
- /* Register the svpattern enum.  */
- static void
- register_svpattern ()
- {
-   auto_vec<string_int_pair, 32> values;
- #define PUSH(UPPER, LOWER, VALUE) \
-     values.quick_push (string_int_pair ("SV_" #UPPER, VALUE));
-   AARCH64_FOR_SVPATTERN (PUSH)
- #undef PUSH
- 
-   acle_svpattern = lang_hooks.types.simulate_enum_decl (input_location,
- 							"svpattern", &values);
- }
- 
- /* Register the svprfop enum.  */
- static void
- register_svprfop ()
- {
-   auto_vec<string_int_pair, 16> values;
- #define PUSH(UPPER, LOWER, VALUE) \
-     values.quick_push (string_int_pair ("SV_" #UPPER, VALUE));
-   AARCH64_FOR_SVPRFOP (PUSH)
- #undef PUSH
- 
-   acle_svprfop = lang_hooks.types.simulate_enum_decl (input_location,
- 						      "svprfop", &values);
- }
- 
- /* Implement #pragma GCC aarch64 "arm_sve.h".  */
- void
- handle_arm_sve_h (bool function_nulls_p)
- {
-   if (function_table)
-     {
-       error ("duplicate definition of %qs", "arm_sve.h");
-       return;
-     }
- 
-   aarch64_target_switcher switcher (AARCH64_FL_SVE);
-   sve_alignment_switcher alignment_switcher;
- 
-   /* Define the vector and tuple types.  */
-   for (unsigned int type_i = 0; type_i < NUM_VECTOR_TYPES; ++type_i)
-     {
-       vector_type_index type = vector_type_index (type_i);
-       register_vector_type (type);
-       if (type != VECTOR_TYPE_svcount_t)
- 	for (unsigned int count = 2; count <= MAX_TUPLE_SIZE; ++count)
- 	  if (type != VECTOR_TYPE_svbool_t || count == 2 || count == 4)
- 	    register_tuple_type (count, type);
-     }
- 
-   /* Define the enums.  */
-   register_svpattern ();
-   register_svprfop ();
- 
-   /* Define the functions.  */
-   function_table = hash_table<registered_function_hasher>::create_ggc (1023);
-   function_builder builder (arm_sve_handle, function_nulls_p);
-   for (unsigned int i = 0; i < ARRAY_SIZE (function_groups); ++i)
-     builder.register_function_group (function_groups[i]);
- }
- 
- /* Implement #pragma GCC aarch64 "arm_neon_sve_bridge.h".  */
- void
- handle_arm_neon_sve_bridge_h (bool function_nulls_p)
- {
-   if (initial_indexes[arm_sme_handle] == 0)
-     handle_arm_sme_h (true);
- 
-   aarch64_target_switcher switcher;
- 
-   /* Define the functions.  */
-   function_builder builder (arm_neon_sve_handle, function_nulls_p);
-   for (unsigned int i = 0; i < ARRAY_SIZE (neon_sve_function_groups); ++i)
-     builder.register_function_group (neon_sve_function_groups[i]);
- }
- 
- /* Return the function decl with SVE function subcode CODE, or error_mark_node
-    if no such function exists.  */
- tree
- builtin_decl (unsigned int code, bool)
- {
-   if (code >= vec_safe_length (registered_functions))
-     return error_mark_node;
-   return (*registered_functions)[code]->decl;
- }
- 
- /* Implement #pragma GCC aarch64 "arm_sme.h".  */
- void
- handle_arm_sme_h (bool function_nulls_p)
- {
-   if (!function_table)
-     {
-       error ("%qs defined without first defining %qs",
- 	     "arm_sme.h", "arm_sve.h");
-       return;
-     }
- 
-   aarch64_target_switcher switcher (AARCH64_FL_SME);
- 
-   function_builder builder (arm_sme_handle, function_nulls_p);
-   for (unsigned int i = 0; i < ARRAY_SIZE (sme_function_groups); ++i)
-     builder.register_function_group (sme_function_groups[i]);
- }
- 
- /* If we're implementing manual overloading, check whether the SVE
-    function with subcode CODE is overloaded, and if so attempt to
-    determine the corresponding non-overloaded function.  The call
-    occurs at location LOCATION and has the arguments given by ARGLIST.
- 
-    If the call is erroneous, report an appropriate error and return
-    error_mark_node.  Otherwise, if the function is overloaded, return
-    the decl of the non-overloaded function.  Return NULL_TREE otherwise,
-    indicating that the call should be processed in the normal way.  */
- tree
- resolve_overloaded_builtin (location_t location, unsigned int code,
- 			    vec<tree, va_gc> *arglist)
- {
-   if (code >= vec_safe_length (registered_functions))
-     return NULL_TREE;
- 
-   registered_function &rfn = *(*registered_functions)[code];
-   if (rfn.overloaded_p)
-     return function_resolver (location, rfn.instance, rfn.decl,
- 			      *arglist).resolve ();
-   return NULL_TREE;
- }
- 
- /* Perform any semantic checks needed for a call to the SVE function
-    with subcode CODE, such as testing for integer constant expressions.
-    The call occurs at location LOCATION and has NARGS arguments,
-    given by ARGS.  FNDECL is the original function decl, before
-    overload resolution.
- 
-    Return true if the call is valid, otherwise report a suitable error.  */
- bool
- check_builtin_call (location_t location, vec<location_t>, unsigned int code,
- 		    tree fndecl, unsigned int nargs, tree *args)
- {
-   const registered_function &rfn = *(*registered_functions)[code];
-   if (!aarch64_check_required_extensions (location, rfn.decl,
- 					  rfn.required_extensions))
-     return false;
-   return function_checker (location, rfn.instance, fndecl,
- 			   TREE_TYPE (rfn.decl), nargs, args).check ();
- }
- 
- /* Attempt to fold STMT, given that it's a call to the SVE function
-    with subcode CODE.  Return the new statement on success and null
-    on failure.  Insert any other new statements at GSI.  */
- gimple *
- gimple_fold_builtin (unsigned int code, gimple_stmt_iterator *gsi, gcall *stmt)
- {
-   registered_function &rfn = *(*registered_functions)[code];
-   return gimple_folder (rfn.instance, rfn.decl, gsi, stmt).fold ();
- }
- 
- /* Expand a call to the SVE function with subcode CODE.  EXP is the call
-    expression and TARGET is the preferred location for the result.
-    Return the value of the lhs.  */
- rtx
- expand_builtin (unsigned int code, tree exp, rtx target)
- {
-   registered_function &rfn = *(*registered_functions)[code];
-   if (!aarch64_check_required_extensions (EXPR_LOCATION (exp), rfn.decl,
- 					  rfn.required_extensions))
-     return target;
-   return function_expander (rfn.instance, rfn.decl, exp, target).expand ();
- }
- 
- /* If TYPE is a built-in type defined by the SVE ABI, return the mangled name,
-    otherwise return NULL.  */
- const char *
- mangle_builtin_type (const_tree type)
- {
-   /* ??? The C++ frontend normally strips qualifiers and attributes before
-      calling this hook, adding separate mangling for attributes that affect
-      type identity.  Fortunately the type copy will have the same TYPE_NAME
-      as the original, so we can get the attributes from there.  */
-   if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
-     type = TREE_TYPE (TYPE_NAME (type));
-   if (tree attr = lookup_sve_type_attribute (type))
-     if (tree id = TREE_VALUE (chain_index (2, TREE_VALUE (attr))))
-       return IDENTIFIER_POINTER (id);
-   return NULL;
- }
- 
- /* Return true if TYPE is a built-in SVE type defined by the ABI or ACLE.  */
- bool
- builtin_type_p (const_tree type)
- {
-   return lookup_sve_type_attribute (type);
- }
- 
- /* Return true if TYPE is a built-in SVE type defined by the ABI or ACLE.
-    If so, store the number of constituent SVE vectors in *NUM_ZR and the
-    number of constituent SVE predicates in *NUM_PR.  */
- bool
- builtin_type_p (const_tree type, unsigned int *num_zr, unsigned int *num_pr)
- {
-   if (tree attr = lookup_sve_type_attribute (type))
-     {
-       tree num_zr_node = TREE_VALUE (attr);
-       tree num_pr_node = TREE_CHAIN (num_zr_node);
-       *num_zr = tree_to_uhwi (TREE_VALUE (num_zr_node));
-       *num_pr = tree_to_uhwi (TREE_VALUE (num_pr_node));
-       return true;
-     }
-   return false;
- }
- 
- /* ATTRS is the attribute list for a sizeless SVE type.  Return the
-    attributes of the associated fixed-length SVE type, taking the
-    "SVE type" attributes from NEW_SVE_TYPE_ARGS.  */
- static tree
- get_arm_sve_vector_bits_attributes (tree old_attrs, tree new_sve_type_args)
- {
-   tree new_attrs = NULL_TREE;
-   tree *ptr = &new_attrs;
-   for (tree attr = old_attrs; attr; attr = TREE_CHAIN (attr))
-     {
-       tree name = get_attribute_name (attr);
-       if (is_attribute_p ("SVE sizeless type", name))
- 	continue;
- 
-       tree args = TREE_VALUE (attr);
-       if (is_attribute_p ("SVE type", name))
- 	args = new_sve_type_args;
-       *ptr = tree_cons (TREE_PURPOSE (attr), args, NULL_TREE);
-       ptr = &TREE_CHAIN (*ptr);
-     }
-   return new_attrs;
- }
- 
- /* An attribute callback for the "arm_sve_vector_bits" attribute.  */
- tree
- handle_arm_sve_vector_bits_attribute (tree *node, tree, tree args, int,
- 				      bool *no_add_attrs)
- {
-   *no_add_attrs = true;
- 
-   tree type = *node;
-   tree attr = lookup_sve_type_attribute (type);
-   if (!attr)
-     {
-       error ("%qs applied to non-SVE type %qT", "arm_sve_vector_bits", type);
-       return NULL_TREE;
-     }
- 
-   if (!VECTOR_TYPE_P (type))
-     {
-       error ("%qs applied to non-vector type %qT",
- 	     "arm_sve_vector_bits", type);
-       return NULL_TREE;
-     }
- 
-   if (!sizeless_type_p (type))
-     {
-       error ("%qs applied to type %qT, which already has a size",
- 	     "arm_sve_vector_bits", type);
-       return NULL_TREE;
-     }
- 
-   tree size = TREE_VALUE (args);
-   if (TREE_CODE (size) != INTEGER_CST)
-     {
-       error ("%qs requires an integer constant expression",
- 	     "arm_sve_vector_bits");
-       return NULL_TREE;
-     }
- 
-   unsigned HOST_WIDE_INT value = tree_to_uhwi (size);
-   if (maybe_ne (value, BITS_PER_SVE_VECTOR))
-     {
-       warning (OPT_Wattributes, "unsupported SVE vector size");
-       return NULL_TREE;
-     }
- 
-   /* Construct a new list of "SVE type" attribute arguments.  */
-   tree new_sve_type_args = copy_list (TREE_VALUE (attr));
- 
-   /* Mangle the type as an instance of the imaginary template:
- 
-        __SVE_VLS<typename, unsigned>
- 
-      where the first parameter is the SVE type and where the second
-      parameter is the SVE vector length in bits.  */
-   tree mangled_name_node = chain_index (2, new_sve_type_args);
-   const char *old_mangled_name
-     = IDENTIFIER_POINTER (TREE_VALUE (mangled_name_node));
-   char *new_mangled_name
-     = xasprintf ("9__SVE_VLSI%sLj%dEE", old_mangled_name, (int) value);
-   TREE_VALUE (mangled_name_node) = get_identifier (new_mangled_name);
-   free (new_mangled_name);
- 
-   /* FIXME: The type ought to be a distinct copy in all cases, but
-      currently that makes the C frontend reject conversions between
-      svbool_t and its fixed-length variants.  Using a type variant
-      avoids that but means that we treat some ambiguous combinations
-      as valid.  */
-   tree new_type;
-   tree base_type = TYPE_MAIN_VARIANT (type);
-   if (lang_GNU_C () && VECTOR_BOOLEAN_TYPE_P (type))
-     new_type = build_variant_type_copy (base_type);
-   else
-     new_type = build_distinct_type_copy (base_type);
- 
-   /* Construct a TYPE_DECL for the new type.  This serves two purposes:
- 
-      - It ensures we don't print the original TYPE_DECL in error messages.
-        Printing the original name would be confusing because there are
-        situations in which the distinction between the original type and
-        the new type matters.  For example:
- 
- 	   __SVInt8_t __attribute__((arm_sve_vector_bits(512))) *a;
- 	   __SVInt8_t *b;
- 
- 	   a = b;
- 
-        is invalid in C++, but without this, we'd print both types in
-        the same way.
- 
-      - Having a separate TYPE_DECL is necessary to ensure that C++
-        mangling works correctly.  See mangle_builtin_type for details.
- 
-      The name of the decl is something like:
- 
-        svint8_t __attribute__((arm_sve_vector_bits(512)))
- 
-      This is a compromise.  It would be more accurate to use something like:
- 
-        __SVInt8_t __attribute__((arm_sve_vector_bits(512)))
- 
-      but the <arm_sve.h> name is likely to be more meaningful.  */
-   tree acle_name_node = TREE_CHAIN (mangled_name_node);
-   const char *old_type_name = IDENTIFIER_POINTER (TREE_VALUE (acle_name_node));
-   char *new_type_name
-     = xasprintf ("%s __attribute__((arm_sve_vector_bits(%d)))",
- 		 old_type_name, (int) value);
-   tree decl = build_decl (BUILTINS_LOCATION, TYPE_DECL,
- 			  get_identifier (new_type_name), new_type);
-   DECL_ARTIFICIAL (decl) = 1;
-   TYPE_NAME (new_type) = decl;
-   free (new_type_name);
- 
-   /* Allow the GNU vector extensions to be applied to vectors.
-      The extensions aren't yet defined for packed predicates,
-      so continue to treat them as abstract entities for now.  */
-   if (!VECTOR_BOOLEAN_TYPE_P (new_type))
-     TYPE_INDIVISIBLE_P (new_type) = 0;
- 
-   /* The new type is a normal sized type; it doesn't have the same
-      restrictions as sizeless types.  */
-   TYPE_ATTRIBUTES (new_type)
-     = get_arm_sve_vector_bits_attributes (TYPE_ATTRIBUTES (new_type),
- 					  new_sve_type_args);
- 
-   /* Apply the relevant attributes, qualifiers and alignment of TYPE,
-      if they differ from the original (sizeless) BASE_TYPE.  */
-   if (TYPE_ATTRIBUTES (base_type) != TYPE_ATTRIBUTES (type)
-       || TYPE_QUALS (base_type) != TYPE_QUALS (type))
-     {
-       tree attrs
- 	= get_arm_sve_vector_bits_attributes (TYPE_ATTRIBUTES (type),
- 					      new_sve_type_args);
-       new_type = build_type_attribute_qual_variant (new_type, attrs,
- 						    TYPE_QUALS (type));
-     }
-   if (TYPE_ALIGN (base_type) != TYPE_ALIGN (type))
-     new_type = build_aligned_type (new_type, TYPE_ALIGN (type));
- 
-   *node = new_type;
-   return NULL_TREE;
- }
- 
- /* Implement TARGET_VERIFY_TYPE_CONTEXT for SVE types.  */
- bool
- verify_type_context (location_t loc, type_context_kind context,
- 		     const_tree type, bool silent_p)
- {
-   const_tree tmp = type;
-   if (omp_type_context (context) && POINTER_TYPE_P (type))
-     tmp = strip_pointer_types (tmp);
- 
-   if (!sizeless_type_p (tmp))
-     return true;
- 
-   switch (context)
-     {
-     case TCTX_SIZEOF:
-     case TCTX_STATIC_STORAGE:
-       if (!silent_p)
- 	error_at (loc, "SVE type %qT does not have a fixed size", type);
-       return false;
- 
-     case TCTX_ALIGNOF:
-       if (!silent_p)
- 	error_at (loc, "SVE type %qT does not have a defined alignment", type);
-       return false;
- 
-     case TCTX_THREAD_STORAGE:
-       if (!silent_p)
- 	error_at (loc, "variables of type %qT cannot have thread-local"
- 		  " storage duration", type);
-       return false;
- 
-     case TCTX_POINTER_ARITH:
-       if (!silent_p)
- 	error_at (loc, "arithmetic on pointer to SVE type %qT", type);
-       return false;
- 
-     case TCTX_FIELD:
-       if (silent_p)
- 	;
-       else if (lang_GNU_CXX ())
- 	error_at (loc, "member variables cannot have SVE type %qT", type);
-       else
- 	error_at (loc, "fields cannot have SVE type %qT", type);
-       return false;
- 
-     case TCTX_ARRAY_ELEMENT:
-       if (!silent_p)
- 	error_at (loc, "array elements cannot have SVE type %qT", type);
-       return false;
- 
-     case TCTX_ALLOCATION:
-       if (!silent_p)
- 	error_at (loc, "cannot allocate objects with SVE type %qT", type);
-       return false;
- 
-     case TCTX_DEALLOCATION:
-       if (!silent_p)
- 	error_at (loc, "cannot delete objects with SVE type %qT", type);
-       return false;
- 
-     case TCTX_EXCEPTIONS:
-       if (!silent_p)
- 	error_at (loc, "cannot throw or catch SVE type %qT", type);
-       return false;
- 
-     case TCTX_CAPTURE_BY_COPY:
-       if (!silent_p)
- 	error_at (loc, "capture by copy of SVE type %qT", type);
-       return false;
- 
-     case TCTX_OMP_MAP:
-       if (!silent_p)
- 	error_at (loc, "SVE type %qT not allowed in %<map%> clause", type);
-       return false;
- 
-     case TCTX_OMP_MAP_IMP_REF:
-       if (!silent_p)
- 	error ("cannot reference %qT object types in %<target%> region", type);
-       return false;
- 
-     case TCTX_OMP_PRIVATE:
-       if (!silent_p)
- 	error_at (loc, "SVE type %qT not allowed in"
- 		  " %<target%> %<private%> clause", type);
-       return false;
- 
-     case TCTX_OMP_FIRSTPRIVATE:
-       if (!silent_p)
- 	error_at (loc, "SVE type %qT not allowed in"
- 		  " %<target%> %<firstprivate%> clause", type);
-       return false;
- 
-     case TCTX_OMP_DEVICE_ADDR:
-       if (!silent_p)
- 	error_at (loc, "SVE type %qT not allowed in"
- 		  " %<target%> device clauses", type);
-       return false;
- 
-     default:
-       break;
-     }
-   gcc_unreachable ();
- }
- 
- }
- 
- using namespace aarch64_sve;
- 
- inline void
- gt_ggc_mx (function_instance *)
- {
- }
- 
- inline void
- gt_pch_nx (function_instance *)
- {
- }
- 
- inline void
- gt_pch_nx (function_instance *, gt_pointer_operator, void *)
- {
- }
- 
- #include "gt-aarch64-sve-builtins.h"
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-sve-builtins.def gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins.def
*** gcc-17-20260628/gcc/config/aarch64/aarch64-sve-builtins.def	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins.def	Sun Jul  5 22:32:07 2026
***************
*** 26,31 ****
--- 26,33 ----
  
     - aarch64-sve-builtins.def for common data types, groups, and other
         supporting definitions used across all files.
+    - aarch64-neon-builtins-base.def for any AdvSIMD intrinsic that is
+        enabled by the +simd extension.
     - aarch64-sve-builtins-base.def for the baseline SVE intrinsics which predate
         SVE2 and SME.
     - aarch64-sve-builtins-sve2.def for any scalable SIMD intrinsic that is
*************** DEF_SVE_NEON_TYPE_SUFFIX (u32, svuint32_
*** 159,164 ****
--- 161,175 ----
  DEF_SVE_NEON_TYPE_SUFFIX (u64, svuint64_t, unsigned, 64, VNx2DImode,
  			  Uint64x1_t, Uint64x2_t)
  
+ DEF_SVE_NEON_TYPE_SUFFIX (p8, svuint8_t, poly, 8, VNx16QImode,
+ 			  Poly8x8_t, Poly8x16_t)
+ DEF_SVE_NEON_TYPE_SUFFIX (p16, svuint16_t, poly, 16, VNx8HImode,
+ 			  Poly16x4_t, Poly16x8_t)
+ DEF_SVE_NEON_TYPE_SUFFIX (p64, svuint64_t, poly, 64, VNx2DImode,
+ 			  Poly64x1_t, Poly64x2_t)
+ DEF_SVE_NEON_TYPE_SUFFIX (p128, svuint64_t, poly, 128, TImode,
+ 			  Poly128_t, Poly128_t)
+ 
  /* Associate _za with bytes.  This is needed for svldr_vnum_za and
     svstr_vnum_za, whose ZA offset can be in the range [0, 15], as for za8.  */
  DEF_SME_ZA_SUFFIX (za, 8, VNx16QImode)
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-sve-builtins.h gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins.h
*** gcc-17-20260628/gcc/config/aarch64/aarch64-sve-builtins.h	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/aarch64-sve-builtins.h	Thu Jan  1 00:00:00 1970
***************
*** 1,1178 ****
- /* ACLE support for AArch64 SVE
-    Copyright (C) 2018-2026 Free Software Foundation, Inc.
- 
-    This file is part of GCC.
- 
-    GCC 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.
- 
-    GCC 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 GCC; see the file COPYING3.  If not see
-    <http://www.gnu.org/licenses/>.  */
- 
- #ifndef GCC_AARCH64_SVE_BUILTINS_H
- #define GCC_AARCH64_SVE_BUILTINS_H
- 
- #include "aarch64-builtins.h"
- 
- /* The full name of an SVE ACLE function is the concatenation of:
- 
-    - the base name ("svadd", etc.)
-    - the "mode" suffix ("_n", "_index", etc.)
-    - the type suffixes ("_s32", "_b8", etc.)
-    - the predication suffix ("_x", "_z", etc.)
-    - the "_fpm" suffix when the floating point mode register is set
- 
-    Each piece of information is individually useful, so we retain this
-    classification throughout:
- 
-    - function_base represents the base name
- 
-    - mode_suffix_index represents the mode suffix
- 
-    - type_suffix_index represents individual type suffixes, while
-      type_suffix_triple represents a tuple of them
- 
-    - prediction_index extends the predication suffix with an additional
-      alternative: PRED_implicit for implicitly-predicated operations
- 
-    - fpm_mode represents whether the fpm register is set or not
- 
-    In addition to its unique full name, a function may have a shorter
-    overloaded alias.  This alias removes pieces of the suffixes that
-    can be inferred from the arguments, such as by shortening the mode
-    suffix or dropping some of the type suffixes.  The base name and the
-    predication suffix stay the same.
- 
-    The function_shape class describes what arguments a given function
-    takes and what its overloaded alias is called.  In broad terms,
-    function_base describes how the underlying instruction behaves while
-    function_shape describes how that instruction has been presented at
-    the language level.
- 
-    The static arrays of function_group_info (function_groups,
-    neon_sve_function_groups, sme_function_groups) use function_group to describe
-    a group of related functions.  The function_builder class is responsible for
-    expanding these static description into a list of individual functions
-    and registering the associated built-in functions.  function_instance
-    describes one of these individual functions in terms of the properties
-    described above.
- 
-    The classes involved in compiling a function call are:
- 
-    - function_resolver, which resolves an overloaded function call to a
-      specific function_instance and its associated function decl
- 
-    - function_checker, which checks whether the values of the arguments
-      conform to the ACLE specification
- 
-    - gimple_folder, which tries to fold a function call at the gimple level
- 
-    - function_expander, which expands a function call into rtl instructions
- 
-    function_resolver and function_checker operate at the language level
-    and so are associated with the function_shape.  gimple_folder and
-    function_expander are concerned with the behavior of the function
-    and so are associated with the function_base.
- 
-    Note that we've specifically chosen not to fold calls in the frontend,
-    since SVE intrinsics will hardly ever fold a useful language-level
-    constant.  */
- namespace aarch64_sve
- {
- /* The maximum number of vectors in an ACLE tuple type.  */
- const unsigned int MAX_TUPLE_SIZE = 4;
- 
- /* Used to represent the default merge argument index for _m functions.
-    The actual index depends on how many arguments the function takes.  */
- const unsigned int DEFAULT_MERGE_ARGNO = ~0U;
- 
- /* Flags that describe what a function might do, in addition to reading
-    its arguments and returning a result.  */
- const unsigned int CP_READ_FPCR = 1U << 0;
- const unsigned int CP_RAISE_FP_EXCEPTIONS = 1U << 1;
- const unsigned int CP_READ_MEMORY = 1U << 2;
- const unsigned int CP_PREFETCH_MEMORY = 1U << 3;
- const unsigned int CP_WRITE_MEMORY = 1U << 4;
- const unsigned int CP_READ_FFR = 1U << 5;
- const unsigned int CP_WRITE_FFR = 1U << 6;
- const unsigned int CP_READ_ZA = 1U << 7;
- const unsigned int CP_WRITE_ZA = 1U << 8;
- const unsigned int CP_READ_ZT0 = 1U << 9;
- const unsigned int CP_WRITE_ZT0 = 1U << 10;
- 
- /* Enumerates the SVE predicate and (data) vector types, together called
-    "vector types" for brevity.  */
- enum vector_type_index
- {
- #define DEF_SVE_TYPE(ACLE_NAME, NCHARS, ABI_NAME, SCALAR_TYPE) \
-   VECTOR_TYPE_ ## ACLE_NAME,
- #include "aarch64-sve-builtins.def"
-   NUM_VECTOR_TYPES
- };
- 
- /* Classifies the available measurement units for an address displacement.  */
- enum units_index
- {
-   UNITS_none,
-   UNITS_bytes,
-   UNITS_elements,
-   UNITS_vectors
- };
- 
- /* Enumerates the pragma handlers.  */
- enum handle_pragma_index
- {
-   arm_sve_handle,
-   arm_sme_handle,
-   arm_neon_sve_handle,
-   NUM_PRAGMA_HANDLERS
- };
- 
- /* Describes the various uses of a governing predicate.  */
- enum predication_index
- {
-   /* No governing predicate is present.  */
-   PRED_none,
- 
-   /* A governing predicate is present but there is no predication suffix
-      associated with it.  This is used when the result is neither a vector
-      nor a predicate, since the distinction between "zeroing" and "merging"
-      doesn't apply in that case.  It is also used when a suffix would be
-      redundant (such as for loads and comparisons, which are inherently
-      zeroing operations).  */
-   PRED_implicit,
- 
-   /* Merging predication: copy inactive lanes from the first data argument
-      to the vector result.  */
-   PRED_m,
- 
-   /* "Don't care" predication: set inactive lanes of the vector result
-      to arbitrary values.  */
-   PRED_x,
- 
-   /* Zero predication: set inactive lanes of the vector result to zero.  */
-   PRED_z,
- 
-   /* Merging predication for SME's ZA: merge into slices of the array
-      instead of overwriting the whole slices.  */
-   PRED_za_m,
- 
-   NUM_PREDS
- };
- 
- /* Classifies intrinsics on whether they set the FPM register */
- enum fpm_mode_index
- {
-   FPM_unused,
-   FPM_set,
-   NUM_FPM_MODES
- };
- 
- /* Classifies element types, based on type suffixes with the bit count
-    removed.  "count" isn't really an element type, but we pretend it is
-    for consistency.  */
- enum type_class_index
- {
-   TYPE_bool,
-   TYPE_bfloat,
-   TYPE_count,
-   TYPE_float,
-   TYPE_mfloat,
-   TYPE_signed,
-   TYPE_unsigned,
-   NUM_TYPE_CLASSES
- };
- 
- /* Classifies an operation into "modes"; for example, to distinguish
-    vector-scalar operations from vector-vector operations, or to
-    distinguish between different addressing modes.  This classification
-    accounts for the function suffixes that occur between the base name
-    and the first type suffix.  */
- enum mode_suffix_index
- {
- #define DEF_SVE_MODE(NAME, BASE, DISPLACEMENT, UNITS) MODE_##NAME,
- #include "aarch64-sve-builtins.def"
-   MODE_none
- };
- 
- /* Enumerates the possible type suffixes.  Each suffix is associated with
-    a vector type, but for predicates provides extra information about the
-    element size.  */
- enum type_suffix_index
- {
- #define DEF_SVE_TYPE_SUFFIX(NAME, ACLE_TYPE, CLASS, BITS, MODE) \
-   TYPE_SUFFIX_ ## NAME,
- #define DEF_SME_ZA_SUFFIX(NAME, BITS, MODE) \
-   TYPE_SUFFIX_ ## NAME,
- #include "aarch64-sve-builtins.def"
-   NUM_TYPE_SUFFIXES
- };
- 
- /* Enumerates the possible group suffixes.  Each suffix combines two
-    optional pieces of information: the vector group size in a ZA index,
-    and the number of vectors in the largest tuple argument.  */
- enum group_suffix_index
- {
- #define DEF_SVE_GROUP_SUFFIX(NAME, VG, VECTORS_PER_TUPLE) GROUP_##NAME,
- #include "aarch64-sve-builtins.def"
-   GROUP_none,
-   NUM_GROUP_SUFFIXES
- };
- 
- /* Combines three type suffixes.  */
- typedef enum type_suffix_index type_suffix_triple[3];
- 
- class function_base;
- class function_shape;
- 
- /* Static information about a mode suffix.  */
- struct mode_suffix_info
- {
-   /* The suffix string itself.  */
-   const char *string;
- 
-   /* The type of the vector base address, or NUM_VECTOR_TYPES if the
-      mode does not include a vector base address.  */
-   vector_type_index base_vector_type;
- 
-   /* The type of the vector displacement, or NUM_VECTOR_TYPES if the
-      mode does not include a vector displacement.  (Note that scalar
-      displacements are always int64_t.)  */
-   vector_type_index displacement_vector_type;
- 
-   /* The units in which the vector or scalar displacement is measured,
-      or UNITS_none if the mode doesn't take a displacement.  */
-   units_index displacement_units;
- };
- 
- #define ENTRY(E, M, Q, G) E,
- enum aarch64_simd_type
- {
- #include "aarch64-simd-builtin-types.def"
-   ARM_NEON_H_TYPES_LAST
- };
- #undef ENTRY
- 
- /* Static information about a type suffix.  */
- struct type_suffix_info
- {
-   /* The suffix string itself.  */
-   const char *string;
- 
-   /* The associated ACLE vector or predicate type.  */
-   vector_type_index vector_type : 8;
- 
-   /* What kind of type the suffix represents.  */
-   type_class_index tclass : 8;
- 
-   /* The number of bits and bytes in an element.  For predicates this
-      measures the associated data elements.  */
-   unsigned int element_bits : 8;
-   unsigned int element_bytes : 8;
- 
-   /* True if the suffix is for an integer type.  */
-   unsigned int integer_p : 1;
-   /* True if the suffix is for an unsigned type.  */
-   unsigned int unsigned_p : 1;
-   /* True if the suffix is for a floating-point type.  */
-   unsigned int float_p : 1;
-   /* True if the suffix is for a vector type (integer or float).  */
-   unsigned int vector_p : 1;
-   /* True if the suffix is for a boolean type.  */
-   unsigned int bool_p : 1;
-   /* True if the suffix is for SME's ZA.  */
-   unsigned int za_p : 1;
-   unsigned int spare : 10;
- 
-   /* The associated vector or predicate mode.  */
-   machine_mode vector_mode : 16;
- 
-   /* The corresponding 64-bit and 128-bit arm_neon.h types, or
-      ARM_NEON_H_TYPES_LAST if none.  */
-   aarch64_simd_type neon64_type;
-   aarch64_simd_type neon128_type;
- };
- 
- /* Static information about a group suffix.  */
- struct group_suffix_info
- {
-   /* The suffix string itself.  */
-   const char *string;
- 
-   /* If the suffix describes a vector group in a ZA index, this is the
-      size of that group, otherwise it is zero.  */
-   unsigned int vg;
- 
-   /* The number of vectors in the largest (or only) tuple argument,
-      or 1 if the suffix does not convey this information.  */
-   unsigned int vectors_per_tuple;
- };
- 
- /* Represents an SVE vector, predicate, tuple of vectors, or tuple of
-    predicates.  There is also a representation of "no type"/"invalid type".  */
- struct sve_type
- {
-   sve_type () = default;
-   sve_type (type_suffix_index type) : type (type), num_vectors (1) {}
-   sve_type (type_suffix_index type, unsigned int num_vectors)
-     : type (type), num_vectors (num_vectors) {}
- 
-   /* Return true if the type is valid.  */
-   explicit operator bool () const { return type != NUM_TYPE_SUFFIXES; }
- 
-   bool operator== (const sve_type &) const;
-   bool operator!= (const sve_type &x) const { return !operator== (x); }
- 
-   /* This is one of:
- 
-      - TYPE_SUFFIX_b for svbool_t-based types
-      - TYPE_SUFFIX_c for svcount_t-based types
-      - the type suffix of a data element for SVE data vectors and tuples
-      - NUM_TYPE_SUFFIXES for invalid types.  */
-   type_suffix_index type = NUM_TYPE_SUFFIXES;
- 
-   /* If the type is a tuple, this is the number of vectors in the tuple,
-      otherwise it is 1.  */
-   unsigned int num_vectors = 1;
- };
- 
- inline bool
- sve_type::operator== (const sve_type &other) const
- {
-   return type == other.type && num_vectors == other.num_vectors;
- }
- 
- /* Static information about a set of functions.  */
- struct function_group_info
- {
-   /* The base name, as a string.  */
-   const char *base_name;
- 
-   /* Describes the behavior associated with the function base name.  */
-   const function_base *const *base;
- 
-   /* The shape of the functions, as described above the class definition.
-      It's possible to have entries with the same base name but different
-      shapes.  */
-   const function_shape *const *shape;
- 
-   /* A list of the available type suffixes, group suffixes, and predication
-      types.  The function supports every combination of the three.
- 
-      The list of type suffixes is terminated by three NUM_TYPE_SUFFIXES.
-      It is lexicographically ordered based on the index value.
- 
-      The list of group suffixes is terminated by NUM_GROUP_SUFFIXES
-      and the list of predication types is terminated by NUM_PREDS.  */
-   const type_suffix_triple *types;
-   const group_suffix_index *groups;
-   const predication_index *preds;
- 
-   /* The architecture extensions that the functions require.  */
-   aarch64_required_extensions required_extensions;
- 
-   /* Whether the floating point register is set */
-   fpm_mode_index fpm_mode;
- };
- 
- /* Describes a single fully-resolved function (i.e. one that has a
-    unique full name).  */
- class GTY((user)) function_instance
- {
- public:
-   function_instance (const char *, const function_base *,
- 		     const function_shape *, mode_suffix_index,
- 		     const type_suffix_triple &, group_suffix_index,
- 		     predication_index, fpm_mode_index);
- 
-   bool operator== (const function_instance &) const;
-   bool operator!= (const function_instance &) const;
-   hashval_t hash () const;
- 
-   unsigned int call_properties () const;
-   bool reads_global_state_p () const;
-   bool modifies_global_state_p () const;
-   bool could_trap_p () const;
- 
-   vector_type_index gp_type_index () const;
-   tree gp_value (gcall *) const;
-   tree inactive_values (gcall *) const;
-   tree gp_type () const;
- 
-   unsigned int vectors_per_tuple () const;
-   tree memory_scalar_type () const;
-   machine_mode memory_vector_mode () const;
- 
-   const mode_suffix_info &mode_suffix () const;
-   tree base_vector_type () const;
-   tree displacement_vector_type () const;
-   units_index displacement_units () const;
- 
-   unsigned int num_za_tiles () const;
- 
-   const type_suffix_info &type_suffix (unsigned int) const;
-   const group_suffix_info &group_suffix () const;
- 
-   tree scalar_type (unsigned int) const;
-   tree vector_type (unsigned int) const;
-   tree tuple_type (unsigned int) const;
-   unsigned int elements_per_vq (unsigned int) const;
-   machine_mode vector_mode (unsigned int) const;
-   machine_mode tuple_mode (unsigned int) const;
-   machine_mode gp_mode (unsigned int) const;
- 
-   /* The properties of the function.  */
-   const char *base_name;
-   const function_base *base;
-   const function_shape *shape;
-   mode_suffix_index mode_suffix_id;
-   type_suffix_triple type_suffix_ids;
-   group_suffix_index group_suffix_id;
-   predication_index pred;
-   fpm_mode_index fpm_mode;
-   int gp_index;
- };
- 
- class registered_function;
- 
- /* A class for building and registering function decls.  */
- class function_builder
- {
- public:
-   function_builder (handle_pragma_index, bool);
-   ~function_builder ();
- 
-   void add_unique_function (const function_instance &, tree,
- 			    vec<tree> &, aarch64_required_extensions, bool);
-   void add_overloaded_function (const function_instance &,
- 				aarch64_required_extensions);
-   void add_overloaded_functions (const function_group_info &,
- 				 mode_suffix_index);
- 
-   void register_function_group (const function_group_info &);
- 
- private:
-   void append_name (const char *);
-   char *finish_name ();
- 
-   char *get_name (const function_instance &, bool);
- 
-   tree get_attributes (const function_instance &, aarch64_required_extensions);
- 
-   registered_function &add_function (const function_instance &,
- 				     const char *, tree, tree,
- 				     aarch64_required_extensions, bool, bool);
- 
-   /* The function type to use for functions that are resolved by
-      function_resolver.  */
-   tree m_overload_type;
- 
-   /* True if we should create a separate decl for each instance of an
-      overloaded function, instead of using function_resolver.  */
-   bool m_direct_overloads;
- 
-   /* Used for building up function names.  */
-   obstack m_string_obstack;
- 
-   /* Used to store the index for the current function.  */
-   unsigned int m_function_index;
- 
-   /* Stores the mode of the current pragma handler.  */
-   bool m_function_nulls;
- };
- 
- /* A base class for handling calls to built-in functions.  */
- class function_call_info : public function_instance
- {
- public:
-   function_call_info (location_t, const function_instance &, tree);
- 
-   bool function_returns_void_p ();
- 
-   /* The location of the call.  */
-   location_t location;
- 
-   /* The FUNCTION_DECL that is being called.  */
-   tree fndecl;
- };
- 
- /* A class for resolving an overloaded function call.  */
- class function_resolver : public function_call_info
- {
- public:
-   enum target_type_restrictions { TARGET_ANY, TARGET_32_64 };
-   enum { SAME_SIZE = 256, HALF_SIZE, QUARTER_SIZE };
-   static const type_class_index SAME_TYPE_CLASS = NUM_TYPE_CLASSES;
- 
-   function_resolver (location_t, const function_instance &, tree,
- 		     vec<tree, va_gc> &);
- 
-   const char *get_scalar_type_name (type_suffix_index);
-   tree get_argument_type (unsigned int);
-   bool scalar_argument_p (unsigned int);
- 
-   void report_incorrect_num_vectors (unsigned int, sve_type, unsigned int);
-   void report_mismatched_num_vectors (unsigned int, sve_type,
- 				      unsigned int, sve_type);
- 
-   tree report_no_such_form (sve_type);
-   tree lookup_form (mode_suffix_index,
- 		    type_suffix_index = NUM_TYPE_SUFFIXES,
- 		    type_suffix_index = NUM_TYPE_SUFFIXES,
- 		    type_suffix_index = NUM_TYPE_SUFFIXES,
- 		    group_suffix_index = GROUP_none);
-   tree lookup_form (mode_suffix_index, sve_type);
-   tree resolve_to (mode_suffix_index,
- 		   type_suffix_index = NUM_TYPE_SUFFIXES,
- 		   type_suffix_index = NUM_TYPE_SUFFIXES,
- 		   type_suffix_index = NUM_TYPE_SUFFIXES,
- 		   group_suffix_index = GROUP_none);
-   tree resolve_to (mode_suffix_index, sve_type);
-   tree resolve_conversion (mode_suffix_index, sve_type);
- 
-   vector_type_index infer_predicate_type (unsigned int);
-   type_suffix_index infer_integer_scalar_type (unsigned int);
-   type_suffix_index infer_64bit_scalar_integer_pair (unsigned int);
-   type_suffix_index infer_pointer_type (unsigned int, bool = false,
- 					target_type_restrictions = TARGET_ANY);
-   sve_type infer_sve_type (unsigned int);
-   sve_type infer_vector_or_tuple_type (unsigned int, unsigned int);
-   type_suffix_index infer_vector_type (unsigned int);
-   type_suffix_index infer_integer_vector_type (unsigned int);
-   type_suffix_index infer_neon128_vector_type (unsigned int);
-   type_suffix_index infer_unsigned_vector_type (unsigned int);
-   type_suffix_index infer_sd_vector_type (unsigned int);
-   sve_type infer_tuple_type (unsigned int);
- 
-   bool require_vector_or_scalar_type (unsigned int);
- 
-   bool require_matching_predicate_type (vector_type_index, sve_type);
-   bool require_vector_type (unsigned int, vector_type_index);
-   bool require_matching_vector_type (unsigned int, unsigned int, sve_type);
-   bool require_derived_vector_type (unsigned int, unsigned int, sve_type,
- 				    type_class_index = SAME_TYPE_CLASS,
- 				    unsigned int = SAME_SIZE,
- 				    unsigned int = 1);
- 
-   bool require_scalar_type (unsigned int, const char *);
-   bool require_nonscalar_type (unsigned int);
-   bool require_pointer_type (unsigned int);
-   bool require_matching_integer_scalar_type (unsigned int, unsigned int,
- 					     type_suffix_index);
-   bool require_derived_scalar_type (unsigned int, type_class_index,
- 				    unsigned int = SAME_SIZE);
-   bool require_matching_pointer_type (unsigned int, unsigned int,
- 				      type_suffix_index);
-   bool require_integer_immediate (unsigned int);
- 
-   vector_type_index infer_vector_base_type (unsigned int);
-   vector_type_index infer_vector_displacement_type (unsigned int);
- 
-   mode_suffix_index resolve_sv_displacement (unsigned int,
- 					     type_suffix_index, bool);
-   mode_suffix_index resolve_gather_address (unsigned int,
- 					    type_suffix_index, bool);
-   mode_suffix_index resolve_adr_address (unsigned int);
- 
-   bool check_num_arguments (unsigned int);
-   bool check_gp_argument (unsigned int, unsigned int &, unsigned int &);
-   tree resolve_unary (type_class_index = SAME_TYPE_CLASS,
- 		      unsigned int = SAME_SIZE, bool = false);
-   tree resolve_uniform (unsigned int, unsigned int = 0);
-   tree resolve_uniform_opt_n (unsigned int);
-   tree finish_opt_n_resolution (unsigned int, unsigned int, type_suffix_index,
- 				type_class_index = SAME_TYPE_CLASS,
- 				unsigned int = SAME_SIZE,
- 				type_suffix_index = NUM_TYPE_SUFFIXES);
-   tree finish_opt_single_resolution (unsigned int, unsigned int, sve_type,
- 				     type_class_index = SAME_TYPE_CLASS);
- 
-   tree resolve ();
- 
- private:
-   /* The arguments to the overloaded function.  */
-   vec<tree, va_gc> &m_arglist;
- };
- 
- /* A class for checking that the semantic constraints on a function call are
-    satisfied, such as arguments being integer constant expressions with
-    a particular range.  The parent class's FNDECL is the decl that was
-    called in the original source, before overload resolution.  */
- class function_checker : public function_call_info
- {
- public:
-   function_checker (location_t, const function_instance &, tree,
- 		    tree, unsigned int, tree *);
- 
-   bool require_immediate_either_or (unsigned int, HOST_WIDE_INT,
- 				    HOST_WIDE_INT);
-   bool require_immediate_enum (unsigned int, tree);
-   bool require_immediate_lane_index (unsigned int, unsigned int,
- 				     unsigned int = 1);
-   bool require_immediate_one_of (unsigned int, HOST_WIDE_INT, HOST_WIDE_INT,
- 				 HOST_WIDE_INT, HOST_WIDE_INT);
-   bool require_immediate_range (unsigned int, HOST_WIDE_INT, HOST_WIDE_INT);
- 
-   bool check ();
- 
- private:
-   bool argument_exists_p (unsigned int);
- 
-   bool require_immediate (unsigned int, HOST_WIDE_INT &);
- 
-   /* The type of the resolved function.  */
-   tree m_fntype;
- 
-   /* The arguments to the function.  */
-   unsigned int m_nargs;
-   tree *m_args;
- 
-   /* The first argument not associated with the function's predication
-      type.  */
-   unsigned int m_base_arg;
- };
- 
- /* A class for folding a gimple function call.  */
- class gimple_folder : public function_call_info
- {
- public:
-   gimple_folder (const function_instance &, tree,
- 		 gimple_stmt_iterator *, gcall *);
- 
-   tree force_vector (gimple_seq &, tree, tree);
-   tree convert_pred (gimple_seq &, tree, unsigned int);
-   tree fold_contiguous_base (gimple_seq &, tree);
-   tree load_store_cookie (tree);
- 
-   gcall *redirect_call (const function_instance &);
-   gimple *redirect_pred_x ();
-   gimple *fold_pfalse ();
-   gimple *convert_and_fold (tree, gimple *(*) (gimple_folder &,
- 					       tree, vec<tree> &));
- 
-   gimple *fold_to_cstu (poly_uint64);
-   gimple *fold_to_pfalse ();
-   gimple *fold_to_ptrue ();
-   gimple *fold_to_vl_pred (unsigned int);
-   gimple *fold_const_binary (enum tree_code);
-   gimple *fold_active_lanes_to (tree);
-   gimple *fold_call_to (tree);
-   gimple *fold_to_stmt_vops (gimple *);
- 
-   gimple *fold ();
- 
-   /* Where to insert extra statements that feed the final replacement.  */
-   gimple_stmt_iterator *gsi;
- 
-   /* The call we're folding.  */
-   gcall *call;
- 
-   /* The result of the call, or null if none.  */
-   tree lhs;
- };
- 
- /* A class for expanding a function call into RTL.  */
- class function_expander : public function_call_info
- {
- public:
-   function_expander (const function_instance &, tree, tree, rtx);
-   rtx expand ();
- 
-   insn_code direct_optab_handler (optab, unsigned int = 0);
-   insn_code direct_optab_handler_for_sign (optab, optab, unsigned int = 0,
- 					   machine_mode = E_VOIDmode);
-   insn_code convert_optab_handler_for_sign (optab, optab, unsigned int,
- 					    machine_mode, machine_mode);
- 
-   machine_mode result_mode () const;
- 
-   bool overlaps_input_p (rtx);
- 
-   rtx convert_to_pmode (rtx);
-   rtx get_contiguous_base (machine_mode, unsigned int = 1, unsigned int = 2,
- 			   aarch64_feature_flags = 0);
-   rtx get_fallback_value (machine_mode, unsigned int,
- 			  unsigned int, unsigned int &);
-   rtx get_reg_target ();
-   rtx get_nonoverlapping_reg_target ();
- 
-   void add_output_operand (insn_code);
-   void add_input_operand (insn_code, rtx);
-   void add_integer_operand (poly_int64);
-   void add_mem_operand (machine_mode, rtx);
-   void add_address_operand (rtx);
-   void add_fixed_operand (rtx);
-   rtx generate_insn (insn_code);
- 
-   void prepare_gather_address_operands (unsigned int, bool = true);
-   void prepare_prefetch_operands ();
-   void add_ptrue_hint (unsigned int, machine_mode);
-   void rotate_inputs_left (unsigned int, unsigned int);
-   bool try_negating_argument (unsigned int, machine_mode);
- 
-   rtx use_exact_insn (insn_code);
-   rtx use_unpred_insn (insn_code);
-   rtx use_pred_x_insn (insn_code);
-   rtx use_cond_insn (insn_code, unsigned int = DEFAULT_MERGE_ARGNO);
-   rtx use_vcond_mask_insn (insn_code, unsigned int = DEFAULT_MERGE_ARGNO);
-   rtx use_contiguous_load_insn (insn_code, bool = false);
-   rtx use_contiguous_prefetch_insn (insn_code);
-   rtx use_contiguous_store_insn (insn_code);
- 
-   rtx map_to_rtx_codes (rtx_code, rtx_code, int, int,
- 			unsigned int = DEFAULT_MERGE_ARGNO);
-   rtx map_to_unspecs (int, int, int, unsigned int = DEFAULT_MERGE_ARGNO);
- 
-   /* The function call expression.  */
-   tree call_expr;
- 
-   /* For functions that return a value, this is the preferred location
-      of that value.  It could be null or could have a different mode
-      from the function return type.  */
-   rtx possible_target;
- 
-   /* The expanded arguments.  */
-   auto_vec<rtx, 16> args;
- 
- private:
-   /* Used to build up the operands to an instruction.  */
-   auto_vec<expand_operand, 8> m_ops;
- };
- 
- /* Provides information about a particular function base name, and handles
-    tasks related to the base name.  */
- class function_base
- {
- public:
-   /* Return a set of CP_* flags that describe what the function might do,
-      in addition to reading its arguments and returning a result.  */
-   virtual unsigned int call_properties (const function_instance &) const;
- 
-   /* If the function operates on tuples of vectors, return the number
-      of vectors in the tuples, otherwise return 1.  */
-   virtual unsigned int vectors_per_tuple (const function_instance &) const;
- 
-   /* If the function addresses memory, return the type of a single
-      scalar memory element.  */
-   virtual tree
-   memory_scalar_type (const function_instance &) const
-   {
-     gcc_unreachable ();
-   }
- 
-   /* If the function addresses memory, return a vector mode whose
-      GET_MODE_NUNITS is the number of elements addressed and whose
-      GET_MODE_INNER is the mode of a single scalar memory element.  */
-   virtual machine_mode
-   memory_vector_mode (const function_instance &) const
-   {
-     gcc_unreachable ();
-   }
- 
-   /* Try to fold the given gimple call.  Return the new gimple statement
-      on success, otherwise return null.  */
-   virtual gimple *fold (gimple_folder &) const { return NULL; }
- 
-   /* Expand the given call into rtl.  Return the result of the function,
-      or an arbitrary value if the function doesn't return a result.  */
-   virtual rtx expand (function_expander &) const = 0;
- };
- 
- /* Classifies functions into "shapes".  The idea is to take all the
-    type signatures for a set of functions, remove the governing predicate
-    (if any), and classify what's left based on:
- 
-    - the number of arguments
- 
-    - the process of determining the types in the signature from the mode
-      and type suffixes in the function name (including types that are not
-      affected by the suffixes)
- 
-    - which arguments must be integer constant expressions, and what range
-      those arguments have
- 
-    - the process for mapping overloaded names to "full" names.  */
- class function_shape
- {
- public:
-   virtual bool has_merge_argument_p (const function_instance &,
- 				     unsigned int) const;
- 
-   virtual bool has_gp_argument_p (const function_instance &) const;
- 
-   virtual bool explicit_type_suffix_p (unsigned int) const = 0;
- 
-   /* True if the group suffix is present in overloaded names.
-      This isn't meaningful for pre-SME intrinsics, and true is
-      more common than false, so provide a default definition.  */
-   virtual bool explicit_group_suffix_p () const { return true; }
- 
-   virtual type_suffix_index vector_base_type (type_suffix_index) const;
- 
-   /* Define all functions associated with the given group.  */
-   virtual void build (function_builder &,
- 		      const function_group_info &) const = 0;
- 
-   /* Try to resolve the overloaded call.  Return the non-overloaded
-      function decl on success and error_mark_node on failure.  */
-   virtual tree resolve (function_resolver &) const = 0;
- 
-   /* Check whether the given call is semantically valid.  Return true
-      if it is, otherwise report an error and return false.  */
-   virtual bool check (function_checker &) const { return true; }
- };
- 
- /* RAII class for temporarily disabling the effect of any -fpack-struct option.
-    This is used to ensure that sve vector tuple types are defined with the
-    correct alignment.  */
- class sve_alignment_switcher
- {
- public:
-   sve_alignment_switcher ();
-   ~sve_alignment_switcher ();
- 
- private:
-   unsigned int m_old_maximum_field_alignment;
- };
- 
- extern const type_suffix_info type_suffixes[NUM_TYPE_SUFFIXES + 1];
- extern const mode_suffix_info mode_suffixes[MODE_none + 1];
- extern const group_suffix_info group_suffixes[NUM_GROUP_SUFFIXES];
- 
- extern tree scalar_types[NUM_VECTOR_TYPES + 1];
- extern tree acle_vector_types[MAX_TUPLE_SIZE][NUM_VECTOR_TYPES + 1];
- extern tree acle_svpattern;
- extern tree acle_svprfop;
- 
- bool vector_cst_all_same (tree, unsigned int);
- bool is_ptrue (tree, unsigned int);
- bool is_pfalse (tree);
- const function_instance *lookup_fndecl (tree);
- 
- /* Try to find a mode with the given mode_suffix_info fields.  Return the
-    mode on success or MODE_none on failure.  */
- inline mode_suffix_index
- find_mode_suffix (vector_type_index base_vector_type,
- 		  vector_type_index displacement_vector_type,
- 		  units_index displacement_units)
- {
-   for (unsigned int mode_i = 0; mode_i < ARRAY_SIZE (mode_suffixes); ++mode_i)
-     {
-       const mode_suffix_info &mode = mode_suffixes[mode_i];
-       if (mode.base_vector_type == base_vector_type
- 	  && mode.displacement_vector_type == displacement_vector_type
- 	  && mode.displacement_units == displacement_units)
- 	return mode_suffix_index (mode_i);
-     }
-   return MODE_none;
- }
- 
- /* Return the type suffix associated with ELEMENT_BITS-bit elements of type
-    class TCLASS.  */
- inline type_suffix_index
- find_type_suffix (type_class_index tclass, unsigned int element_bits)
- {
-   for (unsigned int i = 0; i < NUM_TYPE_SUFFIXES; ++i)
-     if (type_suffixes[i].tclass == tclass
- 	&& type_suffixes[i].element_bits == element_bits)
-       return type_suffix_index (i);
-   gcc_unreachable ();
- }
- 
- /* Return the single field in tuple type TYPE.  */
- inline tree
- tuple_type_field (tree type)
- {
-   for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
-     if (TREE_CODE (field) == FIELD_DECL)
-       return field;
-   gcc_unreachable ();
- }
- 
- /* Return the vector type associated with TYPE.  */
- inline tree
- get_vector_type (sve_type type)
- {
-   auto vector_type = type_suffixes[type.type].vector_type;
-   return acle_vector_types[type.num_vectors - 1][vector_type];
- }
- 
- inline function_instance::
- function_instance (const char *base_name_in, const function_base *base_in,
- 		   const function_shape *shape_in,
- 		   mode_suffix_index mode_suffix_id_in,
- 		   const type_suffix_triple &type_suffix_ids_in,
- 		   group_suffix_index group_suffix_id_in,
- 		   predication_index pred_in, fpm_mode_index fpm_mode_in)
-   : base_name (base_name_in), base (base_in), shape (shape_in),
-     mode_suffix_id (mode_suffix_id_in), group_suffix_id (group_suffix_id_in),
-     pred (pred_in), fpm_mode (fpm_mode_in)
- {
-   memcpy (type_suffix_ids, type_suffix_ids_in, sizeof (type_suffix_ids));
- }
- 
- inline bool
- function_instance::operator== (const function_instance &other) const
- {
-   return (base == other.base
- 	  && shape == other.shape
- 	  && mode_suffix_id == other.mode_suffix_id
- 	  && type_suffix_ids[0] == other.type_suffix_ids[0]
- 	  && type_suffix_ids[1] == other.type_suffix_ids[1]
- 	  && type_suffix_ids[2] == other.type_suffix_ids[2]
- 	  && group_suffix_id == other.group_suffix_id
- 	  && pred == other.pred
- 	  && fpm_mode == other.fpm_mode);
- }
- 
- inline bool
- function_instance::operator!= (const function_instance &other) const
- {
-   return !operator== (other);
- }
- 
- /* Return the index of the type that should be used as the governing
-    predicate of this function.  */
- inline vector_type_index
- function_instance::gp_type_index () const
- {
-   if (group_suffix ().vectors_per_tuple > 1)
-     return VECTOR_TYPE_svcount_t;
-   return VECTOR_TYPE_svbool_t;
- }
- 
- /* Return the type that should be used as the governing predicate of
-    this function.  */
- inline tree
- function_instance::gp_type () const
- {
-   return acle_vector_types[0][gp_type_index ()];
- }
- 
- /* Return the tree value that should be used as the governing predicate of
-    this function.  If none then return NULL_TREE.  */
- inline tree
- function_instance::gp_value (gcall *call) const
- {
-   if (gp_index < 0)
-     return NULL_TREE;
- 
-   return gimple_call_arg (call, gp_index);
- }
- 
- /* Return the tree value that should be used for the inactive lanes should this
-    function be a predicated function with a gp.  Otherwise return NULL_TREE.  */
- inline tree
- function_instance::inactive_values (gcall *call) const
- {
-   if (gp_index < 0)
-     return NULL_TREE;
- 
-   /* Function is unary with m predicate.  */
-   if (gp_index == 1)
-     return gimple_call_arg (call, 0);
- 
-   /* Else the inactive values are the next element.  */
-   return gimple_call_arg (call, 1);
- }
- 
- /* If the function operates on tuples of vectors, return the number
-    of vectors in the tuples, otherwise return 1.  */
- inline unsigned int
- function_instance::vectors_per_tuple () const
- {
-   return base->vectors_per_tuple (*this);
- }
- 
- /* If the function addresses memory, return the type of a single
-    scalar memory element.  */
- inline tree
- function_instance::memory_scalar_type () const
- {
-   return base->memory_scalar_type (*this);
- }
- 
- /* If the function addresses memory, return a vector mode whose
-    GET_MODE_NUNITS is the number of elements addressed and whose
-    GET_MODE_INNER is the mode of a single scalar memory element.  */
- inline machine_mode
- function_instance::memory_vector_mode () const
- {
-   return base->memory_vector_mode (*this);
- }
- 
- /* Return information about the function's mode suffix.  */
- inline const mode_suffix_info &
- function_instance::mode_suffix () const
- {
-   return mode_suffixes[mode_suffix_id];
- }
- 
- /* Return the type of the function's vector base address argument,
-    or null it doesn't have a vector base address.  */
- inline tree
- function_instance::base_vector_type () const
- {
-   return acle_vector_types[0][mode_suffix ().base_vector_type];
- }
- 
- /* Return the type of the function's vector index or offset argument,
-    or null if doesn't have a vector index or offset argument.  */
- inline tree
- function_instance::displacement_vector_type () const
- {
-   return acle_vector_types[0][mode_suffix ().displacement_vector_type];
- }
- 
- /* Return the number of ZA tiles associated with the _za<N> suffix
-    (which is always the first type suffix).  */
- inline unsigned int
- function_instance::num_za_tiles () const
- {
-   auto &suffix = type_suffix (0);
-   gcc_checking_assert (suffix.za_p);
-   return suffix.element_bytes;
- }
- 
- /* If the function takes a vector or scalar displacement, return the units
-    in which the displacement is measured, otherwise return UNITS_none.  */
- inline units_index
- function_instance::displacement_units () const
- {
-   return mode_suffix ().displacement_units;
- }
- 
- /* Return information about type suffix I.  */
- inline const type_suffix_info &
- function_instance::type_suffix (unsigned int i) const
- {
-   return type_suffixes[type_suffix_ids[i]];
- }
- 
- /* Return information about the function's group suffix.  */
- inline const group_suffix_info &
- function_instance::group_suffix () const
- {
-   return group_suffixes[group_suffix_id];
- }
- 
- /* Return the scalar type associated with type suffix I.  */
- inline tree
- function_instance::scalar_type (unsigned int i) const
- {
-   return scalar_types[type_suffix (i).vector_type];
- }
- 
- /* Return the vector type associated with type suffix I.  */
- inline tree
- function_instance::vector_type (unsigned int i) const
- {
-   return acle_vector_types[0][type_suffix (i).vector_type];
- }
- 
- /* If the function operates on tuples of vectors, return the tuple type
-    associated with type suffix I, otherwise return the vector type associated
-    with type suffix I.  */
- inline tree
- function_instance::tuple_type (unsigned int i) const
- {
-   unsigned int num_vectors = vectors_per_tuple ();
-   return acle_vector_types[num_vectors - 1][type_suffix (i).vector_type];
- }
- 
- /* Return the number of elements of type suffix I that fit within a
-    128-bit block.  */
- inline unsigned int
- function_instance::elements_per_vq (unsigned int i) const
- {
-   return 128 / type_suffix (i).element_bits;
- }
- 
- /* Return the vector or predicate mode associated with type suffix I.  */
- inline machine_mode
- function_instance::vector_mode (unsigned int i) const
- {
-   return type_suffix (i).vector_mode;
- }
- 
- /* Return the mode of tuple_type (I).  */
- inline machine_mode
- function_instance::tuple_mode (unsigned int i) const
- {
-   if (group_suffix ().vectors_per_tuple > 1)
-     return TYPE_MODE (tuple_type (i));
-   return vector_mode (i);
- }
- 
- /* Return the mode of the governing predicate to use when operating on
-    type suffix I.  */
- inline machine_mode
- function_instance::gp_mode (unsigned int i) const
- {
-   /* Multi-vector operations are predicated on an svcount_t, which has
-      mode VNx16BI.  */
-   if (group_suffix ().vectors_per_tuple > 1)
-     return VNx16BImode;
-   return aarch64_sve_pred_mode (type_suffix (i).element_bytes).require ();
- }
- 
- /* Return true if the function has no return value.  */
- inline bool
- function_call_info::function_returns_void_p ()
- {
-   return TREE_TYPE (TREE_TYPE (fndecl)) == void_type_node;
- }
- 
- /* Default implementation of function::call_properties, with conservatively
-    correct behavior for floating-point instructions.  */
- inline unsigned int
- function_base::call_properties (const function_instance &instance) const
- {
-   unsigned int flags = 0;
-   if (instance.type_suffix (0).float_p || instance.type_suffix (1).float_p)
-     flags |= CP_READ_FPCR | CP_RAISE_FP_EXCEPTIONS;
-   return flags;
- }
- 
- inline unsigned int
- function_base::vectors_per_tuple (const function_instance &instance) const
- {
-   return instance.group_suffix ().vectors_per_tuple;
- }
- 
- /* Return true if INSTANCE (which has NARGS arguments) has an initial
-    vector argument whose only purpose is to specify the values of
-    inactive lanes.  */
- inline bool
- function_shape::has_merge_argument_p (const function_instance &instance,
- 				      unsigned int nargs) const
- {
-   return nargs == 1 && instance.pred == PRED_m;
- }
- 
- /* Return true if INSTANCE has an predicate argument that can be used as the global
-    predicate.  */
- inline bool
- function_shape::has_gp_argument_p (const function_instance &instance) const
- {
-   return instance.pred != PRED_none;
- }
- 
- /* Return the mode of the result of a call.  */
- inline machine_mode
- function_expander::result_mode () const
- {
-   return TYPE_MODE (TREE_TYPE (TREE_TYPE (fndecl)));
- }
- 
- }
- 
- #endif
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-sve.md gcc-17-20260705/gcc/config/aarch64/aarch64-sve.md
*** gcc-17-20260628/gcc/config/aarch64/aarch64-sve.md	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/aarch64-sve.md	Sun Jul  5 22:32:07 2026
***************
*** 4897,4903 ****
  )
  
  ;; Predicated highpart multiplication.
! (define_insn "@aarch64_pred_<optab><mode>"
    [(set (match_operand:SVE_I 0 "register_operand")
  	(unspec:SVE_I
  	  [(match_operand:<VPRED> 1 "register_operand")
--- 4897,4903 ----
  )
  
  ;; Predicated highpart multiplication.
! (define_insn_and_split "@aarch64_pred_<optab><mode>"
    [(set (match_operand:SVE_I 0 "register_operand")
  	(unspec:SVE_I
  	  [(match_operand:<VPRED> 1 "register_operand")
***************
*** 4911,4916 ****
--- 4911,4923 ----
       [ w        , Upl , 0  , w ; *              ] <su>mulh\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , w ; yes            ] movprfx\t%0, %2\;<su>mulh\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
    }
+   "TARGET_SVE2"
+   [(set (match_dup 0)
+ 	(unspec:SVE_I
+ 	  [(match_dup 2)
+ 	   (match_dup 3)]
+ 	  MUL_HIGHPART))]
+   ""
    [(set_attr "sve_type" "sve_int_mul")]
  )
  
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64-sve2.md gcc-17-20260705/gcc/config/aarch64/aarch64-sve2.md
*** gcc-17-20260628/gcc/config/aarch64/aarch64-sve2.md	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/aarch64-sve2.md	Sun Jul  5 22:32:07 2026
***************
*** 56,61 ****
--- 56,62 ----
  ;; ---- [INT] Multi-register operations
  ;; ---- [INT] Clamp to minimum/maximum
  ;; ---- [INT] Multiplication
+ ;; ---- [INT] Unpredicated high-part multiplication
  ;; ---- [INT] Scaled high-part multiplication
  ;; ---- [INT] General binary arithmetic that maps to unspecs
  ;; ---- [INT] Saturating binary arithmetic
***************
*** 978,983 ****
--- 979,1000 ----
  )
  
  ;; -------------------------------------------------------------------------
+ ;; ---- [INT] Unpredicated high-part multiplication
+ ;; -------------------------------------------------------------------------
+ 
+ ;; SVE2 unpredicated SMULH/UMULH.
+ (define_insn "@aarch64_sve2_<optab><mode>"
+   [(set (match_operand:SVE_I 0 "register_operand" "=w")
+ 	(unspec:SVE_I
+ 	  [(match_operand:SVE_I 1 "register_operand" "w")
+ 	   (match_operand:SVE_I 2 "register_operand" "w")]
+ 	  MUL_HIGHPART))]
+   "TARGET_SVE2"
+   "<su>mulh\t%0.<Vetype>, %1.<Vetype>, %2.<Vetype>"
+   [(set_attr "sve_type" "sve_int_mul")]
+ )
+ 
+ ;; -------------------------------------------------------------------------
  ;; ---- [INT] Scaled high-part multiplication
  ;; -------------------------------------------------------------------------
  ;; The patterns in this section are synthetic.
***************
*** 4715,4721 ****
  	     (match_operand:VNx16QI 1 "register_operand" "%0")
  	     (match_operand:VNx16QI 2 "register_operand" "w"))]
            CRYPTO_AES))]
!   "TARGET_SVE2_AES"
    "aes<aes_op>\t%0.b, %0.b, %2.b"
    [(set_attr "type" "crypto_aese")]
  )
--- 4732,4738 ----
  	     (match_operand:VNx16QI 1 "register_operand" "%0")
  	     (match_operand:VNx16QI 2 "register_operand" "w"))]
            CRYPTO_AES))]
!   "TARGET_SVE_AES"
    "aes<aes_op>\t%0.b, %0.b, %2.b"
    [(set_attr "type" "crypto_aese")]
  )
***************
*** 4726,4732 ****
  	(unspec:VNx16QI
  	  [(match_operand:VNx16QI 1 "register_operand" "0")]
  	  CRYPTO_AESMC))]
!   "TARGET_SVE2_AES"
    "aes<aesmc_op>\t%0.b, %0.b"
    [(set_attr "type" "crypto_aesmc")]
  )
--- 4743,4749 ----
  	(unspec:VNx16QI
  	  [(match_operand:VNx16QI 1 "register_operand" "0")]
  	  CRYPTO_AESMC))]
!   "TARGET_SVE_AES"
    "aes<aesmc_op>\t%0.b, %0.b"
    [(set_attr "type" "crypto_aesmc")]
  )
***************
*** 4745,4751 ****
  		(match_operand:VNx16QI 2 "register_operand" "w"))]
  	     UNSPEC_AESE)]
  	  UNSPEC_AESMC))]
!   "TARGET_SVE2_AES && aarch64_fusion_enabled_p (AARCH64_FUSE_AES_AESMC)"
    "aese\t%0.b, %0.b, %2.b\;aesmc\t%0.b, %0.b"
    [(set_attr "type" "crypto_aese")
     (set_attr "length" "8")]
--- 4762,4768 ----
  		(match_operand:VNx16QI 2 "register_operand" "w"))]
  	     UNSPEC_AESE)]
  	  UNSPEC_AESMC))]
!   "TARGET_SVE_AES && aarch64_fusion_enabled_p (AARCH64_FUSE_AES_AESMC)"
    "aese\t%0.b, %0.b, %2.b\;aesmc\t%0.b, %0.b"
    [(set_attr "type" "crypto_aese")
     (set_attr "length" "8")]
***************
*** 4760,4766 ****
  		(match_operand:VNx16QI 2 "register_operand" "w"))]
  	     UNSPEC_AESD)]
  	  UNSPEC_AESIMC))]
!   "TARGET_SVE2_AES && aarch64_fusion_enabled_p (AARCH64_FUSE_AES_AESMC)"
    "aesd\t%0.b, %0.b, %2.b\;aesimc\t%0.b, %0.b"
    [(set_attr "type" "crypto_aese")
     (set_attr "length" "8")]
--- 4777,4783 ----
  		(match_operand:VNx16QI 2 "register_operand" "w"))]
  	     UNSPEC_AESD)]
  	  UNSPEC_AESIMC))]
!   "TARGET_SVE_AES && aarch64_fusion_enabled_p (AARCH64_FUSE_AES_AESMC)"
    "aesd\t%0.b, %0.b, %2.b\;aesimc\t%0.b, %0.b"
    [(set_attr "type" "crypto_aese")
     (set_attr "length" "8")]
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64.cc gcc-17-20260705/gcc/config/aarch64/aarch64.cc
*** gcc-17-20260628/gcc/config/aarch64/aarch64.cc	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/aarch64.cc	Sun Jul  5 22:32:07 2026
***************
*** 61,66 ****
--- 61,67 ----
  #include "dwarf2.h"
  #include "dwarf2out.h"
  #include "gimple-iterator.h"
+ #include "gimple-fold.h"
  #include "tree-vectorizer.h"
  #include "aarch64-cost-tables.h"
  #include "dumpfile.h"
*************** static const attribute_spec aarch64_gnu_
*** 928,934 ****
  			  aarch64_pcs_exclusions },
    { "indirect_return",    0, 0, false, true, true, true, NULL, NULL },
    { "arm_sve_vector_bits", 1, 1, false, true,  false, true,
! 			  aarch64_sve::handle_arm_sve_vector_bits_attribute,
  			  NULL },
    { "Advanced SIMD type", 1, 1, false, true,  false, true,  NULL, NULL },
    { "SVE type",		  3, 3, false, true,  false, true,  NULL, NULL },
--- 929,935 ----
  			  aarch64_pcs_exclusions },
    { "indirect_return",    0, 0, false, true, true, true, NULL, NULL },
    { "arm_sve_vector_bits", 1, 1, false, true,  false, true,
! 			  aarch64_acle::handle_arm_sve_vector_bits_attribute,
  			  NULL },
    { "Advanced SIMD type", 1, 1, false, true,  false, true,  NULL, NULL },
    { "SVE type",		  3, 3, false, true,  false, true,  NULL, NULL },
*************** pure_scalable_type_info::analyze (const_
*** 1149,1155 ****
  
    /* Check for SVTs, SPTs, and built-in tuple types that map to PSTs.  */
    piece p = {};
!   if (aarch64_sve::builtin_type_p (type, &p.num_zr, &p.num_pr))
      {
        machine_mode mode = TYPE_MODE_RAW (type);
        gcc_assert (VECTOR_MODE_P (mode)
--- 1150,1156 ----
  
    /* Check for SVTs, SPTs, and built-in tuple types that map to PSTs.  */
    piece p = {};
!   if (aarch64_acle::builtin_type_p (type, &p.num_zr, &p.num_pr))
      {
        machine_mode mode = TYPE_MODE_RAW (type);
        gcc_assert (VECTOR_MODE_P (mode)
*************** aarch64_some_values_include_pst_objects_
*** 1323,1329 ****
    if (TYPE_SIZE (type) && integer_zerop (TYPE_SIZE (type)))
      return false;
  
!   if (aarch64_sve::builtin_type_p (type))
      return true;
  
    if (TREE_CODE (type) == ARRAY_TYPE || TREE_CODE (type) == COMPLEX_TYPE)
--- 1324,1330 ----
    if (TYPE_SIZE (type) && integer_zerop (TYPE_SIZE (type)))
      return false;
  
!   if (aarch64_acle::builtin_type_p (type))
      return true;
  
    if (TREE_CODE (type) == ARRAY_TYPE || TREE_CODE (type) == COMPLEX_TYPE)
*************** aarch64_debugger_regno (unsigned regno)
*** 1566,1571 ****
--- 1567,1592 ----
     return DWARF_FRAME_REGISTERS;
  }
  
+ #if defined(HAVE_AS_TLS) && defined(HAVE_AS_DTPREL_RELOC)
+ /* Implementation of TARGET_ASM_OUTPUT_DWARF_DTPREL.  */
+ static void
+ aarch64_output_dwarf_dtprel (FILE *f, int size, rtx x)
+ {
+   /* The AArch64 ABI defines static DTPREL relocations only for 8-byte (.xword)
+      DWARF entries.  For any other size there is no valid dtprel(symbol)
+      encoding and rejecting the request.  */
+   if (size != 8)
+     {
+       error ("unsupported size %d for DTPREL relocation, allowed: 8", size);
+       return;
+     }
+   fputs ("\t.xword\t", f);
+   fputs ("%dtprel(", f);
+   output_addr_const (f, x);
+   fputs (")", f);
+ }
+ #endif
+ 
  /* Implement TARGET_DWARF_FRAME_REG_MODE.  */
  static machine_mode
  aarch64_dwarf_frame_reg_mode (int regno)
*************** aarch64_preferred_else_value (unsigned,
*** 2229,2234 ****
--- 2250,2336 ----
    return nops == 3 ? ops[2] : ops[0];
  }
  
+ /* Try to widen a signed, overflow-undefined multiply by a power of two before
+    converting it to a wider integral type.
+ 
+    This helps AArch64 instruction selection expose a form that can be emitted
+    as SBFIZ, avoiding an otherwise separate sign-extension around the
+    shift/bitfield operation.
+ 
+    For example, rewrite:
+ 
+      _2 = _1 * 2;
+      _3 = (long int) _2;
+ 
+    into:
+ 
+      _6 = (long int) _1;
+      _3 = _6 * 2;
+ 
+    This is valid because overflow in the original narrow signed multiply is
+    undefined.  For all defined executions, widening the multiplicand before the
+    multiply produces the same value as multiplying in the narrow type and then
+    converting the result.
+ 
+    The original narrow multiply is removed immediately.  There is no DCE pass
+    after AArch64 instruction selection, so leaving it behind would keep dead
+    multiplications in the final optimized GIMPLE dump.  */
+ static bool
+ aarch64_try_widen_mult_by_pow2 (const gassign *convert,
+ 				gimple_stmt_iterator *gsi)
+ {
+   tree type = TREE_TYPE (gimple_assign_lhs (convert));
+   tree inner = gimple_assign_rhs1 (convert);
+   tree inner_type = TREE_TYPE (inner);
+ 
+   if (!INTEGRAL_TYPE_P (type)
+       || !INTEGRAL_TYPE_P (inner_type)
+       || !TYPE_OVERFLOW_UNDEFINED (inner_type)
+       || TYPE_PRECISION (type) <= TYPE_PRECISION (inner_type)
+       || TYPE_PRECISION (type) > BITS_PER_WORD
+       || TREE_CODE (inner) != SSA_NAME
+       || !has_single_use (inner))
+     return false;
+ 
+   gimple *stmt = SSA_NAME_DEF_STMT (inner);
+   if (!is_gimple_assign (stmt)
+       || gimple_assign_rhs_code (stmt) != MULT_EXPR)
+     return false;
+ 
+   tree multiplicand = gimple_assign_rhs1 (stmt);
+   tree pow2const = gimple_assign_rhs2 (stmt);
+   if (!integer_pow2p (pow2const)
+       || tree_int_cst_sgn (pow2const) <= 0)
+     return false;
+ 
+   gimple_stmt_iterator stmt_gsi = gsi_for_stmt (stmt);
+ 
+   gimple_seq stmts = NULL;
+   tree widened_multiplicand = gimple_convert (&stmts,
+ 					      gimple_location (convert),
+ 					      type, multiplicand);
+ 
+   gsi_insert_seq_before (gsi, stmts, GSI_SAME_STMT);
+ 
+   tree widened_pow2const = fold_convert (type, pow2const);
+ 
+   tree mul_lhs = gimple_assign_lhs (convert);
+   gassign *mul_stmt
+     = gimple_build_assign (mul_lhs, MULT_EXPR,
+ 			   widened_multiplicand,
+ 			   widened_pow2const);
+ 
+   gsi_replace (gsi, mul_stmt, true);
+ 
+   /* INNER was used only by CONVERT, which we just replaced.  The defining
+      multiply is therefore dead, so remove it.  */
+   gcc_checking_assert (has_zero_uses (inner));
+   gsi_remove (&stmt_gsi, true);
+   release_defs (stmt);
+ 
+   return true;
+ }
+ 
  /* Implement TARGET_INSTRUCTION_SELECTION.  The target hook is used to
     change generic sequences to a form AArch64 has an easier time expanding
     instructions for.  It's not supposed to be used for generic rewriting that
*************** aarch64_instruction_selection (function
*** 2243,2248 ****
--- 2345,2354 ----
    if (!assign)
      return false;
  
+   if (CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (assign))
+       && aarch64_try_widen_mult_by_pow2 (assign, gsi))
+     return true;
+ 
    /* Convert
  	p == q ? s1 : s2;
       to
*************** aarch64_fntype_abi (const_tree fntype)
*** 2591,2597 ****
    if (lookup_attribute ("aarch64_vector_pcs", TYPE_ATTRIBUTES (fntype)))
      return aarch64_simd_abi ();
  
!   if (lookup_attribute ("preserve_none", TYPE_ATTRIBUTES (fntype)))
      return aarch64_preserve_none_abi ();
  
    if (aarch64_returns_value_in_sve_regs_p (fntype)
--- 2697,2705 ----
    if (lookup_attribute ("aarch64_vector_pcs", TYPE_ATTRIBUTES (fntype)))
      return aarch64_simd_abi ();
  
!   /* Fall back to AAPCS for variadic functions.  */
!   if (lookup_attribute ("preserve_none", TYPE_ATTRIBUTES (fntype))
!       && !stdarg_p (fntype))
      return aarch64_preserve_none_abi ();
  
    if (aarch64_returns_value_in_sve_regs_p (fntype)
*************** aarch64_call_switches_pstate_sm (aarch64
*** 2777,2784 ****
  static bool
  aarch64_compatible_vector_types_p (const_tree type1, const_tree type2)
  {
!   return (aarch64_sve::builtin_type_p (type1)
! 	  == aarch64_sve::builtin_type_p (type2));
  }
  
  /* Return true if we should emit CFI for register REGNO.  */
--- 2885,2892 ----
  static bool
  aarch64_compatible_vector_types_p (const_tree type1, const_tree type2)
  {
!   return (aarch64_acle::builtin_type_p (type1)
! 	  == aarch64_acle::builtin_type_p (type2));
  }
  
  /* Return true if we should emit CFI for register REGNO.  */
*************** static void
*** 16798,16804 ****
  aarch64_init_builtins ()
  {
    aarch64_general_init_builtins ();
!   aarch64_sve::init_builtins ();
    if (TARGET_AARCH64_MS_ABI)
      {
        aarch64_ms_variadic_abi_init_builtins ();
--- 16906,16912 ----
  aarch64_init_builtins ()
  {
    aarch64_general_init_builtins ();
!   aarch64_acle::init_builtins ();
    if (TARGET_AARCH64_MS_ABI)
      {
        aarch64_ms_variadic_abi_init_builtins ();
*************** aarch64_gimple_fold_builtin (gimple_stmt
*** 16842,16848 ****
        break;
  
      case AARCH64_BUILTIN_SVE:
!       new_stmt = aarch64_sve::gimple_fold_builtin (subcode, gsi, stmt);
        break;
      }
  
--- 16950,16956 ----
        break;
  
      case AARCH64_BUILTIN_SVE:
!       new_stmt = aarch64_acle::gimple_fold_builtin (subcode, gsi, stmt);
        break;
      }
  
*************** aarch64_expand_builtin (tree exp, rtx ta
*** 16866,16872 ****
        return aarch64_general_expand_builtin (subcode, exp, target, ignore);
  
      case AARCH64_BUILTIN_SVE:
!       return aarch64_sve::expand_builtin (subcode, exp, target);
      }
    gcc_unreachable ();
  }
--- 16974,16980 ----
        return aarch64_general_expand_builtin (subcode, exp, target, ignore);
  
      case AARCH64_BUILTIN_SVE:
!       return aarch64_acle::expand_builtin (subcode, exp, target);
      }
    gcc_unreachable ();
  }
*************** aarch64_builtin_decl (unsigned int code,
*** 16882,16888 ****
        return aarch64_general_builtin_decl (subcode, initialize_p);
  
      case AARCH64_BUILTIN_SVE:
!       return aarch64_sve::builtin_decl (subcode, initialize_p);
      }
    gcc_unreachable ();
  }
--- 16990,16996 ----
        return aarch64_general_builtin_decl (subcode, initialize_p);
  
      case AARCH64_BUILTIN_SVE:
!       return aarch64_acle::builtin_decl (subcode, initialize_p);
      }
    gcc_unreachable ();
  }
*************** private:
*** 17462,17468 ****
    unsigned int adjust_body_cost (loop_vec_info, const aarch64_vector_costs *,
  				 unsigned int);
    bool prefer_unrolled_loop () const;
!   unsigned int determine_suggested_unroll_factor ();
  
    /* True if we have performed one-time initialization based on the
       vec_info.  */
--- 17570,17576 ----
    unsigned int adjust_body_cost (loop_vec_info, const aarch64_vector_costs *,
  				 unsigned int);
    bool prefer_unrolled_loop () const;
!   unsigned int determine_suggested_unroll_factor (loop_vec_info loop_vinfo);
  
    /* True if we have performed one-time initialization based on the
       vec_info.  */
*************** adjust_body_cost_sve (const aarch64_vec_
*** 19024,19030 ****
  }
  
  unsigned int
! aarch64_vector_costs::determine_suggested_unroll_factor ()
  {
    bool sve = m_vec_flags & VEC_ANY_SVE;
    /* If we are trying to unroll an Advanced SIMD main loop that contains
--- 19132,19139 ----
  }
  
  unsigned int
! aarch64_vector_costs::
! determine_suggested_unroll_factor (loop_vec_info loop_vinfo)
  {
    bool sve = m_vec_flags & VEC_ANY_SVE;
    /* If we are trying to unroll an Advanced SIMD main loop that contains
*************** aarch64_vector_costs::determine_suggeste
*** 19081,19086 ****
--- 19190,19205 ----
        max_unroll_factor = MAX (max_unroll_factor, unroll_factor);
      }
  
+   /* For known iteration loops, cap suggested unroll factor to avoid redundant
+      unrolled chunks.  Use CEIL rather than truncating division to make sure
+      the completely unrolled vector loop covers all scalar iterations.  */
+   if (LOOP_VINFO_NITERS_KNOWN_P (loop_vinfo))
+     {
+       unsigned int niters = LOOP_VINFO_INT_NITERS (loop_vinfo);
+       unsigned int estimated_vf = vect_vf_for_cost (loop_vinfo);
+       max_unroll_factor = MIN (max_unroll_factor, CEIL (niters, estimated_vf));
+     }
+ 
    /* Make sure unroll factor is power of 2.  */
    return 1 << ceil_log2 (max_unroll_factor);
  }
*************** aarch64_vector_costs::finish_cost (const
*** 19272,19278 ****
      {
        m_costs[vect_body] = adjust_body_cost (loop_vinfo, scalar_costs,
  					     m_costs[vect_body]);
!       m_suggested_unroll_factor = determine_suggested_unroll_factor ();
  
        /* For gather and scatters there's an additional overhead for the first
  	 iteration.  For low count loops they're not beneficial so model the
--- 19391,19398 ----
      {
        m_costs[vect_body] = adjust_body_cost (loop_vinfo, scalar_costs,
  					     m_costs[vect_body]);
!       m_suggested_unroll_factor
! 	= determine_suggested_unroll_factor (loop_vinfo);
  
        /* For gather and scatters there's an additional overhead for the first
  	 iteration.  For low count loops they're not beneficial so model the
*************** aarch64_member_type_forces_blk (const_tr
*** 23136,23142 ****
       For structures, the "multiple" case is indicated by MODE being
       VOIDmode.  */
    unsigned int num_zr, num_pr;
!   if (aarch64_sve::builtin_type_p (type, &num_zr, &num_pr) && num_pr > 2)
      {
        if (TREE_CODE (field_or_array) == ARRAY_TYPE)
  	return !simple_cst_equal (TYPE_SIZE (field_or_array),
--- 23256,23262 ----
       For structures, the "multiple" case is indicated by MODE being
       VOIDmode.  */
    unsigned int num_zr, num_pr;
!   if (aarch64_acle::builtin_type_p (type, &num_zr, &num_pr) && num_pr > 2)
      {
        if (TREE_CODE (field_or_array) == ARRAY_TYPE)
  	return !simple_cst_equal (TYPE_SIZE (field_or_array),
*************** aapcs_vfp_sub_candidate (const_tree type
*** 23188,23194 ****
    machine_mode mode;
    HOST_WIDE_INT size;
  
!   if (aarch64_sve::builtin_type_p (type))
      return -1;
  
    switch (TREE_CODE (type))
--- 23308,23314 ----
    machine_mode mode;
    HOST_WIDE_INT size;
  
!   if (aarch64_acle::builtin_type_p (type))
      return -1;
  
    switch (TREE_CODE (type))
*************** aarch64_short_vector_p (const_tree type,
*** 23412,23418 ****
  
    if (type && VECTOR_TYPE_P (type))
      {
!       if (aarch64_sve::builtin_type_p (type))
  	return false;
        size = int_size_in_bytes (type);
      }
--- 23532,23538 ----
  
    if (type && VECTOR_TYPE_P (type))
      {
!       if (aarch64_acle::builtin_type_p (type))
  	return false;
        size = int_size_in_bytes (type);
      }
*************** aarch64_mangle_type (const_tree type)
*** 23908,23914 ****
      {
        const char *res;
        if ((res = aarch64_general_mangle_builtin_type (type))
! 	  || (res = aarch64_sve::mangle_builtin_type (type)))
  	return res;
      }
  
--- 24028,24034 ----
      {
        const char *res;
        if ((res = aarch64_general_mangle_builtin_type (type))
! 	  || (res = aarch64_acle::mangle_builtin_type (type)))
  	return res;
      }
  
*************** static bool
*** 23945,23951 ****
  aarch64_verify_type_context (location_t loc, type_context_kind context,
  			     const_tree type, bool silent_p)
  {
!   return aarch64_sve::verify_type_context (loc, context, type, silent_p);
  }
  
  /* Find the first rtx_insn before insn that will generate an assembly
--- 24065,24071 ----
  aarch64_verify_type_context (location_t loc, type_context_kind context,
  			     const_tree type, bool silent_p)
  {
!   return aarch64_acle::verify_type_context (loc, context, type, silent_p);
  }
  
  /* Find the first rtx_insn before insn that will generate an assembly
*************** simd_clone_adjust_sve_vector_type (tree
*** 31250,31256 ****
       However, it doesn't seem worth trying to fix that until we have a
       way of handling implementations that operate on unpacked types.  */
    type = build_distinct_type_copy (type);
!   aarch64_sve::add_sve_type_attribute (type, num_zr, num_pr, NULL, NULL);
    return type;
  }
  
--- 31370,31376 ----
       However, it doesn't seem worth trying to fix that until we have a
       way of handling implementations that operate on unpacked types.  */
    type = build_distinct_type_copy (type);
!   aarch64_acle::add_sve_type_attribute (type, num_zr, num_pr, NULL, NULL);
    return type;
  }
  
*************** aarch64_invalid_unary_op (int op, const_
*** 31491,31497 ****
  {
    if (VECTOR_BOOLEAN_TYPE_P (type)
        && !TYPE_INDIVISIBLE_P (type)
!       && aarch64_sve::builtin_type_p (type))
      return aarch64_valid_vector_boolean_op (op);
  
    /* Reject all single-operand operations on __mfp8 except for &.  */
--- 31611,31617 ----
  {
    if (VECTOR_BOOLEAN_TYPE_P (type)
        && !TYPE_INDIVISIBLE_P (type)
!       && aarch64_acle::builtin_type_p (type))
      return aarch64_valid_vector_boolean_op (op);
  
    /* Reject all single-operand operations on __mfp8 except for &.  */
*************** aarch64_invalid_binary_op (int op, const
*** 31515,31526 ****
        && !TYPE_INDIVISIBLE_P (type1)
        && !TYPE_INDIVISIBLE_P (type2))
      {
!       if ((aarch64_sve::builtin_type_p (type1)
! 	  != aarch64_sve::builtin_type_p (type2)))
  	return N_("cannot combine GNU and SVE vectors in a binary operation");
  
!       if (aarch64_sve::builtin_type_p (type1)
! 	  && aarch64_sve::builtin_type_p (type2)
  	  && VECTOR_BOOLEAN_TYPE_P (type1)
  	  && VECTOR_BOOLEAN_TYPE_P (type2))
  	return aarch64_valid_vector_boolean_op (op);
--- 31635,31646 ----
        && !TYPE_INDIVISIBLE_P (type1)
        && !TYPE_INDIVISIBLE_P (type2))
      {
!       if ((aarch64_acle::builtin_type_p (type1)
! 	   != aarch64_acle::builtin_type_p (type2)))
  	return N_("cannot combine GNU and SVE vectors in a binary operation");
  
!       if (aarch64_acle::builtin_type_p (type1)
! 	  && aarch64_acle::builtin_type_p (type2)
  	  && VECTOR_BOOLEAN_TYPE_P (type1)
  	  && VECTOR_BOOLEAN_TYPE_P (type2))
  	return aarch64_valid_vector_boolean_op (op);
*************** aarch64_libgcc_floating_mode_supported_p
*** 33999,34004 ****
--- 34119,34129 ----
  #undef TARGET_DWARF_FRAME_REG_MODE
  #define TARGET_DWARF_FRAME_REG_MODE aarch64_dwarf_frame_reg_mode
  
+ #if defined(HAVE_AS_TLS) && defined(HAVE_AS_DTPREL_RELOC)
+ #undef TARGET_ASM_OUTPUT_DWARF_DTPREL
+ #define TARGET_ASM_OUTPUT_DWARF_DTPREL aarch64_output_dwarf_dtprel
+ #endif
+ 
  #undef TARGET_OUTPUT_CFI_DIRECTIVE
  #define TARGET_OUTPUT_CFI_DIRECTIVE aarch64_output_cfi_directive
  
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64.h gcc-17-20260705/gcc/config/aarch64/aarch64.h
*** gcc-17-20260628/gcc/config/aarch64/aarch64.h	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/aarch64.h	Sun Jul  5 22:32:07 2026
*************** constexpr auto AARCH64_FL_DEFAULT_ISA_MO
*** 290,299 ****
  /* SVE2 instructions, enabled in non-streaming mode through +sve2.  */
  #define TARGET_SVE2 (AARCH64_HAVE_ISA (SVE2) || TARGET_STREAMING)
  
! /* SVE2 AES instructions, enabled through +sve2-aes.  */
! #define TARGET_SVE2_AES (AARCH64_HAVE_ISA (SVE2) \
! 			 && AARCH64_HAVE_ISA (SVE_AES) \
! 			 && TARGET_NON_STREAMING)
  
  /* SVE BITPERM instructions, enabled through +sve-bitperm+sve2 for non-streaming
     and +ssve-bitperm for streaming.  */
--- 290,301 ----
  /* SVE2 instructions, enabled in non-streaming mode through +sve2.  */
  #define TARGET_SVE2 (AARCH64_HAVE_ISA (SVE2) || TARGET_STREAMING)
  
! /* SVE AES instructions, enabled through +sve-aes+sve2 for non-streaming mode
!    and +ssve-aes for streaming mode.  */
! #define TARGET_SVE_AES (AARCH64_HAVE_ISA (SVE_AES) \
! 			    && (AARCH64_HAVE_ISA (SVE2) || TARGET_STREAMING) \
! 			    && (AARCH64_HAVE_ISA (SSVE_AES) \
! 				|| TARGET_NON_STREAMING))
  
  /* SVE BITPERM instructions, enabled through +sve-bitperm+sve2 for non-streaming
     and +ssve-bitperm for streaming.  */
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/aarch64.md gcc-17-20260705/gcc/config/aarch64/aarch64.md
*** gcc-17-20260628/gcc/config/aarch64/aarch64.md	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/aarch64.md	Sun Jul  5 22:32:07 2026
***************
*** 227,236 ****
      UNSPEC_AUTIB1716
      UNSPEC_AUTIASP
      UNSPEC_AUTIBSP
-     UNSPEC_BSL
      UNSPEC_CALLEE_ABI
      UNSPEC_CASESI
-     UNSPEC_COMBINE
      UNSPEC_CPYMEM
      UNSPEC_CRC32B
      UNSPEC_CRC32CB
--- 227,234 ----
***************
*** 241,247 ****
      UNSPEC_CRC32W
      UNSPEC_CRC32X
      UNSPEC_DUP
-     UNSPEC_DUP_LANE
      UNSPEC_FCVTZS
      UNSPEC_FCVTZU
      UNSPEC_FJCVTZS
--- 239,244 ----
***************
*** 260,266 ****
      UNSPEC_FRINTP
      UNSPEC_FRINTX
      UNSPEC_FRINTZ
-     UNSPEC_GET_LANE
      UNSPEC_GOTSMALLPIC
      UNSPEC_GOTSMALLPIC28K
      UNSPEC_GOTSMALLTLS
--- 257,262 ----
***************
*** 358,365 ****
      UNSPEC_UNPACKSLO
      UNSPEC_UNPACKULO
      UNSPEC_PACK
-     UNSPEC_VCREATE
-     UNSPEC_VEC_COPY
      UNSPEC_WHILEGE
      UNSPEC_WHILEGT
      UNSPEC_WHILEHI
--- 354,359 ----
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/arm_neon.h gcc-17-20260705/gcc/config/aarch64/arm_neon.h
*** gcc-17-20260628/gcc/config/aarch64/arm_neon.h	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/arm_neon.h	Sun Jul  5 22:32:07 2026
***************
*** 49,76 ****
     __aarch64_vdup_lane_any (f32, , __a, __b)
  #define __aarch64_vdup_lane_f64(__a, __b) \
     __aarch64_vdup_lane_any (f64, , __a, __b)
- #define __aarch64_vdup_lane_p8(__a, __b) \
-    __aarch64_vdup_lane_any (p8, , __a, __b)
- #define __aarch64_vdup_lane_p16(__a, __b) \
-    __aarch64_vdup_lane_any (p16, , __a, __b)
- #define __aarch64_vdup_lane_p64(__a, __b) \
-    __aarch64_vdup_lane_any (p64, , __a, __b)
- #define __aarch64_vdup_lane_s8(__a, __b) \
-    __aarch64_vdup_lane_any (s8, , __a, __b)
- #define __aarch64_vdup_lane_s16(__a, __b) \
-    __aarch64_vdup_lane_any (s16, , __a, __b)
- #define __aarch64_vdup_lane_s32(__a, __b) \
-    __aarch64_vdup_lane_any (s32, , __a, __b)
- #define __aarch64_vdup_lane_s64(__a, __b) \
-   __aarch64_vdup_lane_any (s64, , __a, __b)
- #define __aarch64_vdup_lane_u8(__a, __b) \
-    __aarch64_vdup_lane_any (u8, , __a, __b)
- #define __aarch64_vdup_lane_u16(__a, __b) \
-    __aarch64_vdup_lane_any (u16, , __a, __b)
- #define __aarch64_vdup_lane_u32(__a, __b) \
-    __aarch64_vdup_lane_any (u32, , __a, __b)
- #define __aarch64_vdup_lane_u64(__a, __b) \
-    __aarch64_vdup_lane_any (u64, , __a, __b)
  
  /* __aarch64_vdup_laneq internal macros.  */
  #define __aarch64_vdup_laneq_f16(__a, __b) \
--- 49,54 ----
***************
*** 79,106 ****
     __aarch64_vdup_lane_any (f32, , __a, __b)
  #define __aarch64_vdup_laneq_f64(__a, __b) \
     __aarch64_vdup_lane_any (f64, , __a, __b)
- #define __aarch64_vdup_laneq_p8(__a, __b) \
-    __aarch64_vdup_lane_any (p8, , __a, __b)
- #define __aarch64_vdup_laneq_p16(__a, __b) \
-    __aarch64_vdup_lane_any (p16, , __a, __b)
- #define __aarch64_vdup_laneq_p64(__a, __b) \
-    __aarch64_vdup_lane_any (p64, , __a, __b)
- #define __aarch64_vdup_laneq_s8(__a, __b) \
-    __aarch64_vdup_lane_any (s8, , __a, __b)
- #define __aarch64_vdup_laneq_s16(__a, __b) \
-    __aarch64_vdup_lane_any (s16, , __a, __b)
- #define __aarch64_vdup_laneq_s32(__a, __b) \
-    __aarch64_vdup_lane_any (s32, , __a, __b)
- #define __aarch64_vdup_laneq_s64(__a, __b) \
-    __aarch64_vdup_lane_any (s64, , __a, __b)
- #define __aarch64_vdup_laneq_u8(__a, __b) \
-    __aarch64_vdup_lane_any (u8, , __a, __b)
- #define __aarch64_vdup_laneq_u16(__a, __b) \
-    __aarch64_vdup_lane_any (u16, , __a, __b)
- #define __aarch64_vdup_laneq_u32(__a, __b) \
-    __aarch64_vdup_lane_any (u32, , __a, __b)
- #define __aarch64_vdup_laneq_u64(__a, __b) \
-    __aarch64_vdup_lane_any (u64, , __a, __b)
  
  /* __aarch64_vdupq_lane internal macros.  */
  #define __aarch64_vdupq_lane_f16(__a, __b) \
--- 57,62 ----
***************
*** 109,136 ****
     __aarch64_vdup_lane_any (f32, q, __a, __b)
  #define __aarch64_vdupq_lane_f64(__a, __b) \
     __aarch64_vdup_lane_any (f64, q, __a, __b)
- #define __aarch64_vdupq_lane_p8(__a, __b) \
-    __aarch64_vdup_lane_any (p8, q, __a, __b)
- #define __aarch64_vdupq_lane_p16(__a, __b) \
-    __aarch64_vdup_lane_any (p16, q, __a, __b)
- #define __aarch64_vdupq_lane_p64(__a, __b) \
-    __aarch64_vdup_lane_any (p64, q, __a, __b)
- #define __aarch64_vdupq_lane_s8(__a, __b) \
-    __aarch64_vdup_lane_any (s8, q, __a, __b)
- #define __aarch64_vdupq_lane_s16(__a, __b) \
-    __aarch64_vdup_lane_any (s16, q, __a, __b)
- #define __aarch64_vdupq_lane_s32(__a, __b) \
-    __aarch64_vdup_lane_any (s32, q, __a, __b)
- #define __aarch64_vdupq_lane_s64(__a, __b) \
-    __aarch64_vdup_lane_any (s64, q, __a, __b)
- #define __aarch64_vdupq_lane_u8(__a, __b) \
-    __aarch64_vdup_lane_any (u8, q, __a, __b)
- #define __aarch64_vdupq_lane_u16(__a, __b) \
-    __aarch64_vdup_lane_any (u16, q, __a, __b)
- #define __aarch64_vdupq_lane_u32(__a, __b) \
-    __aarch64_vdup_lane_any (u32, q, __a, __b)
- #define __aarch64_vdupq_lane_u64(__a, __b) \
-    __aarch64_vdup_lane_any (u64, q, __a, __b)
  
  /* __aarch64_vdupq_laneq internal macros.  */
  #define __aarch64_vdupq_laneq_f16(__a, __b) \
--- 65,70 ----
***************
*** 139,166 ****
     __aarch64_vdup_lane_any (f32, q, __a, __b)
  #define __aarch64_vdupq_laneq_f64(__a, __b) \
     __aarch64_vdup_lane_any (f64, q, __a, __b)
- #define __aarch64_vdupq_laneq_p8(__a, __b) \
-    __aarch64_vdup_lane_any (p8, q, __a, __b)
- #define __aarch64_vdupq_laneq_p16(__a, __b) \
-    __aarch64_vdup_lane_any (p16, q, __a, __b)
- #define __aarch64_vdupq_laneq_p64(__a, __b) \
-    __aarch64_vdup_lane_any (p64, q, __a, __b)
- #define __aarch64_vdupq_laneq_s8(__a, __b) \
-    __aarch64_vdup_lane_any (s8, q, __a, __b)
- #define __aarch64_vdupq_laneq_s16(__a, __b) \
-    __aarch64_vdup_lane_any (s16, q, __a, __b)
- #define __aarch64_vdupq_laneq_s32(__a, __b) \
-    __aarch64_vdup_lane_any (s32, q, __a, __b)
- #define __aarch64_vdupq_laneq_s64(__a, __b) \
-    __aarch64_vdup_lane_any (s64, q, __a, __b)
- #define __aarch64_vdupq_laneq_u8(__a, __b) \
-    __aarch64_vdup_lane_any (u8, q, __a, __b)
- #define __aarch64_vdupq_laneq_u16(__a, __b) \
-    __aarch64_vdup_lane_any (u16, q, __a, __b)
- #define __aarch64_vdupq_laneq_u32(__a, __b) \
-    __aarch64_vdup_lane_any (u32, q, __a, __b)
- #define __aarch64_vdupq_laneq_u64(__a, __b) \
-    __aarch64_vdup_lane_any (u64, q, __a, __b)
  
  /* Internal macro for lane indices.  */
  
--- 73,78 ----
***************
*** 193,339 ****
      __vec;								\
    })
  
- /* vadd  */
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vadd_s8 (int8x8_t __a, int8x8_t __b)
- {
-   return __a + __b;
- }
- 
- __extension__ extern __inline int16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vadd_s16 (int16x4_t __a, int16x4_t __b)
- {
-   return __a + __b;
- }
- 
- __extension__ extern __inline int32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vadd_s32 (int32x2_t __a, int32x2_t __b)
- {
-   return __a + __b;
- }
- 
- __extension__ extern __inline float32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vadd_f32 (float32x2_t __a, float32x2_t __b)
- {
-   return __a + __b;
- }
- 
- __extension__ extern __inline float64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vadd_f64 (float64x1_t __a, float64x1_t __b)
- {
-   return __a + __b;
- }
- 
- __extension__ extern __inline uint8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vadd_u8 (uint8x8_t __a, uint8x8_t __b)
- {
-   return __a + __b;
- }
- 
- __extension__ extern __inline uint16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vadd_u16 (uint16x4_t __a, uint16x4_t __b)
- {
-   return __a + __b;
- }
- 
- __extension__ extern __inline uint32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vadd_u32 (uint32x2_t __a, uint32x2_t __b)
- {
-   return __a + __b;
- }
- 
- __extension__ extern __inline int64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vadd_s64 (int64x1_t __a, int64x1_t __b)
- {
-   return __a + __b;
- }
- 
- __extension__ extern __inline uint64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vadd_u64 (uint64x1_t __a, uint64x1_t __b)
- {
-   return __a + __b;
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vaddq_s8 (int8x16_t __a, int8x16_t __b)
- {
-   return __a + __b;
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vaddq_s16 (int16x8_t __a, int16x8_t __b)
- {
-   return __a + __b;
- }
- 
- __extension__ extern __inline int32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vaddq_s32 (int32x4_t __a, int32x4_t __b)
- {
-   return __a + __b;
- }
- 
- __extension__ extern __inline int64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vaddq_s64 (int64x2_t __a, int64x2_t __b)
- {
-   return __a + __b;
- }
- 
- __extension__ extern __inline float32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vaddq_f32 (float32x4_t __a, float32x4_t __b)
- {
-   return __a + __b;
- }
- 
- __extension__ extern __inline float64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vaddq_f64 (float64x2_t __a, float64x2_t __b)
- {
-   return __a + __b;
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vaddq_u8 (uint8x16_t __a, uint8x16_t __b)
- {
-   return __a + __b;
- }
- 
- __extension__ extern __inline uint16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vaddq_u16 (uint16x8_t __a, uint16x8_t __b)
- {
-   return __a + __b;
- }
- 
- __extension__ extern __inline uint32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vaddq_u32 (uint32x4_t __a, uint32x4_t __b)
- {
-   return __a + __b;
- }
- 
- __extension__ extern __inline uint64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vaddq_u64 (uint64x2_t __a, uint64x2_t __b)
- {
-   return __a + __b;
- }
- 
  __extension__ extern __inline int16x8_t
  __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
  vaddl_s8 (int8x8_t __a, int8x8_t __b)
--- 105,110 ----
*************** vmulq_p8 (poly8x16_t __a, poly8x16_t __b
*** 994,1559 ****
  
  __extension__ extern __inline int8x8_t
  __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vand_s8 (int8x8_t __a, int8x8_t __b)
- {
-   return __a & __b;
- }
- 
- __extension__ extern __inline int16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vand_s16 (int16x4_t __a, int16x4_t __b)
- {
-   return __a & __b;
- }
- 
- __extension__ extern __inline int32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vand_s32 (int32x2_t __a, int32x2_t __b)
- {
-   return __a & __b;
- }
- 
- __extension__ extern __inline uint8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vand_u8 (uint8x8_t __a, uint8x8_t __b)
- {
-   return __a & __b;
- }
- 
- __extension__ extern __inline uint16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vand_u16 (uint16x4_t __a, uint16x4_t __b)
- {
-   return __a & __b;
- }
- 
- __extension__ extern __inline uint32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vand_u32 (uint32x2_t __a, uint32x2_t __b)
- {
-   return __a & __b;
- }
- 
- __extension__ extern __inline int64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vand_s64 (int64x1_t __a, int64x1_t __b)
- {
-   return __a & __b;
- }
- 
- __extension__ extern __inline uint64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vand_u64 (uint64x1_t __a, uint64x1_t __b)
- {
-   return __a & __b;
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vandq_s8 (int8x16_t __a, int8x16_t __b)
- {
-   return __a & __b;
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vandq_s16 (int16x8_t __a, int16x8_t __b)
- {
-   return __a & __b;
- }
- 
- __extension__ extern __inline int32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vandq_s32 (int32x4_t __a, int32x4_t __b)
- {
-   return __a & __b;
- }
- 
- __extension__ extern __inline int64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vandq_s64 (int64x2_t __a, int64x2_t __b)
- {
-   return __a & __b;
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vandq_u8 (uint8x16_t __a, uint8x16_t __b)
- {
-   return __a & __b;
- }
- 
- __extension__ extern __inline uint16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vandq_u16 (uint16x8_t __a, uint16x8_t __b)
- {
-   return __a & __b;
- }
- 
- __extension__ extern __inline uint32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vandq_u32 (uint32x4_t __a, uint32x4_t __b)
- {
-   return __a & __b;
- }
- 
- __extension__ extern __inline uint64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vandq_u64 (uint64x2_t __a, uint64x2_t __b)
- {
-   return __a & __b;
- }
- 
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vorr_s8 (int8x8_t __a, int8x8_t __b)
- {
-   return __a | __b;
- }
- 
- __extension__ extern __inline int16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vorr_s16 (int16x4_t __a, int16x4_t __b)
- {
-   return __a | __b;
- }
- 
- __extension__ extern __inline int32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vorr_s32 (int32x2_t __a, int32x2_t __b)
- {
-   return __a | __b;
- }
- 
- __extension__ extern __inline uint8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vorr_u8 (uint8x8_t __a, uint8x8_t __b)
- {
-   return __a | __b;
- }
- 
- __extension__ extern __inline uint16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vorr_u16 (uint16x4_t __a, uint16x4_t __b)
- {
-   return __a | __b;
- }
- 
- __extension__ extern __inline uint32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vorr_u32 (uint32x2_t __a, uint32x2_t __b)
- {
-   return __a | __b;
- }
- 
- __extension__ extern __inline int64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vorr_s64 (int64x1_t __a, int64x1_t __b)
- {
-   return __a | __b;
- }
- 
- __extension__ extern __inline uint64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vorr_u64 (uint64x1_t __a, uint64x1_t __b)
- {
-   return __a | __b;
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vorrq_s8 (int8x16_t __a, int8x16_t __b)
- {
-   return __a | __b;
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vorrq_s16 (int16x8_t __a, int16x8_t __b)
- {
-   return __a | __b;
- }
- 
- __extension__ extern __inline int32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vorrq_s32 (int32x4_t __a, int32x4_t __b)
- {
-   return __a | __b;
- }
- 
- __extension__ extern __inline int64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vorrq_s64 (int64x2_t __a, int64x2_t __b)
- {
-   return __a | __b;
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vorrq_u8 (uint8x16_t __a, uint8x16_t __b)
- {
-   return __a | __b;
- }
- 
- __extension__ extern __inline uint16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vorrq_u16 (uint16x8_t __a, uint16x8_t __b)
- {
-   return __a | __b;
- }
- 
- __extension__ extern __inline uint32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vorrq_u32 (uint32x4_t __a, uint32x4_t __b)
- {
-   return __a | __b;
- }
- 
- __extension__ extern __inline uint64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vorrq_u64 (uint64x2_t __a, uint64x2_t __b)
- {
-   return __a | __b;
- }
- 
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- veor_s8 (int8x8_t __a, int8x8_t __b)
- {
-   return __a ^ __b;
- }
- 
- __extension__ extern __inline int16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- veor_s16 (int16x4_t __a, int16x4_t __b)
- {
-   return __a ^ __b;
- }
- 
- __extension__ extern __inline int32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- veor_s32 (int32x2_t __a, int32x2_t __b)
- {
-   return __a ^ __b;
- }
- 
- __extension__ extern __inline uint8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- veor_u8 (uint8x8_t __a, uint8x8_t __b)
- {
-   return __a ^ __b;
- }
- 
- __extension__ extern __inline uint16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- veor_u16 (uint16x4_t __a, uint16x4_t __b)
- {
-   return __a ^ __b;
- }
- 
- __extension__ extern __inline uint32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- veor_u32 (uint32x2_t __a, uint32x2_t __b)
- {
-   return __a ^ __b;
- }
- 
- __extension__ extern __inline int64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- veor_s64 (int64x1_t __a, int64x1_t __b)
- {
-   return __a ^ __b;
- }
- 
- __extension__ extern __inline uint64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- veor_u64 (uint64x1_t __a, uint64x1_t __b)
- {
-   return __a ^ __b;
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- veorq_s8 (int8x16_t __a, int8x16_t __b)
- {
-   return __a ^ __b;
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- veorq_s16 (int16x8_t __a, int16x8_t __b)
- {
-   return __a ^ __b;
- }
- 
- __extension__ extern __inline int32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- veorq_s32 (int32x4_t __a, int32x4_t __b)
- {
-   return __a ^ __b;
- }
- 
- __extension__ extern __inline int64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- veorq_s64 (int64x2_t __a, int64x2_t __b)
- {
-   return __a ^ __b;
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- veorq_u8 (uint8x16_t __a, uint8x16_t __b)
- {
-   return __a ^ __b;
- }
- 
- __extension__ extern __inline uint16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- veorq_u16 (uint16x8_t __a, uint16x8_t __b)
- {
-   return __a ^ __b;
- }
- 
- __extension__ extern __inline uint32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- veorq_u32 (uint32x4_t __a, uint32x4_t __b)
- {
-   return __a ^ __b;
- }
- 
- __extension__ extern __inline uint64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- veorq_u64 (uint64x2_t __a, uint64x2_t __b)
- {
-   return __a ^ __b;
- }
- 
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbic_s8 (int8x8_t __a, int8x8_t __b)
- {
-   return __a & ~__b;
- }
- 
- __extension__ extern __inline int16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbic_s16 (int16x4_t __a, int16x4_t __b)
- {
-   return __a & ~__b;
- }
- 
- __extension__ extern __inline int32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbic_s32 (int32x2_t __a, int32x2_t __b)
- {
-   return __a & ~__b;
- }
- 
- __extension__ extern __inline uint8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbic_u8 (uint8x8_t __a, uint8x8_t __b)
- {
-   return __a & ~__b;
- }
- 
- __extension__ extern __inline uint16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbic_u16 (uint16x4_t __a, uint16x4_t __b)
- {
-   return __a & ~__b;
- }
- 
- __extension__ extern __inline uint32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbic_u32 (uint32x2_t __a, uint32x2_t __b)
- {
-   return __a & ~__b;
- }
- 
- __extension__ extern __inline int64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbic_s64 (int64x1_t __a, int64x1_t __b)
- {
-   return __a & ~__b;
- }
- 
- __extension__ extern __inline uint64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbic_u64 (uint64x1_t __a, uint64x1_t __b)
- {
-   return __a & ~__b;
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbicq_s8 (int8x16_t __a, int8x16_t __b)
- {
-   return __a & ~__b;
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbicq_s16 (int16x8_t __a, int16x8_t __b)
- {
-   return __a & ~__b;
- }
- 
- __extension__ extern __inline int32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbicq_s32 (int32x4_t __a, int32x4_t __b)
- {
-   return __a & ~__b;
- }
- 
- __extension__ extern __inline int64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbicq_s64 (int64x2_t __a, int64x2_t __b)
- {
-   return __a & ~__b;
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbicq_u8 (uint8x16_t __a, uint8x16_t __b)
- {
-   return __a & ~__b;
- }
- 
- __extension__ extern __inline uint16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbicq_u16 (uint16x8_t __a, uint16x8_t __b)
- {
-   return __a & ~__b;
- }
- 
- __extension__ extern __inline uint32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbicq_u32 (uint32x4_t __a, uint32x4_t __b)
- {
-   return __a & ~__b;
- }
- 
- __extension__ extern __inline uint64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbicq_u64 (uint64x2_t __a, uint64x2_t __b)
- {
-   return __a & ~__b;
- }
- 
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vorn_s8 (int8x8_t __a, int8x8_t __b)
- {
-   return __a | ~__b;
- }
- 
- __extension__ extern __inline int16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vorn_s16 (int16x4_t __a, int16x4_t __b)
- {
-   return __a | ~__b;
- }
- 
- __extension__ extern __inline int32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vorn_s32 (int32x2_t __a, int32x2_t __b)
- {
-   return __a | ~__b;
- }
- 
- __extension__ extern __inline uint8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vorn_u8 (uint8x8_t __a, uint8x8_t __b)
- {
-   return __a | ~__b;
- }
- 
- __extension__ extern __inline uint16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vorn_u16 (uint16x4_t __a, uint16x4_t __b)
- {
-   return __a | ~__b;
- }
- 
- __extension__ extern __inline uint32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vorn_u32 (uint32x2_t __a, uint32x2_t __b)
- {
-   return __a | ~__b;
- }
- 
- __extension__ extern __inline int64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vorn_s64 (int64x1_t __a, int64x1_t __b)
- {
-   return __a | ~__b;
- }
- 
- __extension__ extern __inline uint64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vorn_u64 (uint64x1_t __a, uint64x1_t __b)
- {
-   return __a | ~__b;
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vornq_s8 (int8x16_t __a, int8x16_t __b)
- {
-   return __a | ~__b;
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vornq_s16 (int16x8_t __a, int16x8_t __b)
- {
-   return __a | ~__b;
- }
- 
- __extension__ extern __inline int32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vornq_s32 (int32x4_t __a, int32x4_t __b)
- {
-   return __a | ~__b;
- }
- 
- __extension__ extern __inline int64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vornq_s64 (int64x2_t __a, int64x2_t __b)
- {
-   return __a | ~__b;
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vornq_u8 (uint8x16_t __a, uint8x16_t __b)
- {
-   return __a | ~__b;
- }
- 
- __extension__ extern __inline uint16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vornq_u16 (uint16x8_t __a, uint16x8_t __b)
- {
-   return __a | ~__b;
- }
- 
- __extension__ extern __inline uint32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vornq_u32 (uint32x4_t __a, uint32x4_t __b)
- {
-   return __a | ~__b;
- }
- 
- __extension__ extern __inline uint64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vornq_u64 (uint64x2_t __a, uint64x2_t __b)
- {
-   return __a | ~__b;
- }
- 
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
  vsub_s8 (int8x8_t __a, int8x8_t __b)
  {
    return __a - __b;
--- 765,770 ----
*************** vqrdmulhq_s32 (int32x4_t __a, int32x4_t
*** 2490,3092 ****
    return (int32x4_t) __builtin_aarch64_sqrdmulhv4si (__a, __b);
  }
  
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcreate_s8 (uint64_t __a)
- {
-   return (int8x8_t) __a;
- }
- 
- __extension__ extern __inline int16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcreate_s16 (uint64_t __a)
- {
-   return (int16x4_t) __a;
- }
- 
- __extension__ extern __inline int32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcreate_s32 (uint64_t __a)
- {
-   return (int32x2_t) __a;
- }
- 
- __extension__ extern __inline int64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcreate_s64 (uint64_t __a)
- {
-   return (int64x1_t) {__a};
- }
- 
- __extension__ extern __inline float16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcreate_f16 (uint64_t __a)
- {
-   return (float16x4_t) __a;
- }
- 
- __extension__ extern __inline float32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcreate_f32 (uint64_t __a)
- {
-   return (float32x2_t) __a;
- }
- 
- __extension__ extern __inline uint8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcreate_u8 (uint64_t __a)
- {
-   return (uint8x8_t) __a;
- }
- 
- __extension__ extern __inline uint16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcreate_u16 (uint64_t __a)
- {
-   return (uint16x4_t) __a;
- }
- 
- __extension__ extern __inline uint32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcreate_u32 (uint64_t __a)
- {
-   return (uint32x2_t) __a;
- }
- 
- __extension__ extern __inline uint64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcreate_u64 (uint64_t __a)
- {
-   return (uint64x1_t) {__a};
- }
- 
- __extension__ extern __inline float64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcreate_f64 (uint64_t __a)
- {
-   return (float64x1_t) __a;
- }
- 
- __extension__ extern __inline poly8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcreate_p8 (uint64_t __a)
- {
-   return (poly8x8_t) __a;
- }
- 
- __extension__ extern __inline poly16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcreate_p16 (uint64_t __a)
- {
-   return (poly16x4_t) __a;
- }
- 
- __extension__ extern __inline poly64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcreate_p64 (uint64_t __a)
- {
-   return (poly64x1_t) __a;
- }
- 
- /* vget_lane  */
- 
- __extension__ extern __inline float16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vget_lane_f16 (float16x4_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline float32_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vget_lane_f32 (float32x2_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline float64_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vget_lane_f64 (float64x1_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline poly8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vget_lane_p8 (poly8x8_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline poly16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vget_lane_p16 (poly16x4_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline poly64_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vget_lane_p64 (poly64x1_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline int8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vget_lane_s8 (int8x8_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline int16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vget_lane_s16 (int16x4_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline int32_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vget_lane_s32 (int32x2_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline int64_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vget_lane_s64 (int64x1_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline uint8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vget_lane_u8 (uint8x8_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline uint16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vget_lane_u16 (uint16x4_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline uint32_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vget_lane_u32 (uint32x2_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline uint64_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vget_lane_u64 (uint64x1_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- /* vgetq_lane  */
- 
- __extension__ extern __inline float16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vgetq_lane_f16 (float16x8_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline float32_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vgetq_lane_f32 (float32x4_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline float64_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vgetq_lane_f64 (float64x2_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline poly8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vgetq_lane_p8 (poly8x16_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline poly16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vgetq_lane_p16 (poly16x8_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline poly64_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vgetq_lane_p64 (poly64x2_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline int8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vgetq_lane_s8 (int8x16_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline int16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vgetq_lane_s16 (int16x8_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline int32_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vgetq_lane_s32 (int32x4_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline int64_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vgetq_lane_s64 (int64x2_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline uint8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vgetq_lane_u8 (uint8x16_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline uint16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vgetq_lane_u16 (uint16x8_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline uint32_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vgetq_lane_u32 (uint32x4_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline uint64_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vgetq_lane_u64 (uint64x2_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- /* vset_lane  */
- 
- __extension__ extern __inline float16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vset_lane_f16 (float16_t __elem, float16x4_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- __extension__ extern __inline float32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vset_lane_f32 (float32_t __elem, float32x2_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- __extension__ extern __inline float64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vset_lane_f64 (float64_t __elem, float64x1_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- __extension__ extern __inline poly8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vset_lane_p8 (poly8_t __elem, poly8x8_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- __extension__ extern __inline poly16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vset_lane_p16 (poly16_t __elem, poly16x4_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- __extension__ extern __inline poly64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vset_lane_p64 (poly64_t __elem, poly64x1_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vset_lane_s8 (int8_t __elem, int8x8_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- __extension__ extern __inline int16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vset_lane_s16 (int16_t __elem, int16x4_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- __extension__ extern __inline int32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vset_lane_s32 (int32_t __elem, int32x2_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- __extension__ extern __inline int64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vset_lane_s64 (int64_t __elem, int64x1_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- __extension__ extern __inline uint8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vset_lane_u8 (uint8_t __elem, uint8x8_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- __extension__ extern __inline uint16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vset_lane_u16 (uint16_t __elem, uint16x4_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- __extension__ extern __inline uint32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vset_lane_u32 (uint32_t __elem, uint32x2_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- __extension__ extern __inline uint64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vset_lane_u64 (uint64_t __elem, uint64x1_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- /* vsetq_lane  */
- 
- __extension__ extern __inline float16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vsetq_lane_f16 (float16_t __elem, float16x8_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- __extension__ extern __inline float32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vsetq_lane_f32 (float32_t __elem, float32x4_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- __extension__ extern __inline float64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vsetq_lane_f64 (float64_t __elem, float64x2_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- __extension__ extern __inline poly8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vsetq_lane_p8 (poly8_t __elem, poly8x16_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- __extension__ extern __inline poly16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vsetq_lane_p16 (poly16_t __elem, poly16x8_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- __extension__ extern __inline poly64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vsetq_lane_p64 (poly64_t __elem, poly64x2_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vsetq_lane_s8 (int8_t __elem, int8x16_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vsetq_lane_s16 (int16_t __elem, int16x8_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- __extension__ extern __inline int32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vsetq_lane_s32 (int32_t __elem, int32x4_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- __extension__ extern __inline int64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vsetq_lane_s64 (int64_t __elem, int64x2_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vsetq_lane_u8 (uint8_t __elem, uint8x16_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- __extension__ extern __inline uint16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vsetq_lane_u16 (uint16_t __elem, uint16x8_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- __extension__ extern __inline uint32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vsetq_lane_u32 (uint32_t __elem, uint32x4_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- __extension__ extern __inline uint64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vsetq_lane_u64 (uint64_t __elem, uint64x2_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcombine_s8 (int8x8_t __a, int8x8_t __b)
- {
-   return __builtin_aarch64_combinev8qi (__a, __b);
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcombine_s16 (int16x4_t __a, int16x4_t __b)
- {
-   return __builtin_aarch64_combinev4hi (__a, __b);
- }
- 
- __extension__ extern __inline int32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcombine_s32 (int32x2_t __a, int32x2_t __b)
- {
-   return __builtin_aarch64_combinev2si (__a, __b);
- }
- 
- __extension__ extern __inline int64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcombine_s64 (int64x1_t __a, int64x1_t __b)
- {
-   return __builtin_aarch64_combinedi (__a[0], __b[0]);
- }
- 
- __extension__ extern __inline float16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcombine_f16 (float16x4_t __a, float16x4_t __b)
- {
-   return __builtin_aarch64_combinev4hf (__a, __b);
- }
- 
- __extension__ extern __inline float32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcombine_f32 (float32x2_t __a, float32x2_t __b)
- {
-   return __builtin_aarch64_combinev2sf (__a, __b);
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcombine_u8 (uint8x8_t __a, uint8x8_t __b)
- {
-   return __builtin_aarch64_combinev8qi_uuu (__a, __b);
- }
- 
- __extension__ extern __inline uint16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcombine_u16 (uint16x4_t __a, uint16x4_t __b)
- {
-   return __builtin_aarch64_combinev4hi_uuu (__a, __b);
- }
- 
- __extension__ extern __inline uint32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcombine_u32 (uint32x2_t __a, uint32x2_t __b)
- {
-   return __builtin_aarch64_combinev2si_uuu (__a, __b);
- }
- 
- __extension__ extern __inline uint64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcombine_u64 (uint64x1_t __a, uint64x1_t __b)
- {
-   return __builtin_aarch64_combinedi_uuu (__a[0], __b[0]);
- }
- 
- __extension__ extern __inline float64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcombine_f64 (float64x1_t __a, float64x1_t __b)
- {
-   return __builtin_aarch64_combinedf (__a[0], __b[0]);
- }
- 
- __extension__ extern __inline poly8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcombine_p8 (poly8x8_t __a, poly8x8_t __b)
- {
-   return __builtin_aarch64_combinev8qi_ppp (__a, __b);
- }
- 
- __extension__ extern __inline poly16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcombine_p16 (poly16x4_t __a, poly16x4_t __b)
- {
-   return __builtin_aarch64_combinev4hi_ppp (__a, __b);
- }
- 
- __extension__ extern __inline poly64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcombine_p64 (poly64x1_t __a, poly64x1_t __b)
- {
-   return __builtin_aarch64_combinedi_ppp (__a[0], __b[0]);
- }
- 
  /* Start of temporary inline asm implementations.  */
  
  __extension__ extern __inline int8x8_t
--- 1701,1706 ----
*************** vaddvq_f64 (float64x2_t __a)
*** 6802,7008 ****
    return __builtin_aarch64_reduc_plus_scal_v2df (__a);
  }
  
- /* vbsl  */
- 
- __extension__ extern __inline float16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbsl_f16 (uint16x4_t __a, float16x4_t __b, float16x4_t __c)
- {
-   return __builtin_aarch64_simd_bslv4hf_suss (__a, __b, __c);
- }
- 
- __extension__ extern __inline float32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbsl_f32 (uint32x2_t __a, float32x2_t __b, float32x2_t __c)
- {
-   return __builtin_aarch64_simd_bslv2sf_suss (__a, __b, __c);
- }
- 
- __extension__ extern __inline float64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbsl_f64 (uint64x1_t __a, float64x1_t __b, float64x1_t __c)
- {
-   return (float64x1_t)
-     { __builtin_aarch64_simd_bsldf_suss (__a[0], __b[0], __c[0]) };
- }
- 
- __extension__ extern __inline poly8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbsl_p8 (uint8x8_t __a, poly8x8_t __b, poly8x8_t __c)
- {
-   return __builtin_aarch64_simd_bslv8qi_pupp (__a, __b, __c);
- }
- 
- __extension__ extern __inline poly16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbsl_p16 (uint16x4_t __a, poly16x4_t __b, poly16x4_t __c)
- {
-   return __builtin_aarch64_simd_bslv4hi_pupp (__a, __b, __c);
- }
- __extension__ extern __inline poly64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbsl_p64 (uint64x1_t __a, poly64x1_t __b, poly64x1_t __c)
- {
-   return (poly64x1_t)
-       {__builtin_aarch64_simd_bsldi_pupp (__a[0], __b[0], __c[0])};
- }
- 
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbsl_s8 (uint8x8_t __a, int8x8_t __b, int8x8_t __c)
- {
-   return __builtin_aarch64_simd_bslv8qi_suss (__a, __b, __c);
- }
- 
- __extension__ extern __inline int16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbsl_s16 (uint16x4_t __a, int16x4_t __b, int16x4_t __c)
- {
-   return __builtin_aarch64_simd_bslv4hi_suss (__a, __b, __c);
- }
- 
- __extension__ extern __inline int32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbsl_s32 (uint32x2_t __a, int32x2_t __b, int32x2_t __c)
- {
-   return __builtin_aarch64_simd_bslv2si_suss (__a, __b, __c);
- }
- 
- __extension__ extern __inline int64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbsl_s64 (uint64x1_t __a, int64x1_t __b, int64x1_t __c)
- {
-   return (int64x1_t)
-       {__builtin_aarch64_simd_bsldi_suss (__a[0], __b[0], __c[0])};
- }
- 
- __extension__ extern __inline uint8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbsl_u8 (uint8x8_t __a, uint8x8_t __b, uint8x8_t __c)
- {
-   return __builtin_aarch64_simd_bslv8qi_uuuu (__a, __b, __c);
- }
- 
- __extension__ extern __inline uint16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbsl_u16 (uint16x4_t __a, uint16x4_t __b, uint16x4_t __c)
- {
-   return __builtin_aarch64_simd_bslv4hi_uuuu (__a, __b, __c);
- }
- 
- __extension__ extern __inline uint32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbsl_u32 (uint32x2_t __a, uint32x2_t __b, uint32x2_t __c)
- {
-   return __builtin_aarch64_simd_bslv2si_uuuu (__a, __b, __c);
- }
- 
- __extension__ extern __inline uint64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbsl_u64 (uint64x1_t __a, uint64x1_t __b, uint64x1_t __c)
- {
-   return (uint64x1_t)
-       {__builtin_aarch64_simd_bsldi_uuuu (__a[0], __b[0], __c[0])};
- }
- 
- __extension__ extern __inline float16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbslq_f16 (uint16x8_t __a, float16x8_t __b, float16x8_t __c)
- {
-   return __builtin_aarch64_simd_bslv8hf_suss (__a, __b, __c);
- }
- 
- __extension__ extern __inline float32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbslq_f32 (uint32x4_t __a, float32x4_t __b, float32x4_t __c)
- {
-   return __builtin_aarch64_simd_bslv4sf_suss (__a, __b, __c);
- }
- 
- __extension__ extern __inline float64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbslq_f64 (uint64x2_t __a, float64x2_t __b, float64x2_t __c)
- {
-   return __builtin_aarch64_simd_bslv2df_suss (__a, __b, __c);
- }
- 
- __extension__ extern __inline poly8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbslq_p8 (uint8x16_t __a, poly8x16_t __b, poly8x16_t __c)
- {
-   return __builtin_aarch64_simd_bslv16qi_pupp (__a, __b, __c);
- }
- 
- __extension__ extern __inline poly16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbslq_p16 (uint16x8_t __a, poly16x8_t __b, poly16x8_t __c)
- {
-   return __builtin_aarch64_simd_bslv8hi_pupp (__a, __b, __c);
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbslq_s8 (uint8x16_t __a, int8x16_t __b, int8x16_t __c)
- {
-   return __builtin_aarch64_simd_bslv16qi_suss (__a, __b, __c);
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbslq_s16 (uint16x8_t __a, int16x8_t __b, int16x8_t __c)
- {
-   return __builtin_aarch64_simd_bslv8hi_suss (__a, __b, __c);
- }
- 
- __extension__ extern __inline poly64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbslq_p64 (uint64x2_t __a, poly64x2_t __b, poly64x2_t __c)
- {
-   return __builtin_aarch64_simd_bslv2di_pupp (__a, __b, __c);
- }
- 
- __extension__ extern __inline int32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbslq_s32 (uint32x4_t __a, int32x4_t __b, int32x4_t __c)
- {
-   return __builtin_aarch64_simd_bslv4si_suss (__a, __b, __c);
- }
- 
- __extension__ extern __inline int64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbslq_s64 (uint64x2_t __a, int64x2_t __b, int64x2_t __c)
- {
-   return __builtin_aarch64_simd_bslv2di_suss (__a, __b, __c);
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbslq_u8 (uint8x16_t __a, uint8x16_t __b, uint8x16_t __c)
- {
-   return __builtin_aarch64_simd_bslv16qi_uuuu (__a, __b, __c);
- }
- 
- __extension__ extern __inline uint16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbslq_u16 (uint16x8_t __a, uint16x8_t __b, uint16x8_t __c)
- {
-   return __builtin_aarch64_simd_bslv8hi_uuuu (__a, __b, __c);
- }
- 
- __extension__ extern __inline uint32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbslq_u32 (uint32x4_t __a, uint32x4_t __b, uint32x4_t __c)
- {
-   return __builtin_aarch64_simd_bslv4si_uuuu (__a, __b, __c);
- }
- 
- __extension__ extern __inline uint64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbslq_u64 (uint64x2_t __a, uint64x2_t __b, uint64x2_t __c)
- {
-   return __builtin_aarch64_simd_bslv2di_uuuu (__a, __b, __c);
- }
- 
  /* ARMv8.1-A intrinsics.  */
  #pragma GCC push_options
  #pragma GCC target ("+nothing+rdma")
--- 5416,5421 ----
*************** vcltzd_f64 (float64_t __a)
*** 9009,9706 ****
    return __a < 0.0 ? -1ll : 0ll;
  }
  
- /* vcls.  */
- 
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcls_s8 (int8x8_t __a)
- {
-   return __builtin_aarch64_clrsbv8qi (__a);
- }
- 
- __extension__ extern __inline int16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcls_s16 (int16x4_t __a)
- {
-   return __builtin_aarch64_clrsbv4hi (__a);
- }
- 
- __extension__ extern __inline int32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcls_s32 (int32x2_t __a)
- {
-   return __builtin_aarch64_clrsbv2si (__a);
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vclsq_s8 (int8x16_t __a)
- {
-   return __builtin_aarch64_clrsbv16qi (__a);
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vclsq_s16 (int16x8_t __a)
- {
-   return __builtin_aarch64_clrsbv8hi (__a);
- }
- 
- __extension__ extern __inline int32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vclsq_s32 (int32x4_t __a)
- {
-   return __builtin_aarch64_clrsbv4si (__a);
- }
- 
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcls_u8 (uint8x8_t __a)
- {
-   return __builtin_aarch64_clrsbv8qi ((int8x8_t) __a);
- }
- 
- __extension__ extern __inline int16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcls_u16 (uint16x4_t __a)
- {
-   return __builtin_aarch64_clrsbv4hi ((int16x4_t) __a);
- }
- 
- __extension__ extern __inline int32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcls_u32 (uint32x2_t __a)
- {
-   return __builtin_aarch64_clrsbv2si ((int32x2_t) __a);
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vclsq_u8 (uint8x16_t __a)
- {
-   return __builtin_aarch64_clrsbv16qi ((int8x16_t) __a);
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vclsq_u16 (uint16x8_t __a)
- {
-   return __builtin_aarch64_clrsbv8hi ((int16x8_t) __a);
- }
- 
- __extension__ extern __inline int32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vclsq_u32 (uint32x4_t __a)
- {
-   return __builtin_aarch64_clrsbv4si ((int32x4_t) __a);
- }
- 
- /* vclz.  */
- 
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vclz_s8 (int8x8_t __a)
- {
-   return __builtin_aarch64_clzv8qi (__a);
- }
- 
- __extension__ extern __inline int16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vclz_s16 (int16x4_t __a)
- {
-   return __builtin_aarch64_clzv4hi (__a);
- }
- 
- __extension__ extern __inline int32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vclz_s32 (int32x2_t __a)
- {
-   return __builtin_aarch64_clzv2si (__a);
- }
- 
- __extension__ extern __inline uint8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vclz_u8 (uint8x8_t __a)
- {
-   return (uint8x8_t)__builtin_aarch64_clzv8qi ((int8x8_t)__a);
- }
- 
- __extension__ extern __inline uint16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vclz_u16 (uint16x4_t __a)
- {
-   return (uint16x4_t)__builtin_aarch64_clzv4hi ((int16x4_t)__a);
- }
- 
- __extension__ extern __inline uint32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vclz_u32 (uint32x2_t __a)
- {
-   return (uint32x2_t)__builtin_aarch64_clzv2si ((int32x2_t)__a);
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vclzq_s8 (int8x16_t __a)
- {
-   return __builtin_aarch64_clzv16qi (__a);
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vclzq_s16 (int16x8_t __a)
- {
-   return __builtin_aarch64_clzv8hi (__a);
- }
- 
- __extension__ extern __inline int32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vclzq_s32 (int32x4_t __a)
- {
-   return __builtin_aarch64_clzv4si (__a);
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vclzq_u8 (uint8x16_t __a)
- {
-   return (uint8x16_t)__builtin_aarch64_clzv16qi ((int8x16_t)__a);
- }
- 
- __extension__ extern __inline uint16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vclzq_u16 (uint16x8_t __a)
- {
-   return (uint16x8_t)__builtin_aarch64_clzv8hi ((int16x8_t)__a);
- }
- 
- __extension__ extern __inline uint32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vclzq_u32 (uint32x4_t __a)
- {
-   return (uint32x4_t)__builtin_aarch64_clzv4si ((int32x4_t)__a);
- }
- 
- /* vcnt.  */
- 
- __extension__ extern __inline poly8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcnt_p8 (poly8x8_t __a)
- {
-   return (poly8x8_t) __builtin_aarch64_popcountv8qi ((int8x8_t) __a);
- }
- 
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcnt_s8 (int8x8_t __a)
- {
-   return __builtin_aarch64_popcountv8qi (__a);
- }
- 
- __extension__ extern __inline uint8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcnt_u8 (uint8x8_t __a)
- {
-   return (uint8x8_t) __builtin_aarch64_popcountv8qi ((int8x8_t) __a);
- }
- 
- __extension__ extern __inline poly8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcntq_p8 (poly8x16_t __a)
- {
-   return (poly8x16_t) __builtin_aarch64_popcountv16qi ((int8x16_t) __a);
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcntq_s8 (int8x16_t __a)
- {
-   return __builtin_aarch64_popcountv16qi (__a);
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcntq_u8 (uint8x16_t __a)
- {
-   return (uint8x16_t) __builtin_aarch64_popcountv16qi ((int8x16_t) __a);
- }
- 
- /* vcopy_lane.  */
- 
- __extension__ extern __inline float32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopy_lane_f32 (float32x2_t __a, const int __lane1,
- 		float32x2_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
- __extension__ extern __inline float64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopy_lane_f64 (float64x1_t __a, const int __lane1,
- 		float64x1_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
- __extension__ extern __inline poly8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopy_lane_p8 (poly8x8_t __a, const int __lane1,
- 	       poly8x8_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				 __a, __lane1);
- }
- 
- __extension__ extern __inline poly16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopy_lane_p16 (poly16x4_t __a, const int __lane1,
- 		poly16x4_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
- __extension__ extern __inline poly64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopy_lane_p64 (poly64x1_t __a, const int __lane1,
- 		poly64x1_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopy_lane_s8 (int8x8_t __a, const int __lane1,
- 	       int8x8_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				 __a, __lane1);
- }
- 
- __extension__ extern __inline int16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopy_lane_s16 (int16x4_t __a, const int __lane1,
- 		int16x4_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
- __extension__ extern __inline int32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopy_lane_s32 (int32x2_t __a, const int __lane1,
- 		int32x2_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
- __extension__ extern __inline int64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopy_lane_s64 (int64x1_t __a, const int __lane1,
- 		int64x1_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
- __extension__ extern __inline uint8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopy_lane_u8 (uint8x8_t __a, const int __lane1,
- 	       uint8x8_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				 __a, __lane1);
- }
- 
- __extension__ extern __inline uint16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopy_lane_u16 (uint16x4_t __a, const int __lane1,
- 		uint16x4_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
- __extension__ extern __inline uint32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopy_lane_u32 (uint32x2_t __a, const int __lane1,
- 		uint32x2_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
- __extension__ extern __inline uint64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopy_lane_u64 (uint64x1_t __a, const int __lane1,
- 		uint64x1_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
- /* vcopy_laneq.  */
- 
- __extension__ extern __inline float32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopy_laneq_f32 (float32x2_t __a, const int __lane1,
- 		 float32x4_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
- __extension__ extern __inline float64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopy_laneq_f64 (float64x1_t __a, const int __lane1,
- 		 float64x2_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
- __extension__ extern __inline poly8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopy_laneq_p8 (poly8x8_t __a, const int __lane1,
- 		poly8x16_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				 __a, __lane1);
- }
- 
- __extension__ extern __inline poly16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopy_laneq_p16 (poly16x4_t __a, const int __lane1,
- 		 poly16x8_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
- __extension__ extern __inline poly64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopy_laneq_p64 (poly64x1_t __a, const int __lane1,
- 		 poly64x2_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopy_laneq_s8 (int8x8_t __a, const int __lane1,
- 		int8x16_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				 __a, __lane1);
- }
- 
- __extension__ extern __inline int16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopy_laneq_s16 (int16x4_t __a, const int __lane1,
- 		 int16x8_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
- __extension__ extern __inline int32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopy_laneq_s32 (int32x2_t __a, const int __lane1,
- 		 int32x4_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
- __extension__ extern __inline int64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopy_laneq_s64 (int64x1_t __a, const int __lane1,
- 		 int64x2_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
- __extension__ extern __inline uint8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopy_laneq_u8 (uint8x8_t __a, const int __lane1,
- 		uint8x16_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				 __a, __lane1);
- }
- 
- __extension__ extern __inline uint16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopy_laneq_u16 (uint16x4_t __a, const int __lane1,
- 		 uint16x8_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
- __extension__ extern __inline uint32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopy_laneq_u32 (uint32x2_t __a, const int __lane1,
- 		 uint32x4_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
- __extension__ extern __inline uint64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopy_laneq_u64 (uint64x1_t __a, const int __lane1,
- 		 uint64x2_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
- /* vcopyq_lane.  */
- 
- __extension__ extern __inline float32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopyq_lane_f32 (float32x4_t __a, const int __lane1,
- 		 float32x2_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				   __a, __lane1);
- }
- 
- __extension__ extern __inline float64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopyq_lane_f64 (float64x2_t __a, const int __lane1,
- 		 float64x1_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				   __a, __lane1);
- }
- 
- __extension__ extern __inline poly8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopyq_lane_p8 (poly8x16_t __a, const int __lane1,
- 		poly8x8_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
- __extension__ extern __inline poly16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopyq_lane_p16 (poly16x8_t __a, const int __lane1,
- 		 poly16x4_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				   __a, __lane1);
- }
- 
- __extension__ extern __inline poly64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopyq_lane_p64 (poly64x2_t __a, const int __lane1,
- 		 poly64x1_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				   __a, __lane1);
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopyq_lane_s8 (int8x16_t __a, const int __lane1,
- 		int8x8_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopyq_lane_s16 (int16x8_t __a, const int __lane1,
- 		 int16x4_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				   __a, __lane1);
- }
- 
- __extension__ extern __inline int32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopyq_lane_s32 (int32x4_t __a, const int __lane1,
- 		 int32x2_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				   __a, __lane1);
- }
- 
- __extension__ extern __inline int64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopyq_lane_s64 (int64x2_t __a, const int __lane1,
- 		 int64x1_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				   __a, __lane1);
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopyq_lane_u8 (uint8x16_t __a, const int __lane1,
- 		uint8x8_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
- __extension__ extern __inline uint16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopyq_lane_u16 (uint16x8_t __a, const int __lane1,
- 		 uint16x4_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				   __a, __lane1);
- }
- 
- __extension__ extern __inline uint32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopyq_lane_u32 (uint32x4_t __a, const int __lane1,
- 		 uint32x2_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				   __a, __lane1);
- }
- 
- __extension__ extern __inline uint64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopyq_lane_u64 (uint64x2_t __a, const int __lane1,
- 		 uint64x1_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				   __a, __lane1);
- }
- 
- /* vcopyq_laneq.  */
- 
- __extension__ extern __inline float32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopyq_laneq_f32 (float32x4_t __a, const int __lane1,
- 		  float32x4_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				   __a, __lane1);
- }
- 
- __extension__ extern __inline float64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopyq_laneq_f64 (float64x2_t __a, const int __lane1,
- 		  float64x2_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				   __a, __lane1);
- }
- 
- __extension__ extern __inline poly8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopyq_laneq_p8 (poly8x16_t __a, const int __lane1,
- 		 poly8x16_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
- __extension__ extern __inline poly16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopyq_laneq_p16 (poly16x8_t __a, const int __lane1,
- 		  poly16x8_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				   __a, __lane1);
- }
- 
- __extension__ extern __inline poly64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopyq_laneq_p64 (poly64x2_t __a, const int __lane1,
- 		  poly64x2_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				   __a, __lane1);
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopyq_laneq_s8 (int8x16_t __a, const int __lane1,
- 		 int8x16_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopyq_laneq_s16 (int16x8_t __a, const int __lane1,
- 		  int16x8_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				   __a, __lane1);
- }
- 
- __extension__ extern __inline int32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopyq_laneq_s32 (int32x4_t __a, const int __lane1,
- 		  int32x4_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				   __a, __lane1);
- }
- 
- __extension__ extern __inline int64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopyq_laneq_s64 (int64x2_t __a, const int __lane1,
- 		  int64x2_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				   __a, __lane1);
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopyq_laneq_u8 (uint8x16_t __a, const int __lane1,
- 		 uint8x16_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
- __extension__ extern __inline uint16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopyq_laneq_u16 (uint16x8_t __a, const int __lane1,
- 		  uint16x8_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				   __a, __lane1);
- }
- 
- __extension__ extern __inline uint32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopyq_laneq_u32 (uint32x4_t __a, const int __lane1,
- 		  uint32x4_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				   __a, __lane1);
- }
- 
- __extension__ extern __inline uint64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopyq_laneq_u64 (uint64x2_t __a, const int __lane1,
- 		  uint64x2_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				   __a, __lane1);
- }
- 
  /* vcvt (double -> float).  */
  
  __extension__ extern __inline float16x4_t
--- 7422,7427 ----
*************** vcvtpq_u64_f64 (float64x2_t __a)
*** 10593,11760 ****
    return __builtin_aarch64_lceiluv2dfv2di_us (__a);
  }
  
- /* vdup_n  */
- 
- __extension__ extern __inline float16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_n_f16 (float16_t __a)
- {
-   return (float16x4_t) {__a, __a, __a, __a};
- }
- 
- __extension__ extern __inline float32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_n_f32 (float32_t __a)
- {
-   return (float32x2_t) {__a, __a};
- }
- 
- __extension__ extern __inline float64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_n_f64 (float64_t __a)
- {
-   return (float64x1_t) {__a};
- }
- 
- __extension__ extern __inline poly8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_n_p8 (poly8_t __a)
- {
-   return (poly8x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
- }
- 
- __extension__ extern __inline poly16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_n_p16 (poly16_t __a)
- {
-   return (poly16x4_t) {__a, __a, __a, __a};
- }
- 
- __extension__ extern __inline poly64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_n_p64 (poly64_t __a)
- {
-   return (poly64x1_t) {__a};
- }
- 
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_n_s8 (int8_t __a)
- {
-   return (int8x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
- }
- 
- __extension__ extern __inline int16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_n_s16 (int16_t __a)
- {
-   return (int16x4_t) {__a, __a, __a, __a};
- }
- 
- __extension__ extern __inline int32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_n_s32 (int32_t __a)
- {
-   return (int32x2_t) {__a, __a};
- }
- 
- __extension__ extern __inline int64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_n_s64 (int64_t __a)
- {
-   return (int64x1_t) {__a};
- }
- 
- __extension__ extern __inline uint8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_n_u8 (uint8_t __a)
- {
-   return (uint8x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
- }
- 
- __extension__ extern __inline uint16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_n_u16 (uint16_t __a)
- {
-   return (uint16x4_t) {__a, __a, __a, __a};
- }
- 
- __extension__ extern __inline uint32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_n_u32 (uint32_t __a)
- {
-   return (uint32x2_t) {__a, __a};
- }
- 
- __extension__ extern __inline uint64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_n_u64 (uint64_t __a)
- {
-   return (uint64x1_t) {__a};
- }
- 
- /* vdupq_n  */
- 
- __extension__ extern __inline float16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_n_f16 (float16_t __a)
- {
-   return (float16x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
- }
- 
- __extension__ extern __inline float32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_n_f32 (float32_t __a)
- {
-   return (float32x4_t) {__a, __a, __a, __a};
- }
- 
- __extension__ extern __inline float64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_n_f64 (float64_t __a)
- {
-   return (float64x2_t) {__a, __a};
- }
- 
- __extension__ extern __inline poly8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_n_p8 (poly8_t __a)
- {
-   return (poly8x16_t) {__a, __a, __a, __a, __a, __a, __a, __a,
- 		       __a, __a, __a, __a, __a, __a, __a, __a};
- }
- 
- __extension__ extern __inline poly16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_n_p16 (poly16_t __a)
- {
-   return (poly16x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
- }
- 
- __extension__ extern __inline poly64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_n_p64 (poly64_t __a)
- {
-   return (poly64x2_t) {__a, __a};
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_n_s8 (int8_t __a)
- {
-   return (int8x16_t) {__a, __a, __a, __a, __a, __a, __a, __a,
- 		      __a, __a, __a, __a, __a, __a, __a, __a};
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_n_s16 (int16_t __a)
- {
-   return (int16x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
- }
- 
- __extension__ extern __inline int32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_n_s32 (int32_t __a)
- {
-   return (int32x4_t) {__a, __a, __a, __a};
- }
- 
- __extension__ extern __inline int64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_n_s64 (int64_t __a)
- {
-   return (int64x2_t) {__a, __a};
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_n_u8 (uint8_t __a)
- {
-   return (uint8x16_t) {__a, __a, __a, __a, __a, __a, __a, __a,
- 		       __a, __a, __a, __a, __a, __a, __a, __a};
- }
- 
- __extension__ extern __inline uint16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_n_u16 (uint16_t __a)
- {
-   return (uint16x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
- }
- 
- __extension__ extern __inline uint32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_n_u32 (uint32_t __a)
- {
-   return (uint32x4_t) {__a, __a, __a, __a};
- }
- 
- __extension__ extern __inline uint64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_n_u64 (uint64_t __a)
- {
-   return (uint64x2_t) {__a, __a};
- }
- 
- /* vdup_lane  */
- 
- __extension__ extern __inline float16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_lane_f16 (float16x4_t __a, const int __b)
- {
-   return __aarch64_vdup_lane_f16 (__a, __b);
- }
- 
- __extension__ extern __inline float32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_lane_f32 (float32x2_t __a, const int __b)
- {
-   return __aarch64_vdup_lane_f32 (__a, __b);
- }
- 
- __extension__ extern __inline float64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_lane_f64 (float64x1_t __a, const int __b)
- {
-   return __aarch64_vdup_lane_f64 (__a, __b);
- }
- 
- __extension__ extern __inline poly8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_lane_p8 (poly8x8_t __a, const int __b)
- {
-   return __aarch64_vdup_lane_p8 (__a, __b);
- }
- 
- __extension__ extern __inline poly16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_lane_p16 (poly16x4_t __a, const int __b)
- {
-   return __aarch64_vdup_lane_p16 (__a, __b);
- }
- 
- __extension__ extern __inline poly64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_lane_p64 (poly64x1_t __a, const int __b)
- {
-   return __aarch64_vdup_lane_p64 (__a, __b);
- }
- 
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_lane_s8 (int8x8_t __a, const int __b)
- {
-   return __aarch64_vdup_lane_s8 (__a, __b);
- }
- 
- __extension__ extern __inline int16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_lane_s16 (int16x4_t __a, const int __b)
- {
-   return __aarch64_vdup_lane_s16 (__a, __b);
- }
- 
- __extension__ extern __inline int32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_lane_s32 (int32x2_t __a, const int __b)
- {
-   return __aarch64_vdup_lane_s32 (__a, __b);
- }
- 
- __extension__ extern __inline int64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_lane_s64 (int64x1_t __a, const int __b)
- {
-   return __aarch64_vdup_lane_s64 (__a, __b);
- }
- 
- __extension__ extern __inline uint8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_lane_u8 (uint8x8_t __a, const int __b)
- {
-   return __aarch64_vdup_lane_u8 (__a, __b);
- }
- 
- __extension__ extern __inline uint16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_lane_u16 (uint16x4_t __a, const int __b)
- {
-   return __aarch64_vdup_lane_u16 (__a, __b);
- }
- 
- __extension__ extern __inline uint32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_lane_u32 (uint32x2_t __a, const int __b)
- {
-   return __aarch64_vdup_lane_u32 (__a, __b);
- }
- 
- __extension__ extern __inline uint64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_lane_u64 (uint64x1_t __a, const int __b)
- {
-   return __aarch64_vdup_lane_u64 (__a, __b);
- }
- 
- /* vdup_laneq  */
- 
- __extension__ extern __inline float16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_laneq_f16 (float16x8_t __a, const int __b)
- {
-   return __aarch64_vdup_laneq_f16 (__a, __b);
- }
- 
- __extension__ extern __inline float32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_laneq_f32 (float32x4_t __a, const int __b)
- {
-   return __aarch64_vdup_laneq_f32 (__a, __b);
- }
- 
- __extension__ extern __inline float64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_laneq_f64 (float64x2_t __a, const int __b)
- {
-   return __aarch64_vdup_laneq_f64 (__a, __b);
- }
- 
- __extension__ extern __inline poly8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_laneq_p8 (poly8x16_t __a, const int __b)
- {
-   return __aarch64_vdup_laneq_p8 (__a, __b);
- }
- 
- __extension__ extern __inline poly16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_laneq_p16 (poly16x8_t __a, const int __b)
- {
-   return __aarch64_vdup_laneq_p16 (__a, __b);
- }
- 
- __extension__ extern __inline poly64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_laneq_p64 (poly64x2_t __a, const int __b)
- {
-   return __aarch64_vdup_laneq_p64 (__a, __b);
- }
- 
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_laneq_s8 (int8x16_t __a, const int __b)
- {
-   return __aarch64_vdup_laneq_s8 (__a, __b);
- }
- 
- __extension__ extern __inline int16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_laneq_s16 (int16x8_t __a, const int __b)
- {
-   return __aarch64_vdup_laneq_s16 (__a, __b);
- }
- 
- __extension__ extern __inline int32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_laneq_s32 (int32x4_t __a, const int __b)
- {
-   return __aarch64_vdup_laneq_s32 (__a, __b);
- }
- 
- __extension__ extern __inline int64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_laneq_s64 (int64x2_t __a, const int __b)
- {
-   return __aarch64_vdup_laneq_s64 (__a, __b);
- }
- 
- __extension__ extern __inline uint8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_laneq_u8 (uint8x16_t __a, const int __b)
- {
-   return __aarch64_vdup_laneq_u8 (__a, __b);
- }
- 
- __extension__ extern __inline uint16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_laneq_u16 (uint16x8_t __a, const int __b)
- {
-   return __aarch64_vdup_laneq_u16 (__a, __b);
- }
- 
- __extension__ extern __inline uint32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_laneq_u32 (uint32x4_t __a, const int __b)
- {
-   return __aarch64_vdup_laneq_u32 (__a, __b);
- }
- 
- __extension__ extern __inline uint64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_laneq_u64 (uint64x2_t __a, const int __b)
- {
-   return __aarch64_vdup_laneq_u64 (__a, __b);
- }
- 
- /* vdupq_lane  */
- 
- __extension__ extern __inline float16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_lane_f16 (float16x4_t __a, const int __b)
- {
-   return __aarch64_vdupq_lane_f16 (__a, __b);
- }
- 
- __extension__ extern __inline float32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_lane_f32 (float32x2_t __a, const int __b)
- {
-   return __aarch64_vdupq_lane_f32 (__a, __b);
- }
- 
- __extension__ extern __inline float64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_lane_f64 (float64x1_t __a, const int __b)
- {
-   return __aarch64_vdupq_lane_f64 (__a, __b);
- }
- 
- __extension__ extern __inline poly8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_lane_p8 (poly8x8_t __a, const int __b)
- {
-   return __aarch64_vdupq_lane_p8 (__a, __b);
- }
- 
- __extension__ extern __inline poly16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_lane_p16 (poly16x4_t __a, const int __b)
- {
-   return __aarch64_vdupq_lane_p16 (__a, __b);
- }
- 
- __extension__ extern __inline poly64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_lane_p64 (poly64x1_t __a, const int __b)
- {
-   return __aarch64_vdupq_lane_p64 (__a, __b);
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_lane_s8 (int8x8_t __a, const int __b)
- {
-   return __aarch64_vdupq_lane_s8 (__a, __b);
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_lane_s16 (int16x4_t __a, const int __b)
- {
-   return __aarch64_vdupq_lane_s16 (__a, __b);
- }
- 
- __extension__ extern __inline int32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_lane_s32 (int32x2_t __a, const int __b)
- {
-   return __aarch64_vdupq_lane_s32 (__a, __b);
- }
- 
- __extension__ extern __inline int64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_lane_s64 (int64x1_t __a, const int __b)
- {
-   return __aarch64_vdupq_lane_s64 (__a, __b);
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_lane_u8 (uint8x8_t __a, const int __b)
- {
-   return __aarch64_vdupq_lane_u8 (__a, __b);
- }
- 
- __extension__ extern __inline uint16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_lane_u16 (uint16x4_t __a, const int __b)
- {
-   return __aarch64_vdupq_lane_u16 (__a, __b);
- }
- 
- __extension__ extern __inline uint32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_lane_u32 (uint32x2_t __a, const int __b)
- {
-   return __aarch64_vdupq_lane_u32 (__a, __b);
- }
- 
- __extension__ extern __inline uint64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_lane_u64 (uint64x1_t __a, const int __b)
- {
-   return __aarch64_vdupq_lane_u64 (__a, __b);
- }
- 
- /* vdupq_laneq  */
- 
- __extension__ extern __inline float16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_laneq_f16 (float16x8_t __a, const int __b)
- {
-   return __aarch64_vdupq_laneq_f16 (__a, __b);
- }
- 
- __extension__ extern __inline float32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_laneq_f32 (float32x4_t __a, const int __b)
- {
-   return __aarch64_vdupq_laneq_f32 (__a, __b);
- }
- 
- __extension__ extern __inline float64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_laneq_f64 (float64x2_t __a, const int __b)
- {
-   return __aarch64_vdupq_laneq_f64 (__a, __b);
- }
- 
- __extension__ extern __inline poly8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_laneq_p8 (poly8x16_t __a, const int __b)
- {
-   return __aarch64_vdupq_laneq_p8 (__a, __b);
- }
- 
- __extension__ extern __inline poly16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_laneq_p16 (poly16x8_t __a, const int __b)
- {
-   return __aarch64_vdupq_laneq_p16 (__a, __b);
- }
- 
- __extension__ extern __inline poly64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_laneq_p64 (poly64x2_t __a, const int __b)
- {
-   return __aarch64_vdupq_laneq_p64 (__a, __b);
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_laneq_s8 (int8x16_t __a, const int __b)
- {
-   return __aarch64_vdupq_laneq_s8 (__a, __b);
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_laneq_s16 (int16x8_t __a, const int __b)
- {
-   return __aarch64_vdupq_laneq_s16 (__a, __b);
- }
- 
- __extension__ extern __inline int32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_laneq_s32 (int32x4_t __a, const int __b)
- {
-   return __aarch64_vdupq_laneq_s32 (__a, __b);
- }
- 
- __extension__ extern __inline int64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_laneq_s64 (int64x2_t __a, const int __b)
- {
-   return __aarch64_vdupq_laneq_s64 (__a, __b);
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_laneq_u8 (uint8x16_t __a, const int __b)
- {
-   return __aarch64_vdupq_laneq_u8 (__a, __b);
- }
- 
- __extension__ extern __inline uint16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_laneq_u16 (uint16x8_t __a, const int __b)
- {
-   return __aarch64_vdupq_laneq_u16 (__a, __b);
- }
- 
- __extension__ extern __inline uint32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_laneq_u32 (uint32x4_t __a, const int __b)
- {
-   return __aarch64_vdupq_laneq_u32 (__a, __b);
- }
- 
- __extension__ extern __inline uint64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_laneq_u64 (uint64x2_t __a, const int __b)
- {
-   return __aarch64_vdupq_laneq_u64 (__a, __b);
- }
- 
- /* vdupb_lane  */
- __extension__ extern __inline poly8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupb_lane_p8 (poly8x8_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline int8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupb_lane_s8 (int8x8_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline uint8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupb_lane_u8 (uint8x8_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- /* vduph_lane  */
- 
- __extension__ extern __inline float16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vduph_lane_f16 (float16x4_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline poly16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vduph_lane_p16 (poly16x4_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline int16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vduph_lane_s16 (int16x4_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline uint16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vduph_lane_u16 (uint16x4_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- /* vdups_lane  */
- 
- __extension__ extern __inline float32_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdups_lane_f32 (float32x2_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline int32_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdups_lane_s32 (int32x2_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline uint32_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdups_lane_u32 (uint32x2_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- /* vdupd_lane  */
- __extension__ extern __inline float64_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupd_lane_f64 (float64x1_t __a, const int __b)
- {
-   __AARCH64_LANE_CHECK (__a, __b);
-   return __a[0];
- }
- 
- __extension__ extern __inline int64_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupd_lane_s64 (int64x1_t __a, const int __b)
- {
-   __AARCH64_LANE_CHECK (__a, __b);
-   return __a[0];
- }
- 
- __extension__ extern __inline uint64_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupd_lane_u64 (uint64x1_t __a, const int __b)
- {
-   __AARCH64_LANE_CHECK (__a, __b);
-   return __a[0];
- }
- 
- /* vdupb_laneq  */
- __extension__ extern __inline poly8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupb_laneq_p8 (poly8x16_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline int8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupb_laneq_s8 (int8x16_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline uint8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupb_laneq_u8 (uint8x16_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- /* vduph_laneq  */
- 
- __extension__ extern __inline float16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vduph_laneq_f16 (float16x8_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline poly16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vduph_laneq_p16 (poly16x8_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline int16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vduph_laneq_s16 (int16x8_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline uint16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vduph_laneq_u16 (uint16x8_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- /* vdups_laneq  */
- 
- __extension__ extern __inline float32_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdups_laneq_f32 (float32x4_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline int32_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdups_laneq_s32 (int32x4_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline uint32_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdups_laneq_u32 (uint32x4_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- /* vdupd_laneq  */
- __extension__ extern __inline float64_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupd_laneq_f64 (float64x2_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline int64_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupd_laneq_s64 (int64x2_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline uint64_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupd_laneq_u64 (uint64x2_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- /* vext  */
- 
- __extension__ extern __inline float16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vext_f16 (float16x4_t __a, float16x4_t __b, __const int __c)
- {
-   __AARCH64_LANE_CHECK (__a, __c);
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__b, __a,
- 			    (uint16x4_t) {4 - __c, 5 - __c, 6 - __c, 7 - __c});
- #else
-   return __builtin_shuffle (__a, __b,
- 			    (uint16x4_t) {__c, __c + 1, __c + 2, __c + 3});
- #endif
- }
- 
- __extension__ extern __inline float32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vext_f32 (float32x2_t __a, float32x2_t __b, __const int __c)
- {
-   __AARCH64_LANE_CHECK (__a, __c);
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__b, __a, (uint32x2_t) {2-__c, 3-__c});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {__c, __c+1});
- #endif
- }
- 
- __extension__ extern __inline float64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vext_f64 (float64x1_t __a, float64x1_t __b, __const int __c)
- {
-   __AARCH64_LANE_CHECK (__a, __c);
-   /* The only possible index to the assembler instruction returns element 0.  */
-   return __a;
- }
- __extension__ extern __inline poly8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vext_p8 (poly8x8_t __a, poly8x8_t __b, __const int __c)
- {
-   __AARCH64_LANE_CHECK (__a, __c);
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__b, __a, (uint8x8_t)
-       {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
- #else
-   return __builtin_shuffle (__a, __b,
-       (uint8x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
- #endif
- }
- 
- __extension__ extern __inline poly16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vext_p16 (poly16x4_t __a, poly16x4_t __b, __const int __c)
- {
-   __AARCH64_LANE_CHECK (__a, __c);
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__b, __a,
-       (uint16x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {__c, __c+1, __c+2, __c+3});
- #endif
- }
- 
- __extension__ extern __inline poly64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vext_p64 (poly64x1_t __a, poly64x1_t __b, __const int __c)
- {
-   __AARCH64_LANE_CHECK (__a, __c);
-   /* The only possible index to the assembler instruction returns element 0.  */
-   return __a;
- }
- 
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vext_s8 (int8x8_t __a, int8x8_t __b, __const int __c)
- {
-   __AARCH64_LANE_CHECK (__a, __c);
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__b, __a, (uint8x8_t)
-       {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
- #else
-   return __builtin_shuffle (__a, __b,
-       (uint8x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
- #endif
- }
- 
- __extension__ extern __inline int16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vext_s16 (int16x4_t __a, int16x4_t __b, __const int __c)
- {
-   __AARCH64_LANE_CHECK (__a, __c);
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__b, __a,
-       (uint16x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {__c, __c+1, __c+2, __c+3});
- #endif
- }
- 
- __extension__ extern __inline int32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vext_s32 (int32x2_t __a, int32x2_t __b, __const int __c)
- {
-   __AARCH64_LANE_CHECK (__a, __c);
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__b, __a, (uint32x2_t) {2-__c, 3-__c});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {__c, __c+1});
- #endif
- }
- 
- __extension__ extern __inline int64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vext_s64 (int64x1_t __a, int64x1_t __b, __const int __c)
- {
-   __AARCH64_LANE_CHECK (__a, __c);
-   /* The only possible index to the assembler instruction returns element 0.  */
-   return __a;
- }
- 
- __extension__ extern __inline uint8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vext_u8 (uint8x8_t __a, uint8x8_t __b, __const int __c)
- {
-   __AARCH64_LANE_CHECK (__a, __c);
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__b, __a, (uint8x8_t)
-       {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
- #else
-   return __builtin_shuffle (__a, __b,
-       (uint8x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
- #endif
- }
- 
- __extension__ extern __inline uint16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vext_u16 (uint16x4_t __a, uint16x4_t __b, __const int __c)
- {
-   __AARCH64_LANE_CHECK (__a, __c);
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__b, __a,
-       (uint16x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {__c, __c+1, __c+2, __c+3});
- #endif
- }
- 
- __extension__ extern __inline uint32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vext_u32 (uint32x2_t __a, uint32x2_t __b, __const int __c)
- {
-   __AARCH64_LANE_CHECK (__a, __c);
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__b, __a, (uint32x2_t) {2-__c, 3-__c});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {__c, __c+1});
- #endif
- }
- 
- __extension__ extern __inline uint64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vext_u64 (uint64x1_t __a, uint64x1_t __b, __const int __c)
- {
-   __AARCH64_LANE_CHECK (__a, __c);
-   /* The only possible index to the assembler instruction returns element 0.  */
-   return __a;
- }
- 
- __extension__ extern __inline float16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vextq_f16 (float16x8_t __a, float16x8_t __b, __const int __c)
- {
-   __AARCH64_LANE_CHECK (__a, __c);
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__b, __a,
- 			    (uint16x8_t) {8 - __c, 9 - __c, 10 - __c, 11 - __c,
- 					  12 - __c, 13 - __c, 14 - __c,
- 					  15 - __c});
- #else
-   return __builtin_shuffle (__a, __b,
- 			    (uint16x8_t) {__c, __c + 1, __c + 2, __c + 3,
- 					  __c + 4, __c + 5, __c + 6, __c + 7});
- #endif
- }
- 
- __extension__ extern __inline float32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vextq_f32 (float32x4_t __a, float32x4_t __b, __const int __c)
- {
-   __AARCH64_LANE_CHECK (__a, __c);
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__b, __a,
-       (uint32x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {__c, __c+1, __c+2, __c+3});
- #endif
- }
- 
- __extension__ extern __inline float64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vextq_f64 (float64x2_t __a, float64x2_t __b, __const int __c)
- {
-   __AARCH64_LANE_CHECK (__a, __c);
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__b, __a, (uint64x2_t) {2-__c, 3-__c});
- #else
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {__c, __c+1});
- #endif
- }
- 
- __extension__ extern __inline poly8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vextq_p8 (poly8x16_t __a, poly8x16_t __b, __const int __c)
- {
-   __AARCH64_LANE_CHECK (__a, __c);
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__b, __a, (uint8x16_t)
-       {16-__c, 17-__c, 18-__c, 19-__c, 20-__c, 21-__c, 22-__c, 23-__c,
-        24-__c, 25-__c, 26-__c, 27-__c, 28-__c, 29-__c, 30-__c, 31-__c});
- #else
-   return __builtin_shuffle (__a, __b, (uint8x16_t)
-       {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
-        __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15});
- #endif
- }
- 
- __extension__ extern __inline poly16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vextq_p16 (poly16x8_t __a, poly16x8_t __b, __const int __c)
- {
-   __AARCH64_LANE_CHECK (__a, __c);
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__b, __a, (uint16x8_t)
-       {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
- #else
-   return __builtin_shuffle (__a, __b,
-       (uint16x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
- #endif
- }
- 
- __extension__ extern __inline poly64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vextq_p64 (poly64x2_t __a, poly64x2_t __b, __const int __c)
- {
-   __AARCH64_LANE_CHECK (__a, __c);
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__b, __a, (uint64x2_t) {2-__c, 3-__c});
- #else
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {__c, __c+1});
- #endif
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vextq_s8 (int8x16_t __a, int8x16_t __b, __const int __c)
- {
-   __AARCH64_LANE_CHECK (__a, __c);
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__b, __a, (uint8x16_t)
-       {16-__c, 17-__c, 18-__c, 19-__c, 20-__c, 21-__c, 22-__c, 23-__c,
-        24-__c, 25-__c, 26-__c, 27-__c, 28-__c, 29-__c, 30-__c, 31-__c});
- #else
-   return __builtin_shuffle (__a, __b, (uint8x16_t)
-       {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
-        __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15});
- #endif
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vextq_s16 (int16x8_t __a, int16x8_t __b, __const int __c)
- {
-   __AARCH64_LANE_CHECK (__a, __c);
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__b, __a, (uint16x8_t)
-       {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
- #else
-   return __builtin_shuffle (__a, __b,
-       (uint16x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
- #endif
- }
- 
- __extension__ extern __inline int32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vextq_s32 (int32x4_t __a, int32x4_t __b, __const int __c)
- {
-   __AARCH64_LANE_CHECK (__a, __c);
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__b, __a,
-       (uint32x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {__c, __c+1, __c+2, __c+3});
- #endif
- }
- 
- __extension__ extern __inline int64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vextq_s64 (int64x2_t __a, int64x2_t __b, __const int __c)
- {
-   __AARCH64_LANE_CHECK (__a, __c);
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__b, __a, (uint64x2_t) {2-__c, 3-__c});
- #else
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {__c, __c+1});
- #endif
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vextq_u8 (uint8x16_t __a, uint8x16_t __b, __const int __c)
- {
-   __AARCH64_LANE_CHECK (__a, __c);
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__b, __a, (uint8x16_t)
-       {16-__c, 17-__c, 18-__c, 19-__c, 20-__c, 21-__c, 22-__c, 23-__c,
-        24-__c, 25-__c, 26-__c, 27-__c, 28-__c, 29-__c, 30-__c, 31-__c});
- #else
-   return __builtin_shuffle (__a, __b, (uint8x16_t)
-       {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
-        __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15});
- #endif
- }
- 
- __extension__ extern __inline uint16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vextq_u16 (uint16x8_t __a, uint16x8_t __b, __const int __c)
- {
-   __AARCH64_LANE_CHECK (__a, __c);
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__b, __a, (uint16x8_t)
-       {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
- #else
-   return __builtin_shuffle (__a, __b,
-       (uint16x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
- #endif
- }
- 
- __extension__ extern __inline uint32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vextq_u32 (uint32x4_t __a, uint32x4_t __b, __const int __c)
- {
-   __AARCH64_LANE_CHECK (__a, __c);
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__b, __a,
-       (uint32x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {__c, __c+1, __c+2, __c+3});
- #endif
- }
- 
- __extension__ extern __inline uint64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vextq_u64 (uint64x2_t __a, uint64x2_t __b, __const int __c)
- {
-   __AARCH64_LANE_CHECK (__a, __c);
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__b, __a, (uint64x2_t) {2-__c, 3-__c});
- #else
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {__c, __c+1});
- #endif
- }
- 
  /* vfma  */
  
  __extension__ extern __inline float64x1_t
--- 8314,8319 ----
*************** vmlsq_laneq_u32 (uint32x4_t __a, uint32x
*** 16846,17049 ****
    return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
  }
  
- /* vmov_n_  */
- 
- __extension__ extern __inline float16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmov_n_f16 (float16_t __a)
- {
-   return vdup_n_f16 (__a);
- }
- 
- __extension__ extern __inline float32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmov_n_f32 (float32_t __a)
- {
-   return vdup_n_f32 (__a);
- }
- 
- __extension__ extern __inline float64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmov_n_f64 (float64_t __a)
- {
-   return (float64x1_t) {__a};
- }
- 
- __extension__ extern __inline poly8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmov_n_p8 (poly8_t __a)
- {
-   return vdup_n_p8 (__a);
- }
- 
- __extension__ extern __inline poly16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmov_n_p16 (poly16_t __a)
- {
-   return vdup_n_p16 (__a);
- }
- 
- __extension__ extern __inline poly64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmov_n_p64 (poly64_t __a)
- {
-   return vdup_n_p64 (__a);
- }
- 
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmov_n_s8 (int8_t __a)
- {
-   return vdup_n_s8 (__a);
- }
- 
- __extension__ extern __inline int16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmov_n_s16 (int16_t __a)
- {
-   return vdup_n_s16 (__a);
- }
- 
- __extension__ extern __inline int32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmov_n_s32 (int32_t __a)
- {
-   return vdup_n_s32 (__a);
- }
- 
- __extension__ extern __inline int64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmov_n_s64 (int64_t __a)
- {
-   return (int64x1_t) {__a};
- }
- 
- __extension__ extern __inline uint8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmov_n_u8 (uint8_t __a)
- {
-   return vdup_n_u8 (__a);
- }
- 
- __extension__ extern __inline uint16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmov_n_u16 (uint16_t __a)
- {
-     return vdup_n_u16 (__a);
- }
- 
- __extension__ extern __inline uint32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmov_n_u32 (uint32_t __a)
- {
-    return vdup_n_u32 (__a);
- }
- 
- __extension__ extern __inline uint64x1_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmov_n_u64 (uint64_t __a)
- {
-   return (uint64x1_t) {__a};
- }
- 
- __extension__ extern __inline float16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmovq_n_f16 (float16_t __a)
- {
-   return vdupq_n_f16 (__a);
- }
- 
- __extension__ extern __inline float32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmovq_n_f32 (float32_t __a)
- {
-   return vdupq_n_f32 (__a);
- }
- 
- __extension__ extern __inline float64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmovq_n_f64 (float64_t __a)
- {
-   return vdupq_n_f64 (__a);
- }
- 
- __extension__ extern __inline poly8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmovq_n_p8 (poly8_t __a)
- {
-   return vdupq_n_p8 (__a);
- }
- 
- __extension__ extern __inline poly16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmovq_n_p16 (poly16_t __a)
- {
-   return vdupq_n_p16 (__a);
- }
- 
- __extension__ extern __inline poly64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmovq_n_p64 (poly64_t __a)
- {
-   return vdupq_n_p64 (__a);
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmovq_n_s8 (int8_t __a)
- {
-   return vdupq_n_s8 (__a);
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmovq_n_s16 (int16_t __a)
- {
-   return vdupq_n_s16 (__a);
- }
- 
- __extension__ extern __inline int32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmovq_n_s32 (int32_t __a)
- {
-   return vdupq_n_s32 (__a);
- }
- 
- __extension__ extern __inline int64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmovq_n_s64 (int64_t __a)
- {
-   return vdupq_n_s64 (__a);
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmovq_n_u8 (uint8_t __a)
- {
-   return vdupq_n_u8 (__a);
- }
- 
- __extension__ extern __inline uint16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmovq_n_u16 (uint16_t __a)
- {
-   return vdupq_n_u16 (__a);
- }
- 
- __extension__ extern __inline uint32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmovq_n_u32 (uint32_t __a)
- {
-   return vdupq_n_u32 (__a);
- }
- 
- __extension__ extern __inline uint64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmovq_n_u64 (uint64_t __a)
- {
-   return vdupq_n_u64 (__a);
- }
- 
  /* vmul_lane  */
  
  __extension__ extern __inline float32x2_t
--- 13405,13410 ----
*************** vmulq_n_u32 (uint32x4_t __a, uint32_t __
*** 17341,17446 ****
    return __a * __b;
  }
  
- /* vmvn  */
- 
- __extension__ extern __inline poly8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmvn_p8 (poly8x8_t __a)
- {
-   return (poly8x8_t) ~((int8x8_t) __a);
- }
- 
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmvn_s8 (int8x8_t __a)
- {
-   return ~__a;
- }
- 
- __extension__ extern __inline int16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmvn_s16 (int16x4_t __a)
- {
-   return ~__a;
- }
- 
- __extension__ extern __inline int32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmvn_s32 (int32x2_t __a)
- {
-   return ~__a;
- }
- 
- __extension__ extern __inline uint8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmvn_u8 (uint8x8_t __a)
- {
-   return ~__a;
- }
- 
- __extension__ extern __inline uint16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmvn_u16 (uint16x4_t __a)
- {
-   return ~__a;
- }
- 
- __extension__ extern __inline uint32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmvn_u32 (uint32x2_t __a)
- {
-   return ~__a;
- }
- 
- __extension__ extern __inline poly8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmvnq_p8 (poly8x16_t __a)
- {
-   return (poly8x16_t) ~((int8x16_t) __a);
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmvnq_s8 (int8x16_t __a)
- {
-   return ~__a;
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmvnq_s16 (int16x8_t __a)
- {
-   return ~__a;
- }
- 
- __extension__ extern __inline int32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmvnq_s32 (int32x4_t __a)
- {
-   return ~__a;
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmvnq_u8 (uint8x16_t __a)
- {
-   return ~__a;
- }
- 
- __extension__ extern __inline uint16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmvnq_u16 (uint16x8_t __a)
- {
-   return ~__a;
- }
- 
- __extension__ extern __inline uint32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vmvnq_u32 (uint32x4_t __a)
- {
-   return ~__a;
- }
- 
  /* vneg  */
  
  __extension__ extern __inline float32x2_t
--- 13702,13707 ----
*************** vqtbx4q_p8 (poly8x16_t __r, poly8x16x4_t
*** 19697,19746 ****
    return __builtin_aarch64_qtbx4v16qi_pppu (__r, __tab, __idx);
  }
  
- /* vrbit  */
- 
- __extension__ extern __inline poly8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrbit_p8 (poly8x8_t __a)
- {
-   return (poly8x8_t) __builtin_aarch64_rbitv8qi ((int8x8_t) __a);
- }
- 
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrbit_s8 (int8x8_t __a)
- {
-   return __builtin_aarch64_rbitv8qi (__a);
- }
- 
- __extension__ extern __inline uint8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrbit_u8 (uint8x8_t __a)
- {
-   return (uint8x8_t) __builtin_aarch64_rbitv8qi ((int8x8_t) __a);
- }
- 
- __extension__ extern __inline poly8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrbitq_p8 (poly8x16_t __a)
- {
-   return (poly8x16_t) __builtin_aarch64_rbitv16qi ((int8x16_t)__a);
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrbitq_s8 (int8x16_t __a)
- {
-   return __builtin_aarch64_rbitv16qi (__a);
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrbitq_u8 (uint8x16_t __a)
- {
-   return (uint8x16_t) __builtin_aarch64_rbitv16qi ((int8x16_t) __a);
- }
- 
  /* vrecpe  */
  
  __extension__ extern __inline uint32x2_t
--- 15958,15963 ----
*************** vrecpxd_f64 (float64_t __a)
*** 19860,20143 ****
    return __builtin_aarch64_frecpxdf (__a);
  }
  
- 
- /* vrev  */
- 
- __extension__ extern __inline poly8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev16_p8 (poly8x8_t __a)
- {
-   return __builtin_shuffle (__a, (uint8x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
- }
- 
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev16_s8 (int8x8_t __a)
- {
-   return __builtin_shuffle (__a, (uint8x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
- }
- 
- __extension__ extern __inline uint8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev16_u8 (uint8x8_t __a)
- {
-   return __builtin_shuffle (__a, (uint8x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
- }
- 
- __extension__ extern __inline poly8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev16q_p8 (poly8x16_t __a)
- {
-   return __builtin_shuffle (__a,
-       (uint8x16_t) { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 });
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev16q_s8 (int8x16_t __a)
- {
-   return __builtin_shuffle (__a,
-       (uint8x16_t) { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 });
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev16q_u8 (uint8x16_t __a)
- {
-   return __builtin_shuffle (__a,
-       (uint8x16_t) { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 });
- }
- 
- __extension__ extern __inline poly8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev32_p8 (poly8x8_t __a)
- {
-   return __builtin_shuffle (__a, (uint8x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
- }
- 
- __extension__ extern __inline poly16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev32_p16 (poly16x4_t __a)
- {
-   return __builtin_shuffle (__a, (uint16x4_t) { 1, 0, 3, 2 });
- }
- 
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev32_s8 (int8x8_t __a)
- {
-   return __builtin_shuffle (__a, (uint8x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
- }
- 
- __extension__ extern __inline int16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev32_s16 (int16x4_t __a)
- {
-   return __builtin_shuffle (__a, (uint16x4_t) { 1, 0, 3, 2 });
- }
- 
- __extension__ extern __inline uint8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev32_u8 (uint8x8_t __a)
- {
-   return __builtin_shuffle (__a, (uint8x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
- }
- 
- __extension__ extern __inline uint16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev32_u16 (uint16x4_t __a)
- {
-   return __builtin_shuffle (__a, (uint16x4_t) { 1, 0, 3, 2 });
- }
- 
- __extension__ extern __inline poly8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev32q_p8 (poly8x16_t __a)
- {
-   return __builtin_shuffle (__a,
-       (uint8x16_t) { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 });
- }
- 
- __extension__ extern __inline poly16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev32q_p16 (poly16x8_t __a)
- {
-   return __builtin_shuffle (__a, (uint16x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev32q_s8 (int8x16_t __a)
- {
-   return __builtin_shuffle (__a,
-       (uint8x16_t) { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 });
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev32q_s16 (int16x8_t __a)
- {
-   return __builtin_shuffle (__a, (uint16x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev32q_u8 (uint8x16_t __a)
- {
-   return __builtin_shuffle (__a,
-       (uint8x16_t) { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 });
- }
- 
- __extension__ extern __inline uint16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev32q_u16 (uint16x8_t __a)
- {
-   return __builtin_shuffle (__a, (uint16x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
- }
- 
- __extension__ extern __inline float16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev64_f16 (float16x4_t __a)
- {
-   return __builtin_shuffle (__a, (uint16x4_t) { 3, 2, 1, 0 });
- }
- 
- __extension__ extern __inline float32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev64_f32 (float32x2_t __a)
- {
-   return __builtin_shuffle (__a, (uint32x2_t) { 1, 0 });
- }
- 
- __extension__ extern __inline poly8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev64_p8 (poly8x8_t __a)
- {
-   return __builtin_shuffle (__a, (uint8x8_t) { 7, 6, 5, 4, 3, 2, 1, 0 });
- }
- 
- __extension__ extern __inline poly16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev64_p16 (poly16x4_t __a)
- {
-   return __builtin_shuffle (__a, (uint16x4_t) { 3, 2, 1, 0 });
- }
- 
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev64_s8 (int8x8_t __a)
- {
-   return __builtin_shuffle (__a, (uint8x8_t) { 7, 6, 5, 4, 3, 2, 1, 0 });
- }
- 
- __extension__ extern __inline int16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev64_s16 (int16x4_t __a)
- {
-   return __builtin_shuffle (__a, (uint16x4_t) { 3, 2, 1, 0 });
- }
- 
- __extension__ extern __inline int32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev64_s32 (int32x2_t __a)
- {
-   return __builtin_shuffle (__a, (uint32x2_t) { 1, 0 });
- }
- 
- __extension__ extern __inline uint8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev64_u8 (uint8x8_t __a)
- {
-   return __builtin_shuffle (__a, (uint8x8_t) { 7, 6, 5, 4, 3, 2, 1, 0 });
- }
- 
- __extension__ extern __inline uint16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev64_u16 (uint16x4_t __a)
- {
-   return __builtin_shuffle (__a, (uint16x4_t) { 3, 2, 1, 0 });
- }
- 
- __extension__ extern __inline uint32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev64_u32 (uint32x2_t __a)
- {
-   return __builtin_shuffle (__a, (uint32x2_t) { 1, 0 });
- }
- 
- __extension__ extern __inline float16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev64q_f16 (float16x8_t __a)
- {
-   return __builtin_shuffle (__a, (uint16x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
- }
- 
- __extension__ extern __inline float32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev64q_f32 (float32x4_t __a)
- {
-   return __builtin_shuffle (__a, (uint32x4_t) { 1, 0, 3, 2 });
- }
- 
- __extension__ extern __inline poly8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev64q_p8 (poly8x16_t __a)
- {
-   return __builtin_shuffle (__a,
-       (uint8x16_t) { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 });
- }
- 
- __extension__ extern __inline poly16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev64q_p16 (poly16x8_t __a)
- {
-   return __builtin_shuffle (__a, (uint16x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev64q_s8 (int8x16_t __a)
- {
-   return __builtin_shuffle (__a,
-       (uint8x16_t) { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 });
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev64q_s16 (int16x8_t __a)
- {
-   return __builtin_shuffle (__a, (uint16x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
- }
- 
- __extension__ extern __inline int32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev64q_s32 (int32x4_t __a)
- {
-   return __builtin_shuffle (__a, (uint32x4_t) { 1, 0, 3, 2 });
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev64q_u8 (uint8x16_t __a)
- {
-   return __builtin_shuffle (__a,
-       (uint8x16_t) { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 });
- }
- 
- __extension__ extern __inline uint16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev64q_u16 (uint16x8_t __a)
- {
-   return __builtin_shuffle (__a, (uint16x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
- }
- 
- __extension__ extern __inline uint32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrev64q_u32 (uint32x4_t __a)
- {
-   return __builtin_shuffle (__a, (uint32x4_t) { 1, 0, 3, 2 });
- }
- 
  /* vrnd  */
  
  __extension__ extern __inline float32x2_t
--- 16077,16082 ----
*************** vtbx4_p8 (poly8x8_t __r, poly8x8x4_t __t
*** 23593,24281 ****
    return __builtin_aarch64_qtbx2v8qi_pppu (__r, __temp, __idx);
  }
  
- /* vtrn */
- 
- __extension__ extern __inline float16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn1_f16 (float16x4_t __a, float16x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 1, 7, 3});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 2, 6});
- #endif
- }
- 
- __extension__ extern __inline float32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn1_f32 (float32x2_t __a, float32x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
- #endif
- }
- 
- __extension__ extern __inline poly8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn1_p8 (poly8x8_t __a, poly8x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
- #else
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
- #endif
- }
- 
- __extension__ extern __inline poly16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn1_p16 (poly16x4_t __a, poly16x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 1, 7, 3});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 2, 6});
- #endif
- }
- 
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn1_s8 (int8x8_t __a, int8x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
- #else
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
- #endif
- }
- 
- __extension__ extern __inline int16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn1_s16 (int16x4_t __a, int16x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 1, 7, 3});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 2, 6});
- #endif
- }
- 
- __extension__ extern __inline int32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn1_s32 (int32x2_t __a, int32x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
- #endif
- }
- 
- __extension__ extern __inline uint8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn1_u8 (uint8x8_t __a, uint8x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
- #else
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
- #endif
- }
- 
- __extension__ extern __inline uint16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn1_u16 (uint16x4_t __a, uint16x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 1, 7, 3});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 2, 6});
- #endif
- }
- 
- __extension__ extern __inline uint32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn1_u32 (uint32x2_t __a, uint32x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
- #endif
- }
- 
- __extension__ extern __inline float16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn1q_f16 (float16x8_t __a, float16x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
- #endif
- }
- 
- __extension__ extern __inline float32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn1q_f32 (float32x4_t __a, float32x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 1, 7, 3});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 2, 6});
- #endif
- }
- 
- __extension__ extern __inline float64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn1q_f64 (float64x2_t __a, float64x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
- #else
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
- #endif
- }
- 
- __extension__ extern __inline poly8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn1q_p8 (poly8x16_t __a, poly8x16_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b,
-       (uint8x16_t) {17, 1, 19, 3, 21, 5, 23, 7, 25, 9, 27, 11, 29, 13, 31, 15});
- #else
-   return __builtin_shuffle (__a, __b,
-       (uint8x16_t) {0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30});
- #endif
- }
- 
- __extension__ extern __inline poly16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn1q_p16 (poly16x8_t __a, poly16x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
- #endif
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn1q_s8 (int8x16_t __a, int8x16_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b,
-       (uint8x16_t) {17, 1, 19, 3, 21, 5, 23, 7, 25, 9, 27, 11, 29, 13, 31, 15});
- #else
-   return __builtin_shuffle (__a, __b,
-       (uint8x16_t) {0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30});
- #endif
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn1q_s16 (int16x8_t __a, int16x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
- #endif
- }
- 
- __extension__ extern __inline int32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn1q_s32 (int32x4_t __a, int32x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 1, 7, 3});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 2, 6});
- #endif
- }
- 
- __extension__ extern __inline int64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn1q_s64 (int64x2_t __a, int64x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
- #else
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
- #endif
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn1q_u8 (uint8x16_t __a, uint8x16_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b,
-       (uint8x16_t) {17, 1, 19, 3, 21, 5, 23, 7, 25, 9, 27, 11, 29, 13, 31, 15});
- #else
-   return __builtin_shuffle (__a, __b,
-       (uint8x16_t) {0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30});
- #endif
- }
- 
- __extension__ extern __inline uint16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn1q_u16 (uint16x8_t __a, uint16x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
- #endif
- }
- 
- __extension__ extern __inline uint32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn1q_u32 (uint32x4_t __a, uint32x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 1, 7, 3});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 2, 6});
- #endif
- }
- 
- __extension__ extern __inline poly64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn1q_p64 (poly64x2_t __a, poly64x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (poly64x2_t) {3, 1});
- #else
-   return __builtin_shuffle (__a, __b, (poly64x2_t) {0, 2});
- #endif
- }
- 
- __extension__ extern __inline uint64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn1q_u64 (uint64x2_t __a, uint64x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
- #else
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
- #endif
- }
- 
- __extension__ extern __inline float16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn2_f16 (float16x4_t __a, float16x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 6, 2});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 5, 3, 7});
- #endif
- }
- 
- __extension__ extern __inline float32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn2_f32 (float32x2_t __a, float32x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
- #endif
- }
- 
- __extension__ extern __inline poly8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn2_p8 (poly8x8_t __a, poly8x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
- #else
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
- #endif
- }
- 
- __extension__ extern __inline poly16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn2_p16 (poly16x4_t __a, poly16x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 6, 2});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 5, 3, 7});
- #endif
- }
- 
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn2_s8 (int8x8_t __a, int8x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
- #else
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
- #endif
- }
- 
- __extension__ extern __inline int16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn2_s16 (int16x4_t __a, int16x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 6, 2});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 5, 3, 7});
- #endif
- }
- 
- __extension__ extern __inline int32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn2_s32 (int32x2_t __a, int32x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
- #endif
- }
- 
- __extension__ extern __inline uint8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn2_u8 (uint8x8_t __a, uint8x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
- #else
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
- #endif
- }
- 
- __extension__ extern __inline uint16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn2_u16 (uint16x4_t __a, uint16x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 6, 2});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 5, 3, 7});
- #endif
- }
- 
- __extension__ extern __inline uint32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn2_u32 (uint32x2_t __a, uint32x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
- #endif
- }
- 
- __extension__ extern __inline float16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn2q_f16 (float16x8_t __a, float16x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
- #endif
- }
- 
- __extension__ extern __inline float32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn2q_f32 (float32x4_t __a, float32x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 6, 2});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 5, 3, 7});
- #endif
- }
- 
- __extension__ extern __inline float64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn2q_f64 (float64x2_t __a, float64x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
- #else
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
- #endif
- }
- 
- __extension__ extern __inline poly8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn2q_p8 (poly8x16_t __a, poly8x16_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b,
-       (uint8x16_t) {16, 0, 18, 2, 20, 4, 22, 6, 24, 8, 26, 10, 28, 12, 30, 14});
- #else
-   return __builtin_shuffle (__a, __b,
-       (uint8x16_t) {1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31});
- #endif
- }
- 
- __extension__ extern __inline poly16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn2q_p16 (poly16x8_t __a, poly16x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
- #endif
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn2q_s8 (int8x16_t __a, int8x16_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b,
-       (uint8x16_t) {16, 0, 18, 2, 20, 4, 22, 6, 24, 8, 26, 10, 28, 12, 30, 14});
- #else
-   return __builtin_shuffle (__a, __b,
-       (uint8x16_t) {1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31});
- #endif
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn2q_s16 (int16x8_t __a, int16x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
- #endif
- }
- 
- __extension__ extern __inline int32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn2q_s32 (int32x4_t __a, int32x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 6, 2});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 5, 3, 7});
- #endif
- }
- 
- __extension__ extern __inline int64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn2q_s64 (int64x2_t __a, int64x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
- #else
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
- #endif
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn2q_u8 (uint8x16_t __a, uint8x16_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b,
-       (uint8x16_t) {16, 0, 18, 2, 20, 4, 22, 6, 24, 8, 26, 10, 28, 12, 30, 14});
- #else
-   return __builtin_shuffle (__a, __b,
-       (uint8x16_t) {1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31});
- #endif
- }
- 
- __extension__ extern __inline uint16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn2q_u16 (uint16x8_t __a, uint16x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
- #endif
- }
- 
- __extension__ extern __inline uint32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn2q_u32 (uint32x4_t __a, uint32x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 6, 2});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 5, 3, 7});
- #endif
- }
- 
- __extension__ extern __inline uint64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn2q_u64 (uint64x2_t __a, uint64x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
- #else
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
- #endif
- }
- 
- 
- __extension__ extern __inline poly64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn2q_p64 (poly64x2_t __a, poly64x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (poly64x2_t) {2, 0});
- #else
-   return __builtin_shuffle (__a, __b, (poly64x2_t) {1, 3});
- #endif
- }
- 
- __extension__ extern __inline float16x4x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn_f16 (float16x4_t __a, float16x4_t __b)
- {
-   return (float16x4x2_t) {vtrn1_f16 (__a, __b), vtrn2_f16 (__a, __b)};
- }
- 
- __extension__ extern __inline float32x2x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn_f32 (float32x2_t __a, float32x2_t __b)
- {
-   return (float32x2x2_t) {vtrn1_f32 (__a, __b), vtrn2_f32 (__a, __b)};
- }
- 
- __extension__ extern __inline poly8x8x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn_p8 (poly8x8_t __a, poly8x8_t __b)
- {
-   return (poly8x8x2_t) {vtrn1_p8 (__a, __b), vtrn2_p8 (__a, __b)};
- }
- 
- __extension__ extern __inline poly16x4x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn_p16 (poly16x4_t __a, poly16x4_t __b)
- {
-   return (poly16x4x2_t) {vtrn1_p16 (__a, __b), vtrn2_p16 (__a, __b)};
- }
- 
- __extension__ extern __inline int8x8x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn_s8 (int8x8_t __a, int8x8_t __b)
- {
-   return (int8x8x2_t) {vtrn1_s8 (__a, __b), vtrn2_s8 (__a, __b)};
- }
- 
- __extension__ extern __inline int16x4x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn_s16 (int16x4_t __a, int16x4_t __b)
- {
-   return (int16x4x2_t) {vtrn1_s16 (__a, __b), vtrn2_s16 (__a, __b)};
- }
- 
- __extension__ extern __inline int32x2x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn_s32 (int32x2_t __a, int32x2_t __b)
- {
-   return (int32x2x2_t) {vtrn1_s32 (__a, __b), vtrn2_s32 (__a, __b)};
- }
- 
- __extension__ extern __inline uint8x8x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn_u8 (uint8x8_t __a, uint8x8_t __b)
- {
-   return (uint8x8x2_t) {vtrn1_u8 (__a, __b), vtrn2_u8 (__a, __b)};
- }
- 
- __extension__ extern __inline uint16x4x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn_u16 (uint16x4_t __a, uint16x4_t __b)
- {
-   return (uint16x4x2_t) {vtrn1_u16 (__a, __b), vtrn2_u16 (__a, __b)};
- }
- 
- __extension__ extern __inline uint32x2x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrn_u32 (uint32x2_t __a, uint32x2_t __b)
- {
-   return (uint32x2x2_t) {vtrn1_u32 (__a, __b), vtrn2_u32 (__a, __b)};
- }
- 
- __extension__ extern __inline float16x8x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrnq_f16 (float16x8_t __a, float16x8_t __b)
- {
-   return (float16x8x2_t) {vtrn1q_f16 (__a, __b), vtrn2q_f16 (__a, __b)};
- }
- 
- __extension__ extern __inline float32x4x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrnq_f32 (float32x4_t __a, float32x4_t __b)
- {
-   return (float32x4x2_t) {vtrn1q_f32 (__a, __b), vtrn2q_f32 (__a, __b)};
- }
- 
- __extension__ extern __inline poly8x16x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrnq_p8 (poly8x16_t __a, poly8x16_t __b)
- {
-   return (poly8x16x2_t) {vtrn1q_p8 (__a, __b), vtrn2q_p8 (__a, __b)};
- }
- 
- __extension__ extern __inline poly16x8x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrnq_p16 (poly16x8_t __a, poly16x8_t __b)
- {
-   return (poly16x8x2_t) {vtrn1q_p16 (__a, __b), vtrn2q_p16 (__a, __b)};
- }
- 
- __extension__ extern __inline int8x16x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrnq_s8 (int8x16_t __a, int8x16_t __b)
- {
-   return (int8x16x2_t) {vtrn1q_s8 (__a, __b), vtrn2q_s8 (__a, __b)};
- }
- 
- __extension__ extern __inline int16x8x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrnq_s16 (int16x8_t __a, int16x8_t __b)
- {
-   return (int16x8x2_t) {vtrn1q_s16 (__a, __b), vtrn2q_s16 (__a, __b)};
- }
- 
- __extension__ extern __inline int32x4x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrnq_s32 (int32x4_t __a, int32x4_t __b)
- {
-   return (int32x4x2_t) {vtrn1q_s32 (__a, __b), vtrn2q_s32 (__a, __b)};
- }
- 
- __extension__ extern __inline uint8x16x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrnq_u8 (uint8x16_t __a, uint8x16_t __b)
- {
-   return (uint8x16x2_t) {vtrn1q_u8 (__a, __b), vtrn2q_u8 (__a, __b)};
- }
- 
- __extension__ extern __inline uint16x8x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrnq_u16 (uint16x8_t __a, uint16x8_t __b)
- {
-   return (uint16x8x2_t) {vtrn1q_u16 (__a, __b), vtrn2q_u16 (__a, __b)};
- }
- 
- __extension__ extern __inline uint32x4x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vtrnq_u32 (uint32x4_t __a, uint32x4_t __b)
- {
-   return (uint32x4x2_t) {vtrn1q_u32 (__a, __b), vtrn2q_u32 (__a, __b)};
- }
- 
  /* vtst */
  
  __extension__ extern __inline uint8x8_t
--- 19532,19537 ----
*************** vuqaddd_s64 (int64_t __a, uint64_t __b)
*** 24490,25629 ****
    return __builtin_aarch64_suqadddi_ssu (__a,  __b);
  }
  
- #define __DEFINTERLEAVE(op, rettype, intype, funcsuffix, Q) 		\
-   __extension__ extern __inline rettype					\
-   __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) \
-   v ## op ## Q ## _ ## funcsuffix (intype a, intype b)			\
-   {									\
-     return (rettype) {v ## op ## 1 ## Q ## _ ## funcsuffix (a, b),	\
- 		      v ## op ## 2 ## Q ## _ ## funcsuffix (a, b)};	\
-   }
- 
- #define __INTERLEAVE_LIST(op)					\
-   __DEFINTERLEAVE (op, float16x4x2_t, float16x4_t, f16,)	\
-   __DEFINTERLEAVE (op, float32x2x2_t, float32x2_t, f32,)	\
-   __DEFINTERLEAVE (op, poly8x8x2_t, poly8x8_t, p8,)		\
-   __DEFINTERLEAVE (op, poly16x4x2_t, poly16x4_t, p16,)		\
-   __DEFINTERLEAVE (op, int8x8x2_t, int8x8_t, s8,)		\
-   __DEFINTERLEAVE (op, int16x4x2_t, int16x4_t, s16,)		\
-   __DEFINTERLEAVE (op, int32x2x2_t, int32x2_t, s32,)		\
-   __DEFINTERLEAVE (op, uint8x8x2_t, uint8x8_t, u8,)		\
-   __DEFINTERLEAVE (op, uint16x4x2_t, uint16x4_t, u16,)		\
-   __DEFINTERLEAVE (op, uint32x2x2_t, uint32x2_t, u32,)		\
-   __DEFINTERLEAVE (op, float16x8x2_t, float16x8_t, f16, q)	\
-   __DEFINTERLEAVE (op, float32x4x2_t, float32x4_t, f32, q)	\
-   __DEFINTERLEAVE (op, poly8x16x2_t, poly8x16_t, p8, q)		\
-   __DEFINTERLEAVE (op, poly16x8x2_t, poly16x8_t, p16, q)	\
-   __DEFINTERLEAVE (op, int8x16x2_t, int8x16_t, s8, q)		\
-   __DEFINTERLEAVE (op, int16x8x2_t, int16x8_t, s16, q)		\
-   __DEFINTERLEAVE (op, int32x4x2_t, int32x4_t, s32, q)		\
-   __DEFINTERLEAVE (op, uint8x16x2_t, uint8x16_t, u8, q)		\
-   __DEFINTERLEAVE (op, uint16x8x2_t, uint16x8_t, u16, q)	\
-   __DEFINTERLEAVE (op, uint32x4x2_t, uint32x4_t, u32, q)
- 
- /* vuzp */
- 
- __extension__ extern __inline float16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp1_f16 (float16x4_t __a, float16x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 7, 1, 3});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 2, 4, 6});
- #endif
- }
- 
- __extension__ extern __inline float32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp1_f32 (float32x2_t __a, float32x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
- #endif
- }
- 
- __extension__ extern __inline poly8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp1_p8 (poly8x8_t __a, poly8x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
- #else
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
- #endif
- }
- 
- __extension__ extern __inline poly16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp1_p16 (poly16x4_t __a, poly16x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 7, 1, 3});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 2, 4, 6});
- #endif
- }
- 
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp1_s8 (int8x8_t __a, int8x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
- #else
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
- #endif
- }
- 
- __extension__ extern __inline int16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp1_s16 (int16x4_t __a, int16x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 7, 1, 3});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 2, 4, 6});
- #endif
- }
- 
- __extension__ extern __inline int32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp1_s32 (int32x2_t __a, int32x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
- #endif
- }
- 
- __extension__ extern __inline uint8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp1_u8 (uint8x8_t __a, uint8x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
- #else
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
- #endif
- }
- 
- __extension__ extern __inline uint16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp1_u16 (uint16x4_t __a, uint16x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 7, 1, 3});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 2, 4, 6});
- #endif
- }
- 
- __extension__ extern __inline uint32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp1_u32 (uint32x2_t __a, uint32x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
- #endif
- }
- 
- __extension__ extern __inline float16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp1q_f16 (float16x8_t __a, float16x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
- #endif
- }
- 
- __extension__ extern __inline float32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp1q_f32 (float32x4_t __a, float32x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 7, 1, 3});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 2, 4, 6});
- #endif
- }
- 
- __extension__ extern __inline float64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp1q_f64 (float64x2_t __a, float64x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
- #else
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
- #endif
- }
- 
- __extension__ extern __inline poly8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp1q_p8 (poly8x16_t __a, poly8x16_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint8x16_t)
-       {17, 19, 21, 23, 25, 27, 29, 31, 1, 3, 5, 7, 9, 11, 13, 15});
- #else
-   return __builtin_shuffle (__a, __b, (uint8x16_t)
-       {0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30});
- #endif
- }
- 
- __extension__ extern __inline poly16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp1q_p16 (poly16x8_t __a, poly16x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
- #endif
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp1q_s8 (int8x16_t __a, int8x16_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b,
-       (uint8x16_t) {17, 19, 21, 23, 25, 27, 29, 31, 1, 3, 5, 7, 9, 11, 13, 15});
- #else
-   return __builtin_shuffle (__a, __b,
-       (uint8x16_t) {0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30});
- #endif
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp1q_s16 (int16x8_t __a, int16x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
- #endif
- }
- 
- __extension__ extern __inline int32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp1q_s32 (int32x4_t __a, int32x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 7, 1, 3});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 2, 4, 6});
- #endif
- }
- 
- __extension__ extern __inline int64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp1q_s64 (int64x2_t __a, int64x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
- #else
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
- #endif
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp1q_u8 (uint8x16_t __a, uint8x16_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b,
-       (uint8x16_t) {17, 19, 21, 23, 25, 27, 29, 31, 1, 3, 5, 7, 9, 11, 13, 15});
- #else
-   return __builtin_shuffle (__a, __b,
-       (uint8x16_t) {0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30});
- #endif
- }
- 
- __extension__ extern __inline uint16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp1q_u16 (uint16x8_t __a, uint16x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
- #endif
- }
- 
- __extension__ extern __inline uint32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp1q_u32 (uint32x4_t __a, uint32x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 7, 1, 3});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 2, 4, 6});
- #endif
- }
- 
- __extension__ extern __inline uint64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp1q_u64 (uint64x2_t __a, uint64x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
- #else
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
- #endif
- }
- 
- __extension__ extern __inline poly64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp1q_p64 (poly64x2_t __a, poly64x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (poly64x2_t) {3, 1});
- #else
-   return __builtin_shuffle (__a, __b, (poly64x2_t) {0, 2});
- #endif
- }
- 
- __extension__ extern __inline float16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp2_f16 (float16x4_t __a, float16x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 6, 0, 2});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 3, 5, 7});
- #endif
- }
- 
- __extension__ extern __inline float32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp2_f32 (float32x2_t __a, float32x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
- #endif
- }
- 
- __extension__ extern __inline poly8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp2_p8 (poly8x8_t __a, poly8x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
- #else
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
- #endif
- }
- 
- __extension__ extern __inline poly16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp2_p16 (poly16x4_t __a, poly16x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 6, 0, 2});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 3, 5, 7});
- #endif
- }
- 
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp2_s8 (int8x8_t __a, int8x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
- #else
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
- #endif
- }
- 
- __extension__ extern __inline int16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp2_s16 (int16x4_t __a, int16x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 6, 0, 2});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 3, 5, 7});
- #endif
- }
- 
- __extension__ extern __inline int32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp2_s32 (int32x2_t __a, int32x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
- #endif
- }
- 
- __extension__ extern __inline uint8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp2_u8 (uint8x8_t __a, uint8x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
- #else
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
- #endif
- }
- 
- __extension__ extern __inline uint16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp2_u16 (uint16x4_t __a, uint16x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 6, 0, 2});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 3, 5, 7});
- #endif
- }
- 
- __extension__ extern __inline uint32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp2_u32 (uint32x2_t __a, uint32x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
- #endif
- }
- 
- __extension__ extern __inline float16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp2q_f16 (float16x8_t __a, float16x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
- #endif
- }
- 
- __extension__ extern __inline float32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp2q_f32 (float32x4_t __a, float32x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 6, 0, 2});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 3, 5, 7});
- #endif
- }
- 
- __extension__ extern __inline float64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp2q_f64 (float64x2_t __a, float64x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
- #else
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
- #endif
- }
- 
- __extension__ extern __inline poly8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp2q_p8 (poly8x16_t __a, poly8x16_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b,
-       (uint8x16_t) {16, 18, 20, 22, 24, 26, 28, 30, 0, 2, 4, 6, 8, 10, 12, 14});
- #else
-   return __builtin_shuffle (__a, __b,
-       (uint8x16_t) {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31});
- #endif
- }
- 
- __extension__ extern __inline poly16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp2q_p16 (poly16x8_t __a, poly16x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
- #endif
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp2q_s8 (int8x16_t __a, int8x16_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b,
-       (uint8x16_t) {16, 18, 20, 22, 24, 26, 28, 30, 0, 2, 4, 6, 8, 10, 12, 14});
- #else
-   return __builtin_shuffle (__a, __b,
-       (uint8x16_t) {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31});
- #endif
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp2q_s16 (int16x8_t __a, int16x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
- #endif
- }
- 
- __extension__ extern __inline int32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp2q_s32 (int32x4_t __a, int32x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 6, 0, 2});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 3, 5, 7});
- #endif
- }
- 
- __extension__ extern __inline int64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp2q_s64 (int64x2_t __a, int64x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
- #else
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
- #endif
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp2q_u8 (uint8x16_t __a, uint8x16_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint8x16_t)
-       {16, 18, 20, 22, 24, 26, 28, 30, 0, 2, 4, 6, 8, 10, 12, 14});
- #else
-   return __builtin_shuffle (__a, __b, (uint8x16_t)
-       {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31});
- #endif
- }
- 
- __extension__ extern __inline uint16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp2q_u16 (uint16x8_t __a, uint16x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
- #endif
- }
- 
- __extension__ extern __inline uint32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp2q_u32 (uint32x4_t __a, uint32x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 6, 0, 2});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 3, 5, 7});
- #endif
- }
- 
- __extension__ extern __inline uint64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp2q_u64 (uint64x2_t __a, uint64x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
- #else
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
- #endif
- }
- 
- __extension__ extern __inline poly64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vuzp2q_p64 (poly64x2_t __a, poly64x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (poly64x2_t) {2, 0});
- #else
-   return __builtin_shuffle (__a, __b, (poly64x2_t) {1, 3});
- #endif
- }
- 
- __INTERLEAVE_LIST (uzp)
- 
- /* vzip */
- 
- __extension__ extern __inline float16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip1_f16 (float16x4_t __a, float16x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {6, 2, 7, 3});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 1, 5});
- #endif
- }
- 
- __extension__ extern __inline float32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip1_f32 (float32x2_t __a, float32x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
- #endif
- }
- 
- __extension__ extern __inline poly8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip1_p8 (poly8x8_t __a, poly8x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {12, 4, 13, 5, 14, 6, 15, 7});
- #else
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
- #endif
- }
- 
- __extension__ extern __inline poly16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip1_p16 (poly16x4_t __a, poly16x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {6, 2, 7, 3});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 1, 5});
- #endif
- }
- 
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip1_s8 (int8x8_t __a, int8x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {12, 4, 13, 5, 14, 6, 15, 7});
- #else
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
- #endif
- }
- 
- __extension__ extern __inline int16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip1_s16 (int16x4_t __a, int16x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {6, 2, 7, 3});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 1, 5});
- #endif
- }
- 
- __extension__ extern __inline int32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip1_s32 (int32x2_t __a, int32x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
- #endif
- }
- 
- __extension__ extern __inline uint8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip1_u8 (uint8x8_t __a, uint8x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {12, 4, 13, 5, 14, 6, 15, 7});
- #else
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
- #endif
- }
- 
- __extension__ extern __inline uint16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip1_u16 (uint16x4_t __a, uint16x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {6, 2, 7, 3});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 1, 5});
- #endif
- }
- 
- __extension__ extern __inline uint32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip1_u32 (uint32x2_t __a, uint32x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
- #endif
- }
- 
- __extension__ extern __inline float16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip1q_f16 (float16x8_t __a, float16x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b,
- 			    (uint16x8_t) {12, 4, 13, 5, 14, 6, 15, 7});
- #else
-   return __builtin_shuffle (__a, __b,
- 			    (uint16x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
- #endif
- }
- 
- __extension__ extern __inline float32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip1q_f32 (float32x4_t __a, float32x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {6, 2, 7, 3});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 1, 5});
- #endif
- }
- 
- __extension__ extern __inline float64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip1q_f64 (float64x2_t __a, float64x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
- #else
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
- #endif
- }
- 
- __extension__ extern __inline poly8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip1q_p8 (poly8x16_t __a, poly8x16_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint8x16_t)
-       {24, 8, 25, 9, 26, 10, 27, 11, 28, 12, 29, 13, 30, 14, 31, 15});
- #else
-   return __builtin_shuffle (__a, __b, (uint8x16_t)
-       {0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23});
- #endif
- }
- 
- __extension__ extern __inline poly16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip1q_p16 (poly16x8_t __a, poly16x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x8_t)
-       {12, 4, 13, 5, 14, 6, 15, 7});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
- #endif
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip1q_s8 (int8x16_t __a, int8x16_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint8x16_t)
-       {24, 8, 25, 9, 26, 10, 27, 11, 28, 12, 29, 13, 30, 14, 31, 15});
- #else
-   return __builtin_shuffle (__a, __b, (uint8x16_t)
-       {0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23});
- #endif
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip1q_s16 (int16x8_t __a, int16x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x8_t)
-       {12, 4, 13, 5, 14, 6, 15, 7});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
- #endif
- }
- 
- __extension__ extern __inline int32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip1q_s32 (int32x4_t __a, int32x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {6, 2, 7, 3});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 1, 5});
- #endif
- }
- 
- __extension__ extern __inline int64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip1q_s64 (int64x2_t __a, int64x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
- #else
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
- #endif
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip1q_u8 (uint8x16_t __a, uint8x16_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint8x16_t)
-       {24, 8, 25, 9, 26, 10, 27, 11, 28, 12, 29, 13, 30, 14, 31, 15});
- #else
-   return __builtin_shuffle (__a, __b, (uint8x16_t)
-       {0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23});
- #endif
- }
- 
- __extension__ extern __inline uint16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip1q_u16 (uint16x8_t __a, uint16x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x8_t)
-       {12, 4, 13, 5, 14, 6, 15, 7});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
- #endif
- }
- 
- __extension__ extern __inline uint32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip1q_u32 (uint32x4_t __a, uint32x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {6, 2, 7, 3});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 1, 5});
- #endif
- }
- 
- __extension__ extern __inline uint64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip1q_u64 (uint64x2_t __a, uint64x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
- #else
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
- #endif
- }
- 
- __extension__ extern __inline poly64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip1q_p64 (poly64x2_t __a, poly64x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (poly64x2_t) {3, 1});
- #else
-   return __builtin_shuffle (__a, __b, (poly64x2_t) {0, 2});
- #endif
- }
- 
- __extension__ extern __inline float16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip2_f16 (float16x4_t __a, float16x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 5, 1});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {2, 6, 3, 7});
- #endif
- }
- 
- __extension__ extern __inline float32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip2_f32 (float32x2_t __a, float32x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
- #endif
- }
- 
- __extension__ extern __inline poly8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip2_p8 (poly8x8_t __a, poly8x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
- #else
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {4, 12, 5, 13, 6, 14, 7, 15});
- #endif
- }
- 
- __extension__ extern __inline poly16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip2_p16 (poly16x4_t __a, poly16x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 5, 1});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {2, 6, 3, 7});
- #endif
- }
- 
- __extension__ extern __inline int8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip2_s8 (int8x8_t __a, int8x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
- #else
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {4, 12, 5, 13, 6, 14, 7, 15});
- #endif
- }
- 
- __extension__ extern __inline int16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip2_s16 (int16x4_t __a, int16x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 5, 1});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {2, 6, 3, 7});
- #endif
- }
- 
- __extension__ extern __inline int32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip2_s32 (int32x2_t __a, int32x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
- #endif
- }
- 
- __extension__ extern __inline uint8x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip2_u8 (uint8x8_t __a, uint8x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
- #else
-   return __builtin_shuffle (__a, __b, (uint8x8_t) {4, 12, 5, 13, 6, 14, 7, 15});
- #endif
- }
- 
- __extension__ extern __inline uint16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip2_u16 (uint16x4_t __a, uint16x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 5, 1});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x4_t) {2, 6, 3, 7});
- #endif
- }
- 
- __extension__ extern __inline uint32x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip2_u32 (uint32x2_t __a, uint32x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
- #endif
- }
- 
- __extension__ extern __inline float16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip2q_f16 (float16x8_t __a, float16x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b,
- 			    (uint16x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
- #else
-   return __builtin_shuffle (__a, __b,
- 			    (uint16x8_t) {4, 12, 5, 13, 6, 14, 7, 15});
- #endif
- }
- 
- __extension__ extern __inline float32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip2q_f32 (float32x4_t __a, float32x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 5, 1});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {2, 6, 3, 7});
- #endif
- }
- 
- __extension__ extern __inline float64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip2q_f64 (float64x2_t __a, float64x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
- #else
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
- #endif
- }
- 
- __extension__ extern __inline poly8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip2q_p8 (poly8x16_t __a, poly8x16_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint8x16_t)
-       {16, 0, 17, 1, 18, 2, 19, 3, 20, 4, 21, 5, 22, 6, 23, 7});
- #else
-   return __builtin_shuffle (__a, __b, (uint8x16_t)
-       {8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31});
- #endif
- }
- 
- __extension__ extern __inline poly16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip2q_p16 (poly16x8_t __a, poly16x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x8_t)
-       {4, 12, 5, 13, 6, 14, 7, 15});
- #endif
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip2q_s8 (int8x16_t __a, int8x16_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint8x16_t)
-       {16, 0, 17, 1, 18, 2, 19, 3, 20, 4, 21, 5, 22, 6, 23, 7});
- #else
-   return __builtin_shuffle (__a, __b, (uint8x16_t)
-       {8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31});
- #endif
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip2q_s16 (int16x8_t __a, int16x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x8_t)
-       {4, 12, 5, 13, 6, 14, 7, 15});
- #endif
- }
- 
- __extension__ extern __inline int32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip2q_s32 (int32x4_t __a, int32x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 5, 1});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {2, 6, 3, 7});
- #endif
- }
- 
- __extension__ extern __inline int64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip2q_s64 (int64x2_t __a, int64x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
- #else
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
- #endif
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip2q_u8 (uint8x16_t __a, uint8x16_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint8x16_t)
-       {16, 0, 17, 1, 18, 2, 19, 3, 20, 4, 21, 5, 22, 6, 23, 7});
- #else
-   return __builtin_shuffle (__a, __b, (uint8x16_t)
-       {8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31});
- #endif
- }
- 
- __extension__ extern __inline uint16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip2q_u16 (uint16x8_t __a, uint16x8_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
- #else
-   return __builtin_shuffle (__a, __b, (uint16x8_t)
-       {4, 12, 5, 13, 6, 14, 7, 15});
- #endif
- }
- 
- __extension__ extern __inline uint32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip2q_u32 (uint32x4_t __a, uint32x4_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 5, 1});
- #else
-   return __builtin_shuffle (__a, __b, (uint32x4_t) {2, 6, 3, 7});
- #endif
- }
- 
- __extension__ extern __inline uint64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip2q_u64 (uint64x2_t __a, uint64x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
- #else
-   return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
- #endif
- }
- 
- __extension__ extern __inline poly64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vzip2q_p64 (poly64x2_t __a, poly64x2_t __b)
- {
- #ifdef __AARCH64EB__
-   return __builtin_shuffle (__a, __b, (poly64x2_t) {2, 0});
- #else
-   return __builtin_shuffle (__a, __b, (poly64x2_t) {1, 3});
- #endif
- }
- 
- __INTERLEAVE_LIST (zip)
- 
- #undef __INTERLEAVE_LIST
- #undef __DEFINTERLEAVE
- 
- /* End of optimal implementations in approved order.  */
- 
  #pragma GCC pop_options
  
  /* ARMv8.2-A FP16 intrinsics.  */
--- 19746,19751 ----
*************** vsqrtq_f16 (float16x8_t __a)
*** 26045,26064 ****
  
  __extension__ extern __inline float16x4_t
  __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vadd_f16 (float16x4_t __a, float16x4_t __b)
- {
-   return __a + __b;
- }
- 
- __extension__ extern __inline float16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vaddq_f16 (float16x8_t __a, float16x8_t __b)
- {
-   return __a + __b;
- }
- 
- __extension__ extern __inline float16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
  vabd_f16 (float16x4_t __a, float16x4_t __b)
  {
    return __builtin_aarch64_fabdv4hf (__a, __b);
--- 20167,20172 ----
*************** vsha512su1q_u64 (uint64x2_t __a, uint64x
*** 26982,27114 ****
    return __builtin_aarch64_crypto_sha512su1qv2di_uuuu (__a, __b, __c);
  }
  
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- veor3q_u8 (uint8x16_t __a, uint8x16_t __b, uint8x16_t __c)
- {
-   return __builtin_aarch64_eor3qv16qi_uuuu (__a, __b, __c);
- }
- 
- __extension__ extern __inline uint16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- veor3q_u16 (uint16x8_t __a, uint16x8_t __b, uint16x8_t __c)
- {
-   return __builtin_aarch64_eor3qv8hi_uuuu (__a, __b, __c);
- }
- 
- __extension__ extern __inline uint32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- veor3q_u32 (uint32x4_t __a, uint32x4_t __b, uint32x4_t __c)
- {
-   return __builtin_aarch64_eor3qv4si_uuuu (__a, __b, __c);
- }
- 
- __extension__ extern __inline uint64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- veor3q_u64 (uint64x2_t __a, uint64x2_t __b, uint64x2_t __c)
- {
-   return __builtin_aarch64_eor3qv2di_uuuu (__a, __b, __c);
- }
- 
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- veor3q_s8 (int8x16_t __a, int8x16_t __b, int8x16_t __c)
- {
-   return __builtin_aarch64_eor3qv16qi (__a, __b, __c);
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- veor3q_s16 (int16x8_t __a, int16x8_t __b, int16x8_t __c)
- {
-   return __builtin_aarch64_eor3qv8hi (__a, __b, __c);
- }
- 
- __extension__ extern __inline int32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- veor3q_s32 (int32x4_t __a, int32x4_t __b, int32x4_t __c)
- {
-   return __builtin_aarch64_eor3qv4si (__a, __b, __c);
- }
- 
- __extension__ extern __inline int64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- veor3q_s64 (int64x2_t __a, int64x2_t __b, int64x2_t __c)
- {
-   return __builtin_aarch64_eor3qv2di (__a, __b, __c);
- }
- 
- __extension__ extern __inline uint64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vrax1q_u64 (uint64x2_t __a, uint64x2_t __b)
- {
-   return __builtin_aarch64_rax1qv2di_uuu (__a, __b);
- }
- 
- __extension__ extern __inline uint64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vxarq_u64 (uint64x2_t __a, uint64x2_t __b, const int __imm6)
- {
-   return __builtin_aarch64_xarqv2di_uuus (__a, __b, __imm6);
- }
- 
- __extension__ extern __inline uint8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbcaxq_u8 (uint8x16_t __a, uint8x16_t __b, uint8x16_t __c)
- {
-   return __builtin_aarch64_bcaxqv16qi_uuuu (__a, __b, __c);
- }
- 
- __extension__ extern __inline uint16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbcaxq_u16 (uint16x8_t __a, uint16x8_t __b, uint16x8_t __c)
- {
-   return __builtin_aarch64_bcaxqv8hi_uuuu (__a, __b, __c);
- }
- 
- __extension__ extern __inline uint32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbcaxq_u32 (uint32x4_t __a, uint32x4_t __b, uint32x4_t __c)
- {
-   return __builtin_aarch64_bcaxqv4si_uuuu (__a, __b, __c);
- }
- 
- __extension__ extern __inline uint64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbcaxq_u64 (uint64x2_t __a, uint64x2_t __b, uint64x2_t __c)
- {
-   return __builtin_aarch64_bcaxqv2di_uuuu (__a, __b, __c);
- }
- 
- __extension__ extern __inline int8x16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbcaxq_s8 (int8x16_t __a, int8x16_t __b, int8x16_t __c)
- {
-   return __builtin_aarch64_bcaxqv16qi (__a, __b, __c);
- }
- 
- __extension__ extern __inline int16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbcaxq_s16 (int16x8_t __a, int16x8_t __b, int16x8_t __c)
- {
-   return __builtin_aarch64_bcaxqv8hi (__a, __b, __c);
- }
- 
- __extension__ extern __inline int32x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbcaxq_s32 (int32x4_t __a, int32x4_t __b, int32x4_t __c)
- {
-   return __builtin_aarch64_bcaxqv4si (__a, __b, __c);
- }
- 
- __extension__ extern __inline int64x2_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vbcaxq_s64 (int64x2_t __a, int64x2_t __b, int64x2_t __c)
- {
-   return __builtin_aarch64_bcaxqv2di (__a, __b, __c);
- }
- 
  #pragma GCC pop_options
  
  /* AdvSIMD Complex numbers intrinsics.  */
--- 21090,21095 ----
*************** vrnd64xq_f64 (float64x2_t __a)
*** 27899,28004 ****
  #pragma GCC push_options
  #pragma GCC target ("+nothing+bf16")
  
- __extension__ extern __inline bfloat16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vset_lane_bf16 (bfloat16_t __elem, bfloat16x4_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- __extension__ extern __inline bfloat16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vsetq_lane_bf16 (bfloat16_t __elem, bfloat16x8_t __vec, const int __index)
- {
-   return __aarch64_vset_lane_any (__elem, __vec, __index);
- }
- 
- __extension__ extern __inline bfloat16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vget_lane_bf16 (bfloat16x4_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline bfloat16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vgetq_lane_bf16 (bfloat16x8_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline bfloat16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcreate_bf16 (uint64_t __a)
- {
-   return (bfloat16x4_t) __a;
- }
- 
- __extension__ extern __inline bfloat16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcombine_bf16 (bfloat16x4_t __a, bfloat16x4_t __b)
- {
-   return __builtin_aarch64_combinev4bf (__a, __b);
- }
- 
- /* vdup */
- 
- __extension__ extern __inline bfloat16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_n_bf16 (bfloat16_t __a)
- {
-   return (bfloat16x4_t) {__a, __a, __a, __a};
- }
- 
- __extension__ extern __inline bfloat16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_n_bf16 (bfloat16_t __a)
- {
-   return (bfloat16x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
- }
- 
- __extension__ extern __inline bfloat16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_lane_bf16 (bfloat16x4_t __a, const int __b)
- {
-   return vdup_n_bf16 (__aarch64_vget_lane_any (__a, __b));
- }
- 
- __extension__ extern __inline bfloat16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdup_laneq_bf16 (bfloat16x8_t __a, const int __b)
- {
-   return vdup_n_bf16 (__aarch64_vget_lane_any (__a, __b));
- }
- 
- __extension__ extern __inline bfloat16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_lane_bf16 (bfloat16x4_t __a, const int __b)
- {
-   return vdupq_n_bf16 (__aarch64_vget_lane_any (__a, __b));
- }
- 
- __extension__ extern __inline bfloat16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vdupq_laneq_bf16 (bfloat16x8_t __a, const int __b)
- {
-   return vdupq_n_bf16 (__aarch64_vget_lane_any (__a, __b));
- }
- 
- __extension__ extern __inline bfloat16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vduph_lane_bf16 (bfloat16x4_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
- __extension__ extern __inline bfloat16_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vduph_laneq_bf16 (bfloat16x8_t __a, const int __b)
- {
-   return __aarch64_vget_lane_any (__a, __b);
- }
- 
  /* vld */
  
  __extension__ extern __inline bfloat16x4_t
--- 21880,21885 ----
*************** vcvtq_high_bf16_f32 (bfloat16x8_t __inac
*** 28425,28466 ****
    return __builtin_aarch64_bfcvtn2v8bf (__inactive, __a);
  }
  
- __extension__ extern __inline bfloat16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopy_lane_bf16 (bfloat16x4_t __a, const int __lane1,
- 		 bfloat16x4_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
- __extension__ extern __inline bfloat16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopyq_lane_bf16 (bfloat16x8_t __a, const int __lane1,
- 		  bfloat16x4_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
- __extension__ extern __inline bfloat16x4_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopy_laneq_bf16 (bfloat16x4_t __a, const int __lane1,
- 		  bfloat16x8_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
- __extension__ extern __inline bfloat16x8_t
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- vcopyq_laneq_bf16 (bfloat16x8_t __a, const int __lane1,
- 		   bfloat16x8_t __b, const int __lane2)
- {
-   return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
- 				  __a, __lane1);
- }
- 
  __extension__ extern __inline bfloat16x4x2_t
  __attribute__ ((__always_inline__, __gnu_inline__,__artificial__))
  vld2_lane_bf16 (const bfloat16_t * __ptr, bfloat16x4x2_t __b, const int __c)
--- 22306,22311 ----
*************** vusmmlaq_s32 (int32x4_t __r, uint8x16_t
*** 28665,28773 ****
  
  #pragma GCC pop_options
  
- __extension__ extern __inline poly8x8_t
- __attribute ((__always_inline__, __gnu_inline__, __artificial__))
- vadd_p8 (poly8x8_t __a, poly8x8_t __b)
- {
-   return __a ^ __b;
- }
- 
- __extension__ extern __inline poly16x4_t
- __attribute ((__always_inline__, __gnu_inline__, __artificial__))
- vadd_p16 (poly16x4_t __a, poly16x4_t __b)
- {
-   return __a ^ __b;
- }
- 
- __extension__ extern __inline poly64x1_t
- __attribute ((__always_inline__, __gnu_inline__, __artificial__))
- vadd_p64 (poly64x1_t __a, poly64x1_t __b)
- {
-   return __a ^ __b;
- }
- 
- __extension__ extern __inline poly8x16_t
- __attribute ((__always_inline__, __gnu_inline__, __artificial__))
- vaddq_p8 (poly8x16_t __a, poly8x16_t __b)
- {
-   return __a ^ __b;
- }
- 
- __extension__ extern __inline poly16x8_t
- __attribute ((__always_inline__, __gnu_inline__, __artificial__))
- vaddq_p16 (poly16x8_t __a, poly16x8_t __b)
- {
-   return __a ^__b;
- }
- 
- __extension__ extern __inline poly64x2_t
- __attribute ((__always_inline__, __gnu_inline__, __artificial__))
- vaddq_p64 (poly64x2_t __a, poly64x2_t __b)
- {
-   return __a ^ __b;
- }
- 
- __extension__ extern __inline poly128_t
- __attribute ((__always_inline__, __gnu_inline__, __artificial__))
- vaddq_p128 (poly128_t __a, poly128_t __b)
- {
-   return __a ^ __b;
- }
- 
  #undef __aarch64_vget_lane_any
  
  #undef __aarch64_vdup_lane_any
  #undef __aarch64_vdup_lane_f16
  #undef __aarch64_vdup_lane_f32
  #undef __aarch64_vdup_lane_f64
- #undef __aarch64_vdup_lane_p8
- #undef __aarch64_vdup_lane_p16
- #undef __aarch64_vdup_lane_s8
- #undef __aarch64_vdup_lane_s16
- #undef __aarch64_vdup_lane_s32
- #undef __aarch64_vdup_lane_s64
- #undef __aarch64_vdup_lane_u8
- #undef __aarch64_vdup_lane_u16
- #undef __aarch64_vdup_lane_u32
- #undef __aarch64_vdup_lane_u64
  #undef __aarch64_vdup_laneq_f16
  #undef __aarch64_vdup_laneq_f32
  #undef __aarch64_vdup_laneq_f64
- #undef __aarch64_vdup_laneq_p8
- #undef __aarch64_vdup_laneq_p16
- #undef __aarch64_vdup_laneq_s8
- #undef __aarch64_vdup_laneq_s16
- #undef __aarch64_vdup_laneq_s32
- #undef __aarch64_vdup_laneq_s64
- #undef __aarch64_vdup_laneq_u8
- #undef __aarch64_vdup_laneq_u16
- #undef __aarch64_vdup_laneq_u32
- #undef __aarch64_vdup_laneq_u64
  #undef __aarch64_vdupq_lane_f16
  #undef __aarch64_vdupq_lane_f32
  #undef __aarch64_vdupq_lane_f64
- #undef __aarch64_vdupq_lane_p8
- #undef __aarch64_vdupq_lane_p16
- #undef __aarch64_vdupq_lane_s8
- #undef __aarch64_vdupq_lane_s16
- #undef __aarch64_vdupq_lane_s32
- #undef __aarch64_vdupq_lane_s64
- #undef __aarch64_vdupq_lane_u8
- #undef __aarch64_vdupq_lane_u16
- #undef __aarch64_vdupq_lane_u32
- #undef __aarch64_vdupq_lane_u64
  #undef __aarch64_vdupq_laneq_f16
  #undef __aarch64_vdupq_laneq_f32
  #undef __aarch64_vdupq_laneq_f64
- #undef __aarch64_vdupq_laneq_p8
- #undef __aarch64_vdupq_laneq_p16
- #undef __aarch64_vdupq_laneq_s8
- #undef __aarch64_vdupq_laneq_s16
- #undef __aarch64_vdupq_laneq_s32
- #undef __aarch64_vdupq_laneq_s64
- #undef __aarch64_vdupq_laneq_u8
- #undef __aarch64_vdupq_laneq_u16
- #undef __aarch64_vdupq_laneq_u32
- #undef __aarch64_vdupq_laneq_u64
  
  #endif
--- 22510,22529 ----
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/iterators.md gcc-17-20260705/gcc/config/aarch64/iterators.md
*** gcc-17-20260628/gcc/config/aarch64/iterators.md	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/iterators.md	Sun Jul  5 22:32:07 2026
***************
*** 266,272 ****
  
  ;; The VALL_F16 modes except the 128-bit 2-element ones.
  (define_mode_iterator VALL_F16_NO_V2Q [V8QI V16QI V4HI V8HI V2SI V4SI
! 				V4HF V8HF V2SF V4SF])
  
  ;; All Advanced SIMD modes barring HF modes, plus DI.
  (define_mode_iterator VALLDI [V8QI V16QI V4HI V8HI V2SI V4SI V2DI V2SF V4SF V2DF DI])
--- 266,272 ----
  
  ;; The VALL_F16 modes except the 128-bit 2-element ones.
  (define_mode_iterator VALL_F16_NO_V2Q [V8QI V16QI V4HI V8HI V2SI V4SI
! 				V4HF V8HF V4BF V8BF V2SF V4SF])
  
  ;; All Advanced SIMD modes barring HF modes, plus DI.
  (define_mode_iterator VALLDI [V8QI V16QI V4HI V8HI V2SI V4SI V2DI V2SF V4SF V2DF DI])
***************
*** 741,747 ****
  
  ;; SVE integer modes that can form the input to an SVE2 PMULL[BT] instruction.
  (define_mode_iterator SVE2_PMULL_PAIR_I [VNx16QI VNx4SI
! 					 (VNx2DI "TARGET_SVE2_AES")])
  
  ;; Modes involved in extending or truncating SVE data, for 8 elements per
  ;; 128-bit block.
--- 741,747 ----
  
  ;; SVE integer modes that can form the input to an SVE2 PMULL[BT] instruction.
  (define_mode_iterator SVE2_PMULL_PAIR_I [VNx16QI VNx4SI
! 					 (VNx2DI "TARGET_SVE_AES")])
  
  ;; Modes involved in extending or truncating SVE data, for 8 elements per
  ;; 128-bit block.
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/t-aarch64 gcc-17-20260705/gcc/config/aarch64/t-aarch64
*** gcc-17-20260628/gcc/config/aarch64/t-aarch64	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/t-aarch64	Sun Jul  5 22:32:07 2026
*************** aarch64-builtins.o: $(srcdir)/config/aar
*** 67,96 ****
  	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  		$(srcdir)/config/aarch64/aarch64-builtins.cc
  
! aarch64-sve-builtins.o: $(srcdir)/config/aarch64/aarch64-sve-builtins.cc \
    $(srcdir)/config/aarch64/aarch64-sve-builtins.def \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-base.def \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-sve2.def \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-sme.def \
    $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TARGET_H) $(TREE_H) $(RTL_H) \
    $(TM_P_H) memmodel.h insn-codes.h $(OPTABS_H) $(RECOG_H) $(DIAGNOSTIC_H) \
    $(EXPR_H) $(BASIC_BLOCK_H) $(FUNCTION_H) fold-const.h $(GIMPLE_H) \
    gimple-iterator.h gimplify.h explow.h $(EMIT_RTL_H) tree-vector-builder.h \
    stor-layout.h alias.h gimple-fold.h langhooks.h \
    stringpool.h \
!   $(srcdir)/config/aarch64/aarch64-sve-builtins.h \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-shapes.h \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-base.h \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-sve2.h \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-sme.h
  	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
! 		$(srcdir)/config/aarch64/aarch64-sve-builtins.cc
  
  aarch64-sve-builtins-shapes.o: \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-shapes.cc \
    $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) \
    $(TM_P_H) memmodel.h insn-codes.h $(OPTABS_H) \
!   $(srcdir)/config/aarch64/aarch64-sve-builtins.h \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-shapes.h
  	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  		$(srcdir)/config/aarch64/aarch64-sve-builtins-shapes.cc
--- 67,125 ----
  	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  		$(srcdir)/config/aarch64/aarch64-builtins.cc
  
! aarch64-neon-builtins-shapes.o: \
!   $(srcdir)/config/aarch64/aarch64-neon-builtins-shapes.cc \
!   $(srcdir)/config/aarch64/aarch64-neon-builtins.def \
!   $(srcdir)/config/aarch64/aarch64-neon-builtins-base.def \
!   $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) \
!   $(TM_P_H) memmodel.h insn-codes.h $(OPTABS_H) \
!   $(srcdir)/config/aarch64/aarch64-acle-builtins.h \
!   $(srcdir)/config/aarch64/aarch64-neon-builtins-shapes.h
! 	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
! 		$(srcdir)/config/aarch64/aarch64-neon-builtins-shapes.cc
! 
! aarch64-neon-builtins-base.o: \
!   $(srcdir)/config/aarch64/aarch64-neon-builtins-base.cc \
!   $(srcdir)/config/aarch64/aarch64-neon-builtins.def \
!   $(srcdir)/config/aarch64/aarch64-neon-builtins-base.def \
!   $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) \
!   $(TM_P_H) memmodel.h insn-codes.h $(OPTABS_H) $(RECOG_H) \
!   $(EXPR_H) $(BASIC_BLOCK_H) $(FUNCTION_H) fold-const.h $(GIMPLE_H) \
!   gimple-iterator.h gimplify.h explow.h $(EMIT_RTL_H) tree-vector-builder.h \
!   rtx-vector-builder.h vec-perm-indices.h \
!   $(srcdir)/config/aarch64/aarch64-acle-builtins.h \
!   $(srcdir)/config/aarch64/aarch64-neon-builtins-shapes.h \
!   $(srcdir)/config/aarch64/aarch64-neon-builtins-base.h \
!   $(srcdir)/config/aarch64/aarch64-neon-builtins-functions.h
! 	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
! 		$(srcdir)/config/aarch64/aarch64-neon-builtins-base.cc
! 
! aarch64-acle-builtins.o: $(srcdir)/config/aarch64/aarch64-acle-builtins.cc \
    $(srcdir)/config/aarch64/aarch64-sve-builtins.def \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-base.def \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-sve2.def \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-sme.def \
+   $(srcdir)/config/aarch64/aarch64-neon-builtins.def \
+   $(srcdir)/config/aarch64/aarch64-neon-builtins-base.def \
    $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TARGET_H) $(TREE_H) $(RTL_H) \
    $(TM_P_H) memmodel.h insn-codes.h $(OPTABS_H) $(RECOG_H) $(DIAGNOSTIC_H) \
    $(EXPR_H) $(BASIC_BLOCK_H) $(FUNCTION_H) fold-const.h $(GIMPLE_H) \
    gimple-iterator.h gimplify.h explow.h $(EMIT_RTL_H) tree-vector-builder.h \
    stor-layout.h alias.h gimple-fold.h langhooks.h \
    stringpool.h \
!   $(srcdir)/config/aarch64/aarch64-acle-builtins.h \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-shapes.h \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-base.h \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-sve2.h \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-sme.h
  	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
! 		$(srcdir)/config/aarch64/aarch64-acle-builtins.cc
  
  aarch64-sve-builtins-shapes.o: \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-shapes.cc \
    $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) \
    $(TM_P_H) memmodel.h insn-codes.h $(OPTABS_H) \
!   $(srcdir)/config/aarch64/aarch64-acle-builtins.h \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-shapes.h
  	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  		$(srcdir)/config/aarch64/aarch64-sve-builtins-shapes.cc
*************** aarch64-sve-builtins-base.o: \
*** 102,108 ****
    $(EXPR_H) $(BASIC_BLOCK_H) $(FUNCTION_H) fold-const.h $(GIMPLE_H) \
    gimple-iterator.h gimplify.h explow.h $(EMIT_RTL_H) tree-vector-builder.h \
    rtx-vector-builder.h vec-perm-indices.h \
!   $(srcdir)/config/aarch64/aarch64-sve-builtins.h \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-shapes.h \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-base.h \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-functions.h
--- 131,137 ----
    $(EXPR_H) $(BASIC_BLOCK_H) $(FUNCTION_H) fold-const.h $(GIMPLE_H) \
    gimple-iterator.h gimplify.h explow.h $(EMIT_RTL_H) tree-vector-builder.h \
    rtx-vector-builder.h vec-perm-indices.h \
!   $(srcdir)/config/aarch64/aarch64-acle-builtins.h \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-shapes.h \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-base.h \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-functions.h
*************** aarch64-sve-builtins-sve2.o: \
*** 116,122 ****
    $(EXPR_H) $(BASIC_BLOCK_H) $(FUNCTION_H) fold-const.h $(GIMPLE_H) \
    gimple-iterator.h gimplify.h explow.h $(EMIT_RTL_H) tree-vector-builder.h \
    rtx-vector-builder.h vec-perm-indices.h \
!   $(srcdir)/config/aarch64/aarch64-sve-builtins.h \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-shapes.h \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-sve2.h \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-functions.h
--- 145,151 ----
    $(EXPR_H) $(BASIC_BLOCK_H) $(FUNCTION_H) fold-const.h $(GIMPLE_H) \
    gimple-iterator.h gimplify.h explow.h $(EMIT_RTL_H) tree-vector-builder.h \
    rtx-vector-builder.h vec-perm-indices.h \
!   $(srcdir)/config/aarch64/aarch64-acle-builtins.h \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-shapes.h \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-sve2.h \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-functions.h
*************** aarch64-sve-builtins-sme.o: \
*** 129,135 ****
    $(TM_P_H) memmodel.h insn-codes.h $(OPTABS_H) $(RECOG_H) \
    $(EXPR_H) $(BASIC_BLOCK_H) $(FUNCTION_H) fold-const.h $(GIMPLE_H) \
    gimple-iterator.h gimplify.h explow.h $(EMIT_RTL_H) \
!   $(srcdir)/config/aarch64/aarch64-sve-builtins.h \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-shapes.h \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-sme.h \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-functions.h
--- 158,164 ----
    $(TM_P_H) memmodel.h insn-codes.h $(OPTABS_H) $(RECOG_H) \
    $(EXPR_H) $(BASIC_BLOCK_H) $(FUNCTION_H) fold-const.h $(GIMPLE_H) \
    gimple-iterator.h gimplify.h explow.h $(EMIT_RTL_H) \
!   $(srcdir)/config/aarch64/aarch64-acle-builtins.h \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-shapes.h \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-sme.h \
    $(srcdir)/config/aarch64/aarch64-sve-builtins-functions.h
diff -Nrcpad gcc-17-20260628/gcc/config/aarch64/tuning_models/neoversev2.h gcc-17-20260705/gcc/config/aarch64/tuning_models/neoversev2.h
*** gcc-17-20260628/gcc/config/aarch64/tuning_models/neoversev2.h	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config/aarch64/tuning_models/neoversev2.h	Sun Jul  5 22:32:07 2026
*************** neoversev2_dispatch_constraint_callback
*** 317,323 ****
    constraints.safe_push ({TOTAL_SLOTS, total_slots});
  
    return constraints;
! };
  
  /* Neoverse V2 dispatch constraints configuration.  */
  static const struct dispatch_constraint_info neoversev2_dispatch_constraint_info = {
--- 317,323 ----
    constraints.safe_push ({TOTAL_SLOTS, total_slots});
  
    return constraints;
! }
  
  /* Neoverse V2 dispatch constraints configuration.  */
  static const struct dispatch_constraint_info neoversev2_dispatch_constraint_info = {
diff -Nrcpad gcc-17-20260628/gcc/config/arm/arm-mve-builtins-shapes.cc gcc-17-20260705/gcc/config/arm/arm-mve-builtins-shapes.cc
*** gcc-17-20260628/gcc/config/arm/arm-mve-builtins-shapes.cc	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/arm/arm-mve-builtins-shapes.cc	Sun Jul  5 22:32:07 2026
*************** half_type_suffix (function_resolver &r,
*** 372,380 ****
  
  /* Declare the function shape NAME, pointing it to an instance
     of class <NAME>_def.  */
! #define SHAPE(NAME) \
!   static CONSTEXPR const NAME##_def NAME##_obj; \
!   namespace shapes { const function_shape *const NAME = &NAME##_obj; }
  
  /* Base class for functions that are not overloaded.  */
  struct nonoverloaded_base : public function_shape
--- 372,381 ----
  
  /* Declare the function shape NAME, pointing it to an instance
     of class <NAME>_def.  */
! #define SHAPE(NAME)							\
!   static CONSTEXPR const NAME##_def NAME##_obj;				\
!   namespace shapes { const function_shape *const NAME = &NAME##_obj; }	\
!   extern int __require_trailing_semicolon ATTRIBUTE_UNUSED
  
  /* Base class for functions that are not overloaded.  */
  struct nonoverloaded_base : public function_shape
*************** struct binary_def : public overloaded_ba
*** 467,473 ****
      return r.resolve_uniform (2);
    }
  };
! SHAPE (binary)
  
  /* <[u]int32>_t vfoo[_<t0>](<T0>_t, <T0>_t)
  
--- 468,474 ----
      return r.resolve_uniform (2);
    }
  };
! SHAPE (binary);
  
  /* <[u]int32>_t vfoo[_<t0>](<T0>_t, <T0>_t)
  
*************** struct binary_acc_int32_def : public ove
*** 494,500 ****
      return r.resolve_uniform (2);
    }
  };
! SHAPE (binary_acc_int32)
  
  /* <[u]int64>_t vfoo[_<t0>](<T0>_t, <T0>_t)
  
--- 495,501 ----
      return r.resolve_uniform (2);
    }
  };
! SHAPE (binary_acc_int32);
  
  /* <[u]int64>_t vfoo[_<t0>](<T0>_t, <T0>_t)
  
*************** struct binary_acc_int64_def : public ove
*** 517,523 ****
      return r.resolve_uniform (2);
    }
  };
! SHAPE (binary_acc_int64)
  
  /* <[u]int32>_t vfoo[_<t0>]([u]int32_t, <T0>_t, <T0>_t)
  
--- 518,524 ----
      return r.resolve_uniform (2);
    }
  };
! SHAPE (binary_acc_int64);
  
  /* <[u]int32>_t vfoo[_<t0>]([u]int32_t, <T0>_t, <T0>_t)
  
*************** struct binary_acca_int32_def : public ov
*** 559,565 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binary_acca_int32)
  
  /* [u]int64_t vfoo[_<t0>]([u]int64_t, <T0>_t, <T0>_t)
  
--- 560,566 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binary_acca_int32);
  
  /* [u]int64_t vfoo[_<t0>]([u]int64_t, <T0>_t, <T0>_t)
  
*************** struct binary_acca_int64_def : public ov
*** 602,608 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binary_acca_int64)
  
  /* <T0>_t vfoo[_n_t0](<T0>_t, int32_t)
  
--- 603,609 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binary_acca_int64);
  
  /* <T0>_t vfoo[_n_t0](<T0>_t, int32_t)
  
*************** struct binary_imm32_def : public overloa
*** 629,635 ****
      return r.resolve_uniform (1, 1);
    }
  };
! SHAPE (binary_imm32)
  
  /* <T0>_t vfoo[_n_t0](<T0>_t, const int)
  
--- 630,636 ----
      return r.resolve_uniform (1, 1);
    }
  };
! SHAPE (binary_imm32);
  
  /* <T0>_t vfoo[_n_t0](<T0>_t, const int)
  
*************** struct binary_rshift_def : public overlo
*** 665,671 ****
      return c.require_immediate_range (1, 1, bits);
    }
  };
! SHAPE (binary_rshift)
  
  
  /* <uT0>_t vfoo[_n_t0](<T0>_t, int)
--- 666,672 ----
      return c.require_immediate_range (1, 1, bits);
    }
  };
! SHAPE (binary_rshift);
  
  
  /* <uT0>_t vfoo[_n_t0](<T0>_t, int)
*************** struct binary_lshift_unsigned_def : publ
*** 721,727 ****
    }
  
  };
! SHAPE (binary_lshift_unsigned)
  
  /* <uT0>_t vfoo[_t0](<uT0>_t, <T0>_t)
  
--- 722,728 ----
    }
  
  };
! SHAPE (binary_lshift_unsigned);
  
  /* <uT0>_t vfoo[_t0](<uT0>_t, <T0>_t)
  
*************** struct binary_maxamina_def : public over
*** 760,766 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binary_maxamina)
  
  /* <uS0>_t vfoo[_<t0>](<uS0>_t, <T0>_t)
  
--- 761,767 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binary_maxamina);
  
  /* <uS0>_t vfoo[_<t0>](<uS0>_t, <T0>_t)
  
*************** struct binary_maxavminav_def : public ov
*** 790,796 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binary_maxavminav)
  
  /* <S0>_t vfoo[_<t0>](<S0>_t, <T0>_t)
  
--- 791,797 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binary_maxavminav);
  
  /* <S0>_t vfoo[_<t0>](<S0>_t, <T0>_t)
  
*************** struct binary_maxvminv_def : public over
*** 820,826 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binary_maxvminv)
  
  /* <T0:half>_t vfoo[_t0](<T0:half>_t, <T0>_t)
  
--- 821,827 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binary_maxvminv);
  
  /* <T0:half>_t vfoo[_t0](<T0:half>_t, <T0>_t)
  
*************** struct binary_move_narrow_def : public o
*** 854,860 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binary_move_narrow)
  
  /* <uT0:half>_t vfoo[_t0](<uT0:half>_t, <T0>_t)
  
--- 855,861 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binary_move_narrow);
  
  /* <uT0:half>_t vfoo[_t0](<uT0:half>_t, <T0>_t)
  
*************** struct binary_move_narrow_unsigned_def :
*** 888,894 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binary_move_narrow_unsigned)
  
  /* <T0>_t vfoo[_t0](<T0>_t, <T0>_t)
     <T0>_t vfoo[_n_t0](<T0>_t, <S0>_t)
--- 889,895 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binary_move_narrow_unsigned);
  
  /* <T0>_t vfoo[_t0](<T0>_t, <T0>_t)
     <T0>_t vfoo[_n_t0](<T0>_t, <S0>_t)
*************** struct binary_opt_n_def : public overloa
*** 920,926 ****
      return r.resolve_uniform_opt_n (2);
    }
  };
! SHAPE (binary_opt_n)
  
  /* <T0>_t vfoo[t0](<T0>_t, <T0>_t)
     <T0>_t vfoo[_n_t0](<T0>_t, <S0>_t)
--- 921,927 ----
      return r.resolve_uniform_opt_n (2);
    }
  };
! SHAPE (binary_opt_n);
  
  /* <T0>_t vfoo[t0](<T0>_t, <T0>_t)
     <T0>_t vfoo[_n_t0](<T0>_t, <S0>_t)
*************** struct binary_orrq_def : public overload
*** 986,992 ****
      return r.finish_opt_n_resolution (i, 0, type);
    }
  };
! SHAPE (binary_orrq)
  
  /* <T0>_t vfoo[t0](<T0>_t, <T0>_t)
     <T0>_t vfoo[_n_t0](<T0>_t, int32_t)
--- 987,993 ----
      return r.finish_opt_n_resolution (i, 0, type);
    }
  };
! SHAPE (binary_orrq);
  
  /* <T0>_t vfoo[t0](<T0>_t, <T0>_t)
     <T0>_t vfoo[_n_t0](<T0>_t, int32_t)
*************** struct binary_round_lshift_def : public
*** 1047,1053 ****
      return r.finish_opt_n_resolution (i, 0, type, TYPE_signed);
    }
  };
! SHAPE (binary_round_lshift)
  
  /* <T0>_t vfoo[_t0](<T0>_t, <T0>_t)
     <T0>_t vfoo_n[_t0](<T0>_t, const int)
--- 1048,1054 ----
      return r.finish_opt_n_resolution (i, 0, type, TYPE_signed);
    }
  };
! SHAPE (binary_round_lshift);
  
  /* <T0>_t vfoo[_t0](<T0>_t, <T0>_t)
     <T0>_t vfoo_n[_t0](<T0>_t, const int)
*************** struct binary_lshift_def : public overlo
*** 1104,1110 ****
      return c.require_immediate_range (1, 0, bits - 1);
    }
  };
! SHAPE (binary_lshift)
  
  /* Used with the above form, but only for the MODE_r case which does
     not always support the same set of predicates as MODE_none and
--- 1105,1111 ----
      return c.require_immediate_range (1, 0, bits - 1);
    }
  };
! SHAPE (binary_lshift);
  
  /* Used with the above form, but only for the MODE_r case which does
     not always support the same set of predicates as MODE_none and
*************** struct binary_lshift_r_def : public over
*** 1145,1151 ****
      return r.finish_opt_n_resolution (i, 0, type, TYPE_signed);
    }
  };
! SHAPE (binary_lshift_r)
  
  /* <T0:half>_t vfoo[_n_t0](<T0:half>_t, <T0>_t, const int)
  
--- 1146,1152 ----
      return r.finish_opt_n_resolution (i, 0, type, TYPE_signed);
    }
  };
! SHAPE (binary_lshift_r);
  
  /* <T0:half>_t vfoo[_n_t0](<T0:half>_t, <T0>_t, const int)
  
*************** struct binary_rshift_narrow_def : public
*** 1190,1196 ****
      return c.require_immediate_range (2, 1, bits / 2);
    }
  };
! SHAPE (binary_rshift_narrow)
  
  /* <uT0:half>_t vfoo[_n_t0](<uT0:half>_t, <T0>_t, const int)
  
--- 1191,1197 ----
      return c.require_immediate_range (2, 1, bits / 2);
    }
  };
! SHAPE (binary_rshift_narrow);
  
  /* <uT0:half>_t vfoo[_n_t0](<uT0:half>_t, <T0>_t, const int)
  
*************** struct binary_rshift_narrow_unsigned_def
*** 1236,1242 ****
    }
  
  };
! SHAPE (binary_rshift_narrow_unsigned)
  
  /* <T0:twice>_t vfoo[_t0](<T0>_t, <T0>_t)
  
--- 1237,1243 ----
    }
  
  };
! SHAPE (binary_rshift_narrow_unsigned);
  
  /* <T0:twice>_t vfoo[_t0](<T0>_t, <T0>_t)
  
*************** struct binary_widen_def : public overloa
*** 1276,1282 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binary_widen)
  
  /* <T0:twice>_t vfoo[_t0](<T0>_t, <T0>_t)
  
--- 1277,1283 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binary_widen);
  
  /* <T0:twice>_t vfoo[_t0](<T0>_t, <T0>_t)
  
*************** struct binary_widen_poly_def : public ov
*** 1325,1331 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binary_widen_poly)
  
  /* <T0:twice>_t vfoo[_n_t0](<T0>_t, const int)
  
--- 1326,1332 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (binary_widen_poly);
  
  /* <T0:twice>_t vfoo[_n_t0](<T0>_t, const int)
  
*************** struct binary_widen_n_def : public overl
*** 1376,1382 ****
    }
  
  };
! SHAPE (binary_widen_n)
  
  /* <T0:twice>_t vfoo[_t0](<T0>_t, <T0>_t)
     <T0:twice>_t vfoo[_n_t0](<T0>_t, <S0>_t)
--- 1377,1383 ----
    }
  
  };
! SHAPE (binary_widen_n);
  
  /* <T0:twice>_t vfoo[_t0](<T0>_t, <T0>_t)
     <T0:twice>_t vfoo[_n_t0](<T0>_t, <S0>_t)
*************** struct binary_widen_opt_n_def : public o
*** 1423,1429 ****
      return r.finish_opt_n_resolution (last_arg, 0, type);
    }
  };
! SHAPE (binary_widen_opt_n)
  
  /* Shape for comparison operations that operate on
     uniform types.
--- 1424,1430 ----
      return r.finish_opt_n_resolution (last_arg, 0, type);
    }
  };
! SHAPE (binary_widen_opt_n);
  
  /* Shape for comparison operations that operate on
     uniform types.
*************** struct cmp_def : public overloaded_base<
*** 1450,1456 ****
      return r.resolve_uniform_opt_n (2);
    }
  };
! SHAPE (cmp)
  
  /* <T0>xN_t vfoo[_t0](uint64_t, uint64_t)
  
--- 1451,1457 ----
      return r.resolve_uniform_opt_n (2);
    }
  };
! SHAPE (cmp);
  
  /* <T0>xN_t vfoo[_t0](uint64_t, uint64_t)
  
*************** struct create_def : public nonoverloaded
*** 1466,1472 ****
      build_all (b, "v0,su64,su64", group, MODE_none, preserve_user_namespace);
    }
  };
! SHAPE (create)
  
  /* <S0>_t vfoo[_t0](<T0>_t, const int)
  
--- 1467,1473 ----
      build_all (b, "v0,su64,su64", group, MODE_none, preserve_user_namespace);
    }
  };
! SHAPE (create);
  
  /* <S0>_t vfoo[_t0](<T0>_t, const int)
  
*************** struct getq_lane_def : public overloaded
*** 1507,1513 ****
    }
  
  };
! SHAPE (getq_lane)
  
  /* <T0>[xN]_t vfoo_t0().
     <T0>[xN]_t vfoo(<T0>_t).
--- 1508,1514 ----
    }
  
  };
! SHAPE (getq_lane);
  
  /* <T0>[xN]_t vfoo_t0().
     <T0>[xN]_t vfoo(<T0>_t).
*************** struct inherent_def : public overloaded_
*** 1556,1562 ****
    }
  
  };
! SHAPE (inherent)
  
  /* <T0>_t vfoo[_t0](const <s0>_t *)
  
--- 1557,1563 ----
    }
  
  };
! SHAPE (inherent);
  
  /* <T0>_t vfoo[_t0](const <s0>_t *)
  
*************** struct load_def : public overloaded_base
*** 1590,1596 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (load)
  
  /* <T0>_t foo_t0 (const <X>_t *)
  
--- 1591,1597 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (load);
  
  /* <T0>_t foo_t0 (const <X>_t *)
  
*************** struct load_ext_def : public nonoverload
*** 1608,1614 ****
      build_all (b, "t0,al", group, MODE_none, preserve_user_namespace);
    }
  };
! SHAPE (load_ext)
  
  /* Base class for load_ext_gather_offset and load_ext_gather_shifted_offset,
     which differ only in the units of the displacement.  */
--- 1609,1615 ----
      build_all (b, "t0,al", group, MODE_none, preserve_user_namespace);
    }
  };
! SHAPE (load_ext);
  
  /* Base class for load_ext_gather_offset and load_ext_gather_shifted_offset,
     which differ only in the units of the displacement.  */
*************** struct load_gather_base_def : public non
*** 1665,1671 ****
      return c.require_immediate_range_multiple (1, -bound, bound, multiple);
    }
  };
! SHAPE (load_gather_base)
  
  /* <T0>_t vfoo[_t0](<X>_t const *, <Y>_t)
  
--- 1666,1672 ----
      return c.require_immediate_range_multiple (1, -bound, bound, multiple);
    }
  };
! SHAPE (load_gather_base);
  
  /* <T0>_t vfoo[_t0](<X>_t const *, <Y>_t)
  
*************** struct load_ext_gather_offset_def : publ
*** 1706,1712 ****
      return r.resolve_to (mode, type);
    }
  };
! SHAPE (load_ext_gather_offset)
  
  /* <T0>_t vfoo[_t0](<T0>_t)
     <T0>_t vfoo_n_t0(<sT0>_t)
--- 1707,1713 ----
      return r.resolve_to (mode, type);
    }
  };
! SHAPE (load_ext_gather_offset);
  
  /* <T0>_t vfoo[_t0](<T0>_t)
     <T0>_t vfoo_n_t0(<sT0>_t)
*************** struct mvn_def : public overloaded_base<
*** 1755,1761 ****
      return r.finish_opt_n_resolution (last_arg, 0, type);
    }
  };
! SHAPE (mvn)
  
  /* int32_t foo(int32_t, int32_t)
  
--- 1756,1762 ----
      return r.finish_opt_n_resolution (last_arg, 0, type);
    }
  };
! SHAPE (mvn);
  
  /* int32_t foo(int32_t, int32_t)
  
*************** struct scalar_s32_shift_def : public non
*** 1770,1776 ****
      build_all (b, "ss32,ss32,ss32", group, MODE_none, preserve_user_namespace);
    }
  };
! SHAPE (scalar_s32_shift)
  
  /* int32_t foo(int32_t, const int)
  
--- 1771,1777 ----
      build_all (b, "ss32,ss32,ss32", group, MODE_none, preserve_user_namespace);
    }
  };
! SHAPE (scalar_s32_shift);
  
  /* int32_t foo(int32_t, const int)
  
*************** struct scalar_s32_shift_imm_def : public
*** 1793,1799 ****
      return c.require_immediate_range (1, 1, 32);
    }
  };
! SHAPE (scalar_s32_shift_imm)
  
  /* uint32_t foo(uint32_t, int32_t)
  
--- 1794,1800 ----
      return c.require_immediate_range (1, 1, 32);
    }
  };
! SHAPE (scalar_s32_shift_imm);
  
  /* uint32_t foo(uint32_t, int32_t)
  
*************** struct scalar_u32_shift_def : public non
*** 1808,1814 ****
      build_all (b, "su32,su32,ss32", group, MODE_none, preserve_user_namespace);
    }
  };
! SHAPE (scalar_u32_shift)
  
  /* uint32_t foo(uint32_t, const int)
  
--- 1809,1815 ----
      build_all (b, "su32,su32,ss32", group, MODE_none, preserve_user_namespace);
    }
  };
! SHAPE (scalar_u32_shift);
  
  /* uint32_t foo(uint32_t, const int)
  
*************** struct scalar_u32_shift_imm_def : public
*** 1831,1837 ****
      return c.require_immediate_range (1, 1, 32);
    }
  };
! SHAPE (scalar_u32_shift_imm)
  
  /* int64_t foo(int64_t, int32_t)
  
--- 1832,1838 ----
      return c.require_immediate_range (1, 1, 32);
    }
  };
! SHAPE (scalar_u32_shift_imm);
  
  /* int64_t foo(int64_t, int32_t)
  
*************** struct scalar_s64_shift_def : public non
*** 1846,1852 ****
      build_all (b, "ss64,ss64,ss32", group, MODE_none, preserve_user_namespace);
    }
  };
! SHAPE (scalar_s64_shift)
  
  /* int64_t foo(int64_t, const int)
  
--- 1847,1853 ----
      build_all (b, "ss64,ss64,ss32", group, MODE_none, preserve_user_namespace);
    }
  };
! SHAPE (scalar_s64_shift);
  
  /* int64_t foo(int64_t, const int)
  
*************** struct scalar_s64_shift_imm_def : public
*** 1869,1875 ****
      return c.require_immediate_range (1, 1, 32);
    }
  };
! SHAPE (scalar_s64_shift_imm)
  
  /* uint64_t foo(uint64_t, int32_t)
  
--- 1870,1876 ----
      return c.require_immediate_range (1, 1, 32);
    }
  };
! SHAPE (scalar_s64_shift_imm);
  
  /* uint64_t foo(uint64_t, int32_t)
  
*************** struct scalar_u64_shift_def : public non
*** 1884,1890 ****
      build_all (b, "su64,su64,ss32", group, MODE_none, preserve_user_namespace);
    }
  };
! SHAPE (scalar_u64_shift)
  
  /* uint64_t foo(uint64_t, const int)
  
--- 1885,1891 ----
      build_all (b, "su64,su64,ss32", group, MODE_none, preserve_user_namespace);
    }
  };
! SHAPE (scalar_u64_shift);
  
  /* uint64_t foo(uint64_t, const int)
  
*************** struct scalar_u64_shift_imm_def : public
*** 1907,1913 ****
      return c.require_immediate_range (1, 1, 32);
    }
  };
! SHAPE (scalar_u64_shift_imm)
  
  /* <T0>_t vfoo[_t0](<S0>_t, <T0>_t, const_int)
  
--- 1908,1914 ----
      return c.require_immediate_range (1, 1, 32);
    }
  };
! SHAPE (scalar_u64_shift_imm);
  
  /* <T0>_t vfoo[_t0](<S0>_t, <T0>_t, const_int)
  
*************** struct setq_lane_def : public overloaded
*** 1947,1953 ****
      return c.require_immediate_range (2, 0, num_lanes - 1);
    }
  };
! SHAPE (setq_lane)
  
  /* void vfoo[_t0](<X>_t *, <T0>[xN]_t)
  
--- 1948,1954 ----
      return c.require_immediate_range (2, 0, num_lanes - 1);
    }
  };
! SHAPE (setq_lane);
  
  /* void vfoo[_t0](<X>_t *, <T0>[xN]_t)
  
*************** struct store_def : public overloaded_bas
*** 1986,1992 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (store)
  
  /* Base class for store_scatter_offset and store_scatter_shifted_offset, which
     differ only in the units of the displacement.  Also used by
--- 1987,1993 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (store);
  
  /* Base class for store_scatter_offset and store_scatter_shifted_offset, which
     differ only in the units of the displacement.  Also used by
*************** struct store_scatter_offset_def : public
*** 2050,2056 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (store_scatter_offset)
  
  /* void vfoo[_t0](<Y>_t, const int, <T0>_t)
  
--- 2051,2057 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (store_scatter_offset);
  
  /* void vfoo[_t0](<Y>_t, const int, <T0>_t)
  
*************** struct store_scatter_base_def : public s
*** 2115,2121 ****
      return c.require_immediate_range_multiple (1, -bound, bound, multiple);
    }
  };
! SHAPE (store_scatter_base)
  
  /* <T0>_t vfoo[_t0](<T0>_t, <T0>_t, <T0>_t)
  
--- 2116,2122 ----
      return c.require_immediate_range_multiple (1, -bound, bound, multiple);
    }
  };
! SHAPE (store_scatter_base);
  
  /* <T0>_t vfoo[_t0](<T0>_t, <T0>_t, <T0>_t)
  
*************** struct ternary_def : public overloaded_b
*** 2141,2147 ****
      return r.resolve_uniform_opt_n (3);
    }
  };
! SHAPE (ternary)
  
  /* <T0>_t vfoo[_t0](<T0>_t, <T0>_t, const int)
  
--- 2142,2148 ----
      return r.resolve_uniform_opt_n (3);
    }
  };
! SHAPE (ternary);
  
  /* <T0>_t vfoo[_t0](<T0>_t, <T0>_t, const int)
  
*************** struct ternary_lshift_def : public overl
*** 2179,2185 ****
      return c.require_immediate_range (2, 0, bits - 1);
    }
  };
! SHAPE (ternary_lshift)
  
  /* <T0>_t vfoo[_n_t0](<T0>_t, <T0>_t, <S0>_t)
  
--- 2180,2186 ----
      return c.require_immediate_range (2, 0, bits - 1);
    }
  };
! SHAPE (ternary_lshift);
  
  /* <T0>_t vfoo[_n_t0](<T0>_t, <T0>_t, <S0>_t)
  
*************** struct ternary_n_def : public overloaded
*** 2206,2212 ****
      return r.resolve_uniform (2, 1);
    }
  };
! SHAPE (ternary_n)
  
  /* <T0>_t vfoo[_t0](<T0>_t, <T0>_t, <T0>_t)
     <T0>_t vfoo[_n_t0](<T0>_t, <T0>_t, <S0>_t)
--- 2207,2213 ----
      return r.resolve_uniform (2, 1);
    }
  };
! SHAPE (ternary_n);
  
  /* <T0>_t vfoo[_t0](<T0>_t, <T0>_t, <T0>_t)
     <T0>_t vfoo[_n_t0](<T0>_t, <T0>_t, <S0>_t)
*************** struct ternary_opt_n_def : public overlo
*** 2236,2242 ****
      return r.resolve_uniform_opt_n (3);
    }
  };
! SHAPE (ternary_opt_n)
  
  /* <T0>_t vfoo[_t0](<T0>_t, <T0>_t, const int)
  
--- 2237,2243 ----
      return r.resolve_uniform_opt_n (3);
    }
  };
! SHAPE (ternary_opt_n);
  
  /* <T0>_t vfoo[_t0](<T0>_t, <T0>_t, const int)
  
*************** struct ternary_rshift_def : public overl
*** 2274,2280 ****
      return c.require_immediate_range (2, 1, bits);
    }
  };
! SHAPE (ternary_rshift)
  
  /* <T0>_t vfoo[_t0](<T0>_t)
  
--- 2275,2281 ----
      return c.require_immediate_range (2, 1, bits);
    }
  };
! SHAPE (ternary_rshift);
  
  /* <T0>_t vfoo[_t0](<T0>_t)
  
*************** struct unary_def : public overloaded_bas
*** 2301,2307 ****
      return r.resolve_unary ();
    }
  };
! SHAPE (unary)
  
  /* <S0:twice>_t vfoo[_<t0>](<T0>_t)
  
--- 2302,2308 ----
      return r.resolve_unary ();
    }
  };
! SHAPE (unary);
  
  /* <S0:twice>_t vfoo[_<t0>](<T0>_t)
  
*************** struct unary_acc_def : public overloaded
*** 2329,2335 ****
      return r.resolve_unary ();
    }
  };
! SHAPE (unary_acc)
  
  /* <T0>_t foo_t0[_t1](<T1>_t)
  
--- 2330,2336 ----
      return r.resolve_unary ();
    }
  };
! SHAPE (unary_acc);
  
  /* <T0>_t foo_t0[_t1](<T1>_t)
  
*************** struct unary_convert_def : public overlo
*** 2357,2363 ****
      return r.resolve_unary ();
    }
  };
! SHAPE (unary_convert)
  
  /* [u]int32_t vfoo[_<t0>](<T0>_t)
  
--- 2358,2364 ----
      return r.resolve_unary ();
    }
  };
! SHAPE (unary_convert);
  
  /* [u]int32_t vfoo[_<t0>](<T0>_t)
  
*************** struct unary_int32_def : public overload
*** 2384,2390 ****
      return r.resolve_uniform (1);
    }
  };
! SHAPE (unary_int32)
  
  /* [u]int32_t vfoo[_<t0>]([u]int32_t, <T0>_t)
  
--- 2385,2391 ----
      return r.resolve_uniform (1);
    }
  };
! SHAPE (unary_int32);
  
  /* [u]int32_t vfoo[_<t0>]([u]int32_t, <T0>_t)
  
*************** struct unary_int32_acc_def : public over
*** 2425,2431 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (unary_int32_acc)
  
  /* <T0>_t vfoo[_n]_t0(<S0>_t)
  
--- 2426,2432 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (unary_int32_acc);
  
  /* <T0>_t vfoo[_n]_t0(<S0>_t)
  
*************** struct unary_n_def : public overloaded_b
*** 2478,2484 ****
      return r.resolve_unary_n ();
    }
  };
! SHAPE (unary_n)
  
  /* <T0:twice>_t vfoo[_t0](<T0>_t)
  
--- 2479,2485 ----
      return r.resolve_unary_n ();
    }
  };
! SHAPE (unary_n);
  
  /* <T0:twice>_t vfoo[_t0](<T0>_t)
  
*************** struct unary_widen_def : public overload
*** 2522,2528 ****
      return r.report_no_such_form (type);
    }
  };
! SHAPE (unary_widen)
  
  /* <S0:twice>_t vfoo[_<t0>](<S0:twice>_t, <T0>_t)
  
--- 2523,2529 ----
      return r.report_no_such_form (type);
    }
  };
! SHAPE (unary_widen);
  
  /* <S0:twice>_t vfoo[_<t0>](<S0:twice>_t, <T0>_t)
  
*************** struct unary_widen_acc_def : public over
*** 2556,2562 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (unary_widen_acc)
  
  /* <T0>_t vfoo[_t0](T0, T0, uint32_t*)
  
--- 2557,2563 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (unary_widen_acc);
  
  /* <T0>_t vfoo[_t0](T0, T0, uint32_t*)
  
*************** struct vadc_vsbc_def : public overloaded
*** 2592,2598 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (vadc_vsbc)
  
  /* mve_pred16_t foo_t0(uint32_t)
  
--- 2593,2599 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (vadc_vsbc);
  
  /* mve_pred16_t foo_t0(uint32_t)
  
*************** struct vctp_def : public nonoverloaded_b
*** 2608,2614 ****
      build_all (b, "p,su32", group, MODE_none, preserve_user_namespace);
    }
  };
! SHAPE (vctp)
  
  /* <T0>_t foo_t0[_t1](<T1>_t)
     <T0>_t foo_t0_n[_t1](<T1>_t, const int)
--- 2609,2615 ----
      build_all (b, "p,su32", group, MODE_none, preserve_user_namespace);
    }
  };
! SHAPE (vctp);
  
  /* <T0>_t foo_t0[_t1](<T1>_t)
     <T0>_t foo_t0_n[_t1](<T1>_t, const int)
*************** struct vcvt_def : public overloaded_base
*** 2708,2714 ****
      return c.require_immediate_range (1, 1, bits);
    }
  };
! SHAPE (vcvt)
  
  /* float16x8_t foo_f16_f32(float16x8_t, float32x4_t)
  
--- 2709,2715 ----
      return c.require_immediate_range (1, 1, bits);
    }
  };
! SHAPE (vcvt);
  
  /* float16x8_t foo_f16_f32(float16x8_t, float32x4_t)
  
*************** struct vcvt_f16_f32_def : public nonover
*** 2725,2731 ****
      build_all (b, "v0,v0,v1", group, MODE_none, preserve_user_namespace);
    }
  };
! SHAPE (vcvt_f16_f32)
  
  /* float32x4_t foo_f32_f16(float16x8_t)
  
--- 2726,2732 ----
      build_all (b, "v0,v0,v1", group, MODE_none, preserve_user_namespace);
    }
  };
! SHAPE (vcvt_f16_f32);
  
  /* float32x4_t foo_f32_f16(float16x8_t)
  
*************** struct vcvt_f32_f16_def : public nonover
*** 2743,2749 ****
      build_all (b, "v0,v1", group, MODE_none, preserve_user_namespace);
    }
  };
! SHAPE (vcvt_f32_f16)
  
  /* <T0>_t foo_t0[_t1](<T1>_t)
  
--- 2744,2750 ----
      build_all (b, "v0,v1", group, MODE_none, preserve_user_namespace);
    }
  };
! SHAPE (vcvt_f32_f16);
  
  /* <T0>_t foo_t0[_t1](<T1>_t)
  
*************** struct vcvtx_def : public overloaded_bas
*** 2802,2808 ****
      return r.report_no_such_form (from_type);
    }
  };
! SHAPE (vcvtx)
  
  /* <T0>_t vfoo[_n]_t0(uint32_t, const int)
     <T0>_t vfoo[_wb]_t0(uint32_t *, const int)
--- 2803,2809 ----
      return r.report_no_such_form (from_type);
    }
  };
! SHAPE (vcvtx);
  
  /* <T0>_t vfoo[_n]_t0(uint32_t, const int)
     <T0>_t vfoo[_wb]_t0(uint32_t *, const int)
*************** struct viddup_def : public overloaded_ba
*** 2887,2893 ****
      return c.require_immediate_one_of (1, 1, 2, 4, 8);
    }
  };
! SHAPE (viddup)
  
  /* <T0>_t vfoo[_n]_t0(uint32_t, uint32_t, const int)
     <T0>_t vfoo[_wb]_t0(uint32_t *, uint32_t, const int)
--- 2888,2894 ----
      return c.require_immediate_one_of (1, 1, 2, 4, 8);
    }
  };
! SHAPE (viddup);
  
  /* <T0>_t vfoo[_n]_t0(uint32_t, uint32_t, const int)
     <T0>_t vfoo[_wb]_t0(uint32_t *, uint32_t, const int)
*************** struct vidwdup_def : public overloaded_b
*** 2975,2981 ****
      return c.require_immediate_one_of (2, 1, 2, 4, 8);
    }
  };
! SHAPE (vidwdup)
  
  /* mve_pred16_t foo_t0(mve_pred16_t)
  
--- 2976,2982 ----
      return c.require_immediate_one_of (2, 1, 2, 4, 8);
    }
  };
! SHAPE (vidwdup);
  
  /* mve_pred16_t foo_t0(mve_pred16_t)
  
*************** struct vpnot_def : public nonoverloaded_
*** 2990,2996 ****
      build_all (b, "p,p", group, MODE_none, preserve_user_namespace);
    }
  };
! SHAPE (vpnot)
  
  /* <T0>_t vfoo[_t0](<T0>_t, <T0>_t, mve_pred16_t)
  
--- 2991,2997 ----
      build_all (b, "p,p", group, MODE_none, preserve_user_namespace);
    }
  };
! SHAPE (vpnot);
  
  /* <T0>_t vfoo[_t0](<T0>_t, <T0>_t, mve_pred16_t)
  
*************** struct vpsel_def : public overloaded_bas
*** 3029,3035 ****
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (vpsel)
  
  /* <T0>_t vfoo[_t0](T0, uint32_t* , const int)
  
--- 3030,3036 ----
      return r.resolve_to (r.mode_suffix_id, type);
    }
  };
! SHAPE (vpsel);
  
  /* <T0>_t vfoo[_t0](T0, uint32_t* , const int)
  
*************** struct vshlc_def : public overloaded_bas
*** 3073,3079 ****
      return c.require_immediate_range (2, 1, 32);
    }
  };
! SHAPE (vshlc)
  
  } /* end namespace arm_mve */
  
--- 3074,3080 ----
      return c.require_immediate_range (2, 1, 32);
    }
  };
! SHAPE (vshlc);
  
  } /* end namespace arm_mve */
  
diff -Nrcpad gcc-17-20260628/gcc/config/avr/avr.cc gcc-17-20260705/gcc/config/avr/avr.cc
*** gcc-17-20260628/gcc/config/avr/avr.cc	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/avr/avr.cc	Sun Jul  5 22:32:07 2026
*************** avr_out_plus_1 (rtx xinsn, rtx *xop, int
*** 8921,8926 ****
--- 8921,8942 ----
    if (xval == const0_rtx)
      return;
  
+   // Adding +/-1 to a lower reg doesn't need a scratch.
+ 
+   if (IN_RANGE (n_bytes, 2, 4)
+       && code_sat == UNKNOWN
+       && (xval == const1_rtx || xval == constm1_rtx)
+       && ! test_hard_reg_class (LD_REGS, xop[0]))
+     {
+       avr_asm_len ("sec", nullptr, plen, 1);
+ 
+       for (auto r = REGNO (xop[0]); r < REGNO (xop[0]) + n_bytes; ++r)
+ 	avr_asm_len (xval == const1_rtx
+ 		     ? "adc %0,__zero_reg__"
+ 		     : "sbc %0,__zero_reg__", &all_regs_rtx[r], plen, 1);
+       return;
+     }
+ 
    if (MINUS == code)
      xval = simplify_unary_operation (NEG, imode, xval, imode);
  
diff -Nrcpad gcc-17-20260628/gcc/config/avr/avr.md gcc-17-20260705/gcc/config/avr/avr.md
*** gcc-17-20260628/gcc/config/avr/avr.md	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/avr/avr.md	Sun Jul  5 22:32:07 2026
***************
*** 1817,1826 ****
  ;; "addhq3_clobber" "adduhq3_clobber"
  ;; "addha3_clobber" "adduha3_clobber"
  (define_insn_and_split "add<mode>3_clobber"
!   [(set (match_operand:ALL2 0 "register_operand"            "=!w    ,d    ,r")
!         (plus:ALL2 (match_operand:ALL2 1 "register_operand"  "%0    ,0    ,0")
!                    (match_operand:ALL2 2 "const_operand"     "IJ YIJ,n Ynn,n Ynn")))
!    (clobber (match_scratch:QI 3                             "=X     ,X    ,&d"))]
    ""
    "#"
    "&& reload_completed"
--- 1817,1826 ----
  ;; "addhq3_clobber" "adduhq3_clobber"
  ;; "addha3_clobber" "adduha3_clobber"
  (define_insn_and_split "add<mode>3_clobber"
!   [(set (match_operand:ALL2 0 "register_operand"            "=!w    ,d    ,*l     ,r")
!         (plus:ALL2 (match_operand:ALL2 1 "register_operand"  "%0    ,0    ,0      ,0")
!                    (match_operand:ALL2 2 "const_operand"     "IJ YIJ,n Ynn,Y01 Ym1,n Ynn")))
!    (clobber (match_scratch:QI 3                             "=X     ,X    ,X      ,&d"))]
    ""
    "#"
    "&& reload_completed"
***************
*** 1831,1840 ****
  ;; "*addhq3_clobber"  "*adduhq3_clobber"
  ;; "*addha3_clobber"  "*adduha3_clobber"
  (define_insn "*add<mode>3_clobber"
!   [(set (match_operand:ALL2 0 "register_operand"            "=!w    ,d    ,r")
!         (plus:ALL2 (match_operand:ALL2 1 "register_operand"  "%0    ,0    ,0")
!                    (match_operand:ALL2 2 "const_operand"     "IJ YIJ,n Ynn,n Ynn")))
!    (clobber (match_scratch:QI 3                             "=X     ,X    ,&d"))
     (clobber (reg:CC REG_CC))]
    "reload_completed"
    {
--- 1831,1840 ----
  ;; "*addhq3_clobber"  "*adduhq3_clobber"
  ;; "*addha3_clobber"  "*adduha3_clobber"
  (define_insn "*add<mode>3_clobber"
!   [(set (match_operand:ALL2 0 "register_operand"            "=!w    ,d    ,*l     ,r")
!         (plus:ALL2 (match_operand:ALL2 1 "register_operand"  "%0    ,0    ,0      ,0")
!                    (match_operand:ALL2 2 "const_operand"     "IJ YIJ,n Ynn,Y01 Ym1,n Ynn")))
!    (clobber (match_scratch:QI 3                             "=X     ,X    ,X      ,&d"))
     (clobber (reg:CC REG_CC))]
    "reload_completed"
    {
***************
*** 1848,1857 ****
  ;; "addsq3" "addusq3"
  ;; "addsa3" "addusa3"
  (define_insn_and_split "add<mode>3"
!   [(set (match_operand:ALL4 0 "register_operand"          "=??r,d ,r")
!         (plus:ALL4 (match_operand:ALL4 1 "register_operand" "%0,0 ,0")
!                    (match_operand:ALL4 2 "nonmemory_operand" "r,i ,n Ynn")))
!    (clobber (match_scratch:QI 3                             "=X,X ,&d"))]
    ""
    "#"
    "&& reload_completed"
--- 1848,1857 ----
  ;; "addsq3" "addusq3"
  ;; "addsa3" "addusa3"
  (define_insn_and_split "add<mode>3"
!   [(set (match_operand:ALL4 0 "register_operand"          "=??r,d ,*r     ,r")
!         (plus:ALL4 (match_operand:ALL4 1 "register_operand" "%0,0 ,0      ,0")
!                    (match_operand:ALL4 2 "nonmemory_operand" "r,i ,Y01 Ym1,n Ynn")))
!    (clobber (match_scratch:QI 3                             "=X,X ,X      ,&d"))]
    ""
    "#"
    "&& reload_completed"
***************
*** 1859,1868 ****
    { DONE_ADD_CCC })
  
  (define_insn "*add<mode>3"
!   [(set (match_operand:ALL4 0 "register_operand"          "=??r,d ,r")
!         (plus:ALL4 (match_operand:ALL4 1 "register_operand" "%0,0 ,0")
!                    (match_operand:ALL4 2 "nonmemory_operand" "r,i ,n Ynn")))
!    (clobber (match_scratch:QI 3                             "=X,X ,&d"))
     (clobber (reg:CC REG_CC))]
    "reload_completed"
    {
--- 1859,1868 ----
    { DONE_ADD_CCC })
  
  (define_insn "*add<mode>3"
!   [(set (match_operand:ALL4 0 "register_operand"          "=??r,d ,*r     ,r")
!         (plus:ALL4 (match_operand:ALL4 1 "register_operand" "%0,0 ,0      ,0")
!                    (match_operand:ALL4 2 "nonmemory_operand" "r,i ,Y01 Ym1,n Ynn")))
!    (clobber (match_scratch:QI 3                             "=X,X ,X      ,&d"))
     (clobber (reg:CC REG_CC))]
    "reload_completed"
    {
***************
*** 1951,1960 ****
  
  
  (define_insn_and_split "addpsi3"
!   [(set (match_operand:PSI 0 "register_operand"         "=??r,d ,d,r")
!         (plus:PSI (match_operand:PSI 1 "register_operand" "%0,0 ,0,0")
!                   (match_operand:PSI 2 "nonmemory_operand" "r,s ,n,n")))
!    (clobber (match_scratch:QI 3                           "=X,X ,X,&d"))]
    ""
    "#"
    "&& reload_completed"
--- 1951,1960 ----
  
  
  (define_insn_and_split "addpsi3"
!   [(set (match_operand:PSI 0 "register_operand"         "=??r,d ,d,*r     ,r")
!         (plus:PSI (match_operand:PSI 1 "register_operand" "%0,0 ,0,0      ,0")
!                   (match_operand:PSI 2 "nonmemory_operand" "r,s ,n,Y01 Ym1,n")))
!    (clobber (match_scratch:QI 3                           "=X,X ,X,X      ,&d"))]
    ""
    "#"
    "&& reload_completed"
***************
*** 1962,1971 ****
    { DONE_ADD_CCC })
  
  (define_insn "*addpsi3"
!   [(set (match_operand:PSI 0 "register_operand"         "=??r,d ,d,r")
!         (plus:PSI (match_operand:PSI 1 "register_operand" "%0,0 ,0,0")
!                   (match_operand:PSI 2 "nonmemory_operand" "r,s ,n,n")))
!    (clobber (match_scratch:QI 3                           "=X,X ,X,&d"))
     (clobber (reg:CC REG_CC))]
    "reload_completed"
    {
--- 1962,1971 ----
    { DONE_ADD_CCC })
  
  (define_insn "*addpsi3"
!   [(set (match_operand:PSI 0 "register_operand"         "=??r,d ,d,*r     ,r")
!         (plus:PSI (match_operand:PSI 1 "register_operand" "%0,0 ,0,0      ,0")
!                   (match_operand:PSI 2 "nonmemory_operand" "r,s ,n,Y01 Ym1,n")))
!    (clobber (match_scratch:QI 3                           "=X,X ,X,X      ,&d"))
     (clobber (reg:CC REG_CC))]
    "reload_completed"
    {
diff -Nrcpad gcc-17-20260628/gcc/config/darwin.cc gcc-17-20260705/gcc/config/darwin.cc
*** gcc-17-20260628/gcc/config/darwin.cc	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/darwin.cc	Sun Jul  5 22:32:07 2026
*************** darwin_objc2_section (tree decl ATTRIBUT
*** 1530,1536 ****
  
    objc_metadata_seen = 1;
  
!   if (base == data_section)
      base = darwin_sections[objc2_metadata_section];
  
    /* Most of the OBJC2 META-data end up in the base section, so check it
--- 1530,1536 ----
  
    objc_metadata_seen = 1;
  
!   if (base == data_section || base == darwin_sections[const_data_section])
      base = darwin_sections[objc2_metadata_section];
  
    /* Most of the OBJC2 META-data end up in the base section, so check it
*************** darwin_label_is_anonymous_local_objc_nam
*** 2041,2046 ****
--- 2041,2048 ----
    p += 6;
    if (startswith ((const char *)p, "ClassRef"))
      return false;
+   else if (startswith ((const char *)p, "ClassList"))
+     return false;
    else if (startswith ((const char *)p, "SelRef"))
      return false;
    else if (startswith ((const char *)p, "Category"))
*************** darwin_file_end (void)
*** 3188,3208 ****
      {
        unsigned int flags = 0;
        if (flag_objc_abi >= 2)
! 	{
! 	  flags = 16;
!           switch_to_section (darwin_sections[objc2_image_info_section]);
! 	}
        else
  	switch_to_section (darwin_sections[objc_image_info_section]);
  
        ASM_OUTPUT_ALIGN (asm_out_file, 2);
        fputs ("L_OBJC_ImageInfo:\n", asm_out_file);
  
        flags |= (flag_replace_objc_classes && classes_seen) ? 1 : 0;
        flags |= flag_objc_gc ? 2 : 0;
  
        fprintf (asm_out_file, "\t.long\t0\n\t.long\t%u\n", flags);
!      }
  
    machopic_finish (asm_out_file);
    if (flag_apple_kext)
--- 3190,3216 ----
      {
        unsigned int flags = 0;
        if (flag_objc_abi >= 2)
! 	switch_to_section (darwin_sections[objc2_image_info_section]);
        else
  	switch_to_section (darwin_sections[objc_image_info_section]);
  
        ASM_OUTPUT_ALIGN (asm_out_file, 2);
        fputs ("L_OBJC_ImageInfo:\n", asm_out_file);
  
+       /* Bit 0 - Fix and continue (no longer supported by clang).  */
        flags |= (flag_replace_objc_classes && classes_seen) ? 1 : 0;
+       /* Bit 1 - ObjC "hybrid" GC.  */
        flags |= flag_objc_gc ? 2 : 0;
+       /* Bit 2 - Objc GC only.  */
+       /* Bit 3 - is reserved for dyld.  */
+       /* Bit 4 - is for signed pointers, we cannot yet implement.
+ 	 The original meaning _CorrectedSynthesize has been replaced.  */
+       /* Bit 5 - is built for a simulator (not relevant yet).  */
+       /* Bit 6 - indicates we are generating class properties.  Our code-
+ 	 gen is not yet suited to this.  */
  
        fprintf (asm_out_file, "\t.long\t0\n\t.long\t%u\n", flags);
!     }
  
    machopic_finish (asm_out_file);
    if (flag_apple_kext)
diff -Nrcpad gcc-17-20260628/gcc/config/darwin.h gcc-17-20260705/gcc/config/darwin.h
*** gcc-17-20260628/gcc/config/darwin.h	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/darwin.h	Sun Jul  5 22:32:07 2026
*************** extern GTY(()) int darwin_ms_struct;
*** 663,683 ****
  #define ASM_MMACOSX_VERSION_MIN_SPEC " %<asm_macosx_version_min=* "
  #endif
  
- #if HAVE_GNU_AS
- /* The options are added in gcc.cc for this case.  */
- #define ASM_OPTIONS ""
- #else
- /* When we detect that we're cctools or llvm as, we need to insert the right
-    additional options.  Actually, currently these are the same as GAS.  */
- #define ASM_OPTIONS "%{v} %{w:-W} %{I*}"
- #endif
- 
  #define AS_NEEDS_DASH_FOR_PIPED_INPUT
  
  /* Default Darwin ASM_SPEC, very simple. */
  #define ASM_SPEC \
  "%{static} -arch %(darwin_arch) " \
! ASM_OPTIONS ASM_MMACOSX_VERSION_MIN_SPEC
  
  #define ASM_DEBUG_SPEC  ""
  #undef  ASM_DEBUG_OPTION_SPEC
--- 663,674 ----
  #define ASM_MMACOSX_VERSION_MIN_SPEC " %<asm_macosx_version_min=* "
  #endif
  
  #define AS_NEEDS_DASH_FOR_PIPED_INPUT
  
  /* Default Darwin ASM_SPEC, very simple. */
  #define ASM_SPEC \
  "%{static} -arch %(darwin_arch) " \
! ASM_MMACOSX_VERSION_MIN_SPEC
  
  #define ASM_DEBUG_SPEC  ""
  #undef  ASM_DEBUG_OPTION_SPEC
diff -Nrcpad gcc-17-20260628/gcc/config/gcn/gcn.h gcc-17-20260705/gcc/config/gcn/gcn.h
*** gcc-17-20260628/gcc/config/gcn/gcn.h	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/gcn/gcn.h	Sun Jul  5 22:32:07 2026
*************** extern const struct gcn_device_def {
*** 84,89 ****
--- 84,92 ----
    {"arch", "%{!march=*:-march=%(VALUE)}" }, \
    {"tune", "%{!mtune=*:-mtune=%(VALUE)}" }
  
+ /* Assembler doesn't support '-v' option.  */
+ #define ASM_V_SPEC ""
+ 
  /* Default target_flags if no switches specified.  */
  #ifndef TARGET_DEFAULT
  #define TARGET_DEFAULT 0
diff -Nrcpad gcc-17-20260628/gcc/config/i386/amxtf32intrin.h gcc-17-20260705/gcc/config/i386/amxtf32intrin.h
*** gcc-17-20260628/gcc/config/i386/amxtf32intrin.h	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/i386/amxtf32intrin.h	Sun Jul  5 22:32:07 2026
***************
*** 16,49 ****
     see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
     <http://www.gnu.org/licenses/>.  */
  
! #if !defined _IMMINTRIN_H_INCLUDED
! #error "Never use <amxtf32intrin.h> directly; include <immintrin.h> instead."
! #endif
! 
! #ifndef _AMXTF32INTRIN_H_INCLUDED
! #define _AMXTF32INTRIN_H_INCLUDED
! 
! #if !defined(__AMX_TF32__)
! #pragma GCC push_options
! #pragma GCC target("amx-tf32")
! #define __DISABLE_AMX_TF32__
! #endif /* __AMX_TF32__ */
! 
! #if defined(__x86_64__)
! #define _tile_mmultf32ps_internal(src1_dst,src2,src3)			\
!   __asm__ volatile						    	\
!   ("{tmmultf32ps\t%%tmm%c[_src3], %%tmm%c[_src2], %%tmm%c[_src1_dst]	\
!     |tmmultf32ps\ttmm%c[_src1_dst], tmm%c[_src2], tmm%c[_src3]}"	\
!     :: [_src1_dst]"i"(src1_dst), [_src2]"i"(src2), [_src3]"i"(src3))
! 
! #define _tile_mmultf32ps(src1_dst,src2,src3)				\
!   _tile_mmultf32ps_internal (src1_dst, src2, src3)
! 
! #endif
! 
! #ifdef __DISABLE_AMX_TF32__
! #undef __DISABLE_AMX_TF32__
! #pragma GCC pop_options
! #endif /* __DISABLE_AMX_TF32__ */
! 
! #endif /* _AMXTF32INTRIN_H_INCLUDED */
--- 16,19 ----
     see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
     <http://www.gnu.org/licenses/>.  */
  
! #error "AMX-TF32 support has been removed since GCC 17."
diff -Nrcpad gcc-17-20260628/gcc/config/i386/cpuid.h gcc-17-20260705/gcc/config/i386/cpuid.h
*** gcc-17-20260628/gcc/config/i386/cpuid.h	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/i386/cpuid.h	Sun Jul  5 22:32:07 2026
***************
*** 173,179 ****
  /* AMX sub leaf (%eax == 0x1e, %ecx == 1) */
  /* %eax */
  #define bit_AMX_FP8	(1 << 4)
- #define bit_AMX_TF32	(1 << 6)
  #define bit_AMX_AVX512  (1 << 7)
  #define bit_AMX_MOVRS	(1 << 8)
  
--- 173,178 ----
diff -Nrcpad gcc-17-20260628/gcc/config/i386/darwin.h gcc-17-20260705/gcc/config/i386/darwin.h
*** gcc-17-20260628/gcc/config/i386/darwin.h	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/i386/darwin.h	Sun Jul  5 22:32:07 2026
*************** along with GCC; see the file COPYING3.
*** 105,111 ****
  #undef ASM_SPEC
  #define ASM_SPEC \
  "%{static} -arch %(darwin_arch) " \
!  ASM_OPTIONS ASM_MMACOSX_VERSION_MIN_SPEC EXTRA_ASM_OPTS \
  "%{!force_cpusubtype_ALL:-force_cpusubtype_ALL} "
  
  #undef ENDFILE_SPEC
--- 105,111 ----
  #undef ASM_SPEC
  #define ASM_SPEC \
  "%{static} -arch %(darwin_arch) " \
!  ASM_MMACOSX_VERSION_MIN_SPEC EXTRA_ASM_OPTS \
  "%{!force_cpusubtype_ALL:-force_cpusubtype_ALL} "
  
  #undef ENDFILE_SPEC
diff -Nrcpad gcc-17-20260628/gcc/config/i386/i386-c.cc gcc-17-20260705/gcc/config/i386/i386-c.cc
*** gcc-17-20260628/gcc/config/i386/i386-c.cc	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/i386/i386-c.cc	Sun Jul  5 22:32:07 2026
*************** ix86_target_macros_internal (HOST_WIDE_I
*** 782,789 ****
      def_or_undef (parse_in, "__AVX10_2__");
    if (isa_flag2 & OPTION_MASK_ISA2_AMX_AVX512)
      def_or_undef (parse_in, "__AMX_AVX512__");
-   if (isa_flag2 & OPTION_MASK_ISA2_AMX_TF32)
-     def_or_undef (parse_in, "__AMX_TF32__");
    if (isa_flag2 & OPTION_MASK_ISA2_AMX_FP8)
      def_or_undef (parse_in, "__AMX_FP8__");
    if (isa_flag2 & OPTION_MASK_ISA2_MOVRS)
--- 782,787 ----
diff -Nrcpad gcc-17-20260628/gcc/config/i386/i386-expand.cc gcc-17-20260705/gcc/config/i386/i386-expand.cc
*** gcc-17-20260628/gcc/config/i386/i386-expand.cc	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/i386/i386-expand.cc	Sun Jul  5 22:32:07 2026
*************** ix86_expand_set_or_movmem (rtx operands[
*** 10630,10636 ****
  	probable_max_size = INTVAL (probable_max_size_exp);
        if (CONST_INT_P (expected_size_exp))
  	expected_size = INTVAL (expected_size_exp);
!      }
  
    /* Make sure we don't need to care about overflow later on.  */
    if (count > (HOST_WIDE_INT_1U << 30))
--- 10630,10641 ----
  	probable_max_size = INTVAL (probable_max_size_exp);
        if (CONST_INT_P (expected_size_exp))
  	expected_size = INTVAL (expected_size_exp);
! 
!       /* NB: This assert may fail without the fixes for
! 	 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125977
!        */
!       gcc_assert (min_size != max_size);
!     }
  
    /* Make sure we don't need to care about overflow later on.  */
    if (count > (HOST_WIDE_INT_1U << 30))
*************** ix86_expand_set_or_movmem (rtx operands[
*** 10759,10767 ****
  			     nullptr, count_mode, 1,
  			     more_2x_vec_label);
  
!   if (min_size == 0 || min_size <= 2 * move_max)
      {
!       /* Size >= MOVE_MAX and size <= 2 * MOVE_MAX.  */
        ix86_expand_n_overlapping_move_set_or_movmem (dst, src,
  						    memset_vals_p,
  						    destreg, srcreg,
--- 10764,10772 ----
  			     nullptr, count_mode, 1,
  			     more_2x_vec_label);
  
!   if (max_size != 1 && (min_size == 0 || min_size <= 2 * move_max))
      {
!       /* Max size != 1, size >= MOVE_MAX and size <= 2 * MOVE_MAX.  */
        ix86_expand_n_overlapping_move_set_or_movmem (dst, src,
  						    memset_vals_p,
  						    destreg, srcreg,
diff -Nrcpad gcc-17-20260628/gcc/config/i386/i386-features.cc gcc-17-20260705/gcc/config/i386/i386-features.cc
*** gcc-17-20260628/gcc/config/i386/i386-features.cc	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/i386/i386-features.cc	Sun Jul  5 22:32:07 2026
*************** general_scalar_chain::compute_convert_ga
*** 863,868 ****
--- 863,878 ----
  		}
  	      break;
  
+ 	    case ZERO_EXTEND:
+ 	      /* mov eax (6 bytes) vs movd xmm0 (8 bytes). */
+ 	      /* mov eax; xor edx,edx (7 bytes).  */
+ 	      if (speed_p)
+ 		igain += COSTS_N_INSNS (ix86_cost->int_load[2]
+ 					- ix86_cost->sse_load[0]) / 2;
+ 	      else
+ 		igain += COSTS_N_BYTES (TARGET_64BIT ? -2 : -1);
+ 	      break;
+ 
  	    default:
  	      gcc_unreachable ();
  	    }
*************** general_scalar_chain::convert_insn (rtx_
*** 1588,1593 ****
--- 1598,1608 ----
  	}
        break;
  
+     case ZERO_EXTEND:
+       /* *zero_extendsidi2 becomes *vec_setv2di_0_zero_extendsi_1.  */
+       src = gen_rtx_VEC_CONCAT (V2DImode, src, const0_rtx);
+       break;
+ 
      default:
        gcc_unreachable ();
      }
*************** general_scalar_to_vector_candidate_p (rt
*** 2499,2504 ****
--- 2514,2526 ----
  	     && XVECLEN (XEXP (src, 1), 0) == 1
  	     && CONST_INT_P (XVECEXP (XEXP (src, 1), 0, 0));
  
+     case ZERO_EXTEND:
+       /* *zero_extendsidi2 becomes *vec_setv2di_0_zero_extendsi_1.  */
+       return mode == DImode
+ 	     && REG_P (dst)
+ 	     && GET_MODE (XEXP (src, 0)) == SImode
+ 	     && MEM_P (XEXP (src, 0));
+ 
      default:
        return false;
      }
diff -Nrcpad gcc-17-20260628/gcc/config/i386/i386-isa.def gcc-17-20260705/gcc/config/i386/i386-isa.def
*** gcc-17-20260628/gcc/config/i386/i386-isa.def	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/i386/i386-isa.def	Sun Jul  5 22:32:07 2026
*************** DEF_PTA(USER_MSR)
*** 121,127 ****
  DEF_PTA(AVX10_1)
  DEF_PTA(AVX10_2)
  DEF_PTA(AMX_AVX512)
- DEF_PTA(AMX_TF32)
  DEF_PTA(AMX_FP8)
  DEF_PTA(MOVRS)
  DEF_PTA(AMX_MOVRS)
--- 121,126 ----
diff -Nrcpad gcc-17-20260628/gcc/config/i386/i386-options.cc gcc-17-20260705/gcc/config/i386/i386-options.cc
*** gcc-17-20260628/gcc/config/i386/i386-options.cc	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/i386/i386-options.cc	Sun Jul  5 22:32:07 2026
*************** static struct ix86_target_opts isa2_opts
*** 271,277 ****
    { "-mavx10.1",	OPTION_MASK_ISA2_AVX10_1 },
    { "-mavx10.2",	OPTION_MASK_ISA2_AVX10_2 },
    { "-mamx-avx512",	OPTION_MASK_ISA2_AMX_AVX512 },
-   { "-mamx-tf32",	OPTION_MASK_ISA2_AMX_TF32 },
    { "-mamx-fp8", 	OPTION_MASK_ISA2_AMX_FP8 },
    { "-mmovrs",		OPTION_MASK_ISA2_MOVRS },
    { "-mamx-movrs",	OPTION_MASK_ISA2_AMX_MOVRS },
--- 271,276 ----
*************** ix86_valid_target_attribute_inner_p (tre
*** 1136,1142 ****
      IX86_ATTR_ISA ("avx10.1", OPT_mavx10_1),
      IX86_ATTR_ISA ("avx10.2", OPT_mavx10_2),
      IX86_ATTR_ISA ("amx-avx512", OPT_mamx_avx512),
-     IX86_ATTR_ISA ("amx-tf32", OPT_mamx_tf32),
      IX86_ATTR_ISA ("amx-fp8", OPT_mamx_fp8),
      IX86_ATTR_ISA ("movrs", OPT_mmovrs),
      IX86_ATTR_ISA ("amx-movrs", OPT_mamx_movrs),
--- 1135,1140 ----
diff -Nrcpad gcc-17-20260628/gcc/config/i386/i386.cc gcc-17-20260705/gcc/config/i386/i386.cc
*** gcc-17-20260628/gcc/config/i386/i386.cc	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/i386/i386.cc	Sun Jul  5 22:32:07 2026
*************** public:
*** 26168,26174 ****
    void finish_cost (const vector_costs *) override;
    bool better_main_loop_than_p (const vector_costs *) const override;
    bool better_epilogue_loop_than_p (const vector_costs *other,
! 				    loop_vec_info main_loop) const;
  
  private:
  
--- 26168,26174 ----
    void finish_cost (const vector_costs *) override;
    bool better_main_loop_than_p (const vector_costs *) const override;
    bool better_epilogue_loop_than_p (const vector_costs *other,
! 				    loop_vec_info main_loop) const override;
  
  private:
  
diff -Nrcpad gcc-17-20260628/gcc/config/i386/i386.h gcc-17-20260705/gcc/config/i386/i386.h
*** gcc-17-20260628/gcc/config/i386/i386.h	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/i386/i386.h	Sun Jul  5 22:32:07 2026
*************** constexpr wide_int_bitmask PTA_PANTHERLA
*** 2506,2513 ****
  constexpr wide_int_bitmask PTA_DIAMONDRAPIDS = PTA_GRANITERAPIDS_D
    | PTA_AVXIFMA | PTA_AVXNECONVERT | PTA_AVXVNNIINT16 | PTA_AVXVNNIINT8
    | PTA_CMPCCXADD | PTA_SHA512 | PTA_SM3 | PTA_SM4 | PTA_AVX10_2
!   | PTA_APX_F | PTA_AMX_AVX512 | PTA_AMX_FP8 | PTA_AMX_TF32 | PTA_MOVRS
!   | PTA_AMX_MOVRS;
  constexpr wide_int_bitmask PTA_NOVALAKE = PTA_PANTHERLAKE | PTA_PREFETCHI
    | PTA_AVX512F | PTA_AVX512CD | PTA_AVX512VL | PTA_AVX512BW | PTA_AVX512DQ
    | PTA_AVX512VBMI | PTA_AVX512IFMA | PTA_AVX512VNNI | PTA_AVX512VBMI2
--- 2506,2512 ----
  constexpr wide_int_bitmask PTA_DIAMONDRAPIDS = PTA_GRANITERAPIDS_D
    | PTA_AVXIFMA | PTA_AVXNECONVERT | PTA_AVXVNNIINT16 | PTA_AVXVNNIINT8
    | PTA_CMPCCXADD | PTA_SHA512 | PTA_SM3 | PTA_SM4 | PTA_AVX10_2
!   | PTA_APX_F | PTA_AMX_AVX512 | PTA_AMX_FP8 | PTA_MOVRS | PTA_AMX_MOVRS;
  constexpr wide_int_bitmask PTA_NOVALAKE = PTA_PANTHERLAKE | PTA_PREFETCHI
    | PTA_AVX512F | PTA_AVX512CD | PTA_AVX512VL | PTA_AVX512BW | PTA_AVX512DQ
    | PTA_AVX512VBMI | PTA_AVX512IFMA | PTA_AVX512VNNI | PTA_AVX512VBMI2
diff -Nrcpad gcc-17-20260628/gcc/config/i386/i386.md gcc-17-20260705/gcc/config/i386/i386.md
*** gcc-17-20260628/gcc/config/i386/i386.md	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/i386/i386.md	Sun Jul  5 22:32:07 2026
***************
*** 6761,6770 ****
        if (TARGET_APX_NDD && <nf_applied>)
  	return "%{nf%} add{<imodesuffix>}\t{%2, %1, %0|%0, %1, %2}";
        else
! 	{
! 	  operands[3] = gen_rtx_PLUS (<MODE>mode, operands[1], operands[2]);
! 	  return "lea{<imodesuffix>}\t{%E3, %0|%0, %E3}";
! 	}
  
      case TYPE_INCDEC:
        if (operands[2] == const1_rtx)
--- 6761,6767 ----
        if (TARGET_APX_NDD && <nf_applied>)
  	return "%{nf%} add{<imodesuffix>}\t{%2, %1, %0|%0, %1, %2}";
        else
! 	return "#";
  
      case TYPE_INCDEC:
        if (operands[2] == const1_rtx)
***************
*** 7263,7268 ****
--- 7260,7270 ----
        operands[1] = gen_lowpart (<LEAMODE>mode, operands[1]);
        operands[2] = gen_lowpart (<LEAMODE>mode, operands[2]);
      }
+   else
+     /* *lea<mode> and *add<mode>_1_nf have the same pattern, try_split
+        refuses to split an insn into itself, so just request
+        a new recog which will match *lea<mode> which comes first.  */
+     INSN_CODE (curr_insn) = -1;
  })
  
  ;; Convert add to the lea pattern to avoid flags dependency.
***************
*** 20247,20252 ****
--- 20249,20289 ----
    if (GET_CODE (operands[5]) == EQ)
      std::swap (operands[3], operands[4]);
  })
+ 
+ ;; The same as above, but with operands[4] as const_int_operand.  A combine
+ ;; define_split cannot express the extra move needed to materialize the
+ ;; immediate into a register (it is limited to two insns), so use a
+ ;; define_insn_and_split that combine recognizes as a single insn.
+ (define_insn_and_split "*cmov_bt<SWI248:mode>"
+   [(set (match_operand:SWI248 0 "register_operand")
+ 	(if_then_else:SWI248
+ 	 (match_operator 5 "bt_comparison_operator"
+ 	  [(zero_extract:SWI48
+ 	    (match_operand:SWI48 1 "nonimmediate_operand")
+ 	    (const_int 1)
+ 	    (match_operand:QI 2 "register_operand"))
+ 	   (const_int 0)])
+ 	 (match_operand:SWI248 3 "nonimmediate_operand")
+ 	 (match_operand:SWI248 4 "const_int_operand")))
+    (clobber (reg:CC FLAGS_REG))]
+   "TARGET_USE_BT && TARGET_CMOVE
+    && ix86_pre_reload_split ()"
+   "#"
+   "&& 1"
+   [(set (reg:CCC FLAGS_REG)
+ 	(compare:CCC
+ 	 (const_int 0)
+ 	 (zero_extract:SWI48 (match_dup 1) (const_int 1) (match_dup 2))))
+    (set (match_dup 0)
+ 	(if_then_else:SWI248 (ltu (reg:CCC FLAGS_REG) (const_int 0))
+ 			     (match_dup 3)
+ 			     (match_dup 4)))]
+ {
+   operands[4] = force_reg (<SWI248:MODE>mode, operands[4]);
+ 
+   if (GET_CODE (operands[5]) == EQ)
+     std::swap (operands[3], operands[4]);
+ })
  
  ;; Help combine recognize bt followed by setc
  (define_insn_and_split "*bt<mode>_setcqi"
diff -Nrcpad gcc-17-20260628/gcc/config/i386/i386.opt gcc-17-20260705/gcc/config/i386/i386.opt
*** gcc-17-20260628/gcc/config/i386/i386.opt	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/i386/i386.opt	Sun Jul  5 22:32:07 2026
*************** AVX10.1 and AVX10.2 built-in functions a
*** 1368,1378 ****
  mamx-avx512
  Target Mask(ISA2_AMX_AVX512) Var(ix86_isa_flags2) Save
  Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2,
! AVX10.1, AVX10.2 and AMX-AVX512 built-in functions and code generation.
! 
! mamx-tf32
! Target Mask(ISA2_AMX_TF32) Var(ix86_isa_flags2) Save
! Support AMX-TF32 built-in functions and code generation.
  
  mamx-fp8
  Target Mask(ISA2_AMX_FP8) Var(ix86_isa_flags2) Save
--- 1368,1374 ----
  mamx-avx512
  Target Mask(ISA2_AMX_AVX512) Var(ix86_isa_flags2) Save
  Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2,
! AVX512F and AMX-AVX512 built-in functions and code generation.
  
  mamx-fp8
  Target Mask(ISA2_AMX_FP8) Var(ix86_isa_flags2) Save
diff -Nrcpad gcc-17-20260628/gcc/config/i386/i386.opt.urls gcc-17-20260705/gcc/config/i386/i386.opt.urls
*** gcc-17-20260628/gcc/config/i386/i386.opt.urls	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/i386/i386.opt.urls	Sun Jul  5 22:32:07 2026
*************** UrlSuffix(gcc/x86-Options.html#index-mav
*** 620,628 ****
  mamx-avx512
  UrlSuffix(gcc/x86-Options.html#index-mamx-avx512)
  
- mamx-tf32
- UrlSuffix(gcc/x86-Options.html#index-mamx-tf32)
- 
  mamx-fp8
  UrlSuffix(gcc/x86-Options.html#index-mamx-fp8)
  
--- 620,625 ----
diff -Nrcpad gcc-17-20260628/gcc/config/i386/immintrin.h gcc-17-20260705/gcc/config/i386/immintrin.h
*** gcc-17-20260628/gcc/config/i386/immintrin.h	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/i386/immintrin.h	Sun Jul  5 22:32:07 2026
***************
*** 134,141 ****
  
  #include <amxavx512intrin.h>
  
- #include <amxtf32intrin.h>
- 
  #include <amxfp8intrin.h>
  
  #include <prfchwintrin.h>
--- 134,139 ----
diff -Nrcpad gcc-17-20260628/gcc/config/i386/sse.md gcc-17-20260705/gcc/config/i386/sse.md
*** gcc-17-20260628/gcc/config/i386/sse.md	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/i386/sse.md	Sun Jul  5 22:32:07 2026
***************
*** 4611,4616 ****
--- 4611,4633 ----
     (set_attr "prefix" "orig,vex")
     (set_attr "mode" "<MODE>")])
  
+ (define_insn "*<sse>_imaskcmp<mode>3_comm"
+   [(set (match_operand:<sseintvecmode> 0 "register_operand" "=x,x")
+ 	(match_operator:<sseintvecmode> 3 "sse_comparison_operator"
+ 	  [(match_operand:VF_128_256 1 "register_operand" "%0,x")
+ 	   (match_operand:VF_128_256 2 "vector_operand" "xBm,xjm")]))]
+   "TARGET_SSE
+    && GET_RTX_CLASS (GET_CODE (operands[3])) == RTX_COMM_COMPARE"
+   "@
+    cmp%D3<ssemodesuffix>\t{%2, %0|%0, %2}
+    vcmp%D3<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}"
+   [(set_attr "isa" "noavx,avx")
+    (set_attr "addr" "*,gpr16")
+    (set_attr "type" "ssecmp")
+    (set_attr "length_immediate" "1")
+    (set_attr "prefix" "orig,vex")
+    (set_attr "mode" "<MODE>")])
+ 
  (define_insn "<sse>_maskcmp<mode>3"
    [(set (match_operand:VF_128_256 0 "register_operand" "=x,x")
  	(match_operator:VF_128_256 3 "sse_comparison_operator"
***************
*** 16204,16214 ****
  	  (match_dup 0)
  	  (match_operand:QI 2 "register_operand" "Yk")))]
    "TARGET_AVX512VL"
! {
!   if (GET_MODE_SIZE (GET_MODE_INNER (<MODE>mode)) == 4)
!     return "vpmov<trunsuffix><pmov_suff_4>\t{%1, %0%{%2%}|%0%{%2%}, %1}";
!   return "vpmov<trunsuffix><pmov_suff_4>\t{%1, %0%{%2%}|%0%{%2%}, %1}";
! }
    [(set_attr "type" "ssemov")
     (set_attr "memory" "store")
     (set_attr "prefix" "evex")
--- 16221,16227 ----
  	  (match_dup 0)
  	  (match_operand:QI 2 "register_operand" "Yk")))]
    "TARGET_AVX512VL"
!   "vpmov<trunsuffix><pmov_suff_4>\t{%1, %0%{%2%}|%0%{%2%}, %1}"
    [(set_attr "type" "ssemov")
     (set_attr "memory" "store")
     (set_attr "prefix" "evex")
diff -Nrcpad gcc-17-20260628/gcc/config/ia64/hpux.h gcc-17-20260705/gcc/config/ia64/hpux.h
*** gcc-17-20260628/gcc/config/ia64/hpux.h	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/ia64/hpux.h	Sun Jul  5 22:32:07 2026
*************** do {							\
*** 62,71 ****
  #undef  ASM_EXTRA_SPEC
  #define ASM_EXTRA_SPEC "%{milp32:-milp32} %{mlp64:-mlp64}"
  
- #ifndef HAVE_GNU_AS
- #define AS_NEEDS_DASH_FOR_PIPED_INPUT
- #endif
- 
  #ifndef CROSS_DIRECTORY_STRUCTURE
  #undef MD_EXEC_PREFIX
  #define MD_EXEC_PREFIX "/usr/ccs/bin/"
--- 62,67 ----
diff -Nrcpad gcc-17-20260628/gcc/config/loongarch/loongarch.md gcc-17-20260705/gcc/config/loongarch/loongarch.md
*** gcc-17-20260628/gcc/config/loongarch/loongarch.md	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/loongarch/loongarch.md	Sun Jul  5 22:32:07 2026
***************
*** 5057,5075 ****
    ""
  {
    loongarch_output_asm_load_canary (operands[2], operands[1], NULL_RTX);
!   output_asm_insn (which_alternative ? "stptr.d\t%2,%0" : "st.d\t%2,%0",
  		   operands);
    return "ori\t%2,$r0,0";
  }
    [(set_attr "type" "store")
!    (set_attr "length" "20")])
  
! (define_insn "@stack_protect_combined_set_extreme_<mode>"
!   [(set (match_operand:P 0 "memory_operand" "=m,ZC")
!         (unspec:P [(mem:P (match_operand:P 1 "ssp_operand"))] UNSPEC_SSP))
!    (set (match_scratch:P 2 "=&r,&r") (const_int 0))
!    (set (match_scratch:P 3 "=&r,&r") (const_int 0))]
!   ""
  {
    loongarch_output_asm_load_canary (operands[2], operands[1], operands[3]);
    output_asm_insn (which_alternative ? "stptr.d\t%2,%0" : "st.d\t%2,%0",
--- 5057,5081 ----
    ""
  {
    loongarch_output_asm_load_canary (operands[2], operands[1], NULL_RTX);
!   output_asm_insn (which_alternative ? "stptr.d\t%2,%0"
! 				     : "st.<d>\t%2,%0",
  		   operands);
    return "ori\t%2,$r0,0";
  }
    [(set_attr "type" "store")
!    (set_attr "length" "20")
!    (set (attr "enabled")
! 	(if_then_else
! 	  (match_test "!which_alternative || TARGET_64BIT")
! 	  (const_string "yes")
! 	  (const_string "no")))])
  
! (define_insn "stack_protect_combined_set_extreme"
!   [(set (match_operand:DI 0 "memory_operand" "=m,ZC")
!         (unspec:DI [(mem:DI (match_operand:DI 1 "ssp_operand"))] UNSPEC_SSP))
!    (set (match_scratch:DI 2 "=&r,&r") (const_int 0))
!    (set (match_scratch:DI 3 "=&r,&r") (const_int 0))]
!   "TARGET_ABI_LP64"
  {
    loongarch_output_asm_load_canary (operands[2], operands[1], operands[3]);
    output_asm_insn (which_alternative ? "stptr.d\t%2,%0" : "st.d\t%2,%0",
***************
*** 5092,5103 ****
    rtx t = (which_alternative >= 2 ? operands[0] : NULL_RTX);
    loongarch_output_asm_load_canary (operands[3], operands[2], t);
    output_asm_insn ((which_alternative & 1) ? "ldptr.d\t%0,%1"
! 					   : "ld.d\t%0,%1",
  		   operands);
    return "xor\t%0,%0,%3\n\tori\t%3,$r0,0";
  }
    [(set_attr "type" "load,load,load,load")
!    (set_attr "length" "24,24,36,36")])
  
  (define_expand "stack_protect_combined_set"
    [(match_operand 0 "memory_operand")
--- 5098,5114 ----
    rtx t = (which_alternative >= 2 ? operands[0] : NULL_RTX);
    loongarch_output_asm_load_canary (operands[3], operands[2], t);
    output_asm_insn ((which_alternative & 1) ? "ldptr.d\t%0,%1"
! 					   : "ld.<d>\t%0,%1",
  		   operands);
    return "xor\t%0,%0,%3\n\tori\t%3,$r0,0";
  }
    [(set_attr "type" "load,load,load,load")
!    (set_attr "length" "24,24,36,36")
!    (set (attr "enabled")
! 	(if_then_else
! 	  (match_test "!(which_alternative & 1) || TARGET_64BIT")
! 	  (const_string "yes")
! 	  (const_string "no")))])
  
  (define_expand "stack_protect_combined_set"
    [(match_operand 0 "memory_operand")
***************
*** 5105,5115 ****
    ""
  {
    rtx canary = XEXP (operands[1], 0);
!   auto fn = (ssp_normal_operand (canary, VOIDmode)
! 	     ? gen_stack_protect_combined_set_normal
! 	     : gen_stack_protect_combined_set_extreme);
! 
!   emit_insn (fn (Pmode, operands[0], canary));
    DONE;
  })
  
--- 5116,5127 ----
    ""
  {
    rtx canary = XEXP (operands[1], 0);
!   if (ssp_normal_operand (canary, VOIDmode))
!     emit_insn (gen_stack_protect_combined_set_normal (Pmode, operands[0],
! 						      canary));
!   else
!     emit_insn (gen_stack_protect_combined_set_extreme (operands[0],
! 						       canary));
    DONE;
  })
  
diff -Nrcpad gcc-17-20260628/gcc/config/loongarch/simd.md gcc-17-20260705/gcc/config/loongarch/simd.md
*** gcc-17-20260628/gcc/config/loongarch/simd.md	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/loongarch/simd.md	Sun Jul  5 22:32:07 2026
***************
*** 934,939 ****
--- 934,993 ----
    DONE;
  })
  
+ (define_expand "usdot_prod<wvec_half><mode>"
+   [(match_operand:<WVEC_HALF> 0 "register_operand")
+    (match_operand:IVEC	      1 "register_operand")
+    (match_operand:IVEC	      2 "register_operand")
+    (match_operand:<WVEC_HALF> 3 "reg_or_0_operand")]
+   ""
+ {
+   rtx *op = operands;
+ 
+   if (op[3] == CONST0_RTX (<WVEC_HALF>mode))
+     emit_insn (
+       gen_<simd_isa>_<x>vmulwev_<simdfmt_w>_<simdfmt>u_<simdfmt> (
+ 	op[0], op[1], op[2]));
+   else
+     emit_insn (
+       gen_<simd_isa>_<x>vmaddwev_<simdfmt_w>_<simdfmt>u_<simdfmt> (
+ 	op[0], op[3], op[1], op[2]));
+ 
+   emit_insn (
+     gen_<simd_isa>_<x>vmaddwod_<simdfmt_w>_<simdfmt>u_<simdfmt> (
+       op[0], op[0], op[1], op[2]));
+   DONE;
+ })
+ 
+ (define_expand "usdot_prod<wvec_quarter><mode>"
+   [(match_operand:<WVEC_QUARTER> 0 "register_operand")
+    (match_operand:IVEC_HB        1 "register_operand")
+    (match_operand:IVEC_HB        2 "register_operand")
+    (match_operand:<WVEC_QUARTER> 3 "reg_or_0_operand")]
+   ""
+ {
+   rtx *op = operands;
+   rtx res_mulev = gen_reg_rtx (<WVEC_HALF>mode);
+   rtx res_mulod = gen_reg_rtx (<WVEC_HALF>mode);
+   rtx res_addev = gen_reg_rtx (<WVEC_QUARTER>mode);
+   rtx res_addod = gen_reg_rtx (<WVEC_QUARTER>mode);
+   emit_insn (gen_<simd_isa>_<x>vmulwev_<simdfmt_w>_<simdfmt>u_<simdfmt>
+ 	      (res_mulev, op[1], op[2]));
+   emit_insn (gen_<simd_isa>_<x>vmulwod_<simdfmt_w>_<simdfmt>u_<simdfmt>
+ 	      (res_mulod, op[1], op[2]));
+   emit_insn (gen_<simd_isa>_<x>vhaddw_<simdfmt_qw>_<simdfmt_w>
+               (res_addev, res_mulev, res_mulev));
+   emit_insn (gen_<simd_isa>_<x>vhaddw_<simdfmt_qw>_<simdfmt_w>
+ 	      (res_addod, res_mulod, res_mulod));
+ 
+   rtx sum = gen_rtx_PLUS (<WVEC_QUARTER>mode, res_addev, res_addod);
+   if (op[3] == CONST0_RTX (<WVEC_QUARTER>mode))
+     emit_move_insn (op[0], sum);
+   else
+     emit_insn (gen_add<wvec_quarter>3 (
+ 		 op[0], force_reg (<WVEC_QUARTER>mode, sum), op[3]));
+   DONE;
+ })
+ 
  ; For "historical" reason we need a punned version of q_d variants.
  (define_mode_iterator DIVEC [(V2DI "ISA_HAS_LSX") (V4DI "ISA_HAS_LASX")])
  
diff -Nrcpad gcc-17-20260628/gcc/config/mips/mips.cc gcc-17-20260705/gcc/config/mips/mips.cc
*** gcc-17-20260628/gcc/config/mips/mips.cc	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/mips/mips.cc	Sun Jul  5 22:32:07 2026
*************** mips_output_function_epilogue (FILE *)
*** 12388,12394 ****
  static void
  mips_frame_barrier (void)
  {
!   emit_clobber (gen_frame_mem (BLKmode, stack_pointer_rtx));
  }
  
  
--- 12388,12394 ----
  static void
  mips_frame_barrier (void)
  {
!   emit_insn (gen_blockage ());
  }
  
  
diff -Nrcpad gcc-17-20260628/gcc/config/mips/mips.h gcc-17-20260705/gcc/config/mips/mips.h
*** gcc-17-20260628/gcc/config/mips/mips.h	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/mips/mips.h	Sun Jul  5 22:32:07 2026
*************** struct mips_cpu_info {
*** 1490,1495 ****
--- 1490,1496 ----
  %{mloongson-ext2} %{mno-loongson-ext2} \
  %{msmartmips} %{mno-smartmips} \
  %{mmt} %{mno-mt} \
+ %{mmxu} %{mno-mxu} \
  %{mfix-r5900} %{mno-fix-r5900} \
  %{mfix-rm7000} %{mno-fix-rm7000} \
  %{mfix-vr4120} %{mfix-vr4130} \
diff -Nrcpad gcc-17-20260628/gcc/config/mips/mips.opt gcc-17-20260705/gcc/config/mips/mips.opt
*** gcc-17-20260628/gcc/config/mips/mips.opt	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/mips/mips.opt	Sun Jul  5 22:32:07 2026
*************** mmt
*** 332,337 ****
--- 332,340 ----
  Target Var(TARGET_MT)
  Allow the use of MT instructions.
  
+ mmxu
+ Driver Target Undocumented
+ 
  mno-float
  Target RejectNegative Var(TARGET_NO_FLOAT) Condition(TARGET_SUPPORTS_NO_FLOAT)
  Prevent the use of all floating-point operations.
diff -Nrcpad gcc-17-20260628/gcc/config/nvptx/nvptx.h gcc-17-20260705/gcc/config/nvptx/nvptx.h
*** gcc-17-20260628/gcc/config/nvptx/nvptx.h	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/nvptx/nvptx.h	Sun Jul  5 22:32:07 2026
***************
*** 31,39 ****
  #define OPTION_DEFAULT_SPECS \
    { "arch", "%{!misa=*:-misa=%(VALUE)}" }, \
  
! /* Assembler supports '-v' option; handle similar to
!    '../../gcc.cc:asm_options', 'HAVE_GNU_AS'.  */
! #define ASM_SPEC "%{v}"
  
  #define STARTFILE_SPEC "%{mmainkernel:crt0.o%s}"
  
--- 31,38 ----
  #define OPTION_DEFAULT_SPECS \
    { "arch", "%{!misa=*:-misa=%(VALUE)}" }, \
  
! /* Assembler only supports '-v' option.  */
! #define ASM_V_SPEC "%{v}"
  
  #define STARTFILE_SPEC "%{mmainkernel:crt0.o%s}"
  
diff -Nrcpad gcc-17-20260628/gcc/config/riscv/autovec.md gcc-17-20260705/gcc/config/riscv/autovec.md
*** gcc-17-20260628/gcc/config/riscv/autovec.md	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/riscv/autovec.md	Sun Jul  5 22:32:07 2026
***************
*** 2436,2442 ****
    "TARGET_VECTOR && !HONOR_SNANS (<MODE>mode)"
  {
    REAL_VALUE_TYPE rv;
!   real_inf (&rv, true);
    rtx f = const_double_from_real_value (rv, <VEL>mode);
    riscv_vector::expand_reduction (UNSPEC_REDUC_MAX,
  				  UNSPEC_REDUC_MAX_VL0_SAFE,
--- 2436,2442 ----
    "TARGET_VECTOR && !HONOR_SNANS (<MODE>mode)"
  {
    REAL_VALUE_TYPE rv;
!   real_nan (&rv, "", 1, VOIDmode);
    rtx f = const_double_from_real_value (rv, <VEL>mode);
    riscv_vector::expand_reduction (UNSPEC_REDUC_MAX,
  				  UNSPEC_REDUC_MAX_VL0_SAFE,
***************
*** 2451,2457 ****
    "TARGET_VECTOR && !HONOR_SNANS (<MODE>mode)"
  {
    REAL_VALUE_TYPE rv;
!   real_inf (&rv, false);
    rtx f = const_double_from_real_value (rv, <VEL>mode);
    riscv_vector::expand_reduction (UNSPEC_REDUC_MIN,
  				  UNSPEC_REDUC_MIN_VL0_SAFE,
--- 2451,2457 ----
    "TARGET_VECTOR && !HONOR_SNANS (<MODE>mode)"
  {
    REAL_VALUE_TYPE rv;
!   real_nan (&rv, "", 1, VOIDmode);
    rtx f = const_double_from_real_value (rv, <VEL>mode);
    riscv_vector::expand_reduction (UNSPEC_REDUC_MIN,
  				  UNSPEC_REDUC_MIN_VL0_SAFE,
diff -Nrcpad gcc-17-20260628/gcc/config/riscv/bitmanip.md gcc-17-20260705/gcc/config/riscv/bitmanip.md
*** gcc-17-20260628/gcc/config/riscv/bitmanip.md	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/riscv/bitmanip.md	Sun Jul  5 22:32:07 2026
***************
*** 899,904 ****
--- 899,915 ----
    "<bit_optab>i\t%0,%1,%S2"
    [(set_attr "type" "bitmanip")])
  
+ ;; This form can be created by combine.
+ (define_insn "*xor_for_plus_minint"
+   [(set (match_operand:X 0 "register_operand" "=r")
+ 	(plus:X (match_operand:X 1 "register_operand" "r")
+ 		(match_operand 2 "const_int_operand")))]
+   "(TARGET_ZBS
+     && (INTVAL (operands[2])
+ 	== sext_hwi ((HOST_WIDE_INT_1U << (BITS_PER_WORD - 1)), BITS_PER_WORD)))"
+   "binvi\t%0,%1,%S2"
+   [(set_attr "type" "bitmanip")])
+ 
  ;; We can easily handle zero extensions
  (define_split
    [(set (match_operand:DI 0 "register_operand")
***************
*** 1177,1184 ****
  ;; If we have the ZBA extension, then we can clear the upper half of a 64
  ;; bit object with a zext.w.  So if we have AND where the constant would
  ;; require synthesis of two or more instructions, but 32->64 sign extension
! ;; of the constant is a simm12, then we can use zext.w+andi.  If the adjusted
! ;; constant is a single bit constant, then we can use zext.w+bclri
  ;;
  ;; With the mvconst_internal pattern claiming a single insn to synthesize
  ;; constants, this must be a define_insn_and_split.
--- 1188,1201 ----
  ;; If we have the ZBA extension, then we can clear the upper half of a 64
  ;; bit object with a zext.w.  So if we have AND where the constant would
  ;; require synthesis of two or more instructions, but 32->64 sign extension
! ;; of the constant is a simm12, then we can use zext.w+andi.
! ;;
! ;; If the adjusted constant is a single bit constant, then we can use
! ;; zext.w+bclri
! ;;
! ;; If the original constant uppermost bit was bit 31 and is a consecutive
! ;; run of bits, leave the original form alone since it compresses better
! ;; a srliw+slli
  ;;
  ;; With the mvconst_internal pattern claiming a single insn to synthesize
  ;; constants, this must be a define_insn_and_split.
***************
*** 1197,1203 ****
        implement with andi or bclri.  */
     && ((SMALL_OPERAND (sext_hwi (INTVAL (operands[2]), 32))
          || (TARGET_ZBS && popcount_hwi (INTVAL (operands[2])) == 31))
!        && INTVAL (operands[2]) != 0x7fffffff)"
    "#"
    "&& 1"
    [(set (match_dup 0) (zero_extend:DI (match_dup 3)))
--- 1214,1222 ----
        implement with andi or bclri.  */
     && ((SMALL_OPERAND (sext_hwi (INTVAL (operands[2]), 32))
          || (TARGET_ZBS && popcount_hwi (INTVAL (operands[2])) == 31))
!        && INTVAL (operands[2]) != 0x7fffffff)
!    && !(clz_hwi (UINTVAL (operands[2])) == 32
!         && consecutive_bits_operand (operands[2], word_mode))"
    "#"
    "&& 1"
    [(set (match_dup 0) (zero_extend:DI (match_dup 3)))
diff -Nrcpad gcc-17-20260628/gcc/config/riscv/riscv-cores.def gcc-17-20260705/gcc/config/riscv/riscv-cores.def
*** gcc-17-20260628/gcc/config/riscv/riscv-cores.def	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/riscv/riscv-cores.def	Sun Jul  5 22:32:07 2026
*************** RISCV_TUNE("xt-c9501fdvt", generic_ooo,
*** 52,57 ****
--- 52,59 ----
  RISCV_TUNE("xiangshan-nanhu", xiangshan, xiangshan_nanhu_tune_info)
  RISCV_TUNE("xiangshan-kunminghu", xiangshan, generic_ooo_tune_info)
  RISCV_TUNE("spacemit-x60", spacemit_x60, spacemit_x60_tune_info)
+ RISCV_TUNE("spacemit-x100", generic_ooo, spacemit_x100_tune_info)
+ RISCV_TUNE("spacemit-a100", spacemit_x60, spacemit_x60_tune_info)
  RISCV_TUNE("arc-v-rhx-100-series", arcv_rhx100, arcv_rhx100_tune_info)
  RISCV_TUNE("generic-ooo", generic_ooo, generic_ooo_tune_info)
  RISCV_TUNE("size", generic, optimize_size_tune_info)
*************** RISCV_CORE("spacemit-x60",    "rv64imafd
*** 221,225 ****
--- 223,238 ----
  			      "zbkc_zfh_zvfh_zvkt_zvl256b_sscofpmf_xsmtvdot",
  			      "spacemit-x60")
  
+ RISCV_CORE("spacemit-x100",   "rva23s64_smepmp_smnpm_smstateen_sspm_zbc_zbkc_"
+ 			      "zfbfmin_zfh_zvbc_zvfbfwma_zvfh_zvknc_zvkng_zvknha_"
+ 			      "zvksc_zvksg_zvl256b_xsmtvdot",
+ 			      "spacemit-x100")
+ 
+ RISCV_CORE("spacemit-a100",   "rva23u64_zfh_zbc_zbkc_zfbfmin_smepmp_smnpm_"
+ 			      "smstateen_sscofpmf_ssnpm_sspm_ssstateen_sstc_svinval_"
+ 			      "svnapot_svpbmt_zifencei_zvfh_zvfbfwma_zvkng_zvknha_"
+ 			      "zvknc_zvksc_zvksg_zvl1024b_xsmtvdotii",
+ 			      "spacemit-a100")
+ 
  #undef RISCV_CORE
  #undef RISCV_CORE_ALIAS
diff -Nrcpad gcc-17-20260628/gcc/config/riscv/riscv-ext-spacemit.def gcc-17-20260705/gcc/config/riscv/riscv-ext-spacemit.def
*** gcc-17-20260628/gcc/config/riscv/riscv-ext-spacemit.def	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/riscv/riscv-ext-spacemit.def	Sun Jul  5 22:32:07 2026
*************** DEFINE_RISCV_EXT(
*** 34,36 ****
--- 34,49 ----
    /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
    /* EXTRA_EXTENSION_FLAGS */ 0)
  
+ DEFINE_RISCV_EXT(
+   /* NAME */ xsmtvdotii,
+   /* UPPERCASE_NAME */ XSMTVDOTII,
+   /* FULL_NAME */ "SpacemiT vector dot product II extension",
+   /* DESC */ "",
+   /* URL */ "https://github.com/spacemit-com/docs-ai/blob/main/en/architecture/ime_extension.md",
+   /* DEP_EXTS */ ({"xsmtvdot"}),
+   /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+   /* FLAG_GROUP */ xsmt,
+   /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+   /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+   /* EXTRA_EXTENSION_FLAGS */ 0)
+ 
diff -Nrcpad gcc-17-20260628/gcc/config/riscv/riscv-ext.opt gcc-17-20260705/gcc/config/riscv/riscv-ext.opt
*** gcc-17-20260628/gcc/config/riscv/riscv-ext.opt	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/riscv/riscv-ext.opt	Sun Jul  5 22:32:07 2026
*************** Mask(XANDESVPACKFPH) Var(riscv_xandes_su
*** 480,482 ****
--- 480,485 ----
  Mask(XANDESVDOT) Var(riscv_xandes_subext)
  
  Mask(XSMTVDOT) Var(riscv_xsmt_subext)
+ 
+ Mask(XSMTVDOTII) Var(riscv_xsmt_subext)
+ 
diff -Nrcpad gcc-17-20260628/gcc/config/riscv/riscv.cc gcc-17-20260705/gcc/config/riscv/riscv.cc
*** gcc-17-20260628/gcc/config/riscv/riscv.cc	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/riscv/riscv.cc	Sun Jul  5 22:32:07 2026
*************** static const struct riscv_tune_param spa
*** 884,889 ****
--- 884,914 ----
    true,						/* prefer-agnostic.  */
  };
  
+ /* Costs to use when optimizing for Spacemit x100.  */
+ static const struct riscv_tune_param spacemit_x100_tune_info = {
+   {COSTS_N_INSNS (3), COSTS_N_INSNS (3)},	/* fp_add */
+   {COSTS_N_INSNS (4), COSTS_N_INSNS (4)},	/* fp_mul */
+   {COSTS_N_INSNS (12), COSTS_N_INSNS (20)},	/* fp_div */
+   {COSTS_N_INSNS (2), COSTS_N_INSNS (3)},	/* int_mul */
+   {COSTS_N_INSNS (14), COSTS_N_INSNS (22)},	/* int_div */
+   4,						/* issue_rate */
+   3,						/* branch_cost */
+   3,						/* memory_cost */
+   3,						/* fmv_cost */
+   false,					/* slow_unaligned_access */
+   true,						/* vector_unaligned_access */
+   false,					/* use_divmod_expansion */
+   true,						/* overlap_op_by_pieces */
+   false,					/* use_zero_stride_load */
+   false,					/* speculative_sched_vsetvl */
+   RISCV_FUSE_NOTHING,				/* fusible_ops */
+   &generic_vector_cost,				/* vector cost */
+   NULL,						/* function_align */
+   NULL,						/* jump_align */
+   NULL,						/* loop_align */
+   true,						/* prefer-agnostic.  */
+ };
+ 
  /* Costs to use when optimizing for Andes 23 series.  */
  static const struct riscv_tune_param andes_23_tune_info = {
    {COSTS_N_INSNS (4), COSTS_N_INSNS (5)},       /* fp_add */
*************** bool
*** 13347,13352 ****
--- 13372,13382 ----
  riscv_support_vector_misalignment (machine_mode mode, int misalignment,
  				   bool is_packed, bool is_gather_scatter)
  {
+   /* For vectorization in scalar registers, consider slow unaligned
+      access.  */
+   if (!riscv_vector_mode_p (mode))
+     return !riscv_slow_unaligned_access_p;
+ 
    /* IS_PACKED is true if the corresponding scalar element is not naturally
       aligned.  If the misalignment is unknown and the access is packed
       we defer to the default hook which will check if movmisalign is present.
*************** synthesize_ior_xor (rtx_code code, rtx o
*** 15657,15663 ****
       execution and fusion in the constant synthesis those would naturally
       decrease the budget.  It also does not account for the IOR/XOR at
       the end of the sequence which would increase the budget.  */
!   int budget = (TARGET_ZBS ? riscv_const_insns (operands[2], true) : -1);
    int original_budget = budget;
  
    /* Bits we need to set in operands[0].  As we synthesize the operation,
--- 15687,15693 ----
       execution and fusion in the constant synthesis those would naturally
       decrease the budget.  It also does not account for the IOR/XOR at
       the end of the sequence which would increase the budget.  */
!   int budget = (TARGET_ZBS ? riscv_integer_cost (INTVAL (operands[2]), true) : -1);
    int original_budget = budget;
  
    /* Bits we need to set in operands[0].  As we synthesize the operation,
*************** synthesize_ior_xor (rtx_code code, rtx o
*** 15721,15727 ****
    if ((TARGET_ZBB || TARGET_XTHEADBB || TARGET_ZBKB)
        && budget < 0
        && popcount_hwi (INTVAL (operands[2])) <= 11
!       && riscv_const_insns (operands[2], true) >= 3)
      {
        ival = INTVAL (operands[2]);
        /* First see if the constant trivially fits into 11 bits in the LSB.  */
--- 15751,15757 ----
    if ((TARGET_ZBB || TARGET_XTHEADBB || TARGET_ZBKB)
        && budget < 0
        && popcount_hwi (INTVAL (operands[2])) <= 11
!       && riscv_integer_cost (INTVAL (operands[2]), true) >= 3)
      {
        ival = INTVAL (operands[2]);
        /* First see if the constant trivially fits into 11 bits in the LSB.  */
*************** synthesize_ior_xor (rtx_code code, rtx o
*** 15806,15811 ****
--- 15836,15866 ----
       is complete. */
    if (budget < 0)
      {
+       /* We're going to have to synthesize the constant.  However, if
+ 	 we have Zbb, then we have XNOR and ORN.  So if the inverted constant
+ 	 is cheaper, invert it and use XNOR/ORN.  */
+       if (TARGET_ZBB
+ 	  && (riscv_integer_cost (INTVAL (operands[2]), true)
+ 	      > riscv_integer_cost (~UINTVAL (operands[2]), true)))
+ 	{
+ 	  rtx x = force_reg (word_mode, GEN_INT (~UINTVAL (operands[2])));
+ 
+ 	  /* Unfortunately canonical forms vary here.  */
+ 	  if (code == IOR)
+ 	    {
+ 	      x = gen_rtx_NOT (word_mode, x);
+ 	      x = gen_rtx_IOR (word_mode, x, operands[1]);
+ 	    }
+ 	  else
+ 	    {
+ 	      x = gen_rtx_XOR (word_mode, x, operands[1]);
+ 	      x = gen_rtx_NOT (word_mode, x);
+ 	    }
+ 
+ 	  emit_insn (gen_rtx_SET (operands[0], x));
+ 	  return true;
+ 	}
+ 
        rtx x = force_reg (word_mode, operands[2]);
        x = gen_rtx_fmt_ee (code, word_mode, operands[1], x);
        emit_insn (gen_rtx_SET (operands[0], x));
*************** synthesize_and (rtx operands[3])
*** 15894,15900 ****
       execution and fusion in the constant synthesis those would naturally
       decrease the budget.  It also does not account for the AND at
       the end of the sequence which would increase the budget. */
!   int budget = riscv_const_insns (operands[2], true);
    rtx input = NULL_RTX;
    rtx output = NULL_RTX;
  
--- 15949,15955 ----
       execution and fusion in the constant synthesis those would naturally
       decrease the budget.  It also does not account for the AND at
       the end of the sequence which would increase the budget. */
!   int budget = riscv_integer_cost (INTVAL (operands[2]), true);
    rtx input = NULL_RTX;
    rtx output = NULL_RTX;
  
*************** synthesize_and (rtx operands[3])
*** 15926,15931 ****
--- 15981,16012 ----
        return true;
      }
  
+   /* For RV64 we can exploit srlw to mask off bits on both the
+      high and low ends, then shift it back into position.  So
+      a two instruction sequence.  */
+   t = UINTVAL (operands[2]);
+   if (TARGET_64BIT
+       && consecutive_bits_operand (operands[2], word_mode)
+       && budget >= 2
+       && clz_hwi (t) == 32)
+     {
+       /* The srliw will wipe the upper 32 bits and low bits at the
+ 	 same time.  */
+       rtx x = gen_rtx_LSHIFTRT (SImode,
+ 				gen_lowpart (SImode, operands[1]),
+ 				GEN_INT (ctz_hwi (t)));
+       x = gen_rtx_SIGN_EXTEND (DImode, x);
+       output = gen_reg_rtx (word_mode);
+       emit_insn (gen_rtx_SET (output, x));
+       input = output;
+ 
+       /* Now shift it back to its proper position.  */
+       x = gen_rtx_ASHIFT (DImode, input, GEN_INT (ctz_hwi (t)));
+       emit_insn (gen_rtx_SET (operands[0], x));
+       return true;
+     }
+ 
+ 
    /* If we shift right to eliminate the trailing zeros and
       the result is a SMALL_OPERAND, then it's a shift right,
       andi and shift left.  */
*************** synthesize_and (rtx operands[3])
*** 15956,15961 ****
--- 16037,16089 ----
        return true;
      }
  
+   /* Similarly if there's a run of 1s on the ends and all zeros in the middle
+      then rotation to get all the 1s in the mask into the LSB may result in
+      a SMALL_OPERAND or perhaps a mode mask.  In those cases its rotate,
+      mask, rotate back into position.  */
+   t = INTVAL (operands[2]);
+   if (TARGET_64BIT
+       && (TARGET_ZBB || TARGET_XTHEADBB || TARGET_ZBKB)
+       && budget >= 3
+       && consecutive_bits_operand (GEN_INT (~t), word_mode)
+       && ((TARGET_ZBA && popcount_hwi (t) == 32)
+ 	  || popcount_hwi (t) == 16
+ 	  || popcount_hwi (t) <= 11))
+     {
+       /* First rotate the relevant bits into the low position.  */
+       int count = BITS_PER_WORD - clz_hwi (~t);
+       rtx x = gen_rtx_ROTATERT (word_mode, operands[1], GEN_INT (count));
+       output = gen_reg_rtx (word_mode);
+       emit_insn (gen_rtx_SET (output, x));
+       input = output;
+ 
+       /* Now clear bits according to the mask.  */
+       if (popcount_hwi (t) == 32)
+ 	{
+ 	  x = gen_rtx_ZERO_EXTEND (word_mode, gen_lowpart (SImode, input));
+ 	  emit_insn (gen_rtx_SET (output, x));
+ 	  input = output;
+ 	}
+       else if (popcount_hwi (t) == 16)
+ 	{
+ 	  x = gen_rtx_ZERO_EXTEND (word_mode, gen_lowpart (HImode, input));
+ 	  emit_insn (gen_rtx_SET (output, x));
+ 	  input = output;
+ 	}
+       else
+ 	{
+ 	  x = GEN_INT ((HOST_WIDE_INT_1U << popcount_hwi (t)) - 1);
+ 	  x = gen_rtx_AND (word_mode, input, x);
+ 	  emit_insn (gen_rtx_SET (output, x));
+ 	  input = output;
+ 	}
+ 
+       /* Now we just need to rotate the bits back into position.  */
+       x = gen_rtx_ROTATERT (word_mode, input, GEN_INT (BITS_PER_WORD - count));
+       emit_insn (gen_rtx_SET (operands[0], x));
+       return true;
+     }
+ 
    /* If there are all zeros, except for a run of 1s somewhere in the middle
       of the constant, then this is at worst 3 shifts.  */
    t = INTVAL (operands[2]);
*************** synthesize_and (rtx operands[3])
*** 16013,16018 ****
--- 16141,16161 ----
       patch in the series is enabled.  */
    if (ival || budget < 0)
      {
+       /* We're going to have to synthesize the constant.  However, if
+ 	 we have Zbb, then we have ANDN.  So if the inverted constant
+ 	 is cheaper, invert it and use ANDN.  */
+       if (TARGET_ZBB
+ 	  && riscv_integer_cost (~UINTVAL (operands[2]), true) > 0
+ 	  && (riscv_integer_cost (UINTVAL (operands[2]), true)
+ 	      > riscv_integer_cost (~UINTVAL (operands[2]), true)))
+ 	{
+ 	  rtx x = force_reg (word_mode, GEN_INT (~UINTVAL (operands[2])));
+ 	  x = gen_rtx_NOT (word_mode, x);
+ 	  x = gen_rtx_AND (word_mode, x, operands[1]);
+ 	  emit_insn (gen_rtx_SET (operands[0], x));
+ 	  return true;
+ 	}
+ 
        rtx x = force_reg (word_mode, operands[2]);
        x = gen_rtx_AND (word_mode, operands[1], x);
        emit_insn (gen_rtx_SET (operands[0], x));
*************** synthesize_add (rtx operands[3])
*** 16069,16078 ****
    if (SMALL_OPERAND (INTVAL (operands[2])))
      return false;
  
-   int budget1 = riscv_const_insns (operands[2], true);
-   int budget2 = riscv_const_insns (GEN_INT (-INTVAL (operands[2])), true);
- 
    HOST_WIDE_INT ival = INTVAL (operands[2]);
  
    /* If we can emit two addi insns then that's better than synthesizing
       the constant into a temporary, then adding the temporary to the
--- 16212,16231 ----
    if (SMALL_OPERAND (INTVAL (operands[2])))
      return false;
  
    HOST_WIDE_INT ival = INTVAL (operands[2]);
+   int budget1 = riscv_integer_cost (ival, true);
+   int budget2 = riscv_integer_cost (-ival, true);
+ 
+   /* If the constant is MIN_INT for the target, then it's just a bit flip
+      of the highest bit.  */
+   HOST_WIDE_INT sextval = sext_hwi (HOST_WIDE_INT_1U << (BITS_PER_WORD - 1),
+ 				    BITS_PER_WORD);
+   if (TARGET_ZBS && ival == sextval)
+     {
+       rtx x = gen_rtx_XOR (word_mode, operands[1], operands[2]);
+       emit_insn (gen_rtx_SET (operands[0], x));
+       return true;
+     }
  
    /* If we can emit two addi insns then that's better than synthesizing
       the constant into a temporary, then adding the temporary to the
*************** synthesize_add (rtx operands[3])
*** 16098,16113 ****
        return true;
      }
  
    /* If we can shift the constant by 1, 2, or 3 bit positions
       and the result is a cheaper constant, then do so.  */
    ival = INTVAL (operands[2]);
    if (TARGET_ZBA
        && (((ival % 2) == 0 && budget1
! 	   > riscv_const_insns (GEN_INT (ival >> 1), true))
  	   || ((ival % 4) == 0 && budget1
! 	       > riscv_const_insns (GEN_INT (ival >> 2), true))
  	   || ((ival % 8) == 0 && budget1
! 	       > riscv_const_insns (GEN_INT (ival >> 3), true))))
      {
        // Load the shifted constant into a temporary
        int shct = ctz_hwi (ival);
--- 16251,16306 ----
        return true;
      }
  
+   /* We can use shNadd.uw for some cases.  These are at most 2 insns.  */
+   ival = INTVAL (operands[2]);
+   if (TARGET_64BIT && TARGET_ZBA && budget1 >= 2)
+     {
+       int shcount = 0;
+       rtx mask;
+ 
+       if ((ival & 0x1fff) == 0
+ 	  && (ival & HOST_WIDE_INT_C (0x100000000)) != 0
+ 	  && (ival & HOST_WIDE_INT_C (0xfffffffe00000000)) == 0)
+ 	{
+ 	  mask = GEN_INT (HOST_WIDE_INT_C (0x1fffffffe));
+ 	  shcount = 1;
+ 	}
+       else if ((ival & 0x3fff) == 0
+ 	  && (ival & HOST_WIDE_INT_C (0x200000000)) != 0
+ 	  && (ival & HOST_WIDE_INT_C (0xfffffffc00000000)) == 0)
+ 	{
+ 	  mask = GEN_INT (HOST_WIDE_INT_C (0x3fffffffc));
+ 	  shcount = 2;
+ 	}
+       else if ((ival & 0x7fff) == 0
+ 	  && (ival & HOST_WIDE_INT_C (0x400000000)) != 0
+ 	  && (ival & HOST_WIDE_INT_C (0xfffffff800000000)) == 0)
+ 	{
+ 	  mask = GEN_INT (HOST_WIDE_INT_C (0x7fffffff8));
+ 	  shcount = 3;
+ 	}
+ 
+       if (shcount != 0)
+ 	{
+ 	  rtx x = force_reg (word_mode, GEN_INT (sext_hwi (ival >> shcount, 32)));
+ 	  x = gen_rtx_ASHIFT (word_mode, x, GEN_INT (shcount));
+ 	  x = gen_rtx_AND (word_mode, x, mask);
+ 	  x = gen_rtx_PLUS (word_mode, x, operands[1]);
+ 	  emit_insn (gen_rtx_SET (operands[0], x));
+ 	  return true;
+ 	}
+     }
+ 
    /* If we can shift the constant by 1, 2, or 3 bit positions
       and the result is a cheaper constant, then do so.  */
    ival = INTVAL (operands[2]);
    if (TARGET_ZBA
        && (((ival % 2) == 0 && budget1
! 	   > riscv_integer_cost (ival >> 1, true))
  	   || ((ival % 4) == 0 && budget1
! 	       > riscv_integer_cost (ival >> 2, true))
  	   || ((ival % 8) == 0 && budget1
! 	       > riscv_integer_cost (ival >> 3, true))))
      {
        // Load the shifted constant into a temporary
        int shct = ctz_hwi (ival);
*************** synthesize_add (rtx operands[3])
*** 16128,16133 ****
--- 16321,16344 ----
        return true;
      }
  
+   /* If the constant has the upper 32 bits clear and if after sign
+      extension from 32 to 64 bits it's synthesizable cheaply,
+      then synthesize C' and use add.uw.  */
+   if ((TARGET_64BIT && TARGET_ZBA)
+       && (ival & HOST_WIDE_INT_UC (0xffffffff00000000)) == 0
+       && riscv_integer_cost (sext_hwi (ival, 32), true) < budget1)
+     {
+       /* Load the sign extended constant into a temporary.  */
+       rtx tempreg = force_reg (word_mode, GEN_INT (sext_hwi (ival, 32)));
+ 
+       /* Add the zero-extended temporary to the other input to construct
+ 	 the add.uw insn.  */
+       rtx x = gen_rtx_ZERO_EXTEND (word_mode, gen_lowpart (SImode, tempreg));
+       x = gen_rtx_PLUS (word_mode, x, operands[1]);
+       emit_insn (gen_rtx_SET (operands[0], x));
+       return true;
+     }
+ 
    /* If the negated constant is cheaper than the original, then negate
       the constant and use sub.  */
    if (budget2 < budget1)
*************** synthesize_add_extended (rtx operands[3]
*** 16175,16182 ****
      return false;
  
    HOST_WIDE_INT ival = INTVAL (operands[2]);
!   int budget1 = riscv_const_insns (operands[2], true);
!   int budget2 = riscv_const_insns (GEN_INT (-INTVAL (operands[2])), true);
  
  /*  If operands[2] can be split into two 12-bit signed immediates,
      split add into two adds.  */
--- 16386,16393 ----
      return false;
  
    HOST_WIDE_INT ival = INTVAL (operands[2]);
!   int budget1 = riscv_integer_cost (INTVAL (operands[2]), true);
!   int budget2 = riscv_integer_cost (-UINTVAL (operands[2]), true);
  
  /*  If operands[2] can be split into two 12-bit signed immediates,
      split add into two adds.  */
diff -Nrcpad gcc-17-20260628/gcc/config/rs6000/aix.h gcc-17-20260705/gcc/config/rs6000/aix.h
*** gcc-17-20260628/gcc/config/rs6000/aix.h	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/rs6000/aix.h	Sun Jul  5 22:32:07 2026
***************
*** 177,182 ****
--- 177,186 ----
  #undef ASM_DEFAULT_SPEC
  #define ASM_DEFAULT_SPEC ""
  
+ #ifdef HAVE_AIX_AS
+ #define ASM_V_SPEC "%{v} %{w:-W}"
+ #endif
+ 
  /* Tell the assembler to assume that all undefined names are external.
  
     Don't do this until the fixed IBM assembler is more generally available.
diff -Nrcpad gcc-17-20260628/gcc/config/rs6000/rs6000-builtin.cc gcc-17-20260705/gcc/config/rs6000/rs6000-builtin.cc
*** gcc-17-20260628/gcc/config/rs6000/rs6000-builtin.cc	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/rs6000/rs6000-builtin.cc	Sun Jul  5 22:32:07 2026
*************** rs6000_expand_builtin (tree exp, rtx tar
*** 3316,3321 ****
--- 3316,3427 ----
        return expand_call (exp, target, ignore);
      }
  
+   if (fcode == RS6000_BIF_PPC_ATOMIC_CAS_QI
+       || fcode == RS6000_BIF_PPC_ATOMIC_CAS_HI
+       || fcode == RS6000_BIF_PPC_ATOMIC_CAS_SI
+       || fcode == RS6000_BIF_PPC_ATOMIC_CAS_DI
+       || fcode == RS6000_BIF_PPC_ATOMIC_CAS_TI)
+     {
+       machine_mode mode; // Get mode based on BIF ID (QImode, SImode, etc.)
+ 
+       switch (fcode)
+ 	{
+ 	case RS6000_BIF_PPC_ATOMIC_CAS_QI:
+ 	  mode = QImode;
+ 	  icode = CODE_FOR_atomic_compare_and_swap_localqi;
+ 	  break;
+ 	case RS6000_BIF_PPC_ATOMIC_CAS_HI:
+ 	  mode = HImode;
+ 	  icode = CODE_FOR_atomic_compare_and_swap_localhi;
+ 	  break;
+ 	case RS6000_BIF_PPC_ATOMIC_CAS_SI:
+ 	  mode = SImode;
+ 	  icode = CODE_FOR_atomic_compare_and_swap_localsi;
+ 	  break;
+ 	case RS6000_BIF_PPC_ATOMIC_CAS_DI:
+ 	  mode = DImode;
+ 	  icode = CODE_FOR_atomic_compare_and_swap_localdi;
+ 	  break;
+ 	case RS6000_BIF_PPC_ATOMIC_CAS_TI:
+ 	  mode = TImode;
+ 	  icode = CODE_FOR_atomic_compare_and_swap_localti;
+ 	  break;
+ 	default:
+ 	  gcc_unreachable ();
+ 	}
+ 
+       // For arg 0 (ptr to data)
+       rtx ptr = expand_expr (CALL_EXPR_ARG (exp, 0), NULL_RTX, Pmode,
+ 			     EXPAND_SUM);
+       ptr = convert_memory_address (Pmode, ptr);
+       rtx mem = gen_rtx_MEM (mode, ptr);
+ 
+       // For arg 1 (expected ptr)
+       rtx exp_ptr = expand_expr (CALL_EXPR_ARG (exp, 1), NULL_RTX, Pmode,
+ 				 EXPAND_SUM);
+       exp_ptr = convert_memory_address (Pmode, exp_ptr);
+       rtx expected_val = gen_reg_rtx (mode);
+       emit_move_insn (expected_val, gen_rtx_MEM (mode, exp_ptr));
+ 
+       // For arg 2 (desired ptr)
+       rtx desired_ptr = expand_expr (CALL_EXPR_ARG (exp, 2), NULL_RTX, Pmode,
+ 				     EXPAND_SUM);
+       desired_ptr = convert_memory_address (Pmode, desired_ptr);
+       rtx desired_val = gen_reg_rtx (mode);
+       emit_move_insn (desired_val, gen_rtx_MEM (mode, desired_ptr));
+ 
+       // Args 3, 4, 5: weak, succ, fail (constants)
+       rtx weak = expand_normal (CALL_EXPR_ARG (exp, 3));
+       rtx succ = expand_normal (CALL_EXPR_ARG (exp, 4));
+       rtx fail = expand_normal (CALL_EXPR_ARG (exp, 5));
+ 
+       // 0: Boolean return (Output)
+       struct expand_operand ops[8];
+       create_output_operand (&ops[0], target, SImode);
+ 
+       // 1: Old value return (Output)
+       rtx old_val = gen_reg_rtx (mode);
+       create_output_operand (&ops[1], old_val, mode);
+ 
+       // 2: The Memory (Fixed/Input - it's a MEM rtx)
+       // We use create_fixed_operand because it's a specific MEM location
+       create_fixed_operand (&ops[2], mem);
+ 
+       // 3: Expected Value (Input)
+       create_input_operand (&ops[3], expected_val, mode);
+ 
+       // 4: Desired Value (Input)
+       create_input_operand (&ops[4], desired_val, mode);
+ 
+       // 5, 6, 7: Weak, Success, Failure (Immediate/Constants)
+       create_input_operand (&ops[5], weak, SImode);
+       create_input_operand (&ops[6], succ, SImode);
+       create_input_operand (&ops[7], fail, SImode);
+ 
+       // Now call expand_insn with the ops array
+       if (!maybe_expand_insn (icode, 8, ops))
+ 	error ("invalid arguments to builtin");
+ 
+       // Create a label for the end of the function.
+       rtx done_label = gen_label_rtx ();
+ 
+       /* Standard Semantics: Update 'expected' ONLY on failure.
+ 	 If target (the boolean result) is NOT 0, the CAS succeeded.
+ 	 In the case of success, we jump straight to the end.  */
+ 
+       // If target != 0 (Success), skip the store.
+       emit_cmp_and_jump_insns (target, const0_rtx, NE, NULL_RTX,
+ 			       SImode, 1, done_label);
+ 
+       // FAILURE PATH: This code runs only if target == 0.
+       rtx expected_mem = gen_rtx_MEM (mode, copy_to_mode_reg (Pmode, exp_ptr));
+       emit_move_insn (expected_mem, old_val);
+ 
+       emit_label (done_label);
+ 
+       return target;
+     }
+ 
    if (bif_is_nosoft (*bifaddr)
        && rs6000_isa_flags & OPTION_MASK_SOFT_FLOAT)
      {
diff -Nrcpad gcc-17-20260628/gcc/config/rs6000/rs6000-builtins.def gcc-17-20260705/gcc/config/rs6000/rs6000-builtins.def
*** gcc-17-20260628/gcc/config/rs6000/rs6000-builtins.def	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/rs6000/rs6000-builtins.def	Sun Jul  5 22:32:07 2026
***************
*** 246,251 ****
--- 246,268 ----
    const double __builtin_unpack_longdouble (long double, const int<1>);
      UNPACK_TF unpacktf {ibmld}
  
+ ; Builtins for ppc specific atomic compare exchange
+   bool __builtin_ppc_atomic_cas_local_qi (char *, char *, char *, const int, \
+ 					  const int, const int);
+     PPC_ATOMIC_CAS_QI nothing {}
+   bool __builtin_ppc_atomic_cas_local_hi (short *, short *, short *, \
+ 					  const int, const int, const int);
+     PPC_ATOMIC_CAS_HI nothing {}
+   bool __builtin_ppc_atomic_cas_local_si (int *, int *, int *, const int, \
+ 					  const int, const int);
+     PPC_ATOMIC_CAS_SI nothing {}
+   bool __builtin_ppc_atomic_cas_local_di (long long *, long long *, \
+ 					  long long *, const int, const int, \
+ 					  const int);
+     PPC_ATOMIC_CAS_DI nothing {}
+   bool __builtin_ppc_atomic_cas_local_ti (__int128 *, __int128 *, __int128 *, \
+ 					  const int, const int, const int);
+     PPC_ATOMIC_CAS_TI nothing {}
  
  ; Builtins that have been around just about forever, but not quite.
  [power5]
diff -Nrcpad gcc-17-20260628/gcc/config/rs6000/rs6000-c.cc gcc-17-20260705/gcc/config/rs6000/rs6000-c.cc
*** gcc-17-20260628/gcc/config/rs6000/rs6000-c.cc	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/rs6000/rs6000-c.cc	Sun Jul  5 22:32:07 2026
*************** altivec_build_resolved_builtin (tree *ar
*** 929,935 ****
  
    /* If the number of arguments to an overloaded function increases,
       we must expand this switch.  */
!   gcc_assert (MAX_OVLD_ARGS <= 4);
  
    tree call;
    switch (n)
--- 929,935 ----
  
    /* If the number of arguments to an overloaded function increases,
       we must expand this switch.  */
!   gcc_assert (MAX_OVLD_ARGS <= 6);
  
    tree call;
    switch (n)
*************** altivec_build_resolved_builtin (tree *ar
*** 949,954 ****
--- 949,958 ----
      case 4:
        call = build_call_expr (fndecl, 4, args[0], args[1], args[2], args[3]);
        break;
+     case 6:
+       call = build_call_expr (fndecl, 6, args[0], args[1], args[2], args[3],
+ 			      args[4], args[5]);
+       break;
      default:
        gcc_unreachable ();
      }
*************** find_instance (bool *unsupported_builtin
*** 1710,1720 ****
  
  tree
  altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
! 				    void *passed_arglist, bool)
  {
    rs6000_gen_builtins fcode
      = (rs6000_gen_builtins) DECL_MD_FUNCTION_CODE (fndecl);
  
    /* Return immediately if this isn't an overload.  */
    if (fcode <= RS6000_OVLD_NONE)
      return NULL_TREE;
--- 1714,1835 ----
  
  tree
  altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
! 				    void *passed_arglist, bool complain)
  {
    rs6000_gen_builtins fcode
      = (rs6000_gen_builtins) DECL_MD_FUNCTION_CODE (fndecl);
  
+   /* Handle __builtin_ppc_atomic_cas_local before standard overload
+      processing.  */
+   if (fcode == RS6000_OVLD_PPC_ATOMIC_CAS)
+     {
+       vec<tree, va_gc> *arglist
+ 	= static_cast<vec<tree, va_gc> *> (passed_arglist);
+ 
+       /* Expected: (void *ptr, void *expected, void *desired,
+       bool weak, int success_order, int failure_order).  */
+       if (vec_safe_length (arglist) != 6)
+ 	{
+ 	  if (complain)
+ 	    error_at (loc, "%qE requires 6 arguments", fndecl);
+ 	  return error_mark_node;
+ 	}
+ 
+       /* Get the first argument to determine the actual type.  */
+       tree arg0 = (*arglist)[0];
+       tree type0 = TREE_TYPE (arg0);
+ 
+       /* Must be a pointer.  */
+       if (!POINTER_TYPE_P (type0))
+ 	{
+ 	  if (complain)
+ 	    error_at (loc, "first argument to %qE must be a pointer", fndecl);
+ 	  return error_mark_node;
+ 	}
+ 
+       /* Get the pointee type.  */
+       tree pointee_type = TREE_TYPE (type0);
+ 
+       /* Must be a complete type.  */
+       if (!COMPLETE_TYPE_P (pointee_type))
+ 	{
+ 	  if (complain)
+ 	    error_at (loc, "first argument to %qE must point to a complete"
+ 		      " type", fndecl);
+ 	  return error_mark_node;
+ 	}
+ 
+       /* Get size in bytes.  */
+       tree size_tree = TYPE_SIZE_UNIT (pointee_type);
+       if (!tree_fits_uhwi_p (size_tree))
+ 	{
+ 	  if (complain)
+ 	    error_at (loc, "type size must be constant");
+ 	  return error_mark_node;
+ 	}
+ 
+       unsigned HOST_WIDE_INT size = tree_to_uhwi (size_tree);
+ 
+       /* Determine which size-specific builtin to use.  */
+       rs6000_gen_builtins target_fcode;
+       tree int_type;
+ 
+       switch (size)
+ 	{
+ 	case 1:
+ 	  target_fcode = RS6000_BIF_PPC_ATOMIC_CAS_QI;
+ 	  int_type = unsigned_char_type_node;
+ 	  break;
+ 	case 2:
+ 	  target_fcode = RS6000_BIF_PPC_ATOMIC_CAS_HI;
+ 	  int_type = short_unsigned_type_node;
+ 	  break;
+ 	case 4:
+ 	  target_fcode = RS6000_BIF_PPC_ATOMIC_CAS_SI;
+ 	  int_type = unsigned_intSI_type_node;
+ 	  break;
+ 	case 8:
+ 	  target_fcode = RS6000_BIF_PPC_ATOMIC_CAS_DI;
+ 	  int_type = long_long_unsigned_type_node;
+ 	  break;
+ 	case 16:
+ 	  target_fcode = RS6000_BIF_PPC_ATOMIC_CAS_TI;
+ 	  int_type = unsigned_intTI_type_node;
+ 	  break;
+ 	default:
+ 	  if (complain)
+ 	    error_at (loc, "size %wu not supported for %qE "
+ 		      "(must be 1, 2, 4, 8, or 16 bytes)", size, fndecl);
+ 	  return error_mark_node;
+ 	}
+ 
+       /* Create pointer type to the appropriate integer type.  */
+       tree int_ptr_type = build_pointer_type (int_type);
+ 
+       /* Cast the three pointer arguments to the appropriate integer
+       pointer type.  */
+       tree new_arg0 = build1 (VIEW_CONVERT_EXPR, int_ptr_type, (*arglist)[0]);
+       tree new_arg1 = build1 (VIEW_CONVERT_EXPR, int_ptr_type, (*arglist)[1]);
+       tree new_arg2 = build1 (VIEW_CONVERT_EXPR, int_ptr_type, (*arglist)[2]);
+ 
+       /* Build new argument list with casted pointers.  */
+       vec<tree, va_gc> *new_arglist;
+       vec_alloc (new_arglist, 6);
+       new_arglist->quick_push (new_arg0);
+       new_arglist->quick_push (new_arg1);
+       new_arglist->quick_push (new_arg2);
+       new_arglist->quick_push ((*arglist)[3]);  /* weak (bool).  */
+       new_arglist->quick_push ((*arglist)[4]);  /* success_memorder.  */
+       new_arglist->quick_push ((*arglist)[5]);  /* failure_memorder.  */
+ 
+       /* Get the target builtin function.  */
+       tree new_fndecl = rs6000_builtin_decls[target_fcode];
+ 
+       /* Build and return the function call.  */
+       return build_function_call_vec (loc, vNULL, new_fndecl, new_arglist,
+ 				      NULL, fndecl);
+     }
+ 
    /* Return immediately if this isn't an overload.  */
    if (fcode <= RS6000_OVLD_NONE)
      return NULL_TREE;
diff -Nrcpad gcc-17-20260628/gcc/config/rs6000/rs6000-overload.def gcc-17-20260705/gcc/config/rs6000/rs6000-overload.def
*** gcc-17-20260628/gcc/config/rs6000/rs6000-overload.def	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/rs6000/rs6000-overload.def	Sun Jul  5 22:32:07 2026
***************
*** 79,84 ****
--- 79,92 ----
  ; a semicolon are also treated as blank lines.
  
  
+ ; The following function is not overloaded, but is internally substituted by
+ ; __builtin_ppc_atomic_cas_local_{qi,hi,si,di,ti} based on the first 3
+ ; arguments.
+ [PPC_ATOMIC_CAS, SKIP, __builtin_ppc_atomic_cas_local]
+   bool __builtin_ppc_atomic_cas_local (void *, void *, void *, const int, \
+ 				       const int, const int);
+     PPC_ATOMIC_CAS_QI PPC_ATOMIC_CAS_FAKERY
+ 
  [BCDADD, __builtin_bcdadd, __builtin_vec_bcdadd]
    vsq __builtin_vec_bcdadd (vsq, vsq, const int);
      BCDADD_V1TI
diff -Nrcpad gcc-17-20260628/gcc/config/rs6000/rs6000-protos.h gcc-17-20260705/gcc/config/rs6000/rs6000-protos.h
*** gcc-17-20260628/gcc/config/rs6000/rs6000-protos.h	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/rs6000/rs6000-protos.h	Sun Jul  5 22:32:07 2026
*************** extern bool rs6000_emit_set_const (rtx,
*** 127,133 ****
  extern bool rs6000_emit_cmove (rtx, rtx, rtx, rtx);
  extern bool rs6000_emit_int_cmove (rtx, rtx, rtx, rtx);
  extern void rs6000_emit_minmax (rtx, enum rtx_code, rtx, rtx);
! extern void rs6000_expand_atomic_compare_and_swap (rtx op[]);
  extern rtx swap_endian_selector_for_mode (machine_mode mode);
  
  extern void rs6000_expand_atomic_exchange (rtx op[]);
--- 127,133 ----
  extern bool rs6000_emit_cmove (rtx, rtx, rtx, rtx);
  extern bool rs6000_emit_int_cmove (rtx, rtx, rtx, rtx);
  extern void rs6000_emit_minmax (rtx, enum rtx_code, rtx, rtx);
! extern void rs6000_expand_atomic_compare_and_swap (rtx op[], bool local);
  extern rtx swap_endian_selector_for_mode (machine_mode mode);
  
  extern void rs6000_expand_atomic_exchange (rtx op[]);
diff -Nrcpad gcc-17-20260628/gcc/config/rs6000/rs6000.cc gcc-17-20260705/gcc/config/rs6000/rs6000.cc
*** gcc-17-20260628/gcc/config/rs6000/rs6000.cc	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/rs6000/rs6000.cc	Sun Jul  5 22:32:07 2026
*************** emit_unlikely_jump (rtx cond, rtx label)
*** 16749,16760 ****
  
  /* A subroutine of the atomic operation splitters.  Emit a load-locked
     instruction in MODE.  For QI/HImode, possibly use a pattern than includes
!    the zero_extend operation.  */
  
  static void
! emit_load_locked (machine_mode mode, rtx reg, rtx mem)
  {
!   rtx (*fn) (rtx, rtx) = NULL;
  
    switch (mode)
      {
--- 16749,16761 ----
  
  /* A subroutine of the atomic operation splitters.  Emit a load-locked
     instruction in MODE.  For QI/HImode, possibly use a pattern than includes
!    the zero_extend operation.  LOCAL indicates the EH bit value for the
!    load-locked instruction.  */
  
  static void
! emit_load_locked (machine_mode mode, rtx reg, rtx mem, rtx local)
  {
!   rtx (*fn) (rtx, rtx, rtx) = NULL;
  
    switch (mode)
      {
*************** emit_load_locked (machine_mode mode, rtx
*** 16781,16787 ****
      default:
        gcc_unreachable ();
      }
!   emit_insn (fn (reg, mem));
  }
  
  /* A subroutine of the atomic operation splitters.  Emit a store-conditional
--- 16782,16788 ----
      default:
        gcc_unreachable ();
      }
!   emit_insn (fn (reg, mem, local));
  }
  
  /* A subroutine of the atomic operation splitters.  Emit a store-conditional
*************** rs6000_finish_atomic_subword (rtx narrow
*** 16951,16957 ****
  /* Expand an atomic compare and swap operation.  */
  
  void
! rs6000_expand_atomic_compare_and_swap (rtx operands[])
  {
    rtx boolval, retval, mem, oldval, newval, cond;
    rtx label1, label2, x, mask, shift;
--- 16952,16958 ----
  /* Expand an atomic compare and swap operation.  */
  
  void
! rs6000_expand_atomic_compare_and_swap (rtx operands[], bool local)
  {
    rtx boolval, retval, mem, oldval, newval, cond;
    rtx label1, label2, x, mask, shift;
*************** rs6000_expand_atomic_compare_and_swap (r
*** 17014,17020 ****
      }
    label2 = gen_rtx_LABEL_REF (VOIDmode, gen_label_rtx ());
  
!   emit_load_locked (mode, retval, mem);
  
    x = retval;
    if (mask)
--- 17015,17021 ----
      }
    label2 = gen_rtx_LABEL_REF (VOIDmode, gen_label_rtx ());
  
!   emit_load_locked (mode, retval, mem, local ? const1_rtx : const0_rtx);
  
    x = retval;
    if (mask)
*************** rs6000_expand_atomic_exchange (rtx opera
*** 17112,17118 ****
    label = gen_rtx_LABEL_REF (VOIDmode, gen_label_rtx ());
    emit_label (XEXP (label, 0));
  
!   emit_load_locked (mode, retval, mem);
  
    x = val;
    if (mask)
--- 17113,17119 ----
    label = gen_rtx_LABEL_REF (VOIDmode, gen_label_rtx ());
    emit_label (XEXP (label, 0));
  
!   emit_load_locked (mode, retval, mem, const0_rtx);
  
    x = val;
    if (mask)
*************** rs6000_expand_atomic_op (enum rtx_code c
*** 17217,17223 ****
    if (before == NULL_RTX)
      before = gen_reg_rtx (mode);
  
!   emit_load_locked (mode, before, mem);
  
    if (code == NOT)
      {
--- 17218,17224 ----
    if (before == NULL_RTX)
      before = gen_reg_rtx (mode);
  
!   emit_load_locked (mode, before, mem, const0_rtx);
  
    if (code == NOT)
      {
diff -Nrcpad gcc-17-20260628/gcc/config/rs6000/sync.md gcc-17-20260705/gcc/config/rs6000/sync.md
*** gcc-17-20260628/gcc/config/rs6000/sync.md	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/rs6000/sync.md	Sun Jul  5 22:32:07 2026
***************
*** 329,345 ****
  (define_insn "load_locked<mode>"
    [(set (match_operand:ATOMIC 0 "int_reg_operand" "=r")
  	(unspec_volatile:ATOMIC
!          [(match_operand:ATOMIC 1 "memory_operand" "Z")] UNSPECV_LL))]
    ""
!   "<larx> %0,%y1"
    [(set_attr "type" "load_l")])
  
  (define_insn "load_locked<QHI:mode>_si"
    [(set (match_operand:SI 0 "int_reg_operand" "=r")
  	(unspec_volatile:SI
! 	  [(match_operand:QHI 1 "memory_operand" "Z")] UNSPECV_LL))]
    "TARGET_SYNC_HI_QI"
!   "<QHI:larx> %0,%y1"
    [(set_attr "type" "load_l")])
  
  ;; Use PTImode to get even/odd register pairs.
--- 329,347 ----
  (define_insn "load_locked<mode>"
    [(set (match_operand:ATOMIC 0 "int_reg_operand" "=r")
  	(unspec_volatile:ATOMIC
! 	  [(match_operand:ATOMIC 1 "memory_operand" "Z")
! 	   (match_operand:QI 2 "u1bit_cint_operand" "n")] UNSPECV_LL))]
    ""
!   "<larx> %0,%y1,%2"
    [(set_attr "type" "load_l")])
  
  (define_insn "load_locked<QHI:mode>_si"
    [(set (match_operand:SI 0 "int_reg_operand" "=r")
  	(unspec_volatile:SI
! 	  [(match_operand:QHI 1 "memory_operand" "Z")
! 	   (match_operand:QI 2 "u1bit_cint_operand" "n")] UNSPECV_LL))]
    "TARGET_SYNC_HI_QI"
!   "<QHI:larx> %0,%y1,%2"
    [(set_attr "type" "load_l")])
  
  ;; Use PTImode to get even/odd register pairs.
***************
*** 353,359 ****
  
  (define_expand "load_lockedti"
    [(use (match_operand:TI 0 "quad_int_reg_operand"))
!    (use (match_operand:TI 1 "memory_operand"))]
    "TARGET_SYNC_TI"
  {
    rtx op0 = operands[0];
--- 355,362 ----
  
  (define_expand "load_lockedti"
    [(use (match_operand:TI 0 "quad_int_reg_operand"))
!    (use (match_operand:TI 1 "memory_operand"))
!    (use (match_operand:QI 2 "u1bit_cint_operand"))]
    "TARGET_SYNC_TI"
  {
    rtx op0 = operands[0];
***************
*** 367,373 ****
        operands[1] = op1 = change_address (op1, TImode, new_addr);
      }
  
!   emit_insn (gen_load_lockedpti (pti, op1));
    if (WORDS_BIG_ENDIAN)
      emit_move_insn (op0, gen_lowpart (TImode, pti));
    else
--- 370,376 ----
        operands[1] = op1 = change_address (op1, TImode, new_addr);
      }
  
!   emit_insn (gen_load_lockedpti (pti, op1, operands[2]));
    if (WORDS_BIG_ENDIAN)
      emit_move_insn (op0, gen_lowpart (TImode, pti));
    else
***************
*** 381,391 ****
  (define_insn "load_lockedpti"
    [(set (match_operand:PTI 0 "quad_int_reg_operand" "=&r")
  	(unspec_volatile:PTI
!          [(match_operand:TI 1 "indexed_or_indirect_operand" "Z")] UNSPECV_LL))]
    "TARGET_SYNC_TI
     && !reg_mentioned_p (operands[0], operands[1])
     && quad_int_reg_operand (operands[0], PTImode)"
!   "lqarx %0,%y1"
    [(set_attr "type" "load_l")
     (set_attr "size" "128")])
  
--- 384,395 ----
  (define_insn "load_lockedpti"
    [(set (match_operand:PTI 0 "quad_int_reg_operand" "=&r")
  	(unspec_volatile:PTI
! 	  [(match_operand:TI 1 "indexed_or_indirect_operand" "Z")
! 	   (match_operand:QI 2 "u1bit_cint_operand" "n")] UNSPECV_LL))]
    "TARGET_SYNC_TI
     && !reg_mentioned_p (operands[0], operands[1])
     && quad_int_reg_operand (operands[0], PTImode)"
!   "lqarx %0,%y1,%2"
    [(set_attr "type" "load_l")
     (set_attr "size" "128")])
  
***************
*** 462,468 ****
     (match_operand:SI 7 "const_int_operand")]		;; model fail
    ""
  {
!   rs6000_expand_atomic_compare_and_swap (operands);
    DONE;
  })
  
--- 466,487 ----
     (match_operand:SI 7 "const_int_operand")]		;; model fail
    ""
  {
!   rs6000_expand_atomic_compare_and_swap (operands, false);
!   DONE;
! })
! 
! (define_expand "atomic_compare_and_swap_local<mode>"
!   [(match_operand:SI 0 "int_reg_operand")		;; bool out
!    (match_operand:AINT 1 "int_reg_operand")		;; val out
!    (match_operand:AINT 2 "memory_operand")		;; memory
!    (match_operand:AINT 3 "reg_or_short_operand")	;; expected
!    (match_operand:AINT 4 "int_reg_operand")		;; desired
!    (match_operand:SI 5 "const_int_operand")		;; is_weak
!    (match_operand:SI 6 "const_int_operand")		;; model succ
!    (match_operand:SI 7 "const_int_operand")]		;; model fail
!   ""
! {
!   rs6000_expand_atomic_compare_and_swap (operands, true);
    DONE;
  })
  
diff -Nrcpad gcc-17-20260628/gcc/config/s390/s390.md gcc-17-20260705/gcc/config/s390/s390.md
*** gcc-17-20260628/gcc/config/s390/s390.md	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/s390/s390.md	Sun Jul  5 22:32:07 2026
***************
*** 8217,8226 ****
    "<z10_or_zEC12_cond>
     /* Note that even for the SImode pattern, the rotate is always DImode.  */
     && s390_extzv_shift_ok (<bitsize>, -INTVAL (operands[2]),
! 			   INTVAL (operands[3]))"
!   "<risbg_n>\t%0,%1,%<bfstart>3,128+%<bfend>3,64-%2"
    [(set_attr "op_type" "RIE")
!    (set_attr "z10prop" "z10_super_E1")])
  
  (define_insn "*extzv_<mode>_sll<clobbercc_or_nocc>"
    [(set (match_operand:GPR 0 "register_operand" "=d")
--- 8217,8242 ----
    "<z10_or_zEC12_cond>
     /* Note that even for the SImode pattern, the rotate is always DImode.  */
     && s390_extzv_shift_ok (<bitsize>, -INTVAL (operands[2]),
! 			   INTVAL (operands[3]))
!    /* Ensure that we end up with a non-zero bitmask.  */
!    && (<MODE>mode == DImode
!        ? ((UINTVAL (operands[3]) << UINTVAL (operands[2])) >> UINTVAL (operands[2])) > 0
!        : (((unsigned int)UINTVAL (operands[3]) << UINTVAL (operands[2])) >> UINTVAL (operands[2])) > 0)"
! {
!   unsigned HOST_WIDE_INT shiftamount = UINTVAL (operands[2]);
!   unsigned HOST_WIDE_INT bitmask = UINTVAL (operands[3]);
!   /* Clear the higher bits of the mask which overlap with the vacated bits of
!      the shift.  */
!   if (<MODE>mode == DImode)
!     bitmask = (bitmask << shiftamount) >> shiftamount;
!   else
!     bitmask = ((unsigned int)bitmask << shiftamount) >> shiftamount;
!   operands[3] = GEN_INT (bitmask);
!   return "<risbg_n>\t%0,%1,%<bfstart>3,128+%<bfend>3,64-%2";
! }
    [(set_attr "op_type" "RIE")
!    (set_attr "z10prop" "z10_super_E1")
!    (set_attr "mnemonic" "<risbg_n>")])
  
  (define_insn "*extzv_<mode>_sll<clobbercc_or_nocc>"
    [(set (match_operand:GPR 0 "register_operand" "=d")
***************
*** 8230,8239 ****
  		(match_operand:GPR 3 "contiguous_bitmask_nowrap_operand" "")))]
    "<z10_or_zEC12_cond>
     && s390_extzv_shift_ok (<bitsize>, INTVAL (operands[2]),
! 			   INTVAL (operands[3]))"
!   "<risbg_n>\t%0,%1,%<bfstart>3,128+%<bfend>3,%2"
    [(set_attr "op_type" "RIE")
!    (set_attr "z10prop" "z10_super_E1")])
  
  
  ;
--- 8246,8266 ----
  		(match_operand:GPR 3 "contiguous_bitmask_nowrap_operand" "")))]
    "<z10_or_zEC12_cond>
     && s390_extzv_shift_ok (<bitsize>, INTVAL (operands[2]),
! 			   INTVAL (operands[3]))
!    /* Ensure that we end up with a non-zero bitmask.  */
!    && ((UINTVAL (operands[3]) >> UINTVAL (operands[2])) << UINTVAL (operands[2])) > 0"
! {
!   unsigned HOST_WIDE_INT shiftamount = UINTVAL (operands[2]);
!   unsigned HOST_WIDE_INT bitmask = UINTVAL (operands[3]);
!   /* Clear the lower bits of the mask which overlap with the vacated bits of
!      the shift.  */
!   bitmask = (bitmask >> shiftamount) << shiftamount;
!   operands[3] = GEN_INT (bitmask);
!   return "<risbg_n>\t%0,%1,%<bfstart>3,128+%<bfend>3,%2";
! }
    [(set_attr "op_type" "RIE")
!    (set_attr "z10prop" "z10_super_E1")
!    (set_attr "mnemonic" "<risbg_n>")])
  
  
  ;
diff -Nrcpad gcc-17-20260628/gcc/config/sh/constraints.md gcc-17-20260705/gcc/config/sh/constraints.md
*** gcc-17-20260628/gcc/config/sh/constraints.md	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/sh/constraints.md	Sun Jul  5 22:32:07 2026
***************
*** 45,52 ****
  ;; H: Floating point 1
  ;; Q: pc relative load operand
  ;; Rxx: reserved for exotic register classes.
  ;; Sxx: extra memory constraints
! ;;  Sua: unaligned memory address
  ;;  Sbv: QImode address without displacement
  ;;  Sbw: QImode address with 12 bit displacement
  ;;  Snd: address without displacement
--- 45,54 ----
  ;; H: Floating point 1
  ;; Q: pc relative load operand
  ;; Rxx: reserved for exotic register classes.
+ ;;  Rab: address base register
+ ;;  Rai: address index register
  ;; Sxx: extra memory constraints
! ;;  Sua: simple or post-inc address (for unaligned load)
  ;;  Sbv: QImode address without displacement
  ;;  Sbw: QImode address with 12 bit displacement
  ;;  Snd: address without displacement
***************
*** 260,275 ****
  	    (match_test "~ival == 64")
  	    (match_test "~ival == 128"))))
  
  (define_memory_constraint "Sua"
!   "@internal"
!   (and (match_test "memory_operand (op, GET_MODE (op))")
!        (match_test "GET_CODE (XEXP (op, 0)) != PLUS")))
  
  (define_memory_constraint "Sdd"
    "A memory reference that uses displacement addressing."
    (and (match_code "mem")
         (match_code "plus" "0")
!        (match_code "reg" "00")
         (match_code "const_int" "01")))
  
  (define_memory_constraint "Snd"
--- 262,289 ----
  	    (match_test "~ival == 64")
  	    (match_test "~ival == 128"))))
  
+ ;; For LRA memory address constraints need to narrow the register type
+ ;; restrictions.
+ (define_constraint "Rab"
+   "@internal address base register constraint"
+   (match_test "MAYBE_BASE_REGISTER_RTX_P (op, false)"))
+ 
+ (define_constraint "Rai"
+   "@internal address index register constraint"
+   (match_test "MAYBE_INDEX_REGISTER_RTX_P (op, false)"))
+ 
  (define_memory_constraint "Sua"
!   "A memory reference that allows simple register or post-inc addressing."
!   (and (match_code "mem")
!        (ior (match_test "satisfies_constraint_Rab (XEXP (op, 0))")
! 	    (and (match_code "post_inc" "0")
! 	    (match_test "satisfies_constraint_Rab (XEXP (XEXP (op, 0), 0))")))))
  
  (define_memory_constraint "Sdd"
    "A memory reference that uses displacement addressing."
    (and (match_code "mem")
         (match_code "plus" "0")
!        (match_test "satisfies_constraint_Rab (XEXP (XEXP (op, 0), 0))")
         (match_code "const_int" "01")))
  
  (define_memory_constraint "Snd"
***************
*** 281,299 ****
    "A memory reference that uses index addressing."
    (and (match_code "mem")
         (match_code "plus" "0")
!        (match_code "reg" "00")
!        (match_code "reg" "01")))
  
  (define_memory_constraint "Ssd"
    "A memory reference that excludes index and displacement addressing."
    (and (match_code "mem")
!        (match_test "! satisfies_constraint_Sid (op)")
!        (match_test "! satisfies_constraint_Sdd (op)")))
  
  (define_memory_constraint "Sbv"
    "A memory reference, as used in SH2A bclr.b, bset.b, etc."
!   (and (match_test "MEM_P (op) && GET_MODE (op) == QImode")
!        (match_test "REG_P (XEXP (op, 0))")))
  
  (define_memory_constraint "Sbw"
    "A memory reference, as used in SH2A bclr.b, bset.b, etc."
--- 295,317 ----
    "A memory reference that uses index addressing."
    (and (match_code "mem")
         (match_code "plus" "0")
!        (ior (and (match_test "satisfies_constraint_Rab (XEXP (XEXP (op, 0), 0))")
! 		 (match_test "satisfies_constraint_Rai (XEXP (XEXP (op, 0), 1))"))
! 	    (and (match_test "satisfies_constraint_Rab (XEXP (XEXP (op, 0), 1))")
! 		 (match_test "satisfies_constraint_Rai (XEXP (XEXP (op, 0), 0))")))))
  
  (define_memory_constraint "Ssd"
    "A memory reference that excludes index and displacement addressing."
    (and (match_code "mem")
!        (ior (match_test "satisfies_constraint_Rab (XEXP (op, 0))")
! 	    (and (ior (match_code "pre_dec" "0") (match_code "post_inc" "0"))
! 	    (match_test "satisfies_constraint_Rab (XEXP (XEXP (op, 0), 0))")))))
  
  (define_memory_constraint "Sbv"
    "A memory reference, as used in SH2A bclr.b, bset.b, etc."
!   (and (match_code "mem")
!        (match_test "GET_MODE (op) == QImode")
!        (match_test "satisfies_constraint_Rab (XEXP (op, 0))")))
  
  (define_memory_constraint "Sbw"
    "A memory reference, as used in SH2A bclr.b, bset.b, etc."
***************
*** 304,316 ****
  (define_memory_constraint "Sra"
    "A memory reference that uses simple register addressing."
    (and (match_code "mem")
!        (match_code "reg" "0")))
  
  (define_memory_constraint "Ara"
    "A memory reference that uses simple register addressing suitable for
     gusa atomic operations."
    (and (match_code "mem")
!        (match_code "reg" "0")
         (match_test "REGNO (XEXP (op, 0)) != SP_REG")))
  
  (define_memory_constraint "Add"
--- 322,338 ----
  (define_memory_constraint "Sra"
    "A memory reference that uses simple register addressing."
    (and (match_code "mem")
!        (match_test "satisfies_constraint_Rab (XEXP (op, 0))")))
! 
! (define_memory_constraint "Sgb"
!   "A memory renference that uses GBR addressing."
!   (match_test "gbr_address_mem (op, GET_MODE (op))"))
  
  (define_memory_constraint "Ara"
    "A memory reference that uses simple register addressing suitable for
     gusa atomic operations."
    (and (match_code "mem")
!        (match_test "satisfies_constraint_Rab (XEXP (op, 0))")
         (match_test "REGNO (XEXP (op, 0)) != SP_REG")))
  
  (define_memory_constraint "Add"
***************
*** 319,324 ****
    (and (match_code "mem")
         (match_test "GET_MODE (op) == SImode")
         (match_code "plus" "0")
!        (match_code "reg" "00")
         (match_code "const_int" "01")
         (match_test "REGNO (XEXP (XEXP (op, 0), 0)) != SP_REG")))
--- 341,346 ----
    (and (match_code "mem")
         (match_test "GET_MODE (op) == SImode")
         (match_code "plus" "0")
!        (match_test "satisfies_constraint_Rab (XEXP (XEXP (op, 0), 0))")
         (match_code "const_int" "01")
         (match_test "REGNO (XEXP (XEXP (op, 0), 0)) != SP_REG")))
diff -Nrcpad gcc-17-20260628/gcc/config/sh/predicates.md gcc-17-20260705/gcc/config/sh/predicates.md
*** gcc-17-20260628/gcc/config/sh/predicates.md	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/sh/predicates.md	Sun Jul  5 22:32:07 2026
***************
*** 208,215 ****
  ;; Returns 1 if OP is a simple register address.
  (define_predicate "simple_mem_operand"
    (and (match_code "mem")
!        (match_code "reg" "0")
!        (match_test "arith_reg_operand (XEXP (op, 0), SImode)")))
  
  ;; Returns 1 if OP is a valid displacement address.
  (define_predicate "displacement_mem_operand"
--- 208,214 ----
  ;; Returns 1 if OP is a simple register address.
  (define_predicate "simple_mem_operand"
    (and (match_code "mem")
!        (match_test "satisfies_constraint_Sra (op)")))
  
  ;; Returns 1 if OP is a valid displacement address.
  (define_predicate "displacement_mem_operand"
***************
*** 239,251 ****
  (define_predicate "post_inc_mem"
    (and (match_code "mem")
         (match_code "post_inc" "0")
!        (match_code "reg" "00")))
  
  ;; Returns true if OP is a pre-decrement addressing mode memory reference.
  (define_predicate "pre_dec_mem"
    (and (match_code "mem")
         (match_code "pre_dec" "0")
!        (match_code "reg" "00")))
  
  ;; Returns 1 if the operand can be used in an SH2A movu.{b|w} insn.
  (define_predicate "zero_extend_movu_operand"
--- 238,250 ----
  (define_predicate "post_inc_mem"
    (and (match_code "mem")
         (match_code "post_inc" "0")
!        (match_test "satisfies_constraint_Rab (XEXP (XEXP (op, 0), 0))")))
  
  ;; Returns true if OP is a pre-decrement addressing mode memory reference.
  (define_predicate "pre_dec_mem"
    (and (match_code "mem")
         (match_code "pre_dec" "0")
!        (match_test "satisfies_constraint_Rab (XEXP (XEXP (op, 0), 0))")))
  
  ;; Returns 1 if the operand can be used in an SH2A movu.{b|w} insn.
  (define_predicate "zero_extend_movu_operand"
***************
*** 485,490 ****
--- 484,495 ----
  	 && sh_legitimate_index_p (mode, XEXP (plus0_rtx, 1), TARGET_SH2A, true);
  })
  
+ ;; Returns true if OP is a pc relative load operand.
+ (define_predicate "pc_relative_load_operand"
+   (and (match_code "mem")
+        (match_test "GET_MODE (op) != QImode")
+        (match_test "IS_PC_RELATIVE_LOAD_ADDR_P (XEXP (op, 0))")))
+ 
  ;; Returns true if OP is a valid source operand for a logical operation.
  (define_predicate "logical_operand"
    (and (match_code "subreg,reg,const_int")
***************
*** 805,807 ****
--- 810,845 ----
  
    return false;
  })
+ 
+ ;; Predicates for pinning operands to hard-regs.
+ (define_predicate "hard_reg_r0"
+   (and (match_code "reg")
+        (match_test "REGNO (op) == R0_REG")))
+ 
+ (define_predicate "hard_reg_r1"
+   (and (match_code "reg")
+        (match_test "REGNO (op) == R1_REG")))
+ 
+ (define_predicate "hard_reg_r2"
+   (and (match_code "reg")
+        (match_test "REGNO (op) == R2_REG")))
+ 
+ (define_predicate "hard_reg_r3"
+   (and (match_code "reg")
+        (match_test "REGNO (op) == R3_REG")))
+ 
+ (define_predicate "hard_reg_r4"
+   (and (match_code "reg")
+        (match_test "REGNO (op) == R4_REG")))
+ 
+ (define_predicate "hard_reg_r5"
+   (and (match_code "reg")
+        (match_test "REGNO (op) == R5_REG")))
+ 
+ (define_predicate "hard_reg_r6"
+   (and (match_code "reg")
+        (match_test "REGNO (op) == R6_REG")))
+ 
+ (define_predicate "hard_reg_r7"
+   (and (match_code "reg")
+        (match_test "REGNO (op) == R7_REG")))
diff -Nrcpad gcc-17-20260628/gcc/config/sh/sh-mem.cc gcc-17-20260705/gcc/config/sh/sh-mem.cc
*** gcc-17-20260628/gcc/config/sh/sh-mem.cc	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/sh/sh-mem.cc	Sun Jul  5 22:32:07 2026
*************** expand_block_move (rtx *operands)
*** 134,140 ****
  
  	  int dwords = bytes >> 3;
  	  emit_insn (gen_move_insn (r6, GEN_INT (dwords - 1)));
! 	  emit_insn (gen_block_lump_real_i4 (func_addr_rtx, lab));
  	  return true;
  	}
        else
--- 134,140 ----
  
  	  int dwords = bytes >> 3;
  	  emit_insn (gen_move_insn (r6, GEN_INT (dwords - 1)));
! 	  emit_insn (gen_block_lump_real_i4 (func_addr_rtx, lab, r4, r5, r6));
  	  return true;
  	}
        else
*************** expand_block_move (rtx *operands)
*** 178,184 ****
        final_switch = 16 - ((bytes / 4) % 16);
        while_loop = ((bytes / 4) / 16 - 1) * 16;
        emit_insn (gen_move_insn (r6, GEN_INT (while_loop + final_switch)));
!       emit_insn (gen_block_lump_real (func_addr_rtx, lab));
        return true;
      }
  
--- 178,184 ----
        final_switch = 16 - ((bytes / 4) % 16);
        while_loop = ((bytes / 4) / 16 - 1) * 16;
        emit_insn (gen_move_insn (r6, GEN_INT (while_loop + final_switch)));
!       emit_insn (gen_block_lump_real (func_addr_rtx, lab, r4, r5, r6));
        return true;
      }
  
diff -Nrcpad gcc-17-20260628/gcc/config/sh/sh-protos.h gcc-17-20260705/gcc/config/sh/sh-protos.h
*** gcc-17-20260628/gcc/config/sh/sh-protos.h	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/sh/sh-protos.h	Sun Jul  5 22:32:07 2026
*************** extern rtx sh_fsca_sf2int (void);
*** 40,46 ****
  extern rtx sh_fsca_int2sf (void);
  
  /* Declare functions defined in sh.cc and used in templates.  */
- extern bool sh_lra_p (void);
  
  extern const char *output_branch (int, rtx_insn *, rtx *);
  extern const char *output_ieee_ccmpeq (rtx_insn *, rtx *);
--- 40,45 ----
*************** extern int sh_loop_align (rtx_insn *);
*** 56,62 ****
  extern bool fp_zero_operand (rtx);
  extern bool fp_one_operand (rtx);
  extern bool sh_legitimate_index_p (machine_mode, rtx, bool, bool);
- extern bool sh_legitimize_reload_address (rtx *, machine_mode, int, int);
  extern rtx legitimize_pic_address (rtx, machine_mode, rtx);
  extern bool nonpic_symbol_mentioned_p (rtx);
  extern void output_pic_addr_const (FILE *, rtx);
--- 55,60 ----
*************** extern rtx sh_find_equiv_gbr_addr (rtx_i
*** 102,108 ****
  extern int sh_eval_treg_value (rtx op);
  extern HOST_WIDE_INT sh_disp_addr_displacement (rtx mem_op);
  extern int sh_max_mov_insn_displacement (machine_mode mode, bool consider_sh2a);
! extern bool sh_movsf_ie_ra_split_p (rtx, rtx, rtx);
  extern void sh_expand_sym_label2reg (rtx, rtx, rtx, bool);
  
  /* Result value of sh_find_set_of_reg.  */
--- 100,107 ----
  extern int sh_eval_treg_value (rtx op);
  extern HOST_WIDE_INT sh_disp_addr_displacement (rtx mem_op);
  extern int sh_max_mov_insn_displacement (machine_mode mode, bool consider_sh2a);
! extern bool sh_movsf_ie_y_split_p (rtx, rtx);
! extern bool sh_movsf_ie_subreg_multiword_p (rtx, rtx);
  extern void sh_expand_sym_label2reg (rtx, rtx, rtx, bool);
  
  /* Result value of sh_find_set_of_reg.  */
diff -Nrcpad gcc-17-20260628/gcc/config/sh/sh.cc gcc-17-20260705/gcc/config/sh/sh.cc
*** gcc-17-20260628/gcc/config/sh/sh.cc	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/sh/sh.cc	Sun Jul  5 22:32:07 2026
*************** static bool sh_legitimate_address_p (mac
*** 271,276 ****
--- 271,277 ----
  static rtx sh_legitimize_address (rtx, rtx, machine_mode);
  static rtx sh_delegitimize_address (rtx);
  static bool sh_cannot_substitute_mem_equiv_p (rtx);
+ static bool sh_cannot_substitute_const_equiv_p (rtx);
  static bool sh_legitimize_address_displacement (rtx *, rtx *,
  						poly_int64, machine_mode);
  static int scavenge_reg (HARD_REG_SET *s);
*************** TARGET_GNU_ATTRIBUTES (sh_attribute_tabl
*** 592,600 ****
  #undef  TARGET_ENCODE_SECTION_INFO
  #define TARGET_ENCODE_SECTION_INFO	sh_encode_section_info
  
- #undef TARGET_LRA_P
- #define TARGET_LRA_P sh_lra_p
- 
  #undef TARGET_SECONDARY_RELOAD
  #define TARGET_SECONDARY_RELOAD sh_secondary_reload
  
--- 593,598 ----
*************** TARGET_GNU_ATTRIBUTES (sh_attribute_tabl
*** 610,615 ****
--- 608,616 ----
  #undef TARGET_CANNOT_SUBSTITUTE_MEM_EQUIV_P
  #define TARGET_CANNOT_SUBSTITUTE_MEM_EQUIV_P sh_cannot_substitute_mem_equiv_p
  
+ #undef TARGET_CANNOT_SUBSTITUTE_CONST_EQUIV_P
+ #define TARGET_CANNOT_SUBSTITUTE_CONST_EQUIV_P sh_cannot_substitute_const_equiv_p
+ 
  #undef TARGET_LEGITIMIZE_ADDRESS_DISPLACEMENT
  #define TARGET_LEGITIMIZE_ADDRESS_DISPLACEMENT \
    sh_legitimize_address_displacement
*************** prepare_move_operands (rtx operands[], m
*** 1656,1663 ****
  	 in some situation.  It isn't the case for SH in the problematic
  	 case.  We can pre-allocate R0 for that index term to avoid
  	 the issue.  See PR target/66591.  */
!       else if (sh_lra_p ()
! 	       && ! TARGET_SH2A
  	       && ((REG_P (operands[0]) && MEM_P (operands[1]))
  		   || (REG_P (operands[1]) && MEM_P (operands[0]))))
  	{
--- 1657,1663 ----
  	 in some situation.  It isn't the case for SH in the problematic
  	 case.  We can pre-allocate R0 for that index term to avoid
  	 the issue.  See PR target/66591.  */
!       else if (! TARGET_SH2A
  	       && ((REG_P (operands[0]) && MEM_P (operands[1]))
  		   || (REG_P (operands[1]) && MEM_P (operands[0]))))
  	{
*************** sh_max_mov_insn_displacement (machine_mo
*** 3575,3581 ****
    /* SH2A supports FPU move insns with 12 bit displacements.
       Other variants to do not support any kind of displacements for
       FPU move insns.  */
!   if (! consider_sh2a && TARGET_FPU_ANY && GET_MODE_CLASS (mode) == MODE_FLOAT)
      return 0;
    else
      {
--- 3575,3581 ----
    /* SH2A supports FPU move insns with 12 bit displacements.
       Other variants to do not support any kind of displacements for
       FPU move insns.  */
!   if (! consider_sh2a && TARGET_FPU_ANY && FLOAT_MODE_P (mode))
      return 0;
    else
      {
*************** broken_move (rtx_insn *insn)
*** 4819,4834 ****
  		&& GET_CODE (SET_SRC (pat)) == CONST_DOUBLE
  		&& (fp_zero_operand (SET_SRC (pat))
  		    || fp_one_operand (SET_SRC (pat)))
! 		/* In general we don't know the current setting of fpscr, so
! 		   disable fldi.
! 		   There is an exception if this was a register-register move
! 		   before reload - and hence it was ascertained that we have
! 		   single precision setting - and in a post-reload optimization
! 		   we changed this to do a constant load.  In that case
! 		   we don't have an r0 clobber, hence we must use fldi.  */
! 		&& (TARGET_FMOVD
! 		    || (GET_CODE (XEXP (XVECEXP (PATTERN (insn), 0, 2), 0))
! 			== SCRATCH))
  		&& REG_P (SET_DEST (pat))
  		&& FP_REGISTER_P (REGNO (SET_DEST (pat))))
  	  && ! (TARGET_SH2A
--- 4819,4826 ----
  		&& GET_CODE (SET_SRC (pat)) == CONST_DOUBLE
  		&& (fp_zero_operand (SET_SRC (pat))
  		    || fp_one_operand (SET_SRC (pat)))
! 		/* fldi can materialize the fp constants 0 and 1 directly in
! 		   an fp register, so such a move is not broken.  */
  		&& REG_P (SET_DEST (pat))
  		&& FP_REGISTER_P (REGNO (SET_DEST (pat))))
  	  && ! (TARGET_SH2A
*************** get_t_reg_rtx (void)
*** 8845,8883 ****
  
  static GTY(()) tree fpscr_values;
  
- static void
- emit_fpu_switch (rtx scratch, int index)
- {
-   if (fpscr_values == NULL)
-     {
-       tree t = build_index_type (integer_one_node);
-       t = build_array_type (integer_type_node, t);
-       t = build_decl (BUILTINS_LOCATION,
- 		      VAR_DECL, get_identifier ("__fpscr_values"), t);
-       DECL_ARTIFICIAL (t) = 1;
-       DECL_IGNORED_P (t) = 1;
-       DECL_EXTERNAL (t) = 1;
-       TREE_STATIC (t) = 1;
-       TREE_PUBLIC (t) = 1;
-       TREE_USED (t) = 1;
- 
-       fpscr_values = t;
-     }
- 
-   rtx src = DECL_RTL (fpscr_values);
-   if (!can_create_pseudo_p ())
-     {
-       emit_move_insn (scratch, XEXP (src, 0));
-       if (index != 0)
- 	emit_insn (gen_addsi3 (scratch, scratch, GEN_INT (index * 4)));
-       src = adjust_automodify_address (src, SImode, scratch, index * 4);
-     }
-   else
-     src = adjust_address (src, SImode, index * 4);
- 
-   emit_insn (gen_lds_fpscr (src));
- }
- 
  static rtx get_free_reg (HARD_REG_SET);
  
  /* This function returns a register to use to load the address to load
--- 8837,8842 ----
*************** fpscr_set_from_mem (int mode, HARD_REG_S
*** 8912,8920 ****
  {
    enum attr_fp_mode fp_mode = (enum attr_fp_mode) mode;
    enum attr_fp_mode norm_mode = ACTUAL_NORMAL_MODE (FP_MODE);
  
!   rtx addr_reg = !can_create_pseudo_p () ? get_free_reg (regs_live) : NULL_RTX;
!   emit_fpu_switch (addr_reg, fp_mode == norm_mode);
  }
  
  /* Is the given character a logical line separator for the assembler?  */
--- 8871,8916 ----
  {
    enum attr_fp_mode fp_mode = (enum attr_fp_mode) mode;
    enum attr_fp_mode norm_mode = ACTUAL_NORMAL_MODE (FP_MODE);
+   int index = fp_mode == norm_mode;
  
!   if (fpscr_values == NULL)
!     {
!       tree t = build_index_type (integer_one_node);
!       t = build_array_type (integer_type_node, t);
!       t = build_decl (BUILTINS_LOCATION,
! 		      VAR_DECL, get_identifier ("__fpscr_values"), t);
!       DECL_ARTIFICIAL (t) = 1;
!       DECL_IGNORED_P (t) = 1;
!       DECL_EXTERNAL (t) = 1;
!       TREE_STATIC (t) = 1;
!       TREE_PUBLIC (t) = 1;
!       TREE_USED (t) = 1;
! 
!       fpscr_values = t;
!     }
! 
!   rtx src = DECL_RTL (fpscr_values);
! 
!   if (can_create_pseudo_p ())
!     {
!       // Before RA the plain address can be used and RA will adjust it for
!       // the post-inc constraint.
!       src = adjust_address (src, SImode, index * 4);
!       emit_insn (gen_lds_fpscr (force_reg (SImode, src)));
!     }
!   else
!     {
!       // After RA it needs the address with a post-inc mem or else it will
!       // result in an unrecognizable insn.
!       rtx scratch = get_free_reg (regs_live);
!       emit_move_insn (scratch, XEXP (src, 0));
!       if (index != 0)
! 	emit_insn (gen_addsi3 (scratch, scratch, GEN_INT (index * 4)));
!       src = adjust_automodify_address (src, SImode,
! 				       gen_rtx_POST_INC (Pmode, scratch),
! 				       index * 4);
!       add_reg_note (emit_insn (gen_lds_fpscr (src)), REG_INC, scratch);
!     }
  }
  
  /* Is the given character a logical line separator for the assembler?  */
*************** sh_legitimize_address (rtx x, rtx oldx,
*** 9275,9352 ****
    return x;
  }
  
- /* Attempt to replace *p, which is an address that needs reloading, with
-    a valid memory address for an operand of mode MODE.
-    Like for sh_legitimize_address, for the SH we try to get a normal form
-    of the address.  That will allow inheritance of the address reloads.  */
- bool
- sh_legitimize_reload_address (rtx *p, machine_mode mode, int opnum,
- 			      int itype)
- {
-   enum reload_type type = (enum reload_type) itype;
-   const int mode_sz = GET_MODE_SIZE (mode);
- 
-   if (sh_lra_p ())
-     return false;
- 
-   if (GET_CODE (*p) == PLUS && CONST_INT_P (XEXP (*p, 1))
-       && MAYBE_BASE_REGISTER_RTX_P (XEXP (*p, 0), true))
-     {
-       const HOST_WIDE_INT offset = INTVAL (XEXP (*p, 1));
-       struct disp_adjust adj = sh_find_mov_disp_adjust (mode, offset);
- 
-       if (TARGET_SH2A && mode == DFmode && (offset & 0x7))
- 	{
- 	  push_reload (*p, NULL_RTX, p, NULL,
- 		       BASE_REG_CLASS, Pmode, VOIDmode, 0, 0, opnum, type);
- 	  return true;
- 	}
- 
-       if (TARGET_SH2E && mode == SFmode)
- 	{
- 	  *p = copy_rtx (*p);
- 	  push_reload (*p, NULL_RTX, p, NULL,
- 		       BASE_REG_CLASS, Pmode, VOIDmode, 0, 0, opnum, type);
- 	  return true;
- 	}
- 
-       /* FIXME: Do not allow to legitimize QImode and HImode displacement
- 	 moves because then reload has a problem figuring the constraint
- 	 that the move insn target/source reg must be R0.
- 	 Or maybe some handling is wrong in sh_secondary_reload for this
- 	 to work properly? */
-       if ((mode_sz == 4 || mode_sz == 8)
- 	  && ! (TARGET_SH4 && mode == DFmode)
- 	  && adj.offset_adjust != NULL_RTX && adj.mov_disp != NULL_RTX)
- 	{
- 	  rtx sum = gen_rtx_PLUS (Pmode, XEXP (*p, 0), adj.offset_adjust);
- 	  *p = gen_rtx_PLUS (Pmode, sum, adj.mov_disp);
- 	  push_reload (sum, NULL_RTX, &XEXP (*p, 0), NULL,
- 		       BASE_REG_CLASS, Pmode, VOIDmode, 0, 0, opnum, type);
- 	  return true;
- 	}
-     }
- 
-   /* We must re-recognize what we created before.  */
-   if (GET_CODE (*p) == PLUS
-       && (mode_sz == 4 || mode_sz == 8)
-       && GET_CODE (XEXP (*p, 0)) == PLUS
-       && CONST_INT_P (XEXP (XEXP (*p, 0), 1))
-       && MAYBE_BASE_REGISTER_RTX_P (XEXP (XEXP (*p, 0), 0), true)
-       && CONST_INT_P (XEXP (*p, 1))
-       && ! (TARGET_SH2E && mode == SFmode))
-     {
-       /* Because this address is so complex, we know it must have
- 	 been created by LEGITIMIZE_RELOAD_ADDRESS before; thus,
- 	 it is already unshared, and needs no further unsharing.  */
-       push_reload (XEXP (*p, 0), NULL_RTX, &XEXP (*p, 0), NULL,
- 		   BASE_REG_CLASS, Pmode, VOIDmode, 0, 0, opnum, type);
-       return true;
-     }
- 
-   return false;
- }
- 
  /* In the name of slightly smaller debug output, and to cater to
     general assembler lossage, recognize various UNSPEC sequences
     and turn them back into a direct symbol reference.  */
--- 9271,9276 ----
*************** sh_hard_regno_mode_ok (unsigned int regn
*** 10574,10581 ****
  
    if (mode == V2SFmode)
      {
!       if (((FP_REGISTER_P (regno) && (regno - FIRST_FP_REG) % 2 == 0)
! 	   || GENERAL_REGISTER_P (regno)))
  	return true;
        else
  	return false;
--- 10498,10507 ----
  
    if (mode == V2SFmode)
      {
!       /* V2SF may not live in general registers when optimizing, see
! 	 sh_can_change_mode_class.  Keep it out of general regs so that it's
! 	 always treated as fp reg pair.  */
!       if (FP_REGISTER_P (regno) && (regno - FIRST_FP_REG) % 2 == 0)
  	return true;
        else
  	return false;
*************** sh_cannot_substitute_mem_equiv_p (rtx)
*** 11430,11435 ****
--- 11356,11378 ----
    return true;
  }
  
+ static bool
+ sh_cannot_substitute_const_equiv_p (rtx subst)
+ {
+   /* If SUBST is SFmode const_double 0 or 1, the move insn may be
+      transformed into fldi0/1.  This is potentially unsafe for fp mode
+      switching because fldi0/1 are single mode only instructions.
+      LRA could then insert an fldi0/1 while the fp mode = double is selected.
+      Currently there is no other way to check this or prevent this from
+      happening.  See also PR 117182.  */
+ 
+   if (GET_MODE (subst) == SFmode
+       && (real_equal (CONST_DOUBLE_REAL_VALUE (subst), &dconst1)
+ 	  || real_equal (CONST_DOUBLE_REAL_VALUE (subst), &dconst0)))
+     return true;
+   return false;
+ }
+ 
  /* Implement TARGET_LEGITIMIZE_ADDRESS_DISPLACEMENT.  */
  static bool
  sh_legitimize_address_displacement (rtx *offset1, rtx *offset2,
*************** sh_legitimize_address_displacement (rtx
*** 11451,11480 ****
    return false;
  }
  
! /* Return true if movsf insn should be split with an additional
!    register.  */
  bool
! sh_movsf_ie_ra_split_p (rtx op0, rtx op1, rtx op2)
  {
!   /* op0 == op1 */
!   if (rtx_equal_p (op0, op1))
      return true;
!   /* fy, FQ, reg */
!   if (GET_CODE (op1) == CONST_DOUBLE
!       && ! satisfies_constraint_G (op1)
!       && ! satisfies_constraint_H (op1)
!       && REG_P (op0)
!       && REG_P (op2))
      return true;
!   /* f, r, y */
!   if (REG_P (op0) && FP_REGISTER_P (REGNO (op0))
!       && REG_P (op1) && GENERAL_REGISTER_P (REGNO (op1))
!       && REG_P (op2) && (REGNO (op2) == FPUL_REG))
      return true;
!   /* r, f, y */
!   if (REG_P (op1) && FP_REGISTER_P (REGNO (op1))
!       && REG_P (op0) && GENERAL_REGISTER_P (REGNO (op0))
!       && REG_P (op2) && (REGNO (op2) == FPUL_REG))
      return true;
  
    return false;
--- 11394,11430 ----
    return false;
  }
  
! /* Return true if movsf insn should be split with an fpul register.  */
  bool
! sh_movsf_ie_y_split_p (rtx op0, rtx op1)
  {
!   /* f, r */
!   if (REG_P (op0)
!       && (SUBREG_P (op1) && GET_MODE (SUBREG_REG (op1)) == SImode))
      return true;
!   /* r, f */
!   if (REG_P (op1)
!       && (SUBREG_P (op0) && GET_MODE (SUBREG_REG (op0)) == SImode))
      return true;
! 
!   return false;
! }
! 
! /* Return true if it moves reg from/to subreg of multiword mode.  */
! bool
! sh_movsf_ie_subreg_multiword_p (rtx op0, rtx op1)
! {
!   if (REG_P (op0)
!       && (SUBREG_P (op1)
! 	  && (GET_MODE (SUBREG_REG (op1)) == SCmode
! 	      || GET_MODE (SUBREG_REG (op1)) == DImode
! 	      || GET_MODE (SUBREG_REG (op1)) == TImode)))
      return true;
!   if (REG_P (op1)
!       && (SUBREG_P (op0)
! 	  && (GET_MODE (SUBREG_REG (op0)) == SCmode
! 	      || GET_MODE (SUBREG_REG (op0)) == DImode
! 	      || GET_MODE (SUBREG_REG (op0)) == TImode)))
      return true;
  
    return false;
*************** sh_mode_priority (int entity ATTRIBUTE_U
*** 12622,12634 ****
    Misc
  */
  
- /* Return true if we use LRA instead of reload pass.  */
- bool
- sh_lra_p (void)
- {
-   return sh_lra_flag;
- }
- 
  /* Implement TARGET_USE_BY_PIECES_INFRASTRUCTURE_P.  */
  
  static bool
--- 12572,12577 ----
diff -Nrcpad gcc-17-20260628/gcc/config/sh/sh.h gcc-17-20260705/gcc/config/sh/sh.h
*** gcc-17-20260628/gcc/config/sh/sh.h	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/sh/sh.h	Sun Jul  5 22:32:07 2026
*************** extern bool current_function_interrupt;
*** 1403,1417 ****
  #endif
  
  
- /* A C compound statement that attempts to replace X, which is an address
-    that needs reloading, with a valid memory address for an operand of
-    mode MODE.  WIN is a C statement label elsewhere in the code.  */
- #define LEGITIMIZE_RELOAD_ADDRESS(X,MODE,OPNUM,TYPE,IND_LEVELS,WIN)	\
-   do {									\
-     if (sh_legitimize_reload_address (&(X), (MODE), (OPNUM), (TYPE)))	\
-       goto WIN;								\
-   } while (0)
- 
  /* Specify the machine mode that this machine uses
     for the index in the tablejump instruction.  */
  #define CASE_VECTOR_MODE ((! optimize || TARGET_BIGTABLE) ? SImode : HImode)
--- 1403,1408 ----
diff -Nrcpad gcc-17-20260628/gcc/config/sh/sh.md gcc-17-20260705/gcc/config/sh/sh.md
*** gcc-17-20260628/gcc/config/sh/sh.md	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/sh/sh.md	Sun Jul  5 22:32:07 2026
***************
*** 1563,1569 ****
  			  (match_operand:SI 2 "arith_reg_operand" "r"))
  		 (reg:SI T_REG)))
     (set (reg:SI T_REG)
! 	(ltu:SI (plus:SI (match_dup 1) (match_dup 2)) (match_dup 1)))]
    "TARGET_SH1"
    "addc	%2,%0"
    [(set_attr "type" "arith")])
--- 1563,1572 ----
  			  (match_operand:SI 2 "arith_reg_operand" "r"))
  		 (reg:SI T_REG)))
     (set (reg:SI T_REG)
! 	(gtu:SI (plus:DI (plus:DI (zero_extend:DI (match_dup 1))
! 				  (zero_extend:DI (match_dup 2)))
! 			 (zero_extend:DI (reg:SI T_REG)))
! 		(const_int 4294967295)))]
    "TARGET_SH1"
    "addc	%2,%0"
    [(set_attr "type" "arith")])
***************
*** 1782,1788 ****
  {
    if (!arith_operand (operands[2], SImode))
      {
!       if (!sh_lra_p () || reg_overlap_mentioned_p (operands[0], operands[1]))
  	{
  	  emit_insn (gen_addsi3_scr (operands[0], operands[1], operands[2]));
  	  DONE;
--- 1785,1791 ----
  {
    if (!arith_operand (operands[2], SImode))
      {
!       if (reg_overlap_mentioned_p (operands[0], operands[1]))
  	{
  	  emit_insn (gen_addsi3_scr (operands[0], operands[1], operands[2]));
  	  DONE;
***************
*** 1798,1813 ****
  ;; copy or constant load before the actual add insn.
  ;; Use u constraint for that case to avoid the invalid value in the stack
  ;; pointer.
- ;; This also results in better code when LRA is not used.  However, we have
- ;; to use different sets of patterns and the order of these patterns is
- ;; important.
  ;; In some cases the constant zero might end up in operands[2] of the
  ;; patterns.  We have to accept that and convert it into a reg-reg move.
  (define_insn_and_split "*addsi3_compact_lra"
    [(set (match_operand:SI 0 "arith_reg_dest" "=r,&u")
  	(plus:SI (match_operand:SI 1 "arith_reg_operand" "%0,r")
  		 (match_operand:SI 2 "arith_or_int_operand" "rI08,rn")))]
!   "TARGET_SH1 && sh_lra_p ()
     && (! reg_overlap_mentioned_p (operands[0], operands[1])
         || arith_operand (operands[2], SImode))"
    "@
--- 1801,1813 ----
  ;; copy or constant load before the actual add insn.
  ;; Use u constraint for that case to avoid the invalid value in the stack
  ;; pointer.
  ;; In some cases the constant zero might end up in operands[2] of the
  ;; patterns.  We have to accept that and convert it into a reg-reg move.
  (define_insn_and_split "*addsi3_compact_lra"
    [(set (match_operand:SI 0 "arith_reg_dest" "=r,&u")
  	(plus:SI (match_operand:SI 1 "arith_reg_operand" "%0,r")
  		 (match_operand:SI 2 "arith_or_int_operand" "rI08,rn")))]
!   "TARGET_SH1
     && (! reg_overlap_mentioned_p (operands[0], operands[1])
         || arith_operand (operands[2], SImode))"
    "@
***************
*** 1867,1930 ****
  }
    [(set_attr "type" "arith")])
  
- ;; Old reload might generate add insns directly (not through the expander) for
- ;; address register calculations when reloading, in which case it won't try
- ;; the addsi_scr pattern.  Because reload will sometimes try to validate
- ;; the generated insns and their constraints, this pattern must be
- ;; recognizable during and after reload.  However, when reload generates
- ;; address register calculations for the stack pointer, we don't allow this
- ;; pattern.  This will make reload prefer using indexed @(reg + reg) address
- ;; modes when the displacement of a @(disp + reg) doesn't fit.
- (define_insn_and_split "*addsi3"
-   [(set (match_operand:SI 0 "arith_reg_dest" "=r")
- 	(plus:SI (match_operand:SI 1 "arith_reg_operand" "r")
- 		 (match_operand:SI 2 "arith_or_int_operand" "rn")))]
-   "TARGET_SH1 && !sh_lra_p ()
-    && (reload_completed || reload_in_progress)
-    && !reg_overlap_mentioned_p (operands[0], operands[1])
-    && (!reload_in_progress
-        || ((!REG_P (operands[1]) || REGNO (operands[1]) != SP_REG)
- 	   && (!REG_P (operands[2]) || REGNO (operands[2]) != SP_REG)))"
-   "#"
-   "&& 1"
-   [(set (match_dup 0) (plus:SI (match_dup 0) (match_dup 2)))]
- {
-   if (operands[2] == const0_rtx)
-     {
-       emit_move_insn (operands[0], operands[1]);
-       DONE;
-     }
- 
-   if (CONST_INT_P (operands[2]))
-     {
-       if (satisfies_constraint_I08 (operands[2]))
- 	emit_move_insn (operands[0], operands[1]);
-       else
- 	{
- 	  emit_move_insn (operands[0], operands[2]);
- 	  operands[2] = operands[1];
- 	}
-     }
-   else if (!reg_overlap_mentioned_p (operands[0], operands[2]))
-     emit_move_insn (operands[0], operands[1]);
-   else
-     operands[2] = operands[1];
- })
- 
- (define_insn_and_split "*addsi3"
-   [(set (match_operand:SI 0 "arith_reg_dest" "=r,r")
- 	(plus:SI (match_operand:SI 1 "arith_reg_operand" "%0,r")
- 		 (match_operand:SI 2 "arith_operand" "rI08,Z")))]
-   "TARGET_SH1 && !sh_lra_p ()"
-   "@
- 	add	%2,%0
- 	#"
-   "&& operands[2] == const0_rtx"
-   [(set (match_dup 0) (match_dup 1))]
- {
- }
-   [(set_attr "type" "arith")])
- 
  ;; -------------------------------------------------------------------------
  ;; Subtraction instructions
  ;; -------------------------------------------------------------------------
--- 1867,1872 ----
***************
*** 1955,1963 ****
  			    (match_operand:SI 2 "arith_reg_operand" "r"))
  		  (reg:SI T_REG)))
     (set (reg:SI T_REG)
! 	(gtu:SI (minus:SI (minus:SI (match_dup 1) (match_dup 2))
! 			  (reg:SI T_REG))
! 		(match_dup 1)))]
    "TARGET_SH1"
    "subc	%2,%0"
    [(set_attr "type" "arith")])
--- 1897,1905 ----
  			    (match_operand:SI 2 "arith_reg_operand" "r"))
  		  (reg:SI T_REG)))
     (set (reg:SI T_REG)
! 	(gtu:SI (plus:DI (zero_extend:DI (match_dup 2))
! 			 (zero_extend:DI (reg:SI T_REG)))
! 		(zero_extend:DI (match_dup 1))))]
    "TARGET_SH1"
    "subc	%2,%0"
    [(set_attr "type" "arith")])
***************
*** 2194,2206 ****
  ;; there is nothing to prevent reload from using r0 to reload the address.
  ;; This reload would clobber the value in r0 we are trying to store.
  ;; If we let reload allocate r0, then this problem can never happen.
  (define_insn "udivsi3_i1"
    [(set (match_operand:SI 0 "register_operand" "=z,z")
! 	(udiv:SI (reg:SI R4_REG) (reg:SI R5_REG)))
     (clobber (reg:SI T_REG))
     (clobber (reg:SI PR_REG))
     (clobber (reg:SI R1_REG))
!    (clobber (reg:SI R4_REG))
     (use (match_operand:SI 1 "arith_reg_operand" "r,r"))
     (use (match_operand 2 "" "Z,Ccl"))]
    "TARGET_SH1 && TARGET_DIVIDE_CALL_DIV1"
--- 2136,2159 ----
  ;; there is nothing to prevent reload from using r0 to reload the address.
  ;; This reload would clobber the value in r0 we are trying to store.
  ;; If we let reload allocate r0, then this problem can never happen.
+ ;;
+ ;; In addition to that, we also must pin the input regs to hard-regs via the
+ ;; predicates.  When these insns are instantiated it also emits the
+ ;; accompanying mov insns to load the hard-regs.  However, subsequent RTL
+ ;; passes might move things around and reassign the operands to pseudo regs
+ ;; which might get allocated to different (wrong) hard-regs eventually.  To
+ ;; avoid that, only allow matching these insns if the operands are the
+ ;; expected hard-regs.
  (define_insn "udivsi3_i1"
    [(set (match_operand:SI 0 "register_operand" "=z,z")
! 	(udiv:SI (match_operand:SI 3 "hard_reg_r4" "=r,r")
! 		 (match_operand:SI 4 "hard_reg_r5" "=r,r")))
     (clobber (reg:SI T_REG))
     (clobber (reg:SI PR_REG))
     (clobber (reg:SI R1_REG))
!    (clobber (match_dup 3))
!    (use (reg:SI R4_REG))
!    (use (reg:SI R5_REG))
     (use (match_operand:SI 1 "arith_reg_operand" "r,r"))
     (use (match_operand 2 "" "Z,Ccl"))]
    "TARGET_SH1 && TARGET_DIVIDE_CALL_DIV1"
***************
*** 2212,2218 ****
  
  (define_insn "udivsi3_i4"
    [(set (match_operand:SI 0 "register_operand" "=y,y")
! 	(udiv:SI (reg:SI R4_REG) (reg:SI R5_REG)))
     (clobber (reg:SI T_REG))
     (clobber (reg:SI PR_REG))
     (clobber (reg:DF DR0_REG))
--- 2165,2172 ----
  
  (define_insn "udivsi3_i4"
    [(set (match_operand:SI 0 "register_operand" "=y,y")
! 	(udiv:SI (match_operand:SI 3 "hard_reg_r4" "=r,r")
! 		 (match_operand:SI 4 "hard_reg_r5" "=r,r")))
     (clobber (reg:SI T_REG))
     (clobber (reg:SI PR_REG))
     (clobber (reg:DF DR0_REG))
***************
*** 2220,2228 ****
     (clobber (reg:DF DR4_REG))
     (clobber (reg:SI R0_REG))
     (clobber (reg:SI R1_REG))
!    (clobber (reg:SI R4_REG))
!    (clobber (reg:SI R5_REG))
     (clobber (reg:SI FPSCR_STAT_REG))
     (use (match_operand:SI 1 "arith_reg_operand" "r,r"))
     (use (match_operand 2 "" "Z,Ccl"))
     (use (reg:SI FPSCR_MODES_REG))]
--- 2174,2184 ----
     (clobber (reg:DF DR4_REG))
     (clobber (reg:SI R0_REG))
     (clobber (reg:SI R1_REG))
!    (clobber (match_dup 3))
!    (clobber (match_dup 4))
     (clobber (reg:SI FPSCR_STAT_REG))
+    (use (reg:SI R4_REG))
+    (use (reg:SI R5_REG))
     (use (match_operand:SI 1 "arith_reg_operand" "r,r"))
     (use (match_operand 2 "" "Z,Ccl"))
     (use (reg:SI FPSCR_MODES_REG))]
***************
*** 2236,2242 ****
  
  (define_insn "udivsi3_i4_single"
    [(set (match_operand:SI 0 "register_operand" "=y,y")
! 	(udiv:SI (reg:SI R4_REG) (reg:SI R5_REG)))
     (clobber (reg:SI T_REG))
     (clobber (reg:SI PR_REG))
     (clobber (reg:DF DR0_REG))
--- 2192,2199 ----
  
  (define_insn "udivsi3_i4_single"
    [(set (match_operand:SI 0 "register_operand" "=y,y")
! 	(udiv:SI (match_operand:SI 3 "hard_reg_r4" "=r,r")
! 		 (match_operand:SI 4 "hard_reg_r5" "=r,r")))
     (clobber (reg:SI T_REG))
     (clobber (reg:SI PR_REG))
     (clobber (reg:DF DR0_REG))
***************
*** 2244,2251 ****
     (clobber (reg:DF DR4_REG))
     (clobber (reg:SI R0_REG))
     (clobber (reg:SI R1_REG))
!    (clobber (reg:SI R4_REG))
!    (clobber (reg:SI R5_REG))
     (use (match_operand:SI 1 "arith_reg_operand" "r,r"))
     (use (match_operand 2 "" "Z,Ccl"))]
    "TARGET_FPU_ANY && TARGET_FPU_SINGLE"
--- 2201,2210 ----
     (clobber (reg:DF DR4_REG))
     (clobber (reg:SI R0_REG))
     (clobber (reg:SI R1_REG))
!    (clobber (match_dup 3))
!    (clobber (match_dup 4))
!    (use (reg:SI R4_REG))
!    (use (reg:SI R5_REG))
     (use (match_operand:SI 1 "arith_reg_operand" "r,r"))
     (use (match_operand 2 "" "Z,Ccl"))]
    "TARGET_FPU_ANY && TARGET_FPU_SINGLE"
***************
*** 2278,2283 ****
--- 2237,2244 ----
  {
    rtx last;
    rtx func_ptr = gen_reg_rtx (Pmode);
+   rtx r4 = gen_rtx_REG (SImode, R4_REG);
+   rtx r5 = gen_rtx_REG (SImode, R5_REG);
  
    /* Emit the move of the address to a pseudo outside of the libcall.  */
    if (TARGET_DIVIDE_CALL_TABLE)
***************
*** 2305,2313 ****
      {
        rtx lab = function_symbol (func_ptr, "__udivsi3_i4", SFUNC_STATIC).lab;
        if (TARGET_FPU_SINGLE)
! 	last = gen_udivsi3_i4_single (operands[0], func_ptr, lab);
        else
! 	last = gen_udivsi3_i4 (operands[0], func_ptr, lab);
      }
    else if (TARGET_SH2A)
      {
--- 2266,2274 ----
      {
        rtx lab = function_symbol (func_ptr, "__udivsi3_i4", SFUNC_STATIC).lab;
        if (TARGET_FPU_SINGLE)
! 	last = gen_udivsi3_i4_single (operands[0], func_ptr, lab, r4, r5);
        else
! 	last = gen_udivsi3_i4 (operands[0], func_ptr, lab, r4, r5);
      }
    else if (TARGET_SH2A)
      {
***************
*** 2319,2328 ****
    else
      {
        rtx lab = function_symbol (func_ptr, "__udivsi3", SFUNC_STATIC).lab;
!       last = gen_udivsi3_i1 (operands[0], func_ptr, lab);
      }
!   emit_move_insn (gen_rtx_REG (SImode, 4), operands[1]);
!   emit_move_insn (gen_rtx_REG (SImode, 5), operands[2]);
    emit_insn (last);
    DONE;
  })
--- 2280,2289 ----
    else
      {
        rtx lab = function_symbol (func_ptr, "__udivsi3", SFUNC_STATIC).lab;
!       last = gen_udivsi3_i1 (operands[0], func_ptr, lab, r4, r5);
      }
!   emit_move_insn (r4, operands[1]);
!   emit_move_insn (r5, operands[2]);
    emit_insn (last);
    DONE;
  })
***************
*** 4808,4821 ****
  ;; Sign extension instructions
  ;; -------------------------------------------------------------------------
  
- ;; ??? This should be a define expand.
- ;; ??? Or perhaps it should be dropped?
- 
- ;; convert_move generates good code for SH[1-4].
- 
  (define_expand "extend<mode>si2"
    [(set (match_operand:SI 0 "arith_reg_dest")
! 	(sign_extend:SI (match_operand:QIHI 1 "general_extend_operand")))])
  
  (define_insn_and_split "*extend<mode>si2_compact_reg"
    [(set (match_operand:SI 0 "arith_reg_dest" "=r")
--- 4769,4791 ----
  ;; Sign extension instructions
  ;; -------------------------------------------------------------------------
  
  (define_expand "extend<mode>si2"
    [(set (match_operand:SI 0 "arith_reg_dest")
! 	(sign_extend:SI (match_operand:QIHI 1 "general_extend_operand")))]
!   ""
! {
!   /* When displacement addressing is used RA will assign r0 to the pseudo
!      register operand for the QI/HImode load.
!      See the comment in sh.cc:prepare_move_operand and PR target/55212.  */
!   if (! lra_in_progress && ! reload_completed
!       && ! TARGET_SH2A
!       && arith_reg_dest (operands[0], <MODE>mode)
!       && short_displacement_mem_operand (operands[1], <MODE>mode))
!     {
!       emit_insn (gen_extend<mode>si2_short_mem_disp_z (operands[0], operands[1]));
!       DONE;
!     }
! })
  
  (define_insn_and_split "*extend<mode>si2_compact_reg"
    [(set (match_operand:SI 0 "arith_reg_dest" "=r")
***************
*** 4867,4872 ****
--- 4837,4862 ----
    [(set_attr "type" "load")
     (set_attr "length" "2,2,4")])
  
+ ;; The extend<mode>si2_short_mem_disp_z pattern must come after the
+ ;; *extend<mode>si2_compact_mem_disp patterns.
+ ;; The patterns without the R0 clobber should be matched by recog first.
+ ;; This R0-clobber pattern is normally only explicitly emitted during
+ ;; expansion before RA.
+ (define_insn_and_split "extend<mode>si2_short_mem_disp_z"
+   [(set (match_operand:SI 0 "arith_reg_dest" "=r")
+ 	(sign_extend:SI
+ 	    (match_operand:QIHI 1 "short_displacement_mem_operand" "m")))
+    (clobber (reg:SI R0_REG))]
+   "TARGET_SH1 && ! TARGET_SH2A"
+   "#"
+   "&& 1"
+   [(set (match_dup 2) (sign_extend:SI (match_dup  1)))
+    (set (match_dup 0) (match_dup 2))]
+ {
+   operands[2] = gen_rtx_REG (SImode, R0_REG);
+ }
+   [(set_attr "type" "load")])
+ 
  ;; The pre-dec and post-inc mems must be captured by the '<' and '>'
  ;; constraints, otherwise wrong code might get generated.
  (define_insn "*extend<mode>si2_predec"
***************
*** 5357,5365 ****
--- 5347,5394 ----
          operands[1] = gen_lowpart (<MODE>mode, reg);
      }
  
+   if (! lra_in_progress && ! reload_completed
+       && ! TARGET_SH2A
+       && arith_reg_operand (operands[1], <MODE>mode)
+       && satisfies_constraint_Sid (operands[0]))
+     {
+       rtx adr = XEXP (operands[0], 0);
+       rtx base = XEXP (adr, 0);
+       rtx idx = XEXP (adr, 1);
+       emit_insn (gen_mov<mode>_store_mem_index (base, idx,operands[1]));
+       DONE;
+     }
+ 
    prepare_move_operands (operands, <MODE>mode);
  })
  
+ ;; The "*mov<mode>_store_mem_index" pattern must come before the
+ ;; "mov<mode>_store_mem_index" pattern.  Matching order is important because
+ ;; the "hard_reg_r0" operand will match in both, but we want to prioritize
+ ;; the former.
+ (define_insn "*mov<mode>_store_mem_index"
+   [(set (mem:QIHI (plus:SI (match_operand:SI 0 "arith_reg_operand" "%r")
+ 			   (match_operand:SI 1 "hard_reg_r0" "z")))
+ 	(match_operand:QIHI 2 "arith_reg_operand" "r"))]
+   "TARGET_SH1 && ! TARGET_SH2A"
+   "mov.<bw>	%2,@(%1,%0)"
+   [(set_attr "type" "store")])
+ 
+ (define_insn_and_split "mov<mode>_store_mem_index"
+   [(set (mem:QIHI (plus:SI (match_operand:SI 0 "arith_reg_operand" "%r")
+ 			   (match_operand:SI 1 "arith_reg_operand" "^zr")))
+ 	(match_operand:QIHI 2 "arith_reg_operand" "r"))
+    (clobber (reg:SI R0_REG))]
+   "TARGET_SH1 && ! TARGET_SH2A"
+   "#"
+   "&& 1"
+   [(set (match_dup 3) (match_dup 1))
+     (set (mem:QIHI (plus:SI (match_dup 0) (match_dup 3))) (match_dup 2))]
+ {
+   operands[3] = gen_rtx_REG (SImode, R0_REG);
+ }
+   [(set_attr "type" "store")])
+ 
  ;; The pre-dec and post-inc mems must be captured by the '<' and '>'
  ;; constraints, otherwise wrong code might get generated.
  (define_insn "*mov<mode>_load_predec"
***************
*** 5645,5650 ****
--- 5674,5695 ----
  					   (const_string "double")
  					   (const_string "none")))])
  
+ ;; LRA will try to satisfy the constraints in match_scratch for the memory
+ ;; displacements and it will make issues on this target.  Use R0 as a scratch
+ ;; register for the constant load.
+ (define_insn "movdf_i4_F_z"
+   [(set (match_operand:DF 0 "fp_arith_reg_operand" "=d")
+ 	(match_operand:DF 1 "const_double_operand" "F"))
+    (use (reg:SI FPSCR_MODES_REG))
+    (clobber (reg:SI R0_REG))]
+   "TARGET_FPU_DOUBLE"
+   "#"
+   [(set_attr "type" "pcfload")
+    (set (attr "length") (if_then_else (eq_attr "fmovd" "yes") (const_int 4) (const_int 8)))
+    (set (attr "fp_mode") (if_then_else (eq_attr "fmovd" "yes")
+ 					   (const_string "double")
+ 					   (const_string "none")))])
+ 
  ;; Moving DFmode between fp/general registers through memory
  ;; (the top of the stack) is faster than moving through fpul even for
  ;; little endian.  Because the type of an instruction is important for its
***************
*** 5784,5789 ****
--- 5829,5842 ----
    [(set (match_dup 0) (match_dup 0))]
    "")
  
+ (define_split
+   [(set (match_operand:SF 0 "register_operand")
+ 	(match_operand:SF 1 "register_operand"))
+    (use (reg:SI FPSCR_MODES_REG))]
+   "TARGET_SH2E && reload_completed
+    && true_regnum (operands[0]) == true_regnum (operands[1])"
+   [(set (match_dup 0) (match_dup 0))])
+ 
  ;; fmovd substitute post-reload splits
  (define_split
    [(set (match_operand:DF 0 "register_operand" "")
***************
*** 6028,6033 ****
--- 6081,6092 ----
    prepare_move_operands (operands, DFmode);
    if (TARGET_FPU_DOUBLE)
      {
+       if (GET_CODE (operands[1]) == CONST_DOUBLE && REG_P (operands[0]))
+ 	{
+ 	  emit_insn (gen_movdf_i4_F_z (operands[0], operands[1]));
+ 	  DONE;
+ 	}
+ 
        emit_insn (gen_movdf_i4 (operands[0], operands[1]));
        DONE;
      }
***************
*** 6072,6082 ****
  ;; when the destination changes mode.
  (define_insn "movsf_ie"
    [(set (match_operand:SF 0 "general_movdst_operand"
! 			        "=f,r,f,f,fy, f,m, r, r,m,f,y,y,rf,r,y,<,y,y")
  	(match_operand:SF 1 "general_movsrc_operand"
! 			        " f,r,G,H,FQ,mf,f,FQ,mr,r,y,f,>,fr,y,r,y,>,y"))
     (use (reg:SI FPSCR_MODES_REG))
!    (clobber (match_scratch:SI 2 "=X,X,X,X,&z, X,X, X, X,X,X,X,X, y,X,X,X,X,X"))]
    "TARGET_SH2E
     && (arith_reg_operand (operands[0], SFmode)
         || fpul_operand (operands[0], SFmode)
--- 6131,6141 ----
  ;; when the destination changes mode.
  (define_insn "movsf_ie"
    [(set (match_operand:SF 0 "general_movdst_operand"
! 			        "=f,r,f,f,f*y,f,m, r, r,m,f,y,y,rf,r,y,<,y,y")
  	(match_operand:SF 1 "general_movsrc_operand"
! 			        " f,r,G,H, FQ,mf,f,FQ,mr,r,y,f,>,fr,y,r,y,>,y"))
     (use (reg:SI FPSCR_MODES_REG))
!    (clobber (match_scratch:SI 2 "=X,X,X,X, &z,X,X, X, X,X,X,X,X, y,X,X,X,X,X"))]
    "TARGET_SH2E
     && (arith_reg_operand (operands[0], SFmode)
         || fpul_operand (operands[0], SFmode)
***************
*** 6153,6167 ****
        (const_string "none")
        (const_string "none")])])
  
! (define_insn_and_split "movsf_ie_ra"
    [(set (match_operand:SF 0 "general_movdst_operand"
! 	 			"=f,r,f,f,fy,f,m, r,r,m,f,y,y,rf,r,y,<,y,y")
  	(match_operand:SF 1 "general_movsrc_operand"
! 				" f,r,G,H,FQ,m,f,FQ,m,r,y,f,>,fr,y,r,y,>,y"))
!    (use (reg:SI FPSCR_MODES_REG))
!    (clobber (match_scratch:SF 2 "=r,r,X,X,&z,r,r, X,r,r,r,r,r, y,r,r,r,r,r"))
!    (const_int 0)]
    "TARGET_SH2E
     && (arith_reg_operand (operands[0], SFmode)
         || fpul_operand (operands[0], SFmode)
         || arith_reg_operand (operands[1], SFmode)
--- 6212,6228 ----
        (const_string "none")
        (const_string "none")])])
  
! ;; LRA will try to satisfy the constraints in match_scratch for the memory
! ;; displacements and that doesn't work well.  Hence movsf_ie_ra is split
! ;; into multiple patterns below to avoid those issues while 'lra_in_progress'.
! (define_insn "movsf_ie_ra"
    [(set (match_operand:SF 0 "general_movdst_operand"
! 				"=f,r,f,f,f,m, r,r,m,f,y,y,r,y,<,y,y")
  	(match_operand:SF 1 "general_movsrc_operand"
! 				" f,r,G,H,m,f,FQ,m,r,y,f,>,y,r,y,>,y"))
!    (use (reg:SI FPSCR_MODES_REG))]
    "TARGET_SH2E
+    && ! sh_movsf_ie_y_split_p (operands[0], operands[1])
     && (arith_reg_operand (operands[0], SFmode)
         || fpul_operand (operands[0], SFmode)
         || arith_reg_operand (operands[1], SFmode)
***************
*** 6171,6177 ****
  	mov	%1,%0
  	fldi0	%0
  	fldi1	%0
- 	#
  	fmov.s	%1,%0
  	fmov.s	%1,%0
  	mov.l	%1,%0
--- 6232,6237 ----
***************
*** 6180,6210 ****
  	fsts	fpul,%0
  	flds	%1,fpul
  	lds.l	%1,%0
- 	#
  	sts	%1,%0
  	lds	%1,%0
  	sts.l	%1,%0
  	lds.l	%1,%0
  	! move optimized away"
!   "reload_completed
!    && sh_movsf_ie_ra_split_p (operands[0], operands[1], operands[2])"
!   [(const_int 0)]
! {
!   if (! rtx_equal_p (operands[0], operands[1]))
!     {
!       emit_insn (gen_movsf_ie (operands[2], operands[1]));
!       emit_insn (gen_movsf_ie (operands[0], operands[2]));
!     }
! }
!   [(set_attr "type" "fmove,move,fmove,fmove,pcfload,fload,fstore,pcload,load,
! 		     store,fmove,fmove,load,*,fpul_gp,gp_fpul,fstore,load,nil")
!    (set_attr "late_fp_use" "*,*,*,*,*,*,yes,*,*,*,*,*,*,*,yes,*,yes,*,*")
     (set_attr_alternative "length"
       [(const_int 2)
        (const_int 2)
        (const_int 2)
        (const_int 2)
-       (const_int 4)
        (if_then_else (match_operand 1 "displacement_mem_operand")
  		    (const_int 4) (const_int 2))
        (if_then_else (match_operand 0 "displacement_mem_operand")
--- 6240,6258 ----
  	fsts	fpul,%0
  	flds	%1,fpul
  	lds.l	%1,%0
  	sts	%1,%0
  	lds	%1,%0
  	sts.l	%1,%0
  	lds.l	%1,%0
  	! move optimized away"
!   [(set_attr "type" "fmove,move,fmove,fmove,fload,fstore,pcload,load,
! 		     store,fmove,fmove,load,fpul_gp,gp_fpul,fstore,load,nil")
!    (set_attr "late_fp_use" "*,*,*,*,*,yes,*,*,*,*,*,*,yes,*,yes,*,*")
     (set_attr_alternative "length"
       [(const_int 2)
        (const_int 2)
        (const_int 2)
        (const_int 2)
        (if_then_else (match_operand 1 "displacement_mem_operand")
  		    (const_int 4) (const_int 2))
        (if_then_else (match_operand 0 "displacement_mem_operand")
***************
*** 6217,6223 ****
        (const_int 2)
        (const_int 2)
        (const_int 2)
-       (const_int 4)
        (const_int 2)
        (const_int 2)
        (const_int 2)
--- 6265,6270 ----
***************
*** 6229,6235 ****
        (const_string "none")
        (const_string "single")
        (const_string "single")
-       (const_string "none")
        (if_then_else (eq_attr "fmovd" "yes")
  		    (const_string "single") (const_string "none"))
        (if_then_else (eq_attr "fmovd" "yes")
--- 6276,6281 ----
***************
*** 6244,6258 ****
        (const_string "none")
        (const_string "none")
        (const_string "none")
        (const_string "none")
        (const_string "none")])])
  
  (define_split
    [(set (match_operand:SF 0 "register_operand" "")
  	(match_operand:SF 1 "register_operand" ""))
     (use (reg:SI FPSCR_MODES_REG))
     (clobber (reg:SI FPUL_REG))]
!   "TARGET_SH1"
    [(parallel [(set (reg:SF FPUL_REG) (match_dup 1))
  	      (use (reg:SI FPSCR_MODES_REG))
  	      (clobber (scratch:SI))])
--- 6290,6364 ----
        (const_string "none")
        (const_string "none")
        (const_string "none")
+       (const_string "none")])])
+ 
+ (define_insn_and_split "movsf_ie_rffr"
+   [(set (match_operand:SF 0 "arith_reg_dest" "=f,r,rf")
+ 	(match_operand:SF 1 "arith_reg_operand" "f,r,fr"))
+    (use (reg:SI FPSCR_MODES_REG))
+    (clobber (match_scratch:SF 2 "=X,X,y"))]
+   "TARGET_SH2E"
+   "@
+ 	fmov	%1,%0
+ 	mov	%1,%0
+ 	#"
+   "reload_completed
+    && (FP_REGISTER_P (REGNO (operands[0]))
+        != FP_REGISTER_P (REGNO (operands[1])))"
+   [(const_int 0)]
+ {
+   emit_insn (gen_movsf_ie_ra (operands[2], operands[1]));
+   emit_insn (gen_movsf_ie_ra (operands[0], operands[2]));
+ }
+   [(set_attr "type" "fmove,move,*")
+    (set_attr_alternative "length"
+      [(const_int 2)
+       (const_int 2)
+       (const_int 4)])
+    (set_attr_alternative "fp_mode"
+      [(if_then_else (eq_attr "fmovd" "yes")
+ 		    (const_string "single") (const_string "none"))
        (const_string "none")
        (const_string "none")])])
  
+ (define_insn "movsf_ie_F_z"
+   [(set (match_operand:SF 0 "fp_arith_reg_operand" "=f")
+ 	(match_operand:SF 1 "const_double_operand" "F"))
+    (use (reg:SI FPSCR_MODES_REG))
+    (clobber (reg:SI R0_REG))]
+   "TARGET_SH2E"
+   "#"
+   [(set_attr "type" "pcfload")
+    (set_attr "length" "4")])
+ 
+ (define_insn "movsf_ie_Q_z"
+   [(set (match_operand:SF 0 "fpul_operand" "=y")
+ 	(match_operand:SF 1 "pc_relative_load_operand" "Q"))
+    (use (reg:SI FPSCR_MODES_REG))
+    (clobber (reg:SI R0_REG))]
+   "TARGET_SH2E"
+   "#"
+   [(set_attr "type" "pcfload")
+    (set_attr "length" "4")])
+ 
+ (define_insn "movsf_ie_y"
+   [(set (match_operand:SF 0 "arith_reg_dest" "=fr")
+ 	(match_operand:SF 1 "arith_reg_operand" "rf"))
+    (use (reg:SI FPSCR_MODES_REG))
+    (clobber (reg:SI FPUL_REG))]
+   "TARGET_SH2E"
+   "#"
+   [(set_attr "type" "*")
+    (set_attr "length" "4")])
+ 
  (define_split
    [(set (match_operand:SF 0 "register_operand" "")
  	(match_operand:SF 1 "register_operand" ""))
     (use (reg:SI FPSCR_MODES_REG))
     (clobber (reg:SI FPUL_REG))]
!   "TARGET_SH1
!    && ! fpul_operand (operands[0], SFmode)
!    && ! fpul_operand (operands[1], SFmode)"
    [(parallel [(set (reg:SF FPUL_REG) (match_dup 1))
  	      (use (reg:SI FPSCR_MODES_REG))
  	      (clobber (scratch:SI))])
***************
*** 6261,6266 ****
--- 6367,6612 ----
  	      (clobber (scratch:SI))])]
    "")
  
+ ;; The "*movsf_ie_store_mem_index" pattern must come before the
+ ;; "movsf_ie_store_mem_index" pattern.  Matching order is important because
+ ;; the "hard_reg_r0" operand will match in both, but we want to prioritize
+ ;; the former.
+ (define_insn "*movsf_ie_store_mem_index"
+   [(set (mem:SF (plus:SI (match_operand:SI 0 "arith_reg_operand" "%r")
+ 			 (match_operand:SI 1 "hard_reg_r0" "z")))
+ 	(match_operand:SF 2 "fp_arith_reg_operand" "f"))
+     (use (reg:SI FPSCR_MODES_REG))]
+   "TARGET_SH2E"
+   "fmov.s    %2,@(%1,%0)"
+   [(set_attr "type" "store")])
+ 
+ (define_insn_and_split "movsf_ie_store_mem_index"
+   [(set (mem:SF (plus:SI (match_operand:SI 0 "arith_reg_operand" "%r")
+ 			 (match_operand:SI 1 "arith_reg_operand" "^zr")))
+ 	(match_operand:SF 2 "fp_arith_reg_operand" "f"))
+    (use (reg:SI FPSCR_MODES_REG))
+    (clobber (reg:SI R0_REG))]
+   "TARGET_SH2E"
+   "#"
+   "&& 1"
+   [(set (match_dup 3) (match_dup 1))
+    (parallel [(set (mem:SF (plus:SI (match_dup 0) (match_dup 3))) (match_dup 2))
+ 		(use (reg:SI FPSCR_MODES_REG))])]
+ {
+   operands[3] = gen_rtx_REG (SImode, R0_REG);
+ }
+   [(set_attr "type" "store")])
+ 
+ ;; The "*movsf_ie_load_mem_index" pattern must come before the
+ ;; "movsf_ie_load_mem_index" pattern.  Matching order is important because
+ ;; the "hard_reg_r0" operand will match in both, but we want to prioritize
+ ;; the former.
+ (define_insn "*movsf_ie_load_mem_index"
+   [(set (match_operand:SF 0 "fp_arith_reg_operand" "=f")
+ 	(mem:SF (plus:SI (match_operand:SI 1 "arith_reg_operand" "%r")
+ 			 (match_operand:SI 2 "hard_reg_r0" "z"))))
+    (use (reg:SI FPSCR_MODES_REG))]
+   "TARGET_SH2E"
+   "fmov.s    @(%2,%1),%0"
+   [(set_attr "type" "load")])
+ 
+ (define_insn_and_split "movsf_ie_load_mem_index"
+   [(set (match_operand:SF 0 "fp_arith_reg_operand" "=f")
+ 	(mem:SF (plus:SI (match_operand:SI 1 "arith_reg_operand" "%r")
+ 			 (match_operand:SI 2 "arith_reg_operand" "^zr"))))
+    (use (reg:SI FPSCR_MODES_REG))
+    (clobber (reg:SI R0_REG))]
+   "TARGET_SH2E"
+   "#"
+   "&& 1"
+   [(set (match_dup 3) (match_dup 2))
+    (parallel [(set (match_dup 0) (mem:SF (plus:SI (match_dup 1) (match_dup 3))))
+ 		(use (reg:SI FPSCR_MODES_REG))])]
+ {
+   operands[3] = gen_rtx_REG (SImode, R0_REG);
+ }
+   [(set_attr "type" "load")])
+ 
+ 
+ ;; Like DFmode values, V2SF lives in an even fp reg pair and also needs its
+ ;; set of move insns or else LRA will try to ferry it through GENERAL_REGS
+ ;; and fail in a reload cycle because it's prohibited by
+ ;; sh_can_change_mode_class.
+ (define_expand "movv2sf"
+   [(set (match_operand:V2SF 0 "general_movdst_operand")
+ 	(match_operand:V2SF 1 "general_movsrc_operand"))]
+   "TARGET_FPU_ANY"
+ {
+   prepare_move_operands (operands, V2SFmode);
+   emit_insn (gen_movv2sf_i (operands[0], operands[1]));
+   DONE;
+ })
+ 
+ ;; V2SF is not allowed in general registers (see sh_hard_regno_mode_ok),
+ ;; so only fp-reg and memory alternatives are provided.
+ ;; After RA split it into 2x fmov.s.
+ (define_insn "movv2sf_i"
+   [(set (match_operand:V2SF 0 "general_movdst_operand" "=f,f,m")
+ 	(match_operand:V2SF 1 "general_movsrc_operand" " f,m,f"))
+    (use (reg:SI FPSCR_MODES_REG))]
+   "TARGET_FPU_ANY
+    && (fp_arith_reg_operand (operands[0], V2SFmode)
+        || fp_arith_reg_operand (operands[1], V2SFmode))"
+   "#"
+   [(set_attr "type" "move")
+    (set_attr "fp_mode" "single")
+    (set_attr "length" "8")])
+ 
+ (define_split
+   [(set (match_operand:V2SF 0 "register_operand")
+ 	(match_operand:V2SF 1 "register_operand"))
+    (use (reg:SI FPSCR_MODES_REG))]
+   "TARGET_FPU_ANY && reload_completed
+    && FP_REGISTER_P (true_regnum (operands[0]))
+    && FP_REGISTER_P (true_regnum (operands[1]))"
+   [(const_int 0)]
+ {
+   int dst = true_regnum (operands[0]);
+   int src = true_regnum (operands[1]);
+ 
+   /* The register pairs are even-aligned and therefore either identical or
+      disjoint, so the order of the two halves does not matter.  A dst == src
+      no-op move decomposes into two self fmov.s which the existing no-op move
+      splits clean up.  */
+   emit_insn (gen_movsf_ie (gen_rtx_REG (SFmode, dst + SH_REG_MSW_OFFSET),
+ 			   gen_rtx_REG (SFmode, src + SH_REG_MSW_OFFSET)));
+   emit_insn (gen_movsf_ie (gen_rtx_REG (SFmode, dst + SH_REG_LSW_OFFSET),
+ 			   gen_rtx_REG (SFmode, src + SH_REG_LSW_OFFSET)));
+   DONE;
+ })
+ 
+ ;; FIXME: This is essentially a copy of DFmode move split.
+ (define_split
+   [(set (match_operand:V2SF 0 "register_operand")
+ 	(match_operand:V2SF 1 "memory_operand"))
+    (use (reg:SI FPSCR_MODES_REG))]
+   "TARGET_FPU_ANY && reload_completed
+    && FP_REGISTER_P (true_regnum (operands[0]))"
+   [(const_int 0)]
+ {
+   int regno = true_regnum (operands[0]);
+   rtx addr, insn;
+   rtx mem2 = change_address (operands[1], SFmode, NULL_RTX);
+   rtx reg0 = gen_rtx_REG (SFmode, regno + SH_REG_MSW_OFFSET);
+   rtx reg1 = gen_rtx_REG (SFmode, regno + SH_REG_LSW_OFFSET);
+ 
+   operands[1] = copy_rtx (mem2);
+   addr = XEXP (mem2, 0);
+ 
+   switch (GET_CODE (addr))
+     {
+     case REG:
+       /* If the register is an arithmetic register we can fall through to the
+ 	 REG+DISP case below.  Otherwise we have to use a combination of
+ 	 POST_INC and REG addressing.  */
+       if (! arith_reg_operand (operands[1], SFmode))
+ 	{
+ 	  XEXP (mem2, 0) = addr = gen_rtx_POST_INC (SImode, addr);
+ 	  insn = emit_insn (gen_movsf_ie (reg0, mem2));
+ 	  add_reg_note (insn, REG_INC, XEXP (addr, 0));
+ 
+ 	  emit_insn (gen_movsf_ie (reg1, operands[1]));
+ 
+ 	  if (REGNO (XEXP (addr, 0)) == STACK_POINTER_REGNUM)
+ 	    emit_insn (gen_push_e (reg0));
+ 	  else
+ 	    emit_insn (gen_addsi3 (XEXP (operands[1], 0), XEXP (operands[1], 0),
+ 				   GEN_INT (-4)));
+ 	  break;
+ 	}
+       /* Fall through.  */
+ 
+     case PLUS:
+       emit_insn (gen_movsf_ie (reg0, operands[1]));
+       operands[1] = copy_rtx (operands[1]);
+       XEXP (operands[1], 0) = plus_constant (Pmode, addr, 4);
+       emit_insn (gen_movsf_ie (reg1, operands[1]));
+       break;
+ 
+     case POST_INC:
+       insn = emit_insn (gen_movsf_ie (reg0, operands[1]));
+       add_reg_note (insn, REG_INC, XEXP (addr, 0));
+ 
+       insn = emit_insn (gen_movsf_ie (reg1, operands[1]));
+       add_reg_note (insn, REG_INC, XEXP (addr, 0));
+       break;
+ 
+     default:
+       debug_rtx (addr);
+       gcc_unreachable ();
+     }
+ 
+   DONE;
+ })
+ 
+ ;; FIXME: This is essentially a copy of DFmode move split.
+ (define_split
+   [(set (match_operand:V2SF 0 "memory_operand")
+ 	(match_operand:V2SF 1 "register_operand"))
+    (use (reg:SI FPSCR_MODES_REG))]
+   "TARGET_FPU_ANY && reload_completed
+    && FP_REGISTER_P (true_regnum (operands[1]))"
+   [(const_int 0)]
+ {
+   int regno = true_regnum (operands[1]);
+   rtx insn, addr;
+   rtx reg0 = gen_rtx_REG (SFmode, regno + SH_REG_MSW_OFFSET);
+   rtx reg1 = gen_rtx_REG (SFmode, regno + SH_REG_LSW_OFFSET);
+ 
+   operands[0] = copy_rtx (operands[0]);
+   PUT_MODE (operands[0], SFmode);
+   addr = XEXP (operands[0], 0);
+ 
+   switch (GET_CODE (addr))
+     {
+     case REG:
+       /* If the register is an arithmetic register we can fall through to the
+ 	 REG+DISP case below.  Otherwise we have to use a combination of REG
+ 	 and PRE_DEC addressing.  */
+       if (! arith_reg_operand (operands[0], SFmode))
+ 	{
+ 	  emit_insn (gen_addsi3 (addr, addr, GEN_INT (4)));
+ 	  emit_insn (gen_movsf_ie (operands[0], reg1));
+ 
+ 	  operands[0] = copy_rtx (operands[0]);
+ 	  XEXP (operands[0], 0) = addr = gen_rtx_PRE_DEC (SImode, addr);
+ 
+ 	  insn = emit_insn (gen_movsf_ie (operands[0], reg0));
+ 	  add_reg_note (insn, REG_INC, XEXP (addr, 0));
+ 	  break;
+ 	}
+       /* Fall through.  */
+ 
+     case PLUS:
+       emit_insn (gen_movsf_ie (operands[0], reg0));
+ 
+       operands[0] = copy_rtx (operands[0]);
+       XEXP (operands[0], 0) = plus_constant (Pmode, addr, 4);
+ 
+       emit_insn (gen_movsf_ie (operands[0], reg1));
+       break;
+ 
+     case PRE_DEC:
+       insn = emit_insn (gen_movsf_ie (operands[0], reg1));
+       add_reg_note (insn, REG_INC, XEXP (addr, 0));
+ 
+       insn = emit_insn (gen_movsf_ie (operands[0], reg0));
+       add_reg_note (insn, REG_INC, XEXP (addr, 0));
+       break;
+ 
+     default:
+       debug_rtx (addr);
+       gcc_unreachable ();
+     }
+ 
+   DONE;
+ })
+ 
  (define_expand "movsf"
    [(set (match_operand:SF 0 "general_movdst_operand" "")
          (match_operand:SF 1 "general_movsrc_operand" ""))]
***************
*** 6269,6283 ****
    prepare_move_operands (operands, SFmode);
    if (TARGET_SH2E)
      {
!       if (lra_in_progress)
  	{
! 	  if (GET_CODE (operands[0]) == SCRATCH)
! 	    DONE;
! 	  emit_insn (gen_movsf_ie_ra (operands[0], operands[1]));
  	  DONE;
  	}
! 
!       emit_insn (gen_movsf_ie (operands[0], operands[1]));
        DONE;
      }
  })
--- 6615,6674 ----
    prepare_move_operands (operands, SFmode);
    if (TARGET_SH2E)
      {
!       if (GET_CODE (operands[0]) == SCRATCH)
! 	DONE;
!       if (! lra_in_progress && ! reload_completed
! 	  && fp_arith_reg_operand (operands[1], SFmode)
! 	  && satisfies_constraint_Sid (operands[0]))
  	{
! 	  rtx adr = XEXP (operands[0], 0);
! 	  rtx base = XEXP (adr, 0);
! 	  rtx idx = XEXP (adr, 1);
! 	  emit_insn (gen_movsf_ie_store_mem_index (base, idx, operands[1]));
  	  DONE;
  	}
!       if (! lra_in_progress && ! reload_completed
! 	  && fp_arith_reg_operand (operands[0], SFmode)
! 	  && satisfies_constraint_Sid (operands[1]))
! 	{
! 	  rtx adr = XEXP (operands[1], 0);
! 	  rtx base = XEXP (adr, 0);
! 	  rtx idx = XEXP (adr, 1);
! 	  emit_insn (gen_movsf_ie_load_mem_index (operands[0], base, idx));
! 	  DONE;
! 	}
!       /* reg from/to multiword subreg may be splitted to several reg from/to
! 	 subreg of SImode by subreg1 pass.  This confuses our splitted
! 	 movsf logic for LRA and will end up in bad code or ICE.  Use a special
! 	 pattern so that LRA can optimize this case.  */
!       if (! lra_in_progress && ! reload_completed
! 	  && sh_movsf_ie_subreg_multiword_p (operands[0], operands[1]))
! 	{
! 	  emit_insn (gen_movsf_ie_rffr (operands[0], operands[1]));
! 	  DONE;
! 	}
!       if (GET_CODE (operands[1]) == CONST_DOUBLE
! 	  &&  ! satisfies_constraint_G (operands[1])
! 	  &&  ! satisfies_constraint_H (operands[1])
! 	  && REG_P (operands[0]))
! 	{
! 	  if (lra_in_progress)
! 	    emit_insn (gen_movsf_ie (operands[0], operands[1]));
! 	  else
! 	    emit_insn (gen_movsf_ie_F_z (operands[0], operands[1]));
! 	}
!       else if (REG_P (operands[0]) && REGNO (operands[0]) == FPUL_REG
! 	       && satisfies_constraint_Q (operands[1]))
! 	emit_insn (gen_movsf_ie_Q_z (operands[0], operands[1]));
!       else if (sh_movsf_ie_y_split_p (operands[0], operands[1]))
! 	{
! 	  if (lra_in_progress)
! 	    emit_insn (gen_movsf_ie (operands[0], operands[1]));
! 	  else
! 	    emit_insn (gen_movsf_ie_y (operands[0], operands[1]));
! 	}
!       else
! 	emit_insn (gen_movsf_ie_ra (operands[0], operands[1]));
        DONE;
      }
  })
***************
*** 8965,8981 ****
     (set_attr "needs_delay_slot" "yes")])
  
  (define_insn "block_lump_real"
!   [(parallel [(set (mem:BLK (reg:SI R4_REG))
! 		   (mem:BLK (reg:SI R5_REG)))
! 	      (use (match_operand:SI 0 "arith_reg_operand" "r,r"))
! 	      (use (match_operand 1 "" "Z,Ccl"))
! 	      (use (reg:SI R6_REG))
! 	      (clobber (reg:SI PR_REG))
! 	      (clobber (reg:SI T_REG))
! 	      (clobber (reg:SI R4_REG))
! 	      (clobber (reg:SI R5_REG))
! 	      (clobber (reg:SI R6_REG))
! 	      (clobber (reg:SI R0_REG))])]
    "TARGET_SH1 && ! TARGET_HARD_SH4"
    "@
  	jsr	@%0%#
--- 9356,9375 ----
     (set_attr "needs_delay_slot" "yes")])
  
  (define_insn "block_lump_real"
!   [(set (mem:BLK (match_operand:SI 2 "hard_reg_r4" "=r,r"))
! 	(mem:BLK (match_operand:SI 3 "hard_reg_r5" "=r,r")))
!    (use (match_operand:SI 0 "arith_reg_operand" "r,r"))
!    (use (match_operand 1 "" "Z,Ccl"))
!    (use (match_operand:SI 4 "hard_reg_r6" "=r,r"))
!    (use (reg:SI R4_REG))
!    (use (reg:SI R5_REG))
!    (use (reg:SI R6_REG))
!    (clobber (match_dup 2))
!    (clobber (match_dup 3))
!    (clobber (match_dup 4))
!    (clobber (reg:SI PR_REG))
!    (clobber (reg:SI T_REG))
!    (clobber (reg:SI R0_REG))]
    "TARGET_SH1 && ! TARGET_HARD_SH4"
    "@
  	jsr	@%0%#
***************
*** 9000,9019 ****
     (set_attr "needs_delay_slot" "yes")])
  
  (define_insn "block_lump_real_i4"
!   [(parallel [(set (mem:BLK (reg:SI R4_REG))
! 		   (mem:BLK (reg:SI R5_REG)))
! 	      (use (match_operand:SI 0 "arith_reg_operand" "r,r"))
! 	      (use (match_operand 1 "" "Z,Ccl"))
! 	      (use (reg:SI R6_REG))
! 	      (clobber (reg:SI PR_REG))
! 	      (clobber (reg:SI T_REG))
! 	      (clobber (reg:SI R4_REG))
! 	      (clobber (reg:SI R5_REG))
! 	      (clobber (reg:SI R6_REG))
! 	      (clobber (reg:SI R0_REG))
! 	      (clobber (reg:SI R1_REG))
! 	      (clobber (reg:SI R2_REG))
! 	      (clobber (reg:SI R3_REG))])]
    "TARGET_HARD_SH4"
    "@
  	jsr	@%0%#
--- 9394,9416 ----
     (set_attr "needs_delay_slot" "yes")])
  
  (define_insn "block_lump_real_i4"
!   [(set (mem:BLK (match_operand:SI 2 "hard_reg_r4" "=r,r"))
! 	(mem:BLK (match_operand:SI 3 "hard_reg_r5" "=r,r")))
!    (use (match_operand:SI 0 "arith_reg_operand" "r,r"))
!    (use (match_operand 1 "" "Z,Ccl"))
!    (use (match_operand:SI 4 "hard_reg_r6" "=r,r"))
!    (use (reg:SI R4_REG))
!    (use (reg:SI R5_REG))
!    (use (reg:SI R6_REG))
!    (clobber (match_dup 2))
!    (clobber (match_dup 3))
!    (clobber (match_dup 4))
!    (clobber (reg:SI PR_REG))
!    (clobber (reg:SI T_REG))
!    (clobber (reg:SI R0_REG))
!    (clobber (reg:SI R1_REG))
!    (clobber (reg:SI R2_REG))
!    (clobber (reg:SI R3_REG))]
    "TARGET_HARD_SH4"
    "@
  	jsr	@%0%#
diff -Nrcpad gcc-17-20260628/gcc/config/sh/sh.opt gcc-17-20260705/gcc/config/sh/sh.opt
*** gcc-17-20260628/gcc/config/sh/sh.opt	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/sh/sh.opt	Sun Jul  5 22:32:07 2026
*************** Target Var(TARGET_FSRRA)
*** 299,303 ****
  Enable the use of the fsrra instruction.
  
  mlra
! Target Var(sh_lra_flag) Init(0) Save
! Use LRA instead of reload (transitional).
--- 299,303 ----
  Enable the use of the fsrra instruction.
  
  mlra
! Target Ignore
! Does nothing.  Preserved for backward compatibility.
diff -Nrcpad gcc-17-20260628/gcc/config/sh/sh.opt.urls gcc-17-20260705/gcc/config/sh/sh.opt.urls
*** gcc-17-20260628/gcc/config/sh/sh.opt.urls	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/sh/sh.opt.urls	Sun Jul  5 22:32:07 2026
*************** UrlSuffix(gcc/SH-Options.html#index-mfsc
*** 172,177 ****
  mfsrra
  UrlSuffix(gcc/SH-Options.html#index-mfsrra)
  
! mlra
! UrlSuffix(gcc/SH-Options.html#index-mlra-2)
  
--- 172,176 ----
  mfsrra
  UrlSuffix(gcc/SH-Options.html#index-mfsrra)
  
! ; skipping UrlSuffix for 'mlra' due to finding no URLs
  
diff -Nrcpad gcc-17-20260628/gcc/config/sh/sync.md gcc-17-20260705/gcc/config/sh/sync.md
*** gcc-17-20260628/gcc/config/sh/sync.md	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/sh/sync.md	Sun Jul  5 22:32:07 2026
***************
*** 217,223 ****
  	    (and (match_test "mode == SImode")
  		 (and (match_test "!TARGET_ATOMIC_HARD_LLCS")
  		      (match_test "!TARGET_SH4A || TARGET_ATOMIC_STRICT"))
! 		 (match_operand 0 "short_displacement_mem_operand")))))
  
  (define_expand "atomic_compare_and_swap<mode>"
    [(match_operand:SI 0 "arith_reg_dest")		;; bool success output
--- 217,225 ----
  	    (and (match_test "mode == SImode")
  		 (and (match_test "!TARGET_ATOMIC_HARD_LLCS")
  		      (match_test "!TARGET_SH4A || TARGET_ATOMIC_STRICT"))
! 		 (match_operand 0 "short_displacement_mem_operand")))
!        (ior (match_test "!TARGET_ATOMIC_HARD_LLCS")
! 	    (not (match_operand 0 "gbr_address_mem")))))
  
  (define_expand "atomic_compare_and_swap<mode>"
    [(match_operand:SI 0 "arith_reg_dest")		;; bool success output
***************
*** 715,721 ****
  				   && TARGET_SH4A && !TARGET_ATOMIC_STRICT
  				   && mode != SImode"))
  		 (ior (match_operand 0 "short_displacement_mem_operand")
! 		      (match_operand 0 "gbr_address_mem"))))))
  
  (define_expand "atomic_fetch_<fetchop_name><mode>"
    [(set (match_operand:QIHISI 0 "arith_reg_dest")
--- 717,725 ----
  				   && TARGET_SH4A && !TARGET_ATOMIC_STRICT
  				   && mode != SImode"))
  		 (ior (match_operand 0 "short_displacement_mem_operand")
! 		      (match_operand 0 "gbr_address_mem"))))
!        (ior (match_test "!TARGET_ATOMIC_HARD_LLCS")
!             (not (match_operand 0 "gbr_address_mem")))))
  
  (define_expand "atomic_fetch_<fetchop_name><mode>"
    [(set (match_operand:QIHISI 0 "arith_reg_dest")
diff -Nrcpad gcc-17-20260628/gcc/config/sol2-clearcap.map gcc-17-20260705/gcc/config/sol2-clearcap.map
*** gcc-17-20260628/gcc/config/sol2-clearcap.map	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/sol2-clearcap.map	Sun Jul  5 22:32:07 2026
***************
*** 1,2 ****
  # Clear all hardware capabilities emitted by Sun as.
! hwcap_1 = V0x0 OVERRIDE;
--- 1,7 ----
  # Clear all hardware capabilities emitted by Sun as.
! #
! # Uses mapfile v2 syntax which is the only way to clear AT_SUN_CAP_HW2 flags.
! $mapfile_version 2
! CAPABILITY {
!   HW = ;
! };
diff -Nrcpad gcc-17-20260628/gcc/config/sol2-clearcapv2.map gcc-17-20260705/gcc/config/sol2-clearcapv2.map
*** gcc-17-20260628/gcc/config/sol2-clearcapv2.map	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/sol2-clearcapv2.map	Thu Jan  1 00:00:00 1970
***************
*** 1,7 ****
- # Clear all hardware capabilities emitted by Sun as.
- #
- # Uses mapfile v2 syntax which is the only way to clear AT_SUN_CAP_HW2 flags.
- $mapfile_version 2
- CAPABILITY {
-   HW = ;
- };
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/config/sol2.h gcc-17-20260705/gcc/config/sol2.h
*** gcc-17-20260628/gcc/config/sol2.h	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/sol2.h	Sun Jul  5 22:32:07 2026
*************** along with GCC; see the file COPYING3.
*** 142,148 ****
  /* It's safe to pass -s always, even if -g is not used.  Those options are
     handled by both Sun as and GNU as.  */
  #define ASM_SPEC_BASE \
! "%{v:-V} %{Qy:} %{!Qn:-Qy} %{Ym,*} -s %(asm_cpu)"
  
  #define ASM_PIC_SPEC " %{" FPIE_OR_FPIC_SPEC ":-K PIC}"
  
--- 142,148 ----
  /* It's safe to pass -s always, even if -g is not used.  Those options are
     handled by both Sun as and GNU as.  */
  #define ASM_SPEC_BASE \
! "%{Qy:} %{!Qn:-Qy} %{Ym,*} -s %(asm_cpu)"
  
  #define ASM_PIC_SPEC " %{" FPIE_OR_FPIC_SPEC ":-K PIC}"
  
*************** along with GCC; see the file COPYING3.
*** 348,354 ****
  
  /* Clear hardware capabilities, either explicitly or with OpenMP:
     #pragma openmp declare simd creates clones for SSE2, AVX, and AVX2.  */
! #ifdef HAVE_LD_CLEARCAP
  #define LINK_CLEARCAP_SPEC " %{mclear-hwcap|fopenmp*:-M %sclearcap.map}"
  #else
  #define LINK_CLEARCAP_SPEC ""
--- 348,354 ----
  
  /* Clear hardware capabilities, either explicitly or with OpenMP:
     #pragma openmp declare simd creates clones for SSE2, AVX, and AVX2.  */
! #if HAVE_SOLARIS_LD
  #define LINK_CLEARCAP_SPEC " %{mclear-hwcap|fopenmp*:-M %sclearcap.map}"
  #else
  #define LINK_CLEARCAP_SPEC ""
*************** along with GCC; see the file COPYING3.
*** 446,454 ****
  #undef TARGET_ASM_ASSEMBLE_VISIBILITY
  #define TARGET_ASM_ASSEMBLE_VISIBILITY solaris_assemble_visibility
  
! #define AS_NEEDS_DASH_FOR_PIPED_INPUT
  
  #endif
  /* Solaris has an implementation of __enable_execute_stack.  */
  #define HAVE_ENABLE_EXECUTE_STACK
  
--- 446,459 ----
  #undef TARGET_ASM_ASSEMBLE_VISIBILITY
  #define TARGET_ASM_ASSEMBLE_VISIBILITY solaris_assemble_visibility
  
! /* Handle gcc -v/-w options.  There's no point including -I: while as accepts
!    it, it's only useful in combination with -P which invokes cpp.  Instead, gas
!    uses -I for the .include directive, but as doesn't understand that.  */
! #define ASM_V_SPEC "%{v:-V} %{w:-n}"
  
+ #define AS_NEEDS_DASH_FOR_PIPED_INPUT
  #endif
+ 
  /* Solaris has an implementation of __enable_execute_stack.  */
  #define HAVE_ENABLE_EXECUTE_STACK
  
diff -Nrcpad gcc-17-20260628/gcc/config/t-sol2 gcc-17-20260705/gcc/config/t-sol2
*** gcc-17-20260628/gcc/config/t-sol2	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/t-sol2	Sun Jul  5 22:32:07 2026
*************** sol2.o: $(srcdir)/config/sol2.cc
*** 50,54 ****
  install: install-clearcap-map
  
  # Ignore failures: file only exists if linker supports it.
! install-clearcap-map:
! 	-$(INSTALL_DATA) clearcap.map $(DESTDIR)$(libdir)
--- 50,54 ----
  install: install-clearcap-map
  
  # Ignore failures: file only exists if linker supports it.
! install-clearcap-map: $(srcdir)/config/sol2-clearcap.map
! 	-$(INSTALL_DATA) $< $(DESTDIR)$(libdir)
diff -Nrcpad gcc-17-20260628/gcc/config/vax/vax.opt.urls gcc-17-20260705/gcc/config/vax/vax.opt.urls
*** gcc-17-20260628/gcc/config/vax/vax.opt.urls	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/config/vax/vax.opt.urls	Sun Jul  5 22:32:07 2026
*************** munix
*** 19,25 ****
  UrlSuffix(gcc/VAX-Options.html#index-munix)
  
  mlra
! UrlSuffix(gcc/VAX-Options.html#index-mlra-3)
  
  mvaxc-alignment
  UrlSuffix(gcc/VAX-Options.html#index-mvaxc-alignment)
--- 19,25 ----
  UrlSuffix(gcc/VAX-Options.html#index-munix)
  
  mlra
! UrlSuffix(gcc/VAX-Options.html#index-mlra-2)
  
  mvaxc-alignment
  UrlSuffix(gcc/VAX-Options.html#index-mvaxc-alignment)
diff -Nrcpad gcc-17-20260628/gcc/config.gcc gcc-17-20260705/gcc/config.gcc
*** gcc-17-20260628/gcc/config.gcc	Sun Jun 28 22:32:06 2026
--- gcc-17-20260705/gcc/config.gcc	Sun Jul  5 22:32:07 2026
***************
*** 54,67 ****
  #			support, the default value of
  #			$default_gnu_indirect_function is set to
  #			"no" except for targets which are known to be OK.
- #
- #  gas_flag		One of yes, no or "" depending on whether GNU as was
- #			explicitly requested, explicitly not requested or
- #			unspecified.
- #
- #  gnu_ld_flag		One of yes, no or "" depending on whether GNU ld was
- #			explicitly requested, explicitly not requested or
- #			unspecified.
  
  # This file sets the following shell variables for use by the
  # autoconf-generated configure script:
--- 54,59 ----
***************
*** 179,187 ****
  #
  #  thread_file		Set to control which thread package to use.
  #
- #  gas			Set to yes or no depending on whether the target
- #			system normally uses GNU as.
- #
  #  configure_default_options
  #			Set to an initializer for configure_default_options
  #			in configargs.h, based on --with-cpu et cetera.
--- 171,176 ----
***************
*** 201,209 ****
  # The following variables are used in each case-construct to build up the
  # outgoing variables:
  #
- #  gnu_ld		Set to yes or no depending on whether the target
- #			system normally uses GNU ld.
- #
  #  target_has_targetcm	Set to yes or no depending on whether the target
  #			has its own definition of targetcm.
  #
--- 190,195 ----
*************** target_cpu_default=
*** 252,261 ****
  gdb_needs_out_file_path=
  # Set this to control which thread package will be used.
  thread_file=
- # Reinitialize these from the flag values every loop pass, since some
- # configure entries modify them.
- gas="$gas_flag"
- gnu_ld="$gnu_ld_flag"
  default_use_cxa_atexit=no
  default_gnu_indirect_function=no
  target_gtfiles=
--- 238,243 ----
*************** cpu_is_64bit=
*** 361,372 ****
  case ${target} in
  aarch64*-*-*)
  	cpu_type=aarch64
! 	extra_headers="arm_fp16.h arm_neon.h arm_bf16.h arm_acle.h arm_sve.h arm_sme.h arm_neon_sve_bridge.h arm_private_fp8.h arm_private_neon_types.h"
  	c_target_objs="aarch64-c.o"
  	cxx_target_objs="aarch64-c.o"
  	d_target_objs="aarch64-d.o"
! 	extra_objs="aarch64-builtins.o aarch-common.o aarch64-elf-metadata.o aarch64-sve-builtins.o aarch64-sve-builtins-shapes.o aarch64-sve-builtins-base.o aarch64-sve-builtins-sve2.o aarch64-sve-builtins-sme.o cortex-a57-fma-steering.o aarch64-speculation.o aarch-bti-insert.o aarch64-early-ra.o aarch64-ldp-fusion.o aarch64-sched-dispatch.o aarch64-json-tunings-printer.o aarch64-json-tunings-parser.o aarch64-narrow-gp-writes.o"
! 	target_gtfiles="\$(srcdir)/config/aarch64/aarch64-protos.h \$(srcdir)/config/aarch64/aarch64-builtins.h \$(srcdir)/config/aarch64/aarch64-builtins.cc \$(srcdir)/config/aarch64/aarch64-sve-builtins.h \$(srcdir)/config/aarch64/aarch64-sve-builtins.cc"
  	target_has_targetm_common=yes
  	;;
  alpha*-*-*)
--- 343,388 ----
  case ${target} in
  aarch64*-*-*)
  	cpu_type=aarch64
! 	extra_headers="${extra_headers} arm_fp16.h"
! 	extra_headers="${extra_headers} arm_neon.h"
! 	extra_headers="${extra_headers} arm_bf16.h"
! 	extra_headers="${extra_headers} arm_acle.h"
! 	extra_headers="${extra_headers} arm_sve.h"
! 	extra_headers="${extra_headers} arm_sme.h"
! 	extra_headers="${extra_headers} arm_neon_sve_bridge.h"
! 	extra_headers="${extra_headers} arm_private_fp8.h"
! 	extra_headers="${extra_headers} arm_private_neon_types.h"
! 
  	c_target_objs="aarch64-c.o"
  	cxx_target_objs="aarch64-c.o"
  	d_target_objs="aarch64-d.o"
! 
! 	extra_objs="${extra_objs} aarch64-builtins.o"
! 	extra_objs="${extra_objs} aarch-common.o"
! 	extra_objs="${extra_objs} aarch64-elf-metadata.o"
! 	extra_objs="${extra_objs} aarch64-acle-builtins.o"
! 	extra_objs="${extra_objs} aarch64-sve-builtins-shapes.o"
! 	extra_objs="${extra_objs} aarch64-sve-builtins-base.o"
! 	extra_objs="${extra_objs} aarch64-sve-builtins-sve2.o"
! 	extra_objs="${extra_objs} aarch64-sve-builtins-sme.o"
! 	extra_objs="${extra_objs} cortex-a57-fma-steering.o"
! 	extra_objs="${extra_objs} aarch64-speculation.o"
! 	extra_objs="${extra_objs} aarch-bti-insert.o"
! 	extra_objs="${extra_objs} aarch64-early-ra.o"
! 	extra_objs="${extra_objs} aarch64-ldp-fusion.o"
! 	extra_objs="${extra_objs} aarch64-sched-dispatch.o"
! 	extra_objs="${extra_objs} aarch64-json-tunings-printer.o"
! 	extra_objs="${extra_objs} aarch64-json-tunings-parser.o"
! 	extra_objs="${extra_objs} aarch64-narrow-gp-writes.o"
! 	extra_objs="${extra_objs} aarch64-neon-builtins-base.o"
! 	extra_objs="${extra_objs} aarch64-neon-builtins-shapes.o"
! 
! 	target_gtfiles="${target_gtfiles} \$(srcdir)/config/aarch64/aarch64-protos.h"
! 	target_gtfiles="${target_gtfiles} \$(srcdir)/config/aarch64/aarch64-builtins.h"
! 	target_gtfiles="${target_gtfiles} \$(srcdir)/config/aarch64/aarch64-builtins.cc"
! 	target_gtfiles="${target_gtfiles} \$(srcdir)/config/aarch64/aarch64-acle-builtins.h"
! 	target_gtfiles="${target_gtfiles} \$(srcdir)/config/aarch64/aarch64-acle-builtins.cc"
! 
  	target_has_targetm_common=yes
  	;;
  alpha*-*-*)
*************** i[34567]86-*-* | x86_64-*-*)
*** 470,478 ****
  		       avx10_2mediaintrin.h avx10_2convertintrin.h
  		       avx10_2bf16intrin.h avx10_2satcvtintrin.h
  		       avx10_2minmaxintrin.h avx10_2copyintrin.h
! 		       amxavx512intrin.h amxtf32intrin.h amxfp8intrin.h
! 		       movrsintrin.h amxmovrsintrin.h avx512bmmintrin.h
! 		       avx512bmmvlintrin.h"
  	;;
  ia64-*-*)
  	extra_headers=ia64intrin.h
--- 486,493 ----
  		       avx10_2mediaintrin.h avx10_2convertintrin.h
  		       avx10_2bf16intrin.h avx10_2satcvtintrin.h
  		       avx10_2minmaxintrin.h avx10_2copyintrin.h
! 		       amxavx512intrin.h amxfp8intrin.h movrsintrin.h
! 		       amxmovrsintrin.h avx512bmmintrin.h avx512bmmvlintrin.h"
  	;;
  ia64-*-*)
  	extra_headers=ia64intrin.h
*************** case ${target} in
*** 850,857 ****
    esac
    ;;
  *-*-dragonfly*)
-   gas=yes
-   gnu_ld=yes
    tmake_file="t-slibgcc"
    case ${enable_threads} in
      "" | yes | posix)
--- 865,870 ----
*************** case ${target} in
*** 890,897 ****
    # The machine-specific section should not tamper with this
    # ordering but may order all other entries of tm_file as it
    # pleases around the provided core setting.
-   gas=yes
-   gnu_ld=yes
    fbsd_major=`echo ${target} | sed -e 's/.*freebsd//g' | sed -e 's/\..*//g'`
    if test "$fbsd_major" = ""; then
      echo "Specify the major version number of the targeted FreeBSD release"
--- 903,908 ----
*************** case ${target} in
*** 935,942 ****
    ;;
  *-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-gnu* | *-*-kopensolaris*-gnu | *-*-uclinuxfdpiceabi)
    extra_options="$extra_options gnu-user.opt"
-   gas=yes
-   gnu_ld=yes
    case ${enable_threads} in
      "" | yes | posix) thread_file='posix' ;;
    esac
--- 946,951 ----
*************** case ${target} in
*** 1024,1031 ****
    tmake_file="t-netbsd t-slibgcc"
    extra_objs="${extra_objs} netbsd.o"
    d_target_objs="${d_target_objs} netbsd-d.o"
-   gas=yes
-   gnu_ld=yes
    use_gcc_stdint=wrap
    case ${enable_threads} in
      "" | yes | posix) thread_file='posix' ;;
--- 1033,1038 ----
*************** case ${target} in
*** 1059,1066 ****
    target_has_targetrustm=yes
    ;;
  *-*-phoenix*)
-   gas=yes
-   gnu_ld=yes
    default_use_cxa_atexit=yes
    ;;
  *-*-rtems*)
--- 1066,1071 ----
*************** case ${target} in
*** 1127,1133 ****
    fortran_target_objs="vms-f.o"
    use_gcc_stdint=provide
    tm_file="${tm_file} vms/vms-stdint.h"
!   if test x$gnu_ld != xyes; then
      # Build wrappers for native case.
      extra_programs="ld\$(exeext) ar\$(exeext)"
      tmake_file="$tmake_file vms/t-vmsnative"
--- 1132,1138 ----
    fortran_target_objs="vms-f.o"
    use_gcc_stdint=provide
    tm_file="${tm_file} vms/vms-stdint.h"
!   if test x$ld_flavor != xgnu; then
      # Build wrappers for native case.
      extra_programs="ld\$(exeext) ar\$(exeext)"
      tmake_file="$tmake_file vms/t-vmsnative"
*************** bpf-*-*)
*** 1745,1751 ****
  cris-*-elf | cris-*-none)
  	tm_file="elfos.h newlib-stdint.h ${tm_file}"
  	tmake_file="cris/t-cris cris/t-elfmulti"
- 	gas=yes
  	extra_options="${extra_options} cris/elf.opt"
  	use_gcc_stdint=wrap
  	;;
--- 1750,1755 ----
*************** frv-*-*linux*)
*** 1846,1853 ****
  	tmake_file="${tmake_file} frv/t-frv frv/t-linux"
  	;;
  ft32-*-elf)
- 	gas=yes
- 	gnu_ld=yes
  	tm_file="elfos.h newlib-stdint.h ${tm_file}"
  	tmake_file="${tmake_file} ft32/t-ft32"
  	;;
--- 1850,1855 ----
*************** amdgcn-*-amdhsa)
*** 1874,1887 ****
  	thread_file=gcn
  	;;
  moxie-*-elf)
- 	gas=yes
- 	gnu_ld=yes
  	tm_file="elfos.h newlib-stdint.h ${tm_file}"
  	tmake_file="${tmake_file} moxie/t-moxie"
  	;;
  moxie-*-uclinux*)
- 	gas=yes
- 	gnu_ld=yes
  	tm_file="elfos.h ${tm_file} gnu-user.h linux.h glibc-stdint.h moxie/uclinux.h"
  	tmake_file="${tmake_file} moxie/t-moxie"
  	;;
--- 1876,1885 ----
*************** moxie-*-rtems*)
*** 1890,1897 ****
  	tm_file="moxie/moxie.h elfos.h moxie/rtems.h rtems.h newlib-stdint.h"
  	;;
  moxie-*-moxiebox*)
- 	gas=yes
- 	gnu_ld=yes
  	tm_file="${tm_file} elfos.h moxie/moxiebox.h newlib-stdint.h"
  	tmake_file="${tmake_file} moxie/t-moxiebox"
  	;;
--- 1888,1893 ----
*************** hppa*64*-*-linux*)
*** 1910,1916 ****
  		 pa/pa64-linux.h"
  	tmake_file="${tmake_file} pa/t-pa pa/t-linux"
  	d_target_objs="${d_target_objs} pa-d.o"
- 	gas=yes gnu_ld=yes
  	;;
  hppa*-*-linux*)
  	target_cpu_default="MASK_PA_11|MASK_NO_SPACE_REGS|MASK_CALLER_COPIES"
--- 1906,1911 ----
*************** hppa*-*-openbsd*)
*** 1926,1933 ****
  	extra_options="${extra_options} openbsd.opt"
  	tmake_file="pa/t-pa"
  	d_target_objs="${d_target_objs} pa-d.o"
- 	gas=yes
- 	gnu_ld=yes
  	;;
  hppa*-*-netbsd*)
  	target_cpu_default="MASK_PA_11|MASK_NO_SPACE_REGS"
--- 1921,1926 ----
*************** hppa*-*-netbsd*)
*** 1939,1948 ****
  	;;
  hppa*64*-*-hpux11*)
  	target_cpu_default="MASK_PA_11|MASK_PA_20"
- 	if test x$gnu_ld = xyes
- 	then
- 		target_cpu_default="${target_cpu_default}|MASK_GNU_LD"
- 	fi
  	tm_file="pa/pa64-start.h ${tm_file} elfos.h \
  		 pa/pa64-regs.h pa/pa-hpux.h pa/pa-hpux1010.h \
  		 pa/pa-hpux11.h"
--- 1932,1937 ----
*************** hppa*64*-*-hpux11*)
*** 1968,1974 ****
  		thread_file=posix
  		;;
  	esac
- 	gas=yes
  	case ${target} in
  	  *-*-hpux11.[01]*)
  		use_gcc_stdint=provide
--- 1957,1962 ----
*************** i[34567]86-*-openbsd*)
*** 2047,2061 ****
  	tm_file="${tm_file} i386/unix.h i386/att.h elfos.h"
  	tm_file="${tm_file} openbsd.h openbsd-stdint.h openbsd-libpthread.h i386/openbsdelf.h"
  	extra_options="${extra_options} openbsd.opt"
- 	gas=yes
- 	gnu_ld=yes
  	;;
  x86_64-*-openbsd*)
  	tm_file="${tm_file} i386/unix.h i386/att.h elfos.h"
  	tm_file="${tm_file} openbsd.h openbsd-stdint.h openbsd-libpthread.h i386/x86-64.h i386/openbsdelf.h"
  	extra_options="${extra_options} openbsd.opt"
- 	gas=yes
- 	gnu_ld=yes
  	;;
  i[34567]86-*-linux* | i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-gnu* | i[34567]86-*-kopensolaris*-gnu)
  			# Intel 80386's running GNU/*
--- 2035,2045 ----
*************** i[34567]86-pc-msdosdjgpp*)
*** 2161,2168 ****
  	tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h i386/djgpp.h i386/djgpp-stdint.h"
  	native_system_header_dir=/dev/env/DJDIR/include
  	extra_options="${extra_options} i386/djgpp.opt"
- 	gnu_ld=yes
- 	gas=yes
  	use_gcc_stdint=wrap
  	;;
  i[34567]86-*-lynxos*)
--- 2145,2150 ----
*************** i[34567]86-*-lynxos*)
*** 2171,2184 ****
  	tmake_file="${tmake_file} t-lynx"
  	extra_options="${extra_options} lynx.opt"
  	thread_file=lynx
- 	gnu_ld=yes
- 	gas=yes
  	;;
  i[34567]86-*-nto-qnx*)
  	tm_file="${tm_file} i386/att.h tm-dwarf2.h elfos.h i386/unix.h i386/nto.h"
  	extra_options="${extra_options} i386/nto.opt"
- 	gnu_ld=yes
- 	gas=yes
  	;;
  i[34567]86-*-rtems*)
  	tm_file="${tm_file} i386/unix.h i386/att.h elfos.h i386/i386elf.h i386/rtemself.h rtems.h newlib-stdint.h"
--- 2153,2162 ----
*************** i[34567]86-*-mingw* | x86_64-*-mingw*)
*** 2349,2356 ****
  	extra_objs="${extra_objs} winnt.o winnt-stubs.o winnt-dll.o"
  	c_target_objs="${c_target_objs} msformat-c.o"
  	cxx_target_objs="${cxx_target_objs} winnt-cxx.o msformat-c.o"
- 	gas=yes
- 	gnu_ld=yes
  	default_use_cxa_atexit=yes
  	use_gcc_stdint=wrap
  	case ${enable_threads} in
--- 2327,2332 ----
*************** ia64*-*-elf*)
*** 2377,2390 ****
  	tm_file="${tm_file} elfos.h newlib-stdint.h ia64/sysv4.h ia64/elf.h"
  	tmake_file="ia64/t-ia64"
  	target_cpu_default="0"
! 	if test x$gas = xyes
! 	then
! 		target_cpu_default="${target_cpu_default}|MASK_GNU_AS"
! 	fi
! 	if test x$gnu_ld = xyes
! 	then
! 		target_cpu_default="${target_cpu_default}|MASK_GNU_LD"
! 	fi
  	;;
  ia64*-*-freebsd*)
  	tm_file="${tm_file} elfos.h ${fbsd_tm_file} ia64/sysv4.h ia64/freebsd.h"
--- 2353,2360 ----
  	tm_file="${tm_file} elfos.h newlib-stdint.h ia64/sysv4.h ia64/elf.h"
  	tmake_file="ia64/t-ia64"
  	target_cpu_default="0"
! 	target_cpu_default="${target_cpu_default}|MASK_GNU_AS"
! 	target_cpu_default="${target_cpu_default}|MASK_GNU_LD"
  	;;
  ia64*-*-freebsd*)
  	tm_file="${tm_file} elfos.h ${fbsd_tm_file} ia64/sysv4.h ia64/freebsd.h"
*************** ia64-hp-*vms*)
*** 2424,2433 ****
  	tm_file="${tm_file} elfos.h ia64/sysv4.h vms/vms.h ia64/vms.h"
  	tmake_file="${tmake_file} ia64/t-ia64"
  	target_cpu_default="0"
! 	if test x$gas = xyes
! 	then
! 		target_cpu_default="${target_cpu_default}|MASK_GNU_AS"
! 	fi
  	extra_options="${extra_options} ia64/vms.opt"
  	;;
  iq2000*-*-elf*)
--- 2394,2400 ----
  	tm_file="${tm_file} elfos.h ia64/sysv4.h vms/vms.h ia64/vms.h"
  	tmake_file="${tmake_file} ia64/t-ia64"
  	target_cpu_default="0"
! 	target_cpu_default="${target_cpu_default}|MASK_GNU_AS"
  	extra_options="${extra_options} ia64/vms.opt"
  	;;
  iq2000*-*-elf*)
*************** riscv*-*-linux*)
*** 2580,2587 ****
  	esac
  	tmake_file="${tmake_file} riscv/t-riscv riscv/t-linux"
  	tm_defines="${tm_defines} TARGET_DEFAULT_ASYNC_UNWIND_TABLES=1"
- 	gnu_ld=yes
- 	gas=yes
  	case $target in
  	riscv32be-*|riscv64be-*)
  		tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
--- 2547,2552 ----
*************** riscv*-*-linux*)
*** 2595,2602 ****
  riscv*-*-gnu*)
  	tm_file="elfos.h gnu-user.h gnu.h glibc-stdint.h ${tm_file} riscv/gnu.h"
  	tmake_file="${tmake_file} riscv/t-riscv"
- 	gnu_ld=yes
- 	gas=yes
  	case $target in
  	riscv32be-*|riscv64be-*)
  		tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
--- 2560,2565 ----
*************** riscv*-*-elf* | riscv*-*-rtems*)
*** 2623,2630 ****
  	  fi
  	esac
  	tmake_file="${tmake_file} riscv/t-riscv"
- 	gnu_ld=yes
- 	gas=yes
  	case $target in
  	riscv32be-*|riscv64be-*)
  		tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
--- 2586,2591 ----
*************** riscv*-*-elf* | riscv*-*-rtems*)
*** 2637,2644 ****
  riscv*-*-freebsd*)
  	tm_file="${tm_file} elfos.h ${fbsd_tm_file} riscv/freebsd.h"
  	tmake_file="${tmake_file} riscv/t-riscv"
- 	gnu_ld=yes
- 	gas=yes
  	case $target in
  	riscv32be-*|riscv64be-*)
  		tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
--- 2598,2603 ----
*************** loongarch*-*-linux*)
*** 2658,2665 ****
  	tm_file="${tm_file} loongarch/gnu-user.h loongarch/linux.h loongarch/loongarch-driver.h"
  	extra_options="${extra_options} linux-android.opt"
  	tmake_file="${tmake_file} loongarch/t-multilib loongarch/t-linux"
- 	gnu_ld=yes
- 	gas=yes
  
  	# Force .init_array support.  The configure script cannot always
  	# automatically detect that GAS supports it, yet we require it.
--- 2617,2622 ----
*************** loongarch*-*-elf*)
*** 2670,2677 ****
  	tm_file="elfos.h newlib-stdint.h ${tm_file}"
  	tm_file="${tm_file} loongarch/elf.h loongarch/loongarch-driver.h"
  	tmake_file="${tmake_file} loongarch/t-multilib"
- 	gnu_ld=yes
- 	gas=yes
  
  	# For .init_array support.  The configure script cannot always
  	# automatically detect that GAS supports it, yet we require it.
--- 2627,2632 ----
*************** mips*-img-linux*)
*** 2690,2697 ****
  	tm_defines="${tm_defines} MIPS_ISA_DEFAULT=MIPS_ISA_MIPS32R6 MIPS_ABI_DEFAULT=ABI_32"
  	with_arch_32="mips32r6"
  	with_arch_64="mips64r6"
- 	gnu_ld=yes
- 	gas=yes
  	;;
  mips*-mti-linux*)
  	tm_file="elfos.h gnu-user.h linux.h linux-android.h glibc-stdint.h ${tm_file} mips/gnu-user.h mips/linux.h mips/linux-common.h mips/mti-linux.h"
--- 2645,2650 ----
*************** mips*-mti-linux*)
*** 2700,2707 ****
  	tm_defines="${tm_defines} MIPS_ISA_DEFAULT=MIPS_ISA_MIPS32R2 MIPS_ABI_DEFAULT=ABI_32"
  	with_arch_32="mips32r2"
  	with_arch_64="mips64r2"
- 	gnu_ld=yes
- 	gas=yes
  	;;
  mips*-*-linux*)				# Linux MIPS, either endian.
  	tm_file="elfos.h gnu-user.h linux.h linux-android.h glibc-stdint.h ${tm_file} mips/gnu-user.h mips/linux.h mips/linux-common.h"
--- 2653,2658 ----
*************** powerpc-*-lynxos*)
*** 3240,3247 ****
  	tmake_file="t-lynx rs6000/t-lynx"
  	extra_options="${extra_options} rs6000/sysv4.opt lynx.opt"
  	thread_file=lynx
- 	gnu_ld=yes
- 	gas=yes
  	;;
  powerpcle-*-elf*)
  	tm_file="${tm_file} elfos.h gnu-user.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/sysv4le.h"
--- 3191,3196 ----
*************** sparc64-*-openbsd*)
*** 3605,3611 ****
  	tm_file="${tm_file} openbsd.h openbsd-stdint.h openbsd-libpthread.h sparc/openbsd64.h"
  	extra_options="${extra_options} openbsd.opt"
  	extra_options="${extra_options}"
- 	gas=yes gnu_ld=yes
  	with_cpu=ultrasparc
  	tmake_file="${tmake_file} sparc/t-sparc"
  	;;
--- 3554,3559 ----
*************** xtensa*-*-uclinux*)
*** 3697,3703 ****
  	;;
  am33_2.0-*-linux*)
  	tm_file="mn10300/mn10300.h elfos.h gnu-user.h linux.h glibc-stdint.h mn10300/linux.h"
- 	gas=yes gnu_ld=yes
  	use_collect2=no
  	;;
  *)
--- 3645,3650 ----
*************** case ${target} in
*** 6095,6104 ****
  		;;
  
  	hppa*-*-*)
! 		if test x$gas = xyes
! 		then
! 			target_cpu_default2="MASK_GAS"
! 		fi
  		;;
  
  	fido*-*-* | m68k*-*-*)
--- 6042,6048 ----
  		;;
  
  	hppa*-*-*)
! 		target_cpu_default2="MASK_GAS"
  		;;
  
  	fido*-*-* | m68k*-*-*)
*************** case ${target} in
*** 6141,6150 ****
  		;;
  
  	mips*-*-*)
! 		if test x$gnu_ld = xyes
! 		then
! 			target_cpu_default2="MASK_SPLIT_ADDRESSES"
! 		fi
  		case ${target} in
  			mips*el-*-*)
  				tm_defines="TARGET_ENDIAN_DEFAULT=0 $tm_defines"
--- 6085,6091 ----
  		;;
  
  	mips*-*-*)
! 	        target_cpu_default2="MASK_SPLIT_ADDRESSES"
  		case ${target} in
  			mips*el-*-*)
  				tm_defines="TARGET_ENDIAN_DEFAULT=0 $tm_defines"
diff -Nrcpad gcc-17-20260628/gcc/config.in gcc-17-20260705/gcc/config.in
*** gcc-17-20260628/gcc/config.in	Sun Jun 28 22:32:21 2026
--- gcc-17-20260705/gcc/config.in	Sun Jul  5 22:32:21 2026
***************
*** 373,378 ****
--- 373,384 ----
  #endif
  
  
+ /* Define to 1 if using the AIX assembler. */
+ #ifndef USED_FOR_TARGET
+ #undef HAVE_AIX_AS
+ #endif
+ 
+ 
  /* Define if your assembler supports LSX and SCQ for 16B atomic. */
  #ifndef USED_FOR_TARGET
  #undef HAVE_AS_16B_ATOMIC
***************
*** 446,451 ****
--- 452,463 ----
  #endif
  
  
+ /* Define if your assembler supports DTPREL relocation. */
+ #ifndef USED_FOR_TARGET
+ #undef HAVE_AS_DTPREL_RELOC
+ #endif
+ 
+ 
  /* Define if your assembler supports dwarf2 .file/.loc directives, and
     preserves file table indices exactly as given. */
  #ifndef USED_FOR_TARGET
***************
*** 1597,1620 ****
  #endif
  
  
- /* Define to 1 if using GNU as. */
- #ifndef USED_FOR_TARGET
- #undef HAVE_GNU_AS
- #endif
- 
- 
  /* Define if your system supports gnu indirect functions. */
  #ifndef USED_FOR_TARGET
  #undef HAVE_GNU_INDIRECT_FUNCTION
  #endif
  
  
- /* Define to 1 if using GNU ld. */
- #ifndef USED_FOR_TARGET
- #undef HAVE_GNU_LD
- #endif
- 
- 
  /* Define if the gold linker supports split stack and is available as a
     non-default */
  #ifndef USED_FOR_TARGET
--- 1609,1620 ----
***************
*** 1696,1701 ****
--- 1696,1707 ----
  #endif
  
  
+ /* Define if your linker supports GNU style response files. */
+ #ifndef USED_FOR_TARGET
+ #undef HAVE_LD_AT_FILE
+ #endif
+ 
+ 
  /* Define if your linker supports emulation avrxmega2_flmap. */
  #ifndef USED_FOR_TARGET
  #undef HAVE_LD_AVR_AVRXMEGA2_FLMAP
***************
*** 1733,1745 ****
  #endif
  
  
- /* Define if the linker supports clearing hardware capabilities via mapfile.
-    */
- #ifndef USED_FOR_TARGET
- #undef HAVE_LD_CLEARCAP
- #endif
- 
- 
  /* Define to the level of your linker's compressed debug section support. */
  #ifndef USED_FOR_TARGET
  #undef HAVE_LD_COMPRESS_DEBUG
--- 1739,1744 ----
diff -Nrcpad gcc-17-20260628/gcc/configure gcc-17-20260705/gcc/configure
*** gcc-17-20260628/gcc/configure	Sun Jun 28 22:32:21 2026
--- gcc-17-20260705/gcc/configure	Sun Jul  5 22:32:21 2026
*************** with_gxx_include_dir
*** 971,981 ****
  with_gxx_libcxx_include_dir
  with_cpp_install_dir
  enable_generated_files_in_srcdir
- with_gnu_ld
  with_ld
  with_demangler_in_ld
  with_dsymutil
- with_gnu_as
  with_as
  with_windres
  enable_largefile
--- 971,979 ----
*************** with_picolibc
*** 1013,1018 ****
--- 1011,1017 ----
  with_zstd
  with_zstd_include
  with_zstd_lib
+ with_gnu_ld
  enable_rpath
  with_libiconv_prefix
  with_libiconv_type
*************** Optional Packages:
*** 1870,1881 ****
    --with-cpp-install-dir=DIR
                            install the user visible C preprocessor in DIR
                            (relative to PREFIX) as well as PREFIX/bin
-   --with-gnu-ld           arrange to work with GNU ld
    --with-ld               arrange to use the specified ld (full pathname)
    --with-demangler-in-ld  try to use demangler in GNU ld
    --with-dsymutil         arrange to use the specified dsymutil (full
                            pathname)
-   --with-gnu-as           arrange to work with GNU as
    --with-as               arrange to use the specified as (full pathname)
    --with-windres          arrange to use the specified windres (full pathname)
    --with-stack-clash-protection-guard-size=size
--- 1869,1878 ----
*************** fi
*** 3927,3942 ****
  # Find default linker
  # -------------------
  
- # With GNU ld
- 
- # Check whether --with-gnu-ld was given.
- if test "${with_gnu_ld+set}" = set; then :
-   withval=$with_gnu_ld; gnu_ld_flag="$with_gnu_ld"
- else
-   gnu_ld_flag=
- fi
- 
- 
  case $target in
      *darwin*)
  	ld64_flag=yes # Darwin can only use a ld64-compatible linker.
--- 3924,3929 ----
*************** fi
*** 3958,3965 ****
  if test x"${DEFAULT_LINKER+set}" = x"set"; then
    if test ! -x "$DEFAULT_LINKER"; then
      as_fn_error $? "cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER" "$LINENO" 5
-   elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
-     gnu_ld_flag=yes
    elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep 'PROJECT:ld\(64\)*-' > /dev/null; then
      ld64_flag=yes
    fi
--- 3945,3950 ----
*************** fi
*** 3973,3985 ****
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a default linker was specified" >&5
  $as_echo_n "checking whether a default linker was specified... " >&6; }
  if test x"${DEFAULT_LINKER+set}" = x"set"; then
!   if test x"$gnu_ld_flag" = x"no"; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($DEFAULT_LINKER)" >&5
  $as_echo "yes ($DEFAULT_LINKER)" >&6; }
-   else
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($DEFAULT_LINKER - GNU ld)" >&5
- $as_echo "yes ($DEFAULT_LINKER - GNU ld)" >&6; }
-   fi
  else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
--- 3958,3965 ----
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a default linker was specified" >&5
  $as_echo_n "checking whether a default linker was specified... " >&6; }
  if test x"${DEFAULT_LINKER+set}" = x"set"; then
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($DEFAULT_LINKER)" >&5
  $as_echo "yes ($DEFAULT_LINKER)" >&6; }
  else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
*************** fi
*** 4033,4048 ****
  # Find default assembler
  # ----------------------
  
- # With GNU as
- 
- # Check whether --with-gnu-as was given.
- if test "${with_gnu_as+set}" = set; then :
-   withval=$with_gnu_as; gas_flag="$with_gnu_as"
- else
-   gas_flag=
- fi
- 
- 
  
  # Check whether --with-as was given.
  if test "${with_as+set}" = set; then :
--- 4013,4018 ----
*************** fi
*** 4052,4059 ****
  if test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then
    if test ! -x "$DEFAULT_ASSEMBLER"; then
      as_fn_error $? "cannot execute: $DEFAULT_ASSEMBLER: check --with-as or env. var. DEFAULT_ASSEMBLER" "$LINENO" 5
-   elif $DEFAULT_ASSEMBLER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
-     gas_flag=yes
    fi
  
  cat >>confdefs.h <<_ACEOF
--- 4022,4027 ----
*************** fi
*** 4065,4077 ****
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a default assembler was specified" >&5
  $as_echo_n "checking whether a default assembler was specified... " >&6; }
  if test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then
!   if test x"$gas_flag" != x"yes"; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($DEFAULT_ASSEMBLER)" >&5
  $as_echo "yes ($DEFAULT_ASSEMBLER)" >&6; }
-   else
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($DEFAULT_ASSEMBLER - GNU as)" >&5
- $as_echo "yes ($DEFAULT_ASSEMBLER - GNU as)" >&6; }
-   fi
  else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
--- 4033,4040 ----
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a default assembler was specified" >&5
  $as_echo_n "checking whether a default assembler was specified... " >&6; }
  if test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($DEFAULT_ASSEMBLER)" >&5
  $as_echo "yes ($DEFAULT_ASSEMBLER)" >&6; }
  else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
*************** ac_link='$CC -o conftest$ac_exeext $CFLA
*** 5170,5177 ****
  ac_compiler_gnu=$ac_cv_c_compiler_gnu
  
  
- 
- 
  if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}gnatbind", so it can be a program name with args.
  set dummy ${ac_tool_prefix}gnatbind; ac_word=$2
--- 5133,5138 ----
*************** else
*** 5393,5399 ****
  fi
  
  
- 
  if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}gdc", so it can be a program name with args.
  set dummy ${ac_tool_prefix}gdc; ac_word=$2
--- 5354,5359 ----
*************** $as_echo "#define USE_LONG_LONG_FOR_WIDE
*** 13119,13138 ****
  
  fi
  
- gnu_ld_bool=`if test x"$gnu_ld" = x"yes"; then echo 1; else echo 0; fi`
- 
- cat >>confdefs.h <<_ACEOF
- #define HAVE_GNU_LD $gnu_ld_bool
- _ACEOF
- 
- 
- gnu_as_bool=`if test x"$gas" = x"yes"; then echo 1; else echo 0; fi`
- 
- cat >>confdefs.h <<_ACEOF
- #define HAVE_GNU_AS $gnu_as_bool
- _ACEOF
- 
- 
  count=a
  for f in $host_xm_file; do
  	count=${count}x
--- 13079,13084 ----
*************** $as_echo "found xgettext program is not
*** 13826,13832 ****
          rm -f messages.po
    fi
  
!   ac_config_commands="$ac_config_commands default-1"
  
  
  
--- 13772,13778 ----
          rm -f messages.po
    fi
  
!   ac_config_commands="$ac_config_commands posubdirs"
  
  
  
*************** else
*** 21975,21981 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 21978 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 21921,21927 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 21924 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 22081,22087 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 22084 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 22027,22033 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 22030 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** fi
*** 25498,25521 ****
  fi
  fi
  
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking Solaris assembler" >&5
! $as_echo_n "checking Solaris assembler... " >&6; }
  case $target in
    *-*-solaris2*)
      if $gcc_cv_as -V 2>&1 | grep 'Compiler Common.*SunOS' > /dev/null; then
!       solaris_as=yes
!       gas=no
!     elif $gcc_cv_as --version 2>/dev/null | grep GNU > /dev/null; then
!       gas=yes
      fi
      ;;
!   *)
!     solaris_as=no
      ;;
  esac
! { $as_echo "$as_me:${as_lineno-$LINENO}: result: $solaris_as" >&5
! $as_echo "$solaris_as" >&6; }
! solaris_as_bool=`if test $solaris_as = yes; then echo 1; else echo 0; fi`
  
  cat >>confdefs.h <<_ACEOF
  #define HAVE_SOLARIS_AS $solaris_as_bool
--- 25444,25484 ----
  fi
  fi
  
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler flavor" >&5
! $as_echo_n "checking assembler flavor... " >&6; }
! as_flavor=gnu
  case $target in
+   *-*-aix*)
+     if $gcc_cv_as -v 2>&1 | grep '^as V' > /dev/null; then
+       as_flavor=aix
+     fi
+     ;;
+   *-*-darwin*)
+     as_flavor=darwin
+     ;;
    *-*-solaris2*)
      if $gcc_cv_as -V 2>&1 | grep 'Compiler Common.*SunOS' > /dev/null; then
!       as_flavor=solaris
      fi
      ;;
!   hppa*64*-*-hpux11*)
!     if $gcc_cv_as -V 2>&1 | grep 'UX.11.*PA-RISC.*Assembler' > /dev/null; then
!       as_flavor=hpux
!     fi
!     ;;
!   nvptx-*-*)
!     as_flavor=nvptx
      ;;
  esac
! { $as_echo "$as_me:${as_lineno-$LINENO}: result: $as_flavor" >&5
! $as_echo "$as_flavor" >&6; }
! aix_as_bool=`if test $as_flavor = aix; then echo 1; else echo 0; fi`
! 
! cat >>confdefs.h <<_ACEOF
! #define HAVE_AIX_AS $aix_as_bool
! _ACEOF
! 
! solaris_as_bool=`if test $as_flavor = solaris; then echo 1; else echo 0; fi`
  
  cat >>confdefs.h <<_ACEOF
  #define HAVE_SOLARIS_AS $solaris_as_bool
*************** case "$ORIGINAL_AS_FOR_TARGET" in
*** 25530,25544 ****
   ;;
  esac
  
- # Check if we are using GNU as if not already set.
- if test -z "$gas"; then
-   if $gcc_cv_as --version 2>/dev/null | grep GNU > /dev/null; then
-     gas=yes
-   else
-     gas=no
-   fi
- fi
- 
  if $gcc_cv_as --help 2>&1 | grep -- --fatal-warnings > /dev/null; then
    fw_as_opt=--fatal-warnings
  fi
--- 25493,25498 ----
*************** fi
*** 25652,25675 ****
  fi
  fi
  
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking Solaris linker" >&5
! $as_echo_n "checking Solaris linker... " >&6; }
  case $target in
    *-*-solaris2*)
!     if $gcc_cv_ld -V 2>/dev/null | grep 'Solaris Link Editors' > /dev/null; then
!       gnu_ld=no
!       solaris_ld=yes
!     elif $gcc_cv_ld --version 2>/dev/null | grep GNU > /dev/null; then
!       gnu_ld=yes
      fi
      ;;
!   *)
!     solaris_ld=no
      ;;
  esac
! { $as_echo "$as_me:${as_lineno-$LINENO}: result: $solaris_ld" >&5
! $as_echo "$solaris_ld" >&6; }
! solaris_ld_bool=`if test $solaris_ld = yes; then echo 1; else echo 0; fi`
  
  cat >>confdefs.h <<_ACEOF
  #define HAVE_SOLARIS_LD $solaris_ld_bool
--- 25606,25640 ----
  fi
  fi
  
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker flavor" >&5
! $as_echo_n "checking linker flavor... " >&6; }
! ld_flavor=gnu
  case $target in
+   *-*-aix*)
+     if $gcc_cv_ld -V 2>&1 | grep 'ld: LD ' > /dev/null; then
+       ld_flavor=aix
+     fi
+     ;;
+   *-*-darwin*)
+     ld_flavor=darwin
+     ;;
    *-*-solaris2*)
!     if $gcc_cv_ld -V 2>&1 | grep 'Solaris Link Editors' > /dev/null; then
!       ld_flavor=solaris
      fi
      ;;
!   hppa*64*-*-hpux11*)
!     if $gcc_cv_ld -V 2>&1 | grep 'linker command.*sgs.*ld PA64' > /dev/null; then
!       ld_flavor=hpux
!     fi
!     ;;
!   nvptx-*-*)
!     ld_flavor=nvptx
      ;;
  esac
! { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_flavor" >&5
! $as_echo "$ld_flavor" >&6; }
! solaris_ld_bool=`if test $ld_flavor = solaris; then echo 1; else echo 0; fi`
  
  cat >>confdefs.h <<_ACEOF
  #define HAVE_SOLARIS_LD $solaris_ld_bool
*************** cat >>confdefs.h <<_ACEOF
*** 25700,25729 ****
  _ACEOF
  
  
! # Check if we are using GNU ld if not already set.
! if test -z "$gnu_ld"; then
!   if $gcc_cv_ld --version 2>/dev/null | grep GNU > /dev/null; then
!     gnu_ld=yes
!   else
!     gnu_ld=no
!   fi
! fi
  
! case "$target:$gnu_ld" in
!   *-*-solaris2*:no)
      # While Solaris ld has -m32/-m64 it usually determines the ELF class
      # from the input objects.
      ;;
!   i?86-*-solaris2*:yes | x86_64-*-solaris2*:yes)
      ld_32_opt=-melf_i386_sol2
      ld_64_opt=-melf_x86_64_sol2
      ;;
!   i?86-*-*:yes | x86_64-*-*:yes)
      ld_32_opt=-melf_i386
      ld_64_opt=-melf_x86_64
      ;;
  esac
  
  # Check to see if we are using gold instead of ld
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using gold" >&5
  $as_echo_n "checking whether we are using gold... " >&6; }
--- 25665,25693 ----
  _ACEOF
  
  
! # Settings that depend on ld_flavor must be done here instead of config.gcc.
  
! case "$target:$ld_flavor" in
!   *-*-solaris2*:solaris)
      # While Solaris ld has -m32/-m64 it usually determines the ELF class
      # from the input objects.
      ;;
!   i?86-*-solaris2*:gnu | x86_64-*-solaris2*:gnu)
      ld_32_opt=-melf_i386_sol2
      ld_64_opt=-melf_x86_64_sol2
      ;;
!   i?86-*-*:gnu | x86_64-*-*:gnu)
      ld_32_opt=-melf_i386
      ld_64_opt=-melf_x86_64
      ;;
  esac
  
+ case "$target:$ld_flavor" in
+   hppa*64*-*-hpux11*:gnu)
+     target_cpu_default="${target_cpu_default}|MASK_GNU_LD"
+     ;;
+ esac
+ 
  # Check to see if we are using gold instead of ld
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using gold" >&5
  $as_echo_n "checking whether we are using gold... " >&6; }
*************** $as_echo_n "checking assembler flags...
*** 26213,26219 ****
  if ${gcc_cv_as_flags+:} false; then :
    $as_echo_n "(cached) " >&6
  else
!    case "$target:$gas" in
    *-*-darwin*:*)
                          case "$target" in
        i?86-*-*)
--- 26177,26183 ----
  if ${gcc_cv_as_flags+:} false; then :
    $as_echo_n "(cached) " >&6
  else
!    case "$target:$as_flavor" in
    *-*-darwin*:*)
                          case "$target" in
        i?86-*-*)
*************** else
*** 26236,26242 ****
  	;;
      esac
      ;;
!   *-*-solaris2*:no)
          case "$target" in
        i?86-*-* | sparc-*-*)
  	gcc_cv_as_flags=-m32
--- 26200,26206 ----
  	;;
      esac
      ;;
!   *-*-solaris2*:solaris)
          case "$target" in
        i?86-*-* | sparc-*-*)
  	gcc_cv_as_flags=-m32
*************** if test $in_tree_ld != yes ; then
*** 26749,26754 ****
--- 26713,26739 ----
    fi
  fi
  
+ # Check if an in-tree gld is at least at version major, minor.
+ gcc_fn_gld_min_version () {
+   if test "$gcc_cv_gld_major_version" -eq $1 \
+           -a "$gcc_cv_gld_minor_version" -ge $2 \
+           -o "$gcc_cv_gld_major_version" -gt $1; then
+     return 0;
+   fi
+   return 1;
+ }
+ 
+ # Check if an in-tree gld is ELF and at least at version major, minor.
+ gcc_fn_gld_elf_min_version ()
+ {
+   if gcc_fn_gld_min_version "$1" "$2"; then
+     if test $in_tree_ld_is_elf = yes; then
+       return 0
+     fi
+   fi
+   return 1
+ }
+ 
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker for .hidden support" >&5
  $as_echo_n "checking linker for .hidden support... " >&6; }
  if ${gcc_cv_ld_hidden+:} false; then :
*************** if ${gcc_cv_ld_hidden+:} false; then :
*** 26756,26763 ****
  else
    if test $in_tree_ld = yes ; then
    gcc_cv_ld_hidden=no
!   if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 13 -o "$gcc_cv_gld_major_version" -gt 2 \
!      && test $in_tree_ld_is_elf = yes; then
       gcc_cv_ld_hidden=yes
    fi
  else
--- 26741,26747 ----
  else
    if test $in_tree_ld = yes ; then
    gcc_cv_ld_hidden=no
!   if gcc_fn_gld_elf_min_version 2 13; then
       gcc_cv_ld_hidden=yes
    fi
  else
*************** $as_echo "#define HAVE_GAS_HIDDEN 1" >>c
*** 26823,26834 ****
  
  fi
  
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker read-only and read-write section mixing" >&5
  $as_echo_n "checking linker read-only and read-write section mixing... " >&6; }
  gcc_cv_ld_ro_rw_mix=unknown
  if test $in_tree_ld = yes ; then
!   if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 10 -o "$gcc_cv_gld_major_version" -gt 2 \
!      && test $in_tree_ld_is_elf = yes; then
      gcc_cv_ld_ro_rw_mix=read-write
    fi
  elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x -a x"$gcc_cv_objdump" != x ; then
--- 26807,26839 ----
  
  fi
  
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker supports GNU style respones files" >&5
+ $as_echo_n "checking linker supports GNU style respones files... " >&6; }
+ gcc_cv_ld_at_file=no
+ if test $in_tree_ld = yes ; then
+   gcc_cv_ld_at_file=yes
+ elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x; then
+   echo '.byte 0' > conftest.s
+   echo conftest.o > conftest.at
+   if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1 \
+      && $gcc_cv_ld -r -o conftest2.o @conftest.at > /dev/null 2>&1; then
+     gcc_cv_ld_at_file=yes
+   fi
+   rm -f conftest.* conftest2.*
+ fi
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define HAVE_LD_AT_FILE `if test $gcc_cv_ld_at_file = yes; then echo 1; else echo 0; fi`
+ _ACEOF
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld_at_file" >&5
+ $as_echo "$gcc_cv_ld_at_file" >&6; }
+ 
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker read-only and read-write section mixing" >&5
  $as_echo_n "checking linker read-only and read-write section mixing... " >&6; }
  gcc_cv_ld_ro_rw_mix=unknown
  if test $in_tree_ld = yes ; then
!   if gcc_fn_gld_elf_min_version 2 10; then
      gcc_cv_ld_ro_rw_mix=read-write
    fi
  elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x -a x"$gcc_cv_objdump" != x ; then
*************** fi
*** 26917,26924 ****
  	    gcc_cv_initfini_array=yes
  	  fi
  	elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x -a x"$gcc_cv_objdump" != x ; then
! 	  case $target:$solaris_as in
! 	    i?86-*-solaris2*:yes | x86_64-*-solaris2*:yes)
  	      sh_flags='"a"'
  	      sh_type='@progbits'
  	      ;;
--- 26922,26929 ----
  	    gcc_cv_initfini_array=yes
  	  fi
  	elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x -a x"$gcc_cv_objdump" != x ; then
! 	  case $target:$as_flavor in
! 	    i?86-*-solaris2*:solaris | x86_64-*-solaris2*:solaris)
  	      sh_flags='"a"'
  	      sh_type='@progbits'
  	      ;;
*************** fi
*** 26932,26938 ****
  	      sh_type='%progbits'
  	      ;;
  	  esac
! 	  if test x$solaris_ld = xno; then
  	    cat > conftest.s <<EOF
  .section .dtors,$sh_flags,$sh_type
  .balign 4
--- 26937,26943 ----
  	      sh_type='%progbits'
  	      ;;
  	  esac
! 	  if test x$ld_flavor = xgnu; then
  	    cat > conftest.s <<EOF
  .section .dtors,$sh_flags,$sh_type
  .balign 4
*************** elif test x"$ld_is_wild" = xyes; then
*** 27892,27899 ****
    comdat_group=yes
  elif test $in_tree_ld = yes ; then
    comdat_group=no
!   if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 16 -o "$gcc_cv_gld_major_version" -gt 2 \
!      && test $in_tree_ld_is_elf = yes; then
       comdat_group=yes
    fi
  elif echo "$ld_ver" | grep GNU > /dev/null; then
--- 27897,27903 ----
    comdat_group=yes
  elif test $in_tree_ld = yes ; then
    comdat_group=no
!   if gcc_fn_gld_elf_min_version 2 16; then
       comdat_group=yes
    fi
  elif echo "$ld_ver" | grep GNU > /dev/null; then
*************** foo:	.long	25
*** 28100,28106 ****
  .word foo(tlsldo)'
  	;;
    i?86-*-* | x86_64-*-*)
!     if test x$solaris_as = xyes; then
        tls_section_flag=t
  
  $as_echo "#define TLS_SECTION_ASM_FLAG 't'" >>confdefs.h
--- 28104,28110 ----
  .word foo(tlsldo)'
  	;;
    i?86-*-* | x86_64-*-*)
!     if test x$as_flavor = xsolaris; then
        tls_section_flag=t
  
  $as_echo "#define TLS_SECTION_ASM_FLAG 't'" >>confdefs.h
*************** foo:	.long	25
*** 28348,28354 ****
  	.long	foo@TPOFF'
  	;;
    sparc*-*-*)
!     if test x$solaris_as = xyes; then
        conftest_s='
        .section ".tdata",#alloc,#write,#tls'
      else
--- 28352,28358 ----
  	.long	foo@TPOFF'
  	;;
    sparc*-*-*)
!     if test x$as_flavor = xsolaris; then
        conftest_s='
        .section ".tdata",#alloc,#write,#tls'
      else
*************** case $target_os in
*** 28431,28437 ****
      if test $set_have_as_tls = yes; then
        # Hack to check whether ld breaks on @secrel32 for Windows
        if test $in_tree_ld = yes; then
! 	if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 44 -o "$gcc_cv_gld_major_version" -gt 2; then
  	  : # ld support for @secrel32 was fixed in this version
  	else
  	  as_fn_error $? "ld version is known to have broken secrel32 relocations, configure without --enable-tls or with --disable-tls to remove this error. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80881 for more information." "$LINENO" 5
--- 28435,28441 ----
      if test $set_have_as_tls = yes; then
        # Hack to check whether ld breaks on @secrel32 for Windows
        if test $in_tree_ld = yes; then
!         if gcc_fn_gld_min_version 2 44; then
  	  : # ld support for @secrel32 was fixed in this version
  	else
  	  as_fn_error $? "ld version is known to have broken secrel32 relocations, configure without --enable-tls or with --disable-tls to remove this error. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80881 for more information." "$LINENO" 5
*************** gcc_cv_ld_static_dynamic=no
*** 28469,28475 ****
  gcc_cv_ld_static_option='-Bstatic'
  gcc_cv_ld_dynamic_option='-Bdynamic'
  if test $in_tree_ld = yes ; then
!   if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 10 -o "$gcc_cv_gld_major_version" -gt 2; then
      gcc_cv_ld_static_dynamic=yes
    fi
  elif test x$gcc_cv_ld != x; then
--- 28473,28479 ----
  gcc_cv_ld_static_option='-Bstatic'
  gcc_cv_ld_dynamic_option='-Bdynamic'
  if test $in_tree_ld = yes ; then
!   if gcc_fn_gld_min_version 2 10; then
      gcc_cv_ld_static_dynamic=yes
    fi
  elif test x$gcc_cv_ld != x; then
*************** elif test x$gcc_cv_ld != x; then
*** 28487,28497 ****
  	;;
        # HP-UX ld uses -a flags to select between shared and archive.
        *-*-hpux*)
! 	if test x"$gnu_ld" = xno; then
! 	  gcc_cv_ld_static_dynamic=yes
! 	  gcc_cv_ld_static_option="-aarchive_shared"
! 	  gcc_cv_ld_dynamic_option="-adefault"
! 	fi
  	;;
        # Solaris 2 ld always supports -Bstatic/-Bdynamic.
        *-*-solaris2*)
--- 28491,28499 ----
  	;;
        # HP-UX ld uses -a flags to select between shared and archive.
        *-*-hpux*)
! 	gcc_cv_ld_static_dynamic=yes
! 	gcc_cv_ld_static_option="-aarchive_shared"
! 	gcc_cv_ld_dynamic_option="-adefault"
  	;;
        # Solaris 2 ld always supports -Bstatic/-Bdynamic.
        *-*-solaris2*)
*************** fi
*** 28518,28538 ****
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld_static_dynamic" >&5
  $as_echo "$gcc_cv_ld_static_dynamic" >&6; }
  
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker --version-script option" >&5
! $as_echo_n "checking linker --version-script option... " >&6; }
  gcc_cv_ld_version_script=no
  ld_version_script_option=''
! if test $in_tree_ld = yes || test x"$gnu_ld" = xyes; then
    gcc_cv_ld_version_script=yes
    ld_version_script_option='--version-script'
! elif test x$solaris_ld = xyes; then
    # Solaris 2 ld always supports -M.  It also supports a subset of
    # --version-script since Solaris 11.4, but requires
    # -z gnu-version-script-compat to activate.
    gcc_cv_ld_version_script=yes
    ld_version_script_option='-M'
  fi
- # Don't AC_DEFINE result, only used in jit/Make-lang.in so far.
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld_version_script" >&5
  $as_echo "$gcc_cv_ld_version_script" >&6; }
  
--- 28520,28546 ----
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld_static_dynamic" >&5
  $as_echo "$gcc_cv_ld_static_dynamic" >&6; }
  
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker version script option" >&5
! $as_echo_n "checking linker version script option... " >&6; }
  gcc_cv_ld_version_script=no
  ld_version_script_option=''
! if test $in_tree_ld = yes; then
    gcc_cv_ld_version_script=yes
    ld_version_script_option='--version-script'
! elif test x$gcc_cv_ld != x; then
!   # Check if linker supports --version-script option
!   if $gcc_cv_ld --help 2>&1 | grep -- --version-script > /dev/null; then
!     gcc_cv_ld_version_script=yes
!     ld_version_script_option='--version-script'
!   fi
! fi
! if test x$ld_flavor = xsolaris; then
    # Solaris 2 ld always supports -M.  It also supports a subset of
    # --version-script since Solaris 11.4, but requires
    # -z gnu-version-script-compat to activate.
    gcc_cv_ld_version_script=yes
    ld_version_script_option='-M'
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld_version_script" >&5
  $as_echo "$gcc_cv_ld_version_script" >&6; }
  
*************** $as_echo "$gcc_cv_ld_version_script" >&6
*** 28540,28563 ****
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker soname option" >&5
  $as_echo_n "checking linker soname option... " >&6; }
  gcc_cv_ld_soname=no
! if test $in_tree_ld = yes || test x"$gnu_ld" = xyes; then
    gcc_cv_ld_soname=yes
    ld_soname_option='-soname'
  elif test x$gcc_cv_ld != x; then
!   case "$target" in
!     *-*-darwin*)
!       gcc_cv_ld_soname=yes
!       ld_soname_option='-install_name'
!       ;;
!     # Solaris 2 ld always supports -h.  It also supports --soname for GNU
!     # ld compatibility since some Solaris 10 update.
!     *-*-solaris2*)
!       gcc_cv_ld_soname=yes
!       ld_soname_option='-h'
!       ;;
!   esac
  fi
! # Don't AC_DEFINE result, only used in jit/Make-lang.in so far.
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld_soname" >&5
  $as_echo "$gcc_cv_ld_soname" >&6; }
  
--- 28548,28575 ----
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker soname option" >&5
  $as_echo_n "checking linker soname option... " >&6; }
  gcc_cv_ld_soname=no
! if test $in_tree_ld = yes; then
    gcc_cv_ld_soname=yes
    ld_soname_option='-soname'
  elif test x$gcc_cv_ld != x; then
!   # Check if linker supports -soname option
!   if $gcc_cv_ld --help 2>&1 | grep -- -soname > /dev/null; then
!     gcc_cv_ld_soname=yes
!     ld_soname_option='-soname'
!   fi
  fi
! case "$target:$ld_flavor" in
!   *-*-darwin*:*)
!     gcc_cv_ld_soname=yes
!     ld_soname_option='-install_name'
!     ;;
!   # Solaris 2 ld always supports -h.  It also supports --soname for GNU
!   # ld compatiblity since some Solaris 10 update.
!   *-*-solaris2*:solaris)
!     gcc_cv_ld_soname=yes
!     ld_soname_option='-h'
!     ;;
! esac
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld_soname" >&5
  $as_echo "$gcc_cv_ld_soname" >&6; }
  
*************** if test x"$demangler_in_ld" = xyes; then
*** 28567,28576 ****
  $as_echo_n "checking linker --demangle support... " >&6; }
    gcc_cv_ld_demangle=no
    if test $in_tree_ld = yes; then
!     if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 14 -o "$gcc_cv_gld_major_version" -gt 2; then \
        gcc_cv_ld_demangle=yes
      fi
!   elif test x$gcc_cv_ld != x -a x"$gnu_ld" = xyes; then
      # Check if the GNU linker supports --demangle option
      if $gcc_cv_ld --help 2>&1 | grep no-demangle > /dev/null; then
        gcc_cv_ld_demangle=yes
--- 28579,28588 ----
  $as_echo_n "checking linker --demangle support... " >&6; }
    gcc_cv_ld_demangle=no
    if test $in_tree_ld = yes; then
!     if gcc_fn_gld_min_version 2 14; then
        gcc_cv_ld_demangle=yes
      fi
!   elif test x$gcc_cv_ld != x; then
      # Check if the GNU linker supports --demangle option
      if $gcc_cv_ld --help 2>&1 | grep no-demangle > /dev/null; then
        gcc_cv_ld_demangle=yes
*************** $as_echo "#define HAVE_AS_AEABI_BUILD_AT
*** 28846,28851 ****
--- 28858,28897 ----
  
  fi
  
+     # Check if we have binutils support for DTPREL relocation.
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for support of DTPREL relocation" >&5
+ $as_echo_n "checking assembler for support of DTPREL relocation... " >&6; }
+ if ${gcc_cv_as_aarch64_dtprel_relocation+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   gcc_cv_as_aarch64_dtprel_relocation=no
+   if test x"$gcc_cv_as" != x; then
+     $as_echo '
+ 	.xword %dtprel(expr)
+     ' > conftest.s
+     if { ac_try='$gcc_cv_as $gcc_cv_as_flags  -o conftest.o conftest.s >&5'
+   { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+   test $ac_status = 0; }; }
+     then
+ 	gcc_cv_as_aarch64_dtprel_relocation=yes
+     else
+       echo "configure: failed program was" >&5
+       cat conftest.s >&5
+     fi
+     rm -f conftest.o conftest.s
+   fi
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_aarch64_dtprel_relocation" >&5
+ $as_echo "$gcc_cv_as_aarch64_dtprel_relocation" >&6; }
+ if test $gcc_cv_as_aarch64_dtprel_relocation = yes; then
+ 
+ $as_echo "#define HAVE_AS_DTPREL_RELOC 1" >>confdefs.h
+ 
+ fi
+ 
      # Enable Branch Target Identification Mechanism and Return Address
      # Signing by default.
      # Check whether --enable-standard-branch-protection was given.
*************** $as_echo_n "checking assembler and linke
*** 30914,30921 ****
      gcc_cv_as_ld_jalr_reloc=no
      if test $gcc_cv_as_mips_explicit_relocs = yes; then
        if test $in_tree_ld = yes ; then
!         if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 20 -o "$gcc_cv_gld_major_version" -gt 2 \
!            && test $in_tree_ld_is_elf = yes; then
            gcc_cv_as_ld_jalr_reloc=yes
          fi
        elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x -a x"$gcc_cv_objdump" != x; then
--- 30960,30966 ----
      gcc_cv_as_ld_jalr_reloc=no
      if test $gcc_cv_as_mips_explicit_relocs = yes; then
        if test $in_tree_ld = yes ; then
!         if gcc_fn_gld_elf_min_version 2 20; then
            gcc_cv_as_ld_jalr_reloc=yes
          fi
        elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x -a x"$gcc_cv_objdump" != x; then
*************** if ${gcc_cv_ld_mips_personality_relaxati
*** 30954,30962 ****
  else
    gcc_cv_ld_mips_personality_relaxation=no
         if test $in_tree_ld = yes ; then
! 	 if test "$gcc_cv_gld_major_version" -eq 2 \
! 		 -a "$gcc_cv_gld_minor_version" -ge 21 \
! 		 -o "$gcc_cv_gld_major_version" -gt 2; then
  	   gcc_cv_ld_mips_personality_relaxation=yes
  	 fi
         elif test x"$gcc_cv_as" != x \
--- 30999,31005 ----
  else
    gcc_cv_ld_mips_personality_relaxation=no
         if test $in_tree_ld = yes ; then
!          if gcc_fn_gld_min_version 2 21; then
  	   gcc_cv_ld_mips_personality_relaxation=yes
  	 fi
         elif test x"$gcc_cv_as" != x \
*************** esac
*** 31693,31700 ****
  
  case "$target" in
    mips*-*-* | loongarch*-*-* | *-*-hpux* )
!     if test x$gas = xyes \
!        || test x"$host" != x"$build" \
         || test ! -x "$gcc_cv_as" \
         || "$gcc_cv_as" -v < /dev/null 2>&1 | grep GNU > /dev/null; then
        :
--- 31736,31742 ----
  
  case "$target" in
    mips*-*-* | loongarch*-*-* | *-*-hpux* )
!     if test x"$host" != x"$build" \
         || test ! -x "$gcc_cv_as" \
         || "$gcc_cv_as" -v < /dev/null 2>&1 | grep GNU > /dev/null; then
        :
*************** $as_echo "$thin_archive_support" >&6; }
*** 32621,32628 ****
  $as_echo_n "checking linker PT_GNU_EH_FRAME support... " >&6; }
  gcc_cv_ld_eh_frame_hdr=no
  if test $in_tree_ld = yes ; then
!   if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 12 -o "$gcc_cv_gld_major_version" -gt 2 \
!      && test $in_tree_ld_is_elf = yes; then
      gcc_cv_ld_eh_frame_hdr=yes
    fi
  elif test x$gcc_cv_ld != x; then
--- 32663,32669 ----
  $as_echo_n "checking linker PT_GNU_EH_FRAME support... " >&6; }
  gcc_cv_ld_eh_frame_hdr=no
  if test $in_tree_ld = yes ; then
!   if gcc_fn_gld_elf_min_version 2 12; then
      gcc_cv_ld_eh_frame_hdr=yes
    fi
  elif test x$gcc_cv_ld != x; then
*************** $as_echo "$gcc_cv_ld_eh_frame_hdr" >&6;
*** 32652,32660 ****
  $as_echo_n "checking linker position independent executable support... " >&6; }
  gcc_cv_ld_pie=no
  if test $in_tree_ld = yes ; then
!   gcc_gld_pie_min_version=15
!   if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge "$gcc_gld_pie_min_version" -o "$gcc_cv_gld_major_version" -gt 2 \
!      && test $in_tree_ld_is_elf = yes; then
      gcc_cv_ld_pie=yes
    fi
  elif test x$gcc_cv_ld != x; then
--- 32693,32699 ----
  $as_echo_n "checking linker position independent executable support... " >&6; }
  gcc_cv_ld_pie=no
  if test $in_tree_ld = yes ; then
!   if gcc_fn_gld_elf_min_version 2 15; then
      gcc_cv_ld_pie=yes
    fi
  elif test x$gcc_cv_ld != x; then
*************** $as_echo_n "checking linker PIE support
*** 32683,32689 ****
  gcc_cv_ld_pie_copyreloc=no
  if test $gcc_cv_ld_pie = yes ; then
    if test $in_tree_ld = yes ; then
!     if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 25 -o "$gcc_cv_gld_major_version" -gt 2; then
        gcc_cv_ld_pie_copyreloc=yes
      fi
    elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x ; then
--- 32722,32728 ----
  gcc_cv_ld_pie_copyreloc=no
  if test $gcc_cv_ld_pie = yes ; then
    if test $in_tree_ld = yes ; then
!     if gcc_fn_gld_min_version 2 25; then
        gcc_cv_ld_pie_copyreloc=yes
      fi
    elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x ; then
*************** $as_echo "$gcc_cv_ld_pie_copyreloc" >&6;
*** 32734,32741 ****
  $as_echo_n "checking linker EH-compatible garbage collection of sections... " >&6; }
  gcc_cv_ld_eh_gc_sections=no
  if test $in_tree_ld = yes ; then
!   if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 17 -o "$gcc_cv_gld_major_version" -gt 2 \
!      && test $in_tree_ld_is_elf = yes; then
      gcc_cv_ld_eh_gc_sections=yes
    fi
  elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x -a x"$gcc_cv_objdump" != x ; then
--- 32773,32779 ----
  $as_echo_n "checking linker EH-compatible garbage collection of sections... " >&6; }
  gcc_cv_ld_eh_gc_sections=no
  if test $in_tree_ld = yes ; then
!   if gcc_fn_gld_elf_min_version 2 17; then
      gcc_cv_ld_eh_gc_sections=yes
    fi
  elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x -a x"$gcc_cv_objdump" != x ; then
*************** $as_echo "$gcc_cv_ld_eh_gc_sections" >&6
*** 32817,32824 ****
  $as_echo_n "checking linker EH garbage collection of sections bug... " >&6; }
  gcc_cv_ld_eh_gc_sections_bug=no
  if test $in_tree_ld = yes ; then
!   if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -lt 19 -o "$gcc_cv_gld_major_version" -lt 2 \
!      && test $in_tree_ld_is_elf = yes; then
      gcc_cv_ld_eh_gc_sections_bug=yes
    fi
  elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x -a x"$gcc_cv_objdump" != x -a x$gcc_cv_as_comdat_group = xyes; then
--- 32855,32863 ----
  $as_echo_n "checking linker EH garbage collection of sections bug... " >&6; }
  gcc_cv_ld_eh_gc_sections_bug=no
  if test $in_tree_ld = yes ; then
!   if gcc_fn_gld_elf_min_version 2 19; then
!     :
!   else
      gcc_cv_ld_eh_gc_sections_bug=yes
    fi
  elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x -a x"$gcc_cv_objdump" != x -a x$gcc_cv_as_comdat_group = xyes; then
*************** gcc_cv_ld_ctf=no
*** 32908,32914 ****
  # Check for Solaris ld 1.3315 introduced in Solaris 11.4 SRU 84.  ld -z ctf
  # already went in in SRU 81, but lacked GNU CTF to Solaris CTF conversion.
  if $gcc_cv_ld --help 2>&1 | grep -- '-z ctf' > /dev/null \
!   && test x$solaris_ld = xyes && test "$ld_vers_minor" -ge 3315; then
    gcc_cv_ld_ctf=yes
  
  $as_echo "#define HAVE_LD_CTF 1" >>confdefs.h
--- 32947,32953 ----
  # Check for Solaris ld 1.3315 introduced in Solaris 11.4 SRU 84.  ld -z ctf
  # already went in in SRU 81, but lacked GNU CTF to Solaris CTF conversion.
  if $gcc_cv_ld --help 2>&1 | grep -- '-z ctf' > /dev/null \
!   && test x$ld_flavor = xsolaris && test "$ld_vers_minor" -ge 3315; then
    gcc_cv_ld_ctf=yes
  
  $as_echo "#define HAVE_LD_CTF 1" >>confdefs.h
*************** $as_echo "$gcc_cv_ld_broken_pe_dwarf5" >
*** 33134,33140 ****
  $as_echo_n "checking PE linker --disable-dynamicbase support... " >&6; }
      gcc_cv_ld_disable_dynamicbase=no
      if test $in_tree_ld = yes; then
!       if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 36 -o "$gcc_cv_gld_major_version" -gt 2; then \
          gcc_cv_ld_disable_dynamicbase=yes
        fi
      else
--- 33173,33179 ----
  $as_echo_n "checking PE linker --disable-dynamicbase support... " >&6; }
      gcc_cv_ld_disable_dynamicbase=no
      if test $in_tree_ld = yes; then
!       if gcc_fn_gld_min_version 2 36; then
          gcc_cv_ld_disable_dynamicbase=yes
        fi
      else
*************** gcc_cv_ld_as_needed_option='--as-needed'
*** 33166,33176 ****
  gcc_cv_ld_no_as_needed_option='--no-as-needed'
  gcc_cv_ld_use_as_needed_ldscript=no
  if test $in_tree_ld = yes ; then
!   if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 16 -o "$gcc_cv_gld_major_version" -gt 2 \
!      && test $in_tree_ld_is_elf = yes; then
      gcc_cv_ld_as_needed=yes
      gcc_cv_ld_use_as_needed_ldscript=yes
!     if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 28; then
        gcc_cv_ld_as_needed_option='--push-state --as-needed'
        gcc_cv_ld_no_as_needed_option='--pop-state'
      fi
--- 33205,33214 ----
  gcc_cv_ld_no_as_needed_option='--no-as-needed'
  gcc_cv_ld_use_as_needed_ldscript=no
  if test $in_tree_ld = yes ; then
!   if gcc_fn_gld_elf_min_version 2 16; then
      gcc_cv_ld_as_needed=yes
      gcc_cv_ld_use_as_needed_ldscript=yes
!     if gcc_fn_gld_min_version 2 28; then
        gcc_cv_ld_as_needed_option='--push-state --as-needed'
        gcc_cv_ld_no_as_needed_option='--pop-state'
      fi
*************** elif test x$gcc_cv_ld != x; then
*** 33191,33197 ****
        gcc_cv_ld_no_as_needed_option='--pop-state'
      fi
    fi
!   if test x$solaris_ld = xyes; then
      # Solaris 2 ld always supports -z ignore/-z record.  Prefer the native
      # forms.
      gcc_cv_ld_as_needed=yes
--- 33229,33235 ----
        gcc_cv_ld_no_as_needed_option='--pop-state'
      fi
    fi
!   if test x$ld_flavor = xsolaris; then
      # Solaris 2 ld always supports -z ignore/-z record.  Prefer the native
      # forms.
      gcc_cv_ld_as_needed=yes
*************** $as_echo "#define USE_LD_AS_NEEDED_LDSCR
*** 33225,33257 ****
  
  fi
  
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker mapfile support for clearing hardware capabilities" >&5
! $as_echo_n "checking linker mapfile support for clearing hardware capabilities... " >&6; }
! saved_LDFLAGS="$LDFLAGS"
! for clearcap_map in sol2-clearcapv2.map sol2-clearcap.map; do
!   LDFLAGS="$saved_LDFLAGS -Wl,-M,${srcdir}/config/$clearcap_map"
!   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
! /* end confdefs.h.  */
! int main(void) {return 0;}
! _ACEOF
! if ac_fn_cxx_try_link "$LINENO"; then :
!   gcc_cv_ld_clearcap=yes; break
! else
!   gcc_cv_ld_clearcap=no
! fi
! rm -f core conftest.err conftest.$ac_objext \
!     conftest$ac_exeext conftest.$ac_ext
! done
! LDFLAGS="$saved_LDFLAGS"
! if test "x$gcc_cv_ld_clearcap" = xyes; then
! 
! $as_echo "#define HAVE_LD_CLEARCAP 1" >>confdefs.h
! 
!   ac_config_links="$ac_config_links clearcap.map:${srcdir}/config/$clearcap_map"
  
  fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld_clearcap" >&5
- $as_echo "$gcc_cv_ld_clearcap" >&6; }
  
  case "$target" in
    powerpc*-*-*)
--- 33263,33272 ----
  
  fi
  
! if test x$ld_flavor = xsolaris; then
!   ac_config_links="$ac_config_links clearcap.map:${srcdir}/config/sol2-clearcap.map"
  
  fi
  
  case "$target" in
    powerpc*-*-*)
*************** else
*** 33272,33280 ****
      if test x"$ld_is_gold" = xyes; then
        gcc_cv_ld_ppc_attr=yes
      elif test $in_tree_ld = yes ; then
!       if test "$gcc_cv_gld_major_version" -eq 2 \
! 		-a "$gcc_cv_gld_minor_version" -ge 28 \
! 		-o "$gcc_cv_gld_major_version" -gt 2; then
          gcc_cv_ld_ppc_attr=yes
        fi
      elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x ; then
--- 33287,33293 ----
      if test x"$ld_is_gold" = xyes; then
        gcc_cv_ld_ppc_attr=yes
      elif test $in_tree_ld = yes ; then
!       if gcc_fn_gld_min_version 2 28; then
          gcc_cv_ld_ppc_attr=yes
        fi
      elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x ; then
*************** else
*** 33330,33336 ****
      if test x"$ld_is_gold" = xyes; then
        gcc_cv_ld_no_dot_syms=yes
      elif test $in_tree_ld = yes ; then
!       if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 16 -o "$gcc_cv_gld_major_version" -gt 2; then
          gcc_cv_ld_no_dot_syms=yes
        fi
      elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x ; then
--- 33343,33349 ----
      if test x"$ld_is_gold" = xyes; then
        gcc_cv_ld_no_dot_syms=yes
      elif test $in_tree_ld = yes ; then
!       if gcc_fn_gld_min_version 2 16; then
          gcc_cv_ld_no_dot_syms=yes
        fi
      elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x ; then
*************** else
*** 33376,33382 ****
      if test x"$ld_is_gold" = xyes; then
        gcc_cv_ld_large_toc=yes
      elif test $in_tree_ld = yes ; then
!       if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 21 -o "$gcc_cv_gld_major_version" -gt 2; then
          gcc_cv_ld_large_toc=yes
        fi
      elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x ; then
--- 33389,33395 ----
      if test x"$ld_is_gold" = xyes; then
        gcc_cv_ld_large_toc=yes
      elif test $in_tree_ld = yes ; then
!       if gcc_fn_gld_min_version 2 21; then
          gcc_cv_ld_large_toc=yes
        fi
      elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x ; then
*************** if ${gcc_cv_ld_buildid+:} false; then :
*** 33485,33494 ****
  else
    gcc_cv_ld_buildid=no
    if test $in_tree_ld = yes ; then
!     if test "$gcc_cv_gld_major_version" -eq 2 -a \
!        "$gcc_cv_gld_minor_version" -ge 18 -o \
!        "$gcc_cv_gld_major_version" -gt 2 \
!        && test $in_tree_ld_is_elf = yes; then
        gcc_cv_ld_buildid=yes
      fi
    elif test x$gcc_cv_ld != x; then
--- 33498,33504 ----
  else
    gcc_cv_ld_buildid=no
    if test $in_tree_ld = yes ; then
!     if gcc_fn_gld_elf_min_version 2 18; then
        gcc_cv_ld_buildid=yes
      fi
    elif test x$gcc_cv_ld != x; then
*************** if ${gcc_cv_ld_sysroot+:} false; then :
*** 33531,33537 ****
  else
    gcc_cv_ld_sysroot=no
    if test $in_tree_ld = yes ; then
!       if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 16 -o "$gcc_cv_gld_major_version" -gt 2 ; then
          gcc_cv_ld_sysroot=yes
        fi
    elif test x$gcc_cv_ld != x; then
--- 33541,33547 ----
  else
    gcc_cv_ld_sysroot=no
    if test $in_tree_ld = yes ; then
!       if gcc_fn_gld_min_version 2 16; then
          gcc_cv_ld_sysroot=yes
        fi
    elif test x$gcc_cv_ld != x; then
*************** ld_bndplt_support=no
*** 35004,35010 ****
  $as_echo_n "checking linker -z bndplt option... " >&6; }
  if test x"$ld_is_gold" = xno; then
    if test $in_tree_ld = yes ; then
!     if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 25 -o "$gcc_cv_gld_major_version" -gt 2; then
        ld_bndplt_support=yes
      fi
    elif test x$gcc_cv_ld != x; then
--- 35014,35020 ----
  $as_echo_n "checking linker -z bndplt option... " >&6; }
  if test x"$ld_is_gold" = xno; then
    if test $in_tree_ld = yes ; then
!     if gcc_fn_gld_min_version 2 25; then
        ld_bndplt_support=yes
      fi
    elif test x$gcc_cv_ld != x; then
*************** ld_pushpopstate_support=no
*** 35028,35034 ****
  $as_echo_n "checking linker --push-state/--pop-state options... " >&6; }
  if test x"$ld_is_gold" = xno; then
    if test $in_tree_ld = yes ; then
!     if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 25 -o "$gcc_cv_gld_major_version" -gt 2; then
        ld_pushpopstate_support=yes
      fi
    elif test x$gcc_cv_ld != x; then
--- 35038,35044 ----
  $as_echo_n "checking linker --push-state/--pop-state options... " >&6; }
  if test x"$ld_is_gold" = xno; then
    if test $in_tree_ld = yes ; then
!     if gcc_fn_gld_min_version 2 25; then
        ld_pushpopstate_support=yes
      fi
    elif test x$gcc_cv_ld != x; then
*************** $as_echo_n "checking linker -z now optio
*** 35250,35256 ****
  if test x"$ld_is_gold" = xyes; then
    ld_now_support=yes
  elif test $in_tree_ld = yes ; then
!   if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 14 -o "$gcc_cv_gld_major_version" -gt 2; then
      ld_now_support=yes
    fi
  elif test x$gcc_cv_ld != x; then
--- 35260,35266 ----
  if test x"$ld_is_gold" = xyes; then
    ld_now_support=yes
  elif test $in_tree_ld = yes ; then
!   if gcc_fn_gld_min_version 2 14; then
      ld_now_support=yes
    fi
  elif test x$gcc_cv_ld != x; then
*************** $as_echo_n "checking linker -z relro opt
*** 35274,35280 ****
  if test x"$ld_is_gold" = xyes; then
    ld_relro_support=yes
  elif test $in_tree_ld = yes ; then
!   if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 15 -o "$gcc_cv_gld_major_version" -gt 2; then
      ld_relro_support=yes
    fi
  elif test x$gcc_cv_ld != x; then
--- 35284,35290 ----
  if test x"$ld_is_gold" = xyes; then
    ld_relro_support=yes
  elif test $in_tree_ld = yes ; then
!   if gcc_fn_gld_min_version 2 15; then
      ld_relro_support=yes
    fi
  elif test x$gcc_cv_ld != x; then
*************** do
*** 36040,36051 ****
      "auto-host.h") CONFIG_HEADERS="$CONFIG_HEADERS auto-host.h:config.in" ;;
      "depdir") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir" ;;
      "gccdepdir") CONFIG_COMMANDS="$CONFIG_COMMANDS gccdepdir" ;;
!     "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
      "as") CONFIG_FILES="$CONFIG_FILES as:exec-tool.in" ;;
      "collect-ld") CONFIG_FILES="$CONFIG_FILES collect-ld:exec-tool.in" ;;
      "nm") CONFIG_FILES="$CONFIG_FILES nm:exec-tool.in" ;;
      "dsymutil") CONFIG_FILES="$CONFIG_FILES dsymutil:exec-tool.in" ;;
!     "clearcap.map") CONFIG_LINKS="$CONFIG_LINKS clearcap.map:${srcdir}/config/$clearcap_map" ;;
      "$all_outputs") CONFIG_FILES="$CONFIG_FILES $all_outputs" ;;
      "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
  
--- 36050,36061 ----
      "auto-host.h") CONFIG_HEADERS="$CONFIG_HEADERS auto-host.h:config.in" ;;
      "depdir") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir" ;;
      "gccdepdir") CONFIG_COMMANDS="$CONFIG_COMMANDS gccdepdir" ;;
!     "posubdirs") CONFIG_COMMANDS="$CONFIG_COMMANDS posubdirs" ;;
      "as") CONFIG_FILES="$CONFIG_FILES as:exec-tool.in" ;;
      "collect-ld") CONFIG_FILES="$CONFIG_FILES collect-ld:exec-tool.in" ;;
      "nm") CONFIG_FILES="$CONFIG_FILES nm:exec-tool.in" ;;
      "dsymutil") CONFIG_FILES="$CONFIG_FILES dsymutil:exec-tool.in" ;;
!     "clearcap.map") CONFIG_LINKS="$CONFIG_LINKS clearcap.map:${srcdir}/config/sol2-clearcap.map" ;;
      "$all_outputs") CONFIG_FILES="$CONFIG_FILES $all_outputs" ;;
      "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
  
*************** $as_echo "$as_me: executing $ac_file com
*** 36681,36687 ****
    do
        ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/mkinstalldirs $lang/$DEPDIR
    done ;;
!     "default-1":C)
      for ac_file in $CONFIG_FILES; do
        # Support "outfile[:infile[:infile...]]"
        case "$ac_file" in
--- 36691,36697 ----
    do
        ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/mkinstalldirs $lang/$DEPDIR
    done ;;
!     "posubdirs":C)
      for ac_file in $CONFIG_FILES; do
        # Support "outfile[:infile[:infile...]]"
        case "$ac_file" in
diff -Nrcpad gcc-17-20260628/gcc/configure.ac gcc-17-20260705/gcc/configure.ac
*** gcc-17-20260628/gcc/configure.ac	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/configure.ac	Sun Jul  5 22:32:07 2026
*************** elif test "${with_sysroot+set}" = set; t
*** 294,300 ****
  fi
  
  AC_ARG_WITH(cpp_install_dir,
! [AC_HELP_STRING([--with-cpp-install-dir=DIR],
                  [install the user visible C preprocessor in DIR
                   (relative to PREFIX) as well as PREFIX/bin])],
  [if test x$withval = xyes; then
--- 294,300 ----
  fi
  
  AC_ARG_WITH(cpp_install_dir,
! [AS_HELP_STRING([--with-cpp-install-dir=DIR],
                  [install the user visible C preprocessor in DIR
                   (relative to PREFIX) as well as PREFIX/bin])],
  [if test x$withval = xyes; then
*************** AC_SUBST(GENINSRC)
*** 332,343 ****
  # Find default linker
  # -------------------
  
- # With GNU ld
- AC_ARG_WITH(gnu-ld,
- [AS_HELP_STRING([--with-gnu-ld], [arrange to work with GNU ld])],
- gnu_ld_flag="$with_gnu_ld",
- gnu_ld_flag=)
- 
  case $target in
      *darwin*)
  	ld64_flag=yes # Darwin can only use a ld64-compatible linker.
--- 332,337 ----
*************** DEFAULT_LINKER="$with_ld")
*** 356,363 ****
  if test x"${DEFAULT_LINKER+set}" = x"set"; then
    if test ! -x "$DEFAULT_LINKER"; then
      AC_MSG_ERROR([cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER])
-   elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
-     gnu_ld_flag=yes
    elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep 'PROJECT:ld\(64\)*-' > /dev/null; then
      ld64_flag=yes
    fi
--- 350,355 ----
*************** fi
*** 367,377 ****
  
  AC_MSG_CHECKING([whether a default linker was specified])
  if test x"${DEFAULT_LINKER+set}" = x"set"; then
!   if test x"$gnu_ld_flag" = x"no"; then
!     AC_MSG_RESULT([yes ($DEFAULT_LINKER)])
!   else
!     AC_MSG_RESULT([yes ($DEFAULT_LINKER - GNU ld)])
!   fi
  else
    AC_MSG_RESULT(no)
  fi
--- 359,365 ----
  
  AC_MSG_CHECKING([whether a default linker was specified])
  if test x"${DEFAULT_LINKER+set}" = x"set"; then
!   AC_MSG_RESULT([yes ($DEFAULT_LINKER)])
  else
    AC_MSG_RESULT(no)
  fi
*************** fi
*** 411,430 ****
  # Find default assembler
  # ----------------------
  
- # With GNU as
- AC_ARG_WITH(gnu-as,
- [AS_HELP_STRING([--with-gnu-as], [arrange to work with GNU as])],
- gas_flag="$with_gnu_as",
- gas_flag=)
- 
  AC_ARG_WITH(as,
  [AS_HELP_STRING([--with-as], [arrange to use the specified as (full pathname)])],
  DEFAULT_ASSEMBLER="$with_as")
  if test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then
    if test ! -x "$DEFAULT_ASSEMBLER"; then
      AC_MSG_ERROR([cannot execute: $DEFAULT_ASSEMBLER: check --with-as or env. var. DEFAULT_ASSEMBLER])
-   elif $DEFAULT_ASSEMBLER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
-     gas_flag=yes
    fi
    AC_DEFINE_UNQUOTED(DEFAULT_ASSEMBLER,"$DEFAULT_ASSEMBLER",
  	[Define to enable the use of a default assembler.])
--- 399,410 ----
*************** fi
*** 432,442 ****
  
  AC_MSG_CHECKING([whether a default assembler was specified])
  if test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then
!   if test x"$gas_flag" != x"yes"; then
!     AC_MSG_RESULT([yes ($DEFAULT_ASSEMBLER)])
!   else
!     AC_MSG_RESULT([yes ($DEFAULT_ASSEMBLER - GNU as)])
!   fi
  else
    AC_MSG_RESULT(no)
  fi
--- 412,418 ----
  
  AC_MSG_CHECKING([whether a default assembler was specified])
  if test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then
!   AC_MSG_RESULT([yes ($DEFAULT_ASSEMBLER)])
  else
    AC_MSG_RESULT(no)
  fi
*************** if test x$use_long_long_for_widest_fast_
*** 2032,2043 ****
  efficiently supported by the host hardware.])
  fi
  
- gnu_ld_bool=`if test x"$gnu_ld" = x"yes"; then echo 1; else echo 0; fi`
- AC_DEFINE_UNQUOTED(HAVE_GNU_LD, $gnu_ld_bool, [Define to 1 if using GNU ld.])
- 
- gnu_as_bool=`if test x"$gas" = x"yes"; then echo 1; else echo 0; fi`
- AC_DEFINE_UNQUOTED(HAVE_GNU_AS, $gnu_as_bool, [Define to 1 if using GNU as.])
- 
  count=a
  for f in $host_xm_file; do
  	count=${count}x
--- 2008,2013 ----
*************** AC_DEFINE_UNQUOTED(LTOPLUGINSONAME,"${ho
*** 2693,2699 ****
  # exec-tool will fail.
  
  m4_defun([_LT_CONFIG_COMMANDS], [])
! AC_PROG_LIBTOOL
  AC_SUBST(objdir)
  AC_SUBST(enable_fast_install)
  
--- 2663,2669 ----
  # exec-tool will fail.
  
  m4_defun([_LT_CONFIG_COMMANDS], [])
! LT_INIT
  AC_SUBST(objdir)
  AC_SUBST(enable_fast_install)
  
*************** else
*** 2738,2759 ****
          AC_PATH_PROG(gcc_cv_as, $AS_FOR_TARGET)
  fi])
  
! AC_MSG_CHECKING(Solaris assembler)
  case $target in
    *-*-solaris2*)
      if $gcc_cv_as -V 2>&1 | grep 'Compiler Common.*SunOS' > /dev/null; then
!       solaris_as=yes
!       gas=no
!     elif $gcc_cv_as --version 2>/dev/null | grep GNU > /dev/null; then
!       gas=yes
      fi
      ;;
!   *)
!     solaris_as=no
      ;;
  esac
! AC_MSG_RESULT($solaris_as)
! solaris_as_bool=`if test $solaris_as = yes; then echo 1; else echo 0; fi`
  AC_DEFINE_UNQUOTED(HAVE_SOLARIS_AS, $solaris_as_bool,
  	[Define to 1 if using the Solaris assembler.])
  
--- 2708,2744 ----
          AC_PATH_PROG(gcc_cv_as, $AS_FOR_TARGET)
  fi])
  
! AC_MSG_CHECKING(assembler flavor)
! as_flavor=gnu
  case $target in
+   *-*-aix*)
+     if $gcc_cv_as -v 2>&1 | grep '^as V' > /dev/null; then
+       as_flavor=aix
+     fi
+     ;;
+   *-*-darwin*)
+     as_flavor=darwin
+     ;;
    *-*-solaris2*)
      if $gcc_cv_as -V 2>&1 | grep 'Compiler Common.*SunOS' > /dev/null; then
!       as_flavor=solaris
      fi
      ;;
!   hppa*64*-*-hpux11*)
!     if $gcc_cv_as -V 2>&1 | grep 'UX.11.*PA-RISC.*Assembler' > /dev/null; then
!       as_flavor=hpux
!     fi
!     ;;
!   nvptx-*-*)
!     as_flavor=nvptx
      ;;
  esac
! AC_MSG_RESULT($as_flavor)
! dnl Don't define HAVE_GNU_AS, only HAVE_<FLAVOR>_AS when actually used.
! aix_as_bool=`if test $as_flavor = aix; then echo 1; else echo 0; fi`
! AC_DEFINE_UNQUOTED(HAVE_AIX_AS, $aix_as_bool,
! 	[Define to 1 if using the AIX assembler.])
! solaris_as_bool=`if test $as_flavor = solaris; then echo 1; else echo 0; fi`
  AC_DEFINE_UNQUOTED(HAVE_SOLARIS_AS, $solaris_as_bool,
  	[Define to 1 if using the Solaris assembler.])
  
*************** case "$ORIGINAL_AS_FOR_TARGET" in
*** 2764,2778 ****
    *) AC_CONFIG_FILES(as:exec-tool.in, [chmod +x as]) ;;
  esac 
  
- # Check if we are using GNU as if not already set.
- if test -z "$gas"; then
-   if $gcc_cv_as --version 2>/dev/null | grep GNU > /dev/null; then
-     gas=yes
-   else
-     gas=no
-   fi
- fi
- 
  if $gcc_cv_as --help 2>&1 | grep -- --fatal-warnings > /dev/null; then
    fw_as_opt=--fatal-warnings
  fi
--- 2749,2754 ----
*************** else
*** 2839,2860 ****
          AC_PATH_PROG(gcc_cv_ld, $LD_FOR_TARGET)
  fi])
  
! AC_MSG_CHECKING(Solaris linker)
  case $target in
    *-*-solaris2*)
!     if $gcc_cv_ld -V 2>/dev/null | grep 'Solaris Link Editors' > /dev/null; then
!       gnu_ld=no
!       solaris_ld=yes
!     elif $gcc_cv_ld --version 2>/dev/null | grep GNU > /dev/null; then
!       gnu_ld=yes
      fi
      ;;
!   *)
!     solaris_ld=no
      ;;
  esac
! AC_MSG_RESULT($solaris_ld)
! solaris_ld_bool=`if test $solaris_ld = yes; then echo 1; else echo 0; fi`
  AC_DEFINE_UNQUOTED(HAVE_SOLARIS_LD, $solaris_ld_bool,
  	[Define to 1 if using the Solaris linker.])
  
--- 2815,2848 ----
          AC_PATH_PROG(gcc_cv_ld, $LD_FOR_TARGET)
  fi])
  
! AC_MSG_CHECKING(linker flavor)
! ld_flavor=gnu
  case $target in
+   *-*-aix*)
+     if $gcc_cv_ld -V 2>&1 | grep 'ld: LD ' > /dev/null; then
+       ld_flavor=aix
+     fi
+     ;;
+   *-*-darwin*)
+     ld_flavor=darwin
+     ;;
    *-*-solaris2*)
!     if $gcc_cv_ld -V 2>&1 | grep 'Solaris Link Editors' > /dev/null; then
!       ld_flavor=solaris
      fi
      ;;
!   hppa*64*-*-hpux11*)
!     if $gcc_cv_ld -V 2>&1 | grep 'linker command.*sgs.*ld PA64' > /dev/null; then
!       ld_flavor=hpux
!     fi
!     ;;
!   nvptx-*-*)
!     ld_flavor=nvptx
      ;;
  esac
! AC_MSG_RESULT($ld_flavor)
! dnl Don't define HAVE_GNU_LD, only HAVE_<FLAVOR>_LD when actually used.
! solaris_ld_bool=`if test $ld_flavor = solaris; then echo 1; else echo 0; fi`
  AC_DEFINE_UNQUOTED(HAVE_SOLARIS_LD, $solaris_ld_bool,
  	[Define to 1 if using the Solaris linker.])
  
*************** AC_ARG_WITH(plugin-ld,
*** 2875,2904 ****
  AC_SUBST(ORIGINAL_PLUGIN_LD_FOR_TARGET)
  AC_DEFINE_UNQUOTED(PLUGIN_LD_SUFFIX, "$PLUGIN_LD_SUFFIX", [Specify plugin linker])
  
! # Check if we are using GNU ld if not already set.
! if test -z "$gnu_ld"; then
!   if $gcc_cv_ld --version 2>/dev/null | grep GNU > /dev/null; then
!     gnu_ld=yes
!   else
!     gnu_ld=no
!   fi
! fi
  
! case "$target:$gnu_ld" in
!   *-*-solaris2*:no)
      # While Solaris ld has -m32/-m64 it usually determines the ELF class
      # from the input objects.
      ;;
!   i?86-*-solaris2*:yes | x86_64-*-solaris2*:yes)
      ld_32_opt=-melf_i386_sol2
      ld_64_opt=-melf_x86_64_sol2
      ;;
!   i?86-*-*:yes | x86_64-*-*:yes)
      ld_32_opt=-melf_i386
      ld_64_opt=-melf_x86_64
      ;;
  esac
  
  # Check to see if we are using gold instead of ld
  AC_MSG_CHECKING(whether we are using gold)
  ld_is_gold=no
--- 2863,2891 ----
  AC_SUBST(ORIGINAL_PLUGIN_LD_FOR_TARGET)
  AC_DEFINE_UNQUOTED(PLUGIN_LD_SUFFIX, "$PLUGIN_LD_SUFFIX", [Specify plugin linker])
  
! # Settings that depend on ld_flavor must be done here instead of config.gcc.
  
! case "$target:$ld_flavor" in
!   *-*-solaris2*:solaris)
      # While Solaris ld has -m32/-m64 it usually determines the ELF class
      # from the input objects.
      ;;
!   i?86-*-solaris2*:gnu | x86_64-*-solaris2*:gnu)
      ld_32_opt=-melf_i386_sol2
      ld_64_opt=-melf_x86_64_sol2
      ;;
!   i?86-*-*:gnu | x86_64-*-*:gnu)
      ld_32_opt=-melf_i386
      ld_64_opt=-melf_x86_64
      ;;
  esac
  
+ case "$target:$ld_flavor" in
+   hppa*64*-*-hpux11*:gnu)
+     target_cpu_default="${target_cpu_default}|MASK_GNU_LD"
+     ;;
+ esac
+ 
  # Check to see if we are using gold instead of ld
  AC_MSG_CHECKING(whether we are using gold)
  ld_is_gold=no
*************** changequote(,)dnl
*** 3340,3350 ****
  fi
  changequote([,])dnl
  
  AC_CACHE_CHECK(linker for .hidden support, gcc_cv_ld_hidden,
  [[if test $in_tree_ld = yes ; then
    gcc_cv_ld_hidden=no
!   if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 13 -o "$gcc_cv_gld_major_version" -gt 2 \
!      && test $in_tree_ld_is_elf = yes; then
       gcc_cv_ld_hidden=yes
    fi
  else
--- 3327,3357 ----
  fi
  changequote([,])dnl
  
+ # Check if an in-tree gld is at least at version major, minor.
+ gcc_fn_gld_min_version () {
+   if test "$gcc_cv_gld_major_version" -eq $1 \
+           -a "$gcc_cv_gld_minor_version" -ge $2 \
+           -o "$gcc_cv_gld_major_version" -gt $1; then
+     return 0;
+   fi
+   return 1;
+ }
+ 
+ # Check if an in-tree gld is ELF and at least at version major, minor.
+ gcc_fn_gld_elf_min_version ()
+ {
+   if gcc_fn_gld_min_version "$1" "$2"; then
+     if test $in_tree_ld_is_elf = yes; then
+       return 0
+     fi
+   fi
+   return 1
+ }
+ 
  AC_CACHE_CHECK(linker for .hidden support, gcc_cv_ld_hidden,
  [[if test $in_tree_ld = yes ; then
    gcc_cv_ld_hidden=no
!   if gcc_fn_gld_elf_min_version 2 13; then
       gcc_cv_ld_hidden=yes
    fi
  else
*************** if test $gcc_cv_as_hidden = yes && test
*** 3406,3416 ****
    [Define if your assembler and linker support .hidden.])
  fi
  
  AC_MSG_CHECKING(linker read-only and read-write section mixing)
  gcc_cv_ld_ro_rw_mix=unknown
  if test $in_tree_ld = yes ; then
!   if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 10 -o "$gcc_cv_gld_major_version" -gt 2 \
!      && test $in_tree_ld_is_elf = yes; then
      gcc_cv_ld_ro_rw_mix=read-write
    fi
  elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x -a x"$gcc_cv_objdump" != x ; then
--- 3413,3440 ----
    [Define if your assembler and linker support .hidden.])
  fi
  
+ AC_MSG_CHECKING(linker supports GNU style respones files)
+ gcc_cv_ld_at_file=no
+ if test $in_tree_ld = yes ; then
+   gcc_cv_ld_at_file=yes
+ elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x; then
+   echo '.byte 0' > conftest.s
+   echo conftest.o > conftest.at
+   if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1 \
+      && $gcc_cv_ld -r -o conftest2.o @conftest.at > /dev/null 2>&1; then
+     gcc_cv_ld_at_file=yes
+   fi
+   rm -f conftest.* conftest2.*
+ fi
+ AC_DEFINE_UNQUOTED(HAVE_LD_AT_FILE,
+   [`if test $gcc_cv_ld_at_file = yes; then echo 1; else echo 0; fi`],
+   [Define if your linker supports GNU style response files.])
+ AC_MSG_RESULT($gcc_cv_ld_at_file)
+ 
  AC_MSG_CHECKING(linker read-only and read-write section mixing)
  gcc_cv_ld_ro_rw_mix=unknown
  if test $in_tree_ld = yes ; then
!   if gcc_fn_gld_elf_min_version 2 10; then
      gcc_cv_ld_ro_rw_mix=read-write
    fi
  elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x -a x"$gcc_cv_objdump" != x ; then
*************** elif test x"$ld_is_wild" = xyes; then
*** 3839,3846 ****
    comdat_group=yes
  elif test $in_tree_ld = yes ; then
    comdat_group=no
!   if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 16 -o "$gcc_cv_gld_major_version" -gt 2 \
!      && test $in_tree_ld_is_elf = yes; then
       comdat_group=yes
    fi
  elif echo "$ld_ver" | grep GNU > /dev/null; then
--- 3863,3869 ----
    comdat_group=yes
  elif test $in_tree_ld = yes ; then
    comdat_group=no
!   if gcc_fn_gld_elf_min_version 2 16; then
       comdat_group=yes
    fi
  elif echo "$ld_ver" | grep GNU > /dev/null; then
*************** foo:	.long	25
*** 3993,3999 ****
  .word foo(tlsldo)'
  	;;
    i?86-*-* | x86_64-*-*)
!     if test x$solaris_as = xyes; then
        tls_section_flag=t
  changequote([,])dnl
        AC_DEFINE(TLS_SECTION_ASM_FLAG, 't',
--- 4016,4022 ----
  .word foo(tlsldo)'
  	;;
    i?86-*-* | x86_64-*-*)
!     if test x$as_flavor = xsolaris; then
        tls_section_flag=t
  changequote([,])dnl
        AC_DEFINE(TLS_SECTION_ASM_FLAG, 't',
*************** foo:	.long	25
*** 4242,4248 ****
  	.long	foo@TPOFF'
  	;;
    sparc*-*-*)
!     if test x$solaris_as = xyes; then
        conftest_s='
        .section ".tdata",#alloc,#write,#tls'
      else
--- 4265,4271 ----
  	.long	foo@TPOFF'
  	;;
    sparc*-*-*)
!     if test x$as_flavor = xsolaris; then
        conftest_s='
        .section ".tdata",#alloc,#write,#tls'
      else
*************** case $target_os in
*** 4300,4306 ****
      if test $set_have_as_tls = yes; then
        # Hack to check whether ld breaks on @secrel32 for Windows
        if test $in_tree_ld = yes; then
! 	if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 44 -o "$gcc_cv_gld_major_version" -gt 2; then
  	  : # ld support for @secrel32 was fixed in this version
  	else
  	  AC_MSG_ERROR([ld version is known to have broken secrel32 relocations, configure without --enable-tls or with --disable-tls to remove this error. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80881 for more information.])
--- 4323,4329 ----
      if test $set_have_as_tls = yes; then
        # Hack to check whether ld breaks on @secrel32 for Windows
        if test $in_tree_ld = yes; then
!         if gcc_fn_gld_min_version 2 44; then
  	  : # ld support for @secrel32 was fixed in this version
  	else
  	  AC_MSG_ERROR([ld version is known to have broken secrel32 relocations, configure without --enable-tls or with --disable-tls to remove this error. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80881 for more information.])
*************** gcc_cv_ld_static_dynamic=no
*** 4336,4342 ****
  gcc_cv_ld_static_option='-Bstatic'
  gcc_cv_ld_dynamic_option='-Bdynamic'
  if test $in_tree_ld = yes ; then
!   if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 10 -o "$gcc_cv_gld_major_version" -gt 2; then
      gcc_cv_ld_static_dynamic=yes
    fi
  elif test x$gcc_cv_ld != x; then
--- 4359,4365 ----
  gcc_cv_ld_static_option='-Bstatic'
  gcc_cv_ld_dynamic_option='-Bdynamic'
  if test $in_tree_ld = yes ; then
!   if gcc_fn_gld_min_version 2 10; then
      gcc_cv_ld_static_dynamic=yes
    fi
  elif test x$gcc_cv_ld != x; then
*************** elif test x$gcc_cv_ld != x; then
*** 4354,4364 ****
  	;;
        # HP-UX ld uses -a flags to select between shared and archive.
        *-*-hpux*)
! 	if test x"$gnu_ld" = xno; then
! 	  gcc_cv_ld_static_dynamic=yes
! 	  gcc_cv_ld_static_option="-aarchive_shared"
! 	  gcc_cv_ld_dynamic_option="-adefault"
! 	fi
  	;;
        # Solaris 2 ld always supports -Bstatic/-Bdynamic.
        *-*-solaris2*)
--- 4377,4385 ----
  	;;
        # HP-UX ld uses -a flags to select between shared and archive.
        *-*-hpux*)
! 	gcc_cv_ld_static_dynamic=yes
! 	gcc_cv_ld_static_option="-aarchive_shared"
! 	gcc_cv_ld_dynamic_option="-adefault"
  	;;
        # Solaris 2 ld always supports -Bstatic/-Bdynamic.
        *-*-solaris2*)
*************** if test x"$gcc_cv_ld_static_dynamic" = x
*** 4377,4419 ****
  fi
  AC_MSG_RESULT($gcc_cv_ld_static_dynamic)
  
! AC_MSG_CHECKING(linker --version-script option)
  gcc_cv_ld_version_script=no
  ld_version_script_option=''
! if test $in_tree_ld = yes || test x"$gnu_ld" = xyes; then
    gcc_cv_ld_version_script=yes
    ld_version_script_option='--version-script'
! elif test x$solaris_ld = xyes; then
    # Solaris 2 ld always supports -M.  It also supports a subset of
    # --version-script since Solaris 11.4, but requires
    # -z gnu-version-script-compat to activate.
    gcc_cv_ld_version_script=yes
    ld_version_script_option='-M'
  fi
- # Don't AC_DEFINE result, only used in jit/Make-lang.in so far.
  AC_MSG_RESULT($gcc_cv_ld_version_script)
  AC_SUBST(ld_version_script_option)
  
  AC_MSG_CHECKING(linker soname option)
  gcc_cv_ld_soname=no
! if test $in_tree_ld = yes || test x"$gnu_ld" = xyes; then
    gcc_cv_ld_soname=yes
    ld_soname_option='-soname'
  elif test x$gcc_cv_ld != x; then
!   case "$target" in
!     *-*-darwin*)
!       gcc_cv_ld_soname=yes
!       ld_soname_option='-install_name'
!       ;;
!     # Solaris 2 ld always supports -h.  It also supports --soname for GNU
!     # ld compatibility since some Solaris 10 update.
!     *-*-solaris2*)
!       gcc_cv_ld_soname=yes
!       ld_soname_option='-h'
!       ;;
!   esac
  fi
! # Don't AC_DEFINE result, only used in jit/Make-lang.in so far.
  AC_MSG_RESULT($gcc_cv_ld_soname)
  AC_SUBST(ld_soname_option)
  
--- 4398,4450 ----
  fi
  AC_MSG_RESULT($gcc_cv_ld_static_dynamic)
  
! AC_MSG_CHECKING(linker version script option)
  gcc_cv_ld_version_script=no
  ld_version_script_option=''
! if test $in_tree_ld = yes; then
    gcc_cv_ld_version_script=yes
    ld_version_script_option='--version-script'
! elif test x$gcc_cv_ld != x; then
!   # Check if linker supports --version-script option
!   if $gcc_cv_ld --help 2>&1 | grep -- --version-script > /dev/null; then
!     gcc_cv_ld_version_script=yes
!     ld_version_script_option='--version-script'
!   fi
! fi
! if test x$ld_flavor = xsolaris; then
    # Solaris 2 ld always supports -M.  It also supports a subset of
    # --version-script since Solaris 11.4, but requires
    # -z gnu-version-script-compat to activate.
    gcc_cv_ld_version_script=yes
    ld_version_script_option='-M'
  fi
  AC_MSG_RESULT($gcc_cv_ld_version_script)
  AC_SUBST(ld_version_script_option)
  
  AC_MSG_CHECKING(linker soname option)
  gcc_cv_ld_soname=no
! if test $in_tree_ld = yes; then
    gcc_cv_ld_soname=yes
    ld_soname_option='-soname'
  elif test x$gcc_cv_ld != x; then
!   # Check if linker supports -soname option
!   if $gcc_cv_ld --help 2>&1 | grep -- -soname > /dev/null; then
!     gcc_cv_ld_soname=yes
!     ld_soname_option='-soname'
!   fi
  fi
! case "$target:$ld_flavor" in
!   *-*-darwin*:*)
!     gcc_cv_ld_soname=yes
!     ld_soname_option='-install_name'
!     ;;
!   # Solaris 2 ld always supports -h.  It also supports --soname for GNU
!   # ld compatiblity since some Solaris 10 update.
!   *-*-solaris2*:solaris)
!     gcc_cv_ld_soname=yes
!     ld_soname_option='-h'
!     ;;
! esac
  AC_MSG_RESULT($gcc_cv_ld_soname)
  AC_SUBST(ld_soname_option)
  
*************** if test x"$demangler_in_ld" = xyes; then
*** 4421,4430 ****
    AC_MSG_CHECKING(linker --demangle support)
    gcc_cv_ld_demangle=no
    if test $in_tree_ld = yes; then
!     if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 14 -o "$gcc_cv_gld_major_version" -gt 2; then \
        gcc_cv_ld_demangle=yes
      fi
!   elif test x$gcc_cv_ld != x -a x"$gnu_ld" = xyes; then
      # Check if the GNU linker supports --demangle option
      if $gcc_cv_ld --help 2>&1 | grep no-demangle > /dev/null; then
        gcc_cv_ld_demangle=yes
--- 4452,4461 ----
    AC_MSG_CHECKING(linker --demangle support)
    gcc_cv_ld_demangle=no
    if test $in_tree_ld = yes; then
!     if gcc_fn_gld_min_version 2 14; then
        gcc_cv_ld_demangle=yes
      fi
!   elif test x$gcc_cv_ld != x; then
      # Check if the GNU linker supports --demangle option
      if $gcc_cv_ld --help 2>&1 | grep no-demangle > /dev/null; then
        gcc_cv_ld_demangle=yes
*************** case "$target" in
*** 4562,4567 ****
--- 4593,4604 ----
  	.aeabi_attribute Tag_Feature_GCS, 1
      ],,[AC_DEFINE(HAVE_AS_AEABI_BUILD_ATTRIBUTES, 1,
  	[Define if your assembler supports AEABI build attributes.])])
+     # Check if we have binutils support for DTPREL relocation.
+     gcc_GAS_CHECK_FEATURE([support of DTPREL relocation], gcc_cv_as_aarch64_dtprel_relocation,,
+     [
+ 	.xword %dtprel(expr)
+     ],,[AC_DEFINE(HAVE_AS_DTPREL_RELOC, 1,
+ 	[Define if your assembler supports DTPREL relocation.])])
      # Enable Branch Target Identification Mechanism and Return Address
      # Signing by default.
      AC_ARG_ENABLE(standard-branch-protection,
*************** x:
*** 5323,5330 ****
      gcc_cv_as_ld_jalr_reloc=no
      if test $gcc_cv_as_mips_explicit_relocs = yes; then
        if test $in_tree_ld = yes ; then
!         if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 20 -o "$gcc_cv_gld_major_version" -gt 2 \
!            && test $in_tree_ld_is_elf = yes; then
            gcc_cv_as_ld_jalr_reloc=yes
          fi
        elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x -a x"$gcc_cv_objdump" != x; then
--- 5360,5366 ----
      gcc_cv_as_ld_jalr_reloc=no
      if test $gcc_cv_as_mips_explicit_relocs = yes; then
        if test $in_tree_ld = yes ; then
!         if gcc_fn_gld_elf_min_version 2 20; then
            gcc_cv_as_ld_jalr_reloc=yes
          fi
        elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x -a x"$gcc_cv_objdump" != x; then
*************** x:
*** 5359,5367 ****
        [gcc_cv_ld_mips_personality_relaxation],
        [gcc_cv_ld_mips_personality_relaxation=no
         if test $in_tree_ld = yes ; then
! 	 if test "$gcc_cv_gld_major_version" -eq 2 \
! 		 -a "$gcc_cv_gld_minor_version" -ge 21 \
! 		 -o "$gcc_cv_gld_major_version" -gt 2; then
  	   gcc_cv_ld_mips_personality_relaxation=yes
  	 fi
         elif test x"$gcc_cv_as" != x \
--- 5395,5401 ----
        [gcc_cv_ld_mips_personality_relaxation],
        [gcc_cv_ld_mips_personality_relaxation=no
         if test $in_tree_ld = yes ; then
!          if gcc_fn_gld_min_version 2 21; then
  	   gcc_cv_ld_mips_personality_relaxation=yes
  	 fi
         elif test x"$gcc_cv_as" != x \
*************** esac
*** 5549,5556 ****
  
  case "$target" in
    mips*-*-* | loongarch*-*-* | *-*-hpux* )
!     if test x$gas = xyes \
!        || test x"$host" != x"$build" \
         || test ! -x "$gcc_cv_as" \
         || "$gcc_cv_as" -v < /dev/null 2>&1 | grep GNU > /dev/null; then
        :
--- 5583,5589 ----
  
  case "$target" in
    mips*-*-* | loongarch*-*-* | *-*-hpux* )
!     if test x"$host" != x"$build" \
         || test ! -x "$gcc_cv_as" \
         || "$gcc_cv_as" -v < /dev/null 2>&1 | grep GNU > /dev/null; then
        :
*************** AC_SUBST(thin_archive_support)
*** 6054,6061 ****
  AC_MSG_CHECKING(linker PT_GNU_EH_FRAME support)
  gcc_cv_ld_eh_frame_hdr=no
  if test $in_tree_ld = yes ; then
!   if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 12 -o "$gcc_cv_gld_major_version" -gt 2 \
!      && test $in_tree_ld_is_elf = yes; then
      gcc_cv_ld_eh_frame_hdr=yes
    fi
  elif test x$gcc_cv_ld != x; then
--- 6087,6093 ----
  AC_MSG_CHECKING(linker PT_GNU_EH_FRAME support)
  gcc_cv_ld_eh_frame_hdr=no
  if test $in_tree_ld = yes ; then
!   if gcc_fn_gld_elf_min_version 2 12; then
      gcc_cv_ld_eh_frame_hdr=yes
    fi
  elif test x$gcc_cv_ld != x; then
*************** AC_MSG_RESULT($gcc_cv_ld_eh_frame_hdr)
*** 6082,6090 ****
  AC_MSG_CHECKING(linker position independent executable support)
  gcc_cv_ld_pie=no
  if test $in_tree_ld = yes ; then
!   gcc_gld_pie_min_version=15
!   if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge "$gcc_gld_pie_min_version" -o "$gcc_cv_gld_major_version" -gt 2 \
!      && test $in_tree_ld_is_elf = yes; then
      gcc_cv_ld_pie=yes
    fi
  elif test x$gcc_cv_ld != x; then
--- 6114,6120 ----
  AC_MSG_CHECKING(linker position independent executable support)
  gcc_cv_ld_pie=no
  if test $in_tree_ld = yes ; then
!   if gcc_fn_gld_elf_min_version 2 15; then
      gcc_cv_ld_pie=yes
    fi
  elif test x$gcc_cv_ld != x; then
*************** AC_MSG_CHECKING(linker PIE support with
*** 6110,6116 ****
  gcc_cv_ld_pie_copyreloc=no
  if test $gcc_cv_ld_pie = yes ; then
    if test $in_tree_ld = yes ; then
!     if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 25 -o "$gcc_cv_gld_major_version" -gt 2; then
        gcc_cv_ld_pie_copyreloc=yes
      fi
    elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x ; then
--- 6140,6146 ----
  gcc_cv_ld_pie_copyreloc=no
  if test $gcc_cv_ld_pie = yes ; then
    if test $in_tree_ld = yes ; then
!     if gcc_fn_gld_min_version 2 25; then
        gcc_cv_ld_pie_copyreloc=yes
      fi
    elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x ; then
*************** AC_MSG_RESULT($gcc_cv_ld_pie_copyreloc)
*** 6157,6164 ****
  AC_MSG_CHECKING(linker EH-compatible garbage collection of sections)
  gcc_cv_ld_eh_gc_sections=no
  if test $in_tree_ld = yes ; then
!   if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 17 -o "$gcc_cv_gld_major_version" -gt 2 \
!      && test $in_tree_ld_is_elf = yes; then
      gcc_cv_ld_eh_gc_sections=yes
    fi
  elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x -a x"$gcc_cv_objdump" != x ; then
--- 6187,6193 ----
  AC_MSG_CHECKING(linker EH-compatible garbage collection of sections)
  gcc_cv_ld_eh_gc_sections=no
  if test $in_tree_ld = yes ; then
!   if gcc_fn_gld_elf_min_version 2 17; then
      gcc_cv_ld_eh_gc_sections=yes
    fi
  elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x -a x"$gcc_cv_objdump" != x ; then
*************** AC_MSG_RESULT($gcc_cv_ld_eh_gc_sections)
*** 6238,6245 ****
  AC_MSG_CHECKING(linker EH garbage collection of sections bug)
  gcc_cv_ld_eh_gc_sections_bug=no
  if test $in_tree_ld = yes ; then
!   if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -lt 19 -o "$gcc_cv_gld_major_version" -lt 2 \
!      && test $in_tree_ld_is_elf = yes; then
      gcc_cv_ld_eh_gc_sections_bug=yes
    fi
  elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x -a x"$gcc_cv_objdump" != x -a x$gcc_cv_as_comdat_group = xyes; then
--- 6267,6275 ----
  AC_MSG_CHECKING(linker EH garbage collection of sections bug)
  gcc_cv_ld_eh_gc_sections_bug=no
  if test $in_tree_ld = yes ; then
!   if gcc_fn_gld_elf_min_version 2 19; then
!     :
!   else
      gcc_cv_ld_eh_gc_sections_bug=yes
    fi
  elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x -a x"$gcc_cv_objdump" != x -a x$gcc_cv_as_comdat_group = xyes; then
*************** gcc_cv_ld_ctf=no
*** 6321,6327 ****
  # Check for Solaris ld 1.3315 introduced in Solaris 11.4 SRU 84.  ld -z ctf
  # already went in in SRU 81, but lacked GNU CTF to Solaris CTF conversion.
  if $gcc_cv_ld --help 2>&1 | grep -- '-z ctf' > /dev/null \
!   && test x$solaris_ld = xyes && test "$ld_vers_minor" -ge 3315; then
    gcc_cv_ld_ctf=yes
    AC_DEFINE(HAVE_LD_CTF, 1, [Define if your linker supports -z ctf.])
  fi
--- 6351,6357 ----
  # Check for Solaris ld 1.3315 introduced in Solaris 11.4 SRU 84.  ld -z ctf
  # already went in in SRU 81, but lacked GNU CTF to Solaris CTF conversion.
  if $gcc_cv_ld --help 2>&1 | grep -- '-z ctf' > /dev/null \
!   && test x$ld_flavor = xsolaris && test "$ld_vers_minor" -ge 3315; then
    gcc_cv_ld_ctf=yes
    AC_DEFINE(HAVE_LD_CTF, 1, [Define if your linker supports -z ctf.])
  fi
*************** case $target_os in
*** 6502,6508 ****
      AC_MSG_CHECKING(PE linker --disable-dynamicbase support)
      gcc_cv_ld_disable_dynamicbase=no
      if test $in_tree_ld = yes; then
!       if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 36 -o "$gcc_cv_gld_major_version" -gt 2; then \
          gcc_cv_ld_disable_dynamicbase=yes
        fi
      else
--- 6532,6538 ----
      AC_MSG_CHECKING(PE linker --disable-dynamicbase support)
      gcc_cv_ld_disable_dynamicbase=no
      if test $in_tree_ld = yes; then
!       if gcc_fn_gld_min_version 2 36; then
          gcc_cv_ld_disable_dynamicbase=yes
        fi
      else
*************** gcc_cv_ld_as_needed_option='--as-needed'
*** 6529,6539 ****
  gcc_cv_ld_no_as_needed_option='--no-as-needed'
  gcc_cv_ld_use_as_needed_ldscript=no
  if test $in_tree_ld = yes ; then
!   if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 16 -o "$gcc_cv_gld_major_version" -gt 2 \
!      && test $in_tree_ld_is_elf = yes; then
      gcc_cv_ld_as_needed=yes
      gcc_cv_ld_use_as_needed_ldscript=yes
!     if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 28; then
        gcc_cv_ld_as_needed_option='--push-state --as-needed'
        gcc_cv_ld_no_as_needed_option='--pop-state'
      fi
--- 6559,6568 ----
  gcc_cv_ld_no_as_needed_option='--no-as-needed'
  gcc_cv_ld_use_as_needed_ldscript=no
  if test $in_tree_ld = yes ; then
!   if gcc_fn_gld_elf_min_version 2 16; then
      gcc_cv_ld_as_needed=yes
      gcc_cv_ld_use_as_needed_ldscript=yes
!     if gcc_fn_gld_min_version 2 28; then
        gcc_cv_ld_as_needed_option='--push-state --as-needed'
        gcc_cv_ld_no_as_needed_option='--pop-state'
      fi
*************** elif test x$gcc_cv_ld != x; then
*** 6554,6560 ****
        gcc_cv_ld_no_as_needed_option='--pop-state'
      fi
    fi
!   if test x$solaris_ld = xyes; then
      # Solaris 2 ld always supports -z ignore/-z record.  Prefer the native
      # forms.
      gcc_cv_ld_as_needed=yes
--- 6583,6589 ----
        gcc_cv_ld_no_as_needed_option='--pop-state'
      fi
    fi
!   if test x$ld_flavor = xsolaris; then
      # Solaris 2 ld always supports -z ignore/-z record.  Prefer the native
      # forms.
      gcc_cv_ld_as_needed=yes
*************** if test x"$gcc_cv_ld_use_as_needed_ldscr
*** 6577,6596 ****
  [Define if your linker supports AS_NEEDED in linker scripts.])
  fi
  
! AC_MSG_CHECKING(linker mapfile support for clearing hardware capabilities)
! saved_LDFLAGS="$LDFLAGS"
! for clearcap_map in sol2-clearcapv2.map sol2-clearcap.map; do
!   LDFLAGS="$saved_LDFLAGS -Wl,-M,${srcdir}/config/$clearcap_map"
!   AC_LINK_IFELSE([AC_LANG_SOURCE([int main(void) {return 0;}])],
!     [gcc_cv_ld_clearcap=yes; break], [gcc_cv_ld_clearcap=no])
! done
! LDFLAGS="$saved_LDFLAGS"
! if test "x$gcc_cv_ld_clearcap" = xyes; then
!   AC_DEFINE([HAVE_LD_CLEARCAP], 1,
! [Define if the linker supports clearing hardware capabilities via mapfile.])
!   AC_CONFIG_LINKS([clearcap.map:${srcdir}/config/$clearcap_map])
  fi
- AC_MSG_RESULT($gcc_cv_ld_clearcap)
  
  case "$target" in
    powerpc*-*-*)
--- 6606,6614 ----
  [Define if your linker supports AS_NEEDED in linker scripts.])
  fi
  
! if test x$ld_flavor = xsolaris; then
!   AC_CONFIG_LINKS([clearcap.map:${srcdir}/config/sol2-clearcap.map])
  fi
  
  case "$target" in
    powerpc*-*-*)
*************** case "$target" in
*** 6608,6616 ****
      if test x"$ld_is_gold" = xyes; then
        gcc_cv_ld_ppc_attr=yes
      elif test $in_tree_ld = yes ; then
!       if test "$gcc_cv_gld_major_version" -eq 2 \
! 		-a "$gcc_cv_gld_minor_version" -ge 28 \
! 		-o "$gcc_cv_gld_major_version" -gt 2; then
          gcc_cv_ld_ppc_attr=yes
        fi
      elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x ; then
--- 6626,6632 ----
      if test x"$ld_is_gold" = xyes; then
        gcc_cv_ld_ppc_attr=yes
      elif test $in_tree_ld = yes ; then
!       if gcc_fn_gld_min_version 2 28; then
          gcc_cv_ld_ppc_attr=yes
        fi
      elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x ; then
*************** case "$target:$tm_file" in
*** 6659,6665 ****
      if test x"$ld_is_gold" = xyes; then
        gcc_cv_ld_no_dot_syms=yes
      elif test $in_tree_ld = yes ; then
!       if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 16 -o "$gcc_cv_gld_major_version" -gt 2; then
          gcc_cv_ld_no_dot_syms=yes
        fi
      elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x ; then
--- 6675,6681 ----
      if test x"$ld_is_gold" = xyes; then
        gcc_cv_ld_no_dot_syms=yes
      elif test $in_tree_ld = yes ; then
!       if gcc_fn_gld_min_version 2 16; then
          gcc_cv_ld_no_dot_syms=yes
        fi
      elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x ; then
*************** EOF
*** 6698,6704 ****
      if test x"$ld_is_gold" = xyes; then
        gcc_cv_ld_large_toc=yes
      elif test $in_tree_ld = yes ; then
!       if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 21 -o "$gcc_cv_gld_major_version" -gt 2; then
          gcc_cv_ld_large_toc=yes
        fi
      elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x ; then
--- 6714,6720 ----
      if test x"$ld_is_gold" = xyes; then
        gcc_cv_ld_large_toc=yes
      elif test $in_tree_ld = yes ; then
!       if gcc_fn_gld_min_version 2 21; then
          gcc_cv_ld_large_toc=yes
        fi
      elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x ; then
*************** AC_CACHE_CHECK(linker --build-id support
*** 6784,6793 ****
    gcc_cv_ld_buildid,
    [gcc_cv_ld_buildid=no
    if test $in_tree_ld = yes ; then
!     if test "$gcc_cv_gld_major_version" -eq 2 -a \
!        "$gcc_cv_gld_minor_version" -ge 18 -o \
!        "$gcc_cv_gld_major_version" -gt 2 \
!        && test $in_tree_ld_is_elf = yes; then
        gcc_cv_ld_buildid=yes
      fi
    elif test x$gcc_cv_ld != x; then
--- 6800,6806 ----
    gcc_cv_ld_buildid,
    [gcc_cv_ld_buildid=no
    if test $in_tree_ld = yes ; then
!     if gcc_fn_gld_elf_min_version 2 18; then
        gcc_cv_ld_buildid=yes
      fi
    elif test x$gcc_cv_ld != x; then
*************** AC_CACHE_CHECK(linker --sysroot support,
*** 6819,6825 ****
    gcc_cv_ld_sysroot,
    [gcc_cv_ld_sysroot=no
    if test $in_tree_ld = yes ; then
!       if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 16 -o "$gcc_cv_gld_major_version" -gt 2 ; then
          gcc_cv_ld_sysroot=yes
        fi
    elif test x$gcc_cv_ld != x; then 
--- 6832,6838 ----
    gcc_cv_ld_sysroot,
    [gcc_cv_ld_sysroot=no
    if test $in_tree_ld = yes ; then
!       if gcc_fn_gld_min_version 2 16; then
          gcc_cv_ld_sysroot=yes
        fi
    elif test x$gcc_cv_ld != x; then 
*************** fi
*** 7562,7568 ****
  
  # Specify what hash style to use by default.
  AC_ARG_WITH([linker-hash-style],
! [AC_HELP_STRING([--with-linker-hash-style={sysv,gnu,both}],
                  [specify the linker hash style])],
  [case x"$withval" in
     xsysv)
--- 7575,7581 ----
  
  # Specify what hash style to use by default.
  AC_ARG_WITH([linker-hash-style],
! [AS_HELP_STRING([--with-linker-hash-style={sysv,gnu,both}],
                  [specify the linker hash style])],
  [case x"$withval" in
     xsysv)
*************** fi
*** 7586,7592 ****
  
  # Specify what should be the default of -fdiagnostics-color option.
  AC_ARG_WITH([diagnostics-color],
! [AC_HELP_STRING([--with-diagnostics-color={never,auto,auto-if-env,always}],
                  [specify the default of -fdiagnostics-color option
                   auto-if-env stands for -fdiagnostics-color=auto if
                   GCC_COLOR environment variable is present and
--- 7599,7605 ----
  
  # Specify what should be the default of -fdiagnostics-color option.
  AC_ARG_WITH([diagnostics-color],
! [AS_HELP_STRING([--with-diagnostics-color={never,auto,auto-if-env,always}],
                  [specify the default of -fdiagnostics-color option
                   auto-if-env stands for -fdiagnostics-color=auto if
                   GCC_COLOR environment variable is present and
*************** AC_DEFINE_UNQUOTED(DIAGNOSTICS_COLOR_DEF
*** 7614,7620 ****
  
  # Specify what should be the default of -fdiagnostics-urls option.
  AC_ARG_WITH([diagnostics-urls],
! [AC_HELP_STRING([--with-diagnostics-urls={never,auto,auto-if-env,always}],
                  [specify the default of -fdiagnostics-urls option
                   auto-if-env stands for -fdiagnostics-urls=auto if
                   GCC_URLS or TERM_URLS environment variable is present and
--- 7627,7633 ----
  
  # Specify what should be the default of -fdiagnostics-urls option.
  AC_ARG_WITH([diagnostics-urls],
! [AS_HELP_STRING([--with-diagnostics-urls={never,auto,auto-if-env,always}],
                  [specify the default of -fdiagnostics-urls option
                   auto-if-env stands for -fdiagnostics-urls=auto if
                   GCC_URLS or TERM_URLS environment variable is present and
*************** ld_bndplt_support=no
*** 7736,7742 ****
  AC_MSG_CHECKING(linker -z bndplt option)
  if test x"$ld_is_gold" = xno; then
    if test $in_tree_ld = yes ; then
!     if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 25 -o "$gcc_cv_gld_major_version" -gt 2; then
        ld_bndplt_support=yes
      fi
    elif test x$gcc_cv_ld != x; then
--- 7749,7755 ----
  AC_MSG_CHECKING(linker -z bndplt option)
  if test x"$ld_is_gold" = xno; then
    if test $in_tree_ld = yes ; then
!     if gcc_fn_gld_min_version 2 25; then
        ld_bndplt_support=yes
      fi
    elif test x$gcc_cv_ld != x; then
*************** ld_pushpopstate_support=no
*** 7757,7763 ****
  AC_MSG_CHECKING(linker --push-state/--pop-state options)
  if test x"$ld_is_gold" = xno; then
    if test $in_tree_ld = yes ; then
!     if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 25 -o "$gcc_cv_gld_major_version" -gt 2; then
        ld_pushpopstate_support=yes
      fi
    elif test x$gcc_cv_ld != x; then
--- 7770,7776 ----
  AC_MSG_CHECKING(linker --push-state/--pop-state options)
  if test x"$ld_is_gold" = xno; then
    if test $in_tree_ld = yes ; then
!     if gcc_fn_gld_min_version 2 25; then
        ld_pushpopstate_support=yes
      fi
    elif test x$gcc_cv_ld != x; then
*************** AC_MSG_CHECKING(linker -z now option)
*** 7906,7912 ****
  if test x"$ld_is_gold" = xyes; then
    ld_now_support=yes
  elif test $in_tree_ld = yes ; then
!   if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 14 -o "$gcc_cv_gld_major_version" -gt 2; then
      ld_now_support=yes
    fi
  elif test x$gcc_cv_ld != x; then
--- 7919,7925 ----
  if test x"$ld_is_gold" = xyes; then
    ld_now_support=yes
  elif test $in_tree_ld = yes ; then
!   if gcc_fn_gld_min_version 2 14; then
      ld_now_support=yes
    fi
  elif test x$gcc_cv_ld != x; then
*************** AC_MSG_CHECKING(linker -z relro option)
*** 7926,7932 ****
  if test x"$ld_is_gold" = xyes; then
    ld_relro_support=yes
  elif test $in_tree_ld = yes ; then
!   if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 15 -o "$gcc_cv_gld_major_version" -gt 2; then
      ld_relro_support=yes
    fi
  elif test x$gcc_cv_ld != x; then
--- 7939,7945 ----
  if test x"$ld_is_gold" = xyes; then
    ld_relro_support=yes
  elif test $in_tree_ld = yes ; then
!   if gcc_fn_gld_min_version 2 15; then
      ld_relro_support=yes
    fi
  elif test x$gcc_cv_ld != x; then
diff -Nrcpad gcc-17-20260628/gcc/cp/ChangeLog gcc-17-20260705/gcc/cp/ChangeLog
*** gcc-17-20260628/gcc/cp/ChangeLog	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/cp/ChangeLog	Sun Jul  5 22:32:07 2026
***************
*** 1,3 ****
--- 1,75 ----
+ 2026-07-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/126057
+ 	* decl.cc (cp_finish_decomp): Set assembler name to
+ 	<decomp> during error recovery whenever TREE_STATIC
+ 	rather than just DECL_NAMESPACE_SCOPE_P.
+ 	* pt.cc (tsubst_stmt): If tsubst_decomp_names fails,
+ 	set assembler name to <decomp>.
+ 
+ 2026-07-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/125826
+ 	* method.cc: Implement C++29 P2953R5 - Adding restrictions to
+ 	defaulted assignment operator functions.
+ 	(maybe_delete_defaulted_fn): For C++29, error instead of
+ 	deleting always, with the exception of F1 having parmtype
+ 	const C & and F2 having implicit_parmtype C & and no other
+ 	non-permitted changes.  Move checks whether defaulted fn
+ 	should be deleted or ill-formed at all from defaulted_late_check
+ 	to this function.  Also error for C++29 if
+ 	FUNCTION_RVALUE_QUALIFIED.
+ 	(defaulted_late_check): Call maybe_delete_defaulted_fn
+ 	unconditionally.
+ 
+ 2026-07-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/126036
+ 	* reflect.cc (get_range_elts): Avoid calling finish_compound_literal
+ 	when processing_template_decl, instead set *non_constant_p and
+ 	return NULL_TREE.
+ 	(process_metafunction): Likewise.
+ 
+ 2026-07-02  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125819
+ 	* reflect.cc (namespace_members_of): Skip
+ 	DECL_IS_UNDECLARED_BUILTIN decls.
+ 
+ 2026-07-01  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/124584
+ 	* decl.cc (cp_finish_decl): Use get_temp_regvar for decomp guards.
+ 
+ 2026-07-01  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/121094
+ 	PR c++/117259
+ 	* coroutines.cc (replace_proxy): Handle TARGET_EXPR from.
+ 	(flatten_await_stmt): Pass it.
+ 
+ 2026-06-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/126007
+ 	* tree.cc (eligible_special_member_function_p): New function.
+ 	(implicit_lifetime_type_p): Use true instead of 1 in function comment.
+ 	Add some further comments.  Use eligible_special_member_function_p
+ 	instead of !DECL_DELETED_FN.
+ 
+ 2026-06-29  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	* mangle.cc (mangle_ctor_vtbl_for_type): Fix production in comment.
+ 
+ 2026-06-28  Kevin Stefanov  <kevinstefanov15@gmail.com>
+ 
+ 	PR middle-end/125274
+ 	* call.cc (conversion): Likewise.
+ 	* cp-tree.h (saved_scope): Likewise.
+ 	(language_function): Likewise.
+ 	(cp_decl_specifier_seq): Likewise.
+ 	(cp_declarator): Likewise.
+ 	* name-lookup.h (cp_binding_level): Likewise.
+ 
  2026-06-26  Marek Polacek  <polacek@redhat.com>
  
  	PR c++/125900
diff -Nrcpad gcc-17-20260628/gcc/cp/coroutines.cc gcc-17-20260705/gcc/cp/coroutines.cc
*** gcc-17-20260628/gcc/cp/coroutines.cc	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/cp/coroutines.cc	Sun Jul  5 22:32:07 2026
*************** replace_proxy (tree *here, int *do_subtr
*** 2087,2093 ****
  {
    proxy_replace *data = (proxy_replace *) d;
  
!   if (*here == data->from)
      {
        *here = data->to;
        *do_subtree = 0;
--- 2087,2095 ----
  {
    proxy_replace *data = (proxy_replace *) d;
  
!   if (*here == data->from
!       || (TREE_CODE (data->from) == TARGET_EXPR
! 	  && *here == TARGET_EXPR_SLOT (data->from)))
      {
        *here = data->to;
        *do_subtree = 0;
*************** flatten_await_stmt (var_nest_node *n, ha
*** 3326,3333 ****
  		= new var_nest_node (var, init, n->prev, n);
  	      /* We have to replace the target expr... */
  	      *v.entry = var;
! 	      /* ... and any uses of its var.  */
! 	      proxy_replace pr = {TARGET_EXPR_SLOT (t), var};
  	      cp_walk_tree (&n->init, replace_proxy, &pr, NULL);
  	      /* Compiler-generated temporaries can also have uses in
  		 following arms of compound expressions, which will be listed
--- 3328,3335 ----
  		= new var_nest_node (var, init, n->prev, n);
  	      /* We have to replace the target expr... */
  	      *v.entry = var;
! 	      /* ... and any other uses of it or its slot.  */
! 	      proxy_replace pr = {t, var};
  	      cp_walk_tree (&n->init, replace_proxy, &pr, NULL);
  	      /* Compiler-generated temporaries can also have uses in
  		 following arms of compound expressions, which will be listed
diff -Nrcpad gcc-17-20260628/gcc/cp/decl.cc gcc-17-20260705/gcc/cp/decl.cc
*** gcc-17-20260628/gcc/cp/decl.cc	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/cp/decl.cc	Sun Jul  5 22:32:07 2026
*************** cp_finish_decl (tree decl, tree init, bo
*** 10108,10117 ****
  	      tree guard = NULL_TREE;
  	      if (cleanups || cleanup)
  		{
! 		  guard = get_internal_target_expr (boolean_false_node);
! 		  add_stmt (guard);
! 		  guard = TARGET_EXPR_SLOT (guard);
  		}
  	      tree sl = push_stmt_list ();
  	      initialize_local_var (decl, init, true);
  	      if (guard)
--- 10108,10121 ----
  	      tree guard = NULL_TREE;
  	      if (cleanups || cleanup)
  		{
! 		  /* Since the CLEANUP_STMT will refer to the guard, we need it
! 		      to be a variable with the same lifetime.  ??? It might be
! 		      better to use wrap_temporary_cleanups.  */
! 		  guard = get_temp_regvar (boolean_type_node, boolean_false_node);
! 		  /* And make sure register_local_var_uses sees it.  */
! 		  pushdecl (guard);
  		}
+ 
  	      tree sl = push_stmt_list ();
  	      initialize_local_var (decl, init, true);
  	      if (guard)
*************** cp_finish_decl (tree decl, tree init, bo
*** 10137,10145 ****
  		     popped that all, so push those extra cleanups around
  		     the whole sequence with a guard variable.  */
  		  gcc_assert (TREE_CODE (sl) == STATEMENT_LIST);
! 		  guard = get_internal_target_expr (integer_zero_node);
! 		  add_stmt (guard);
! 		  guard = TARGET_EXPR_SLOT (guard);
  		  for (unsigned i = 0; i < n_extra_cleanups; ++i)
  		    {
  		      tree_stmt_iterator tsi = tsi_last (sl);
--- 10141,10148 ----
  		     popped that all, so push those extra cleanups around
  		     the whole sequence with a guard variable.  */
  		  gcc_assert (TREE_CODE (sl) == STATEMENT_LIST);
! 		  guard = get_temp_regvar (integer_type_node, integer_zero_node);
! 		  pushdecl (guard);
  		  for (unsigned i = 0; i < n_extra_cleanups; ++i)
  		    {
  		      tree_stmt_iterator tsi = tsi_last (sl);
*************** cp_finish_decomp (tree decl, cp_decomp *
*** 10708,10714 ****
  	    }
  	  first = DECL_CHAIN (first);
  	}
!       if (DECL_P (decl) && DECL_NAMESPACE_SCOPE_P (decl))
  	SET_DECL_ASSEMBLER_NAME (decl, get_identifier ("<decomp>"));
        return false;
      }
--- 10711,10717 ----
  	    }
  	  first = DECL_CHAIN (first);
  	}
!       if (DECL_P (decl) && TREE_STATIC (decl))
  	SET_DECL_ASSEMBLER_NAME (decl, get_identifier ("<decomp>"));
        return false;
      }
diff -Nrcpad gcc-17-20260628/gcc/cp/mangle.cc gcc-17-20260705/gcc/cp/mangle.cc
*** gcc-17-20260628/gcc/cp/mangle.cc	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/cp/mangle.cc	Sun Jul  5 22:32:07 2026
*************** mangle_decomp (const tree decl, vec<tree
*** 5131,5137 ****
  
     We use the production
  
!     <special-name> ::= CT <type> <offset number> _ <base type>  */
  
  tree
  mangle_ctor_vtbl_for_type (const tree type, const tree binfo)
--- 5131,5137 ----
  
     We use the production
  
!     <special-name> ::= TC <type> <offset number> _ <base type>  */
  
  tree
  mangle_ctor_vtbl_for_type (const tree type, const tree binfo)
diff -Nrcpad gcc-17-20260628/gcc/cp/method.cc gcc-17-20260705/gcc/cp/method.cc
*** gcc-17-20260628/gcc/cp/method.cc	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/cp/method.cc	Sun Jul  5 22:32:07 2026
*************** implicitly_declare_fn (special_function_
*** 3753,3760 ****
  /* Maybe mark an explicitly defaulted function FN as =deleted and warn,
     or emit an error, as per [dcl.fct.def.default].
     IMPLICIT_FN is the corresponding special member function that
!    would have been implicitly declared.  We've already compared FN and
!    IMPLICIT_FN and they are not the same.  */
  
  static void
  maybe_delete_defaulted_fn (tree fn, tree implicit_fn)
--- 3753,3759 ----
  /* Maybe mark an explicitly defaulted function FN as =deleted and warn,
     or emit an error, as per [dcl.fct.def.default].
     IMPLICIT_FN is the corresponding special member function that
!    would have been implicitly declared.  */
  
  static void
  maybe_delete_defaulted_fn (tree fn, tree implicit_fn)
*************** maybe_delete_defaulted_fn (tree fn, tree
*** 3762,3784 ****
    if (DECL_ARTIFICIAL (fn))
      return;
  
    auto_diagnostic_group d;
    const special_function_kind kind = special_function_p (fn);
    tree parmtype
      = TREE_VALUE (DECL_XOBJ_MEMBER_FUNCTION_P (fn)
  		  ? TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (fn)))
  		  : FUNCTION_FIRST_USER_PARMTYPE (fn));
    if (/* [dcl.fct.def.default] "if F1 is an assignment operator"...  */
        (SFK_ASSIGN_P (kind)
         /* "and the return type of F1 differs from the return type of F2"  */
!        && (!same_type_p (TREE_TYPE (TREE_TYPE (fn)),
! 			 TREE_TYPE (TREE_TYPE (implicit_fn)))
  	   /* "or F1's non-object parameter type is not a reference,
  	      the program is ill-formed"  */
  	   || !TYPE_REF_P (parmtype)))
        /* If F1 is *not* explicitly defaulted on its first declaration, the
  	 program is ill-formed.  */
!       || !DECL_DEFAULTED_IN_CLASS_P (fn))
      {
        error ("defaulted declaration %q+D does not match the expected "
  	     "signature", fn);
--- 3761,3828 ----
    if (DECL_ARTIFICIAL (fn))
      return;
  
+   /* Includes special handling for a default xobj operator.
+      Returns 2 for xobj parameter mismatch, 1 if parameters are
+      different and 0 if they are the same.  */
+   auto compare_fn_params = [] (tree fn, tree implicit_fn)
+   {
+     tree fn_parms = TYPE_ARG_TYPES (TREE_TYPE (fn));
+     tree implicit_fn_parms = TYPE_ARG_TYPES (TREE_TYPE (implicit_fn));
+ 
+     if (DECL_XOBJ_MEMBER_FUNCTION_P (fn))
+       {
+ 	tree fn_obj_ref_type = TREE_VALUE (fn_parms);
+ 	/* We can't default xobj operators with an xobj parameter that is not
+ 	   an lvalue reference, even if it would correspond.  */
+ 	if (!TYPE_REF_P (fn_obj_ref_type)
+ 	    || TYPE_REF_IS_RVALUE (fn_obj_ref_type)
+ 	    || !object_parms_correspond (fn, implicit_fn,
+ 					 DECL_CONTEXT (implicit_fn)))
+ 	  return 2;
+ 	/* We just compared the object parameters, skip over them before
+ 	   passing to compparms.  */
+ 	fn_parms = TREE_CHAIN (fn_parms);
+ 	implicit_fn_parms = TREE_CHAIN (implicit_fn_parms);
+       }
+     return compparms (fn_parms, implicit_fn_parms) ? 0 : 1;
+   };
+ 
+   bool same_ret_type = same_type_p (TREE_TYPE (TREE_TYPE (fn)),
+ 				    TREE_TYPE (TREE_TYPE (implicit_fn)));
+   int cmp_params = compare_fn_params (fn, implicit_fn);
+   if (same_ret_type
+       && cmp_params == 0
+       && (cxx_dialect < cxx29 || !FUNCTION_RVALUE_QUALIFIED (TREE_TYPE (fn))))
+     return;
+ 
    auto_diagnostic_group d;
    const special_function_kind kind = special_function_p (fn);
    tree parmtype
      = TREE_VALUE (DECL_XOBJ_MEMBER_FUNCTION_P (fn)
  		  ? TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (fn)))
  		  : FUNCTION_FIRST_USER_PARMTYPE (fn));
+   tree implicit_parmtype
+     = TREE_VALUE (FUNCTION_FIRST_USER_PARMTYPE (implicit_fn));
+ 
    if (/* [dcl.fct.def.default] "if F1 is an assignment operator"...  */
        (SFK_ASSIGN_P (kind)
         /* "and the return type of F1 differs from the return type of F2"  */
!        && (!same_ret_type
  	   /* "or F1's non-object parameter type is not a reference,
  	      the program is ill-formed"  */
  	   || !TYPE_REF_P (parmtype)))
        /* If F1 is *not* explicitly defaulted on its first declaration, the
  	 program is ill-formed.  */
!       || !DECL_DEFAULTED_IN_CLASS_P (fn)
!       || (cxx_dialect >= cxx29
! 	  /* For C++29, the only case which is deleted rather than
! 	     ill-formed is when F1 has const C & argument and F2 C &
! 	     and no other non-allowed differences.  */
! 	  && (FUNCTION_RVALUE_QUALIFIED (TREE_TYPE (fn))
! 	      || cmp_params == 2
! 	      || TYPE_REF_IS_RVALUE (parmtype)
! 	      || TYPE_QUALS (TREE_TYPE (parmtype)) != TYPE_QUAL_CONST
! 	      || TYPE_QUALS (TREE_TYPE (implicit_parmtype)))))
      {
        error ("defaulted declaration %q+D does not match the expected "
  	     "signature", fn);
*************** defaulted_late_check (tree fn, tristate
*** 3867,3899 ****
  					    /*inherited_parms=*/NULL_TREE);
    tree eh_spec = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (implicit_fn));
  
!   /* Includes special handling for a default xobj operator.  */
!   auto compare_fn_params = [](tree fn, tree implicit_fn){
!     tree fn_parms = TYPE_ARG_TYPES (TREE_TYPE (fn));
!     tree implicit_fn_parms = TYPE_ARG_TYPES (TREE_TYPE (implicit_fn));
! 
!     if (DECL_XOBJ_MEMBER_FUNCTION_P (fn))
!       {
! 	tree fn_obj_ref_type = TREE_VALUE (fn_parms);
! 	/* We can't default xobj operators with an xobj parameter that is not
! 	   an lvalue reference, even if it would correspond.  */
! 	if (!TYPE_REF_P (fn_obj_ref_type)
! 	    || TYPE_REF_IS_RVALUE (fn_obj_ref_type)
! 	    || !object_parms_correspond (fn, implicit_fn,
! 					 DECL_CONTEXT (implicit_fn)))
! 	  return false;
! 	/* We just compared the object parameters, skip over them before
! 	   passing to compparms.  */
! 	fn_parms = TREE_CHAIN (fn_parms);
! 	implicit_fn_parms = TREE_CHAIN (implicit_fn_parms);
!       }
!     return compparms (fn_parms, implicit_fn_parms);
!   };
! 
!   if (!same_type_p (TREE_TYPE (TREE_TYPE (fn)),
! 		    TREE_TYPE (TREE_TYPE (implicit_fn)))
!       || !compare_fn_params (fn, implicit_fn))
!     maybe_delete_defaulted_fn (fn, implicit_fn);
  
    if (DECL_DELETED_FN (implicit_fn))
      {
--- 3911,3917 ----
  					    /*inherited_parms=*/NULL_TREE);
    tree eh_spec = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (implicit_fn));
  
!   maybe_delete_defaulted_fn (fn, implicit_fn);
  
    if (DECL_DELETED_FN (implicit_fn))
      {
diff -Nrcpad gcc-17-20260628/gcc/cp/pt.cc gcc-17-20260705/gcc/cp/pt.cc
*** gcc-17-20260628/gcc/cp/pt.cc	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/cp/pt.cc	Sun Jul  5 22:32:07 2026
*************** tsubst_stmt (tree t, tree args, tsubst_f
*** 19917,19923 ****
  			if (tsubst_decomp_names (decl, pattern_decl, args,
  						 complain, in_decl, decomp)
  			    == error_mark_node)
! 			  decomp = NULL;
  		      }
  
  		    init = tsubst_init (init, decl, args, complain, in_decl);
--- 19917,19931 ----
  			if (tsubst_decomp_names (decl, pattern_decl, args,
  						 complain, in_decl, decomp)
  			    == error_mark_node)
! 			  {
! 			    decomp = NULL;
! 			    /* As in cp_finish_decomp.  */
! 			    if (TREE_STATIC (decl))
! 			      {
! 				tree id = get_identifier ("<decomp>");
! 				SET_DECL_ASSEMBLER_NAME (decl, id);
! 			      }
! 			  }
  		      }
  
  		    init = tsubst_init (init, decl, args, complain, in_decl);
diff -Nrcpad gcc-17-20260628/gcc/cp/reflect.cc gcc-17-20260705/gcc/cp/reflect.cc
*** gcc-17-20260628/gcc/cp/reflect.cc	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/cp/reflect.cc	Sun Jul  5 22:32:07 2026
*************** get_range_elts (location_t loc, const co
*** 698,703 ****
--- 698,709 ----
        }
      if (kind == REFLECT_CONSTANT_ARRAY && sz == 0)
        {
+ 	/* Don't call finish_compound_literal in a template.  */
+ 	if (processing_template_decl)
+ 	  {
+ 	    *non_constant_p = true;
+ 	    return NULL_TREE;
+ 	  }
  	/* Return std::array <valuet, 0> {}.  */
  	tree args = make_tree_vec (2);
  	TREE_VEC_ELT (args, 0) = valuet;
*************** namespace_members_of (location_t loc, tr
*** 6902,6907 ****
--- 6908,6917 ----
  	  return;
  	}
  
+       /* Skip GCC built-ins.  */
+       if (DECL_P (b) && DECL_IS_UNDECLARED_BUILTIN (b))
+ 	return;
+ 
        /* eval_is_accessible should be always true for namespace members,
  	 so don't bother calling it here.  */
        CONSTRUCTOR_APPEND_ELT (data->elts, NULL_TREE,
*************** process_metafunction (const constexpr_ct
*** 7887,7892 ****
--- 7897,7910 ----
    if (check_metafn_return_type (loc, METAFN_KIND_RET (minfo), rettype,
  				non_constant_p))
      return NULL_TREE;
+   /* Don't call get_vector_of_info_elts (for any metafn which returns
+      vector<info>) in a template.  */
+   if (processing_template_decl
+       && METAFN_KIND_RET (minfo) == METAFN_KIND_RET_VECTOR_INFO)
+     {
+       *non_constant_p = true;
+       return NULL_TREE;
+     }
    for (int argno = 0; argno < 3; ++argno)
      switch (METAFN_KIND_ARG (minfo, argno))
        {
diff -Nrcpad gcc-17-20260628/gcc/cp/tree.cc gcc-17-20260705/gcc/cp/tree.cc
*** gcc-17-20260628/gcc/cp/tree.cc	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/cp/tree.cc	Sun Jul  5 22:32:07 2026
*************** trivially_copy_constructible_p (tree t)
*** 4919,4925 ****
    return is_trivially_xible (INIT_EXPR, t, arg);
  }
  
! /* Returns 1 iff type T is an implicit-lifetime type, as defined in
     [basic.types.general] and [class.prop].  */
  
  bool
--- 4919,4943 ----
    return is_trivially_xible (INIT_EXPR, t, arg);
  }
  
! /* Returns true iff FN (which is a special member function) is
!    an eligible special member function, as defined in [special]/6.
!    The "no special member function of the same kind whose associated
!    constraints, if any, are satisfied is more constrained" condition
!    is not checked, this is checked during add_method instead.  */
! 
! static bool
! eligible_special_member_function_p (tree fn)
! {
!   /* The function is not deleted.  */
!   if (DECL_DELETED_FN (fn))
!     return false;
!   /* The associated constraints, if any, are satisfied.  */
!   if (!constraints_satisfied_p (fn))
!     return false;
!   return true;
! }
! 
! /* Returns true iff type T is an implicit-lifetime type, as defined in
     [basic.types.general] and [class.prop].  */
  
  bool
*************** implicit_lifetime_type_p (tree t)
*** 4934,4939 ****
--- 4952,4958 ----
    if (!CLASS_TYPE_P (t))
      return false;
    t = TYPE_MAIN_VARIANT (t);
+   /* It is an aggregate whose destructor is not user-provided.  */
    if (CP_AGGREGATE_TYPE_P (t)
        && (!CLASSTYPE_DESTRUCTOR (t)
  	  || !user_provided_p (CLASSTYPE_DESTRUCTOR (t))))
*************** implicit_lifetime_type_p (tree t)
*** 4946,4951 ****
--- 4965,4972 ----
      return false;
    if (CLASSTYPE_LAZY_DESTRUCTOR (t))
      lazily_declare_fn (sfk_destructor, t);
+   /* It has at least one trivial eligible constructor and a trivial,
+      non-deleted destructor.  */
    tree fn = CLASSTYPE_DESTRUCTOR (t);
    if (!fn || DECL_DELETED_FN (fn))
      return false;
*************** implicit_lifetime_type_p (tree t)
*** 4955,4961 ****
        fn = *iter;
        if ((default_ctor_p (fn) || copy_fn_p (fn) || move_fn_p (fn))
  	  && trivial_fn_p (fn)
! 	  && !DECL_DELETED_FN (fn))
  	return true;
      }
    return false;
--- 4976,4982 ----
        fn = *iter;
        if ((default_ctor_p (fn) || copy_fn_p (fn) || move_fn_p (fn))
  	  && trivial_fn_p (fn)
! 	  && eligible_special_member_function_p (fn))
  	return true;
      }
    return false;
diff -Nrcpad gcc-17-20260628/gcc/doc/extend.texi gcc-17-20260705/gcc/doc/extend.texi
*** gcc-17-20260628/gcc/doc/extend.texi	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/doc/extend.texi	Sun Jul  5 22:32:07 2026
*************** Enable/Disable the generation of the AVX
*** 9487,9497 ****
  @itemx no-amx-avx512
  Enable/disable the generation of the AMX-AVX512 instructions.
  
- @atindex @code{target("amx-tf32")}, x86
- @item amx-tf32
- @itemx no-amx-tf32
- Enable/disable the generation of the AMX-TF32 instructions.
- 
  @atindex @code{target("amx-fp8")}, x86
  @item amx-fp8
  @itemx no-amx-fp8
--- 9487,9492 ----
*************** defined, then the @code{__builtin_set_fp
*** 24080,24085 ****
--- 24075,24103 ----
  fields.  If not defined, the @code{__builtin_set_fpscr_rn} does not return a
  value.  If the @option{-msoft-float} option is used, the
  @code{__builtin_set_fpscr_rn} built-in will not return a value.
+ @defbuiltin{bool __builtin_ppc_atomic_cas_local (@var{type} *@var{ptr}, @var{type} *@var{expected}, @var{type} *@var{desired}, bool @var{weak}, int @var{success_memorder}, int @var{failure_memorder})}
+ This built-in function implements a PowerPC-specific atomic compare and
+ exchange operation.  It behaves identically to the generic
+ @code{__atomic_compare_exchange} built-in function, with one key difference:
+ it uses an EH (Extended Hint) value of 1 in the @code{lbarx}, @code{lharx},
+ @code{lwarx}, or @code{ldarx} instruction (load-and-reserve indexed).
+ 
+ The EH bit provides a hint to the processor that the program will perform a
+ subsequent store to the specified location.  This hint helps optimize lock
+ contention on PowerPC systems by keeping the lock cacheline in the local
+ processor longer, reducing performance penalties from cache coherence protocol
+ traffic.
+ 
+ For details on the behavior and semantics of the arguments, refer to the
+ @code{__atomic_compare_exchange} documentation.
+ 
+ The first three pointer arguments (@var{ptr}, @var{expected}, and
+ @var{desired}) must point to complete types, and the size of the types they
+ point to must be the same and known at compile time.  The types themselves may
+ differ.  The supported type sizes are 1, 2, 4, 8, or 16 bytes.
+ 
+ @enddefbuiltin
+ 
  
  @node Basic PowerPC Built-in Functions Available on ISA 2.05
  @subsubsection Basic PowerPC Built-in Functions Available on ISA 2.05
diff -Nrcpad gcc-17-20260628/gcc/doc/install.texi gcc-17-20260705/gcc/doc/install.texi
*** gcc-17-20260628/gcc/doc/install.texi	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/doc/install.texi	Sun Jul  5 22:32:07 2026
*************** Specify that the @emph{host} executables
*** 1176,1201 ****
  symbols when the executables are started, and that in turn allows RELRO to
  mark the GOT read-only, resulting in better security.
  
- @item @anchor{with-gnu-as}--with-gnu-as
- Specify that the compiler should assume that the
- assembler it finds is the GNU assembler.  However, this does not modify
- the rules to find an assembler and will result in confusion if the
- assembler found is not actually the GNU assembler.  (Confusion may also
- result if the compiler finds the GNU assembler but has not been
- configured with @option{--with-gnu-as}.)  If you have more than one
- assembler installed on your system, you may want to use this option in
- connection with @option{--with-as=@var{pathname}} or
- @option{--with-build-time-tools=@var{pathname}}.
- 
- The following systems are the only ones where it makes a difference
- whether you use the GNU assembler.  On any other system,
- @option{--with-gnu-as} has no effect.
- 
- @itemize @bullet
- @item @samp{hppa*-@var{any}-@var{any}}
- @item @samp{*-*-solaris2.11}
- @end itemize
- 
  @item @anchor{with-as}--with-as=@var{pathname}
  Specify that the compiler should use the assembler pointed to by
  @var{pathname}, rather than the one found by the standard rules to find
--- 1176,1181 ----
*************** is installed in the directories listed a
*** 1231,1240 ****
  assemblers installed and want to choose one that is not found by the
  above rules.
  
- @item @anchor{with-gnu-ld}--with-gnu-ld
- Same as @uref{#with-gnu-as,,@option{--with-gnu-as}}
- but for the linker.
- 
  @item --with-ld=@var{pathname}
  Same as @uref{#with-as,,@option{--with-as}}
  but for the linker.
--- 1211,1216 ----
*************** Renesas H8/300 series of processors.
*** 4375,4385 ****
  Only the 64-bit @samp{hppa} target is supported on HP-UX.  Support
  for 32-bit @samp{hppa} was discontinued in GCC 13.
  
! We require using gas on all hppa platforms.
! 
! It may be helpful to configure GCC with the
! @uref{./configure.html#with-gnu-as,,@option{--with-gnu-as}} and
! @option{--with-as=@dots{}} options to ensure that GCC can find GAS@.
  
  The DCE thread library is not supported, so @option{--enable-threads=dce}
  does not work.
--- 4351,4359 ----
  Only the 64-bit @samp{hppa} target is supported on HP-UX.  Support
  for 32-bit @samp{hppa} was discontinued in GCC 13.
  
! We require using gas on all hppa platforms.  It may be helpful to
! configure GCC with the @option{--with-as=@dots{}} option to ensure
! that GCC can find GAS@.
  
  The DCE thread library is not supported, so @option{--enable-threads=dce}
  does not work.
*************** later.
*** 4426,4433 ****
  @anchor{ia64-x-hpux}
  @heading ia64-*-hpux*
  Building GCC on this target requires the GNU Assembler.  The bundled HP
! assembler will not work.  To prevent GCC from using the wrong assembler,
! the option @option{--with-gnu-as} may be necessary.
  
  @html
  <hr />
--- 4400,4408 ----
  @anchor{ia64-x-hpux}
  @heading ia64-*-hpux*
  Building GCC on this target requires the GNU Assembler.  The bundled HP
! assembler will not work.  It may be helpful to configure GCC with
! the @option{--with-as=@dots{}} option to ensure that GCC can find
! GAS@.
  
  @html
  <hr />
*************** current GCC) is to be found in the GCC t
*** 5328,5334 ****
  @anchor{elf}
  @heading all ELF targets (SVR4, Solaris, etc.)
  C++ support is significantly better on ELF targets if you use the
! @uref{./configure.html#with-gnu-ld,,GNU linker}; duplicate copies of
  inlines, vtables and template instantiations will be discarded
  automatically.
  
--- 5303,5309 ----
  @anchor{elf}
  @heading all ELF targets (SVR4, Solaris, etc.)
  C++ support is significantly better on ELF targets if you use the
! GNU linker; duplicate copies of
  inlines, vtables and template instantiations will be discarded
  automatically.
  
diff -Nrcpad gcc-17-20260628/gcc/doc/invoke.texi gcc-17-20260705/gcc/doc/invoke.texi
*** gcc-17-20260628/gcc/doc/invoke.texi	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/doc/invoke.texi	Sun Jul  5 22:32:07 2026
*************** See RS/6000 and PowerPC Options.
*** 1465,1471 ****
  -mbranch-cost=@var{num}  -mzdcbranch
  -mcbranch-force-delay-slot
  -mfsca  -mfsrra
! -mpretend-cmove  -mfdpic  -mtas  -mlra}
  
  @emph{Solaris 2 Options} (@ref{Solaris 2 Options})
  @gccoptlist{-mclear-hwcap  -mno-clear-hwcap  -mimpure-text  -mno-impure-text
--- 1465,1471 ----
  -mbranch-cost=@var{num}  -mzdcbranch
  -mcbranch-force-delay-slot
  -mfsca  -mfsrra
! -mpretend-cmove  -mfdpic  -mtas}
  
  @emph{Solaris 2 Options} (@ref{Solaris 2 Options})
  @gccoptlist{-mclear-hwcap  -mno-clear-hwcap  -mimpure-text  -mno-impure-text
*************** See RS/6000 and PowerPC Options.
*** 1550,1558 ****
  -mavxvnni  -mamx-fp8  -mavx512fp16  -mavxifma  -mavxvnniint8
  -mavxneconvert  -mcmpccxadd  -mamx-fp16  -mprefetchi  -mraoint
  -mamx-complex  -mavxvnniint16  -msm3  -msha512  -msm4  -mapxf
! -musermsr  -mavx10.1  -mavx10.2  -mamx-avx512  -mamx-tf32  -mmovrs
! -mamx-movrs  -mavx512bmm  -mcldemote  -mms-bitfields
! -mno-align-stringops  -minline-all-stringops
  -minline-stringops-dynamically  -mstringop-strategy=@var{alg}
  -mkl  -mwidekl
  -mmemcpy-strategy=@var{strategy}  -mmemset-strategy=@var{strategy}
--- 1550,1558 ----
  -mavxvnni  -mamx-fp8  -mavx512fp16  -mavxifma  -mavxvnniint8
  -mavxneconvert  -mcmpccxadd  -mamx-fp16  -mprefetchi  -mraoint
  -mamx-complex  -mavxvnniint16  -msm3  -msha512  -msm4  -mapxf
! -musermsr  -mavx10.1  -mavx10.2  -mamx-avx512  -mmovrs  -mamx-movrs 
! -mavx512bmm
! -mcldemote  -mms-bitfields  -mno-align-stringops  -minline-all-stringops
  -minline-stringops-dynamically  -mstringop-strategy=@var{alg}
  -mkl  -mwidekl
  -mmemcpy-strategy=@var{strategy}  -mmemset-strategy=@var{strategy}
*************** Do not warn about C++26 constructs in co
*** 10120,10125 ****
--- 10120,10132 ----
  an older C++ standard.  Even without this option, some C++26 constructs
  will only be diagnosed if @option{-Wpedantic} is used.
  
+ @opindex Wc++29-extensions
+ @opindex Wno-c++29-extensions
+ @item -Wno-c++29-extensions @r{(C++ and Objective-C++ only)}
+ Do not warn about C++29 constructs in code being compiled using
+ an older C++ standard.  Even without this option, some C++29 constructs
+ will only be diagnosed if @option{-Wpedantic} is used.
+ 
  @opindex Wcast-qual
  @opindex Wno-cast-qual
  @item -Wcast-qual
*************** and GNU/Linux.
*** 27385,27400 ****
  @item -mgnu-as
  @itemx -mno-gnu-as
  Generate (or don't) code for the GNU assembler.  This is the default.
- @c Also, this is the default if the configure option @option{--with-gnu-as}
- @c is used.
  
  @opindex mgnu-ld
  @opindex mno-gnu-ld
  @item -mgnu-ld
  @itemx -mno-gnu-ld
  Generate (or don't) code for the GNU linker.  This is the default.
- @c Also, this is the default if the configure option @option{--with-gnu-ld}
- @c is used.
  
  @opindex mno-pic
  @item -mno-pic
--- 27392,27403 ----
*************** This can result in faster code on the SH
*** 33986,33998 ****
  @itemx -mno-fdpic
  Generate code using the FDPIC ABI.
  
- @opindex mlra
- @opindex mno-lra
- @item -mlra
- @itemx -mno-lra
- Use the new LRA register allocator.  By default, the old ``reload''
- allocator is used.
- 
  @end table
  
  @node Solaris 2 Options
--- 33989,33994 ----
*************** MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PT
*** 35257,35263 ****
  UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI, AVX512FP16, AVX512BF16, AMX-FP16,
  PREFETCHI, AMX-COMPLEX, AVX10.1-512, AVX-IFMA, AVX-NE-CONVERT, AVX-VNNI-INT16,
  AVX-VNNI-INT8, CMPccXADD, SHA512, SM3, SM4, AVX10.2-512, APX_F, AMX-AVX512,
! AMX-FP8, AMX-TF32, MOVRS and AMX-MOVRS instruction set support.
  
  @item bonnell
  @itemx atom
--- 35253,35259 ----
  UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI, AVX512FP16, AVX512BF16, AMX-FP16,
  PREFETCHI, AMX-COMPLEX, AVX10.1-512, AVX-IFMA, AVX-NE-CONVERT, AVX-VNNI-INT16,
  AVX-VNNI-INT8, CMPccXADD, SHA512, SM3, SM4, AVX10.2-512, APX_F, AMX-AVX512,
! AMX-FP8, MOVRS and AMX-MOVRS instruction set support.
  
  @item bonnell
  @itemx atom
*************** Support USER_MSR built-in functions and
*** 36171,36182 ****
  @opindex mno-amx-avx512
  @item -mamx-avx512
  Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2,
! AVX10.1, AVX10.2 and AMX-AVX512 built-in functions and code generation.
! 
! @opindex mamx-tf32
! @opindex mno-amx-tf32
! @item -mamx-tf32
! Support AMX-TF32 built-in functions and code generation.
  
  @opindex mamx-fp8
  @opindex mno-amx-fp8
--- 36167,36173 ----
  @opindex mno-amx-avx512
  @item -mamx-avx512
  Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2,
! AVX512F and AMX-AVX512 built-in functions and code generation.
  
  @opindex mamx-fp8
  @opindex mno-amx-fp8
diff -Nrcpad gcc-17-20260628/gcc/doc/md.texi gcc-17-20260705/gcc/doc/md.texi
*** gcc-17-20260628/gcc/doc/md.texi	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/doc/md.texi	Sun Jul  5 22:32:07 2026
*************** The filter function will then be called
*** 4442,4456 ****
  of the operand the constraint refers to, as well as ref_regno and ref_mode
  of the operand @var{opno} the filter depends on additionally.
  
  As such dependent filters are dynamic and cannot be precomputed, it is
  advisable to use them very sparingly.  Register allocation is a very
  compile-time sensitive part of GCC, and too many, or too complicated
  dynamic filters may increase the compile time significantly.
  
! As an example, the riscv port must ensure that for widening vector
! instructions, the destination register group either does not overlap
! or only overlaps specific parts of the source.  A dynamic register
! constraint would then be:
  
  @smallexample
  (define_register_constraint "Wtt" "V_REGS" "..." "riscv_widen_overlap_ok (regno, mode, ref_regno, ref_mode)" "0")
--- 4442,4461 ----
  of the operand the constraint refers to, as well as ref_regno and ref_mode
  of the operand @var{opno} the filter depends on additionally.
  
+ Note that either of the regnos can be INVALID_REGNUM to indicate that the
+ register allocator hasn't yet allocated a hard reg.  For certain kinds
+ of filters it is still possible to reject regnos, even if the ref_regno is
+ unknown.
+ 
  As such dependent filters are dynamic and cannot be precomputed, it is
  advisable to use them very sparingly.  Register allocation is a very
  compile-time sensitive part of GCC, and too many, or too complicated
  dynamic filters may increase the compile time significantly.
  
! An example for dependent filter usage is the riscv port.  It must ensure
! that for widening vector instructions, the destination register group either
! does not overlap the source or only overlaps specific parts it.  A dynamic
! register constraint would then be:
  
  @smallexample
  (define_register_constraint "Wtt" "V_REGS" "..." "riscv_widen_overlap_ok (regno, mode, ref_regno, ref_mode)" "0")
*************** Initialize the vector to given values.
*** 7552,7558 ****
  and operand 1 is parallel containing values for individual fields.  The
  @var{n} mode is the mode of the elements, should be either element mode of
  the vector mode @var{m}, or a vector mode with the same element mode and
! smaller number of elements.
  
  @mdindex vec_duplicate@var{m}
  @item @samp{vec_duplicate@var{m}}
--- 7557,7565 ----
  and operand 1 is parallel containing values for individual fields.  The
  @var{n} mode is the mode of the elements, should be either element mode of
  the vector mode @var{m}, or a vector mode with the same element mode and
! smaller number of elements.  If @var{m} specifies a scalable vector mode,
! then operand 1 only specifies the minimum number of elements implied
! by @var{m} and elements beyond are zero initialized.
  
  @mdindex vec_duplicate@var{m}
  @item @samp{vec_duplicate@var{m}}
diff -Nrcpad gcc-17-20260628/gcc/doc/riscv-ext.texi gcc-17-20260705/gcc/doc/riscv-ext.texi
*** gcc-17-20260628/gcc/doc/riscv-ext.texi	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/doc/riscv-ext.texi	Sun Jul  5 22:32:07 2026
***************
*** 762,765 ****
--- 762,769 ----
  @tab 1.0
  @tab SpacemiT vector dot product extension
  
+ @item @samp{xsmtvdotii}
+ @tab 1.0
+ @tab SpacemiT vector dot product II extension
+ 
  @end multitable
diff -Nrcpad gcc-17-20260628/gcc/doc/riscv-mcpu.texi gcc-17-20260705/gcc/doc/riscv-mcpu.texi
*** gcc-17-20260628/gcc/doc/riscv-mcpu.texi	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/doc/riscv-mcpu.texi	Sun Jul  5 22:32:07 2026
*************** by particular CPU name.  Permissible val
*** 96,99 ****
  
  @samp{andes-ax45},
  
! @samp{spacemit-x60}.
--- 96,103 ----
  
  @samp{andes-ax45},
  
! @samp{spacemit-x60},
! 
! @samp{spacemit-x100},
! 
! @samp{spacemit-a100}.
diff -Nrcpad gcc-17-20260628/gcc/doc/riscv-mtune.texi gcc-17-20260705/gcc/doc/riscv-mtune.texi
*** gcc-17-20260628/gcc/doc/riscv-mtune.texi	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/doc/riscv-mtune.texi	Sun Jul  5 22:32:07 2026
*************** particular CPU name.  Permissible values
*** 54,59 ****
--- 54,63 ----
  
  @samp{spacemit-x60},
  
+ @samp{spacemit-x100},
+ 
+ @samp{spacemit-a100},
+ 
  @samp{arc-v-rhx-100-series},
  
  @samp{generic-ooo},
diff -Nrcpad gcc-17-20260628/gcc/doc/sourcebuild.texi gcc-17-20260705/gcc/doc/sourcebuild.texi
*** gcc-17-20260628/gcc/doc/sourcebuild.texi	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/doc/sourcebuild.texi	Sun Jul  5 22:32:07 2026
*************** Target supports the execution of @code{a
*** 2731,2739 ****
  @item amx_movrs
  Target supports the execution of @code{amx-movrs} instructions.
  
- @item amx_tf32
- Target supports the execution of @code{amx-tf32} instructions.
- 
  @item amx_fp8
  Target supports the execution of @code{amx-fp8} instructions.
  
--- 2731,2736 ----
diff -Nrcpad gcc-17-20260628/gcc/doc/tm.texi gcc-17-20260705/gcc/doc/tm.texi
*** gcc-17-20260628/gcc/doc/tm.texi	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/doc/tm.texi	Sun Jul  5 22:32:07 2026
*************** See the file @file{sun3.h} for an exampl
*** 232,237 ****
--- 232,246 ----
  Do not define this macro if it does not need to do anything.
  @end defmac
  
+ @defmac ASM_V_SPEC
+ A C string constant that tells the GCC driver how to translate the
+ @option{-v}, @option{-w}, and @option{-I} options into their assembler
+ equivalents.
+ 
+ Only define this macro if the default, which matches GNU as, isn't
+ appropriate.
+ @end defmac
+ 
  @defmac ASM_FINAL_SPEC
  A C string constant that tells the GCC driver program how to
  run any programs which cleanup after the normal assembler.
*************** A target hook which returns @code{true}
*** 3113,3121 ****
  substitute safely pseudos with equivalent memory values during
  register allocation.
  The default version of this target hook returns @code{false}.
! On most machines, this default should be used.  For generally
! machines with non orthogonal register usage for addressing, such
! as SH, this hook can be used to avoid excessive spilling.
  @end deftypefn
  
  @deftypefn {Target Hook} bool TARGET_LEGITIMIZE_ADDRESS_DISPLACEMENT (rtx *@var{offset1}, rtx *@var{offset2}, poly_int64 @var{orig_offset}, machine_mode @var{mode})
--- 3122,3141 ----
  substitute safely pseudos with equivalent memory values during
  register allocation.
  The default version of this target hook returns @code{false}.
! On most machines, this default should be used.  For machines with
! non-orthogonal register usage for addressing, such as SH,
! this hook can be used to avoid excessive spilling.
! @end deftypefn
! 
! @deftypefn {Target Hook} bool TARGET_CANNOT_SUBSTITUTE_CONST_EQUIV_P (rtx @var{subst})
! A target hook which returns @code{true} if @var{subst} can't
! substitute safely pseudos with equivalent constant values during
! register allocation.
! The default version of this target hook returns @code{false}.
! On most machines, this default should be used.  For machines with
! special constant load instructions that have additional constraints
! or being dependent on mode-switching, such as SH, this hook can be
! used to avoid unsafe substitution.
  @end deftypefn
  
  @deftypefn {Target Hook} bool TARGET_LEGITIMIZE_ADDRESS_DISPLACEMENT (rtx *@var{offset1}, rtx *@var{offset2}, poly_int64 @var{orig_offset}, machine_mode @var{mode})
diff -Nrcpad gcc-17-20260628/gcc/doc/tm.texi.in gcc-17-20260705/gcc/doc/tm.texi.in
*** gcc-17-20260628/gcc/doc/tm.texi.in	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/doc/tm.texi.in	Sun Jul  5 22:32:07 2026
*************** See the file @file{sun3.h} for an exampl
*** 232,237 ****
--- 232,246 ----
  Do not define this macro if it does not need to do anything.
  @end defmac
  
+ @defmac ASM_V_SPEC
+ A C string constant that tells the GCC driver how to translate the
+ @option{-v}, @option{-w}, and @option{-I} options into their assembler
+ equivalents.
+ 
+ Only define this macro if the default, which matches GNU as, isn't
+ appropriate.
+ @end defmac
+ 
  @defmac ASM_FINAL_SPEC
  A C string constant that tells the GCC driver program how to
  run any programs which cleanup after the normal assembler.
*************** in the reload pass.
*** 2427,2432 ****
--- 2436,2443 ----
  
  @hook TARGET_CANNOT_SUBSTITUTE_MEM_EQUIV_P
  
+ @hook TARGET_CANNOT_SUBSTITUTE_CONST_EQUIV_P
+ 
  @hook TARGET_LEGITIMIZE_ADDRESS_DISPLACEMENT
  
  @hook TARGET_SPILL_CLASS
diff -Nrcpad gcc-17-20260628/gcc/expr.cc gcc-17-20260705/gcc/expr.cc
*** gcc-17-20260628/gcc/expr.cc	Sun Jun 28 22:32:07 2026
--- gcc-17-20260705/gcc/expr.cc	Sun Jul  5 22:32:07 2026
*************** fields_length (const_tree type)
*** 7502,7512 ****
    return count;
  }
  
- 
  /* Store the value of constructor EXP into the rtx TARGET.
     TARGET is either a REG or a MEM; we know it cannot conflict, since
     safe_from_p has been called.
     CLEARED is true if TARGET is known to have been zero'd.
     SIZE is the number of bytes of TARGET we are allowed to modify: this
     may not be the same as the size of EXP if we are assigning to a field
     which has been packed to exclude padding bits.
--- 7502,7515 ----
    return count;
  }
  
  /* Store the value of constructor EXP into the rtx TARGET.
     TARGET is either a REG or a MEM; we know it cannot conflict, since
     safe_from_p has been called.
     CLEARED is true if TARGET is known to have been zero'd.
+    If the constructor EXP has a vector type then elements of TARGET for which
+    there is no corresponding element in EXP are zero'd.  For a variable-length
+    vector type, only elements up to the minimum number of subparts of the type
+    are explicitly zero'd; any elements beyond that are implicitly zero.
     SIZE is the number of bytes of TARGET we are allowed to modify: this
     may not be the same as the size of EXP if we are assigning to a field
     which has been packed to exclude padding bits.
*************** store_constructor (tree exp, rtx target,
*** 8079,8092 ****
  		   similarly non-const type vectors. */
  		icode = convert_optab_handler (vec_init_optab, mode, eltmode);
  	      }
  
! 	  if (const_n_elts && icode != CODE_FOR_nothing)
! 	    {
! 	      vector = rtvec_alloc (const_n_elts);
! 	      for (unsigned int k = 0; k < const_n_elts; k++)
! 		RTVEC_ELT (vector, k) = CONST0_RTX (eltmode);
! 	    }
  	  }
  
  	/* Compute the size of the elements in the CTOR.  It differs
  	   from the size of the vector type elements only when the
--- 8082,8103 ----
  		   similarly non-const type vectors. */
  		icode = convert_optab_handler (vec_init_optab, mode, eltmode);
  	      }
+ 	    else
+ 	      {
+ 		/* Handle variable-length vector types.  */
+ 		icode = convert_optab_handler (vec_init_optab, mode, eltmode);
+ 		const_n_elts = constant_lower_bound (n_elts);
+ 	      }
  
! 	    if (const_n_elts && icode != CODE_FOR_nothing)
! 	      {
! 		vector = rtvec_alloc (const_n_elts);
! 		for (unsigned int k = 0; k < const_n_elts; k++)
! 		  RTVEC_ELT (vector, k) = CONST0_RTX (eltmode);
! 	      }
  	  }
+ 	else
+ 	  gcc_assert (n_elts.is_constant ());
  
  	/* Compute the size of the elements in the CTOR.  It differs
  	   from the size of the vector type elements only when the
diff -Nrcpad gcc-17-20260628/gcc/fold-const.cc gcc-17-20260705/gcc/fold-const.cc
*** gcc-17-20260628/gcc/fold-const.cc	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/fold-const.cc	Sun Jul  5 22:32:07 2026
*************** inverse_conditions_p (const_tree cond1,
*** 2935,2969 ****
  			      TREE_OPERAND (cond2, 1), 0));
  }
  
! /* Return a tree for the comparison which is the combination of
     doing the AND or OR (depending on CODE) of the two operations LCODE
     and RCODE on the identical operands LL_ARG and LR_ARG.  Take into account
!    the possibility of trapping if the mode has NaNs, and return NULL_TREE
!    if this makes the transformation invalid.  */
  
! tree
! combine_comparisons (location_t loc,
! 		     enum tree_code code, enum tree_code lcode,
! 		     enum tree_code rcode, tree truth_type,
! 		     tree ll_arg, tree lr_arg)
  {
-   bool honor_nans = HONOR_NANS (ll_arg);
    enum comparison_code lcompcode = comparison_to_compcode (lcode);
    enum comparison_code rcompcode = comparison_to_compcode (rcode);
    int compcode;
  
    switch (code)
      {
      case TRUTH_AND_EXPR: case TRUTH_ANDIF_EXPR:
        compcode = lcompcode & rcompcode;
        break;
  
      case TRUTH_OR_EXPR: case TRUTH_ORIF_EXPR:
        compcode = lcompcode | rcompcode;
        break;
  
      default:
!       return NULL_TREE;
      }
  
    if (!honor_nans)
--- 2935,2971 ----
  			      TREE_OPERAND (cond2, 1), 0));
  }
  
! /* Return a code for the comparison which is the combination of
     doing the AND or OR (depending on CODE) of the two operations LCODE
     and RCODE on the identical operands LL_ARG and LR_ARG.  Take into account
!    the possibility of trapping if the mode has NaNs, and return ERROR_MARK
!    if this makes the transformation invalid. If the resulting code is
!    INTEGER_CST, then *RES will be set to a non-NULL CONSTANT.  */
  
! enum tree_code
! combine_comparisons (enum tree_code code, enum tree_code lcode,
! 		       enum tree_code rcode, tree truth_type,
! 		       bool honor_nans, tree *res)
  {
    enum comparison_code lcompcode = comparison_to_compcode (lcode);
    enum comparison_code rcompcode = comparison_to_compcode (rcode);
    int compcode;
+   *res = NULL_TREE;
  
    switch (code)
      {
      case TRUTH_AND_EXPR: case TRUTH_ANDIF_EXPR:
+     case BIT_AND_EXPR:
        compcode = lcompcode & rcompcode;
        break;
  
      case TRUTH_OR_EXPR: case TRUTH_ORIF_EXPR:
+     case BIT_IOR_EXPR:
        compcode = lcompcode | rcompcode;
        break;
  
      default:
!       return ERROR_MARK;
      }
  
    if (!honor_nans)
*************** combine_comparisons (location_t loc,
*** 3004,3027 ****
  	   trapped, we may now generate a spurious trap.  */
  	if (rtrap && !ltrap
  	    && (code == TRUTH_ANDIF_EXPR || code == TRUTH_ORIF_EXPR))
! 	  return NULL_TREE;
  
  	/* If we changed the conditions that cause a trap, we lose.  */
  	if ((ltrap || rtrap) != trap)
! 	  return NULL_TREE;
        }
  
!   if (compcode == COMPCODE_TRUE)
!     return constant_boolean_node (true, truth_type);
!   else if (compcode == COMPCODE_FALSE)
!     return constant_boolean_node (false, truth_type);
!   else
      {
!       enum tree_code tcode;
! 
!       tcode = compcode_to_comparison ((enum comparison_code) compcode);
!       return fold_build2_loc (loc, tcode, truth_type, ll_arg, lr_arg);
      }
  }
  
  /* Return nonzero if two operands (typically of the same tree node)
--- 3006,3050 ----
  	   trapped, we may now generate a spurious trap.  */
  	if (rtrap && !ltrap
  	    && (code == TRUTH_ANDIF_EXPR || code == TRUTH_ORIF_EXPR))
! 	  return ERROR_MARK;
  
  	/* If we changed the conditions that cause a trap, we lose.  */
  	if ((ltrap || rtrap) != trap)
! 	  return ERROR_MARK;
        }
  
!   if (compcode == COMPCODE_TRUE || compcode == COMPCODE_FALSE)
      {
!       *res = constant_boolean_node (compcode == COMPCODE_TRUE, truth_type);
!       return INTEGER_CST;
      }
+   else
+     return compcode_to_comparison ((enum comparison_code) compcode);
+ }
+ 
+ /* Return a tree for the comparison which is the combination of
+    doing the AND or OR (depending on CODE) of the two operations LCODE
+    and RCODE on the identical operands LL_ARG and LR_ARG.  Take into account
+    the possibility of trapping if the mode has NaNs, and return NULL_TREE
+    if this makes the transformation invalid.  */
+ 
+ tree
+ combine_comparisons (location_t loc,
+ 		     enum tree_code code, enum tree_code lcode,
+ 		     enum tree_code rcode, tree truth_type,
+ 		     tree ll_arg, tree lr_arg)
+ {
+   bool honor_nans = HONOR_NANS (ll_arg);
+   tree_code rescode;
+   tree res;
+   rescode = combine_comparisons (code, lcode, rcode, truth_type,
+ 				 honor_nans, &res);
+   if (rescode == ERROR_MARK)
+     return NULL_TREE;
+   if (rescode == INTEGER_CST)
+     return res;
+ 
+   return fold_build2_loc (loc, rescode, truth_type, ll_arg, lr_arg);
  }
  
  /* Return nonzero if two operands (typically of the same tree node)
diff -Nrcpad gcc-17-20260628/gcc/fold-const.h gcc-17-20260705/gcc/fold-const.h
*** gcc-17-20260628/gcc/fold-const.h	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/fold-const.h	Sun Jul  5 22:32:07 2026
*************** extern bool fold_real_zero_addition_p (c
*** 175,180 ****
--- 175,182 ----
  				       int);
  extern tree combine_comparisons (location_t, enum tree_code, enum tree_code,
  				 enum tree_code, tree, tree, tree);
+ extern tree_code combine_comparisons (enum tree_code, enum tree_code,
+ 				      enum tree_code, tree, bool, tree*);
  extern void debug_fold_checksum (const_tree);
  extern bool may_negate_without_overflow_p (const_tree);
  #define round_up(T,N) round_up_loc (UNKNOWN_LOCATION, T, N)
diff -Nrcpad gcc-17-20260628/gcc/fortran/ChangeLog gcc-17-20260705/gcc/fortran/ChangeLog
*** gcc-17-20260628/gcc/fortran/ChangeLog	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/fortran/ChangeLog	Sun Jul  5 22:32:07 2026
***************
*** 1,3 ****
--- 1,201 ----
+ 2026-07-04  Thomas Koenig  <tkoenig@gcc.gnu.org>
+ 
+ 	PR fortran/126058
+ 	PR fortran/126090
+ 	* gfortran.h (gfc_dt): Add member nml_where.
+ 	* io.cc (match_dt_element): Set nml_where.
+ 	(gfc_resolve_dt): Mark variable in namelist to be read with
+ 	correct locus and VALUE_READ. Mark expression in write namelist as
+ 	used.
+ 	(match_io): Set nml_where for data transfer.
+ 	* resolve.cc: Mark code->expr1 as used for PAUSE, STOP and ERROR
+ 	STOP.
+ 
+ 2026-07-03  Sandra Loosemore  <sloosemore@baylibre.com>
+ 	    Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* openmp.cc (resolve_omp_clauses_aff_dep_map_cache): Fix
+ 	indentation.
+ 
+ 2026-07-03  Mikael Morin  <mikael@gcc.gnu.org>
+ 
+ 	PR fortran/97592
+ 	PR fortran/125998
+ 	* trans-array.cc (gfc_conv_array_parameter): Always create a new
+ 	descriptor.  Copy lbound and ubound from the original descriptor
+ 	using matching dimension indexes.  Recalculate stride and
+ 	offset.
+ 
+ 2026-07-03  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/126018
+ 	* match.cc (gfc_match_stopcode): Adjust the f2008 error check.If the
+ 	STOP code expr type is unknown, do not error. It will be checked in
+ 	gfc_resolve_code.
+ 	* resolve.cc (gfc_resolve_code): Add checks for EXEC_STOP and
+ 	EXEC_ERROR_STOP.
+ 
+ 2026-07-02  Mikael Morin  <mikael@gcc.gnu.org>
+ 
+ 	PR fortran/122521
+ 	* trans-array.cc (gfc_grow_array): Move function ...
+ 	* trans-descriptor.cc (gfc_grow_array): ... to this file.
+ 	* trans-descriptor.h (gfc_grow_array): Add declaration.
+ 
+ 2026-07-02  Mikael Morin  <mikael@gcc.gnu.org>
+ 
+ 	PR fortran/122521
+ 	* trans-descriptor.h (gfc_copy_descriptor): Add declaration.
+ 	* trans-stmt.cc (trans_associate_var): Update caller.
+ 	(copy_descriptor): Rename function and move it ...
+ 	* trans-descriptor.cc (gfc_copy_descriptor): ... here.
+ 
+ 2026-07-02  Mikael Morin  <mikael@gcc.gnu.org>
+ 
+ 	PR fortran/122521
+ 	* trans-array.cc (gfc_conv_shift_descriptor_lbound): Move
+ 	function ...
+ 	* trans-descriptor.cc (gfc_conv_shift_descriptor_lbound): ... to
+ 	this file.
+ 	* trans-array.h (gfc_conv_shift_descriptor_lbound): Move
+ 	declaration ...
+ 	* trans-descriptor.h (gfc_conv_shift_descriptor_lbound): ... to this
+ 	file.
+ 
+ 2026-07-02  Mikael Morin  <mikael@gcc.gnu.org>
+ 
+ 	PR fortran/122521
+ 	* trans-array.cc: (gfc_conv_descriptor_size_1,
+ 	gfc_conv_descriptor_size, gfc_conv_descriptor_cosize): Move
+ 	functions ...
+ 	* trans-descriptor.cc (gfc_conv_descriptor_size_1,
+ 	gfc_conv_descriptor_size, gfc_conv_descriptor_cosize): ... to this
+ 	file.
+ 	* trans-array.h (gfc_conv_descriptor_size,
+ 	gfc_conv_descriptor_cosize): Move ...
+ 	* trans-descriptor.h (gfc_conv_descriptor_size,
+ 	gfc_conv_descriptor_cosize): ... here.
+ 
+ 2026-07-02  Mikael Morin  <mikael@gcc.gnu.org>
+ 
+ 	PR fortran/122521
+ 	* trans-array.cc (DATA_FIELD, OFFSET_FIELD, DTYPE_FIELD, SPAN_FIELD,
+ 	DIMENSION_FIELD, CAF_TOKEN_FIELD, STRIDE_SUBFIELD, LBOUND_SUBFIELD,
+ 	UBOUND_SUBFIELD): Remove preprocessor constants.
+ 	(gfc_build_null_descriptor): Move function to ...
+ 	* trans-descriptor.cc (gfc_build_null_descriptor): ... this file.
+ 	* trans-array.h (gfc_build_null_descriptor): Move declaration to ...
+ 	* trans-descriptor.h (gfc_build_null_descriptor): ... this file.
+ 
+ 2026-07-02  Mikael Morin  <mikael@gcc.gnu.org>
+ 
+ 	PR fortran/122521
+ 	* trans-array.cc (gfc_get_descriptor_offsets_for_info): Move
+ 	function ...
+ 	* trans-descriptor.cc (gfc_get_descriptor_offsets_for_info): ...
+ 	to this file.
+ 	* trans-array.h (gfc_get_descriptor_offsets_for_info): Move
+ 	declaration ...
+ 	* trans-descriptor.h (gfc_get_descriptor_offsets_for_info): ...
+ 	to this file.
+ 	* trans-types.cc: Include trans-descriptor.h.
+ 
+ 2026-07-02  Mikael Morin  <mikael@gcc.gnu.org>
+ 
+ 	PR fortran/122521
+ 	* Make-lang.in (F95_OBJS): Add fortran/trans-descriptor.o to the
+ 	list of objects.
+ 	* trans-array.cc: Include new header.
+ 	(gfc_get_descriptor_field, gfc_conv_descriptor_data_get,
+ 	gfc_conv_descriptor_data_set, gfc_conv_descriptor_offset,
+ 	gfc_conv_descriptor_offset_get, gfc_conv_descriptor_offset_set,
+ 	gfc_conv_descriptor_dtype, gfc_conv_descriptor_span,
+ 	gfc_conv_descriptor_span_get, gfc_conv_descriptor_span_set,
+ 	gfc_conv_descriptor_rank, gfc_conv_descriptor_version,
+ 	gfc_conv_descriptor_elem_len, gfc_conv_descriptor_attribute,
+ 	gfc_conv_descriptor_type, gfc_get_descriptor_dimension,
+ 	gfc_conv_descriptor_dimension, gfc_conv_descriptor_token,
+ 	gfc_conv_descriptor_subfield, gfc_conv_descriptor_stride,
+ 	gfc_conv_descriptor_stride_get, gfc_conv_descriptor_stride_set,
+ 	gfc_conv_descriptor_lbound, gfc_conv_descriptor_lbound_get,
+ 	gfc_conv_descriptor_lbound_set, gfc_conv_descriptor_ubound,
+ 	gfc_conv_descriptor_ubound_get, gfc_conv_descriptor_ubound_set):
+ 	Move functions ...
+ 	* trans-descriptor.cc: ... to this new file.
+ 	* trans-array.h (gfc_get_descriptor_offsets_for_info): Fix
+ 	long line in declaration.
+ 	(gfc_conv_descriptor_data_get, gfc_conv_descriptor_offset_get,
+ 	gfc_conv_descriptor_span_get, gfc_conv_descriptor_dtype,
+ 	gfc_conv_descriptor_rank, gfc_conv_descriptor_elem_len,
+ 	gfc_conv_descriptor_version, gfc_conv_descriptor_attribute,
+ 	gfc_conv_descriptor_type, gfc_get_descriptor_dimension,
+ 	gfc_conv_descriptor_stride_get, gfc_conv_descriptor_lbound_get,
+ 	gfc_conv_descriptor_ubound_get, gfc_conv_descriptor_token,
+ 	gfc_conv_descriptor_data_set, gfc_conv_descriptor_offset_set,
+ 	gfc_conv_descriptor_span_set, gfc_conv_descriptor_stride_set,
+ 	gfc_conv_descriptor_lbound_set, gfc_conv_descriptor_ubound_set):
+ 	Move declarations ...
+ 	* trans-descriptor.h: ... to this new file.
+ 	* trans-decl.cc: Include new header.
+ 	* trans-expr.cc: Likewise.
+ 	* trans-intrinsic.cc: Likewise.
+ 	* trans-io.cc: Likewise.
+ 	* trans-openmp.cc: Likewise.
+ 	* trans-stmt.cc: Likewise.
+ 	* trans.cc: Likewise.
+ 
+ 2026-07-01  Paul Thomas  <pault@gcc.gnu.org>
+ 	    Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/121972
+ 	* expr.cc (has_parameterized_comps): Return false if the DT
+ 	is neither a pdt_type nor has PDT components. Correct the
+ 	logic for a PDT component.
+ 	* trans-expr.cc (alloc_scalar_allocatable_for_assignment): Use
+ 	calloc for types with paramterized components as well as those
+ 	with allocatable components.
+ 	* trans-stmt.cc (gfc_trans_allocate): Merge the allocation of
+ 	parameterized components of PDTs and class PDTs into one block
+ 	If an allocate type_spec is present that has allocatable comps
+ 	where the class declared type does not, nullify the allocatable
+ 	components.
+ 
+ 2026-07-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* check.cc (get_ul_from_cst_cl): Remove spurious semicolon.
+ 
+ 2026-06-30  Paul Thomas  <pault@gcc.gnu.org>
+ 	    Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/121972
+ 	* decl.cc (gfc_get_pdt_instance): A PDT that has a derived type
+ 	component, which has allocatable components, must be marked as
+ 	having allocatable components.
+ 	* resolve.cc (gfc_resolve_ref): Initialize last_pdt from the base
+ 	symbol's declared type when the expression type is not a PDT.
+ 
+ 2026-06-30  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/121972
+ 	* resolve.cc (gfc_resolve_finalizers): Fix linked-list tail-pointer
+ 	bug that dropped all but the first two finalizers from a derived
+ 	type's finalizer list when three or more matched.
+ 
+ 2026-06-30  Chung-Lin Tang  <cltang@baylibre.com>
+ 
+ 	* trans-array.cc (gfc_conv_array_initializer): Always set PURPOSE
+ 	when building constructor for get_initialized_tmp_var, adjust test
+ 	to use integer_zerop instead of != NULL_TREE.
+ 	* trans-openmp.cc (gfc_trans_omp_clauses): Handle uses_allocators.
+ 
+ 2026-06-29  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/84622
+ 	* resolve.cc (resolve_symbol): In detecting coarray components,
+ 	use the derived type of the class data component, not the data
+ 	component itself. New boolean 'declared_has_coarray_comp' to
+ 	detect this.
+ 
  2026-06-27  Thomas Koenig  <tkoenig@gcc.gnu.org>
  
  	PR fortran/30438
diff -Nrcpad gcc-17-20260628/gcc/fortran/Make-lang.in gcc-17-20260705/gcc/fortran/Make-lang.in
*** gcc-17-20260628/gcc/fortran/Make-lang.in	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/fortran/Make-lang.in	Sun Jul  5 22:32:07 2026
*************** F95_PARSER_OBJS = fortran/arith.o fortra
*** 63,71 ****
  F95_OBJS = $(F95_PARSER_OBJS) $(FORTRAN_TARGET_OBJS) \
      fortran/convert.o fortran/dependency.o fortran/f95-lang.o \
      fortran/trans.o fortran/trans-array.o fortran/trans-common.o \
!     fortran/trans-const.o fortran/trans-decl.o fortran/trans-expr.o \
!     fortran/trans-intrinsic.o fortran/trans-io.o fortran/trans-openmp.o \
!     fortran/trans-stmt.o fortran/trans-types.o fortran/frontend-passes.o
  
  fortran_OBJS = $(F95_OBJS) fortran/gfortranspec.o
  
--- 63,72 ----
  F95_OBJS = $(F95_PARSER_OBJS) $(FORTRAN_TARGET_OBJS) \
      fortran/convert.o fortran/dependency.o fortran/f95-lang.o \
      fortran/trans.o fortran/trans-array.o fortran/trans-common.o \
!     fortran/trans-const.o fortran/trans-decl.o fortran/trans-descriptor.o \
!     fortran/trans-expr.o fortran/trans-intrinsic.o fortran/trans-io.o \
!     fortran/trans-openmp.o fortran/trans-stmt.o fortran/trans-types.o \
!     fortran/frontend-passes.o
  
  fortran_OBJS = $(F95_OBJS) fortran/gfortranspec.o
  
diff -Nrcpad gcc-17-20260628/gcc/fortran/check.cc gcc-17-20260705/gcc/fortran/check.cc
*** gcc-17-20260628/gcc/fortran/check.cc	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/fortran/check.cc	Sun Jul  5 22:32:08 2026
*************** get_ul_from_cst_cl (const gfc_charlen *c
*** 2502,2508 ****
  {
    return cl && cl->length && cl->length->expr_type == EXPR_CONSTANT
  	 ? mpz_get_ui (cl->length->value.integer) : 0;
! };
  
  
  /* Checks shared between co_reduce and reduce.  */
--- 2502,2508 ----
  {
    return cl && cl->length && cl->length->expr_type == EXPR_CONSTANT
  	 ? mpz_get_ui (cl->length->value.integer) : 0;
! }
  
  
  /* Checks shared between co_reduce and reduce.  */
diff -Nrcpad gcc-17-20260628/gcc/fortran/decl.cc gcc-17-20260705/gcc/fortran/decl.cc
*** gcc-17-20260628/gcc/fortran/decl.cc	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/fortran/decl.cc	Sun Jul  5 22:32:08 2026
*************** gfc_get_pdt_instance (gfc_actual_arglist
*** 4626,4632 ****
  		}
  	    }
  
! 	  if (c2->attr.allocatable)
  	    instance->attr.alloc_comp = 1;
  	}
        else if (!(c2->attr.pdt_kind || c2->attr.pdt_len || c2->attr.pdt_string
--- 4626,4634 ----
  		}
  	    }
  
! 	  if (c2->attr.allocatable
! 	      || (c2->ts.type == BT_DERIVED && c2->ts.u.derived
! 		  && c2->ts.u.derived->attr.alloc_comp && !c2->attr.pointer))
  	    instance->attr.alloc_comp = 1;
  	}
        else if (!(c2->attr.pdt_kind || c2->attr.pdt_len || c2->attr.pdt_string
diff -Nrcpad gcc-17-20260628/gcc/fortran/expr.cc gcc-17-20260705/gcc/fortran/expr.cc
*** gcc-17-20260628/gcc/fortran/expr.cc	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/fortran/expr.cc	Sun Jul  5 22:32:08 2026
*************** gfc_pdt_find_component_copy_initializer
*** 7115,7124 ****
  bool has_parameterized_comps (gfc_symbol * der_type)
  {
    bool parameterized_comps = false;
    for (gfc_component *c = der_type->components; c; c = c->next)
      if (c->attr.pdt_array || c->attr.pdt_string)
        parameterized_comps = true;
!     else if (IS_PDT (c) && strcmp (der_type->name, c->ts.u.derived->name))
!       parameterized_comps = has_parameterized_comps (c->ts.u.derived);
    return parameterized_comps;
  }
--- 7115,7130 ----
  bool has_parameterized_comps (gfc_symbol * der_type)
  {
    bool parameterized_comps = false;
+ 
+   if (!der_type->attr.pdt_type && !der_type->attr.pdt_comp)
+     return false;
+ 
    for (gfc_component *c = der_type->components; c; c = c->next)
      if (c->attr.pdt_array || c->attr.pdt_string)
        parameterized_comps = true;
!     else if (IS_PDT (c) && strcmp (der_type->name, c->ts.u.derived->name)
! 	     && has_parameterized_comps (c->ts.u.derived))
!       parameterized_comps = true;
! 
    return parameterized_comps;
  }
diff -Nrcpad gcc-17-20260628/gcc/fortran/gfortran.h gcc-17-20260705/gcc/fortran/gfortran.h
*** gcc-17-20260628/gcc/fortran/gfortran.h	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/fortran/gfortran.h	Sun Jul  5 22:32:08 2026
*************** typedef struct
*** 3205,3211 ****
    gfc_st_label *format_label;
    gfc_st_label *err, *end, *eor;
  
!   locus eor_where, end_where, err_where;
  }
  gfc_dt;
  
--- 3205,3211 ----
    gfc_st_label *format_label;
    gfc_st_label *err, *end, *eor;
  
!   locus eor_where, end_where, err_where, nml_where;
  }
  gfc_dt;
  
diff -Nrcpad gcc-17-20260628/gcc/fortran/io.cc gcc-17-20260705/gcc/fortran/io.cc
*** gcc-17-20260628/gcc/fortran/io.cc	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/fortran/io.cc	Sun Jul  5 22:32:08 2026
*************** match_dt_element (io_kind k, gfc_dt *dt)
*** 3152,3157 ****
--- 3152,3158 ----
    char name[GFC_MAX_SYMBOL_LEN + 1];
    gfc_symbol *sym;
    match m;
+   locus where;
  
    if (gfc_match (" unit =") == MATCH_YES)
      {
*************** match_dt_element (io_kind k, gfc_dt *dt)
*** 3167,3172 ****
--- 3168,3174 ----
  	return m;
      }
  
+   where = gfc_current_locus;
    if (gfc_match (" nml = %n", name) == MATCH_YES)
      {
        if (dt->namelist != NULL)
*************** match_dt_element (io_kind k, gfc_dt *dt)
*** 3186,3191 ****
--- 3188,3194 ----
  	}
  
        dt->namelist = sym;
+       dt->nml_where = where;
        if (k == M_READ && check_namelist (sym))
  	return MATCH_ERROR;
  
*************** gfc_resolve_dt (gfc_code *dt_code, gfc_d
*** 3443,3451 ****
  	  gfc_expr* e;
  	  bool t;
  
  	  if (k == M_READ)
  	    {
- 	      e = gfc_get_variable_expr (gfc_find_sym_in_symtree (n->sym));
  	      t = gfc_check_vardef_context (e, false, false, false, NULL);
  	      gfc_free_expr (e);
  
--- 3446,3455 ----
  	  gfc_expr* e;
  	  bool t;
  
+ 	  e = gfc_get_variable_expr (gfc_find_sym_in_symtree (n->sym));
+ 
  	  if (k == M_READ)
  	    {
  	      t = gfc_check_vardef_context (e, false, false, false, NULL);
  	      gfc_free_expr (e);
  
*************** gfc_resolve_dt (gfc_code *dt_code, gfc_d
*** 3457,3464 ****
  			     dt->namelist->name, loc, n->sym->name);
  		  return false;
  		}
! 	      gfc_value_set_at (n->sym, NULL, VALUE_VARDEF);
  	    }
  
  	  t = dtio_procs_present (n->sym, k);
  
--- 3461,3476 ----
  			     dt->namelist->name, loc, n->sym->name);
  		  return false;
  		}
! 	      gfc_value_set_at (n->sym, &dt->nml_where, VALUE_READ);
  	    }
+ 	  else if (k == M_WRITE || k == M_PRINT)
+ 	    {
+ 	      e->where = dt->nml_where;
+ 	      gfc_value_used_expr (e,  VALUE_USED);
+ 	      gfc_free_expr (e);
+ 	    }
+ 
+ 	  n->sym->attr.referenced = 1;
  
  	  t = dtio_procs_present (n->sym, k);
  
*************** match_io (io_kind k)
*** 4401,4406 ****
--- 4413,4419 ----
  	      m = MATCH_ERROR;
  	      goto cleanup;
  	    }
+ 	  dt->nml_where = where;
  	  goto next;
  	}
      }
diff -Nrcpad gcc-17-20260628/gcc/fortran/match.cc gcc-17-20260705/gcc/fortran/match.cc
*** gcc-17-20260628/gcc/fortran/match.cc	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/fortran/match.cc	Sun Jul  5 22:32:08 2026
*************** checks:
*** 3960,3978 ****
  	  goto cleanup;
  	}
  
!       /* Use the machinery for an initialization expression to reduce the
! 	 stop-code to a constant.  */
!       gfc_reduce_init_expr (e);
! 
!       /* Test for F2008 style STOP stop-code.  */
!       if (e->expr_type != EXPR_CONSTANT && f08)
  	{
! 	  gfc_error ("STOP code at %L must be a scalar default CHARACTER or "
! 		     "INTEGER constant expression", &e->where);
! 	  goto cleanup;
  	}
  
!       if (!(e->ts.type == BT_CHARACTER || e->ts.type == BT_INTEGER))
  	{
  	  gfc_error ("STOP code at %L must be either INTEGER or CHARACTER type",
  		     &e->where);
--- 3960,3981 ----
  	  goto cleanup;
  	}
  
!       /* If this is F2008, it could be an init expression.  */
!       if (f08)
  	{
! 	  gfc_reduce_init_expr (e);
! 	  if (e->expr_type != EXPR_CONSTANT)
! 	    {
! 	      gfc_error ("STOP code at %L must be a scalar constant "
! 			 "expression", &e->where);
! 	      goto cleanup;
! 	    }
  	}
  
!       /* For types known at parse time, check immediately.  For BT_UNKNOWN
! 	 (e.g. a forward-referenced contained function) defer to resolve.  */
!       if (e->ts.type != BT_UNKNOWN
! 	  && !(e->ts.type == BT_CHARACTER || e->ts.type == BT_INTEGER))
  	{
  	  gfc_error ("STOP code at %L must be either INTEGER or CHARACTER type",
  		     &e->where);
diff -Nrcpad gcc-17-20260628/gcc/fortran/openmp.cc gcc-17-20260705/gcc/fortran/openmp.cc
*** gcc-17-20260628/gcc/fortran/openmp.cc	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/fortran/openmp.cc	Sun Jul  5 22:32:08 2026
*************** resolve_omp_clauses_aff_dep_map_cache (g
*** 9947,10038 ****
        case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
        case EXEC_OMP_TARGET_TEAMS_LOOP:
        case EXEC_OMP_TARGET_DATA:
! 	    switch (n->u.map.op)
! 	      {
! 	      case OMP_MAP_TO:
! 	      case OMP_MAP_ALWAYS_TO:
! 	      case OMP_MAP_PRESENT_TO:
! 	      case OMP_MAP_ALWAYS_PRESENT_TO:
! 	      case OMP_MAP_FROM:
! 	      case OMP_MAP_ALWAYS_FROM:
! 	      case OMP_MAP_PRESENT_FROM:
! 	      case OMP_MAP_ALWAYS_PRESENT_FROM:
! 	      case OMP_MAP_TOFROM:
! 	      case OMP_MAP_ALWAYS_TOFROM:
! 	      case OMP_MAP_PRESENT_TOFROM:
! 	      case OMP_MAP_ALWAYS_PRESENT_TOFROM:
! 	      case OMP_MAP_ALLOC:
! 	      case OMP_MAP_PRESENT_ALLOC:
! 			  break;
! 	      default:
! 			  gfc_error ("TARGET%s with map-type other than TO, "
! 				     "FROM, TOFROM, or ALLOC on MAP clause "
! 				     "at %L",
! 				     code->op == EXEC_OMP_TARGET_DATA
! 				     ? " DATA" : "", &n->where);
! 			  break;
! 	      }
  	    break;
        case EXEC_OMP_TARGET_ENTER_DATA:
! 	    switch (n->u.map.op)
! 	      {
! 	      case OMP_MAP_TO:
! 	      case OMP_MAP_ALWAYS_TO:
! 	      case OMP_MAP_PRESENT_TO:
! 	      case OMP_MAP_ALWAYS_PRESENT_TO:
! 	      case OMP_MAP_ALLOC:
! 	      case OMP_MAP_PRESENT_ALLOC:
! 			  break;
! 	      case OMP_MAP_TOFROM:
! 			  n->u.map.op = OMP_MAP_TO;
! 			  break;
! 	      case OMP_MAP_ALWAYS_TOFROM:
! 			  n->u.map.op = OMP_MAP_ALWAYS_TO;
! 			  break;
! 	      case OMP_MAP_PRESENT_TOFROM:
! 			  n->u.map.op = OMP_MAP_PRESENT_TO;
! 			  break;
! 	      case OMP_MAP_ALWAYS_PRESENT_TOFROM:
! 			  n->u.map.op = OMP_MAP_ALWAYS_PRESENT_TO;
! 			  break;
! 	      default:
! 			  gfc_error ("TARGET ENTER DATA with map-type other "
! 				     "than TO, TOFROM or ALLOC on MAP clause "
! 				     "at %L", &n->where);
! 			  break;
! 	      }
  	    break;
        case EXEC_OMP_TARGET_EXIT_DATA:
! 	    switch (n->u.map.op)
! 	      {
! 	      case OMP_MAP_FROM:
! 	      case OMP_MAP_ALWAYS_FROM:
! 	      case OMP_MAP_PRESENT_FROM:
! 	      case OMP_MAP_ALWAYS_PRESENT_FROM:
! 	      case OMP_MAP_RELEASE:
! 	      case OMP_MAP_DELETE:
! 			  break;
! 	      case OMP_MAP_TOFROM:
! 			  n->u.map.op = OMP_MAP_FROM;
! 			  break;
! 	      case OMP_MAP_ALWAYS_TOFROM:
! 			  n->u.map.op = OMP_MAP_ALWAYS_FROM;
! 			  break;
! 	      case OMP_MAP_PRESENT_TOFROM:
! 			  n->u.map.op = OMP_MAP_PRESENT_FROM;
! 			  break;
! 	      case OMP_MAP_ALWAYS_PRESENT_TOFROM:
! 			  n->u.map.op = OMP_MAP_ALWAYS_PRESENT_FROM;
! 			  break;
! 	      default:
! 			  gfc_error ("TARGET EXIT DATA with map-type other "
! 				     "than FROM, TOFROM, RELEASE, or DELETE on "
! 				     "MAP clause at %L", &n->where);
! 			  break;
! 	      }
  	    break;
!       default:
  	    break;
        }
    if (list == OMP_LIST_MAP || list == OMP_LIST_TO || list == OMP_LIST_FROM)
      {
--- 9947,10038 ----
        case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
        case EXEC_OMP_TARGET_TEAMS_LOOP:
        case EXEC_OMP_TARGET_DATA:
! 	switch (n->u.map.op)
! 	  {
! 	  case OMP_MAP_TO:
! 	  case OMP_MAP_ALWAYS_TO:
! 	  case OMP_MAP_PRESENT_TO:
! 	  case OMP_MAP_ALWAYS_PRESENT_TO:
! 	  case OMP_MAP_FROM:
! 	  case OMP_MAP_ALWAYS_FROM:
! 	  case OMP_MAP_PRESENT_FROM:
! 	  case OMP_MAP_ALWAYS_PRESENT_FROM:
! 	  case OMP_MAP_TOFROM:
! 	  case OMP_MAP_ALWAYS_TOFROM:
! 	  case OMP_MAP_PRESENT_TOFROM:
! 	  case OMP_MAP_ALWAYS_PRESENT_TOFROM:
! 	  case OMP_MAP_ALLOC:
! 	  case OMP_MAP_PRESENT_ALLOC:
! 	    break;
! 	  default:
! 	    gfc_error ("TARGET%s with map-type other than TO, "
! 		       "FROM, TOFROM, or ALLOC on MAP clause "
! 		       "at %L",
! 		       code->op == EXEC_OMP_TARGET_DATA
! 		       ? " DATA" : "", &n->where);
  	    break;
+ 	  }
+ 	break;
        case EXEC_OMP_TARGET_ENTER_DATA:
! 	switch (n->u.map.op)
! 	  {
! 	  case OMP_MAP_TO:
! 	  case OMP_MAP_ALWAYS_TO:
! 	  case OMP_MAP_PRESENT_TO:
! 	  case OMP_MAP_ALWAYS_PRESENT_TO:
! 	  case OMP_MAP_ALLOC:
! 	  case OMP_MAP_PRESENT_ALLOC:
! 	    break;
! 	  case OMP_MAP_TOFROM:
! 	    n->u.map.op = OMP_MAP_TO;
! 	    break;
! 	  case OMP_MAP_ALWAYS_TOFROM:
! 	    n->u.map.op = OMP_MAP_ALWAYS_TO;
! 	    break;
! 	  case OMP_MAP_PRESENT_TOFROM:
! 	    n->u.map.op = OMP_MAP_PRESENT_TO;
! 	    break;
! 	  case OMP_MAP_ALWAYS_PRESENT_TOFROM:
! 	    n->u.map.op = OMP_MAP_ALWAYS_PRESENT_TO;
! 	    break;
! 	  default:
! 	    gfc_error ("TARGET ENTER DATA with map-type other "
! 		       "than TO, TOFROM or ALLOC on MAP clause "
! 		       "at %L", &n->where);
  	    break;
+ 	  }
+ 	break;
        case EXEC_OMP_TARGET_EXIT_DATA:
! 	switch (n->u.map.op)
! 	  {
! 	  case OMP_MAP_FROM:
! 	  case OMP_MAP_ALWAYS_FROM:
! 	  case OMP_MAP_PRESENT_FROM:
! 	  case OMP_MAP_ALWAYS_PRESENT_FROM:
! 	  case OMP_MAP_RELEASE:
! 	  case OMP_MAP_DELETE:
  	    break;
! 	  case OMP_MAP_TOFROM:
! 	    n->u.map.op = OMP_MAP_FROM;
! 	    break;
! 	  case OMP_MAP_ALWAYS_TOFROM:
! 	    n->u.map.op = OMP_MAP_ALWAYS_FROM;
! 	    break;
! 	  case OMP_MAP_PRESENT_TOFROM:
! 	    n->u.map.op = OMP_MAP_PRESENT_FROM;
! 	    break;
! 	  case OMP_MAP_ALWAYS_PRESENT_TOFROM:
! 	    n->u.map.op = OMP_MAP_ALWAYS_PRESENT_FROM;
! 	    break;
! 	  default:
! 	    gfc_error ("TARGET EXIT DATA with map-type other "
! 		       "than FROM, TOFROM, RELEASE, or DELETE on "
! 		       "MAP clause at %L", &n->where);
  	    break;
+ 	  }
+ 	break;
+       default:
+ 	break;
        }
    if (list == OMP_LIST_MAP || list == OMP_LIST_TO || list == OMP_LIST_FROM)
      {
diff -Nrcpad gcc-17-20260628/gcc/fortran/resolve.cc gcc-17-20260705/gcc/fortran/resolve.cc
*** gcc-17-20260628/gcc/fortran/resolve.cc	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/fortran/resolve.cc	Sun Jul  5 22:32:08 2026
*************** gfc_resolve_ref (gfc_expr *expr)
*** 6164,6170 ****
    n_components = 0;
    array_ref = NULL;
  
!   if (expr->expr_type == EXPR_VARIABLE && IS_PDT (expr))
      last_pdt = expr->symtree->n.sym->ts.u.derived;
  
    for (ref = expr->ref; ref; ref = ref->next)
--- 6164,6175 ----
    n_components = 0;
    array_ref = NULL;
  
!   /* Use the declared type of the base symbol to initialize last_pdt when the
!      expression is not itself a PDT. This matters for ASSOCIATE variables whose
!      component reference may still point to a PDT template.  */
!   if (expr->expr_type == EXPR_VARIABLE
!       && (IS_PDT (expr)
! 	  || (expr->ref && expr->symtree && IS_PDT (expr->symtree->n.sym))))
      last_pdt = expr->symtree->n.sym->ts.u.derived;
  
    for (ref = expr->ref; ref; ref = ref->next)
*************** start:
*** 14366,14381 ****
  	case EXEC_END_BLOCK:
  	case EXEC_END_NESTED_BLOCK:
  	case EXEC_CYCLE:
- 	case EXEC_PAUSE:
  	  break;
  
  	case EXEC_STOP:
  	case EXEC_ERROR_STOP:
  	  if (code->expr2 != NULL
  	      && (code->expr2->ts.type != BT_LOGICAL
  		  || code->expr2->rank != 0))
  	    gfc_error ("QUIET specifier at %L must be a scalar LOGICAL",
  		       &code->expr2->where);
  	  break;
  
  	case EXEC_EXIT:
--- 14371,14408 ----
  	case EXEC_END_BLOCK:
  	case EXEC_END_NESTED_BLOCK:
  	case EXEC_CYCLE:
  	  break;
  
  	case EXEC_STOP:
  	case EXEC_ERROR_STOP:
+ 	  if (code->expr1 != NULL && t)
+ 	    {
+ 	      if (!(code->expr1->ts.type == BT_CHARACTER
+ 		    || code->expr1->ts.type == BT_INTEGER))
+ 		gfc_error ("STOP code at %L must be either INTEGER or CHARACTER "
+ 			   "type", &code->expr1->where);
+ 	      else if (code->expr1->rank != 0)
+ 		gfc_error ("STOP code at %L must be scalar",
+ 			   &code->expr1->where);
+ 	      else if (code->expr1->ts.type == BT_CHARACTER
+ 		       && code->expr1->ts.kind != gfc_default_character_kind)
+ 		gfc_error ("STOP code at %L must be default character KIND=%d",
+ 			   &code->expr1->where, (int) gfc_default_character_kind);
+ 	      else if (code->expr1->ts.type == BT_INTEGER
+ 		       && code->expr1->ts.kind != gfc_default_integer_kind)
+ 		gfc_notify_std (GFC_STD_F2018, "STOP code at %L must be default "
+ 				"integer KIND=%d", &code->expr1->where,
+ 				(int) gfc_default_integer_kind);
+ 	    }
  	  if (code->expr2 != NULL
  	      && (code->expr2->ts.type != BT_LOGICAL
  		  || code->expr2->rank != 0))
  	    gfc_error ("QUIET specifier at %L must be a scalar LOGICAL",
  		       &code->expr2->where);
+ 
+ 	  /* Fall through.  */
+ 	case EXEC_PAUSE:
+ 	  gfc_value_used_expr (code->expr1, VALUE_USED);
  	  break;
  
  	case EXEC_EXIT:
*************** gfc_resolve_finalizers (gfc_symbol* deri
*** 16402,16414 ****
  	      tmp = gfc_get_finalizer ();
  	      *tmp = *list;
  	      tmp->next = NULL;
! 	      if (*prev_link)
! 		{
! 		  (*prev_link)->next = tmp;
! 		  prev_link = &tmp;
! 		}
! 	      else
! 		*prev_link = tmp;
  	      list->proc_tree = gfc_find_sym_in_symtree (list->proc_sym);
  	    }
  	}
--- 16429,16436 ----
  	      tmp = gfc_get_finalizer ();
  	      *tmp = *list;
  	      tmp->next = NULL;
! 	      *prev_link = tmp;
! 	      prev_link = &(tmp->next);
  	      list->proc_tree = gfc_find_sym_in_symtree (list->proc_sym);
  	    }
  	}
*************** resolve_symbol (gfc_symbol *sym)
*** 18498,18503 ****
--- 18520,18526 ----
    gfc_component *c;
    symbol_attribute class_attr;
    gfc_array_spec *as;
+   bool declared_has_coarray_comp = false;
  
    if (sym->resolve_symbol_called >= 1)
      return;
*************** skip_interfaces:
*** 18691,18696 ****
--- 18714,18721 ----
        as = CLASS_DATA (sym)->as;
        class_attr = CLASS_DATA (sym)->attr;
        class_attr.pointer = class_attr.class_pointer;
+       declared_has_coarray_comp = CLASS_DATA (sym)->ts.u.derived
+ 				  && CLASS_DATA (sym)->ts.u.derived->attr.coarray_comp;
      }
    else
      {
*************** skip_interfaces:
*** 19158,19166 ****
    /* F2008, C541.  */
    if ((((sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.coarray_comp)
  	|| (sym->ts.type == BT_CLASS && sym->attr.class_ok
! 	    && sym->ts.u.derived && CLASS_DATA (sym)
! 	    && CLASS_DATA (sym)->attr.coarray_comp))
!        || (class_attr.codimension && class_attr.allocatable))
        && sym->attr.dummy && sym->attr.intent == INTENT_OUT)
      {
        gfc_error ("Variable %qs at %L is INTENT(OUT) and can thus not be an "
--- 19183,19190 ----
    /* F2008, C541.  */
    if ((((sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.coarray_comp)
  	|| (sym->ts.type == BT_CLASS && sym->attr.class_ok
! 	    && declared_has_coarray_comp))
! 	|| (class_attr.codimension && class_attr.allocatable))
        && sym->attr.dummy && sym->attr.intent == INTENT_OUT)
      {
        gfc_error ("Variable %qs at %L is INTENT(OUT) and can thus not be an "
diff -Nrcpad gcc-17-20260628/gcc/fortran/trans-array.cc gcc-17-20260705/gcc/fortran/trans-array.cc
*** gcc-17-20260628/gcc/fortran/trans-array.cc	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/fortran/trans-array.cc	Sun Jul  5 22:32:08 2026
*************** along with GCC; see the file COPYING3.
*** 92,97 ****
--- 92,98 ----
  #include "trans-array.h"
  #include "trans-const.h"
  #include "dependency.h"
+ #include "trans-descriptor.h"
  #include "cgraph.h"	/* For cgraph_node::add_new_function.  */
  #include "function.h"	/* For push_struct_function.  */
  
*************** gfc_get_cfi_dim_sm (tree desc, tree idx)
*** 214,638 ****
  #undef CFI_DIM_FIELD_EXTENT
  #undef CFI_DIM_FIELD_SM
  
- /* Build expressions to access the members of an array descriptor.
-    It's surprisingly easy to mess up here, so never access
-    an array descriptor by "brute force", always use these
-    functions.  This also avoids problems if we change the format
-    of an array descriptor.
- 
-    To understand these magic numbers, look at the comments
-    before gfc_build_array_type() in trans-types.cc.
- 
-    The code within these defines should be the only code which knows the format
-    of an array descriptor.
- 
-    Any code just needing to read obtain the bounds of an array should use
-    gfc_conv_array_* rather than the following functions as these will return
-    know constant values, and work with arrays which do not have descriptors.
- 
-    Don't forget to #undef these!  */
- 
- #define DATA_FIELD 0
- #define OFFSET_FIELD 1
- #define DTYPE_FIELD 2
- #define SPAN_FIELD 3
- #define DIMENSION_FIELD 4
- #define CAF_TOKEN_FIELD 5
- 
- #define STRIDE_SUBFIELD 0
- #define LBOUND_SUBFIELD 1
- #define UBOUND_SUBFIELD 2
- 
- static tree
- gfc_get_descriptor_field (tree desc, unsigned field_idx)
- {
-   tree type = TREE_TYPE (desc);
-   gcc_assert (GFC_DESCRIPTOR_TYPE_P (type));
- 
-   tree field = gfc_advance_chain (TYPE_FIELDS (type), field_idx);
-   gcc_assert (field != NULL_TREE);
- 
-   return fold_build3_loc (input_location, COMPONENT_REF, TREE_TYPE (field),
- 			  desc, field, NULL_TREE);
- }
- 
- /* This provides READ-ONLY access to the data field.  The field itself
-    doesn't have the proper type.  */
- 
- tree
- gfc_conv_descriptor_data_get (tree desc)
- {
-   tree type = TREE_TYPE (desc);
-   if (TREE_CODE (type) == REFERENCE_TYPE)
-     gcc_unreachable ();
- 
-   tree field = gfc_get_descriptor_field (desc, DATA_FIELD);
-   return fold_convert (GFC_TYPE_ARRAY_DATAPTR_TYPE (type), field);
- }
- 
- /* This provides WRITE access to the data field.  */
- 
- void
- gfc_conv_descriptor_data_set (stmtblock_t *block, tree desc, tree value)
- {
-   tree field = gfc_get_descriptor_field (desc, DATA_FIELD);
-   gfc_add_modify (block, field, fold_convert (TREE_TYPE (field), value));
- }
- 
- 
- static tree
- gfc_conv_descriptor_offset (tree desc)
- {
-   tree field = gfc_get_descriptor_field (desc, OFFSET_FIELD);
-   gcc_assert (TREE_TYPE (field) == gfc_array_index_type);
-   return field;
- }
- 
- tree
- gfc_conv_descriptor_offset_get (tree desc)
- {
-   return gfc_conv_descriptor_offset (desc);
- }
- 
- void
- gfc_conv_descriptor_offset_set (stmtblock_t *block, tree desc,
- 				tree value)
- {
-   tree t = gfc_conv_descriptor_offset (desc);
-   gfc_add_modify (block, t, fold_convert (TREE_TYPE (t), value));
- }
- 
- 
- tree
- gfc_conv_descriptor_dtype (tree desc)
- {
-   tree field = gfc_get_descriptor_field (desc, DTYPE_FIELD);
-   gcc_assert (TREE_TYPE (field) == get_dtype_type_node ());
-   return field;
- }
- 
- static tree
- gfc_conv_descriptor_span (tree desc)
- {
-   tree field = gfc_get_descriptor_field (desc, SPAN_FIELD);
-   gcc_assert (TREE_TYPE (field) == gfc_array_index_type);
-   return field;
- }
- 
- tree
- gfc_conv_descriptor_span_get (tree desc)
- {
-   return gfc_conv_descriptor_span (desc);
- }
- 
- void
- gfc_conv_descriptor_span_set (stmtblock_t *block, tree desc,
- 				tree value)
- {
-   tree t = gfc_conv_descriptor_span (desc);
-   gfc_add_modify (block, t, fold_convert (TREE_TYPE (t), value));
- }
- 
- 
- tree
- gfc_conv_descriptor_rank (tree desc)
- {
-   tree tmp;
-   tree dtype;
- 
-   dtype = gfc_conv_descriptor_dtype (desc);
-   tmp = gfc_advance_chain (TYPE_FIELDS (TREE_TYPE (dtype)), GFC_DTYPE_RANK);
-   gcc_assert (tmp != NULL_TREE
- 	      && TREE_TYPE (tmp) == signed_char_type_node);
-   return fold_build3_loc (input_location, COMPONENT_REF, TREE_TYPE (tmp),
- 			  dtype, tmp, NULL_TREE);
- }
- 
- 
- tree
- gfc_conv_descriptor_version (tree desc)
- {
-   tree tmp;
-   tree dtype;
- 
-   dtype = gfc_conv_descriptor_dtype (desc);
-   tmp = gfc_advance_chain (TYPE_FIELDS (TREE_TYPE (dtype)), GFC_DTYPE_VERSION);
-   gcc_assert (tmp != NULL_TREE
- 	      && TREE_TYPE (tmp) == integer_type_node);
-   return fold_build3_loc (input_location, COMPONENT_REF, TREE_TYPE (tmp),
- 			  dtype, tmp, NULL_TREE);
- }
- 
- 
- /* Return the element length from the descriptor dtype field.  */
- 
- tree
- gfc_conv_descriptor_elem_len (tree desc)
- {
-   tree tmp;
-   tree dtype;
- 
-   dtype = gfc_conv_descriptor_dtype (desc);
-   tmp = gfc_advance_chain (TYPE_FIELDS (TREE_TYPE (dtype)),
- 			   GFC_DTYPE_ELEM_LEN);
-   gcc_assert (tmp != NULL_TREE
- 	      && TREE_TYPE (tmp) == size_type_node);
-   return fold_build3_loc (input_location, COMPONENT_REF, TREE_TYPE (tmp),
- 			  dtype, tmp, NULL_TREE);
- }
- 
- 
- tree
- gfc_conv_descriptor_attribute (tree desc)
- {
-   tree tmp;
-   tree dtype;
- 
-   dtype = gfc_conv_descriptor_dtype (desc);
-   tmp = gfc_advance_chain (TYPE_FIELDS (TREE_TYPE (dtype)),
- 			   GFC_DTYPE_ATTRIBUTE);
-   gcc_assert (tmp!= NULL_TREE
- 	      && TREE_TYPE (tmp) == short_integer_type_node);
-   return fold_build3_loc (input_location, COMPONENT_REF, TREE_TYPE (tmp),
- 			  dtype, tmp, NULL_TREE);
- }
- 
- tree
- gfc_conv_descriptor_type (tree desc)
- {
-   tree tmp;
-   tree dtype;
- 
-   dtype = gfc_conv_descriptor_dtype (desc);
-   tmp = gfc_advance_chain (TYPE_FIELDS (TREE_TYPE (dtype)), GFC_DTYPE_TYPE);
-   gcc_assert (tmp!= NULL_TREE
- 	      && TREE_TYPE (tmp) == signed_char_type_node);
-   return fold_build3_loc (input_location, COMPONENT_REF, TREE_TYPE (tmp),
- 			  dtype, tmp, NULL_TREE);
- }
- 
- tree
- gfc_get_descriptor_dimension (tree desc)
- {
-   tree field = gfc_get_descriptor_field (desc, DIMENSION_FIELD);
-   gcc_assert (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
- 	      && TREE_CODE (TREE_TYPE (TREE_TYPE (field))) == RECORD_TYPE);
-   return field;
- }
- 
- 
- static tree
- gfc_conv_descriptor_dimension (tree desc, tree dim)
- {
-   tree tmp;
- 
-   tmp = gfc_get_descriptor_dimension (desc);
- 
-   return gfc_build_array_ref (tmp, dim, NULL_TREE, true);
- }
- 
- 
- tree
- gfc_conv_descriptor_token (tree desc)
- {
-   gcc_assert (flag_coarray == GFC_FCOARRAY_LIB);
-   tree field = gfc_get_descriptor_field (desc, CAF_TOKEN_FIELD);
-   /* Should be a restricted pointer - except in the finalization wrapper.  */
-   gcc_assert (TREE_TYPE (field) == prvoid_type_node
- 	      || TREE_TYPE (field) == pvoid_type_node);
-   return field;
- }
- 
- static tree
- gfc_conv_descriptor_subfield (tree desc, tree dim, unsigned field_idx)
- {
-   tree tmp = gfc_conv_descriptor_dimension (desc, dim);
-   tree field = gfc_advance_chain (TYPE_FIELDS (TREE_TYPE (tmp)), field_idx);
-   gcc_assert (field != NULL_TREE);
- 
-   return fold_build3_loc (input_location, COMPONENT_REF, TREE_TYPE (field),
- 			  tmp, field, NULL_TREE);
- }
- 
- static tree
- gfc_conv_descriptor_stride (tree desc, tree dim)
- {
-   tree field = gfc_conv_descriptor_subfield (desc, dim, STRIDE_SUBFIELD);
-   gcc_assert (TREE_TYPE (field) == gfc_array_index_type);
-   return field;
- }
- 
- tree
- gfc_conv_descriptor_stride_get (tree desc, tree dim)
- {
-   tree type = TREE_TYPE (desc);
-   gcc_assert (GFC_DESCRIPTOR_TYPE_P (type));
-   if (integer_zerop (dim)
-       && (GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ALLOCATABLE
- 	  || GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ASSUMED_SHAPE_CONT
- 	  || GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ASSUMED_RANK_CONT
- 	  || GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ASSUMED_RANK_ALLOCATABLE
- 	  || GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ASSUMED_RANK_POINTER_CONT
- 	  || GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_POINTER_CONT))
-     return gfc_index_one_node;
- 
-   return gfc_conv_descriptor_stride (desc, dim);
- }
- 
- void
- gfc_conv_descriptor_stride_set (stmtblock_t *block, tree desc,
- 				tree dim, tree value)
- {
-   tree t = gfc_conv_descriptor_stride (desc, dim);
-   gfc_add_modify (block, t, fold_convert (TREE_TYPE (t), value));
- }
- 
- static tree
- gfc_conv_descriptor_lbound (tree desc, tree dim)
- {
-   tree field = gfc_conv_descriptor_subfield (desc, dim, LBOUND_SUBFIELD);
-   gcc_assert (TREE_TYPE (field) == gfc_array_index_type);
-   return field;
- }
- 
- tree
- gfc_conv_descriptor_lbound_get (tree desc, tree dim)
- {
-   return gfc_conv_descriptor_lbound (desc, dim);
- }
- 
- void
- gfc_conv_descriptor_lbound_set (stmtblock_t *block, tree desc,
- 				tree dim, tree value)
- {
-   tree t = gfc_conv_descriptor_lbound (desc, dim);
-   gfc_add_modify (block, t, fold_convert (TREE_TYPE (t), value));
- }
- 
- static tree
- gfc_conv_descriptor_ubound (tree desc, tree dim)
- {
-   tree field = gfc_conv_descriptor_subfield (desc, dim, UBOUND_SUBFIELD);
-   gcc_assert (TREE_TYPE (field) == gfc_array_index_type);
-   return field;
- }
- 
- tree
- gfc_conv_descriptor_ubound_get (tree desc, tree dim)
- {
-   return gfc_conv_descriptor_ubound (desc, dim);
- }
- 
- void
- gfc_conv_descriptor_ubound_set (stmtblock_t *block, tree desc,
- 				tree dim, tree value)
- {
-   tree t = gfc_conv_descriptor_ubound (desc, dim);
-   gfc_add_modify (block, t, fold_convert (TREE_TYPE (t), value));
- }
- 
- /* Build a null array descriptor constructor.  */
- 
- tree
- gfc_build_null_descriptor (tree type)
- {
-   tree field;
-   tree tmp;
- 
-   gcc_assert (GFC_DESCRIPTOR_TYPE_P (type));
-   gcc_assert (DATA_FIELD == 0);
-   field = TYPE_FIELDS (type);
- 
-   /* Set a NULL data pointer.  */
-   tmp = build_constructor_single (type, field, null_pointer_node);
-   TREE_CONSTANT (tmp) = 1;
-   /* All other fields are ignored.  */
- 
-   return tmp;
- }
- 
- 
- /* Modify a descriptor such that the lbound of a given dimension is the value
-    specified.  This also updates ubound and offset accordingly.  */
- 
- void
- gfc_conv_shift_descriptor_lbound (stmtblock_t* block, tree desc,
- 				  int dim, tree new_lbound)
- {
-   tree offs, ubound, lbound, stride;
-   tree diff, offs_diff;
- 
-   new_lbound = fold_convert (gfc_array_index_type, new_lbound);
- 
-   offs = gfc_conv_descriptor_offset_get (desc);
-   lbound = gfc_conv_descriptor_lbound_get (desc, gfc_rank_cst[dim]);
-   ubound = gfc_conv_descriptor_ubound_get (desc, gfc_rank_cst[dim]);
-   stride = gfc_conv_descriptor_stride_get (desc, gfc_rank_cst[dim]);
- 
-   /* Get difference (new - old) by which to shift stuff.  */
-   diff = fold_build2_loc (input_location, MINUS_EXPR, gfc_array_index_type,
- 			  new_lbound, lbound);
- 
-   /* Shift ubound and offset accordingly.  This has to be done before
-      updating the lbound, as they depend on the lbound expression!  */
-   ubound = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type,
- 			    ubound, diff);
-   gfc_conv_descriptor_ubound_set (block, desc, gfc_rank_cst[dim], ubound);
-   offs_diff = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
- 			       diff, stride);
-   offs = fold_build2_loc (input_location, MINUS_EXPR, gfc_array_index_type,
- 			  offs, offs_diff);
-   gfc_conv_descriptor_offset_set (block, desc, offs);
- 
-   /* Finally set lbound to value we want.  */
-   gfc_conv_descriptor_lbound_set (block, desc, gfc_rank_cst[dim], new_lbound);
- }
- 
- 
- /* Obtain offsets for trans-types.cc(gfc_get_array_descr_info).  */
- 
- void
- gfc_get_descriptor_offsets_for_info (const_tree desc_type, tree *data_off,
- 				     tree *dtype_off, tree *span_off,
- 				     tree *dim_off, tree *dim_size,
- 				     tree *stride_suboff, tree *lower_suboff,
- 				     tree *upper_suboff)
- {
-   tree field;
-   tree type;
- 
-   type = TYPE_MAIN_VARIANT (desc_type);
-   field = gfc_advance_chain (TYPE_FIELDS (type), DATA_FIELD);
-   *data_off = byte_position (field);
-   field = gfc_advance_chain (TYPE_FIELDS (type), DTYPE_FIELD);
-   *dtype_off = byte_position (field);
-   field = gfc_advance_chain (TYPE_FIELDS (type), SPAN_FIELD);
-   *span_off = byte_position (field);
-   field = gfc_advance_chain (TYPE_FIELDS (type), DIMENSION_FIELD);
-   *dim_off = byte_position (field);
-   type = TREE_TYPE (TREE_TYPE (field));
-   *dim_size = TYPE_SIZE_UNIT (type);
-   field = gfc_advance_chain (TYPE_FIELDS (type), STRIDE_SUBFIELD);
-   *stride_suboff = byte_position (field);
-   field = gfc_advance_chain (TYPE_FIELDS (type), LBOUND_SUBFIELD);
-   *lower_suboff = byte_position (field);
-   field = gfc_advance_chain (TYPE_FIELDS (type), UBOUND_SUBFIELD);
-   *upper_suboff = byte_position (field);
- }
- 
- 
- /* Cleanup those #defines.  */
- 
- #undef DATA_FIELD
- #undef OFFSET_FIELD
- #undef DTYPE_FIELD
- #undef SPAN_FIELD
- #undef DIMENSION_FIELD
- #undef CAF_TOKEN_FIELD
- #undef STRIDE_SUBFIELD
- #undef LBOUND_SUBFIELD
- #undef UBOUND_SUBFIELD
- 
  
  /* Mark a SS chain as used.  Flags specifies in which loops the SS is used.
     flags & 1 = Main loop body.
--- 215,220 ----
*************** gfc_get_iteration_count (tree start, tre
*** 1827,1869 ****
  }
  
  
- /* Extend the data in array DESC by EXTRA elements.  */
- 
- static void
- gfc_grow_array (stmtblock_t * pblock, tree desc, tree extra)
- {
-   tree arg0, arg1;
-   tree tmp;
-   tree size;
-   tree ubound;
- 
-   if (integer_zerop (extra))
-     return;
- 
-   ubound = gfc_conv_descriptor_ubound_get (desc, gfc_rank_cst[0]);
- 
-   /* Add EXTRA to the upper bound.  */
-   tmp = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type,
- 			 ubound, extra);
-   gfc_conv_descriptor_ubound_set (pblock, desc, gfc_rank_cst[0], tmp);
- 
-   /* Get the value of the current data pointer.  */
-   arg0 = gfc_conv_descriptor_data_get (desc);
- 
-   /* Calculate the new array size.  */
-   size = TYPE_SIZE_UNIT (gfc_get_element_type (TREE_TYPE (desc)));
-   tmp = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type,
- 			 ubound, gfc_index_one_node);
-   arg1 = fold_build2_loc (input_location, MULT_EXPR, size_type_node,
- 			  fold_convert (size_type_node, tmp),
- 			  fold_convert (size_type_node, size));
- 
-   /* Call the realloc() function.  */
-   tmp = gfc_call_realloc (pblock, arg0, arg1);
-   gfc_conv_descriptor_data_set (pblock, desc, tmp);
- }
- 
- 
  /* Return true if the bounds of iterator I can only be determined
     at run time.  */
  
--- 1409,1414 ----
*************** gfc_conv_array_extent_dim (tree lbound,
*** 6423,6475 ****
  }
  
  
- /* For an array descriptor, get the total number of elements.  This is just
-    the product of the extents along from_dim to to_dim.  */
- 
- static tree
- gfc_conv_descriptor_size_1 (tree desc, int from_dim, int to_dim)
- {
-   tree res;
-   int dim;
- 
-   res = gfc_index_one_node;
- 
-   for (dim = from_dim; dim < to_dim; ++dim)
-     {
-       tree lbound;
-       tree ubound;
-       tree extent;
- 
-       lbound = gfc_conv_descriptor_lbound_get (desc, gfc_rank_cst[dim]);
-       ubound = gfc_conv_descriptor_ubound_get (desc, gfc_rank_cst[dim]);
- 
-       extent = gfc_conv_array_extent_dim (lbound, ubound, NULL);
-       res = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
- 			     res, extent);
-     }
- 
-   return res;
- }
- 
- 
- /* Full size of an array.  */
- 
- tree
- gfc_conv_descriptor_size (tree desc, int rank)
- {
-   return gfc_conv_descriptor_size_1 (desc, 0, rank);
- }
- 
- 
- /* Size of a coarray for all dimensions but the last.  */
- 
- tree
- gfc_conv_descriptor_cosize (tree desc, int rank, int corank)
- {
-   return gfc_conv_descriptor_size_1 (desc, rank, rank + corank - 1);
- }
- 
- 
  /* Fills in an array descriptor, and returns the size of the array.
     The size will be a simple_val, ie a variable or a constant.  Also
     calculates the offset of the base.  The pointer argument overflow,
--- 5968,5973 ----
*************** gfc_conv_array_initializer (tree type, g
*** 7243,7252 ****
  			       &expr->where, flag_max_array_constructor);
  	      return NULL_TREE;
  	    }
!           if (mpz_cmp_si (c->offset, 0) != 0)
!             index = gfc_conv_mpz_to_tree (c->offset, gfc_index_integer_kind);
!           else
!             index = NULL_TREE;
  
  	  if (mpz_cmp_si (c->repeat, 1) > 0)
  	    {
--- 6741,6747 ----
  			       &expr->where, flag_max_array_constructor);
  	      return NULL_TREE;
  	    }
! 	  index = gfc_conv_mpz_to_tree (c->offset, gfc_index_integer_kind);
  
  	  if (mpz_cmp_si (c->repeat, 1) > 0)
  	    {
*************** gfc_conv_array_initializer (tree type, g
*** 7317,7323 ****
  	    CONSTRUCTOR_APPEND_ELT (v, index, se.expr);
  	  else
  	    {
! 	      if (index != NULL_TREE)
  		CONSTRUCTOR_APPEND_ELT (v, index, se.expr);
  	      CONSTRUCTOR_APPEND_ELT (v, range, se.expr);
  	    }
--- 6812,6818 ----
  	    CONSTRUCTOR_APPEND_ELT (v, index, se.expr);
  	  else
  	    {
! 	      if (!integer_zerop (index))
  		CONSTRUCTOR_APPEND_ELT (v, index, se.expr);
  	      CONSTRUCTOR_APPEND_ELT (v, range, se.expr);
  	    }
*************** gfc_conv_array_parameter (gfc_se *se, gf
*** 9766,9779 ****
  	{
  	  tmp = build_fold_indirect_ref_loc (input_location, desc);
  
! 	  gfc_ss * ss = gfc_walk_expr (expr);
! 	  if (!transposed_dims (ss) && expr->rank != -1)
! 	    {
! 	      if (!ctree)
! 		gfc_conv_descriptor_data_set (&se->pre, tmp, ptr);
! 	    }
! 	  else if (!ctree)
  	    {
  	      tree old_field, new_field;
  	      tree old_desc = tmp;
  	      tree new_desc = gfc_create_var (TREE_TYPE (old_desc), "arg_desc");
--- 9261,9270 ----
  	{
  	  tmp = build_fold_indirect_ref_loc (input_location, desc);
  
! 	  if (!ctree)
  	    {
+ 	      /* The original descriptor may have transposed dims so we
+ 		 can't reuse it directly; we have to create a new one.  */
  	      tree old_field, new_field;
  	      tree old_desc = tmp;
  	      tree new_desc = gfc_create_var (TREE_TYPE (old_desc), "arg_desc");
*************** gfc_conv_array_parameter (gfc_se *se, gf
*** 9838,9856 ****
  		}
  	      else
  		{
! 		  /* The original descriptor has transposed dims so we can't
! 		     reuse it directly; we have to create a new one.  */
! 		  old_field = gfc_conv_descriptor_offset_get (old_desc);
! 		  gfc_conv_descriptor_offset_set (&se->pre, new_desc, old_field);
  
  		  for (int i = 0; i < expr->rank; i++)
  		    {
! 		      old_field = gfc_conv_descriptor_dimension (old_desc,
! 			gfc_rank_cst[get_array_ref_dim_for_loop_dim (ss, i)]);
! 		      new_field = gfc_conv_descriptor_dimension (new_desc,
! 			gfc_rank_cst[i]);
! 		      gfc_add_modify (&se->pre, new_field, old_field);
  		    }
  		}
  
  	      if (flag_coarray == GFC_FCOARRAY_LIB
--- 9329,9383 ----
  		}
  	      else
  		{
! 		  tree offset = gfc_index_zero_node;
! 
! 		  tree stride = gfc_index_one_node;
  
  		  for (int i = 0; i < expr->rank; i++)
  		    {
! 		      tree dim = gfc_rank_cst[i];
! 
! 		      tree lbound = gfc_conv_descriptor_lbound_get (old_desc,
! 								    dim);
! 		      lbound = gfc_evaluate_now (lbound, &se->pre);
! 		      gfc_conv_descriptor_lbound_set (&se->pre, new_desc, dim,
! 						      lbound);
! 
! 		      tree ubound = gfc_conv_descriptor_ubound_get (old_desc,
! 								    dim);
! 		      ubound = gfc_evaluate_now (ubound, &se->pre);
! 		      gfc_conv_descriptor_ubound_set (&se->pre, new_desc, dim,
! 						      ubound);
! 
! 		      gfc_conv_descriptor_stride_set (&se->pre, new_desc, dim,
! 						      stride);
! 
! 		      tree tmp = fold_build2_loc (input_location, MULT_EXPR,
! 						  gfc_array_index_type,
! 						  stride, lbound);
! 		      offset = fold_build2_loc (input_location, MINUS_EXPR,
! 						gfc_array_index_type,
! 						offset, tmp);
! 		      offset = gfc_evaluate_now (offset, &se->pre);
! 
! 		      /* Now calculate the stride for next dimension, unless the
! 			 current dimension is the last one.  */
! 		      if (i == expr->rank - 1)
! 			break;
! 
! 		      tmp = fold_build2_loc (input_location, MINUS_EXPR,
! 					     gfc_array_index_type,
! 					     lbound, gfc_index_one_node);
! 		      tree extent = fold_build2_loc (input_location, MINUS_EXPR,
! 						     gfc_array_index_type,
! 						     ubound, tmp);
! 		      stride = fold_build2_loc (input_location, MULT_EXPR,
! 						gfc_array_index_type,
! 						stride, extent);
! 		      stride = gfc_evaluate_now (stride, &se->pre);
  		    }
+ 
+ 		  gfc_conv_descriptor_offset_set (&se->pre, new_desc, offset);
  		}
  
  	      if (flag_coarray == GFC_FCOARRAY_LIB
*************** gfc_conv_array_parameter (gfc_se *se, gf
*** 9866,9872 ****
  	      gfc_conv_descriptor_data_set (&se->pre, new_desc, ptr);
  	      se->expr = gfc_build_addr_expr (NULL_TREE, new_desc);
  	    }
- 	  gfc_free_ss (ss);
  	}
  
        if (gfc_option.rtcheck & GFC_RTCHECK_ARRAY_TEMPS)
--- 9393,9398 ----
diff -Nrcpad gcc-17-20260628/gcc/fortran/trans-array.h gcc-17-20260705/gcc/fortran/trans-array.h
*** gcc-17-20260628/gcc/fortran/trans-array.h	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/fortran/trans-array.h	Sun Jul  5 22:32:08 2026
*************** void gfc_conv_loop_setup (gfc_loopinfo *
*** 138,145 ****
  void gfc_set_delta (gfc_loopinfo *);
  /* Resolve array assignment dependencies.  */
  void gfc_conv_resolve_dependencies (gfc_loopinfo *, gfc_ss *, gfc_ss *);
- /* Build a null array descriptor constructor.  */
- tree gfc_build_null_descriptor (tree);
  
  /* Get a single array element.  */
  void gfc_conv_array_ref (gfc_se *, gfc_array_ref *, gfc_expr *, locus *);
--- 138,143 ----
*************** tree gfc_conv_array_ubound (tree, int);
*** 169,200 ****
  tree gfc_trans_array_bounds (tree, gfc_symbol *, tree *, stmtblock_t *);
  void gfc_trans_array_cobounds (tree, stmtblock_t *, const gfc_symbol *);
  
- /* Build expressions for accessing components of an array descriptor.  */
- void gfc_get_descriptor_offsets_for_info (const_tree, tree *, tree *, tree *, tree *,
- 					  tree *, tree *, tree *, tree *);
- 
- tree gfc_conv_descriptor_data_get (tree);
- tree gfc_conv_descriptor_offset_get (tree);
- tree gfc_conv_descriptor_span_get (tree);
- tree gfc_conv_descriptor_dtype (tree);
- tree gfc_conv_descriptor_rank (tree);
- tree gfc_conv_descriptor_elem_len (tree);
- tree gfc_conv_descriptor_version (tree);
- tree gfc_conv_descriptor_attribute (tree);
- tree gfc_conv_descriptor_type (tree);
- tree gfc_get_descriptor_dimension (tree);
- tree gfc_conv_descriptor_stride_get (tree, tree);
- tree gfc_conv_descriptor_lbound_get (tree, tree);
- tree gfc_conv_descriptor_ubound_get (tree, tree);
- tree gfc_conv_descriptor_token (tree);
- 
- void gfc_conv_descriptor_data_set (stmtblock_t *, tree, tree);
- void gfc_conv_descriptor_offset_set (stmtblock_t *, tree, tree);
- void gfc_conv_descriptor_span_set (stmtblock_t *, tree, tree);
- void gfc_conv_descriptor_stride_set (stmtblock_t *, tree, tree, tree);
- void gfc_conv_descriptor_lbound_set (stmtblock_t *, tree, tree, tree);
- void gfc_conv_descriptor_ubound_set (stmtblock_t *, tree, tree, tree);
- 
  /* CFI descriptor.  */
  tree gfc_get_cfi_desc_base_addr (tree);
  tree gfc_get_cfi_desc_elem_len (tree);
--- 167,172 ----
*************** tree gfc_get_cfi_dim_extent (tree, tree)
*** 207,215 ****
  tree gfc_get_cfi_dim_sm (tree, tree);
  
  
- /* Shift lower bound of descriptor, updating ubound and offset.  */
- void gfc_conv_shift_descriptor_lbound (stmtblock_t*, tree, int, tree);
- 
  /* Add pre-loop scalarization code for intrinsic functions which require
     special handling.  */
  void gfc_add_intrinsic_ss_code (gfc_loopinfo *, gfc_ss *);
--- 179,184 ----
*************** void gfc_trans_string_copy (stmtblock_t
*** 223,227 ****
  
  /* Calculate extent / size of an array.  */
  tree gfc_conv_array_extent_dim (tree, tree, tree*);
- tree gfc_conv_descriptor_size (tree, int);
- tree gfc_conv_descriptor_cosize (tree, int, int);
--- 192,194 ----
diff -Nrcpad gcc-17-20260628/gcc/fortran/trans-decl.cc gcc-17-20260705/gcc/fortran/trans-decl.cc
*** gcc-17-20260628/gcc/fortran/trans-decl.cc	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/fortran/trans-decl.cc	Sun Jul  5 22:32:08 2026
*************** along with GCC; see the file COPYING3.
*** 44,49 ****
--- 44,50 ----
  #include "trans-const.h"
  /* Only for gfc_trans_code.  Shouldn't need to include this.  */
  #include "trans-stmt.h"
+ #include "trans-descriptor.h"
  #include "gomp-constants.h"
  #include "gimplify.h"
  #include "context.h"
diff -Nrcpad gcc-17-20260628/gcc/fortran/trans-descriptor.cc gcc-17-20260705/gcc/fortran/trans-descriptor.cc
*** gcc-17-20260628/gcc/fortran/trans-descriptor.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/fortran/trans-descriptor.cc	Sun Jul  5 22:32:08 2026
***************
*** 0 ****
--- 1,580 ----
+ /* Copyright (C) 2002-2025 Free Software Foundation, Inc.
+ 
+ This file is part of GCC.
+ 
+ GCC 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.
+ 
+ GCC 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 GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ 
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "tree.h"
+ #include "fold-const.h"
+ #include "gfortran.h"
+ #include "trans.h"
+ #include "trans-const.h"
+ #include "trans-types.h"
+ #include "trans-array.h"
+ 
+ 
+ /* Array descriptor low level access routines.
+  ******************************************************************************/
+ 
+ /* Build expressions to access the members of an array descriptor.
+    It's surprisingly easy to mess up here, so never access
+    an array descriptor by "brute force", always use these
+    functions.  This also avoids problems if we change the format
+    of an array descriptor.
+ 
+    To understand these magic numbers, look at the comments
+    before gfc_build_array_type() in trans-types.cc.
+ 
+    The code within these defines should be the only code which knows the format
+    of an array descriptor.
+ 
+    Any code just needing to read obtain the bounds of an array should use
+    gfc_conv_array_* rather than the following functions as these will return
+    know constant values, and work with arrays which do not have descriptors.
+ 
+    Don't forget to #undef these!  */
+ 
+ #define DATA_FIELD 0
+ #define OFFSET_FIELD 1
+ #define DTYPE_FIELD 2
+ #define SPAN_FIELD 3
+ #define DIMENSION_FIELD 4
+ #define CAF_TOKEN_FIELD 5
+ 
+ #define STRIDE_SUBFIELD 0
+ #define LBOUND_SUBFIELD 1
+ #define UBOUND_SUBFIELD 2
+ 
+ static tree
+ gfc_get_descriptor_field (tree desc, unsigned field_idx)
+ {
+   tree type = TREE_TYPE (desc);
+   gcc_assert (GFC_DESCRIPTOR_TYPE_P (type));
+ 
+   tree field = gfc_advance_chain (TYPE_FIELDS (type), field_idx);
+   gcc_assert (field != NULL_TREE);
+ 
+   return fold_build3_loc (input_location, COMPONENT_REF, TREE_TYPE (field),
+ 			  desc, field, NULL_TREE);
+ }
+ 
+ /* This provides READ-ONLY access to the data field.  The field itself
+    doesn't have the proper type.  */
+ 
+ tree
+ gfc_conv_descriptor_data_get (tree desc)
+ {
+   tree type = TREE_TYPE (desc);
+   if (TREE_CODE (type) == REFERENCE_TYPE)
+     gcc_unreachable ();
+ 
+   tree field = gfc_get_descriptor_field (desc, DATA_FIELD);
+   return fold_convert (GFC_TYPE_ARRAY_DATAPTR_TYPE (type), field);
+ }
+ 
+ /* This provides WRITE access to the data field.  */
+ 
+ void
+ gfc_conv_descriptor_data_set (stmtblock_t *block, tree desc, tree value)
+ {
+   tree field = gfc_get_descriptor_field (desc, DATA_FIELD);
+   gfc_add_modify (block, field, fold_convert (TREE_TYPE (field), value));
+ }
+ 
+ 
+ tree
+ gfc_conv_descriptor_offset (tree desc)
+ {
+   tree field = gfc_get_descriptor_field (desc, OFFSET_FIELD);
+   gcc_assert (TREE_TYPE (field) == gfc_array_index_type);
+   return field;
+ }
+ 
+ tree
+ gfc_conv_descriptor_offset_get (tree desc)
+ {
+   return gfc_conv_descriptor_offset (desc);
+ }
+ 
+ void
+ gfc_conv_descriptor_offset_set (stmtblock_t *block, tree desc, tree value)
+ {
+   tree t = gfc_conv_descriptor_offset (desc);
+   gfc_add_modify (block, t, fold_convert (TREE_TYPE (t), value));
+ }
+ 
+ 
+ tree
+ gfc_conv_descriptor_dtype (tree desc)
+ {
+   tree field = gfc_get_descriptor_field (desc, DTYPE_FIELD);
+   gcc_assert (TREE_TYPE (field) == get_dtype_type_node ());
+   return field;
+ }
+ 
+ static tree
+ gfc_conv_descriptor_span (tree desc)
+ {
+   tree field = gfc_get_descriptor_field (desc, SPAN_FIELD);
+   gcc_assert (TREE_TYPE (field) == gfc_array_index_type);
+   return field;
+ }
+ 
+ tree
+ gfc_conv_descriptor_span_get (tree desc)
+ {
+   return gfc_conv_descriptor_span (desc);
+ }
+ 
+ void
+ gfc_conv_descriptor_span_set (stmtblock_t *block, tree desc, tree value)
+ {
+   tree t = gfc_conv_descriptor_span (desc);
+   gfc_add_modify (block, t, fold_convert (TREE_TYPE (t), value));
+ }
+ 
+ 
+ tree
+ gfc_conv_descriptor_rank (tree desc)
+ {
+   tree tmp;
+   tree dtype;
+ 
+   dtype = gfc_conv_descriptor_dtype (desc);
+   tmp = gfc_advance_chain (TYPE_FIELDS (TREE_TYPE (dtype)), GFC_DTYPE_RANK);
+   gcc_assert (tmp != NULL_TREE
+ 	      && TREE_TYPE (tmp) == signed_char_type_node);
+   return fold_build3_loc (input_location, COMPONENT_REF, TREE_TYPE (tmp),
+ 			  dtype, tmp, NULL_TREE);
+ }
+ 
+ 
+ tree
+ gfc_conv_descriptor_version (tree desc)
+ {
+   tree tmp;
+   tree dtype;
+ 
+   dtype = gfc_conv_descriptor_dtype (desc);
+   tmp = gfc_advance_chain (TYPE_FIELDS (TREE_TYPE (dtype)), GFC_DTYPE_VERSION);
+   gcc_assert (tmp != NULL_TREE
+ 	      && TREE_TYPE (tmp) == integer_type_node);
+   return fold_build3_loc (input_location, COMPONENT_REF, TREE_TYPE (tmp),
+ 			  dtype, tmp, NULL_TREE);
+ }
+ 
+ 
+ /* Return the element length from the descriptor dtype field.  */
+ 
+ tree
+ gfc_conv_descriptor_elem_len (tree desc)
+ {
+   tree tmp;
+   tree dtype;
+ 
+   dtype = gfc_conv_descriptor_dtype (desc);
+   tmp = gfc_advance_chain (TYPE_FIELDS (TREE_TYPE (dtype)),
+ 			   GFC_DTYPE_ELEM_LEN);
+   gcc_assert (tmp != NULL_TREE
+ 	      && TREE_TYPE (tmp) == size_type_node);
+   return fold_build3_loc (input_location, COMPONENT_REF, TREE_TYPE (tmp),
+ 			  dtype, tmp, NULL_TREE);
+ }
+ 
+ 
+ tree
+ gfc_conv_descriptor_attribute (tree desc)
+ {
+   tree tmp;
+   tree dtype;
+ 
+   dtype = gfc_conv_descriptor_dtype (desc);
+   tmp = gfc_advance_chain (TYPE_FIELDS (TREE_TYPE (dtype)),
+ 			   GFC_DTYPE_ATTRIBUTE);
+   gcc_assert (tmp!= NULL_TREE
+ 	      && TREE_TYPE (tmp) == short_integer_type_node);
+   return fold_build3_loc (input_location, COMPONENT_REF, TREE_TYPE (tmp),
+ 			  dtype, tmp, NULL_TREE);
+ }
+ 
+ tree
+ gfc_conv_descriptor_type (tree desc)
+ {
+   tree tmp;
+   tree dtype;
+ 
+   dtype = gfc_conv_descriptor_dtype (desc);
+   tmp = gfc_advance_chain (TYPE_FIELDS (TREE_TYPE (dtype)), GFC_DTYPE_TYPE);
+   gcc_assert (tmp!= NULL_TREE
+ 	      && TREE_TYPE (tmp) == signed_char_type_node);
+   return fold_build3_loc (input_location, COMPONENT_REF, TREE_TYPE (tmp),
+ 			  dtype, tmp, NULL_TREE);
+ }
+ 
+ tree
+ gfc_get_descriptor_dimension (tree desc)
+ {
+   tree field = gfc_get_descriptor_field (desc, DIMENSION_FIELD);
+   gcc_assert (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
+ 	      && TREE_CODE (TREE_TYPE (TREE_TYPE (field))) == RECORD_TYPE);
+   return field;
+ }
+ 
+ 
+ tree
+ gfc_conv_descriptor_dimension (tree desc, tree dim)
+ {
+   tree tmp;
+ 
+   tmp = gfc_get_descriptor_dimension (desc);
+ 
+   return gfc_build_array_ref (tmp, dim, NULL_TREE, true);
+ }
+ 
+ 
+ tree
+ gfc_conv_descriptor_token (tree desc)
+ {
+   gcc_assert (flag_coarray == GFC_FCOARRAY_LIB);
+   tree field = gfc_get_descriptor_field (desc, CAF_TOKEN_FIELD);
+   /* Should be a restricted pointer - except in the finalization wrapper.  */
+   gcc_assert (TREE_TYPE (field) == prvoid_type_node
+ 	      || TREE_TYPE (field) == pvoid_type_node);
+   return field;
+ }
+ 
+ static tree
+ gfc_conv_descriptor_subfield (tree desc, tree dim, unsigned field_idx)
+ {
+   tree tmp = gfc_conv_descriptor_dimension (desc, dim);
+   tree field = gfc_advance_chain (TYPE_FIELDS (TREE_TYPE (tmp)), field_idx);
+   gcc_assert (field != NULL_TREE);
+ 
+   return fold_build3_loc (input_location, COMPONENT_REF, TREE_TYPE (field),
+ 			  tmp, field, NULL_TREE);
+ }
+ 
+ static tree
+ gfc_conv_descriptor_stride (tree desc, tree dim)
+ {
+   tree field = gfc_conv_descriptor_subfield (desc, dim, STRIDE_SUBFIELD);
+   gcc_assert (TREE_TYPE (field) == gfc_array_index_type);
+   return field;
+ }
+ 
+ tree
+ gfc_conv_descriptor_stride_get (tree desc, tree dim)
+ {
+   tree type = TREE_TYPE (desc);
+   gcc_assert (GFC_DESCRIPTOR_TYPE_P (type));
+   if (integer_zerop (dim)
+       && (GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ALLOCATABLE
+ 	  || GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ASSUMED_SHAPE_CONT
+ 	  || GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ASSUMED_RANK_CONT
+ 	  || GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ASSUMED_RANK_ALLOCATABLE
+ 	  || GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ASSUMED_RANK_POINTER_CONT
+ 	  || GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_POINTER_CONT))
+     return gfc_index_one_node;
+ 
+   return gfc_conv_descriptor_stride (desc, dim);
+ }
+ 
+ void
+ gfc_conv_descriptor_stride_set (stmtblock_t *block, tree desc,
+ 				tree dim, tree value)
+ {
+   tree t = gfc_conv_descriptor_stride (desc, dim);
+   gfc_add_modify (block, t, fold_convert (TREE_TYPE (t), value));
+ }
+ 
+ static tree
+ gfc_conv_descriptor_lbound (tree desc, tree dim)
+ {
+   tree field = gfc_conv_descriptor_subfield (desc, dim, LBOUND_SUBFIELD);
+   gcc_assert (TREE_TYPE (field) == gfc_array_index_type);
+   return field;
+ }
+ 
+ tree
+ gfc_conv_descriptor_lbound_get (tree desc, tree dim)
+ {
+   return gfc_conv_descriptor_lbound (desc, dim);
+ }
+ 
+ void
+ gfc_conv_descriptor_lbound_set (stmtblock_t *block, tree desc,
+ 				tree dim, tree value)
+ {
+   tree t = gfc_conv_descriptor_lbound (desc, dim);
+   gfc_add_modify (block, t, fold_convert (TREE_TYPE (t), value));
+ }
+ 
+ static tree
+ gfc_conv_descriptor_ubound (tree desc, tree dim)
+ {
+   tree field = gfc_conv_descriptor_subfield (desc, dim, UBOUND_SUBFIELD);
+   gcc_assert (TREE_TYPE (field) == gfc_array_index_type);
+   return field;
+ }
+ 
+ tree
+ gfc_conv_descriptor_ubound_get (tree desc, tree dim)
+ {
+   return gfc_conv_descriptor_ubound (desc, dim);
+ }
+ 
+ void
+ gfc_conv_descriptor_ubound_set (stmtblock_t *block, tree desc,
+ 				tree dim, tree value)
+ {
+   tree t = gfc_conv_descriptor_ubound (desc, dim);
+   gfc_add_modify (block, t, fold_convert (TREE_TYPE (t), value));
+ }
+ 
+ 
+ /* Obtain offsets for trans-types.cc(gfc_get_array_descr_info).  */
+ 
+ void
+ gfc_get_descriptor_offsets_for_info (const_tree desc_type, tree *data_off,
+ 				     tree *dtype_off, tree *span_off,
+ 				     tree *dim_off, tree *dim_size,
+ 				     tree *stride_suboff, tree *lower_suboff,
+ 				     tree *upper_suboff)
+ {
+   tree field;
+   tree type;
+ 
+   type = TYPE_MAIN_VARIANT (desc_type);
+   field = gfc_advance_chain (TYPE_FIELDS (type), DATA_FIELD);
+   *data_off = byte_position (field);
+   field = gfc_advance_chain (TYPE_FIELDS (type), DTYPE_FIELD);
+   *dtype_off = byte_position (field);
+   field = gfc_advance_chain (TYPE_FIELDS (type), SPAN_FIELD);
+   *span_off = byte_position (field);
+   field = gfc_advance_chain (TYPE_FIELDS (type), DIMENSION_FIELD);
+   *dim_off = byte_position (field);
+   type = TREE_TYPE (TREE_TYPE (field));
+   *dim_size = TYPE_SIZE_UNIT (type);
+   field = gfc_advance_chain (TYPE_FIELDS (type), STRIDE_SUBFIELD);
+   *stride_suboff = byte_position (field);
+   field = gfc_advance_chain (TYPE_FIELDS (type), LBOUND_SUBFIELD);
+   *lower_suboff = byte_position (field);
+   field = gfc_advance_chain (TYPE_FIELDS (type), UBOUND_SUBFIELD);
+   *upper_suboff = byte_position (field);
+ }
+ 
+ 
+ /* Array descriptor higher level routines.
+  ******************************************************************************/
+ 
+ /* Build a null array descriptor constructor.  */
+ 
+ tree
+ gfc_build_null_descriptor (tree type)
+ {
+   tree field;
+   tree tmp;
+ 
+   gcc_assert (GFC_DESCRIPTOR_TYPE_P (type));
+   gcc_assert (DATA_FIELD == 0);
+   field = TYPE_FIELDS (type);
+ 
+   /* Set a NULL data pointer.  */
+   tmp = build_constructor_single (type, field, null_pointer_node);
+   TREE_CONSTANT (tmp) = 1;
+   /* All other fields are ignored.  */
+ 
+   return tmp;
+ }
+ 
+ 
+ /* Cleanup those #defines.  */
+ 
+ #undef DATA_FIELD
+ #undef OFFSET_FIELD
+ #undef DTYPE_FIELD
+ #undef SPAN_FIELD
+ #undef DIMENSION_FIELD
+ #undef CAF_TOKEN_FIELD
+ #undef STRIDE_SUBFIELD
+ #undef LBOUND_SUBFIELD
+ #undef UBOUND_SUBFIELD
+ 
+ 
+ /* For an array descriptor, get the total number of elements.  This is just
+    the product of the extents along from_dim to to_dim.  */
+ 
+ static tree
+ gfc_conv_descriptor_size_1 (tree desc, int from_dim, int to_dim)
+ {
+   tree res;
+   int dim;
+ 
+   res = gfc_index_one_node;
+ 
+   for (dim = from_dim; dim < to_dim; ++dim)
+     {
+       tree lbound;
+       tree ubound;
+       tree extent;
+ 
+       lbound = gfc_conv_descriptor_lbound_get (desc, gfc_rank_cst[dim]);
+       ubound = gfc_conv_descriptor_ubound_get (desc, gfc_rank_cst[dim]);
+ 
+       extent = gfc_conv_array_extent_dim (lbound, ubound, NULL);
+       res = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
+ 			     res, extent);
+     }
+ 
+   return res;
+ }
+ 
+ 
+ /* Full size of an array.  */
+ 
+ tree
+ gfc_conv_descriptor_size (tree desc, int rank)
+ {
+   return gfc_conv_descriptor_size_1 (desc, 0, rank);
+ }
+ 
+ 
+ /* Size of a coarray for all dimensions but the last.  */
+ 
+ tree
+ gfc_conv_descriptor_cosize (tree desc, int rank, int corank)
+ {
+   return gfc_conv_descriptor_size_1 (desc, rank, rank + corank - 1);
+ }
+ 
+ 
+ /* Modify a descriptor such that the lbound of a given dimension is the value
+    specified.  This also updates ubound and offset accordingly.  */
+ 
+ void
+ gfc_conv_shift_descriptor_lbound (stmtblock_t* block, tree desc,
+ 				  int dim, tree new_lbound)
+ {
+   tree offs, ubound, lbound, stride;
+   tree diff, offs_diff;
+ 
+   new_lbound = fold_convert (gfc_array_index_type, new_lbound);
+ 
+   offs = gfc_conv_descriptor_offset_get (desc);
+   lbound = gfc_conv_descriptor_lbound_get (desc, gfc_rank_cst[dim]);
+   ubound = gfc_conv_descriptor_ubound_get (desc, gfc_rank_cst[dim]);
+   stride = gfc_conv_descriptor_stride_get (desc, gfc_rank_cst[dim]);
+ 
+   /* Get difference (new - old) by which to shift stuff.  */
+   diff = fold_build2_loc (input_location, MINUS_EXPR, gfc_array_index_type,
+ 			  new_lbound, lbound);
+ 
+   /* Shift ubound and offset accordingly.  This has to be done before
+      updating the lbound, as they depend on the lbound expression!  */
+   ubound = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type,
+ 			    ubound, diff);
+   gfc_conv_descriptor_ubound_set (block, desc, gfc_rank_cst[dim], ubound);
+   offs_diff = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
+ 			       diff, stride);
+   offs = fold_build2_loc (input_location, MINUS_EXPR, gfc_array_index_type,
+ 			  offs, offs_diff);
+   gfc_conv_descriptor_offset_set (block, desc, offs);
+ 
+   /* Finally set lbound to value we want.  */
+   gfc_conv_descriptor_lbound_set (block, desc, gfc_rank_cst[dim], new_lbound);
+ }
+ 
+ 
+ void
+ gfc_copy_descriptor (stmtblock_t *block, tree dst, tree src, int rank)
+ {
+   int n;
+   tree dim;
+   tree tmp;
+   tree tmp2;
+   tree size;
+   tree offset;
+ 
+   offset = gfc_index_zero_node;
+ 
+   /* Use memcpy to copy the descriptor.  The size is the minimum of
+      the sizes of 'src' and 'dst'. This avoids a non-trivial conversion.  */
+   tmp = TYPE_SIZE_UNIT (TREE_TYPE (src));
+   tmp2 = TYPE_SIZE_UNIT (TREE_TYPE (dst));
+   size = fold_build2_loc (input_location, MIN_EXPR,
+ 			  TREE_TYPE (tmp), tmp, tmp2);
+   tmp = builtin_decl_explicit (BUILT_IN_MEMCPY);
+   tmp = build_call_expr_loc (input_location, tmp, 3,
+ 			     gfc_build_addr_expr (NULL_TREE, dst),
+ 			     gfc_build_addr_expr (NULL_TREE, src),
+ 			     fold_convert (size_type_node, size));
+   gfc_add_expr_to_block (block, tmp);
+ 
+   /* Set the offset correctly.  */
+   for (n = 0; n < rank; n++)
+     {
+       dim = gfc_rank_cst[n];
+       tmp = gfc_conv_descriptor_lbound_get (src, dim);
+       tmp2 = gfc_conv_descriptor_stride_get (src, dim);
+       tmp = fold_build2_loc (input_location, MULT_EXPR, TREE_TYPE (tmp),
+ 			     tmp, tmp2);
+       offset = fold_build2_loc (input_location, MINUS_EXPR,
+ 			TREE_TYPE (offset), offset, tmp);
+       offset = gfc_evaluate_now (offset, block);
+     }
+ 
+   gfc_conv_descriptor_offset_set (block, dst, offset);
+ }
+ 
+ 
+ /* Extend the data in array DESC by EXTRA elements.  */
+ 
+ void
+ gfc_grow_array (stmtblock_t * pblock, tree desc, tree extra)
+ {
+   tree arg0, arg1;
+   tree tmp;
+   tree size;
+   tree ubound;
+ 
+   if (integer_zerop (extra))
+     return;
+ 
+   ubound = gfc_conv_descriptor_ubound_get (desc, gfc_rank_cst[0]);
+ 
+   /* Add EXTRA to the upper bound.  */
+   tmp = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type,
+ 			 ubound, extra);
+   gfc_conv_descriptor_ubound_set (pblock, desc, gfc_rank_cst[0], tmp);
+ 
+   /* Get the value of the current data pointer.  */
+   arg0 = gfc_conv_descriptor_data_get (desc);
+ 
+   /* Calculate the new array size.  */
+   size = TYPE_SIZE_UNIT (gfc_get_element_type (TREE_TYPE (desc)));
+   tmp = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type,
+ 			 ubound, gfc_index_one_node);
+   arg1 = fold_build2_loc (input_location, MULT_EXPR, size_type_node,
+ 			  fold_convert (size_type_node, tmp),
+ 			  fold_convert (size_type_node, size));
+ 
+   /* Call the realloc() function.  */
+   tmp = gfc_call_realloc (pblock, arg0, arg1);
+   gfc_conv_descriptor_data_set (pblock, desc, tmp);
+ }
diff -Nrcpad gcc-17-20260628/gcc/fortran/trans-descriptor.h gcc-17-20260705/gcc/fortran/trans-descriptor.h
*** gcc-17-20260628/gcc/fortran/trans-descriptor.h	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/fortran/trans-descriptor.h	Sun Jul  5 22:32:08 2026
***************
*** 0 ****
--- 1,67 ----
+ /* Copyright (C) 2002-2025 Free Software Foundation, Inc.
+ 
+ This file is part of GCC.
+ 
+ GCC 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.
+ 
+ GCC 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 GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ #ifndef GFC_TRANS_DESCRIPTOR_H
+ #define GFC_TRANS_DESCRIPTOR_H
+ 
+ 
+ tree gfc_conv_descriptor_dtype (tree);
+ tree gfc_conv_descriptor_rank (tree);
+ tree gfc_conv_descriptor_version (tree);
+ tree gfc_conv_descriptor_elem_len (tree);
+ tree gfc_conv_descriptor_attribute (tree);
+ tree gfc_conv_descriptor_type (tree);
+ tree gfc_get_descriptor_dimension (tree);
+ tree gfc_conv_descriptor_dimension (tree, tree);
+ tree gfc_conv_descriptor_token (tree);
+ tree gfc_conv_descriptor_offset (tree);
+ 
+ tree gfc_conv_descriptor_data_get (tree);
+ tree gfc_conv_descriptor_offset_get (tree);
+ tree gfc_conv_descriptor_span_get (tree);
+ 
+ tree gfc_conv_descriptor_stride_get (tree, tree);
+ tree gfc_conv_descriptor_lbound_get (tree, tree);
+ tree gfc_conv_descriptor_ubound_get (tree, tree);
+ 
+ void gfc_conv_descriptor_data_set (stmtblock_t *, tree, tree);
+ void gfc_conv_descriptor_offset_set (stmtblock_t *, tree, tree);
+ void gfc_conv_descriptor_span_set (stmtblock_t *, tree, tree);
+ void gfc_conv_descriptor_stride_set (stmtblock_t *, tree, tree, tree);
+ void gfc_conv_descriptor_lbound_set (stmtblock_t *, tree, tree, tree);
+ void gfc_conv_descriptor_ubound_set (stmtblock_t *, tree, tree, tree);
+ 
+ /* Build expressions for accessing components of an array descriptor.  */
+ void gfc_get_descriptor_offsets_for_info (const_tree, tree *, tree *, tree *,
+ 					  tree *, tree *, tree *, tree *,
+ 					  tree *);
+ 
+ /* Build a null array descriptor constructor.  */
+ tree gfc_build_null_descriptor (tree type);
+ 
+ tree gfc_conv_descriptor_size (tree, int);
+ tree gfc_conv_descriptor_cosize (tree, int, int);
+ 
+ /* Shift lower bound of descriptor, updating ubound and offset.  */
+ void gfc_conv_shift_descriptor_lbound (stmtblock_t*, tree, int, tree);
+ 
+ void gfc_copy_descriptor (stmtblock_t *, tree, tree, int);
+ 
+ void gfc_grow_array (stmtblock_t *, tree, tree);
+ 
+ #endif /* GFC_TRANS_DESCRIPTOR_H */
diff -Nrcpad gcc-17-20260628/gcc/fortran/trans-expr.cc gcc-17-20260705/gcc/fortran/trans-expr.cc
*** gcc-17-20260628/gcc/fortran/trans-expr.cc	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/fortran/trans-expr.cc	Sun Jul  5 22:32:08 2026
*************** along with GCC; see the file COPYING3.
*** 38,43 ****
--- 38,44 ----
  #include "trans-const.h"
  #include "trans-types.h"
  #include "trans-array.h"
+ #include "trans-descriptor.h"
  /* Only for gfc_trans_assign and gfc_trans_pointer_assign.  */
  #include "trans-stmt.h"
  #include "dependency.h"
*************** alloc_scalar_allocatable_for_assignment
*** 12838,12844 ****
  				NULL_TREE, NULL_TREE, NULL_TREE, jump_label1,
  				expr1, 1);
      }
!   else if (expr1->ts.type == BT_DERIVED && expr1->ts.u.derived->attr.alloc_comp)
      {
        tmp = build_call_expr_loc (input_location,
  				 builtin_decl_explicit (BUILT_IN_CALLOC),
--- 12839,12847 ----
  				NULL_TREE, NULL_TREE, NULL_TREE, jump_label1,
  				expr1, 1);
      }
!   else if (expr1->ts.type == BT_DERIVED
! 	   && (expr1->ts.u.derived->attr.alloc_comp
! 	       || has_parameterized_comps (expr1->ts.u.derived)))
      {
        tmp = build_call_expr_loc (input_location,
  				 builtin_decl_explicit (BUILT_IN_CALLOC),
diff -Nrcpad gcc-17-20260628/gcc/fortran/trans-intrinsic.cc gcc-17-20260705/gcc/fortran/trans-intrinsic.cc
*** gcc-17-20260628/gcc/fortran/trans-intrinsic.cc	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/fortran/trans-intrinsic.cc	Sun Jul  5 22:32:08 2026
*************** along with GCC; see the file COPYING3.
*** 39,44 ****
--- 39,45 ----
  #include "trans-const.h"
  #include "trans-types.h"
  #include "trans-array.h"
+ #include "trans-descriptor.h"
  #include "dependency.h"	/* For CAF array alias analysis.  */
  #include "attribs.h"
  #include "realmpfr.h"
diff -Nrcpad gcc-17-20260628/gcc/fortran/trans-io.cc gcc-17-20260705/gcc/fortran/trans-io.cc
*** gcc-17-20260628/gcc/fortran/trans-io.cc	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/fortran/trans-io.cc	Sun Jul  5 22:32:08 2026
*************** along with GCC; see the file COPYING3.
*** 32,37 ****
--- 32,38 ----
  #include "trans-array.h"
  #include "trans-types.h"
  #include "trans-const.h"
+ #include "trans-descriptor.h"
  #include "options.h"
  
  /* Members of the ioparm structure.  */
diff -Nrcpad gcc-17-20260628/gcc/fortran/trans-openmp.cc gcc-17-20260705/gcc/fortran/trans-openmp.cc
*** gcc-17-20260628/gcc/fortran/trans-openmp.cc	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/fortran/trans-openmp.cc	Sun Jul  5 22:32:08 2026
*************** along with GCC; see the file COPYING3.
*** 39,44 ****
--- 39,45 ----
  #include "trans-types.h"
  #include "trans-array.h"
  #include "trans-const.h"
+ #include "trans-descriptor.h"
  #include "arith.h"
  #include "constructor.h"
  #include "gomp-constants.h"
*************** gfc_trans_omp_clauses (stmtblock_t *bloc
*** 4061,4067 ****
  			      gfc_init_se (&se, NULL);
  			      gfc_conv_expr (&se, n->u2.allocator);
  			      gfc_add_block_to_block (block, &se.pre);
! 			      allocator_ = gfc_evaluate_now (se.expr, block);
  			      gfc_add_block_to_block (block, &se.post);
  			    }
  			  OMP_CLAUSE_ALLOCATE_ALLOCATOR (node) = allocator_;
--- 4062,4073 ----
  			      gfc_init_se (&se, NULL);
  			      gfc_conv_expr (&se, n->u2.allocator);
  			      gfc_add_block_to_block (block, &se.pre);
! 			      t = se.expr;
! 			      if (DECL_P (t) && se.post.head == NULL_TREE)
! 				allocator_ = (POINTER_TYPE_P (TREE_TYPE (t))
! 					      ? build_fold_indirect_ref (t): t);
! 			      else
! 				allocator_ = gfc_evaluate_now (t, block);
  			      gfc_add_block_to_block (block, &se.post);
  			    }
  			  OMP_CLAUSE_ALLOCATE_ALLOCATOR (node) = allocator_;
*************** gfc_trans_omp_clauses (stmtblock_t *bloc
*** 5471,5484 ****
  	    }
  	  break;
  	case OMP_LIST_USES_ALLOCATORS:
- 	  /* Ignore omp_null_allocator and pre-defined allocators as no
- 	     special treatment is needed. */
  	  for (; n != NULL; n = n->next)
! 	    if (n->sym->attr.flavor == FL_VARIABLE)
! 	      break;
! 	  if (n != NULL)
! 	    sorry_at (input_location, "%<uses_allocators%> clause with traits "
! 				      "and memory spaces");
  	  break;
  	default:
  	  break;
--- 5477,5512 ----
  	    }
  	  break;
  	case OMP_LIST_USES_ALLOCATORS:
  	  for (; n != NULL; n = n->next)
! 	    {
! 	      if (!n->sym->attr.referenced)
! 		continue;
! 	      tree node = build_omp_clause (input_location,
! 					    OMP_CLAUSE_USES_ALLOCATORS);
! 	      tree t;
! 	      if (n->sym->attr.flavor == FL_VARIABLE)
! 		t = gfc_get_symbol_decl (n->sym);
! 	      else
! 		{
! 		  t = gfc_conv_mpz_to_tree (n->sym->value->value.integer,
! 					    n->sym->ts.kind);
! 		  t = fold_convert (ptr_type_node, t);
! 		}
! 	      OMP_CLAUSE_USES_ALLOCATORS_ALLOCATOR(node) = t;
! 	      if (n->u.memspace_sym)
! 		{
! 		  n->u.memspace_sym->attr.referenced = true;
! 		  OMP_CLAUSE_USES_ALLOCATORS_MEMSPACE (node)
! 		    = gfc_get_symbol_decl (n->u.memspace_sym);
! 		}
! 	      if (n->u2.traits_sym)
! 		{
! 		  n->u2.traits_sym->attr.referenced = true;
! 		  OMP_CLAUSE_USES_ALLOCATORS_TRAITS (node)
! 		    = gfc_get_symbol_decl (n->u2.traits_sym);
! 		}
! 	      omp_clauses = gfc_trans_add_clause (node, omp_clauses);
! 	    }
  	  break;
  	default:
  	  break;
diff -Nrcpad gcc-17-20260628/gcc/fortran/trans-stmt.cc gcc-17-20260705/gcc/fortran/trans-stmt.cc
*** gcc-17-20260628/gcc/fortran/trans-stmt.cc	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/fortran/trans-stmt.cc	Sun Jul  5 22:32:08 2026
*************** along with GCC; see the file COPYING3.
*** 33,38 ****
--- 33,39 ----
  #include "trans-types.h"
  #include "trans-array.h"
  #include "trans-const.h"
+ #include "trans-descriptor.h"
  #include "dependency.h"
  
  typedef struct iter_info
*************** class_has_len_component (gfc_symbol *sym
*** 1827,1874 ****
  }
  
  
- static void
- copy_descriptor (stmtblock_t *block, tree dst, tree src, int rank)
- {
-   int n;
-   tree dim;
-   tree tmp;
-   tree tmp2;
-   tree size;
-   tree offset;
- 
-   offset = gfc_index_zero_node;
- 
-   /* Use memcpy to copy the descriptor. The size is the minimum of
-      the sizes of 'src' and 'dst'. This avoids a non-trivial conversion.  */
-   tmp = TYPE_SIZE_UNIT (TREE_TYPE (src));
-   tmp2 = TYPE_SIZE_UNIT (TREE_TYPE (dst));
-   size = fold_build2_loc (input_location, MIN_EXPR,
- 			  TREE_TYPE (tmp), tmp, tmp2);
-   tmp = builtin_decl_explicit (BUILT_IN_MEMCPY);
-   tmp = build_call_expr_loc (input_location, tmp, 3,
- 			     gfc_build_addr_expr (NULL_TREE, dst),
- 			     gfc_build_addr_expr (NULL_TREE, src),
- 			     fold_convert (size_type_node, size));
-   gfc_add_expr_to_block (block, tmp);
- 
-   /* Set the offset correctly.  */
-   for (n = 0; n < rank; n++)
-     {
-       dim = gfc_rank_cst[n];
-       tmp = gfc_conv_descriptor_lbound_get (src, dim);
-       tmp2 = gfc_conv_descriptor_stride_get (src, dim);
-       tmp = fold_build2_loc (input_location, MULT_EXPR, TREE_TYPE (tmp),
- 			     tmp, tmp2);
-       offset = fold_build2_loc (input_location, MINUS_EXPR,
- 			TREE_TYPE (offset), offset, tmp);
-       offset = gfc_evaluate_now (offset, block);
-     }
- 
-   gfc_conv_descriptor_offset_set (block, dst, offset);
- }
- 
- 
  /* Do proper initialization for ASSOCIATE names.  */
  
  static void
--- 1828,1833 ----
*************** trans_associate_var (gfc_symbol *sym, gf
*** 1997,2003 ****
  	 attributes so the selector descriptor must be copied in and
  	 copied out.  */
        if (rank > 0)
! 	copy_descriptor (&se.pre, desc, se.expr, rank);
        else
  	{
  	  tmp = gfc_conv_descriptor_data_get (se.expr);
--- 1956,1962 ----
  	 attributes so the selector descriptor must be copied in and
  	 copied out.  */
        if (rank > 0)
! 	gfc_copy_descriptor (&se.pre, desc, se.expr, rank);
        else
  	{
  	  tmp = gfc_conv_descriptor_data_get (se.expr);
*************** trans_associate_var (gfc_symbol *sym, gf
*** 2026,2032 ****
  		  || CLASS_DATA (sym)->attr.pointer)))
  	{
  	  if (rank > 0)
! 	    copy_descriptor (&se.post, se.expr, desc, rank);
  	  else
  	    gfc_conv_descriptor_data_set (&se.post, se.expr, desc);
  
--- 1985,1991 ----
  		  || CLASS_DATA (sym)->attr.pointer)))
  	{
  	  if (rank > 0)
! 	    gfc_copy_descriptor (&se.post, se.expr, desc, rank);
  	  else
  	    gfc_conv_descriptor_data_set (&se.post, se.expr, desc);
  
*************** gfc_trans_allocate (gfc_code * code, gfc
*** 7690,7698 ****
  	  gfc_add_expr_to_block (&block, tmp);
  	}
        /* Set KIND and LEN PDT components and allocate those that are
!          parameterized.  */
!       else if (IS_PDT (expr))
  	{
  	  if (code->expr3 && code->expr3->param_list)
  	    param_list = code->expr3->param_list;
  	  else if (expr->param_list)
--- 7649,7671 ----
  	  gfc_add_expr_to_block (&block, tmp);
  	}
        /* Set KIND and LEN PDT components and allocate those that are
! 	 parameterized and make sure that allocatable components are
! 	 nullified.  */
!       else if (IS_PDT (expr) || IS_CLASS_PDT (expr))
  	{
+ 	  gfc_symbol *declared;
+ 	  gfc_symbol *type_spec_dt;
+ 	  tree type;
+ 	  tree ptr;
+ 
+ 	  declared = IS_PDT (expr) ? expr->ts.u.derived
+ 				   : CLASS_DATA (expr)->ts.u.derived;
+ 
+ 	  if (code->ext.alloc.ts.type == BT_DERIVED)
+ 	    type_spec_dt = code->ext.alloc.ts.u.derived;
+ 	  else
+ 	    type_spec_dt = NULL;
+ 
  	  if (code->expr3 && code->expr3->param_list)
  	    param_list = code->expr3->param_list;
  	  else if (expr->param_list)
*************** gfc_trans_allocate (gfc_code * code, gfc
*** 7706,7730 ****
  	  int pdt_rank = (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (se.expr))
  			  ? GFC_TYPE_ARRAY_RANK (TREE_TYPE (se.expr))
  			  : expr->rank);
! 	  tmp = gfc_allocate_pdt_comp (expr->ts.u.derived, se.expr,
  				       pdt_rank, param_list);
  	  gfc_add_expr_to_block (&block, tmp);
! 	}
!       /* Ditto for CLASS expressions.  */
!       else if (IS_CLASS_PDT (expr))
! 	{
! 	  if (code->expr3 && code->expr3->param_list)
! 	    param_list = code->expr3->param_list;
! 	  else if (expr->param_list)
! 	    param_list = expr->param_list;
! 	  else
! 	    param_list = expr->symtree->n.sym->param_list;
! 	  int pdt_rank = (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (se.expr))
! 			  ? GFC_TYPE_ARRAY_RANK (TREE_TYPE (se.expr))
! 			  : expr->rank);
! 	  tmp = gfc_allocate_pdt_comp (CLASS_DATA (expr)->ts.u.derived,
! 				       se.expr, pdt_rank, param_list);
! 	  gfc_add_expr_to_block (&block, tmp);
  	}
        else if (code->expr3 && code->expr3->mold
  	       && code->expr3->ts.type == BT_CLASS)
--- 7679,7699 ----
  	  int pdt_rank = (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (se.expr))
  			  ? GFC_TYPE_ARRAY_RANK (TREE_TYPE (se.expr))
  			  : expr->rank);
! 	  tmp = gfc_allocate_pdt_comp (declared, se.expr,
  				       pdt_rank, param_list);
  	  gfc_add_expr_to_block (&block, tmp);
! 
! 	  /* If this is a CLASS allocation and the declared type does not have
! 	     allocatable components but the explicit type_spec does, nullify
! 	     the allocatable components of the type_spec derived type.  */
! 	  if (pdt_rank == 0 && type_spec_dt
! 	      && !declared->attr.alloc_comp && type_spec_dt->attr.alloc_comp)
! 	    {
! 	      type = build_pointer_type (gfc_get_derived_type (type_spec_dt));
! 	      ptr = fold_convert (type, se.expr);
! 	      tmp = gfc_nullify_alloc_comp (type_spec_dt, ptr, 0);
! 	      gfc_add_expr_to_block (&block, tmp);
! 	    }
  	}
        else if (code->expr3 && code->expr3->mold
  	       && code->expr3->ts.type == BT_CLASS)
diff -Nrcpad gcc-17-20260628/gcc/fortran/trans-types.cc gcc-17-20260705/gcc/fortran/trans-types.cc
*** gcc-17-20260628/gcc/fortran/trans-types.cc	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/fortran/trans-types.cc	Sun Jul  5 22:32:08 2026
*************** along with GCC; see the file COPYING3.
*** 36,41 ****
--- 36,42 ----
  #include "trans-types.h"
  #include "trans-const.h"
  #include "trans-array.h"
+ #include "trans-descriptor.h"
  #include "dwarf2out.h"	/* For struct array_descr_info.  */
  #include "attribs.h"
  #include "alias.h"
diff -Nrcpad gcc-17-20260628/gcc/fortran/trans.cc gcc-17-20260705/gcc/fortran/trans.cc
*** gcc-17-20260628/gcc/fortran/trans.cc	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/fortran/trans.cc	Sun Jul  5 22:32:08 2026
*************** along with GCC; see the file COPYING3.
*** 33,38 ****
--- 33,39 ----
  #include "trans-array.h"
  #include "trans-types.h"
  #include "trans-const.h"
+ #include "trans-descriptor.h"
  
  /* Naming convention for backend interface code:
  
*************** trans_code (gfc_code * code, tree cond)
*** 2696,2702 ****
  
        if (res != NULL_TREE && ! IS_EMPTY_STMT (res))
  	{
! 	  if (TREE_CODE (res) != STATEMENT_LIST)
  	    SET_EXPR_LOCATION (res, input_location);
  
  	  /* Add the new statement to the block.  */
--- 2697,2705 ----
  
        if (res != NULL_TREE && ! IS_EMPTY_STMT (res))
  	{
! 	  /* Don't try to set location for trees that don't have one,
! 	     e.g. STATEMENT_LIST or error_mark_node.  */
! 	  if (EXPR_P (res))
  	    SET_EXPR_LOCATION (res, input_location);
  
  	  /* Add the new statement to the block.  */
diff -Nrcpad gcc-17-20260628/gcc/gcc.cc gcc-17-20260705/gcc/gcc.cc
*** gcc-17-20260628/gcc/gcc.cc	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/gcc.cc	Sun Jul  5 22:32:08 2026
*************** proper position among the other output f
*** 709,714 ****
--- 709,720 ----
  #define ASM_SPEC ""
  #endif
  
+ /* config.h can define ASM_V_SPEC to pass equivalents of -v, -w (no warnings),
+    and -I to the assembler.  */
+ #ifndef ASM_V_SPEC
+ #define ASM_V_SPEC "%{v} %{w:-W} %{I*}"
+ #endif
+ 
  /* config.h can define ASM_FINAL_SPEC to run a post processor after
     the assembler has run.  */
  #ifndef ASM_FINAL_SPEC
*************** static const char *cc1_options =
*** 1327,1338 ****
  
  static const char *asm_options =
  "%{-target-help:%:print-asm-header()} "
! #if HAVE_GNU_AS
! /* If GNU AS is used, then convert -w (no warnings), -I, and -v
!    to the assembler equivalents.  */
! "%{v} %{w:-W} %{I*} "
! #endif
! "%(asm_debug_option)"
  ASM_COMPRESS_DEBUG_SPEC
  "%a %Y %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}";
  
--- 1333,1340 ----
  
  static const char *asm_options =
  "%{-target-help:%:print-asm-header()} "
! ASM_V_SPEC
! " %(asm_debug_option)"
  ASM_COMPRESS_DEBUG_SPEC
  "%a %Y %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}";
  
diff -Nrcpad gcc-17-20260628/gcc/gimple-ssa-warn-access.cc gcc-17-20260705/gcc/gimple-ssa-warn-access.cc
*** gcc-17-20260628/gcc/gimple-ssa-warn-access.cc	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/gimple-ssa-warn-access.cc	Sun Jul  5 22:32:08 2026
*************** maybe_warn_for_bound (opt_code opt, loca
*** 898,904 ****
  			    func, bndrng[0], bndrng[1], size)
  	      : warning_at (&richloc, opt,
  			    (maybe
! 			     ? G_("specified bound [%E, %E] exceeds "
  				  "destination size %E")
  			     : G_("specified bound [%E, %E] exceeds "
  				  "destination size %E")),
--- 898,904 ----
  			    func, bndrng[0], bndrng[1], size)
  	      : warning_at (&richloc, opt,
  			    (maybe
! 			     ? G_("specified bound [%E, %E] may exceed "
  				  "destination size %E")
  			     : G_("specified bound [%E, %E] exceeds "
  				  "destination size %E")),
diff -Nrcpad gcc-17-20260628/gcc/gimplify.cc gcc-17-20260705/gcc/gimplify.cc
*** gcc-17-20260628/gcc/gimplify.cc	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/gimplify.cc	Sun Jul  5 22:32:08 2026
*************** enum gimplify_omp_var_data
*** 185,190 ****
--- 185,193 ----
    /* Flag for GOVD_FIRSTPRIVATE: OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT.  */
    GOVD_FIRSTPRIVATE_IMPLICIT = 0x4000000,
  
+   /* Flag to indicate this an allocator for the uses_allocators clause.  */
+   GOVD_USES_ALLOCATORS_ALLOCATOR = 0x8000000,
+ 
    GOVD_DATA_SHARE_CLASS = (GOVD_SHARED | GOVD_PRIVATE | GOVD_FIRSTPRIVATE
  			   | GOVD_LASTPRIVATE | GOVD_REDUCTION | GOVD_LINEAR
  			   | GOVD_LOCAL)
*************** gimplify_bind_expr (tree *expr_p, gimple
*** 1291,1308 ****
  		 dynamic_allocators clause is present in the same compilation
  		 unit.  */
  	      bool missing_dyn_alloc = false;
! 	      if (alloc == NULL_TREE
! 		  && ((omp_requires_mask & OMP_REQUIRES_DYNAMIC_ALLOCATORS)
! 		      == 0))
  		{
  		  /* This comes too early for omp_discover_declare_target...,
  		     but should at least catch the most common cases.  */
  		  missing_dyn_alloc
! 		    = cgraph_node::get (current_function_decl)->offloadable;
  		  for (struct gimplify_omp_ctx *ctx2 = ctx;
  		       ctx2 && !missing_dyn_alloc; ctx2 = ctx2->outer_context)
  		    if (ctx2->code == OMP_TARGET)
! 		      missing_dyn_alloc = true;
  		}
  	      if (missing_dyn_alloc)
  		error_at (DECL_SOURCE_LOCATION (t),
--- 1294,1339 ----
  		 dynamic_allocators clause is present in the same compilation
  		 unit.  */
  	      bool missing_dyn_alloc = false;
! 	      if ((omp_requires_mask & OMP_REQUIRES_DYNAMIC_ALLOCATORS) == 0)
  		{
  		  /* This comes too early for omp_discover_declare_target...,
  		     but should at least catch the most common cases.  */
  		  missing_dyn_alloc
! 		    = (alloc == NULL_TREE
! 		       && cgraph_node::get (current_function_decl)->offloadable);
  		  for (struct gimplify_omp_ctx *ctx2 = ctx;
  		       ctx2 && !missing_dyn_alloc; ctx2 = ctx2->outer_context)
  		    if (ctx2->code == OMP_TARGET)
! 		      {
! 			if (alloc == NULL_TREE)
! 			  missing_dyn_alloc = true;
! 			else if (TREE_CODE (alloc) != INTEGER_CST)
! 			  {
! 			    tree alloc2 = alloc;
! 			    if (TREE_CODE (alloc2) == MEM_REF
! 				|| TREE_CODE (alloc2) == INDIRECT_REF)
! 			      alloc2 = TREE_OPERAND (alloc2, 0);
! 			    tree c2;
! 			    for (c2 = ctx2->clauses; c2;
! 				 c2 = OMP_CLAUSE_CHAIN (c2))
! 			      if (OMP_CLAUSE_CODE (c2)
! 				  == OMP_CLAUSE_USES_ALLOCATORS)
! 				{
! 				  tree t2
! 				    = OMP_CLAUSE_USES_ALLOCATORS_ALLOCATOR (c2);
! 				  if (operand_equal_p (alloc2, t2))
! 				    break;
! 				}
! 			    if (c2 == NULL_TREE)
! 			      error_at (EXPR_LOC_OR_LOC (
! 					  alloc, DECL_SOURCE_LOCATION (t)),
! 					"%qE in %<allocator%> clause inside a "
! 					"target region must be specified in an "
! 					"%<uses_allocators%> clause on the "
! 					"%<target%> directive", alloc2);
! 			  }
! 			break;
! 		      }
  		}
  	      if (missing_dyn_alloc)
  		error_at (DECL_SOURCE_LOCATION (t),
*************** omp_get_attachment (omp_mapping_group *g
*** 10866,10871 ****
--- 10897,10903 ----
  	  case GOMP_MAP_FIRSTPRIVATE_POINTER:
  	  case GOMP_MAP_FIRSTPRIVATE_REFERENCE:
  	  case GOMP_MAP_POINTER_TO_ZERO_LENGTH_ARRAY_SECTION:
+ 	  case GOMP_MAP_USES_ALLOCATORS:
  	    return NULL_TREE;
  
  	  case GOMP_MAP_ATTACH_DETACH:
*************** omp_get_attachment (omp_mapping_group *g
*** 10910,10915 ****
--- 10942,10948 ----
      case GOMP_MAP_FIRSTPRIVATE_INT:
      case GOMP_MAP_USE_DEVICE_PTR:
      case GOMP_MAP_ATTACH_ZERO_LENGTH_ARRAY_SECTION:
+     case GOMP_MAP_USES_ALLOCATORS:
        return NULL_TREE;
  
      default:
*************** omp_group_base (omp_mapping_group *grp,
*** 11198,11203 ****
--- 11231,11237 ----
      case GOMP_MAP_FIRSTPRIVATE_INT:
      case GOMP_MAP_USE_DEVICE_PTR:
      case GOMP_MAP_ATTACH_ZERO_LENGTH_ARRAY_SECTION:
+     case GOMP_MAP_USES_ALLOCATORS:
        return NULL_TREE;
  
      case GOMP_MAP_FIRSTPRIVATE_POINTER:
*************** gimplify_scan_omp_clauses (tree *list_p,
*** 14824,14831 ****
  	  break;
  
  	case OMP_CLAUSE_USES_ALLOCATORS:
! 	  sorry_at (OMP_CLAUSE_LOCATION (c), "%<uses_allocators%> clause");
! 	  remove = 1;
  	  break;
  
  	case OMP_CLAUSE_ORDERED:
--- 14858,14872 ----
  	  break;
  
  	case OMP_CLAUSE_USES_ALLOCATORS:
! 	  if (TREE_CODE (OMP_CLAUSE_USES_ALLOCATORS_ALLOCATOR (c))
! 	      != INTEGER_CST)
! 	    {
! 	      decl = OMP_CLAUSE_USES_ALLOCATORS_ALLOCATOR (c);
! 	      omp_add_variable (ctx, decl,
! 				GOVD_SEEN | GOVD_USES_ALLOCATORS_ALLOCATOR);
! 	    }
! 	  else
! 	    remove = true;
  	  break;
  
  	case OMP_CLAUSE_ORDERED:
*************** gimplify_scan_omp_clauses (tree *list_p,
*** 14984,14989 ****
--- 15025,15073 ----
  	      remove = true;
  	      break;
  	    }
+ 	  if ((omp_requires_mask & OMP_REQUIRES_DYNAMIC_ALLOCATORS) == 0
+ 	      && OMP_CLAUSE_ALLOCATE_ALLOCATOR (c)
+ 	      && TREE_CODE (OMP_CLAUSE_ALLOCATE_ALLOCATOR (c)) != INTEGER_CST)
+ 	    {
+ 	      tree allocator = OMP_CLAUSE_ALLOCATE_ALLOCATOR (c);
+ 	      tree clauses = NULL_TREE;
+ 
+ 	      /* Get clause list of the nearest enclosing target construct.  */
+ 	      if (ctx->code == OMP_TARGET)
+ 		clauses = *orig_list_p;
+ 	      else
+ 		{
+ 		  struct gimplify_omp_ctx *tctx = ctx->outer_context;
+ 		  while (tctx && tctx->code != OMP_TARGET)
+ 		    tctx = tctx->outer_context;
+ 		  if (tctx)
+ 		    clauses = tctx->clauses;
+ 		}
+ 
+ 	      if (clauses)
+ 		{
+ 		  tree uc;
+ 		  if (TREE_CODE (allocator) == MEM_REF
+ 		      || TREE_CODE (allocator) == INDIRECT_REF)
+ 		    allocator = TREE_OPERAND (allocator, 0);
+ 		  for (uc = clauses; uc; uc = OMP_CLAUSE_CHAIN (uc))
+ 		    if (OMP_CLAUSE_CODE (uc) == OMP_CLAUSE_USES_ALLOCATORS)
+ 		      {
+ 			tree uc_allocator
+ 			  = OMP_CLAUSE_USES_ALLOCATORS_ALLOCATOR (uc);
+ 			if (operand_equal_p (allocator, uc_allocator))
+ 			  break;
+ 		      }
+ 		  if (uc == NULL_TREE)
+ 		    {
+ 		      error_at (OMP_CLAUSE_LOCATION (c), "allocator %qE "
+ 				"requires %<uses_allocators(%E)%> clause in "
+ 				"target region", allocator, allocator);
+ 		      remove = true;
+ 		      break;
+ 		    }
+ 		}
+ 	    }
  	  if (gimplify_expr (&OMP_CLAUSE_ALLOCATE_ALLOCATOR (c), pre_p, NULL,
  			     is_gimple_val, fb_rvalue) == GS_ERROR)
  	    {
*************** gimplify_adjust_omp_clauses_1 (splay_tre
*** 15302,15307 ****
--- 15386,15393 ----
        code = OMP_CLAUSE__CONDTEMP_;
        gimple_add_tmp_var (decl);
      }
+   else if (flags & GOVD_USES_ALLOCATORS_ALLOCATOR)
+     return 0;
    else
      gcc_unreachable ();
  
diff -Nrcpad gcc-17-20260628/gcc/lra-constraints.cc gcc-17-20260705/gcc/lra-constraints.cc
*** gcc-17-20260628/gcc/lra-constraints.cc	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/lra-constraints.cc	Sun Jul  5 22:32:08 2026
*************** get_equiv (rtx x)
*** 581,587 ****
        return res;
      }
    if ((res = ira_reg_equiv[regno].constant) != NULL_RTX)
!     return res;
    if ((res = ira_reg_equiv[regno].invariant) != NULL_RTX)
      return res;
    gcc_unreachable ();
--- 581,591 ----
        return res;
      }
    if ((res = ira_reg_equiv[regno].constant) != NULL_RTX)
!     {
!       if (targetm.cannot_substitute_const_equiv_p (res))
! 	return x;
!       return res;
!     }
    if ((res = ira_reg_equiv[regno].invariant) != NULL_RTX)
      return res;
    gcc_unreachable ();
*************** simplify_operand_subreg (int nop, machin
*** 1855,1860 ****
--- 1859,1894 ----
      }
    else if (REG_P (reg) && REGNO (reg) < FIRST_PSEUDO_REGISTER)
      {
+       /* A narrowing subreg of a hard register that is not representable as a
+ 	 hard register (its offset does not fall on a register boundary) cannot
+ 	 be turned into one, and would otherwise be resolved to the wrong part
+ 	 of the register.  Reload it through memory so that the correct bytes
+ 	 are accessed, as is done for pseudos below.  Leave the frame, arg and
+ 	 stack pointers alone: simplify_subreg_regno can reject them simply
+ 	 because reload is not finished yet.  */
+       if (partial_subreg_p (mode, innermode)
+ 	  && REGNO (reg) != FRAME_POINTER_REGNUM
+ 	  && REGNO (reg) != ARG_POINTER_REGNUM
+ 	  && REGNO (reg) != STACK_POINTER_REGNUM
+ 	  && simplify_subreg_regno (REGNO (reg), innermode,
+ 				    SUBREG_BYTE (operand), mode) < 0)
+ 	{
+ 	  if (get_reload_reg (type, innermode, reg, NO_REGS, NULL,
+ 			      true, false, "non-representable subreg", &new_reg))
+ 	    {
+ 	      bitmap_set_bit (&lra_subreg_reload_pseudos, REGNO (new_reg));
+ 	      bool insert_before = (type != OP_OUT
+ 				    || read_modify_subreg_p (operand));
+ 	      bool insert_after = (type != OP_IN);
+ 	      insert_move_for_subreg (insert_before ? &before : NULL,
+ 				      insert_after ? &after : NULL,
+ 				      reg, new_reg);
+ 	    }
+ 	  SUBREG_REG (operand) = new_reg;
+ 	  lra_process_new_insns (curr_insn, before, after,
+ 				 "Inserting non-representable subreg reload");
+ 	  return true;
+ 	}
        alter_subreg (curr_id->operand_loc[nop], false);
        return true;
      }
*************** get_dependent_filter (constraint_num cn,
*** 2329,2342 ****
    gcc_assert (ref_opno >= 0 && ref_opno < curr_static_id->n_operands);
  
    rtx ref_op = *curr_id->operand_loc[ref_opno];
    if (!REG_P (ref_op))
      return nullptr;
    unsigned int ref_regno = REGNO (ref_op);
    if (ref_regno >= FIRST_PSEUDO_REGISTER)
      {
        int ref_hard_regno = reg_renumber[ref_regno];
        if (ref_hard_regno < 0)
! 	return nullptr;
        ref_regno = (unsigned int) ref_hard_regno;
      }
  
--- 2363,2384 ----
    gcc_assert (ref_opno >= 0 && ref_opno < curr_static_id->n_operands);
  
    rtx ref_op = *curr_id->operand_loc[ref_opno];
+   if (SUBREG_P (ref_op))
+      ref_op = SUBREG_REG (ref_op);
    if (!REG_P (ref_op))
      return nullptr;
    unsigned int ref_regno = REGNO (ref_op);
    if (ref_regno >= FIRST_PSEUDO_REGISTER)
      {
        int ref_hard_regno = reg_renumber[ref_regno];
+       /* Even with a pseudo reference op, the filter can still reject
+ 	 based on the partner.  We call it with INVALID_REGNUM
+ 	 to give it a chance to do so.  Otherwise we'd introduce
+ 	 an "all choices legal" filter that might later
+ 	 "change its mind" once there is a fixed reference.  */
        if (ref_hard_regno < 0)
! 	return lra_get_dependent_filter (id, mode, INVALID_REGNUM,
! 					 GET_MODE (ref_op), false);
        ref_regno = (unsigned int) ref_hard_regno;
      }
  
diff -Nrcpad gcc-17-20260628/gcc/match-sat-alu.pd gcc-17-20260705/gcc/match-sat-alu.pd
*** gcc-17-20260628/gcc/match-sat-alu.pd	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/match-sat-alu.pd	Sun Jul  5 22:32:08 2026
*************** along with GCC; see the file COPYING3.
*** 572,577 ****
--- 572,601 ----
    (match (unsigned_integer_sat_mul @0 @1)
     /* SAT_U_MUL (X, Y) = {
  	WT x = (WT)a * (WT)b;
+ 	NT hi = x >> (sizeof(NT) * 8);
+ 	NT lo = (NT)x;
+ 	NT lo = (NT)x;
+ 	return hi == 0 ? lo : -1;
+       } while WT is uint128_t, uint64_t, uint32_t, uint16_t,
+ 	and T is uint64_t, uint32_t, uint16_t, uint8_t.  */
+    (convert (cond^ (eq (convert (rshift (mult:c@3 (convert @0) (convert @1))
+ 					INTEGER_CST@2))
+ 		        integer_zerop)
+ 		   @3 INTEGER_CST@4))
+    (if (types_match (type, @0, @1) && tree_fits_uhwi_p (@2))
+     (with
+      {
+       unsigned prec = TYPE_PRECISION (type);
+       unsigned widen_prec = TYPE_PRECISION (TREE_TYPE (@3));
+       wide_int max = wi::mask (prec, false, widen_prec);
+ 
+       bool c2_is_type_prec_p = tree_to_uhwi (@2) == prec;
+       bool c4_is_max_p = wi::eq_p (wi::to_wide (@4), max);
+      }
+      (if (c2_is_type_prec_p && c4_is_max_p)))))
+   (match (unsigned_integer_sat_mul @0 @1)
+    /* SAT_U_MUL (X, Y) = {
+ 	WT x = (WT)a * (WT)b;
  	NT max = -1;
  	bool overflow_p = x > (WT)max || x > (WT)(max - 1);
  	return -(NT)(overflow_p) | (NT)x;
diff -Nrcpad gcc-17-20260628/gcc/match.pd gcc-17-20260705/gcc/match.pd
*** gcc-17-20260628/gcc/match.pd	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/match.pd	Sun Jul  5 22:32:08 2026
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 1730,1740 ****
       (convert (bit_and (negate (convert:utype { pmop[0]; }))
  		       (convert:utype @1)))))))
  
! /* X % Y is smaller than Y.  */
! (for cmp (lt ge)
   (simplify
!   (cmp:c (trunc_mod tree_expr_nonnegative_p@0 tree_expr_nonnegative_p@1) @1)
!   { constant_boolean_node (cmp == LT_EXPR, type); }))
  
  /* x | ~0 -> ~0  */
  (simplify
--- 1730,1758 ----
       (convert (bit_and (negate (convert:utype { pmop[0]; }))
  		       (convert:utype @1)))))))
  
! /* (signed)A >= 0 && (A & INT_MAX) != 0  -->  (signed)A > 0
!    (signed)A <  0 || (A & INT_MAX) == 0  -->  (signed)A <= 0  */
! (for op      (bit_and  truth_and  bit_ior  truth_or)
!      signop  (ge       ge         lt       lt)
!      maskop  (ne       ne         eq       eq)
!      resop   (gt       gt         le       le)
   (simplify
!   (op:c
!    (signop (nop_convert?@2 @0) integer_zerop)
!    (maskop (bit_and @0 INTEGER_CST@3) integer_zerop))
!   (if (INTEGRAL_TYPE_P (TREE_TYPE (@0))
!        && !TYPE_UNSIGNED (TREE_TYPE (@2))
!        && wi::eq_p (wi::to_wide (@3),
! 		    wi::max_value (TYPE_PRECISION (TREE_TYPE (@0)), SIGNED)))
!    (resop @2 { build_zero_cst (TREE_TYPE (@2)); }))))
! 
! /* X % Y < Y -> Y >= 0
!    X % Y >= Y -> Y < 0  */
! (for ltge (lt ge)
!      gelt (ge lt)
!  (simplify
!   (ltge:c (trunc_mod @0 @1) @1)
!   (gelt @1 { build_zero_cst (TREE_TYPE (@1)); })))
  
  /* x | ~0 -> ~0  */
  (simplify
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 3766,3771 ****
--- 3784,3809 ----
        && expand_vec_cmp_expr_p (TREE_TYPE (@0), type,  rcmp)))
      (rcmp @0 @1))))
  
+ /* Optimize (a CMP b) &| (a CMP b)
+    using the helper combine_comparisons function.  */
+ (for bitop (bit_and bit_ior)
+  (for cmp1 (tcc_comparison)
+   (for cmp2 (tcc_comparison)
+    (for rcmp (tcc_comparison)
+     (simplify
+      (bitop (cmp1 @0 @1) (cmp2 @0 @1))
+      (with {
+        tree_code rescode;
+        tree res;
+        bool honor_nans = HONOR_NANS (@0);
+        rescode = combine_comparisons (bitop, cmp1, cmp2,
+ 				      type, honor_nans, &res);
+       }
+       (if (rescode == INTEGER_CST)
+        { res; }
+        (if (rescode == rcmp)
+         (rcmp @0 @1)))))))))
+ 
  /* (type)([0,1]@a != 0) -> (type)a
     (type)([0,1]@a == 1) -> (type)a
     (type)([0,1]@a == 0) -> a ^ 1
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 4049,4054 ****
--- 4087,4124 ----
         (plus (convert @0) (op @2 (convert @1))))))
  #endif
  
+ /* Inverse of the above: (T)(A) +- CST -> (T)(A +- CST') when T is a
+    widening conversion from a type with undefined overflow and the outer
+    type wraps.  This allows VN to discover that (T)A + (T)C == (T)(A + C)
+    regardless of which form appears first in program order.  PR124545.
+    The rewrite is unsound for unsigned inner types: the narrow op wraps
+    mod 2^prec (defined) while the widened op does not, changing the
+    observed value.  Cover the unsigned case separately once ranger can
+    prove no wrap.  */
+ #if GIMPLE
+   (for op (plus minus)
+    (simplify
+     (op (convert @0) INTEGER_CST@1)
+      (if (TREE_CODE (TREE_TYPE (@0)) == INTEGER_TYPE
+ 	  && TREE_CODE (type) == INTEGER_TYPE
+ 	  && TYPE_PRECISION (type) > TYPE_PRECISION (TREE_TYPE (@0))
+ 	  && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (@0))
+ 	  && !TYPE_OVERFLOW_SANITIZED (TREE_TYPE (@0))
+ 	  && TYPE_OVERFLOW_WRAPS (type)
+ 	  /* CST must be the sign-extension of its low inner-precision bits,
+ 	     otherwise narrowing changes the value.  Use min_precision (..,
+ 	     SIGNED) rather than int_fits_type_p so that small negative offsets
+ 	     encoded as large unsigned constants (e.g. -1 as sizetype) still
+ 	     qualify.  */
+ 	  && wi::min_precision (wi::to_wide (@1), SIGNED)
+ 	     <= TYPE_PRECISION (TREE_TYPE (@0)))
+        (with {
+ 	  wide_int c1 = wi::to_wide (@1);
+ 	  tree inner_cst = wide_int_to_tree (TREE_TYPE (@0),
+ 			     wi::sext (c1, TYPE_PRECISION (TREE_TYPE (@0)))); }
+ 	(convert (op! @0 { inner_cst; }))))))
+ #endif
+ 
  /* (T)(A) +- (T)(B) -> (T)(A +- B) only when (A +- B) could be simplified
     to a simple value.  */
    (for op (plus minus)
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 5101,5107 ****
     Fold x & (x >> (TYPE_PRECISION (type) - 1)) to min (x, 0)
     Fold x & (~ (x >> (TYPE_PRECISION (type) - 1))) to max (x, 0)
  */
! #ifdef GIMPLE
  (for bitop (bit_ior bit_and)
       result (max min)
       rresult (min max)
--- 5171,5177 ----
     Fold x & (x >> (TYPE_PRECISION (type) - 1)) to min (x, 0)
     Fold x & (~ (x >> (TYPE_PRECISION (type) - 1))) to max (x, 0)
  */
! #if GIMPLE
  (for bitop (bit_ior bit_and)
       result (max min)
       rresult (min max)
*************** and,
*** 11903,11923 ****
  (match (ctz_table_index @1 @2 @3)
    (rshift (mult (bit_and:c (negate @1) @1) INTEGER_CST@2) INTEGER_CST@3))
  
! /* Match count leading zeros for simplify_count_zeroes in forwprop.
!    One canonical form is 31 - array[idx] where IDX is computed from X
!    by first setting all bits from the topmost set bits down via a
!    series of shifts and ors to X' and then computing (X' * C) >> SHIFT.  */
! (match (clz_table_index @1 @2 @3)
!   (rshift (mult
!    (bit_ior (rshift
!      (bit_ior@d (rshift
!        (bit_ior@c (rshift
!          (bit_ior@b (rshift
! 	   (bit_ior@a (rshift @1 INTEGER_CST@c1) @1)
! 	   INTEGER_CST@c2) @a)
! 	 INTEGER_CST@c4) @b)
!        INTEGER_CST@c8) @c)
!      INTEGER_CST@c16) @d) INTEGER_CST@2) INTEGER_CST@3)
    (if (INTEGRAL_TYPE_P (type)
         && TYPE_UNSIGNED (type)
         && TYPE_PRECISION (type) == 32
--- 11973,11992 ----
  (match (ctz_table_index @1 @2 @3)
    (rshift (mult (bit_and:c (negate @1) @1) INTEGER_CST@2) INTEGER_CST@3))
  
! /* Helpers for clz_table_index and its variants: match the 5- or
!    6-stage MSB OR-cascade that drives a DeBruijn CLZ lookup.  Given a
!    value @1, the cascade sets every bit from 0 to the MSB of @1,
!    producing 2^(k+1) - 1 where k is the MSB position.  */
! (match (msb_or_cascade_32 @1)
!   (bit_ior (rshift
!     (bit_ior@d (rshift
!       (bit_ior@c (rshift
! 	(bit_ior@b (rshift
! 	  (bit_ior@a (rshift @1 INTEGER_CST@c1) @1)
! 	  INTEGER_CST@c2) @a)
! 	INTEGER_CST@c4) @b)
!       INTEGER_CST@c8) @c)
!     INTEGER_CST@c16) @d)
    (if (INTEGRAL_TYPE_P (type)
         && TYPE_UNSIGNED (type)
         && TYPE_PRECISION (type) == 32
*************** and,
*** 11926,11944 ****
         && compare_tree_int (@c4, 4) == 0
         && compare_tree_int (@c8, 8) == 0
         && compare_tree_int (@c16, 16) == 0)))
! (match (clz_table_index @1 @2 @3)
!   (rshift (mult
!    (bit_ior (rshift
!      (bit_ior@e (rshift
!        (bit_ior@d (rshift
!          (bit_ior@c (rshift
!            (bit_ior@b (rshift
! 	     (bit_ior@a (rshift @1 INTEGER_CST@c1) @1)
! 	     INTEGER_CST@c2) @a)
! 	   INTEGER_CST@c4) @b)
!          INTEGER_CST@c8) @c)
!        INTEGER_CST@c16) @d)
!      INTEGER_CST@c32) @e) INTEGER_CST@2) INTEGER_CST@3)
    (if (INTEGRAL_TYPE_P (type)
         && TYPE_UNSIGNED (type)
         && TYPE_PRECISION (type) == 64
--- 11995,12013 ----
         && compare_tree_int (@c4, 4) == 0
         && compare_tree_int (@c8, 8) == 0
         && compare_tree_int (@c16, 16) == 0)))
! 
! (match (msb_or_cascade_64 @1)
!   (bit_ior (rshift
!     (bit_ior@e (rshift
!       (bit_ior@d (rshift
! 	(bit_ior@c (rshift
! 	  (bit_ior@b (rshift
! 	    (bit_ior@a (rshift @1 INTEGER_CST@c1) @1)
! 	    INTEGER_CST@c2) @a)
! 	  INTEGER_CST@c4) @b)
! 	INTEGER_CST@c8) @c)
!       INTEGER_CST@c16) @d)
!     INTEGER_CST@c32) @e)
    (if (INTEGRAL_TYPE_P (type)
         && TYPE_UNSIGNED (type)
         && TYPE_PRECISION (type) == 64
*************** and,
*** 11949,11954 ****
--- 12018,12046 ----
         && compare_tree_int (@c16, 16) == 0
         && compare_tree_int (@c32, 32) == 0)))
  
+ /* Match count leading zeros for simplify_count_zeroes in forwprop.
+    One canonical form is 31 - array[idx] where IDX is computed from X
+    by first setting all bits from the topmost set bits down via a
+    series of shifts and ors to X' and then computing (X' * C) >> SHIFT.  */
+ (match (clz_table_index @1 @2 @3)
+   (rshift (mult (msb_or_cascade_32 @1) INTEGER_CST@2) INTEGER_CST@3))
+ (match (clz_table_index @1 @2 @3)
+   (rshift (mult (msb_or_cascade_64 @1) INTEGER_CST@2) INTEGER_CST@3))
+ 
+ /* Match count leading zeros for simplify_count_zeroes in forwprop,
+    variant that isolates the MSB as a power of two via (s - (s >> 1))
+    after the OR-cascade.  For s = 2^(k+1) - 1 (the cascade output),
+    (s - (s >> 1)) equals 2^k, so the subsequent DeBruijn
+    multiply-and-shift is a CTZ-style lookup on the isolated MSB.  The
+    table has to satisfy the direct CTZ DeBruijn property (validated by
+    the CTZ checkfn in simplify_count_zeroes).
+    PR tree-optimization/122569.  */
+ (match (clz_msb_iso_table_index @1 @2 @3)
+   (rshift (mult
+    (minus (msb_or_cascade_64@f @1) (rshift @f INTEGER_CST@sub1))
+    INTEGER_CST@2) INTEGER_CST@3)
+   (if (compare_tree_int (@sub1, 1) == 0)))
+ 
  /* Floatint point/integer comparison and integer->integer
     or floating point -> float point conversion.  */
  (match (cond_expr_convert_p @0 @2 @3 @6)
diff -Nrcpad gcc-17-20260628/gcc/objc/ChangeLog gcc-17-20260705/gcc/objc/ChangeLog
*** gcc-17-20260628/gcc/objc/ChangeLog	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/objc/ChangeLog	Sun Jul  5 22:32:08 2026
***************
*** 1,3 ****
--- 1,27 ----
+ 2026-07-03  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR objc/124260
+ 	* objc-act.cc (objc_create_temporary_var, objc_build_struct,
+ 	synth_module_prologue, objc_build_internal_const_str_type,
+ 	objc_begin_catch_clause, objc_push_parm, synth_self_and_ucmd_args,
+ 	start_method_def, objc_start_function,
+ 	get_super_receiver): Use build_lang_decl for Objective-C++.
+ 	* objc-act.h (objc_build_decl): New.
+ 	* objc-gnu-runtime-abi-01.cc (gnu_runtime_01_initialize,
+ 	objc_add_static_instance, handle_class_ref): use build_lang_decl
+ 	for Objective-C++.
+ 	* objc-next-runtime-abi-01.cc (next_runtime_01_initialize,
+ 	next_runtime_abi_01_build_const_string_constructor): Likewise.
+ 	* objc-next-runtime-abi-02.cc (next_runtime_02_initialize,
+ 	next_runtime_abi_02_build_const_string_constructor): Likewise.
+ 	* objc-runtime-shared-support.cc (create_field_decl,
+ 	start_var_decl): Likewise.
+ 
+ 2026-06-28  Kevin Stefanov  <kevinstefanov15@gmail.com>
+ 
+ 	PR middle-end/125274
+ 	* objc-act.h (imp_entry): Likewise.
+ 
  2026-06-19  Léo Hardt  <leom.hardt@inf.ufrgs.br>
  
  	* objc-act.cc: Removed orphaned comment from 69f293c
diff -Nrcpad gcc-17-20260628/gcc/objc/objc-act.cc gcc-17-20260705/gcc/objc/objc-act.cc
*** gcc-17-20260628/gcc/objc/objc-act.cc	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/objc/objc-act.cc	Sun Jul  5 22:32:08 2026
*************** objc_create_temporary_var (tree type, co
*** 272,283 ****
  
    if (name != NULL)
      {
!       decl = build_decl (input_location,
  			 VAR_DECL, get_identifier (name), type);
      }
    else
      {
!       decl = build_decl (input_location,
  			 VAR_DECL, NULL_TREE, type);
      }
    TREE_USED (decl) = 1;
--- 272,283 ----
  
    if (name != NULL)
      {
!       decl = objc_build_decl (input_location,
  			 VAR_DECL, get_identifier (name), type);
      }
    else
      {
!       decl = objc_build_decl (input_location,
  			 VAR_DECL, NULL_TREE, type);
      }
    TREE_USED (decl) = 1;
*************** objc_build_struct (tree klass, tree fiel
*** 2230,2236 ****
      {
        /* Prepend a packed variant of the base class into the layout.  This
  	 is necessary to preserve ObjC ABI compatibility.  */
!       tree base = build_decl (input_location,
  			      FIELD_DECL, NULL_TREE, super);
        tree field = TYPE_FIELDS (super);
  
--- 2230,2236 ----
      {
        /* Prepend a packed variant of the base class into the layout.  This
  	 is necessary to preserve ObjC ABI compatibility.  */
!       tree base = objc_build_decl (input_location,
  			      FIELD_DECL, NULL_TREE, super);
        tree field = TYPE_FIELDS (super);
  
*************** synth_module_prologue (void)
*** 3110,3128 ****
    objc_selector_name = get_identifier (SEL_TYPEDEF_NAME);
  
    /* Declare the 'id', 'instancetype' and 'Class' typedefs.  */
!   type = lang_hooks.decls.pushdecl (build_decl (input_location,
  						TYPE_DECL,
  						objc_object_name,
  						objc_object_type));
    suppress_warning (type);
  
!   type = lang_hooks.decls.pushdecl (build_decl (input_location,
  						TYPE_DECL,
  						objc_instancetype_name,
  						objc_instancetype_type));
    suppress_warning (type);
  
!   type = lang_hooks.decls.pushdecl (build_decl (input_location,
  						TYPE_DECL,
  						objc_class_name,
  						objc_class_type));
--- 3110,3128 ----
    objc_selector_name = get_identifier (SEL_TYPEDEF_NAME);
  
    /* Declare the 'id', 'instancetype' and 'Class' typedefs.  */
!   type = lang_hooks.decls.pushdecl (objc_build_decl (input_location,
  						TYPE_DECL,
  						objc_object_name,
  						objc_object_type));
    suppress_warning (type);
  
!   type = lang_hooks.decls.pushdecl (objc_build_decl (input_location,
  						TYPE_DECL,
  						objc_instancetype_name,
  						objc_instancetype_type));
    suppress_warning (type);
  
!   type = lang_hooks.decls.pushdecl (objc_build_decl (input_location,
  						TYPE_DECL,
  						objc_class_name,
  						objc_class_type));
*************** static tree
*** 3234,3246 ****
  objc_build_internal_const_str_type (void)
  {
    tree type = (*lang_hooks.types.make_type) (RECORD_TYPE);
!   tree fields = build_decl (input_location,
  			    FIELD_DECL, NULL_TREE, ptr_type_node);
!   tree field = build_decl (input_location,
  			   FIELD_DECL, NULL_TREE, ptr_type_node);
  
    DECL_CHAIN (field) = fields; fields = field;
!   field = build_decl (input_location,
  		      FIELD_DECL, NULL_TREE, unsigned_type_node);
    DECL_CHAIN (field) = fields; fields = field;
    /* NB: The finish_builtin_struct() routine expects FIELD_DECLs in
--- 3234,3246 ----
  objc_build_internal_const_str_type (void)
  {
    tree type = (*lang_hooks.types.make_type) (RECORD_TYPE);
!   tree fields = objc_build_decl (input_location,
  			    FIELD_DECL, NULL_TREE, ptr_type_node);
!   tree field = objc_build_decl (input_location,
  			   FIELD_DECL, NULL_TREE, ptr_type_node);
  
    DECL_CHAIN (field) = fields; fields = field;
!   field = objc_build_decl (input_location,
  		      FIELD_DECL, NULL_TREE, unsigned_type_node);
    DECL_CHAIN (field) = fields; fields = field;
    /* NB: The finish_builtin_struct() routine expects FIELD_DECLs in
*************** objc_build_string_object (tree string)
*** 3386,3402 ****
  tree
  objc_build_constructor (tree type, vec<constructor_elt, va_gc> *elts)
  {
    tree constructor = build_constructor (type, elts);
  
    TREE_CONSTANT (constructor) = 1;
    TREE_STATIC (constructor) = 1;
    TREE_READONLY (constructor) = 1;
- 
- #ifdef OBJCPLUS
-   /* If we know the initializer, then set the type to what C++ expects.  */
-   if (elts && !(*elts)[0].index)
-     TREE_TYPE (constructor) = init_list_type_node;
- #endif
    return constructor;
  }
  
--- 3386,3397 ----
  tree
  objc_build_constructor (tree type, vec<constructor_elt, va_gc> *elts)
  {
+   gcc_checking_assert (!elts || (*elts)[0].index);
    tree constructor = build_constructor (type, elts);
  
    TREE_CONSTANT (constructor) = 1;
    TREE_STATIC (constructor) = 1;
    TREE_READONLY (constructor) = 1;
    return constructor;
  }
  
*************** objc_begin_catch_clause (tree decl)
*** 4345,4351 ****
       else
         {
  	 /* The parser passed in a PARM_DECL, but what we really want is a VAR_DECL.  */
! 	 decl = build_decl (input_location,
  			    VAR_DECL, DECL_NAME (decl), TREE_TYPE (decl));
         }
       lang_hooks.decls.pushdecl (decl);
--- 4340,4346 ----
       else
         {
  	 /* The parser passed in a PARM_DECL, but what we really want is a VAR_DECL.  */
! 	 decl = objc_build_decl (input_location,
  			    VAR_DECL, DECL_NAME (decl), TREE_TYPE (decl));
         }
       lang_hooks.decls.pushdecl (decl);
*************** objc_push_parm (tree parm)
*** 8455,8461 ****
    /* If the parameter type has been decayed, a new PARM_DECL needs to be
       built as well.  */
    if (type != TREE_TYPE (parm))
!     parm = build_decl (input_location, PARM_DECL, DECL_NAME (parm), type);
  
    DECL_ARG_TYPE (parm)
      = lang_hooks.types.type_promotes_to (TREE_TYPE (parm));
--- 8450,8456 ----
    /* If the parameter type has been decayed, a new PARM_DECL needs to be
       built as well.  */
    if (type != TREE_TYPE (parm))
!     parm = objc_build_decl (input_location, PARM_DECL, DECL_NAME (parm), type);
  
    DECL_ARG_TYPE (parm)
      = lang_hooks.types.type_promotes_to (TREE_TYPE (parm));
*************** synth_self_and_ucmd_args (void)
*** 8527,8537 ****
      self_type = objc_object_type;
  
    /* id self; */
!   objc_push_parm (build_decl (input_location,
  			      PARM_DECL, self_id, self_type));
  
    /* SEL _cmd; */
!   objc_push_parm (build_decl (input_location,
  			      PARM_DECL, ucmd_id, objc_selector_type));
  }
  
--- 8522,8532 ----
      self_type = objc_object_type;
  
    /* id self; */
!   objc_push_parm (objc_build_decl (input_location,
  			      PARM_DECL, self_id, self_type));
  
    /* SEL _cmd; */
!   objc_push_parm (objc_build_decl (input_location,
  			      PARM_DECL, ucmd_id, objc_selector_type));
  }
  
*************** start_method_def (tree method, tree expr
*** 8576,8582 ****
        tree type = TREE_VALUE (TREE_TYPE (parmlist));
        tree parm;
  
!       parm = build_decl (input_location,
  			 PARM_DECL, KEYWORD_ARG_NAME (parmlist), type);
        decl_attributes (&parm, DECL_ATTRIBUTES (parmlist), 0);
        objc_push_parm (parm);
--- 8571,8577 ----
        tree type = TREE_VALUE (TREE_TYPE (parmlist));
        tree parm;
  
!       parm = objc_build_decl (input_location,
  			 PARM_DECL, KEYWORD_ARG_NAME (parmlist), type);
        decl_attributes (&parm, DECL_ATTRIBUTES (parmlist), 0);
        objc_push_parm (parm);
*************** objc_start_function (tree name, tree typ
*** 8813,8819 ****
  #endif
  		     )
  {
!   tree fndecl = build_decl (input_location,
  			    FUNCTION_DECL, name, type);
  
  #ifdef OBJCPLUS
--- 8808,8814 ----
  #endif
  		     )
  {
!   tree fndecl = objc_build_decl (input_location,
  			    FUNCTION_DECL, name, type);
  
  #ifdef OBJCPLUS
*************** objc_start_function (tree name, tree typ
*** 8836,8842 ****
    push_scope ();
    declare_parm_level ();
    DECL_RESULT (current_function_decl)
!     = build_decl (input_location,
  		  RESULT_DECL, NULL_TREE,
  		  TREE_TYPE (TREE_TYPE (current_function_decl)));
    DECL_ARTIFICIAL (DECL_RESULT (current_function_decl)) = 1;
--- 8831,8837 ----
    push_scope ();
    declare_parm_level ();
    DECL_RESULT (current_function_decl)
!     = objc_build_decl (input_location,
  		  RESULT_DECL, NULL_TREE,
  		  TREE_TYPE (TREE_TYPE (current_function_decl)));
    DECL_ARTIFICIAL (DECL_RESULT (current_function_decl)) = 1;
*************** get_super_receiver (void)
*** 8993,8999 ****
        bool inst_meth;
        if (!UOBJC_SUPER_decl)
        {
! 	UOBJC_SUPER_decl = build_decl (input_location,
  				       VAR_DECL, get_identifier (TAG_SUPER),
  				       objc_super_template);
  	/* This prevents `unused variable' warnings when compiling with -Wall.  */
--- 8988,8994 ----
        bool inst_meth;
        if (!UOBJC_SUPER_decl)
        {
! 	UOBJC_SUPER_decl = objc_build_decl (input_location,
  				       VAR_DECL, get_identifier (TAG_SUPER),
  				       objc_super_template);
  	/* This prevents `unused variable' warnings when compiling with -Wall.  */
diff -Nrcpad gcc-17-20260628/gcc/objc/objc-act.h gcc-17-20260705/gcc/objc/objc-act.h
*** gcc-17-20260628/gcc/objc/objc-act.h	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/objc/objc-act.h	Sun Jul  5 22:32:08 2026
*************** is_ivar (tree decl_chain, tree ident)
*** 778,781 ****
--- 778,795 ----
    return NULL_TREE;
  }
  
+ 
+ #ifdef OBJCPLUS
+ inline tree
+ objc_build_decl (location_t l, enum tree_code c, tree n, tree t)
+ {
+   return build_lang_decl_loc (l, c, n, t);
+ }
+ #else
+ inline tree
+ objc_build_decl (location_t l, enum tree_code c, tree n, tree t)
+ {
+   return build_decl (l, c, n, t);
+ }
+ #endif
  #endif /* GCC_OBJC_ACT_H */
diff -Nrcpad gcc-17-20260628/gcc/objc/objc-gnu-runtime-abi-01.cc gcc-17-20260705/gcc/objc/objc-gnu-runtime-abi-01.cc
*** gcc-17-20260628/gcc/objc/objc-gnu-runtime-abi-01.cc	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/objc/objc-gnu-runtime-abi-01.cc	Sun Jul  5 22:32:08 2026
*************** along with GCC; see the file COPYING3.
*** 25,30 ****
--- 25,31 ----
  #include "tree.h"
  #include "stringpool.h"
  #include "attribs.h"
+ #include "stor-layout.h"
  
  #ifdef OBJCPLUS
  #include "cp/cp-tree.h"
*************** static void gnu_runtime_01_initialize (v
*** 209,215 ****
    objc_selector_type = build_pointer_type (type);
  
    /* SEL typedef.  */
!   type = lang_hooks.decls.pushdecl (build_decl (input_location,
  						TYPE_DECL,
  						objc_selector_name,
  						objc_selector_type));
--- 210,216 ----
    objc_selector_type = build_pointer_type (type);
  
    /* SEL typedef.  */
!   type = lang_hooks.decls.pushdecl (objc_build_decl (input_location,
  						TYPE_DECL,
  						objc_selector_name,
  						objc_selector_type));
*************** build_selector_table_decl (void)
*** 495,503 ****
    tree temp;
  
    build_selector_template ();
-   temp = build_array_type (objc_selector_template, NULL_TREE);
  
!   UOBJC_SELECTOR_TABLE_decl = start_var_decl (temp, "_OBJC_SELECTOR_TABLE");
    /* Squash `defined but not used' warning check_global_declaration.  */
    TREE_USED (UOBJC_SELECTOR_TABLE_decl) = 1;
    OBJCMETA (UOBJC_SELECTOR_TABLE_decl, objc_meta, meta_base);
--- 496,506 ----
    tree temp;
  
    build_selector_template ();
  
!   /* We need a forward reference, but do not know the real size at this
!      point.  */
!   temp = build_sized_array_type (objc_selector_template, 1);
!   UOBJC_SELECTOR_TABLE_decl = start_meta_decl (temp, "_OBJC_SELECTOR_TABLE");
    /* Squash `defined but not used' warning check_global_declaration.  */
    TREE_USED (UOBJC_SELECTOR_TABLE_decl) = 1;
    OBJCMETA (UOBJC_SELECTOR_TABLE_decl, objc_meta, meta_base);
*************** gnu_runtime_abi_01_class_decl (tree klas
*** 520,526 ****
    char buf[BUFSIZE];
    snprintf (buf, BUFSIZE, "_OBJC_Class_%s",
  	    IDENTIFIER_POINTER (CLASS_NAME (klass)));
!   decl = start_var_decl (objc_class_template, buf);
    OBJCMETA (decl, objc_meta, meta_base);
    return decl;
  }
--- 523,529 ----
    char buf[BUFSIZE];
    snprintf (buf, BUFSIZE, "_OBJC_Class_%s",
  	    IDENTIFIER_POINTER (CLASS_NAME (klass)));
!   decl = start_meta_decl (objc_class_template, buf);
    OBJCMETA (decl, objc_meta, meta_base);
    return decl;
  }
*************** gnu_runtime_abi_01_metaclass_decl (tree
*** 532,538 ****
    char buf[BUFSIZE];
    snprintf (buf, BUFSIZE, "_OBJC_MetaClass_%s",
  	    IDENTIFIER_POINTER (CLASS_NAME (klass)));
!   decl = start_var_decl (objc_class_template, buf);
    OBJCMETA (decl, objc_meta, meta_base);
    return decl;
  }
--- 535,541 ----
    char buf[BUFSIZE];
    snprintf (buf, BUFSIZE, "_OBJC_MetaClass_%s",
  	    IDENTIFIER_POINTER (CLASS_NAME (klass)));
!   decl = start_meta_decl (objc_class_template, buf);
    OBJCMETA (decl, objc_meta, meta_base);
    return decl;
  }
*************** gnu_runtime_abi_01_category_decl (tree k
*** 545,551 ****
    snprintf (buf, BUFSIZE, "_OBJC_Category_%s_on_%s",
  	    IDENTIFIER_POINTER (CLASS_SUPER_NAME (klass)),
  	    IDENTIFIER_POINTER (CLASS_NAME (klass)));
!   decl = start_var_decl (objc_category_template, buf);
    OBJCMETA (decl, objc_meta, meta_base);
    return decl;
  }
--- 548,554 ----
    snprintf (buf, BUFSIZE, "_OBJC_Category_%s_on_%s",
  	    IDENTIFIER_POINTER (CLASS_SUPER_NAME (klass)),
  	    IDENTIFIER_POINTER (CLASS_NAME (klass)));
!   decl = start_meta_decl (objc_category_template, buf);
    OBJCMETA (decl, objc_meta, meta_base);
    return decl;
  }
*************** gnu_runtime_abi_01_protocol_decl (tree p
*** 559,565 ****
    /* static struct _objc_protocol _OBJC_Protocol_<mumble>; */
    snprintf (buf, BUFSIZE, "_OBJC_Protocol_%s",
  	    IDENTIFIER_POINTER (PROTOCOL_NAME (p)));
!   decl = start_var_decl (objc_protocol_template, buf);
    OBJCMETA (decl, objc_meta, meta_base);
    return decl;
  }
--- 562,568 ----
    /* static struct _objc_protocol _OBJC_Protocol_<mumble>; */
    snprintf (buf, BUFSIZE, "_OBJC_Protocol_%s",
  	    IDENTIFIER_POINTER (PROTOCOL_NAME (p)));
!   decl = start_meta_decl (objc_protocol_template, buf);
    OBJCMETA (decl, objc_meta, meta_base);
    return decl;
  }
*************** static tree
*** 568,574 ****
  gnu_runtime_abi_01_string_decl (tree type, const char *name,
  				string_section where ATTRIBUTE_UNUSED)
  {
!   tree decl = start_var_decl (type, name);
    OBJCMETA (decl, objc_meta, meta_base);
    return decl;
  }
--- 571,577 ----
  gnu_runtime_abi_01_string_decl (tree type, const char *name,
  				string_section where ATTRIBUTE_UNUSED)
  {
!   tree decl = start_meta_decl (type, name);
    OBJCMETA (decl, objc_meta, meta_base);
    return decl;
  }
*************** gnu_runtime_abi_01_build_typed_selector_
*** 652,658 ****
   return_at_index:
    expr = build_unary_op (loc, ADDR_EXPR,
  			 build_array_ref (loc, UOBJC_SELECTOR_TABLE_decl,
! 					  build_int_cst (NULL_TREE, index)),
  			 1);
    return convert (objc_selector_type, expr);
  }
--- 655,661 ----
   return_at_index:
    expr = build_unary_op (loc, ADDR_EXPR,
  			 build_array_ref (loc, UOBJC_SELECTOR_TABLE_decl,
! 					  size_int (index)),
  			 1);
    return convert (objc_selector_type, expr);
  }
*************** gnu_runtime_abi_01_get_protocol_referenc
*** 760,765 ****
--- 763,769 ----
    if (!PROTOCOL_FORWARD_DECL (p))
      PROTOCOL_FORWARD_DECL (p) = gnu_runtime_abi_01_protocol_decl (p);
  
+   TREE_ADDRESSABLE (PROTOCOL_FORWARD_DECL (p)) = true;
    expr = build_unary_op (loc, ADDR_EXPR, PROTOCOL_FORWARD_DECL (p), 0);
  
    /* ??? Ideally we'd build the reference with objc_protocol_type directly,
*************** objc_add_static_instance (tree construct
*** 890,896 ****
      }
  
    snprintf (buf, BUFSIZE, "_OBJC_INSTANCE_%d", num_static_inst++);
!   decl = build_decl (input_location,
  		     VAR_DECL, get_identifier (buf), class_decl);
    TREE_STATIC (decl) = 1;
    DECL_ARTIFICIAL (decl) = 1;
--- 894,900 ----
      }
  
    snprintf (buf, BUFSIZE, "_OBJC_INSTANCE_%d", num_static_inst++);
!   decl = objc_build_decl (input_location,
  		     VAR_DECL, get_identifier (buf), class_decl);
    TREE_STATIC (decl) = 1;
    DECL_ARTIFICIAL (decl) = 1;
*************** gnu_runtime_abi_01_build_const_string_co
*** 919,932 ****
    vec<constructor_elt, va_gc> *v = NULL;
  
    /* GNU:    (NXConstantString *) & ((__builtin_ObjCString) { NULL, string, length })  */
!   fields = TYPE_FIELDS (internal_const_str_type);
    CONSTRUCTOR_APPEND_ELT (v, fields, build_int_cst (NULL_TREE, 0));
  
!   fields = DECL_CHAIN (fields);
    CONSTRUCTOR_APPEND_ELT (v, fields, build_unary_op (loc,
  						     ADDR_EXPR, string, 1));
  
!   fields = DECL_CHAIN (fields);
    CONSTRUCTOR_APPEND_ELT (v, fields, build_int_cst (NULL_TREE, length));
    constructor = objc_build_constructor (internal_const_str_type, v);
  
--- 923,937 ----
    vec<constructor_elt, va_gc> *v = NULL;
  
    /* GNU:    (NXConstantString *) & ((__builtin_ObjCString) { NULL, string, length })  */
!   fields = first_type_field (internal_const_str_type);
    CONSTRUCTOR_APPEND_ELT (v, fields, build_int_cst (NULL_TREE, 0));
  
!   fields = next_type_field (fields);
!   TREE_ADDRESSABLE (string) = true;
    CONSTRUCTOR_APPEND_ELT (v, fields, build_unary_op (loc,
  						     ADDR_EXPR, string, 1));
  
!   fields = next_type_field (fields);
    CONSTRUCTOR_APPEND_ELT (v, fields, build_int_cst (NULL_TREE, length));
    constructor = objc_build_constructor (internal_const_str_type, v);
  
*************** build_module_initializer_routine (void)
*** 953,959 ****
    push_lang_context (lang_name_c); /* extern "C" */
  #endif
  
!   objc_push_parm (build_decl (input_location,
  			      PARM_DECL, NULL_TREE, void_type_node));
  #ifdef OBJCPLUS
    objc_start_function (get_identifier (TAG_GNUINIT),
--- 958,964 ----
    push_lang_context (lang_name_c); /* extern "C" */
  #endif
  
!   objc_push_parm (objc_build_decl (input_location,
  			      PARM_DECL, NULL_TREE, void_type_node));
  #ifdef OBJCPLUS
    objc_start_function (get_identifier (TAG_GNUINIT),
*************** generate_classref_translation_entry (tre
*** 1030,1036 ****
       but will be optimized away unless we force it.  */
    DECL_PRESERVE_P (decl) = 1;
    OBJCMETA (decl, objc_meta, meta_base);
!   finish_var_decl (decl, expr);
    return;
  }
  
--- 1035,1041 ----
       but will be optimized away unless we force it.  */
    DECL_PRESERVE_P (decl) = 1;
    OBJCMETA (decl, objc_meta, meta_base);
!   finish_meta_decl (decl, expr);
    return;
  }
  
*************** handle_impent (struct imp_entry *impent)
*** 1077,1099 ****
      }
  
      {
!       tree decl, init;
! 
!       init = integer_zero_node;
!       decl = build_decl (input_location,
! 			 VAR_DECL, get_identifier (string), TREE_TYPE (init));
!       TREE_PUBLIC (decl) = 1;
!       TREE_READONLY (decl) = 1;
!       TREE_USED (decl) = 1;
!       TREE_CONSTANT (decl) = 1;
!       DECL_CONTEXT (decl) = NULL_TREE;
!       DECL_ARTIFICIAL (decl) = 1;
!       TREE_STATIC (decl) = 1;
!       DECL_INITIAL (decl) = error_mark_node; /* A real initializer is coming... */
!       /* We must force the reference.  */
!       DECL_PRESERVE_P (decl) = 1;
! 
!       finish_var_decl(decl, init) ;
      }
  }
  
--- 1082,1099 ----
      }
  
      {
!       tree decl = start_meta_decl (integer_type_node, string);
!       TREE_READONLY (decl) = true;
!       TREE_PUBLIC (decl) = true;
!       TREE_USED (decl) = true;
!       /* We must keep this even if LTO can see it is not directly used.  */
!       DECL_PRESERVE_P (decl) = true;
!       DECL_IGNORED_P (decl) = false;
! #ifdef OBJCPLUS
!       DECL_THIS_STATIC (decl) = false;
! #endif
!       tree init = build_zero_cst (integer_type_node);
!       finish_meta_decl (decl, init) ;
      }
  }
  
*************** tree
*** 1101,1135 ****
  build_protocol_initializer (tree type, tree protocol_name, tree protocol_list,
  			    tree inst_methods, tree class_methods)
  {
-   tree expr, ttyp;
-   location_t loc;
    vec<constructor_elt, va_gc> *inits = NULL;
  
!   /* TODO: pass the loc in or find it from args.  */
!   loc = input_location;
!   ttyp = build_pointer_type (xref_tag (RECORD_TYPE,
! 				       get_identifier (UTAG_CLASS)));
    /* Filling the "isa" in with a version allows the runtime system to
       detect this ...   */
!   expr = build_int_cst (ttyp, PROTOCOL_VERSION);
! 
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, expr);
! 
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, protocol_name);
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, protocol_list);
  
!   ttyp = objc_method_proto_list_ptr;
    if (inst_methods)
      expr = convert (ttyp, build_unary_op (loc, ADDR_EXPR, inst_methods, 0));
    else
      expr = convert (ttyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, expr);
  
    if (class_methods)
      expr = convert (ttyp, build_unary_op (loc, ADDR_EXPR, class_methods, 0));
    else
      expr = convert (ttyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, expr);
  
    return objc_build_constructor (type, inits);
  }
--- 1101,1136 ----
  build_protocol_initializer (tree type, tree protocol_name, tree protocol_list,
  			    tree inst_methods, tree class_methods)
  {
    vec<constructor_elt, va_gc> *inits = NULL;
  
!   tree ttyp = build_pointer_type (xref_tag (RECORD_TYPE,
! 				  get_identifier (UTAG_CLASS)));
    /* Filling the "isa" in with a version allows the runtime system to
       detect this ...   */
!   tree expr = build_int_cst (ttyp, PROTOCOL_VERSION);
!   tree fields = first_type_field (type);
!   CONSTRUCTOR_APPEND_ELT (inits, fields, expr);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (inits, fields, protocol_name);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (inits, fields, protocol_list);
  
!   /* TODO: pass the loc in or find it from args.  */
!   location_t loc = input_location;
!    ttyp = objc_method_proto_list_ptr;
    if (inst_methods)
      expr = convert (ttyp, build_unary_op (loc, ADDR_EXPR, inst_methods, 0));
    else
      expr = convert (ttyp, null_pointer_node);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (inits, fields, expr);
  
    if (class_methods)
      expr = convert (ttyp, build_unary_op (loc, ADDR_EXPR, class_methods, 0));
    else
      expr = convert (ttyp, null_pointer_node);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (inits, fields, expr);
  
    return objc_build_constructor (type, inits);
  }
*************** build_protocol_initializer (tree type, t
*** 1137,1147 ****
  static tree
  generate_protocol_list (tree i_or_p, tree klass_ctxt)
  {
!   tree array_type, ptype, refs_decl, lproto, e, plist;
!   vec<constructor_elt, va_gc> *v = NULL;
!   char buf[BUFSIZE];
!   int size = 0;
! 
    switch (TREE_CODE (i_or_p))
      {
      case CLASS_INTERFACE_TYPE:
--- 1138,1144 ----
  static tree
  generate_protocol_list (tree i_or_p, tree klass_ctxt)
  {
!   tree plist;
    switch (TREE_CODE (i_or_p))
      {
      case CLASS_INTERFACE_TYPE:
*************** generate_protocol_list (tree i_or_p, tre
*** 1156,1172 ****
      }
  
    /* Compute size.  */
!   for (lproto = plist; lproto; lproto = TREE_CHAIN (lproto))
      if (TREE_CODE (TREE_VALUE (lproto)) == PROTOCOL_INTERFACE_TYPE
  	&& PROTOCOL_FORWARD_DECL (TREE_VALUE (lproto)))
        size++;
  
    /* Build initializer.  */
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, build_int_cst (NULL_TREE, 0));
!   e = build_int_cst (build_pointer_type (objc_protocol_template), size);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, e);
  
!   for (lproto = plist; lproto; lproto = TREE_CHAIN (lproto))
      {
        tree pval = TREE_VALUE (lproto);
  
--- 1153,1174 ----
      }
  
    /* Compute size.  */
!   int size = 0;
!   for (tree lproto = plist; lproto; lproto = TREE_CHAIN (lproto))
      if (TREE_CODE (TREE_VALUE (lproto)) == PROTOCOL_INTERFACE_TYPE
  	&& PROTOCOL_FORWARD_DECL (TREE_VALUE (lproto)))
        size++;
  
    /* Build initializer.  */
!   vec<constructor_elt, va_gc> *v = NULL;
!   unsigned n = 0;
!   tree idx = size_int (n++);
!   CONSTRUCTOR_APPEND_ELT (v, idx, build_int_cst (NULL_TREE, 0));
!   tree e = build_int_cst (build_pointer_type (objc_protocol_template), size);
!   idx = size_int (n++);
!   CONSTRUCTOR_APPEND_ELT (v, idx, e);
  
!   for (tree lproto = plist; lproto; lproto = TREE_CHAIN (lproto))
      {
        tree pval = TREE_VALUE (lproto);
  
*************** generate_protocol_list (tree i_or_p, tre
*** 1176,1187 ****
  	  tree fwref = PROTOCOL_FORWARD_DECL (pval);
  	  location_t loc = DECL_SOURCE_LOCATION (fwref) ;
  	  e = build_unary_op (loc, ADDR_EXPR, fwref, 0);
!           CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, e);
  	}
      }
  
    /* static struct objc_protocol *refs[n]; */
! 
    switch (TREE_CODE (i_or_p))
      {
      case PROTOCOL_INTERFACE_TYPE:
--- 1178,1190 ----
  	  tree fwref = PROTOCOL_FORWARD_DECL (pval);
  	  location_t loc = DECL_SOURCE_LOCATION (fwref) ;
  	  e = build_unary_op (loc, ADDR_EXPR, fwref, 0);
! 	  idx = size_int (n++);
! 	  CONSTRUCTOR_APPEND_ELT (v, idx, e);
  	}
      }
  
    /* static struct objc_protocol *refs[n]; */
!   char buf[BUFSIZE];
    switch (TREE_CODE (i_or_p))
      {
      case PROTOCOL_INTERFACE_TYPE:
*************** generate_protocol_list (tree i_or_p, tre
*** 1201,1212 ****
        gcc_unreachable ();
      }
  
!   ptype = build_pointer_type (objc_protocol_template);
!   array_type = build_sized_array_type (ptype, size + 3);
!   refs_decl = start_var_decl (array_type, buf);
    OBJCMETA (refs_decl, objc_meta, meta_base);
!   finish_var_decl (refs_decl,
!                    objc_build_constructor (TREE_TYPE (refs_decl), v));
  
    return refs_decl;
  }
--- 1204,1214 ----
        gcc_unreachable ();
      }
  
!   tree ptype = build_pointer_type (objc_protocol_template);
!   tree array_type = build_sized_array_type (ptype, size + 3);
!   tree refs_decl = start_meta_decl (array_type, buf);
    OBJCMETA (refs_decl, objc_meta, meta_base);
!   finish_meta_decl (refs_decl, objc_build_constructor (array_type, v));
  
    return refs_decl;
  }
*************** generate_protocol_list (tree i_or_p, tre
*** 1214,1246 ****
  static tree
  generate_v1_meth_descriptor_table (tree chain, tree protocol, const char *prefix)
  {
-   tree method_list_template, initlist, decl;
-   int size;
-   vec<constructor_elt, va_gc> *v = NULL;
-   char buf[BUFSIZE];
- 
    if (!chain || !prefix)
      return NULL_TREE;
  
    if (!objc_method_prototype_template)
      objc_method_prototype_template = build_method_prototype_template ();
  
!   size = list_length (chain);
!   method_list_template =
! 	build_method_prototype_list_template (objc_method_prototype_template,
! 					      size);
    snprintf (buf, BUFSIZE, "%s_%s", prefix,
  	    IDENTIFIER_POINTER (PROTOCOL_NAME (protocol)));
  
!   decl = start_var_decl (method_list_template, buf);
! 
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, build_int_cst (NULL_TREE, size));
!   initlist =
! 	build_descriptor_table_initializer (objc_method_prototype_template,
! 					    chain);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, initlist);
    OBJCMETA (decl, objc_meta, meta_base);
!   finish_var_decl (decl, objc_build_constructor (method_list_template, v));
    return decl;
  }
  
--- 1216,1246 ----
  static tree
  generate_v1_meth_descriptor_table (tree chain, tree protocol, const char *prefix)
  {
    if (!chain || !prefix)
      return NULL_TREE;
  
    if (!objc_method_prototype_template)
      objc_method_prototype_template = build_method_prototype_template ();
  
!   int size = list_length (chain);
!   tree method_list_template
!     = build_method_prototype_list_template (objc_method_prototype_template,
! 					    size);
!   char buf[BUFSIZE];
    snprintf (buf, BUFSIZE, "%s_%s", prefix,
  	    IDENTIFIER_POINTER (PROTOCOL_NAME (protocol)));
  
!   tree decl = start_meta_decl (method_list_template, buf);
!   vec<constructor_elt, va_gc> *v = NULL;
!   tree fields = first_type_field (method_list_template);
!   CONSTRUCTOR_APPEND_ELT (v, fields, build_int_cst (NULL_TREE, size));
!   tree initlist
!     = build_descriptor_table_initializer (objc_method_prototype_template,
! 					  chain);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, initlist);
    OBJCMETA (decl, objc_meta, meta_base);
!   finish_meta_decl (decl, objc_build_constructor (method_list_template, v));
    return decl;
  }
  
*************** generate_protocols (void)
*** 1341,1354 ****
  
        /* static struct objc_protocol _OBJC_PROTOCOL_<mumble>; */
        protocol_name_expr = add_objc_string (PROTOCOL_NAME (p), class_names);
! 
        if (refs_decl)
! 	refs_expr = convert (build_pointer_type (build_pointer_type
! 						 (objc_protocol_template)),
! 			     build_unary_op (input_location,
! 					     ADDR_EXPR, refs_decl, 0));
        else
! 	refs_expr = build_int_cst (NULL_TREE, 0);
  
        /* UOBJC_INSTANCE_METHODS_decl/UOBJC_CLASS_METHODS_decl are set
  	 by generate_method_descriptors, which is called above.  */
--- 1341,1353 ----
  
        /* static struct objc_protocol _OBJC_PROTOCOL_<mumble>; */
        protocol_name_expr = add_objc_string (PROTOCOL_NAME (p), class_names);
!       tree prot_ptr = build_pointer_type (objc_protocol_template);
        if (refs_decl)
! 	refs_expr
! 	  = convert (prot_ptr, build_unary_op (input_location, ADDR_EXPR,
! 					       refs_decl, 0));
        else
! 	refs_expr = build_zero_cst (prot_ptr);
  
        /* UOBJC_INSTANCE_METHODS_decl/UOBJC_CLASS_METHODS_decl are set
  	 by generate_method_descriptors, which is called above.  */
*************** generate_protocols (void)
*** 1356,1389 ****
  					     protocol_name_expr, refs_expr,
  					     UOBJC_INSTANCE_METHODS_decl,
  					     UOBJC_CLASS_METHODS_decl);
!       finish_var_decl (decl, initlist);
      }
  }
  
  static tree
  generate_dispatch_table (tree chain, const char *name)
  {
-   tree decl, method_list_template, initlist;
-   vec<constructor_elt, va_gc> *v = NULL;
-   int size = list_length (chain);
- 
    if (!objc_method_template)
      objc_method_template = build_method_template ();
  
!   method_list_template = build_method_list_template (objc_method_template,
! 						     size);
!   initlist = build_dispatch_table_initializer (objc_method_template, chain);
! 
!   decl = start_var_decl (method_list_template, name);
  
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, integer_zero_node);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE,
! 			  build_int_cst (integer_type_node, size));
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, initlist);
  
    OBJCMETA (decl, objc_meta, meta_base);
!   finish_var_decl (decl,
! 		   objc_build_constructor (TREE_TYPE (decl), v));
  
    return decl;
  }
--- 1355,1387 ----
  					     protocol_name_expr, refs_expr,
  					     UOBJC_INSTANCE_METHODS_decl,
  					     UOBJC_CLASS_METHODS_decl);
!       finish_meta_decl (decl, initlist);
      }
  }
  
  static tree
  generate_dispatch_table (tree chain, const char *name)
  {
    if (!objc_method_template)
      objc_method_template = build_method_template ();
  
!   int size = list_length (chain);
!   tree method_list_template
!     = build_method_list_template (objc_method_template, size);
  
!   tree decl = start_meta_decl (method_list_template, name);
!   vec<constructor_elt, va_gc> *v = NULL;
!   tree fields = first_type_field (method_list_template);
!   CONSTRUCTOR_APPEND_ELT (v, fields, integer_zero_node);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, build_int_cst (integer_type_node, size));
!   tree initlist
!     = build_dispatch_table_initializer (objc_method_template, chain);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, initlist);
  
    OBJCMETA (decl, objc_meta, meta_base);
!   finish_meta_decl (decl, objc_build_constructor (TREE_TYPE (decl), v));
  
    return decl;
  }
*************** build_category_initializer (tree type, t
*** 1394,1429 ****
  			    tree inst_methods, tree class_methods,
  			    tree protocol_list)
  {
-   tree expr, ltyp;
-   location_t loc;
    vec<constructor_elt, va_gc> *v = NULL;
  
    /* TODO: pass the loc in or find it from args.  */
!   /* TODO: pass the loc in or find it from args.  */
!   loc = UNKNOWN_LOCATION;
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, cat_name);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, class_name);
! 
!   ltyp = objc_method_list_ptr;
    if (inst_methods)
      expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, inst_methods, 0));
    else
      expr = convert (ltyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
  
    if (class_methods)
      expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, class_methods, 0));
    else
      expr = convert (ltyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
  
    /* protocol_list = */
    ltyp = build_pointer_type (build_pointer_type (objc_protocol_template));
    if (protocol_list)
      expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, protocol_list, 0));
    else
!     expr = convert (ltyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
  
    return objc_build_constructor (type, v);
  }
--- 1392,1429 ----
  			    tree inst_methods, tree class_methods,
  			    tree protocol_list)
  {
    vec<constructor_elt, va_gc> *v = NULL;
+   tree fields = first_type_field (type);
+   CONSTRUCTOR_APPEND_ELT (v, fields, cat_name);
+   fields = next_type_field (fields);
+   CONSTRUCTOR_APPEND_ELT (v, fields, class_name);
  
+   tree ltyp = objc_method_list_ptr;
    /* TODO: pass the loc in or find it from args.  */
!   location_t loc = UNKNOWN_LOCATION;
!   tree expr;
    if (inst_methods)
      expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, inst_methods, 0));
    else
      expr = convert (ltyp, null_pointer_node);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, expr);
  
    if (class_methods)
      expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, class_methods, 0));
    else
      expr = convert (ltyp, null_pointer_node);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, expr);
  
    /* protocol_list = */
    ltyp = build_pointer_type (build_pointer_type (objc_protocol_template));
    if (protocol_list)
      expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, protocol_list, 0));
    else
!     expr = build_zero_cst (ltyp);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, expr);
  
    return objc_build_constructor (type, v);
  }
*************** generate_category (struct imp_entry *imp
*** 1477,1483 ****
  					 inst_methods, class_methods,
  					 protocol_decl);
    /* Finish and initialize the forward decl.  */
!   finish_var_decl (cat_decl, initlist);
    impent->class_decl = cat_decl;
  }
  
--- 1477,1483 ----
  					 inst_methods, class_methods,
  					 protocol_decl);
    /* Finish and initialize the forward decl.  */
!   finish_meta_decl (cat_decl, initlist);
    impent->class_decl = cat_decl;
  }
  
*************** build_shared_structure_initializer (tree
*** 1503,1579 ****
  				    tree dispatch_table, tree ivar_list,
  				    tree protocol_list)
  {
-   tree expr, ltyp;
    vec<constructor_elt, va_gc> *v = NULL;
  
    /* isa = */
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, isa);
  
    /* super_class = */
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, super);
  
    /* name = */
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, default_conversion (name));
  
    /* version = */
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE,
!                           build_int_cst (long_integer_type_node, 0));
  
    /* info = */
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE,
!                           build_int_cst (long_integer_type_node, status));
  
    /* instance_size = */
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE,
!                           convert (long_integer_type_node, size));
  
    /* objc_ivar_list = */
!   if (!ivar_list)
!     CONSTRUCTOR_APPEND_ELT (v, NULL_TREE,
! 			    build_int_cst (objc_ivar_list_ptr, 0));
!   else
      {
!       expr = convert (objc_ivar_list_ptr,
! 		      build_unary_op (input_location, ADDR_EXPR,
! 				      ivar_list, 0));
!       CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
      }
  
    /* objc_method_list = */
!   if (!dispatch_table)
!     CONSTRUCTOR_APPEND_ELT (v, NULL_TREE,
! 			   convert (objc_method_list_ptr, null_pointer_node));
!   else
!     {
!       expr = convert (objc_method_list_ptr,
! 		      build_unary_op (input_location, ADDR_EXPR,
! 				      dispatch_table, 0));
!       CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
      }
  
    /* dtable = */
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, build_int_cst (NULL_TREE, 0));
  
    /* subclass_list = */
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, build_int_cst (NULL_TREE, 0));
  
    /* sibling_class = */
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, build_int_cst (NULL_TREE, 0));
  
    /* protocol_list = */
!   ltyp = build_pointer_type (build_pointer_type (objc_protocol_template));
!   if (! protocol_list)
!     CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, build_int_cst (ltyp, 0));
!   else
      {
!       expr = convert (ltyp,
! 		      build_unary_op (input_location, ADDR_EXPR,
! 				      protocol_list, 0));
!       CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
      }
  
    /* gc_object_type = NULL */
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, build_int_cst (NULL_TREE, 0));
  
    return objc_build_constructor (type, v);
  }
--- 1503,1587 ----
  				    tree dispatch_table, tree ivar_list,
  				    tree protocol_list)
  {
    vec<constructor_elt, va_gc> *v = NULL;
  
    /* isa = */
!   tree fields = first_type_field (type);
!   CONSTRUCTOR_APPEND_ELT (v, fields, isa);
  
    /* super_class = */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, super);
  
    /* name = */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, default_conversion (name));
  
    /* version = */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields,
! 			  build_int_cst (long_integer_type_node, 0));
  
    /* info = */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields,
! 			  build_int_cst (long_integer_type_node, status));
  
    /* instance_size = */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, convert (long_integer_type_node, size));
  
    /* objc_ivar_list = */
!   fields = next_type_field (fields);
!   if (ivar_list)
      {
!       tree expr = convert (objc_ivar_list_ptr,
! 			   build_unary_op (input_location, ADDR_EXPR,
! 					   ivar_list, 0));
!       CONSTRUCTOR_APPEND_ELT (v, fields, expr);
      }
+  else
+     CONSTRUCTOR_APPEND_ELT (v, fields, build_zero_cst (objc_ivar_list_ptr));
  
    /* objc_method_list = */
!   fields = next_type_field (fields);
!   if (dispatch_table)
!    {
!       tree expr = convert (objc_method_list_ptr,
! 			   build_unary_op (input_location, ADDR_EXPR,
! 					   dispatch_table, 0));
!       CONSTRUCTOR_APPEND_ELT (v, fields, expr);
      }
+   else
+    CONSTRUCTOR_APPEND_ELT (v, fields, build_zero_cst (objc_method_list_ptr));
  
    /* dtable = */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, build_int_cst (NULL_TREE, 0));
  
    /* subclass_list = */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, build_int_cst (NULL_TREE, 0));
  
    /* sibling_class = */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, build_int_cst (NULL_TREE, 0));
  
    /* protocol_list = */
!   tree ltyp = build_pointer_type (build_pointer_type (objc_protocol_template));
!   fields = next_type_field (fields);
!   if (protocol_list)
      {
!       tree expr = convert (ltyp, build_unary_op (input_location, ADDR_EXPR,
! 						 protocol_list, 0));
!       CONSTRUCTOR_APPEND_ELT (v, fields, expr);
      }
+   else
+     CONSTRUCTOR_APPEND_ELT (v, fields, build_zero_cst (ltyp));
  
    /* gc_object_type = NULL */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, build_zero_cst (TREE_TYPE (fields)));
  
    return objc_build_constructor (type, v);
  }
*************** build_shared_structure_initializer (tree
*** 1582,1612 ****
  static tree
  generate_ivars_list (tree chain, const char *name)
  {
-   tree initlist, ivar_list_template, decl;
-   int size;
-   vec<constructor_elt, va_gc> *inits = NULL;
- 
    if (!chain)
      return NULL_TREE;
  
    if (!objc_ivar_template)
      objc_ivar_template = build_ivar_template ();
  
!   size = ivar_list_length (chain);
! 
    generating_instance_variables = 1;
!   ivar_list_template = build_ivar_list_template (objc_ivar_template, size);
!   initlist = build_ivar_list_initializer (objc_ivar_template, chain);
    generating_instance_variables = 0;
  
!   decl = start_var_decl (ivar_list_template, name);
! 
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, build_int_cst (NULL_TREE, size));
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, initlist);
  
    OBJCMETA (decl, objc_meta, meta_base);
!   finish_var_decl (decl,
! 		   objc_build_constructor (TREE_TYPE (decl), inits));
  
    return decl;
  }
--- 1590,1616 ----
  static tree
  generate_ivars_list (tree chain, const char *name)
  {
    if (!chain)
      return NULL_TREE;
  
    if (!objc_ivar_template)
      objc_ivar_template = build_ivar_template ();
  
!   int size = ivar_list_length (chain);
    generating_instance_variables = 1;
!   tree ivar_list_template = build_ivar_list_template (objc_ivar_template, size);
!   tree initlist = build_ivar_list_initializer (objc_ivar_template, chain);
    generating_instance_variables = 0;
  
!   tree decl = start_meta_decl (ivar_list_template, name);
!   vec<constructor_elt, va_gc> *inits = NULL;
!   tree fields = first_type_field (ivar_list_template);
!   CONSTRUCTOR_APPEND_ELT (inits, fields, build_int_cst (NULL_TREE, size));
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (inits, fields, initlist);
  
    OBJCMETA (decl, objc_meta, meta_base);
!   finish_meta_decl (decl, objc_build_constructor (ivar_list_template, inits));
  
    return decl;
  }
*************** generate_class_structures (struct imp_en
*** 1710,1716 ****
  			CLS_META, class_methods, class_ivars,
  			protocol_decl);
  
!   finish_var_decl (meta_decl, initlist);
    impent->meta_decl = meta_decl;
  
    /* static struct objc_class _OBJC_CLASS_Foo={ ... }; */
--- 1714,1720 ----
  			CLS_META, class_methods, class_ivars,
  			protocol_decl);
  
!   finish_meta_decl (meta_decl, initlist);
    impent->meta_decl = meta_decl;
  
    /* static struct objc_class _OBJC_CLASS_Foo={ ... }; */
*************** generate_class_structures (struct imp_en
*** 1718,1725 ****
      {
        snprintf (buf, BUFSIZE, "_OBJC_InstanceMethods_%s",
  		IDENTIFIER_POINTER (CLASS_NAME (impent->imp_context)));
!       inst_methods = generate_dispatch_table (CLASS_NST_METHODS (impent->imp_context),
! 					      buf);
      }
  
    if ((chain = CLASS_IVARS (impent->imp_template)))
--- 1722,1730 ----
      {
        snprintf (buf, BUFSIZE, "_OBJC_InstanceMethods_%s",
  		IDENTIFIER_POINTER (CLASS_NAME (impent->imp_context)));
!       inst_methods
! 	= generate_dispatch_table (CLASS_NST_METHODS (impent->imp_context),
! 				   buf);
      }
  
    if ((chain = CLASS_IVARS (impent->imp_template)))
*************** generate_class_structures (struct imp_en
*** 1740,1746 ****
  		CLS_FACTORY | cls_flags, inst_methods, inst_ivars,
  		protocol_decl);
  
!   finish_var_decl (class_decl, initlist);
    impent->class_decl = class_decl;
  }
  
--- 1745,1751 ----
  		CLS_FACTORY | cls_flags, inst_methods, inst_ivars,
  		protocol_decl);
  
!   finish_meta_decl (class_decl, initlist);
    impent->class_decl = class_decl;
  }
  
*************** handle_class_ref (tree chain)
*** 1757,1786 ****
  
    sprintf (string, "__objc_class_name_%s", name);
  
!   /* Make a decl for this name, so we can use its address in a tree.  */
!   decl = build_decl (input_location,
! 		     VAR_DECL, get_identifier (string), TREE_TYPE (integer_zero_node));
    DECL_EXTERNAL (decl) = 1;
    TREE_PUBLIC (decl) = 1;
    DECL_CONTEXT (decl) = NULL_TREE;
!   finish_var_decl (decl, 0);
  
    /* Make a decl for the address.  */
    sprintf (string, "__objc_class_ref_%s", name);
!   exp = build1 (ADDR_EXPR, string_type_node, decl);
!   decl = build_decl (input_location,
! 		     VAR_DECL, get_identifier (string), string_type_node);
!   TREE_STATIC (decl) = 1;
    TREE_USED (decl) = 1;
    DECL_READ_P (decl) = 1;
-   DECL_ARTIFICIAL (decl) = 1;
-   DECL_INITIAL (decl) = error_mark_node;
- 
    /* We must force the reference.  */
    DECL_PRESERVE_P (decl) = 1;
! 
!   DECL_CONTEXT (decl) = NULL_TREE;
!   finish_var_decl (decl, exp);
  }
  
  static tree
--- 1762,1784 ----
  
    sprintf (string, "__objc_class_name_%s", name);
  
!   /* Make a forward declaration for this name, so we can use its address.  */
!   decl = objc_build_decl (input_location, VAR_DECL,
! 			  get_identifier (string), integer_type_node);
    DECL_EXTERNAL (decl) = 1;
    TREE_PUBLIC (decl) = 1;
    DECL_CONTEXT (decl) = NULL_TREE;
!   finish_decl (decl, input_location, NULL_TREE, NULL_TREE, NULL_TREE);
  
    /* Make a decl for the address.  */
    sprintf (string, "__objc_class_ref_%s", name);
!   decl = start_meta_decl (ptr_type_node, name);
    TREE_USED (decl) = 1;
    DECL_READ_P (decl) = 1;
    /* We must force the reference.  */
    DECL_PRESERVE_P (decl) = 1;
!   exp = build1 (ADDR_EXPR, ptr_type_node, decl);
!   finish_meta_decl (decl, exp);
  }
  
  static tree
*************** get_proto_encoding (tree proto)
*** 1806,1821 ****
  static void
  build_gnu_selector_translation_table (void)
  {
-   tree chain, expr;
-   vec<constructor_elt, va_gc> *inits = NULL;
-   vec<constructor_elt, va_gc> *v ;
- 
    /* Cause the selector table (previously forward-declared)
       to be actually output.  */
  
!   for (chain = sel_ref_chain; chain; chain = TREE_CHAIN (chain))
      {
-       tree encoding;
        if (warn_selector)
  	{
  	  /* TODO: improve on the location for the diagnostic.  */
--- 1804,1818 ----
  static void
  build_gnu_selector_translation_table (void)
  {
    /* Cause the selector table (previously forward-declared)
       to be actually output.  */
  
!   tree f1 = first_type_field (objc_selector_template);
!   tree f2 = next_type_field (f1);
!   vec<constructor_elt, va_gc> *inits = NULL;
!   unsigned n = 0;
!   for (tree chain = sel_ref_chain; chain; chain = TREE_CHAIN (chain))
      {
        if (warn_selector)
  	{
  	  /* TODO: improve on the location for the diagnostic.  */
*************** build_gnu_selector_translation_table (vo
*** 1823,1907 ****
  	  diagnose_missing_method (TREE_VALUE (chain), loc);
  	}
  
!       v = NULL;
!       expr = build_selector (TREE_VALUE (chain));
!       encoding = get_proto_encoding (TREE_PURPOSE (chain));
!       CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
!       CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, encoding);
        expr = objc_build_constructor (objc_selector_template, v);
  
!       CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, expr);
      } /* each element in the chain */
  
    /* List terminator.  */
!   v = NULL;
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, integer_zero_node);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, integer_zero_node);
!   expr = objc_build_constructor (objc_selector_template, v);
  
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, expr);
!   expr = objc_build_constructor (TREE_TYPE (UOBJC_SELECTOR_TABLE_decl),
! 				     inits);
!   finish_var_decl (UOBJC_SELECTOR_TABLE_decl, expr);
  }
  
! /* Output references to all statically allocated objects.  Return the DECL
!    for the array built.  */
  
  static void
  generate_static_references (void)
  {
-   tree expr = NULL_TREE;
-   tree class_name, klass, decl;
-   tree cl_chain, in_chain, type
-     = build_array_type (build_pointer_type (void_type_node), NULL_TREE);
-   int num_class;
-   char buf[BUFSIZE];
    vec<constructor_elt, va_gc> *decls = NULL;
! 
!   for (cl_chain = objc_static_instances, num_class = 0;
!        cl_chain; cl_chain = TREE_CHAIN (cl_chain), num_class++)
      {
        vec<constructor_elt, va_gc> *v = NULL;
  
!       for (in_chain = TREE_PURPOSE (cl_chain);
! 	   in_chain; in_chain = TREE_CHAIN (in_chain));
! 
!       snprintf (buf, BUFSIZE, "_OBJC_STATIC_INSTANCES_%d", num_class);
!       decl = start_var_decl (type, buf);
! 
        /* Output {class_name, ...}.  */
!       klass = TREE_VALUE (cl_chain);
!       class_name = get_objc_string_decl (OBJC_TYPE_NAME (klass), class_names);
!       CONSTRUCTOR_APPEND_ELT (v, NULL_TREE,
  			      build_unary_op (input_location,
  					      ADDR_EXPR, class_name, 1));
  
        /* Output {..., instance, ...}.  */
!       for (in_chain = TREE_PURPOSE (cl_chain);
  	   in_chain; in_chain = TREE_CHAIN (in_chain))
  	{
! 	  expr = build_unary_op (input_location,
! 				 ADDR_EXPR, TREE_VALUE (in_chain), 1);
! 	  CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
  	}
  
        /* Output {..., NULL}.  */
!       CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, build_int_cst (NULL_TREE, 0));
  
!       expr = objc_build_constructor (TREE_TYPE (decl), v);
        OBJCMETA (decl, objc_meta, meta_base);
!       finish_var_decl (decl, expr);
!       CONSTRUCTOR_APPEND_ELT (decls, NULL_TREE,
  			      build_unary_op (input_location,
  					      ADDR_EXPR, decl, 1));
      }
  
!   CONSTRUCTOR_APPEND_ELT (decls, NULL_TREE, build_int_cst (NULL_TREE, 0));
!   expr = objc_build_constructor (type, decls);
!   static_instances_decl = start_var_decl (type, "_OBJC_STATIC_INSTANCES");
    OBJCMETA (static_instances_decl, objc_meta, meta_base);
!   finish_var_decl (static_instances_decl, expr);
  }
  
  /* Create the initial value for the `defs' field of _objc_symtab.
--- 1820,1911 ----
  	  diagnose_missing_method (TREE_VALUE (chain), loc);
  	}
  
!       vec<constructor_elt, va_gc> *v = NULL;
!       tree expr = build_selector (TREE_VALUE (chain));
!       tree encoding = get_proto_encoding (TREE_PURPOSE (chain));
!       CONSTRUCTOR_APPEND_ELT (v, f1, expr);
!       CONSTRUCTOR_APPEND_ELT (v, f2, encoding);
        expr = objc_build_constructor (objc_selector_template, v);
  
!       tree idx = size_int (n++);
!       CONSTRUCTOR_APPEND_ELT (inits, idx, expr);
      } /* each element in the chain */
  
    /* List terminator.  */
!   vec<constructor_elt, va_gc> *v = NULL;
!   CONSTRUCTOR_APPEND_ELT (v, f1, build_zero_cst (TREE_TYPE (f1)));
!   CONSTRUCTOR_APPEND_ELT (v, f2, build_zero_cst (TREE_TYPE (f2)));
!   tree expr = objc_build_constructor (objc_selector_template, v);
  
!   tree idx = size_int (n++);
!   CONSTRUCTOR_APPEND_ELT (inits, idx, expr);
!   /* Now we know the size of the array.  */
!   tree type = build_sized_array_type (objc_selector_template, n);
!   TREE_TYPE (UOBJC_SELECTOR_TABLE_decl) = type;
!   relayout_decl (UOBJC_SELECTOR_TABLE_decl);
!   expr = objc_build_constructor (type, inits);
!   finish_meta_decl (UOBJC_SELECTOR_TABLE_decl, expr);
  }
  
! /* Output references to all statically allocated objects.  */
  
  static void
  generate_static_references (void)
  {
    vec<constructor_elt, va_gc> *decls = NULL;
!   int num_class = 0;
!   for (tree cl_chain = objc_static_instances;
!        cl_chain; cl_chain = TREE_CHAIN (cl_chain))
      {
        vec<constructor_elt, va_gc> *v = NULL;
  
!       /* Inner index (num_class is the outer).  */
!       unsigned n = 0;
        /* Output {class_name, ...}.  */
!       tree klass = TREE_VALUE (cl_chain);
!       tree class_name
! 	= get_objc_string_decl (OBJC_TYPE_NAME (klass), class_names);
!       tree idx = size_int (n++);
!       CONSTRUCTOR_APPEND_ELT (v, idx,
  			      build_unary_op (input_location,
  					      ADDR_EXPR, class_name, 1));
  
        /* Output {..., instance, ...}.  */
!       for (tree in_chain = TREE_PURPOSE (cl_chain);
  	   in_chain; in_chain = TREE_CHAIN (in_chain))
  	{
! 	  tree expr = build_unary_op (input_location,
! 				      ADDR_EXPR, TREE_VALUE (in_chain), 1);
! 	  idx = size_int (n++);
! 	  CONSTRUCTOR_APPEND_ELT (v, idx, expr);
  	}
  
        /* Output {..., NULL}.  */
!       idx = size_int (n++);
!       CONSTRUCTOR_APPEND_ELT (v, idx, null_pointer_node);
  
!       tree inner = build_sized_array_type (ptr_type_node, n);
!       char buf[BUFSIZE];
!       snprintf (buf, BUFSIZE, "_OBJC_STATIC_INSTANCES_%d", num_class);
!       tree decl = start_meta_decl (inner, buf);
! 
!       tree expr = objc_build_constructor (inner, v);
        OBJCMETA (decl, objc_meta, meta_base);
!       finish_meta_decl (decl, expr);
!       idx = build_int_cst (unsigned_type_node, num_class++);
!       CONSTRUCTOR_APPEND_ELT (decls, idx,
  			      build_unary_op (input_location,
  					      ADDR_EXPR, decl, 1));
      }
  
!   tree idx = build_int_cst (unsigned_type_node, num_class++);
!   CONSTRUCTOR_APPEND_ELT (decls, idx, null_pointer_node);
! 
!   tree outer = build_sized_array_type (ptr_type_node, num_class);
!   tree expr = objc_build_constructor (outer, decls);
!   static_instances_decl = start_meta_decl (outer, "_OBJC_STATIC_INSTANCES");
    OBJCMETA (static_instances_decl, objc_meta, meta_base);
!   finish_meta_decl (static_instances_decl, expr);
  }
  
  /* Create the initial value for the `defs' field of _objc_symtab.
*************** generate_static_references (void)
*** 1910,1951 ****
  static tree
  init_def_list (tree type)
  {
-   tree expr;
-   struct imp_entry *impent;
-   location_t loc;
    vec<constructor_elt, va_gc> *v = NULL;
  
    if (imp_count)
!     for (impent = imp_list; impent; impent = impent->next)
        {
  	if (TREE_CODE (impent->imp_context) == CLASS_IMPLEMENTATION_TYPE)
  	  {
! 	    loc = DECL_SOURCE_LOCATION (impent->class_decl);
! 	    expr = build_unary_op (loc,
! 				   ADDR_EXPR, impent->class_decl, 0);
! 	    CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
  	  }
        }
  
    if (cat_count)
!     for (impent = imp_list; impent; impent = impent->next)
        {
  	if (TREE_CODE (impent->imp_context) == CATEGORY_IMPLEMENTATION_TYPE)
  	  {
! 	    loc = DECL_SOURCE_LOCATION (impent->class_decl);
! 	    expr = build_unary_op (loc,
! 				   ADDR_EXPR, impent->class_decl, 0);
! 	    CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
  	  }
        }
  
!   loc = UNKNOWN_LOCATION;
    /* statics = { ..., _OBJC_STATIC_INSTANCES, ... }  */
    if (static_instances_decl)
      expr = build_unary_op (loc, ADDR_EXPR, static_instances_decl, 0);
    else
!     expr = integer_zero_node;
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
  
    return objc_build_constructor (type, v);
  }
--- 1914,1957 ----
  static tree
  init_def_list (tree type)
  {
    vec<constructor_elt, va_gc> *v = NULL;
  
+   unsigned n = 0;
    if (imp_count)
!     for (struct imp_entry *impent = imp_list; impent; impent = impent->next)
        {
  	if (TREE_CODE (impent->imp_context) == CLASS_IMPLEMENTATION_TYPE)
  	  {
! 	    location_t loc = DECL_SOURCE_LOCATION (impent->class_decl);
! 	    tree expr = build_unary_op (loc,
! 					ADDR_EXPR, impent->class_decl, 0);
! 	    tree idx = size_int (n++);
! 	    CONSTRUCTOR_APPEND_ELT (v, idx, expr);
  	  }
        }
  
    if (cat_count)
!     for (struct imp_entry *impent = imp_list; impent; impent = impent->next)
        {
  	if (TREE_CODE (impent->imp_context) == CATEGORY_IMPLEMENTATION_TYPE)
  	  {
! 	    location_t loc = DECL_SOURCE_LOCATION (impent->class_decl);
! 	    tree expr = build_unary_op (loc,
! 					ADDR_EXPR, impent->class_decl, 0);
! 	    tree idx = size_int (n++);
! 	    CONSTRUCTOR_APPEND_ELT (v, idx, expr);
  	  }
        }
  
!   location_t loc = UNKNOWN_LOCATION;
    /* statics = { ..., _OBJC_STATIC_INSTANCES, ... }  */
+   tree expr;
    if (static_instances_decl)
      expr = build_unary_op (loc, ADDR_EXPR, static_instances_decl, 0);
    else
!     expr = null_pointer_node;
!   tree idx = size_int (n++);
!   CONSTRUCTOR_APPEND_ELT (v, idx, expr);
  
    return objc_build_constructor (type, v);
  }
*************** build_objc_symtab_template (void)
*** 1998,2040 ****
  static tree
  init_objc_symtab (tree type)
  {
-   tree field, expr, ltyp;
-   location_t loc;
    vec<constructor_elt, va_gc> *v = NULL;
  
-   loc = UNKNOWN_LOCATION;
- 
    /* sel_ref_cnt = { ..., 5, ... } */
! 
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE,
  			  build_int_cst (long_integer_type_node, 0));
  
    /* refs = { ..., _OBJC_SELECTOR_TABLE, ... } */
! 
!   ltyp = build_pointer_type (objc_selector_type);
    if (sel_ref_chain)
      expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR,
  					  UOBJC_SELECTOR_TABLE_decl, 1));
    else
      expr = convert (ltyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
  
    /* cls_def_cnt = { ..., 5, ... } */
! 
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE,
  			  build_int_cst (short_integer_type_node, imp_count));
  
    /* cat_def_cnt = { ..., 5, ... } */
! 
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE,
  			  build_int_cst (short_integer_type_node, cat_count));
  
    /* cls_def = { ..., { &Foo, &Bar, ...}, ... } */
! 
!   field = TYPE_FIELDS (type);
!   field = DECL_CHAIN (DECL_CHAIN (DECL_CHAIN (DECL_CHAIN (field))));
! 
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init_def_list (TREE_TYPE (field)));
  
    return objc_build_constructor (type, v);
  }
--- 2004,2041 ----
  static tree
  init_objc_symtab (tree type)
  {
    vec<constructor_elt, va_gc> *v = NULL;
  
    /* sel_ref_cnt = { ..., 5, ... } */
!   tree fields = first_type_field (type);
!   CONSTRUCTOR_APPEND_ELT (v, fields,
  			  build_int_cst (long_integer_type_node, 0));
  
    /* refs = { ..., _OBJC_SELECTOR_TABLE, ... } */
!   location_t loc = UNKNOWN_LOCATION;
!   tree ltyp = build_pointer_type (objc_selector_type);
!   tree expr;
    if (sel_ref_chain)
      expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR,
  					  UOBJC_SELECTOR_TABLE_decl, 1));
    else
      expr = convert (ltyp, null_pointer_node);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, expr);
  
    /* cls_def_cnt = { ..., 5, ... } */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields,
  			  build_int_cst (short_integer_type_node, imp_count));
  
    /* cat_def_cnt = { ..., 5, ... } */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields,
  			  build_int_cst (short_integer_type_node, cat_count));
  
    /* cls_def = { ..., { &Foo, &Bar, ...}, ... } */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, init_def_list (TREE_TYPE (fields)));
  
    return objc_build_constructor (type, v);
  }
*************** static void
*** 2046,2055 ****
  generate_objc_symtab_decl (void)
  {
    build_objc_symtab_template ();
!   UOBJC_SYMBOLS_decl = start_var_decl (objc_symtab_template, "_OBJC_SYMBOLS");
    OBJCMETA (UOBJC_SYMBOLS_decl, objc_meta, meta_base);
!   finish_var_decl (UOBJC_SYMBOLS_decl,
! 		   init_objc_symtab (TREE_TYPE (UOBJC_SYMBOLS_decl)));
  }
  
  static void
--- 2047,2056 ----
  generate_objc_symtab_decl (void)
  {
    build_objc_symtab_template ();
!   UOBJC_SYMBOLS_decl = start_meta_decl (objc_symtab_template, "_OBJC_SYMBOLS");
    OBJCMETA (UOBJC_SYMBOLS_decl, objc_meta, meta_base);
!   finish_meta_decl (UOBJC_SYMBOLS_decl,
! 		    init_objc_symtab (TREE_TYPE (UOBJC_SYMBOLS_decl)));
  }
  
  static void
*************** make_err_class:
*** 2180,2186 ****
  			     IDENTIFIER_POINTER (ident));
        /* We have to finalize this var here, because this might be called after
  	 all the other metadata strings have been emitted.  */
!       finish_var_decl (decl, str);
      }
    return eh_id;
  }
--- 2181,2187 ----
  			     IDENTIFIER_POINTER (ident));
        /* We have to finalize this var here, because this might be called after
  	 all the other metadata strings have been emitted.  */
!       finish_meta_decl (decl, str);
      }
    return eh_id;
  }
diff -Nrcpad gcc-17-20260628/gcc/objc/objc-next-runtime-abi-01.cc gcc-17-20260705/gcc/objc/objc-next-runtime-abi-01.cc
*** gcc-17-20260628/gcc/objc/objc-next-runtime-abi-01.cc	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/objc/objc-next-runtime-abi-01.cc	Sun Jul  5 22:32:08 2026
*************** static void next_runtime_01_initialize (
*** 272,278 ****
  					   get_identifier (TAG_SELECTOR)));
  
    /* SEL typedef.  */
!   type = lang_hooks.decls.pushdecl (build_decl (input_location,
  						TYPE_DECL,
  						objc_selector_name,
  						objc_selector_type));
--- 272,278 ----
  					   get_identifier (TAG_SELECTOR)));
  
    /* SEL typedef.  */
!   type = lang_hooks.decls.pushdecl (objc_build_decl (input_location,
  						TYPE_DECL,
  						objc_selector_name,
  						objc_selector_type));
*************** next_runtime_abi_01_class_decl (tree kla
*** 603,609 ****
    char buf[BUFSIZE];
    snprintf (buf, BUFSIZE, "_OBJC_Class_%s",
  	    IDENTIFIER_POINTER (CLASS_NAME (klass)));
!   decl = start_var_decl (objc_class_template, buf);
    OBJCMETA (decl, objc_meta, meta_class);
    return decl;
  }
--- 603,609 ----
    char buf[BUFSIZE];
    snprintf (buf, BUFSIZE, "_OBJC_Class_%s",
  	    IDENTIFIER_POINTER (CLASS_NAME (klass)));
!   decl = start_meta_decl (objc_class_template, buf);
    OBJCMETA (decl, objc_meta, meta_class);
    return decl;
  }
*************** next_runtime_abi_01_metaclass_decl (tree
*** 615,621 ****
    char buf[BUFSIZE];
    snprintf (buf, BUFSIZE, "_OBJC_MetaClass_%s",
  	    IDENTIFIER_POINTER (CLASS_NAME (klass)));
!   decl = start_var_decl (objc_class_template, buf);
    OBJCMETA (decl, objc_meta, meta_metaclass);
    return decl;
  }
--- 615,621 ----
    char buf[BUFSIZE];
    snprintf (buf, BUFSIZE, "_OBJC_MetaClass_%s",
  	    IDENTIFIER_POINTER (CLASS_NAME (klass)));
!   decl = start_meta_decl (objc_class_template, buf);
    OBJCMETA (decl, objc_meta, meta_metaclass);
    return decl;
  }
*************** next_runtime_abi_01_category_decl (tree
*** 628,634 ****
    snprintf (buf, BUFSIZE, "_OBJC_Category_%s_on_%s",
  	    IDENTIFIER_POINTER (CLASS_SUPER_NAME (klass)),
  	    IDENTIFIER_POINTER (CLASS_NAME (klass)));
!   decl = start_var_decl (objc_category_template, buf);
    OBJCMETA (decl, objc_meta, meta_category);
    return decl;
  }
--- 628,634 ----
    snprintf (buf, BUFSIZE, "_OBJC_Category_%s_on_%s",
  	    IDENTIFIER_POINTER (CLASS_SUPER_NAME (klass)),
  	    IDENTIFIER_POINTER (CLASS_NAME (klass)));
!   decl = start_meta_decl (objc_category_template, buf);
    OBJCMETA (decl, objc_meta, meta_category);
    return decl;
  }
*************** next_runtime_abi_01_protocol_decl (tree
*** 643,649 ****
  
    snprintf (buf, BUFSIZE, "_OBJC_Protocol_%s",
  	    IDENTIFIER_POINTER (PROTOCOL_NAME (p)));
!   decl = start_var_decl (objc_protocol_template, buf);
    OBJCMETA (decl, objc_meta, meta_protocol);
    return decl;
  }
--- 643,649 ----
  
    snprintf (buf, BUFSIZE, "_OBJC_Protocol_%s",
  	    IDENTIFIER_POINTER (PROTOCOL_NAME (p)));
!   decl = start_meta_decl (objc_protocol_template, buf);
    OBJCMETA (decl, objc_meta, meta_protocol);
    return decl;
  }
*************** next_runtime_abi_01_protocol_decl (tree
*** 651,657 ****
  static tree
  next_runtime_abi_01_string_decl (tree type, const char *name,  string_section where)
  {
!   tree var = start_var_decl (type, name);
    switch (where)
      {
        case class_names:
--- 651,657 ----
  static tree
  next_runtime_abi_01_string_decl (tree type, const char *name,  string_section where)
  {
!   tree var = start_meta_decl (type, name);
    switch (where)
      {
        case class_names:
*************** build_class_reference_decl (void)
*** 684,690 ****
    char buf[BUFSIZE];
  
    sprintf (buf, "_OBJC_ClassRefs_%d", class_reference_idx++);
!   decl = start_var_decl (objc_class_type, buf);
  
    return decl;
  }
--- 684,690 ----
    char buf[BUFSIZE];
  
    sprintf (buf, "_OBJC_ClassRefs_%d", class_reference_idx++);
!   decl = start_meta_decl (objc_class_type, buf);
  
    return decl;
  }
*************** build_selector_reference_decl (tree iden
*** 781,787 ****
          *t = '$'; /* Underscore would clash between foo:bar and foo_bar.  */
        t++;
      }
!   decl = start_var_decl (objc_selector_type, buf);
    OBJCMETA (decl, objc_meta, meta_sel_refs);
    return decl;
  }
--- 781,787 ----
          *t = '$'; /* Underscore would clash between foo:bar and foo_bar.  */
        t++;
      }
!   decl = start_meta_decl (objc_selector_type, buf);
    OBJCMETA (decl, objc_meta, meta_sel_refs);
    return decl;
  }
*************** build_objc_method_call (location_t loc,
*** 873,878 ****
--- 873,879 ----
  							? umsg_fast_decl
  							: umsg_decl)
  						: umsg_nonnil_decl));
+   TREE_ADDRESSABLE (sender) = true;
    method = build_fold_addr_expr_loc (loc, sender);
  
    /* Pass the object to the method.  */
*************** next_runtime_abi_01_get_protocol_referen
*** 916,921 ****
--- 917,923 ----
    if (!PROTOCOL_FORWARD_DECL (p))
      PROTOCOL_FORWARD_DECL (p) = next_runtime_abi_01_protocol_decl (p);
  
+   TREE_ADDRESSABLE (PROTOCOL_FORWARD_DECL (p)) = true;
    expr = build_unary_op (loc, ADDR_EXPR, PROTOCOL_FORWARD_DECL (p), 0);
    return convert (objc_protocol_type, expr);
  }
*************** static tree
*** 1011,1034 ****
  next_runtime_abi_01_build_const_string_constructor (location_t loc, tree string,
  						   int length)
  {
-   tree constructor, fields, var;
    vec<constructor_elt, va_gc> *v = NULL;
  
    /* NeXT:   (NSConstantString *) & ((__builtin_ObjCString) { isa, string, length })   */
!   fields = TYPE_FIELDS (internal_const_str_type);
    CONSTRUCTOR_APPEND_ELT (v, fields,
  			  build_unary_op (loc, ADDR_EXPR, string_class_decl, 0));
  
!   fields = DECL_CHAIN (fields);
    CONSTRUCTOR_APPEND_ELT (v, fields,
  			  build_unary_op (loc, ADDR_EXPR, string, 1));
  
    /* ??? check if this should be long.  */
!   fields = DECL_CHAIN (fields);
    CONSTRUCTOR_APPEND_ELT (v, fields, build_int_cst (NULL_TREE, length));
!   constructor = objc_build_constructor (internal_const_str_type, v);
  
!   var = build_decl (input_location, CONST_DECL, NULL, TREE_TYPE (constructor));
    DECL_INITIAL (var) = constructor;
    TREE_STATIC (var) = 1;
    DECL_CONTEXT (var) = NULL;
--- 1013,1037 ----
  next_runtime_abi_01_build_const_string_constructor (location_t loc, tree string,
  						   int length)
  {
    vec<constructor_elt, va_gc> *v = NULL;
  
    /* NeXT:   (NSConstantString *) & ((__builtin_ObjCString) { isa, string, length })   */
!   tree fields = first_type_field (internal_const_str_type);
!   TREE_ADDRESSABLE (string_class_decl) = true;
    CONSTRUCTOR_APPEND_ELT (v, fields,
  			  build_unary_op (loc, ADDR_EXPR, string_class_decl, 0));
  
!   fields = next_type_field (fields);
!   TREE_ADDRESSABLE (string) = true;
    CONSTRUCTOR_APPEND_ELT (v, fields,
  			  build_unary_op (loc, ADDR_EXPR, string, 1));
  
    /* ??? check if this should be long.  */
!   fields = next_type_field (fields);
    CONSTRUCTOR_APPEND_ELT (v, fields, build_int_cst (NULL_TREE, length));
!   tree constructor = objc_build_constructor (internal_const_str_type, v);
  
!   tree var = objc_build_decl (loc, CONST_DECL, NULL, TREE_TYPE (constructor));
    DECL_INITIAL (var) = constructor;
    TREE_STATIC (var) = 1;
    DECL_CONTEXT (var) = NULL;
*************** static tree
*** 1150,1183 ****
  generate_v1_meth_descriptor_table (tree chain, tree protocol,
  				   const char *prefix, tree attr)
  {
-   tree method_list_template, initlist, decl;
-   int size;
-   vec<constructor_elt, va_gc> *v = NULL;
-   char buf[BUFSIZE];
- 
    if (!chain || !prefix)
      return NULL_TREE;
  
    if (!objc_method_prototype_template)
      objc_method_prototype_template = build_method_prototype_template ();
  
!   size = list_length (chain);
!   method_list_template =
! 	build_method_prototype_list_template (objc_method_prototype_template,
! 					      size);
    snprintf (buf, BUFSIZE, "%s_%s", prefix,
  	    IDENTIFIER_POINTER (PROTOCOL_NAME (protocol)));
  
!   decl = start_var_decl (method_list_template, buf);
  
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, build_int_cst (NULL_TREE, size));
!   initlist =
! 	build_descriptor_table_initializer (objc_method_prototype_template,
! 					    chain);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, initlist);
    /* Get into the right section.  */
    OBJCMETA (decl, objc_meta, attr);
!   finish_var_decl (decl, objc_build_constructor (method_list_template, v));
    return decl;
  }
  
--- 1153,1185 ----
  generate_v1_meth_descriptor_table (tree chain, tree protocol,
  				   const char *prefix, tree attr)
  {
    if (!chain || !prefix)
      return NULL_TREE;
  
    if (!objc_method_prototype_template)
      objc_method_prototype_template = build_method_prototype_template ();
  
!   int size = list_length (chain);
!   tree method_list_template
!     = build_method_prototype_list_template (objc_method_prototype_template,
! 					    size);
!   char buf[BUFSIZE];
    snprintf (buf, BUFSIZE, "%s_%s", prefix,
  	    IDENTIFIER_POINTER (PROTOCOL_NAME (protocol)));
  
!   tree decl = start_meta_decl (method_list_template, buf);
!   vec<constructor_elt, va_gc> *v = NULL;
  
!   tree fields = first_type_field (method_list_template);
!   CONSTRUCTOR_APPEND_ELT (v, fields, build_int_cst (NULL_TREE, size));
!   tree initlist
!     = build_descriptor_table_initializer (objc_method_prototype_template,
! 					  chain);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, initlist);
    /* Get into the right section.  */
    OBJCMETA (decl, objc_meta, attr);
!   finish_meta_decl (decl, objc_build_constructor (method_list_template, v));
    return decl;
  }
  
*************** generate_v1_objc_protocol_extension (tre
*** 1191,1248 ****
  				     tree opt_class_meth,
  				     tree instance_props)
  {
!   int size;
!   location_t loc;
!   vec<constructor_elt, va_gc> *v = NULL;
!   tree decl, expr;
!   char buf[BUFSIZE];
! 
!   /* If there are no extensions, then don't bother... */
    if (!opt_instance_meth && !opt_class_meth && !instance_props)
      return NULL_TREE;
  
    if (!objc_protocol_extension_template)
      build_v1_objc_protocol_extension_template ();
  
    /* uint32_t size */
!   size = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (objc_protocol_extension_template));
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, build_int_cst (NULL_TREE, size));
  
    /* Try for meaningful diagnostics.  */
!   loc = DECL_SOURCE_LOCATION (PROTOCOL_FORWARD_DECL (proto_interface));
  
    /* struct objc_method_list *optional_instance_methods; */
    if (opt_instance_meth)
!     expr = convert (objc_method_list_ptr,
! 		    build_unary_op (loc, ADDR_EXPR, opt_instance_meth, 0));
    else
!     expr = convert (objc_method_list_ptr, null_pointer_node);
  
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
  
    /* struct objc_method_list *optional_class_methods; */
    if (opt_class_meth)
!     expr = convert (objc_method_list_ptr,
! 		    build_unary_op (loc, ADDR_EXPR, opt_class_meth, 0));
    else
!     expr = convert (objc_method_list_ptr, null_pointer_node);
  
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
    /* struct objc_prop_list *instance_properties; */
    if (instance_props)
        expr = convert (objc_prop_list_ptr,
  		      build_unary_op (loc, ADDR_EXPR, instance_props, 0));
    else
!     expr = convert (objc_prop_list_ptr, null_pointer_node);
  
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
    snprintf (buf, BUFSIZE, "_OBJC_ProtocolExt_%s",
  	    IDENTIFIER_POINTER (PROTOCOL_NAME (proto_interface)));
  
!   decl = start_var_decl (objc_protocol_extension_template, buf);
    expr = objc_build_constructor (TREE_TYPE (decl), v);
    OBJCMETA (decl, objc_meta, meta_protocol_extension);
!   finish_var_decl (decl, expr);
    return decl;
  }
  
--- 1193,1262 ----
  				     tree opt_class_meth,
  				     tree instance_props)
  {
!   /* If there are no extensions, then nothing to do. */
    if (!opt_instance_meth && !opt_class_meth && !instance_props)
      return NULL_TREE;
  
    if (!objc_protocol_extension_template)
      build_v1_objc_protocol_extension_template ();
  
+   vec<constructor_elt, va_gc> *v = NULL;
    /* uint32_t size */
!   int size
!     = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (objc_protocol_extension_template));
!   tree fields = first_type_field (objc_protocol_extension_template);
!   CONSTRUCTOR_APPEND_ELT (v, fields, build_int_cst (integer_type_node, size));
  
    /* Try for meaningful diagnostics.  */
!   location_t loc
!     = DECL_SOURCE_LOCATION (PROTOCOL_FORWARD_DECL (proto_interface));
  
    /* struct objc_method_list *optional_instance_methods; */
+   tree expr;
    if (opt_instance_meth)
!     {
!       TREE_ADDRESSABLE (opt_instance_meth) = true;
!       expr = convert (objc_method_list_ptr,
! 		      build_unary_op (loc, ADDR_EXPR, opt_instance_meth, 0));
!     }
    else
!     expr = build_zero_cst (objc_method_list_ptr);
  
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, expr);
  
    /* struct objc_method_list *optional_class_methods; */
    if (opt_class_meth)
!     {
!       TREE_ADDRESSABLE (opt_class_meth) = true;
!       expr = convert (objc_method_list_ptr,
! 		      build_unary_op (loc, ADDR_EXPR, opt_class_meth, 0));
!     }
    else
!     expr = build_zero_cst (objc_method_list_ptr);
  
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, expr);
    /* struct objc_prop_list *instance_properties; */
    if (instance_props)
+     {
+       TREE_ADDRESSABLE (instance_props) = true;
        expr = convert (objc_prop_list_ptr,
  		      build_unary_op (loc, ADDR_EXPR, instance_props, 0));
+     }
    else
!     expr = build_zero_cst (objc_prop_list_ptr);
  
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, expr);
!   char buf[BUFSIZE];
    snprintf (buf, BUFSIZE, "_OBJC_ProtocolExt_%s",
  	    IDENTIFIER_POINTER (PROTOCOL_NAME (proto_interface)));
  
!   tree decl = start_meta_decl (objc_protocol_extension_template, buf);
    expr = objc_build_constructor (TREE_TYPE (decl), v);
    OBJCMETA (decl, objc_meta, meta_protocol_extension);
!   finish_meta_decl (decl, expr);
    return decl;
  }
  
*************** static tree
*** 1284,1313 ****
  build_v1_property_table_initializer (tree type, tree context)
  {
    tree x;
-   vec<constructor_elt, va_gc> *inits = NULL;
- 
    if (TREE_CODE (context) == PROTOCOL_INTERFACE_TYPE)
      x = CLASS_PROPERTY_DECL (context);
    else
      x = IMPL_PROPERTY_DECL (context);
  
    for (; x; x = TREE_CHAIN (x))
      {
        vec<constructor_elt, va_gc> *elemlist = NULL;
!       tree attribute, name_ident = PROPERTY_NAME (x);
! 
!       CONSTRUCTOR_APPEND_ELT (elemlist, NULL_TREE,
  			      add_objc_string (name_ident, prop_names_attr));
  
!       attribute = objc_v2_encode_prop_attr (x);
!       CONSTRUCTOR_APPEND_ELT (elemlist, NULL_TREE,
  			      add_objc_string (attribute, prop_names_attr));
  
!       CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE,
  			      objc_build_constructor (type, elemlist));
      }
  
!   return objc_build_constructor (build_array_type (type, 0),inits);
  }
  
  /* This routine builds the 'struct _prop_list_t' variable declaration and
--- 1298,1330 ----
  build_v1_property_table_initializer (tree type, tree context)
  {
    tree x;
    if (TREE_CODE (context) == PROTOCOL_INTERFACE_TYPE)
      x = CLASS_PROPERTY_DECL (context);
    else
      x = IMPL_PROPERTY_DECL (context);
  
+   vec<constructor_elt, va_gc> *inits = NULL;
+   unsigned n = 0;
    for (; x; x = TREE_CHAIN (x))
      {
        vec<constructor_elt, va_gc> *elemlist = NULL;
!       tree name_ident = PROPERTY_NAME (x);
!       tree fields = first_type_field (type);
!       CONSTRUCTOR_APPEND_ELT (elemlist, fields,
  			      add_objc_string (name_ident, prop_names_attr));
  
!       tree attribute = objc_v2_encode_prop_attr (x);
!       fields = next_type_field (fields);
!       CONSTRUCTOR_APPEND_ELT (elemlist, fields,
  			      add_objc_string (attribute, prop_names_attr));
  
!       tree idx = size_int (n++);
!       CONSTRUCTOR_APPEND_ELT (inits, idx,
  			      objc_build_constructor (type, elemlist));
      }
  
!   tree idx_type = build_index_type (size_int (n));
!   return objc_build_constructor (build_array_type (type, idx_type), inits);
  }
  
  /* This routine builds the 'struct _prop_list_t' variable declaration and
*************** build_v1_property_table_initializer (tre
*** 1318,1329 ****
  static tree
  generate_v1_property_table (tree context, tree klass_ctxt)
  {
-   tree x, decl, initlist, property_list_template;
    bool is_proto = false;
!   vec<constructor_elt, va_gc> *inits = NULL;
!   int init_val, size = 0;
!   char buf[BUFSIZE];
! 
    if (context)
      {
        gcc_assert (TREE_CODE (context) == PROTOCOL_INTERFACE_TYPE);
--- 1335,1342 ----
  static tree
  generate_v1_property_table (tree context, tree klass_ctxt)
  {
    bool is_proto = false;
!   tree x;
    if (context)
      {
        gcc_assert (TREE_CODE (context) == PROTOCOL_INTERFACE_TYPE);
*************** generate_v1_property_table (tree context
*** 1333,1338 ****
--- 1346,1352 ----
    else
      x = IMPL_PROPERTY_DECL (klass_ctxt);
  
+   int size = 0;
    for (; x; x = TREE_CHAIN (x))
      size++;
  
*************** generate_v1_property_table (tree context
*** 1342,1355 ****
    if (!objc_v1_property_template)
      objc_v1_property_template = build_v1_property_template ();
  
!   property_list_template =
  	build_v1_property_list_template (objc_v1_property_template,
  					 size);
!   initlist = build_v1_property_table_initializer (objc_v1_property_template,
! 						  is_proto ? context
! 							   : klass_ctxt);
  
!   init_val = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (objc_v1_property_template));
    if (is_proto)
      snprintf (buf, BUFSIZE, "_OBJC_ProtocolPropList_%s",
  	      IDENTIFIER_POINTER (PROTOCOL_NAME (context)));
--- 1356,1370 ----
    if (!objc_v1_property_template)
      objc_v1_property_template = build_v1_property_template ();
  
!   tree property_list_template =
  	build_v1_property_list_template (objc_v1_property_template,
  					 size);
!   tree initlist
!     = build_v1_property_table_initializer (objc_v1_property_template,
! 					   is_proto ? context : klass_ctxt);
  
!   char buf[BUFSIZE];
!   int init_val = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (objc_v1_property_template));
    if (is_proto)
      snprintf (buf, BUFSIZE, "_OBJC_ProtocolPropList_%s",
  	      IDENTIFIER_POINTER (PROTOCOL_NAME (context)));
*************** generate_v1_property_table (tree context
*** 1357,1380 ****
      snprintf (buf, BUFSIZE, "_OBJC_ClassPropList_%s",
  	      IDENTIFIER_POINTER (CLASS_NAME (klass_ctxt)));
  
!   decl = start_var_decl (property_list_template, buf);
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, build_int_cst (NULL_TREE, init_val));
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, build_int_cst (NULL_TREE, size));
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, initlist);
    x = objc_build_constructor (TREE_TYPE (decl), inits);
    OBJCMETA (decl, objc_meta, meta_proplist);
!   finish_var_decl (decl, x);
    return decl;
  }
  
  static tree
  generate_v1_protocol_list (tree i_or_p, tree klass_ctxt)
  {
!   tree array_type, ptype, refs_decl, lproto, e, plist, attr;
!   int size = 0;
!   vec<constructor_elt, va_gc> *v = NULL;
!   char buf[BUFSIZE];
! 
    switch (TREE_CODE (i_or_p))
      {
      case CLASS_INTERFACE_TYPE:
--- 1372,1397 ----
      snprintf (buf, BUFSIZE, "_OBJC_ClassPropList_%s",
  	      IDENTIFIER_POINTER (CLASS_NAME (klass_ctxt)));
  
!   vec<constructor_elt, va_gc> *inits = NULL;
!   tree decl = start_meta_decl (property_list_template, buf);
!   tree fields = first_type_field (property_list_template);
!   CONSTRUCTOR_APPEND_ELT (inits, fields,
! 			  build_int_cst (integer_type_node, init_val));
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (inits, fields,
! 			  build_int_cst (integer_type_node, size));
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (inits, fields, initlist);
    x = objc_build_constructor (TREE_TYPE (decl), inits);
    OBJCMETA (decl, objc_meta, meta_proplist);
!   finish_meta_decl (decl, x);
    return decl;
  }
  
  static tree
  generate_v1_protocol_list (tree i_or_p, tree klass_ctxt)
  {
!   tree plist;
    switch (TREE_CODE (i_or_p))
      {
      case CLASS_INTERFACE_TYPE:
*************** generate_v1_protocol_list (tree i_or_p,
*** 1389,1405 ****
      }
  
    /* Compute size.  */
!   for (lproto = plist; lproto; lproto = TREE_CHAIN (lproto))
      if (TREE_CODE (TREE_VALUE (lproto)) == PROTOCOL_INTERFACE_TYPE
  	&& PROTOCOL_FORWARD_DECL (TREE_VALUE (lproto)))
        size++;
  
    /* Build initializer.  */
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, build_int_cst (NULL_TREE, 0));
!   e = build_int_cst (build_pointer_type (objc_protocol_template), size);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, e);
  
!   for (lproto = plist; lproto; lproto = TREE_CHAIN (lproto))
      {
        tree pval = TREE_VALUE (lproto);
  
--- 1406,1429 ----
      }
  
    /* Compute size.  */
!   int size = 0;
!   for (tree lproto = plist; lproto; lproto = TREE_CHAIN (lproto))
      if (TREE_CODE (TREE_VALUE (lproto)) == PROTOCOL_INTERFACE_TYPE
  	&& PROTOCOL_FORWARD_DECL (TREE_VALUE (lproto)))
        size++;
  
    /* Build initializer.  */
!   vec<constructor_elt, va_gc> *v = NULL;
!   /* FIXME this is taking liberties with assumptions about sizes of ints and
!      pointers.  */
!   unsigned n = 0;
!   tree idx = size_int (n++);
!   CONSTRUCTOR_APPEND_ELT (v, idx, build_int_cst (integer_type_node, 0));
!   tree e = build_int_cst (build_pointer_type (objc_protocol_template), size);
!   idx = size_int (n++);
!   CONSTRUCTOR_APPEND_ELT (v, idx, e);
  
!   for (tree lproto = plist; lproto; lproto = TREE_CHAIN (lproto))
      {
        tree pval = TREE_VALUE (lproto);
  
*************** generate_v1_protocol_list (tree i_or_p,
*** 1408,1419 ****
  	{
  	  tree fwref = PROTOCOL_FORWARD_DECL (pval);
  	  location_t loc = DECL_SOURCE_LOCATION (fwref) ;
  	  e = build_unary_op (loc, ADDR_EXPR, fwref, 0);
!           CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, e);
  	}
      }
  
    /* static struct objc_protocol *refs[n]; */
    switch (TREE_CODE (i_or_p))
      {
      case PROTOCOL_INTERFACE_TYPE:
--- 1432,1447 ----
  	{
  	  tree fwref = PROTOCOL_FORWARD_DECL (pval);
  	  location_t loc = DECL_SOURCE_LOCATION (fwref) ;
+ 	  TREE_ADDRESSABLE (fwref) = true;
  	  e = build_unary_op (loc, ADDR_EXPR, fwref, 0);
! 	  idx = size_int (n++);
! 	  CONSTRUCTOR_APPEND_ELT (v, idx, e);
  	}
      }
  
    /* static struct objc_protocol *refs[n]; */
+   char buf[BUFSIZE];
+   tree attr;
    switch (TREE_CODE (i_or_p))
      {
      case PROTOCOL_INTERFACE_TYPE:
*************** generate_v1_protocol_list (tree i_or_p,
*** 1436,1448 ****
        gcc_unreachable ();
      }
  
!   ptype = build_pointer_type (objc_protocol_template);
!   array_type = build_sized_array_type (ptype, size + 3);
!   refs_decl = start_var_decl (array_type, buf);
  
    OBJCMETA (refs_decl, objc_meta, attr);
!   finish_var_decl (refs_decl,
!                    objc_build_constructor (TREE_TYPE (refs_decl), v));
  
    return refs_decl;
  }
--- 1464,1476 ----
        gcc_unreachable ();
      }
  
!   tree ptype = build_pointer_type (objc_protocol_template);
!   tree array_type = build_sized_array_type (ptype, size + 3);
!   tree refs_decl = start_meta_decl (array_type, buf);
  
    OBJCMETA (refs_decl, objc_meta, attr);
!   finish_meta_decl (refs_decl,
! 		    objc_build_constructor (TREE_TYPE (refs_decl), v));
  
    return refs_decl;
  }
*************** build_v1_protocol_initializer (tree type
*** 1452,1490 ****
  			       tree inst_methods, tree class_methods,
  			       tree protocol_ext)
  {
-   tree expr, ttyp;
-   location_t loc;
-   vec<constructor_elt, va_gc> *inits = NULL;
- 
    if (!objc_protocol_extension_template)
      build_v1_objc_protocol_extension_template ();
  
    /* TODO: find a better representation of location from the inputs.  */
!   loc = UNKNOWN_LOCATION;
!   ttyp = build_pointer_type (objc_protocol_extension_template);
    /* Instead of jamming the protocol version number into the isa, we pass
       either a pointer to the protocol extension - or NULL.  */
    if (protocol_ext)
!     expr = convert (ttyp, build_unary_op (loc, ADDR_EXPR, protocol_ext, 0));
    else
!     expr = convert (ttyp, null_pointer_node);
  
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, expr);
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, protocol_name);
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, protocol_list);
  
    ttyp = objc_method_proto_list_ptr;
    if (inst_methods)
!     expr = convert (ttyp, build_unary_op (loc, ADDR_EXPR, inst_methods, 0));
    else
!     expr = convert (ttyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, expr);
  
    if (class_methods)
!     expr = convert (ttyp, build_unary_op (loc, ADDR_EXPR, class_methods, 0));
    else
!     expr = convert (ttyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, expr);
  
    return objc_build_constructor (type, inits);
  }
--- 1480,1530 ----
  			       tree inst_methods, tree class_methods,
  			       tree protocol_ext)
  {
    if (!objc_protocol_extension_template)
      build_v1_objc_protocol_extension_template ();
  
    /* TODO: find a better representation of location from the inputs.  */
!   location_t loc = UNKNOWN_LOCATION;
!   tree ttyp = build_pointer_type (objc_protocol_extension_template);
    /* Instead of jamming the protocol version number into the isa, we pass
       either a pointer to the protocol extension - or NULL.  */
+   tree expr;
    if (protocol_ext)
!     {
!       TREE_ADDRESSABLE (protocol_ext) = true;
!       expr = convert (ttyp, build_unary_op (loc, ADDR_EXPR, protocol_ext, 0));
!     }
    else
!     expr = build_zero_cst (ttyp);
  
!   vec<constructor_elt, va_gc> *inits = NULL;
!   tree fields = first_type_field (type);
!   CONSTRUCTOR_APPEND_ELT (inits, fields, expr);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (inits, fields, protocol_name);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (inits, fields, protocol_list);
  
    ttyp = objc_method_proto_list_ptr;
    if (inst_methods)
!     {
!       TREE_ADDRESSABLE (inst_methods) = true;
!       expr = convert (ttyp, build_unary_op (loc, ADDR_EXPR, inst_methods, 0));
!     }
    else
!     expr = build_zero_cst (ttyp);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (inits, fields, expr);
  
    if (class_methods)
!     {
!       TREE_ADDRESSABLE (class_methods) = true;
!       expr = convert (ttyp, build_unary_op (loc, ADDR_EXPR, class_methods, 0));
!     }
    else
!     expr = build_zero_cst (ttyp);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (inits, fields, expr);
  
    return objc_build_constructor (type, inits);
  }
*************** generate_v1_protocols (void)
*** 1625,1634 ****
        refs_type =
  	build_pointer_type (build_pointer_type (objc_protocol_template));
        if (refs_decl)
! 	refs_expr = convert (refs_type,
! 			     build_unary_op (loc, ADDR_EXPR, refs_decl, 0));
        else
!         refs_expr = convert (refs_type, null_pointer_node);
  
        if (flag_objc_abi < 1)
  	{
--- 1665,1677 ----
        refs_type =
  	build_pointer_type (build_pointer_type (objc_protocol_template));
        if (refs_decl)
! 	{
! 	  TREE_ADDRESSABLE (refs_decl) = true;
! 	  refs_expr = convert (refs_type,
! 			       build_unary_op (loc, ADDR_EXPR, refs_decl, 0));
! 	}
        else
!         refs_expr = build_zero_cst (refs_type);
  
        if (flag_objc_abi < 1)
  	{
*************** generate_v1_protocols (void)
*** 1638,1645 ****
  					    protocol_name_expr, refs_expr,
  					    UOBJC_INSTANCE_METHODS_decl,
  					    UOBJC_CLASS_METHODS_decl);
! 	  finish_var_decl (decl, initlist);
!           continue;
  	}
  
        /* else - V1 extensions.  */
--- 1681,1688 ----
  					    protocol_name_expr, refs_expr,
  					    UOBJC_INSTANCE_METHODS_decl,
  					    UOBJC_CLASS_METHODS_decl);
! 	  finish_meta_decl (decl, initlist);
! 	  continue;
  	}
  
        /* else - V1 extensions.  */
*************** generate_v1_protocols (void)
*** 1658,1695 ****
  						UOBJC_INSTANCE_METHODS_decl,
  						UOBJC_CLASS_METHODS_decl,
  						V1_ProtocolExt_decl);
!       finish_var_decl (decl, initlist);
      }
  }
  
  static tree
  generate_dispatch_table (tree chain, const char *name, tree attr)
  {
!   tree decl, method_list_template, initlist;
!   vec<constructor_elt, va_gc> *v = NULL;
!   int size;
! 
    if (!chain || !name || !(size = list_length (chain)))
      return NULL_TREE;
  
    if (!objc_method_template)
      objc_method_template = build_method_template ();
  
!   method_list_template = build_method_list_template (objc_method_template,
! 						     size);
!   initlist = build_dispatch_table_initializer (objc_method_template, chain);
! 
!   decl = start_var_decl (method_list_template, name);
  
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, integer_zero_node);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE,
  			  build_int_cst (integer_type_node, size));
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, initlist);
  
    OBJCMETA (decl, objc_meta, attr);
!   finish_var_decl (decl,
! 		   objc_build_constructor (TREE_TYPE (decl), v));
! 
    return decl;
  }
  
--- 1701,1737 ----
  						UOBJC_INSTANCE_METHODS_decl,
  						UOBJC_CLASS_METHODS_decl,
  						V1_ProtocolExt_decl);
!       finish_meta_decl (decl, initlist);
      }
  }
  
  static tree
  generate_dispatch_table (tree chain, const char *name, tree attr)
  {
!   int size = 0;
    if (!chain || !name || !(size = list_length (chain)))
      return NULL_TREE;
  
    if (!objc_method_template)
      objc_method_template = build_method_template ();
  
!   tree method_list_template
!     = build_method_list_template (objc_method_template, size);
!   tree initlist = build_dispatch_table_initializer (objc_method_template, chain);
  
!   vec<constructor_elt, va_gc> *v = NULL;
!   tree fields = first_type_field (method_list_template);
!   CONSTRUCTOR_APPEND_ELT (v, fields, build_zero_cst (TREE_TYPE (fields)));
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields,
  			  build_int_cst (integer_type_node, size));
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, initlist);
  
+   tree decl = start_meta_decl (method_list_template, name);
    OBJCMETA (decl, objc_meta, attr);
!   TREE_READONLY (decl) = true;
!   finish_meta_decl (decl, objc_build_constructor (method_list_template, v));
    return decl;
  }
  
*************** build_v1_category_initializer (tree type
*** 1700,1743 ****
  				tree protocol_list, tree property_list,
  				location_t loc)
  {
-   tree expr, ltyp;
    vec<constructor_elt, va_gc> *v = NULL;
  
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, cat_name);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, class_name);
  
!   ltyp = objc_method_list_ptr;
    if (inst_methods)
!     expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, inst_methods, 0));
    else
!     expr = convert (ltyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
  
    if (class_methods)
!     expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, class_methods, 0));
    else
!     expr = convert (ltyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
  
    /* protocol_list = */
    ltyp = build_pointer_type (build_pointer_type (objc_protocol_template));
    if (protocol_list)
!     expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, protocol_list, 0));
    else
!     expr = convert (ltyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
  
    if (flag_objc_abi >= 1)
      {
        int val = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (objc_category_template));
        expr = build_int_cst (NULL_TREE, val);
!       CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
        ltyp = objc_prop_list_ptr;
        if (property_list)
! 	expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, property_list, 0));
        else
! 	expr = convert (ltyp, null_pointer_node);
!       CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
      }
  
    return objc_build_constructor (type, v);
--- 1742,1805 ----
  				tree protocol_list, tree property_list,
  				location_t loc)
  {
    vec<constructor_elt, va_gc> *v = NULL;
  
!   tree fields = first_type_field (type);
!   CONSTRUCTOR_APPEND_ELT (v, fields, cat_name);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, class_name);
  
!   tree expr;
!   tree ltyp = objc_method_list_ptr;
    if (inst_methods)
!     {
!       TREE_ADDRESSABLE (inst_methods) = true;
!       expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, inst_methods, 0));
!     }
    else
!     expr = build_zero_cst (ltyp);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, expr);
  
    if (class_methods)
!     {
!       TREE_ADDRESSABLE (class_methods) = true;
!       expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, class_methods, 0));
!     }
    else
!     expr = build_zero_cst (ltyp);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, expr);
  
    /* protocol_list = */
    ltyp = build_pointer_type (build_pointer_type (objc_protocol_template));
    if (protocol_list)
!     {
!       TREE_ADDRESSABLE (protocol_list) = true;
!       expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, protocol_list, 0));
!     }
    else
!     expr = build_zero_cst (ltyp);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, expr);
  
    if (flag_objc_abi >= 1)
      {
        int val = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (objc_category_template));
        expr = build_int_cst (NULL_TREE, val);
!       fields = next_type_field (fields);
!       CONSTRUCTOR_APPEND_ELT (v, fields, expr);
        ltyp = objc_prop_list_ptr;
        if (property_list)
! 	{
! 	  TREE_ADDRESSABLE (property_list) = true;
! 	  expr
! 	    = convert (ltyp, build_unary_op (loc, ADDR_EXPR, property_list, 0));
! 	}
        else
! 	expr = build_zero_cst (ltyp);
!       fields = next_type_field (fields);
!       CONSTRUCTOR_APPEND_ELT (v, fields, expr);
      }
  
    return objc_build_constructor (type, v);
*************** generate_v1_category (struct imp_entry *
*** 1801,1807 ****
  					    protocol_decl, V1_Property_decl,
  					    loc);
  
!   finish_var_decl (cat_decl, initlist);
    impent->class_decl = cat_decl;
  }
  
--- 1863,1869 ----
  					    protocol_decl, V1_Property_decl,
  					    loc);
  
!   finish_meta_decl (cat_decl, initlist);
    impent->class_decl = cat_decl;
  }
  
*************** generate_v1_category (struct imp_entry *
*** 1810,1860 ****
  static tree
  generate_objc_class_ext (tree property_list, tree context)
  {
-   tree decl, expr, ltyp;
-   tree weak_ivar_layout_tree;
-   int size;
-   location_t loc;
-   vec<constructor_elt, va_gc> *v = NULL;
-   char buf[BUFSIZE];
- 
-   /* TODO: pass the loc in or find it from args.  */
-   loc = UNKNOWN_LOCATION;
- 
    /* const char *weak_ivar_layout
       TODO: Figure the ivar layouts out... */
!   weak_ivar_layout_tree = NULL_TREE;
! 
    if (!property_list && !weak_ivar_layout_tree)
      return NULL_TREE;
  
    if (!objc_class_ext_template)
      build_objc_class_ext_template ();
  
    /* uint32_t size */
!   size = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (objc_class_ext_template));
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, build_int_cst (NULL_TREE, size));
  
!   ltyp = const_string_type_node;
    if (weak_ivar_layout_tree)
      expr = convert (ltyp, weak_ivar_layout_tree);
    else
!     expr = convert (ltyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
  
    /* struct _prop_list_t *properties; */
    ltyp = objc_prop_list_ptr;
    if (property_list)
!      expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, property_list, 0));
    else
!     expr = convert (ltyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
  
    snprintf (buf, BUFSIZE, "_OBJC_ClassExt_%s",
  	    IDENTIFIER_POINTER (CLASS_NAME (context)));
!   decl = start_var_decl (objc_class_ext_template, buf);
    expr = objc_build_constructor (TREE_TYPE (decl), v);
    OBJCMETA (decl, objc_meta, meta_class_extension);
!   finish_var_decl (decl, expr);
    return decl;
  }
  
--- 1872,1922 ----
  static tree
  generate_objc_class_ext (tree property_list, tree context)
  {
    /* const char *weak_ivar_layout
       TODO: Figure the ivar layouts out... */
!   tree weak_ivar_layout_tree = NULL_TREE;
    if (!property_list && !weak_ivar_layout_tree)
      return NULL_TREE;
  
    if (!objc_class_ext_template)
      build_objc_class_ext_template ();
  
+   vec<constructor_elt, va_gc> *v = NULL;
+   tree fields = first_type_field (objc_class_ext_template);
    /* uint32_t size */
!   int size = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (objc_class_ext_template));
!   CONSTRUCTOR_APPEND_ELT (v, fields, build_int_cst (unsigned_type_node, size));
  
!   tree expr;
!   tree ltyp = const_string_type_node;
    if (weak_ivar_layout_tree)
      expr = convert (ltyp, weak_ivar_layout_tree);
    else
!     expr = build_zero_cst (ltyp);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, expr);
  
+   /* TODO: pass the loc in or find it from args.  */
+   location_t loc = UNKNOWN_LOCATION;
    /* struct _prop_list_t *properties; */
    ltyp = objc_prop_list_ptr;
    if (property_list)
!     {
!       TREE_ADDRESSABLE (property_list) = true;
!       expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, property_list, 0));
!     }
    else
!     expr = build_zero_cst (ltyp);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, expr);
  
+   char buf[BUFSIZE];
    snprintf (buf, BUFSIZE, "_OBJC_ClassExt_%s",
  	    IDENTIFIER_POINTER (CLASS_NAME (context)));
!   tree decl = start_meta_decl (objc_class_ext_template, buf);
    expr = objc_build_constructor (TREE_TYPE (decl), v);
    OBJCMETA (decl, objc_meta, meta_class_extension);
!   finish_meta_decl (decl, expr);
    return decl;
  }
  
*************** build_v1_shared_structure_initializer (t
*** 1884,1967 ****
  				    tree dispatch_table, tree ivar_list,
  				    tree protocol_list, tree class_ext)
  {
-   tree expr, ltyp;
-   location_t loc;
    vec<constructor_elt, va_gc> *v = NULL;
  
-   /* TODO: fish the location out of the input data.  */
-   loc = UNKNOWN_LOCATION;
- 
    /* isa = */
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, isa);
  
    /* super_class = */
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, super);
  
    /* name = */
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, default_conversion (name));
  
    /* version = */
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE,
!                           build_int_cst (long_integer_type_node, 0));
  
    /* info = */
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE,
!                           build_int_cst (long_integer_type_node, status));
  
    /* instance_size = */
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE,
!                           convert (long_integer_type_node, size));
  
    /* objc_ivar_list = */
!   ltyp = objc_ivar_list_ptr;
    if (ivar_list)
!     expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, ivar_list, 0));
    else
!     expr = convert (ltyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
  
    /* objc_method_list = */
    ltyp = objc_method_list_ptr;
    if (dispatch_table)
!     expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, dispatch_table, 0));
    else
!     expr = convert (ltyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
  
    ltyp = build_pointer_type (xref_tag (RECORD_TYPE,
  					get_identifier ("objc_cache")));
    /* method_cache = */
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, convert (ltyp, null_pointer_node));
  
    /* protocol_list = */
    ltyp = build_pointer_type (build_pointer_type (objc_protocol_template));
    if (protocol_list)
!     expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR,  protocol_list, 0));
    else
!     expr = convert (ltyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
  
    if (flag_objc_abi >= 1)
      {
        /* TODO: figure out the ivar_layout stuff.  */
!       expr = convert (const_string_type_node, null_pointer_node);
!       CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
        if (!objc_class_ext_template)
  	build_objc_class_ext_template ();
        ltyp = build_pointer_type (objc_class_ext_template);
        if (class_ext)
! 	expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, class_ext, 0));
        else
! 	expr = convert (ltyp, null_pointer_node);
!       CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
      }
    else
      {
        /* sel_id = NULL */
!       CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, null_pointer_node);
  
        /* gc_object_type = NULL */
!       CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, null_pointer_node);
      }
    return objc_build_constructor (type, v);
  }
--- 1946,2054 ----
  				    tree dispatch_table, tree ivar_list,
  				    tree protocol_list, tree class_ext)
  {
    vec<constructor_elt, va_gc> *v = NULL;
  
    /* isa = */
!   tree fields = first_type_field (type);
!   CONSTRUCTOR_APPEND_ELT (v, fields, isa);
  
    /* super_class = */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, super);
  
    /* name = */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, default_conversion (name));
  
    /* version = */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields,
! 			  build_int_cst (long_integer_type_node, 0));
  
    /* info = */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields,
! 			  build_int_cst (long_integer_type_node, status));
  
    /* instance_size = */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields,
! 			  convert (long_integer_type_node, size));
  
    /* objc_ivar_list = */
! 
!   /* TODO: fish the location out of the input data.  */
!   location_t loc = UNKNOWN_LOCATION;
!   tree ltyp = objc_ivar_list_ptr;
!   tree expr;
    if (ivar_list)
!     {
!       TREE_ADDRESSABLE (ivar_list) = true;
!       expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, ivar_list, 0));
!     }
    else
!     expr = build_zero_cst (ltyp);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, expr);
  
    /* objc_method_list = */
    ltyp = objc_method_list_ptr;
    if (dispatch_table)
!     {
!       TREE_ADDRESSABLE (dispatch_table) = true;
!       expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, dispatch_table, 0));
!     }
    else
!     expr = build_zero_cst (ltyp);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, expr);
  
    ltyp = build_pointer_type (xref_tag (RECORD_TYPE,
  					get_identifier ("objc_cache")));
    /* method_cache = */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, build_zero_cst (ltyp));
  
    /* protocol_list = */
    ltyp = build_pointer_type (build_pointer_type (objc_protocol_template));
    if (protocol_list)
!     {
!       TREE_ADDRESSABLE (protocol_list) = true;
!       expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR,  protocol_list, 0));
!     }
    else
!     expr = build_zero_cst (ltyp);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, expr);
  
    if (flag_objc_abi >= 1)
      {
        /* TODO: figure out the ivar_layout stuff.  */
!       expr = build_zero_cst (const_string_type_node);
!       fields = next_type_field (fields);
!       CONSTRUCTOR_APPEND_ELT (v, fields, expr);
        if (!objc_class_ext_template)
  	build_objc_class_ext_template ();
        ltyp = build_pointer_type (objc_class_ext_template);
        if (class_ext)
! 	{
! 	  TREE_ADDRESSABLE (class_ext) = true;
! 	  expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, class_ext, 0));
! 	}
        else
! 	expr = build_zero_cst (ltyp);
!       fields = next_type_field (fields);
!       CONSTRUCTOR_APPEND_ELT (v, fields, expr);
      }
    else
      {
        /* sel_id = NULL */
!       fields = next_type_field (fields);
!       CONSTRUCTOR_APPEND_ELT (v, fields, build_zero_cst (TREE_TYPE (fields)));
  
        /* gc_object_type = NULL */
!       fields = next_type_field (fields);
!       CONSTRUCTOR_APPEND_ELT (v, fields, build_zero_cst (TREE_TYPE (fields)));
      }
    return objc_build_constructor (type, v);
  }
*************** build_v1_shared_structure_initializer (t
*** 1969,1999 ****
  static tree
  generate_ivars_list (tree chain, const char *name, tree attr)
  {
-   tree initlist, ivar_list_template, decl;
-   int size;
-   vec<constructor_elt, va_gc> *inits = NULL;
- 
    if (!chain)
      return NULL_TREE;
  
    if (!objc_ivar_template)
      objc_ivar_template = build_ivar_template ();
  
!   size = ivar_list_length (chain);
! 
    generating_instance_variables = 1;
!   ivar_list_template = build_ivar_list_template (objc_ivar_template, size);
!   initlist = build_ivar_list_initializer (objc_ivar_template, chain);
    generating_instance_variables = 0;
  
!   decl = start_var_decl (ivar_list_template, name);
! 
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, build_int_cst (NULL_TREE, size));
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, initlist);
  
    OBJCMETA (decl, objc_meta, attr);
!   finish_var_decl (decl,
! 		   objc_build_constructor (TREE_TYPE (decl), inits));
  
    return decl;
  }
--- 2056,2083 ----
  static tree
  generate_ivars_list (tree chain, const char *name, tree attr)
  {
    if (!chain)
      return NULL_TREE;
  
    if (!objc_ivar_template)
      objc_ivar_template = build_ivar_template ();
  
!   int size = ivar_list_length (chain);
    generating_instance_variables = 1;
!   tree ivar_list_template = build_ivar_list_template (objc_ivar_template, size);
!   tree initlist = build_ivar_list_initializer (objc_ivar_template, chain);
    generating_instance_variables = 0;
  
!   vec<constructor_elt, va_gc> *inits = NULL;
!   tree fields = first_type_field (ivar_list_template);
!   CONSTRUCTOR_APPEND_ELT (inits, fields,
! 			  build_int_cst (integer_type_node, size));
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (inits, fields, initlist);
  
+   tree decl = start_meta_decl (ivar_list_template, name);
    OBJCMETA (decl, objc_meta, attr);
!   finish_meta_decl (decl, objc_build_constructor (TREE_TYPE (decl), inits));
  
    return decl;
  }
*************** generate_v1_class_structs (struct imp_en
*** 2102,2108 ****
  		CLS_META, class_methods, class_ivars,
  		protocol_decl, NULL_TREE);
  
!   finish_var_decl (meta_decl, initlist);
    impent->meta_decl = meta_decl;
  
    /* static struct objc_class _OBJC_CLASS_Foo={ ... }; */
--- 2186,2192 ----
  		CLS_META, class_methods, class_ivars,
  		protocol_decl, NULL_TREE);
  
!   finish_meta_decl (meta_decl, initlist);
    impent->meta_decl = meta_decl;
  
    /* static struct objc_class _OBJC_CLASS_Foo={ ... }; */
*************** generate_v1_class_structs (struct imp_en
*** 2121,2126 ****
--- 2205,2211 ----
        inst_ivars = generate_ivars_list (chain, buf, meta_clai_vars);
      }
  
+   TREE_ADDRESSABLE (meta_decl) = true;
    initlist = build_v1_shared_structure_initializer
  		(TREE_TYPE (class_decl),
  		build_unary_op (loc, ADDR_EXPR, meta_decl, 0),
*************** generate_v1_class_structs (struct imp_en
*** 2130,2173 ****
  		CLS_FACTORY | cls_flags, inst_methods, inst_ivars,
  		protocol_decl, class_ext_decl);
  
!   finish_var_decl (class_decl, initlist);
    impent->class_decl = class_decl;
  }
  
  /* --- Output NeXT V1 Metadata --- */
  
  /* Create the initial value for the `defs' field of _objc_symtab.
!    This is a CONSTRUCTOR.  */
  
  static tree
  init_def_list (tree type)
  {
-   tree expr;
-   location_t loc;
-   struct imp_entry *impent;
    vec<constructor_elt, va_gc> *v = NULL;
! 
    if (imp_count)
!     for (impent = imp_list; impent; impent = impent->next)
        {
  	if (TREE_CODE (impent->imp_context) == CLASS_IMPLEMENTATION_TYPE)
  	  {
! 	    loc = DECL_SOURCE_LOCATION (impent->class_decl);
! 	    expr = build_unary_op (loc,
  				   ADDR_EXPR, impent->class_decl, 0);
! 	    CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
  	  }
        }
  
    if (cat_count)
!     for (impent = imp_list; impent; impent = impent->next)
        {
  	if (TREE_CODE (impent->imp_context) == CATEGORY_IMPLEMENTATION_TYPE)
  	  {
! 	    loc = DECL_SOURCE_LOCATION (impent->class_decl);
! 	    expr = build_unary_op (loc,
  				   ADDR_EXPR, impent->class_decl, 0);
! 	    CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
  	  }
        }
  
--- 2215,2259 ----
  		CLS_FACTORY | cls_flags, inst_methods, inst_ivars,
  		protocol_decl, class_ext_decl);
  
!   finish_meta_decl (class_decl, initlist);
    impent->class_decl = class_decl;
  }
  
  /* --- Output NeXT V1 Metadata --- */
  
  /* Create the initial value for the `defs' field of _objc_symtab.
!    This is a CONSTRUCTOR for an array.  */
  
  static tree
  init_def_list (tree type)
  {
    vec<constructor_elt, va_gc> *v = NULL;
!   unsigned n = 0;
    if (imp_count)
!     for (struct imp_entry * impent = imp_list; impent; impent = impent->next)
        {
  	if (TREE_CODE (impent->imp_context) == CLASS_IMPLEMENTATION_TYPE)
  	  {
! 	    location_t loc = DECL_SOURCE_LOCATION (impent->class_decl);
! 	    TREE_ADDRESSABLE (impent->class_decl) = true;
! 	    tree expr = build_unary_op (loc,
  				   ADDR_EXPR, impent->class_decl, 0);
! 	    tree idx = size_int (n++);
! 	    CONSTRUCTOR_APPEND_ELT (v, idx, expr);
  	  }
        }
  
    if (cat_count)
!     for (struct imp_entry *impent = imp_list; impent; impent = impent->next)
        {
  	if (TREE_CODE (impent->imp_context) == CATEGORY_IMPLEMENTATION_TYPE)
  	  {
! 	    location_t loc = DECL_SOURCE_LOCATION (impent->class_decl);
! 	    TREE_ADDRESSABLE (impent->class_decl) = true;
! 	    tree expr = build_unary_op (loc,
  				   ADDR_EXPR, impent->class_decl, 0);
! 	    tree idx = size_int (n++);
! 	    CONSTRUCTOR_APPEND_ELT (v, idx, expr);
  	  }
        }
  
*************** init_objc_symtab (tree type)
*** 2225,2259 ****
    vec<constructor_elt, va_gc> *v = NULL;
  
    /* sel_ref_cnt = { ..., 5, ... } */
! 
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE,
  			  build_int_cst (long_integer_type_node, 0));
  
    /* refs = { ..., _OBJC_SELECTOR_TABLE, ... } */
! 
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE,
  			  convert (build_pointer_type (objc_selector_type),
  							integer_zero_node));
  
    /* cls_def_cnt = { ..., 5, ... } */
! 
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE,
  			  build_int_cst (short_integer_type_node, imp_count));
  
    /* cat_def_cnt = { ..., 5, ... } */
! 
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE,
  			  build_int_cst (short_integer_type_node, cat_count));
  
    /* cls_def = { ..., { &Foo, &Bar, ...}, ... } */
! 
    if (imp_count || cat_count)
!     {
!       tree field = TYPE_FIELDS (type);
!       field = DECL_CHAIN (DECL_CHAIN (DECL_CHAIN (DECL_CHAIN (field))));
! 
!       CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init_def_list (TREE_TYPE (field)));
!     }
  
    return objc_build_constructor (type, v);
  }
--- 2311,2340 ----
    vec<constructor_elt, va_gc> *v = NULL;
  
    /* sel_ref_cnt = { ..., 5, ... } */
!   tree fields = first_type_field (type);
!   CONSTRUCTOR_APPEND_ELT (v, fields,
  			  build_int_cst (long_integer_type_node, 0));
  
    /* refs = { ..., _OBJC_SELECTOR_TABLE, ... } */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields,
  			  convert (build_pointer_type (objc_selector_type),
  							integer_zero_node));
  
    /* cls_def_cnt = { ..., 5, ... } */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields,
  			  build_int_cst (short_integer_type_node, imp_count));
  
    /* cat_def_cnt = { ..., 5, ... } */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields,
  			  build_int_cst (short_integer_type_node, cat_count));
  
    /* cls_def = { ..., { &Foo, &Bar, ...}, ... } */
!   fields = next_type_field (fields);
    if (imp_count || cat_count)
!     CONSTRUCTOR_APPEND_ELT (v, fields, init_def_list (TREE_TYPE (fields)));
  
    return objc_build_constructor (type, v);
  }
*************** static void
*** 2265,2276 ****
  generate_objc_symtab_decl (void)
  {
    build_objc_symtab_template ();
!   UOBJC_SYMBOLS_decl = start_var_decl (objc_symtab_template, "_OBJC_Symbols");
    /* Allow the runtime to mark meta-data such that it can be assigned to target
       specific sections by the back-end.  */
    OBJCMETA (UOBJC_SYMBOLS_decl, objc_meta, meta_symtab);
!   finish_var_decl (UOBJC_SYMBOLS_decl,
! 		   init_objc_symtab (TREE_TYPE (UOBJC_SYMBOLS_decl)));
  }
  
  /* Any target implementing NeXT ObjC m32 ABI has to ensure that objects
--- 2346,2357 ----
  generate_objc_symtab_decl (void)
  {
    build_objc_symtab_template ();
!   UOBJC_SYMBOLS_decl = start_meta_decl (objc_symtab_template, "_OBJC_Symbols");
    /* Allow the runtime to mark meta-data such that it can be assigned to target
       specific sections by the back-end.  */
    OBJCMETA (UOBJC_SYMBOLS_decl, objc_meta, meta_symtab);
!   finish_meta_decl (UOBJC_SYMBOLS_decl,
! 		    init_objc_symtab (objc_symtab_template));
  }
  
  /* Any target implementing NeXT ObjC m32 ABI has to ensure that objects
*************** generate_classref_translation_entry (tre
*** 2334,2340 ****
       but will be optimized away unless we force it.  */
    DECL_PRESERVE_P (decl) = 1;
    OBJCMETA (decl, objc_meta, meta_class_reference);
!   finish_var_decl (decl, expr);
    return;
  }
  
--- 2415,2421 ----
       but will be optimized away unless we force it.  */
    DECL_PRESERVE_P (decl) = 1;
    OBJCMETA (decl, objc_meta, meta_class_reference);
!   finish_meta_decl (decl, expr);
    return;
  }
  
*************** next_sjlj_build_try_catch_finally (struc
*** 2723,2729 ****
  
    /* Initialize rethrow_decl.  */
    t = build2 (MODIFY_EXPR, void_type_node, rethrow_decl,
! 	      convert (objc_object_type, null_pointer_node));
    SET_EXPR_LOCATION (t, cur_try_context->try_locus);
    append_to_statement_list (t, &BIND_EXPR_BODY (bind));
  
--- 2804,2810 ----
  
    /* Initialize rethrow_decl.  */
    t = build2 (MODIFY_EXPR, void_type_node, rethrow_decl,
! 	      build_zero_cst (objc_object_type));
    SET_EXPR_LOCATION (t, cur_try_context->try_locus);
    append_to_statement_list (t, &BIND_EXPR_BODY (bind));
  
*************** make_err_class:
*** 2840,2846 ****
  			     IDENTIFIER_POINTER (ident));
        /* We have to finalize this var here, because this might be called after
  	 all the other metadata strings have been emitted.  */
!       finish_var_decl (decl, str);
      }
    return eh_id;
  }
--- 2921,2927 ----
  			     IDENTIFIER_POINTER (ident));
        /* We have to finalize this var here, because this might be called after
  	 all the other metadata strings have been emitted.  */
!       finish_meta_decl (decl, str);
      }
    return eh_id;
  }
diff -Nrcpad gcc-17-20260628/gcc/objc/objc-next-runtime-abi-02.cc gcc-17-20260705/gcc/objc/objc-next-runtime-abi-02.cc
*** gcc-17-20260628/gcc/objc/objc-next-runtime-abi-02.cc	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/objc/objc-next-runtime-abi-02.cc	Sun Jul  5 22:32:08 2026
*************** static tree next_runtime_abi_02_build_ob
*** 216,222 ****
  static bool next_runtime_abi_02_setup_const_string_class_decl (void);
  static tree next_runtime_abi_02_build_const_string_constructor (location_t, tree, int);
  
! static tree create_extern_decl (tree, const char *);
  
  static void objc_generate_v2_next_metadata (void);
  static bool objc2_objc_exception_attr (tree);
--- 216,224 ----
  static bool next_runtime_abi_02_setup_const_string_class_decl (void);
  static tree next_runtime_abi_02_build_const_string_constructor (location_t, tree, int);
  
! static tree create_extern_meta (tree, const char *);
! static tree create_global_meta (tree, const char *, bool = false);
! static tree create_hidden_meta (tree, const char *, bool = false);
  
  static void objc_generate_v2_next_metadata (void);
  static bool objc2_objc_exception_attr (tree);
*************** static void next_runtime_02_initialize (
*** 374,380 ****
  					   get_identifier (TAG_SELECTOR)));
  
    /* SEL typedef.  */
!   type = lang_hooks.decls.pushdecl (build_decl (input_location,
  						TYPE_DECL,
  						objc_selector_name,
  						objc_selector_type));
--- 376,382 ----
  					   get_identifier (TAG_SELECTOR)));
  
    /* SEL typedef.  */
!   type = lang_hooks.decls.pushdecl (objc_build_decl (input_location,
  						TYPE_DECL,
  						objc_selector_name,
  						objc_selector_type));
*************** static void next_runtime_02_initialize (
*** 467,482 ****
  						    NULL, NULL_TREE);
    TREE_NOTHROW (objc_v2_getprotocol_decl) = 0;*/
  
!   UOBJC_V2_CACHE_decl = create_extern_decl (ptr_type_node,
  					    "_objc_empty_cache");
! 
!   UOBJC_V2_VTABLE_decl = create_extern_decl (objc_v2_imp_type,
  					     "_objc_empty_vtable");
  
    /* id objc_getClass (const char *); */
!   type = build_function_type_list (objc_object_type,
!                                    const_string_type_node,
!                                    NULL_TREE);
    objc_get_class_decl = add_builtin_function (TAG_GETCLASS,
  					      type, 0, NOT_BUILT_IN,
  					      NULL, NULL_TREE);
--- 469,484 ----
  						    NULL, NULL_TREE);
    TREE_NOTHROW (objc_v2_getprotocol_decl) = 0;*/
  
!   UOBJC_V2_CACHE_decl = create_extern_meta (ptr_type_node,
  					    "_objc_empty_cache");
!   TREE_ADDRESSABLE (UOBJC_V2_CACHE_decl) = true;
!   UOBJC_V2_VTABLE_decl = create_extern_meta (objc_v2_imp_type,
  					     "_objc_empty_vtable");
+   TREE_ADDRESSABLE (UOBJC_V2_VTABLE_decl) = true;
  
    /* id objc_getClass (const char *); */
!   type = build_function_type_list (objc_object_type, const_string_type_node,
! 				   NULL_TREE);
    objc_get_class_decl = add_builtin_function (TAG_GETCLASS,
  					      type, 0, NOT_BUILT_IN,
  					      NULL, NULL_TREE);
*************** hash_name_enter (hash *hashlist, tree id
*** 905,936 ****
    hashlist[slot] = obj;		/* append to front */
  }
  
! /* Create a declaration "extern <type> <name>;"
!    The var will need to be finalized (e.g. by calling finish_var_decl()).  */
  
  static tree
! create_extern_decl (tree type, const char *name)
  {
    tree id = get_identifier (name);
    tree var = hash_name_lookup (extern_names, id);
    if (var)
!       return var;
!   /* New name. */
!   var = start_var_decl (type, name);
!   TREE_STATIC (var) = 0;
!   DECL_EXTERNAL (var) = 1;
!   TREE_PUBLIC (var) = 1;
    hash_name_enter (extern_names, var);
    return var;
  }
  
  /* Create a globally visible definition for variable NAME of a given TYPE. The
!    finish_var_decl() routine will need to be called on it afterwards.  */
! static tree
! create_global_decl (tree type, const char *name, bool is_def = false);
  
  static tree
! create_global_decl (tree type, const char *name, bool is_def)
  {
    tree id = get_identifier (name);
    tree var = hash_name_lookup (extern_names, id);
--- 907,939 ----
    hashlist[slot] = obj;		/* append to front */
  }
  
! /* Some of the Objective-C v2 meta-data is public.  */
  
  static tree
! create_extern_meta (tree type, const char *name)
  {
    tree id = get_identifier (name);
    tree var = hash_name_lookup (extern_names, id);
    if (var)
!     return var;
! 
!   /* New. */
!   var = start_meta_decl (type, name);
!   TREE_STATIC (var) = false;
!   TREE_PUBLIC (var) = true;
!   DECL_EXTERNAL (var) = true;
! #ifdef OBJCPLUS
!   DECL_THIS_STATIC (var) = false;
! #endif
    hash_name_enter (extern_names, var);
    return var;
  }
  
  /* Create a globally visible definition for variable NAME of a given TYPE. The
!    finish_meta_decl() routine will need to be called on it afterwards.  */
  
  static tree
! create_global_meta (tree type, const char *name, bool is_def)
  {
    tree id = get_identifier (name);
    tree var = hash_name_lookup (extern_names, id);
*************** create_global_decl (tree type, const cha
*** 938,967 ****
      is_def = true;
    else
      {
!       var = start_var_decl (type, name);
        hash_name_enter (extern_names, var);
      }
    if (is_def)
      {
        DECL_EXTERNAL (var) = 0;
        TREE_STATIC (var) = 1;
      }
    TREE_PUBLIC (var) = 1;
    return var;
  }
  
  /* Create a symbol with __attribute__ ((visibility ("hidden")))
     attribute (private extern).  */
- static tree
- create_hidden_decl (tree type, const char *name, bool is_def = false);
  
  static tree
! create_hidden_decl (tree type, const char *name, bool is_def)
  {
!     tree decl = create_global_decl (type, name, is_def);
!     DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
!     DECL_VISIBILITY_SPECIFIED (decl) = 1;
!     return decl;
  }
  
  /* Irritatingly, we have a different superclass field name for ABI=2.  */
--- 941,972 ----
      is_def = true;
    else
      {
!       var = start_meta_decl (type, name);
        hash_name_enter (extern_names, var);
      }
+ 
    if (is_def)
      {
        DECL_EXTERNAL (var) = 0;
        TREE_STATIC (var) = 1;
      }
    TREE_PUBLIC (var) = 1;
+ #ifdef OBJCPLUS
+   DECL_THIS_STATIC (var) = false;
+ #endif
    return var;
  }
  
  /* Create a symbol with __attribute__ ((visibility ("hidden")))
     attribute (private extern).  */
  
  static tree
! create_hidden_meta (tree type, const char *name, bool is_def)
  {
!   tree decl = create_global_meta (type, name, is_def);
!   DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
!   DECL_VISIBILITY_SPECIFIED (decl) = 1;
!   return decl;
  }
  
  /* Irritatingly, we have a different superclass field name for ABI=2.  */
*************** next_runtime_abi_02_class_decl (tree kla
*** 986,992 ****
    snprintf (buf, BUFSIZE, "OBJC_CLASS_$_%s",
  	    IDENTIFIER_POINTER (CLASS_NAME (klass)));
    /* ObjC2 classes are extern visible.  */
!   decl = create_global_decl (objc_v2_class_template, buf);
    OBJCMETA (decl, objc_meta, meta_class);
    return decl;
  }
--- 991,997 ----
    snprintf (buf, BUFSIZE, "OBJC_CLASS_$_%s",
  	    IDENTIFIER_POINTER (CLASS_NAME (klass)));
    /* ObjC2 classes are extern visible.  */
!   decl = create_global_meta (objc_v2_class_template, buf);
    OBJCMETA (decl, objc_meta, meta_class);
    return decl;
  }
*************** next_runtime_abi_02_metaclass_decl (tree
*** 999,1005 ****
    snprintf (buf, BUFSIZE, "OBJC_METACLASS_$_%s",
  	    IDENTIFIER_POINTER (CLASS_NAME (klass)));
    /* ObjC2 classes are extern visible.  */
!   decl = create_global_decl (objc_v2_class_template, buf);
    OBJCMETA (decl, objc_meta, meta_metaclass);
    return decl;
  }
--- 1004,1010 ----
    snprintf (buf, BUFSIZE, "OBJC_METACLASS_$_%s",
  	    IDENTIFIER_POINTER (CLASS_NAME (klass)));
    /* ObjC2 classes are extern visible.  */
!   decl = create_global_meta (objc_v2_class_template, buf);
    OBJCMETA (decl, objc_meta, meta_metaclass);
    return decl;
  }
*************** next_runtime_abi_02_category_decl (tree
*** 1012,1018 ****
    snprintf (buf, BUFSIZE, "_OBJC_Category_%s_%s",
  	    IDENTIFIER_POINTER (CLASS_NAME (klass)),
  	    IDENTIFIER_POINTER (CLASS_SUPER_NAME (klass)));
!   decl = start_var_decl (objc_v2_category_template, buf);
    OBJCMETA (decl, objc_meta, meta_category);
    return decl;
  }
--- 1017,1023 ----
    snprintf (buf, BUFSIZE, "_OBJC_Category_%s_%s",
  	    IDENTIFIER_POINTER (CLASS_NAME (klass)),
  	    IDENTIFIER_POINTER (CLASS_SUPER_NAME (klass)));
!   decl = start_meta_decl (objc_v2_category_template, buf);
    OBJCMETA (decl, objc_meta, meta_category);
    return decl;
  }
*************** next_runtime_abi_02_protocol_decl (tree
*** 1028,1038 ****
  	    IDENTIFIER_POINTER (PROTOCOL_NAME (p)));
    if (flag_next_runtime >= WEAK_PROTOCOLS_AFTER)
      {
!       decl = create_hidden_decl (objc_v2_protocol_template, buf);
        DECL_WEAK (decl) = true;
      }
    else
!     decl = start_var_decl (objc_v2_protocol_template, buf);
    OBJCMETA (decl, objc_meta, meta_protocol);
    DECL_PRESERVE_P (decl) = 1;
    return decl;
--- 1033,1043 ----
  	    IDENTIFIER_POINTER (PROTOCOL_NAME (p)));
    if (flag_next_runtime >= WEAK_PROTOCOLS_AFTER)
      {
!       decl = create_hidden_meta (objc_v2_protocol_template, buf);
        DECL_WEAK (decl) = true;
      }
    else
!     decl = start_meta_decl (objc_v2_protocol_template, buf);
    OBJCMETA (decl, objc_meta, meta_protocol);
    DECL_PRESERVE_P (decl) = 1;
    return decl;
*************** next_runtime_abi_02_protocol_decl (tree
*** 1041,1047 ****
  static tree
  next_runtime_abi_02_string_decl (tree type, const char *name,  string_section where)
  {
!   tree var = start_var_decl (type, name);
    switch (where)
      {
        case class_names:
--- 1046,1052 ----
  static tree
  next_runtime_abi_02_string_decl (tree type, const char *name,  string_section where)
  {
!   tree var = start_meta_decl (type, name);
    switch (where)
      {
        case class_names:
*************** build_v2_class_reference_decl (tree iden
*** 1080,1086 ****
    char buf[BUFSIZE];
  
    snprintf (buf, BUFSIZE, "_OBJC_ClassRef_%s", IDENTIFIER_POINTER (ident));
!   decl = start_var_decl (objc_class_type, buf);
    OBJCMETA (decl, objc_meta, meta_class_ref);
    return decl;
  }
--- 1085,1091 ----
    char buf[BUFSIZE];
  
    snprintf (buf, BUFSIZE, "_OBJC_ClassRef_%s", IDENTIFIER_POINTER (ident));
!   decl = start_meta_decl (objc_class_type, buf);
    OBJCMETA (decl, objc_meta, meta_class_ref);
    return decl;
  }
*************** build_selector_reference_decl (tree iden
*** 1193,1199 ****
          *t = '$'; /* Underscore would clash between foo:bar and foo_bar.  */
        t++;
      }
!   decl = start_var_decl (objc_selector_type, buf);
    OBJCMETA (decl, objc_meta, meta_sel_refs);
    return decl;
  }
--- 1198,1204 ----
          *t = '$'; /* Underscore would clash between foo:bar and foo_bar.  */
        t++;
      }
!   decl = start_meta_decl (objc_selector_type, buf);
    OBJCMETA (decl, objc_meta, meta_sel_refs);
    return decl;
  }
*************** build_v2_message_reference_decl (tree se
*** 1246,1252 ****
          *t = '$'; /* Underscore would clash between foo:bar and foo_bar.  */
        t++;
      }
!   decl = start_var_decl (objc_v2_message_ref_template, buf);
    OBJCMETA (decl, objc_meta, meta_mref);
    return decl;
  }
--- 1251,1257 ----
          *t = '$'; /* Underscore would clash between foo:bar and foo_bar.  */
        t++;
      }
!   decl = start_meta_decl (objc_v2_message_ref_template, buf);
    OBJCMETA (decl, objc_meta, meta_mref);
    return decl;
  }
*************** build_v2_protocollist_ref_decl (tree pro
*** 1300,1306 ****
    snprintf (buf, BUFSIZE, "_OBJC_ProtocolRef_%s",
  	    IDENTIFIER_POINTER (protocol_ident));
    /* TODO: other compiler versions make these hidden & weak.  */
!   decl = create_global_decl (objc_protocol_type, buf);
    /* Let optimizer know that this decl is not removable.  */
    DECL_PRESERVE_P (decl) = 1;
    OBJCMETA (decl, objc_meta, meta_proto_ref);
--- 1305,1311 ----
    snprintf (buf, BUFSIZE, "_OBJC_ProtocolRef_%s",
  	    IDENTIFIER_POINTER (protocol_ident));
    /* TODO: other compiler versions make these hidden & weak.  */
!   decl = create_global_meta (objc_protocol_type, buf);
    /* Let optimizer know that this decl is not removable.  */
    DECL_PRESERVE_P (decl) = 1;
    OBJCMETA (decl, objc_meta, meta_proto_ref);
*************** objc_v2_build_ivar_ref (tree datum, tree
*** 1419,1425 ****
  
    create_ivar_offset_name (var_offset_name, CLASS_NAME (class_name),  field);
  
!   offset = create_extern_decl (TREE_TYPE (size_zero_node), var_offset_name);
  
    ftype = TREE_TYPE (field);
  
--- 1424,1430 ----
  
    create_ivar_offset_name (var_offset_name, CLASS_NAME (class_name),  field);
  
!   offset = create_extern_meta (TREE_TYPE (size_zero_node), var_offset_name);
  
    ftype = TREE_TYPE (field);
  
*************** build_v2_superclass_ref_decl (tree ident
*** 1477,1483 ****
  
    snprintf (buf, BUFSIZE, "_OBJC_%sSuperRef_%s", (inst?"":"Meta"),
  	    IDENTIFIER_POINTER (ident));
!   decl = start_var_decl (objc_class_type, buf);
    OBJCMETA (decl, objc_meta, meta_superclass_ref);
    return decl;
  }
--- 1482,1488 ----
  
    snprintf (buf, BUFSIZE, "_OBJC_%sSuperRef_%s", (inst?"":"Meta"),
  	    IDENTIFIER_POINTER (ident));
!   decl = start_meta_decl (objc_class_type, buf);
    OBJCMETA (decl, objc_meta, meta_superclass_ref);
    return decl;
  }
*************** next_runtime_abi_02_setup_const_string_c
*** 1913,1921 ****
       extern OBJC_CLASS_$_NSConstantString in its place. */
    if (!string_class_decl)
      string_class_decl =
! 	create_extern_decl (objc_v2_class_template,
  			    IDENTIFIER_POINTER (constant_string_global_id));
! 
    return (string_class_decl != NULL_TREE);
  }
  
--- 1918,1927 ----
       extern OBJC_CLASS_$_NSConstantString in its place. */
    if (!string_class_decl)
      string_class_decl =
! 	create_extern_meta (objc_v2_class_template,
  			    IDENTIFIER_POINTER (constant_string_global_id));
!   if (string_class_decl)
!     TREE_ADDRESSABLE (string_class_decl) = true;
    return (string_class_decl != NULL_TREE);
  }
  
*************** next_runtime_abi_02_build_const_string_c
*** 1927,1946 ****
    vec<constructor_elt, va_gc> *v = NULL;
  
    /* NeXT: (NSConstantString *) & ((__builtin_ObjCString) { isa, string, length }) */
!   fields = TYPE_FIELDS (internal_const_str_type);
    CONSTRUCTOR_APPEND_ELT (v, fields,
  			  build_unary_op (loc, ADDR_EXPR, string_class_decl, 0));
  
!   fields = DECL_CHAIN (fields);
    CONSTRUCTOR_APPEND_ELT (v, fields,
  			  build_unary_op (loc, ADDR_EXPR, string, 1));
  
    /* ??? check if this should be long.  */
!   fields = DECL_CHAIN (fields);
    CONSTRUCTOR_APPEND_ELT (v, fields, build_int_cst (NULL_TREE, length));
    constructor = objc_build_constructor (internal_const_str_type, v);
  
!   var = build_decl (input_location, CONST_DECL, NULL, TREE_TYPE (constructor));
    DECL_INITIAL (var) = constructor;
    TREE_STATIC (var) = 1;
    DECL_CONTEXT (var) = NULL;
--- 1933,1952 ----
    vec<constructor_elt, va_gc> *v = NULL;
  
    /* NeXT: (NSConstantString *) & ((__builtin_ObjCString) { isa, string, length }) */
!   fields = first_type_field (internal_const_str_type);
    CONSTRUCTOR_APPEND_ELT (v, fields,
  			  build_unary_op (loc, ADDR_EXPR, string_class_decl, 0));
  
!   fields = next_type_field (fields);
    CONSTRUCTOR_APPEND_ELT (v, fields,
  			  build_unary_op (loc, ADDR_EXPR, string, 1));
  
    /* ??? check if this should be long.  */
!   fields = next_type_field (fields);
    CONSTRUCTOR_APPEND_ELT (v, fields, build_int_cst (NULL_TREE, length));
    constructor = objc_build_constructor (internal_const_str_type, v);
  
!   var = objc_build_decl (input_location, CONST_DECL, NULL, TREE_TYPE (constructor));
    DECL_INITIAL (var) = constructor;
    TREE_STATIC (var) = 1;
    DECL_CONTEXT (var) = NULL;
*************** newabi_append_ro (const char *name)
*** 2069,2098 ****
  static
  void build_v2_message_ref_translation_table (void)
  {
-   int count;
-   msgref_entry *ref;
- 
    if (!vec_safe_length (msgrefs))
      return;
  
    FOR_EACH_VEC_ELT (*msgrefs, count, ref)
      {
-       vec<constructor_elt, va_gc> *initializer;
-       tree expr, constructor;
        tree struct_type = TREE_TYPE (ref->refdecl);
        location_t loc = DECL_SOURCE_LOCATION (ref->refdecl);
  
-       initializer = NULL;
        /* First 'IMP messenger' field...  */
!       expr = build_unary_op (loc, ADDR_EXPR, ref->func, 0);
        expr = convert (objc_v2_imp_type, expr);
!       CONSTRUCTOR_APPEND_ELT (initializer, NULL_TREE, expr);
  
        /* ... then 'SEL name' field.  */
        expr = build_selector (ref->selname);
!       CONSTRUCTOR_APPEND_ELT (initializer, NULL_TREE, expr);
!       constructor = objc_build_constructor (struct_type, initializer);
!       finish_var_decl (ref->refdecl, constructor);
      }
  }
  
--- 2075,2103 ----
  static
  void build_v2_message_ref_translation_table (void)
  {
    if (!vec_safe_length (msgrefs))
      return;
  
+   int count;
+   msgref_entry *ref;
    FOR_EACH_VEC_ELT (*msgrefs, count, ref)
      {
        tree struct_type = TREE_TYPE (ref->refdecl);
        location_t loc = DECL_SOURCE_LOCATION (ref->refdecl);
+       vec<constructor_elt, va_gc> *initializer = NULL;
  
        /* First 'IMP messenger' field...  */
!       tree expr = build_unary_op (loc, ADDR_EXPR, ref->func, 0);
        expr = convert (objc_v2_imp_type, expr);
!       tree fields = first_type_field (struct_type);
!       CONSTRUCTOR_APPEND_ELT (initializer, fields, expr);
  
        /* ... then 'SEL name' field.  */
        expr = build_selector (ref->selname);
!       fields = next_type_field (fields);
!       CONSTRUCTOR_APPEND_ELT (initializer, fields, expr);
!       tree constructor = objc_build_constructor (struct_type, initializer);
!       finish_meta_decl (ref->refdecl, constructor);
      }
  }
  
*************** void build_v2_message_ref_translation_ta
*** 2102,2113 ****
  static void
  build_v2_classrefs_table (void)
  {
-   int count;
-   ident_data_tuple *ref;
- 
    if (!vec_safe_length (classrefs))
      return;
  
    FOR_EACH_VEC_ELT (*classrefs, count, ref)
      {
        tree expr = ref->ident;
--- 2107,2117 ----
  static void
  build_v2_classrefs_table (void)
  {
    if (!vec_safe_length (classrefs))
      return;
  
+   int count;
+   ident_data_tuple *ref;
    FOR_EACH_VEC_ELT (*classrefs, count, ref)
      {
        tree expr = ref->ident;
*************** build_v2_classrefs_table (void)
*** 2118,2130 ****
        if (TREE_CODE (expr) == IDENTIFIER_NODE)
          {
            const char *name = objc_build_internal_classname (expr, false);
!           expr = create_extern_decl (objc_v2_class_template, name);
  	  expr = convert (objc_class_type, build_fold_addr_expr (expr));
  	}
        /* The runtime wants this, even if it appears unused, so we must force the
  	 output.  */
        DECL_PRESERVE_P (decl) = 1;
!       finish_var_decl (decl, expr);
      }
  }
  
--- 2122,2134 ----
        if (TREE_CODE (expr) == IDENTIFIER_NODE)
          {
            const char *name = objc_build_internal_classname (expr, false);
! 	  expr = create_extern_meta (objc_v2_class_template, name);
  	  expr = convert (objc_class_type, build_fold_addr_expr (expr));
  	}
        /* The runtime wants this, even if it appears unused, so we must force the
  	 output.  */
        DECL_PRESERVE_P (decl) = 1;
!       finish_meta_decl (decl, expr);
      }
  }
  
*************** build_v2_super_classrefs_table (bool met
*** 2152,2161 ****
        if (TREE_CODE (expr) == IDENTIFIER_NODE)
  	{
  	  const char * name = objc_build_internal_classname (expr, metaclass);
!           expr = create_extern_decl (objc_v2_class_template, name);
  	  expr = convert (objc_class_type, build_fold_addr_expr (expr));
  	}
!       finish_var_decl (decl, expr);
      }
  }
  
--- 2156,2165 ----
        if (TREE_CODE (expr) == IDENTIFIER_NODE)
  	{
  	  const char * name = objc_build_internal_classname (expr, metaclass);
! 	  expr = create_extern_meta (objc_v2_class_template, name);
  	  expr = convert (objc_class_type, build_fold_addr_expr (expr));
  	}
!       finish_meta_decl (decl, expr);
      }
  }
  
*************** has_load_impl (tree clsmeth)
*** 2224,2257 ****
  static void
  build_v2_address_table (vec<tree, va_gc> *src, const char *nam, tree attr)
  {
-   int count=0;
-   tree type, decl, expr;
-   vec<constructor_elt, va_gc> *initlist = NULL;
- 
    if (!vec_safe_length (src))
      return;
  
    FOR_EACH_VEC_ELT (*src, count, decl)
      {
! #ifndef OBJCPLUS
!       tree purpose = build_int_cst (NULL_TREE, count);
! #else
!       tree purpose = NULL_TREE;
! #endif
        expr = convert (objc_class_type, build_fold_addr_expr (decl));
!       CONSTRUCTOR_APPEND_ELT (initlist, purpose, expr);
      }
    gcc_assert (count > 0);
!   type = build_array_type (objc_class_type,
! 			   build_index_type (build_int_cst (NULL_TREE, count - 1)));
!   decl = start_var_decl (type, nam);
    /* The runtime wants this, even if it appears unused, so we must
       force the output.  */
    DECL_PRESERVE_P (decl) = 1;
    expr = objc_build_constructor (type, initlist);
    OBJCMETA (decl, objc_meta, attr);
    DECL_USER_ALIGN (decl) = 1;
!   finish_var_decl (decl, expr);
  }
  
  /* Build decl = initializer; for each protocol referenced in
--- 2228,2257 ----
  static void
  build_v2_address_table (vec<tree, va_gc> *src, const char *nam, tree attr)
  {
    if (!vec_safe_length (src))
      return;
  
+   vec<constructor_elt, va_gc> *initlist = NULL;
+   int count=0;
+   tree decl, expr;
    FOR_EACH_VEC_ELT (*src, count, decl)
      {
!       tree idx = size_int (count);
        expr = convert (objc_class_type, build_fold_addr_expr (decl));
!       CONSTRUCTOR_APPEND_ELT (initlist, idx, expr);
      }
    gcc_assert (count > 0);
! 
!   tree idx_type = build_index_type (size_int (count - 1));
!   tree type = build_array_type (objc_class_type, idx_type);
!   decl = start_meta_decl (type, nam);
    /* The runtime wants this, even if it appears unused, so we must
       force the output.  */
    DECL_PRESERVE_P (decl) = 1;
    expr = objc_build_constructor (type, initlist);
    OBJCMETA (decl, objc_meta, attr);
    DECL_USER_ALIGN (decl) = 1;
!   finish_meta_decl (decl, expr);
  }
  
  /* Build decl = initializer; for each protocol referenced in
*************** build_v2_protocol_list_translation_table
*** 2274,2282 ****
        gcc_assert (TREE_CODE (ref->id) == PROTOCOL_INTERFACE_TYPE);
        snprintf (buf, BUFSIZE, "_OBJC_Protocol_%s",
  		IDENTIFIER_POINTER (PROTOCOL_NAME (ref->id)));
!       expr = start_var_decl (objc_v2_protocol_template, buf);
        expr = convert (objc_protocol_type, build_fold_addr_expr (expr));
!       finish_var_decl (ref->refdecl, expr);
      }
    /* TODO: Maybe we could explicitly delete the vec. now?  */
  }
--- 2274,2282 ----
        gcc_assert (TREE_CODE (ref->id) == PROTOCOL_INTERFACE_TYPE);
        snprintf (buf, BUFSIZE, "_OBJC_Protocol_%s",
  		IDENTIFIER_POINTER (PROTOCOL_NAME (ref->id)));
!       expr = start_meta_decl (objc_v2_protocol_template, buf);
        expr = convert (objc_protocol_type, build_fold_addr_expr (expr));
!       finish_meta_decl (ref->refdecl, expr);
      }
    /* TODO: Maybe we could explicitly delete the vec. now?  */
  }
*************** build_v2_protocol_list_address_table (vo
*** 2318,2333 ****
  		IDENTIFIER_POINTER (PROTOCOL_NAME (ref->id)));
        if (flag_next_runtime >= WEAK_PROTOCOLS_AFTER)
  	{
! 	  decl = create_hidden_decl (objc_protocol_type, buf, /*is def=*/true);
  	  DECL_WEAK (decl) = true;
  	}
        else
! 	decl = create_global_decl (objc_protocol_type, buf, /*is def=*/true);
        expr = convert (objc_protocol_type, build_fold_addr_expr (ref->refdecl));
        OBJCMETA (decl, objc_meta, meta_label_protocollist);
        DECL_PRESERVE_P (decl) = 1;
        DECL_USER_ALIGN (decl) = 1;
!       finish_var_decl (decl, expr);
      }
  
      /* TODO: delete the vec.  */
--- 2318,2333 ----
  		IDENTIFIER_POINTER (PROTOCOL_NAME (ref->id)));
        if (flag_next_runtime >= WEAK_PROTOCOLS_AFTER)
  	{
! 	  decl = create_hidden_meta (objc_protocol_type, buf, /*is def=*/true);
  	  DECL_WEAK (decl) = true;
  	}
        else
! 	decl = create_global_meta (objc_protocol_type, buf, /*is def=*/true);
        expr = convert (objc_protocol_type, build_fold_addr_expr (ref->refdecl));
        OBJCMETA (decl, objc_meta, meta_label_protocollist);
        DECL_PRESERVE_P (decl) = 1;
        DECL_USER_ALIGN (decl) = 1;
!       finish_meta_decl (decl, expr);
      }
  
      /* TODO: delete the vec.  */
*************** build_v2_protocol_list_address_table (vo
*** 2340,2350 ****
  static tree
  generate_v2_protocol_list (tree i_or_p, tree klass_ctxt)
  {
!   tree refs_decl, lproto, e, plist, ptempl_p_t;
!   int size = 0;
!   vec<constructor_elt, va_gc> *initlist = NULL;
!   char buf[BUFSIZE];
! 
    if (TREE_CODE (i_or_p) == CLASS_INTERFACE_TYPE
        || TREE_CODE (i_or_p) == CATEGORY_INTERFACE_TYPE)
      plist = CLASS_PROTOCOL_LIST (i_or_p);
--- 2340,2346 ----
  static tree
  generate_v2_protocol_list (tree i_or_p, tree klass_ctxt)
  {
!   tree plist;
    if (TREE_CODE (i_or_p) == CLASS_INTERFACE_TYPE
        || TREE_CODE (i_or_p) == CATEGORY_INTERFACE_TYPE)
      plist = CLASS_PROTOCOL_LIST (i_or_p);
*************** generate_v2_protocol_list (tree i_or_p,
*** 2354,2371 ****
      gcc_unreachable ();
  
    /* Compute size.  */
!   for (lproto = plist; lproto; lproto = TREE_CHAIN (lproto))
      if (TREE_CODE (TREE_VALUE (lproto)) == PROTOCOL_INTERFACE_TYPE
  	&& PROTOCOL_FORWARD_DECL (TREE_VALUE (lproto)))
        size++;
  
    /* Build initializer.  */
  
!   ptempl_p_t = build_pointer_type (objc_v2_protocol_template);
!   e = build_int_cst (ptempl_p_t, size);
!   CONSTRUCTOR_APPEND_ELT (initlist, NULL_TREE, e);
! 
!   for (lproto = plist; lproto; lproto = TREE_CHAIN (lproto))
      {
        tree pval = TREE_VALUE (lproto);
  
--- 2350,2370 ----
      gcc_unreachable ();
  
    /* Compute size.  */
!   int size = 0;
!   for (tree lproto = plist; lproto; lproto = TREE_CHAIN (lproto))
      if (TREE_CODE (TREE_VALUE (lproto)) == PROTOCOL_INTERFACE_TYPE
  	&& PROTOCOL_FORWARD_DECL (TREE_VALUE (lproto)))
        size++;
  
    /* Build initializer.  */
+   vec<constructor_elt, va_gc> *initlist = NULL;
+   tree ptempl_p_t = build_pointer_type (objc_v2_protocol_template);
+   tree e = build_int_cst (ptempl_p_t, size);
+   unsigned n = 0;
+   tree idx = size_int (n++);
+   CONSTRUCTOR_APPEND_ELT (initlist, idx, e);
  
!   for (tree lproto = plist; lproto; lproto = TREE_CHAIN (lproto))
      {
        tree pval = TREE_VALUE (lproto);
  
*************** generate_v2_protocol_list (tree i_or_p,
*** 2375,2386 ****
  	  tree fwref = PROTOCOL_FORWARD_DECL (pval);
  	  location_t loc = DECL_SOURCE_LOCATION (fwref) ;
  	  e = build_unary_op (loc, ADDR_EXPR, fwref, 0);
! 	  CONSTRUCTOR_APPEND_ELT (initlist, NULL_TREE, e);
  	}
      }
  
    /* static struct protocol_list_t *list[size]; */
  
    switch (TREE_CODE (i_or_p))
      {
      case PROTOCOL_INTERFACE_TYPE:
--- 2374,2387 ----
  	  tree fwref = PROTOCOL_FORWARD_DECL (pval);
  	  location_t loc = DECL_SOURCE_LOCATION (fwref) ;
  	  e = build_unary_op (loc, ADDR_EXPR, fwref, 0);
! 	  idx = size_int (n++);
! 	  CONSTRUCTOR_APPEND_ELT (initlist, idx, e);
  	}
      }
  
    /* static struct protocol_list_t *list[size]; */
  
+   char buf[BUFSIZE];
    switch (TREE_CODE (i_or_p))
      {
      case PROTOCOL_INTERFACE_TYPE:
*************** generate_v2_protocol_list (tree i_or_p,
*** 2400,2413 ****
  	gcc_unreachable ();
      }
  
!   refs_decl = start_var_decl (build_sized_array_type (ptempl_p_t, size+1),
! 			      buf);
    /* ObjC2 puts all these in the base section.  */
    OBJCMETA (refs_decl, objc_meta, meta_base);
    DECL_PRESERVE_P (refs_decl) = 1;
    DECL_USER_ALIGN (refs_decl) = 1;
!   finish_var_decl (refs_decl,
! 		   objc_build_constructor (TREE_TYPE (refs_decl),initlist));
    return refs_decl;
  }
  
--- 2401,2414 ----
  	gcc_unreachable ();
      }
  
!   tree refs_decl = start_meta_decl (build_sized_array_type (ptempl_p_t, size+1),
! 				   buf);
    /* ObjC2 puts all these in the base section.  */
    OBJCMETA (refs_decl, objc_meta, meta_base);
    DECL_PRESERVE_P (refs_decl) = 1;
    DECL_USER_ALIGN (refs_decl) = 1;
!   finish_meta_decl (refs_decl,
! 		   objc_build_constructor (TREE_TYPE (refs_decl), initlist));
    return refs_decl;
  }
  
*************** static tree
*** 2422,2444 ****
  build_v2_descriptor_table_initializer (tree type, tree entries)
  {
    vec<constructor_elt, va_gc> *initlist = NULL;
    do
      {
        vec<constructor_elt, va_gc> *eltlist = NULL;
!       CONSTRUCTOR_APPEND_ELT (eltlist, NULL_TREE,
  			      build_selector (METHOD_SEL_NAME (entries)));
!       CONSTRUCTOR_APPEND_ELT (eltlist, NULL_TREE,
  			      add_objc_string (METHOD_ENCODING (entries),
  						meth_var_types));
!       CONSTRUCTOR_APPEND_ELT (eltlist, NULL_TREE, null_pointer_node);
  
!       CONSTRUCTOR_APPEND_ELT (initlist, NULL_TREE,
  			      objc_build_constructor (type, eltlist));
        entries = TREE_CHAIN (entries);
      }
    while (entries);
  
!   return objc_build_constructor (build_array_type (type, 0), initlist);
  }
  
  /* struct method_list_t
--- 2423,2452 ----
  build_v2_descriptor_table_initializer (tree type, tree entries)
  {
    vec<constructor_elt, va_gc> *initlist = NULL;
+   unsigned n = 0;
    do
      {
        vec<constructor_elt, va_gc> *eltlist = NULL;
!       tree fields = first_type_field (type);
!       CONSTRUCTOR_APPEND_ELT (eltlist, fields,
  			      build_selector (METHOD_SEL_NAME (entries)));
!       fields = next_type_field (fields);
!       CONSTRUCTOR_APPEND_ELT (eltlist, fields,
  			      add_objc_string (METHOD_ENCODING (entries),
  						meth_var_types));
!       fields = next_type_field (fields);
!       CONSTRUCTOR_APPEND_ELT (eltlist, fields, build_zero_cst (TREE_TYPE (fields)));
  
!       tree idx = size_int (n);
!       CONSTRUCTOR_APPEND_ELT (initlist, idx,
  			      objc_build_constructor (type, eltlist));
        entries = TREE_CHAIN (entries);
+       n++;
      }
    while (entries);
  
!   tree idx_type = build_index_type (size_int (n));
!   return objc_build_constructor (build_array_type (type, idx_type), initlist);
  }
  
  /* struct method_list_t
*************** generate_v2_meth_descriptor_table (tree
*** 2478,2493 ****
  				   const char *prefix, tree attr,
  				   vec<tree>& all_meths)
  {
-   tree method_list_template, initlist, decl;
-   int size, entsize;
-   vec<constructor_elt, va_gc> *v = NULL;
-   char buf[BUFSIZE];
- 
    if (!chain || !prefix)
      return NULL_TREE;
  
    tree method = chain;
!   size = 0;
    while (method)
      {
        if (! METHOD_ENCODING (method))
--- 2486,2496 ----
  				   const char *prefix, tree attr,
  				   vec<tree>& all_meths)
  {
    if (!chain || !prefix)
      return NULL_TREE;
  
    tree method = chain;
!   int size = 0;
    while (method)
      {
        if (! METHOD_ENCODING (method))
*************** generate_v2_meth_descriptor_table (tree
*** 2496,2521 ****
        method = TREE_CHAIN (method);
        size++;
      }
  
!   gcc_assert (size);
!   method_list_template = build_v2_method_list_template (objc_method_template,
! 							size);
    snprintf (buf, BUFSIZE, "%s_%s", prefix,
  	    IDENTIFIER_POINTER (PROTOCOL_NAME (protocol)));
  
!   decl = start_var_decl (method_list_template, buf);
! 
!   entsize = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (objc_method_template));
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, build_int_cst (NULL_TREE, entsize));
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, build_int_cst (NULL_TREE, size));
!   initlist =
  	build_v2_descriptor_table_initializer (objc_method_template,
  					    chain);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, initlist);
    /* Get into the right section.  */
    OBJCMETA (decl, objc_meta, attr);
    DECL_USER_ALIGN (decl) = 1;
!   finish_var_decl (decl, objc_build_constructor (method_list_template, v));
    return decl;
  }
  
--- 2499,2528 ----
        method = TREE_CHAIN (method);
        size++;
      }
+   gcc_checking_assert (size);
  
!   tree method_list_template
!     = build_v2_method_list_template (objc_method_template, size);
!   char buf[BUFSIZE];
    snprintf (buf, BUFSIZE, "%s_%s", prefix,
  	    IDENTIFIER_POINTER (PROTOCOL_NAME (protocol)));
  
!   tree decl = start_meta_decl (method_list_template, buf);
!   vec<constructor_elt, va_gc> *v = NULL;
!   int entsize = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (objc_method_template));
!   tree fields = first_type_field (method_list_template);
!   CONSTRUCTOR_APPEND_ELT (v, fields, build_int_cst (NULL_TREE, entsize));
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, build_int_cst (NULL_TREE, size));
!   tree initlist =
  	build_v2_descriptor_table_initializer (objc_method_template,
  					    chain);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, initlist);
    /* Get into the right section.  */
    OBJCMETA (decl, objc_meta, attr);
    DECL_USER_ALIGN (decl) = 1;
!   finish_meta_decl (decl, objc_build_constructor (method_list_template, v));
    return decl;
  }
  
*************** generate_v2_meth_type_list (vec<tree>& a
*** 2531,2547 ****
    char *nam;
    asprintf (&nam, "%s_%s", prefix,
  	    IDENTIFIER_POINTER (PROTOCOL_NAME (protocol)));
!   tree decl = start_var_decl (list_type, nam);
    free (nam);
-   vec<constructor_elt, va_gc> *v = NULL;
  
    for (unsigned i = 0; i < size; ++i)
!     CONSTRUCTOR_APPEND_ELT (v, NULL_TREE,
! 			    add_objc_string (METHOD_ENCODING (all_meths[i]),
! 					     meth_var_types));
    OBJCMETA (decl, objc_meta, meta_base);
    DECL_USER_ALIGN (decl) = 1;
!   finish_var_decl (decl, objc_build_constructor (list_type, v));
    return decl;
  }
  
--- 2538,2557 ----
    char *nam;
    asprintf (&nam, "%s_%s", prefix,
  	    IDENTIFIER_POINTER (PROTOCOL_NAME (protocol)));
!   tree decl = start_meta_decl (list_type, nam);
    free (nam);
  
+   vec<constructor_elt, va_gc> *v = NULL;
    for (unsigned i = 0; i < size; ++i)
!     {
!       tree idx = size_int (i);
!       CONSTRUCTOR_APPEND_ELT (v, idx,
! 			      add_objc_string (METHOD_ENCODING (all_meths[i]),
! 					       meth_var_types));
!     }
    OBJCMETA (decl, objc_meta, meta_base);
    DECL_USER_ALIGN (decl) = 1;
!   finish_meta_decl (decl, objc_build_constructor (list_type, v));
    return decl;
  }
  
*************** static tree
*** 2552,2582 ****
  build_v2_property_table_initializer (tree type, tree context)
  {
    tree x;
-   vec<constructor_elt, va_gc> *inits = NULL;
    if (TREE_CODE (context) == PROTOCOL_INTERFACE_TYPE)
      x = CLASS_PROPERTY_DECL (context);
    else
      x = IMPL_PROPERTY_DECL (context);
  
    for (; x; x = TREE_CHAIN (x))
      {
        vec<constructor_elt, va_gc> *elemlist = NULL;
        /* NOTE! sections where property name/attribute go MUST change
  	 later.  */
        tree attribute, name_ident = PROPERTY_NAME (x);
! 
!       CONSTRUCTOR_APPEND_ELT (elemlist, NULL_TREE,
  			      add_objc_string (name_ident, prop_names_attr));
  
        attribute = objc_v2_encode_prop_attr (x);
!       CONSTRUCTOR_APPEND_ELT (elemlist, NULL_TREE,
  			      add_objc_string (attribute, prop_names_attr));
  
!       CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE,
  			      objc_build_constructor (type, elemlist));
      }
  
!   return objc_build_constructor (build_array_type (type, 0),inits);
  }
  
  /* This routine builds the following type:
--- 2562,2596 ----
  build_v2_property_table_initializer (tree type, tree context)
  {
    tree x;
    if (TREE_CODE (context) == PROTOCOL_INTERFACE_TYPE)
      x = CLASS_PROPERTY_DECL (context);
    else
      x = IMPL_PROPERTY_DECL (context);
  
+   vec<constructor_elt, va_gc> *inits = NULL;
+   unsigned n = 0;
    for (; x; x = TREE_CHAIN (x))
      {
        vec<constructor_elt, va_gc> *elemlist = NULL;
        /* NOTE! sections where property name/attribute go MUST change
  	 later.  */
        tree attribute, name_ident = PROPERTY_NAME (x);
!       tree fields = first_type_field (type);
!       CONSTRUCTOR_APPEND_ELT (elemlist, fields,
  			      add_objc_string (name_ident, prop_names_attr));
  
        attribute = objc_v2_encode_prop_attr (x);
!       fields = next_type_field (fields);
!       CONSTRUCTOR_APPEND_ELT (elemlist, fields,
  			      add_objc_string (attribute, prop_names_attr));
  
!       tree idx = size_int (n++);
!       CONSTRUCTOR_APPEND_ELT (inits, idx,
  			      objc_build_constructor (type, elemlist));
      }
  
!   tree idx_type = build_index_type (size_int (n));
!   return objc_build_constructor (build_array_type (type, idx_type), inits);
  }
  
  /* This routine builds the following type:
*************** build_v2_property_list_template (tree li
*** 2617,2628 ****
  static tree
  generate_v2_property_table (tree context, tree klass_ctxt)
  {
-   tree x, decl, initlist, property_list_template;
    bool is_proto = false;
!   vec<constructor_elt, va_gc> *inits = NULL;
!   int init_val, size = 0;
!   char buf[BUFSIZE];
! 
    if (context)
      {
        gcc_assert (TREE_CODE (context) == PROTOCOL_INTERFACE_TYPE);
--- 2631,2638 ----
  static tree
  generate_v2_property_table (tree context, tree klass_ctxt)
  {
    bool is_proto = false;
!   tree x;
    if (context)
      {
        gcc_assert (TREE_CODE (context) == PROTOCOL_INTERFACE_TYPE);
*************** generate_v2_property_table (tree context
*** 2632,2652 ****
    else
      x = IMPL_PROPERTY_DECL (klass_ctxt);
  
    for (; x; x = TREE_CHAIN (x))
      size++;
  
    if (size == 0)
      return NULL_TREE;
  
!   property_list_template =
! 	build_v2_property_list_template (objc_v2_property_template,
! 					 size);
  
!   initlist = build_v2_property_table_initializer (objc_v2_property_template,
! 						  is_proto ? context
! 							   : klass_ctxt);
  
!   init_val = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (objc_v2_property_template));
    if (is_proto)
      snprintf (buf, BUFSIZE, "_OBJC_ProtocolPropList_%s",
  	      IDENTIFIER_POINTER (PROTOCOL_NAME (context)));
--- 2642,2663 ----
    else
      x = IMPL_PROPERTY_DECL (klass_ctxt);
  
+   int size = 0;
    for (; x; x = TREE_CHAIN (x))
      size++;
  
    if (size == 0)
      return NULL_TREE;
  
!   tree property_list_template
!     = build_v2_property_list_template (objc_v2_property_template, size);
  
!   tree initlist
!     = build_v2_property_table_initializer (objc_v2_property_template,
! 					   is_proto ? context : klass_ctxt);
  
!   int init_val = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (objc_v2_property_template));
!   char buf[BUFSIZE];
    if (is_proto)
      snprintf (buf, BUFSIZE, "_OBJC_ProtocolPropList_%s",
  	      IDENTIFIER_POINTER (PROTOCOL_NAME (context)));
*************** generate_v2_property_table (tree context
*** 2654,2670 ****
      snprintf (buf, BUFSIZE, "_OBJC_ClassPropList_%s",
  	      IDENTIFIER_POINTER (CLASS_NAME (klass_ctxt)));
  
!   decl = start_var_decl (property_list_template, buf);
! 
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE,
! 			  build_int_cst (NULL_TREE, init_val));
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE,
! 			  build_int_cst (NULL_TREE, size));
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, initlist);
  
    OBJCMETA (decl, objc_meta, meta_base);
    DECL_USER_ALIGN (decl) = 1;
!   finish_var_decl (decl, objc_build_constructor (TREE_TYPE (decl), inits));
    return decl;
  }
  
--- 2665,2684 ----
      snprintf (buf, BUFSIZE, "_OBJC_ClassPropList_%s",
  	      IDENTIFIER_POINTER (CLASS_NAME (klass_ctxt)));
  
!   tree decl = start_meta_decl (property_list_template, buf);
!   vec<constructor_elt, va_gc> *inits = NULL;
!   tree fields = first_type_field (property_list_template);
!   CONSTRUCTOR_APPEND_ELT (inits, fields,
! 			  build_int_cst (unsigned_type_node, init_val));
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (inits, fields,
! 			  build_int_cst (unsigned_type_node, size));
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (inits, fields, initlist);
  
    OBJCMETA (decl, objc_meta, meta_base);
    DECL_USER_ALIGN (decl) = 1;
!   finish_meta_decl (decl, objc_build_constructor (TREE_TYPE (decl), inits));
    return decl;
  }
  
*************** build_v2_protocol_initializer (tree type
*** 2675,2753 ****
  			      tree property_list, tree ext_meth_types,
  			      tree demangled_name, tree class_prop_list)
  {
-   tree expr, ttyp;
-   location_t loc;
    vec<constructor_elt, va_gc> *inits = NULL;
  
-   /* TODO: find a better representation of location from the inputs.  */
-   loc = UNKNOWN_LOCATION;
- 
    /*  This is NULL for the new ABI.  */
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE,
! 			      convert (objc_object_type, null_pointer_node));
  
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, protocol_name);
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, protocol_list);
  
!   ttyp = objc_method_proto_list_ptr;
    if (inst_methods)
      expr = convert (ttyp, build_unary_op (loc, ADDR_EXPR, inst_methods, 0));
    else
!     expr = convert (ttyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, expr);
  
    if (class_methods)
      expr = convert (ttyp, build_unary_op (loc, ADDR_EXPR, class_methods, 0));
    else
!     expr = convert (ttyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, expr);
  
    if (opt_ins_meth)
      expr = convert (ttyp, build_unary_op (loc, ADDR_EXPR, opt_ins_meth, 0));
    else
!     expr = convert (ttyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, expr);
  
    if (opt_cls_meth)
      expr = convert (ttyp, build_unary_op (loc, ADDR_EXPR, opt_cls_meth, 0));
    else
!     expr = convert (ttyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, expr);
  
    ttyp = objc_prop_list_ptr;
    if (property_list)
      expr = convert (ttyp, build_unary_op (loc, ADDR_EXPR, property_list, 0));
    else
!     expr = convert (ttyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, expr);
  
    /* const uint32_t size;  = sizeof(struct protocol_t) */
    expr = build_int_cst (integer_type_node,
  	      TREE_INT_CST_LOW (TYPE_SIZE_UNIT (objc_v2_protocol_template)));
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, expr);
    /* const uint32_t flags; = 0 */
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, integer_zero_node);
  
    ttyp = build_pointer_type (string_type_node);
    if (ext_meth_types)
      expr = convert (ttyp, build_unary_op (loc, ADDR_EXPR, ext_meth_types, 0));
    else
!     expr = convert (ttyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, expr);
  
    ttyp = string_type_node;
     if (demangled_name)
      expr = convert (ttyp, build_unary_op (loc, ADDR_EXPR, demangled_name, 0));
    else
!     expr = convert (ttyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, expr);
  
    ttyp = objc_prop_list_ptr;
     if (class_prop_list)
      expr = convert (ttyp, build_unary_op (loc, ADDR_EXPR, class_prop_list, 0));
    else
!     expr = convert (ttyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, expr);
  
   return objc_build_constructor (type, inits);
  }
--- 2689,2778 ----
  			      tree property_list, tree ext_meth_types,
  			      tree demangled_name, tree class_prop_list)
  {
    vec<constructor_elt, va_gc> *inits = NULL;
  
    /*  This is NULL for the new ABI.  */
!   tree fields = first_type_field (type);
!   CONSTRUCTOR_APPEND_ELT (inits, fields,
! 			  build_zero_cst (objc_object_type));
  
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (inits, fields, protocol_name);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (inits, fields, protocol_list);
  
!   /* TODO: find a better representation of location from the inputs.  */
!   location_t loc = UNKNOWN_LOCATION;
!   tree expr;
!   tree ttyp = objc_method_proto_list_ptr;
    if (inst_methods)
      expr = convert (ttyp, build_unary_op (loc, ADDR_EXPR, inst_methods, 0));
    else
!     expr = build_zero_cst (ttyp);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (inits, fields, expr);
  
    if (class_methods)
      expr = convert (ttyp, build_unary_op (loc, ADDR_EXPR, class_methods, 0));
    else
!     expr = build_zero_cst (ttyp);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (inits, fields, expr);
  
    if (opt_ins_meth)
      expr = convert (ttyp, build_unary_op (loc, ADDR_EXPR, opt_ins_meth, 0));
    else
!     expr = build_zero_cst (ttyp);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (inits, fields, expr);
  
    if (opt_cls_meth)
      expr = convert (ttyp, build_unary_op (loc, ADDR_EXPR, opt_cls_meth, 0));
    else
!     expr = build_zero_cst (ttyp);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (inits, fields, expr);
  
    ttyp = objc_prop_list_ptr;
    if (property_list)
      expr = convert (ttyp, build_unary_op (loc, ADDR_EXPR, property_list, 0));
    else
!     expr = build_zero_cst (ttyp);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (inits, fields, expr);
  
    /* const uint32_t size;  = sizeof(struct protocol_t) */
    expr = build_int_cst (integer_type_node,
  	      TREE_INT_CST_LOW (TYPE_SIZE_UNIT (objc_v2_protocol_template)));
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (inits, fields, expr);
    /* const uint32_t flags; = 0 */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (inits, fields, integer_zero_node);
  
    ttyp = build_pointer_type (string_type_node);
    if (ext_meth_types)
      expr = convert (ttyp, build_unary_op (loc, ADDR_EXPR, ext_meth_types, 0));
    else
!     expr = build_zero_cst (ttyp);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (inits, fields, expr);
  
    ttyp = string_type_node;
     if (demangled_name)
      expr = convert (ttyp, build_unary_op (loc, ADDR_EXPR, demangled_name, 0));
    else
!     expr = build_zero_cst (ttyp);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (inits, fields, expr);
  
    ttyp = objc_prop_list_ptr;
     if (class_prop_list)
      expr = convert (ttyp, build_unary_op (loc, ADDR_EXPR, class_prop_list, 0));
    else
!     expr = build_zero_cst (ttyp);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (inits, fields, expr);
  
   return objc_build_constructor (type, inits);
  }
*************** generate_v2_protocols (void)
*** 2834,2840 ****
  						opt_inst_meth, opt_class_meth,
  						props, ext_meth_types,
  						demangled_name,class_prop_list);
!       finish_var_decl (decl, initlist);
        objc_add_to_protocol_list (p, decl);
        all_meths.truncate (0);
      }
--- 2859,2865 ----
  						opt_inst_meth, opt_class_meth,
  						props, ext_meth_types,
  						demangled_name,class_prop_list);
!       finish_meta_decl (decl, initlist);
        objc_add_to_protocol_list (p, decl);
        all_meths.truncate (0);
      }
*************** generate_v2_protocols (void)
*** 2853,2883 ****
  static tree
  generate_v2_dispatch_table (tree chain, const char *name, tree attr)
  {
!   tree decl, method_list_template, initlist;
!   vec<constructor_elt, va_gc> *v = NULL;
!   int size, init_val;
! 
    if (!chain || !name || !(size = list_length (chain)))
      return NULL_TREE;
  
!   method_list_template
! 	= build_v2_method_list_template (objc_method_template, size);
!   initlist
! 	= build_dispatch_table_initializer (objc_method_template, chain);
! 
!   decl = start_var_decl  (method_list_template, name);
  
!   init_val = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (objc_method_template));
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE,
  			  build_int_cst (integer_type_node, init_val));
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE,
  			  build_int_cst (integer_type_node, size));
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, initlist);
  
    OBJCMETA (decl, objc_meta, attr);
    DECL_USER_ALIGN (decl) = 1;
!   finish_var_decl (decl,
! 		   objc_build_constructor (TREE_TYPE (decl), v));
    return decl;
  }
  
--- 2878,2907 ----
  static tree
  generate_v2_dispatch_table (tree chain, const char *name, tree attr)
  {
!   int size = 0;
    if (!chain || !name || !(size = list_length (chain)))
      return NULL_TREE;
  
!   tree method_list_template
!     = build_v2_method_list_template (objc_method_template, size);
!   tree initlist
!     = build_dispatch_table_initializer (objc_method_template, chain);
  
!   tree decl = start_meta_decl (method_list_template, name);
!   vec<constructor_elt, va_gc> *v = NULL;
!   int init_val = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (objc_method_template));
!   tree fields = first_type_field (method_list_template);
!   CONSTRUCTOR_APPEND_ELT (v, fields,
  			  build_int_cst (integer_type_node, init_val));
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields,
  			  build_int_cst (integer_type_node, size));
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, initlist);
  
    OBJCMETA (decl, objc_meta, attr);
    DECL_USER_ALIGN (decl) = 1;
!   finish_meta_decl (decl, objc_build_constructor (TREE_TYPE (decl), v));
    return decl;
  }
  
*************** build_v2_category_initializer (tree type
*** 2888,2926 ****
  				tree protocol_list, tree property_list,
  				location_t loc)
  {
-   tree expr, ltyp;
    vec<constructor_elt, va_gc> *v = NULL;
  
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, cat_name);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, class_name);
! 
!   ltyp = objc_method_list_ptr;
    if (inst_methods)
      expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, inst_methods, 0));
    else
!     expr = convert (ltyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
  
    if (class_methods)
      expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, class_methods, 0));
    else
!     expr = convert (ltyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
  
    /* protocol_list = */
    ltyp = build_pointer_type (objc_v2_protocol_template);
    if (protocol_list)
      expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, protocol_list, 0));
    else
!     expr = convert (ltyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
  
    ltyp = objc_prop_list_ptr;
    if (property_list)
      expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, property_list, 0));
    else
!     expr = convert (ltyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
  
    return objc_build_constructor (type, v);
  }
--- 2912,2955 ----
  				tree protocol_list, tree property_list,
  				location_t loc)
  {
    vec<constructor_elt, va_gc> *v = NULL;
+   tree fields = first_type_field (type);
+   CONSTRUCTOR_APPEND_ELT (v, fields, cat_name);
+   fields = next_type_field (fields);
+   CONSTRUCTOR_APPEND_ELT (v, fields, class_name);
  
!   tree ltyp = objc_method_list_ptr;
!   tree expr;
    if (inst_methods)
      expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, inst_methods, 0));
    else
!     expr = build_zero_cst (ltyp);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, expr);
  
    if (class_methods)
      expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, class_methods, 0));
    else
!     expr = build_zero_cst (ltyp);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, expr);
  
    /* protocol_list = */
    ltyp = build_pointer_type (objc_v2_protocol_template);
    if (protocol_list)
      expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, protocol_list, 0));
    else
!     expr = build_zero_cst (ltyp);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, expr);
  
    ltyp = objc_prop_list_ptr;
    if (property_list)
      expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, property_list, 0));
    else
!     expr = build_zero_cst (ltyp);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, expr);
  
    return objc_build_constructor (type, v);
  }
*************** generate_v2_category (struct imp_entry *
*** 2948,2954 ****
    DECL_PRESERVE_P (t) = 1;
  
    snprintf (buf, BUFSIZE, "OBJC_CLASS_$_%s", IDENTIFIER_POINTER (CLASS_NAME (cat)));
!   class_name_expr = create_extern_decl (objc_v2_class_template, buf);
    class_name_expr = build_fold_addr_expr (class_name_expr);
  
    cat_name_expr = add_objc_string (CLASS_SUPER_NAME (cat), class_names);
--- 2977,2983 ----
    DECL_PRESERVE_P (t) = 1;
  
    snprintf (buf, BUFSIZE, "OBJC_CLASS_$_%s", IDENTIFIER_POINTER (CLASS_NAME (cat)));
!   class_name_expr = create_extern_meta (objc_v2_class_template, buf);
    class_name_expr = build_fold_addr_expr (class_name_expr);
  
    cat_name_expr = add_objc_string (CLASS_SUPER_NAME (cat), class_names);
*************** generate_v2_category (struct imp_entry *
*** 2989,2995 ****
  					    inst_methods, class_methods,
  					    protocol_decl, props, loc);
  
!   finish_var_decl (cat_decl, initlist);
    impent->class_decl = cat_decl;
  
    /* Add to list of pointers in __category_list section.  */
--- 3018,3024 ----
  					    inst_methods, class_methods,
  					    protocol_decl, props, loc);
  
!   finish_meta_decl (cat_decl, initlist);
    impent->class_decl = cat_decl;
  
    /* Add to list of pointers in __category_list section.  */
*************** ivar_offset_ref (tree class_name, tree f
*** 3035,3043 ****
    /* We come here if we don't find a match or at the start.  */
    global_var = (TREE_PUBLIC (field_decl) || TREE_PROTECTED (field_decl));
    if (global_var)
!     decl = create_global_decl (TREE_TYPE (size_zero_node), buf);
    else
!     decl = create_hidden_decl (TREE_TYPE (size_zero_node), buf);
  
    /* Identify so that we can indirect these where the ABI requires.  */
    OBJCMETA (decl, objc_meta, meta_ivar_ref);
--- 3064,3072 ----
    /* We come here if we don't find a match or at the start.  */
    global_var = (TREE_PUBLIC (field_decl) || TREE_PROTECTED (field_decl));
    if (global_var)
!     decl = create_global_meta (TREE_TYPE (size_zero_node), buf);
    else
!     decl = create_hidden_meta (TREE_TYPE (size_zero_node), buf);
  
    /* Identify so that we can indirect these where the ABI requires.  */
    OBJCMETA (decl, objc_meta, meta_ivar_ref);
*************** static tree
*** 3057,3069 ****
  build_v2_ivar_list_initializer (tree class_name, tree type, tree field_decl)
  {
    vec<constructor_elt, va_gc> *inits = NULL;
! 
    do
      {
-       vec<constructor_elt, va_gc> *ivar = NULL;
-       int val;
-       tree id;
- 
        /* Unnamed bitfields are ignored.  */
        if (!DECL_NAME (field_decl))
  	{
--- 3086,3094 ----
  build_v2_ivar_list_initializer (tree class_name, tree type, tree field_decl)
  {
    vec<constructor_elt, va_gc> *inits = NULL;
!   unsigned n = 0;
    do
      {
        /* Unnamed bitfields are ignored.  */
        if (!DECL_NAME (field_decl))
  	{
*************** build_v2_ivar_list_initializer (tree cla
*** 3071,3106 ****
  	  continue;
  	}
  
        /* Set offset.  */
!       CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE,
  			      build_unary_op (input_location,
  					      ADDR_EXPR,
  					      ivar_offset_ref (class_name,
  							       field_decl), 0));
  
        /* Set name.  */
!       CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE,
  			      add_objc_string (DECL_NAME (field_decl),
  						meth_var_names));
  
        /* Set type.  */
!       id = add_objc_string (encode_field_decl (field_decl),
!                             meth_var_types);
!       CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE, id);
  
        /* Set alignment.  */
!       val = DECL_ALIGN_UNIT (field_decl);
        val = exact_log2 (val);
!       CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE,
  			      build_int_cst (integer_type_node, val));
  
        /* Set size.  */
        val = TREE_INT_CST_LOW (DECL_SIZE_UNIT (field_decl));
!       CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE,
  			      build_int_cst (integer_type_node, val));
  
!       CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE,
! 			      objc_build_constructor (type, ivar));
  
        do
  	field_decl = DECL_CHAIN (field_decl);
--- 3096,3137 ----
  	  continue;
  	}
  
+       vec<constructor_elt, va_gc> *ivar = NULL;
        /* Set offset.  */
!       tree fields = first_type_field (type);
!       CONSTRUCTOR_APPEND_ELT (ivar, fields,
  			      build_unary_op (input_location,
  					      ADDR_EXPR,
  					      ivar_offset_ref (class_name,
  							       field_decl), 0));
  
        /* Set name.  */
!       fields = next_type_field (fields);
!       CONSTRUCTOR_APPEND_ELT (ivar, fields,
  			      add_objc_string (DECL_NAME (field_decl),
  						meth_var_names));
  
        /* Set type.  */
!       tree id = add_objc_string (encode_field_decl (field_decl),
! 				 meth_var_types);
!       fields = next_type_field (fields);
!       CONSTRUCTOR_APPEND_ELT (ivar, fields, id);
  
        /* Set alignment.  */
!       int val = DECL_ALIGN_UNIT (field_decl);
        val = exact_log2 (val);
!       fields = next_type_field (fields);
!       CONSTRUCTOR_APPEND_ELT (ivar, fields,
  			      build_int_cst (integer_type_node, val));
  
        /* Set size.  */
        val = TREE_INT_CST_LOW (DECL_SIZE_UNIT (field_decl));
!       fields = next_type_field (fields);
!       CONSTRUCTOR_APPEND_ELT (ivar, fields,
  			      build_int_cst (integer_type_node, val));
  
!       tree idx = size_int (n++);
!       CONSTRUCTOR_APPEND_ELT (inits, idx, objc_build_constructor (type, ivar));
  
        do
  	field_decl = DECL_CHAIN (field_decl);
*************** build_v2_ivar_list_initializer (tree cla
*** 3108,3114 ****
      }
    while (field_decl);
  
!   return objc_build_constructor (build_array_type (type, 0), inits);
  }
  
  /*
--- 3139,3146 ----
      }
    while (field_decl);
  
!   tree idx_type = build_index_type (size_int (n));
!   return objc_build_constructor (build_array_type (type, idx_type), inits);
  }
  
  /*
*************** build_v2_ivar_list_t_template (tree list
*** 3151,3180 ****
  static tree
  generate_v2_ivars_list (tree chain, const char *name, tree attr, tree templ)
  {
!   tree decl, initlist, ivar_list_template;
!   vec<constructor_elt, va_gc> *inits = NULL;
!   int size, ivar_t_size;
! 
    if (!chain || !name || !(size = ivar_list_length (chain)))
      return NULL_TREE;
  
    generating_instance_variables = 1;
!   ivar_list_template = build_v2_ivar_list_t_template (objc_v2_ivar_template,
! 						      size);
  
!   initlist = build_v2_ivar_list_initializer (CLASS_NAME (templ),
! 					     objc_v2_ivar_template, chain);
!   ivar_t_size = TREE_INT_CST_LOW  (TYPE_SIZE_UNIT (objc_v2_ivar_template));
  
!   decl = start_var_decl (ivar_list_template, name);
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE,
  			  build_int_cst (integer_type_node, ivar_t_size));
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE,
  			  build_int_cst (integer_type_node, size));
!   CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, initlist);
    OBJCMETA (decl, objc_meta, attr);
    DECL_USER_ALIGN (decl) = 1;
!   finish_var_decl (decl, objc_build_constructor (TREE_TYPE (decl), inits));
    generating_instance_variables = 0;
    return decl;
  }
--- 3183,3214 ----
  static tree
  generate_v2_ivars_list (tree chain, const char *name, tree attr, tree templ)
  {
!   int size = 0;
    if (!chain || !name || !(size = ivar_list_length (chain)))
      return NULL_TREE;
  
    generating_instance_variables = 1;
!   tree ivar_list_template
!     = build_v2_ivar_list_t_template (objc_v2_ivar_template, size);
  
!   tree initlist
!     = build_v2_ivar_list_initializer (CLASS_NAME (templ),
! 				      objc_v2_ivar_template, chain);
!   int ivar_t_size = TREE_INT_CST_LOW  (TYPE_SIZE_UNIT (objc_v2_ivar_template));
  
!   tree decl = start_meta_decl (ivar_list_template, name);
!   vec<constructor_elt, va_gc> *inits = NULL;
!   tree fields = first_type_field (ivar_list_template);
!   CONSTRUCTOR_APPEND_ELT (inits, fields,
  			  build_int_cst (integer_type_node, ivar_t_size));
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (inits, fields,
  			  build_int_cst (integer_type_node, size));
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (inits, fields, initlist);
    OBJCMETA (decl, objc_meta, attr);
    DECL_USER_ALIGN (decl) = 1;
!   finish_meta_decl (decl, objc_build_constructor (TREE_TYPE (decl), inits));
    generating_instance_variables = 0;
    return decl;
  }
*************** build_v2_class_t_initializer (tree type,
*** 3189,3213 ****
    vec<constructor_elt, va_gc> *initlist = NULL;
  
    /* isa */
!   CONSTRUCTOR_APPEND_ELT (initlist, NULL_TREE, isa);
  
    /* superclass */
!   CONSTRUCTOR_APPEND_ELT (initlist, NULL_TREE, superclass);
  
    /* cache */
    if (cache)
!     CONSTRUCTOR_APPEND_ELT (initlist, NULL_TREE, cache);
!   else
!     CONSTRUCTOR_APPEND_ELT (initlist, NULL_TREE, null_pointer_node);
  
    /* vtable */
    if (vtable)
!     CONSTRUCTOR_APPEND_ELT (initlist, NULL_TREE, vtable);
!   else
!     CONSTRUCTOR_APPEND_ELT (initlist, NULL_TREE, null_pointer_node);
  
    /* ro */
!   CONSTRUCTOR_APPEND_ELT (initlist, NULL_TREE, ro);
  
    return objc_build_constructor (type, initlist);
  }
--- 3223,3254 ----
    vec<constructor_elt, va_gc> *initlist = NULL;
  
    /* isa */
!   tree fields = first_type_field (type);
!   CONSTRUCTOR_APPEND_ELT (initlist, fields, isa);
  
    /* superclass */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (initlist, fields, superclass);
  
    /* cache */
+   tree expr = null_pointer_node;
    if (cache)
!     expr = cache;
! 
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (initlist, fields, expr);
  
    /* vtable */
+   expr = null_pointer_node;
    if (vtable)
!     expr = vtable;
! 
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (initlist, fields, expr);
  
    /* ro */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (initlist, fields, ro);
  
    return objc_build_constructor (type, initlist);
  }
*************** build_v2_class_ro_t_initializer (tree ty
*** 3222,3300 ****
  			       tree baseMethods, tree baseProtocols,
  			       tree ivars, tree property_list)
  {
-   tree expr, unsigned_char_star, ltyp;
-   location_t loc;
    vec<constructor_elt, va_gc> *initlist = NULL;
  
-   /* TODO: fish out the real location from somewhere.  */
-   loc = UNKNOWN_LOCATION;
- 
    /* flags */
!   CONSTRUCTOR_APPEND_ELT (initlist, NULL_TREE,
  			  build_int_cst (integer_type_node, flags));
  
    /* instanceStart */
!   CONSTRUCTOR_APPEND_ELT (initlist, NULL_TREE,
  			  build_int_cst (integer_type_node, instanceStart));
  
    /* instanceSize */
!   CONSTRUCTOR_APPEND_ELT (initlist, NULL_TREE,
  			  build_int_cst (integer_type_node, instanceSize));
  
    /* This ABI is currently only used on m64 NeXT.  We always
       explicitly declare the alignment padding.  */
    /* reserved, pads alignment.  */
!   CONSTRUCTOR_APPEND_ELT (initlist, NULL_TREE,
! 			    integer_zero_node);
  
    /* ivarLayout */
!   unsigned_char_star = build_pointer_type (unsigned_char_type_node);
    if (ivarLayout)
      expr = ivarLayout;
    else
!     expr = convert (unsigned_char_star, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (initlist, NULL_TREE, expr);
  
    /* name */
!   CONSTRUCTOR_APPEND_ELT (initlist, NULL_TREE, default_conversion (name));
  
    /* baseMethods */
!   ltyp = objc_method_list_ptr;
    if (baseMethods)
      expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, baseMethods, 0));
    else
!     expr = convert (ltyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (initlist, NULL_TREE, expr);
  
    /* baseProtocols */
    ltyp = build_pointer_type (xref_tag (RECORD_TYPE,
! 			               get_identifier (UTAG_V2_PROTOCOL_LIST)));
    if (baseProtocols)
      expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, baseProtocols, 0));
    else
!     expr = convert (ltyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (initlist, NULL_TREE, expr);
  
    /* ivars */
    ltyp = objc_v2_ivar_list_ptr;
    if (ivars)
      expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, ivars, 0));
    else
!     expr = convert (ltyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (initlist, NULL_TREE, expr);
  
    /* TODO: We don't yet have the weak/strong stuff...  */
    /* weakIvarLayout */
!   CONSTRUCTOR_APPEND_ELT (initlist, NULL_TREE,
! 			  convert (unsigned_char_star, null_pointer_node));
  
    /* property list */
    ltyp = objc_prop_list_ptr;
    if (property_list)
      expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, property_list, 0));
    else
!     expr = convert (ltyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (initlist, NULL_TREE, expr);
    return objc_build_constructor (type, initlist);
  }
  
--- 3263,3349 ----
  			       tree baseMethods, tree baseProtocols,
  			       tree ivars, tree property_list)
  {
    vec<constructor_elt, va_gc> *initlist = NULL;
  
    /* flags */
!   tree fields = first_type_field (type);
!   CONSTRUCTOR_APPEND_ELT (initlist, fields,
  			  build_int_cst (integer_type_node, flags));
  
    /* instanceStart */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (initlist, fields,
  			  build_int_cst (integer_type_node, instanceStart));
  
    /* instanceSize */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (initlist, fields,
  			  build_int_cst (integer_type_node, instanceSize));
  
    /* This ABI is currently only used on m64 NeXT.  We always
       explicitly declare the alignment padding.  */
    /* reserved, pads alignment.  */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (initlist, fields, integer_zero_node);
  
    /* ivarLayout */
!   tree unsigned_char_star = build_pointer_type (unsigned_char_type_node);
!   tree expr;
    if (ivarLayout)
      expr = ivarLayout;
    else
!     expr = build_zero_cst (unsigned_char_star);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (initlist, fields, expr);
  
    /* name */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (initlist, fields, default_conversion (name));
  
+   /* TODO: fish out the real location from somewhere.  */
+   location_t loc = UNKNOWN_LOCATION;
    /* baseMethods */
!   tree ltyp = objc_method_list_ptr;
    if (baseMethods)
      expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, baseMethods, 0));
    else
!     expr = build_zero_cst (ltyp);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (initlist, fields, expr);
  
    /* baseProtocols */
    ltyp = build_pointer_type (xref_tag (RECORD_TYPE,
! 				       get_identifier (UTAG_V2_PROTOCOL_LIST)));
    if (baseProtocols)
      expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, baseProtocols, 0));
    else
!     expr = build_zero_cst (ltyp);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (initlist, fields, expr);
  
    /* ivars */
    ltyp = objc_v2_ivar_list_ptr;
    if (ivars)
      expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, ivars, 0));
    else
!     expr = build_zero_cst (ltyp);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (initlist, fields, expr);
  
    /* TODO: We don't yet have the weak/strong stuff...  */
    /* weakIvarLayout */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (initlist, fields,
! 			  build_zero_cst (unsigned_char_star));
  
    /* property list */
    ltyp = objc_prop_list_ptr;
    if (property_list)
      expr = convert (ltyp, build_unary_op (loc, ADDR_EXPR, property_list, 0));
    else
!     expr = build_zero_cst (ltyp);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (initlist, fields, expr);
    return objc_build_constructor (type, initlist);
  }
  
*************** generate_v2_class_structs (struct imp_en
*** 3376,3382 ****
           create extern if not already declared.  */
        snprintf (buf, BUFSIZE, "OBJC_METACLASS_$_%s",
  		IDENTIFIER_POINTER (CLASS_NAME (my_root_int)));
!       root_expr = create_extern_decl (objc_v2_class_template, buf);
        root_expr = build_fold_addr_expr (root_expr);
  
        /* Install class `isa' and `super' pointers at runtime.  */
--- 3425,3431 ----
           create extern if not already declared.  */
        snprintf (buf, BUFSIZE, "OBJC_METACLASS_$_%s",
  		IDENTIFIER_POINTER (CLASS_NAME (my_root_int)));
!       root_expr = create_extern_meta (objc_v2_class_template, buf);
        root_expr = build_fold_addr_expr (root_expr);
  
        /* Install class `isa' and `super' pointers at runtime.  */
*************** generate_v2_class_structs (struct imp_en
*** 3385,3404 ****
        /* Similarly, for OBJC_CLASS_$_<interface>...  */
        snprintf (buf, BUFSIZE, "OBJC_CLASS_$_%s",
  		IDENTIFIER_POINTER (CLASS_NAME (interface)));
!       class_superclass_expr = create_extern_decl (objc_v2_class_template, buf);
        class_superclass_expr = build_fold_addr_expr (class_superclass_expr);
        /* ... and for OBJC_METACLASS_$_<interface>.  */
        snprintf (buf, BUFSIZE, "OBJC_METACLASS_$_%s",
  		IDENTIFIER_POINTER (CLASS_NAME (interface)));
!       metaclass_superclass_expr = create_extern_decl (objc_v2_class_template, buf);
        metaclass_superclass_expr = build_fold_addr_expr (metaclass_superclass_expr);
      }
    else
      {
        /* Root class.  */
        root_expr = build_unary_op (loc, ADDR_EXPR, metaclass_decl, 0);
        metaclass_superclass_expr = build_unary_op (loc, ADDR_EXPR, class_decl, 0);
-       class_superclass_expr = build_int_cst (NULL_TREE, 0);
        flags |= 0x02; /* RO_ROOT: it is also a root meta class.  */
      }
  
--- 3434,3454 ----
        /* Similarly, for OBJC_CLASS_$_<interface>...  */
        snprintf (buf, BUFSIZE, "OBJC_CLASS_$_%s",
  		IDENTIFIER_POINTER (CLASS_NAME (interface)));
!       class_superclass_expr = create_extern_meta (objc_v2_class_template, buf);
        class_superclass_expr = build_fold_addr_expr (class_superclass_expr);
        /* ... and for OBJC_METACLASS_$_<interface>.  */
        snprintf (buf, BUFSIZE, "OBJC_METACLASS_$_%s",
  		IDENTIFIER_POINTER (CLASS_NAME (interface)));
!       metaclass_superclass_expr = create_extern_meta (objc_v2_class_template, buf);
        metaclass_superclass_expr = build_fold_addr_expr (metaclass_superclass_expr);
      }
    else
      {
        /* Root class.  */
        root_expr = build_unary_op (loc, ADDR_EXPR, metaclass_decl, 0);
+       class_superclass_expr
+ 	= build_zero_cst (build_pointer_type (objc_v2_class_template));
        metaclass_superclass_expr = build_unary_op (loc, ADDR_EXPR, class_decl, 0);
        flags |= 0x02; /* RO_ROOT: it is also a root meta class.  */
      }
  
*************** generate_v2_class_structs (struct imp_en
*** 3411,3421 ****
    else
      protocol_decl = 0;
  
!   name_expr = add_objc_string (CLASS_NAME (impent->imp_template),
!                                class_names);
  
    if (CLASS_CLS_METHODS (impent->imp_context))
      {
        snprintf (buf, BUFSIZE, "_OBJC_ClassMethods_%s",
  		IDENTIFIER_POINTER (CLASS_NAME (impent->imp_context)));
        class_methods =
--- 3461,3472 ----
    else
      protocol_decl = 0;
  
!   name_expr = add_objc_string (CLASS_NAME (impent->imp_template), class_names);
  
    if (CLASS_CLS_METHODS (impent->imp_context))
      {
+       CLASS_CLS_METHODS (impent->imp_context)
+ 	= nreverse (CLASS_CLS_METHODS (impent->imp_context));
        snprintf (buf, BUFSIZE, "_OBJC_ClassMethods_%s",
  		IDENTIFIER_POINTER (CLASS_NAME (impent->imp_context)));
        class_methods =
*************** generate_v2_class_structs (struct imp_en
*** 3438,3444 ****
    /* So now build the META CLASS structs.  */
    /* static struct class_ro_t  _OBJC_METACLASS_Foo = { ... }; */
  
!   decl = start_var_decl (objc_v2_class_ro_template,
  			 newabi_append_ro (IDENTIFIER_POINTER
  						(DECL_NAME (metaclass_decl))));
    /* TODO: ivarLayout needs t be built.  */
--- 3489,3495 ----
    /* So now build the META CLASS structs.  */
    /* static struct class_ro_t  _OBJC_METACLASS_Foo = { ... }; */
  
!   decl = start_meta_decl (objc_v2_class_ro_template,
  			 newabi_append_ro (IDENTIFIER_POINTER
  						(DECL_NAME (metaclass_decl))));
    /* TODO: ivarLayout needs t be built.  */
*************** generate_v2_class_structs (struct imp_en
*** 3450,3457 ****
  					class_ivars, NULL_TREE);
    /* The ROs sit in the default const section.  */
    OBJCMETA (decl, objc_meta, meta_base);
!   DECL_USER_ALIGN (decl) = 1;
!   finish_var_decl (decl, initlist);
  
    /* static struct class_t _OBJC_METACLASS_Foo = { ... }; */
    initlist =
--- 3501,3508 ----
  					class_ivars, NULL_TREE);
    /* The ROs sit in the default const section.  */
    OBJCMETA (decl, objc_meta, meta_base);
!   DECL_USER_ALIGN (decl) = true;
!   finish_meta_decl (decl, initlist);
  
    /* static struct class_t _OBJC_METACLASS_Foo = { ... }; */
    initlist =
*************** generate_v2_class_structs (struct imp_en
*** 3463,3469 ****
  				      build_fold_addr_expr (UOBJC_V2_VTABLE_decl));
    /* The class section attributes are set when they are created.  */
    DECL_USER_ALIGN (metaclass_decl) = 1;
!   finish_var_decl (metaclass_decl, initlist);
    impent->meta_decl = metaclass_decl;
  
    /* So now build the CLASS structs.  */
--- 3514,3520 ----
  				      build_fold_addr_expr (UOBJC_V2_VTABLE_decl));
    /* The class section attributes are set when they are created.  */
    DECL_USER_ALIGN (metaclass_decl) = 1;
!   finish_meta_decl (metaclass_decl, initlist);
    impent->meta_decl = metaclass_decl;
  
    /* So now build the CLASS structs.  */
*************** generate_v2_class_structs (struct imp_en
*** 3480,3485 ****
--- 3531,3538 ----
  
    if (CLASS_NST_METHODS (impent->imp_context))
      {
+       CLASS_NST_METHODS (impent->imp_context)
+ 	= nreverse (CLASS_NST_METHODS (impent->imp_context));
        snprintf (buf, BUFSIZE, "_OBJC_InstanceMethods_%s",
  		IDENTIFIER_POINTER (CLASS_NAME (impent->imp_context)));
        inst_methods =
*************** generate_v2_class_structs (struct imp_en
*** 3530,3536 ****
  				  : instanceSize;
  
    /* static struct class_ro_t  _OBJC_CLASS_Foo = { ... }; */
!   decl = start_var_decl (objc_v2_class_ro_template,
  			 newabi_append_ro (IDENTIFIER_POINTER
  						(DECL_NAME (class_decl))));
  
--- 3583,3589 ----
  				  : instanceSize;
  
    /* static struct class_ro_t  _OBJC_CLASS_Foo = { ... }; */
!   decl = start_meta_decl (objc_v2_class_ro_template,
  			 newabi_append_ro (IDENTIFIER_POINTER
  						(DECL_NAME (class_decl))));
  
*************** generate_v2_class_structs (struct imp_en
*** 3542,3549 ****
  					 inst_ivars, props);
    /* The ROs sit in the default const section.  */
    OBJCMETA (decl, objc_meta, meta_base);
!   DECL_USER_ALIGN (decl) = 1;
!   finish_var_decl (decl, initlist);
  
    /* static struct class_t _OBJC_CLASS_Foo = { ... }; */
    initlist = build_v2_class_t_initializer (TREE_TYPE (class_decl),
--- 3595,3602 ----
  					 inst_ivars, props);
    /* The ROs sit in the default const section.  */
    OBJCMETA (decl, objc_meta, meta_base);
!   DECL_USER_ALIGN (decl) = true;
!   finish_meta_decl (decl, initlist);
  
    /* static struct class_t _OBJC_CLASS_Foo = { ... }; */
    initlist = build_v2_class_t_initializer (TREE_TYPE (class_decl),
*************** generate_v2_class_structs (struct imp_en
*** 3555,3561 ****
  
    /* The class section attributes are set when they are created.  */
    DECL_USER_ALIGN (class_decl) = 1;
!   finish_var_decl (class_decl, initlist);
    impent->class_decl = class_decl;
  
    objc_v2_add_to_class_list (class_decl);
--- 3608,3614 ----
  
    /* The class section attributes are set when they are created.  */
    DECL_USER_ALIGN (class_decl) = 1;
!   finish_meta_decl (class_decl, initlist);
    impent->class_decl = class_decl;
  
    objc_v2_add_to_class_list (class_decl);
*************** build_v2_ivar_offset_ref_table (void)
*** 3579,3585 ****
      return;
  
    FOR_EACH_VEC_ELT (*ivar_offset_refs, count, ref)
!     finish_var_decl (ref->decl, ref->offset);
  }
  
  static void
--- 3632,3638 ----
      return;
  
    FOR_EACH_VEC_ELT (*ivar_offset_refs, count, ref)
!     finish_meta_decl (ref->decl, ref->offset);
  }
  
  static void
*************** objc_generate_v2_next_metadata (void)
*** 3590,3596 ****
    /* FIXME: Make sure that we generate no metadata if there is nothing
       to put into it.  */
  
!   gcc_assert (!objc_static_instances); /* Not for NeXT */
  
    build_metadata_templates ();
  
--- 3643,3649 ----
    /* FIXME: Make sure that we generate no metadata if there is nothing
       to put into it.  */
  
!   gcc_checking_assert (!objc_static_instances); /* Not for NeXT */
  
    build_metadata_templates ();
  
*************** build_v2_ehtype_template (void)
*** 3681,3689 ****
  static tree
  objc2_build_ehtype_initializer (tree name, tree cls)
  {
-   vec<constructor_elt, va_gc> *initlist = NULL;
-   tree addr, offs;
- 
    /* This is done the same way as c++, missing the two first entries
       in the parent vtable.  NOTE: there is a fix-me in the Apple/NeXT
       runtime source about this so, perhaps, this will change at some
--- 3734,3739 ----
*************** objc2_build_ehtype_initializer (tree nam
*** 3691,3713 ****
    /* _objc_ehtype_vtable + 2*sizeof(void*)  */
    if (!next_v2_ehvtable_decl)
      {
!       next_v2_ehvtable_decl =
! 			start_var_decl (ptr_type_node, TAG_NEXT_EHVTABLE_NAME);
        TREE_STATIC (next_v2_ehvtable_decl) = 0;
        DECL_EXTERNAL (next_v2_ehvtable_decl) = 1;
        TREE_PUBLIC (next_v2_ehvtable_decl) = 1;
      }
!   addr = build_fold_addr_expr_with_type (next_v2_ehvtable_decl, ptr_type_node);
!   offs = size_int (2 * int_cst_value (TYPE_SIZE_UNIT (ptr_type_node)));
    addr = fold_build_pointer_plus (addr, offs);
  
!   CONSTRUCTOR_APPEND_ELT (initlist, NULL_TREE, addr);
  
    /* className */
!   CONSTRUCTOR_APPEND_ELT (initlist, NULL_TREE, name);
  
    /* cls */
!   CONSTRUCTOR_APPEND_ELT (initlist, NULL_TREE, cls);
  
    return objc_build_constructor (objc_v2_ehtype_template, initlist);
  }
--- 3741,3768 ----
    /* _objc_ehtype_vtable + 2*sizeof(void*)  */
    if (!next_v2_ehvtable_decl)
      {
!       next_v2_ehvtable_decl
! 	= start_meta_decl (ptr_type_node, TAG_NEXT_EHVTABLE_NAME);
        TREE_STATIC (next_v2_ehvtable_decl) = 0;
        DECL_EXTERNAL (next_v2_ehvtable_decl) = 1;
        TREE_PUBLIC (next_v2_ehvtable_decl) = 1;
      }
!   tree addr
!     = build_fold_addr_expr_with_type (next_v2_ehvtable_decl, ptr_type_node);
!   tree offs = size_int (2 * int_cst_value (TYPE_SIZE_UNIT (ptr_type_node)));
    addr = fold_build_pointer_plus (addr, offs);
  
!   vec<constructor_elt, va_gc> *initlist = NULL;
!   tree fields = first_type_field (objc_v2_ehtype_template);
!   CONSTRUCTOR_APPEND_ELT (initlist, fields, addr);
  
    /* className */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (initlist, fields, name);
  
    /* cls */
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (initlist, fields, cls);
  
    return objc_build_constructor (objc_v2_ehtype_template, initlist);
  }
*************** build_ehtype (tree name, const char *eh_
*** 3721,3736 ****
    /* Extern ref. for the class. ???  Maybe we can look this up
       somewhere.  */
    class_name_expr =
! 	create_extern_decl (objc_v2_class_template,
  			    objc_build_internal_classname (name, false));
    class_name_expr = build_fold_addr_expr (class_name_expr);
!   ehtype_decl = create_global_decl (objc_v2_ehtype_template, eh_name);
    if (weak)
      DECL_WEAK (ehtype_decl) = 1;
    inits = objc2_build_ehtype_initializer (name_expr, class_name_expr);
    OBJCMETA (ehtype_decl, objc_meta, meta_ehtype);
    DECL_USER_ALIGN (ehtype_decl) = 1;
!   finish_var_decl (ehtype_decl, inits);
    return ehtype_decl;
  }
  
--- 3776,3791 ----
    /* Extern ref. for the class. ???  Maybe we can look this up
       somewhere.  */
    class_name_expr =
! 	create_extern_meta (objc_v2_class_template,
  			    objc_build_internal_classname (name, false));
    class_name_expr = build_fold_addr_expr (class_name_expr);
!   ehtype_decl = create_global_meta (objc_v2_ehtype_template, eh_name);
    if (weak)
      DECL_WEAK (ehtype_decl) = 1;
    inits = objc2_build_ehtype_initializer (name_expr, class_name_expr);
    OBJCMETA (ehtype_decl, objc_meta, meta_ehtype);
    DECL_USER_ALIGN (ehtype_decl) = 1;
!   finish_meta_decl (ehtype_decl, inits);
    return ehtype_decl;
  }
  
*************** static void build_v2_eh_catch_objects (v
*** 3781,3787 ****
        snprintf (buf, BUFSIZE, "OBJC_EHTYPE_$_%s", IDENTIFIER_POINTER (ref->ident));
        if (!impl && excpt)
  	/* The User says this class has a catcher already.  */
! 	ref->data = create_extern_decl (objc_v2_ehtype_template, buf);
        else
  	/* Create a catcher, weak if it wasn't marked.  */
  	ref->data = build_ehtype (ref->ident, buf, !excpt);
--- 3836,3842 ----
        snprintf (buf, BUFSIZE, "OBJC_EHTYPE_$_%s", IDENTIFIER_POINTER (ref->ident));
        if (!impl && excpt)
  	/* The User says this class has a catcher already.  */
! 	ref->data = create_extern_meta (objc_v2_ehtype_template, buf);
        else
  	/* Create a catcher, weak if it wasn't marked.  */
  	ref->data = build_ehtype (ref->ident, buf, !excpt);
*************** next_runtime_02_eh_type (tree type)
*** 3822,3828 ****
  	  /* This is provided by the Apple/NeXT libobjc.dylib so we
  	     need only to reference it.  */
  	  next_v2_EHTYPE_id_decl =
! 		start_var_decl (objc_v2_ehtype_template, "OBJC_EHTYPE_id");
  	  DECL_EXTERNAL (next_v2_EHTYPE_id_decl) = 1;
  	  TREE_PUBLIC (next_v2_EHTYPE_id_decl) = 1;
  	  TREE_STATIC (next_v2_EHTYPE_id_decl) = 0;
--- 3877,3883 ----
  	  /* This is provided by the Apple/NeXT libobjc.dylib so we
  	     need only to reference it.  */
  	  next_v2_EHTYPE_id_decl =
! 		start_meta_decl (objc_v2_ehtype_template, "OBJC_EHTYPE_id");
  	  DECL_EXTERNAL (next_v2_EHTYPE_id_decl) = 1;
  	  TREE_PUBLIC (next_v2_EHTYPE_id_decl) = 1;
  	  TREE_STATIC (next_v2_EHTYPE_id_decl) = 0;
*************** next_runtime_02_eh_type (tree type)
*** 3848,3854 ****
    t = lookup_ehtype_ref (t);
    if (!t)
      goto err_mark_in;
- 
    return build_fold_addr_expr (t);
  
  err_mark_in:
--- 3903,3908 ----
diff -Nrcpad gcc-17-20260628/gcc/objc/objc-runtime-shared-support.cc gcc-17-20260705/gcc/objc/objc-runtime-shared-support.cc
*** gcc-17-20260628/gcc/objc/objc-runtime-shared-support.cc	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/objc/objc-runtime-shared-support.cc	Sun Jul  5 22:32:08 2026
*************** along with GCC; see the file COPYING3.
*** 32,37 ****
--- 32,39 ----
  #endif
  #include "c-family/c-objc.h"
  #include "objc-act.h"
+ #include "cgraph.h"
+ #include "stor-layout.h"
  
  /* When building Objective-C++, we are not linking against the C front-end
     and so need to replicate the C tree-construction functions in some way.  */
*************** objc_finish_struct (tree type, tree fiel
*** 81,87 ****
  tree
  build_sized_array_type (tree base_type, int size)
  {
!   tree index_type = build_index_type (build_int_cst (NULL_TREE, size - 1));
    return build_array_type (base_type, index_type);
  }
  
--- 83,89 ----
  tree
  build_sized_array_type (tree base_type, int size)
  {
!   tree index_type = build_index_type (size_int (size - 1));
    return build_array_type (base_type, index_type);
  }
  
*************** build_sized_array_type (tree base_type,
*** 90,96 ****
  static tree
  create_field_decl (tree type, const char *name)
  {
!   return build_decl (input_location,
  		     FIELD_DECL, get_identifier (name), type);
  }
  
--- 92,98 ----
  static tree
  create_field_decl (tree type, const char *name)
  {
!   return objc_build_decl (input_location,
  		     FIELD_DECL, get_identifier (name), type);
  }
  
*************** add_field_decl (tree type, const char *n
*** 106,139 ****
    return field;
  }
  
! /* Create a global, static declaration for variable NAME of a given TYPE.  The
!    finish_var_decl() routine will need to be called on it afterwards.  */
  
  tree
! start_var_decl (tree type, const char *name)
  {
    tree name_id = get_identifier (name);
!   tree var = build_decl (input_location, VAR_DECL, name_id, type);
!   DECL_INITIAL (var) = error_mark_node;  /* A real initializer is coming... */
!   TREE_STATIC (var) = 1;
!   DECL_IGNORED_P (var) = 1;
!   DECL_ARTIFICIAL (var) = 1;
    DECL_CONTEXT (var) = NULL_TREE;
  #ifdef OBJCPLUS
!   /* Meta-data for the NeXT runtime is expected to be 'extern "C"'.  */
    if (flag_next_runtime)
!     SET_DECL_ASSEMBLER_NAME (var, name_id);
!   DECL_THIS_STATIC (var) = 1; /* squash redeclaration errors */
  #endif
    return var;
  }
  
! /* Finish off the variable declaration created by start_var_decl().  */
  
  void
! finish_var_decl (tree var, tree initializer)
  {
    finish_decl (var, input_location, initializer, NULL_TREE, NULL_TREE);
  }
  
  /* Just a handy wrapper for add_objc_string.  */
--- 108,163 ----
    return field;
  }
  
! /* Objective-C Metadata decls (not-really variables, but we cannot use
!    CONST_DECL yet - as that has limitations with address fields).
!    Create a global, static declaration for variable NAME of a given TYPE.  The
!    finish_meta_decl() routine will need to be called on it afterwards.  */
  
  tree
! start_meta_decl (tree type, const char *name)
  {
+ #ifdef OBJCPLUS
+   if (flag_next_runtime)
+     /* Meta-data for the NeXT runtime is expected to be 'extern "C"'.  */
+     push_lang_context (lang_name_c);
+ #endif
    tree name_id = get_identifier (name);
!   tree var = objc_build_decl (input_location, VAR_DECL, name_id, type);
!   TREE_STATIC (var) = true;
!   DECL_IGNORED_P (var) = true;
!   DECL_ARTIFICIAL (var) = true;
!   DECL_INITIAL (var) = error_mark_node; /* A real initializer is coming... */
    DECL_CONTEXT (var) = NULL_TREE;
  #ifdef OBJCPLUS
!   /* Make sure that we don't stick in a mangled name for NeXT cases.  */
    if (flag_next_runtime)
!     {
!       SET_DECL_ASSEMBLER_NAME (var, DECL_NAME (var));
!       pop_lang_context ();
!     }
  #endif
    return var;
  }
  
! /* Finish off the declaration created by start_meta_decl().  */
  
  void
! finish_meta_decl (tree var, tree initializer)
  {
+   gcc_checking_assert (!initializer || really_constant_p (initializer));
+ #if OBJCPLUS
+   DECL_INITIAL (var) = initializer;
+   if (initializer)
+     {
+       DECL_INITIALIZED_P (var) = true;
+       DECL_NONTRIVIALLY_INITIALIZED_P (var) = true;
+       DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (var) = true;
+     }
+   layout_decl (var, 0);
+   varpool_node::finalize_decl (var);
+ #else
    finish_decl (var, input_location, initializer, NULL_TREE, NULL_TREE);
+ #endif
  }
  
  /* Just a handy wrapper for add_objc_string.  */
*************** build_method_list_template (tree list_ty
*** 233,239 ****
    tree objc_ivar_list_record;
    tree array_type, decls, *chain = NULL;
  
!   objc_ivar_list_record = objc_start_struct (NULL_TREE);
  
    /* struct _objc__method_prototype_list *method_next; */
    decls = add_field_decl (objc_method_proto_list_ptr, "method_next", &chain);
--- 257,263 ----
    tree objc_ivar_list_record;
    tree array_type, decls, *chain = NULL;
  
!   objc_ivar_list_record = objc_start_struct (NULL);
  
    /* struct _objc__method_prototype_list *method_next; */
    decls = add_field_decl (objc_method_proto_list_ptr, "method_next", &chain);
*************** build_descriptor_table_initializer (tree
*** 345,368 ****
  {
    vec<constructor_elt, va_gc> *inits = NULL;
  
    do
      {
        vec<constructor_elt, va_gc> *elts = NULL;
  
!       CONSTRUCTOR_APPEND_ELT (elts, NULL_TREE,
  			      build_selector (METHOD_SEL_NAME (entries)));
!       CONSTRUCTOR_APPEND_ELT (elts, NULL_TREE,
  			      add_objc_string (METHOD_ENCODING (entries),
  					       meth_var_types));
  
!       CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE,
  			      objc_build_constructor (type, elts));
  
        entries = DECL_CHAIN (entries);
      }
    while (entries);
  
!   return objc_build_constructor (build_array_type (type, 0), inits);
  }
  
  tree
--- 369,397 ----
  {
    vec<constructor_elt, va_gc> *inits = NULL;
  
+   unsigned n = 0;
    do
      {
        vec<constructor_elt, va_gc> *elts = NULL;
  
!       tree fields = first_type_field (type);
!       CONSTRUCTOR_APPEND_ELT (elts, fields,
  			      build_selector (METHOD_SEL_NAME (entries)));
!       fields = next_type_field (fields);
!       CONSTRUCTOR_APPEND_ELT (elts, fields,
  			      add_objc_string (METHOD_ENCODING (entries),
  					       meth_var_types));
  
!       tree idx = size_int (n++);
!       CONSTRUCTOR_APPEND_ELT (inits, idx,
  			      objc_build_constructor (type, elts));
  
        entries = DECL_CHAIN (entries);
      }
    while (entries);
  
!   tree idx_type = build_index_type (size_int (n));
!   return objc_build_constructor (build_array_type (type, idx_type), inits);
  }
  
  tree
*************** build_dispatch_table_initializer (tree t
*** 370,405 ****
  {
    vec<constructor_elt, va_gc> *inits = NULL;
  
    do
      {
        vec<constructor_elt, va_gc> *elems = NULL;
-       tree expr;
  
!       CONSTRUCTOR_APPEND_ELT (elems, NULL_TREE,
  			      build_selector (METHOD_SEL_NAME (entries)));
  
        /* Generate the method encoding if we don't have one already.  */
        if (! METHOD_ENCODING (entries))
! 	METHOD_ENCODING (entries) =
! 	  encode_method_prototype (entries);
  
!       CONSTRUCTOR_APPEND_ELT (elems, NULL_TREE,
  			      add_objc_string (METHOD_ENCODING (entries),
  					       meth_var_types));
  
!       expr = convert (ptr_type_node,
! 		      build_unary_op (input_location, ADDR_EXPR,
! 				      METHOD_DEFINITION (entries), 1));
!       CONSTRUCTOR_APPEND_ELT (elems, NULL_TREE, expr);
  
!       CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE,
  			      objc_build_constructor (type, elems));
  
        entries = DECL_CHAIN (entries);
      }
    while (entries);
  
!   return objc_build_constructor (build_array_type (type, 0), inits);
  }
  
  /* Used only by build_*_selector_translation_table (). */
--- 399,438 ----
  {
    vec<constructor_elt, va_gc> *inits = NULL;
  
+   unsigned n = 0;
    do
      {
        vec<constructor_elt, va_gc> *elems = NULL;
  
!       tree fields = TYPE_FIELDS (type);
!       CONSTRUCTOR_APPEND_ELT (elems, fields,
  			      build_selector (METHOD_SEL_NAME (entries)));
  
        /* Generate the method encoding if we don't have one already.  */
        if (! METHOD_ENCODING (entries))
! 	METHOD_ENCODING (entries) = encode_method_prototype (entries);
  
!       fields = next_type_field (fields);
!       CONSTRUCTOR_APPEND_ELT (elems, fields,
  			      add_objc_string (METHOD_ENCODING (entries),
  					       meth_var_types));
  
!       tree expr = convert (ptr_type_node,
! 			   build_unary_op (input_location, ADDR_EXPR,
! 					   METHOD_DEFINITION (entries), 1));
!       fields = next_type_field (fields);
!       CONSTRUCTOR_APPEND_ELT (elems, fields, expr);
  
!       tree idx = size_int (n++);
!       CONSTRUCTOR_APPEND_ELT (inits, idx,
  			      objc_build_constructor (type, elems));
  
        entries = DECL_CHAIN (entries);
      }
    while (entries);
  
!   tree idx_type = build_index_type (size_int (n));
!   return objc_build_constructor (build_array_type (type, idx_type), inits);
  }
  
  /* Used only by build_*_selector_translation_table (). */
*************** diagnose_missing_method (tree meth, loca
*** 428,467 ****
  static tree
  init_module_descriptor (tree type, long vers)
  {
-   tree expr, ltyp;
-   location_t loc;
    vec<constructor_elt, va_gc> *v = NULL;
  
-   /* No really useful place to point to.  */
-   loc = UNKNOWN_LOCATION;
- 
    /* version = { 1, ... } */
  
!   expr = build_int_cst (long_integer_type_node, vers);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
  
    /* size = { ..., sizeof (struct _objc_module), ... } */
  
    expr = convert (long_integer_type_node,
  		  size_in_bytes (objc_module_template));
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
  
    /* Don't provide any file name for security reasons. */
    /* name = { ..., "", ... } */
  
    expr = add_objc_string (get_identifier (""), class_names);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
  
    /* symtab = { ..., _OBJC_SYMBOLS, ... } */
  
!   ltyp = build_pointer_type (xref_tag (RECORD_TYPE,
! 				       get_identifier (UTAG_SYMTAB)));
    if (UOBJC_SYMBOLS_decl)
      expr = convert (ltyp, build_unary_op (loc,
  			   ADDR_EXPR, UOBJC_SYMBOLS_decl, 0));
    else
!     expr = convert (ltyp, null_pointer_node);
!   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr);
  
    return objc_build_constructor (type, v);
  }
--- 461,502 ----
  static tree
  init_module_descriptor (tree type, long vers)
  {
    vec<constructor_elt, va_gc> *v = NULL;
  
    /* version = { 1, ... } */
  
!   tree expr = build_int_cst (long_integer_type_node, vers);
!   tree fields = TYPE_FIELDS (type);
!   CONSTRUCTOR_APPEND_ELT (v, fields, expr);
  
    /* size = { ..., sizeof (struct _objc_module), ... } */
  
    expr = convert (long_integer_type_node,
  		  size_in_bytes (objc_module_template));
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, expr);
  
    /* Don't provide any file name for security reasons. */
    /* name = { ..., "", ... } */
  
    expr = add_objc_string (get_identifier (""), class_names);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, expr);
  
    /* symtab = { ..., _OBJC_SYMBOLS, ... } */
  
!   tree ltyp = build_pointer_type (xref_tag (RECORD_TYPE,
! 					    get_identifier (UTAG_SYMTAB)));
! 
!   /* No really useful place to point to.  */
!   location_t loc = UNKNOWN_LOCATION;
    if (UOBJC_SYMBOLS_decl)
      expr = convert (ltyp, build_unary_op (loc,
  			   ADDR_EXPR, UOBJC_SYMBOLS_decl, 0));
    else
!     expr = build_zero_cst (ltyp);
!   fields = next_type_field (fields);
!   CONSTRUCTOR_APPEND_ELT (v, fields, expr);
  
    return objc_build_constructor (type, v);
  }
*************** build_module_descriptor (long vers, tree
*** 498,504 ****
    objc_finish_struct (objc_module_template, decls);
  
    /* Create an instance of "_objc_module".  */
!   UOBJC_MODULES_decl = start_var_decl (objc_module_template, "_OBJC_Module");
  
    /* This is the root of the metadata for defined classes and categories, it
       is referenced by the runtime and, therefore, needed.  */
--- 533,543 ----
    objc_finish_struct (objc_module_template, decls);
  
    /* Create an instance of "_objc_module".  */
!   UOBJC_MODULES_decl = start_meta_decl (objc_module_template, "_OBJC_Module");
! 
! #ifdef OBJCPLUS
!   pop_lang_context ();
! #endif
  
    /* This is the root of the metadata for defined classes and categories, it
       is referenced by the runtime and, therefore, needed.  */
*************** build_module_descriptor (long vers, tree
*** 512,524 ****
    if (attr)
      DECL_ATTRIBUTES (UOBJC_MODULES_decl) = attr;
  
!   finish_var_decl (UOBJC_MODULES_decl,
  		   init_module_descriptor (TREE_TYPE (UOBJC_MODULES_decl),
  					   vers));
- 
- #ifdef OBJCPLUS
-   pop_lang_context ();
- #endif
  }
  
  tree
--- 551,560 ----
    if (attr)
      DECL_ATTRIBUTES (UOBJC_MODULES_decl) = attr;
  
!   TREE_ADDRESSABLE (UOBJC_MODULES_decl) = true;
!   finish_meta_decl (UOBJC_MODULES_decl,
  		   init_module_descriptor (TREE_TYPE (UOBJC_MODULES_decl),
  					   vers));
  }
  
  tree
*************** build_ivar_list_initializer (tree type,
*** 526,559 ****
  {
    vec<constructor_elt, va_gc> *inits = NULL;
  
    for (; field_decl; field_decl = DECL_CHAIN (field_decl))
      if (TREE_CODE (field_decl) == FIELD_DECL)
        {
  	vec<constructor_elt, va_gc> *ivar = NULL;
- 	tree id;
  
  	/* Set name.  */
  	if (DECL_NAME (field_decl))
! 	  CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE,
  				  add_objc_string (DECL_NAME (field_decl),
  						   meth_var_names));
  	else
  	  /* Unnamed bit-field ivar (yuck).  */
! 	  CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE,
  				  build_int_cst (NULL_TREE, 0));
  
  	/* Set type.  */
! 	id = add_objc_string (encode_field_decl (field_decl),
  			      meth_var_types);
! 	CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE, id);
  
  	/* Set offset.  */
! 	CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE, byte_position (field_decl));
! 	CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE,
  				objc_build_constructor (type, ivar));
      }
  
!   return objc_build_constructor (build_array_type (type, 0), inits);
  }
  
  /* struct {
--- 562,601 ----
  {
    vec<constructor_elt, va_gc> *inits = NULL;
  
+   unsigned n = 0;
    for (; field_decl; field_decl = DECL_CHAIN (field_decl))
      if (TREE_CODE (field_decl) == FIELD_DECL)
        {
  	vec<constructor_elt, va_gc> *ivar = NULL;
  
  	/* Set name.  */
+ 	tree fields = TYPE_FIELDS (type);
  	if (DECL_NAME (field_decl))
! 	  CONSTRUCTOR_APPEND_ELT (ivar, fields,
  				  add_objc_string (DECL_NAME (field_decl),
  						   meth_var_names));
  	else
  	  /* Unnamed bit-field ivar (yuck).  */
! 	  CONSTRUCTOR_APPEND_ELT (ivar, fields,
  				  build_int_cst (NULL_TREE, 0));
  
  	/* Set type.  */
! 	fields = next_type_field (fields);
! 	tree id = add_objc_string (encode_field_decl (field_decl),
  			      meth_var_types);
! 	CONSTRUCTOR_APPEND_ELT (ivar, fields, id);
  
  	/* Set offset.  */
! 	fields = next_type_field (fields);
! 	CONSTRUCTOR_APPEND_ELT (ivar, fields, byte_position (field_decl));
! 
! 	tree idx = size_int (n++);
! 	CONSTRUCTOR_APPEND_ELT (inits, idx,
  				objc_build_constructor (type, ivar));
      }
  
!   tree idx_type = build_index_type (size_int (n));
!   return objc_build_constructor (build_array_type (type, idx_type), inits);
  }
  
  /* struct {
*************** build_next_selector_translation_table (v
*** 637,643 ****
  	  The runtime re-writes these on start-up, but the compiler can't see
  	  that and optimizes it away unless we force it.  */
  	  DECL_PRESERVE_P (decl) = 1;
! 	  finish_var_decl (decl, expr);
  	}
      }
  }
--- 679,685 ----
  	  The runtime re-writes these on start-up, but the compiler can't see
  	  that and optimizes it away unless we force it.  */
  	  DECL_PRESERVE_P (decl) = 1;
! 	  finish_meta_decl (decl, expr);
  	}
      }
  }
*************** generate_strings (void)
*** 685,691 ****
        string_expr = my_build_string (IDENTIFIER_LENGTH (string) + 1,
  				     IDENTIFIER_POINTER (string));
        DECL_USER_ALIGN (decl) = 1;
!       finish_var_decl (decl, string_expr);
      }
  
    for (chain = meth_var_names_chain; chain; chain = TREE_CHAIN (chain))
--- 727,733 ----
        string_expr = my_build_string (IDENTIFIER_LENGTH (string) + 1,
  				     IDENTIFIER_POINTER (string));
        DECL_USER_ALIGN (decl) = 1;
!       finish_meta_decl (decl, string_expr);
      }
  
    for (chain = meth_var_names_chain; chain; chain = TREE_CHAIN (chain))
*************** generate_strings (void)
*** 695,701 ****
        string_expr = my_build_string (IDENTIFIER_LENGTH (string) + 1,
  				     IDENTIFIER_POINTER (string));
        DECL_USER_ALIGN (decl) = 1;
!       finish_var_decl (decl, string_expr);
      }
  
    for (chain = meth_var_types_chain; chain; chain = TREE_CHAIN (chain))
--- 737,743 ----
        string_expr = my_build_string (IDENTIFIER_LENGTH (string) + 1,
  				     IDENTIFIER_POINTER (string));
        DECL_USER_ALIGN (decl) = 1;
!       finish_meta_decl (decl, string_expr);
      }
  
    for (chain = meth_var_types_chain; chain; chain = TREE_CHAIN (chain))
*************** generate_strings (void)
*** 705,711 ****
        string_expr = my_build_string (IDENTIFIER_LENGTH (string) + 1,
  				     IDENTIFIER_POINTER (string));
        DECL_USER_ALIGN (decl) = 1;
!       finish_var_decl (decl, string_expr);
      }
  
    for (chain = prop_names_attr_chain; chain; chain = TREE_CHAIN (chain))
--- 747,753 ----
        string_expr = my_build_string (IDENTIFIER_LENGTH (string) + 1,
  				     IDENTIFIER_POINTER (string));
        DECL_USER_ALIGN (decl) = 1;
!       finish_meta_decl (decl, string_expr);
      }
  
    for (chain = prop_names_attr_chain; chain; chain = TREE_CHAIN (chain))
*************** generate_strings (void)
*** 715,721 ****
        string_expr = my_build_string (IDENTIFIER_LENGTH (string) + 1,
  				     IDENTIFIER_POINTER (string));
        DECL_USER_ALIGN (decl) = 1;
!       finish_var_decl (decl, string_expr);
      }
  }
  
--- 757,763 ----
        string_expr = my_build_string (IDENTIFIER_LENGTH (string) + 1,
  				     IDENTIFIER_POINTER (string));
        DECL_USER_ALIGN (decl) = 1;
!       finish_meta_decl (decl, string_expr);
      }
  }
  
diff -Nrcpad gcc-17-20260628/gcc/objc/objc-runtime-shared-support.h gcc-17-20260705/gcc/objc/objc-runtime-shared-support.h
*** gcc-17-20260628/gcc/objc/objc-runtime-shared-support.h	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/objc/objc-runtime-shared-support.h	Sun Jul  5 22:32:08 2026
*************** extern tree build_sized_array_type (tree
*** 31,38 ****
  extern tree lookup_interface (tree);
  extern tree objc_build_constructor (tree, vec<constructor_elt, va_gc> *);
  
! extern tree start_var_decl (tree, const char *);
! extern void finish_var_decl (tree, tree);
  
  extern tree my_build_string (int, const char *);
  extern tree my_build_string_pointer (int, const char *);
--- 31,38 ----
  extern tree lookup_interface (tree);
  extern tree objc_build_constructor (tree, vec<constructor_elt, va_gc> *);
  
! extern tree start_meta_decl (tree, const char *);
! extern void finish_meta_decl (tree, tree);
  
  extern tree my_build_string (int, const char *);
  extern tree my_build_string_pointer (int, const char *);
*************** extern void generate_strings (void);
*** 84,87 ****
--- 84,110 ----
  extern void dump_interface (FILE *, tree);
  extern FILE *gen_declaration_file;
  
+ /* For Objective-C/C++ metadata that can be initialized like an aggregate.  */
+ 
+ inline tree
+ first_type_field (const tree type)
+ {
+ #ifdef OBJCPLUS
+   return next_aggregate_field (TYPE_FIELDS (type));
+ #else
+   return TYPE_FIELDS (type);
+ #endif
+ }
+ 
+ inline tree
+ next_type_field (const tree last)
+ {
+ #ifdef OBJCPLUS
+   return next_aggregate_field (DECL_CHAIN (last));
+ #else
+   return DECL_CHAIN (last);
+ #endif
+ }
+ 
+ 
  #endif /* _OBJC_RUNTIME_SHARED_SUPPORT_H_ */
diff -Nrcpad gcc-17-20260628/gcc/objcp/objcp-decl.h gcc-17-20260705/gcc/objcp/objcp-decl.h
*** gcc-17-20260628/gcc/objcp/objcp-decl.h	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/objcp/objcp-decl.h	Sun Jul  5 22:32:08 2026
*************** extern tree objcp_end_compound_stmt (tre
*** 44,50 ****
  #define finish_function() \
  	objcp_finish_function ()
  #define finish_decl(decl, loc, init, origtype, asmspec) \
! 	cp_finish_decl (decl, init, false, asmspec, 0)
  #define xref_tag(code, name) \
  	objcp_xref_tag (code, name)
  #define comptypes(type1, type2) \
--- 44,50 ----
  #define finish_function() \
  	objcp_finish_function ()
  #define finish_decl(decl, loc, init, origtype, asmspec) \
!  cp_finish_decl (decl, init, (init && really_constant_p (init)), asmspec, 0)
  #define xref_tag(code, name) \
  	objcp_xref_tag (code, name)
  #define comptypes(type1, type2) \
diff -Nrcpad gcc-17-20260628/gcc/omp-low.cc gcc-17-20260705/gcc/omp-low.cc
*** gcc-17-20260628/gcc/omp-low.cc	Sun Jun 28 22:32:08 2026
--- gcc-17-20260705/gcc/omp-low.cc	Sun Jul  5 22:32:08 2026
*************** scan_sharing_clauses (tree clauses, omp_
*** 1193,1198 ****
--- 1193,1228 ----
  	    && omp_maybe_offloaded_ctx (ctx))
  	  error_at (OMP_CLAUSE_LOCATION (c), "%<allocate%> clause must"
  		    " specify an allocator here");
+ 	if ((omp_requires_mask & OMP_REQUIRES_DYNAMIC_ALLOCATORS) == 0
+ 	    && OMP_CLAUSE_ALLOCATE_ALLOCATOR (c) != NULL_TREE
+ 	    && DECL_P (OMP_CLAUSE_ALLOCATE_ALLOCATOR (c))
+ 	    && !DECL_ARTIFICIAL (OMP_CLAUSE_ALLOCATE_ALLOCATOR (c)))
+ 	  {
+ 	    tree alloc2 = OMP_CLAUSE_ALLOCATE_ALLOCATOR (c);
+ 	    if (TREE_CODE (alloc2) == MEM_REF
+ 		|| TREE_CODE (alloc2) == INDIRECT_REF)
+ 	      alloc2 = TREE_OPERAND (alloc2, 0);
+ 	    omp_context *ctx2 = ctx;
+ 	    for (; ctx2; ctx2 = ctx2->outer)
+ 	      if (is_gimple_omp_offloaded (ctx2->stmt))
+ 		break;
+ 	    if (ctx2 != NULL)
+ 	      {
+ 		tree c2 = gimple_omp_target_clauses (ctx2->stmt);
+ 		for (; c2; c2 = OMP_CLAUSE_CHAIN (c2))
+ 		  if (OMP_CLAUSE_CODE (c2) == OMP_CLAUSE_USES_ALLOCATORS
+ 		      && operand_equal_p (
+ 			   alloc2, OMP_CLAUSE_USES_ALLOCATORS_ALLOCATOR (c2)))
+ 		    break;
+ 		if (c2 == NULL_TREE)
+ 		  error_at (EXPR_LOC_OR_LOC (OMP_CLAUSE_ALLOCATE_ALLOCATOR (c),
+ 					     OMP_CLAUSE_LOCATION (c)),
+ 			    "allocator %qE in %<allocate%> clause inside a "
+ 			    "target region must be specified in an "
+ 			    "%<uses_allocators%> clause on the %<target%> "
+ 			    "directive", alloc2);
+ 	      }
+ 	  }
  	if (ctx->allocate_map == NULL)
  	  ctx->allocate_map = new hash_map<tree, tree>;
  	tree val = integer_zero_node;
*************** scan_sharing_clauses (tree clauses, omp_
*** 1797,1802 ****
--- 1827,1840 ----
  	case OMP_CLAUSE_DEVICE_TYPE:
  	  break;
  
+ 	case OMP_CLAUSE_USES_ALLOCATORS:
+ 	  decl = OMP_CLAUSE_USES_ALLOCATORS_ALLOCATOR (c);
+ 	  gcc_assert (DECL_P (decl));
+ 	  gcc_assert (is_gimple_omp_offloaded (ctx->stmt));
+ 	  install_var_field (decl, false, 3, ctx);
+ 	  install_var_local (decl, ctx);
+ 	  break;
+ 
  	case OMP_CLAUSE_ALIGNED:
  	  decl = OMP_CLAUSE_DECL (c);
  	  if (is_global_var (decl)
*************** scan_sharing_clauses (tree clauses, omp_
*** 2022,2027 ****
--- 2060,2066 ----
  	case OMP_CLAUSE_USE:
  	case OMP_CLAUSE_DESTROY:
  	case OMP_CLAUSE_DEVICE_TYPE:
+ 	case OMP_CLAUSE_USES_ALLOCATORS:
  	  break;
  
  	case OMP_CLAUSE__CACHE_:
*************** lower_omp_target (gimple_stmt_iterator *
*** 13233,13238 ****
--- 13272,13285 ----
  	    sorry_at (OMP_CLAUSE_LOCATION (c),
  		      "only the %<device_type(any)%> is supported");
  	  break;
+       case OMP_CLAUSE_USES_ALLOCATORS:
+ 	allocator = OMP_CLAUSE_USES_ALLOCATORS_ALLOCATOR (c);
+ 	tree new_allocator = lookup_decl (allocator, ctx);
+ 	x = build_receiver_ref (allocator, false, ctx);
+ 	SET_DECL_VALUE_EXPR (new_allocator, x);
+ 	DECL_HAS_VALUE_EXPR_P (new_allocator) = 1;
+ 	map_cnt++;
+ 	break;
        }
  
    if (offloaded)
*************** lower_omp_target (gimple_stmt_iterator *
*** 13964,13969 ****
--- 14011,14090 ----
  	    gcc_checking_assert (tkind
  				 <= tree_to_uhwi (TYPE_MAX_VALUE (tkind_type)));
  	    CONSTRUCTOR_APPEND_ELT (vkind, purpose,
+ 				    build_int_cstu (tkind_type, tkind));
+ 	    break;
+ 
+ 	  case OMP_CLAUSE_USES_ALLOCATORS:
+ 	    tree allocator = OMP_CLAUSE_USES_ALLOCATORS_ALLOCATOR (c);
+ 	    tree memspace = OMP_CLAUSE_USES_ALLOCATORS_MEMSPACE (c);
+ 	    tree traits = OMP_CLAUSE_USES_ALLOCATORS_TRAITS (c);
+ 
+ 	    tree ntraits, traits_var;
+ 	    if (traits == NULL_TREE)
+ 	      {
+ 		ntraits = integer_zero_node;
+ 		traits_var = null_pointer_node;
+ 	      }
+ 	    else if (DECL_INITIAL (traits))
+ 	      {
+ 		location_t loc = OMP_CLAUSE_LOCATION (c);
+ 		ntraits = array_type_nelts_top (TREE_TYPE (traits));
+ 		tree t = DECL_INITIAL (traits);
+ 		t = get_initialized_tmp_var (t, &ilist, NULL);
+ 		traits_var = build_fold_addr_expr_loc (loc, t);
+ 	      }
+ 	    else
+ 	      {
+ 		/* This happens for VLAs, which probably aren't useful
+ 		   because they can't be const initialized in the same
+ 		   scope....  is there something else?  */
+ 		location_t loc = OMP_CLAUSE_LOCATION (c);
+ 		gcc_assert (TREE_CODE (TREE_TYPE (traits)) == ARRAY_TYPE);
+ 		ntraits = array_type_nelts_top (TREE_TYPE (traits));
+ 		traits_var = build_fold_addr_expr_loc (loc, traits);
+ 	      }
+ 
+ 	    if (memspace == NULL_TREE)
+ 	      memspace = build_int_cst (pointer_sized_int_node, 0);
+ 	    else
+ 	      memspace = fold_convert (pointer_sized_int_node, memspace);
+ 
+ 	    tree arr_type
+ 	      = build_array_type_nelts (pointer_sized_int_node, 3);
+ 	    tree uses_allocators_descr
+ 	      = create_tmp_var (arr_type, "uses_allocator_descr");
+ 	    tree ua_descr[3];
+ 	    for (int i = 0; i < 3; i++)
+ 	      ua_descr[i] = build4 (ARRAY_REF, pointer_sized_int_node,
+ 				    uses_allocators_descr,
+ 				    build_int_cst (size_type_node, i),
+ 				    NULL_TREE, NULL_TREE);
+ 	    gimplify_assign (ua_descr[0],
+ 			     fold_convert (pointer_sized_int_node, memspace),
+ 			     &ilist);
+ 	    gimplify_assign (ua_descr[1],
+ 			     fold_convert (pointer_sized_int_node, ntraits),
+ 			     &ilist);
+ 	    gimplify_assign (ua_descr[2],
+ 			     fold_convert (pointer_sized_int_node, traits_var),
+ 			     &ilist);
+ 
+ 	    x = build_sender_ref (allocator, ctx);
+ 	    tree ptr = build_fold_addr_expr (uses_allocators_descr);
+ 	    gimplify_assign (x, fold_convert (TREE_TYPE (x), ptr), &ilist);
+ 
+ 	    s = size_int (0);
+ 	    purpose = size_int (map_idx++);
+ 	    CONSTRUCTOR_APPEND_ELT (vsize, purpose, s);
+ 	    tkind = GOMP_MAP_USES_ALLOCATORS;
+ 	    gcc_checking_assert (tkind
+ 				 < (HOST_WIDE_INT_C (1U) << talign_shift));
+ 	    talign = TYPE_ALIGN_UNIT (pointer_sized_int_node);
+ 	    talign = ceil_log2 (talign);
+ 	    tkind |= talign << talign_shift;
+ 	    gcc_checking_assert (tkind
+ 				 <= tree_to_uhwi (TYPE_MAX_VALUE (tkind_type)));
+ 	    CONSTRUCTOR_APPEND_ELT (vkind, purpose,
  				    build_int_cstu (tkind_type, tkind));
  	    break;
  	  }
diff -Nrcpad gcc-17-20260628/gcc/poly-int.h gcc-17-20260705/gcc/poly-int.h
*** gcc-17-20260628/gcc/poly-int.h	Sun Jun 28 22:32:10 2026
--- gcc-17-20260705/gcc/poly-int.h	Sun Jul  5 22:32:10 2026
*************** inline typename if_nonpoly<Cq, bool>::ty
*** 2420,2425 ****
--- 2420,2465 ----
  can_div_away_from_zero_p (const poly_int<N, Ca> &a, const poly_int<N, Cb> &b,
  			  Cq *quotient)
  {
+   /* If both a and b have fixed signs, test 0 < |a| <= |b|.  (2) is then
+      satisfied with |Q| == 1.  Choose Q as 1 or -1 such that a and b * Q
+      have the same sign.  Together, these two conditions guarantee that
+      |b * Q - a| = |b * Q| - |a|.  Then:
+ 
+ 	|r| = |a - b * Q|
+ 	    = |b * Q - a|
+ 	    = |b * Q| - |a|
+ 	    = |b| - |a|
+ 	    < |b| using 0 < |a| above
+ 
+      Only negate values that are known to be positive, to avoid signed
+      overflow.  */
+   if (known_lt (a, POLY_INT_TYPE (Ca) (0)))
+     {
+       if (known_le (b, a))
+ 	{
+ 	  *quotient = 1;
+ 	  return true;
+ 	}
+       if (known_gt (b, POLY_INT_TYPE (Cb) (0)) && known_le (-b, a))
+ 	{
+ 	  *quotient = -1;
+ 	  return true;
+ 	}
+     }
+   else if (known_gt (a, POLY_INT_TYPE (Ca) (0)))
+     {
+       if (known_ge (b, a))
+ 	{
+ 	  *quotient = 1;
+ 	  return true;
+ 	}
+       if (known_lt (b, POLY_INT_TYPE (Cb) (0)) && known_le (b, -a))
+ 	{
+ 	  *quotient = -1;
+ 	  return true;
+ 	}
+     }
+ 
    if (!can_div_trunc_p (a, b, quotient))
      return false;
    if (maybe_ne (*quotient * b, a))
diff -Nrcpad gcc-17-20260628/gcc/rust/ChangeLog gcc-17-20260705/gcc/rust/ChangeLog
*** gcc-17-20260628/gcc/rust/ChangeLog	Sun Jun 28 22:32:10 2026
--- gcc-17-20260705/gcc/rust/ChangeLog	Sun Jul  5 22:32:10 2026
***************
*** 1,3 ****
--- 1,10 ----
+ 2026-06-28  Kevin Stefanov  <kevinstefanov15@gmail.com>
+ 
+ 	PR middle-end/125274
+ 	* backend/rust-tree.h (saved_scope): Likewise.
+ 	(rust_cp_binding_level): Likewise.
+ 	(language_function): Likewise.
+ 
  2026-06-25  Enes Cevik  <enes@nsvke.com>
  
  	* Make-lang.in: Add rust-hir-type-check-intrinsic.o.
diff -Nrcpad gcc-17-20260628/gcc/simplify-rtx.cc gcc-17-20260705/gcc/simplify-rtx.cc
*** gcc-17-20260628/gcc/simplify-rtx.cc	Sun Jun 28 22:32:10 2026
--- gcc-17-20260705/gcc/simplify-rtx.cc	Sun Jul  5 22:32:10 2026
*************** simplify_context::simplify_unary_operati
*** 941,951 ****
        /* (not (eq X Y)) == (ne X Y), etc. if BImode or the result of the
  	 comparison is all ones.   */
        if (COMPARISON_P (op)
! 	  && (mode == BImode || STORE_FLAG_VALUE == -1)
  	  && ((reversed = reversed_comparison_code (op, NULL)) != UNKNOWN))
  	return simplify_gen_relational (reversed, mode, VOIDmode,
  					XEXP (op, 0), XEXP (op, 1));
  
        /* (not (plus X -1)) can become (neg X).  */
        if (GET_CODE (op) == PLUS
  	  && XEXP (op, 1) == constm1_rtx)
--- 941,975 ----
        /* (not (eq X Y)) == (ne X Y), etc. if BImode or the result of the
  	 comparison is all ones.   */
        if (COMPARISON_P (op)
! 	  && ((SCALAR_INT_MODE_P (mode) && STORE_FLAG_VALUE == -1)
! #ifdef VECTOR_STORE_FLAG_VALUE
! 	      || (GET_MODE_CLASS (mode) == MODE_VECTOR_INT
! 		  && VECTOR_STORE_FLAG_VALUE (mode) == constm1_rtx)
! #endif
! 	      || mode == BImode)
  	  && ((reversed = reversed_comparison_code (op, NULL)) != UNKNOWN))
  	return simplify_gen_relational (reversed, mode, VOIDmode,
  					XEXP (op, 0), XEXP (op, 1));
  
+       /* (not (neg (eq X Y))) is (neg (ne X Y)), etc. if the result of
+ 	 the comparison is one.  */
+       if (GET_CODE (op) == NEG
+ 	  && COMPARISON_P (XEXP (op, 0))
+ 	  && ((SCALAR_INT_MODE_P (mode) && STORE_FLAG_VALUE == 1)
+ #ifdef VECTOR_STORE_FLAG_VALUE
+ 	      || (GET_MODE_CLASS (mode) == MODE_VECTOR_INT
+ 		  && VECTOR_STORE_FLAG_VALUE (mode) == const1_rtx)
+ #endif
+ 	     )
+ 	  && ((reversed = reversed_comparison_code (XEXP (op, 0), NULL))
+ 	      != UNKNOWN))
+ 	{
+ 	  temp = simplify_gen_relational (reversed, mode, VOIDmode,
+ 					  XEXP (XEXP (op, 0), 0),
+ 					  XEXP (XEXP (op, 0), 1));
+ 	  return simplify_gen_unary (NEG, mode, temp, mode);
+ 	}
+ 
        /* (not (plus X -1)) can become (neg X).  */
        if (GET_CODE (op) == PLUS
  	  && XEXP (op, 1) == constm1_rtx)
*************** simplify_context::simplify_ternary_opera
*** 7802,7807 ****
--- 7826,7846 ----
  		  if (!(sel & ~sel0 & mask) && !side_effects_p (XEXP (op0, 1)))
  		    return simplify_gen_ternary (code, mode, mode,
  						 XEXP (op0, 0), op1, op2);
+ 
+ 		  /* Replace (vec_merge (vec_merge a b m) a n) with
+ 		     (vec_merge a b (m|~n)).  */
+ 		  if (rtx_equal_p (XEXP (op0, 0), op1)
+ 		      && ! side_effects_p (op1))
+ 		    return simplify_gen_ternary (code, mode, mode,
+ 						 op1, XEXP (op0, 1),
+ 						 GEN_INT ((sel0 | ~sel) & mask));
+ 		  /* Replace (vec_merge (vec_merge b a m) a n) with
+ 		     (vec_merge b a (m&n)).  */
+ 		  if (rtx_equal_p (XEXP (op0, 1), op1)
+ 		      && ! side_effects_p (op1))
+ 		    return simplify_gen_ternary (code, mode, mode,
+ 						 XEXP (op0, 0), op1,
+ 						 GEN_INT (sel & sel0 & mask));
  		}
  	    }
  	  if (GET_CODE (op1) == VEC_MERGE)
*************** simplify_context::simplify_ternary_opera
*** 7816,7821 ****
--- 7855,7876 ----
  		  if (!(~sel & ~sel1 & mask) && !side_effects_p (XEXP (op1, 1)))
  		    return simplify_gen_ternary (code, mode, mode,
  						 op0, XEXP (op1, 0), op2);
+ 
+ 		  /* Replace (vec_merge a (vec_merge a b m) n) with
+ 		     (vec_merge a b (m|n)).  */
+ 		  if (rtx_equal_p (XEXP (op1, 0), op0)
+ 		      && ! side_effects_p (op0))
+ 		    return simplify_gen_ternary (code, mode, mode,
+ 						 op0, XEXP (op1, 1),
+ 						 GEN_INT ((sel | sel1) & mask));
+ 
+ 		  /* Replace (vec_merge a (vec_merge b a m) n) with
+ 		     (vec_merge a b (~m|n)).  */
+ 		  if (rtx_equal_p (XEXP (op1, 1), op0)
+ 		      && ! side_effects_p (op0))
+ 		    return simplify_gen_ternary (code, mode, mode,
+ 						 op0, XEXP (op1, 0),
+ 						 GEN_INT ((sel | ~sel1) & mask));
  		}
  	    }
  
diff -Nrcpad gcc-17-20260628/gcc/target.def gcc-17-20260705/gcc/target.def
*** gcc-17-20260628/gcc/target.def	Sun Jun 28 22:32:10 2026
--- gcc-17-20260705/gcc/target.def	Sun Jul  5 22:32:10 2026
*************** DEFHOOK
*** 6239,6247 ****
  substitute safely pseudos with equivalent memory values during\n\
  register allocation.\n\
  The default version of this target hook returns @code{false}.\n\
! On most machines, this default should be used.  For generally\n\
! machines with non orthogonal register usage for addressing, such\n\
! as SH, this hook can be used to avoid excessive spilling.",
   bool, (rtx subst),
   hook_bool_rtx_false)
  
--- 6239,6262 ----
  substitute safely pseudos with equivalent memory values during\n\
  register allocation.\n\
  The default version of this target hook returns @code{false}.\n\
! On most machines, this default should be used.  For machines with\n\
! non-orthogonal register usage for addressing, such as SH,\n\
! this hook can be used to avoid excessive spilling.",
!  bool, (rtx subst),
!  hook_bool_rtx_false)
! 
! /* This target hook allows the backend to avoid unsafe substitution
!    during register allocation.  */
! DEFHOOK
! (cannot_substitute_const_equiv_p,
!  "A target hook which returns @code{true} if @var{subst} can't\n\
! substitute safely pseudos with equivalent constant values during\n\
! register allocation.\n\
! The default version of this target hook returns @code{false}.\n\
! On most machines, this default should be used.  For machines with\n\
! special constant load instructions that have additional constraints\n\
! or being dependent on mode-switching, such as SH, this hook can be\n\
! used to avoid unsafe substitution.",
   bool, (rtx subst),
   hook_bool_rtx_false)
  
diff -Nrcpad gcc-17-20260628/gcc/testsuite/ChangeLog gcc-17-20260705/gcc/testsuite/ChangeLog
*** gcc-17-20260628/gcc/testsuite/ChangeLog	Sun Jun 28 22:32:10 2026
--- gcc-17-20260705/gcc/testsuite/ChangeLog	Sun Jul  5 22:32:10 2026
***************
*** 1,3 ****
--- 1,783 ----
+ 2026-07-04  Thomas Koenig  <tkoenig@gcc.gnu.org>
+ 
+ 	PR fortran/126058
+ 	PR fortran/126090
+ 	* gfortran.dg/warn_undefined_vars_5.f90: New test.
+ 	* gfortran.dg/warn_undefined_vars_6.f90: New test.
+ 
+ 2026-07-04  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/sat/sat_arith.h: Add test helper macros.
+ 	* gcc.target/riscv/sat/sat_u_mul-20-u16-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-20-u16-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-20-u16-from-u64.rv32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-20-u16-from-u64.rv64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-20-u32-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-20-u32-from-u64.rv32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-20-u32-from-u64.rv64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-20-u64-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-20-u8-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-20-u8-from-u16.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-20-u8-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-20-u8-from-u64.rv32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-20-u8-from-u64.rv64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-20-u16-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-20-u16-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-20-u16-from-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-20-u32-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-20-u32-from-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-20-u64-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-20-u8-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-20-u8-from-u16.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-20-u8-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-20-u8-from-u64.c: New test.
+ 
+ 2026-07-04  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/sat/sat_arith.h: Add test helper macros.
+ 	* gcc.target/riscv/sat/sat_u_mul-19-u16-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-19-u16-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-19-u16-from-u64.rv32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-19-u16-from-u64.rv64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-19-u32-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-19-u32-from-u64.rv32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-19-u32-from-u64.rv64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-19-u64-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-19-u8-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-19-u8-from-u16.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-19-u8-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-19-u8-from-u64.rv32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-19-u8-from-u64.rv64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-19-u16-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-19-u16-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-19-u16-from-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-19-u32-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-19-u32-from-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-19-u64-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-19-u8-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-19-u8-from-u16.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-19-u8-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-19-u8-from-u64.c: New test.
+ 
+ 2026-07-04  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/sat/sat_arith.h: Add test helper macros.
+ 	* gcc.target/riscv/sat/sat_u_mul-18-u16-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-18-u16-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-18-u16-from-u64.rv32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-18-u16-from-u64.rv64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-18-u32-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-18-u32-from-u64.rv32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-18-u32-from-u64.rv64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-18-u64-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-18-u8-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-18-u8-from-u16.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-18-u8-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-18-u8-from-u64.rv32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-18-u8-from-u64.rv64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-18-u16-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-18-u16-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-18-u16-from-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-18-u32-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-18-u32-from-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-18-u64-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-18-u8-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-18-u8-from-u16.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-18-u8-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-18-u8-from-u64.c: New test.
+ 
+ 2026-07-04  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/sat/sat_arith.h: Add test helper macros.
+ 	* gcc.target/riscv/sat/sat_u_mul-17-u16-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-17-u16-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-17-u16-from-u64.rv32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-17-u16-from-u64.rv64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-17-u32-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-17-u32-from-u64.rv32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-17-u32-from-u64.rv64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-17-u64-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-17-u8-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-17-u8-from-u16.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-17-u8-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-17-u8-from-u64.rv32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-17-u8-from-u64.rv64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-17-u16-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-17-u16-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-17-u16-from-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-17-u32-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-17-u32-from-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-17-u64-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-17-u8-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-17-u8-from-u16.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-17-u8-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-17-u8-from-u64.c: New test.
+ 
+ 2026-07-04  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	* gcc.dg/pr94589-5a.c: Allow for `u<` and `u>` in the scan too.
+ 
+ 2026-07-03  Philipp Tomsich  <philipp.tomsich@vrull.eu>
+ 
+ 	PR tree-optimization/122569
+ 	* gcc.dg/tree-ssa/pr122569-3.c: New test.
+ 
+ 2026-07-03  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/106164
+ 	PR tree-optimization/126042
+ 	PR tree-optimization/94589
+ 	* g++.dg/opt/pr94589-5a.C: New test.
+ 	* gcc.dg/pr94589-5.c: Explictly enable -ftrapping-math.
+ 	* gcc.dg/pr94589-5a.c: New test.
+ 
+ 2026-07-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/126057
+ 	* g++.dg/cpp2a/decomp11.C: New test.
+ 
+ 2026-07-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/125826
+ 	* g++.dg/cpp0x/defaulted51.C: Adjust expected diagnostics
+ 	for C++29.
+ 	* g++.dg/cpp0x/defaulted55.C: Likewise.
+ 	* g++.dg/cpp0x/defaulted56.C: Likewise.
+ 	* g++.dg/cpp0x/defaulted57.C: Likewise.
+ 	* g++.dg/cpp0x/defaulted63.C: Likewise.
+ 	* g++.dg/cpp0x/defaulted64.C: Likewise.
+ 	* g++.dg/cpp0x/defaulted65.C: Likewise.
+ 	* g++.dg/cpp0x/defaulted66.C: Likewise.
+ 	* g++.dg/cpp0x/defaulted67.C: Likewise.
+ 	* g++.dg/cpp0x/defaulted68.C: Likewise.
+ 	* g++.dg/cpp1y/defaulted2.C: Likewise.
+ 	* g++.dg/cpp29/defaulted1.C: New test.
+ 	* g++.dg/cpp29/defaulted2.C: New test.
+ 	* g++.dg/cpp29/defaulted3.C: New test.
+ 	* g++.dg/cpp29/defaulted4.C: New test.
+ 	* g++.dg/cpp29/defaulted5.C: New test.
+ 	* g++.dg/cpp29/defaulted6.C: New test.
+ 
+ 2026-07-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/126036
+ 	* g++.dg/reflect/pr126036.C: New test.
+ 
+ 2026-07-03  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	* gcc.target/riscv/and-synthesis-3.c: New test.
+ 
+ 2026-07-03  Naveen  <naveen.siddegowda@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/102202
+ 	* gcc.dg/pr102202-1.c: New test.
+ 	* gcc.dg/pr102202.c: New test.
+ 	* gcc.target/aarch64/pr100518.c: Modify to handle the warning.
+ 
+ 2026-07-03  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR target/120027
+ 	* gcc.target/aarch64/sve/acle/general/pr120027.c: New test.
+ 
+ 2026-07-03  Mikael Morin  <mikael@gcc.gnu.org>
+ 
+ 	PR fortran/97592
+ 	PR fortran/125998
+ 	* gfortran.dg/contiguous_17.f90: New test.
+ 
+ 2026-07-03  Tamar Christina  <tamar.christina@arm.com>
+ 	    Chris Bazley  <Chris.Bazley@arm.com>
+ 
+ 	* gcc.target/aarch64/sve/copsi.c: New test.
+ 
+ 2026-07-03  Oleg Endo  <olegendo@gcc.gnu.org>
+ 
+ 	PR target/81426
+ 	* gcc.target/sh/pr81426.c: New test.
+ 
+ 2026-07-03  Oleg Endo  <olegendo@gcc.gnu.org>
+ 
+ 	PR target/34777
+ 	* gcc.target/sh/torture/pr34777-1.c: New test.
+ 
+ 2026-07-03  Oleg Endo  <olegendo@gcc.gnu.org>
+ 
+ 	PR target/124778
+ 	* gcc.target/sh/torture/pr124778.c: New test.
+ 
+ 2026-07-03  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	* gcc.target/riscv/xor-synthesis-4.c: New test.
+ 
+ 2026-07-03  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/126018
+ 	* gfortran.dg/stop_function_code_1.f90: New test.
+ 
+ 2026-07-02  Pengfei Li  <Pengfei.Li2@arm.com>
+ 
+ 	* gcc.target/aarch64/sve/vect-unroll-1.c: New test.
+ 	* gcc.target/aarch64/sve/vect-unroll-2.c: New test.
+ 
+ 2026-07-02  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	* gcc.target/riscv/add-synthesis-3.c: New test.
+ 	* gcc.target/riscv/xor-synthesis-2.c: No longer xfail.
+ 
+ 2026-07-02  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125819
+ 	* g++.dg/reflect/members_of17.C: New test.
+ 
+ 2026-07-02  Sivan Shani  <sivan.shani@arm.com>
+ 
+ 	* g++.target/aarch64/sve/aarch64-ssve.exp: Test SVE AES intrinsics
+ 	as streaming-compatible with +ssve-aes.
+ 	* gcc.target/aarch64/sve2/acle/asm/aesd_u8.c: Use +ssve-aes for
+ 	streaming-compatible tests.
+ 	* gcc.target/aarch64/sve2/acle/asm/aese_u8.c: Likewise.
+ 	* gcc.target/aarch64/sve2/acle/asm/aesimc_u8.c: Likewise.
+ 	* gcc.target/aarch64/sve2/acle/asm/aesmc_u8.c: Likewise.
+ 	* lib/target-supports.exp: Test aes intrinsics in streaming mode.
+ 
+ 2026-07-02  Srinath Parvathaneni  <srinath.parvathaneni@arm.com>
+ 
+ 	PR target/97344
+ 	* gcc.target/aarch64/pr97344.c: New test.
+ 	* lib/target-supports.exp (aarch64_gas_has_dtprel_reloc): Add new target
+ 	check.
+ 
+ 2026-07-02  Philipp Tomsich  <philipp.tomsich@vrull.eu>
+ 
+ 	PR tree-optimization/124545
+ 	* gcc.dg/pr124545.c: New test.
+ 	* gcc.dg/pr124545-2.c: New test.
+ 
+ 2026-07-02  Oleg Endo  <olegendo@gcc.gnu.org>
+ 
+ 	PR target/55212
+ 	* gcc.target/sh/pr55212-c248.c: Move to ..
+ 	* gcc.target/sh/torture/pr55212-c248.c: .. here.  Skip it for -O0.
+ 
+ 2026-07-01  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR objc/124260
+ 	* objc.dg/image-info.m: Test revised flags value for ABI-2.
+ 
+ 2026-07-01  Paul Thomas  <pault@gcc.gnu.org>
+ 	    Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/121972
+ 	* gfortran.dg/asan/pdt_46.f03: Copy of original with tree dump
+ 	for counts of frees, mallocs and callocs removed.
+ 	* gfortran.dg/asan/pdt_77.f03: Ditto.
+ 	* gfortran.dg/pdt_46.f03: Calloc count added, corresponding to
+ 	reduction in mallocs..
+ 	* gfortran.dg/pdt_50.f03: Ditto.
+ 
+ 2026-07-01  Icenowy Zheng  <zhengxingda@iscas.ac.cn>
+ 
+ 	PR target/126049
+ 	* gcc.target/riscv/rvv/autovec/pr126049.c: New.
+ 
+ 2026-07-01  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/124584
+ 	* g++.dg/coroutines/torture/tuple-decomp-pr124584.C: New test.
+ 
+ 2026-07-01  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/121094
+ 	PR c++/117259
+ 	* g++.dg/coroutines/pmf-121094.C: New test.
+ 
+ 2026-07-01  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* gcc.target/i386/sse2-stv-6.c: New test case.
+ 
+ 2026-07-01  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* gcc.target/i386/avx2-vpblendd128-3.c: New test case.
+ 
+ 2026-07-01  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	PR target/126054
+ 	* gcc.target/s390/pr126054.c: New test.
+ 
+ 2026-07-01  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/125040
+ 	* gcc.dg/torture/pr125040.c: New testcase.
+ 
+ 2026-07-01  Jeevitha Palanisamy  <jeevitha@linux.ibm.com>
+ 
+ 	* gcc.target/powerpc/vsx_arith_builtin-1.c: Remove inline asm
+ 	that forces operands into FPRs.
+ 	* gcc.target/powerpc/vsx_arith_builtin-2.c: Likewise.
+ 	* gcc.target/powerpc/vsx_arith_vect_1.c: Likewiswe.
+ 
+ 2026-07-01  Alfie Richards  <alfie.richards@arm.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/pr112399.c: Update for different
+ 	scheduling.
+ 
+ 2026-07-01  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* gcc.misc-tests/outputs.exp (gld): Update comment.
+ 
+ 2026-07-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/opt109.adb: New test.
+ 	* gnat.dg/opt109_pkg.ads, gnat.dg/opt109_pkg.adb: New helper.
+ 
+ 2026-07-01  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	* g++.dg/other/i386-2.C: Remove AMX-TF32 test.
+ 	* g++.dg/other/i386-3.C: Ditto.
+ 	* gcc.target/i386/amx-check.h: Ditto.
+ 	* gcc.target/i386/funcspec-56.inc: Ditto.
+ 	* gcc.target/i386/sse-12.c: Ditto.
+ 	* gcc.target/i386/sse-13.c: Ditto.
+ 	* gcc.target/i386/sse-14.c: Ditto.
+ 	* gcc.target/i386/sse-22.c: Ditto.
+ 	* gcc.target/i386/sse-23.c: Ditto.
+ 	* lib/target-supports.exp: Ditto.
+ 	* g++.target/i386/pr122446-amxtf32.C: Removed.
+ 	* gcc.target/i386/amxtf32-asmatt-1.c: Ditto.
+ 	* gcc.target/i386/amxtf32-asmintel-1.c: Ditto.
+ 	* gcc.target/i386/amxtf32-mmultf32ps-2.c: Ditto.
+ 
+ 2026-06-30  Abhishek Kaushik  <abhishek.kaushik@arm.com>
+ 
+ 	* gcc.target/aarch64/sbfiz-widen-mult-1.c: New test.
+ 
+ 2026-06-30  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* gcc.target/i386/bt-cmov-1.c (scan-assembler-times): Simplify
+ 	patterns.  Allow for Solaris as syntax.
+ 
+ 2026-06-30  Paul Thomas  <pault@gcc.gnu.org>
+ 	    Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/121972
+ 	* gfortran.dg/pdt_86.f03: Add tree dump for counts of frees and
+ 	mallocs (41 & 31 respectively).
+ 	* gfortran.dg/pdt_86_reduced.f90: New test to check that the
+ 	non-PDT version of the leak has gone.
+ 
+ 2026-06-30  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.cob: Removed.
+ 	* cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.out: Removed.
+ 
+ 2026-06-30  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/121972
+ 	* gfortran.dg/pdt_70.f03: Add a matrix finalizer and update the
+ 	check of the value of 'flag'.
+ 
+ 2026-06-30  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	* c-c++-common/gomp/atomic-builtins-1.c: Skip test when sync_int_128 is
+ 	available.
+ 	* lib/target-supports.exp (check_effective_target_sync_int_128): Return
+ 	1 for targets that do not emit a call to __atomic_compare_exchange_16.
+ 
+ 2026-06-30  Karl Meakin  <karl.meakin@arm.com>
+ 
+ 	* gcc.target/aarch64/neon/vreinterpret.c: New test.
+ 
+ 2026-06-30  Karl Meakin  <karl.meakin@arm.com>
+ 
+ 	* gcc.target/aarch64/neon/vext.c: New test.
+ 	* gcc.target/aarch64/neon/vrev.c: New test.
+ 	* gcc.target/aarch64/neon/vtrn.c: New test.
+ 	* gcc.target/aarch64/neon/vuzp.c: New test.
+ 	* gcc.target/aarch64/neon/vzip.c: New test.
+ 
+ 2026-06-30  Karl Meakin  <karl.meakin@arm.com>
+ 
+ 	* gcc.target/aarch64/neon/vand.c: New test.
+ 	* gcc.target/aarch64/neon/vbcax.c: New test.
+ 	* gcc.target/aarch64/neon/vbic.c: New test.
+ 	* gcc.target/aarch64/neon/vbsl.c: New test.
+ 	* gcc.target/aarch64/neon/vcls.c: New test.
+ 	* gcc.target/aarch64/neon/vclz.c: New test.
+ 	* gcc.target/aarch64/neon/vcnt.c: New test.
+ 	* gcc.target/aarch64/neon/veor.c: New test.
+ 	* gcc.target/aarch64/neon/veor3.c: New test.
+ 	* gcc.target/aarch64/neon/vmvn.c: New test.
+ 	* gcc.target/aarch64/neon/vorn.c: New test.
+ 	* gcc.target/aarch64/neon/vorr.c: New test.
+ 	* gcc.target/aarch64/neon/vrax1.c: New test.
+ 	* gcc.target/aarch64/neon/vrbit.c: New test.
+ 	* gcc.target/aarch64/neon/vxar.c: New test.
+ 	* gcc.target/aarch64/sme/inlining_10.c: Replace `call_vbsl` with
+ 	`call_vhadd` since `vbsl` is no longer implemented as an
+ 	`always_inline` function.
+ 	* gcc.target/aarch64/sme/inlining_11.c: Likewise.
+ 	* gcc.target/aarch64/target_attr_10.c: Fix expected error message.
+ 
+ 2026-06-30  Karl Meakin  <karlwfmeakin@gmail.com>
+ 
+ 	* gcc.target/aarch64/simd/mf8_data_2.c: Fix test.
+ 	* gcc.target/aarch64/simd/fold_to_highpart_6.c: Fix test.
+ 	* g++.target/aarch64/lane-bound-1.C: Fix test.
+ 	* gcc.target/aarch64/advsimd-intrinsics/bf16_vect_copy_lane_1.c:
+ 	Fix test.
+ 	* gcc.target/aarch64/lane-bound-3.c: Fix test.
+ 	* gcc.target/aarch64/pr113573.c: Fix test.
+ 	* gcc.target/aarch64/simd/vset_lane_s16_const_1.c: Fix test.
+ 	* gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_bf16_indices_1.c,
+ 	gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_bf16_indices_2.c,
+ 	gcc.target/aarch64/advsimd-intrinsics/vcopy_laneq_bf16_indices_1.c,
+ 	gcc.target/aarch64/advsimd-intrinsics/vcopy_laneq_bf16_indices_2.c,
+ 	gcc.target/aarch64/advsimd-intrinsics/vcopyq_lane_bf16_indices_1.c,
+ 	gcc.target/aarch64/advsimd-intrinsics/vcopyq_lane_bf16_indices_2.c,
+ 	gcc.target/aarch64/advsimd-intrinsics/vcopyq_laneq_bf16_indices_1.c,
+ 	gcc.target/aarch64/advsimd-intrinsics/vcopyq_laneq_bf16_indices_2.c: Replace with...
+ 	gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_indices.c: ...this.
+ 	* gcc.target/aarch64/simd/vget_lane_f32_indices_1.c,
+ 	gcc.target/aarch64/simd/vget_lane_f64_indices_1.c,
+ 	gcc.target/aarch64/simd/vget_lane_p16_indices_1.c,
+ 	gcc.target/aarch64/simd/vget_lane_p8_indices_1.c,
+ 	gcc.target/aarch64/simd/vget_lane_s16_indices_1.c,
+ 	gcc.target/aarch64/simd/vget_lane_s32_indices_1.c,
+ 	gcc.target/aarch64/simd/vget_lane_s64_indices_1.c,
+ 	gcc.target/aarch64/simd/vget_lane_s8_indices_1.c,
+ 	gcc.target/aarch64/simd/vget_lane_u16_indices_1.c,
+ 	gcc.target/aarch64/simd/vget_lane_u32_indices_1.c,
+ 	gcc.target/aarch64/simd/vget_lane_u64_indices_1.c,
+ 	gcc.target/aarch64/simd/vget_lane_u8_indices_1.c,
+ 	gcc.target/aarch64/simd/vgetq_lane_f32_indices_1.c,
+ 	gcc.target/aarch64/simd/vgetq_lane_f64_indices_1.c,
+ 	gcc.target/aarch64/simd/vgetq_lane_p16_indices_1.c,
+ 	gcc.target/aarch64/simd/vgetq_lane_p8_indices_1.c,
+ 	gcc.target/aarch64/simd/vgetq_lane_s16_indices_1.c,
+ 	gcc.target/aarch64/simd/vgetq_lane_s32_indices_1.c,
+ 	gcc.target/aarch64/simd/vgetq_lane_s64_indices_1.c,
+ 	gcc.target/aarch64/simd/vgetq_lane_s8_indices_1.c,
+ 	gcc.target/aarch64/simd/vgetq_lane_u16_indices_1.c,
+ 	gcc.target/aarch64/simd/vgetq_lane_u32_indices_1.c,
+ 	gcc.target/aarch64/simd/vgetq_lane_u64_indices_1.c,
+ 	gcc.target/aarch64/simd/vgetq_lane_u8_indices_1.c: Replace with...
+ 	* gcc.target/aarch64/simd/vget_lane_indices.c: ...this.
+ 	* gcc.target/aarch64/neon/arm_neon_test.h(VEC_LEN): New macro.
+ 	* gcc.target/aarch64/neon/vcopy_lane.c: New test.
+ 	* gcc.target/aarch64/neon/vdup_lane.c: New test.
+ 	* gcc.target/aarch64/neon/vget_lane.c: New test.
+ 	* gcc.target/aarch64/neon/vset_lane.c: New test.
+ 	* gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_indices.c: New file.
+ 	* gcc.target/aarch64/neon/vget_high.c: New file.
+ 	* gcc.target/aarch64/neon/vget_low.c: New file.
+ 
+ 2026-06-30  Karl Meakin  <karlwfmeakin@gmail.com>
+ 
+ 	* gcc.target/aarch64/advsimd-intrinsics/bf16_dup.c: Fix test.
+ 	* gcc.target/aarch64/vmov_n_1.c: Fix test.
+ 	* gcc.target/aarch64/neon/vcombine.c: New test.
+ 	* gcc.target/aarch64/neon/vcreate.c: New test.
+ 	* gcc.target/aarch64/neon/vdup.c: New test.
+ 	* gcc.target/aarch64/neon/vmov_n.c: New test.
+ 
+ 2026-06-30  Karl Meakin  <karl.meakin@arm.com>
+ 
+ 	* g++.target/aarch64/pr103147-6.C: Fix tests.
+ 	* g++.target/aarch64/pr117048.C: Fix tests.
+ 	* gcc.target/aarch64/pr103147-6.c: Fix tests.
+ 	* gcc.target/aarch64/neon/aarch64-neon.exp: New test.
+ 	* gcc.target/aarch64/neon/arm_neon_test.h: New test.
+ 	* gcc.target/aarch64/neon/vadd.c: New test.
+ 
+ 2026-06-30  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	* gcc.target/riscv/and-synthesis-2.c: New test.
+ 
+ 2026-06-30  Jim Tsung-Chun Lin  <jim@andestech.com>
+ 
+ 	Backported from master:
+ 	2026-06-15  Jim Tsung-Chun Lin  <jim@andestech.com>
+ 
+ 	* gcc.target/riscv/multilib.exp: New test.
+ 
+ 2026-06-30  Mark Zhuang  <zhuangqiubin@linux.spacemit.com>
+ 
+ 	* gcc.target/riscv/mcpu-spacemit-a100.c: New test.
+ 
+ 2026-06-30  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	* g++.dg/gomp/deprecate-2.C: Remove obsolete 'dg-excess-errors'.
+ 
+ 2026-06-30  Alfie Richards  <alfie.richards@arm.com>
+ 
+ 	PR target/125838
+ 	* gcc.target/aarch64/preserve_none_5.c: Update to use AAPCS.
+ 
+ 2026-06-30  Chung-Lin Tang  <cltang@baylibre.com>
+ 
+ 	* c-c++-common/gomp/uses_allocators-1.c: Adjust test, and move to
+ 	../../libgomp/testsuite/libgomp.c-c++-common/uses_allocators-1.c
+ 	* c-c++-common/gomp/uses_allocators-2.c: Move to
+ 	../../libgomp/testsuite/libgomp.c-c++-common/uses_allocators-2.c
+ 	* c-c++-common/gomp/uses_allocators-4.c: Adjust test, and move to
+ 	../../libgomp/testsuite/libgomp.c-c++-common/uses_allocators-4.c
+ 	* c-c++-common/gomp/uses_allocators-7.c: Move to
+ 	../../libgomp/testsuite/libgomp.c-c++-common/uses_allocators-7.c
+ 	* c-c++-common/gomp/uses_allocators-8.c: Move to
+ 	../../libgomp/testsuite/libgomp.c-c++-common/uses_allocators-8.c
+ 	* gcc.dg/gomp/deprecate-2.c: Adjust test.
+ 	* gfortran.dg/gomp/allocate-1.f90: Likewise.
+ 	* gfortran.dg/gomp/scope-6.f90: Likewise.
+ 	* g++.dg/gomp/uses_allocators-1.C: Move to
+ 	../../libgomp/testsuite/libgomp.c++/uses_allocators-1.C.
+ 
+ 2026-06-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/126008
+ 	* gcc.dg/torture/pr126008.c: New testcase.
+ 
+ 2026-06-30  Christopher Bazley  <chris.bazley@arm.com>
+ 	    Richard Sandiford  <rdsandiford@googlemail.com>
+ 
+ 	* gcc.dg/plugin/poly-int-tests.h: New test cases.
+ 
+ 2026-06-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/126007
+ 	* g++.dg/ext/is_implicit_lifetime3.C: New test.
+ 
+ 2026-06-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/125935
+ 	* gcc.dg/debug/dwarf2/pr125935-1.c: New test.
+ 	* gcc.dg/debug/dwarf2/pr125935-2.c: New test.
+ 	* gcc.dg/debug/dwarf2/pr125935-3.c: New test.
+ 	* gcc.dg/debug/ctf/ctf-bitfields-3.c: Expect bool rather than _Bool.
+ 	* gcc.dg/Warray-bounds-65.c: Expect bool in diagnostics instead of
+ 	_Bool.
+ 	* gcc.dg/Wbad-function-cast-1.c: Likewise.
+ 
+ 2026-06-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/125837
+ 	* g++.dg/cpp29/feat-cxx29.C (__cpp_pp_embed): Expect 202606L
+ 	rather than 202502L.
+ 	* c-c++-common/cpp/embed-18.c: Adjust expected diagnostics.
+ 	* g++.dg/cpp/embed-30.C: New test.
+ 	* g++.dg/cpp/embed-31.C: New test.
+ 	* g++.dg/cpp/embed-32.C: New test.
+ 
+ 2026-06-30  Avinash Jayakar  <avinashd@linux.ibm.com>
+ 	    Surya Kumari Jangala  <jskumari@linux.ibm.com>
+ 
+ 	* gcc.target/powerpc/acmp-tst-32bit.c: New test.
+ 	* gcc.target/powerpc/acmp-tst.c: New test.
+ 	* gcc.target/powerpc/acmp-tst-indexed.c: New test.
+ 
+ 2026-06-30  Avinash Jayakar  <avinashd@linux.ibm.com>
+ 
+ 	Revert:
+ 	2026-06-30  Avinash Jayakar  <avinashd@linux.ibm.com>
+ 		    Surya Kumari Jangala  <jskumari@linux.ibm.com>
+ 
+ 	* gcc.target/powerpc/acmp-tst-32bit.c: New test.
+ 	* gcc.target/powerpc/acmp-tst.c: New test.
+ 	* gcc.target/powerpc/acmp-tst-indexed.c: New test.
+ 
+ 2026-06-30  Avinash Jayakar  <avinashd@linux.ibm.com>
+ 	    Surya Kumari Jangala  <jskumari@linux.ibm.com>
+ 
+ 	* gcc.target/powerpc/acmp-tst-32bit.c: New test.
+ 	* gcc.target/powerpc/acmp-tst.c: New test.
+ 	* gcc.target/powerpc/acmp-tst-indexed.c: New test.
+ 
+ 2026-06-30  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* gcc.target/loongarch/ssp-ilp32.c: New test.
+ 
+ 2026-06-30  Oleg Endo  <olegendo@gcc.gnu.org>
+ 
+ 	PR target/55212
+ 	* gcc.target/sh/torture/pr55212-c464-3.c: New.
+ 
+ 2026-06-30  Oleg Endo  <olegendo@gcc.gnu.org>
+ 
+ 	PR target/55212
+ 	* gcc.target/sh/torture/pr55212-c421.c
+ 
+ 2026-06-30  Robin Dapp  <robin.dapp@oss.qualcomm.com>
+ 
+ 	PR target/125994
+ 	* gcc.target/riscv/rvv/autovec/pr125994.c: New test.
+ 
+ 2026-06-29  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	* gcc.target/riscv/and-synthesis-1.c: New test.
+ 
+ 2026-06-29  Mark Zhuang  <zhuangqiubin@linux.spacemit.com>
+ 
+ 	* gcc.target/riscv/mcpu-spacemit-x100.c: New test.
+ 
+ 2026-06-29  Claudio Bantaloukas  <Claudio.Bantaloukas@arm.com>
+ 
+ 	* gcc.target/aarch64/acle/arm_sc_memchr.c: New file.
+ 	* gcc.target/aarch64/acle/arm_sc_memcpy.c: Likewise.
+ 	* gcc.target/aarch64/acle/arm_sc_memmove.c: Likewise.
+ 	* gcc.target/aarch64/acle/arm_sc_memset.c: Likewise.
+ 	* gcc.target/aarch64/sme/arm_sc_memchr.c: New file.
+ 	* gcc.target/aarch64/sme/arm_sc_memcpy.c: Likewise.
+ 	* gcc.target/aarch64/sme/arm_sc_memmove.c: Likewise.
+ 	* gcc.target/aarch64/sme/arm_sc_memset.c: Likewise.
+ 
+ 2026-06-29  Matthew Fortune  <matthew.fortune@imgtec.com>
+ 
+ 	* gcc.target/mips/mxu-compile-no.c: New test.
+ 	* gcc.target/mips/mxu-compile.c: New test.
+ 	* gcc.target/mips/mxu-driver-no.c: New test.
+ 	* gcc.target/mips/mxu-driver.c: New test.
+ 
+ 2026-06-29  Matthew Fortune  <matthew.fortune@imgtec.com>
+ 
+ 	* gcc.target/mips/frame-barrier-1.c: New test.
+ 
+ 2026-06-29  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	* gcc.target/arm/long-calls-1.c: Change to `noipa` to prevent
+ 	optimizing away the functions.
+ 	* gcc.target/arm/long-calls-2.c: Likewise.
+ 	* gcc.target/arm/long-calls-3.c: Likewise.
+ 	* gcc.target/arm/long-calls-4.c: Likewise.
+ 
+ 2026-06-29  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/84622
+ 	* gfortran.dg/pr84622.f90: New test.
+ 
+ 2026-06-29  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	PR target/94871
+ 	* gcc.target/i386/pr94871.c: New test case.
+ 
+ 2026-06-29  Abhishek Kaushik  <abhishek.kaushik@arm.com>
+ 
+ 	* gcc.target/aarch64/sve2/acle/asm/mulh_s8.c: New test.
+ 	* gcc.target/aarch64/sve2/acle/asm/mulh_s16.c: Likewise.
+ 	* gcc.target/aarch64/sve2/acle/asm/mulh_s32.c: Likewise.
+ 	* gcc.target/aarch64/sve2/acle/asm/mulh_s64.c: Likewise.
+ 	* gcc.target/aarch64/sve2/acle/asm/mulh_u8.c: Likewise.
+ 	* gcc.target/aarch64/sve2/acle/asm/mulh_u16.c: Likewise.
+ 	* gcc.target/aarch64/sve2/acle/asm/mulh_u32.c: Likewise.
+ 	* gcc.target/aarch64/sve2/acle/asm/mulh_u64.c: Likewise.
+ 
+ 2026-06-29  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR target/105116
+ 	* gcc.target/aarch64/sve/pr105116.c: New test.
+ 	* gcc.target/aarch64/sve/pr105116-run.c: New test.
+ 
+ 2026-06-29  Kael Andrew Alonzo Franco  <kaelfandrew@gmail.com>
+ 
+ 	PR tree-optimization/125737
+ 	* gcc.dg/pr125737.c: Move test to pr125737-1.c.
+ 	* gcc.dg/pr125737-1.c: Add test for (a % b) >= b when a and b are nonnegative.
+ 	* gcc.dg/pr125737-2.c: New test for (a % b) {<,>=} b.
+ 
+ 2026-06-29  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/125968
+ 	* gcc.target/i386/builtin-memmove-16.c: New test.
+ 	* gcc.target/i386/builtin-memmove-17.c: Likewise.
+ 	* gcc.target/i386/builtin-memmove-18a.c: Likewise.
+ 	* gcc.target/i386/builtin-memmove-18b.c: Likewise.
+ 
+ 2026-06-29  Naveen  <naveen.siddegowda@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/112390
+ 	* gcc.dg/pr112390.c: New test.
+ 	* gcc.dg/pr112390_bitint.c: New test.
+ 
+ 2026-06-29  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/125907
+ 	* gcc.target/i386/bt-cmov-1.c: New test.
+ 
+ 2026-06-29  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	PR target/125474
+ 	* gcc.target/loongarch/vector/lasx/dot-prod-mixed-signedness.c:
+ 	New test.
+ 
+ 2026-06-29  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/sat/sat_arith.h: Add test helper macros.
+ 	* gcc.target/riscv/sat/sat_u_mul-16-u16-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-16-u16-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-16-u16-from-u64.rv32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-16-u16-from-u64.rv64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-16-u32-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-16-u32-from-u64.rv32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-16-u32-from-u64.rv64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-16-u64-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-16-u8-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-16-u8-from-u16.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-16-u8-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-16-u8-from-u64.rv32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-16-u8-from-u64.rv64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-16-u16-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-16-u16-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-16-u16-from-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-16-u32-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-16-u32-from-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-16-u64-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-16-u8-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-16-u8-from-u16.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-16-u8-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-16-u8-from-u64.c: New test.
+ 
+ 2026-06-29  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/sat/sat_arith.h: Add test helper macros.
+ 	* gcc.target/riscv/sat/sat_u_mul-15-u16-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-15-u16-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-15-u16-from-u64.rv32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-15-u16-from-u64.rv64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-15-u32-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-15-u32-from-u64.rv32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-15-u32-from-u64.rv64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-15-u64-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-15-u8-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-15-u8-from-u16.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-15-u8-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-15-u8-from-u64.rv32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-15-u8-from-u64.rv64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-15-u16-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-15-u16-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-15-u16-from-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-15-u32-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-15-u32-from-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-15-u64-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-15-u8-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-15-u8-from-u16.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-15-u8-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-15-u8-from-u64.c: New test.
+ 
+ 2026-06-28  Oleg Endo  <olegendo@gcc.gnu.org>
+ 
+ 	PR target/55212
+ 	* gcc.target/sh/torture/pr55212-c464-1.c: New.
+ 	* gcc.target/sh/torture/pr55212-c464-2.c: New.
+ 
+ 2026-06-28  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/115571
+ 	* gcc.dg/tree-ssa/float-conv-1.c: New test.
+ 
+ 2026-06-28  Kael Andrew Alonzo Franco  <kaelfandrew@gmail.com>
+ 
+ 	PR tree-optimization/125749
+ 	PR tree-optimization/125749
+ 	* gcc.dg/pr125749.c: New test.
+ 
  2026-06-27  Jakub Jelinek  <jakub@redhat.com>
  
  	PR target/125992
diff -Nrcpad gcc-17-20260628/gcc/testsuite/algol68/compile/error-bits-denotation-1.a68 gcc-17-20260705/gcc/testsuite/algol68/compile/error-bits-denotation-1.a68
*** gcc-17-20260628/gcc/testsuite/algol68/compile/error-bits-denotation-1.a68	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/algol68/compile/error-bits-denotation-1.a68	Sun Jul  5 22:32:11 2026
***************
*** 0 ****
--- 1,6 ----
+ begin short short bits a
+             = short short 10r256; { dg-error "denotation is too large for short short bits" }
+       short bits b
+             = short 16rffff1; { dg-error "denotation is too large for short bits" }
+       skip
+ end
diff -Nrcpad gcc-17-20260628/gcc/testsuite/algol68/compile/error-radix-5.a68 gcc-17-20260705/gcc/testsuite/algol68/compile/error-radix-5.a68
*** gcc-17-20260628/gcc/testsuite/algol68/compile/error-radix-5.a68	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/algol68/compile/error-radix-5.a68	Sun Jul  5 22:32:11 2026
***************
*** 0 ****
--- 1 ----
+ (bits d = 1r0; skip) { dg-error "invalid radix" }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/algol68/compile/error-radix-6.a68 gcc-17-20260705/gcc/testsuite/algol68/compile/error-radix-6.a68
*** gcc-17-20260628/gcc/testsuite/algol68/compile/error-radix-6.a68	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/algol68/compile/error-radix-6.a68	Sun Jul  5 22:32:11 2026
***************
*** 0 ****
--- 1 ----
+ (bits d = 17r0; skip) { dg-error "invalid radix" }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/algol68/compile/error-radix-7.a68 gcc-17-20260705/gcc/testsuite/algol68/compile/error-radix-7.a68
*** gcc-17-20260628/gcc/testsuite/algol68/compile/error-radix-7.a68	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/algol68/compile/error-radix-7.a68	Sun Jul  5 22:32:11 2026
***************
*** 0 ****
--- 1,4 ----
+ { Radix 10 is not allowed in strict Algol 68. }
+ { dg-options "-std=algol68" }
+ 
+ (bits d = 10r0; skip) { dg-error "invalid radix" }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/algol68/compile/module-extracts-1.a68 gcc-17-20260705/gcc/testsuite/algol68/compile/module-extracts-1.a68
*** gcc-17-20260628/gcc/testsuite/algol68/compile/module-extracts-1.a68	Sun Jun 28 22:32:11 2026
--- gcc-17-20260705/gcc/testsuite/algol68/compile/module-extracts-1.a68	Sun Jul  5 22:32:11 2026
*************** def pub mode JURL = union (void,int,real
*** 22,28 ****
      int k = 10;
      { dg-final { scan-assembler-not "identifier extract FOO_k" } }
      pub prio // = 8;
!     { dg-final { scan-assembler "operator extract FOO_s_s_\[0-9\]+" } }
      pub op // = (int a, b) int: a % b;
      { dg-final { scan-assembler "operator extract FOO_s_s_\[0-9\]+" } }
      skip
--- 22,28 ----
      int k = 10;
      { dg-final { scan-assembler-not "identifier extract FOO_k" } }
      pub prio // = 8;
!     { dg-final { scan-assembler "prio extract FOO_s_s_" } }
      pub op // = (int a, b) int: a % b;
      { dg-final { scan-assembler "operator extract FOO_s_s_\[0-9\]+" } }
      skip
diff -Nrcpad gcc-17-20260628/gcc/testsuite/algol68/compile/module-pub-mangling-7.a68 gcc-17-20260705/gcc/testsuite/algol68/compile/module-pub-mangling-7.a68
*** gcc-17-20260628/gcc/testsuite/algol68/compile/module-pub-mangling-7.a68	Sun Jun 28 22:32:11 2026
--- gcc-17-20260705/gcc/testsuite/algol68/compile/module-pub-mangling-7.a68	Sun Jul  5 22:32:11 2026
*************** def prio // = 8;
*** 11,17 ****
      pub op(int,int)int JORL = lala;
      { dg-final { scan-assembler "FOO_JORL" } }
      op(int,int)int JURL = (int a, b) int: a - b;
!     { dg-final { scan-assembler "FOO_JORL" } }
      skip
  fed
  
--- 11,17 ----
      pub op(int,int)int JORL = lala;
      { dg-final { scan-assembler "FOO_JORL" } }
      op(int,int)int JURL = (int a, b) int: a - b;
!     { dg-final { scan-assembler "FOO_JURL" } }
      skip
  fed
  
diff -Nrcpad gcc-17-20260628/gcc/testsuite/algol68/compile/module-pub-mangling-9.a68 gcc-17-20260705/gcc/testsuite/algol68/compile/module-pub-mangling-9.a68
*** gcc-17-20260628/gcc/testsuite/algol68/compile/module-pub-mangling-9.a68	Sun Jun 28 22:32:11 2026
--- gcc-17-20260705/gcc/testsuite/algol68/compile/module-pub-mangling-9.a68	Sun Jul  5 22:32:11 2026
***************
*** 5,12 ****
  
  module Foo =
  def prio // =9;
!     op // = (int a, b) int: a + b;    { dg-final { scan-assembler "FOO_s_s_\[0-9\]+" } }
!     op // = (real a, b) real: a + b;  { dg-final { scan-assembler "FOO_s_s_\[0-9\]+" } }
      skip
  fed
  
--- 5,13 ----
  
  module Foo =
  def prio // =9;
!     op // = (int a, b) int: a + b;
!     op // = (real a, b) real: a + b;
!     { dg-final { scan-assembler "FOO_s_s_\[0-9\]+" } }
      skip
  fed
  
diff -Nrcpad gcc-17-20260628/gcc/testsuite/algol68/execute/and-bits-1.a68 gcc-17-20260705/gcc/testsuite/algol68/execute/and-bits-1.a68
*** gcc-17-20260628/gcc/testsuite/algol68/execute/and-bits-1.a68	Sun Jun 28 22:32:11 2026
--- gcc-17-20260705/gcc/testsuite/algol68/execute/and-bits-1.a68	Sun Jul  5 22:32:11 2026
*************** BEGIN BITS b = 16r0f0f0;
*** 12,18 ****
        SHORT BITS ss = SHORT 16r0f0f0;
        ASSERT ((ss AND SHORT 16r0f0f) = SHORT 16r0);
        ASSERT ((ss AND SHORT 16r00ff) = SHORT 16rf0);
!       SHORT SHORT BITS sss = SHORT SHORT 16r0f0f0;
!       ASSERT ((sss AND SHORT SHORT 16r0f0f) = SHORT SHORT 16r0);
!       ASSERT ((sss AND SHORT SHORT 16r00ff) = SHORT SHORT 16rf0)
  END
--- 12,18 ----
        SHORT BITS ss = SHORT 16r0f0f0;
        ASSERT ((ss AND SHORT 16r0f0f) = SHORT 16r0);
        ASSERT ((ss AND SHORT 16r00ff) = SHORT 16rf0);
!       SHORT SHORT BITS sss = SHORT SHORT 16rf0;
!       ASSERT ((sss AND SHORT SHORT 16r0f) = SHORT SHORT 16r0);
!       ASSERT ((sss AND SHORT SHORT 16rff) = SHORT SHORT 16rf0)
  END
diff -Nrcpad gcc-17-20260628/gcc/testsuite/algol68/execute/bits-radix-ten-1.a68 gcc-17-20260705/gcc/testsuite/algol68/execute/bits-radix-ten-1.a68
*** gcc-17-20260628/gcc/testsuite/algol68/execute/bits-radix-ten-1.a68	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/algol68/execute/bits-radix-ten-1.a68	Sun Jul  5 22:32:11 2026
***************
*** 0 ****
--- 1,13 ----
+ begin begin short short bits b = short short 10r0;
+             assert(b = short short 16r0);
+             assert(ABS LENG b = short 0)
+       end;
+ 
+       begin short short bits b = short short 10r255;
+             assert(b = short short 16rff);
+             assert(ABS LENG b = short 255);
+             assert(LENG ABS b = - short 1)
+       end;
+       
+       skip
+ end
diff -Nrcpad gcc-17-20260628/gcc/testsuite/algol68/execute/bits-shift-2.a68 gcc-17-20260705/gcc/testsuite/algol68/execute/bits-shift-2.a68
*** gcc-17-20260628/gcc/testsuite/algol68/execute/bits-shift-2.a68	Sun Jun 28 22:32:11 2026
--- gcc-17-20260705/gcc/testsuite/algol68/execute/bits-shift-2.a68	Sun Jul  5 22:32:11 2026
***************
*** 1,24 ****
  { Shifting by L_bits_width results in all bits being zero. }
  
! begin assert (short short 16rffff SHR short_short_bits_width = short short 16r0);
        assert (short 16rffff SHR short_bits_width = short 16r0);
        assert (16rffff SHR bits_width = 16r0);
        assert (long 16rffff SHR long_bits_width = long 16r0);
        assert (long long 16rffff SHR long_long_bits_width = long long 16r0);
  
!       assert (short short 16rffff SHR -short_short_bits_width = short short 16r0);
        assert (short 16rffff SHR -short_bits_width = short 16r0);
        assert (16rffff SHR -bits_width = 16r0);
        assert (long 16rffff SHR -long_bits_width = long 16r0);
        assert (long long 16rffff SHR -long_long_bits_width = long long 16r0);
  
!       assert (short short 16rffff SHL short_short_bits_width = short short 16r0);
        assert (short 16rffff SHL short_bits_width = short 16r0);
        assert (16rffff SHL bits_width = 16r0);
        assert (long 16rffff SHL long_bits_width = long 16r0);
        assert (long long 16rffff SHL long_long_bits_width = long long 16r0);
  
!       assert (short short 16rffff SHL -short_short_bits_width = short short 16r0);
        assert (short 16rffff SHL -short_bits_width = short 16r0);
        assert (16rffff SHL -bits_width = 16r0);
        assert (long 16rffff SHL -long_bits_width = long 16r0);
--- 1,24 ----
  { Shifting by L_bits_width results in all bits being zero. }
  
! begin assert (short short 16rff SHR short_short_bits_width = short short 16r0);
        assert (short 16rffff SHR short_bits_width = short 16r0);
        assert (16rffff SHR bits_width = 16r0);
        assert (long 16rffff SHR long_bits_width = long 16r0);
        assert (long long 16rffff SHR long_long_bits_width = long long 16r0);
  
!       assert (short short 16rff SHR -short_short_bits_width = short short 16r0);
        assert (short 16rffff SHR -short_bits_width = short 16r0);
        assert (16rffff SHR -bits_width = 16r0);
        assert (long 16rffff SHR -long_bits_width = long 16r0);
        assert (long long 16rffff SHR -long_long_bits_width = long long 16r0);
  
!       assert (short short 16rff SHL short_short_bits_width = short short 16r0);
        assert (short 16rffff SHL short_bits_width = short 16r0);
        assert (16rffff SHL bits_width = 16r0);
        assert (long 16rffff SHL long_bits_width = long 16r0);
        assert (long long 16rffff SHL long_long_bits_width = long long 16r0);
  
!       assert (short short 16rff SHL -short_short_bits_width = short short 16r0);
        assert (short 16rffff SHL -short_bits_width = short 16r0);
        assert (16rffff SHL -bits_width = 16r0);
        assert (long 16rffff SHL -long_bits_width = long 16r0);
diff -Nrcpad gcc-17-20260628/gcc/testsuite/algol68/execute/bits-shift-3.a68 gcc-17-20260705/gcc/testsuite/algol68/execute/bits-shift-3.a68
*** gcc-17-20260628/gcc/testsuite/algol68/execute/bits-shift-3.a68	Sun Jun 28 22:32:11 2026
--- gcc-17-20260705/gcc/testsuite/algol68/execute/bits-shift-3.a68	Sun Jul  5 22:32:11 2026
***************
*** 1,24 ****
  { Shifting by > L_bits_width results in all bits being zero. }
  
! begin assert (short short 16rffff SHR (short_short_bits_width + 1) = short short 16r0);
        assert (short 16rffff SHR (short_bits_width + 1) = short 16r0);
        assert (16rffff SHR (bits_width + 1) = 16r0);
        assert (long 16rffff SHR (long_bits_width + 1) = long 16r0);
        assert (long long 16rffff SHR (long_long_bits_width + 1) = long long 16r0);
  
!       assert (short short 16rffff SHR -(short_short_bits_width + 1) = short short 16r0);
        assert (short 16rffff SHR -(short_bits_width + 1) = short 16r0);
        assert (16rffff SHR -(bits_width + 1) = 16r0);
        assert (long 16rffff SHR -(long_bits_width + 1) = long 16r0);
        assert (long long 16rffff SHR -(long_long_bits_width + 1) = long long 16r0);
  
!       assert (short short 16rffff SHL (short_short_bits_width + 1) = short short 16r0);
        assert (short 16rffff SHL (short_bits_width + 1) = short 16r0);
        assert (16rffff SHL (bits_width + 1) = 16r0);
        assert (long 16rffff SHL (long_bits_width + 1) = long 16r0);
        assert (long long 16rffff SHL (long_long_bits_width + 1) = long long 16r0);
  
!       assert (short short 16rffff SHL -(short_short_bits_width + 1) = short short 16r0);
        assert (short 16rffff SHL -(short_bits_width + 1) = short 16r0);
        assert (16rffff SHL -(bits_width + 1) = 16r0);
        assert (long 16rffff SHL -(long_bits_width + 1) = long 16r0);
--- 1,24 ----
  { Shifting by > L_bits_width results in all bits being zero. }
  
! begin assert (short short 16rff SHR (short_short_bits_width + 1) = short short 16r0);
        assert (short 16rffff SHR (short_bits_width + 1) = short 16r0);
        assert (16rffff SHR (bits_width + 1) = 16r0);
        assert (long 16rffff SHR (long_bits_width + 1) = long 16r0);
        assert (long long 16rffff SHR (long_long_bits_width + 1) = long long 16r0);
  
!       assert (short short 16rff SHR -(short_short_bits_width + 1) = short short 16r0);
        assert (short 16rffff SHR -(short_bits_width + 1) = short 16r0);
        assert (16rffff SHR -(bits_width + 1) = 16r0);
        assert (long 16rffff SHR -(long_bits_width + 1) = long 16r0);
        assert (long long 16rffff SHR -(long_long_bits_width + 1) = long long 16r0);
  
!       assert (short short 16rff SHL (short_short_bits_width + 1) = short short 16r0);
        assert (short 16rffff SHL (short_bits_width + 1) = short 16r0);
        assert (16rffff SHL (bits_width + 1) = 16r0);
        assert (long 16rffff SHL (long_bits_width + 1) = long 16r0);
        assert (long long 16rffff SHL (long_long_bits_width + 1) = long long 16r0);
  
!       assert (short short 16rff SHL -(short_short_bits_width + 1) = short short 16r0);
        assert (short 16rffff SHL -(short_bits_width + 1) = short 16r0);
        assert (16rffff SHL -(bits_width + 1) = 16r0);
        assert (long 16rffff SHL -(long_bits_width + 1) = long 16r0);
diff -Nrcpad gcc-17-20260628/gcc/testsuite/algol68/execute/not-bits-1.a68 gcc-17-20260705/gcc/testsuite/algol68/execute/not-bits-1.a68
*** gcc-17-20260628/gcc/testsuite/algol68/execute/not-bits-1.a68	Sun Jun 28 22:32:11 2026
--- gcc-17-20260705/gcc/testsuite/algol68/execute/not-bits-1.a68	Sun Jul  5 22:32:11 2026
*************** BEGIN BITS b = 16rf0f0;
*** 8,13 ****
        ASSERT ((NOT bbb AND LONG LONG 16rffff) = LONG LONG 16r0f0f);
        SHORT BITS ss = SHORT 16rf0f0;
        ASSERT ((NOT ss AND SHORT 16rffff) = SHORT 16r0f0f);
!       SHORT SHORT BITS sss = SHORT SHORT 16rf0f0;
!       ASSERT ((NOT sss AND SHORT SHORT 16rffff) = SHORT SHORT 16r0f0f)
  END
--- 8,13 ----
        ASSERT ((NOT bbb AND LONG LONG 16rffff) = LONG LONG 16r0f0f);
        SHORT BITS ss = SHORT 16rf0f0;
        ASSERT ((NOT ss AND SHORT 16rffff) = SHORT 16r0f0f);
!       SHORT SHORT BITS sss = SHORT SHORT 16rf0;
!       ASSERT ((NOT sss AND SHORT SHORT 16rff) = SHORT SHORT 16r0f)
  END
diff -Nrcpad gcc-17-20260628/gcc/testsuite/algol68/execute/or-bits-1.a68 gcc-17-20260705/gcc/testsuite/algol68/execute/or-bits-1.a68
*** gcc-17-20260628/gcc/testsuite/algol68/execute/or-bits-1.a68	Sun Jun 28 22:32:11 2026
--- gcc-17-20260705/gcc/testsuite/algol68/execute/or-bits-1.a68	Sun Jul  5 22:32:11 2026
*************** BEGIN BITS b = 16rf0f0;
*** 12,18 ****
        SHORT BITS ss = SHORT 16rf0f0;
        ASSERT ((ss OR SHORT 16r0f0f) = SHORT 16rffff);
        ASSERT ((ss OR SHORT 16r00ff) = SHORT 16rf0ff);
!       SHORT SHORT BITS sss = SHORT SHORT 16rf0f0;
!       ASSERT ((sss OR SHORT SHORT 16r0f0f) = SHORT SHORT 16rffff);
!       ASSERT ((sss OR SHORT SHORT 16r00ff) = SHORT SHORT 16rf0ff)
  END
--- 12,18 ----
        SHORT BITS ss = SHORT 16rf0f0;
        ASSERT ((ss OR SHORT 16r0f0f) = SHORT 16rffff);
        ASSERT ((ss OR SHORT 16r00ff) = SHORT 16rf0ff);
!       SHORT SHORT BITS sss = SHORT SHORT 16rf0;
!       ASSERT ((sss OR SHORT SHORT 16r0f) = SHORT SHORT 16rff);
!       ASSERT ((sss OR SHORT SHORT 16rff) = SHORT SHORT 16rff)
  END
diff -Nrcpad gcc-17-20260628/gcc/testsuite/c-c++-common/cpp/embed-18.c gcc-17-20260705/gcc/testsuite/c-c++-common/cpp/embed-18.c
*** gcc-17-20260628/gcc/testsuite/c-c++-common/cpp/embed-18.c	Sun Jun 28 22:32:11 2026
--- gcc-17-20260705/gcc/testsuite/c-c++-common/cpp/embed-18.c	Sun Jul  5 22:32:11 2026
***************
*** 26,33 ****
  #embed "embed-18.c" gnu::base64("SA==") /* { dg-error "'gnu::base64' parameter can be only used with '\\\".\\\"'" } */
  #embed <embed-18.c> gnu::base64("SA==") /* { dg-error "'gnu::base64' parameter can be only used with '\\\".\\\"'" } */
  #embed <.> gnu::base64("SA==") /* { dg-error "'gnu::base64' parameter can be only used with '\\\".\\\"'" } */
! #embed "." gnu::base64("SA==") limit(3) /* { dg-error "'gnu::base64' parameter conflicts with 'limit' or 'gnu::offset' parameters" } */
! #embed "." gnu::base64("SA==") gnu::offset(1) /* { dg-error "'gnu::base64' parameter conflicts with 'limit' or 'gnu::offset' parameters" } */
  #if 1 + __has_embed ("." gnu::base64("") __gnu__::__base64__("")) /* { dg-error "duplicate embed parameter 'gnu::base64'" } */
  #endif
  #if 1 + __has_embed (__FILE__ __gnu__::__base64__ prefix() suffix()) /* { dg-error "expected '\\\('" } */
--- 26,33 ----
  #embed "embed-18.c" gnu::base64("SA==") /* { dg-error "'gnu::base64' parameter can be only used with '\\\".\\\"'" } */
  #embed <embed-18.c> gnu::base64("SA==") /* { dg-error "'gnu::base64' parameter can be only used with '\\\".\\\"'" } */
  #embed <.> gnu::base64("SA==") /* { dg-error "'gnu::base64' parameter can be only used with '\\\".\\\"'" } */
! #embed "." gnu::base64("SA==") limit(3) /* { dg-error "'gnu::base64' parameter conflicts with 'limit' or 'offset' or 'gnu::offset' parameters" } */
! #embed "." gnu::base64("SA==") gnu::offset(1) /* { dg-error "'gnu::base64' parameter conflicts with 'limit' or 'offset' or 'gnu::offset' parameters" } */
  #if 1 + __has_embed ("." gnu::base64("") __gnu__::__base64__("")) /* { dg-error "duplicate embed parameter 'gnu::base64'" } */
  #endif
  #if 1 + __has_embed (__FILE__ __gnu__::__base64__ prefix() suffix()) /* { dg-error "expected '\\\('" } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/c-c++-common/gomp/atomic-builtins-1.c gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/atomic-builtins-1.c
*** gcc-17-20260628/gcc/testsuite/c-c++-common/gomp/atomic-builtins-1.c	Sun Jun 28 22:32:11 2026
--- gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/atomic-builtins-1.c	Sun Jul  5 22:32:11 2026
***************
*** 1,4 ****
! /* { dg-do compile { target int128 } } */
  /* { dg-additional-options "-fdump-tree-ompexp" } */
  
  /* Check that an GIMPLE_OMP_ATOMIC statement expands to GOMP_atomic_start/end
--- 1,4 ----
! /* { dg-do compile { target { int128 && { ! sync_int_128 } } } } */
  /* { dg-additional-options "-fdump-tree-ompexp" } */
  
  /* Check that an GIMPLE_OMP_ATOMIC statement expands to GOMP_atomic_start/end
diff -Nrcpad gcc-17-20260628/gcc/testsuite/c-c++-common/gomp/uses_allocators-1.c gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/uses_allocators-1.c
*** gcc-17-20260628/gcc/testsuite/c-c++-common/gomp/uses_allocators-1.c	Sun Jun 28 22:32:11 2026
--- gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/uses_allocators-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,48 ****
- typedef enum omp_allocator_handle_t
- #if __cplusplus >= 201103L
- : __UINTPTR_TYPE__
- #endif
- {
-   omp_default_mem_alloc = 1,
-   omp_low_lat_mem_alloc = 5,
-   __omp_allocator_handle_t_max__ = __UINTPTR_MAX__
- } omp_allocator_handle_t;
- 
- typedef struct omp_alloctrait_t
- {
-   int key;
-   int value;
- } omp_alloctrait_t;
- 
- extern void *omp_alloc (__SIZE_TYPE__, omp_allocator_handle_t);
- 
- void
- f (omp_allocator_handle_t my_alloc)
- {
-   #pragma omp target
-   {
-     int a; /* { dg-error "'my_alloc' in 'allocator' clause inside a target region must be specified in an 'uses_allocators' clause on the 'target' directive" "not yet implemented" { xfail *-*-* } } */
-     #pragma omp allocate(a) allocator(my_alloc) /* { dg-message "sorry, unimplemented: '#pragma omp allocate' not yet supported" "" { target c++ } }  */
-     a  = 5;
-     void *prt = omp_alloc(32, my_alloc);
-     #pragma omp parallel allocate(allocator(my_alloc) : a) firstprivate(a) /* { dg-error "allocator 'my_alloc' in 'allocate' clause inside a target region must be specified in an 'uses_allocators' clause on the 'target' directive" "not yet implemented" { xfail *-*-* } } */
-       a = 7;
-   }
- }
- 
- void
- g (omp_allocator_handle_t my_alloc)
- {
-   /* The following defines a default-mem-space allocator with no extra traits. */
-   #pragma omp target uses_allocators(my_alloc)
-   {
-     int a;
-     #pragma omp allocate(a) allocator(my_alloc)  /* { dg-message "sorry, unimplemented: '#pragma omp allocate' not yet supported" "" { target c++ } }  */
-     a  = 5;
-     void *prt = omp_alloc(32, my_alloc);
-     #pragma omp parallel allocate(allocator(my_alloc) : a) firstprivate(a)
-       a = 7;
-   }
- }
- 
- // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target *-*-* } 37 }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/c-c++-common/gomp/uses_allocators-2.c gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/uses_allocators-2.c
*** gcc-17-20260628/gcc/testsuite/c-c++-common/gomp/uses_allocators-2.c	Sun Jun 28 22:32:11 2026
--- gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/uses_allocators-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,35 ****
- typedef enum omp_allocator_handle_t
- #if __cplusplus >= 201103L
- : __UINTPTR_TYPE__
- #endif
- {
-   omp_default_mem_alloc = 1,
-   omp_low_lat_mem_alloc = 5,
-   __omp_allocator_handle_t_max__ = __UINTPTR_MAX__
- } omp_allocator_handle_t;
- 
- typedef struct omp_alloctrait_t
- {
-   int key;
-   int value;
- } omp_alloctrait_t;
- 
- void
- f ()
- {
-    omp_alloctrait_t trait[1] = {{1,1}};
-    omp_allocator_handle_t my_alloc;
-    #pragma omp target uses_allocators(traits(trait) : my_alloc)  /* { dg-error "traits array 'trait' must be of 'const omp_alloctrait_t \\\[\\\]' type" } */
-      ;
- }
- 
- void
- g ()
- {
-    const omp_alloctrait_t trait[1] = {{1,1}};
-    omp_allocator_handle_t my_alloc;
-    #pragma omp target uses_allocators(traits(trait) : my_alloc)
-      ;
- }
- 
- // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target *-*-* } 31 }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/c-c++-common/gomp/uses_allocators-4.c gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/uses_allocators-4.c
*** gcc-17-20260628/gcc/testsuite/c-c++-common/gomp/uses_allocators-4.c	Sun Jun 28 22:32:11 2026
--- gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/uses_allocators-4.c	Thu Jan  1 00:00:00 1970
***************
*** 1,144 ****
- /* { dg-do compile } */
- /* { dg-additional-options "-Wno-deprecated-openmp" } */
- 
- //#include <omp.h>
- 
- typedef __UINTPTR_TYPE__ omp_uintptr_t;
- 
- #if __cplusplus >= 201103L
- # define __GOMP_UINTPTR_T_ENUM : omp_uintptr_t
- #else
- # define __GOMP_UINTPTR_T_ENUM
- #endif
- 
- typedef enum omp_memspace_handle_t __GOMP_UINTPTR_T_ENUM
- {
-   omp_default_mem_space = 0,
-   omp_large_cap_mem_space = 1,
-   omp_const_mem_space = 2,
-   omp_high_bw_mem_space = 3,
-   omp_low_lat_mem_space = 4,
-   ompx_gnu_managed_mem_space = 200,
-   __omp_memspace_handle_t_max__ = __UINTPTR_MAX__
- } omp_memspace_handle_t;
- 
- typedef enum omp_allocator_handle_t __GOMP_UINTPTR_T_ENUM
- {
-   omp_null_allocator = 0,
-   omp_default_mem_alloc = 1,
-   omp_large_cap_mem_alloc = 2,
-   omp_const_mem_alloc = 3,
-   omp_high_bw_mem_alloc = 4,
-   omp_low_lat_mem_alloc = 5,
-   omp_cgroup_mem_alloc = 6,
-   omp_pteam_mem_alloc = 7,
-   omp_thread_mem_alloc = 8,
-   ompx_gnu_pinned_mem_alloc = 200,
-   ompx_gnu_managed_mem_alloc = 201,
-   __omp_allocator_handle_t_max__ = __UINTPTR_MAX__
- } omp_allocator_handle_t;
- 
- typedef enum omp_alloctrait_key_t
- {
-   omp_atk_sync_hint = 1,
-   omp_atk_alignment = 2,
-   omp_atk_access = 3,
-   omp_atk_pool_size = 4,
-   omp_atk_fallback = 5,
-   omp_atk_fb_data = 6,
-   omp_atk_pinned = 7,
-   omp_atk_partition = 8
- } omp_alloctrait_key_t;
- 
- typedef enum omp_alloctrait_value_t
- {
-   omp_atv_default = (__UINTPTR_TYPE__) -1,
-   omp_atv_false = 0,
-   omp_atv_true = 1,
-   omp_atv_contended = 3,
-   omp_atv_uncontended = 4,
-   omp_atv_serialized = 5,
-   omp_atv_private = 6,
-   omp_atv_all = 7,
-   omp_atv_thread = 8,
-   omp_atv_pteam = 9,
-   omp_atv_cgroup = 10,
-   omp_atv_default_mem_fb = 11,
-   omp_atv_null_fb = 12,
-   omp_atv_abort_fb = 13,
-   omp_atv_allocator_fb = 14,
-   omp_atv_environment = 15,
-   omp_atv_nearest = 16,
-   omp_atv_blocked = 17,
-   omp_atv_interleaved = 18
- } omp_alloctrait_value_t;
- 
- typedef struct omp_alloctrait_t
- {
-   omp_alloctrait_key_t key;
-   omp_uintptr_t value;
- } omp_alloctrait_t;
- 
- omp_alloctrait_key_t k;
- omp_alloctrait_value_t v;
- 
- int f (const omp_alloctrait_t arg_traits[], int n)
- {
-   omp_allocator_handle_t foo, bar;
-   const omp_alloctrait_t traits_array[] = { { omp_atk_pinned,    omp_atv_true },
- 					    { omp_atk_partition, omp_atv_nearest } };
-   extern const omp_alloctrait_t ex_traits[2];
-   extern const omp_alloctrait_t ex2_traits[];
- #ifndef __cplusplus
-   const omp_alloctrait_t vla_traits[n] = {};  /* Not useful, but shouldn't crash.  */
- #else
-   const omp_alloctrait_t vla_traits[n] = { { omp_atk_pinned,    omp_atv_true },
-   					   { omp_atk_partition, omp_atv_nearest } };
- #endif
- 
-   #pragma omp target uses_allocators (baz) /* { dg-error "'baz' undeclared .first use in this function." "" { target c } } */
-     ;                                      /* { dg-error "'baz' has not been declared" "" { target c++ } .-1 } */
-   #pragma omp target uses_allocators (foo (xyz)) /* { dg-error "'xyz' undeclared .first use in this function." "" { target c } } */
-     ;                                            /* { dg-error "'xyz' has not been declared" "" { target c++ } .-1 } */
-   #pragma omp target uses_allocators (foo (traits_array), baz (traits_array)) /* { dg-error "'baz' has not been declared" "" { target c++ } } */
-     ;
-   #pragma omp target uses_allocators (foo (arg_traits)) /* { dg-error "traits array 'arg_traits' must be defined in same scope as the construct on which the clause appears" } */
-     ;                                                   /* { dg-error "traits array 'arg_traits' must be of 'const omp_alloctrait_t \\\[\\\]' type" "" { target *-*-* } .-1 } */
-   #pragma omp target uses_allocators (foo (ex_traits)) /* { dg-error "traits array 'ex_traits' must be defined in same scope as the construct on which the clause appears" } */
-     ;                                                  /* { dg-error "traits array must be initialized with constants" "" { target *-*-* } .-1 } */
-   #pragma omp target uses_allocators (foo (ex2_traits)) /* { dg-error "traits array 'ex2_traits' must be defined in same scope as the construct on which the clause appears" } */
-     ;                                                   /* { dg-error "traits array 'ex2_traits' must be of 'const omp_alloctrait_t \\\[\\\]' type" "" { target *-*-* } .-1 } */
-   #pragma omp target uses_allocators (foo (vla_traits)) /* { dg-error "variable length traits arrays are not supported" "" { target c++ } } */
-     ;
-   #pragma omp target uses_allocators (memspace(omp_no_such_space) : foo) /* { dg-error "'omp_no_such_space' undeclared .first use in this function." "" { target c } } */
-     ;                                                                    /* { dg-error "'omp_no_such_space' was not declared in this scope" "" { target c++ } .-1 } */
-   #pragma omp target uses_allocators (memspace(1) : foo) /* { dg-error "memspace modifier '1' must be constant enum of 'omp_memspace_handle_t' type" } */
-     ;
-   #pragma omp target uses_allocators (memspace(omp_no_such_space) : foo, bar) /* { dg-error "'uses_allocators' clause only accepts a single allocator when using modifiers" } */
-     ;                                                                         /* { dg-error "memspace modifier 'omp_no_such_space' must be constant enum of 'omp_memspace_handle_t' type" "" { target c++ } .-1 } */
-   #pragma omp target uses_allocators (traits(xyz) : bar) /* { dg-error "'xyz' was not declared in this scope" "" { target c++ } } */
-     ;
-   #pragma omp target uses_allocators (memspace(omp_high_bw_mem_space), traits(traits_array), memspace (omp_no_such_space) : bar) /* { dg-error "duplicate 'memspace' modifier" "" { target c } } */
-     ;                                                                                                                            /* { dg-error "expected '\\\)' before 'memspace" "" { target c } .-1 } */
-                                                                                                                                  /* { dg-error "duplicate 'memspace' modifier" "" { target c++ } .-2 } */
-   #pragma omp target uses_allocators (traitz(traits_array), memspace(omp_high_bw_mem_space) : bar) /* { dg-error "'traitz' undeclared .first use in this function." "" { target c } } */
-     ;                                                                                              /* { dg-error "'memspace' undeclared .first use in this function." "" { target c } .-1 } */
-                                                                                                    /* { dg-error "'traitz' has not been declared" "" { target c++ } .-2 } */
-                                                                                                    /* { dg-error "'memspace' has not been declared" "" { target c++ } .-3 } */
-                                                                                                    /* { dg-error "expected '\\\)' before ':' token" "" { target *-*-* } .-4 } */
-   #pragma omp target uses_allocators (omp_null_allocator)
-     ;
-   #pragma omp target uses_allocators (memspace(omp_high_bw_mem_space) : foo, bar) /* { dg-error "'uses_allocators' clause only accepts a single allocator when using modifiers" } */
-     ;
-   #pragma omp target uses_allocators (memspace(omp_high_bw_mem_space) : foo(foo_traits)) /* { dg-error "'foo_traits' undeclared .first use in this function.; did you mean 'vla_traits'." "" { target c } } */
-     ;                                                                                    /* { dg-error "'foo_traits' has not been declared" "" { target c++ } .-1 } */
-                                                                                          /* { dg-error "legacy 'foo\\\(foo_traits\\\)' traits syntax not allowed in 'uses_allocators' clause when using modifiers" "" { target *-*-* } .-2 } */
-   return 0;
- }
- 
- // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target *-*-* } 103 }
- // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target c } 111 }
- // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target c } 113 }
- // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target c } 117 }
- // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target c } 119 }
- // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target *-*-* } 131 }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/c-c++-common/gomp/uses_allocators-7.c gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/uses_allocators-7.c
*** gcc-17-20260628/gcc/testsuite/c-c++-common/gomp/uses_allocators-7.c	Sun Jun 28 22:32:11 2026
--- gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/uses_allocators-7.c	Thu Jan  1 00:00:00 1970
***************
*** 1,83 ****
- // { dg-do compile }
- 
- //#include <omp.h>
- 
- typedef __UINTPTR_TYPE__ omp_uintptr_t;
- 
- #if __cplusplus >= 201103L
- # define __GOMP_UINTPTR_T_ENUM : omp_uintptr_t
- #else
- # define __GOMP_UINTPTR_T_ENUM
- #endif
- 
- typedef enum omp_memspace_handle_t __GOMP_UINTPTR_T_ENUM
- {
-   omp_default_mem_space = 0,
-   omp_large_cap_mem_space = 1,
-   omp_const_mem_space = 2,
-   omp_high_bw_mem_space = 3,
-   omp_low_lat_mem_space = 4,
-   ompx_gnu_managed_mem_space = 200,
-   __omp_memspace_handle_t_max__ = __UINTPTR_MAX__
- } omp_memspace_handle_t;
- 
- typedef enum omp_allocator_handle_t __GOMP_UINTPTR_T_ENUM
- {
-   omp_null_allocator = 0,
-   omp_default_mem_alloc = 1,
-   omp_large_cap_mem_alloc = 2,
-   omp_const_mem_alloc = 3,
-   omp_high_bw_mem_alloc = 4,
-   omp_low_lat_mem_alloc = 5,
-   omp_cgroup_mem_alloc = 6,
-   omp_pteam_mem_alloc = 7,
-   omp_thread_mem_alloc = 8,
-   ompx_gnu_pinned_mem_alloc = 200,
-   ompx_gnu_managed_mem_alloc = 201,
-   __omp_allocator_handle_t_max__ = __UINTPTR_MAX__
- } omp_allocator_handle_t;
- 
- typedef struct omp_alloctrait_t
- {
- //  omp_alloctrait_key_t key;
- //  omp_uintptr_t value;
- } omp_alloctrait_t;
- 
- 
- void f()
- {
-  omp_allocator_handle_t my;
-  struct t {
-    omp_allocator_handle_t a1;
-  } s;
- 
- const omp_allocator_handle_t my3 = (omp_allocator_handle_t) 300;
- omp_allocator_handle_t my4[1];
- const omp_alloctrait_t t[] = {};
-  #pragma omp target uses_allocators(my, omp_default_mem_alloc, omp_null_allocator)  // OK
-    ;
-  #pragma omp target uses_allocators(my) firstprivate(my) // { dg-error "'my' appears more than once in data clauses" }
-    ;
-  #pragma omp target private(my) uses_allocators(my) // { dg-error "'my' appears more than once in data clauses" }
-    ;
-  #pragma omp target uses_allocators(my3)
-    ;
-  #pragma omp target uses_allocators(s.a1)
-    // { dg-error "expected '\\)' before '\\.' token" "" { target *-*-* } .-1 }
-    // { dg-error "allocator 's' must be of 'omp_allocator_handle_t' type" "" { target *-*-* } .-2 }
-    ;
-  #pragma omp target uses_allocators(my4)
-    // { dg-error "allocator 'my4' must be of 'omp_allocator_handle_t' type" "" { target *-*-* } .-1 }
-    ;
-  #pragma omp target uses_allocators(my4[0])
-    // { dg-error "expected '\\)' before '\\\[' token" "" { target *-*-* } .-1 }
-    // { dg-error "allocator 'my4' must be of 'omp_allocator_handle_t' type" "" { target *-*-* } .-2 }
-    ;
-  #pragma omp target uses_allocators(memspace(omp_default_mem_space) : my, my(t)) // { dg-error "legacy 'my\\(t\\)' traits syntax not allowed in 'uses_allocators' clause when using modifiers" }
-    ;
- }
- 
- // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target *-*-* } 57 }
- // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target *-*-* } 61 }
- // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target *-*-* } 63 }
- // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target *-*-* } 76 }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/c-c++-common/gomp/uses_allocators-8.c gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/uses_allocators-8.c
*** gcc-17-20260628/gcc/testsuite/c-c++-common/gomp/uses_allocators-8.c	Sun Jun 28 22:32:11 2026
--- gcc-17-20260705/gcc/testsuite/c-c++-common/gomp/uses_allocators-8.c	Thu Jan  1 00:00:00 1970
***************
*** 1,61 ****
- // { dg-do compile }
- // { dg-additional-options "-fdump-tree-original" }
- 
- //#include <omp.h>
- 
- typedef __UINTPTR_TYPE__ omp_uintptr_t;
- 
- #if __cplusplus >= 201103L
- # define __GOMP_UINTPTR_T_ENUM : omp_uintptr_t
- #else
- # define __GOMP_UINTPTR_T_ENUM
- #endif
- 
- typedef enum omp_memspace_handle_t __GOMP_UINTPTR_T_ENUM
- {
-   omp_default_mem_space = 0,
-   omp_large_cap_mem_space = 1,
-   omp_const_mem_space = 2,
-   omp_high_bw_mem_space = 3,
-   omp_low_lat_mem_space = 4,
-   ompx_gnu_managed_mem_space = 200,
-   __omp_memspace_handle_t_max__ = __UINTPTR_MAX__
- } omp_memspace_handle_t;
- 
- typedef enum omp_allocator_handle_t __GOMP_UINTPTR_T_ENUM
- {
-   omp_null_allocator = 0,
-   omp_default_mem_alloc = 1,
-   omp_large_cap_mem_alloc = 2,
-   omp_const_mem_alloc = 3,
-   omp_high_bw_mem_alloc = 4,
-   omp_low_lat_mem_alloc = 5,
-   omp_cgroup_mem_alloc = 6,
-   omp_pteam_mem_alloc = 7,
-   omp_thread_mem_alloc = 8,
-   ompx_gnu_pinned_mem_alloc = 200,
-   ompx_gnu_managed_mem_alloc = 201,
-   __omp_allocator_handle_t_max__ = __UINTPTR_MAX__
- } omp_allocator_handle_t;
- 
- typedef struct omp_alloctrait_t
- {
- //  omp_alloctrait_key_t key;
- //  omp_uintptr_t value;
- } omp_alloctrait_t;
- 
- 
- void f()
- {
-  omp_allocator_handle_t my, my2, my3, my4;
- const omp_alloctrait_t t[] = {};
- const omp_alloctrait_t t2[] = {};
-  #pragma omp target uses_allocators(traits(t), memspace(omp_high_bw_mem_space) : my; omp_default_mem_alloc, omp_null_allocator; my2; traits(t2) : my3; memspace(omp_large_cap_mem_space) : my4)
-    ;
- }
- 
- // { dg-final { scan-tree-dump "#pragma omp target uses_allocators\\(memspace\\(1\\), traits\\(\\) : my4\\) uses_allocators\\(memspace\\(\\), traits\\(t2\\) : my3\\) uses_allocators\\(memspace\\(\\), traits\\(\\) : my2\\) uses_allocators\\(memspace\\(3\\), traits\\(t\\) : my\\)" "original" { target c } } }
- // { dg-final { scan-tree-dump "#pragma omp target uses_allocators\\(memspace\\(omp_large_cap_mem_space\\), traits\\(\\) : my4\\) uses_allocators\\(memspace\\(\\), traits\\(t2\\) : my3\\) uses_allocators\\(memspace\\(\\), traits\\(\\) : my2\\) uses_allocators\\(memspace\\(omp_high_bw_mem_space\\), traits\\(t\\) : my\\)" "original" { target c++ } } }
- 
- 
- // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target *-*-* } 53 }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.cob gcc-17-20260705/gcc/testsuite/cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.cob
*** gcc-17-20260628/gcc/testsuite/cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.cob	Sun Jun 28 22:32:11 2026
--- gcc-17-20260705/gcc/testsuite/cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.cob	Thu Jan  1 00:00:00 1970
***************
*** 1,123 ****
-        *> { dg-do run }
-        *> { dg-output-file "group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.out" }
-         identification          division.
-         program-id.             prog.
-         procedure               division.
-         display "initialize zeroes"
-             call                    "prog-zeroes"
-         display "initialize low-value"
-             call                    "prog-low"
-         display "initialize spaces"
-             call                    "prog-space"
-         display "initialize high-value"
-             call                    "prog-high"
-         continue.
-         end program             prog.
- 
-         identification          division.
-         program-id.             prog-space.
-         options. initialize working-storage spaces.
-         data                    division.
-         working-storage         section.
-         01   based-var          based.
-          02  based-x            pic x(24) value "I am I, Don Quixote".
-          02  based-9            pic 999   value 123.
-          02  based-p            pointer   value NULL.
-         01   allocated-pointer  pointer.
-         procedure division.
-         display     "allocate characters  (ISO 2023 Rule 8: OPT_INIT if specified, otherwise defaultbyte, otherwise zero)"
-         allocate 35 characters returning allocated-pointer
-         set address of based-var to allocated-pointer
-         call        "reporter" using based-var
-         free        allocated-pointer
-         goback.
-         end program             prog-space.
- 
-         identification          division.
-         program-id.             prog-low.
-         options. initialize working-storage low-values.
-         data                    division.
-         working-storage         section.
-         01   based-var          based.
-          02  based-x            pic x(24) value "I am I, Don Quixote".
-          02  based-9            pic 999   value 123.
-          02  based-p            pointer   value NULL.
-         01   allocated-pointer  pointer.
-         procedure division.
-         display     "allocate characters  (ISO 2023 Rule 8: OPT_INIT if specified, otherwise defaultbyte, otherwise zero)"
-         allocate 35 characters returning allocated-pointer
-         set address of based-var to allocated-pointer
-         call        "reporter" using based-var
-         free        allocated-pointer
-         goback.
-         end program             prog-low.
- 
-         identification          division.
-         program-id.             prog-zeroes.
-         options. initialize working-storage binary zeroes.
-         data                    division.
-         working-storage         section.
-         01   based-var          based.
-          02  based-x            pic x(24) value "I am I, Don Quixote".
-          02  based-9            pic 999   value 123.
-          02  based-p            pointer   value NULL.
-         01   allocated-pointer  pointer.
-         procedure division.
-         display     "allocate characters  (ISO 2023 Rule 8: OPT_INIT if specified, otherwise defaultbyte, otherwise zero)"
-         allocate 35 characters returning allocated-pointer
-         set address of based-var to allocated-pointer
-         call        "reporter" using based-var
-         free        allocated-pointer
-         goback.
-         end program             prog-zeroes.
- 
-         identification          division.
-         program-id.             prog-high.
-         options. initialize working-storage high-values.
-         data                    division.
-         working-storage         section.
-         01   based-var          based.
-          02  based-x            pic x(24) value "I am I, Don Quixote".
-          02  based-9            pic 999   value 123.
-          02  based-p            pointer   value NULL.
-         01 pval redefines based-var pointer.
-         01   allocated-pointer  pointer.
-         procedure division.
-         display     "allocate characters  (ISO 2023 Rule 8: OPT_INIT if specified, otherwise defaultbyte, otherwise zero)"
-         allocate 35 characters returning allocated-pointer
-         set address of based-var to allocated-pointer
-         display pval
-         free        allocated-pointer
-         goback.
-         end program             prog-high.
- 
-         identification          division.
-         program-id.             reporter.
-         data                    division.
-         working-storage         section.
-         01.
-             02 asciiv  pic x(8) value X"2020202020202020".
-             02 asciip  redefines asciiv pointer.
-             02 ebcdicv pic x(8) value X"4040404040404040".
-             02 ebcdicp redefines ebcdicv pointer.
-         linkage                 section.
-         01   based-var          based.
-          02  based-x            pic x(24).
-          02  based-9            pic 999  .
-          02  based-p            pointer  .
-         procedure division      using based-var.
-         reportt.
-             display "   (1) as allocated"
-             perform reportt2
-             goback.
-         reportt2.
-             display "       " """" based-x """" with no advancing
-             display space     """" based-9 """" with no advancing
-             if based-p = asciip or ebcdicp
-                 display " Pointer is Okay"
-             else
-                 display space       based-p
-                 end-if
-             continue.
-         end program             reporter.
- 
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.out gcc-17-20260705/gcc/testsuite/cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.out
*** gcc-17-20260628/gcc/testsuite/cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.out	Sun Jun 28 22:32:11 2026
--- gcc-17-20260705/gcc/testsuite/cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.out	Thu Jan  1 00:00:00 1970
***************
*** 1,16 ****
- initialize zeroes
- allocate characters  (ISO 2023 Rule 8: OPT_INIT if specified, otherwise defaultbyte, otherwise zero)
-    (1) as allocated
-        "" "000" 0x0000000000000000
- initialize low-value
- allocate characters  (ISO 2023 Rule 8: OPT_INIT if specified, otherwise defaultbyte, otherwise zero)
-    (1) as allocated
-        "" "000" 0x0000000000000000
- initialize spaces
- allocate characters  (ISO 2023 Rule 8: OPT_INIT if specified, otherwise defaultbyte, otherwise zero)
-    (1) as allocated
-        "                        " "000" Pointer is Okay
- initialize high-value
- allocate characters  (ISO 2023 Rule 8: OPT_INIT if specified, otherwise defaultbyte, otherwise zero)
- 0xffffffffffffffff
- 
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/coroutines/pmf-121094.C gcc-17-20260705/gcc/testsuite/g++.dg/coroutines/pmf-121094.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/coroutines/pmf-121094.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/g++.dg/coroutines/pmf-121094.C	Sun Jul  5 22:32:11 2026
***************
*** 0 ****
--- 1,23 ----
+ // PR c++/121094
+ 
+ #include <coroutine>
+ 
+ struct Future {
+   struct promise_type {
+     Future get_return_object() { return {}; }
+     std::suspend_never initial_suspend() noexcept { return {}; }
+     std::suspend_never final_suspend() noexcept { return {}; }
+     void return_void() {}
+     void unhandled_exception() {}
+   };
+   bool await_ready() { return true; }
+   void await_suspend(std::coroutine_handle<>) {}
+   void await_resume() {}
+ };
+ 
+ struct Foo {
+   Future test(Future (Foo::*fn)()) {
+     co_await (this->*fn)();
+     co_return;
+   }
+ };
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/coroutines/torture/tuple-decomp-pr124584.C gcc-17-20260705/gcc/testsuite/g++.dg/coroutines/torture/tuple-decomp-pr124584.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/coroutines/torture/tuple-decomp-pr124584.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/g++.dg/coroutines/torture/tuple-decomp-pr124584.C	Sun Jul  5 22:32:11 2026
***************
*** 0 ****
--- 1,54 ----
+ #include <coroutine>
+ #include <tuple>
+ 
+ static int g_dtor_count = 0;
+ 
+ struct guard {
+   bool live_ = true;
+   ~guard() { if (live_) ++g_dtor_count; }
+   guard() = default;
+   guard(guard&& o) noexcept
+     : live_(o.live_) {o.live_ = false;}
+ };
+ 
+ static std::coroutine_handle<> g_pending;
+ 
+ struct yield_aw {
+   bool await_ready() const noexcept { return false; }
+   void await_suspend(std::coroutine_handle<> h) noexcept
+   { g_pending = h; }
+   void await_resume() const noexcept {}
+ };
+ 
+ struct task {
+   struct promise_type {
+     task get_return_object() noexcept {
+       return {std::coroutine_handle<
+ 	promise_type>::from_promise(*this)};
+     }
+     std::suspend_never  initial_suspend() noexcept { return {}; }
+     std::suspend_always final_suspend()   noexcept { return {}; }
+     void return_void() noexcept {}
+     void unhandled_exception() { __builtin_abort(); }
+   };
+   std::coroutine_handle<promise_type> h_;
+   ~task() { if (h_) h_.destroy(); }
+ };
+ 
+ std::tuple<guard> make_guarded_tuple() { return {guard{}}; }
+ 
+ task test_fn() {
+   auto [g] = make_guarded_tuple();   // not co_await
+   co_await yield_aw{};                // binding crosses suspend
+   (void)g;
+ }
+ 
+ int main() {
+   auto t = test_fn();
+   auto h = g_pending;
+   g_pending = nullptr;
+   h.resume();
+   __builtin_printf("dtor_count = %d  %s\n",
+ 		   g_dtor_count, g_dtor_count > 0 ? "OK" : "BUG");
+   return g_dtor_count > 0 ? 0 : 1;
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/cpp/embed-30.C gcc-17-20260705/gcc/testsuite/g++.dg/cpp/embed-30.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/cpp/embed-30.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/g++.dg/cpp/embed-30.C	Sun Jul  5 22:32:11 2026
***************
*** 0 ****
--- 1,87 ----
+ // { dg-do run }
+ // { dg-options "--embed-dir=${srcdir}/c-c++-common/cpp/embed-dir -Wno-c++29-extensions" }
+ 
+ #if __has_embed (__FILE__ offset (4 + FOOBAR) limit (3)) != __STDC_EMBED_FOUND__
+ #error "__has_embed fail"
+ #endif
+ 
+ #embed <magna-carta.txt> limit(1) offset (0) prefix(int a = ) suffix (;) 
+ #embed <magna-carta.txt> limit(1) offset (1 * 1) prefix(int b = ) suffix (;) 
+ #embed <magna-carta.txt> limit(1) __offset__ (1 + 1) prefix(int c = ) suffix (;) 
+ #embed <magna-carta.txt> __limit__(1) __offset__ (1 + (1 \
+   + 1)) __prefix__(int d = ) __suffix__ (;)
+ const unsigned char e[] = {
+   #embed <magna-carta.txt> limit(5) offset (999)
+ };
+ const unsigned char f[] = {
+   #embed <magna-carta.txt> limit(7) offset (998)
+ };
+ const unsigned char g[] = {
+   #embed <magna-carta.txt> limit(8) offset (998)
+ };
+ const unsigned char h[] = {
+   #embed <magna-carta.txt> limit(8) offset (997)
+ };
+ const unsigned char i[] = {
+   #embed <magna-carta.txt> limit(9) offset (997)
+ };
+ const unsigned char j[] = {
+   #embed <magna-carta.txt> limit(30) offset (990)
+ };
+ const unsigned char k[] = {
+   #embed <magna-carta.txt> limit(26) offset (992)
+ };
+ const unsigned char l[] = {
+   #embed <magna-carta.txt>
+ };
+ const unsigned char m[] = {
+   #embed <magna-carta.txt> __limit__ (1000) __offset__ (32)
+ };
+ #if __has_embed (<magna-carta.txt> limit(5) offset (999)) != __STDC_EMBED_FOUND__ \
+     || __has_embed (<magna-carta.txt> limit(5) offset (999)) != __STDC_EMBED_FOUND__ \
+     || __has_embed (<magna-carta.txt> limit(7) offset (998)) != __STDC_EMBED_FOUND__ \
+     || __has_embed (<magna-carta.txt> limit(8) offset (998)) != __STDC_EMBED_FOUND__ \
+     || __has_embed (<magna-carta.txt> limit(8) offset (997)) != __STDC_EMBED_FOUND__ \
+     || __has_embed (<magna-carta.txt> limit(9) offset (997)) != __STDC_EMBED_FOUND__ \
+     || __has_embed (<magna-carta.txt> limit(30) offset (990)) != __STDC_EMBED_FOUND__ \
+     || __has_embed (<magna-carta.txt> limit(26) offset (992)) != __STDC_EMBED_FOUND__ \
+     || __has_embed (<magna-carta.txt>) != __STDC_EMBED_FOUND__ \
+     || __has_embed (<magna-carta.txt> limit(26) offset (992)) != __STDC_EMBED_FOUND__
+ #error "__has_embed fail"
+ #endif
+ 
+ #ifdef __cplusplus
+ #define C "C"
+ #else
+ #define C
+ #endif
+ extern C void abort (void);
+ extern C int memcmp (const void *, const void *, __SIZE_TYPE__);
+ 
+ int
+ main ()
+ {
+   if (a != 'H' || b != 'e' || c != 'n' || d != 'r')
+     abort ();
+   if (sizeof (e) != 5
+       || sizeof (f) != 7
+       || sizeof (g) != 8
+       || sizeof (h) != 8
+       || sizeof (i) != 9
+       || sizeof (j) != 30
+       || sizeof (k) != 26
+       || sizeof (l) < 1032
+       || sizeof (m) != 1000)
+     abort ();
+   if (memcmp (e, l + 999, 5)
+       || memcmp (f, l + 998, 7)
+       || memcmp (g, l + 998, 8)
+       || memcmp (h, l + 997, 8)
+       || memcmp (i, l + 997, 9)
+       || memcmp (j, l + 990, 30)
+       || memcmp (k, l + 992, 26)
+       || memcmp (m, l + 32, 1000))
+     abort ();
+   if (l[0] != 'H' || l[1] != 'e' || l[2] != 'n' || l[3] != 'r')
+     abort ();
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/cpp/embed-31.C gcc-17-20260705/gcc/testsuite/g++.dg/cpp/embed-31.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/cpp/embed-31.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/g++.dg/cpp/embed-31.C	Sun Jul  5 22:32:11 2026
***************
*** 0 ****
--- 1,43 ----
+ // { dg-do preprocess }
+ // { dg-options "-Wno-c++29-extensions" }
+ 
+ #embed __FILE__ offset(1) offset(1) // { dg-error "duplicate embed parameter 'offset'" }
+ #embed __FILE__ offset prefix() suffix() // { dg-error "expected '\\\('" }
+ #embed __FILE__ offset (1 / 0) // { dg-error "division by zero in #embed" }
+ #embed __FILE__ __offset__ (+ + +) // { dg-error "operator '\\\+' has no right operand" }
+ #define FOO 1
+ #embed __FILE__ offset(0 + defined(FOO)) // { dg-error "'defined' in '#embed' parameter" }
+ #embed __FILE__ offset (-1) // { dg-error "negative embed parameter operand" }
+ #embed __FILE__ offset (-42) // { dg-error "negative embed parameter operand" }
+ #embed __FILE__ offset (-9223372036854775807 - 1) // { dg-error "negative embed parameter operand" }
+ #embed __FILE__ offset (18446744073709551615ULL) // { dg-error "too large 'offset' argument" }
+ #embed __FILE__ offset(0) gnu::offset(0) // { dg-error "'gnu::offset' parameter conflicts with 'offset' parameter" }
+ #embed __FILE__ gnu::offset(0) offset(0) // { dg-error "'offset' parameter conflicts with 'gnu::offset' parameter" }
+ #embed __FILE__ __offset__(0) __gnu__::__offset__(0) // { dg-error "'gnu::offset' parameter conflicts with 'offset' parameter" }
+ #embed __FILE__ __gnu__::__offset__(0) __offset__(0) // { dg-error "'offset' parameter conflicts with 'gnu::offset' parameter" }
+ #if 1 + __has_embed (__FILE__ offset(1) __offset__(1)) // { dg-error "duplicate embed parameter 'offset'" }
+ #endif
+ #if 1 + __has_embed (__FILE__ __offset__ prefix() suffix()) // { dg-error "expected '\\\('" }
+ #endif
+ #if 1 + __has_embed (__FILE__ offset(1/0)) // { dg-error "division by zero in #embed" }
+ #endif
+ #if 1 + __has_embed (__FILE__ offset(+ + +)) // { dg-error "operator '\\\+' has no right operand" }
+ #endif
+ #if 1 + __has_embed (__FILE__ offset(0 + defined(FOO))) // { dg-error "'defined' in '#embed' parameter" }
+ #endif
+ #if 1 + __has_embed (__FILE__ offset (-1)) // { dg-error "negative embed parameter operand" }
+ #endif
+ #if 1 + __has_embed (__FILE__ offset (-42)) // { dg-error "negative embed parameter operand" }
+ #endif
+ #if 1 + __has_embed (__FILE__ offset (-9223372036854775807 - 1)) // { dg-error "negative embed parameter operand" }
+ #endif
+ #if 1 + __has_embed (__FILE__ offset (18446744073709551615ULL)) // { dg-error "too large 'offset' argument" }
+ #endif
+ #if 1 + __has_embed (__FILE__ offset (0) gnu::offset (0)) // { dg-error "'gnu::offset' parameter conflicts with 'offset' parameter" }
+ #endif
+ #if 1 + __has_embed (__FILE__ gnu::offset (0) offset (0)) // { dg-error "'offset' parameter conflicts with 'gnu::offset' parameter" }
+ #endif
+ #if 1 + __has_embed (__FILE__ __offset__ (0) __gnu__::__offset__ (0)) // { dg-error "'gnu::offset' parameter conflicts with 'offset' parameter" }
+ #endif
+ #if 1 + __has_embed (__FILE__ __gnu__::__offset__ (0) __offset__ (0)) // { dg-error "'offset' parameter conflicts with 'gnu::offset' parameter" }
+ #endif
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/cpp/embed-32.C gcc-17-20260705/gcc/testsuite/g++.dg/cpp/embed-32.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/cpp/embed-32.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/g++.dg/cpp/embed-32.C	Sun Jul  5 22:32:11 2026
***************
*** 0 ****
--- 1,4 ----
+ // { dg-do preprocess }
+ // { dg-options "--embed-dir=${srcdir}/c-c++-common/cpp/embed-dir" }
+ 
+ #embed <magna-carta.txt> limit(1) offset (0) prefix(int a = ) suffix (;) // { dg-warning "'offset' parameter before C\\\+\\\+29 is a GCC extension" "" { target c++26_down } }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/cpp0x/defaulted51.C gcc-17-20260705/gcc/testsuite/g++.dg/cpp0x/defaulted51.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/cpp0x/defaulted51.C	Sun Jun 28 22:32:11 2026
--- gcc-17-20260705/gcc/testsuite/g++.dg/cpp0x/defaulted51.C	Sun Jul  5 22:32:11 2026
***************
*** 4,10 ****
  template<int> struct A
  {
    A();
!   A(volatile A&) = default;  // { dg-error "defaulted" "" { target c++17_down } }
  };
  
  struct B
--- 4,10 ----
  template<int> struct A
  {
    A();
!   A(volatile A&) = default;  // { dg-error "defaulted" "" { target { c++17_down || c++29 } } }
  };
  
  struct B
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/cpp0x/defaulted55.C gcc-17-20260705/gcc/testsuite/g++.dg/cpp0x/defaulted55.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/cpp0x/defaulted55.C	Sun Jun 28 22:32:11 2026
--- gcc-17-20260705/gcc/testsuite/g++.dg/cpp0x/defaulted55.C	Sun Jul  5 22:32:11 2026
*************** template<typename T> struct W
*** 12,18 ****
    W();
    W(W&) = default;
    // T1 and T2 may have differing ref-qualifiers (copy assign op).
!   constexpr W& operator=(const W&) && = default; // { dg-error "defaulted" "" { target c++11_down } }
    T t;
  };
  
--- 12,18 ----
    W();
    W(W&) = default;
    // T1 and T2 may have differing ref-qualifiers (copy assign op).
!   constexpr W& operator=(const W&) && = default; // { dg-error "defaulted" "" { target { c++11_down || c++29 } } }
    T t;
  };
  
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/cpp0x/defaulted56.C gcc-17-20260705/gcc/testsuite/g++.dg/cpp0x/defaulted56.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/cpp0x/defaulted56.C	Sun Jun 28 22:32:11 2026
--- gcc-17-20260705/gcc/testsuite/g++.dg/cpp0x/defaulted56.C	Sun Jul  5 22:32:11 2026
*************** struct S
*** 11,24 ****
  
  struct T
  {
!   constexpr T(volatile T &) = default; // { dg-error "defaulted" "" { target c++17_down } }
! 				       // { dg-warning "implicitly deleted" "" { target c++20 } .-1 }
  };
  
  struct U
  {
!   constexpr U(const volatile U &) = default; // { dg-error "defaulted" "" { target c++17_down } }
! 					     // { dg-warning "implicitly deleted" "" { target c++20 } .-1 }
  };
  
  struct V
--- 11,24 ----
  
  struct T
  {
!   constexpr T(volatile T &) = default; // { dg-error "defaulted" "" { target { c++17_down || c++29 } } }
! 				       // { dg-warning "implicitly deleted" "" { target { c++20 && c++26_down } } .-1 }
  };
  
  struct U
  {
!   constexpr U(const volatile U &) = default; // { dg-error "defaulted" "" { target { c++17_down || c++29 } } }
! 					     // { dg-warning "implicitly deleted" "" { target { c++20 && c++26_down } } .-1 }
  };
  
  struct V
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/cpp0x/defaulted57.C gcc-17-20260705/gcc/testsuite/g++.dg/cpp0x/defaulted57.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/cpp0x/defaulted57.C	Sun Jun 28 22:32:11 2026
--- gcc-17-20260705/gcc/testsuite/g++.dg/cpp0x/defaulted57.C	Sun Jul  5 22:32:11 2026
*************** struct S
*** 11,24 ****
  
  struct T
  {
!   T& operator=(volatile T &) = default; // { dg-error "defaulted" "" { target c++17_down } }
! 					// { dg-warning "implicitly deleted" "" { target c++20 } .-1 }
  };
  
  struct U
  {
!   U& operator=(const volatile U &) = default; // { dg-error "defaulted" "" { target c++17_down } }
! 					      // { dg-warning "implicitly deleted" "" { target c++20 } .-1 }
  };
  
  struct V
--- 11,24 ----
  
  struct T
  {
!   T& operator=(volatile T &) = default; // { dg-error "defaulted" "" { target { c++17_down || c++29 } } }
! 					// { dg-warning "implicitly deleted" "" { target { c++20 && c++26_down } } .-1 }
  };
  
  struct U
  {
!   U& operator=(const volatile U &) = default; // { dg-error "defaulted" "" { target { c++17_down || c++29 } } }
! 					      // { dg-warning "implicitly deleted" "" { target { c++20 && c++26_down } } .-1 }
  };
  
  struct V
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/cpp0x/defaulted63.C gcc-17-20260705/gcc/testsuite/g++.dg/cpp0x/defaulted63.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/cpp0x/defaulted63.C	Sun Jun 28 22:32:11 2026
--- gcc-17-20260705/gcc/testsuite/g++.dg/cpp0x/defaulted63.C	Sun Jul  5 22:32:11 2026
*************** struct C0 {
*** 6,13 ****
  };
  
  struct C1 {
!   C1(volatile C1&) = default; // { dg-warning "implicitly deleted" "" { target c++20 } }
! 			      // { dg-error "does not match" "" { target c++17_down } .-1 }
  };
  
  struct C2 {
--- 6,13 ----
  };
  
  struct C1 {
!   C1(volatile C1&) = default; // { dg-warning "implicitly deleted" "" { target { c++20 && c++26_down } } }
! 			      // { dg-error "does not match" "" { target { c++17_down || c++29 } } .-1 }
  };
  
  struct C2 {
*************** struct C2 {
*** 15,22 ****
  };
  
  struct C3 {
!   C3(const volatile C3&) = default;  // { dg-warning "implicitly deleted" "" { target c++20 } }
! 				      // { dg-error "does not match" "" { target c++17_down } .-1 }
  };
  
  struct M0 {
--- 15,22 ----
  };
  
  struct C3 {
!   C3(const volatile C3&) = default;  // { dg-warning "implicitly deleted" "" { target { c++20 && c++26_down } } }
! 				      // { dg-error "does not match" "" { target { c++17_down || c++29 } } .-1 }
  };
  
  struct M0 {
*************** struct M0 {
*** 24,39 ****
  };
  
  struct M1 {
!   M1(const M1&&) = default; // { dg-warning "implicitly deleted" "" { target c++20 } }
! 			    // { dg-error "does not match" "" { target c++17_down } .-1 }
  };
  
  struct M2 {
!   M2(volatile M2&&) = default;	// { dg-warning "implicitly deleted" "" { target c++20 } }
! 				// { dg-error "does not match" "" { target c++17_down } .-1 }
  };
  
  struct M3 {
!   M3(const volatile M3&&) = default;  // { dg-warning "implicitly deleted" "" { target c++20 } }
! 				      // { dg-error "does not match" "" { target c++17_down } .-1 }
  };
--- 24,39 ----
  };
  
  struct M1 {
!   M1(const M1&&) = default; // { dg-warning "implicitly deleted" "" { target { c++20 && c++26_down } } }
! 			    // { dg-error "does not match" "" { target { c++17_down || c++29 } } .-1 }
  };
  
  struct M2 {
!   M2(volatile M2&&) = default;	// { dg-warning "implicitly deleted" "" { target { c++20 && c++26_down } } }
! 				// { dg-error "does not match" "" { target { c++17_down || c++29 } } .-1 }
  };
  
  struct M3 {
!   M3(const volatile M3&&) = default;  // { dg-warning "implicitly deleted" "" { target { c++20 && c++26_down } } }
! 				      // { dg-error "does not match" "" { target { c++17_down || c++29 } } .-1 }
  };
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/cpp0x/defaulted64.C gcc-17-20260705/gcc/testsuite/g++.dg/cpp0x/defaulted64.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/cpp0x/defaulted64.C	Sun Jun 28 22:32:11 2026
--- gcc-17-20260705/gcc/testsuite/g++.dg/cpp0x/defaulted64.C	Sun Jul  5 22:32:11 2026
*************** struct R
*** 14,21 ****
  
  struct S
  {
!   S& operator=(const S&&) = default; // { dg-warning "implicitly deleted" "" { target c++20 } }
! 				     // { dg-error "does not match" "" { target c++17_down } .-1 }
  
    M m;
  };
--- 14,21 ----
  
  struct S
  {
!   S& operator=(const S&&) = default; // { dg-warning "implicitly deleted" "" { target { c++20 && c++26_down } } }
! 				     // { dg-error "does not match" "" { target { c++17_down || c++29 } } .-1 }
  
    M m;
  };
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/cpp0x/defaulted65.C gcc-17-20260705/gcc/testsuite/g++.dg/cpp0x/defaulted65.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/cpp0x/defaulted65.C	Sun Jun 28 22:32:11 2026
--- gcc-17-20260705/gcc/testsuite/g++.dg/cpp0x/defaulted65.C	Sun Jul  5 22:32:11 2026
*************** struct S
*** 8,25 ****
  
  struct T
  {
!   T& operator=(volatile T &&) = default; // { dg-error "defaulted" "" { target c++17_down } }
! 					 // { dg-warning "implicitly deleted" "" { target c++20 } .-1 }
  };
  
  struct U
  {
!   U& operator=(const volatile U &&) = default; // { dg-error "defaulted" "" { target c++17_down } }
! 					       // { dg-warning "implicitly deleted" "" { target c++20 } .-1 }
  };
  
  struct V
  {
!   V& operator=(const V &&) = default; // { dg-error "defaulted" "" { target c++17_down } }
! 				      // { dg-warning "implicitly deleted" "" { target c++20 } .-1 }
  };
--- 8,25 ----
  
  struct T
  {
!   T& operator=(volatile T &&) = default; // { dg-error "defaulted" "" { target { c++17_down || c++29 } } }
! 					 // { dg-warning "implicitly deleted" "" { target { c++20 && c++26_down } } .-1 }
  };
  
  struct U
  {
!   U& operator=(const volatile U &&) = default; // { dg-error "defaulted" "" { target { c++17_down || c++29 } } }
! 					       // { dg-warning "implicitly deleted" "" { target { c++20 && c++26_down } } .-1 }
  };
  
  struct V
  {
!   V& operator=(const V &&) = default; // { dg-error "defaulted" "" { target { c++17_down || c++29 } } }
! 				      // { dg-warning "implicitly deleted" "" { target { c++20 && c++26_down } } .-1 }
  };
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/cpp0x/defaulted66.C gcc-17-20260705/gcc/testsuite/g++.dg/cpp0x/defaulted66.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/cpp0x/defaulted66.C	Sun Jun 28 22:32:11 2026
--- gcc-17-20260705/gcc/testsuite/g++.dg/cpp0x/defaulted66.C	Sun Jul  5 22:32:11 2026
***************
*** 6,17 ****
  template<typename>
  struct C {
     C();
!    C(const C&&) = default; // { dg-error "implicitly deleted" "" { target c++17_down} }
  };
  
  struct D {
!   D(const D&&) = default; // { dg-error "implicitly deleted" "" { target c++17_down} }
!   // { dg-warning "implicitly deleted" "" { target c++20 } .-1 }
  };
  
  struct M {
--- 6,19 ----
  template<typename>
  struct C {
     C();
!    C(const C&&) = default; // { dg-error "implicitly deleted" "" { target c++17_down } }
!    // { dg-error "does not match the expected signature" "" { target c++29 } .-1 }
  };
  
  struct D {
!   D(const D&&) = default; // { dg-error "implicitly deleted" "" { target c++17_down } }
!   // { dg-warning "implicitly deleted" "" { target { c++20 && c++26_down } } .-1 }
!   // { dg-error "does not match the expected signature" "" { target c++29 } .-2 }
  };
  
  struct M {
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/cpp0x/defaulted67.C gcc-17-20260705/gcc/testsuite/g++.dg/cpp0x/defaulted67.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/cpp0x/defaulted67.C	Sun Jun 28 22:32:11 2026
--- gcc-17-20260705/gcc/testsuite/g++.dg/cpp0x/defaulted67.C	Sun Jul  5 22:32:11 2026
*************** struct S
*** 9,23 ****
  
  struct T
  {
!   T& operator=(volatile T &&) = default;
  };
  
  struct U
  {
!   U& operator=(const volatile U &&) = default;
  };
  
  struct V
  {
!   V& operator=(const V &&) = default;
  };
--- 9,23 ----
  
  struct T
  {
!   T& operator=(volatile T &&) = default;	// { dg-error "does not match the expected signature" "" { target c++29 } }
  };
  
  struct U
  {
!   U& operator=(const volatile U &&) = default;	// { dg-error "does not match the expected signature" "" { target c++29 } }
  };
  
  struct V
  {
!   V& operator=(const V &&) = default;		// { dg-error "does not match the expected signature" "" { target c++29 } }
  };
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/cpp0x/defaulted68.C gcc-17-20260705/gcc/testsuite/g++.dg/cpp0x/defaulted68.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/cpp0x/defaulted68.C	Sun Jun 28 22:32:11 2026
--- gcc-17-20260705/gcc/testsuite/g++.dg/cpp0x/defaulted68.C	Sun Jul  5 22:32:11 2026
*************** struct C0 {
*** 7,13 ****
  };
  
  struct C1 {
!   C1(volatile C1&) = default;
  };
  
  struct C2 {
--- 7,13 ----
  };
  
  struct C1 {
!   C1(volatile C1&) = default;		// { dg-error "does not match the expected signature" "" { target c++29 } }
  };
  
  struct C2 {
*************** struct C2 {
*** 15,21 ****
  };
  
  struct C3 {
!   C3(const volatile C3&) = default;
  };
  
  struct M0 {
--- 15,21 ----
  };
  
  struct C3 {
!   C3(const volatile C3&) = default;	// { dg-error "does not match the expected signature" "" { target c++29 } }
  };
  
  struct M0 {
*************** struct M0 {
*** 23,35 ****
  };
  
  struct M1 {
!   M1(const M1&&) = default;
  };
  
  struct M2 {
!   M2(volatile M2&&) = default;
  };
  
  struct M3 {
!   M3(const volatile M3&&) = default;
  };
--- 23,35 ----
  };
  
  struct M1 {
!   M1(const M1&&) = default;		// { dg-error "does not match the expected signature" "" { target c++29 } }
  };
  
  struct M2 {
!   M2(volatile M2&&) = default;		// { dg-error "does not match the expected signature" "" { target c++29 } }
  };
  
  struct M3 {
!   M3(const volatile M3&&) = default;	// { dg-error "does not match the expected signature" "" { target c++29 } }
  };
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/cpp1y/defaulted2.C gcc-17-20260705/gcc/testsuite/g++.dg/cpp1y/defaulted2.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/cpp1y/defaulted2.C	Sun Jun 28 22:32:11 2026
--- gcc-17-20260705/gcc/testsuite/g++.dg/cpp1y/defaulted2.C	Sun Jul  5 22:32:11 2026
*************** struct A {
*** 5,15 ****
      int i;
      constexpr A(int v) : i(v) {}
      constexpr A(const A&&) = default;  // { dg-error "implicitly deleted" "" { target c++17_down } }
! 				       // { dg-warning "implicitly deleted" "" { target c++20 } .-1 }
  };
  
  constexpr int f() {
      A a(1);
!     A b = static_cast<const A&&>( a ); // { dg-error "use of deleted function" }
      return b.i;
  }
--- 5,16 ----
      int i;
      constexpr A(int v) : i(v) {}
      constexpr A(const A&&) = default;  // { dg-error "implicitly deleted" "" { target c++17_down } }
! 				       // { dg-warning "implicitly deleted" "" { target { c++20 && c++26_down } } .-1 }
! 				       // { dg-error "does not match the expected signature" "" { target c++29 } .-2 }
  };
  
  constexpr int f() {
      A a(1);
!     A b = static_cast<const A&&>( a ); // { dg-error "use of deleted function" "" { target c++26_down } }
      return b.i;
  }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/cpp29/defaulted1.C gcc-17-20260705/gcc/testsuite/g++.dg/cpp29/defaulted1.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/cpp29/defaulted1.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/g++.dg/cpp29/defaulted1.C	Sun Jul  5 22:32:11 2026
***************
*** 0 ****
--- 1,113 ----
+ // P2953R5 - Adding restrictions to defaulted assignment operator functions
+ // { dg-do compile { target c++11 } }
+ 
+ // Define std::move.
+ namespace std {
+   template <typename T>
+   struct remove_reference
+   { typedef T type; };
+ 
+   template <typename T>
+   struct remove_reference <T &>
+   { typedef T type; };
+ 
+   template <typename T>
+   struct remove_reference <T &&>
+   { typedef T type; };
+ 
+   template <typename T>
+   constexpr typename std::remove_reference <T>::type &&
+   move (T &&t) noexcept
+   { return static_cast <typename std::remove_reference <T>::type &&> (t); }
+ }
+ 
+ struct A {
+   A (A &) = default;
+   A &operator= (A &) = default;
+ };
+ 
+ void
+ foo (A a)
+ {
+   a = a;
+   A b = a;
+ }
+ 
+ struct B {
+   B (const B &&) = default;		// { dg-error "explicitly defaulted move constructor is implicitly deleted because its declared type does not match the type of an implicit move constructor" "" { target c++17_down } }
+ 					// { dg-warning "explicitly defaulted move constructor is implicitly deleted because its declared type does not match the type of an implicit move constructor" "" { target { c++20 && c++26_down } } .-1 }
+ 					// { dg-error "defaulted declaration 'B::B\\\(const B\\\&\\\&\\\)' does not match the expected signature" "" { target c++29 } .-2 }
+ 					// { dg-message "note: expected signature: 'constexpr B::B\\\(B\\\&\\\&\\\)'" "" { target *-*-* } .-3 }
+   B &operator= (const B &&) = default;	// { dg-error "explicitly defaulted move assignment operator is implicitly deleted because its declared type does not match the type of an implicit move assignment operator" "" { target c++17_down } }
+ 					// { dg-warning "explicitly defaulted move assignment operator is implicitly deleted because its declared type does not match the type of an implicit move assignment operator" "" { target { c++20 && c++26_down } } .-1 }
+ };					// { dg-error "defaulted declaration 'B\\\& B::operator=\\\(const B\\\&\\\&\\\)' does not match the expected signature" "" { target c++29 } .-2 }
+ 					// { dg-message "note: expected signature: 'constexpr B\\\& B::operator=\\\(B\\\&\\\&\\\)'" "" { target c++14 } .-3 }
+ 					// { dg-message "note: expected signature: 'B\\\& B::operator=\\\(B\\\&\\\&\\\)'" "" { target c++11_only } .-4 }
+ 
+ void
+ foo (B a)
+ {
+   a = std::move (a);	// { dg-error "use of deleted function 'constexpr B\\\& B::operator=\\\(const B\\\&\\\&\\\)'" "" { target { c++14 && c++26_down } } }
+ 			// { dg-error "use of deleted function 'B\\\& B::operator=\\\(const B\\\&\\\&\\\)'" "" { target c++11_only } .-1 }
+   B b = std::move (a);	// { dg-error "use of deleted function 'constexpr B::B\\\(const B\\\&\\\&\\\)'" "" { target c++26_down } }
+ }
+ 
+ struct C {
+   C &operator= (const C &) const = default; // { dg-error "explicitly defaulted copy assignment operator is implicitly deleted because its declared type does not match the type of an implicit copy assignment operator" "" { target c++17_down } }
+ };					// { dg-warning "explicitly defaulted copy assignment operator is implicitly deleted because its declared type does not match the type of an implicit copy assignment operator" "" { target { c++20 && c++26_down } } .-1 }
+ 					// { dg-error "defaulted declaration 'C\\\& C::operator=\\\(const C\\\&\\\) const' does not match the expected signature" "" { target c++29 } .-2 }
+ 					// { dg-message "note: expected signature: 'constexpr C\\\& C::operator=\\\(const C\\\&\\\)'" "" { target c++14 } .-3 }
+ 					// { dg-message "note: expected signature: 'C\\\& C::operator=\\\(const C\\\&\\\)'" "" { target c++11_only } .-4 }
+ 
+ void
+ foo (C &)
+ {
+   C c;
+   c = c;	// { dg-error "use of deleted function 'constexpr C\\\& C::operator=\\\(const C\\\&\\\) const'" "" { target { c++14 && c++26_down } } }
+ }		// { dg-error "use of deleted function 'C\\\& C::operator=\\\(const C\\\&\\\) const'" "" { target c++11_only } .-1 }
+ 
+ struct D {
+   D &operator= (const D &) && = default; // { dg-error "defaulted declaration 'D\\\& D::operator=\\\(const D\\\&\\\) \\\&\\\&' does not match the expected signature" "" { target c++29 } }
+ };		// { dg-message "note: expected signature: 'constexpr D\\\& D::operator=\\\(const D\\\&\\\)'" "" { target c++29 } .-1 }
+ 
+ void
+ foo (D a)
+ {
+   std::move (a) = a;
+ }
+ 
+ struct E {
+   E &&operator= (const E &) && = default; // { dg-error "defaulted declaration 'E\\\&\\\& E::operator=\\\(const E\\\&\\\) \\\&\\\&' does not match the expected signature" }
+ };					// { dg-message "note: expected signature: 'constexpr E\\\& E::operator=\\\(const E\\\&\\\)'" "" { target c++14 } .-1 }
+ 					// { dg-message "note: expected signature: 'E\\\& E::operator=\\\(const E\\\&\\\)'" "" { target c++11_only } .-2 }
+ 
+ void
+ foo (E a)
+ {
+   std::move (a) = a;
+ }
+ 
+ struct F {        
+   F &operator= (const F &) volatile;	// { dg-message "note: initializing argument 1 of 'F\\\& F::operator=\\\(const F\\\&\\\) volatile'" }
+ };
+ struct G {
+   volatile F f;
+   G &operator= (const G &) = default;	// { dg-error "binding reference of type 'const F\\\&' to 'const volatile F' discards qualifiers" }
+ }; // { dg-message "note: 'G\\\& G::operator=\\\(const G\\\&\\\)' is implicitly deleted because the default definition would be ill-formed:" "" { target *-*-* } .-1 }
+ 
+ void
+ foo (G &)
+ {
+   G a;
+   decltype(a = a) b = a;	// { dg-error "cannot convert 'G' to 'int' in initialization" }
+ } // { dg-error "use of deleted function 'G\\\& G::operator=\\\(const G\\\&\\\)'" "" { target *-*-* } .-1 }
+ 
+ struct H {
+   H &operator= (H &);		// { dg-message "note: initializing argument 1 of 'H\\\& H::operator=\\\(H\\\&\\\)'" }
+ };
+ struct I {
+   H h;
+   I &operator= (const I &);
+ };
+ I &I::operator= (const I &) = default;	// { dg-error "binding reference of type 'H\\\&' to 'const H' discards qualifiers" }
+ // { dg-message "note: 'I\\\& I::operator=\\\(const I\\\&\\\)' is implicitly deleted because the default definition would be ill-formed:" "" { target *-*-* } .-1 }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/cpp29/defaulted2.C gcc-17-20260705/gcc/testsuite/g++.dg/cpp29/defaulted2.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/cpp29/defaulted2.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/g++.dg/cpp29/defaulted2.C	Sun Jul  5 22:32:11 2026
***************
*** 0 ****
--- 1,15 ----
+ // P2953R5 - Adding restrictions to defaulted assignment operator functions
+ // { dg-do compile { target c++17 } }
+ 
+ #include <type_traits>
+ 
+ struct A {
+   A &operator= (A &);
+ };
+ struct B {
+   A a;
+   B &operator= (const B &) = default;	// { dg-error "explicitly defaulted copy assignment operator is implicitly deleted because its declared type does not match the type of an implicit copy assignment operator" "" { target c++17_only } }
+ };					// { dg-warning "explicitly defaulted copy assignment operator is implicitly deleted because its declared type does not match the type of an implicit copy assignment operator" "" { target c++20 } .-1 }
+ 					// { dg-message "note: expected signature: 'B\\\& B::operator=\\\(B\\\&\\\)'" "" { target *-*-* } .-2 }
+ static_assert (!std::is_assignable_v <B &, const B &>, "");
+ static_assert (!std::is_assignable_v <B &, B &>, "");
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/cpp29/defaulted3.C gcc-17-20260705/gcc/testsuite/g++.dg/cpp29/defaulted3.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/cpp29/defaulted3.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/g++.dg/cpp29/defaulted3.C	Sun Jul  5 22:32:11 2026
***************
*** 0 ****
--- 1,20 ----
+ // P2953R5 - Adding restrictions to defaulted assignment operator functions
+ // { dg-do compile { target c++11 } }
+ 
+ struct A {
+   A (A &) = default;
+   A &operator= (A &) = default;
+ };
+ 
+ template <class T>
+ struct B {
+   T b;
+   explicit B ();
+   B (const B &) = default;		// { dg-error "explicitly defaulted copy constructor is implicitly deleted because its declared type does not match the type of an implicit copy constructor" "" { target c++17_down } }
+ 					// { dg-message "note: expected signature: 'constexpr B<A>::B\\\(B<A>\\\&\\\)'" "" { target c++17_down } .-1 }
+   B &operator= (const B &) = default;	// { dg-error "explicitly defaulted copy assignment operator is implicitly deleted because its declared type does not match the type of an implicit copy assignment operator" "" { target c++17_down } }
+ 					// { dg-message "note: expected signature: 'constexpr B<A>\\\& B<A>::operator=\\\(B<A>\\\&\\\)'" "" { target { c++14 && c++17_down } } .-1 }
+ 					// { dg-message "note: expected signature: 'B<A>\\\& B<A>::operator=\\\(B<A>\\\&\\\)'" "" { target c++11_only } .-2 }
+ };
+ 
+ B <A> c;
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/cpp29/defaulted4.C gcc-17-20260705/gcc/testsuite/g++.dg/cpp29/defaulted4.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/cpp29/defaulted4.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/g++.dg/cpp29/defaulted4.C	Sun Jul  5 22:32:11 2026
***************
*** 0 ****
--- 1,40 ----
+ // P2953R5 - Adding restrictions to defaulted assignment operator functions
+ // { dg-do compile { target c++11 } }
+ 
+ struct A {
+   A (A &);
+ };
+ 
+ struct B {
+   A a;
+   B (const B &) = default;	// { dg-error "explicitly defaulted copy constructor is implicitly deleted because its declared type does not match the type of an implicit copy constructor" "" { target c++17_down } }
+ // { dg-warning "explicitly defaulted copy constructor is implicitly deleted because its declared type does not match the type of an implicit copy constructor" "" { target c++20 } .-1 }
+ }; // { dg-message "note: expected signature: 'B::B\\\(B\\\&\\\)'" "" { target *-*-* } .-2 }
+ 
+ struct C {
+   C (C &);
+ };
+ 
+ struct D {
+   C a;
+   D &&operator= (const D &) = default;	// { dg-error "defaulted declaration 'D\\\&\\\& D::operator=\\\(const D\\\&\\\)' does not match the expected signature" }
+ }; // { dg-message "note: expected signature: 'constexpr D\\\& D::operator=\\\(const D\\\&\\\)'" "" { target c++14 } .-1 }
+ // { dg-message "note: expected signature: 'D\\\& D::operator=\\\(const D\\\&\\\)'" "" { target c++11_only } .-2 }
+ 
+ struct E {
+   E &operator= (const E &) && = default;	// { dg-error "defaulted declaration 'E\\\& E::operator=\\\(const E\\\&\\\) \\\&\\\&' does not match the expected signature" "" { target c++29 } }
+ }; // { dg-message "note: expected signature: 'constexpr E\\\& E::operator=\\\(const E\\\&\\\)'" "" { target c++29 } .-1 }
+ 
+ struct F {
+   F &operator= (const F &) const = default;	// { dg-error "explicitly defaulted copy assignment operator is implicitly deleted because its declared type does not match the type of an implicit copy assignment operator" "" { target c++17_down } }
+ // { dg-warning "explicitly defaulted copy assignment operator is implicitly deleted because its declared type does not match the type of an implicit copy assignment operator" "" { target { c++20 && c++26_down } } .-1 }
+ // { dg-error "defaulted declaration 'F\\\& F::operator=\\\(const F\\\&\\\) const' does not match the expected signature" "" { target c++29 } .-2 }
+ }; // { dg-message "note: expected signature: 'constexpr F\\\& F::operator=\\\(const F\\\&\\\)'" "" { target c++14 } .-3 }
+ // { dg-message "note: expected signature: 'F\\\& F::operator=\\\(const F\\\&\\\)'" "" { target c++11_only } .-4 }
+ 
+ struct G {
+   G &operator= (const G &&) = default;	// { dg-error "explicitly defaulted move assignment operator is implicitly deleted because its declared type does not match the type of an implicit move assignment operator" "" { target c++17_down } }
+ // { dg-warning "explicitly defaulted move assignment operator is implicitly deleted because its declared type does not match the type of an implicit move assignment operator" "" { target { c++20 && c++26_down } } .-1 }
+ // { dg-error "defaulted declaration 'G\\\& G::operator=\\\(const G\\\&\\\&\\\)' does not match the expected signature" "" { target c++29 } .-2 }
+ }; // { dg-message "note: expected signature: 'constexpr G\\\& G::operator=\\\(G\\\&\\\&\\\)'" "" { target c++14 } .-3 }
+ // { dg-message "note: expected signature: 'G\\\& G::operator=\\\(G\\\&\\\&\\\)'" "" { target c++11_only } .-4 }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/cpp29/defaulted5.C gcc-17-20260705/gcc/testsuite/g++.dg/cpp29/defaulted5.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/cpp29/defaulted5.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/g++.dg/cpp29/defaulted5.C	Sun Jul  5 22:32:11 2026
***************
*** 0 ****
--- 1,102 ----
+ // P2953R5 - Adding restrictions to defaulted assignment operator functions
+ // { dg-do compile { target c++11 } }
+ 
+ struct A {
+   A &operator= (const A &) & = default;
+ };
+ 
+ struct B {
+   B &&operator= (const B &) & = default;	// { dg-error "defaulted declaration 'B\\\&\\\& B::operator=\\\(const B\\\&\\\) \\\&' does not match the expected signature" }
+ };						// { dg-message "note: expected signature: 'constexpr B\\\& B::operator=\\\(const B\\\&\\\)'" "" { target c++14 } .-1 }
+ 						// { dg-message "note: expected signature: 'B\\\& B::operator=\\\(const B\\\&\\\)'" "" { target c++11_only } .-2 }
+ 
+ struct C {
+   C &operator= (const C &) noexcept (true) = default;
+ };
+ 
+ struct D {
+   D &operator= (const D &) noexcept (false) = default;
+ };
+ 
+ struct E {
+   E &operator= (E &) = default;
+ };
+ 
+ struct F {
+   F (F &);
+ };
+ 
+ struct G {
+   F a;
+   G &operator= (const G &) & = default;
+ };
+ 
+ struct H {
+   F a;
+   H &operator= (const H &) && = default;	// { dg-error "defaulted declaration 'H\\\& H::operator=\\\(const H\\\&\\\) \\\&\\\&' does not match the expected signature" "" { target c++29 } }
+ };						// { dg-message "note: expected signature: 'constexpr H\\\& H::operator=\\\(const H\\\&\\\)'" "" { target c++29 } .-1 }
+ 
+ struct I {
+   F a;
+   I &operator= (const I &) const = default;	// { dg-error "explicitly defaulted copy assignment operator is implicitly deleted because its declared type does not match the type of an implicit copy assignment operator" "" { target c++17_down } }
+ };						// { dg-message "note: expected signature: 'constexpr I\\\& I::operator=\\\(const I\\\&\\\)'" "" { target c++14 } .-1 }
+ 						// { dg-message "note: expected signature: 'I\\\& I::operator=\\\(const I\\\&\\\)'" "" { target c++11_only } .-2 }
+ 						// { dg-warning "explicitly defaulted copy assignment operator is implicitly deleted because its declared type does not match the type of an implicit copy assignment operator" "" { target { c++20 && c++26_down } } .-3 }
+ 						// { dg-error "defaulted declaration 'I\\\& I::operator=\\\(const I\\\&\\\) const' does not match the expected signature" "" { target c++29 } .-4 }
+ 
+ struct J {
+   F a;
+   J &operator= (const J &) volatile = default;	// { dg-error "explicitly defaulted copy assignment operator is implicitly deleted because its declared type does not match the type of an implicit copy assignment operator" "" { target c++17_down } }
+ };						// { dg-message "note: expected signature: 'constexpr J\\\& J::operator=\\\(const J\\\&\\\)'" "" { target c++14 } .-1 }
+ 						// { dg-message "note: expected signature: 'J\\\& J::operator=\\\(const J\\\&\\\)'" "" { target c++11_only } .-2 }
+ 						// { dg-warning "explicitly defaulted copy assignment operator is implicitly deleted because its declared type does not match the type of an implicit copy assignment operator" "" { target { c++20 && c++26_down } } .-3 }
+ 						// { dg-error "defaulted declaration 'J\\\& J::operator=\\\(const J\\\&\\\) volatile' does not match the expected signature" "" { target c++29 } .-4 }
+ 
+ struct K {
+   F a;
+   K &operator= (const K &);
+ };
+ 
+ K &K::operator= (const K &) = default;
+ 
+ struct L {
+   L &&operator= (L &) = default;		// { dg-error "defaulted declaration 'L\\\&\\\& L::operator=\\\(L\\\&\\\)' does not match the expected signature" }
+ };						// { dg-message "note: expected signature: 'constexpr L\\\& L::operator=\\\(L\\\&\\\)'" "" { target c++14 } .-1 }
+ 						// { dg-message "note: expected signature: 'L\\\& L::operator=\\\(L\\\&\\\)'" "" { target c++11_only } .-2 }
+ 
+ struct M {
+   M &operator= (M &);
+ };
+ 
+ struct N {
+   M a;
+   N &operator= (const N &) & = default;		// { dg-error "explicitly defaulted copy assignment operator is implicitly deleted because its declared type does not match the type of an implicit copy assignment operator" "" { target c++17_down } }
+ };						// { dg-message "note: expected signature: 'N\\\& N::operator=\\\(N\\\&\\\)'" "" { target *-*-* } .-1 }
+ 						// { dg-warning "explicitly defaulted copy assignment operator is implicitly deleted because its declared type does not match the type of an implicit copy assignment operator" "" { target c++20 } .-2 }
+ 
+ struct O {
+   M a;
+   O &operator= (const O &) && = default;	// { dg-error "explicitly defaulted copy assignment operator is implicitly deleted because its declared type does not match the type of an implicit copy assignment operator" "" { target { c++17_down } } }
+ };						// { dg-message "note: expected signature: 'O\\\& O::operator=\\\(O\\\&\\\)'" "" { target *-*-* } .-1 }
+ 						// { dg-warning "explicitly defaulted copy assignment operator is implicitly deleted because its declared type does not match the type of an implicit copy assignment operator" "" { target { c++20 && c++26_down } } .-2 }
+ 						// { dg-error "defaulted declaration 'O\\\& O::operator=\\\(const O\\\&\\\) \\\&\\\&' does not match the expected signature" "" { target c++29 } .-3 }
+ 
+ struct P {
+   M a;
+   P &operator= (const P &) const = default;	// { dg-error "explicitly defaulted copy assignment operator is implicitly deleted because its declared type does not match the type of an implicit copy assignment operator" "" { target c++17_down } }
+ };						// { dg-message "note: expected signature: 'P\\\& P::operator=\\\(P\\\&\\\)'" "" { target *-*-* } .-1 }
+ 						// { dg-warning "explicitly defaulted copy assignment operator is implicitly deleted because its declared type does not match the type of an implicit copy assignment operator" "" { target c++20 } .-2 }
+ 
+ struct Q {
+   M a;
+   Q &operator= (const Q &) volatile = default;	// { dg-error "explicitly defaulted copy assignment operator is implicitly deleted because its declared type does not match the type of an implicit copy assignment operator" "" { target c++17_down } }
+ };						// { dg-message "note: expected signature: 'Q\\\& Q::operator=\\\(Q\\\&\\\)'" "" { target *-*-* } .-1 }
+ 						// { dg-warning "explicitly defaulted copy assignment operator is implicitly deleted because its declared type does not match the type of an implicit copy assignment operator" "" { target c++20 } .-2 }
+ 
+ struct R {
+   M a;
+   R &operator= (const R &);
+ };
+ 
+ R &R::operator= (const R &) = default;		// { dg-error "binding reference of type 'M\\\&' to 'const M' discards qualifiers" }
+ 						// { dg-message "note: 'R\\\& R::operator=\\\(const R\\\&\\\)' is implicitly deleted because the default definition would be ill-formed:" "" { target *-*-* } .-1 }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/cpp29/defaulted6.C gcc-17-20260705/gcc/testsuite/g++.dg/cpp29/defaulted6.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/cpp29/defaulted6.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/g++.dg/cpp29/defaulted6.C	Sun Jul  5 22:32:11 2026
***************
*** 0 ****
--- 1,33 ----
+ // P2953R5 - Adding restrictions to defaulted assignment operator functions
+ // { dg-do compile { target c++23 } }
+ 
+ struct A {
+   A &operator= (this A &, const A &) = default;
+ };
+ 
+ struct D {
+   D &&operator= (this D &, const D &) = default;	// { dg-error "defaulted declaration 'D\\\&\\\& D::operator=\\\(this D\\\&, const D\\\&\\\)' does not match the expected signature" }
+ };							// { dg-message "note: expected signature: 'constexpr D\\\& D::operator=\\\(const D\\\&\\\)'" "" { target *-*-* } .-1 }
+ 
+ struct E {
+   E &operator= (this E, const E &) = default;		// { dg-error "'E\\\& E::operator=\\\(this E, const E\\\&\\\)' cannot be defaulted" }
+ };
+ 
+ struct F {
+   F (F &);
+ };
+ 
+ struct G {
+   F a;
+   G &operator= (this G &, const G &) = default;
+ };
+ 
+ struct H {
+   F a;
+   H &operator= (this H &, H &) = default;
+ };
+ 
+ struct I {
+   F a;
+   I &operator= (this I, const I &) = default;		// { dg-error "'I\\\& I::operator=\\\(this I, const I\\\&\\\)' cannot be defaulted" }
+ };
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/cpp29/feat-cxx29.C gcc-17-20260705/gcc/testsuite/g++.dg/cpp29/feat-cxx29.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/cpp29/feat-cxx29.C	Sun Jun 28 22:32:11 2026
--- gcc-17-20260705/gcc/testsuite/g++.dg/cpp29/feat-cxx29.C	Sun Jul  5 22:32:11 2026
***************
*** 631,638 ****
  
  #ifndef __cpp_pp_embed
  #  error "__cpp_pp_embed"
! #elif __cpp_pp_embed != 202502
! #  error "__cpp_pp_embed != 202502"
  #endif
  
  #ifndef __cpp_constexpr_virtual_inheritance
--- 631,638 ----
  
  #ifndef __cpp_pp_embed
  #  error "__cpp_pp_embed"
! #elif __cpp_pp_embed != 202606
! #  error "__cpp_pp_embed != 202606"
  #endif
  
  #ifndef __cpp_constexpr_virtual_inheritance
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/cpp2a/decomp11.C gcc-17-20260705/gcc/testsuite/g++.dg/cpp2a/decomp11.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/cpp2a/decomp11.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/g++.dg/cpp2a/decomp11.C	Sun Jul  5 22:32:11 2026
***************
*** 0 ****
--- 1,12 ----
+ // PR c++/126057
+ // { dg-do compile { target c++20 } }
+ 
+ template <typename T>
+ int
+ foo ()
+ {
+   static auto [a] = 0;	// { dg-error "cannot decompose non-array non-class type 'int'" }
+   return 0;
+ }
+ 
+ int a = foo <int> ();
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/ext/is_implicit_lifetime3.C gcc-17-20260705/gcc/testsuite/g++.dg/ext/is_implicit_lifetime3.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/ext/is_implicit_lifetime3.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/g++.dg/ext/is_implicit_lifetime3.C	Sun Jul  5 22:32:11 2026
***************
*** 0 ****
--- 1,11 ----
+ // PR c++/126007
+ // { dg-do compile { target c++20 } }
+ 
+ template <bool B>
+ struct S {
+   S () requires B = default;
+   S (const S &) {}
+ };
+ 
+ static_assert (!__builtin_is_implicit_lifetime (S<false>));
+ static_assert (__builtin_is_implicit_lifetime (S<true>));
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/gomp/deprecate-2.C gcc-17-20260705/gcc/testsuite/g++.dg/gomp/deprecate-2.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/gomp/deprecate-2.C	Sun Jun 28 22:32:12 2026
--- gcc-17-20260705/gcc/testsuite/g++.dg/gomp/deprecate-2.C	Sun Jul  5 22:32:11 2026
*************** void f()
*** 42,47 ****
  
  // { dg-warning "42: the specification of arguments to 'uses_allocators' where each item is of the form 'allocator\\(traits\\)' is deprecated since OpenMP 5.2 \\\[-Wdeprecated-openmp\\\]" "" { target *-*-* }  34 }
  }
- 
- // { dg-excess-errors "sorry, unimplemented: 'uses_allocators' clause" }
- // { dg-excess-errors "sorry, unimplemented: 'uses_allocators' clause" }
--- 42,44 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/gomp/uses_allocators-1.C gcc-17-20260705/gcc/testsuite/g++.dg/gomp/uses_allocators-1.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/gomp/uses_allocators-1.C	Sun Jun 28 22:32:12 2026
--- gcc-17-20260705/gcc/testsuite/g++.dg/gomp/uses_allocators-1.C	Thu Jan  1 00:00:00 1970
***************
*** 1,105 ****
- // { dg-do compile }
- /* { dg-additional-options "-Wno-deprecated-openmp" } */
- 
- //#include <omp.h>
- 
- typedef __UINTPTR_TYPE__ omp_uintptr_t;
- 
- #if __cplusplus >= 201103L
- # define __GOMP_UINTPTR_T_ENUM : omp_uintptr_t
- #else
- # define __GOMP_UINTPTR_T_ENUM
- #endif
- 
- typedef enum omp_memspace_handle_t __GOMP_UINTPTR_T_ENUM
- {
-   omp_default_mem_space = 0,
-   omp_large_cap_mem_space = 1,
-   omp_const_mem_space = 2,
-   omp_high_bw_mem_space = 3,
-   omp_low_lat_mem_space = 4,
-   ompx_gnu_managed_mem_space = 200,
-   __omp_memspace_handle_t_max__ = __UINTPTR_MAX__
- } omp_memspace_handle_t;
- 
- typedef enum omp_allocator_handle_t __GOMP_UINTPTR_T_ENUM
- {
-   omp_null_allocator = 0,
-   omp_default_mem_alloc = 1,
-   omp_large_cap_mem_alloc = 2,
-   omp_const_mem_alloc = 3,
-   omp_high_bw_mem_alloc = 4,
-   omp_low_lat_mem_alloc = 5,
-   omp_cgroup_mem_alloc = 6,
-   omp_pteam_mem_alloc = 7,
-   omp_thread_mem_alloc = 8,
-   ompx_gnu_pinned_mem_alloc = 200,
-   ompx_gnu_managed_mem_alloc = 201,
-   __omp_allocator_handle_t_max__ = __UINTPTR_MAX__
- } omp_allocator_handle_t;
- 
- typedef struct omp_alloctrait_t
- {
- //  omp_alloctrait_key_t key;
- //  omp_uintptr_t value;
- } omp_alloctrait_t;
- 
- 
- template<typename TH, TH alloc>
- void f()
- {
-  #pragma omp target uses_allocators(alloc)
-    ;
- }
- 
- template<typename TH, typename TT>
- void g(TT trait, TH alloc)
- {
-  #pragma omp target uses_allocators(alloc)
-    ;
-  #pragma omp target uses_allocators(alloc(trait))
-    // { dg-error "traits array 'trait' must be defined in same scope as the construct on which the clause appears" "" { target *-*-* } .-1 }
-    // { dg-error "traits array 'trait' must be of 'const omp_alloctrait_t \\\[\\\]' type" "" { target *-*-* } .-2 }
-    ;
- }
- 
- void use()
- {
-   omp_allocator_handle_t my;
-   static const omp_alloctrait_t t[] = {};
- 
-   f<omp_allocator_handle_t, omp_null_allocator>(); // OK
-   f<omp_allocator_handle_t, omp_default_mem_alloc>(); // OK
- 
-   g<omp_allocator_handle_t, const omp_alloctrait_t[]>(t, my); // 't'/traits not in the same scope
- }
- 
- template<typename TH, TH alloc>
- void f2()
- {
-  #pragma omp target uses_allocators(alloc)
-    // { dg-error "allocator '\\(omp_allocator_handle_t\\)300' must be either a variable or a predefined allocator" "" { target *-*-* } .-1 }
-    ;
- }
- 
- template<typename TH, typename TT>
- void g2(TH alloc)
- {
-  TT t = {};
-  #pragma omp target uses_allocators(alloc(t))
-    ;
- }
- 
- void use2()
- {
-   omp_allocator_handle_t my;
-   const omp_allocator_handle_t wrong = (omp_allocator_handle_t) 300;
- 
-   f2<omp_allocator_handle_t, wrong>(); // 300 is not a predefined allocator
- 
-   g2<omp_allocator_handle_t, const omp_alloctrait_t[]>(my); // OK
- }
- 
- // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target *-*-* } 51 }
- // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target *-*-* } 58 }
- // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target *-*-* } 89 }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/opt/20260703-1.C gcc-17-20260705/gcc/testsuite/g++.dg/opt/20260703-1.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/opt/20260703-1.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/g++.dg/opt/20260703-1.C	Sun Jul  5 22:32:12 2026
***************
*** 0 ****
--- 1,46 ----
+ // This started to be miscompiled with r15-579 or in a larger
+ // test with r15-3956 and got fixed with r17-2039.
+ // DSE would optimize away the store of 42.
+ // { dg-do run { target c++11 } }
+ // { dg-options "-O2" }
+ 
+ struct B { };
+ 
+ void *volatile g;
+ 
+ template <typename T>
+ struct D { T foo (void) const { return (T) g; } };
+ 
+ struct G : public B
+ {
+   virtual B *bar (int);
+   struct H : public B { H () : h (42) {} int h; };
+   struct I : public B {};
+   D <I *> g;
+ };
+ 
+ struct H : public G { virtual B *bar (int) { return nullptr; } };
+ 
+ B *
+ G::bar (int x)
+ {
+   if (x == 0)
+     return new H ();
+   I *y = g.foo ();
+   return y;
+ }
+ 
+ [[gnu::noipa]] B *
+ baz (G *x, int y)
+ {
+   return x->bar (y);
+ }
+ 
+ int
+ main ()
+ {
+   G g;
+   G::H *h = (G::H *) baz (&g, 0);
+   if (h->h != 42)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/opt/pr94589-5a.C gcc-17-20260705/gcc/testsuite/g++.dg/opt/pr94589-5a.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/opt/pr94589-5a.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/g++.dg/opt/pr94589-5a.C	Sun Jul  5 22:32:12 2026
***************
*** 0 ****
--- 1,27 ----
+ // PR tree-optimization/94589
+ // { dg-do compile { target c++20 } }
+ // { dg-require-effective-target inf }
+ // { dg-options "-O2 -g0 -fdump-tree-optimized -fno-trapping-math" }
+ // { dg-final { scan-tree-dump-times "\[ij]_\[0-9]+\\(D\\) (?:<|<=|>|>=|u>=|u<=) \[ij]_\[0-9]+\\(D\\)" 8 "optimized" } }
+ // { dg-final { scan-tree-dump-times "i_\[0-9]+\\(D\\) (?:<|<=|>|>=|u>=|u<=) 5\\.0" 8 "optimized" } }
+ // { dg-final { scan-tree-dump-not " if " "optimized" } }
+ 
+ #include <compare>
+ 
+ #define A __attribute__((noipa))
+ A bool f3 (double i, double j) { auto c = i <=> j; return c > 0; }
+ A bool f4 (double i, double j) { auto c = i <=> j; return c < 0; }
+ A bool f5 (double i, double j) { auto c = i <=> j; return c >= 0; }
+ A bool f6 (double i, double j) { auto c = i <=> j; return c <= 0; }
+ A bool f7 (double i, double j) { auto c = i <=> j; return c == std::partial_ordering::less; }
+ A bool f8 (double i, double j) { auto c = i <=> j; return c != std::partial_ordering::less; }
+ A bool f11 (double i, double j) { auto c = i <=> j; return c == std::partial_ordering::greater; }
+ A bool f12 (double i, double j) { auto c = i <=> j; return c != std::partial_ordering::greater; }
+ A bool f15 (double i) { auto c = i <=> 5.0; return c > 0; }
+ A bool f16 (double i) { auto c = i <=> 5.0; return c < 0; }
+ A bool f17 (double i) { auto c = i <=> 5.0; return c >= 0; }
+ A bool f18 (double i) { auto c = i <=> 5.0; return c <= 0; }
+ A bool f19 (double i) { auto c = i <=> 5.0; return c == std::partial_ordering::less; }
+ A bool f20 (double i) { auto c = i <=> 5.0; return c != std::partial_ordering::less; }
+ A bool f23 (double i) { auto c = i <=> 5.0; return c == std::partial_ordering::greater; }
+ A bool f24 (double i) { auto c = i <=> 5.0; return c != std::partial_ordering::greater; }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/other/i386-2.C gcc-17-20260705/gcc/testsuite/g++.dg/other/i386-2.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/other/i386-2.C	Sun Jun 28 22:32:12 2026
--- gcc-17-20260705/gcc/testsuite/g++.dg/other/i386-2.C	Sun Jul  5 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile { target i?86-*-* x86_64-*-* } } */
! /* { dg-options "-O -pedantic-errors -march=k8 -msse4a -m3dnow -mavx -mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr -mxsaveopt -msha -mxsavec -mxsaves -mclflushopt -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mpconfig -mwbnoinvd -menqcmd -mavx512vp2intersect -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavxifma -mavxvnniint8 -mavxneconvert -mcmpccxadd -mamx-fp16 -mprefetchi -mraoint -mamx-complex -mavxvnniint16 -msm3 -msha512 -msm4 -mavx10.2 -mamx-avx512 -mamx-tf32 -mamx-fp8 -mmovrs -mamx-movrs" } */
  /* { dg-skip-if "requires hosted libstdc++ for cstdlib malloc" { ! hostedlib } } */
  
  /* Test that {,x,e,p,t,s,w,a,b,i}mmintrin.h, mm3dnow.h, fma4intrin.h,
--- 1,5 ----
  /* { dg-do compile { target i?86-*-* x86_64-*-* } } */
! /* { dg-options "-O -pedantic-errors -march=k8 -msse4a -m3dnow -mavx -mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr -mxsaveopt -msha -mxsavec -mxsaves -mclflushopt -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mpconfig -mwbnoinvd -menqcmd -mavx512vp2intersect -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavxifma -mavxvnniint8 -mavxneconvert -mcmpccxadd -mamx-fp16 -mprefetchi -mraoint -mamx-complex -mavxvnniint16 -msm3 -msha512 -msm4 -mavx10.2 -mamx-avx512 -mamx-fp8 -mmovrs -mamx-movrs" } */
  /* { dg-skip-if "requires hosted libstdc++ for cstdlib malloc" { ! hostedlib } } */
  
  /* Test that {,x,e,p,t,s,w,a,b,i}mmintrin.h, mm3dnow.h, fma4intrin.h,
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/other/i386-3.C gcc-17-20260705/gcc/testsuite/g++.dg/other/i386-3.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/other/i386-3.C	Sun Jun 28 22:32:12 2026
--- gcc-17-20260705/gcc/testsuite/g++.dg/other/i386-3.C	Sun Jul  5 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile { target i?86-*-* x86_64-*-* } } */
! /* { dg-options "-O -fkeep-inline-functions -march=k8 -msse4a -m3dnow -mavx -mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr -mxsaveopt -msha -mxsavec -mxsaves -mclflushopt -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mpconfig -mwbnoinvd -menqcmd -mavx512vp2intersect -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavxifma -mavxvnniint8 -mavxneconvert -mcmpccxadd -mamx-fp16 -mprefetchi -mraoint -mamx-complex -mavxvnniint16 -msm3 -msha512 -msm4 -mavx10.2 -mamx-avx512 -mamx-tf32 -mamx-fp8 -mmovrs -mamx-movrs" } */
  /* { dg-skip-if "requires hosted libstdc++ for cstdlib malloc" { ! hostedlib } } */
  
  /* Test that {,x,e,p,t,s,w,a,b,i}mmintrin.h, mm3dnow.h, fma4intrin.h,
--- 1,5 ----
  /* { dg-do compile { target i?86-*-* x86_64-*-* } } */
! /* { dg-options "-O -fkeep-inline-functions -march=k8 -msse4a -m3dnow -mavx -mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr -mxsaveopt -msha -mxsavec -mxsaves -mclflushopt -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mpconfig -mwbnoinvd -menqcmd -mavx512vp2intersect -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavxifma -mavxvnniint8 -mavxneconvert -mcmpccxadd -mamx-fp16 -mprefetchi -mraoint -mamx-complex -mavxvnniint16 -msm3 -msha512 -msm4 -mavx10.2 -mamx-avx512 -mamx-fp8 -mmovrs -mamx-movrs" } */
  /* { dg-skip-if "requires hosted libstdc++ for cstdlib malloc" { ! hostedlib } } */
  
  /* Test that {,x,e,p,t,s,w,a,b,i}mmintrin.h, mm3dnow.h, fma4intrin.h,
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/reflect/members_of17.C gcc-17-20260705/gcc/testsuite/g++.dg/reflect/members_of17.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/reflect/members_of17.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/g++.dg/reflect/members_of17.C	Sun Jul  5 22:32:12 2026
***************
*** 0 ****
--- 1,24 ----
+ // PR c++/125819
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ #include <cstdlib>
+ #include <meta>
+ 
+ consteval bool
+ check ()
+ {
+   bool found = false;
+   for (auto m : members_of (^^::, std::meta::access_context::current ()))
+     if (has_identifier (m))
+       {
+ 	if (identifier_of (m) == "__builtin_abs"
+ 	    || identifier_of (m) == "__builtin_va_list")
+ 	  return false;
+ 	if (identifier_of (m) == "abs")
+ 	  found = true;
+       }
+   return found;
+ }
+ 
+ static_assert (check ());
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.dg/reflect/pr126036.C gcc-17-20260705/gcc/testsuite/g++.dg/reflect/pr126036.C
*** gcc-17-20260628/gcc/testsuite/g++.dg/reflect/pr126036.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/g++.dg/reflect/pr126036.C	Sun Jul  5 22:32:12 2026
***************
*** 0 ****
--- 1,21 ----
+ // PR c++/126036
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ #include <meta>
+ 
+ namespace A { int a; };
+ 
+ template <int N>
+ void
+ foo ()
+ {
+   constexpr auto m = std::meta::members_of (^^A, std::meta::access_context::unchecked ());
+   // { dg-error "is not a constant expression because it refers to a result of 'operator new'" "" { target *-*-* } .-1 }
+ }
+ 
+ void
+ bar ()
+ {
+   foo <42> ();
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.target/aarch64/lane-bound-1.C gcc-17-20260705/gcc/testsuite/g++.target/aarch64/lane-bound-1.C
*** gcc-17-20260628/gcc/testsuite/g++.target/aarch64/lane-bound-1.C	Sun Jun 28 22:32:12 2026
--- gcc-17-20260705/gcc/testsuite/g++.target/aarch64/lane-bound-1.C	Sun Jul  5 22:32:12 2026
*************** void hh(uint64x2_t c, int __b)
*** 12,18 ****
  {
    try {
      vgetq_lane_u64(c, __b);
!     // { dg-error "must be a constant immediate" "" { target *-*-* } 0 }
    } catch (...)
    {
          removeme(); // { dg-bogus "declared with attribute error" }
--- 12,18 ----
  {
    try {
      vgetq_lane_u64(c, __b);
!     // { dg-error "must be an integer constant expression" "" { target *-*-* } 0 }
    } catch (...)
    {
          removeme(); // { dg-bogus "declared with attribute error" }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.target/aarch64/pr103147-6.C gcc-17-20260705/gcc/testsuite/g++.target/aarch64/pr103147-6.C
*** gcc-17-20260628/gcc/testsuite/g++.target/aarch64/pr103147-6.C	Sun Jun 28 22:32:12 2026
--- gcc-17-20260705/gcc/testsuite/g++.target/aarch64/pr103147-6.C	Sun Jul  5 22:32:12 2026
***************
*** 1,3 ****
--- 1,4 ----
  /* { dg-options "-mgeneral-regs-only" } */
+ /* { dg-excess-errors "arm_neon.h" } */
  
  #include <arm_neon.h>
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.target/aarch64/pr117048.C gcc-17-20260705/gcc/testsuite/g++.target/aarch64/pr117048.C
*** gcc-17-20260628/gcc/testsuite/g++.target/aarch64/pr117048.C	Sun Jun 28 22:32:12 2026
--- gcc-17-20260705/gcc/testsuite/g++.target/aarch64/pr117048.C	Sun Jul  5 22:32:12 2026
*************** void G(
*** 30,34 ****
      v[12] = vgetq_lane_s64(vd01, 0);
  }
  
! /* { dg-final { scan-assembler {\txar\tv[0-9]+\.2d, v[0-9]+\.2d, v[0-9]+\.2d, 32\n} } } */
  
--- 30,34 ----
      v[12] = vgetq_lane_s64(vd01, 0);
  }
  
! /* { dg-final { scan-assembler {\txar\tv[0-9]+\.2d, v[0-9]+\.2d, v[0-9]+\.2d, #?32\n} } } */
  
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.target/aarch64/sve/aarch64-ssve.exp gcc-17-20260705/gcc/testsuite/g++.target/aarch64/sve/aarch64-ssve.exp
*** gcc-17-20260628/gcc/testsuite/g++.target/aarch64/sve/aarch64-ssve.exp	Sun Jun 28 22:32:12 2026
--- gcc-17-20260705/gcc/testsuite/g++.target/aarch64/sve/aarch64-ssve.exp	Sun Jul  5 22:32:12 2026
*************** gcc_parallel_test_enable 0
*** 37,43 ****
  set preamble {
  #include <arm_sve.h>
  
! #pragma GCC target "+i8mm+f32mm+f64mm+sve2+sve2-sm4+sve2-aes+sve2-sha3+sme+sme2p2+ssve-bitperm+ssve-fexpa"
  
  extern svbool_t &pred;
  
--- 37,43 ----
  set preamble {
  #include <arm_sve.h>
  
! #pragma GCC target "+i8mm+f32mm+f64mm+sve2+sve2-sm4+sve2-sha3+sme+sme2p2+ssve-bitperm+ssve-fexpa+ssve-aes"
  
  extern svbool_t &pred;
  
*************** set streaming_ok {
*** 150,155 ****
--- 150,161 ----
      u8 = svbext (u8, u8)
      u8 = svbgrp (u8, u8)
      f32 = svexpa (u32)
+     u8 = svaesd (u8, u8)
+     u8 = svaese (u8, u8)
+     u8 = svaesimc (u8)
+     u8 = svaesmc (u8)
+     u64 = svpmullb_pair (u64, u64)
+     u64 = svpmullt_pair (u64, u64)
  }
  
  # This order follows the list in the SME manual.
*************** set nonstreaming_only {
*** 162,171 ****
      u64 = svadrw_index (u64, u64)
      u32 = svadrd_index (u32, u32)
      u64 = svadrd_index (u64, u64)
-     u8 = svaesd (u8, u8)
-     u8 = svaese (u8, u8)
-     u8 = svaesimc (u8)
-     u8 = svaesmc (u8)
      f32 = svbfmmla (f32, bf16, bf16)
      f32 = svadda (pred, 1.0f, f32)
      f32 = svmmla (f32, f32, f32)
--- 168,173 ----
*************** set nonstreaming_only {
*** 264,271 ****
      u32 = svldnt1_gather_offset_u32 (pred, u32, 1)
      pred = svmatch (pred, u8, u8)
      pred = svnmatch (pred, u8, u8)
-     u64 = svpmullb_pair (u64, u64)
-     u64 = svpmullt_pair (u64, u64)
      svprfb_gather_offset (pred, void_ptr, u64, SV_PLDL1KEEP)
      svprfb_gather_offset (pred, u64, 1, SV_PLDL1KEEP)
      svprfd_gather_index (pred, void_ptr, u64, SV_PLDL1KEEP)
--- 266,271 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.target/i386/pr122446-amxtf32.C gcc-17-20260705/gcc/testsuite/g++.target/i386/pr122446-amxtf32.C
*** gcc-17-20260628/gcc/testsuite/g++.target/i386/pr122446-amxtf32.C	Sun Jun 28 22:32:12 2026
--- gcc-17-20260705/gcc/testsuite/g++.target/i386/pr122446-amxtf32.C	Thu Jan  1 00:00:00 1970
***************
*** 1,16 ****
- /* { dg-do compile { target { ! ia32 } } } */
- /* { dg-options "-mamx-tile -mamx-tf32 -O0" } */
- /* { dg-final { scan-assembler "tmmultf32ps\[ \\t]+%tmm2,\[ \\t\]*%tmm1,\[ \\t\]*%tmm0" } } */
- 
- #include <immintrin.h>
- 
- template <int dst, int src1, int src2>
- struct mmultf32ps
- {
-   void operator()() { _tile_mmultf32ps(dst, src1, src2); }
- };
- 
- void test_amx_tf32()
- {
-   mmultf32ps<0, 1, 2>()();
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.target/sh/torture/pr55212-c311.C gcc-17-20260705/gcc/testsuite/g++.target/sh/torture/pr55212-c311.C
*** gcc-17-20260628/gcc/testsuite/g++.target/sh/torture/pr55212-c311.C	Sun Jun 28 22:32:12 2026
--- gcc-17-20260705/gcc/testsuite/g++.target/sh/torture/pr55212-c311.C	Sun Jul  5 22:32:12 2026
***************
*** 1,4 ****
! /* { dg-additional-options "-mlra -fpic" }  */
  /* { dg-do compile }  */
  
  
--- 1,4 ----
! /* { dg-additional-options "-fpic" }  */
  /* { dg-do compile }  */
  
  
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.target/sh/torture/pr55212-c333.C gcc-17-20260705/gcc/testsuite/g++.target/sh/torture/pr55212-c333.C
*** gcc-17-20260628/gcc/testsuite/g++.target/sh/torture/pr55212-c333.C	Sun Jun 28 22:32:12 2026
--- gcc-17-20260705/gcc/testsuite/g++.target/sh/torture/pr55212-c333.C	Sun Jul  5 22:32:12 2026
***************
*** 1,4 ****
! /* { dg-additional-options "-std=c++20 -mlra -fpic -w " }  */
  /* { dg-do compile }  */
  
  typedef unsigned int size_t;
--- 1,4 ----
! /* { dg-additional-options "-std=c++20 -fpic -w " }  */
  /* { dg-do compile }  */
  
  typedef unsigned int size_t;
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.target/sh/torture/pr55212-c373.C gcc-17-20260705/gcc/testsuite/g++.target/sh/torture/pr55212-c373.C
*** gcc-17-20260628/gcc/testsuite/g++.target/sh/torture/pr55212-c373.C	Sun Jun 28 22:32:12 2026
--- gcc-17-20260705/gcc/testsuite/g++.target/sh/torture/pr55212-c373.C	Sun Jul  5 22:32:12 2026
***************
*** 1,4 ****
! /* { dg-additional-options "-std=c++20 -mlra -fpic -w " }  */
  /* { dg-do compile }  */
  
        namespace std {
--- 1,4 ----
! /* { dg-additional-options "-std=c++20 -fpic -w " }  */
  /* { dg-do compile }  */
  
        namespace std {
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.target/sh/torture/pr55212-c384.C gcc-17-20260705/gcc/testsuite/g++.target/sh/torture/pr55212-c384.C
*** gcc-17-20260628/gcc/testsuite/g++.target/sh/torture/pr55212-c384.C	Sun Jun 28 22:32:12 2026
--- gcc-17-20260705/gcc/testsuite/g++.target/sh/torture/pr55212-c384.C	Sun Jul  5 22:32:12 2026
***************
*** 1,4 ****
! /* { dg-additional-options "-std=c++20 -mlra -fpic -w " }  */
  /* { dg-do compile }  */
  
     typedef unsigned int size_t;
--- 1,4 ----
! /* { dg-additional-options "-std=c++20 -fpic -w " }  */
  /* { dg-do compile }  */
  
     typedef unsigned int size_t;
diff -Nrcpad gcc-17-20260628/gcc/testsuite/g++.target/sh/torture/pr55212-c413.C gcc-17-20260705/gcc/testsuite/g++.target/sh/torture/pr55212-c413.C
*** gcc-17-20260628/gcc/testsuite/g++.target/sh/torture/pr55212-c413.C	Sun Jun 28 22:32:12 2026
--- gcc-17-20260705/gcc/testsuite/g++.target/sh/torture/pr55212-c413.C	Sun Jul  5 22:32:12 2026
***************
*** 1,4 ****
! /* { dg-additional-options "-std=c++20 -mlra -fpic -w " }  */
  /* { dg-do compile }  */
  
  struct Trans_NS_WTF_HashMap
--- 1,4 ----
! /* { dg-additional-options "-std=c++20 -fpic -w " }  */
  /* { dg-do compile }  */
  
  struct Trans_NS_WTF_HashMap
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.dg/Warray-bounds-65.c gcc-17-20260705/gcc/testsuite/gcc.dg/Warray-bounds-65.c
*** gcc-17-20260628/gcc/testsuite/gcc.dg/Warray-bounds-65.c	Sun Jun 28 22:32:12 2026
--- gcc-17-20260705/gcc/testsuite/gcc.dg/Warray-bounds-65.c	Sun Jul  5 22:32:12 2026
*************** test_note (int (*pia3)[3])    // { dg-me
*** 31,41 ****
  void test_a1_cst (_Bool (*pba0)[0], char (*pca1)[1],
  		  short (*psa2)[2], int (*pia3)[3])
  {
!   T ((*pba0)[-1]);            // { dg-warning "array subscript -1 is (above|outside) array bounds of '_Bool\\\[0]'" }
!   T ((*pba0)[0]);             // { dg-warning "array subscript 0 is (above|outside) array bounds of '_Bool\\\[0]'" }
!   T ((*pba0)[1]);             // { dg-warning "array subscript 1 is (above|outside) array bounds of '_Bool\\\[0]'" }
!   T ((*pba0)[2]);             // { dg-warning "array subscript 2 is (above|outside) array bounds of '_Bool\\\[0]'" }
!   T ((*pba0)[12]);            // { dg-warning "array subscript 12 is (above|outside) array bounds of '_Bool\\\[0]'" }
  
    T ((*pca1)[-1]);            // { dg-warning "array subscript -1 is (below|outside) array bounds of 'char\\\[1]'" }
    T ((*pca1)[0]);
--- 31,41 ----
  void test_a1_cst (_Bool (*pba0)[0], char (*pca1)[1],
  		  short (*psa2)[2], int (*pia3)[3])
  {
!   T ((*pba0)[-1]);            // { dg-warning "array subscript -1 is (above|outside) array bounds of 'bool\\\[0]'" }
!   T ((*pba0)[0]);             // { dg-warning "array subscript 0 is (above|outside) array bounds of 'bool\\\[0]'" }
!   T ((*pba0)[1]);             // { dg-warning "array subscript 1 is (above|outside) array bounds of 'bool\\\[0]'" }
!   T ((*pba0)[2]);             // { dg-warning "array subscript 2 is (above|outside) array bounds of 'bool\\\[0]'" }
!   T ((*pba0)[12]);            // { dg-warning "array subscript 12 is (above|outside) array bounds of 'bool\\\[0]'" }
  
    T ((*pca1)[-1]);            // { dg-warning "array subscript -1 is (below|outside) array bounds of 'char\\\[1]'" }
    T ((*pca1)[0]);
*************** void test_a1_cst (_Bool (*pba0)[0], char
*** 61,80 ****
  void test_a2_cst (_Bool (*pba0_1)[0][1], char (*pca1_2)[1][2],
  		  short (*psa2_3)[2][3], int (*pia3_4)[3][4])
  {
!   T ((*pba0_1)[-1][-1]);        // { dg-warning "array subscript -1 is (below|outside) array bounds of '_Bool\\\[1]'" }
!   T ((*pba0_1)[-1][0]);         // { dg-warning "array subscript -1 is (above|outside) array bounds of '_Bool\\\[0]\\\[1]'" }
  
!   T ((*pba0_1)[0][-1]);         // { dg-warning "array subscript -1 is (below|outside) array bounds of '_Bool\\\[1]'" }
!   T ((*pba0_1)[0][0]);          // { dg-warning "array subscript 0 is (above|outside) array bounds of '_Bool\\\[0]\\\[1]'" }
!   T ((*pba0_1)[0][1]);          // { dg-warning "array subscript 1 is (above|outside) array bounds of '_Bool\\\[1]'" }
!   T ((*pba0_1)[0][2]);          // { dg-warning "array subscript 2 is (above|outside) array bounds of '_Bool\\\[1]'" }
!   T ((*pba0_1)[0][12]);         // { dg-warning "array subscript 12 is (above|outside) array bounds of '_Bool\\\[1]'" }
  
!   T ((*pba0_1)[1][-1]);         // { dg-warning "array subscript -1 is (below|outside) array bounds of '_Bool\\\[1]'" }
!   T ((*pba0_1)[1][0]);          // { dg-warning "array subscript 1 is (above|outside) array bounds of '_Bool\\\[0]\\\[1]'" }
!   T ((*pba0_1)[1][1]);          // { dg-warning "array subscript 1 is (above|outside) array bounds of '_Bool\\\[1]'" }
!   T ((*pba0_1)[1][2]);          // { dg-warning "array subscript 2 is (above|outside) array bounds of '_Bool\\\[1]'" }
!   T ((*pba0_1)[1][12]);         // { dg-warning "array subscript 12 is (above|outside) array bounds of '_Bool\\\[1]'" }
  
  
    T ((*pca1_2)[0][0]);
--- 61,80 ----
  void test_a2_cst (_Bool (*pba0_1)[0][1], char (*pca1_2)[1][2],
  		  short (*psa2_3)[2][3], int (*pia3_4)[3][4])
  {
!   T ((*pba0_1)[-1][-1]);        // { dg-warning "array subscript -1 is (below|outside) array bounds of 'bool\\\[1]'" }
!   T ((*pba0_1)[-1][0]);         // { dg-warning "array subscript -1 is (above|outside) array bounds of 'bool\\\[0]\\\[1]'" }
  
!   T ((*pba0_1)[0][-1]);         // { dg-warning "array subscript -1 is (below|outside) array bounds of 'bool\\\[1]'" }
!   T ((*pba0_1)[0][0]);          // { dg-warning "array subscript 0 is (above|outside) array bounds of 'bool\\\[0]\\\[1]'" }
!   T ((*pba0_1)[0][1]);          // { dg-warning "array subscript 1 is (above|outside) array bounds of 'bool\\\[1]'" }
!   T ((*pba0_1)[0][2]);          // { dg-warning "array subscript 2 is (above|outside) array bounds of 'bool\\\[1]'" }
!   T ((*pba0_1)[0][12]);         // { dg-warning "array subscript 12 is (above|outside) array bounds of 'bool\\\[1]'" }
  
!   T ((*pba0_1)[1][-1]);         // { dg-warning "array subscript -1 is (below|outside) array bounds of 'bool\\\[1]'" }
!   T ((*pba0_1)[1][0]);          // { dg-warning "array subscript 1 is (above|outside) array bounds of 'bool\\\[0]\\\[1]'" }
!   T ((*pba0_1)[1][1]);          // { dg-warning "array subscript 1 is (above|outside) array bounds of 'bool\\\[1]'" }
!   T ((*pba0_1)[1][2]);          // { dg-warning "array subscript 2 is (above|outside) array bounds of 'bool\\\[1]'" }
!   T ((*pba0_1)[1][12]);         // { dg-warning "array subscript 12 is (above|outside) array bounds of 'bool\\\[1]'" }
  
  
    T ((*pca1_2)[0][0]);
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.dg/Wbad-function-cast-1.c gcc-17-20260705/gcc/testsuite/gcc.dg/Wbad-function-cast-1.c
*** gcc-17-20260628/gcc/testsuite/gcc.dg/Wbad-function-cast-1.c	Sun Jun 28 22:32:12 2026
--- gcc-17-20260705/gcc/testsuite/gcc.dg/Wbad-function-cast-1.c	Sun Jul  5 22:32:12 2026
*************** foo(void)
*** 40,51 ****
       types.  */
    (float)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type 'float'" } */
    (double)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type 'double'" } */
!   (_Bool)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type '_Bool'" } */
    (int)rf1(); /* { dg-warning "cast from function call of type 'float' to non-matching type 'int'" } */
    (long)rf2(); /* { dg-warning "cast from function call of type 'double' to non-matching type 'long int'" } */
    (double)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type 'double'" } */
    (int)ef(); /* { dg-warning "cast from function call of type 'enum e' to non-matching type 'int'" } */
!   (int)bf(); /* { dg-warning "cast from function call of type '_Bool' to non-matching type 'int'" } */
    (__SIZE_TYPE__)pf1(); /* { dg-warning "cast from function call of type 'char \\*' to non-matching type '\[^\\n\]*'" } */
    (__PTRDIFF_TYPE__)pf2(); /* { dg-warning "cast from function call of type 'int \\*' to non-matching type '\[^\\n\]*'" } */
  }
--- 40,51 ----
       types.  */
    (float)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type 'float'" } */
    (double)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type 'double'" } */
!   (_Bool)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type 'bool'" } */
    (int)rf1(); /* { dg-warning "cast from function call of type 'float' to non-matching type 'int'" } */
    (long)rf2(); /* { dg-warning "cast from function call of type 'double' to non-matching type 'long int'" } */
    (double)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type 'double'" } */
    (int)ef(); /* { dg-warning "cast from function call of type 'enum e' to non-matching type 'int'" } */
!   (int)bf(); /* { dg-warning "cast from function call of type 'bool' to non-matching type 'int'" } */
    (__SIZE_TYPE__)pf1(); /* { dg-warning "cast from function call of type 'char \\*' to non-matching type '\[^\\n\]*'" } */
    (__PTRDIFF_TYPE__)pf2(); /* { dg-warning "cast from function call of type 'int \\*' to non-matching type '\[^\\n\]*'" } */
  }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-3.c gcc-17-20260705/gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-3.c
*** gcc-17-20260628/gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-3.c	Sun Jun 28 22:32:13 2026
--- gcc-17-20260705/gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-3.c	Sun Jul  5 22:32:13 2026
***************
*** 6,12 ****
  /* { dg-final { scan-assembler-times "\[\t \]0x2\[\t \]+\[^\n\]*cts_type" 2 } } */
  /* { dg-final { scan-assembler-times "\[\t \]0x1\[\t \]+\[^\n\]*cts_bits" 2 } } */
  
! /* { dg-final { scan-assembler-times "ascii \"_Bool.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */
  
  #include <stdbool.h>
  
--- 6,12 ----
  /* { dg-final { scan-assembler-times "\[\t \]0x2\[\t \]+\[^\n\]*cts_type" 2 } } */
  /* { dg-final { scan-assembler-times "\[\t \]0x1\[\t \]+\[^\n\]*cts_bits" 2 } } */
  
! /* { dg-final { scan-assembler-times "ascii \"bool.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */
  
  #include <stdbool.h>
  
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.dg/debug/dwarf2/pr125935-1.c gcc-17-20260705/gcc/testsuite/gcc.dg/debug/dwarf2/pr125935-1.c
*** gcc-17-20260628/gcc/testsuite/gcc.dg/debug/dwarf2/pr125935-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.dg/debug/dwarf2/pr125935-1.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,8 ----
+ /* PR c/125935 */
+ /* { dg-do compile } */
+ /* { dg-options "-std=c17 -g -dA" } */
+ 
+ _Bool x;
+ 
+ /* { dg-final { scan-assembler-times "(DW_AT_name: \"_Bool\"|\"_Bool..\"\[^\\r\\n\]*DW_AT_name)" 1 } } */
+ /* { dg-final { scan-assembler-not "(DW_AT_name: \"bool\"|\"bool..\"\[^\\r\\n\]*DW_AT_name)" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.dg/debug/dwarf2/pr125935-2.c gcc-17-20260705/gcc/testsuite/gcc.dg/debug/dwarf2/pr125935-2.c
*** gcc-17-20260628/gcc/testsuite/gcc.dg/debug/dwarf2/pr125935-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.dg/debug/dwarf2/pr125935-2.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,8 ----
+ /* PR c/125935 */
+ /* { dg-do compile } */
+ /* { dg-options "-std=c23 -g -dA" } */
+ 
+ _Bool x;
+ 
+ /* { dg-final { scan-assembler-not "(DW_AT_name: \"_Bool\"|\"_Bool..\"\[^\\r\\n\]*DW_AT_name)" } } */
+ /* { dg-final { scan-assembler-times "(DW_AT_name: \"bool\"|\"bool..\"\[^\\r\\n\]*DW_AT_name)" 1 } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.dg/debug/dwarf2/pr125935-3.c gcc-17-20260705/gcc/testsuite/gcc.dg/debug/dwarf2/pr125935-3.c
*** gcc-17-20260628/gcc/testsuite/gcc.dg/debug/dwarf2/pr125935-3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.dg/debug/dwarf2/pr125935-3.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,8 ----
+ /* PR c/125935 */
+ /* { dg-do compile } */
+ /* { dg-options "-std=c23 -g -dA" } */
+ 
+ bool x;
+ 
+ /* { dg-final { scan-assembler-not "(DW_AT_name: \"_Bool\"|\"_Bool..\"\[^\\r\\n\]*DW_AT_name)" } } */
+ /* { dg-final { scan-assembler-times "(DW_AT_name: \"bool\"|\"bool..\"\[^\\r\\n\]*DW_AT_name)" 1 } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.dg/gomp/deprecate-2.c gcc-17-20260705/gcc/testsuite/gcc.dg/gomp/deprecate-2.c
*** gcc-17-20260628/gcc/testsuite/gcc.dg/gomp/deprecate-2.c	Sun Jun 28 22:32:13 2026
--- gcc-17-20260705/gcc/testsuite/gcc.dg/gomp/deprecate-2.c	Sun Jul  5 22:32:13 2026
*************** void f()
*** 42,47 ****
  
  // { dg-warning "42: the specification of arguments to 'uses_allocators' where each item is of the form 'allocator\\(traits\\)' is deprecated since OpenMP 5.2 \\\[-Wdeprecated-openmp\\\]" "" { target *-*-* }  34 }
  }
- 
- // { dg-excess-errors "sorry, unimplemented: 'uses_allocators' clause" }
- // { dg-excess-errors "sorry, unimplemented: 'uses_allocators' clause" }
--- 42,44 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.dg/plugin/poly-int-tests.h gcc-17-20260705/gcc/testsuite/gcc.dg/plugin/poly-int-tests.h
*** gcc-17-20260628/gcc/testsuite/gcc.dg/plugin/poly-int-tests.h	Sun Jun 28 22:32:13 2026
--- gcc-17-20260705/gcc/testsuite/gcc.dg/plugin/poly-int-tests.h	Sun Jul  5 22:32:13 2026
*************** test_can_div_away_from_zero_p ()
*** 2161,2166 ****
--- 2161,2178 ----
  					 ph::make (4, 5, 6),
  					 &const_quot));
    ASSERT_EQ (const_quot, C (0));
+   ASSERT_EQ (can_div_away_from_zero_p (ph::make (16, 0, 16),
+ 				       ph::make (16, 16, 15), &const_quot),
+ 	     N <= 2);
+   ASSERT_EQ (const_quot, N <= 2 ? C (1) : C (0));
+   ASSERT_TRUE (can_div_away_from_zero_p (ph::make (16, 0, 0),
+ 					 ph::make (16, 16, 16),
+ 					 &const_quot));
+   ASSERT_EQ (const_quot, C (1));
+   ASSERT_TRUE (can_div_away_from_zero_p (ph::make (8, 0, 0),
+ 					 ph::make (16, 16, 16),
+ 					 &const_quot));
+   ASSERT_EQ (const_quot, C (1));
  }
  
  /* Test known_size_p.  */
*************** test_signed_can_div_away_from_zero_p ()
*** 3388,3393 ****
--- 3400,3437 ----
  					 ph::make (-8, -4, -5),
  					 &const_quot));
    ASSERT_EQ (const_quot, -3);
+   ASSERT_EQ (can_div_away_from_zero_p (ph::make (-16, 0, -16),
+ 				       ph::make (-16, -16, -15), &const_quot),
+ 	     N <= 2);
+   ASSERT_EQ (const_quot, N <= 2 ? C (1) : C (-3));
+   ASSERT_TRUE (can_div_away_from_zero_p (ph::make (-16, 0, 0),
+ 					 ph::make (-16, -16, -16),
+ 					 &const_quot));
+   ASSERT_EQ (const_quot, C (1));
+   ASSERT_TRUE (can_div_away_from_zero_p (ph::make (-8, 0, 0),
+ 					 ph::make (-16, -16, -16),
+ 					 &const_quot));
+   ASSERT_EQ (const_quot, C (1));
+   ASSERT_EQ (can_div_away_from_zero_p (ph::make (-16, 0, 16),
+ 				       ph::make (16, 16, 15), &const_quot),
+ 	     N <= 2);
+   ASSERT_EQ (const_quot, N <= 2 ? C (-1) : C (1));
+   ASSERT_TRUE (can_div_away_from_zero_p (ph::make (-16, 0, 0),
+ 					 ph::make (16, 16, 16),
+ 					 &const_quot));
+   ASSERT_EQ (const_quot, C (-1));
+   ASSERT_TRUE (can_div_away_from_zero_p (ph::make (-8, 0, 0),
+ 					 ph::make (16, 16, 16),
+ 					 &const_quot));
+   ASSERT_EQ (const_quot, C (-1));
+   ASSERT_TRUE (can_div_away_from_zero_p (ph::make (16, 0, 0),
+ 					 ph::make (-16, -16, -16),
+ 					 &const_quot));
+   ASSERT_EQ (const_quot, C (-1));
+   ASSERT_TRUE (can_div_away_from_zero_p (ph::make (8, 0, 0),
+ 					 ph::make (-16, -16, -16),
+ 					 &const_quot));
+   ASSERT_EQ (const_quot, C (-1));
  }
  
  /* Test maybe_in_range_p for signed C.  */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.dg/pr102202-1.c gcc-17-20260705/gcc/testsuite/gcc.dg/pr102202-1.c
*** gcc-17-20260628/gcc/testsuite/gcc.dg/pr102202-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.dg/pr102202-1.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,16 ----
+ /* PR tree-optimization/102202 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-optimized" } */
+ 
+ /* A [0, 2] length is not a boolean range, so the call must be left alone.  */
+ 
+ void
+ g1 (int a, int c, char *d)
+ {
+   if (a < 0 || a > 2)
+     __builtin_unreachable ();
+ 
+   __builtin_memset (d, c, a);
+ }
+ 
+ /* { dg-final { scan-tree-dump "__builtin_memset" "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.dg/pr102202.c gcc-17-20260705/gcc/testsuite/gcc.dg/pr102202.c
*** gcc-17-20260628/gcc/testsuite/gcc.dg/pr102202.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.dg/pr102202.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,19 ----
+ /* PR tree-optimization/102202 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-cdce-details" } */
+ 
+ void
+ g1 (unsigned int n, int c, char *d)
+ {
+   unsigned int len = n & 1;
+   __builtin_memset (d, c, len);
+ }
+ 
+ char *
+ g2 (unsigned int n, int c, char *d)
+ {
+   unsigned int len = n & 1;
+   return __builtin_memset (d, c, len);
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "function call is shrink-wrapped into error conditions" 2 "cdce" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.dg/pr112390.c gcc-17-20260705/gcc/testsuite/gcc.dg/pr112390.c
*** gcc-17-20260628/gcc/testsuite/gcc.dg/pr112390.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.dg/pr112390.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,93 ----
+ /* PR tree-optimization/112390 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-optimized" } */
+ 
+ #include <limits.h>
+ 
+ int f32_bitand(unsigned int a)
+ {
+   return ((int)a >= 0) & ((a & (unsigned)INT_MAX) != 0);
+ }
+ 
+ int f32_truthand(unsigned int a)
+ {
+   return ((int)a >= 0) && ((a & (unsigned)INT_MAX) != 0);
+ }
+ 
+ int f32_bitior(unsigned int a)
+ {
+   return ((int)a < 0) | ((a & (unsigned)INT_MAX) == 0);
+ }
+ 
+ int f32_truthor(unsigned int a)
+ {
+   return ((int)a < 0) || ((a & (unsigned)INT_MAX) == 0);
+ }
+ 
+ int f32s_bitand(int a)
+ {
+   return (a >= 0) & ((a & INT_MAX) != 0);
+ }
+ 
+ int f32s_truthand(int a)
+ {
+   return (a >= 0) && ((a & INT_MAX) != 0);
+ }
+ 
+ int f32s_bitior(int a)
+ {
+   return (a < 0) | ((a & INT_MAX) == 0);
+ }
+ 
+ int f32s_truthor(int a)
+ {
+   return (a < 0) || ((a & INT_MAX) == 0);
+ }
+ 
+ int f64_bitand(unsigned long long a)
+ {
+   return ((long long)a >= 0) & ((a & (unsigned long long)LLONG_MAX) != 0);
+ }
+ 
+ int f64_truthand(unsigned long long a)
+ {
+   return ((long long)a >= 0) && ((a & (unsigned long long)LLONG_MAX) != 0);
+ }
+ 
+ int f64_bitior(unsigned long long a)
+ {
+   return ((long long)a < 0) | ((a & (unsigned long long)LLONG_MAX) == 0);
+ }
+ 
+ int f64_truthor(unsigned long long a)
+ {
+   return ((long long)a < 0) || ((a & (unsigned long long)LLONG_MAX) == 0);
+ }
+ 
+ int f64s_bitand(long long a)
+ {
+   return (a >= 0) & ((a & LLONG_MAX) != 0);
+ }
+ 
+ int f64s_truthand(long long a)
+ {
+   return (a >= 0) && ((a & LLONG_MAX) != 0);
+ }
+ 
+ int f64s_bitior(long long a)
+ {
+   return (a < 0) | ((a & LLONG_MAX) == 0);
+ }
+ 
+ int f64s_truthor(long long a)
+ {
+   return (a < 0) || ((a & LLONG_MAX) == 0);
+ }
+ 
+ /* { dg-final { scan-tree-dump-times ">= 0" 0 "optimized" } } */
+ /* { dg-final { scan-tree-dump-times "< 0" 0 "optimized" } } */
+ /* { dg-final { scan-tree-dump-times "BIT_AND_EXPR" 0 "optimized" } } */
+ /* { dg-final { scan-tree-dump-not "bit_and" "optimized" } } */
+ /* { dg-final { scan-tree-dump-not "bit_ior" "optimized" } } */
+ /* { dg-final { scan-tree-dump-times "> 0" 8 "optimized" } } */
+ /* { dg-final { scan-tree-dump-times "<= 0" 8 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.dg/pr112390_bitint.c gcc-17-20260705/gcc/testsuite/gcc.dg/pr112390_bitint.c
*** gcc-17-20260628/gcc/testsuite/gcc.dg/pr112390_bitint.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.dg/pr112390_bitint.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,20 ----
+ /* PR tree-optimization/112390 - _BitInt variants */
+ /* { dg-do compile { target bitint } } */
+ /* { dg-options "-O2 -fdump-tree-optimized" } */
+ 
+ int fbit11_ior(unsigned _BitInt(11) a)
+ {
+   signed _BitInt(11) sa = (signed _BitInt(11))a;
+   return (sa < 0) | ((a & 1023wb) == 0);
+ }
+ 
+ int fbit11_and(unsigned _BitInt(11) a)
+ {
+   signed _BitInt(11) sa = (signed _BitInt(11))a;
+   return (sa >= 0) & ((a & 1023wb) != 0);
+ }
+ 
+ /* { dg-final { scan-tree-dump-not "bit_and" "optimized" } } */
+ /* { dg-final { scan-tree-dump-not "bit_ior" "optimized" } } */
+ /* { dg-final { scan-tree-dump-times "> 0" 1 "optimized" } } */
+ /* { dg-final { scan-tree-dump-times "<= 0" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.dg/pr124545-2.c gcc-17-20260705/gcc/testsuite/gcc.dg/pr124545-2.c
*** gcc-17-20260628/gcc/testsuite/gcc.dg/pr124545-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.dg/pr124545-2.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,55 ----
+ /* PR tree-optimization/124545 */
+ /* Runtime correctness for the inverse-widening VN rewrite
+    (T)A +- CST -> (T)(A +- CST').  The rewrite must never change the
+    computed value.  In particular it must NOT fire when CST is not
+    representable in the inner type (which would silently drop the bits
+    above the inner precision), and it must stay correct for unsigned
+    inner types where the narrow operation wraps.  */
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+ 
+ /* CST = 2^32 does not fit in int: the value must be preserved.
+    Before the fix this comparison folded to a constant 1.  */
+ __attribute__((noipa)) int
+ oor_eq (int a)
+ {
+   return ((unsigned long long) a + 0x100000000ULL) == (unsigned long long) a;
+ }
+ 
+ __attribute__((noipa)) unsigned long long
+ oor_val (int a)
+ {
+   return (unsigned long long) a + 0x100000000ULL;
+ }
+ 
+ /* Unsigned inner: narrow add wraps mod 2^32; the widened add does not.
+    The result must match the wide arithmetic for every input.  */
+ __attribute__((noipa)) int
+ uns_carry (unsigned int a)
+ {
+   unsigned int t = a + 100u;
+   unsigned long w = (unsigned long) a + 100;
+   return w == (unsigned long) t;
+ }
+ 
+ /* Legitimate in-range case (matches the PR): k == j - 1, so the two
+    loads are the same address and the rewrite may fire.  */
+ __attribute__((noipa)) int
+ inrange_eq (int *p, int j)
+ {
+   int k = j - 1;
+   return p[j - 1] == p[k];
+ }
+ 
+ int
+ main (void)
+ {
+   if (oor_eq (5) != 0) __builtin_abort ();
+   if (oor_eq (-1) != 0) __builtin_abort ();
+   if (oor_val (5) != 5ULL + 0x100000000ULL) __builtin_abort ();
+   if (uns_carry (0xfffffff0u) != 0) __builtin_abort ();
+   if (uns_carry (10) != 1) __builtin_abort ();
+   int arr[4] = { 7, 7, 7, 7 };
+   if (inrange_eq (arr, 2) != 1) __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.dg/pr124545.c gcc-17-20260705/gcc/testsuite/gcc.dg/pr124545.c
*** gcc-17-20260628/gcc/testsuite/gcc.dg/pr124545.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.dg/pr124545.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,29 ----
+ /* PR tree-optimization/124545 */
+ /* Verify that VN recognizes (T)A + C == (T)(A + C') regardless of
+    operand order in the equality comparison.  */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-fre1" } */
+ 
+ int func1(int *a, int j) {
+   int k = j - 1;
+   return a[j - 1] == a[k];
+ }
+ 
+ int func2(int *a, int j) {
+   int k = j - 1;
+   return a[k] == a[j - 1];
+ }
+ 
+ int func3(int *a, int j) {
+   int k = j - 3;
+   return a[k] == a[j - 3];
+ }
+ 
+ int func4(int *a, int j) {
+   int k = j + 2;
+   return a[k] == a[j + 2];
+ }
+ 
+ /* All four functions should fold to return 1 after FRE.  */
+ /* The pattern is not applied on ilp32 targets (PR116845).  */
+ /* { dg-final { scan-tree-dump-times "return 1;" 4 "fre1" { xfail { ilp32 } } } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.dg/pr125737-1.c gcc-17-20260705/gcc/testsuite/gcc.dg/pr125737-1.c
*** gcc-17-20260628/gcc/testsuite/gcc.dg/pr125737-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.dg/pr125737-1.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-optimized" } */
+ 
+ int
+ f (unsigned short a, unsigned short b) {
+   int aa = a;
+   int bb = b;
+   int c = aa % bb;
+   return c < bb;
+ }
+ 
+ int
+ g (unsigned short a, unsigned short b) {
+   int aa = a;
+   int bb = b;
+   int c = aa % bb;
+   return (c >= bb) == 0;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "return 1;" 2 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.dg/pr125737-2.c gcc-17-20260705/gcc/testsuite/gcc.dg/pr125737-2.c
*** gcc-17-20260628/gcc/testsuite/gcc.dg/pr125737-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.dg/pr125737-2.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-optimized" } */
+ 
+ _Bool
+ a_mod_b_lt_b (int a, int b) {
+   return ((a % b) < b) == (b >= 0);
+ }
+ 
+ _Bool
+ a_mod_b_ge_b (int a, int b) {
+   return ((a % b) >= b) == (b < 0);
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "return 1;" 2 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.dg/pr125737.c gcc-17-20260705/gcc/testsuite/gcc.dg/pr125737.c
*** gcc-17-20260628/gcc/testsuite/gcc.dg/pr125737.c	Sun Jun 28 22:32:13 2026
--- gcc-17-20260705/gcc/testsuite/gcc.dg/pr125737.c	Thu Jan  1 00:00:00 1970
***************
*** 1,12 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -fdump-tree-optimized" } */
- 
- int
- f (unsigned short a, unsigned short b) {
-   int aa = a;
-   int bb = b;
-   int c = aa % bb;
-   return c < bb;
- }
- 
- /* { dg-final { scan-tree-dump-times "return 1;" 1 "optimized" } } */
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.dg/pr94589-5.c gcc-17-20260705/gcc/testsuite/gcc.dg/pr94589-5.c
*** gcc-17-20260628/gcc/testsuite/gcc.dg/pr94589-5.c	Sun Jun 28 22:32:13 2026
--- gcc-17-20260705/gcc/testsuite/gcc.dg/pr94589-5.c	Sun Jul  5 22:32:13 2026
***************
*** 1,6 ****
  /* PR tree-optimization/94589 */
  /* { dg-do compile { target inf } } */
! /* { dg-options "-O2 -g0 -fdump-tree-optimized" } */
  /* { dg-final { scan-tree-dump-times "\[ij]_\[0-9]+\\(D\\) (?:<|<=|>|>=) \[ij]_\[0-9]+\\(D\\)" 24 "optimized" } } */
  /* { dg-final { scan-tree-dump-times "i_\[0-9]+\\(D\\) (?:<|<=|>|>=) 5\\.0" 24 "optimized" } } */
  
--- 1,6 ----
  /* PR tree-optimization/94589 */
  /* { dg-do compile { target inf } } */
! /* { dg-options "-O2 -g0 -fdump-tree-optimized -ftrapping-math" } */
  /* { dg-final { scan-tree-dump-times "\[ij]_\[0-9]+\\(D\\) (?:<|<=|>|>=) \[ij]_\[0-9]+\\(D\\)" 24 "optimized" } } */
  /* { dg-final { scan-tree-dump-times "i_\[0-9]+\\(D\\) (?:<|<=|>|>=) 5\\.0" 24 "optimized" } } */
  
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.dg/pr94589-5a.c gcc-17-20260705/gcc/testsuite/gcc.dg/pr94589-5a.c
*** gcc-17-20260628/gcc/testsuite/gcc.dg/pr94589-5a.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.dg/pr94589-5a.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,55 ----
+ /* PR tree-optimization/94589 */
+ /* { dg-do compile { target inf } } */
+ /* { dg-options "-O2 -g0 -fdump-tree-optimized -fno-trapping-math" } */
+ /* { dg-final { scan-tree-dump-times "\[ij]_\[0-9]+\\(D\\) (?:<|<=|>|>=|u>=|u<=|u<|u>) \[ij]_\[0-9]+\\(D\\)" 24 "optimized" } } */
+ /* { dg-final { scan-tree-dump-times "i_\[0-9]+\\(D\\) (?:<|<=|>|>=|u>=|u<=|u<|u>) 5\\.0" 24 "optimized" } } */
+ 
+ #define A __attribute__((noipa))
+ A int f3 (double i, double j) { int c; if (i == j) c = 0; else if (i < j) c = -1; else if (i > j) c = 1; else c = -128; return c > 0; }
+ A int f4 (double i, double j) { int c; if (i == j) c = 0; else if (i < j) c = -1; else if (i > j) c = 1; else c = -128; return c < 0; }
+ A int f5 (double i, double j) { int c; if (i == j) c = 0; else if (i < j) c = -1; else if (i > j) c = 1; else c = -128; return c >= 0; }
+ A int f6 (double i, double j) { int c; if (i == j) c = 0; else if (i < j) c = -1; else if (i > j) c = 1; else c = -128; return c <= 0; }
+ A int f7 (double i, double j) { int c; if (i == j) c = 0; else if (i < j) c = -1; else if (i > j) c = 1; else c = -128; return c == -1; }
+ A int f8 (double i, double j) { int c; if (i == j) c = 0; else if (i < j) c = -1; else if (i > j) c = 1; else c = -128; return c != -1; }
+ A int f9 (double i, double j) { int c; if (i == j) c = 0; else if (i < j) c = -1; else if (i > j) c = 1; else c = -128; return c > -1; }
+ A int f10 (double i, double j) { int c; if (i == j) c = 0; else if (i < j) c = -1; else if (i > j) c = 1; else c = -128; return c <= -1; }
+ A int f11 (double i, double j) { int c; if (i == j) c = 0; else if (i < j) c = -1; else if (i > j) c = 1; else c = -128; return c == 1; }
+ A int f12 (double i, double j) { int c; if (i == j) c = 0; else if (i < j) c = -1; else if (i > j) c = 1; else c = -128; return c != 1; }
+ A int f13 (double i, double j) { int c; if (i == j) c = 0; else if (i < j) c = -1; else if (i > j) c = 1; else c = -128; return c < 1; }
+ A int f14 (double i, double j) { int c; if (i == j) c = 0; else if (i < j) c = -1; else if (i > j) c = 1; else c = -128; return c >= 1; }
+ A int f17 (double i) { int c; if (i == 5.0) c = 0; else if (i < 5.0) c = -1; else if (i > 5.0) c = 1; else c = -128; return c > 0; }
+ A int f18 (double i) { int c; if (i == 5.0) c = 0; else if (i < 5.0) c = -1; else if (i > 5.0) c = 1; else c = -128; return c < 0; }
+ A int f19 (double i) { int c; if (i == 5.0) c = 0; else if (i < 5.0) c = -1; else if (i > 5.0) c = 1; else c = -128; return c >= 0; }
+ A int f20 (double i) { int c; if (i == 5.0) c = 0; else if (i < 5.0) c = -1; else if (i > 5.0) c = 1; else c = -128; return c <= 0; }
+ A int f21 (double i) { int c; if (i == 5.0) c = 0; else if (i < 5.0) c = -1; else if (i > 5.0) c = 1; else c = -128; return c == -1; }
+ A int f22 (double i) { int c; if (i == 5.0) c = 0; else if (i < 5.0) c = -1; else if (i > 5.0) c = 1; else c = -128; return c != -1; }
+ A int f23 (double i) { int c; if (i == 5.0) c = 0; else if (i < 5.0) c = -1; else if (i > 5.0) c = 1; else c = -128; return c > -1; }
+ A int f24 (double i) { int c; if (i == 5.0) c = 0; else if (i < 5.0) c = -1; else if (i > 5.0) c = 1; else c = -128; return c <= -1; }
+ A int f25 (double i) { int c; if (i == 5.0) c = 0; else if (i < 5.0) c = -1; else if (i > 5.0) c = 1; else c = -128; return c == 1; }
+ A int f26 (double i) { int c; if (i == 5.0) c = 0; else if (i < 5.0) c = -1; else if (i > 5.0) c = 1; else c = -128; return c != 1; }
+ A int f27 (double i) { int c; if (i == 5.0) c = 0; else if (i < 5.0) c = -1; else if (i > 5.0) c = 1; else c = -128; return c < 1; }
+ A int f28 (double i) { int c; if (i == 5.0) c = 0; else if (i < 5.0) c = -1; else if (i > 5.0) c = 1; else c = -128; return c >= 1; }
+ A signed char f31 (double i, double j) { signed char c; if (i == j) c = 0; else if (i < j) c = -1; else if (i > j) c = 1; else c = -128; unsigned char d = c; unsigned char e = -d; signed char f = e; return f < 0; }
+ A signed char f32 (double i, double j) { signed char c; if (i == j) c = 0; else if (i < j) c = -1; else if (i > j) c = 1; else c = -128; unsigned char d = c; unsigned char e = -d; signed char f = e; return f > 0; }
+ A signed char f33 (double i, double j) { signed char c; if (i == j) c = 0; else if (i < j) c = -1; else if (i > j) c = 1; else c = -128; unsigned char d = c; unsigned char e = -d; signed char f = e; return f <= 0; }
+ A signed char f34 (double i, double j) { signed char c; if (i == j) c = 0; else if (i < j) c = -1; else if (i > j) c = 1; else c = -128; unsigned char d = c; unsigned char e = -d; signed char f = e; return f >= 0; }
+ A signed char f35 (double i, double j) { signed char c; if (i == j) c = 0; else if (i < j) c = -1; else if (i > j) c = 1; else c = -128; unsigned char d = c; unsigned char e = -d; signed char f = e; return f == 1; }
+ A signed char f36 (double i, double j) { signed char c; if (i == j) c = 0; else if (i < j) c = -1; else if (i > j) c = 1; else c = -128; unsigned char d = c; unsigned char e = -d; signed char f = e; return f != 1; }
+ A signed char f37 (double i, double j) { signed char c; if (i == j) c = 0; else if (i < j) c = -1; else if (i > j) c = 1; else c = -128; unsigned char d = c; unsigned char e = -d; signed char f = e; return f < 1; }
+ A signed char f38 (double i, double j) { signed char c; if (i == j) c = 0; else if (i < j) c = -1; else if (i > j) c = 1; else c = -128; unsigned char d = c; unsigned char e = -d; signed char f = e; return f >= 1; }
+ A signed char f39 (double i, double j) { signed char c; if (i == j) c = 0; else if (i < j) c = -1; else if (i > j) c = 1; else c = -128; unsigned char d = c; unsigned char e = -d; signed char f = e; return f == -1; }
+ A signed char f40 (double i, double j) { signed char c; if (i == j) c = 0; else if (i < j) c = -1; else if (i > j) c = 1; else c = -128; unsigned char d = c; unsigned char e = -d; signed char f = e; return f != -1; }
+ A signed char f41 (double i, double j) { signed char c; if (i == j) c = 0; else if (i < j) c = -1; else if (i > j) c = 1; else c = -128; unsigned char d = c; unsigned char e = -d; signed char f = e; return f > -1; }
+ A signed char f42 (double i, double j) { signed char c; if (i == j) c = 0; else if (i < j) c = -1; else if (i > j) c = 1; else c = -128; unsigned char d = c; unsigned char e = -d; signed char f = e; return f <= -1; }
+ A signed char f45 (double i) { signed char c; if (i == 5.0) c = 0; else if (i < 5.0) c = -1; else if (i > 5.0) c = 1; else c = -128; unsigned char d = c; unsigned char e = -d; signed char f = e; return f < 0; }
+ A signed char f46 (double i) { signed char c; if (i == 5.0) c = 0; else if (i < 5.0) c = -1; else if (i > 5.0) c = 1; else c = -128; unsigned char d = c; unsigned char e = -d; signed char f = e; return f > 0; }
+ A signed char f47 (double i) { signed char c; if (i == 5.0) c = 0; else if (i < 5.0) c = -1; else if (i > 5.0) c = 1; else c = -128; unsigned char d = c; unsigned char e = -d; signed char f = e; return f <= 0; }
+ A signed char f48 (double i) { signed char c; if (i == 5.0) c = 0; else if (i < 5.0) c = -1; else if (i > 5.0) c = 1; else c = -128; unsigned char d = c; unsigned char e = -d; signed char f = e; return f >= 0; }
+ A signed char f49 (double i) { signed char c; if (i == 5.0) c = 0; else if (i < 5.0) c = -1; else if (i > 5.0) c = 1; else c = -128; unsigned char d = c; unsigned char e = -d; signed char f = e; return f == 1; }
+ A signed char f50 (double i) { signed char c; if (i == 5.0) c = 0; else if (i < 5.0) c = -1; else if (i > 5.0) c = 1; else c = -128; unsigned char d = c; unsigned char e = -d; signed char f = e; return f != 1; }
+ A signed char f51 (double i) { signed char c; if (i == 5.0) c = 0; else if (i < 5.0) c = -1; else if (i > 5.0) c = 1; else c = -128; unsigned char d = c; unsigned char e = -d; signed char f = e; return f < 1; }
+ A signed char f52 (double i) { signed char c; if (i == 5.0) c = 0; else if (i < 5.0) c = -1; else if (i > 5.0) c = 1; else c = -128; unsigned char d = c; unsigned char e = -d; signed char f = e; return f >= 1; }
+ A signed char f53 (double i) { signed char c; if (i == 5.0) c = 0; else if (i < 5.0) c = -1; else if (i > 5.0) c = 1; else c = -128; unsigned char d = c; unsigned char e = -d; signed char f = e; return f == -1; }
+ A signed char f54 (double i) { signed char c; if (i == 5.0) c = 0; else if (i < 5.0) c = -1; else if (i > 5.0) c = 1; else c = -128; unsigned char d = c; unsigned char e = -d; signed char f = e; return f != -1; }
+ A signed char f55 (double i) { signed char c; if (i == 5.0) c = 0; else if (i < 5.0) c = -1; else if (i > 5.0) c = 1; else c = -128; unsigned char d = c; unsigned char e = -d; signed char f = e; return f > -1; }
+ A signed char f56 (double i) { signed char c; if (i == 5.0) c = 0; else if (i < 5.0) c = -1; else if (i > 5.0) c = 1; else c = -128; unsigned char d = c; unsigned char e = -d; signed char f = e; return f <= -1; }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.dg/torture/pr125040.c gcc-17-20260705/gcc/testsuite/gcc.dg/torture/pr125040.c
*** gcc-17-20260628/gcc/testsuite/gcc.dg/torture/pr125040.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.dg/torture/pr125040.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ 
+ int a() {
+   int b;
+   int *c = __builtin_calloc(sizeof(int), b);
+   int count;
+   for (int d; d;)
+     for (int e;; b++) {
+       c[e] = c[b - count - 1];
+       c[b - count - 1] = count;
+       count = count + 1;
+     }
+   __builtin_printf("", c);
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.dg/torture/pr126008.c gcc-17-20260705/gcc/testsuite/gcc.dg/torture/pr126008.c
*** gcc-17-20260628/gcc/testsuite/gcc.dg/torture/pr126008.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.dg/torture/pr126008.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target int32plus } */
+ 
+ int h, q, r;
+ int o[27];
+ 
+ __attribute__((noipa))
+ void z (int r) {
+   int q = -13363 + r; // 27
+   int p = -71005931 * q + ~51083117 + 1968243255; // == 0
+   while (p != 12)
+   {
+     o[p] = 1 + p;
+     p = 1 + p;
+   }
+ }
+ 
+ int main () {
+   z(13390);
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.dg/tree-ssa/pr122569-3.c gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/pr122569-3.c
*** gcc-17-20260628/gcc/testsuite/gcc.dg/tree-ssa/pr122569-3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.dg/tree-ssa/pr122569-3.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,38 ----
+ /* PR tree-optimization/122569 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-forwprop1-details" } */
+ 
+ /* Test that the forwprop DeBruijn CLZ matcher recognizes the variant
+    idiom that isolates the MSB as a power of two via (s - (s >> 1))
+    after the OR-cascade.  This pattern uses a CTZ-style DeBruijn magic
+    applied to 2^MSB, not to the all-bits-below value directly.
+    Reported on PR 122569 as a second reproducer.
+ 
+    The table element type here is unsigned long (64-bit on LP64 targets)
+    rather than int, which exercises the relaxed element-type check.  */
+ 
+ typedef unsigned long long uint64_t;
+ 
+ void
+ get_msb_index (unsigned long *result, uint64_t value)
+ {
+   static const unsigned long deBruijnTable64[64] = {
+     63, 0,  58, 1,  59, 47, 53, 2,  60, 39, 48, 27, 54,
+     33, 42, 3,  61, 51, 37, 40, 49, 18, 28, 20, 55, 30,
+     34, 11, 43, 14, 22, 4,  62, 57, 46, 52, 38, 26, 32,
+     41, 50, 36, 17, 19, 29, 10, 13, 21, 56, 45, 25, 31,
+     35, 16, 9,  12, 44, 24, 15, 8,  23, 7,  6,  5
+   };
+ 
+   value |= value >> 1;
+   value |= value >> 2;
+   value |= value >> 4;
+   value |= value >> 8;
+   value |= value >> 16;
+   value |= value >> 32;
+ 
+   *result = deBruijnTable64[((value - (value >> 1))
+ 			     * (uint64_t) 0x07EDD5E59A4E28C2ULL) >> 58];
+ }
+ 
+ /* { dg-final { scan-tree-dump "__builtin_clz|\\.CLZ" "forwprop1" { target { clzll && { lp64 || llp64 } } } } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.misc-tests/outputs.exp gcc-17-20260705/gcc/testsuite/gcc.misc-tests/outputs.exp
*** gcc-17-20260628/gcc/testsuite/gcc.misc-tests/outputs.exp	Sun Jun 28 22:32:13 2026
--- gcc-17-20260705/gcc/testsuite/gcc.misc-tests/outputs.exp	Sun Jul  5 22:32:13 2026
*************** if !$skip_lto {
*** 50,64 ****
      set ltop [check_linker_plugin_available]
  }
  
! # Check for GNU LD.  Some files like .ld1_args depend on this.  This
! # should really be testing whether HAVE_GNU_LD was set by configure.
! # If we find GNU ld here, but the compiler wasn't configured
! # --with-gnu-ld or with DEFAULT_LINKER pointing at GNU ld, on a target
! # that doesn't set gnu_ld=yes unconditionally, configure and thus
! # collect2 will conservatively assume there's no support for @file in
! # the linker, but our atfile tests will expect ld1_args files to be
! # created, and thus fail.  Configuring the compiler --with-gnu-ld
! # fixes this.
  set gld [check_effective_target_gld]
  # Darwin's linker is not silent about missing -L values.
  set ld64 [istarget *-*-darwin*]
--- 50,57 ----
      set ltop [check_linker_plugin_available]
  }
  
! # Check for GNU ld.  Some files like .ld1_args depend on this.  This
! # should really be testing whether the linker supports GNU style response files.
  set gld [check_effective_target_gld]
  # Darwin's linker is not silent about missing -L values.
  set ld64 [istarget *-*-darwin*]
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/acle/arm_sc_memchr.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/acle/arm_sc_memchr.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/acle/arm_sc_memchr.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/acle/arm_sc_memchr.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,38 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target aarch64_variant_pcs } */
+ /* { dg-options "-O1 -march=armv8-a" } */
+ 
+ #include <assert.h>
+ #include <stdint.h>
+ #include <string.h>
+ 
+ #include <arm_sme.h>
+ 
+ unsigned char basic[] = {'a', 'b', 'c', 'd', 'e', 'f'};
+ 
+ int
+ main (void)
+ {
+   unsigned char buffer[1024];
+   memset (buffer, 0xaa, sizeof buffer);
+   buffer[128] = 'x';
+ 
+   assert (__arm_sc_memchr (basic, 'a', sizeof basic) == basic);
+   assert (__arm_sc_memchr (basic, 'd', sizeof basic) == basic + 3);
+   assert (__arm_sc_memchr (basic, 'f', sizeof basic) == basic + 5);
+   assert (__arm_sc_memchr (basic, 'x', sizeof basic) == NULL);
+ 
+   assert (__arm_sc_memchr (basic, 'd', 3) == NULL);
+   assert (__arm_sc_memchr (basic, 'd', 4) == basic + 3);
+   assert (__arm_sc_memchr (basic, 'a', 0) == NULL);
+ 
+   assert (__arm_sc_memchr (basic, 'a' + 256, sizeof basic) == basic);
+ 
+   assert (__arm_sc_memchr (basic + 1, 'a', sizeof (basic) - 1) == NULL);
+ 
+   assert (__arm_sc_memchr (buffer, 'x', sizeof buffer) == buffer + 128);
+ 
+   assert (__arm_sc_memchr (buffer, 'x', SIZE_MAX) == buffer + 128);
+ 
+   return 0;
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/acle/arm_sc_memcpy.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/acle/arm_sc_memcpy.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/acle/arm_sc_memcpy.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/acle/arm_sc_memcpy.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target aarch64_variant_pcs } */
+ /* { dg-options "-O1 -march=armv8-a" } */
+ 
+ #include <assert.h>
+ #include <string.h>
+ 
+ #include <arm_sme.h>
+ 
+ int
+ main (void)
+ {
+   char src[] = "abcdef";
+   char dst[8] = { 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x' };
+ 
+   assert (__arm_sc_memcpy (dst + 4, src, 0) == dst + 4);
+   assert (memcmp (dst, "xxxxxxxx", 8) == 0);
+ 
+   assert (__arm_sc_memcpy (dst + 1, src + 2, 3) == dst + 1);
+   assert (memcmp (dst, "xcdexxxx", 8) == 0);
+ 
+   return 0;
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/acle/arm_sc_memmove.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/acle/arm_sc_memmove.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/acle/arm_sc_memmove.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/acle/arm_sc_memmove.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,39 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target aarch64_variant_pcs } */
+ /* { dg-options "-O1 -march=armv8-a" } */
+ 
+ #include <assert.h>
+ #include <string.h>
+ 
+ #include <arm_sme.h>
+ 
+ int
+ main (void)
+ {
+   char src[] = "abcdef";
+   char dst[16] = {'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x'};
+ 
+   assert (__arm_sc_memmove (dst + 4, src, 0) == dst + 4);
+   assert (memcmp (dst, "xxxxxxxx", 8) == 0);
+ 
+   assert (__arm_sc_memmove (dst + 1, src + 2, 3) == dst + 1);
+   assert (memcmp (dst, "xcdexxxx", 8) == 0);
+ 
+   __arm_sc_memcpy (dst, src, sizeof src);
+   assert (__arm_sc_memmove (dst + 2, dst, 4) == dst + 2);
+   assert (memcmp (dst, "ababcd", 6) == 0);
+ 
+   __arm_sc_memcpy (dst, src, sizeof src);
+   assert (__arm_sc_memmove (dst, dst + 2, 4) == dst);
+   assert (memcmp (dst, "cdefef", 6) == 0);
+ 
+   __arm_sc_memcpy (dst, src, sizeof src);
+   assert (__arm_sc_memmove (dst + 1, dst + 1, 3) == dst + 1);
+   assert (memcmp (dst, "abcdef", 6) == 0);
+ 
+   __arm_sc_memcpy (dst, src, sizeof src);
+   assert (__arm_sc_memmove (dst + 3, dst, 0) == dst + 3);
+   assert (memcmp (dst, "abcdef", 6) == 0);
+ 
+   return 0;
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/acle/arm_sc_memset.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/acle/arm_sc_memset.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/acle/arm_sc_memset.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/acle/arm_sc_memset.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,33 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target aarch64_variant_pcs } */
+ /* { dg-options "-O1 -march=armv8-a" } */
+ 
+ #include <assert.h>
+ #include <stdint.h>
+ #include <string.h>
+ 
+ #include <arm_sme.h>
+ 
+ int
+ main (void)
+ {
+   unsigned char buf[16];
+ 
+   memset (buf, 0x11, sizeof buf);
+ 
+   assert (__arm_sc_memset (buf + 3, 0xaa, 5) == buf + 3);
+ 
+   assert (buf[2] == 0x11);
+   assert (buf[3] == 0xaa);
+   assert (buf[7] == 0xaa);
+   assert (buf[8] == 0x11);
+ 
+   assert (__arm_sc_memset (buf + 4, 0x55, 0) == buf + 4);
+   assert (buf[4] == 0xaa);
+ 
+   assert (__arm_sc_memset (buf, 0x1234, 2) == buf);
+   assert (buf[0] == 0x34);
+   assert (buf[1] == 0x34);
+ 
+   return 0;
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_dup.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_dup.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_dup.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_dup.c	Sun Jul  5 22:32:13 2026
*************** bfloat16x8_t vdupq_test (bfloat16_t a)
*** 36,53 ****
  {
    return vdupq_n_bf16 (a);
  }
  
  bfloat16x8_t test_vdupq_lane_bf16 (bfloat16x4_t a)
  {
    return vdupq_lane_bf16 (a, 1);
  }
! /* { dg-final { scan-assembler-times "dup\\tv\[0-9\]+\.8h, v\[0-9\]+.h\\\[0\\\]" 2 } } */
  
  bfloat16_t test_vget_lane_bf16 (bfloat16x4_t a)
  {
    return vget_lane_bf16 (a, 1);
  }
! /* { dg-final { scan-assembler-times "dup\\th\[0-9\]+, v\[0-9\]+\.h\\\[1\\\]" 2 } } */
  
  bfloat16x4_t test_vdup_lane_bf16 (bfloat16x4_t a)
  {
--- 36,54 ----
  {
    return vdupq_n_bf16 (a);
  }
+ /* { dg-final { scan-assembler-times "dup\\tv\[0-9\]+\.8h, v\[0-9\]+.h\\\[0\\\]" 1 } } */
  
  bfloat16x8_t test_vdupq_lane_bf16 (bfloat16x4_t a)
  {
    return vdupq_lane_bf16 (a, 1);
  }
! /* { dg-final { scan-assembler-times "dup\\tv\[0-9\]+\.8h, v\[0-9\]+.h\\\[1\\\]" 1 } } */
  
  bfloat16_t test_vget_lane_bf16 (bfloat16x4_t a)
  {
    return vget_lane_bf16 (a, 1);
  }
! /* { dg-final { scan-assembler-times "dup\\th\[0-9\]+, v\[0-9\]+\.h\\\[1\\\]" 1 } } */
  
  bfloat16x4_t test_vdup_lane_bf16 (bfloat16x4_t a)
  {
*************** bfloat16x4_t test_vdup_laneq_bf16 (bfloa
*** 59,65 ****
  {
    return vdup_laneq_bf16 (a, 7);
  }
! /* { dg-final { scan-assembler "dup\\tv\[0-9\]+\.8h, v\[0-9\]+\.h\\\[7\\\]" } } */
  
  bfloat16x8_t test_vdupq_laneq_bf16 (bfloat16x8_t a)
  {
--- 60,66 ----
  {
    return vdup_laneq_bf16 (a, 7);
  }
! /* { dg-final { scan-assembler "dup\\tv\[0-9\]+\.4h, v\[0-9\]+\.h\\\[7\\\]" } } */
  
  bfloat16x8_t test_vdupq_laneq_bf16 (bfloat16x8_t a)
  {
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_vect_copy_lane_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_vect_copy_lane_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_vect_copy_lane_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_vect_copy_lane_1.c	Sun Jul  5 22:32:13 2026
*************** test_vcopyq_laneq_bf16 (bfloat16x8_t a,
*** 28,32 ****
    return vcopyq_laneq_bf16 (a, 1, b, 2);
  }
  
! /* { dg-final { scan-assembler-times "ins\\tv0.h\\\[1\\\], v1.h\\\[2\\\]" 2 } } */
! /* { dg-final { scan-assembler-times "ins\\tv0.h\\\[1\\\], v1.h\\\[0\\\]" 2 } } */
--- 28,31 ----
    return vcopyq_laneq_bf16 (a, 1, b, 2);
  }
  
! /* { dg-final { scan-assembler-times "ins\\tv0.h\\\[1\\\], v1.h\\\[2\\\]" 4 } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_bf16_indices_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_bf16_indices_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_bf16_indices_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_bf16_indices_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,18 ****
- /* { dg-do compile { target { aarch64*-*-* } } } */
- /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */
- /* { dg-require-effective-target arm_v8_2a_bf16_neon_ok } */
- /* { dg-add-options arm_v8_2a_bf16_neon }  */
- 
- #include <arm_neon.h>
- 
- bfloat16x4_t
- test_vcopy_lane_bf16 (bfloat16x4_t a, bfloat16x4_t b)
- {
-   bfloat16x4_t res;
-   res = vcopy_lane_bf16 (a, 0, b, 4);
-   res = vcopy_lane_bf16 (a, 0, b, -1);
-   return res;
- }
- 
- /* { dg-error "lane -1 out of range 0 - 3" "" { target *-*-* } 0 } */
- /* { dg-error "lane 4 out of range 0 - 3" "" { target *-*-* } 0 } */
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_bf16_indices_2.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_bf16_indices_2.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_bf16_indices_2.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_bf16_indices_2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,18 ****
- /* { dg-do compile { target { aarch64*-*-* } } } */
- /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */
- /* { dg-require-effective-target arm_v8_2a_bf16_neon_ok } */
- /* { dg-add-options arm_v8_2a_bf16_neon }  */
- 
- #include <arm_neon.h>
- 
- bfloat16x4_t
- test_vcopy_lane_bf16 (bfloat16x4_t a, bfloat16x4_t b)
- {
-   bfloat16x4_t res;
-   res = vcopy_lane_bf16 (a, -1, b, 2);
-   res = vcopy_lane_bf16 (a, 4, b, 2);
-   return res;
- }
- 
- /* { dg-error "lane -1 out of range 0 - 3" "" { target *-*-* } 0 } */
- /* { dg-error "lane 4 out of range 0 - 3" "" { target *-*-* } 0 } */
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_indices.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_indices.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_indices.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_lane_indices.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,68 ----
+ /* { dg-do assemble } */
+ 
+ #include <arm_neon.h>
+ 
+ #define VEC_LEN(VEC) (sizeof (VEC) / sizeof ((VEC)[0]))
+ 
+ #define TEST_VCOPY_LANE(NAME, ARG1_TYPE, ARG2_TYPE) \
+   ARG1_TYPE test_##NAME (ARG1_TYPE arg1, ARG2_TYPE arg2) { return NAME (arg1, VEC_LEN (arg1), arg2, VEC_LEN (arg2)); }
+ 
+ TEST_VCOPY_LANE (vcopy_lane_u8, uint8x8_t, uint8x8_t)         /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopy_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopy_lane_s8, int8x8_t, int8x8_t)           /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopy_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopy_lane_p8, poly8x8_t, poly8x8_t)         /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopy_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopy_lane_u16, uint16x4_t, uint16x4_t)      /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopy_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopy_lane_s16, int16x4_t, int16x4_t)        /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopy_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopy_lane_p16, poly16x4_t, poly16x4_t)      /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopy_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopy_lane_bf16, bfloat16x4_t, bfloat16x4_t) /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopy_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopy_lane_u32, uint32x2_t, uint32x2_t)      /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopy_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopy_lane_s32, int32x2_t, int32x2_t)        /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopy_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopy_lane_f32, float32x2_t, float32x2_t)    /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopy_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopy_lane_u64, uint64x1_t, uint64x1_t)      /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopy_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopy_lane_s64, int64x1_t, int64x1_t)        /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopy_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopy_lane_f64, float64x1_t, float64x1_t)    /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopy_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopy_lane_p64, poly64x1_t, poly64x1_t)      /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopy_lane_[a-z0-9]+', [^\n]+} } */
+ 
+ TEST_VCOPY_LANE (vcopy_laneq_u8, uint8x8_t, uint8x16_t)        /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopy_laneq_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopy_laneq_s8, int8x8_t, int8x16_t)          /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopy_laneq_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopy_laneq_p8, poly8x8_t, poly8x16_t)        /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopy_laneq_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopy_laneq_u16, uint16x4_t, uint16x8_t)      /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopy_laneq_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopy_laneq_s16, int16x4_t, int16x8_t)        /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopy_laneq_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopy_laneq_p16, poly16x4_t, poly16x8_t)      /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopy_laneq_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopy_laneq_bf16, bfloat16x4_t, bfloat16x8_t) /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopy_laneq_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopy_laneq_u32, uint32x2_t, uint32x4_t)      /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopy_laneq_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopy_laneq_s32, int32x2_t, int32x4_t)        /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopy_laneq_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopy_laneq_f32, float32x2_t, float32x4_t)    /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopy_laneq_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopy_laneq_u64, uint64x1_t, uint64x2_t)      /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopy_laneq_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopy_laneq_s64, int64x1_t, int64x2_t)        /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopy_laneq_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopy_laneq_f64, float64x1_t, float64x2_t)    /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopy_laneq_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopy_laneq_p64, poly64x1_t, poly64x2_t)      /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopy_laneq_[a-z0-9]+', [^\n]+} } */
+ 
+ TEST_VCOPY_LANE (vcopyq_lane_u8, uint8x16_t, uint8x8_t)        /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopyq_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopyq_lane_s8, int8x16_t, int8x8_t)          /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopyq_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopyq_lane_p8, poly8x16_t, poly8x8_t)        /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopyq_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopyq_lane_u16, uint16x8_t, uint16x4_t)      /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopyq_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopyq_lane_s16, int16x8_t, int16x4_t)        /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopyq_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopyq_lane_p16, poly16x8_t, poly16x4_t)      /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopyq_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopyq_lane_bf16, bfloat16x8_t, bfloat16x4_t) /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopyq_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopyq_lane_u32, uint32x4_t, uint32x2_t)      /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopyq_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopyq_lane_s32, int32x4_t, int32x2_t)        /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopyq_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopyq_lane_f32, float32x4_t, float32x2_t)    /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopyq_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopyq_lane_u64, uint64x2_t, uint64x1_t)      /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopyq_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopyq_lane_s64, int64x2_t, int64x1_t)        /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopyq_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopyq_lane_f64, float64x2_t, float64x1_t)    /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopyq_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopyq_lane_p64, poly64x2_t, poly64x1_t)      /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopyq_lane_[a-z0-9]+', [^\n]+} } */
+ 
+ TEST_VCOPY_LANE (vcopyq_laneq_u8, uint8x16_t, uint8x16_t)       /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopyq_laneq_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopyq_laneq_s8, int8x16_t, int8x16_t)         /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopyq_laneq_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopyq_laneq_p8, poly8x16_t, poly8x16_t)       /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopyq_laneq_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopyq_laneq_u16, uint16x8_t, uint16x8_t)      /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopyq_laneq_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopyq_laneq_s16, int16x8_t, int16x8_t)        /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopyq_laneq_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopyq_laneq_p16, poly16x8_t, poly16x8_t)      /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopyq_laneq_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopyq_laneq_bf16, bfloat16x8_t, bfloat16x8_t) /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopyq_laneq_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopyq_laneq_u32, uint32x4_t, uint32x4_t)      /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopyq_laneq_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopyq_laneq_s32, int32x4_t, int32x4_t)        /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopyq_laneq_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopyq_laneq_f32, float32x4_t, float32x4_t)    /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopyq_laneq_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopyq_laneq_u64, uint64x2_t, uint64x2_t)      /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopyq_laneq_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopyq_laneq_s64, int64x2_t, int64x2_t)        /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopyq_laneq_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopyq_laneq_f64, float64x2_t, float64x2_t)    /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopyq_laneq_[a-z0-9]+', [^\n]+} } */
+ TEST_VCOPY_LANE (vcopyq_laneq_p64, poly64x2_t, poly64x2_t)      /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vcopyq_laneq_[a-z0-9]+', [^\n]+} } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_laneq_bf16_indices_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_laneq_bf16_indices_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_laneq_bf16_indices_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_laneq_bf16_indices_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do compile { target { aarch64*-*-* } } } */
- /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */
- /* { dg-require-effective-target arm_v8_2a_bf16_neon_ok } */
- /* { dg-add-options arm_v8_2a_bf16_neon }  */
- 
- #include <arm_neon.h>
- 
- bfloat16x4_t
- test_vcopy_laneq_bf16 (bfloat16x4_t a, bfloat16x8_t b)
- {
-   bfloat16x4_t res;
-   /* { dg-error "lane -1 out of range 0 - 3" "" { target *-*-* } 0 } */
-   res = vcopy_laneq_bf16 (a, -1, b, 2);
-   /* { dg-error "lane 4 out of range 0 - 3" "" { target *-*-* } 0 } */
-   res = vcopy_laneq_bf16 (a, 4, b, 2);
-   return res;
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_laneq_bf16_indices_2.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_laneq_bf16_indices_2.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_laneq_bf16_indices_2.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopy_laneq_bf16_indices_2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do compile { target { aarch64*-*-* } } } */
- /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */
- /* { dg-require-effective-target arm_v8_2a_bf16_neon_ok } */
- /* { dg-add-options arm_v8_2a_bf16_neon }  */
- 
- #include <arm_neon.h>
- 
- bfloat16x4_t
- test_vcopy_laneq_bf16 (bfloat16x4_t a, bfloat16x8_t b)
- {
-   bfloat16x4_t res;
-   /* { dg-error "lane -1 out of range 0 - 7" "" { target *-*-* } 0 } */
-   res = vcopy_laneq_bf16 (a, 1, b, -1);
-   /* { dg-error "lane 8 out of range 0 - 7" "" { target *-*-* } 0 } */
-   res = vcopy_laneq_bf16 (a, 1, b, 8);
-   return res;
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopyq_lane_bf16_indices_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopyq_lane_bf16_indices_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopyq_lane_bf16_indices_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopyq_lane_bf16_indices_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do compile { target { aarch64*-*-* } } } */
- /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */
- /* { dg-require-effective-target arm_v8_2a_bf16_neon_ok } */
- /* { dg-add-options arm_v8_2a_bf16_neon }  */
- 
- #include <arm_neon.h>
- 
- bfloat16x8_t
- test_vcopyq_lane_bf16 (bfloat16x8_t a, bfloat16x4_t b)
- {
-   bfloat16x8_t res;
-   /* { dg-error "lane -1 out of range 0 - 7" "" { target *-*-* } 0 } */
-   res = vcopyq_lane_bf16 (a, -1, b, 2);
-   /* { dg-error "lane 8 out of range 0 - 7" "" { target *-*-* } 0 } */
-   res = vcopyq_lane_bf16 (a, 8, b, 2);
-   return res;
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopyq_lane_bf16_indices_2.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopyq_lane_bf16_indices_2.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopyq_lane_bf16_indices_2.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopyq_lane_bf16_indices_2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do compile { target { aarch64*-*-* } } } */
- /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */
- /* { dg-require-effective-target arm_v8_2a_bf16_neon_ok } */
- /* { dg-add-options arm_v8_2a_bf16_neon }  */
- 
- #include <arm_neon.h>
- 
- bfloat16x8_t
- test_vcopyq_lane_bf16 (bfloat16x8_t a, bfloat16x4_t b)
- {
-   bfloat16x8_t res;
-   /* { dg-error "lane -1 out of range 0 - 3" "" { target *-*-* } 0 } */
-   res = vcopyq_lane_bf16 (a, 2, b, -1);
-   /* { dg-error "lane 4 out of range 0 - 3" "" { target *-*-* } 0 } */
-   res = vcopyq_lane_bf16 (a, 2, b, 4);
-   return res;
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopyq_laneq_bf16_indices_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopyq_laneq_bf16_indices_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopyq_laneq_bf16_indices_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopyq_laneq_bf16_indices_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do compile { target { aarch64*-*-* } } } */
- /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */
- /* { dg-require-effective-target arm_v8_2a_bf16_neon_ok } */
- /* { dg-add-options arm_v8_2a_bf16_neon }  */
- 
- #include <arm_neon.h>
- 
- bfloat16x8_t
- test_vcopyq_laneq_bf16 (bfloat16x8_t a, bfloat16x8_t b)
- {
-   bfloat16x8_t res;
-   /* { dg-error "lane -1 out of range 0 - 7" "" { target *-*-* } 0 } */
-   res = vcopyq_laneq_bf16 (a, -1, b, 2);
-   /* { dg-error "lane 8 out of range 0 - 7" "" { target *-*-* } 0 } */
-   res = vcopyq_laneq_bf16 (a, 8, b, 2);
-   return res;
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopyq_laneq_bf16_indices_2.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopyq_laneq_bf16_indices_2.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopyq_laneq_bf16_indices_2.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vcopyq_laneq_bf16_indices_2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do compile { target { aarch64*-*-* } } } */
- /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */
- /* { dg-require-effective-target arm_v8_2a_bf16_neon_ok } */
- /* { dg-add-options arm_v8_2a_bf16_neon }  */
- 
- #include <arm_neon.h>
- 
- bfloat16x8_t
- test_vcopyq_laneq_bf16 (bfloat16x8_t a, bfloat16x8_t b)
- {
-   bfloat16x8_t res;
-   /* { dg-error "lane -1 out of range 0 - 7" "" { target *-*-* } 0 } */
-   res = vcopyq_laneq_bf16 (a, 2, b, -1);
-   /* { dg-error "lane 8 out of range 0 - 7" "" { target *-*-* } 0 } */
-   res = vcopyq_laneq_bf16 (a, 2, b, 8);
-   return res;
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/lane-bound-3.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/lane-bound-3.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/lane-bound-3.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/lane-bound-3.c	Sun Jul  5 22:32:13 2026
***************
*** 12,20 ****
  __attribute__((always_inline))
  static inline
  void h(uint64x2_t c, int __b) {
!    /* Use vgetq_lane_u64 to get a 
!      __builtin_aarch64_im_lane_boundsi */
!    vgetq_lane_u64(c, __b);
  
    __builtin_unreachable();
  }
--- 12,18 ----
  __attribute__((always_inline))
  static inline
  void h(uint64x2_t c, int __b) {
!     __builtin_aarch64_im_lane_boundsi (sizeof (c), sizeof (c[0]), __b);
  
    __builtin_unreachable();
  }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/aarch64-neon.exp gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/aarch64-neon.exp
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/aarch64-neon.exp	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/aarch64-neon.exp	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,43 ----
+ #  Specific regression driver for AArch64 NEON.
+ #  Copyright (C) 2026-2026 Free Software Foundation, Inc.
+ #  Contributed by ARM Ltd.
+ #
+ #  This file is part of GCC.
+ #
+ #  GCC 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.
+ #
+ #  GCC 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 GCC; see the file COPYING3.  If not see
+ #  <http://www.gnu.org/licenses/>.  */
+ 
+ # GCC testsuite that uses the `dg.exp' driver.
+ 
+ # Exit immediately if this isn't an AArch64 target.
+ if {![istarget aarch64*-*-*] } then {
+   return
+ }
+ 
+ # Load support procs.
+ load_lib gcc-dg.exp
+ 
+ # Initialize `dg'.
+ dg-init
+ 
+ # Main loop.
+ dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*\[cCs\]]] \
+ 	" -ansi -pedantic-errors -std=c23 -O2 -march=armv8-a+simd" ""
+ 
+ # Again, for big-endian targets.
+ dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*\[cCs\]]] \
+ 	" -ansi -pedantic-errors -std=c23 -O2 -march=armv8-a+simd -mbig-endian" ""
+ 
+ # All done.
+ dg-finish
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/arm_neon_test.h gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/arm_neon_test.h
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/arm_neon_test.h	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/arm_neon_test.h	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,24 ----
+ #include "arm_neon.h"
+ 
+ #pragma GCC target "+simd+fp16+bf16+sha3"
+ 
+ #define VEC_LEN(VEC) (sizeof (VEC) / sizeof (VEC[0]))
+ 
+ #define TEST_UNARY(NAME, RET_TYPE, ARG_1_TYPE)                                 \
+   RET_TYPE test_##NAME (ARG_1_TYPE a) { return NAME (a); }
+ 
+ #define TEST_UNIFORM_UNARY(NAME, TYPE) TEST_UNARY (NAME, TYPE, TYPE)
+ 
+ #define TEST_BINARY(NAME, RET_TYPE, ARG_1_TYPE, ARG_2_TYPE)                    \
+   RET_TYPE test_##NAME (ARG_1_TYPE a, ARG_2_TYPE b) { return NAME (a, b); }
+ 
+ #define TEST_UNIFORM_BINARY(NAME, TYPE) TEST_BINARY (NAME, TYPE, TYPE, TYPE)
+ 
+ #define TEST_TERNARY(NAME, RET_TYPE, ARG_1_TYPE, ARG_2_TYPE, ARG_3_TYPE)       \
+   RET_TYPE test_##NAME (ARG_1_TYPE a, ARG_2_TYPE b, ARG_3_TYPE c)              \
+   {                                                                            \
+     return NAME (a, b, c);                                                     \
+   }
+ 
+ #define TEST_UNIFORM_TERNARY(NAME, TYPE)                                       \
+   TEST_TERNARY (NAME, TYPE, TYPE, TYPE, TYPE)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vadd.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vadd.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vadd.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vadd.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,203 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ /*
+ ** test_vadd_u8:
+ ** add	v0\.8b, (v0\.8b, v1\.8b|v1\.8b, v0\.8b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vadd_u8, uint8x8_t)
+ 
+ /*
+ ** test_vadd_s8:
+ ** add	v0\.8b, (v0\.8b, v1\.8b|v1\.8b, v0\.8b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vadd_s8, int8x8_t)
+ 
+ /*
+ ** test_vadd_p8:
+ ** eor	v0\.8b, (v0\.8b, v1\.8b|v1\.8b, v0\.8b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vadd_p8, poly8x8_t)
+ 
+ /*
+ ** test_vadd_u16:
+ ** add	v0\.4h, (v0\.4h, v1\.4h|v1\.4h, v0\.4h)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vadd_u16, uint16x4_t)
+ 
+ /*
+ ** test_vadd_s16:
+ ** add	v0\.4h, (v0\.4h, v1\.4h|v1\.4h, v0\.4h)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vadd_s16, int16x4_t)
+ 
+ /*
+ ** test_vadd_p16:
+ ** eor	v0\.8b, (v0\.8b, v1\.8b|v1\.8b, v0\.8b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vadd_p16, poly16x4_t)
+ 
+ /*
+ ** test_vadd_u32:
+ ** add	v0\.2s, (v0\.2s, v1\.2s|v1\.2s, v0\.2s)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vadd_u32, uint32x2_t)
+ 
+ /*
+ ** test_vadd_s32:
+ ** add	v0\.2s, (v0\.2s, v1\.2s|v1\.2s, v0\.2s)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vadd_s32, int32x2_t)
+ 
+ /*
+ ** test_vadd_u64:
+ ** add	d0, (d0, d1|d1, d0)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vadd_u64, uint64x1_t)
+ 
+ /*
+ ** test_vadd_s64:
+ ** add	d0, (d0, d1|d1, d0)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vadd_s64, int64x1_t)
+ 
+ /*
+ ** test_vadd_p64:
+ ** eor	v0\.8b, (v0\.8b, v1\.8b|v1\.8b, v0\.8b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vadd_p64, poly64x1_t)
+ 
+ /*
+ ** test_vaddq_u8:
+ ** add	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vaddq_u8, uint8x16_t)
+ 
+ /*
+ ** test_vaddq_s8:
+ ** add	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vaddq_s8, int8x16_t)
+ 
+ /*
+ ** test_vaddq_p8:
+ ** eor	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vaddq_p8, poly8x16_t)
+ 
+ /*
+ ** test_vaddq_u16:
+ ** add	v0\.8h, (v0\.8h, v1\.8h|v1\.8h, v0\.8h)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vaddq_u16, uint16x8_t)
+ 
+ /*
+ ** test_vaddq_s16:
+ ** add	v0\.8h, (v0\.8h, v1\.8h|v1\.8h, v0\.8h)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vaddq_s16, int16x8_t)
+ 
+ /*
+ ** test_vaddq_f16:
+ ** fadd	v0\.8h, (v0\.8h, v1\.8h|v1\.8h, v0\.8h)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vaddq_f16, float16x8_t)
+ 
+ /*
+ ** test_vaddq_p16:
+ ** eor	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vaddq_p16, poly16x8_t)
+ 
+ /*
+ ** test_vaddq_u32:
+ ** add	v0\.4s, (v0\.4s, v1\.4s|v1\.4s, v0\.4s)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vaddq_u32, uint32x4_t)
+ 
+ /*
+ ** test_vaddq_s32:
+ ** add	v0\.4s, (v0\.4s, v1\.4s|v1\.4s, v0\.4s)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vaddq_s32, int32x4_t)
+ 
+ /*
+ ** test_vaddq_f32:
+ ** fadd	v0\.4s, (v0\.4s, v1\.4s|v1\.4s, v0\.4s)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vaddq_f32, float32x4_t)
+ 
+ /*
+ ** test_vaddq_u64:
+ ** add	v0\.2d, (v0\.2d, v1\.2d|v1\.2d, v0\.2d)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vaddq_u64, uint64x2_t)
+ 
+ /*
+ ** test_vaddq_s64:
+ ** add	v0\.2d, (v0\.2d, v1\.2d|v1\.2d, v0\.2d)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vaddq_s64, int64x2_t)
+ 
+ /*
+ ** test_vaddq_f64:
+ ** fadd	v0\.2d, (v0\.2d, v1\.2d|v1\.2d, v0\.2d)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vaddq_f64, float64x2_t)
+ 
+ /*
+ ** test_vaddq_p64:
+ ** eor	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vaddq_p64, poly64x2_t)
+ 
+ /* `poly128_t` is a scalar type, like `__uint128_t`, so it is passed in two GPR
+     registers.  *
+ /*
+ ** test_vaddq_p128:
+ ** eor	x[0-9], x[0-9]+, x[0-9]+
+ ** eor	x[0-9], x[0-9]+, x[0-9]+
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vaddq_p128, poly128_t)
+ 
+ /*
+ ** test_vaddd_u64:
+ ** add	x0, (x0, x1|x1, x0)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vaddd_u64, uint64_t)
+ 
+ /*
+ ** test_vaddd_s64:
+ ** add	x0, (x0, x1|x1, x0)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vaddd_s64, int64_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vand.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vand.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vand.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vand.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,116 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ /*
+ ** test_vand_u8:
+ ** and	v0\.8b, (v0\.8b, v1\.8b|v1\.8b, v0\.8b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vand_u8, uint8x8_t)
+ 
+ /*
+ ** test_vand_s8:
+ ** and	v0\.8b, (v0\.8b, v1\.8b|v1\.8b, v0\.8b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vand_s8, int8x8_t)
+ 
+ /*
+ ** test_vand_u16:
+ ** and	v0\.8b, (v0\.8b, v1\.8b|v1\.8b, v0\.8b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vand_u16, uint16x4_t)
+ 
+ /*
+ ** test_vand_s16:
+ ** and	v0\.8b, (v0\.8b, v1\.8b|v1\.8b, v0\.8b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vand_s16, int16x4_t)
+ 
+ /*
+ ** test_vand_u32:
+ ** and	v0\.8b, (v0\.8b, v1\.8b|v1\.8b, v0\.8b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vand_u32, uint32x2_t)
+ 
+ /*
+ ** test_vand_s32:
+ ** and	v0\.8b, (v0\.8b, v1\.8b|v1\.8b, v0\.8b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vand_s32, int32x2_t)
+ 
+ /*
+ ** test_vand_u64:
+ ** and	v0\.8b, (v0\.8b, v1\.8b|v1\.8b, v0\.8b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vand_u64, uint64x1_t)
+ 
+ /*
+ ** test_vand_s64:
+ ** and	v0\.8b, (v0\.8b, v1\.8b|v1\.8b, v0\.8b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vand_s64, int64x1_t)
+ 
+ /*
+ ** test_vandq_u8:
+ ** and	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vandq_u8, uint8x16_t)
+ 
+ /*
+ ** test_vandq_s8:
+ ** and	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vandq_s8, int8x16_t)
+ 
+ /*
+ ** test_vandq_u16:
+ ** and	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vandq_u16, uint16x8_t)
+ 
+ /*
+ ** test_vandq_s16:
+ ** and	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vandq_s16, int16x8_t)
+ 
+ /*
+ ** test_vandq_u32:
+ ** and	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vandq_u32, uint32x4_t)
+ 
+ /*
+ ** test_vandq_s32:
+ ** and	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vandq_s32, int32x4_t)
+ 
+ /*
+ ** test_vandq_u64:
+ ** and	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vandq_u64, uint64x2_t)
+ 
+ /*
+ ** test_vandq_s64:
+ ** and	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vandq_s64, int64x2_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vbcax.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vbcax.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vbcax.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vbcax.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,60 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ /*
+ ** test_vbcaxq_u8:
+ ** bcax	v0\.16b, v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_UNIFORM_TERNARY (vbcaxq_u8, uint8x16_t)
+ 
+ /*
+ ** test_vbcaxq_u16:
+ ** bcax	v0\.16b, v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_UNIFORM_TERNARY (vbcaxq_u16, uint16x8_t)
+ 
+ /*
+ ** test_vbcaxq_u32:
+ ** bcax	v0\.16b, v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_UNIFORM_TERNARY (vbcaxq_u32, uint32x4_t)
+ 
+ /*
+ ** test_vbcaxq_u64:
+ ** bcax	v0\.16b, v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_UNIFORM_TERNARY (vbcaxq_u64, uint64x2_t)
+ 
+ /*
+ ** test_vbcaxq_s8:
+ ** bcax	v0\.16b, v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_UNIFORM_TERNARY (vbcaxq_s8, int8x16_t)
+ 
+ /*
+ ** test_vbcaxq_s16:
+ ** bcax	v0\.16b, v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_UNIFORM_TERNARY (vbcaxq_s16, int16x8_t)
+ 
+ /*
+ ** test_vbcaxq_s32:
+ ** bcax	v0\.16b, v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_UNIFORM_TERNARY (vbcaxq_s32, int32x4_t)
+ 
+ /*
+ ** test_vbcaxq_s64:
+ ** bcax	v0\.16b, v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_UNIFORM_TERNARY (vbcaxq_s64, int64x2_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vbic.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vbic.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vbic.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vbic.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,116 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ /*
+ ** test_vbic_u8:
+ ** bic	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vbic_u8, uint8x8_t)
+ 
+ /*
+ ** test_vbic_s8:
+ ** bic	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vbic_s8, int8x8_t)
+ 
+ /*
+ ** test_vbic_u16:
+ ** bic	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vbic_u16, uint16x4_t)
+ 
+ /*
+ ** test_vbic_s16:
+ ** bic	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vbic_s16, int16x4_t)
+ 
+ /*
+ ** test_vbic_u32:
+ ** bic	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vbic_u32, uint32x2_t)
+ 
+ /*
+ ** test_vbic_s32:
+ ** bic	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vbic_s32, int32x2_t)
+ 
+ /*
+ ** test_vbic_u64:
+ ** bic	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vbic_u64, uint64x1_t)
+ 
+ /*
+ ** test_vbic_s64:
+ ** bic	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vbic_s64, int64x1_t)
+ 
+ /*
+ ** test_vbicq_u8:
+ ** bic	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vbicq_u8, uint8x16_t)
+ 
+ /*
+ ** test_vbicq_s8:
+ ** bic	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vbicq_s8, int8x16_t)
+ 
+ /*
+ ** test_vbicq_u16:
+ ** bic	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vbicq_u16, uint16x8_t)
+ 
+ /*
+ ** test_vbicq_s16:
+ ** bic	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vbicq_s16, int16x8_t)
+ 
+ /*
+ ** test_vbicq_u32:
+ ** bic	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vbicq_u32, uint32x4_t)
+ 
+ /*
+ ** test_vbicq_s32:
+ ** bic	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vbicq_s32, int32x4_t)
+ 
+ /*
+ ** test_vbicq_u64:
+ ** bic	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vbicq_u64, uint64x2_t)
+ 
+ /*
+ ** test_vbicq_s64:
+ ** bic	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vbicq_s64, int64x2_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vbsl.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vbsl.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vbsl.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vbsl.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,214 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ /*
+ ** test_vbsl_u8:
+ ** bsl	v0\.8b, v1\.8b, v2\.8b
+ ** ret
+ */
+ TEST_TERNARY (vbsl_u8, uint8x8_t, uint8x8_t, uint8x8_t, uint8x8_t)
+ 
+ /*
+ ** test_vbsl_s8:
+ ** bsl	v0\.8b, v1\.8b, v2\.8b
+ ** ret
+ */
+ TEST_TERNARY (vbsl_s8, int8x8_t, uint8x8_t, int8x8_t, int8x8_t)
+ 
+ /*
+ ** test_vbsl_p8:
+ ** bsl	v0\.8b, v1\.8b, v2\.8b
+ ** ret
+ */
+ TEST_TERNARY (vbsl_p8, poly8x8_t, uint8x8_t, poly8x8_t, poly8x8_t)
+ 
+ /*
+ ** test_vbsl_mf8:
+ ** bsl	v0\.8b, v1\.8b, v2\.8b
+ ** ret
+ */
+ TEST_TERNARY (vbsl_mf8, mfloat8x8_t, uint8x8_t, mfloat8x8_t, mfloat8x8_t)
+ 
+ /*
+ ** test_vbsl_u16:
+ ** bsl	v0\.8b, v1\.8b, v2\.8b
+ ** ret
+ */
+ TEST_TERNARY (vbsl_u16, uint16x4_t, uint16x4_t, uint16x4_t, uint16x4_t)
+ 
+ /*
+ ** test_vbsl_s16:
+ ** bsl	v0\.8b, v1\.8b, v2\.8b
+ ** ret
+ */
+ TEST_TERNARY (vbsl_s16, int16x4_t, uint16x4_t, int16x4_t, int16x4_t)
+ 
+ /*
+ ** test_vbsl_p16:
+ ** bsl	v0\.8b, v1\.8b, v2\.8b
+ ** ret
+ */
+ TEST_TERNARY (vbsl_p16, poly16x4_t, uint16x4_t, poly16x4_t, poly16x4_t)
+ 
+ /*
+ ** test_vbsl_f16:
+ ** bsl	v0\.8b, v1\.8b, v2\.8b
+ ** ret
+ */
+ TEST_TERNARY (vbsl_f16, float16x4_t, uint16x4_t, float16x4_t, float16x4_t)
+ 
+ /*
+ ** test_vbsl_u32:
+ ** bsl	v0\.8b, v1\.8b, v2\.8b
+ ** ret
+ */
+ TEST_TERNARY (vbsl_u32, uint32x2_t, uint32x2_t, uint32x2_t, uint32x2_t)
+ 
+ /*
+ ** test_vbsl_s32:
+ ** bsl	v0\.8b, v1\.8b, v2\.8b
+ ** ret
+ */
+ TEST_TERNARY (vbsl_s32, int32x2_t, uint32x2_t, int32x2_t, int32x2_t)
+ 
+ /*
+ ** test_vbsl_f32:
+ ** bsl	v0\.8b, v1\.8b, v2\.8b
+ ** ret
+ */
+ TEST_TERNARY (vbsl_f32, float32x2_t, uint32x2_t, float32x2_t, float32x2_t)
+ 
+ /*
+ ** test_vbsl_u64:
+ ** bsl	v0\.8b, v1\.8b, v2\.8b
+ ** ret
+ */
+ TEST_TERNARY (vbsl_u64, uint64x1_t, uint64x1_t, uint64x1_t, uint64x1_t)
+ 
+ /*
+ ** test_vbsl_s64:
+ ** bsl	v0\.8b, v1\.8b, v2\.8b
+ ** ret
+ */
+ TEST_TERNARY (vbsl_s64, int64x1_t, uint64x1_t, int64x1_t, int64x1_t)
+ 
+ /*
+ ** test_vbsl_p64:
+ ** bsl	v0\.8b, v1\.8b, v2\.8b
+ ** ret
+ */
+ TEST_TERNARY (vbsl_p64, poly64x1_t, uint64x1_t, poly64x1_t, poly64x1_t)
+ 
+ /*
+ ** test_vbsl_f64:
+ ** bsl	v0\.8b, v1\.8b, v2\.8b
+ ** ret
+ */
+ TEST_TERNARY (vbsl_f64, float64x1_t, uint64x1_t, float64x1_t, float64x1_t)
+ 
+ /*
+ ** test_vbslq_u8:
+ ** bsl	v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_TERNARY (vbslq_u8, uint8x16_t, uint8x16_t, uint8x16_t, uint8x16_t)
+ 
+ /*
+ ** test_vbslq_s8:
+ ** bsl	v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_TERNARY (vbslq_s8, int8x16_t, uint8x16_t, int8x16_t, int8x16_t)
+ 
+ /*
+ ** test_vbslq_p8:
+ ** bsl	v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_TERNARY (vbslq_p8, poly8x16_t, uint8x16_t, poly8x16_t, poly8x16_t)
+ 
+ /*
+ ** test_vbslq_mf8:
+ ** bsl	v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_TERNARY (vbslq_mf8, mfloat8x16_t, uint8x16_t, mfloat8x16_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vbslq_u16:
+ ** bsl	v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_TERNARY (vbslq_u16, uint16x8_t, uint16x8_t, uint16x8_t, uint16x8_t)
+ 
+ /*
+ ** test_vbslq_s16:
+ ** bsl	v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_TERNARY (vbslq_s16, int16x8_t, uint16x8_t, int16x8_t, int16x8_t)
+ 
+ /*
+ ** test_vbslq_p16:
+ ** bsl	v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_TERNARY (vbslq_p16, poly16x8_t, uint16x8_t, poly16x8_t, poly16x8_t)
+ 
+ /*
+ ** test_vbslq_f16:
+ ** bsl	v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_TERNARY (vbslq_f16, float16x8_t, uint16x8_t, float16x8_t, float16x8_t)
+ 
+ /*
+ ** test_vbslq_u32:
+ ** bsl	v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_TERNARY (vbslq_u32, uint32x4_t, uint32x4_t, uint32x4_t, uint32x4_t)
+ 
+ /*
+ ** test_vbslq_s32:
+ ** bsl	v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_TERNARY (vbslq_s32, int32x4_t, uint32x4_t, int32x4_t, int32x4_t)
+ 
+ /*
+ ** test_vbslq_f32:
+ ** bsl	v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_TERNARY (vbslq_f32, float32x4_t, uint32x4_t, float32x4_t, float32x4_t)
+ 
+ /*
+ ** test_vbslq_u64:
+ ** bsl	v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_TERNARY (vbslq_u64, uint64x2_t, uint64x2_t, uint64x2_t, uint64x2_t)
+ 
+ /*
+ ** test_vbslq_s64:
+ ** bsl	v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_TERNARY (vbslq_s64, int64x2_t, uint64x2_t, int64x2_t, int64x2_t)
+ 
+ /*
+ ** test_vbslq_p64:
+ ** bsl	v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_TERNARY (vbslq_p64, poly64x2_t, uint64x2_t, poly64x2_t, poly64x2_t)
+ 
+ /*
+ ** test_vbslq_f64:
+ ** bsl	v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_TERNARY (vbslq_f64, float64x2_t, uint64x2_t, float64x2_t, float64x2_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vcls.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vcls.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vcls.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vcls.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,88 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ /*
+ ** test_vcls_u8:
+ ** cls	v0\.8b, v0\.8b
+ ** ret
+ */
+ TEST_UNARY (vcls_u8, int8x8_t, uint8x8_t)
+ 
+ /*
+ ** test_vcls_s8:
+ ** cls	v0\.8b, v0\.8b
+ ** ret
+ */
+ TEST_UNARY (vcls_s8, int8x8_t, int8x8_t)
+ 
+ /*
+ ** test_vcls_u16:
+ ** cls	v0\.4h, v0\.4h
+ ** ret
+ */
+ TEST_UNARY (vcls_u16, int16x4_t, uint16x4_t)
+ 
+ /*
+ ** test_vcls_s16:
+ ** cls	v0\.4h, v0\.4h
+ ** ret
+ */
+ TEST_UNARY (vcls_s16, int16x4_t, int16x4_t)
+ 
+ /*
+ ** test_vcls_u32:
+ ** cls	v0\.2s, v0\.2s
+ ** ret
+ */
+ TEST_UNARY (vcls_u32, int32x2_t, uint32x2_t)
+ 
+ /*
+ ** test_vcls_s32:
+ ** cls	v0\.2s, v0\.2s
+ ** ret
+ */
+ TEST_UNARY (vcls_s32, int32x2_t, int32x2_t)
+ 
+ /*
+ ** test_vclsq_u8:
+ ** cls	v0\.16b, v0\.16b
+ ** ret
+ */
+ TEST_UNARY (vclsq_u8, int8x16_t, uint8x16_t)
+ 
+ /*
+ ** test_vclsq_s8:
+ ** cls	v0\.16b, v0\.16b
+ ** ret
+ */
+ TEST_UNARY (vclsq_s8, int8x16_t, int8x16_t)
+ 
+ /*
+ ** test_vclsq_u16:
+ ** cls	v0\.8h, v0\.8h
+ ** ret
+ */
+ TEST_UNARY (vclsq_u16, int16x8_t, uint16x8_t)
+ 
+ /*
+ ** test_vclsq_s16:
+ ** cls	v0\.8h, v0\.8h
+ ** ret
+ */
+ TEST_UNARY (vclsq_s16, int16x8_t, int16x8_t)
+ 
+ /*
+ ** test_vclsq_u32:
+ ** cls	v0\.4s, v0\.4s
+ ** ret
+ */
+ TEST_UNARY (vclsq_u32, int32x4_t, uint32x4_t)
+ 
+ /*
+ ** test_vclsq_s32:
+ ** cls	v0\.4s, v0\.4s
+ ** ret
+ */
+ TEST_UNARY (vclsq_s32, int32x4_t, int32x4_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vclz.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vclz.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vclz.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vclz.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,88 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ /*
+ ** test_vclz_u8:
+ ** clz	v0\.8b, v0\.8b
+ ** ret
+ */
+ TEST_UNARY (vclz_u8, uint8x8_t, uint8x8_t)
+ 
+ /*
+ ** test_vclz_s8:
+ ** clz	v0\.8b, v0\.8b
+ ** ret
+ */
+ TEST_UNARY (vclz_s8, int8x8_t, int8x8_t)
+ 
+ /*
+ ** test_vclz_u16:
+ ** clz	v0\.4h, v0\.4h
+ ** ret
+ */
+ TEST_UNARY (vclz_u16, uint16x4_t, uint16x4_t)
+ 
+ /*
+ ** test_vclz_s16:
+ ** clz	v0\.4h, v0\.4h
+ ** ret
+ */
+ TEST_UNARY (vclz_s16, int16x4_t, int16x4_t)
+ 
+ /*
+ ** test_vclz_u32:
+ ** clz	v0\.2s, v0\.2s
+ ** ret
+ */
+ TEST_UNARY (vclz_u32, uint32x2_t, uint32x2_t)
+ 
+ /*
+ ** test_vclz_s32:
+ ** clz	v0\.2s, v0\.2s
+ ** ret
+ */
+ TEST_UNARY (vclz_s32, int32x2_t, int32x2_t)
+ 
+ /*
+ ** test_vclzq_u8:
+ ** clz	v0\.16b, v0\.16b
+ ** ret
+ */
+ TEST_UNARY (vclzq_u8, uint8x16_t, uint8x16_t)
+ 
+ /*
+ ** test_vclzq_s8:
+ ** clz	v0\.16b, v0\.16b
+ ** ret
+ */
+ TEST_UNARY (vclzq_s8, int8x16_t, int8x16_t)
+ 
+ /*
+ ** test_vclzq_u16:
+ ** clz	v0\.8h, v0\.8h
+ ** ret
+ */
+ TEST_UNARY (vclzq_u16, uint16x8_t, uint16x8_t)
+ 
+ /*
+ ** test_vclzq_s16:
+ ** clz	v0\.8h, v0\.8h
+ ** ret
+ */
+ TEST_UNARY (vclzq_s16, int16x8_t, int16x8_t)
+ 
+ /*
+ ** test_vclzq_u32:
+ ** clz	v0\.4s, v0\.4s
+ ** ret
+ */
+ TEST_UNARY (vclzq_u32, uint32x4_t, uint32x4_t)
+ 
+ /*
+ ** test_vclzq_s32:
+ ** clz	v0\.4s, v0\.4s
+ ** ret
+ */
+ TEST_UNARY (vclzq_s32, int32x4_t, int32x4_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vcnt.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vcnt.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vcnt.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vcnt.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,25 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ /*
+ ** test_vcnt_u8:
+ ** cnt	v0\.8b, v0\.8b
+ ** ret
+ */
+ TEST_UNARY (vcnt_u8, uint8x8_t, uint8x8_t)
+ 
+ /*
+ ** test_vcnt_s8:
+ ** cnt	v0\.8b, v0\.8b
+ ** ret
+ */
+ TEST_UNARY (vcnt_s8, int8x8_t, int8x8_t)
+ 
+ /*
+ ** test_vcnt_p8:
+ ** cnt	v0\.8b, v0\.8b
+ ** ret
+ */
+ TEST_UNARY (vcnt_p8, poly8x8_t, poly8x8_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vcombine.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vcombine.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vcombine.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vcombine.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,122 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ #define TEST_COMBINE(NAME, RET_TYPE, ARG_TYPE)                                 \
+   RET_TYPE test_##NAME (ARG_TYPE arg1, ARG_TYPE arg2)                          \
+   {                                                                            \
+     return NAME (arg1, arg2);                                                  \
+   }
+ 
+ /*
+ ** test_vcombine_u8:
+ ** (zip1|uzp1)	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_COMBINE (vcombine_u8, uint8x16_t, uint8x8_t)
+ 
+ /*
+ ** test_vcombine_s8:
+ ** zip1	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_COMBINE (vcombine_s8, int8x16_t, int8x8_t)
+ 
+ /*
+ ** test_vcombine_p8:
+ ** zip1	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_COMBINE (vcombine_p8, poly8x16_t, poly8x8_t)
+ 
+ /*
+ ** test_vcombine_mf8:
+ ** zip1	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_COMBINE (vcombine_mf8, mfloat8x16_t, mfloat8x8_t)
+ 
+ /*
+ ** test_vcombine_u16:
+ ** zip1	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_COMBINE (vcombine_u16, uint16x8_t, uint16x4_t)
+ 
+ /*
+ ** test_vcombine_s16:
+ ** zip1	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_COMBINE (vcombine_s16, int16x8_t, int16x4_t)
+ 
+ /*
+ ** test_vcombine_p16:
+ ** zip1	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_COMBINE (vcombine_p16, poly16x8_t, poly16x4_t)
+ 
+ /*
+ ** test_vcombine_f16:
+ ** zip1	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_COMBINE (vcombine_f16, float16x8_t, float16x4_t)
+ 
+ /*
+ ** test_vcombine_bf16:
+ ** zip1	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_COMBINE (vcombine_bf16, bfloat16x8_t, bfloat16x4_t)
+ 
+ /*
+ ** test_vcombine_u32:
+ ** zip1	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_COMBINE (vcombine_u32, uint32x4_t, uint32x2_t)
+ 
+ /*
+ ** test_vcombine_s32:
+ ** zip1	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_COMBINE (vcombine_s32, int32x4_t, int32x2_t)
+ 
+ /*
+ ** test_vcombine_f32:
+ ** zip1	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_COMBINE (vcombine_f32, float32x4_t, float32x2_t)
+ 
+ /*
+ ** test_vcombine_u64:
+ ** zip1	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_COMBINE (vcombine_u64, uint64x2_t, uint64x1_t)
+ 
+ /*
+ ** test_vcombine_s64:
+ ** zip1	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_COMBINE (vcombine_s64, int64x2_t, int64x1_t)
+ 
+ /*
+ ** test_vcombine_p64:
+ ** zip1	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_COMBINE (vcombine_p64, poly64x2_t, poly64x1_t)
+ 
+ /*
+ ** test_vcombine_f64:
+ ** zip1	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_COMBINE (vcombine_f64, float64x2_t, float64x1_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vcopy_lane.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vcopy_lane.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vcopy_lane.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vcopy_lane.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,438 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ #define TEST_COPY_LANE(NAME, TYPE1, TYPE2)                                     \
+   TYPE1 test_##NAME (TYPE1 dst, TYPE2 src)                                     \
+   {                                                                            \
+     return NAME (dst, VEC_LEN (dst) - 1, src, VEC_LEN (src) - 1);              \
+   }
+ 
+ /*
+ ** test_vcopy_lane_p8:
+ ** ins	v0\.b\[7\], v1\.b\[7\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_lane_p8, poly8x8_t, poly8x8_t)
+ 
+ /*
+ ** test_vcopy_lane_mf8:
+ ** ins	v0\.b\[7\], v1\.b\[7\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_lane_mf8, mfloat8x8_t, mfloat8x8_t)
+ 
+ /*
+ ** test_vcopy_lane_s8:
+ ** ins	v0\.b\[7\], v1\.b\[7\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_lane_s8, int8x8_t, int8x8_t)
+ 
+ /*
+ ** test_vcopy_lane_u8:
+ ** ins	v0\.b\[7\], v1\.b\[7\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_lane_u8, uint8x8_t, uint8x8_t)
+ 
+ /*
+ ** test_vcopy_laneq_p8:
+ ** ins	v0\.b\[7\], v1\.b\[15\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_laneq_p8, poly8x8_t, poly8x16_t)
+ 
+ /*
+ ** test_vcopy_laneq_mf8:
+ ** ins	v0\.b\[7\], v1\.b\[15\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_laneq_mf8, mfloat8x8_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vcopy_laneq_s8:
+ ** ins	v0\.b\[7\], v1\.b\[15\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_laneq_s8, int8x8_t, int8x16_t)
+ 
+ /*
+ ** test_vcopy_laneq_u8:
+ ** ins	v0\.b\[7\], v1\.b\[15\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_laneq_u8, uint8x8_t, uint8x16_t)
+ 
+ /*
+ ** test_vcopyq_lane_p8:
+ ** ins	v0\.b\[15\], v1\.b\[7\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_lane_p8, poly8x16_t, poly8x8_t)
+ 
+ /*
+ ** test_vcopyq_lane_mf8:
+ ** ins	v0\.b\[15\], v1\.b\[7\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_lane_mf8, mfloat8x16_t, mfloat8x8_t)
+ 
+ /*
+ ** test_vcopyq_lane_s8:
+ ** ins	v0\.b\[15\], v1\.b\[7\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_lane_s8, int8x16_t, int8x8_t)
+ 
+ /*
+ ** test_vcopyq_lane_u8:
+ ** ins	v0\.b\[15\], v1\.b\[7\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_lane_u8, uint8x16_t, uint8x8_t)
+ 
+ /*
+ ** test_vcopyq_laneq_p8:
+ ** ins	v0\.b\[15\], v1\.b\[15\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_laneq_p8, poly8x16_t, poly8x16_t)
+ 
+ /*
+ ** test_vcopyq_laneq_mf8:
+ ** ins	v0\.b\[15\], v1\.b\[15\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_laneq_mf8, mfloat8x16_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vcopyq_laneq_s8:
+ ** ins	v0\.b\[15\], v1\.b\[15\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_laneq_s8, int8x16_t, int8x16_t)
+ 
+ /*
+ ** test_vcopyq_laneq_u8:
+ ** ins	v0\.b\[15\], v1\.b\[15\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_laneq_u8, uint8x16_t, uint8x16_t)
+ 
+ /*
+ ** test_vcopy_lane_bf16:
+ ** ins	v0\.h\[3\], v1\.h\[3\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_lane_bf16, bfloat16x4_t, bfloat16x4_t)
+ 
+ /*
+ ** test_vcopy_lane_p16:
+ ** ins	v0\.h\[3\], v1\.h\[3\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_lane_p16, poly16x4_t, poly16x4_t)
+ 
+ /*
+ ** test_vcopy_lane_s16:
+ ** ins	v0\.h\[3\], v1\.h\[3\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_lane_s16, int16x4_t, int16x4_t)
+ 
+ /*
+ ** test_vcopy_lane_u16:
+ ** ins	v0\.h\[3\], v1\.h\[3\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_lane_u16, uint16x4_t, uint16x4_t)
+ 
+ /*
+ ** test_vcopy_laneq_bf16:
+ ** ins	v0\.h\[3\], v1\.h\[7\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_laneq_bf16, bfloat16x4_t, bfloat16x8_t)
+ 
+ /*
+ ** test_vcopy_laneq_p16:
+ ** ins	v0\.h\[3\], v1\.h\[7\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_laneq_p16, poly16x4_t, poly16x8_t)
+ /*
+ ** test_vcopy_laneq_s16:
+ ** ins	v0\.h\[3\], v1\.h\[7\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_laneq_s16, int16x4_t, int16x8_t)
+ 
+ /*
+ ** test_vcopy_laneq_u16:
+ ** ins	v0\.h\[3\], v1\.h\[7\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_laneq_u16, uint16x4_t, uint16x8_t)
+ 
+ /*
+ ** test_vcopyq_lane_bf16:
+ ** ins	v0\.h\[7\], v1\.h\[3\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_lane_bf16, bfloat16x8_t, bfloat16x4_t)
+ 
+ /*
+ ** test_vcopyq_lane_p16:
+ ** ins	v0\.h\[7\], v1\.h\[3\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_lane_p16, poly16x8_t, poly16x4_t)
+ 
+ /*
+ ** test_vcopyq_lane_s16:
+ ** ins	v0\.h\[7\], v1\.h\[3\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_lane_s16, int16x8_t, int16x4_t)
+ 
+ /*
+ ** test_vcopyq_lane_u16:
+ ** ins	v0\.h\[7\], v1\.h\[3\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_lane_u16, uint16x8_t, uint16x4_t)
+ 
+ /*
+ ** test_vcopyq_laneq_bf16:
+ ** ins	v0\.h\[7\], v1\.h\[7\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_laneq_bf16, bfloat16x8_t, bfloat16x8_t)
+ 
+ /*
+ ** test_vcopyq_laneq_p16:
+ ** ins	v0\.h\[7\], v1\.h\[7\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_laneq_p16, poly16x8_t, poly16x8_t)
+ 
+ /*
+ ** test_vcopyq_laneq_s16:
+ ** ins	v0\.h\[7\], v1\.h\[7\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_laneq_s16, int16x8_t, int16x8_t)
+ 
+ /*
+ ** test_vcopyq_laneq_u16:
+ ** ins	v0\.h\[7\], v1\.h\[7\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_laneq_u16, uint16x8_t, uint16x8_t)
+ 
+ // FIXME: these functions generate suboptimal code on big-endian:
+ // ins v1.s[0], v0.s[0]
+ // mov v0.16b, v1.16b
+ // ret
+ 
+ /*
+ ** test_vcopy_lane_f32: { xfail { aarch64_big_endian || { any-opts "-mbig-endian" } } }
+ ** ins	v0\.s\[1\], v1\.s\[1\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_lane_f32, float32x2_t, float32x2_t)
+ 
+ /*
+ ** test_vcopy_lane_s32: { xfail { aarch64_big_endian || { any-opts "-mbig-endian" } } }
+ ** ins	v0\.s\[1\], v1\.s\[1\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_lane_s32, int32x2_t, int32x2_t)
+ 
+ /*
+ ** test_vcopy_lane_u32: { xfail { aarch64_big_endian || { any-opts "-mbig-endian" } } }
+ ** ins	v0\.s\[1\], v1\.s\[1\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_lane_u32, uint32x2_t, uint32x2_t)
+ 
+ /*
+ ** test_vcopy_laneq_f32:
+ ** ins	v0\.s\[1\], v1\.s\[3\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_laneq_f32, float32x2_t, float32x4_t)
+ 
+ /*
+ ** test_vcopy_laneq_s32:
+ ** ins	v0\.s\[1\], v1\.s\[3\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_laneq_s32, int32x2_t, int32x4_t)
+ 
+ /*
+ ** test_vcopy_laneq_u32:
+ ** ins	v0\.s\[1\], v1\.s\[3\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_laneq_u32, uint32x2_t, uint32x4_t)
+ 
+ /*
+ ** test_vcopyq_lane_f32:
+ ** ins	v0\.s\[3\], v1\.s\[1\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_lane_f32, float32x4_t, float32x2_t)
+ 
+ /*
+ ** test_vcopyq_lane_s32:
+ ** ins	v0\.s\[3\], v1\.s\[1\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_lane_s32, int32x4_t, int32x2_t)
+ 
+ /*
+ ** test_vcopyq_lane_u32:
+ ** ins	v0\.s\[3\], v1\.s\[1\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_lane_u32, uint32x4_t, uint32x2_t)
+ 
+ /*
+ ** test_vcopyq_laneq_f32:
+ ** ins	v0\.s\[3\], v1\.s\[3\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_laneq_f32, float32x4_t, float32x4_t)
+ 
+ /*
+ ** test_vcopyq_laneq_s32:
+ ** ins	v0\.s\[3\], v1\.s\[3\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_laneq_s32, int32x4_t, int32x4_t)
+ 
+ /*
+ ** test_vcopyq_laneq_u32:
+ ** ins	v0\.s\[3\], v1\.s\[3\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_laneq_u32, uint32x4_t, uint32x4_t)
+ 
+ /*
+ ** test_vcopy_lane_f64:
+ ** fmov	d0, d1
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_lane_f64, float64x1_t, float64x1_t)
+ 
+ /*
+ ** test_vcopy_lane_p64:
+ ** fmov	d0, d1
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_lane_p64, poly64x1_t, poly64x1_t)
+ 
+ /*
+ ** test_vcopy_lane_s64:
+ ** fmov	d0, d1
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_lane_s64, int64x1_t, int64x1_t)
+ 
+ /*
+ ** test_vcopy_lane_u64:
+ ** fmov	d0, d1
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_lane_u64, uint64x1_t, uint64x1_t)
+ 
+ /*
+ ** test_vcopy_laneq_f64:
+ ** dup	d0, v1\.d\[1\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_laneq_f64, float64x1_t, float64x2_t)
+ 
+ /*
+ ** test_vcopy_laneq_p64:
+ ** dup	d0, v1\.d\[1\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_laneq_p64, poly64x1_t, poly64x2_t)
+ /*
+ ** test_vcopy_laneq_s64:
+ ** dup	d0, v1\.d\[1\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_laneq_s64, int64x1_t, int64x2_t)
+ 
+ /*
+ ** test_vcopy_laneq_u64:
+ ** dup	d0, v1\.d\[1\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopy_laneq_u64, uint64x1_t, uint64x2_t)
+ 
+ /*
+ ** test_vcopyq_lane_f64:
+ ** ins	v0\.d\[1\], v1\.d\[0\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_lane_f64, float64x2_t, float64x1_t)
+ 
+ /*
+ ** test_vcopyq_lane_u64:
+ ** ins	v0\.d\[1\], v1\.d\[0\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_lane_p64, poly64x2_t, poly64x1_t)
+ 
+ /*
+ ** test_vcopyq_lane_u64:
+ ** ins	v0\.d\[1\], v1\.d\[0\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_lane_s64, int64x2_t, int64x1_t)
+ 
+ /*
+ ** test_vcopyq_lane_u64:
+ ** ins	v0\.d\[1\], v1\.d\[0\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_lane_u64, uint64x2_t, uint64x1_t)
+ 
+ // FIXME: these functions generate suboptimal code on big-endian:
+ // ins v1.d[0], v0.d[0]
+ // mov v0.16b, v1.16b
+ // ret
+ 
+ /*
+ ** test_vcopyq_laneq_f64: { xfail { aarch64_big_endian || { any-opts "-mbig-endian" } } }
+ ** ins	v0\.d\[1\], v1\.d\[1\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_laneq_f64, float64x2_t, float64x2_t)
+ 
+ /*
+ ** test_vcopyq_laneq_p64: { xfail { aarch64_big_endian || { any-opts "-mbig-endian" } } }
+ ** ins	v0\.d\[1\], v1\.d\[1\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_laneq_p64, poly64x2_t, poly64x2_t)
+ 
+ /*
+ ** test_vcopyq_laneq_s64: { xfail { aarch64_big_endian || { any-opts "-mbig-endian" } } }
+ ** ins	v0\.d\[1\], v1\.d\[1\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_laneq_s64, int64x2_t, int64x2_t)
+ 
+ /*
+ ** test_vcopyq_laneq_u64: { xfail { aarch64_big_endian || { any-opts "-mbig-endian" } } }
+ ** ins	v0\.d\[1\], v1\.d\[1\]
+ ** ret
+ */
+ TEST_COPY_LANE (vcopyq_laneq_u64, uint64x2_t, uint64x2_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vcreate.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vcreate.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vcreate.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vcreate.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,119 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ #define TEST_CREATE(NAME, RET_TYPE)                                            \
+   RET_TYPE test_##NAME (uint64_t arg1) { return NAME (arg1); }
+ 
+ /*
+ ** test_vcreate_u8:
+ ** fmov	d0, x0
+ ** ret
+ */
+ TEST_CREATE (vcreate_u8, uint8x8_t)
+ 
+ /*
+ ** test_vcreate_s8:
+ ** fmov	d0, x0
+ ** ret
+ */
+ TEST_CREATE (vcreate_s8, int8x8_t)
+ 
+ /*
+ ** test_vcreate_p8:
+ ** fmov	d0, x0
+ ** ret
+ */
+ TEST_CREATE (vcreate_p8, poly8x8_t)
+ 
+ /*
+ ** test_vcreate_mf8:
+ ** fmov	d0, x0
+ ** ret
+ */
+ TEST_CREATE (vcreate_mf8, mfloat8x8_t)
+ 
+ /*
+ ** test_vcreate_u16:
+ ** fmov	d0, x0
+ ** ret
+ */
+ TEST_CREATE (vcreate_u16, uint16x4_t)
+ 
+ /*
+ ** test_vcreate_s16:
+ ** fmov	d0, x0
+ ** ret
+ */
+ TEST_CREATE (vcreate_s16, int16x4_t)
+ 
+ /*
+ ** test_vcreate_p16:
+ ** fmov	d0, x0
+ ** ret
+ */
+ TEST_CREATE (vcreate_p16, poly16x4_t)
+ 
+ /*
+ ** test_vcreate_f16:
+ ** fmov	d0, x0
+ ** ret
+ */
+ TEST_CREATE (vcreate_f16, float16x4_t)
+ 
+ /*
+ ** test_vcreate_bf16:
+ ** fmov	d0, x0
+ ** ret
+ */
+ TEST_CREATE (vcreate_bf16, bfloat16x4_t)
+ 
+ /*
+ ** test_vcreate_u32:
+ ** fmov	d0, x0
+ ** ret
+ */
+ TEST_CREATE (vcreate_u32, uint32x2_t)
+ 
+ /*
+ ** test_vcreate_s32:
+ ** fmov	d0, x0
+ ** ret
+ */
+ TEST_CREATE (vcreate_s32, int32x2_t)
+ 
+ /*
+ ** test_vcreate_f32:
+ ** fmov	d0, x0
+ ** ret
+ */
+ TEST_CREATE (vcreate_f32, float32x2_t)
+ 
+ /*
+ ** test_vcreate_u64:
+ ** fmov	d0, x0
+ ** ret
+ */
+ TEST_CREATE (vcreate_u64, uint64x1_t)
+ 
+ /*
+ ** test_vcreate_s64:
+ ** fmov	d0, x0
+ ** ret
+ */
+ TEST_CREATE (vcreate_s64, int64x1_t)
+ 
+ /*
+ ** test_vcreate_p64:
+ ** fmov	d0, x0
+ ** ret
+ */
+ TEST_CREATE (vcreate_p64, poly64x1_t)
+ 
+ /*
+ ** test_vcreate_f64:
+ ** fmov	d0, x0
+ ** ret
+ */
+ TEST_CREATE (vcreate_f64, float64x1_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vdup.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vdup.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vdup.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vdup.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,226 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ /*
+ ** test_vdup_n_p8:
+ ** dup	v0\.8b, w0
+ ** ret
+ */
+ TEST_UNARY (vdup_n_p8, poly8x8_t, poly8_t)
+ 
+ /*
+ ** test_vdup_n_mf8:
+ ** dup	v0\.8b, v0\.b\[0\]
+ ** ret
+ */
+ TEST_UNARY (vdup_n_mf8, mfloat8x8_t, mfloat8_t)
+ 
+ /*
+ ** test_vdup_n_u8:
+ ** dup	v0\.8b, w0
+ ** ret
+ */
+ TEST_UNARY (vdup_n_u8, uint8x8_t, uint8_t)
+ 
+ /*
+ ** test_vdup_n_s8:
+ ** dup	v0\.8b, w0
+ ** ret
+ */
+ TEST_UNARY (vdup_n_s8, int8x8_t, int8_t)
+ 
+ /*
+ ** test_vdupq_n_p8:
+ ** dup	v0\.16b, w0
+ ** ret
+ */
+ TEST_UNARY (vdupq_n_p8, poly8x16_t, poly8_t)
+ 
+ /*
+ ** test_vdupq_n_mf8:
+ ** dup	v0\.16b, v0\.b\[0\]
+ ** ret
+ */
+ TEST_UNARY (vdupq_n_mf8, mfloat8x16_t, mfloat8_t)
+ 
+ /*
+ ** test_vdupq_n_u8:
+ ** dup	v0\.16b, w0
+ ** ret
+ */
+ TEST_UNARY (vdupq_n_u8, uint8x16_t, uint8_t)
+ 
+ /*
+ ** test_vdupq_n_s8:
+ ** dup	v0\.16b, w0
+ ** ret
+ */
+ TEST_UNARY (vdupq_n_s8, int8x16_t, int8_t)
+ 
+ /*
+ ** test_vdup_n_p16:
+ ** dup	v0\.4h, w0
+ ** ret
+ */
+ TEST_UNARY (vdup_n_p16, poly16x4_t, poly16_t)
+ 
+ /*
+ ** test_vdup_n_f16:
+ ** dup	v0\.4h, v0\.h\[0\]
+ ** ret
+ */
+ TEST_UNARY (vdup_n_f16, float16x4_t, float16_t)
+ 
+ /*
+ ** test_vdup_n_bf16:
+ ** dup	v0\.4h, v0\.h\[0\]
+ ** ret
+ */
+ TEST_UNARY (vdup_n_bf16, bfloat16x4_t, bfloat16_t)
+ 
+ /*
+ ** test_vdup_n_u16:
+ ** dup	v0\.4h, w0
+ ** ret
+ */
+ TEST_UNARY (vdup_n_u16, uint16x4_t, uint16_t)
+ 
+ /*
+ ** test_vdup_n_s16:
+ ** dup	v0\.4h, w0
+ ** ret
+ */
+ TEST_UNARY (vdup_n_s16, int16x4_t, int16_t)
+ 
+ /*
+ ** test_vdupq_n_p16:
+ ** dup	v0\.8h, w0
+ ** ret
+ */
+ TEST_UNARY (vdupq_n_p16, poly16x8_t, poly16_t)
+ 
+ /*
+ ** test_vdupq_n_f16:
+ ** dup	v0\.8h, v0\.h\[0\]
+ ** ret
+ */
+ TEST_UNARY (vdupq_n_f16, float16x8_t, float16_t)
+ 
+ /*
+ ** test_vdupq_n_bf16:
+ ** dup	v0\.8h, v0\.h\[0\]
+ ** ret
+ */
+ TEST_UNARY (vdupq_n_bf16, bfloat16x8_t, bfloat16_t)
+ 
+ /*
+ ** test_vdupq_n_u16:
+ ** dup	v0\.8h, w0
+ ** ret
+ */
+ TEST_UNARY (vdupq_n_u16, uint16x8_t, uint16_t)
+ 
+ /*
+ ** test_vdupq_n_s16:
+ ** dup	v0\.8h, w0
+ ** ret
+ */
+ TEST_UNARY (vdupq_n_s16, int16x8_t, int16_t)
+ 
+ /*
+ ** test_vdup_n_f32:
+ ** dup	v0\.2s, v0\.s\[0\]
+ ** ret
+ */
+ TEST_UNARY (vdup_n_f32, float32x2_t, float32_t)
+ 
+ /*
+ ** test_vdup_n_u32:
+ ** dup	v0\.2s, w0
+ ** ret
+ */
+ TEST_UNARY (vdup_n_u32, uint32x2_t, uint32_t)
+ 
+ /*
+ ** test_vdup_n_s32:
+ ** dup	v0\.2s, w0
+ ** ret
+ */
+ TEST_UNARY (vdup_n_s32, int32x2_t, int32_t)
+ 
+ /*
+ ** test_vdupq_n_f32:
+ ** dup	v0\.4s, v0\.s\[0\]
+ ** ret
+ */
+ TEST_UNARY (vdupq_n_f32, float32x4_t, float32_t)
+ 
+ /*
+ ** test_vdupq_n_u32:
+ ** dup	v0\.4s, w0
+ ** ret
+ */
+ TEST_UNARY (vdupq_n_u32, uint32x4_t, uint32_t)
+ 
+ /*
+ ** test_vdupq_n_s32:
+ ** dup	v0\.4s, w0
+ ** ret
+ */
+ TEST_UNARY (vdupq_n_s32, int32x4_t, int32_t)
+ 
+ /*
+ ** test_vdup_n_p64:
+ ** fmov	d0, x0
+ ** ret
+ */
+ TEST_UNARY (vdup_n_p64, poly64x1_t, poly64_t)
+ 
+ /*
+ ** test_vdup_n_f64:
+ ** ret
+ */
+ TEST_UNARY (vdup_n_f64, float64x1_t, float64_t)
+ 
+ /*
+ ** test_vdup_n_u64:
+ ** fmov	d0, x0
+ ** ret
+ */
+ TEST_UNARY (vdup_n_u64, uint64x1_t, uint64_t)
+ /*
+ ** test_vdup_n_s64:
+ ** fmov	d0, x0
+ ** ret
+ */
+ TEST_UNARY (vdup_n_s64, int64x1_t, int64_t)
+ 
+ /*
+ ** test_vdupq_n_p64:
+ ** dup	v0\.2d, x0
+ ** ret
+ */
+ TEST_UNARY (vdupq_n_p64, poly64x2_t, poly64_t)
+ 
+ /*
+ ** test_vdupq_n_f64:
+ ** dup	v0\.2d, v0\.d\[0\]
+ ** ret
+ */
+ TEST_UNARY (vdupq_n_f64, float64x2_t, float64_t)
+ 
+ /*
+ ** test_vdupq_n_u64:
+ ** dup	v0\.2d, x0
+ ** ret
+ */
+ TEST_UNARY (vdupq_n_u64, uint64x2_t, uint64_t)
+ 
+ /*
+ ** test_vdupq_n_s64:
+ ** dup	v0\.2d, x0
+ ** ret
+ */
+ TEST_UNARY (vdupq_n_s64, int64x2_t, int64_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vdup_lane.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vdup_lane.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vdup_lane.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vdup_lane.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,647 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ #define TEST_DUP_LANE(NAME, TYPE1, TYPE2)                                      \
+   TYPE1 test_##NAME (TYPE2 vec2) { return NAME (vec2, 0); }
+ 
+ /*
+ ** test_vdup_lane_p8:
+ ** dup	v0\.8b, v0\.b\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_lane_p8, poly8x8_t, poly8x8_t)
+ 
+ /*
+ ** test_vdup_lane_mf8:
+ ** dup	v0\.8b, v0\.b\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_lane_mf8, mfloat8x8_t, mfloat8x8_t)
+ 
+ /*
+ ** test_vdup_lane_u8:
+ ** dup	v0\.8b, v0\.b\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_lane_u8, uint8x8_t, uint8x8_t)
+ 
+ /*
+ ** test_vdup_lane_s8:
+ ** dup	v0\.8b, v0\.b\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_lane_s8, int8x8_t, int8x8_t)
+ 
+ /*
+ ** test_vdup_laneq_p8:
+ ** dup	v0\.8b, v0\.b\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_laneq_p8, poly8x8_t, poly8x16_t)
+ 
+ /*
+ ** test_vdup_laneq_mf8:
+ ** dup	v0\.8b, v0\.b\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_laneq_mf8, mfloat8x8_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vdup_laneq_u8:
+ ** dup	v0\.8b, v0\.b\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_laneq_u8, uint8x8_t, uint8x16_t)
+ 
+ /*
+ ** test_vdup_laneq_s8:
+ ** dup	v0\.8b, v0\.b\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_laneq_s8, int8x8_t, int8x16_t)
+ 
+ /*
+ ** test_vdupq_lane_p8:
+ ** dup	v0\.16b, v0\.b\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_lane_p8, poly8x16_t, poly8x8_t)
+ 
+ /*
+ ** test_vdupq_lane_mf8:
+ ** dup	v0\.16b, v0\.b\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_lane_mf8, mfloat8x16_t, mfloat8x8_t)
+ 
+ /*
+ ** test_vdupq_lane_u8:
+ ** dup	v0\.16b, v0\.b\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_lane_u8, uint8x16_t, uint8x8_t)
+ 
+ /*
+ ** test_vdupq_lane_s8:
+ ** dup	v0\.16b, v0\.b\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_lane_s8, int8x16_t, int8x8_t)
+ 
+ /*
+ ** test_vdupq_laneq_p8:
+ ** dup	v0\.16b, v0\.b\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_laneq_p8, poly8x16_t, poly8x16_t)
+ 
+ /*
+ ** test_vdupq_laneq_mf8:
+ ** dup	v0\.16b, v0\.b\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_laneq_mf8, mfloat8x16_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vdupq_laneq_u8:
+ ** dup	v0\.16b, v0\.b\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_laneq_u8, uint8x16_t, uint8x16_t)
+ 
+ /*
+ ** test_vdupq_laneq_s8:
+ ** dup	v0\.16b, v0\.b\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_laneq_s8, int8x16_t, int8x16_t)
+ 
+ /*
+ ** test_vdup_lane_p16:
+ ** dup	v0\.4h, v0\.h\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_lane_p16, poly16x4_t, poly16x4_t)
+ 
+ /*
+ ** test_vdup_lane_u16:
+ ** dup	v0\.4h, v0\.h\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_lane_u16, uint16x4_t, uint16x4_t)
+ 
+ /*
+ ** test_vdup_lane_s16:
+ ** dup	v0\.4h, v0\.h\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_lane_s16, int16x4_t, int16x4_t)
+ 
+ /*
+ ** test_vdup_lane_f16:
+ ** dup	v0\.4h, v0\.h\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_lane_f16, float16x4_t, float16x4_t)
+ 
+ /*
+ ** test_vdup_lane_bf16:
+ ** dup	v0\.4h, v0\.h\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_lane_bf16, bfloat16x4_t, bfloat16x4_t)
+ 
+ /*
+ ** test_vdup_laneq_p16:
+ ** dup	v0\.4h, v0\.h\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_laneq_p16, poly16x4_t, poly16x8_t)
+ 
+ /*
+ ** test_vdup_laneq_u16:
+ ** dup	v0\.4h, v0\.h\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_laneq_u16, uint16x4_t, uint16x8_t)
+ 
+ /*
+ ** test_vdup_laneq_s16:
+ ** dup	v0\.4h, v0\.h\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_laneq_s16, int16x4_t, int16x8_t)
+ 
+ /*
+ ** test_vdup_laneq_f16:
+ ** dup	v0\.4h, v0\.h\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_laneq_f16, float16x4_t, float16x8_t)
+ 
+ /*
+ ** test_vdup_laneq_bf16:
+ ** dup	v0\.4h, v0\.h\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_laneq_bf16, bfloat16x4_t, bfloat16x8_t)
+ 
+ /*
+ ** test_vdupq_lane_p16:
+ ** dup	v0\.8h, v0\.h\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_lane_p16, poly16x8_t, poly16x4_t)
+ 
+ /*
+ ** test_vdupq_lane_u16:
+ ** dup	v0\.8h, v0\.h\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_lane_u16, uint16x8_t, uint16x4_t)
+ 
+ /*
+ ** test_vdupq_lane_s16:
+ ** dup	v0\.8h, v0\.h\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_lane_s16, int16x8_t, int16x4_t)
+ 
+ /*
+ ** test_vdupq_lane_f16:
+ ** dup	v0\.8h, v0\.h\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_lane_f16, float16x8_t, float16x4_t)
+ 
+ /*
+ ** test_vdupq_lane_bf16:
+ ** dup	v0\.8h, v0\.h\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_lane_bf16, bfloat16x8_t, bfloat16x4_t)
+ 
+ /*
+ ** test_vdupq_laneq_p16:
+ ** dup	v0\.8h, v0\.h\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_laneq_p16, poly16x8_t, poly16x8_t)
+ 
+ /*
+ ** test_vdupq_laneq_u16:
+ ** dup	v0\.8h, v0\.h\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_laneq_u16, uint16x8_t, uint16x8_t)
+ 
+ /*
+ ** test_vdupq_laneq_s16:
+ ** dup	v0\.8h, v0\.h\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_laneq_s16, int16x8_t, int16x8_t)
+ 
+ /*
+ ** test_vdupq_laneq_f16:
+ ** dup	v0\.8h, v0\.h\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_laneq_f16, float16x8_t, float16x8_t)
+ 
+ /*
+ ** test_vdupq_laneq_bf16:
+ ** dup	v0\.8h, v0\.h\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_laneq_bf16, bfloat16x8_t, bfloat16x8_t)
+ 
+ /*
+ ** test_vdup_lane_u32:
+ ** dup	v0\.2s, v0\.s\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_lane_u32, uint32x2_t, uint32x2_t)
+ 
+ /*
+ ** test_vdup_lane_s32:
+ ** dup	v0\.2s, v0\.s\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_lane_s32, int32x2_t, int32x2_t)
+ 
+ /*
+ ** test_vdup_lane_f32:
+ ** dup	v0\.2s, v0\.s\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_lane_f32, float32x2_t, float32x2_t)
+ 
+ /*
+ ** test_vdup_laneq_u32:
+ ** dup	v0\.2s, v0\.s\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_laneq_u32, uint32x2_t, uint32x4_t)
+ 
+ /*
+ ** test_vdup_laneq_s32:
+ ** dup	v0\.2s, v0\.s\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_laneq_s32, int32x2_t, int32x4_t)
+ 
+ /*
+ ** test_vdup_laneq_f32:
+ ** dup	v0\.2s, v0\.s\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_laneq_f32, float32x2_t, float32x4_t)
+ 
+ /*
+ ** test_vdupq_lane_u32:
+ ** dup	v0\.4s, v0\.s\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_lane_u32, uint32x4_t, uint32x2_t)
+ 
+ /*
+ ** test_vdupq_lane_s32:
+ ** dup	v0\.4s, v0\.s\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_lane_s32, int32x4_t, int32x2_t)
+ 
+ /*
+ ** test_vdupq_lane_f32:
+ ** dup	v0\.4s, v0\.s\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_lane_f32, float32x4_t, float32x2_t)
+ 
+ /*
+ ** test_vdupq_laneq_u32:
+ ** dup	v0\.4s, v0\.s\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_laneq_u32, uint32x4_t, uint32x4_t)
+ 
+ /*
+ ** test_vdupq_laneq_s32:
+ ** dup	v0\.4s, v0\.s\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_laneq_s32, int32x4_t, int32x4_t)
+ 
+ /*
+ ** test_vdupq_laneq_f32:
+ ** dup	v0\.4s, v0\.s\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_laneq_f32, float32x4_t, float32x4_t)
+ 
+ /*
+ ** test_vdup_lane_p64:
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_lane_p64, poly64x1_t, poly64x1_t)
+ 
+ /*
+ ** test_vdup_lane_u64:
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_lane_u64, uint64x1_t, uint64x1_t)
+ 
+ /*
+ ** test_vdup_lane_s64:
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_lane_s64, int64x1_t, int64x1_t)
+ 
+ /*
+ ** test_vdup_lane_f64:
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_lane_f64, float64x1_t, float64x1_t)
+ 
+ /*
+ ** test_vdup_laneq_p64:
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_laneq_p64, poly64x1_t, poly64x2_t)
+ 
+ /*
+ ** test_vdup_laneq_u64:
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_laneq_u64, uint64x1_t, uint64x2_t)
+ 
+ /*
+ ** test_vdup_laneq_s64:
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_laneq_s64, int64x1_t, int64x2_t)
+ 
+ /*
+ ** test_vdup_laneq_f64:
+ ** ret
+ */
+ TEST_DUP_LANE (vdup_laneq_f64, float64x1_t, float64x2_t)
+ 
+ /*
+ ** test_vdupq_lane_p64:
+ ** dup	v0\.2d, v0\.d\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_lane_p64, poly64x2_t, poly64x1_t)
+ 
+ /*
+ ** test_vdupq_lane_u64:
+ ** dup	v0\.2d, v0\.d\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_lane_u64, uint64x2_t, uint64x1_t)
+ 
+ /*
+ ** test_vdupq_lane_s64:
+ ** dup	v0\.2d, v0\.d\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_lane_s64, int64x2_t, int64x1_t)
+ 
+ /*
+ ** test_vdupq_lane_f64:
+ ** dup	v0\.2d, v0\.d\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_lane_f64, float64x2_t, float64x1_t)
+ 
+ /*
+ ** test_vdupq_laneq_p64:
+ ** dup	v0\.2d, v0\.d\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_laneq_p64, poly64x2_t, poly64x2_t)
+ 
+ /*
+ ** test_vdupq_laneq_u64:
+ ** dup	v0\.2d, v0\.d\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_laneq_u64, uint64x2_t, uint64x2_t)
+ 
+ /*
+ ** test_vdupq_laneq_s64:
+ ** dup	v0\.2d, v0\.d\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_laneq_s64, int64x2_t, int64x2_t)
+ 
+ /*
+ ** test_vdupq_laneq_f64:
+ ** dup	v0\.2d, v0\.d\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupq_laneq_f64, float64x2_t, float64x2_t)
+ 
+ /*
+ ** test_vdupb_lane_p8:
+ ** umov	w0, v0\.b\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupb_lane_p8, poly8_t, poly8x8_t)
+ 
+ /*
+ ** test_vdupb_laneq_p8:
+ ** umov	w0, v0\.b\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupb_laneq_p8, poly8_t, poly8x16_t)
+ 
+ /*
+ ** test_vdupb_lane_mf8:
+ ** ret
+ */
+ TEST_DUP_LANE (vdupb_lane_mf8, mfloat8_t, mfloat8x8_t)
+ 
+ /*
+ ** test_vdupb_laneq_mf8:
+ ** ret
+ */
+ TEST_DUP_LANE (vdupb_laneq_mf8, mfloat8_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vdupb_lane_u8:
+ ** umov	w0, v0\.b\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupb_lane_u8, uint8_t, uint8x8_t)
+ 
+ /*
+ ** test_vdupb_laneq_u8:
+ ** umov	w0, v0\.b\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupb_laneq_u8, uint8_t, uint8x16_t)
+ 
+ /*
+ ** test_vdupb_lane_s8:
+ ** umov	w0, v0\.b\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupb_lane_s8, int8_t, int8x8_t)
+ 
+ /*
+ ** test_vdupb_laneq_s8:
+ ** umov	w0, v0\.b\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vdupb_laneq_s8, int8_t, int8x16_t)
+ 
+ /*
+ ** test_vduph_lane_u16:
+ ** umov	w0, v0\.h\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vduph_lane_u16, uint16_t, uint16x4_t)
+ 
+ /*
+ ** test_vduph_laneq_u16:
+ ** umov	w0, v0\.h\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vduph_laneq_u16, uint16_t, uint16x8_t)
+ 
+ /*
+ ** test_vduph_lane_s16:
+ ** umov	w0, v0\.h\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vduph_lane_s16, int16_t, int16x4_t)
+ 
+ /*
+ ** test_vduph_laneq_s16:
+ ** umov	w0, v0\.h\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vduph_laneq_s16, int16_t, int16x8_t)
+ 
+ /*
+ ** test_vduph_lane_f16:
+ ** ret
+ */
+ TEST_DUP_LANE (vduph_lane_f16, float16_t, float16x4_t)
+ 
+ /*
+ ** test_vduph_laneq_f16:
+ ** ret
+ */
+ TEST_DUP_LANE (vduph_laneq_f16, float16_t, float16x8_t)
+ 
+ /*
+ ** test_vduph_lane_bf16:
+ ** ret
+ */
+ TEST_DUP_LANE (vduph_lane_bf16, bfloat16_t, bfloat16x4_t)
+ 
+ /*
+ ** test_vduph_laneq_bf16:
+ ** ret
+ */
+ TEST_DUP_LANE (vduph_laneq_bf16, bfloat16_t, bfloat16x8_t)
+ 
+ /*
+ ** test_vduph_lane_p16:
+ ** umov	w0, v0\.h\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vduph_lane_p16, poly16_t, poly16x4_t)
+ 
+ /*
+ ** test_vduph_laneq_p16:
+ ** umov	w0, v0\.h\[0\]
+ ** ret
+ */
+ TEST_DUP_LANE (vduph_laneq_p16, poly16_t, poly16x8_t)
+ 
+ /*
+ ** test_vdups_lane_u32:
+ ** fmov	w0, s0
+ ** ret
+ */
+ TEST_DUP_LANE (vdups_lane_u32, uint32_t, uint32x2_t)
+ 
+ /*
+ ** test_vdups_laneq_u32:
+ ** fmov	w0, s0
+ ** ret
+ */
+ TEST_DUP_LANE (vdups_laneq_u32, uint32_t, uint32x4_t)
+ 
+ /*
+ ** test_vdups_lane_s32:
+ ** fmov	w0, s0
+ ** ret
+ */
+ TEST_DUP_LANE (vdups_lane_s32, int32_t, int32x2_t)
+ 
+ /*
+ ** test_vdups_laneq_s32:
+ ** fmov	w0, s0
+ ** ret
+ */
+ TEST_DUP_LANE (vdups_laneq_s32, int32_t, int32x4_t)
+ 
+ /*
+ ** test_vdups_lane_f32:
+ ** ret
+ */
+ TEST_DUP_LANE (vdups_lane_f32, float32_t, float32x2_t)
+ 
+ /*
+ ** test_vdups_laneq_f32:
+ ** ret
+ */
+ TEST_DUP_LANE (vdups_laneq_f32, float32_t, float32x4_t)
+ 
+ /*
+ ** test_vdupd_lane_u64:
+ ** fmov	x0, d0
+ ** ret
+ */
+ TEST_DUP_LANE (vdupd_lane_u64, uint64_t, uint64x1_t)
+ 
+ /*
+ ** test_vdupd_laneq_u64:
+ ** fmov	x0, d0
+ ** ret
+ */
+ TEST_DUP_LANE (vdupd_laneq_u64, uint64_t, uint64x2_t)
+ 
+ /*
+ ** test_vdupd_lane_s64:
+ ** fmov	x0, d0
+ ** ret
+ */
+ TEST_DUP_LANE (vdupd_lane_s64, int64_t, int64x1_t)
+ 
+ /*
+ ** test_vdupd_laneq_s64:
+ ** fmov	x0, d0
+ ** ret
+ */
+ TEST_DUP_LANE (vdupd_laneq_s64, int64_t, int64x2_t)
+ 
+ /*
+ ** test_vdupd_lane_f64:
+ ** ret
+ */
+ TEST_DUP_LANE (vdupd_lane_f64, float64_t, float64x1_t)
+ 
+ /*
+ ** test_vdupd_laneq_f64:
+ ** ret
+ */
+ TEST_DUP_LANE (vdupd_laneq_f64, float64_t, float64x2_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/veor.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/veor.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/veor.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/veor.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,116 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ /*
+ ** test_veor_u8:
+ ** eor	v0\.8b, (v0\.8b, v1\.8b|v1\.8b, v0\.8b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (veor_u8, uint8x8_t)
+ 
+ /*
+ ** test_veor_s8:
+ ** eor	v0\.8b, (v0\.8b, v1\.8b|v1\.8b, v0\.8b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (veor_s8, int8x8_t)
+ 
+ /*
+ ** test_veor_u16:
+ ** eor	v0\.8b, (v0\.8b, v1\.8b|v1\.8b, v0\.8b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (veor_u16, uint16x4_t)
+ 
+ /*
+ ** test_veor_s16:
+ ** eor	v0\.8b, (v0\.8b, v1\.8b|v1\.8b, v0\.8b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (veor_s16, int16x4_t)
+ 
+ /*
+ ** test_veor_u32:
+ ** eor	v0\.8b, (v0\.8b, v1\.8b|v1\.8b, v0\.8b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (veor_u32, uint32x2_t)
+ 
+ /*
+ ** test_veor_s32:
+ ** eor	v0\.8b, (v0\.8b, v1\.8b|v1\.8b, v0\.8b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (veor_s32, int32x2_t)
+ 
+ /*
+ ** test_veor_u64:
+ ** eor	v0\.8b, (v0\.8b, v1\.8b|v1\.8b, v0\.8b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (veor_u64, uint64x1_t)
+ 
+ /*
+ ** test_veor_s64:
+ ** eor	v0\.8b, (v0\.8b, v1\.8b|v1\.8b, v0\.8b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (veor_s64, int64x1_t)
+ 
+ /*
+ ** test_veorq_u8:
+ ** eor	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (veorq_u8, uint8x16_t)
+ 
+ /*
+ ** test_veorq_s8:
+ ** eor	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (veorq_s8, int8x16_t)
+ 
+ /*
+ ** test_veorq_u16:
+ ** eor	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (veorq_u16, uint16x8_t)
+ 
+ /*
+ ** test_veorq_s16:
+ ** eor	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (veorq_s16, int16x8_t)
+ 
+ /*
+ ** test_veorq_u32:
+ ** eor	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (veorq_u32, uint32x4_t)
+ 
+ /*
+ ** test_veorq_s32:
+ ** eor	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (veorq_s32, int32x4_t)
+ 
+ /*
+ ** test_veorq_u64:
+ ** eor	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (veorq_u64, uint64x2_t)
+ 
+ /*
+ ** test_veorq_s64:
+ ** eor	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (veorq_s64, int64x2_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/veor3.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/veor3.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/veor3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/veor3.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,60 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ /*
+ ** test_veor3q_u8:
+ ** eor3	v0\.16b, v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_UNIFORM_TERNARY (veor3q_u8, uint8x16_t)
+ 
+ /*
+ ** test_veor3q_u16:
+ ** eor3	v0\.16b, v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_UNIFORM_TERNARY (veor3q_u16, uint16x8_t)
+ 
+ /*
+ ** test_veor3q_u32:
+ ** eor3	v0\.16b, v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_UNIFORM_TERNARY (veor3q_u32, uint32x4_t)
+ 
+ /*
+ ** test_veor3q_u64:
+ ** eor3	v0\.16b, v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_UNIFORM_TERNARY (veor3q_u64, uint64x2_t)
+ 
+ /*
+ ** test_veor3q_s8:
+ ** eor3	v0\.16b, v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_UNIFORM_TERNARY (veor3q_s8, int8x16_t)
+ 
+ /*
+ ** test_veor3q_s16:
+ ** eor3	v0\.16b, v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_UNIFORM_TERNARY (veor3q_s16, int16x8_t)
+ 
+ /*
+ ** test_veor3q_s32:
+ ** eor3	v0\.16b, v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_UNIFORM_TERNARY (veor3q_s32, int32x4_t)
+ 
+ /*
+ ** test_veor3q_s64:
+ ** eor3	v0\.16b, v0\.16b, v1\.16b, v2\.16b
+ ** ret
+ */
+ TEST_UNIFORM_TERNARY (veor3q_s64, int64x2_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vext.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vext.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vext.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vext.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,216 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ #define TEST_EXT(NAME, TYPE, INDEX) \
+   TYPE test_##NAME##_##INDEX (TYPE a, TYPE b) { return NAME (a, b, INDEX); }
+ 
+ /*
+ ** test_vext_u8_1:
+ ** ext	v0\.8b, v0\.8b, v1\.8b, #?1
+ ** ret
+ */
+ TEST_EXT (vext_u8, uint8x8_t, 1)
+ 
+ /*
+ ** test_vext_s8_1:
+ ** ext	v0\.8b, v0\.8b, v1\.8b, #?1
+ ** ret
+ */
+ TEST_EXT (vext_s8, int8x8_t, 1)
+ 
+ /*
+ ** test_vext_p8_1:
+ ** ext	v0\.8b, v0\.8b, v1\.8b, #?1
+ ** ret
+ */
+ TEST_EXT (vext_p8, poly8x8_t, 1)
+ 
+ /*
+ ** test_vext_mf8_1:
+ ** ext	v0\.8b, v0\.8b, v1\.8b, #?1
+ ** ret
+ */
+ TEST_EXT (vext_mf8, mfloat8x8_t, 1)
+ 
+ /*
+ ** test_vext_u16_1:
+ ** ext	v0\.8b, v0\.8b, v1\.8b, #?2
+ ** ret
+ */
+ TEST_EXT (vext_u16, uint16x4_t, 1)
+ 
+ /*
+ ** test_vext_s16_1:
+ ** ext	v0\.8b, v0\.8b, v1\.8b, #?2
+ ** ret
+ */
+ TEST_EXT (vext_s16, int16x4_t, 1)
+ 
+ /*
+ ** test_vext_f16_1:
+ ** ext	v0\.8b, v0\.8b, v1\.8b, #?2
+ ** ret
+ */
+ TEST_EXT (vext_f16, float16x4_t, 1)
+ 
+ /*
+ ** test_vext_p16_1:
+ ** ext	v0\.8b, v0\.8b, v1\.8b, #?2
+ ** ret
+ */
+ TEST_EXT (vext_p16, poly16x4_t, 1)
+ 
+ /*
+ ** test_vext_u32_1:
+ ** ext	v0\.8b, v0\.8b, v1\.8b, #?4
+ ** ret
+ */
+ TEST_EXT (vext_u32, uint32x2_t, 1)
+ 
+ /*
+ ** test_vext_s32_1:
+ ** ext	v0\.8b, v0\.8b, v1\.8b, #?4
+ ** ret
+ */
+ TEST_EXT (vext_s32, int32x2_t, 1)
+ 
+ /*
+ ** test_vext_f32_1:
+ ** ext	v0\.8b, v0\.8b, v1\.8b, #?4
+ ** ret
+ */
+ TEST_EXT (vext_f32, float32x2_t, 1)
+ 
+ /*
+ ** test_vext_u64_0:
+ ** ret
+ */
+ TEST_EXT (vext_u64, uint64x1_t, 0)
+ 
+ /* The only allowable index for vext_{u64,s64,f64} is 0, which just returns the
+    whole `a` vector. So no instructions are emitted.  */
+ 
+ /*
+ ** test_vext_s64_0:
+ ** ret
+ */
+ TEST_EXT (vext_s64, int64x1_t, 0)
+ 
+ /*
+ ** test_vext_f64_0:
+ ** ret
+ */
+ TEST_EXT (vext_f64, float64x1_t, 0)
+ 
+ /*
+ ** test_vext_p64_0:
+ ** ret
+ */
+ TEST_EXT (vext_p64, poly64x1_t, 0)
+ 
+ /*
+ ** test_vextq_u8_1:
+ ** ext	v0\.16b, v0\.16b, v1\.16b, #?1
+ ** ret
+ */
+ TEST_EXT (vextq_u8, uint8x16_t, 1)
+ 
+ /*
+ ** test_vextq_s8_1:
+ ** ext	v0\.16b, v0\.16b, v1\.16b, #?1
+ ** ret
+ */
+ TEST_EXT (vextq_s8, int8x16_t, 1)
+ 
+ /*
+ ** test_vextq_p8_1:
+ ** ext	v0\.16b, v0\.16b, v1\.16b, #?1
+ ** ret
+ */
+ TEST_EXT (vextq_p8, poly8x16_t, 1)
+ 
+ /*
+ ** test_vextq_mf8_1:
+ ** ext	v0\.16b, v0\.16b, v1\.16b, #?1
+ ** ret
+ */
+ TEST_EXT (vextq_mf8, mfloat8x16_t, 1)
+ 
+ /*
+ ** test_vextq_u16_1:
+ ** ext	v0\.16b, v0\.16b, v1\.16b, #?2
+ ** ret
+ */
+ TEST_EXT (vextq_u16, uint16x8_t, 1)
+ 
+ /*
+ ** test_vextq_s16_1:
+ ** ext	v0\.16b, v0\.16b, v1\.16b, #?2
+ ** ret
+ */
+ TEST_EXT (vextq_s16, int16x8_t, 1)
+ 
+ /*
+ ** test_vextq_f16_1:
+ ** ext	v0\.16b, v0\.16b, v1\.16b, #?2
+ ** ret
+ */
+ TEST_EXT (vextq_f16, float16x8_t, 1)
+ 
+ /*
+ ** test_vextq_p16_1:
+ ** ext	v0\.16b, v0\.16b, v1\.16b, #?2
+ ** ret
+ */
+ TEST_EXT (vextq_p16, poly16x8_t, 1)
+ 
+ /*
+ ** test_vextq_u32_1:
+ ** ext	v0\.16b, v0\.16b, v1\.16b, #?4
+ ** ret
+ */
+ TEST_EXT (vextq_u32, uint32x4_t, 1)
+ 
+ /*
+ ** test_vextq_s32_1:
+ ** ext	v0\.16b, v0\.16b, v1\.16b, #?4
+ ** ret
+ */
+ TEST_EXT (vextq_s32, int32x4_t, 1)
+ 
+ /*
+ ** test_vextq_f32_1:
+ ** ext	v0\.16b, v0\.16b, v1\.16b, #?4
+ ** ret
+ */
+ TEST_EXT (vextq_f32, float32x4_t, 1)
+ 
+ /*
+ ** test_vextq_u64_1:
+ ** ext	v0\.16b, v0\.16b, v1\.16b, #?8
+ ** ret
+ */
+ TEST_EXT (vextq_u64, uint64x2_t, 1)
+ 
+ /*
+ ** test_vextq_s64_1:
+ ** ext	v0\.16b, v0\.16b, v1\.16b, #?8
+ ** ret
+ */
+ TEST_EXT (vextq_s64, int64x2_t, 1)
+ 
+ /*
+ ** test_vextq_f64_1:
+ ** ext	v0\.16b, v0\.16b, v1\.16b, #?8
+ ** ret
+ */
+ TEST_EXT (vextq_f64, float64x2_t, 1)
+ 
+ /*
+ ** test_vextq_p64_1:
+ ** ext	v0\.16b, v0\.16b, v1\.16b, #?8
+ ** ret
+ */
+ TEST_EXT (vextq_p64, poly64x2_t, 1)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vget_high.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vget_high.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vget_high.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vget_high.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,116 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ /*
+ ** test_vget_high_u8:
+ ** dup	d0, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vget_high_u8, uint8x8_t, uint8x16_t)
+ 
+ /*
+ ** test_vget_high_s8:
+ ** dup	d0, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vget_high_s8, int8x8_t, int8x16_t)
+ 
+ /*
+ ** test_vget_high_p8:
+ ** dup	d0, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vget_high_p8, poly8x8_t, poly8x16_t)
+ 
+ /*
+ ** test_vget_high_mf8:
+ ** dup	d0, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vget_high_mf8, mfloat8x8_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vget_high_u16:
+ ** dup	d0, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vget_high_u16, uint16x4_t, uint16x8_t)
+ 
+ /*
+ ** test_vget_high_s16:
+ ** dup	d0, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vget_high_s16, int16x4_t, int16x8_t)
+ 
+ /*
+ ** test_vget_high_p16:
+ ** dup	d0, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vget_high_p16, poly16x4_t, poly16x8_t)
+ 
+ /*
+ ** test_vget_high_f16:
+ ** dup	d0, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vget_high_f16, float16x4_t, float16x8_t)
+ 
+ /*
+ ** test_vget_high_bf16:
+ ** dup	d0, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vget_high_bf16, bfloat16x4_t, bfloat16x8_t)
+ 
+ /*
+ ** test_vget_high_u32:
+ ** dup	d0, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vget_high_u32, uint32x2_t, uint32x4_t)
+ 
+ /*
+ ** test_vget_high_s32:
+ ** dup	d0, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vget_high_s32, int32x2_t, int32x4_t)
+ 
+ /*
+ ** test_vget_high_f32:
+ ** dup	d0, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vget_high_f32, float32x2_t, float32x4_t)
+ 
+ /*
+ ** test_vget_high_u64:
+ ** dup	d0, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vget_high_u64, uint64x1_t, uint64x2_t)
+ 
+ /*
+ ** test_vget_high_s64:
+ ** dup	d0, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vget_high_s64, int64x1_t, int64x2_t)
+ 
+ /*
+ ** test_vget_high_p64:
+ ** dup	d0, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vget_high_p64, poly64x1_t, poly64x2_t)
+ 
+ /*
+ ** test_vget_high_f64:
+ ** dup	d0, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vget_high_f64, float64x1_t, float64x2_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vget_lane.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vget_lane.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vget_lane.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vget_lane.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,449 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ #define TEST_GET_FIRST_LANE(NAME, RET_TYPE, ARG_TYPE)                          \
+   RET_TYPE test_##NAME##_first (ARG_TYPE arg1) { return NAME (arg1, 0); }
+ 
+ #define TEST_GET_LAST_LANE(NAME, RET_TYPE, ARG_TYPE)                           \
+   RET_TYPE test_##NAME##_last (ARG_TYPE arg1)                                  \
+   {                                                                            \
+     return NAME (arg1, VEC_LEN (arg1) - 1);                                    \
+   }
+ 
+ /*
+ ** test_vget_lane_u8_first:
+ ** umov	w0, v0\.b\[0\]
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vget_lane_u8, uint8_t, uint8x8_t)
+ 
+ /*
+ ** test_vget_lane_s8_first:
+ ** umov	w0, v0\.b\[0\]
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vget_lane_s8, int8_t, int8x8_t)
+ 
+ /*
+ ** test_vget_lane_p8_first:
+ ** umov	w0, v0\.b\[0\]
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vget_lane_p8, poly8_t, poly8x8_t)
+ 
+ /*
+ ** test_vget_lane_mf8_first:
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vget_lane_mf8, mfloat8_t, mfloat8x8_t)
+ 
+ /*
+ ** test_vgetq_lane_u8_first:
+ ** umov	w0, v0\.b\[0\]
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vgetq_lane_u8, uint8_t, uint8x16_t)
+ 
+ /*
+ ** test_vgetq_lane_s8_first:
+ ** umov	w0, v0\.b\[0\]
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vgetq_lane_s8, int8_t, int8x16_t)
+ 
+ /*
+ ** test_vgetq_lane_p8_first:
+ ** umov	w0, v0\.b\[0\]
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vgetq_lane_p8, poly8_t, poly8x16_t)
+ 
+ /*
+ ** test_vgetq_lane_mf8_first:
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vgetq_lane_mf8, mfloat8_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vget_lane_u16_first:
+ ** umov	w0, v0\.h\[0\]
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vget_lane_u16, uint16_t, uint16x4_t)
+ 
+ /*
+ ** test_vget_lane_s16_first:
+ ** umov	w0, v0\.h\[0\]
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vget_lane_s16, int16_t, int16x4_t)
+ 
+ /*
+ ** test_vget_lane_p16_first:
+ ** umov	w0, v0\.h\[0\]
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vget_lane_p16, poly16_t, poly16x4_t)
+ 
+ /*
+ ** test_vget_lane_f16_first:
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vget_lane_f16, float16_t, float16x4_t)
+ 
+ /*
+ ** test_vget_lane_bf16_first:
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vget_lane_bf16, bfloat16_t, bfloat16x4_t)
+ 
+ /*
+ ** test_vgetq_lane_u16_first:
+ ** umov	w0, v0\.h\[0\]
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vgetq_lane_u16, uint16_t, uint16x8_t)
+ 
+ /*
+ ** test_vgetq_lane_s16_first:
+ ** umov	w0, v0\.h\[0\]
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vgetq_lane_s16, int16_t, int16x8_t)
+ 
+ /*
+ ** test_vgetq_lane_p16_first:
+ ** umov	w0, v0\.h\[0\]
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vgetq_lane_p16, poly16_t, poly16x8_t)
+ 
+ /*
+ ** test_vgetq_lane_f16_first:
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vgetq_lane_f16, float16_t, float16x8_t)
+ 
+ /*
+ ** test_vgetq_lane_bf16_first:
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vgetq_lane_bf16, bfloat16_t, bfloat16x8_t)
+ 
+ /*
+ ** test_vget_lane_u32_first:
+ ** fmov	w0, s0
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vget_lane_u32, uint32_t, uint32x2_t)
+ 
+ /*
+ ** test_vget_lane_s32_first:
+ ** fmov	w0, s0
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vget_lane_s32, int32_t, int32x2_t)
+ 
+ /*
+ ** test_vget_lane_f32_first:
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vget_lane_f32, float32_t, float32x2_t)
+ 
+ /*
+ ** test_vgetq_lane_u32_first:
+ ** fmov	w0, s0
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vgetq_lane_u32, uint32_t, uint32x4_t)
+ 
+ /*
+ ** test_vgetq_lane_s32_first:
+ ** fmov	w0, s0
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vgetq_lane_s32, int32_t, int32x4_t)
+ 
+ /*
+ ** test_vgetq_lane_f32_first:
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vgetq_lane_f32, float32_t, float32x4_t)
+ 
+ /*
+ ** test_vget_lane_u64_first:
+ ** fmov	x0, d0
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vget_lane_u64, uint64_t, uint64x1_t)
+ 
+ /*
+ ** test_vget_lane_s64_first:
+ ** fmov	x0, d0
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vget_lane_s64, int64_t, int64x1_t)
+ 
+ /*
+ ** test_vget_lane_p64_first:
+ ** fmov	x0, d0
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vget_lane_p64, poly64_t, poly64x1_t)
+ 
+ /*
+ ** test_vget_lane_f64_first:
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vget_lane_f64, float64_t, float64x1_t)
+ 
+ /*
+ ** test_vgetq_lane_u64_first:
+ ** fmov	x0, d0
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vgetq_lane_u64, uint64_t, uint64x2_t)
+ 
+ /*
+ ** test_vgetq_lane_s64_first:
+ ** fmov	x0, d0
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vgetq_lane_s64, int64_t, int64x2_t)
+ 
+ /*
+ ** test_vgetq_lane_p64_first:
+ ** fmov	x0, d0
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vgetq_lane_p64, poly64_t, poly64x2_t)
+ 
+ /*
+ ** test_vgetq_lane_f64_first:
+ ** ret
+ */
+ TEST_GET_FIRST_LANE (vgetq_lane_f64, float64_t, float64x2_t)
+ 
+ /*
+ ** test_vget_lane_u8_last:
+ ** umov	w0, v0\.b\[7\]
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vget_lane_u8, uint8_t, uint8x8_t)
+ 
+ /*
+ ** test_vget_lane_s8_last:
+ ** umov	w0, v0\.b\[7\]
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vget_lane_s8, int8_t, int8x8_t)
+ 
+ /*
+ ** test_vget_lane_p8_last:
+ ** umov	w0, v0\.b\[7\]
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vget_lane_p8, poly8_t, poly8x8_t)
+ 
+ /*
+ ** test_vget_lane_mf8_last:
+ ** dup	b0, v0\.b\[7\]
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vget_lane_mf8, mfloat8_t, mfloat8x8_t)
+ 
+ /*
+ ** test_vgetq_lane_u8_last:
+ ** umov	w0, v0\.b\[15\]
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vgetq_lane_u8, uint8_t, uint8x16_t)
+ 
+ /*
+ ** test_vgetq_lane_s8_last:
+ ** umov	w0, v0\.b\[15\]
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vgetq_lane_s8, int8_t, int8x16_t)
+ 
+ /*
+ ** test_vgetq_lane_p8_last:
+ ** umov	w0, v0\.b\[15\]
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vgetq_lane_p8, poly8_t, poly8x16_t)
+ 
+ /*
+ ** test_vgetq_lane_mf8_last:
+ ** dup	b0, v0\.b\[15\]
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vgetq_lane_mf8, mfloat8_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vget_lane_u16_last:
+ ** umov	w0, v0\.h\[3\]
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vget_lane_u16, uint16_t, uint16x4_t)
+ 
+ /*
+ ** test_vget_lane_s16_last:
+ ** umov	w0, v0\.h\[3\]
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vget_lane_s16, int16_t, int16x4_t)
+ 
+ /*
+ ** test_vget_lane_p16_last:
+ ** umov	w0, v0\.h\[3\]
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vget_lane_p16, poly16_t, poly16x4_t)
+ 
+ /*
+ ** test_vget_lane_f16_last:
+ ** dup	h0, v0\.h\[3\]
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vget_lane_f16, float16_t, float16x4_t)
+ 
+ /*
+ ** test_vget_lane_bf16_last:
+ ** dup	h0, v0\.h\[3\]
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vget_lane_bf16, bfloat16_t, bfloat16x4_t)
+ 
+ /*
+ ** test_vgetq_lane_u16_last:
+ ** umov	w0, v0\.h\[7\]
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vgetq_lane_u16, uint16_t, uint16x8_t)
+ 
+ /*
+ ** test_vgetq_lane_s16_last:
+ ** umov	w0, v0\.h\[7\]
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vgetq_lane_s16, int16_t, int16x8_t)
+ 
+ /*
+ ** test_vgetq_lane_p16_last:
+ ** umov	w0, v0\.h\[7\]
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vgetq_lane_p16, poly16_t, poly16x8_t)
+ 
+ /*
+ ** test_vgetq_lane_f16_last:
+ ** dup	h0, v0\.h\[7\]
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vgetq_lane_f16, float16_t, float16x8_t)
+ 
+ /*
+ ** test_vgetq_lane_bf16_last:
+ ** dup	h0, v0\.h\[7\]
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vgetq_lane_bf16, bfloat16_t, bfloat16x8_t)
+ 
+ /*
+ ** test_vget_lane_u32_last:
+ ** umov	w0, v0\.s\[1\]
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vget_lane_u32, uint32_t, uint32x2_t)
+ 
+ /*
+ ** test_vget_lane_s32_last:
+ ** umov	w0, v0\.s\[1\]
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vget_lane_s32, int32_t, int32x2_t)
+ 
+ /*
+ ** test_vget_lane_f32_last:
+ ** dup	s0, v0\.s\[1\]
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vget_lane_f32, float32_t, float32x2_t)
+ 
+ /*
+ ** test_vgetq_lane_u32_last:
+ ** umov	w0, v0\.s\[3\]
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vgetq_lane_u32, uint32_t, uint32x4_t)
+ 
+ /*
+ ** test_vgetq_lane_s32_last:
+ ** umov	w0, v0\.s\[3\]
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vgetq_lane_s32, int32_t, int32x4_t)
+ 
+ /*
+ ** test_vgetq_lane_f32_last:
+ ** dup	s0, v0\.s\[3\]
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vgetq_lane_f32, float32_t, float32x4_t)
+ 
+ /*
+ ** test_vget_lane_u64_last:
+ ** fmov	x0, d0
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vget_lane_u64, uint64_t, uint64x1_t)
+ 
+ /*
+ ** test_vget_lane_s64_last:
+ ** fmov	x0, d0
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vget_lane_s64, int64_t, int64x1_t)
+ 
+ /*
+ ** test_vget_lane_p64_last:
+ ** fmov	x0, d0
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vget_lane_p64, poly64_t, poly64x1_t)
+ 
+ /*
+ ** test_vget_lane_f64_last:
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vget_lane_f64, float64_t, float64x1_t)
+ /*
+ ** test_vgetq_lane_u64_last:
+ ** umov	x0, v0\.d\[1\]
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vgetq_lane_u64, uint64_t, uint64x2_t)
+ 
+ /*
+ ** test_vgetq_lane_s64_last:
+ ** umov	x0, v0\.d\[1\]
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vgetq_lane_s64, int64_t, int64x2_t)
+ 
+ /*
+ ** test_vgetq_lane_p64_last:
+ ** umov	x0, v0\.d\[1\]
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vgetq_lane_p64, poly64_t, poly64x2_t)
+ 
+ /*
+ ** test_vgetq_lane_f64_last:
+ ** dup	d0, v0\.d\[1\]
+ ** ret
+ */
+ TEST_GET_LAST_LANE (vgetq_lane_f64, float64_t, float64x2_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vget_low.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vget_low.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vget_low.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vget_low.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,100 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ /*
+ ** test_vget_low_u8:
+ ** ret
+ */
+ TEST_UNARY (vget_low_u8, uint8x8_t, uint8x16_t)
+ 
+ /*
+ ** test_vget_low_s8:
+ ** ret
+ */
+ TEST_UNARY (vget_low_s8, int8x8_t, int8x16_t)
+ 
+ /*
+ ** test_vget_low_p8:
+ ** ret
+ */
+ TEST_UNARY (vget_low_p8, poly8x8_t, poly8x16_t)
+ 
+ /*
+ ** test_vget_low_mf8:
+ ** ret
+ */
+ TEST_UNARY (vget_low_mf8, mfloat8x8_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vget_low_u16:
+ ** ret
+ */
+ TEST_UNARY (vget_low_u16, uint16x4_t, uint16x8_t)
+ 
+ /*
+ ** test_vget_low_s16:
+ ** ret
+ */
+ TEST_UNARY (vget_low_s16, int16x4_t, int16x8_t)
+ 
+ /*
+ ** test_vget_low_p16:
+ ** ret
+ */
+ TEST_UNARY (vget_low_p16, poly16x4_t, poly16x8_t)
+ 
+ /*
+ ** test_vget_low_f16:
+ ** ret
+ */
+ TEST_UNARY (vget_low_f16, float16x4_t, float16x8_t)
+ 
+ /*
+ ** test_vget_low_bf16:
+ ** ret
+ */
+ TEST_UNARY (vget_low_bf16, bfloat16x4_t, bfloat16x8_t)
+ 
+ /*
+ ** test_vget_low_u32:
+ ** ret
+ */
+ TEST_UNARY (vget_low_u32, uint32x2_t, uint32x4_t)
+ 
+ /*
+ ** test_vget_low_s32:
+ ** ret
+ */
+ TEST_UNARY (vget_low_s32, int32x2_t, int32x4_t)
+ 
+ /*
+ ** test_vget_low_f32:
+ ** ret
+ */
+ TEST_UNARY (vget_low_f32, float32x2_t, float32x4_t)
+ 
+ /*
+ ** test_vget_low_u64:
+ ** ret
+ */
+ TEST_UNARY (vget_low_u64, uint64x1_t, uint64x2_t)
+ 
+ /*
+ ** test_vget_low_s64:
+ ** ret
+ */
+ TEST_UNARY (vget_low_s64, int64x1_t, int64x2_t)
+ 
+ /*
+ ** test_vget_low_p64:
+ ** ret
+ */
+ TEST_UNARY (vget_low_p64, poly64x1_t, poly64x2_t)
+ 
+ /*
+ ** test_vget_low_f64:
+ ** ret
+ */
+ TEST_UNARY (vget_low_f64, float64x1_t, float64x2_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vmov_n.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vmov_n.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vmov_n.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vmov_n.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,212 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ /*
+ ** test_vmov_n_p8:
+ ** dup	v0\.8b, w0
+ ** ret
+ */
+ TEST_UNARY (vmov_n_p8, poly8x8_t, poly8_t)
+ 
+ /*
+ ** test_vmov_n_mf8:
+ ** dup	v0\.8b, v0\.b\[0\]
+ ** ret
+ */
+ TEST_UNARY (vmov_n_mf8, mfloat8x8_t, mfloat8_t)
+ 
+ /*
+ ** test_vmov_n_u8:
+ ** dup	v0\.8b, w0
+ ** ret
+ */
+ TEST_UNARY (vmov_n_u8, uint8x8_t, uint8_t)
+ 
+ /*
+ ** test_vmov_n_s8:
+ ** dup	v0\.8b, w0
+ ** ret
+ */
+ TEST_UNARY (vmov_n_s8, int8x8_t, int8_t)
+ 
+ /*
+ ** test_vmovq_n_p8:
+ ** dup	v0\.16b, w0
+ ** ret
+ */
+ TEST_UNARY (vmovq_n_p8, poly8x16_t, poly8_t)
+ 
+ /*
+ ** test_vmovq_n_mf8:
+ ** dup	v0\.16b, v0\.b\[0\]
+ ** ret
+ */
+ TEST_UNARY (vmovq_n_mf8, mfloat8x16_t, mfloat8_t)
+ 
+ /*
+ ** test_vmovq_n_u8:
+ ** dup	v0\.16b, w0
+ ** ret
+ */
+ TEST_UNARY (vmovq_n_u8, uint8x16_t, uint8_t)
+ 
+ /*
+ ** test_vmovq_n_s8:
+ ** dup	v0\.16b, w0
+ ** ret
+ */
+ TEST_UNARY (vmovq_n_s8, int8x16_t, int8_t)
+ 
+ /*
+ ** test_vmov_n_p16:
+ ** dup	v0\.4h, w0
+ ** ret
+ */
+ TEST_UNARY (vmov_n_p16, poly16x4_t, poly16_t)
+ 
+ /*
+ ** test_vmov_n_f16:
+ ** dup	v0\.4h, v0\.h\[0\]
+ ** ret
+ */
+ TEST_UNARY (vmov_n_f16, float16x4_t, float16_t)
+ 
+ /*
+ ** test_vmov_n_u16:
+ ** dup	v0\.4h, w0
+ ** ret
+ */
+ TEST_UNARY (vmov_n_u16, uint16x4_t, uint16_t)
+ 
+ /*
+ ** test_vmov_n_s16:
+ ** dup	v0\.4h, w0
+ ** ret
+ */
+ TEST_UNARY (vmov_n_s16, int16x4_t, int16_t)
+ 
+ /*
+ ** test_vmovq_n_p16:
+ ** dup	v0\.8h, w0
+ ** ret
+ */
+ TEST_UNARY (vmovq_n_p16, poly16x8_t, poly16_t)
+ 
+ /*
+ ** test_vmovq_n_f16:
+ ** dup	v0\.8h, v0\.h\[0\]
+ ** ret
+ */
+ TEST_UNARY (vmovq_n_f16, float16x8_t, float16_t)
+ 
+ /*
+ ** test_vmovq_n_u16:
+ ** dup	v0\.8h, w0
+ ** ret
+ */
+ TEST_UNARY (vmovq_n_u16, uint16x8_t, uint16_t)
+ 
+ /*
+ ** test_vmovq_n_s16:
+ ** dup	v0\.8h, w0
+ ** ret
+ */
+ TEST_UNARY (vmovq_n_s16, int16x8_t, int16_t)
+ 
+ /*
+ ** test_vmov_n_f32:
+ ** dup	v0\.2s, v0\.s\[0\]
+ ** ret
+ */
+ TEST_UNARY (vmov_n_f32, float32x2_t, float32_t)
+ 
+ /*
+ ** test_vmov_n_u32:
+ ** dup	v0\.2s, w0
+ ** ret
+ */
+ TEST_UNARY (vmov_n_u32, uint32x2_t, uint32_t)
+ 
+ /*
+ ** test_vmov_n_s32:
+ ** dup	v0\.2s, w0
+ ** ret
+ */
+ TEST_UNARY (vmov_n_s32, int32x2_t, int32_t)
+ 
+ /*
+ ** test_vmovq_n_f32:
+ ** dup	v0\.4s, v0\.s\[0\]
+ ** ret
+ */
+ TEST_UNARY (vmovq_n_f32, float32x4_t, float32_t)
+ 
+ /*
+ ** test_vmovq_n_u32:
+ ** dup	v0\.4s, w0
+ ** ret
+ */
+ TEST_UNARY (vmovq_n_u32, uint32x4_t, uint32_t)
+ 
+ /*
+ ** test_vmovq_n_s32:
+ ** dup	v0\.4s, w0
+ ** ret
+ */
+ TEST_UNARY (vmovq_n_s32, int32x4_t, int32_t)
+ 
+ /*
+ ** test_vmov_n_p64:
+ ** fmov	d0, x0
+ ** ret
+ */
+ TEST_UNARY (vmov_n_p64, poly64x1_t, poly64_t)
+ 
+ /*
+ ** test_vmov_n_f64:
+ ** ret
+ */
+ TEST_UNARY (vmov_n_f64, float64x1_t, float64_t)
+ 
+ /*
+ ** test_vmov_n_u64:
+ ** fmov	d0, x0
+ ** ret
+ */
+ TEST_UNARY (vmov_n_u64, uint64x1_t, uint64_t)
+ /*
+ ** test_vmov_n_s64:
+ ** fmov	d0, x0
+ ** ret
+ */
+ TEST_UNARY (vmov_n_s64, int64x1_t, int64_t)
+ 
+ /*
+ ** test_vmovq_n_p64:
+ ** dup	v0\.2d, x0
+ ** ret
+ */
+ TEST_UNARY (vmovq_n_p64, poly64x2_t, poly64_t)
+ 
+ /*
+ ** test_vmovq_n_f64:
+ ** dup	v0\.2d, v0\.d\[0\]
+ ** ret
+ */
+ TEST_UNARY (vmovq_n_f64, float64x2_t, float64_t)
+ 
+ /*
+ ** test_vmovq_n_u64:
+ ** dup	v0\.2d, x0
+ ** ret
+ */
+ TEST_UNARY (vmovq_n_u64, uint64x2_t, uint64_t)
+ 
+ /*
+ ** test_vmovq_n_s64:
+ ** dup	v0\.2d, x0
+ ** ret
+ */
+ TEST_UNARY (vmovq_n_s64, int64x2_t, int64_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vmvn.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vmvn.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vmvn.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vmvn.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,102 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ /*
+ ** test_vmvn_u8:
+ ** not	v0\.8b, v0\.8b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vmvn_u8, uint8x8_t)
+ 
+ /*
+ ** test_vmvn_s8:
+ ** not	v0\.8b, v0\.8b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vmvn_s8, int8x8_t)
+ 
+ /*
+ ** test_vmvn_p8:
+ ** not	v0\.8b, v0\.8b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vmvn_p8, poly8x8_t)
+ 
+ /*
+ ** test_vmvn_u16:
+ ** not	v0\.8b, v0\.8b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vmvn_u16, uint16x4_t)
+ 
+ /*
+ ** test_vmvn_s16:
+ ** not	v0\.8b, v0\.8b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vmvn_s16, int16x4_t)
+ 
+ /*
+ ** test_vmvn_u32:
+ ** not	v0\.8b, v0\.8b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vmvn_u32, uint32x2_t)
+ 
+ /*
+ ** test_vmvn_s32:
+ ** not	v0\.8b, v0\.8b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vmvn_s32, int32x2_t)
+ 
+ /*
+ ** test_vmvnq_u8:
+ ** not	v0\.16b, v0\.16b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vmvnq_u8, uint8x16_t)
+ 
+ /*
+ ** test_vmvnq_s8:
+ ** not	v0\.16b, v0\.16b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vmvnq_s8, int8x16_t)
+ 
+ /*
+ ** test_vmvnq_p8:
+ ** not	v0\.16b, v0\.16b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vmvnq_p8, poly8x16_t)
+ 
+ /*
+ ** test_vmvnq_u16:
+ ** not	v0\.16b, v0\.16b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vmvnq_u16, uint16x8_t)
+ 
+ /*
+ ** test_vmvnq_s16:
+ ** not	v0\.16b, v0\.16b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vmvnq_s16, int16x8_t)
+ 
+ /*
+ ** test_vmvnq_u32:
+ ** not	v0\.16b, v0\.16b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vmvnq_u32, uint32x4_t)
+ 
+ /*
+ ** test_vmvnq_s32:
+ ** not	v0\.16b, v0\.16b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vmvnq_s32, int32x4_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vorn.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vorn.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vorn.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vorn.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,116 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ /*
+ ** test_vorn_u8:
+ ** orn	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vorn_u8, uint8x8_t)
+ 
+ /*
+ ** test_vorn_s8:
+ ** orn	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vorn_s8, int8x8_t)
+ 
+ /*
+ ** test_vorn_u16:
+ ** orn	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vorn_u16, uint16x4_t)
+ 
+ /*
+ ** test_vorn_s16:
+ ** orn	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vorn_s16, int16x4_t)
+ 
+ /*
+ ** test_vorn_u32:
+ ** orn	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vorn_u32, uint32x2_t)
+ 
+ /*
+ ** test_vorn_s32:
+ ** orn	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vorn_s32, int32x2_t)
+ 
+ /*
+ ** test_vorn_u64:
+ ** orn	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vorn_u64, uint64x1_t)
+ 
+ /*
+ ** test_vorn_s64:
+ ** orn	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vorn_s64, int64x1_t)
+ 
+ /*
+ ** test_vornq_u8:
+ ** orn	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vornq_u8, uint8x16_t)
+ 
+ /*
+ ** test_vornq_s8:
+ ** orn	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vornq_s8, int8x16_t)
+ 
+ /*
+ ** test_vornq_u16:
+ ** orn	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vornq_u16, uint16x8_t)
+ 
+ /*
+ ** test_vornq_s16:
+ ** orn	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vornq_s16, int16x8_t)
+ 
+ /*
+ ** test_vornq_u32:
+ ** orn	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vornq_u32, uint32x4_t)
+ 
+ /*
+ ** test_vornq_s32:
+ ** orn	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vornq_s32, int32x4_t)
+ 
+ /*
+ ** test_vornq_u64:
+ ** orn	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vornq_u64, uint64x2_t)
+ 
+ /*
+ ** test_vornq_s64:
+ ** orn	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vornq_s64, int64x2_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vorr.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vorr.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vorr.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vorr.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,116 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ /*
+ ** test_vorr_u8:
+ ** orr	v0\.8b, (v0\.8b, v1\.8b|v1\.8b, v0\.8b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vorr_u8, uint8x8_t)
+ 
+ /*
+ ** test_vorr_s8:
+ ** orr	v0\.8b, (v0\.8b, v1\.8b|v1\.8b, v0\.8b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vorr_s8, int8x8_t)
+ 
+ /*
+ ** test_vorr_u16:
+ ** orr	v0\.8b, (v0\.8b, v1\.8b|v1\.8b, v0\.8b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vorr_u16, uint16x4_t)
+ 
+ /*
+ ** test_vorr_s16:
+ ** orr	v0\.8b, (v0\.8b, v1\.8b|v1\.8b, v0\.8b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vorr_s16, int16x4_t)
+ 
+ /*
+ ** test_vorr_u32:
+ ** orr	v0\.8b, (v0\.8b, v1\.8b|v1\.8b, v0\.8b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vorr_u32, uint32x2_t)
+ 
+ /*
+ ** test_vorr_s32:
+ ** orr	v0\.8b, (v0\.8b, v1\.8b|v1\.8b, v0\.8b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vorr_s32, int32x2_t)
+ 
+ /*
+ ** test_vorr_u64:
+ ** orr	v0\.8b, (v0\.8b, v1\.8b|v1\.8b, v0\.8b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vorr_u64, uint64x1_t)
+ 
+ /*
+ ** test_vorr_s64:
+ ** orr	v0\.8b, (v0\.8b, v1\.8b|v1\.8b, v0\.8b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vorr_s64, int64x1_t)
+ 
+ /*
+ ** test_vorrq_u8:
+ ** orr	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vorrq_u8, uint8x16_t)
+ 
+ /*
+ ** test_vorrq_s8:
+ ** orr	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vorrq_s8, int8x16_t)
+ 
+ /*
+ ** test_vorrq_u16:
+ ** orr	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vorrq_u16, uint16x8_t)
+ 
+ /*
+ ** test_vorrq_s16:
+ ** orr	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vorrq_s16, int16x8_t)
+ 
+ /*
+ ** test_vorrq_u32:
+ ** orr	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vorrq_u32, uint32x4_t)
+ 
+ /*
+ ** test_vorrq_s32:
+ ** orr	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vorrq_s32, int32x4_t)
+ 
+ /*
+ ** test_vorrq_u64:
+ ** orr	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vorrq_u64, uint64x2_t)
+ 
+ /*
+ ** test_vorrq_s64:
+ ** orr	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vorrq_s64, int64x2_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vrax1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vrax1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vrax1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vrax1.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ /*
+ ** test_vrax1q_u64:
+ ** rax1	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vrax1q_u64, uint64x2_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vrbit.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vrbit.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vrbit.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vrbit.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,46 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ /*
+ ** test_vrbit_u8:
+ ** rbit	v0\.8b, v0\.8b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrbit_u8, uint8x8_t)
+ 
+ /*
+ ** test_vrbit_s8:
+ ** rbit	v0\.8b, v0\.8b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrbit_s8, int8x8_t)
+ 
+ /*
+ ** test_vrbit_p8:
+ ** rbit	v0\.8b, v0\.8b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrbit_p8, poly8x8_t)
+ 
+ /*
+ ** test_vrbitq_u8:
+ ** rbit	v0\.16b, v0\.16b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrbitq_u8, uint8x16_t)
+ 
+ /*
+ ** test_vrbitq_s8:
+ ** rbit	v0\.16b, v0\.16b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrbitq_s8, int8x16_t)
+ 
+ /*
+ ** test_vrbitq_p8:
+ ** rbit	v0\.16b, v0\.16b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrbitq_p8, poly8x16_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vreinterpret.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vreinterpret.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vreinterpret.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vreinterpret.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,3143 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ // FIXME: reinterprets to/from p128 generate load and stores to the stack,
+ // rather than GPR <-> FPR moves
+ 
+ /*
+ ** test_vreinterpret_u8_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u8_s8, uint8x8_t, int8x8_t)
+ 
+ /*
+ ** test_vreinterpret_u8_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u8_p8, uint8x8_t, poly8x8_t)
+ 
+ /*
+ ** test_vreinterpret_u8_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u8_mf8, uint8x8_t, mfloat8x8_t)
+ 
+ /*
+ ** test_vreinterpret_u8_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u8_u16, uint8x8_t, uint16x4_t)
+ 
+ /*
+ ** test_vreinterpret_u8_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u8_s16, uint8x8_t, int16x4_t)
+ 
+ /*
+ ** test_vreinterpret_u8_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u8_p16, uint8x8_t, poly16x4_t)
+ 
+ /*
+ ** test_vreinterpret_u8_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u8_f16, uint8x8_t, float16x4_t)
+ 
+ /*
+ ** test_vreinterpret_u8_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u8_bf16, uint8x8_t, bfloat16x4_t)
+ 
+ /*
+ ** test_vreinterpret_u8_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u8_u32, uint8x8_t, uint32x2_t)
+ 
+ /*
+ ** test_vreinterpret_u8_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u8_s32, uint8x8_t, int32x2_t)
+ 
+ /*
+ ** test_vreinterpret_u8_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u8_f32, uint8x8_t, float32x2_t)
+ 
+ /*
+ ** test_vreinterpret_u8_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u8_u64, uint8x8_t, uint64x1_t)
+ 
+ /*
+ ** test_vreinterpret_u8_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u8_s64, uint8x8_t, int64x1_t)
+ 
+ /*
+ ** test_vreinterpret_u8_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u8_p64, uint8x8_t, poly64x1_t)
+ 
+ /*
+ ** test_vreinterpret_u8_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u8_f64, uint8x8_t, float64x1_t)
+ 
+ /*
+ ** test_vreinterpret_s8_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s8_u8, int8x8_t, uint8x8_t)
+ 
+ /*
+ ** test_vreinterpret_s8_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s8_p8, int8x8_t, poly8x8_t)
+ 
+ /*
+ ** test_vreinterpret_s8_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s8_mf8, int8x8_t, mfloat8x8_t)
+ 
+ /*
+ ** test_vreinterpret_s8_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s8_u16, int8x8_t, uint16x4_t)
+ 
+ /*
+ ** test_vreinterpret_s8_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s8_s16, int8x8_t, int16x4_t)
+ 
+ /*
+ ** test_vreinterpret_s8_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s8_p16, int8x8_t, poly16x4_t)
+ 
+ /*
+ ** test_vreinterpret_s8_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s8_f16, int8x8_t, float16x4_t)
+ 
+ /*
+ ** test_vreinterpret_s8_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s8_bf16, int8x8_t, bfloat16x4_t)
+ 
+ /*
+ ** test_vreinterpret_s8_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s8_u32, int8x8_t, uint32x2_t)
+ 
+ /*
+ ** test_vreinterpret_s8_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s8_s32, int8x8_t, int32x2_t)
+ 
+ /*
+ ** test_vreinterpret_s8_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s8_f32, int8x8_t, float32x2_t)
+ 
+ /*
+ ** test_vreinterpret_s8_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s8_u64, int8x8_t, uint64x1_t)
+ 
+ /*
+ ** test_vreinterpret_s8_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s8_s64, int8x8_t, int64x1_t)
+ 
+ /*
+ ** test_vreinterpret_s8_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s8_p64, int8x8_t, poly64x1_t)
+ 
+ /*
+ ** test_vreinterpret_s8_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s8_f64, int8x8_t, float64x1_t)
+ 
+ /*
+ ** test_vreinterpret_p8_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p8_u8, poly8x8_t, uint8x8_t)
+ 
+ /*
+ ** test_vreinterpret_p8_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p8_s8, poly8x8_t, int8x8_t)
+ 
+ /*
+ ** test_vreinterpret_p8_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p8_mf8, poly8x8_t, mfloat8x8_t)
+ 
+ /*
+ ** test_vreinterpret_p8_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p8_u16, poly8x8_t, uint16x4_t)
+ 
+ /*
+ ** test_vreinterpret_p8_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p8_s16, poly8x8_t, int16x4_t)
+ 
+ /*
+ ** test_vreinterpret_p8_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p8_p16, poly8x8_t, poly16x4_t)
+ 
+ /*
+ ** test_vreinterpret_p8_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p8_f16, poly8x8_t, float16x4_t)
+ 
+ /*
+ ** test_vreinterpret_p8_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p8_bf16, poly8x8_t, bfloat16x4_t)
+ 
+ /*
+ ** test_vreinterpret_p8_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p8_u32, poly8x8_t, uint32x2_t)
+ 
+ /*
+ ** test_vreinterpret_p8_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p8_s32, poly8x8_t, int32x2_t)
+ 
+ /*
+ ** test_vreinterpret_p8_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p8_f32, poly8x8_t, float32x2_t)
+ 
+ /*
+ ** test_vreinterpret_p8_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p8_u64, poly8x8_t, uint64x1_t)
+ 
+ /*
+ ** test_vreinterpret_p8_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p8_s64, poly8x8_t, int64x1_t)
+ 
+ /*
+ ** test_vreinterpret_p8_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p8_p64, poly8x8_t, poly64x1_t)
+ 
+ /*
+ ** test_vreinterpret_p8_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p8_f64, poly8x8_t, float64x1_t)
+ 
+ /*
+ ** test_vreinterpret_mf8_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_mf8_u8, mfloat8x8_t, uint8x8_t)
+ 
+ /*
+ ** test_vreinterpret_mf8_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_mf8_s8, mfloat8x8_t, int8x8_t)
+ 
+ /*
+ ** test_vreinterpret_mf8_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_mf8_p8, mfloat8x8_t, poly8x8_t)
+ 
+ /*
+ ** test_vreinterpret_mf8_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_mf8_u16, mfloat8x8_t, uint16x4_t)
+ 
+ /*
+ ** test_vreinterpret_mf8_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_mf8_s16, mfloat8x8_t, int16x4_t)
+ 
+ /*
+ ** test_vreinterpret_mf8_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_mf8_p16, mfloat8x8_t, poly16x4_t)
+ 
+ /*
+ ** test_vreinterpret_mf8_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_mf8_f16, mfloat8x8_t, float16x4_t)
+ 
+ /*
+ ** test_vreinterpret_mf8_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_mf8_bf16, mfloat8x8_t, bfloat16x4_t)
+ 
+ /*
+ ** test_vreinterpret_mf8_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_mf8_u32, mfloat8x8_t, uint32x2_t)
+ 
+ /*
+ ** test_vreinterpret_mf8_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_mf8_s32, mfloat8x8_t, int32x2_t)
+ 
+ /*
+ ** test_vreinterpret_mf8_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_mf8_f32, mfloat8x8_t, float32x2_t)
+ 
+ /*
+ ** test_vreinterpret_mf8_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_mf8_u64, mfloat8x8_t, uint64x1_t)
+ 
+ /*
+ ** test_vreinterpret_mf8_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_mf8_s64, mfloat8x8_t, int64x1_t)
+ 
+ /*
+ ** test_vreinterpret_mf8_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_mf8_p64, mfloat8x8_t, poly64x1_t)
+ 
+ /*
+ ** test_vreinterpret_mf8_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_mf8_f64, mfloat8x8_t, float64x1_t)
+ 
+ /*
+ ** test_vreinterpret_u16_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u16_u8, uint16x4_t, uint8x8_t)
+ 
+ /*
+ ** test_vreinterpret_u16_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u16_s8, uint16x4_t, int8x8_t)
+ 
+ /*
+ ** test_vreinterpret_u16_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u16_p8, uint16x4_t, poly8x8_t)
+ 
+ /*
+ ** test_vreinterpret_u16_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u16_mf8, uint16x4_t, mfloat8x8_t)
+ 
+ /*
+ ** test_vreinterpret_u16_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u16_s16, uint16x4_t, int16x4_t)
+ 
+ /*
+ ** test_vreinterpret_u16_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u16_p16, uint16x4_t, poly16x4_t)
+ 
+ /*
+ ** test_vreinterpret_u16_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u16_f16, uint16x4_t, float16x4_t)
+ 
+ /*
+ ** test_vreinterpret_u16_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u16_bf16, uint16x4_t, bfloat16x4_t)
+ 
+ /*
+ ** test_vreinterpret_u16_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u16_u32, uint16x4_t, uint32x2_t)
+ 
+ /*
+ ** test_vreinterpret_u16_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u16_s32, uint16x4_t, int32x2_t)
+ 
+ /*
+ ** test_vreinterpret_u16_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u16_f32, uint16x4_t, float32x2_t)
+ 
+ /*
+ ** test_vreinterpret_u16_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u16_u64, uint16x4_t, uint64x1_t)
+ 
+ /*
+ ** test_vreinterpret_u16_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u16_s64, uint16x4_t, int64x1_t)
+ 
+ /*
+ ** test_vreinterpret_u16_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u16_p64, uint16x4_t, poly64x1_t)
+ 
+ /*
+ ** test_vreinterpret_u16_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u16_f64, uint16x4_t, float64x1_t)
+ 
+ /*
+ ** test_vreinterpret_s16_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s16_u8, int16x4_t, uint8x8_t)
+ 
+ /*
+ ** test_vreinterpret_s16_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s16_s8, int16x4_t, int8x8_t)
+ 
+ /*
+ ** test_vreinterpret_s16_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s16_p8, int16x4_t, poly8x8_t)
+ 
+ /*
+ ** test_vreinterpret_s16_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s16_mf8, int16x4_t, mfloat8x8_t)
+ 
+ /*
+ ** test_vreinterpret_s16_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s16_u16, int16x4_t, uint16x4_t)
+ 
+ /*
+ ** test_vreinterpret_s16_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s16_p16, int16x4_t, poly16x4_t)
+ 
+ /*
+ ** test_vreinterpret_s16_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s16_f16, int16x4_t, float16x4_t)
+ 
+ /*
+ ** test_vreinterpret_s16_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s16_bf16, int16x4_t, bfloat16x4_t)
+ 
+ /*
+ ** test_vreinterpret_s16_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s16_u32, int16x4_t, uint32x2_t)
+ 
+ /*
+ ** test_vreinterpret_s16_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s16_s32, int16x4_t, int32x2_t)
+ 
+ /*
+ ** test_vreinterpret_s16_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s16_f32, int16x4_t, float32x2_t)
+ 
+ /*
+ ** test_vreinterpret_s16_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s16_u64, int16x4_t, uint64x1_t)
+ 
+ /*
+ ** test_vreinterpret_s16_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s16_s64, int16x4_t, int64x1_t)
+ 
+ /*
+ ** test_vreinterpret_s16_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s16_p64, int16x4_t, poly64x1_t)
+ 
+ /*
+ ** test_vreinterpret_s16_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s16_f64, int16x4_t, float64x1_t)
+ 
+ /*
+ ** test_vreinterpret_p16_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p16_u8, poly16x4_t, uint8x8_t)
+ 
+ /*
+ ** test_vreinterpret_p16_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p16_s8, poly16x4_t, int8x8_t)
+ 
+ /*
+ ** test_vreinterpret_p16_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p16_p8, poly16x4_t, poly8x8_t)
+ 
+ /*
+ ** test_vreinterpret_p16_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p16_mf8, poly16x4_t, mfloat8x8_t)
+ 
+ /*
+ ** test_vreinterpret_p16_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p16_u16, poly16x4_t, uint16x4_t)
+ 
+ /*
+ ** test_vreinterpret_p16_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p16_s16, poly16x4_t, int16x4_t)
+ 
+ /*
+ ** test_vreinterpret_p16_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p16_f16, poly16x4_t, float16x4_t)
+ 
+ /*
+ ** test_vreinterpret_p16_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p16_bf16, poly16x4_t, bfloat16x4_t)
+ 
+ /*
+ ** test_vreinterpret_p16_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p16_u32, poly16x4_t, uint32x2_t)
+ 
+ /*
+ ** test_vreinterpret_p16_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p16_s32, poly16x4_t, int32x2_t)
+ 
+ /*
+ ** test_vreinterpret_p16_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p16_f32, poly16x4_t, float32x2_t)
+ 
+ /*
+ ** test_vreinterpret_p16_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p16_u64, poly16x4_t, uint64x1_t)
+ 
+ /*
+ ** test_vreinterpret_p16_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p16_s64, poly16x4_t, int64x1_t)
+ 
+ /*
+ ** test_vreinterpret_p16_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p16_p64, poly16x4_t, poly64x1_t)
+ 
+ /*
+ ** test_vreinterpret_p16_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p16_f64, poly16x4_t, float64x1_t)
+ 
+ /*
+ ** test_vreinterpret_f16_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f16_u8, float16x4_t, uint8x8_t)
+ 
+ /*
+ ** test_vreinterpret_f16_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f16_s8, float16x4_t, int8x8_t)
+ 
+ /*
+ ** test_vreinterpret_f16_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f16_p8, float16x4_t, poly8x8_t)
+ 
+ /*
+ ** test_vreinterpret_f16_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f16_mf8, float16x4_t, mfloat8x8_t)
+ 
+ /*
+ ** test_vreinterpret_f16_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f16_u16, float16x4_t, uint16x4_t)
+ 
+ /*
+ ** test_vreinterpret_f16_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f16_s16, float16x4_t, int16x4_t)
+ 
+ /*
+ ** test_vreinterpret_f16_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f16_p16, float16x4_t, poly16x4_t)
+ 
+ /*
+ ** test_vreinterpret_f16_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f16_bf16, float16x4_t, bfloat16x4_t)
+ 
+ /*
+ ** test_vreinterpret_f16_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f16_u32, float16x4_t, uint32x2_t)
+ 
+ /*
+ ** test_vreinterpret_f16_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f16_s32, float16x4_t, int32x2_t)
+ 
+ /*
+ ** test_vreinterpret_f16_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f16_f32, float16x4_t, float32x2_t)
+ 
+ /*
+ ** test_vreinterpret_f16_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f16_u64, float16x4_t, uint64x1_t)
+ 
+ /*
+ ** test_vreinterpret_f16_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f16_s64, float16x4_t, int64x1_t)
+ 
+ /*
+ ** test_vreinterpret_f16_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f16_p64, float16x4_t, poly64x1_t)
+ 
+ /*
+ ** test_vreinterpret_f16_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f16_f64, float16x4_t, float64x1_t)
+ 
+ /*
+ ** test_vreinterpret_bf16_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_bf16_u8, bfloat16x4_t, uint8x8_t)
+ 
+ /*
+ ** test_vreinterpret_bf16_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_bf16_s8, bfloat16x4_t, int8x8_t)
+ 
+ /*
+ ** test_vreinterpret_bf16_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_bf16_p8, bfloat16x4_t, poly8x8_t)
+ 
+ /*
+ ** test_vreinterpret_bf16_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_bf16_mf8, bfloat16x4_t, mfloat8x8_t)
+ 
+ /*
+ ** test_vreinterpret_bf16_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_bf16_u16, bfloat16x4_t, uint16x4_t)
+ 
+ /*
+ ** test_vreinterpret_bf16_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_bf16_s16, bfloat16x4_t, int16x4_t)
+ 
+ /*
+ ** test_vreinterpret_bf16_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_bf16_p16, bfloat16x4_t, poly16x4_t)
+ 
+ /*
+ ** test_vreinterpret_bf16_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_bf16_f16, bfloat16x4_t, float16x4_t)
+ 
+ /*
+ ** test_vreinterpret_bf16_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_bf16_u32, bfloat16x4_t, uint32x2_t)
+ 
+ /*
+ ** test_vreinterpret_bf16_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_bf16_s32, bfloat16x4_t, int32x2_t)
+ 
+ /*
+ ** test_vreinterpret_bf16_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_bf16_f32, bfloat16x4_t, float32x2_t)
+ 
+ /*
+ ** test_vreinterpret_bf16_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_bf16_u64, bfloat16x4_t, uint64x1_t)
+ 
+ /*
+ ** test_vreinterpret_bf16_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_bf16_s64, bfloat16x4_t, int64x1_t)
+ 
+ /*
+ ** test_vreinterpret_bf16_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_bf16_p64, bfloat16x4_t, poly64x1_t)
+ 
+ /*
+ ** test_vreinterpret_bf16_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_bf16_f64, bfloat16x4_t, float64x1_t)
+ 
+ /*
+ ** test_vreinterpret_u32_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u32_u8, uint32x2_t, uint8x8_t)
+ 
+ /*
+ ** test_vreinterpret_u32_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u32_s8, uint32x2_t, int8x8_t)
+ 
+ /*
+ ** test_vreinterpret_u32_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u32_p8, uint32x2_t, poly8x8_t)
+ 
+ /*
+ ** test_vreinterpret_u32_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u32_mf8, uint32x2_t, mfloat8x8_t)
+ 
+ /*
+ ** test_vreinterpret_u32_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u32_u16, uint32x2_t, uint16x4_t)
+ 
+ /*
+ ** test_vreinterpret_u32_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u32_s16, uint32x2_t, int16x4_t)
+ 
+ /*
+ ** test_vreinterpret_u32_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u32_p16, uint32x2_t, poly16x4_t)
+ 
+ /*
+ ** test_vreinterpret_u32_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u32_f16, uint32x2_t, float16x4_t)
+ 
+ /*
+ ** test_vreinterpret_u32_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u32_bf16, uint32x2_t, bfloat16x4_t)
+ 
+ /*
+ ** test_vreinterpret_u32_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u32_s32, uint32x2_t, int32x2_t)
+ 
+ /*
+ ** test_vreinterpret_u32_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u32_f32, uint32x2_t, float32x2_t)
+ 
+ /*
+ ** test_vreinterpret_u32_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u32_u64, uint32x2_t, uint64x1_t)
+ 
+ /*
+ ** test_vreinterpret_u32_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u32_s64, uint32x2_t, int64x1_t)
+ 
+ /*
+ ** test_vreinterpret_u32_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u32_p64, uint32x2_t, poly64x1_t)
+ 
+ /*
+ ** test_vreinterpret_u32_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u32_f64, uint32x2_t, float64x1_t)
+ 
+ /*
+ ** test_vreinterpret_s32_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s32_u8, int32x2_t, uint8x8_t)
+ 
+ /*
+ ** test_vreinterpret_s32_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s32_s8, int32x2_t, int8x8_t)
+ 
+ /*
+ ** test_vreinterpret_s32_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s32_p8, int32x2_t, poly8x8_t)
+ 
+ /*
+ ** test_vreinterpret_s32_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s32_mf8, int32x2_t, mfloat8x8_t)
+ 
+ /*
+ ** test_vreinterpret_s32_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s32_u16, int32x2_t, uint16x4_t)
+ 
+ /*
+ ** test_vreinterpret_s32_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s32_s16, int32x2_t, int16x4_t)
+ 
+ /*
+ ** test_vreinterpret_s32_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s32_p16, int32x2_t, poly16x4_t)
+ 
+ /*
+ ** test_vreinterpret_s32_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s32_f16, int32x2_t, float16x4_t)
+ 
+ /*
+ ** test_vreinterpret_s32_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s32_bf16, int32x2_t, bfloat16x4_t)
+ 
+ /*
+ ** test_vreinterpret_s32_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s32_u32, int32x2_t, uint32x2_t)
+ 
+ /*
+ ** test_vreinterpret_s32_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s32_f32, int32x2_t, float32x2_t)
+ 
+ /*
+ ** test_vreinterpret_s32_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s32_u64, int32x2_t, uint64x1_t)
+ 
+ /*
+ ** test_vreinterpret_s32_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s32_s64, int32x2_t, int64x1_t)
+ 
+ /*
+ ** test_vreinterpret_s32_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s32_p64, int32x2_t, poly64x1_t)
+ 
+ /*
+ ** test_vreinterpret_s32_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s32_f64, int32x2_t, float64x1_t)
+ 
+ /*
+ ** test_vreinterpret_f32_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f32_u8, float32x2_t, uint8x8_t)
+ 
+ /*
+ ** test_vreinterpret_f32_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f32_s8, float32x2_t, int8x8_t)
+ 
+ /*
+ ** test_vreinterpret_f32_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f32_p8, float32x2_t, poly8x8_t)
+ 
+ /*
+ ** test_vreinterpret_f32_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f32_mf8, float32x2_t, mfloat8x8_t)
+ 
+ /*
+ ** test_vreinterpret_f32_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f32_u16, float32x2_t, uint16x4_t)
+ 
+ /*
+ ** test_vreinterpret_f32_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f32_s16, float32x2_t, int16x4_t)
+ 
+ /*
+ ** test_vreinterpret_f32_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f32_p16, float32x2_t, poly16x4_t)
+ 
+ /*
+ ** test_vreinterpret_f32_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f32_f16, float32x2_t, float16x4_t)
+ 
+ /*
+ ** test_vreinterpret_f32_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f32_bf16, float32x2_t, bfloat16x4_t)
+ 
+ /*
+ ** test_vreinterpret_f32_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f32_u32, float32x2_t, uint32x2_t)
+ 
+ /*
+ ** test_vreinterpret_f32_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f32_s32, float32x2_t, int32x2_t)
+ 
+ /*
+ ** test_vreinterpret_f32_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f32_u64, float32x2_t, uint64x1_t)
+ 
+ /*
+ ** test_vreinterpret_f32_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f32_s64, float32x2_t, int64x1_t)
+ 
+ /*
+ ** test_vreinterpret_f32_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f32_p64, float32x2_t, poly64x1_t)
+ 
+ /*
+ ** test_vreinterpret_f32_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f32_f64, float32x2_t, float64x1_t)
+ 
+ /*
+ ** test_vreinterpret_u64_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u64_u8, uint64x1_t, uint8x8_t)
+ 
+ /*
+ ** test_vreinterpret_u64_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u64_s8, uint64x1_t, int8x8_t)
+ 
+ /*
+ ** test_vreinterpret_u64_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u64_p8, uint64x1_t, poly8x8_t)
+ 
+ /*
+ ** test_vreinterpret_u64_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u64_mf8, uint64x1_t, mfloat8x8_t)
+ 
+ /*
+ ** test_vreinterpret_u64_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u64_u16, uint64x1_t, uint16x4_t)
+ 
+ /*
+ ** test_vreinterpret_u64_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u64_s16, uint64x1_t, int16x4_t)
+ 
+ /*
+ ** test_vreinterpret_u64_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u64_p16, uint64x1_t, poly16x4_t)
+ 
+ /*
+ ** test_vreinterpret_u64_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u64_f16, uint64x1_t, float16x4_t)
+ 
+ /*
+ ** test_vreinterpret_u64_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u64_bf16, uint64x1_t, bfloat16x4_t)
+ 
+ /*
+ ** test_vreinterpret_u64_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u64_u32, uint64x1_t, uint32x2_t)
+ 
+ /*
+ ** test_vreinterpret_u64_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u64_s32, uint64x1_t, int32x2_t)
+ 
+ /*
+ ** test_vreinterpret_u64_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u64_f32, uint64x1_t, float32x2_t)
+ 
+ /*
+ ** test_vreinterpret_u64_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u64_s64, uint64x1_t, int64x1_t)
+ 
+ /*
+ ** test_vreinterpret_u64_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u64_p64, uint64x1_t, poly64x1_t)
+ 
+ /*
+ ** test_vreinterpret_u64_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_u64_f64, uint64x1_t, float64x1_t)
+ 
+ /*
+ ** test_vreinterpret_s64_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s64_u8, int64x1_t, uint8x8_t)
+ 
+ /*
+ ** test_vreinterpret_s64_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s64_s8, int64x1_t, int8x8_t)
+ 
+ /*
+ ** test_vreinterpret_s64_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s64_p8, int64x1_t, poly8x8_t)
+ 
+ /*
+ ** test_vreinterpret_s64_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s64_mf8, int64x1_t, mfloat8x8_t)
+ 
+ /*
+ ** test_vreinterpret_s64_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s64_u16, int64x1_t, uint16x4_t)
+ 
+ /*
+ ** test_vreinterpret_s64_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s64_s16, int64x1_t, int16x4_t)
+ 
+ /*
+ ** test_vreinterpret_s64_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s64_p16, int64x1_t, poly16x4_t)
+ 
+ /*
+ ** test_vreinterpret_s64_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s64_f16, int64x1_t, float16x4_t)
+ 
+ /*
+ ** test_vreinterpret_s64_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s64_bf16, int64x1_t, bfloat16x4_t)
+ 
+ /*
+ ** test_vreinterpret_s64_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s64_u32, int64x1_t, uint32x2_t)
+ 
+ /*
+ ** test_vreinterpret_s64_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s64_s32, int64x1_t, int32x2_t)
+ 
+ /*
+ ** test_vreinterpret_s64_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s64_f32, int64x1_t, float32x2_t)
+ 
+ /*
+ ** test_vreinterpret_s64_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s64_u64, int64x1_t, uint64x1_t)
+ 
+ /*
+ ** test_vreinterpret_s64_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s64_p64, int64x1_t, poly64x1_t)
+ 
+ /*
+ ** test_vreinterpret_s64_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_s64_f64, int64x1_t, float64x1_t)
+ 
+ /*
+ ** test_vreinterpret_p64_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p64_u8, poly64x1_t, uint8x8_t)
+ 
+ /*
+ ** test_vreinterpret_p64_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p64_s8, poly64x1_t, int8x8_t)
+ 
+ /*
+ ** test_vreinterpret_p64_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p64_p8, poly64x1_t, poly8x8_t)
+ 
+ /*
+ ** test_vreinterpret_p64_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p64_mf8, poly64x1_t, mfloat8x8_t)
+ 
+ /*
+ ** test_vreinterpret_p64_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p64_u16, poly64x1_t, uint16x4_t)
+ 
+ /*
+ ** test_vreinterpret_p64_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p64_s16, poly64x1_t, int16x4_t)
+ 
+ /*
+ ** test_vreinterpret_p64_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p64_p16, poly64x1_t, poly16x4_t)
+ 
+ /*
+ ** test_vreinterpret_p64_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p64_f16, poly64x1_t, float16x4_t)
+ 
+ /*
+ ** test_vreinterpret_p64_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p64_bf16, poly64x1_t, bfloat16x4_t)
+ 
+ /*
+ ** test_vreinterpret_p64_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p64_u32, poly64x1_t, uint32x2_t)
+ 
+ /*
+ ** test_vreinterpret_p64_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p64_s32, poly64x1_t, int32x2_t)
+ 
+ /*
+ ** test_vreinterpret_p64_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p64_f32, poly64x1_t, float32x2_t)
+ 
+ /*
+ ** test_vreinterpret_p64_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p64_u64, poly64x1_t, uint64x1_t)
+ 
+ /*
+ ** test_vreinterpret_p64_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p64_s64, poly64x1_t, int64x1_t)
+ 
+ /*
+ ** test_vreinterpret_p64_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_p64_f64, poly64x1_t, float64x1_t)
+ 
+ /*
+ ** test_vreinterpret_f64_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f64_u8, float64x1_t, uint8x8_t)
+ 
+ /*
+ ** test_vreinterpret_f64_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f64_s8, float64x1_t, int8x8_t)
+ 
+ /*
+ ** test_vreinterpret_f64_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f64_p8, float64x1_t, poly8x8_t)
+ 
+ /*
+ ** test_vreinterpret_f64_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f64_mf8, float64x1_t, mfloat8x8_t)
+ 
+ /*
+ ** test_vreinterpret_f64_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f64_u16, float64x1_t, uint16x4_t)
+ 
+ /*
+ ** test_vreinterpret_f64_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f64_s16, float64x1_t, int16x4_t)
+ 
+ /*
+ ** test_vreinterpret_f64_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f64_p16, float64x1_t, poly16x4_t)
+ 
+ /*
+ ** test_vreinterpret_f64_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f64_f16, float64x1_t, float16x4_t)
+ 
+ /*
+ ** test_vreinterpret_f64_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f64_bf16, float64x1_t, bfloat16x4_t)
+ 
+ /*
+ ** test_vreinterpret_f64_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f64_u32, float64x1_t, uint32x2_t)
+ 
+ /*
+ ** test_vreinterpret_f64_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f64_s32, float64x1_t, int32x2_t)
+ 
+ /*
+ ** test_vreinterpret_f64_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f64_f32, float64x1_t, float32x2_t)
+ 
+ /*
+ ** test_vreinterpret_f64_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f64_u64, float64x1_t, uint64x1_t)
+ 
+ /*
+ ** test_vreinterpret_f64_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f64_s64, float64x1_t, int64x1_t)
+ 
+ /*
+ ** test_vreinterpret_f64_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpret_f64_p64, float64x1_t, poly64x1_t)
+ 
+ /*
+ ** test_vreinterpretq_u8_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u8_s8, uint8x16_t, int8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_u8_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u8_p8, uint8x16_t, poly8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_u8_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u8_mf8, uint8x16_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_u8_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u8_u16, uint8x16_t, uint16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_u8_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u8_s16, uint8x16_t, int16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_u8_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u8_p16, uint8x16_t, poly16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_u8_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u8_f16, uint8x16_t, float16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_u8_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u8_bf16, uint8x16_t, bfloat16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_u8_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u8_u32, uint8x16_t, uint32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_u8_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u8_s32, uint8x16_t, int32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_u8_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u8_f32, uint8x16_t, float32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_u8_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u8_u64, uint8x16_t, uint64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_u8_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u8_s64, uint8x16_t, int64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_u8_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u8_p64, uint8x16_t, poly64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_u8_p128: { xfail *-*-* }
+ ** fmov	d0, x0
+ ** mov	v0\.d\[1\], x1
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u8_p128, uint8x16_t, poly128_t)
+ 
+ /*
+ ** test_vreinterpretq_u8_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u8_f64, uint8x16_t, float64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_s8_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s8_u8, int8x16_t, uint8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_s8_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s8_p8, int8x16_t, poly8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_s8_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s8_mf8, int8x16_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_s8_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s8_u16, int8x16_t, uint16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_s8_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s8_s16, int8x16_t, int16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_s8_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s8_p16, int8x16_t, poly16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_s8_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s8_f16, int8x16_t, float16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_s8_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s8_bf16, int8x16_t, bfloat16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_s8_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s8_u32, int8x16_t, uint32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_s8_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s8_s32, int8x16_t, int32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_s8_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s8_f32, int8x16_t, float32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_s8_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s8_u64, int8x16_t, uint64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_s8_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s8_s64, int8x16_t, int64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_s8_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s8_p64, int8x16_t, poly64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_s8_p128: { xfail *-*-* }
+ ** fmov	d0, x0
+ ** mov	v0\.d\[1\], x1
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s8_p128, int8x16_t, poly128_t)
+ 
+ /*
+ ** test_vreinterpretq_s8_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s8_f64, int8x16_t, float64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_p8_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p8_u8, poly8x16_t, uint8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_p8_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p8_s8, poly8x16_t, int8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_p8_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p8_mf8, poly8x16_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_p8_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p8_u16, poly8x16_t, uint16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_p8_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p8_s16, poly8x16_t, int16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_p8_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p8_p16, poly8x16_t, poly16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_p8_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p8_f16, poly8x16_t, float16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_p8_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p8_bf16, poly8x16_t, bfloat16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_p8_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p8_u32, poly8x16_t, uint32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_p8_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p8_s32, poly8x16_t, int32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_p8_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p8_f32, poly8x16_t, float32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_p8_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p8_u64, poly8x16_t, uint64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_p8_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p8_s64, poly8x16_t, int64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_p8_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p8_p64, poly8x16_t, poly64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_p8_p128: { xfail *-*-* }
+ ** fmov	d0, x0
+ ** mov	v0\.d\[1\], x1
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p8_p128, poly8x16_t, poly128_t)
+ 
+ /*
+ ** test_vreinterpretq_p8_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p8_f64, poly8x16_t, float64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_mf8_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_mf8_u8, mfloat8x16_t, uint8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_mf8_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_mf8_s8, mfloat8x16_t, int8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_mf8_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_mf8_p8, mfloat8x16_t, poly8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_mf8_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_mf8_u16, mfloat8x16_t, uint16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_mf8_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_mf8_s16, mfloat8x16_t, int16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_mf8_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_mf8_p16, mfloat8x16_t, poly16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_mf8_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_mf8_f16, mfloat8x16_t, float16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_mf8_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_mf8_bf16, mfloat8x16_t, bfloat16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_mf8_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_mf8_u32, mfloat8x16_t, uint32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_mf8_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_mf8_s32, mfloat8x16_t, int32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_mf8_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_mf8_f32, mfloat8x16_t, float32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_mf8_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_mf8_u64, mfloat8x16_t, uint64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_mf8_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_mf8_s64, mfloat8x16_t, int64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_mf8_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_mf8_p64, mfloat8x16_t, poly64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_mf8_p128: { xfail *-*-* }
+ ** fmov	d0, x0
+ ** mov	v0\.d\[1\], x1
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_mf8_p128, mfloat8x16_t, poly128_t)
+ 
+ /*
+ ** test_vreinterpretq_mf8_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_mf8_f64, mfloat8x16_t, float64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_u16_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u16_u8, uint16x8_t, uint8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_u16_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u16_s8, uint16x8_t, int8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_u16_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u16_p8, uint16x8_t, poly8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_u16_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u16_mf8, uint16x8_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_u16_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u16_s16, uint16x8_t, int16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_u16_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u16_p16, uint16x8_t, poly16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_u16_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u16_f16, uint16x8_t, float16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_u16_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u16_bf16, uint16x8_t, bfloat16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_u16_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u16_u32, uint16x8_t, uint32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_u16_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u16_s32, uint16x8_t, int32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_u16_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u16_f32, uint16x8_t, float32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_u16_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u16_u64, uint16x8_t, uint64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_u16_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u16_s64, uint16x8_t, int64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_u16_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u16_p64, uint16x8_t, poly64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_u16_p128: { xfail *-*-* }
+ ** fmov	d0, x0
+ ** mov	v0\.d\[1\], x1
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u16_p128, uint16x8_t, poly128_t)
+ 
+ /*
+ ** test_vreinterpretq_u16_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u16_f64, uint16x8_t, float64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_s16_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s16_u8, int16x8_t, uint8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_s16_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s16_s8, int16x8_t, int8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_s16_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s16_p8, int16x8_t, poly8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_s16_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s16_mf8, int16x8_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_s16_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s16_u16, int16x8_t, uint16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_s16_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s16_p16, int16x8_t, poly16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_s16_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s16_f16, int16x8_t, float16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_s16_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s16_bf16, int16x8_t, bfloat16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_s16_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s16_u32, int16x8_t, uint32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_s16_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s16_s32, int16x8_t, int32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_s16_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s16_f32, int16x8_t, float32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_s16_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s16_u64, int16x8_t, uint64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_s16_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s16_s64, int16x8_t, int64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_s16_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s16_p64, int16x8_t, poly64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_s16_p128: { xfail *-*-* }
+ ** fmov	d0, x0
+ ** mov	v0\.d\[1\], x1
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s16_p128, int16x8_t, poly128_t)
+ 
+ /*
+ ** test_vreinterpretq_s16_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s16_f64, int16x8_t, float64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_p16_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p16_u8, poly16x8_t, uint8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_p16_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p16_s8, poly16x8_t, int8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_p16_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p16_p8, poly16x8_t, poly8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_p16_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p16_mf8, poly16x8_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_p16_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p16_u16, poly16x8_t, uint16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_p16_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p16_s16, poly16x8_t, int16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_p16_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p16_f16, poly16x8_t, float16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_p16_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p16_bf16, poly16x8_t, bfloat16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_p16_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p16_u32, poly16x8_t, uint32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_p16_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p16_s32, poly16x8_t, int32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_p16_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p16_f32, poly16x8_t, float32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_p16_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p16_u64, poly16x8_t, uint64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_p16_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p16_s64, poly16x8_t, int64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_p16_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p16_p64, poly16x8_t, poly64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_p16_p128: { xfail *-*-* }
+ ** fmov	d0, x0
+ ** mov	v0\.d\[1\], x1
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p16_p128, poly16x8_t, poly128_t)
+ 
+ /*
+ ** test_vreinterpretq_p16_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p16_f64, poly16x8_t, float64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_f16_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f16_u8, float16x8_t, uint8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_f16_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f16_s8, float16x8_t, int8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_f16_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f16_p8, float16x8_t, poly8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_f16_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f16_mf8, float16x8_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_f16_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f16_u16, float16x8_t, uint16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_f16_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f16_s16, float16x8_t, int16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_f16_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f16_p16, float16x8_t, poly16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_f16_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f16_bf16, float16x8_t, bfloat16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_f16_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f16_u32, float16x8_t, uint32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_f16_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f16_s32, float16x8_t, int32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_f16_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f16_f32, float16x8_t, float32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_f16_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f16_u64, float16x8_t, uint64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_f16_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f16_s64, float16x8_t, int64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_f16_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f16_p64, float16x8_t, poly64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_f16_p128: { xfail *-*-* }
+ ** fmov	d0, x0
+ ** mov	v0\.d\[1\], x1
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f16_p128, float16x8_t, poly128_t)
+ 
+ /*
+ ** test_vreinterpretq_f16_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f16_f64, float16x8_t, float64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_bf16_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_bf16_u8, bfloat16x8_t, uint8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_bf16_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_bf16_s8, bfloat16x8_t, int8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_bf16_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_bf16_p8, bfloat16x8_t, poly8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_bf16_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_bf16_mf8, bfloat16x8_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_bf16_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_bf16_u16, bfloat16x8_t, uint16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_bf16_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_bf16_s16, bfloat16x8_t, int16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_bf16_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_bf16_p16, bfloat16x8_t, poly16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_bf16_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_bf16_f16, bfloat16x8_t, float16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_bf16_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_bf16_u32, bfloat16x8_t, uint32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_bf16_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_bf16_s32, bfloat16x8_t, int32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_bf16_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_bf16_f32, bfloat16x8_t, float32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_bf16_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_bf16_u64, bfloat16x8_t, uint64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_bf16_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_bf16_s64, bfloat16x8_t, int64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_bf16_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_bf16_p64, bfloat16x8_t, poly64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_bf16_p128: { xfail *-*-* }
+ ** fmov	d0, x0
+ ** mov	v0\.d\[1\], x1
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_bf16_p128, bfloat16x8_t, poly128_t)
+ 
+ /*
+ ** test_vreinterpretq_bf16_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_bf16_f64, bfloat16x8_t, float64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_u32_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u32_u8, uint32x4_t, uint8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_u32_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u32_s8, uint32x4_t, int8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_u32_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u32_p8, uint32x4_t, poly8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_u32_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u32_mf8, uint32x4_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_u32_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u32_u16, uint32x4_t, uint16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_u32_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u32_s16, uint32x4_t, int16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_u32_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u32_p16, uint32x4_t, poly16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_u32_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u32_f16, uint32x4_t, float16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_u32_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u32_bf16, uint32x4_t, bfloat16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_u32_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u32_s32, uint32x4_t, int32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_u32_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u32_f32, uint32x4_t, float32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_u32_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u32_u64, uint32x4_t, uint64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_u32_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u32_s64, uint32x4_t, int64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_u32_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u32_p64, uint32x4_t, poly64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_u32_p128: { xfail *-*-* }
+ ** fmov	d0, x0
+ ** mov	v0\.d\[1\], x1
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u32_p128, uint32x4_t, poly128_t)
+ 
+ /*
+ ** test_vreinterpretq_u32_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u32_f64, uint32x4_t, float64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_s32_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s32_u8, int32x4_t, uint8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_s32_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s32_s8, int32x4_t, int8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_s32_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s32_p8, int32x4_t, poly8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_s32_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s32_mf8, int32x4_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_s32_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s32_u16, int32x4_t, uint16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_s32_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s32_s16, int32x4_t, int16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_s32_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s32_p16, int32x4_t, poly16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_s32_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s32_f16, int32x4_t, float16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_s32_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s32_bf16, int32x4_t, bfloat16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_s32_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s32_u32, int32x4_t, uint32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_s32_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s32_f32, int32x4_t, float32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_s32_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s32_u64, int32x4_t, uint64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_s32_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s32_s64, int32x4_t, int64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_s32_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s32_p64, int32x4_t, poly64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_s32_p128: { xfail *-*-* }
+ ** fmov	d0, x0
+ ** mov	v0\.d\[1\], x1
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s32_p128, int32x4_t, poly128_t)
+ 
+ /*
+ ** test_vreinterpretq_s32_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s32_f64, int32x4_t, float64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_f32_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f32_u8, float32x4_t, uint8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_f32_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f32_s8, float32x4_t, int8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_f32_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f32_p8, float32x4_t, poly8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_f32_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f32_mf8, float32x4_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_f32_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f32_u16, float32x4_t, uint16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_f32_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f32_s16, float32x4_t, int16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_f32_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f32_p16, float32x4_t, poly16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_f32_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f32_f16, float32x4_t, float16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_f32_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f32_bf16, float32x4_t, bfloat16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_f32_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f32_u32, float32x4_t, uint32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_f32_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f32_s32, float32x4_t, int32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_f32_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f32_u64, float32x4_t, uint64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_f32_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f32_s64, float32x4_t, int64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_f32_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f32_p64, float32x4_t, poly64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_f32_p128: { xfail *-*-* }
+ ** fmov	d0, x0
+ ** mov	v0\.d\[1\], x1
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f32_p128, float32x4_t, poly128_t)
+ 
+ /*
+ ** test_vreinterpretq_f32_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f32_f64, float32x4_t, float64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_u64_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u64_u8, uint64x2_t, uint8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_u64_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u64_s8, uint64x2_t, int8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_u64_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u64_p8, uint64x2_t, poly8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_u64_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u64_mf8, uint64x2_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_u64_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u64_u16, uint64x2_t, uint16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_u64_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u64_s16, uint64x2_t, int16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_u64_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u64_p16, uint64x2_t, poly16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_u64_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u64_f16, uint64x2_t, float16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_u64_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u64_bf16, uint64x2_t, bfloat16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_u64_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u64_u32, uint64x2_t, uint32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_u64_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u64_s32, uint64x2_t, int32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_u64_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u64_f32, uint64x2_t, float32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_u64_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u64_s64, uint64x2_t, int64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_u64_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u64_p64, uint64x2_t, poly64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_u64_p128: { xfail *-*-* }
+ ** fmov	d0, x0
+ ** mov	v0\.d\[1\], x1
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u64_p128, uint64x2_t, poly128_t)
+ 
+ /*
+ ** test_vreinterpretq_u64_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_u64_f64, uint64x2_t, float64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_s64_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s64_u8, int64x2_t, uint8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_s64_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s64_s8, int64x2_t, int8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_s64_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s64_p8, int64x2_t, poly8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_s64_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s64_mf8, int64x2_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_s64_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s64_u16, int64x2_t, uint16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_s64_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s64_s16, int64x2_t, int16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_s64_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s64_p16, int64x2_t, poly16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_s64_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s64_f16, int64x2_t, float16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_s64_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s64_bf16, int64x2_t, bfloat16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_s64_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s64_u32, int64x2_t, uint32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_s64_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s64_s32, int64x2_t, int32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_s64_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s64_f32, int64x2_t, float32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_s64_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s64_u64, int64x2_t, uint64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_s64_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s64_p64, int64x2_t, poly64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_s64_p128: { xfail *-*-* }
+ ** fmov	d0, x0
+ ** mov	v0\.d\[1\], x1
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s64_p128, int64x2_t, poly128_t)
+ 
+ /*
+ ** test_vreinterpretq_s64_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_s64_f64, int64x2_t, float64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_p64_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p64_u8, poly64x2_t, uint8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_p64_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p64_s8, poly64x2_t, int8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_p64_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p64_p8, poly64x2_t, poly8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_p64_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p64_mf8, poly64x2_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_p64_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p64_u16, poly64x2_t, uint16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_p64_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p64_s16, poly64x2_t, int16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_p64_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p64_p16, poly64x2_t, poly16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_p64_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p64_f16, poly64x2_t, float16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_p64_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p64_bf16, poly64x2_t, bfloat16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_p64_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p64_u32, poly64x2_t, uint32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_p64_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p64_s32, poly64x2_t, int32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_p64_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p64_f32, poly64x2_t, float32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_p64_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p64_u64, poly64x2_t, uint64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_p64_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p64_s64, poly64x2_t, int64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_p64_p128: { xfail *-*-* }
+ ** fmov	d0, x0
+ ** mov	v0\.d\[1\], x1
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p64_p128, poly64x2_t, poly128_t)
+ 
+ /*
+ ** test_vreinterpretq_p64_f64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p64_f64, poly64x2_t, float64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_p128_u8: { xfail *-*-* }
+ ** fmov	x0, d0
+ ** mov	x1, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p128_u8, poly128_t, uint8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_p128_s8: { xfail *-*-* }
+ ** fmov	x0, d0
+ ** mov	x1, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p128_s8, poly128_t, int8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_p128_p8: { xfail *-*-* }
+ ** fmov	x0, d0
+ ** mov	x1, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p128_p8, poly128_t, poly8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_p128_mf8: { xfail *-*-* }
+ ** fmov	x0, d0
+ ** mov	x1, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p128_mf8, poly128_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_p128_u16: { xfail *-*-* }
+ ** fmov	x0, d0
+ ** mov	x1, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p128_u16, poly128_t, uint16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_p128_s16: { xfail *-*-* }
+ ** fmov	x0, d0
+ ** mov	x1, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p128_s16, poly128_t, int16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_p128_p16: { xfail *-*-* }
+ ** fmov	x0, d0
+ ** mov	x1, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p128_p16, poly128_t, poly16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_p128_f16: { xfail *-*-* }
+ ** fmov	x0, d0
+ ** mov	x1, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p128_f16, poly128_t, float16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_p128_bf16: { xfail *-*-* }
+ ** fmov	x0, d0
+ ** mov	x1, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p128_bf16, poly128_t, bfloat16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_p128_u32: { xfail *-*-* }
+ ** fmov	x0, d0
+ ** mov	x1, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p128_u32, poly128_t, uint32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_p128_s32: { xfail *-*-* }
+ ** fmov	x0, d0
+ ** mov	x1, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p128_s32, poly128_t, int32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_p128_f32: { xfail *-*-* }
+ ** fmov	x0, d0
+ ** mov	x1, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p128_f32, poly128_t, float32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_p128_u64: { xfail *-*-* }
+ ** fmov	x0, d0
+ ** mov	x1, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p128_u64, poly128_t, uint64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_p128_s64: { xfail *-*-* }
+ ** fmov	x0, d0
+ ** mov	x1, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p128_s64, poly128_t, int64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_p128_p64: { xfail *-*-* }
+ ** fmov	x0, d0
+ ** mov	x1, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p128_p64, poly128_t, poly64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_p128_f64: { xfail *-*-* }
+ ** fmov	x0, d0
+ ** mov	x1, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_p128_f64, poly128_t, float64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_f64_u8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f64_u8, float64x2_t, uint8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_f64_s8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f64_s8, float64x2_t, int8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_f64_p8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f64_p8, float64x2_t, poly8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_f64_mf8:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f64_mf8, float64x2_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vreinterpretq_f64_u16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f64_u16, float64x2_t, uint16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_f64_s16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f64_s16, float64x2_t, int16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_f64_p16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f64_p16, float64x2_t, poly16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_f64_f16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f64_f16, float64x2_t, float16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_f64_bf16:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f64_bf16, float64x2_t, bfloat16x8_t)
+ 
+ /*
+ ** test_vreinterpretq_f64_u32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f64_u32, float64x2_t, uint32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_f64_s32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f64_s32, float64x2_t, int32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_f64_f32:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f64_f32, float64x2_t, float32x4_t)
+ 
+ /*
+ ** test_vreinterpretq_f64_u64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f64_u64, float64x2_t, uint64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_f64_s64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f64_s64, float64x2_t, int64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_f64_p64:
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f64_p64, float64x2_t, poly64x2_t)
+ 
+ /*
+ ** test_vreinterpretq_f64_p128: { xfail *-*-* }
+ ** fmov	x0, d0
+ ** mov	x1, v0\.d\[1\]
+ ** ret
+ */
+ TEST_UNARY (vreinterpretq_f64_p128, float64x2_t, poly128_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vrev.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vrev.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vrev.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vrev.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,311 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ /*
+ ** test_vrev16_u8:
+ ** rev16	v0\.8b, v0\.8b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev16_u8, uint8x8_t)
+ 
+ /*
+ ** test_vrev16_s8:
+ ** rev16	v0\.8b, v0\.8b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev16_s8, int8x8_t)
+ 
+ /*
+ ** test_vrev16_p8:
+ ** rev16	v0\.8b, v0\.8b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev16_p8, poly8x8_t)
+ 
+ /*
+ ** test_vrev16_mf8:
+ ** rev16	v0\.8b, v0\.8b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev16_mf8, mfloat8x8_t)
+ 
+ /*
+ ** test_vrev16q_u8:
+ ** rev16	v0\.16b, v0\.16b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev16q_u8, uint8x16_t)
+ 
+ /*
+ ** test_vrev16q_s8:
+ ** rev16	v0\.16b, v0\.16b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev16q_s8, int8x16_t)
+ 
+ /*
+ ** test_vrev16q_p8:
+ ** rev16	v0\.16b, v0\.16b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev16q_p8, poly8x16_t)
+ 
+ /*
+ ** test_vrev16q_mf8:
+ ** rev16	v0\.16b, v0\.16b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev16q_mf8, mfloat8x16_t)
+ 
+ /*
+ ** test_vrev32_u8:
+ ** rev32	v0\.8b, v0\.8b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev32_u8, uint8x8_t)
+ 
+ /*
+ ** test_vrev32_s8:
+ ** rev32	v0\.8b, v0\.8b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev32_s8, int8x8_t)
+ 
+ /*
+ ** test_vrev32_p8:
+ ** rev32	v0\.8b, v0\.8b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev32_p8, poly8x8_t)
+ 
+ /*
+ ** test_vrev32_mf8:
+ ** rev32	v0\.8b, v0\.8b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev32_mf8, mfloat8x8_t)
+ 
+ /*
+ ** test_vrev32_u16:
+ ** rev32	v0\.4h, v0\.4h
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev32_u16, uint16x4_t)
+ 
+ /*
+ ** test_vrev32_s16:
+ ** rev32	v0\.4h, v0\.4h
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev32_s16, int16x4_t)
+ 
+ /*
+ ** test_vrev32_p16:
+ ** rev32	v0\.4h, v0\.4h
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev32_p16, poly16x4_t)
+ 
+ /*
+ ** test_vrev32q_u8:
+ ** rev32	v0\.16b, v0\.16b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev32q_u8, uint8x16_t)
+ 
+ /*
+ ** test_vrev32q_s8:
+ ** rev32	v0\.16b, v0\.16b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev32q_s8, int8x16_t)
+ 
+ /*
+ ** test_vrev32q_p8:
+ ** rev32	v0\.16b, v0\.16b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev32q_p8, poly8x16_t)
+ 
+ /*
+ ** test_vrev32q_mf8:
+ ** rev32	v0\.16b, v0\.16b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev32q_mf8, mfloat8x16_t)
+ 
+ /*
+ ** test_vrev32q_u16:
+ ** rev32	v0\.8h, v0\.8h
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev32q_u16, uint16x8_t)
+ 
+ /*
+ ** test_vrev32q_s16:
+ ** rev32	v0\.8h, v0\.8h
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev32q_s16, int16x8_t)
+ 
+ /*
+ ** test_vrev32q_p16:
+ ** rev32	v0\.8h, v0\.8h
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev32q_p16, poly16x8_t)
+ 
+ /*
+ ** test_vrev64_u8:
+ ** rev64	v0\.8b, v0\.8b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev64_u8, uint8x8_t)
+ 
+ /*
+ ** test_vrev64_s8:
+ ** rev64	v0\.8b, v0\.8b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev64_s8, int8x8_t)
+ 
+ /*
+ ** test_vrev64_p8:
+ ** rev64	v0\.8b, v0\.8b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev64_p8, poly8x8_t)
+ 
+ /*
+ ** test_vrev64_mf8:
+ ** rev64	v0\.8b, v0\.8b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev64_mf8, mfloat8x8_t)
+ 
+ /*
+ ** test_vrev64q_u8:
+ ** rev64	v0\.16b, v0\.16b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev64q_u8, uint8x16_t)
+ 
+ /*
+ ** test_vrev64q_s8:
+ ** rev64	v0\.16b, v0\.16b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev64q_s8, int8x16_t)
+ 
+ /*
+ ** test_vrev64q_p8:
+ ** rev64	v0\.16b, v0\.16b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev64q_p8, poly8x16_t)
+ 
+ /*
+ ** test_vrev64q_mf8:
+ ** rev64	v0\.16b, v0\.16b
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev64q_mf8, mfloat8x16_t)
+ 
+ /*
+ ** test_vrev64_u16:
+ ** rev64	v0\.4h, v0\.4h
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev64_u16, uint16x4_t)
+ 
+ /*
+ ** test_vrev64_s16:
+ ** rev64	v0\.4h, v0\.4h
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev64_s16, int16x4_t)
+ 
+ /*
+ ** test_vrev64_p16:
+ ** rev64	v0\.4h, v0\.4h
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev64_p16, poly16x4_t)
+ 
+ /*
+ ** test_vrev64_f16:
+ ** rev64	v0\.4h, v0\.4h
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev64_f16, float16x4_t)
+ 
+ /*
+ ** test_vrev64_f32:
+ ** rev64	v0\.2s, v0\.2s
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev64_f32, float32x2_t)
+ 
+ /*
+ ** test_vrev64q_u16:
+ ** rev64	v0\.8h, v0\.8h
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev64q_u16, uint16x8_t)
+ /*
+ ** test_vrev64q_s16:
+ ** rev64	v0\.8h, v0\.8h
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev64q_s16, int16x8_t)
+ 
+ /*
+ ** test_vrev64q_p16:
+ ** rev64	v0\.8h, v0\.8h
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev64q_p16, poly16x8_t)
+ 
+ /*
+ ** test_vrev64q_f16:
+ ** rev64	v0\.8h, v0\.8h
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev64q_f16, float16x8_t)
+ 
+ /*
+ ** test_vrev64_u32:
+ ** rev64	v0\.2s, v0\.2s
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev64_u32, uint32x2_t)
+ 
+ /*
+ ** test_vrev64_s32:
+ ** rev64	v0\.2s, v0\.2s
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev64_s32, int32x2_t)
+ 
+ /*
+ ** test_vrev64q_u32:
+ ** rev64	v0\.4s, v0\.4s
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev64q_u32, uint32x4_t)
+ 
+ /*
+ ** test_vrev64q_s32:
+ ** rev64	v0\.4s, v0\.4s
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev64q_s32, int32x4_t)
+ 
+ /*
+ ** test_vrev64q_f32:
+ ** rev64	v0\.4s, v0\.4s
+ ** ret
+ */
+ TEST_UNIFORM_UNARY (vrev64q_f32, float32x4_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vset_lane.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vset_lane.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vset_lane.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vset_lane.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,234 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ #define TEST_SET_LANE(NAME, ELEM_TYPE, VEC_TYPE)                               \
+   VEC_TYPE test_##NAME (VEC_TYPE vec, ELEM_TYPE elem)                          \
+   {                                                                            \
+     return NAME (elem, vec, 0);                                                \
+   }
+ 
+ /*
+ ** test_vset_lane_f16:
+ ** ins	v0\.h\[0\], v1\.h\[0\]
+ ** ret
+ */
+ TEST_SET_LANE (vset_lane_f16, float16_t, float16x4_t)
+ 
+ /*
+ ** test_vset_lane_f32:
+ ** ins	v0\.s\[0\], v1\.s\[0\]
+ ** ret
+ */
+ TEST_SET_LANE (vset_lane_f32, float32_t, float32x2_t)
+ 
+ /*
+ ** test_vset_lane_f64:
+ ** fmov	d0, d1
+ ** ret
+ */
+ TEST_SET_LANE (vset_lane_f64, float64_t, float64x1_t)
+ 
+ /*
+ ** test_vset_lane_p8:
+ ** ins	v0\.b\[0\], w0
+ ** ret
+ */
+ TEST_SET_LANE (vset_lane_p8, poly8_t, poly8x8_t)
+ 
+ /*
+ ** test_vset_lane_mf8:
+ ** ins	v0\.b\[0\], v1\.b\[0\]
+ ** ret
+ */
+ TEST_SET_LANE (vset_lane_mf8, mfloat8_t, mfloat8x8_t)
+ 
+ /*
+ ** test_vset_lane_p16:
+ ** ins	v0\.h\[0\], w0
+ ** ret
+ */
+ TEST_SET_LANE (vset_lane_p16, poly16_t, poly16x4_t)
+ 
+ /*
+ ** test_vset_lane_p64:
+ ** fmov	d0, x0
+ ** ret
+ */
+ TEST_SET_LANE (vset_lane_p64, poly64_t, poly64x1_t)
+ 
+ /*
+ ** test_vset_lane_s8:
+ ** ins	v0\.b\[0\], w0
+ ** ret
+ */
+ TEST_SET_LANE (vset_lane_s8, int8_t, int8x8_t)
+ 
+ /*
+ ** test_vset_lane_s16:
+ ** ins	v0\.h\[0\], w0
+ ** ret
+ */
+ TEST_SET_LANE (vset_lane_s16, int16_t, int16x4_t)
+ 
+ /*
+ ** test_vset_lane_s32:
+ ** ins	v0\.s\[0\], w0
+ ** ret
+ */
+ TEST_SET_LANE (vset_lane_s32, int32_t, int32x2_t)
+ 
+ /*
+ ** test_vset_lane_s64:
+ ** fmov	d0, x0
+ ** ret
+ */
+ TEST_SET_LANE (vset_lane_s64, int64_t, int64x1_t)
+ 
+ /*
+ ** test_vset_lane_u8:
+ ** ins	v0\.b\[0\], w0
+ ** ret
+ */
+ TEST_SET_LANE (vset_lane_u8, uint8_t, uint8x8_t)
+ 
+ /*
+ ** test_vset_lane_u16:
+ ** ins	v0\.h\[0\], w0
+ ** ret
+ */
+ TEST_SET_LANE (vset_lane_u16, uint16_t, uint16x4_t)
+ 
+ /*
+ ** test_vset_lane_u32:
+ ** ins	v0\.s\[0\], w0
+ ** ret
+ */
+ TEST_SET_LANE (vset_lane_u32, uint32_t, uint32x2_t)
+ 
+ /*
+ ** test_vset_lane_u64:
+ ** fmov	d0, x0
+ ** ret
+ */
+ TEST_SET_LANE (vset_lane_u64, uint64_t, uint64x1_t)
+ 
+ /*
+ ** test_vsetq_lane_f16:
+ ** ins	v0\.h\[0\], v1\.h\[0\]
+ ** ret
+ */
+ TEST_SET_LANE (vsetq_lane_f16, float16_t, float16x8_t)
+ 
+ /*
+ ** test_vsetq_lane_f32:
+ ** ins	v0\.s\[0\], v1\.s\[0\]
+ ** ret
+ */
+ TEST_SET_LANE (vsetq_lane_f32, float32_t, float32x4_t)
+ 
+ /*
+ ** test_vsetq_lane_f64:
+ ** ins	v0\.d\[0\], v1\.d\[0\]
+ ** ret
+ */
+ TEST_SET_LANE (vsetq_lane_f64, float64_t, float64x2_t)
+ 
+ /*
+ ** test_vsetq_lane_p8:
+ ** ins	v0\.b\[0\], w0
+ ** ret
+ */
+ TEST_SET_LANE (vsetq_lane_p8, poly8_t, poly8x16_t)
+ 
+ /*
+ ** test_vsetq_lane_mf8:
+ ** ins	v0\.b\[0\], v1\.b\[0\]
+ ** ret
+ */
+ TEST_SET_LANE (vsetq_lane_mf8, mfloat8_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vsetq_lane_p16:
+ ** ins	v0\.h\[0\], w0
+ ** ret
+ */
+ TEST_SET_LANE (vsetq_lane_p16, poly16_t, poly16x8_t)
+ 
+ /*
+ ** test_vsetq_lane_p64:
+ ** ins	v0\.d\[0\], x0
+ ** ret
+ */
+ TEST_SET_LANE (vsetq_lane_p64, poly64_t, poly64x2_t)
+ 
+ /*
+ ** test_vsetq_lane_s8:
+ ** ins	v0\.b\[0\], w0
+ ** ret
+ */
+ TEST_SET_LANE (vsetq_lane_s8, int8_t, int8x16_t)
+ 
+ /*
+ ** test_vsetq_lane_s16:
+ ** ins	v0\.h\[0\], w0
+ ** ret
+ */
+ TEST_SET_LANE (vsetq_lane_s16, int16_t, int16x8_t)
+ 
+ /*
+ ** test_vsetq_lane_s32:
+ ** ins	v0\.s\[0\], w0
+ ** ret
+ */
+ TEST_SET_LANE (vsetq_lane_s32, int32_t, int32x4_t)
+ 
+ /*
+ ** test_vsetq_lane_s64:
+ ** ins	v0\.d\[0\], x0
+ ** ret
+ */
+ TEST_SET_LANE (vsetq_lane_s64, int64_t, int64x2_t)
+ 
+ /*
+ ** test_vsetq_lane_u8:
+ ** ins	v0\.b\[0\], w0
+ ** ret
+ */
+ TEST_SET_LANE (vsetq_lane_u8, uint8_t, uint8x16_t)
+ 
+ /*
+ ** test_vsetq_lane_u16:
+ ** ins	v0\.h\[0\], w0
+ ** ret
+ */
+ TEST_SET_LANE (vsetq_lane_u16, uint16_t, uint16x8_t)
+ 
+ /*
+ ** test_vsetq_lane_u32:
+ ** ins	v0\.s\[0\], w0
+ ** ret
+ */
+ TEST_SET_LANE (vsetq_lane_u32, uint32_t, uint32x4_t)
+ 
+ /*
+ ** test_vsetq_lane_u64:
+ ** ins	v0\.d\[0\], x0
+ ** ret
+ */
+ TEST_SET_LANE (vsetq_lane_u64, uint64_t, uint64x2_t)
+ 
+ /*
+ ** test_vset_lane_bf16:
+ ** ins	v0\.h\[0\], v1\.h\[0\]
+ ** ret
+ */
+ TEST_SET_LANE (vset_lane_bf16, bfloat16_t, bfloat16x4_t)
+ 
+ /*
+ ** test_vsetq_lane_bf16:
+ ** ins	v0\.h\[0\], v1\.h\[0\]
+ ** ret
+ */
+ TEST_SET_LANE (vsetq_lane_bf16, bfloat16_t, bfloat16x8_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vtrn.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vtrn.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vtrn.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vtrn.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,566 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ /*
+ ** test_vtrn1_u8:
+ ** trn1	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn1_u8, uint8x8_t)
+ 
+ /*
+ ** test_vtrn1_s8:
+ ** trn1	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn1_s8, int8x8_t)
+ 
+ /*
+ ** test_vtrn1_p8:
+ ** trn1	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn1_p8, poly8x8_t)
+ 
+ /*
+ ** test_vtrn1_mf8:
+ ** trn1	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn1_mf8, mfloat8x8_t)
+ 
+ /*
+ ** test_vtrn1_u16:
+ ** trn1	v0\.4h, v0\.4h, v1\.4h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn1_u16, uint16x4_t)
+ 
+ /*
+ ** test_vtrn1_s16:
+ ** trn1	v0\.4h, v0\.4h, v1\.4h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn1_s16, int16x4_t)
+ 
+ /*
+ ** test_vtrn1_f16:
+ ** trn1	v0\.4h, v0\.4h, v1\.4h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn1_f16, float16x4_t)
+ 
+ /*
+ ** test_vtrn1_p16:
+ ** trn1	v0\.4h, v0\.4h, v1\.4h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn1_p16, poly16x4_t)
+ 
+ /*
+ ** test_vtrn1_u32:
+ ** (trn|zip)1	v0\.2s, v0\.2s, v1\.2s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn1_u32, uint32x2_t)
+ 
+ /*
+ ** test_vtrn1_s32:
+ ** (trn|zip)1	v0\.2s, v0\.2s, v1\.2s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn1_s32, int32x2_t)
+ 
+ /*
+ ** test_vtrn1_f32:
+ ** (trn|zip)1	v0\.2s, v0\.2s, v1\.2s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn1_f32, float32x2_t)
+ 
+ /*
+ ** test_vtrn1q_u8:
+ ** trn1	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn1q_u8, uint8x16_t)
+ 
+ /*
+ ** test_vtrn1q_s8:
+ ** trn1	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn1q_s8, int8x16_t)
+ 
+ /*
+ ** test_vtrn1q_p8:
+ ** trn1	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn1q_p8, poly8x16_t)
+ 
+ /*
+ ** test_vtrn1q_mf8:
+ ** trn1	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn1q_mf8, mfloat8x16_t)
+ 
+ /*
+ ** test_vtrn1q_u16:
+ ** trn1	v0\.8h, v0\.8h, v1\.8h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn1q_u16, uint16x8_t)
+ 
+ /*
+ ** test_vtrn1q_s16:
+ ** trn1	v0\.8h, v0\.8h, v1\.8h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn1q_s16, int16x8_t)
+ 
+ /*
+ ** test_vtrn1q_f16:
+ ** trn1	v0\.8h, v0\.8h, v1\.8h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn1q_f16, float16x8_t)
+ 
+ /*
+ ** test_vtrn1q_p16:
+ ** trn1	v0\.8h, v0\.8h, v1\.8h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn1q_p16, poly16x8_t)
+ 
+ /*
+ ** test_vtrn1q_u32:
+ ** trn1	v0\.4s, v0\.4s, v1\.4s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn1q_u32, uint32x4_t)
+ 
+ /*
+ ** test_vtrn1q_s32:
+ ** trn1	v0\.4s, v0\.4s, v1\.4s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn1q_s32, int32x4_t)
+ 
+ /*
+ ** test_vtrn1q_f32:
+ ** trn1	v0\.4s, v0\.4s, v1\.4s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn1q_f32, float32x4_t)
+ 
+ /*
+ ** test_vtrn1q_u64:
+ ** (trn|zip)1	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn1q_u64, uint64x2_t)
+ 
+ /*
+ ** test_vtrn1q_s64:
+ ** (trn|zip)1	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn1q_s64, int64x2_t)
+ 
+ /*
+ ** test_vtrn1q_f64:
+ ** (trn|zip)1	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn1q_f64, float64x2_t)
+ 
+ /*
+ ** test_vtrn1q_p64:
+ ** (trn|zip)1	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn1q_p64, poly64x2_t)
+ 
+ /*
+ ** test_vtrn2_u8:
+ ** trn2	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn2_u8, uint8x8_t)
+ 
+ /*
+ ** test_vtrn2_s8:
+ ** trn2	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn2_s8, int8x8_t)
+ 
+ /*
+ ** test_vtrn2_p8:
+ ** trn2	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn2_p8, poly8x8_t)
+ 
+ /*
+ ** test_vtrn2_mf8:
+ ** trn2	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn2_mf8, mfloat8x8_t)
+ 
+ /*
+ ** test_vtrn2_u16:
+ ** trn2	v0\.4h, v0\.4h, v1\.4h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn2_u16, uint16x4_t)
+ 
+ /*
+ ** test_vtrn2_s16:
+ ** trn2	v0\.4h, v0\.4h, v1\.4h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn2_s16, int16x4_t)
+ 
+ /*
+ ** test_vtrn2_f16:
+ ** trn2	v0\.4h, v0\.4h, v1\.4h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn2_f16, float16x4_t)
+ 
+ /*
+ ** test_vtrn2_p16:
+ ** trn2	v0\.4h, v0\.4h, v1\.4h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn2_p16, poly16x4_t)
+ 
+ /*
+ ** test_vtrn2_u32:
+ ** (trn|zip)2	v0\.2s, v0\.2s, v1\.2s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn2_u32, uint32x2_t)
+ 
+ /*
+ ** test_vtrn2_s32:
+ ** (trn|zip)2	v0\.2s, v0\.2s, v1\.2s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn2_s32, int32x2_t)
+ 
+ /*
+ ** test_vtrn2_f32:
+ ** (trn|zip)2	v0\.2s, v0\.2s, v1\.2s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn2_f32, float32x2_t)
+ 
+ /*
+ ** test_vtrn2q_u8:
+ ** trn2	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn2q_u8, uint8x16_t)
+ 
+ /*
+ ** test_vtrn2q_s8:
+ ** trn2	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn2q_s8, int8x16_t)
+ 
+ /*
+ ** test_vtrn2q_p8:
+ ** trn2	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn2q_p8, poly8x16_t)
+ 
+ /*
+ ** test_vtrn2q_mf8:
+ ** trn2	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn2q_mf8, mfloat8x16_t)
+ 
+ /*
+ ** test_vtrn2q_u16:
+ ** trn2	v0\.8h, v0\.8h, v1\.8h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn2q_u16, uint16x8_t)
+ 
+ /*
+ ** test_vtrn2q_s16:
+ ** trn2	v0\.8h, v0\.8h, v1\.8h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn2q_s16, int16x8_t)
+ 
+ /*
+ ** test_vtrn2q_f16:
+ ** trn2	v0\.8h, v0\.8h, v1\.8h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn2q_f16, float16x8_t)
+ 
+ /*
+ ** test_vtrn2q_p16:
+ ** trn2	v0\.8h, v0\.8h, v1\.8h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn2q_p16, poly16x8_t)
+ 
+ /*
+ ** test_vtrn2q_u32:
+ ** trn2	v0\.4s, v0\.4s, v1\.4s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn2q_u32, uint32x4_t)
+ 
+ /*
+ ** test_vtrn2q_s32:
+ ** trn2	v0\.4s, v0\.4s, v1\.4s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn2q_s32, int32x4_t)
+ 
+ /*
+ ** test_vtrn2q_f32:
+ ** trn2	v0\.4s, v0\.4s, v1\.4s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn2q_f32, float32x4_t)
+ 
+ /*
+ ** test_vtrn2q_u64:
+ ** (trn|zip)2	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn2q_u64, uint64x2_t)
+ 
+ /*
+ ** test_vtrn2q_s64:
+ ** (trn|zip)2	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn2q_s64, int64x2_t)
+ 
+ /*
+ ** test_vtrn2q_f64:
+ ** (trn|zip)2	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn2q_f64, float64x2_t)
+ 
+ /*
+ ** test_vtrn2q_p64:
+ ** (trn|zip)2	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vtrn2q_p64, poly64x2_t)
+ 
+ /*
+ ** test_vtrn_u8:
+ ** ...
+ ** trn1	v0\.8b, .+
+ ** trn2	v1\.8b, .+
+ ** ret
+ */
+ TEST_BINARY (vtrn_u8, uint8x8x2_t, uint8x8_t, uint8x8_t)
+ 
+ /*
+ ** test_vtrn_s8:
+ ** ...
+ ** trn1	v0\.8b, .+
+ ** trn2	v1\.8b, .+
+ ** ret
+ */
+ TEST_BINARY (vtrn_s8, int8x8x2_t, int8x8_t, int8x8_t)
+ 
+ /*
+ ** test_vtrn_p8:
+ ** ...
+ ** trn1	v0\.8b, .+
+ ** trn2	v1\.8b, .+
+ ** ret
+ */
+ TEST_BINARY (vtrn_p8, poly8x8x2_t, poly8x8_t, poly8x8_t)
+ 
+ /*
+ ** test_vtrn_mf8:
+ ** ...
+ ** trn1	v0\.8b, .+
+ ** trn2	v1\.8b, .+
+ ** ret
+ */
+ TEST_BINARY (vtrn_mf8, mfloat8x8x2_t, mfloat8x8_t, mfloat8x8_t)
+ 
+ /*
+ ** test_vtrn_u16:
+ ** ...
+ ** trn1	v0\.4h, .+
+ ** trn2	v1\.4h, .+
+ ** ret
+ */
+ TEST_BINARY (vtrn_u16, uint16x4x2_t, uint16x4_t, uint16x4_t)
+ 
+ /*
+ ** test_vtrn_s16:
+ ** ...
+ ** trn1	v0\.4h, .+
+ ** trn2	v1\.4h, .+
+ ** ret
+ */
+ TEST_BINARY (vtrn_s16, int16x4x2_t, int16x4_t, int16x4_t)
+ 
+ /*
+ ** test_vtrn_f16:
+ ** ...
+ ** trn1	v0\.4h, .+
+ ** trn2	v1\.4h, .+
+ ** ret
+ */
+ TEST_BINARY (vtrn_f16, float16x4x2_t, float16x4_t, float16x4_t)
+ 
+ /*
+ ** test_vtrn_p16:
+ ** ...
+ ** trn1	v0\.4h, .+
+ ** trn2	v1\.4h, .+
+ ** ret
+ */
+ TEST_BINARY (vtrn_p16, poly16x4x2_t, poly16x4_t, poly16x4_t)
+ 
+ /*
+ ** test_vtrn_u32:
+ ** ...
+ ** (trn|zip)1	v0\.2s, .+
+ ** (trn|zip)2	v1\.2s, .+
+ ** ret
+ */
+ TEST_BINARY (vtrn_u32, uint32x2x2_t, uint32x2_t, uint32x2_t)
+ 
+ /*
+ ** test_vtrn_s32:
+ ** ...
+ ** (trn|zip)1	v0\.2s, .+
+ ** (trn|zip)2	v1\.2s, .+
+ ** ret
+ */
+ TEST_BINARY (vtrn_s32, int32x2x2_t, int32x2_t, int32x2_t)
+ 
+ /*
+ ** test_vtrn_f32:
+ ** ...
+ ** (trn|zip)1	v0\.2s, .+
+ ** (trn|zip)2	v1\.2s, .+
+ ** ret
+ */
+ TEST_BINARY (vtrn_f32, float32x2x2_t, float32x2_t, float32x2_t)
+ 
+ /*
+ ** test_vtrnq_u8:
+ ** ...
+ ** trn1	v0\.16b, .+
+ ** trn2	v1\.16b, .+
+ ** ret
+ */
+ TEST_BINARY (vtrnq_u8, uint8x16x2_t, uint8x16_t, uint8x16_t)
+ 
+ /*
+ ** test_vtrnq_s8:
+ ** ...
+ ** trn1	v0\.16b, .+
+ ** trn2	v1\.16b, .+
+ ** ret
+ */
+ TEST_BINARY (vtrnq_s8, int8x16x2_t, int8x16_t, int8x16_t)
+ 
+ /*
+ ** test_vtrnq_p8:
+ ** ...
+ ** trn1	v0\.16b, .+
+ ** trn2	v1\.16b, .+
+ ** ret
+ */
+ TEST_BINARY (vtrnq_p8, poly8x16x2_t, poly8x16_t, poly8x16_t)
+ 
+ /*
+ ** test_vtrnq_mf8:
+ ** ...
+ ** trn1	v0\.16b, .+
+ ** trn2	v1\.16b, .+
+ ** ret
+ */
+ TEST_BINARY (vtrnq_mf8, mfloat8x16x2_t, mfloat8x16_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vtrnq_u16:
+ ** ...
+ ** trn1	v0\.8h, .+
+ ** trn2	v1\.8h, .+
+ ** ret
+ */
+ TEST_BINARY (vtrnq_u16, uint16x8x2_t, uint16x8_t, uint16x8_t)
+ 
+ /*
+ ** test_vtrnq_s16:
+ ** ...
+ ** trn1	v0\.8h, .+
+ ** trn2	v1\.8h, .+
+ ** ret
+ */
+ TEST_BINARY (vtrnq_s16, int16x8x2_t, int16x8_t, int16x8_t)
+ 
+ /*
+ ** test_vtrnq_f16:
+ ** ...
+ ** trn1	v0\.8h, .+
+ ** trn2	v1\.8h, .+
+ ** ret
+ */
+ TEST_BINARY (vtrnq_f16, float16x8x2_t, float16x8_t, float16x8_t)
+ 
+ /*
+ ** test_vtrnq_p16:
+ ** ...
+ ** trn1	v0\.8h, .+
+ ** trn2	v1\.8h, .+
+ ** ret
+ */
+ TEST_BINARY (vtrnq_p16, poly16x8x2_t, poly16x8_t, poly16x8_t)
+ 
+ /*
+ ** test_vtrnq_u32:
+ ** ...
+ ** trn1	v0\.4s, .+
+ ** trn2	v1\.4s, .+
+ ** ret
+ */
+ TEST_BINARY (vtrnq_u32, uint32x4x2_t, uint32x4_t, uint32x4_t)
+ 
+ /*
+ ** test_vtrnq_s32:
+ ** ...
+ ** trn1	v0\.4s, .+
+ ** trn2	v1\.4s, .+
+ ** ret
+ */
+ TEST_BINARY (vtrnq_s32, int32x4x2_t, int32x4_t, int32x4_t)
+ 
+ /*
+ ** test_vtrnq_f32:
+ ** ...
+ ** trn1	v0\.4s, .+
+ ** trn2	v1\.4s, .+
+ ** ret
+ */
+ TEST_BINARY (vtrnq_f32, float32x4x2_t, float32x4_t, float32x4_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vuzp.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vuzp.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vuzp.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vuzp.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,566 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ /*
+ ** test_vuzp1_u8:
+ ** uzp1	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp1_u8, uint8x8_t)
+ 
+ /*
+ ** test_vuzp1_s8:
+ ** uzp1	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp1_s8, int8x8_t)
+ 
+ /*
+ ** test_vuzp1_p8:
+ ** uzp1	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp1_p8, poly8x8_t)
+ 
+ /*
+ ** test_vuzp1_mf8:
+ ** uzp1	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp1_mf8, mfloat8x8_t)
+ 
+ /*
+ ** test_vuzp1_u16:
+ ** uzp1	v0\.4h, v0\.4h, v1\.4h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp1_u16, uint16x4_t)
+ 
+ /*
+ ** test_vuzp1_s16:
+ ** uzp1	v0\.4h, v0\.4h, v1\.4h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp1_s16, int16x4_t)
+ 
+ /*
+ ** test_vuzp1_f16:
+ ** uzp1	v0\.4h, v0\.4h, v1\.4h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp1_f16, float16x4_t)
+ 
+ /*
+ ** test_vuzp1_p16:
+ ** uzp1	v0\.4h, v0\.4h, v1\.4h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp1_p16, poly16x4_t)
+ 
+ /*
+ ** test_vuzp1_u32:
+ ** (uzp|zip)1	v0\.2s, v0\.2s, v1\.2s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp1_u32, uint32x2_t)
+ 
+ /*
+ ** test_vuzp1_s32:
+ ** (uzp|zip)1	v0\.2s, v0\.2s, v1\.2s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp1_s32, int32x2_t)
+ 
+ /*
+ ** test_vuzp1_f32:
+ ** (uzp|zip)1	v0\.2s, v0\.2s, v1\.2s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp1_f32, float32x2_t)
+ 
+ /*
+ ** test_vuzp1q_u8:
+ ** uzp1	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp1q_u8, uint8x16_t)
+ 
+ /*
+ ** test_vuzp1q_s8:
+ ** uzp1	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp1q_s8, int8x16_t)
+ 
+ /*
+ ** test_vuzp1q_p8:
+ ** uzp1	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp1q_p8, poly8x16_t)
+ 
+ /*
+ ** test_vuzp1q_mf8:
+ ** uzp1	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp1q_mf8, mfloat8x16_t)
+ 
+ /*
+ ** test_vuzp1q_u16:
+ ** uzp1	v0\.8h, v0\.8h, v1\.8h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp1q_u16, uint16x8_t)
+ 
+ /*
+ ** test_vuzp1q_s16:
+ ** uzp1	v0\.8h, v0\.8h, v1\.8h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp1q_s16, int16x8_t)
+ 
+ /*
+ ** test_vuzp1q_f16:
+ ** uzp1	v0\.8h, v0\.8h, v1\.8h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp1q_f16, float16x8_t)
+ 
+ /*
+ ** test_vuzp1q_p16:
+ ** uzp1	v0\.8h, v0\.8h, v1\.8h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp1q_p16, poly16x8_t)
+ 
+ /*
+ ** test_vuzp1q_u32:
+ ** uzp1	v0\.4s, v0\.4s, v1\.4s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp1q_u32, uint32x4_t)
+ 
+ /*
+ ** test_vuzp1q_s32:
+ ** uzp1	v0\.4s, v0\.4s, v1\.4s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp1q_s32, int32x4_t)
+ 
+ /*
+ ** test_vuzp1q_f32:
+ ** uzp1	v0\.4s, v0\.4s, v1\.4s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp1q_f32, float32x4_t)
+ 
+ /*
+ ** test_vuzp1q_u64:
+ ** (uzp|zip)1	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp1q_u64, uint64x2_t)
+ 
+ /*
+ ** test_vuzp1q_s64:
+ ** (uzp|zip)1	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp1q_s64, int64x2_t)
+ 
+ /*
+ ** test_vuzp1q_f64:
+ ** (uzp|zip)1	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp1q_f64, float64x2_t)
+ 
+ /*
+ ** test_vuzp1q_p64:
+ ** (uzp|zip)1	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp1q_p64, poly64x2_t)
+ 
+ /*
+ ** test_vuzp2_u8:
+ ** uzp2	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp2_u8, uint8x8_t)
+ 
+ /*
+ ** test_vuzp2_s8:
+ ** uzp2	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp2_s8, int8x8_t)
+ 
+ /*
+ ** test_vuzp2_p8:
+ ** uzp2	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp2_p8, poly8x8_t)
+ 
+ /*
+ ** test_vuzp2_mf8:
+ ** uzp2	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp2_mf8, mfloat8x8_t)
+ 
+ /*
+ ** test_vuzp2_u16:
+ ** uzp2	v0\.4h, v0\.4h, v1\.4h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp2_u16, uint16x4_t)
+ 
+ /*
+ ** test_vuzp2_s16:
+ ** uzp2	v0\.4h, v0\.4h, v1\.4h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp2_s16, int16x4_t)
+ 
+ /*
+ ** test_vuzp2_f16:
+ ** uzp2	v0\.4h, v0\.4h, v1\.4h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp2_f16, float16x4_t)
+ 
+ /*
+ ** test_vuzp2_p16:
+ ** uzp2	v0\.4h, v0\.4h, v1\.4h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp2_p16, poly16x4_t)
+ 
+ /*
+ ** test_vuzp2_u32:
+ ** (uzp|zip)2	v0\.2s, v0\.2s, v1\.2s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp2_u32, uint32x2_t)
+ 
+ /*
+ ** test_vuzp2_s32:
+ ** (uzp|zip)2	v0\.2s, v0\.2s, v1\.2s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp2_s32, int32x2_t)
+ 
+ /*
+ ** test_vuzp2_f32:
+ ** (uzp|zip)2	v0\.2s, v0\.2s, v1\.2s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp2_f32, float32x2_t)
+ 
+ /*
+ ** test_vuzp2q_u8:
+ ** uzp2	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp2q_u8, uint8x16_t)
+ 
+ /*
+ ** test_vuzp2q_s8:
+ ** uzp2	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp2q_s8, int8x16_t)
+ 
+ /*
+ ** test_vuzp2q_p8:
+ ** uzp2	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp2q_p8, poly8x16_t)
+ 
+ /*
+ ** test_vuzp2q_mf8:
+ ** uzp2	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp2q_mf8, mfloat8x16_t)
+ 
+ /*
+ ** test_vuzp2q_u16:
+ ** uzp2	v0\.8h, v0\.8h, v1\.8h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp2q_u16, uint16x8_t)
+ 
+ /*
+ ** test_vuzp2q_s16:
+ ** uzp2	v0\.8h, v0\.8h, v1\.8h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp2q_s16, int16x8_t)
+ 
+ /*
+ ** test_vuzp2q_f16:
+ ** uzp2	v0\.8h, v0\.8h, v1\.8h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp2q_f16, float16x8_t)
+ 
+ /*
+ ** test_vuzp2q_p16:
+ ** uzp2	v0\.8h, v0\.8h, v1\.8h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp2q_p16, poly16x8_t)
+ 
+ /*
+ ** test_vuzp2q_u32:
+ ** uzp2	v0\.4s, v0\.4s, v1\.4s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp2q_u32, uint32x4_t)
+ 
+ /*
+ ** test_vuzp2q_s32:
+ ** uzp2	v0\.4s, v0\.4s, v1\.4s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp2q_s32, int32x4_t)
+ 
+ /*
+ ** test_vuzp2q_f32:
+ ** uzp2	v0\.4s, v0\.4s, v1\.4s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp2q_f32, float32x4_t)
+ 
+ /*
+ ** test_vuzp2q_u64:
+ ** (uzp|zip)2	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp2q_u64, uint64x2_t)
+ 
+ /*
+ ** test_vuzp2q_s64:
+ ** (uzp|zip)2	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp2q_s64, int64x2_t)
+ 
+ /*
+ ** test_vuzp2q_f64:
+ ** (uzp|zip)2	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp2q_f64, float64x2_t)
+ 
+ /*
+ ** test_vuzp2q_p64:
+ ** (uzp|zip)2	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vuzp2q_p64, poly64x2_t)
+ 
+ /*
+ ** test_vuzp_u8:
+ ** ...
+ ** uzp1	v0\.8b, .+
+ ** uzp2	v1\.8b, .+
+ ** ret
+ */
+ TEST_BINARY (vuzp_u8, uint8x8x2_t, uint8x8_t, uint8x8_t)
+ 
+ /*
+ ** test_vuzp_s8:
+ ** ...
+ ** uzp1	v0\.8b, .+
+ ** uzp2	v1\.8b, .+
+ ** ret
+ */
+ TEST_BINARY (vuzp_s8, int8x8x2_t, int8x8_t, int8x8_t)
+ 
+ /*
+ ** test_vuzp_p8:
+ ** ...
+ ** uzp1	v0\.8b, .+
+ ** uzp2	v1\.8b, .+
+ ** ret
+ */
+ TEST_BINARY (vuzp_p8, poly8x8x2_t, poly8x8_t, poly8x8_t)
+ 
+ /*
+ ** test_vuzp_mf8:
+ ** ...
+ ** uzp1	v0\.8b, .+
+ ** uzp2	v1\.8b, .+
+ ** ret
+ */
+ TEST_BINARY (vuzp_mf8, mfloat8x8x2_t, mfloat8x8_t, mfloat8x8_t)
+ 
+ /*
+ ** test_vuzp_u16:
+ ** ...
+ ** uzp1	v0\.4h, .+
+ ** uzp2	v1\.4h, .+
+ ** ret
+ */
+ TEST_BINARY (vuzp_u16, uint16x4x2_t, uint16x4_t, uint16x4_t)
+ 
+ /*
+ ** test_vuzp_s16:
+ ** ...
+ ** uzp1	v0\.4h, .+
+ ** uzp2	v1\.4h, .+
+ ** ret
+ */
+ TEST_BINARY (vuzp_s16, int16x4x2_t, int16x4_t, int16x4_t)
+ 
+ /*
+ ** test_vuzp_f16:
+ ** ...
+ ** uzp1	v0\.4h, .+
+ ** uzp2	v1\.4h, .+
+ ** ret
+ */
+ TEST_BINARY (vuzp_f16, float16x4x2_t, float16x4_t, float16x4_t)
+ 
+ /*
+ ** test_vuzp_p16:
+ ** ...
+ ** uzp1	v0\.4h, .+
+ ** uzp2	v1\.4h, .+
+ ** ret
+ */
+ TEST_BINARY (vuzp_p16, poly16x4x2_t, poly16x4_t, poly16x4_t)
+ 
+ /*
+ ** test_vuzp_u32:
+ ** ...
+ ** (uzp|zip)1	v0\.2s, .+
+ ** (uzp|zip)2	v1\.2s, .+
+ ** ret
+ */
+ TEST_BINARY (vuzp_u32, uint32x2x2_t, uint32x2_t, uint32x2_t)
+ 
+ /*
+ ** test_vuzp_s32:
+ ** ...
+ ** (uzp|zip)1	v0\.2s, .+
+ ** (uzp|zip)2	v1\.2s, .+
+ ** ret
+ */
+ TEST_BINARY (vuzp_s32, int32x2x2_t, int32x2_t, int32x2_t)
+ 
+ /*
+ ** test_vuzp_f32:
+ ** ...
+ ** (uzp|zip)1	v0\.2s, .+
+ ** (uzp|zip)2	v1\.2s, .+
+ ** ret
+ */
+ TEST_BINARY (vuzp_f32, float32x2x2_t, float32x2_t, float32x2_t)
+ 
+ /*
+ ** test_vuzpq_u8:
+ ** ...
+ ** uzp1	v0\.16b, .+
+ ** uzp2	v1\.16b, .+
+ ** ret
+ */
+ TEST_BINARY (vuzpq_u8, uint8x16x2_t, uint8x16_t, uint8x16_t)
+ 
+ /*
+ ** test_vuzpq_s8:
+ ** ...
+ ** uzp1	v0\.16b, .+
+ ** uzp2	v1\.16b, .+
+ ** ret
+ */
+ TEST_BINARY (vuzpq_s8, int8x16x2_t, int8x16_t, int8x16_t)
+ 
+ /*
+ ** test_vuzpq_p8:
+ ** ...
+ ** uzp1	v0\.16b, .+
+ ** uzp2	v1\.16b, .+
+ ** ret
+ */
+ TEST_BINARY (vuzpq_p8, poly8x16x2_t, poly8x16_t, poly8x16_t)
+ 
+ /*
+ ** test_vuzpq_mf8:
+ ** ...
+ ** uzp1	v0\.16b, .+
+ ** uzp2	v1\.16b, .+
+ ** ret
+ */
+ TEST_BINARY (vuzpq_mf8, mfloat8x16x2_t, mfloat8x16_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vuzpq_u16:
+ ** ...
+ ** uzp1	v0\.8h, .+
+ ** uzp2	v1\.8h, .+
+ ** ret
+ */
+ TEST_BINARY (vuzpq_u16, uint16x8x2_t, uint16x8_t, uint16x8_t)
+ 
+ /*
+ ** test_vuzpq_s16:
+ ** ...
+ ** uzp1	v0\.8h, .+
+ ** uzp2	v1\.8h, .+
+ ** ret
+ */
+ TEST_BINARY (vuzpq_s16, int16x8x2_t, int16x8_t, int16x8_t)
+ 
+ /*
+ ** test_vuzpq_f16:
+ ** ...
+ ** uzp1	v0\.8h, .+
+ ** uzp2	v1\.8h, .+
+ ** ret
+ */
+ TEST_BINARY (vuzpq_f16, float16x8x2_t, float16x8_t, float16x8_t)
+ 
+ /*
+ ** test_vuzpq_p16:
+ ** ...
+ ** uzp1	v0\.8h, .+
+ ** uzp2	v1\.8h, .+
+ ** ret
+ */
+ TEST_BINARY (vuzpq_p16, poly16x8x2_t, poly16x8_t, poly16x8_t)
+ 
+ /*
+ ** test_vuzpq_u32:
+ ** ...
+ ** uzp1	v0\.4s, .+
+ ** uzp2	v1\.4s, .+
+ ** ret
+ */
+ TEST_BINARY (vuzpq_u32, uint32x4x2_t, uint32x4_t, uint32x4_t)
+ 
+ /*
+ ** test_vuzpq_s32:
+ ** ...
+ ** uzp1	v0\.4s, .+
+ ** uzp2	v1\.4s, .+
+ ** ret
+ */
+ TEST_BINARY (vuzpq_s32, int32x4x2_t, int32x4_t, int32x4_t)
+ 
+ /*
+ ** test_vuzpq_f32:
+ ** ...
+ ** uzp1	v0\.4s, .+
+ ** uzp2	v1\.4s, .+
+ ** ret
+ */
+ TEST_BINARY (vuzpq_f32, float32x4x2_t, float32x4_t, float32x4_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vxar.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vxar.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vxar.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vxar.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,32 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ /*
+ ** test_vxarq_u64_0:
+ ** eor	v0\.16b, (v0\.16b, v1\.16b|v1\.16b, v0\.16b)
+ ** ret
+ */
+ uint64x2_t test_vxarq_u64_0 (uint64x2_t a, uint64x2_t b) { return vxarq_u64 (a, b, 0); }
+ 
+ /*
+ ** test_vxarq_u64_1:
+ ** xar	v0\.2d, v0\.2d, v1\.2d, #?1
+ ** ret
+ */
+ uint64x2_t test_vxarq_u64_1 (uint64x2_t a, uint64x2_t b) { return vxarq_u64 (a, b, 1); }
+ 
+ /*
+ ** test_vxarq_u64_31:
+ ** xar	v0\.2d, v0\.2d, v1\.2d, #?31
+ ** ret
+ */
+ uint64x2_t test_vxarq_u64_31 (uint64x2_t a, uint64x2_t b) { return vxarq_u64 (a, b, 31); }
+ 
+ /*
+ ** test_vxarq_u64_63:
+ ** xar	v0\.2d, v0\.2d, v1\.2d, #?63
+ ** ret
+ */
+ uint64x2_t test_vxarq_u64_63 (uint64x2_t a, uint64x2_t b) { return vxarq_u64 (a, b, 63); }
\ No newline at end of file
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vzip.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vzip.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/neon/vzip.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/neon/vzip.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,559 ----
+ /* { dg-do compile } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include "arm_neon_test.h"
+ 
+ /*
+ ** test_vzip1_u8:
+ ** zip1	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip1_u8, uint8x8_t)
+ 
+ /*
+ ** test_vzip1_s8:
+ ** zip1	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip1_s8, int8x8_t)
+ 
+ /*
+ ** test_vzip1_p8:
+ ** zip1	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip1_p8, poly8x8_t)
+ 
+ /*
+ ** test_vzip1_mf8:
+ ** zip1	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip1_mf8, mfloat8x8_t)
+ 
+ /*
+ ** test_vzip1_u16:
+ ** zip1	v0\.4h, v0\.4h, v1\.4h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip1_u16, uint16x4_t)
+ 
+ /*
+ ** test_vzip1_s16:
+ ** zip1	v0\.4h, v0\.4h, v1\.4h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip1_s16, int16x4_t)
+ 
+ /*
+ ** test_vzip1_f16:
+ ** zip1	v0\.4h, v0\.4h, v1\.4h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip1_f16, float16x4_t)
+ 
+ /*
+ ** test_vzip1_p16:
+ ** zip1	v0\.4h, v0\.4h, v1\.4h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip1_p16, poly16x4_t)
+ 
+ /*
+ ** test_vzip1_u32:
+ ** zip1	v0\.2s, v0\.2s, v1\.2s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip1_u32, uint32x2_t)
+ 
+ /*
+ ** test_vzip1_s32:
+ ** zip1	v0\.2s, v0\.2s, v1\.2s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip1_s32, int32x2_t)
+ 
+ /*
+ ** test_vzip1_f32:
+ ** zip1	v0\.2s, v0\.2s, v1\.2s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip1_f32, float32x2_t)
+ 
+ /*
+ ** test_vzip1q_u8:
+ ** zip1	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip1q_u8, uint8x16_t)
+ 
+ /*
+ ** test_vzip1q_s8:
+ ** zip1	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip1q_s8, int8x16_t)
+ 
+ /*
+ ** test_vzip1q_p8:
+ ** zip1	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip1q_p8, poly8x16_t)
+ 
+ /*
+ ** test_vzip1q_mf8:
+ ** zip1	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip1q_mf8, mfloat8x16_t)
+ 
+ /*
+ ** test_vzip1q_u16:
+ ** zip1	v0\.8h, v0\.8h, v1\.8h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip1q_u16, uint16x8_t)
+ 
+ /*
+ ** test_vzip1q_s16:
+ ** zip1	v0\.8h, v0\.8h, v1\.8h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip1q_s16, int16x8_t)
+ 
+ /*
+ ** test_vzip1q_f16:
+ ** zip1	v0\.8h, v0\.8h, v1\.8h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip1q_f16, float16x8_t)
+ 
+ /*
+ ** test_vzip1q_p16:
+ ** zip1	v0\.8h, v0\.8h, v1\.8h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip1q_p16, poly16x8_t)
+ 
+ /*
+ ** test_vzip1q_u32:
+ ** zip1	v0\.4s, v0\.4s, v1\.4s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip1q_u32, uint32x4_t)
+ 
+ /*
+ ** test_vzip1q_s32:
+ ** zip1	v0\.4s, v0\.4s, v1\.4s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip1q_s32, int32x4_t)
+ 
+ /*
+ ** test_vzip1q_f32:
+ ** zip1	v0\.4s, v0\.4s, v1\.4s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip1q_f32, float32x4_t)
+ 
+ /*
+ ** test_vzip1q_u64:
+ ** zip1	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip1q_u64, uint64x2_t)
+ 
+ /*
+ ** test_vzip1q_s64:
+ ** zip1	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip1q_s64, int64x2_t)
+ 
+ /*
+ ** test_vzip1q_f64:
+ ** zip1	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip1q_f64, float64x2_t)
+ 
+ /*
+ ** test_vzip1q_p64:
+ ** zip1	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip1q_p64, poly64x2_t)
+ 
+ /*
+ ** test_vzip2_u8:
+ ** zip2	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip2_u8, uint8x8_t)
+ 
+ /*
+ ** test_vzip2_s8:
+ ** zip2	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip2_s8, int8x8_t)
+ 
+ /*
+ ** test_vzip2_p8:
+ ** zip2	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip2_p8, poly8x8_t)
+ 
+ /*
+ ** test_vzip2_mf8:
+ ** zip2	v0\.8b, v0\.8b, v1\.8b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip2_mf8, mfloat8x8_t)
+ 
+ /*
+ ** test_vzip2_u16:
+ ** zip2	v0\.4h, v0\.4h, v1\.4h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip2_u16, uint16x4_t)
+ 
+ /*
+ ** test_vzip2_s16:
+ ** zip2	v0\.4h, v0\.4h, v1\.4h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip2_s16, int16x4_t)
+ 
+ /*
+ ** test_vzip2_f16:
+ ** zip2	v0\.4h, v0\.4h, v1\.4h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip2_f16, float16x4_t)
+ 
+ /*
+ ** test_vzip2_p16:
+ ** zip2	v0\.4h, v0\.4h, v1\.4h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip2_p16, poly16x4_t)
+ 
+ /*
+ ** test_vzip2_u32:
+ ** zip2	v0\.2s, v0\.2s, v1\.2s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip2_u32, uint32x2_t)
+ 
+ /*
+ ** test_vzip2_s32:
+ ** zip2	v0\.2s, v0\.2s, v1\.2s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip2_s32, int32x2_t)
+ 
+ /*
+ ** test_vzip2_f32:
+ ** zip2	v0\.2s, v0\.2s, v1\.2s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip2_f32, float32x2_t)
+ 
+ /*
+ ** test_vzip2q_u8:
+ ** zip2	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip2q_u8, uint8x16_t)
+ 
+ /*
+ ** test_vzip2q_s8:
+ ** zip2	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip2q_s8, int8x16_t)
+ 
+ /*
+ ** test_vzip2q_mf8:
+ ** zip2	v0\.16b, v0\.16b, v1\.16b
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip2q_mf8, mfloat8x16_t)
+ 
+ /*
+ ** test_vzip2q_u16:
+ ** zip2	v0\.8h, v0\.8h, v1\.8h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip2q_u16, uint16x8_t)
+ 
+ /*
+ ** test_vzip2q_s16:
+ ** zip2	v0\.8h, v0\.8h, v1\.8h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip2q_s16, int16x8_t)
+ 
+ /*
+ ** test_vzip2q_f16:
+ ** zip2	v0\.8h, v0\.8h, v1\.8h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip2q_f16, float16x8_t)
+ 
+ /*
+ ** test_vzip2q_p16:
+ ** zip2	v0\.8h, v0\.8h, v1\.8h
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip2q_p16, poly16x8_t)
+ 
+ /*
+ ** test_vzip2q_u32:
+ ** zip2	v0\.4s, v0\.4s, v1\.4s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip2q_u32, uint32x4_t)
+ 
+ /*
+ ** test_vzip2q_s32:
+ ** zip2	v0\.4s, v0\.4s, v1\.4s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip2q_s32, int32x4_t)
+ 
+ /*
+ ** test_vzip2q_f32:
+ ** zip2	v0\.4s, v0\.4s, v1\.4s
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip2q_f32, float32x4_t)
+ 
+ /*
+ ** test_vzip2q_u64:
+ ** zip2	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip2q_u64, uint64x2_t)
+ 
+ /*
+ ** test_vzip2q_s64:
+ ** zip2	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip2q_s64, int64x2_t)
+ 
+ /*
+ ** test_vzip2q_f64:
+ ** zip2	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip2q_f64, float64x2_t)
+ 
+ /*
+ ** test_vzip2q_p64:
+ ** zip2	v0\.2d, v0\.2d, v1\.2d
+ ** ret
+ */
+ TEST_UNIFORM_BINARY (vzip2q_p64, poly64x2_t)
+ 
+ /*
+ ** test_vzip_u8:
+ ** ...
+ ** zip1	v0\.8b, .+
+ ** zip2	v1\.8b, .+
+ ** ret
+ */
+ TEST_BINARY (vzip_u8, uint8x8x2_t, uint8x8_t, uint8x8_t)
+ 
+ /*
+ ** test_vzip_s8:
+ ** ...
+ ** zip1	v0\.8b, .+
+ ** zip2	v1\.8b, .+
+ ** ret
+ */
+ TEST_BINARY (vzip_s8, int8x8x2_t, int8x8_t, int8x8_t)
+ 
+ /*
+ ** test_vzip_p8:
+ ** ...
+ ** zip1	v0\.8b, .+
+ ** zip2	v1\.8b, .+
+ ** ret
+ */
+ TEST_BINARY (vzip_p8, poly8x8x2_t, poly8x8_t, poly8x8_t)
+ 
+ /*
+ ** test_vzip_mf8:
+ ** ...
+ ** zip1	v0\.8b, .+
+ ** zip2	v1\.8b, .+
+ ** ret
+ */
+ TEST_BINARY (vzip_mf8, mfloat8x8x2_t, mfloat8x8_t, mfloat8x8_t)
+ 
+ /*
+ ** test_vzip_u16:
+ ** ...
+ ** zip1	v0\.4h, .+
+ ** zip2	v1\.4h, .+
+ ** ret
+ */
+ TEST_BINARY (vzip_u16, uint16x4x2_t, uint16x4_t, uint16x4_t)
+ 
+ /*
+ ** test_vzip_s16:
+ ** ...
+ ** zip1	v0\.4h, .+
+ ** zip2	v1\.4h, .+
+ ** ret
+ */
+ TEST_BINARY (vzip_s16, int16x4x2_t, int16x4_t, int16x4_t)
+ 
+ /*
+ ** test_vzip_f16:
+ ** ...
+ ** zip1	v0\.4h, .+
+ ** zip2	v1\.4h, .+
+ ** ret
+ */
+ TEST_BINARY (vzip_f16, float16x4x2_t, float16x4_t, float16x4_t)
+ 
+ /*
+ ** test_vzip_p16:
+ ** ...
+ ** zip1	v0\.4h, .+
+ ** zip2	v1\.4h, .+
+ ** ret
+ */
+ TEST_BINARY (vzip_p16, poly16x4x2_t, poly16x4_t, poly16x4_t)
+ 
+ /*
+ ** test_vzip_u32:
+ ** ...
+ ** zip1	v0\.2s, .+
+ ** zip2	v1\.2s, .+
+ ** ret
+ */
+ TEST_BINARY (vzip_u32, uint32x2x2_t, uint32x2_t, uint32x2_t)
+ 
+ /*
+ ** test_vzip_s32:
+ ** ...
+ ** zip1	v0\.2s, .+
+ ** zip2	v1\.2s, .+
+ ** ret
+ */
+ TEST_BINARY (vzip_s32, int32x2x2_t, int32x2_t, int32x2_t)
+ 
+ /*
+ ** test_vzip_f32:
+ ** ...
+ ** zip1	v0\.2s, .+
+ ** zip2	v1\.2s, .+
+ ** ret
+ */
+ TEST_BINARY (vzip_f32, float32x2x2_t, float32x2_t, float32x2_t)
+ 
+ /*
+ ** test_vzipq_u8:
+ ** ...
+ ** zip1	v0\.16b, .+
+ ** zip2	v1\.16b, .+
+ ** ret
+ */
+ TEST_BINARY (vzipq_u8, uint8x16x2_t, uint8x16_t, uint8x16_t)
+ 
+ /*
+ ** test_vzipq_s8:
+ ** ...
+ ** zip1	v0\.16b, .+
+ ** zip2	v1\.16b, .+
+ ** ret
+ */
+ TEST_BINARY (vzipq_s8, int8x16x2_t, int8x16_t, int8x16_t)
+ 
+ /*
+ ** test_vzipq_p8:
+ ** ...
+ ** zip1	v0\.16b, .+
+ ** zip2	v1\.16b, .+
+ ** ret
+ */
+ TEST_BINARY (vzipq_p8, poly8x16x2_t, poly8x16_t, poly8x16_t)
+ 
+ /*
+ ** test_vzipq_mf8:
+ ** ...
+ ** zip1	v0\.16b, .+
+ ** zip2	v1\.16b, .+
+ ** ret
+ */
+ TEST_BINARY (vzipq_mf8, mfloat8x16x2_t, mfloat8x16_t, mfloat8x16_t)
+ 
+ /*
+ ** test_vzipq_u16:
+ ** ...
+ ** zip1	v0\.8h, .+
+ ** zip2	v1\.8h, .+
+ ** ret
+ */
+ TEST_BINARY (vzipq_u16, uint16x8x2_t, uint16x8_t, uint16x8_t)
+ 
+ /*
+ ** test_vzipq_s16:
+ ** ...
+ ** zip1	v0\.8h, .+
+ ** zip2	v1\.8h, .+
+ ** ret
+ */
+ TEST_BINARY (vzipq_s16, int16x8x2_t, int16x8_t, int16x8_t)
+ 
+ /*
+ ** test_vzipq_f16:
+ ** ...
+ ** zip1	v0\.8h, .+
+ ** zip2	v1\.8h, .+
+ ** ret
+ */
+ TEST_BINARY (vzipq_f16, float16x8x2_t, float16x8_t, float16x8_t)
+ 
+ /*
+ ** test_vzipq_p16:
+ ** ...
+ ** zip1	v0\.8h, .+
+ ** zip2	v1\.8h, .+
+ ** ret
+ */
+ TEST_BINARY (vzipq_p16, poly16x8x2_t, poly16x8_t, poly16x8_t)
+ 
+ /*
+ ** test_vzipq_u32:
+ ** ...
+ ** zip1	v0\.4s, .+
+ ** zip2	v1\.4s, .+
+ ** ret
+ */
+ TEST_BINARY (vzipq_u32, uint32x4x2_t, uint32x4_t, uint32x4_t)
+ 
+ /*
+ ** test_vzipq_s32:
+ ** ...
+ ** zip1	v0\.4s, .+
+ ** zip2	v1\.4s, .+
+ ** ret
+ */
+ TEST_BINARY (vzipq_s32, int32x4x2_t, int32x4_t, int32x4_t)
+ 
+ /*
+ ** test_vzipq_f32:
+ ** ...
+ ** zip1	v0\.4s, .+
+ ** zip2	v1\.4s, .+
+ ** ret
+ */
+ TEST_BINARY (vzipq_f32, float32x4x2_t, float32x4_t, float32x4_t)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/pr100518.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/pr100518.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/pr100518.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/pr100518.c	Sun Jul  5 22:32:13 2026
*************** int unsigned_range_min, unsigned_range_m
*** 5,9 ****
  
  void a11() {
    a11___trans_tmp_1 = unsigned_range_max < unsigned_range_min;
!   __builtin_memset((char *)1, 0, a11___trans_tmp_1);
  }
--- 5,9 ----
  
  void a11() {
    a11___trans_tmp_1 = unsigned_range_max < unsigned_range_min;
!   __builtin_memset((char *)1, 0, a11___trans_tmp_1); /* { dg-warning "writing 1 byte into a region of size 0" } */
  }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/pr103147-6.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/pr103147-6.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/pr103147-6.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/pr103147-6.c	Sun Jul  5 22:32:13 2026
***************
*** 1,3 ****
--- 1,4 ----
  /* { dg-options "-mgeneral-regs-only" } */
+ /* { dg-excess-errors "arm_neon.h" } */
  
  #include <arm_neon.h>
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/pr113573.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/pr113573.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/pr113573.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/pr113573.c	Sun Jul  5 22:32:13 2026
*************** typedef __Uint8x8_t uint8x8_t;
*** 5,40 ****
  typedef __Uint16x4_t uint16x4_t;
  typedef __Int16x8_t int16x8_t;
  typedef __Uint16x8_t uint16x8_t;
  int jsimd_extbgrx_ycc_convert_neon_image_width,
!     jsimd_extbgrx_ycc_convert_neon___trans_tmp_1;
  uint16x4_t jsimd_extbgrx_ycc_convert_neon___trans_tmp_2;
! uint16x8_t vcombine_u16();
! uint16x8_t vmovl_u8(uint8x8_t __a) {
!   return __builtin_aarch64_uxtlv8hi_uu(__a);
  }
! __inline int __attribute__((__gnu_inline__)) vmull_laneq_u16();
! uint8x8x4_t vld4_u8();
! void jsimd_extbgrx_ycc_convert_neon() {
    int scaled_128_5 = jsimd_extbgrx_ycc_convert_neon___trans_tmp_1,
        cols_remaining = jsimd_extbgrx_ycc_convert_neon_image_width;
    for (;;)
!     if (cols_remaining) {
!       uint8x8x4_t input_pixels = vld4_u8();
!       uint16x8_t r = vmovl_u8(input_pixels.val[2]);
!       uint16x8_t g = vmovl_u8(input_pixels.val[1]);
!       uint16x8_t b = vmovl_u8(input_pixels.val[0]);
!       int y_l = vmull_laneq_u16(r);
!       uint16x8_t __a = g;
!       jsimd_extbgrx_ycc_convert_neon___trans_tmp_2 =
!           (uint16x4_t)vget_low_s16((int16x8_t)__a);
!       __a = b;
!       int cb_l = scaled_128_5;
!       int cb_h = scaled_128_5;
!       int cr_l = scaled_128_5;
!       int cr_h = scaled_128_5;
!       uint16x8_t y_u16 = vcombine_u16(y_l);
!       uint16x8_t cb_u16 = vcombine_u16(cb_l, cb_h);
!       uint16x8_t cr_u16 = vcombine_u16(cr_l, cr_h);
!       __a = y_u16 = cb_u16 = cr_u16;
!     }
  }
--- 5,50 ----
  typedef __Uint16x4_t uint16x4_t;
  typedef __Int16x8_t int16x8_t;
  typedef __Uint16x8_t uint16x8_t;
+ 
  int jsimd_extbgrx_ycc_convert_neon_image_width,
!   jsimd_extbgrx_ycc_convert_neon___trans_tmp_1;
! 
  uint16x4_t jsimd_extbgrx_ycc_convert_neon___trans_tmp_2;
! uint16x8_t foo1 (...);
! 
! uint16x8_t
! foo2 (uint8x8_t __a)
! {
!   return __builtin_aarch64_uxtlv8hi_uu (__a);
  }
! 
! __inline int __attribute__ ((__gnu_inline__)) foo3 (...);
! 
! uint8x8x4_t foo4 (...);
! void
! jsimd_extbgrx_ycc_convert_neon ()
! {
    int scaled_128_5 = jsimd_extbgrx_ycc_convert_neon___trans_tmp_1,
        cols_remaining = jsimd_extbgrx_ycc_convert_neon_image_width;
    for (;;)
!     if (cols_remaining)
!       {
! 	uint8x8x4_t input_pixels = foo4 ();
! 	uint16x8_t r = foo2 (input_pixels.val[2]);
! 	uint16x8_t g = foo2 (input_pixels.val[1]);
! 	uint16x8_t b = foo2 (input_pixels.val[0]);
! 	int y_l = foo3 (r);
! 	uint16x8_t __a = g;
! 	jsimd_extbgrx_ycc_convert_neon___trans_tmp_2 =
! 	  (uint16x4_t) vget_low_s16 ((int16x8_t) __a);
! 	__a = b;
! 	int cb_l = scaled_128_5;
! 	int cb_h = scaled_128_5;
! 	int cr_l = scaled_128_5;
! 	int cr_h = scaled_128_5;
! 	uint16x8_t y_u16 = foo1 (y_l);
! 	uint16x8_t cb_u16 = foo1 (cb_l, cb_h);
! 	uint16x8_t cr_u16 = foo1 (cr_l, cr_h);
! 	__a = y_u16 = cb_u16 = cr_u16;
!       }
  }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/pr97344.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/pr97344.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/pr97344.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/pr97344.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,26 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target aarch64_gas_has_dtprel_reloc } */
+ /* { dg-options "-O0 -g" } */
+ 
+ #include <stdio.h>
+ 
+ __thread unsigned long rage = 1;
+ __thread unsigned long ire = 2;
+ 
+ void*
+ increase_rage()
+ {
+   ++rage;
+   ++ire;
+   printf ("Rage counter for: %lu/%lu\n", rage, ire);
+ }
+ 
+ int
+ main ()
+ {
+   increase_rage();
+   printf ("Rage counter %lu/%lu\n", rage, ire);
+ }
+ 
+ /* { dg-final { scan-assembler ".xword\t%dtprel\\(rage\\)" } } */
+ /* { dg-final { scan-assembler ".xword\t%dtprel\\(ire\\)" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/preserve_none_5.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/preserve_none_5.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/preserve_none_5.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/preserve_none_5.c	Sun Jul  5 22:32:13 2026
***************
*** 6,40 ****
  #include <stdarg.h>
  int foo [[gnu::preserve_none]] (...);
  
! /* Check the pcs argument order is correct. Should be x20-28, x0-7, x10-14, x9, x15 and that the return arg is x0 */
  
  /*
  ** bar:
  ** ...
! **	mov	w15, 23
! **	mov	w9, 22
! **	mov	w14, 21
! **	mov	w13, 20
! **	mov	w12, 19
! **	mov	w11, 18
! **	mov	w10, 17
! **	mov	w7, 16
! **	mov	w6, 15
! **	mov	w5, 14
! **	mov	w4, 13
! **	mov	w3, 12
! **	mov	w2, 11
! **	mov	w1, 10
  **	mov	w0, 9
! **	mov	w28, 8
! **	mov	w27, 7
! **	mov	w26, 6
! **	mov	w25, 5
! **	mov	w24, 4
! **	mov	w23, 3
! **	mov	w22, 2
! **	mov	w21, 1
! **	mov	w20, 0
  **	bl	foo
  **	add	w0, w0, 1
  ** ...
--- 6,56 ----
  #include <stdarg.h>
  int foo [[gnu::preserve_none]] (...);
  
! /* Check preserve_none falls back to AAPCS for variadic functions. */
  
  /*
  ** bar:
  ** ...
! **	mov	w0, 23
! **	mov	w7, 7
! **	mov	w6, 6
! **	mov	w5, 5
! **	mov	w4, 4
! **	mov	w3, 3
! **	mov	w2, 2
! **	mov	w1, 1
! **	str	w0, \[sp, 120\]
! **	mov	w0, 22
! **	str	w0, \[sp, 112\]
! **	mov	w0, 21
! **	str	w0, \[sp, 104\]
! **	mov	w0, 20
! **	str	w0, \[sp, 96\]
! **	mov	w0, 19
! **	str	w0, \[sp, 88\]
! **	mov	w0, 18
! **	str	w0, \[sp, 80\]
! **	mov	w0, 17
! **	str	w0, \[sp, 72\]
! **	mov	w0, 16
! **	str	w0, \[sp, 64\]
! **	mov	w0, 15
! **	str	w0, \[sp, 56\]
! **	mov	w0, 14
! **	str	w0, \[sp, 48\]
! **	mov	w0, 13
! **	str	w0, \[sp, 40\]
! **	mov	w0, 12
! **	str	w0, \[sp, 32\]
! **	mov	w0, 11
! **	str	w0, \[sp, 24\]
! **	mov	w0, 10
! **	str	w0, \[sp, 16\]
  **	mov	w0, 9
! **	str	w0, \[sp, 8\]
! **	mov	w0, 8
! **	str	w0, \[sp\]
! **	mov	w0, 0
  **	bl	foo
  **	add	w0, w0, 1
  ** ...
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sbfiz-widen-mult-1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sbfiz-widen-mult-1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sbfiz-widen-mult-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sbfiz-widen-mult-1.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,49 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include <stdint.h>
+ 
+ /*
+ ** extend_8to32_by2:
+ **	sbfiz	w0, w0, 1, 8
+ **	ret
+ */
+ int32_t extend_8to32_by2  (int8_t x)  { return x * 2; }
+ 
+ /*
+ ** extend_16to32_by2:
+ **	sbfiz	w0, w0, 1, 16
+ **	ret
+ */
+ int32_t extend_16to32_by2 (int16_t x) { return x * 2; }
+ 
+ /*
+ ** extend_8to64_by2:
+ **	sbfiz	x0, x0, 1, 8
+ **	ret
+ */
+ int64_t extend_8to64_by2  (int8_t x)  { return x * 2; }
+ 
+ /*
+ ** extend_16to64_by2:
+ **	sbfiz	x0, x0, 1, 16
+ **	ret
+ */
+ int64_t extend_16to64_by2 (int16_t x) { return x * 2; }
+ 
+ /*
+ ** extend_32to64_by2:
+ **	sbfiz	x0, x0, 1, 32
+ **	ret
+ */
+ int64_t extend_32to64_by2 (int32_t x) { return 2 * x; }
+ 
+ /*
+ ** extend_64to128_by2:
+ **	mov	x1, x0
+ **	lsl	x0, x0, 1
+ **	sbfx	x1, x1, 62, 1
+ **	ret
+ */
+ __int128_t extend_64to128_by2  (long long x)  { return x * 2; }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_6.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_6.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_6.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_6.c	Sun Jul  5 22:32:13 2026
*************** typedef int16_t int16x16_t __attribute__
*** 11,16 ****
--- 11,23 ----
  
  int8x16_t z;
  
+ /*
+ ** test_addressable:
+ **	adrp	x([0-9]+), \.LANCHOR0
+ **	ldr	q([0-9]+), \[x\1, #?:lo12:\.LANCHOR0\]
+ **	sxtl2	v0\.8h, v\2\.16b
+ **	ret
+ */
  int16x8_t
  test_addressable ()
  {
*************** test_addressable ()
*** 19,25 ****
  
  /*
  ** test_scalable_type:
! **	sxtl2	v0.8h, v0.16b
  **	ret
  */
  int16x8_t
--- 26,32 ----
  
  /*
  ** test_scalable_type:
! **	sxtl2	v0\.8h, v0\.16b
  **	ret
  */
  int16x8_t
*************** test_scalable_type (svint8_t scalable)
*** 28,44 ****
    return vmovl_s8 (vget_high_s8 (svget_neonq_s8 (scalable)));
  }
  
  int16x8_t
  test_scalar_type (__int128_t foo)
  {
    return vmovl_s8 (vget_high_s8 (vreinterpretq_s8_p128 (foo)));
  }
  
  int32x4_t
  test_256b_type (int16x16_t foo)
  {
    return vmovl_s16 ((int16x4_t) { foo[4], foo[5], foo[6], foo[7] });
  }
- 
- /* { dg-final { scan-assembler-times {sxtl2\t} 1 } } */
- /* { dg-final { scan-assembler-times {sxtl\t} 3 } } */
--- 35,60 ----
    return vmovl_s8 (vget_high_s8 (svget_neonq_s8 (scalable)));
  }
  
+ /*
+ ** test_scalar_type:
+ **	fmov	d([0-9]+), x1
+ **	sxtl	v0\.8h, v\1\.8b
+ **	ret
+ */
  int16x8_t
  test_scalar_type (__int128_t foo)
  {
    return vmovl_s8 (vget_high_s8 (vreinterpretq_s8_p128 (foo)));
  }
  
+ /*
+ ** test_256b_type:
+ **	ldr	d([0-9]+), \[x0, #?8\]
+ **	sxtl	v0\.4s, v\1\.4h
+ **	ret
+ */
  int32x4_t
  test_256b_type (int16x16_t foo)
  {
    return vmovl_s16 ((int16x4_t) { foo[4], foo[5], foo[6], foo[7] });
  }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/mf8_data_2.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/mf8_data_2.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/mf8_data_2.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/mf8_data_2.c	Sun Jul  5 22:32:13 2026
*************** void test(mfloat8x8_t x8, mfloat8x16_t x
*** 14,20 ****
    vcopy_lane_mf8(x8, 0, x8, -1); /* { dg-error {passing -1 to argument 4 of 'vcopy_lane_mf8', which expects a value in the range \[0, 7\]} } */
    vcopy_lane_mf8(x8, 0, x8, 8); /* { dg-error {passing 8 to argument 4 of 'vcopy_lane_mf8', which expects a value in the range \[0, 7\]} } */
    vcopy_lane_mf8(x8, 100, x8, 100); /* { dg-error {passing 100 to argument 2 of 'vcopy_lane_mf8', which expects a value in the range \[0, 7\]} } */
-   /* { dg-error {passing 100 to argument 4 of 'vcopy_lane_mf8', which expects a value in the range \[0, 7\]} "" { target *-*-* } .-1 } */
  
    vcopy_laneq_mf8(x8, -1, x16, 0); /* { dg-error {passing -1 to argument 2 of 'vcopy_laneq_mf8', which expects a value in the range \[0, 7\]} } */
    vcopy_laneq_mf8(x8, 8, x16, 0); /* { dg-error {passing 8 to argument 2 of 'vcopy_laneq_mf8', which expects a value in the range \[0, 7\]} } */
--- 14,19 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_f32_indices_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_f32_indices_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_f32_indices_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_f32_indices_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do assemble } */
- 
- #include <arm_neon.h>
- 
- float32_t
- test_vget_lane_f32_before (float32x2_t in)
- {
-   /* { dg-error "lane -1 out of range 0 - 1" "" {target *-*-*} 0 } */
-   return vget_lane_f32 (in, -1);
- }
- 
- float32_t
- test_vget_lane_f32_beyond (float32x2_t in)
- {
-   /* { dg-error "lane 2 out of range 0 - 1" "" {target *-*-*} 0 } */
-   return vget_lane_f32 (in, 2);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_f64_indices_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_f64_indices_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_f64_indices_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_f64_indices_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do assemble } */
- 
- #include <arm_neon.h>
- 
- float64_t
- test_vget_lane_f64_before (float64x1_t in)
- {
-   /* { dg-error "lane -1 out of range 0 - 0" "" {target *-*-*} 0 } */
-   return vget_lane_f64 (in, -1);
- }
- 
- float64_t
- test_vget_lane_f64_beyond (float64x1_t in)
- {
-   /* { dg-error "lane 1 out of range 0 - 0" "" {target *-*-*} 0 } */
-   return vget_lane_f64 (in, 1);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_indices.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_indices.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_indices.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_indices.c	Sun Jul  5 22:32:13 2026
***************
*** 0 ****
--- 1,46 ----
+ /* { dg-do assemble } */
+ 
+ #include <arm_neon.h>
+ 
+ #define VEC_LEN(VEC) (sizeof (VEC) / sizeof ((VEC)[0]))
+ 
+ #define TEST_VGET_LANE(NAME, RET_TYPE, ARG_TYPE)                               \
+   RET_TYPE test_##NAME (ARG_TYPE arg) { return NAME (arg, VEC_LEN (arg)); }
+ 
+ TEST_VGET_LANE (vget_lane_u8, uint8_t, uint8x8_t) /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vget_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VGET_LANE (vget_lane_s8, int8_t, int8x8_t)   /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vget_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VGET_LANE (vget_lane_p8, poly8_t, poly8x8_t) /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vget_lane_[a-z0-9]+', [^\n]+} } */
+ 
+ TEST_VGET_LANE (vget_lane_u16, uint16_t, uint16x4_t)      /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vget_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VGET_LANE (vget_lane_s16, int16_t, int16x4_t)        /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vget_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VGET_LANE (vget_lane_p16, poly16_t, poly16x4_t)      /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vget_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VGET_LANE (vget_lane_f16, float16_t, float16x4_t)    /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vget_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VGET_LANE (vget_lane_bf16, bfloat16_t, bfloat16x4_t) /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vget_lane_[a-z0-9]+', [^\n]+} } */
+ 
+ TEST_VGET_LANE (vget_lane_u32, uint32_t, uint32x2_t)   /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vget_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VGET_LANE (vget_lane_s32, int32_t, int32x2_t)     /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vget_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VGET_LANE (vget_lane_f32, float32_t, float32x2_t) /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vget_lane_[a-z0-9]+', [^\n]+} } */
+ 
+ TEST_VGET_LANE (vget_lane_u64, uint64_t, uint64x1_t)   /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vget_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VGET_LANE (vget_lane_s64, int64_t, int64x1_t)     /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vget_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VGET_LANE (vget_lane_f64, float64_t, float64x1_t) /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vget_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VGET_LANE (vget_lane_p64, poly64_t, poly64x1_t)   /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vget_lane_[a-z0-9]+', [^\n]+} } */
+ 
+ TEST_VGET_LANE (vgetq_lane_u8, uint8_t, uint8x16_t) /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vgetq_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VGET_LANE (vgetq_lane_s8, int8_t, int8x16_t)   /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vgetq_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VGET_LANE (vgetq_lane_p8, poly8_t, poly8x16_t) /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vgetq_lane_[a-z0-9]+', [^\n]+} } */
+ 
+ TEST_VGET_LANE (vgetq_lane_u16, uint16_t, uint16x8_t)      /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vgetq_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VGET_LANE (vgetq_lane_s16, int16_t, int16x8_t)        /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vgetq_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VGET_LANE (vgetq_lane_p16, poly16_t, poly16x8_t)      /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vgetq_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VGET_LANE (vgetq_lane_f16, float16_t, float16x8_t)    /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vgetq_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VGET_LANE (vgetq_lane_bf16, bfloat16_t, bfloat16x8_t) /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vgetq_lane_[a-z0-9]+', [^\n]+} } */
+ 
+ TEST_VGET_LANE (vgetq_lane_u32, uint32_t, uint32x4_t)   /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vgetq_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VGET_LANE (vgetq_lane_s32, int32_t, int32x4_t)     /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vgetq_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VGET_LANE (vgetq_lane_f32, float32_t, float32x4_t) /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vgetq_lane_[a-z0-9]+', [^\n]+} } */
+ 
+ TEST_VGET_LANE (vgetq_lane_u64, uint64_t, uint64x2_t)   /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vgetq_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VGET_LANE (vgetq_lane_s64, int64_t, int64x2_t)     /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vgetq_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VGET_LANE (vgetq_lane_f64, float64_t, float64x2_t) /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vgetq_lane_[a-z0-9]+', [^\n]+} } */
+ TEST_VGET_LANE (vgetq_lane_p64, poly64_t, poly64x2_t)   /* { dg-error {passing [0-9]+ to argument [0-9]+ of 'vgetq_lane_[a-z0-9]+', [^\n]+} } */
\ No newline at end of file
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_p16_indices_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_p16_indices_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_p16_indices_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_p16_indices_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do assemble } */
- 
- #include <arm_neon.h>
- 
- poly16_t
- test_vget_lane_p16_before (poly16x4_t in)
- {
-   /* { dg-error "lane -1 out of range 0 - 3" "" {target *-*-*} 0 } */
-   return vget_lane_p16 (in, -1);
- }
- 
- poly16_t
- test_vget_lane_p16_beyond (poly16x4_t in)
- {
-   /* { dg-error "lane 4 out of range 0 - 3" "" {target *-*-*} 0 } */
-   return vget_lane_p16 (in, 4);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_p8_indices_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_p8_indices_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_p8_indices_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_p8_indices_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do assemble } */
- 
- #include <arm_neon.h>
- 
- poly8_t
- test_vget_lane_p8_before (poly8x8_t in)
- {
-   /* { dg-error "lane -1 out of range 0 - 7" "" {target *-*-*} 0 } */
-   return vget_lane_p8 (in, -1);
- }
- 
- poly8_t
- test_vget_lane_p8_beyond (poly8x8_t in)
- {
-   /* { dg-error "lane 8 out of range 0 - 7" "" {target *-*-*} 0 } */
-   return vget_lane_p8 (in, 8);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s16_indices_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s16_indices_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s16_indices_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s16_indices_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do assemble } */
- 
- #include <arm_neon.h>
- 
- int16_t
- test_vget_lane_s16_before (int16x4_t in)
- {
-   /* { dg-error "lane -1 out of range 0 - 3" "" {target *-*-*} 0 } */
-   return vget_lane_s16 (in, -1);
- }
- 
- int16_t
- test_vget_lane_s16_beyond (int16x4_t in)
- {
-   /* { dg-error "lane 4 out of range 0 - 3" "" {target *-*-*} 0 } */
-   return vget_lane_s16 (in, 4);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s32_indices_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s32_indices_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s32_indices_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s32_indices_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do assemble } */
- 
- #include <arm_neon.h>
- 
- int32_t
- test_vget_lane_s32_before (int32x2_t in)
- {
-   /* { dg-error "lane -1 out of range 0 - 1" "" {target *-*-*} 0 } */
-   return vget_lane_s32 (in, -1);
- }
- 
- int32_t
- test_vget_lane_s32_beyond (int32x2_t in)
- {
-   /* { dg-error "lane 2 out of range 0 - 1" "" {target *-*-*} 0 } */
-   return vget_lane_s32 (in, 2);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s64_indices_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s64_indices_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s64_indices_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s64_indices_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do assemble } */
- 
- #include <arm_neon.h>
- 
- int64_t
- test_vget_lane_s64_before (int64x1_t in)
- {
-   /* { dg-error "lane -1 out of range 0 - 0" "" {target *-*-*} 0 } */
-   return vget_lane_s64 (in, -1);
- }
- 
- int64_t
- test_vget_lane_s64_beyond (int64x1_t in)
- {
-   /* { dg-error "lane 1 out of range 0 - 0" "" {target *-*-*} 0 } */
-   return vget_lane_s64 (in, 1);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s8_indices_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s8_indices_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s8_indices_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s8_indices_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do assemble } */
- 
- #include <arm_neon.h>
- 
- int8_t
- test_vget_lane_s8_before (int8x8_t in)
- {
-   /* { dg-error "lane -1 out of range 0 - 7" "" {target *-*-*} 0 } */
-   return vget_lane_s8 (in, -1);
- }
- 
- int8_t
- test_vget_lane_s8_beyond (int8x8_t in)
- {
-   /* { dg-error "lane 8 out of range 0 - 7" "" {target *-*-*} 0 } */
-   return vget_lane_s8 (in, 8);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u16_indices_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u16_indices_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u16_indices_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u16_indices_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do assemble } */
- 
- #include <arm_neon.h>
- 
- uint16_t
- test_vget_lane_u16_before (uint16x4_t in)
- {
-   /* { dg-error "lane -1 out of range 0 - 3" "" {target *-*-*} 0 } */
-   return vget_lane_u16 (in, -1);
- }
- 
- uint16_t
- test_vget_lane_u16_beyond (uint16x4_t in)
- {
-   /* { dg-error "lane 4 out of range 0 - 3" "" {target *-*-*} 0 } */
-   return vget_lane_u16 (in, 4);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u32_indices_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u32_indices_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u32_indices_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u32_indices_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do assemble } */
- 
- #include <arm_neon.h>
- 
- uint32_t
- test_vget_lane_u32_before (uint32x2_t in)
- {
-   /* { dg-error "lane -1 out of range 0 - 1" "" {target *-*-*} 0 } */
-   return vget_lane_u32 (in, -1);
- }
- 
- uint32_t
- test_vget_lane_u32_beyond (uint32x2_t in)
- {
-   /* { dg-error "lane 2 out of range 0 - 1" "" {target *-*-*} 0 } */
-   return vget_lane_u32 (in, 2);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u64_indices_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u64_indices_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u64_indices_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u64_indices_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do assemble } */
- 
- #include <arm_neon.h>
- 
- uint64_t
- test_vget_lane_u64_before (uint64x1_t in)
- {
-   /* { dg-error "lane -1 out of range 0 - 0" "" {target *-*-*} 0 } */
-   return vget_lane_u64 (in, -1);
- }
- 
- uint64_t
- test_vget_lane_u64_beyond (uint64x1_t in)
- {
-   /* { dg-error "lane 1 out of range 0 - 0" "" {target *-*-*} 0 } */
-   return vget_lane_u64 (in, 1);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u8_indices_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u8_indices_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u8_indices_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u8_indices_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do assemble } */
- 
- #include <arm_neon.h>
- 
- uint8_t
- test_vget_lane_u8_before (uint8x8_t in)
- {
-   /* { dg-error "lane -1 out of range 0 - 7" "" {target *-*-*} 0 } */
-   return vget_lane_u8 (in, -1);
- }
- 
- uint8_t
- test_vget_lane_u8_beyond (uint8x8_t in)
- {
-   /* { dg-error "lane 8 out of range 0 - 7" "" {target *-*-*} 0 } */
-   return vget_lane_u8 (in, 8);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_f32_indices_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_f32_indices_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_f32_indices_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_f32_indices_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do assemble } */
- 
- #include <arm_neon.h>
- 
- float32_t
- test_vgetq_lane_f32_before (float32x4_t in)
- {
-   /* { dg-error "lane -1 out of range 0 - 3" "" {target *-*-*} 0 } */
-   return vgetq_lane_f32 (in, -1);
- }
- 
- float32_t
- test_vgetq_lane_f32_beyond (float32x4_t in)
- {
-   /* { dg-error "lane 4 out of range 0 - 3" "" {target *-*-*} 0 } */
-   return vgetq_lane_f32 (in, 4);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_f64_indices_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_f64_indices_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_f64_indices_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_f64_indices_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do assemble } */
- 
- #include <arm_neon.h>
- 
- float64_t
- test_vgetq_lane_f64_before (float64x2_t in)
- {
-   /* { dg-error "lane -1 out of range 0 - 1" "" {target *-*-*} 0 } */
-   return vgetq_lane_f64 (in, -1);
- }
- 
- float64_t
- test_vgetq_lane_f64_beyond (float64x2_t in)
- {
-   /* { dg-error "lane 2 out of range 0 - 1" "" {target *-*-*} 0 } */
-   return vgetq_lane_f64 (in, 2);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_p16_indices_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_p16_indices_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_p16_indices_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_p16_indices_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do assemble } */
- 
- #include <arm_neon.h>
- 
- poly16_t
- test_vgetq_lane_p16_before (poly16x8_t in)
- {
-   /* { dg-error "lane -1 out of range 0 - 7" "" {target *-*-*} 0 } */
-   return vgetq_lane_p16 (in, -1);
- }
- 
- poly16_t
- test_vgetq_lane_p16_beyond (poly16x8_t in)
- {
-   /* { dg-error "lane 8 out of range 0 - 7" "" {target *-*-*} 0 } */
-   return vgetq_lane_p16 (in, 8);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_p8_indices_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_p8_indices_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_p8_indices_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_p8_indices_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do assemble } */
- 
- #include <arm_neon.h>
- 
- poly8_t
- test_vgetq_lane_p8_before (poly8x16_t in)
- {
-   /* { dg-error "lane -1 out of range 0 - 15" "" {target *-*-*} 0 } */
-   return vgetq_lane_p8 (in, -1);
- }
- 
- poly8_t
- test_vgetq_lane_p8_beyond (poly8x16_t in)
- {
-   /* { dg-error "lane 16 out of range 0 - 15" "" {target *-*-*} 0 } */
-   return vgetq_lane_p8 (in, 16);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s16_indices_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s16_indices_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s16_indices_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s16_indices_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do assemble } */
- 
- #include <arm_neon.h>
- 
- int16_t
- test_vgetq_lane_s16_before (int16x8_t in)
- {
-   /* { dg-error "lane -1 out of range 0 - 7" "" {target *-*-*} 0 } */
-   return vgetq_lane_s16 (in, -1);
- }
- 
- int16_t
- test_vgetq_lane_s16_beyond (int16x8_t in)
- {
-   /* { dg-error "lane 8 out of range 0 - 7" "" {target *-*-*} 0 } */
-   return vgetq_lane_s16 (in, 8);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s32_indices_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s32_indices_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s32_indices_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s32_indices_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do assemble } */
- 
- #include <arm_neon.h>
- 
- int32_t
- test_vgetq_lane_s32_before (int32x4_t in)
- {
-   /* { dg-error "lane -1 out of range 0 - 3" "" {target *-*-*} 0 } */
-   return vgetq_lane_s32 (in, -1);
- }
- 
- int32_t
- test_vgetq_lane_s32_beyond (int32x4_t in)
- {
-   /* { dg-error "lane 4 out of range 0 - 3" "" {target *-*-*} 0 } */
-   return vgetq_lane_s32 (in, 4);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s64_indices_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s64_indices_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s64_indices_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s64_indices_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do assemble } */
- 
- #include <arm_neon.h>
- 
- int64_t
- test_vgetq_lane_s64_before (int64x2_t in)
- {
-   /* { dg-error "lane -1 out of range 0 - 1" "" {target *-*-*} 0 } */
-   return vgetq_lane_s64 (in, -1);
- }
- 
- int64_t
- test_vgetq_lane_s64_beyond (int64x2_t in)
- {
-   /* { dg-error "lane 2 out of range 0 - 1" "" {target *-*-*} 0 } */
-   return vgetq_lane_s64 (in, 2);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s8_indices_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s8_indices_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s8_indices_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s8_indices_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do assemble } */
- 
- #include <arm_neon.h>
- 
- int8_t
- test_vgetq_lane_s8_before (int8x16_t in)
- {
-   /* { dg-error "lane -1 out of range 0 - 15" "" {target *-*-*} 0 } */
-   return vgetq_lane_s8 (in, -1);
- }
- 
- int8_t
- test_vgetq_lane_s8_beyond (int8x16_t in)
- {
-   /* { dg-error "lane 16 out of range 0 - 15" "" {target *-*-*} 0 } */
-   return vgetq_lane_s8 (in, 16);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u16_indices_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u16_indices_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u16_indices_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u16_indices_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do assemble } */
- 
- #include <arm_neon.h>
- 
- uint16_t
- test_vgetq_lane_u16_before (uint16x8_t in)
- {
-   /* { dg-error "lane -1 out of range 0 - 7" "" {target *-*-*} 0 } */
-   return vgetq_lane_u16 (in, -1);
- }
- 
- uint16_t
- test_vgetq_lane_u16_beyond (uint16x8_t in)
- {
-   /* { dg-error "lane 8 out of range 0 - 7" "" {target *-*-*} 0 } */
-   return vgetq_lane_u16 (in, 8);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u32_indices_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u32_indices_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u32_indices_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u32_indices_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do assemble } */
- 
- #include <arm_neon.h>
- 
- uint32_t
- test_vgetq_lane_u32_before (uint32x4_t in)
- {
-   /* { dg-error "lane -1 out of range 0 - 3" "" {target *-*-*} 0 } */
-   return vgetq_lane_u32 (in, -1);
- }
- 
- uint32_t
- test_vgetq_lane_u32_beyond (uint32x4_t in)
- {
-   /* { dg-error "lane 4 out of range 0 - 3" "" {target *-*-*} 0 } */
-   return vgetq_lane_u32 (in, 4);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u64_indices_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u64_indices_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u64_indices_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u64_indices_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do assemble } */
- 
- #include <arm_neon.h>
- 
- uint64_t
- test_vgetq_lane_u64_before (uint64x2_t in)
- {
-   /* { dg-error "lane -1 out of range 0 - 1" "" {target *-*-*} 0 } */
-   return vgetq_lane_u64 (in, -1);
- }
- 
- uint64_t
- test_vgetq_lane_u64_beyond (uint64x2_t in)
- {
-   /* { dg-error "lane 2 out of range 0 - 1" "" {target *-*-*} 0 } */
-   return vgetq_lane_u64 (in, 2);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u8_indices_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u8_indices_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u8_indices_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u8_indices_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do assemble } */
- 
- #include <arm_neon.h>
- 
- uint8_t
- test_vgetq_lane_u8_before (uint8x16_t in)
- {
-   /* { dg-error "lane -1 out of range 0 - 15" "" {target *-*-*} 0 } */
-   return vgetq_lane_u8 (in, -1);
- }
- 
- uint8_t
- test_vgetq_lane_u8_beyond (uint8x16_t in)
- {
-   /* { dg-error "lane 16 out of range 0 - 15" "" {target *-*-*} 0 } */
-   return vgetq_lane_u8 (in, 16);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vset_lane_s16_const_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vset_lane_s16_const_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/vset_lane_s16_const_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/simd/vset_lane_s16_const_1.c	Sun Jul  5 22:32:13 2026
*************** int
*** 9,15 ****
  main (int argc, char **argv)
  {
    int16x4_t in = vcreate_s16 (0xdeadbeef00000000ULL);
!   /* { dg-error "must be a constant immediate" "" { target *-*-* } 0 } */
    int16x4_t out = vset_lane_s16 (65535, in, argc);
    return vget_lane_s16 (out, 0);
  }
--- 9,15 ----
  main (int argc, char **argv)
  {
    int16x4_t in = vcreate_s16 (0xdeadbeef00000000ULL);
!   /* { dg-error "must be an integer constant expression" "" { target *-*-* } 0 } */
    int16x4_t out = vset_lane_s16 (65535, in, argc);
    return vget_lane_s16 (out, 0);
  }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sme/arm_sc_memchr.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sme/arm_sc_memchr.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sme/arm_sc_memchr.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sme/arm_sc_memchr.c	Sun Jul  5 22:32:14 2026
***************
*** 0 ****
--- 1,27 ----
+ /* { dg-do run { target aarch64_sme_hw } } */
+ /* { dg-do compile { target { ! { aarch64_sme_hw } } } } */
+ /* { dg-options "-O2 -fbuilding-libgcc" } */
+ 
+ #pragma GCC target "+sme"
+ 
+ #include <assert.h>
+ #include <stdint.h>
+ #include <string.h>
+ 
+ #include <arm_sme.h>
+ 
+ unsigned char basic[] = {'a', 'b', 'c', 'd', 'e', 'f'};
+ 
+ void
+ test (void) __arm_streaming
+ {
+   assert (__arm_sc_memchr (basic, 'x', sizeof basic) == NULL);
+   assert (__arm_sc_memchr (basic, 'd', 4) == basic + 3);
+ }
+ 
+ int
+ main (void)
+ {
+   test ();
+   return 0;
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sme/arm_sc_memcpy.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sme/arm_sc_memcpy.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sme/arm_sc_memcpy.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sme/arm_sc_memcpy.c	Sun Jul  5 22:32:14 2026
***************
*** 0 ****
--- 1,26 ----
+ /* { dg-do run { target aarch64_sme_hw } } */
+ /* { dg-do compile { target { ! { aarch64_sme_hw } } } } */
+ /* { dg-options "-O2 -fbuilding-libgcc" } */
+ 
+ #pragma GCC target "+sme"
+ 
+ #include <assert.h>
+ #include <string.h>
+ 
+ #include <arm_sme.h>
+ 
+ void
+ test (void) __arm_streaming
+ {
+   char src[] = "abcdef";
+   char dst[8] = {'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x'};
+   assert (__arm_sc_memcpy (dst + 1, src + 2, 3) == dst + 1);
+   assert (memcmp (dst, "xcdexxxx", 8) == 0);
+ }
+ 
+ int
+ main (void)
+ {
+   test ();
+   return 0;
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sme/arm_sc_memmove.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sme/arm_sc_memmove.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sme/arm_sc_memmove.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sme/arm_sc_memmove.c	Sun Jul  5 22:32:14 2026
***************
*** 0 ****
--- 1,27 ----
+ /* { dg-do run { target aarch64_sme_hw } } */
+ /* { dg-do compile { target { ! { aarch64_sme_hw } } } } */
+ /* { dg-options "-O2 -fbuilding-libgcc" } */
+ 
+ #pragma GCC target "+sme"
+ 
+ #include <assert.h>
+ #include <string.h>
+ 
+ #include <arm_sme.h>
+ 
+ void
+ test (void) __arm_streaming
+ {
+   char src[] = "abcdef";
+   char dst[16] = {'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x'};
+ 
+   assert (__arm_sc_memmove (dst + 1, src + 2, 3) == dst + 1);
+   assert (memcmp (dst, "xcdexxxx", 8) == 0);
+ }
+ 
+ int
+ main (void)
+ {
+   test ();
+   return 0;
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sme/arm_sc_memset.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sme/arm_sc_memset.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sme/arm_sc_memset.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sme/arm_sc_memset.c	Sun Jul  5 22:32:14 2026
***************
*** 0 ****
--- 1,33 ----
+ /* { dg-do run { target aarch64_sme_hw } } */
+ /* { dg-do compile { target { ! { aarch64_sme_hw } } } } */
+ /* { dg-options "-fbuilding-libgcc" } */
+ 
+ #pragma GCC target "+sme"
+ 
+ #include <assert.h>
+ #include <stdint.h>
+ #include <string.h>
+ 
+ #include <arm_sme.h>
+ 
+ void
+ test (void) __arm_streaming
+ {
+   unsigned char buf[16];
+ 
+   memset (buf, 0x11, sizeof buf);
+ 
+   assert (__arm_sc_memset (buf + 3, 0xaa, 5) == buf + 3);
+ 
+   assert (buf[2] == 0x11);
+   assert (buf[3] == 0xaa);
+   assert (buf[7] == 0xaa);
+   assert (buf[8] == 0x11);
+ }
+ 
+ int
+ main (void)
+ {
+   test ();
+   return 0;
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sme/inlining_10.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sme/inlining_10.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sme/inlining_10.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sme/inlining_10.c	Sun Jul  5 22:32:14 2026
*************** call_vadd ()
*** 18,26 ****
  }
  
  inline void __attribute__((always_inline))
! call_vbsl () // { dg-error "inlining failed" }
  {
!   neon[0] = vbslq_u8 (neon[1], neon[2], neon[3]);
  }
  
  inline void __attribute__((always_inline))
--- 18,26 ----
  }
  
  inline void __attribute__((always_inline))
! call_vhadd () // { dg-error "inlining failed" }
  {
!   neon[0] = vhaddq_u8 (neon[1], neon[2]);
  }
  
  inline void __attribute__((always_inline))
*************** void
*** 51,57 ****
  sc_caller () [[arm::inout("za"), arm::streaming_compatible]]
  {
    call_vadd ();
!   call_vbsl ();
    call_svadd ();
    call_svld1_gather ();
    call_svzero ();
--- 51,57 ----
  sc_caller () [[arm::inout("za"), arm::streaming_compatible]]
  {
    call_vadd ();
!   call_vhadd ();
    call_svadd ();
    call_svld1_gather ();
    call_svzero ();
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sme/inlining_11.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sme/inlining_11.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sme/inlining_11.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sme/inlining_11.c	Sun Jul  5 22:32:14 2026
*************** call_vadd ()
*** 18,26 ****
  }
  
  inline void __attribute__((always_inline))
! call_vbsl () // { dg-error "inlining failed" }
  {
!   neon[0] = vbslq_u8 (neon[1], neon[2], neon[3]);
  }
  
  inline void __attribute__((always_inline))
--- 18,26 ----
  }
  
  inline void __attribute__((always_inline))
! call_vhadd () // { dg-error "inlining failed" }
  {
!   neon[0] = vhaddq_u8 (neon[1], neon[2]);
  }
  
  inline void __attribute__((always_inline))
*************** void
*** 51,57 ****
  sc_caller () [[arm::inout("za"), arm::streaming]]
  {
    call_vadd ();
!   call_vbsl ();
    call_svadd ();
    call_svld1_gather ();
    call_svzero ();
--- 51,57 ----
  sc_caller () [[arm::inout("za"), arm::streaming]]
  {
    call_vadd ();
!   call_vhadd ();
    call_svadd ();
    call_svld1_gather ();
    call_svzero ();
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr120027.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr120027.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr120027.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr120027.c	Sun Jul  5 22:32:14 2026
***************
*** 0 ****
--- 1,180 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ /* Check that the merging form of the unsigned svextb/svexth/svextw intrinsics
+    folds to an unpredicated AND when the governing predicate is all-true, and
+    that the signed forms keep their sign-extend.  */
+ 
+ #include <arm_sve.h>
+ 
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+ 
+ /*
+ ** uxtb_m_u16_tied:
+ **	and	z0\.h, z0\.h, #0xff
+ **	ret
+ */
+ svuint16_t
+ uxtb_m_u16_tied (svuint16_t x)
+ {
+   return svextb_m (x, svptrue_b16 (), x);
+ }
+ 
+ /*
+ ** uxtb_m_u16_untied:
+ **	movprfx	z0, z1
+ **	and	z0\.h, z0\.h, #0xff
+ **	ret
+ */
+ svuint16_t
+ uxtb_m_u16_untied (svuint16_t inactive, svuint16_t x)
+ {
+   return svextb_m (inactive, svptrue_b16 (), x);
+ }
+ 
+ /*
+ ** uxtb_m_u32_tied:
+ **	and	z0\.s, z0\.s, #0xff
+ **	ret
+ */
+ svuint32_t
+ uxtb_m_u32_tied (svuint32_t x)
+ {
+   return svextb_m (x, svptrue_b32 (), x);
+ }
+ 
+ /*
+ ** uxtb_m_u32_untied:
+ **	movprfx	z0, z1
+ **	and	z0\.s, z0\.s, #0xff
+ **	ret
+ */
+ svuint32_t
+ uxtb_m_u32_untied (svuint32_t inactive, svuint32_t x)
+ {
+   return svextb_m (inactive, svptrue_b32 (), x);
+ }
+ 
+ /*
+ ** uxtb_m_u64_tied:
+ **	and	z0\.d, z0\.d, #0xff
+ **	ret
+ */
+ svuint64_t
+ uxtb_m_u64_tied (svuint64_t x)
+ {
+   return svextb_m (x, svptrue_b64 (), x);
+ }
+ 
+ /*
+ ** uxtb_m_u64_untied:
+ **	movprfx	z0, z1
+ **	and	z0\.d, z0\.d, #0xff
+ **	ret
+ */
+ svuint64_t
+ uxtb_m_u64_untied (svuint64_t inactive, svuint64_t x)
+ {
+   return svextb_m (inactive, svptrue_b64 (), x);
+ }
+ 
+ /*
+ ** uxth_m_u32_tied:
+ **	and	z0\.s, z0\.s, #0xffff
+ **	ret
+ */
+ svuint32_t
+ uxth_m_u32_tied (svuint32_t x)
+ {
+   return svexth_m (x, svptrue_b32 (), x);
+ }
+ 
+ /*
+ ** uxth_m_u64_untied:
+ **	movprfx	z0, z1
+ **	and	z0\.d, z0\.d, #0xffff
+ **	ret
+ */
+ svuint64_t
+ uxth_m_u64_untied (svuint64_t inactive, svuint64_t x)
+ {
+   return svexth_m (inactive, svptrue_b64 (), x);
+ }
+ 
+ /*
+ ** uxtw_m_u64_tied:
+ **	and	z0\.d, z0\.d, #0xffffffff
+ **	ret
+ */
+ svuint64_t
+ uxtw_m_u64_tied (svuint64_t x)
+ {
+   return svextw_m (x, svptrue_b64 (), x);
+ }
+ 
+ /*
+ ** uxtw_m_u64_untied:
+ **	movprfx	z0, z1
+ **	and	z0\.d, z0\.d, #0xffffffff
+ **	ret
+ */
+ svuint64_t
+ uxtw_m_u64_untied (svuint64_t inactive, svuint64_t x)
+ {
+   return svextw_m (inactive, svptrue_b64 (), x);
+ }
+ 
+ /*
+ ** sxtb_m_s32_tied:
+ **	ptrue	(p[0-7])\.b, all
+ **	sxtb	z0\.s, \1/m, z0\.s
+ **	ret
+ */
+ svint32_t
+ sxtb_m_s32_tied (svint32_t x)
+ {
+   return svextb_m (x, svptrue_b32 (), x);
+ }
+ 
+ /*
+ ** sxtb_m_s32_untied:
+ **	ptrue	(p[0-7])\.b, all
+ **	sxtb	z0\.s, \1/m, z1\.s
+ **	ret
+ */
+ svint32_t
+ sxtb_m_s32_untied (svint32_t inactive, svint32_t x)
+ {
+   return svextb_m (inactive, svptrue_b32 (), x);
+ }
+ 
+ /*
+ ** sxth_m_s64_tied:
+ **	ptrue	(p[0-7])\.b, all
+ **	sxth	z0\.d, \1/m, z0\.d
+ **	ret
+ */
+ svint64_t
+ sxth_m_s64_tied (svint64_t x)
+ {
+   return svexth_m (x, svptrue_b64 (), x);
+ }
+ 
+ /*
+ ** sxtw_m_s64_tied:
+ **	ptrue	(p[0-7])\.b, all
+ **	sxtw	z0\.d, \1/m, z0\.d
+ **	ret
+ */
+ svint64_t
+ sxtw_m_s64_tied (svint64_t x)
+ {
+   return svextw_m (x, svptrue_b64 (), x);
+ }
+ 
+ #ifdef __cplusplus
+ }
+ #endif
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve/copsi.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve/copsi.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve/copsi.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve/copsi.c	Sun Jul  5 22:32:14 2026
***************
*** 0 ****
--- 1,33 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-O2" } */
+ /* { dg-final { check-function-bodies "**" "" "" } } */
+ 
+ #include <arm_sve.h>
+ 
+ /*
+ ** func_init4:
+ **	mov	z0\.d, x1
+ **	insr	z0\.d, x0
+ **	ret
+ */
+ svint64_t __attribute__ ((noipa))
+ func_init4 (int64_t a, int64_t b)
+ {
+   svint64_t temp = { a, b };
+   return temp;
+ }
+ 
+ /*
+ ** func_init3:
+ **	fmov	s0, w2
+ **	fmov	s0, s0
+ **	insr	z0\.s, w1
+ **	insr	z0\.s, w0
+ **	ret
+ */
+ svint32_t __attribute__ ((noipa))
+ func_init3 (int32_t a, int32_t b, int32_t c)
+ {
+   svint32_t temp = { a, b, c };
+   return temp;
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve/pr105116-run.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve/pr105116-run.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve/pr105116-run.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve/pr105116-run.c	Sun Jul  5 22:32:14 2026
***************
*** 0 ****
--- 1,48 ----
+ /* PR target/105116 */
+ /* { dg-do run { target aarch64_sve_hw } } */
+ /* { dg-options "-O2 -fno-split-wide-types" } */
+ 
+ /* Besides the ICE, the non-representable high-lane subregs used to be
+    resolved lossily (silently reading lane 0), miscompiling the upper lanes.
+    Check the scalarised divide produces the correct result for every lane.  */
+ 
+ typedef signed char vnx16qi __attribute__((vector_size (32)));
+ 
+ __attribute__((noipa)) void
+ vdiv_vnx16qi (vnx16qi *x, vnx16qi y, vnx16qi z)
+ {
+   register vnx16qi dst  asm ("z0");
+   register vnx16qi src1 asm ("z2");
+   register vnx16qi src2 asm ("z4");
+   dst = *x;
+   src1 = y;
+   src2 = z;
+   asm volatile ("" :: "w" (dst), "w" (src1), "w" (src2));
+   dst = src2 - (dst / src1);
+   asm volatile ("" :: "w" (dst));
+   *x = dst;
+ }
+ 
+ int
+ main (void)
+ {
+   vnx16qi X, Y, Z;
+   signed char xv[32], yv[32], zv[32];
+   for (int i = 0; i < 32; i++)
+     {
+       xv[i] = (signed char) (i * 7 - 50);
+       yv[i] = (signed char) (((i % 5) + 1) * (i & 1 ? 1 : -1));
+       zv[i] = (signed char) (100 - i * 3);
+     }
+   __builtin_memcpy (&X, xv, 32);
+   __builtin_memcpy (&Y, yv, 32);
+   __builtin_memcpy (&Z, zv, 32);
+   vdiv_vnx16qi (&X, Y, Z);
+   signed char got[32];
+   __builtin_memcpy (got, &X, 32);
+   for (int i = 0; i < 32; i++)
+     if (got[i]
+ 	!= (signed char) (zv[i] - (signed char) ((int) xv[i] / (int) yv[i])))
+       __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve/pr105116.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve/pr105116.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve/pr105116.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve/pr105116.c	Sun Jul  5 22:32:14 2026
***************
*** 0 ****
--- 1,32 ----
+ /* PR target/105116 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fno-split-wide-types" } */
+ 
+ /* Wide GNU vectors pinned to SVE z registers and then scalarised by vector
+    lowering used to ICE in lra_split_hard_reg_for ("unable to find a register
+    to spill"): LRA reloaded a non-representable scalar subreg of the OImode
+    register pair into GENERAL_REGS, which cannot hold OImode.  Integer vector
+    divide and modulo have no Advanced SIMD form, so they are still scalarised
+    and exercise the reload path.  */
+ 
+ typedef signed char vnx16qi __attribute__((vector_size (32)));
+ 
+ #define TEST(NAME, OP)						\
+   void								\
+   NAME (vnx16qi *x, vnx16qi y, vnx16qi z)			\
+   {								\
+     register vnx16qi dst  asm ("z0");				\
+     register vnx16qi src1 asm ("z2");				\
+     register vnx16qi src2 asm ("z4");				\
+     dst = *x;							\
+     src1 = y;							\
+     src2 = z;							\
+     asm volatile ("" :: "w" (dst), "w" (src1), "w" (src2));	\
+     dst = src2 - (OP);						\
+     asm volatile ("" :: "w" (dst));				\
+     *x = dst;							\
+   }
+ 
+ TEST (vmul_vnx16qi, dst * src1)
+ TEST (vdiv_vnx16qi, dst / src1)
+ TEST (vmod_vnx16qi, dst % src1)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve/vect-unroll-1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve/vect-unroll-1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve/vect-unroll-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve/vect-unroll-1.c	Sun Jul  5 22:32:14 2026
***************
*** 0 ****
--- 1,17 ----
+ /* Check that the loop is not unrolled.  */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mtune=neoverse-v2 -mautovec-preference=sve-only" } */
+ 
+ #include <stdint.h>
+ #include <stdlib.h>
+ 
+ int
+ foo (uint8_t *p1, uint8_t *p2)
+ {
+   int sum = 0;
+   for (int i = 0; i < 10; i++)
+     sum += abs (p1[i] - p2[i]);
+   return sum;
+ }
+ 
+ /* { dg-final { scan-assembler-not {\tld1b\t[^\n]*, mul vl} } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve/vect-unroll-2.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve/vect-unroll-2.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve/vect-unroll-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve/vect-unroll-2.c	Sun Jul  5 22:32:14 2026
***************
*** 0 ****
--- 1,17 ----
+ /* Check that the loop is unrolled by 2 rather than 4 for small niters.  */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mtune=neoverse-v2 -mautovec-preference=sve-only" } */
+ 
+ #include <stdint.h>
+ #include <stdlib.h>
+ 
+ int
+ foo (uint8_t *p1, uint8_t *p2)
+ {
+   int sum = 0;
+   for (int i = 0; i < 20; i++)
+     sum += abs (p1[i] - p2[i]);
+   return sum;
+ }
+ 
+ /* { dg-final { scan-assembler-times {\tld1b\t[^\n]*, mul vl} 2 } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aesd_u8.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aesd_u8.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aesd_u8.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aesd_u8.c	Sun Jul  5 22:32:14 2026
***************
*** 1,9 ****
- /* { dg-skip-if "" { *-*-* } { "-DSTREAMING_COMPATIBLE" } { "" } } */
  /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
  
  #include "test_sve_acle.h"
  
  #pragma GCC target "+sve2-aes"
  
  /*
  ** aesd_u8_tied1:
--- 1,14 ----
  /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ /* { dg-do assemble { target aarch64_asm_ssve-aes_ok } } */
+ /* { dg-do compile { target { ! aarch64_asm_ssve-aes_ok } } } */
  
  #include "test_sve_acle.h"
  
+ #ifdef STREAMING_COMPATIBLE
+ #pragma GCC target "+ssve-aes"
+ #else
  #pragma GCC target "+sve2-aes"
+ #endif
  
  /*
  ** aesd_u8_tied1:
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aese_u8.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aese_u8.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aese_u8.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aese_u8.c	Sun Jul  5 22:32:14 2026
***************
*** 1,9 ****
- /* { dg-skip-if "" { *-*-* } { "-DSTREAMING_COMPATIBLE" } { "" } } */
  /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
  
  #include "test_sve_acle.h"
  
  #pragma GCC target "+sve2-aes"
  
  /*
  ** aese_u8_tied1:
--- 1,14 ----
  /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ /* { dg-do assemble { target aarch64_asm_ssve-aes_ok } } */
+ /* { dg-do compile { target { ! aarch64_asm_ssve-aes_ok } } } */
  
  #include "test_sve_acle.h"
  
+ #ifdef STREAMING_COMPATIBLE
+ #pragma GCC target "+ssve-aes"
+ #else
  #pragma GCC target "+sve2-aes"
+ #endif
  
  /*
  ** aese_u8_tied1:
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aesimc_u8.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aesimc_u8.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aesimc_u8.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aesimc_u8.c	Sun Jul  5 22:32:14 2026
***************
*** 1,9 ****
- /* { dg-skip-if "" { *-*-* } { "-DSTREAMING_COMPATIBLE" } { "" } } */
  /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
  
  #include "test_sve_acle.h"
  
  #pragma GCC target "+sve2-aes"
  
  /*
  ** aesimc_u8_tied1:
--- 1,14 ----
  /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ /* { dg-do assemble { target aarch64_asm_ssve-aes_ok } } */
+ /* { dg-do compile { target { ! aarch64_asm_ssve-aes_ok } } } */
  
  #include "test_sve_acle.h"
  
+ #ifdef STREAMING_COMPATIBLE
+ #pragma GCC target "+ssve-aes"
+ #else
  #pragma GCC target "+sve2-aes"
+ #endif
  
  /*
  ** aesimc_u8_tied1:
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aesmc_u8.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aesmc_u8.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aesmc_u8.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aesmc_u8.c	Sun Jul  5 22:32:14 2026
***************
*** 1,9 ****
- /* { dg-skip-if "" { *-*-* } { "-DSTREAMING_COMPATIBLE" } { "" } } */
  /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
  
  #include "test_sve_acle.h"
  
  #pragma GCC target "+sve2-aes"
  
  /*
  ** aesmc_u8_tied1:
--- 1,14 ----
  /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ /* { dg-do assemble { target aarch64_asm_ssve-aes_ok } } */
+ /* { dg-do compile { target { ! aarch64_asm_ssve-aes_ok } } } */
  
  #include "test_sve_acle.h"
  
+ #ifdef STREAMING_COMPATIBLE
+ #pragma GCC target "+ssve-aes"
+ #else
  #pragma GCC target "+sve2-aes"
+ #endif
  
  /*
  ** aesmc_u8_tied1:
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_s16.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_s16.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_s16.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_s16.c	Sun Jul  5 22:32:14 2026
***************
*** 0 ****
--- 1,70 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sve_acle.h"
+ 
+ /*
+ ** mulh_s16_x_tied1:
+ **	smulh	z0\.h, z0\.h, z1\.h
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_s16_x_tied1, svint16_t,
+ 		z0 = svmulh_s16_x (p0, z0, z1),
+ 		z0 = svmulh_x (p0, z0, z1))
+ 
+ /*
+ ** mulh_s16_x_tied2:
+ **	smulh	z0\.h, z1\.h, z0\.h
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_s16_x_tied2, svint16_t,
+ 		z0 = svmulh_s16_x (p0, z1, z0),
+ 		z0 = svmulh_x (p0, z1, z0))
+ 
+ /*
+ ** mulh_s16_x_untied:
+ **	smulh	z0\.h, z1\.h, z2\.h
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_s16_x_untied, svint16_t,
+ 		z0 = svmulh_s16_x (p0, z1, z2),
+ 		z0 = svmulh_x (p0, z1, z2))
+ 
+ /*
+ ** mulh_w0_s16_x_tied1:
+ **	mov	(z[0-9]+\.h), w0
+ **	smulh	z0\.h, z0\.h, \1
+ **	ret
+ */
+ TEST_UNIFORM_ZX (mulh_w0_s16_x_tied1, svint16_t, int16_t,
+ 		 z0 = svmulh_n_s16_x (p0, z0, x0),
+ 		 z0 = svmulh_x (p0, z0, x0))
+ 
+ /*
+ ** mulh_w0_s16_x_untied:
+ **	mov	z0\.h, w0
+ **	smulh	z0\.h, z1\.h, z0\.h
+ **	ret
+ */
+ TEST_UNIFORM_ZX (mulh_w0_s16_x_untied, svint16_t, int16_t,
+ 		 z0 = svmulh_n_s16_x (p0, z1, x0),
+ 		 z0 = svmulh_x (p0, z1, x0))
+ 
+ /*
+ ** mulh_11_s16_x_tied1:
+ **	mov	(z[0-9]+\.h), #11
+ **	smulh	z0\.h, z0\.h, \1
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_11_s16_x_tied1, svint16_t,
+ 		z0 = svmulh_n_s16_x (p0, z0, 11),
+ 		z0 = svmulh_x (p0, z0, 11))
+ 
+ /*
+ ** mulh_11_s16_x_untied:
+ **	mov	z0\.h, #11
+ **	smulh	z0\.h, z1\.h, z0\.h
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_11_s16_x_untied, svint16_t,
+ 		z0 = svmulh_n_s16_x (p0, z1, 11),
+ 		z0 = svmulh_x (p0, z1, 11))
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_s32.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_s32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_s32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_s32.c	Sun Jul  5 22:32:14 2026
***************
*** 0 ****
--- 1,70 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sve_acle.h"
+ 
+ /*
+ ** mulh_s32_x_tied1:
+ **	smulh	z0\.s, z0\.s, z1\.s
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_s32_x_tied1, svint32_t,
+ 		z0 = svmulh_s32_x (p0, z0, z1),
+ 		z0 = svmulh_x (p0, z0, z1))
+ 
+ /*
+ ** mulh_s32_x_tied2:
+ **	smulh	z0\.s, z1\.s, z0\.s
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_s32_x_tied2, svint32_t,
+ 		z0 = svmulh_s32_x (p0, z1, z0),
+ 		z0 = svmulh_x (p0, z1, z0))
+ 
+ /*
+ ** mulh_s32_x_untied:
+ **	smulh	z0\.s, z1\.s, z2\.s
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_s32_x_untied, svint32_t,
+ 		z0 = svmulh_s32_x (p0, z1, z2),
+ 		z0 = svmulh_x (p0, z1, z2))
+ 
+ /*
+ ** mulh_w0_s32_x_tied1:
+ **	mov	(z[0-9]+\.s), w0
+ **	smulh	z0\.s, z0\.s, \1
+ **	ret
+ */
+ TEST_UNIFORM_ZX (mulh_w0_s32_x_tied1, svint32_t, int32_t,
+ 		 z0 = svmulh_n_s32_x (p0, z0, x0),
+ 		 z0 = svmulh_x (p0, z0, x0))
+ 
+ /*
+ ** mulh_w0_s32_x_untied:
+ **	mov	z0\.s, w0
+ **	smulh	z0\.s, z1\.s, z0\.s
+ **	ret
+ */
+ TEST_UNIFORM_ZX (mulh_w0_s32_x_untied, svint32_t, int32_t,
+ 		 z0 = svmulh_n_s32_x (p0, z1, x0),
+ 		 z0 = svmulh_x (p0, z1, x0))
+ 
+ /*
+ ** mulh_11_s32_x_tied1:
+ **	mov	(z[0-9]+\.s), #11
+ **	smulh	z0\.s, z0\.s, \1
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_11_s32_x_tied1, svint32_t,
+ 		z0 = svmulh_n_s32_x (p0, z0, 11),
+ 		z0 = svmulh_x (p0, z0, 11))
+ 
+ /*
+ ** mulh_11_s32_x_untied:
+ **	mov	z0\.s, #11
+ **	smulh	z0\.s, z1\.s, z0\.s
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_11_s32_x_untied, svint32_t,
+ 		z0 = svmulh_n_s32_x (p0, z1, 11),
+ 		z0 = svmulh_x (p0, z1, 11))
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_s64.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_s64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_s64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_s64.c	Sun Jul  5 22:32:14 2026
***************
*** 0 ****
--- 1,70 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sve_acle.h"
+ 
+ /*
+ ** mulh_s64_x_tied1:
+ **	smulh	z0\.d, z0\.d, z1\.d
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_s64_x_tied1, svint64_t,
+ 		z0 = svmulh_s64_x (p0, z0, z1),
+ 		z0 = svmulh_x (p0, z0, z1))
+ 
+ /*
+ ** mulh_s64_x_tied2:
+ **	smulh	z0\.d, z1\.d, z0\.d
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_s64_x_tied2, svint64_t,
+ 		z0 = svmulh_s64_x (p0, z1, z0),
+ 		z0 = svmulh_x (p0, z1, z0))
+ 
+ /*
+ ** mulh_s64_x_untied:
+ **	smulh	z0\.d, z1\.d, z2\.d
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_s64_x_untied, svint64_t,
+ 		z0 = svmulh_s64_x (p0, z1, z2),
+ 		z0 = svmulh_x (p0, z1, z2))
+ 
+ /*
+ ** mulh_x0_s64_x_tied1:
+ **	mov	(z[0-9]+\.d), x0
+ **	smulh	z0\.d, z0\.d, \1
+ **	ret
+ */
+ TEST_UNIFORM_ZX (mulh_x0_s64_x_tied1, svint64_t, int64_t,
+ 		 z0 = svmulh_n_s64_x (p0, z0, x0),
+ 		 z0 = svmulh_x (p0, z0, x0))
+ 
+ /*
+ ** mulh_x0_s64_x_untied:
+ **	mov	z0\.d, x0
+ **	smulh	z0\.d, z1\.d, z0\.d
+ **	ret
+ */
+ TEST_UNIFORM_ZX (mulh_x0_s64_x_untied, svint64_t, int64_t,
+ 		 z0 = svmulh_n_s64_x (p0, z1, x0),
+ 		 z0 = svmulh_x (p0, z1, x0))
+ 
+ /*
+ ** mulh_11_s64_x_tied1:
+ **	mov	(z[0-9]+\.d), #11
+ **	smulh	z0\.d, z0\.d, \1
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_11_s64_x_tied1, svint64_t,
+ 		z0 = svmulh_n_s64_x (p0, z0, 11),
+ 		z0 = svmulh_x (p0, z0, 11))
+ 
+ /*
+ ** mulh_11_s64_x_untied:
+ **	mov	z0\.d, #11
+ **	smulh	z0\.d, z1\.d, z0\.d
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_11_s64_x_untied, svint64_t,
+ 		z0 = svmulh_n_s64_x (p0, z1, 11),
+ 		z0 = svmulh_x (p0, z1, 11))
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_s8.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_s8.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_s8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_s8.c	Sun Jul  5 22:32:14 2026
***************
*** 0 ****
--- 1,70 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sve_acle.h"
+ 
+ /*
+ ** mulh_s8_x_tied1:
+ **	smulh	z0\.b, z0\.b, z1\.b
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_s8_x_tied1, svint8_t,
+ 		z0 = svmulh_s8_x (p0, z0, z1),
+ 		z0 = svmulh_x (p0, z0, z1))
+ 
+ /*
+ ** mulh_s8_x_tied2:
+ **	smulh	z0\.b, z1\.b, z0\.b
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_s8_x_tied2, svint8_t,
+ 		z0 = svmulh_s8_x (p0, z1, z0),
+ 		z0 = svmulh_x (p0, z1, z0))
+ 
+ /*
+ ** mulh_s8_x_untied:
+ **	smulh	z0\.b, z1\.b, z2\.b
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_s8_x_untied, svint8_t,
+ 		z0 = svmulh_s8_x (p0, z1, z2),
+ 		z0 = svmulh_x (p0, z1, z2))
+ 
+ /*
+ ** mulh_w0_s8_x_tied1:
+ **	mov	(z[0-9]+\.b), w0
+ **	smulh	z0\.b, z0\.b, \1
+ **	ret
+ */
+ TEST_UNIFORM_ZX (mulh_w0_s8_x_tied1, svint8_t, int8_t,
+ 		 z0 = svmulh_n_s8_x (p0, z0, x0),
+ 		 z0 = svmulh_x (p0, z0, x0))
+ 
+ /*
+ ** mulh_w0_s8_x_untied:
+ **	mov	z0\.b, w0
+ **	smulh	z0\.b, z1\.b, z0\.b
+ **	ret
+ */
+ TEST_UNIFORM_ZX (mulh_w0_s8_x_untied, svint8_t, int8_t,
+ 		 z0 = svmulh_n_s8_x (p0, z1, x0),
+ 		 z0 = svmulh_x (p0, z1, x0))
+ 
+ /*
+ ** mulh_11_s8_x_tied1:
+ **	mov	(z[0-9]+\.b), #11
+ **	smulh	z0\.b, z0\.b, \1
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_11_s8_x_tied1, svint8_t,
+ 		z0 = svmulh_n_s8_x (p0, z0, 11),
+ 		z0 = svmulh_x (p0, z0, 11))
+ 
+ /*
+ ** mulh_11_s8_x_untied:
+ **	mov	z0\.b, #11
+ **	smulh	z0\.b, z1\.b, z0\.b
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_11_s8_x_untied, svint8_t,
+ 		z0 = svmulh_n_s8_x (p0, z1, 11),
+ 		z0 = svmulh_x (p0, z1, 11))
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_u16.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_u16.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_u16.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_u16.c	Sun Jul  5 22:32:14 2026
***************
*** 0 ****
--- 1,70 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sve_acle.h"
+ 
+ /*
+ ** mulh_u16_x_tied1:
+ **	umulh	z0\.h, z0\.h, z1\.h
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_u16_x_tied1, svuint16_t,
+ 		z0 = svmulh_u16_x (p0, z0, z1),
+ 		z0 = svmulh_x (p0, z0, z1))
+ 
+ /*
+ ** mulh_u16_x_tied2:
+ **	umulh	z0\.h, z1\.h, z0\.h
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_u16_x_tied2, svuint16_t,
+ 		z0 = svmulh_u16_x (p0, z1, z0),
+ 		z0 = svmulh_x (p0, z1, z0))
+ 
+ /*
+ ** mulh_u16_x_untied:
+ **	umulh	z0\.h, z1\.h, z2\.h
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_u16_x_untied, svuint16_t,
+ 		z0 = svmulh_u16_x (p0, z1, z2),
+ 		z0 = svmulh_x (p0, z1, z2))
+ 
+ /*
+ ** mulh_w0_u16_x_tied1:
+ **	mov	(z[0-9]+\.h), w0
+ **	umulh	z0\.h, z0\.h, \1
+ **	ret
+ */
+ TEST_UNIFORM_ZX (mulh_w0_u16_x_tied1, svuint16_t, uint16_t,
+ 		 z0 = svmulh_n_u16_x (p0, z0, x0),
+ 		 z0 = svmulh_x (p0, z0, x0))
+ 
+ /*
+ ** mulh_w0_u16_x_untied:
+ **	mov	z0\.h, w0
+ **	umulh	z0\.h, z1\.h, z0\.h
+ **	ret
+ */
+ TEST_UNIFORM_ZX (mulh_w0_u16_x_untied, svuint16_t, uint16_t,
+ 		 z0 = svmulh_n_u16_x (p0, z1, x0),
+ 		 z0 = svmulh_x (p0, z1, x0))
+ 
+ /*
+ ** mulh_11_u16_x_tied1:
+ **	mov	(z[0-9]+\.h), #11
+ **	umulh	z0\.h, z0\.h, \1
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_11_u16_x_tied1, svuint16_t,
+ 		z0 = svmulh_n_u16_x (p0, z0, 11),
+ 		z0 = svmulh_x (p0, z0, 11))
+ 
+ /*
+ ** mulh_11_u16_x_untied:
+ **	mov	z0\.h, #11
+ **	umulh	z0\.h, z1\.h, z0\.h
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_11_u16_x_untied, svuint16_t,
+ 		z0 = svmulh_n_u16_x (p0, z1, 11),
+ 		z0 = svmulh_x (p0, z1, 11))
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_u32.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_u32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_u32.c	Sun Jul  5 22:32:14 2026
***************
*** 0 ****
--- 1,70 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sve_acle.h"
+ 
+ /*
+ ** mulh_u32_x_tied1:
+ **	umulh	z0\.s, z0\.s, z1\.s
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_u32_x_tied1, svuint32_t,
+ 		z0 = svmulh_u32_x (p0, z0, z1),
+ 		z0 = svmulh_x (p0, z0, z1))
+ 
+ /*
+ ** mulh_u32_x_tied2:
+ **	umulh	z0\.s, z1\.s, z0\.s
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_u32_x_tied2, svuint32_t,
+ 		z0 = svmulh_u32_x (p0, z1, z0),
+ 		z0 = svmulh_x (p0, z1, z0))
+ 
+ /*
+ ** mulh_u32_x_untied:
+ **	umulh	z0\.s, z1\.s, z2\.s
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_u32_x_untied, svuint32_t,
+ 		z0 = svmulh_u32_x (p0, z1, z2),
+ 		z0 = svmulh_x (p0, z1, z2))
+ 
+ /*
+ ** mulh_w0_u32_x_tied1:
+ **	mov	(z[0-9]+\.s), w0
+ **	umulh	z0\.s, z0\.s, \1
+ **	ret
+ */
+ TEST_UNIFORM_ZX (mulh_w0_u32_x_tied1, svuint32_t, uint32_t,
+ 		 z0 = svmulh_n_u32_x (p0, z0, x0),
+ 		 z0 = svmulh_x (p0, z0, x0))
+ 
+ /*
+ ** mulh_w0_u32_x_untied:
+ **	mov	z0\.s, w0
+ **	umulh	z0\.s, z1\.s, z0\.s
+ **	ret
+ */
+ TEST_UNIFORM_ZX (mulh_w0_u32_x_untied, svuint32_t, uint32_t,
+ 		 z0 = svmulh_n_u32_x (p0, z1, x0),
+ 		 z0 = svmulh_x (p0, z1, x0))
+ 
+ /*
+ ** mulh_11_u32_x_tied1:
+ **	mov	(z[0-9]+\.s), #11
+ **	umulh	z0\.s, z0\.s, \1
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_11_u32_x_tied1, svuint32_t,
+ 		z0 = svmulh_n_u32_x (p0, z0, 11),
+ 		z0 = svmulh_x (p0, z0, 11))
+ 
+ /*
+ ** mulh_11_u32_x_untied:
+ **	mov	z0\.s, #11
+ **	umulh	z0\.s, z1\.s, z0\.s
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_11_u32_x_untied, svuint32_t,
+ 		z0 = svmulh_n_u32_x (p0, z1, 11),
+ 		z0 = svmulh_x (p0, z1, 11))
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_u64.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_u64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_u64.c	Sun Jul  5 22:32:14 2026
***************
*** 0 ****
--- 1,70 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sve_acle.h"
+ 
+ /*
+ ** mulh_u64_x_tied1:
+ **	umulh	z0\.d, z0\.d, z1\.d
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_u64_x_tied1, svuint64_t,
+ 		z0 = svmulh_u64_x (p0, z0, z1),
+ 		z0 = svmulh_x (p0, z0, z1))
+ 
+ /*
+ ** mulh_u64_x_tied2:
+ **	umulh	z0\.d, z1\.d, z0\.d
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_u64_x_tied2, svuint64_t,
+ 		z0 = svmulh_u64_x (p0, z1, z0),
+ 		z0 = svmulh_x (p0, z1, z0))
+ 
+ /*
+ ** mulh_u64_x_untied:
+ **	umulh	z0\.d, z1\.d, z2\.d
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_u64_x_untied, svuint64_t,
+ 		z0 = svmulh_u64_x (p0, z1, z2),
+ 		z0 = svmulh_x (p0, z1, z2))
+ 
+ /*
+ ** mulh_x0_u64_x_tied1:
+ **	mov	(z[0-9]+\.d), x0
+ **	umulh	z0\.d, z0\.d, \1
+ **	ret
+ */
+ TEST_UNIFORM_ZX (mulh_x0_u64_x_tied1, svuint64_t, uint64_t,
+ 		 z0 = svmulh_n_u64_x (p0, z0, x0),
+ 		 z0 = svmulh_x (p0, z0, x0))
+ 
+ /*
+ ** mulh_x0_u64_x_untied:
+ **	mov	z0\.d, x0
+ **	umulh	z0\.d, z1\.d, z0\.d
+ **	ret
+ */
+ TEST_UNIFORM_ZX (mulh_x0_u64_x_untied, svuint64_t, uint64_t,
+ 		 z0 = svmulh_n_u64_x (p0, z1, x0),
+ 		 z0 = svmulh_x (p0, z1, x0))
+ 
+ /*
+ ** mulh_11_u64_x_tied1:
+ **	mov	(z[0-9]+\.d), #11
+ **	umulh	z0\.d, z0\.d, \1
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_11_u64_x_tied1, svuint64_t,
+ 		z0 = svmulh_n_u64_x (p0, z0, 11),
+ 		z0 = svmulh_x (p0, z0, 11))
+ 
+ /*
+ ** mulh_11_u64_x_untied:
+ **	mov	z0\.d, #11
+ **	umulh	z0\.d, z1\.d, z0\.d
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_11_u64_x_untied, svuint64_t,
+ 		z0 = svmulh_n_u64_x (p0, z1, 11),
+ 		z0 = svmulh_x (p0, z1, 11))
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_u8.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_u8.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_u8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mulh_u8.c	Sun Jul  5 22:32:14 2026
***************
*** 0 ****
--- 1,70 ----
+ /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+ 
+ #include "test_sve_acle.h"
+ 
+ /*
+ ** mulh_u8_x_tied1:
+ **	umulh	z0\.b, z0\.b, z1\.b
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_u8_x_tied1, svuint8_t,
+ 		z0 = svmulh_u8_x (p0, z0, z1),
+ 		z0 = svmulh_x (p0, z0, z1))
+ 
+ /*
+ ** mulh_u8_x_tied2:
+ **	umulh	z0\.b, z1\.b, z0\.b
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_u8_x_tied2, svuint8_t,
+ 		z0 = svmulh_u8_x (p0, z1, z0),
+ 		z0 = svmulh_x (p0, z1, z0))
+ 
+ /*
+ ** mulh_u8_x_untied:
+ **	umulh	z0\.b, z1\.b, z2\.b
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_u8_x_untied, svuint8_t,
+ 		z0 = svmulh_u8_x (p0, z1, z2),
+ 		z0 = svmulh_x (p0, z1, z2))
+ 
+ /*
+ ** mulh_w0_u8_x_tied1:
+ **	mov	(z[0-9]+\.b), w0
+ **	umulh	z0\.b, z0\.b, \1
+ **	ret
+ */
+ TEST_UNIFORM_ZX (mulh_w0_u8_x_tied1, svuint8_t, uint8_t,
+ 		 z0 = svmulh_n_u8_x (p0, z0, x0),
+ 		 z0 = svmulh_x (p0, z0, x0))
+ 
+ /*
+ ** mulh_w0_u8_x_untied:
+ **	mov	z0\.b, w0
+ **	umulh	z0\.b, z1\.b, z0\.b
+ **	ret
+ */
+ TEST_UNIFORM_ZX (mulh_w0_u8_x_untied, svuint8_t, uint8_t,
+ 		 z0 = svmulh_n_u8_x (p0, z1, x0),
+ 		 z0 = svmulh_x (p0, z1, x0))
+ 
+ /*
+ ** mulh_11_u8_x_tied1:
+ **	mov	(z[0-9]+\.b), #11
+ **	umulh	z0\.b, z0\.b, \1
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_11_u8_x_tied1, svuint8_t,
+ 		z0 = svmulh_n_u8_x (p0, z0, 11),
+ 		z0 = svmulh_x (p0, z0, 11))
+ 
+ /*
+ ** mulh_11_u8_x_untied:
+ **	mov	z0\.b, #11
+ **	umulh	z0\.b, z1\.b, z0\.b
+ **	ret
+ */
+ TEST_UNIFORM_Z (mulh_11_u8_x_untied, svuint8_t,
+ 		z0 = svmulh_n_u8_x (p0, z1, 11),
+ 		z0 = svmulh_x (p0, z1, 11))
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/target_attr_10.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/target_attr_10.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/target_attr_10.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/target_attr_10.c	Sun Jul  5 22:32:14 2026
*************** __attribute__ ((target ("+nosimd")))
*** 10,16 ****
  uint8x16_t
  foo (uint8x16_t a, uint8x16_t b, uint8x16_t c)
  {
!   return vbslq_u8 (a, b, c); /* { dg-message "called from here" } */
  }
- 
- /* { dg-error "inlining failed in call to 'always_inline'" "" { target *-*-* } 0 } */
--- 10,14 ----
  uint8x16_t
  foo (uint8x16_t a, uint8x16_t b, uint8x16_t c)
  {
!   return vbslq_u8 (a, b, c); /* { dg-error {ACLE function 'vbslq_u8' requires ISA extension 'simd'} } */
  }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/vmov_n_1.c gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/vmov_n_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/vmov_n_1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/aarch64/vmov_n_1.c	Sun Jul  5 22:32:14 2026
*************** extern void abort (void);
*** 65,71 ****
    for (i = 0; i < n; i++)						\
      {									\
        INHIB_OPTIMIZATION;						\
!       a = GET_ELEMENT (reg_len, data_len, data_type) (b, i);		\
        if ((a) != (c))							\
  	return 1;							\
      }									\
--- 65,71 ----
    for (i = 0; i < n; i++)						\
      {									\
        INHIB_OPTIMIZATION;						\
!       a = b[i];								\
        if ((a) != (c))							\
  	return 1;							\
      }									\
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/arm/long-calls-1.c gcc-17-20260705/gcc/testsuite/gcc.target/arm/long-calls-1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/arm/long-calls-1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/arm/long-calls-1.c	Sun Jul  5 22:32:14 2026
***************
*** 6,12 ****
  
  #define section(S) __attribute__((section(S)))
  #define weak __attribute__((weak))
! #define noinline __attribute__((noinline))
  #define long_call __attribute__((long_call))
  #define short_call __attribute__((short_call))
  
--- 6,12 ----
  
  #define section(S) __attribute__((section(S)))
  #define weak __attribute__((weak))
! #define noipa __attribute__((noipa))
  #define long_call __attribute__((long_call))
  #define short_call __attribute__((short_call))
  
***************
*** 15,26 ****
    const char *CALL_ATTRS call_##ID (void) { return ID () + 1; }
  
  #define EXTERN_CALL(ID, TARGET_ATTRS, CALL_ATTRS)			\
!   const char *TARGET_ATTRS noinline ID (void) { return #ID; }		\
    const char *CALL_ATTRS call_##ID (void) { return ID () + 1; }		\
    const char *CALL_ATTRS sibcall_##ID (void) { return ID (); }
  
  #define STATIC_CALL(ID, TARGET_ATTRS, CALL_ATTRS)			\
!   static const char *TARGET_ATTRS noinline ID (void) { return #ID; }	\
    const char *CALL_ATTRS call_##ID (void) { return ID () + 1; }		\
    const char *CALL_ATTRS sibcall_##ID (void) { return ID (); }
  
--- 15,26 ----
    const char *CALL_ATTRS call_##ID (void) { return ID () + 1; }
  
  #define EXTERN_CALL(ID, TARGET_ATTRS, CALL_ATTRS)			\
!   const char *TARGET_ATTRS noipa ID (void) { return #ID; }		\
    const char *CALL_ATTRS call_##ID (void) { return ID () + 1; }		\
    const char *CALL_ATTRS sibcall_##ID (void) { return ID (); }
  
  #define STATIC_CALL(ID, TARGET_ATTRS, CALL_ATTRS)			\
!   static const char *TARGET_ATTRS noipa ID (void) { return #ID; }	\
    const char *CALL_ATTRS call_##ID (void) { return ID () + 1; }		\
    const char *CALL_ATTRS sibcall_##ID (void) { return ID (); }
  
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/arm/long-calls-2.c gcc-17-20260705/gcc/testsuite/gcc.target/arm/long-calls-2.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/arm/long-calls-2.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/arm/long-calls-2.c	Sun Jul  5 22:32:14 2026
***************
*** 4,10 ****
  
  #define section(S) __attribute__((section(S)))
  #define weak __attribute__((weak))
! #define noinline __attribute__((noinline))
  #define long_call __attribute__((long_call))
  #define short_call __attribute__((short_call))
  
--- 4,10 ----
  
  #define section(S) __attribute__((section(S)))
  #define weak __attribute__((weak))
! #define noipa __attribute__((noipa))
  #define long_call __attribute__((long_call))
  #define short_call __attribute__((short_call))
  
***************
*** 13,24 ****
    const char *CALL_ATTRS call_##ID (void) { return ID () + 1; }
  
  #define EXTERN_CALL(ID, TARGET_ATTRS, CALL_ATTRS)			\
!   const char *TARGET_ATTRS noinline ID (void) { return #ID; }		\
    const char *CALL_ATTRS call_##ID (void) { return ID () + 1; }		\
    const char *CALL_ATTRS sibcall_##ID (void) { return ID (); }
  
  #define STATIC_CALL(ID, TARGET_ATTRS, CALL_ATTRS)			\
!   static const char *TARGET_ATTRS noinline ID (void) { return #ID; }	\
    const char *CALL_ATTRS call_##ID (void) { return ID () + 1; }		\
    const char *CALL_ATTRS sibcall_##ID (void) { return ID (); }
  
--- 13,24 ----
    const char *CALL_ATTRS call_##ID (void) { return ID () + 1; }
  
  #define EXTERN_CALL(ID, TARGET_ATTRS, CALL_ATTRS)			\
!   const char *TARGET_ATTRS noipa ID (void) { return #ID; }		\
    const char *CALL_ATTRS call_##ID (void) { return ID () + 1; }		\
    const char *CALL_ATTRS sibcall_##ID (void) { return ID (); }
  
  #define STATIC_CALL(ID, TARGET_ATTRS, CALL_ATTRS)			\
!   static const char *TARGET_ATTRS noipa ID (void) { return #ID; }	\
    const char *CALL_ATTRS call_##ID (void) { return ID () + 1; }		\
    const char *CALL_ATTRS sibcall_##ID (void) { return ID (); }
  
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/arm/long-calls-3.c gcc-17-20260705/gcc/testsuite/gcc.target/arm/long-calls-3.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/arm/long-calls-3.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/arm/long-calls-3.c	Sun Jul  5 22:32:14 2026
***************
*** 4,10 ****
  
  #define section(S) __attribute__((section(S)))
  #define weak __attribute__((weak))
! #define noinline __attribute__((noinline))
  #define long_call __attribute__((long_call))
  #define short_call __attribute__((short_call))
  
--- 4,10 ----
  
  #define section(S) __attribute__((section(S)))
  #define weak __attribute__((weak))
! #define noipa __attribute__((noipa))
  #define long_call __attribute__((long_call))
  #define short_call __attribute__((short_call))
  
***************
*** 13,24 ****
    const char *CALL_ATTRS call_##ID (void) { return ID () + 1; }
  
  #define EXTERN_CALL(ID, TARGET_ATTRS, CALL_ATTRS)			\
!   const char *TARGET_ATTRS noinline ID (void) { return #ID; }		\
    const char *CALL_ATTRS call_##ID (void) { return ID () + 1; }		\
    const char *CALL_ATTRS sibcall_##ID (void) { return ID (); }
  
  #define STATIC_CALL(ID, TARGET_ATTRS, CALL_ATTRS)			\
!   static const char *TARGET_ATTRS noinline ID (void) { return #ID; }	\
    const char *CALL_ATTRS call_##ID (void) { return ID () + 1; }		\
    const char *CALL_ATTRS sibcall_##ID (void) { return ID (); }
  
--- 13,24 ----
    const char *CALL_ATTRS call_##ID (void) { return ID () + 1; }
  
  #define EXTERN_CALL(ID, TARGET_ATTRS, CALL_ATTRS)			\
!   const char *TARGET_ATTRS noipa ID (void) { return #ID; }		\
    const char *CALL_ATTRS call_##ID (void) { return ID () + 1; }		\
    const char *CALL_ATTRS sibcall_##ID (void) { return ID (); }
  
  #define STATIC_CALL(ID, TARGET_ATTRS, CALL_ATTRS)			\
!   static const char *TARGET_ATTRS noipa ID (void) { return #ID; }	\
    const char *CALL_ATTRS call_##ID (void) { return ID () + 1; }		\
    const char *CALL_ATTRS sibcall_##ID (void) { return ID (); }
  
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/arm/long-calls-4.c gcc-17-20260705/gcc/testsuite/gcc.target/arm/long-calls-4.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/arm/long-calls-4.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/arm/long-calls-4.c	Sun Jul  5 22:32:14 2026
***************
*** 4,10 ****
  
  #define section(S) __attribute__((section(S)))
  #define weak __attribute__((weak))
! #define noinline __attribute__((noinline))
  #define long_call __attribute__((long_call))
  #define short_call __attribute__((short_call))
  
--- 4,10 ----
  
  #define section(S) __attribute__((section(S)))
  #define weak __attribute__((weak))
! #define noipa __attribute__((noipa))
  #define long_call __attribute__((long_call))
  #define short_call __attribute__((short_call))
  
***************
*** 13,24 ****
    const char *CALL_ATTRS call_##ID (void) { return ID () + 1; }
  
  #define EXTERN_CALL(ID, TARGET_ATTRS, CALL_ATTRS)			\
!   const char *TARGET_ATTRS noinline ID (void) { return #ID; }		\
    const char *CALL_ATTRS call_##ID (void) { return ID () + 1; }		\
    const char *CALL_ATTRS sibcall_##ID (void) { return ID (); }
  
  #define STATIC_CALL(ID, TARGET_ATTRS, CALL_ATTRS)			\
!   static const char *TARGET_ATTRS noinline ID (void) { return #ID; }	\
    const char *CALL_ATTRS call_##ID (void) { return ID () + 1; }		\
    const char *CALL_ATTRS sibcall_##ID (void) { return ID (); }
  
--- 13,24 ----
    const char *CALL_ATTRS call_##ID (void) { return ID () + 1; }
  
  #define EXTERN_CALL(ID, TARGET_ATTRS, CALL_ATTRS)			\
!   const char *TARGET_ATTRS noipa ID (void) { return #ID; }		\
    const char *CALL_ATTRS call_##ID (void) { return ID () + 1; }		\
    const char *CALL_ATTRS sibcall_##ID (void) { return ID (); }
  
  #define STATIC_CALL(ID, TARGET_ATTRS, CALL_ATTRS)			\
!   static const char *TARGET_ATTRS noipa ID (void) { return #ID; }	\
    const char *CALL_ATTRS call_##ID (void) { return ID () + 1; }		\
    const char *CALL_ATTRS sibcall_##ID (void) { return ID (); }
  
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/i386/amx-check.h gcc-17-20260705/gcc/testsuite/gcc.target/i386/amx-check.h
*** gcc-17-20260628/gcc/testsuite/gcc.target/i386/amx-check.h	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/i386/amx-check.h	Sun Jul  5 22:32:14 2026
*************** main ()
*** 257,265 ****
  #ifdef AMX_AVX512
        && __builtin_cpu_supports ("amx-avx512")
  #endif
- #ifdef AMX_TF32
-       && __builtin_cpu_supports ("amx-tf32")
- #endif
  #ifdef AMX_FP8
        && __builtin_cpu_supports ("amx-fp8")
  #endif
--- 257,262 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/i386/amxtf32-asmatt-1.c gcc-17-20260705/gcc/testsuite/gcc.target/i386/amxtf32-asmatt-1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/i386/amxtf32-asmatt-1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/i386/amxtf32-asmatt-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,13 ****
- /* { dg-do compile { target { ! ia32 } } } */
- /* { dg-options "-O2 -mamx-tf32" } */
- /* { dg-final { scan-assembler "tmmultf32ps\[ \\t]+\[^\n\]*%tmm3+\[^\n\]*%tmm2+\[^\n\]*%tmm1"  } } */
- #include <immintrin.h>
- 
- #define TMM1 1
- #define TMM2 2
- #define TMM3 3
- 
- void TEST()
- {
-   _tile_mmultf32ps (TMM1, TMM2, TMM3);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/i386/amxtf32-asmintel-1.c gcc-17-20260705/gcc/testsuite/gcc.target/i386/amxtf32-asmintel-1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/i386/amxtf32-asmintel-1.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/i386/amxtf32-asmintel-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,10 ****
- /* { dg-do compile { target { ! ia32 } } } */
- /* { dg-require-effective-target masm_intel } */
- /* { dg-options "-O2 -mamx-tf32 -masm=intel" } */
- /* { dg-final { scan-assembler "tmmultf32ps\[ \\t]+\[^\n%\]*tmm1+\[^\n%\]*tmm2+\[^\n%\]*tmm3"  } } */
- #include <immintrin.h>
- 
- void TEST()
- {
-   _tile_mmultf32ps (1, 2, 3);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/i386/amxtf32-mmultf32ps-2.c gcc-17-20260705/gcc/testsuite/gcc.target/i386/amxtf32-mmultf32ps-2.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/i386/amxtf32-mmultf32ps-2.c	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/i386/amxtf32-mmultf32ps-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,48 ****
- /* { dg-do run { target { ! ia32 } } } */
- /* { dg-require-effective-target amx_tf32 } */
- /* { dg-options "-O2 -mamx-tf32" } */
- #define AMX_TF32
- #define DO_TEST test_amx_tf32_mmultf32ps
- void test_amx_tf32_mmultf32ps();
- #include "amx-helper.h"
- 
- void calc_matrix_mmultf32ps (__tile *dst, __tile *src1, __tile *src2)
- {
-   float *src1_buf = (float *) src1->buf;
-   float *src2_buf = (float *) src2->buf;
-   float *dst_buf = (float *) dst->buf;
- 
-   int M = src1->rows;
-   int K = src1->colsb / 4;
-   int N = src2->colsb / 4;
-   int m, n, k;
- 
-   for (m = 0; m < M; m++)
-     for (k = 0; k < K; k++)
-       for (n = 0; n < N; n++)
- 	dst_buf[m * N + n] +=
- 	zero_lower_mantissa_bits_fp32 (silence_snan_fp32 (src1_buf[m * K + k])) *
- 	zero_lower_mantissa_bits_fp32 (silence_snan_fp32 (src2_buf[k * N + n]));
- }
- 
- void test_amx_tf32_mmultf32ps ()
- {
-   __tilecfg_u cfg;
-   __tile dst, dst_ref, src1, src2;
-   uint8_t tmp_dst_buf[1024];
- 
-   init_fp32_max_tile_buffer (tmp_dst_buf);
- 
-   init_tile_config (&cfg);
-   init_tile_reg_and_src_with_buffer (1, dst, tmp_dst_buf);
-   init_tile_reg_and_src_with_buffer (2, src1, tmp_dst_buf);
-   init_tile_reg_and_src_with_buffer (3, src2, tmp_dst_buf);
- 
-   calc_matrix_mmultf32ps (&dst, &src1, &src2);
- 
-   _tile_mmultf32ps (1, 2, 3);
-   _tile_stored (1, dst_ref.buf, _STRIDE);
- 
-   if (!check_tile_register (&dst_ref, &dst))
-     abort ();
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/i386/avx2-vpblendd128-3.c gcc-17-20260705/gcc/testsuite/gcc.target/i386/avx2-vpblendd128-3.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/i386/avx2-vpblendd128-3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/i386/avx2-vpblendd128-3.c	Sun Jul  5 22:32:14 2026
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mavx2 -O2" } */
+ 
+ typedef unsigned int v4si __attribute__((vector_size(16)));
+ 
+ v4si foo(v4si vec, int val) {
+     vec[0] = val;
+     vec[2] = val;
+     return vec;
+ }
+ 
+ v4si bar(v4si vec, int val) {
+     vec[0] = val;
+     vec[1] = val;
+     vec[2] = val;
+     vec[3] = val;
+     return vec;
+ }
+ 
+ /* { dg-final { scan-assembler-times "vpbroadcastd" 2 } } */
+ /* { dg-final { scan-assembler-times "vpblendd\[ \\t\]+" 1 } } */
+ /* { dg-final { scan-assembler-not "vpinsrd" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/i386/bt-cmov-1.c gcc-17-20260705/gcc/testsuite/gcc.target/i386/bt-cmov-1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/i386/bt-cmov-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/i386/bt-cmov-1.c	Sun Jul  5 22:32:14 2026
***************
*** 0 ****
--- 1,33 ----
+ /* PR target/125907 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64 -mtune=generic" } */
+ 
+ /* Verify that "(a & (1 << b)) ? c : imm" and the equivalent
+    "((a >> b) & 1) ? c : imm" forms use bt + cmov even when one of the
+    cmov arms is an immediate.  The immediate arm is materialized into a
+    register by the *cmov_bt<mode> splitter.  */
+ 
+ unsigned f0 (unsigned a, unsigned b, unsigned c)
+ {
+   return (a & (1 << b)) ? c : 2;
+ }
+ 
+ unsigned f1 (unsigned a, unsigned b, unsigned c)
+ {
+   return ((a >> b) & 1) ? c : 2;
+ }
+ 
+ unsigned f2 (unsigned a, unsigned b, unsigned c)
+ {
+   return (a & (1 << b)) ? 2 : c;
+ }
+ 
+ unsigned f3 (unsigned a, unsigned b, unsigned c)
+ {
+   return ((a >> b) & 1) ? 2 : c;
+ }
+ 
+ /* { dg-final { scan-assembler-times {btl[ \t]+} 4 } } */
+ /* { dg-final { scan-assembler-times {cmov(l\.)?n?c} 4 } } */
+ /* { dg-final { scan-assembler-not "sal" } } */
+ /* { dg-final { scan-assembler-not "shr" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memmove-16.c gcc-17-20260705/gcc/testsuite/gcc.target/i386/builtin-memmove-16.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memmove-16.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/i386/builtin-memmove-16.c	Sun Jul  5 22:32:14 2026
***************
*** 0 ****
--- 1,42 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx -msse2 -mtune=generic -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memmove:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$2, %rdx
+ **	jbe	.L7
+ **.L1:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	cmpl	\$2, %edx
+ **	jnb	.L8
+ **	cmpl	\$1, %edx
+ **	jb	.L1
+ **	movzbl	\(%rsi\), %eax
+ **	movb	%al, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L8:
+ **	movl	%edx, %edx
+ **	movzwl	\(%rsi\), %ecx
+ **	movzwl	-2\(%rsi,%rdx\), %eax
+ **	movw	%cx, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ void
+ gcc_memmove (void *a, void *b, __SIZE_TYPE__ n)
+ {
+   if (n < 3)
+     __builtin_memmove (a, b, n);
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memmove-17.c gcc-17-20260705/gcc/testsuite/gcc.target/i386/builtin-memmove-17.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memmove-17.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/i386/builtin-memmove-17.c	Sun Jul  5 22:32:14 2026
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx -msse2 -mtune=generic -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memmove:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$1, %rdx
+ **	jbe	.L7
+ **.L1:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	cmpl	\$1, %edx
+ **	jb	.L1
+ **	movzbl	\(%rsi\), %eax
+ **	movb	%al, \(%rdi\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ void
+ gcc_memmove (void *a, void *b, __SIZE_TYPE__ n)
+ {
+   if (n < 2)
+     __builtin_memmove (a, b, n);
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memmove-18a.c gcc-17-20260705/gcc/testsuite/gcc.target/i386/builtin-memmove-18a.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memmove-18a.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/i386/builtin-memmove-18a.c	Sun Jul  5 22:32:14 2026
***************
*** 0 ****
--- 1,28 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx -msse2 -mtune=generic" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memmove:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$1, %rdx
+ **	je	.L4
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L4:
+ **	movzbl	\(%rsi\), %eax
+ **	movb	%al, \(%rdi\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ void
+ gcc_memmove (void *a, void *b, __SIZE_TYPE__ n)
+ {
+   if (n >= 1 && n <= 1)
+     __builtin_memmove (a, b, n);
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memmove-18b.c gcc-17-20260705/gcc/testsuite/gcc.target/i386/builtin-memmove-18b.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memmove-18b.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/i386/builtin-memmove-18b.c	Sun Jul  5 22:32:14 2026
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O0 -mno-avx -msse2 -mtune=generic" } */
+ 
+ #include "builtin-memmove-18a.c"
+ 
+ /* { dg-final { scan-assembler "call	_?memmove" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/i386/funcspec-56.inc gcc-17-20260705/gcc/testsuite/gcc.target/i386/funcspec-56.inc
*** gcc-17-20260628/gcc/testsuite/gcc.target/i386/funcspec-56.inc	Sun Jun 28 22:32:14 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/i386/funcspec-56.inc	Sun Jul  5 22:32:14 2026
*************** extern void test_sm4 (void)
*** 89,95 ****
  extern void test_user_msr (void)		__attribute__((__target__("usermsr")));
  extern void test_avx10_2 (void)			__attribute__((__target__("avx10.2")));
  extern void test_amx_avx512 (void)		__attribute__((__target__("amx-avx512")));
- extern void test_amx_tf32 (void)		__attribute__((__target__("amx-tf32")));
  extern void test_amx_fp8 (void)                 __attribute__((__target__("amx-fp8")));
  extern void test_movrs (void)			__attribute__((__target__("movrs")));
  extern void test_amx_movrs (void)		__attribute__((__target__("amx-movrs")));
--- 89,94 ----
*************** extern void test_no_sm4 (void)
*** 183,189 ****
  extern void test_no_user_msr (void)		__attribute__((__target__("no-usermsr")));
  extern void test_no_avx10_2 (void)		__attribute__((__target__("no-avx10.2")));
  extern void test_no_amx_avx512 (void)		__attribute__((__target__("no-amx-avx512")));
- extern void test_no_amx_tf32 (void)		__attribute__((__target__("no-amx-tf32")));
  extern void test_no_amx_fp8 (void)              __attribute__((__target__("no-amx-fp8")));
  extern void test_no_movrs (void)		__attribute__((__target__("no-movrs")));
  extern void test_no_amx_movrs (void)		__attribute__((__target__("no-amx-movrs")));
--- 182,187 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr94871.c gcc-17-20260705/gcc/testsuite/gcc.target/i386/pr94871.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr94871.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/i386/pr94871.c	Sun Jul  5 22:32:14 2026
***************
*** 0 ****
--- 1,26 ----
+ /* PR target/94871 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mavx2 -march=skylake" } */
+ 
+ typedef double v2df __attribute__((vector_size(16)));
+ typedef long long v2di __attribute__((vector_size(16)));
+ typedef char v16qi __attribute__((vector_size(16)));
+ 
+ v2df p, q;
+ v2di out;
+ 
+ void foo()
+ {
+   signed char a = 0xff;
+   v2di tmp = (v2di)(v16qi){a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a};
+   out = ((v2di)__builtin_ia32_cmpeqpd(p, q) ^ tmp);
+ }
+ 
+ void bar()
+ {
+   signed char a = 0xff;
+   v2di tmp = (v2di)(v16qi){a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a};
+   out = ((v2di)__builtin_ia32_cmpneqpd(p, q) ^ tmp);
+ }
+ 
+ /* { dg-final { scan-assembler-not "xor" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/i386/sse-12.c gcc-17-20260705/gcc/testsuite/gcc.target/i386/sse-12.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/i386/sse-12.c	Sun Jun 28 22:32:15 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/i386/sse-12.c	Sun Jul  5 22:32:15 2026
***************
*** 3,9 ****
     popcntintrin.h gfniintrin.h and mm_malloc.h are usable
     with -O -std=c89 -pedantic-errors.  */
  /* { dg-do compile } */
! /* { dg-options "-O -std=c89 -pedantic-errors -march=k8 -msse4a -m3dnow -mavx -mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr -mxsaveopt -msha -mxsavec -mxsaves -mclflushopt -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mpconfig -mwbnoinvd -menqcmd -mavx512vp2intersect -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavxifma -mavxvnniint8 -mavxneconvert -mamx-fp16 -mraoint -mamx-complex -mavxvnniint16 -msm3 -msha512 -msm4 -mavx10.2 -mamx-avx512 -mamx-tf32 -mamx-fp8 -mmovrs -mamx-movrs" } */
  
  #include <x86intrin.h>
  
--- 3,9 ----
     popcntintrin.h gfniintrin.h and mm_malloc.h are usable
     with -O -std=c89 -pedantic-errors.  */
  /* { dg-do compile } */
! /* { dg-options "-O -std=c89 -pedantic-errors -march=k8 -msse4a -m3dnow -mavx -mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr -mxsaveopt -msha -mxsavec -mxsaves -mclflushopt -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mpconfig -mwbnoinvd -menqcmd -mavx512vp2intersect -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavxifma -mavxvnniint8 -mavxneconvert -mamx-fp16 -mraoint -mamx-complex -mavxvnniint16 -msm3 -msha512 -msm4 -mavx10.2 -mamx-avx512 -mamx-fp8 -mmovrs -mamx-movrs" } */
  
  #include <x86intrin.h>
  
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/i386/sse-13.c gcc-17-20260705/gcc/testsuite/gcc.target/i386/sse-13.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/i386/sse-13.c	Sun Jun 28 22:32:15 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/i386/sse-13.c	Sun Jul  5 22:32:15 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -Werror-implicit-function-declaration -march=k8 -msse4a -m3dnow -mavx -mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr -mxsaveopt -msha -mxsavec -mxsaves -mclflushopt -mavx512vp2intersect -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mpconfig -mwbnoinvd -menqcmd -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavxifma -mavxvnniint8 -mavxneconvert -mcmpccxadd -mamx-fp16 -mprefetchi -mraoint -mamx-complex -mavxvnniint16 -msm3 -msha512 -msm4 -mavx10.2 -mamx-avx512 -mamx-tf32 -mamx-fp8 -mmovrs -mamx-movrs" } */
  /* { dg-add-options bind_pic_locally } */
  
  #include <mm_malloc.h>
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -Werror-implicit-function-declaration -march=k8 -msse4a -m3dnow -mavx -mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr -mxsaveopt -msha -mxsavec -mxsaves -mclflushopt -mavx512vp2intersect -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mpconfig -mwbnoinvd -menqcmd -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavxifma -mavxvnniint8 -mavxneconvert -mcmpccxadd -mamx-fp16 -mprefetchi -mraoint -mamx-complex -mavxvnniint16 -msm3 -msha512 -msm4 -mavx10.2 -mamx-avx512 -mamx-fp8 -mmovrs -mamx-movrs" } */
  /* { dg-add-options bind_pic_locally } */
  
  #include <mm_malloc.h>
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/i386/sse-14.c gcc-17-20260705/gcc/testsuite/gcc.target/i386/sse-14.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/i386/sse-14.c	Sun Jun 28 22:32:15 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/i386/sse-14.c	Sun Jul  5 22:32:15 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O0 -Werror-implicit-function-declaration -march=k8 -msse4a -m3dnow -mavx -mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr -mxsaveopt -msha -mxsavec -mxsaves -mclflushopt -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mpconfig -mwbnoinvd -menqcmd -mavx512vp2intersect -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavxifma -mavxvnniint8 -mavxneconvert -mamx-fp16 -mraoint -mamx-complex -mavxvnniint16 -msm3 -msha512 -msm4 -mavx10.2 -mamx-avx512 -mamx-tf32 -mamx-fp8 -mmovrs -mamx-movrs" } */
  /* { dg-add-options bind_pic_locally } */
  
  #include <mm_malloc.h>
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O0 -Werror-implicit-function-declaration -march=k8 -msse4a -m3dnow -mavx -mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr -mxsaveopt -msha -mxsavec -mxsaves -mclflushopt -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mpconfig -mwbnoinvd -menqcmd -mavx512vp2intersect -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavxifma -mavxvnniint8 -mavxneconvert -mamx-fp16 -mraoint -mamx-complex -mavxvnniint16 -msm3 -msha512 -msm4 -mavx10.2 -mamx-avx512 -mamx-fp8 -mmovrs -mamx-movrs" } */
  /* { dg-add-options bind_pic_locally } */
  
  #include <mm_malloc.h>
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/i386/sse-22.c gcc-17-20260705/gcc/testsuite/gcc.target/i386/sse-22.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/i386/sse-22.c	Sun Jun 28 22:32:15 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/i386/sse-22.c	Sun Jul  5 22:32:15 2026
***************
*** 103,109 ****
  
  
  #ifndef DIFFERENT_PRAGMAS
! #pragma GCC target ("sse4a,3dnow,avx,avx2,fma4,xop,aes,pclmul,popcnt,abm,lzcnt,bmi,bmi2,tbm,lwp,fsgsbase,rdrnd,f16c,rtm,rdseed,prfchw,adx,fxsr,xsaveopt,sha,gfni,avx512vp2intersect,serialize,tsxldtrk,amx-tile,amx-int8,amx-bf16,kl,widekl,avxvnni,avxifma,avxvnniint8,avxneconvert,amx-fp16,raoint,amx-complex,avxvnniint16,sm3,sha512,sm4,avx10.2,amx-avx512,amx-tf32,amx-fp8,movrs,amx-movrs")
  #endif
  
  /* Following intrinsics require immediate arguments.  They
--- 103,109 ----
  
  
  #ifndef DIFFERENT_PRAGMAS
! #pragma GCC target ("sse4a,3dnow,avx,avx2,fma4,xop,aes,pclmul,popcnt,abm,lzcnt,bmi,bmi2,tbm,lwp,fsgsbase,rdrnd,f16c,rtm,rdseed,prfchw,adx,fxsr,xsaveopt,sha,gfni,avx512vp2intersect,serialize,tsxldtrk,amx-tile,amx-int8,amx-bf16,kl,widekl,avxvnni,avxifma,avxvnniint8,avxneconvert,amx-fp16,raoint,amx-complex,avxvnniint16,sm3,sha512,sm4,avx10.2,amx-avx512,amx-fp8,movrs,amx-movrs")
  #endif
  
  /* Following intrinsics require immediate arguments.  They
*************** test_4 (_mm_cmpestrz, int, __m128i, int,
*** 220,226 ****
  
  /* immintrin.h (AVX/AVX2/RDRND/FSGSBASE/F16C/RTM/AVX512F/SHA) */
  #ifdef DIFFERENT_PRAGMAS
! #pragma GCC target ("avx,avx2,rdrnd,fsgsbase,f16c,rtm,sha,gfni,avx512vp2intersect,serialize,tsxldtrk,amx-tile,amx-int8,amx-bf16,kl,widekl,avxvnni,avxifma,avxvnniint8,avxneconvert,amx-fp16,raoint,amx-complex,avxvnniint16,sm3,sha512,sm4,avx10.2,amx-avx512,amx-tf32,amx-fp8,movrs,amx-movrs")
  #endif
  #include <immintrin.h>
  test_1 (_cvtss_sh, unsigned short, float, 1)
--- 220,226 ----
  
  /* immintrin.h (AVX/AVX2/RDRND/FSGSBASE/F16C/RTM/AVX512F/SHA) */
  #ifdef DIFFERENT_PRAGMAS
! #pragma GCC target ("avx,avx2,rdrnd,fsgsbase,f16c,rtm,sha,gfni,avx512vp2intersect,serialize,tsxldtrk,amx-tile,amx-int8,amx-bf16,kl,widekl,avxvnni,avxifma,avxvnniint8,avxneconvert,amx-fp16,raoint,amx-complex,avxvnniint16,sm3,sha512,sm4,avx10.2,amx-avx512,amx-fp8,movrs,amx-movrs")
  #endif
  #include <immintrin.h>
  test_1 (_cvtss_sh, unsigned short, float, 1)
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/i386/sse-23.c gcc-17-20260705/gcc/testsuite/gcc.target/i386/sse-23.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/i386/sse-23.c	Sun Jun 28 22:32:15 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/i386/sse-23.c	Sun Jul  5 22:32:15 2026
***************
*** 895,900 ****
  #define __builtin_ia32_minmaxsh_mask_round(A, B, C, D, E, F) __builtin_ia32_minmaxsh_mask_round (A, B, 100, D, E, 4)
  #define __builtin_ia32_minmaxss_mask_round(A, B, C, D, E, F) __builtin_ia32_minmaxss_mask_round (A, B, 100, D, E, 4)
  
! #pragma GCC target ("sse4a,3dnow,avx,avx2,fma4,xop,aes,pclmul,popcnt,abm,lzcnt,bmi,bmi2,tbm,lwp,fsgsbase,rdrnd,f16c,fma,rtm,rdseed,prfchw,adx,fxsr,xsaveopt,sha,xsavec,xsaves,clflushopt,clwb,mwaitx,clzero,pku,sgx,rdpid,gfni,vpclmulqdq,pconfig,wbnoinvd,enqcmd,avx512vp2intersect,serialize,tsxldtrk,amx-tile,amx-int8,amx-bf16,kl,widekl,avxvnni,avxifma,avxvnniint8,avxneconvert,cmpccxadd,amx-fp16,prefetchi,raoint,amx-complex,avxvnniint16,sm3,sha512,sm4,avx10.2,amx-avx512,amx-tf32,amx-fp8,movrs,amx-movrs")
  
  #include <x86intrin.h>
--- 895,900 ----
  #define __builtin_ia32_minmaxsh_mask_round(A, B, C, D, E, F) __builtin_ia32_minmaxsh_mask_round (A, B, 100, D, E, 4)
  #define __builtin_ia32_minmaxss_mask_round(A, B, C, D, E, F) __builtin_ia32_minmaxss_mask_round (A, B, 100, D, E, 4)
  
! #pragma GCC target ("sse4a,3dnow,avx,avx2,fma4,xop,aes,pclmul,popcnt,abm,lzcnt,bmi,bmi2,tbm,lwp,fsgsbase,rdrnd,f16c,fma,rtm,rdseed,prfchw,adx,fxsr,xsaveopt,sha,xsavec,xsaves,clflushopt,clwb,mwaitx,clzero,pku,sgx,rdpid,gfni,vpclmulqdq,pconfig,wbnoinvd,enqcmd,avx512vp2intersect,serialize,tsxldtrk,amx-tile,amx-int8,amx-bf16,kl,widekl,avxvnni,avxifma,avxvnniint8,avxneconvert,cmpccxadd,amx-fp16,prefetchi,raoint,amx-complex,avxvnniint16,sm3,sha512,sm4,avx10.2,amx-avx512,amx-fp8,movrs,amx-movrs")
  
  #include <x86intrin.h>
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/i386/sse2-stv-6.c gcc-17-20260705/gcc/testsuite/gcc.target/i386/sse2-stv-6.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/i386/sse2-stv-6.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/i386/sse2-stv-6.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile { target ia32 } } */
+ /* { dg-options "-m32 -O2 -msse2 -mno-stackrealign" } */
+ 
+ long long y,z;
+ unsigned int p;
+ 
+ void foo()
+ {
+     long long t = p;
+     t ^= y;
+     z = t;
+ }
+ 
+ /* { dg-final { scan-assembler-not "movl" } } */
+ /* { dg-final { scan-assembler-not "xorl" } } */
+ /* { dg-final { scan-assembler-not "punpckldq" } } */
+ 
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/loongarch/ssp-ilp32.c gcc-17-20260705/gcc/testsuite/gcc.target/loongarch/ssp-ilp32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/loongarch/ssp-ilp32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/loongarch/ssp-ilp32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-options "-march=la32v1.0 -mabi=ilp32s -fstack-protector-strong" } */
+ /* { dg-final { scan-assembler-not "ld\\\.d" } } */
+ /* { dg-final { scan-assembler-not "st\\\.d" } } */
+ 
+ void test()
+ {
+ 	int x;
+ 	asm("":"+m"(x));
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/loongarch/vector/lasx/dot-prod-mixed-signedness.c gcc-17-20260705/gcc/testsuite/gcc.target/loongarch/vector/lasx/dot-prod-mixed-signedness.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/loongarch/vector/lasx/dot-prod-mixed-signedness.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/loongarch/vector/lasx/dot-prod-mixed-signedness.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,63 ----
+ /* { dg-options "-O3 -mlasx -fno-unroll-loops -fdump-tree-optimized" } */
+ /* { dg-final { scan-tree-dump-times "DOT_PROD_EXPR" 1 "optimized" } } */
+ 
+ typedef unsigned int uint32_t;
+ typedef int int32_t;
+ typedef unsigned char uint8_t;
+ typedef char int8_t;
+ typedef uint32_t IndexType;
+ 
+ [[gnu::noipa]]
+ void transform(int32_t *__restrict__ output, const int8_t *weights,
+                const int32_t *biases, const uint8_t *input) {
+   for (IndexType i = 0; i < 0x10; ++i) {
+     const IndexType offset = i * 0x1000;
+ 
+     int32_t sum = biases[i];
+     for (IndexType j = 0; j < 0x1000; ++j) {
+       sum += weights[offset + j] * input[j];
+     }
+     output[i] = sum;
+   }
+ }
+ 
+ [[gnu::noipa]]
+ void transform_novec(int32_t *__restrict__ output,
+                      const int8_t *weights,
+                      const int32_t *biases,
+                      const uint8_t *input) {
+ #pragma GCC novector
+   for (IndexType i = 0; i < 0x10; ++i) {
+     const IndexType offset = i * 0x1000;
+ 
+     int32_t sum = biases[i];
+ #pragma GCC novector
+     for (IndexType j = 0; j < 0x1000; ++j) {
+       sum += weights[offset + j] * input[j];
+     }
+     output[i] = sum;
+   }
+ }
+ 
+ int8_t w[0x11000];
+ uint8_t in[0x1000];
+ int32_t out[0x10];
+ int32_t out_novec[0x10];
+ int32_t b[0x10];
+ 
+ int
+ main ()
+ {
+   for (unsigned i = 0; i < 0x11000; i++)
+     w[i] = (int8_t)(uint8_t)(i * i + 113 * i + 47);
+   for (unsigned i = 0x11000; i < 0x12000; i++)
+     in[i - 0x11000] = (uint8_t)(i * i + 113 * i + 47);
+   for (int i = 0; i < 0x10; i++)
+     b[i] = i;
+ 
+   transform (out, w, b, in);
+   transform_novec (out_novec, w, b, in);
+ 
+   if (__builtin_memcmp (out, out_novec, sizeof (out)))
+     __builtin_trap ();
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/mips/frame-barrier-1.c gcc-17-20260705/gcc/testsuite/gcc.target/mips/frame-barrier-1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/mips/frame-barrier-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/mips/frame-barrier-1.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=32 -march=mips32r2 -mno-abicalls -fno-pic -fdump-rtl-final" } */
+ 
+ extern void use (char *);
+ 
+ int
+ f (int n)
+ {
+   char * p = (char *) __builtin_alloca (n);
+ 
+   use (p);
+   return p[0];
+ }
+ 
+ /* { dg-final { scan-rtl-dump-times "UNSPEC_BLOCKAGE" 3 "final" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/mips/mxu-compile-no.c gcc-17-20260705/gcc/testsuite/gcc.target/mips/mxu-compile-no.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/mips/mxu-compile-no.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/mips/mxu-compile-no.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-mno-mxu" } */
+ 
+ int
+ main (void)
+ {
+   return 0;
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/mips/mxu-compile.c gcc-17-20260705/gcc/testsuite/gcc.target/mips/mxu-compile.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/mips/mxu-compile.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/mips/mxu-compile.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-mmxu" } */
+ 
+ int
+ main (void)
+ {
+   return 0;
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/mips/mxu-driver-no.c gcc-17-20260705/gcc/testsuite/gcc.target/mips/mxu-driver-no.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/mips/mxu-driver-no.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/mips/mxu-driver-no.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do assemble } */
+ /* { dg-additional-options "-mno-mxu -###" } */
+ 
+ int
+ main (void)
+ {
+   return 0;
+ }
+ 
+ /* { dg-message ".*/.*as .* -mno-mxu" "assembler options" { target *-*-* } 0 } */
+ /* { dg-purne-output ".*" } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/mips/mxu-driver.c gcc-17-20260705/gcc/testsuite/gcc.target/mips/mxu-driver.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/mips/mxu-driver.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/mips/mxu-driver.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do assemble } */
+ /* { dg-additional-options "-mmxu -###" } */
+ 
+ int
+ main (void)
+ {
+   return 0;
+ }
+ 
+ /* { dg-message ".*/.*as .* -mmxu" "assembler options" { target *-*-* } 0 } */
+ /* { dg-purne-output ".*" } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/powerpc/acmp-tst-32bit.c gcc-17-20260705/gcc/testsuite/gcc.target/powerpc/acmp-tst-32bit.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/powerpc/acmp-tst-32bit.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/powerpc/acmp-tst-32bit.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,61 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target ilp32 } */
+ 
+ /* { dg-options "-O2 -mdejagnu-cpu=power8" } */
+ 
+ bool
+ word_exchange_qi (signed char *ptr, signed char *expected, signed char *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_uqi (unsigned char *ptr, unsigned char *expected,
+                    unsigned char *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_hi (short *ptr, short *expected, short *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_shi (signed short *ptr, signed short *expected,
+                    signed short *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_uhi (unsigned short *ptr, unsigned short *expected,
+                    unsigned short *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_si (int *ptr, int *expected, int *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_ssi (signed int *ptr, signed int *expected, signed int *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_usi (unsigned int *ptr, unsigned int *expected,
+                    unsigned int *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ 
+ /* { dg-final { scan-assembler-times {\mlbarx +[0-9]+,[0-9]+,[0-9]+,1} 2 } } */
+ /* { dg-final { scan-assembler-times {\mlharx +[0-9]+,[0-9]+,[0-9]+,1} 3 } } */
+ /* { dg-final { scan-assembler-times {\mlwarx +[0-9]+,[0-9]+,[0-9]+,1} 3 } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/powerpc/acmp-tst-indexed.c gcc-17-20260705/gcc/testsuite/gcc.target/powerpc/acmp-tst-indexed.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/powerpc/acmp-tst-indexed.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/powerpc/acmp-tst-indexed.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,165 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target lp64 } */
+ 
+ // Need power8 for l<b,h,q>arx
+ /* { dg-options "-O2 -mdejagnu-cpu=power8" } */
+ 
+ typedef struct udt_1
+ {
+   char *a;
+ } udt_1t;
+ typedef struct udt_2
+ {
+   char a;
+   char b;
+ } udt_2t;
+ typedef struct udt_4
+ {
+   short a;
+   short b;
+ } udt_4t;
+ typedef struct udt_8
+ {
+   int a;
+   int b;
+ } udt_8t;
+ bool
+ word_exchange_nqi (char *ptr, char *expected, char *desired,
+ 		   unsigned long long n)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr+n, expected+n, desired+n, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_qi (signed char *ptr, signed char *expected, signed char *desired,
+ 		  unsigned long long n)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr+n, expected+n, desired+n, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_uqi (unsigned char *ptr, unsigned char *expected,
+                    unsigned char *desired, unsigned long long n)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr+n, expected+n, desired+n, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_hi (short *ptr, short *expected, short *desired,
+ 		  unsigned long long n)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr+n, expected+n, desired+n, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_shi (signed short *ptr, signed short *expected,
+                    signed short *desired, unsigned long long n)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr+n, expected+n, desired+n, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_uhi (unsigned short *ptr, unsigned short *expected,
+                    unsigned short *desired, unsigned long long n)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr+n, expected+n, desired+n, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_si (int *ptr, int *expected, int *desired, unsigned long long n)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr+n, expected+n, desired+n, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_ssi (signed int *ptr, signed int *expected, signed int *desired,
+ 		   unsigned long long n)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr+n, expected+n, desired+n, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_usi (unsigned int *ptr, unsigned int *expected,
+                    unsigned int *desired, unsigned long long n)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr+n, expected+n, desired+n, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_di (long long *ptr, long long *expected, long long *desired,
+ 		  unsigned long long n)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr+n, expected+n, desired+n, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_sdi (signed long long *ptr, signed long long *expected,
+                    signed long long *desired, unsigned long long n)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr+n, expected+n, desired+n, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_udi (unsigned long long *ptr, unsigned long long *expected,
+                    unsigned long long *desired, unsigned long long n)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr+n, expected+n, desired+n, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_f32 (float *ptr, float *expected, float *desired,
+ 		   unsigned long long n)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr+n, expected+n, desired+n, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_f64 (double *ptr, double *expected, double *desired,
+ 		   unsigned long long n)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr+n, expected+n, desired+n, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_udt_1 (udt_1t *ptr, udt_1t *expected, udt_1t *desired,
+ 		     unsigned long long n)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr+n, expected+n, desired+n, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_udt_2 (udt_2t *ptr, udt_2t *expected, udt_2t *desired,
+ 		     unsigned long long n)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr+n, expected+n, desired+n, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_udt_4 (udt_4t *ptr, udt_4t *expected, udt_4t *desired,
+ 		     unsigned long long n)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr+n, expected+n, desired+n, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_udt_8 (udt_8t *ptr, udt_8t *expected, udt_8t *desired,
+ 		     unsigned long long n)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr+n, expected+n, desired+n, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ 
+ /* Test if indexed mode addresses are used, r6 must be used which corresponds
+    to the argument n in all functions.  */
+ 
+ /* { dg-final { scan-assembler-times {\mlbarx +[0-9]+,[0-9]+,6,1} 3 } } */
+ /* { dg-final { scan-assembler-times {\mstbcx. +[0-9]+,[0-9]+,6} 3 } } */
+ 
+ /* { dg-final { scan-assembler-times {\mlharx +[0-9]+,[0-9]+,6,1} 4 } } */
+ /* { dg-final { scan-assembler-times {\msthcx. +[0-9]+,[0-9]+,6} 4 } } */
+ 
+ /* { dg-final { scan-assembler-times {\mlwarx +[0-9]+,[0-9]+,6,1} 5 } } */
+ /* { dg-final { scan-assembler-times {\mstwcx. +[0-9]+,[0-9]+,6} 5 } } */
+ 
+ /* { dg-final { scan-assembler-times {\mldarx +[0-9]+,[0-9]+,6,1} 6 } } */
+ /* { dg-final { scan-assembler-times {\mstdcx. +[0-9]+,[0-9]+,6} 6 } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/powerpc/acmp-tst.c gcc-17-20260705/gcc/testsuite/gcc.target/powerpc/acmp-tst.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/powerpc/acmp-tst.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/powerpc/acmp-tst.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,176 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target lp64 } */
+ 
+ // Need power8 for l<b,h,q>arx
+ /* { dg-options "-O2 -mdejagnu-cpu=power8" } */
+ 
+ typedef struct udt_1
+ {
+   char *a;
+ } udt_1t;
+ typedef struct udt_2
+ {
+   char a;
+   char b;
+ } udt_2t;
+ typedef struct udt_4
+ {
+   short a;
+   short b;
+ } udt_4t;
+ typedef struct udt_8
+ {
+   int a;
+   int b;
+ } udt_8t;
+ typedef struct udt_16
+ {
+   long long a;
+   long long b;
+ } udt_16t;
+ bool
+ word_exchange_nqi (char *ptr, char *expected, char *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_qi (signed char *ptr, signed char *expected, signed char *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_uqi (unsigned char *ptr, unsigned char *expected,
+                    unsigned char *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_hi (short *ptr, short *expected, short *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_shi (signed short *ptr, signed short *expected,
+                    signed short *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_uhi (unsigned short *ptr, unsigned short *expected,
+                    unsigned short *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_si (int *ptr, int *expected, int *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_ssi (signed int *ptr, signed int *expected, signed int *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_usi (unsigned int *ptr, unsigned int *expected,
+                    unsigned int *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_di (long long *ptr, long long *expected, long long *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_sdi (signed long long *ptr, signed long long *expected,
+                    signed long long *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_udi (unsigned long long *ptr, unsigned long long *expected,
+                    unsigned long long *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_sti (signed __int128 *ptr, signed __int128 *expected,
+                    signed __int128 *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_uti (unsigned __int128 *ptr, unsigned __int128 *expected,
+                    unsigned __int128 *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_f32 (float *ptr, float *expected, float *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_f64 (double *ptr, double *expected, double *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_f128 (__ieee128 *ptr, __ieee128 *expected, __ieee128 *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_udt_1 (udt_1t *ptr, udt_1t *expected, udt_1t *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_udt_2 (udt_2t *ptr, udt_2t *expected, udt_2t *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_udt_4 (udt_4t *ptr, udt_4t *expected, udt_4t *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_udt_8 (udt_8t *ptr, udt_8t *expected, udt_8t *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ bool
+ word_exchange_udt_16 (udt_16t *ptr, udt_16t *expected, udt_16t *desired)
+ {
+   return __builtin_ppc_atomic_cas_local (ptr, expected, desired, 0,
+ 					 __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
+ }
+ 
+ /* { dg-final { scan-assembler-times {\mlbarx +[0-9]+,[0-9]+,[0-9]+,1} 3 } } */
+ /* { dg-final { scan-assembler-times {\mlharx +[0-9]+,[0-9]+,[0-9]+,1} 4 } } */
+ /* { dg-final { scan-assembler-times {\mlwarx +[0-9]+,[0-9]+,[0-9]+,1} 5 } } */
+ /* { dg-final { scan-assembler-times {\mldarx +[0-9]+,[0-9]+,[0-9]+,1} 6 } } */
+ /* { dg-final { scan-assembler-times {\mlqarx +[0-9]+,[0-9]+,[0-9]+,1} 4 } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-1.c gcc-17-20260705/gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-1.c	Sun Jun 28 22:32:15 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-1.c	Sun Jul  5 22:32:15 2026
*************** typedef vector signed long long v2di_t;
*** 10,65 ****
  
  v4si_t int_add (v4si_t x, v4si_t y)
  {
-   /* force x & y into FPRs to prefer xvadduwm over vadduwm.  */
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return vec_add (x, y);            /* xvadduwm */
  }
  
  v4si_t int_sub (v4si_t x, v4si_t y)
  {
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return vec_sub (x, y);            /* xvsubuwm */
  }
  
  v4si_t int_mul (v4si_t x, v4si_t y)
  {
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return vec_mul (x, y);            /* xvmuluwm */
  }
  
  v4si_t int_mulhi (v4si_t x, v4si_t y)
  {
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return vec_mulh (x, y);           /* xvmulhsw */
  }
  
  v8hi_t short_add (v8hi_t x, v8hi_t y)
  {
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return vec_add (x, y);            /* xvadduhm */
  }
  
  v8hi_t short_sub (v8hi_t x, v8hi_t y)
  {
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return vec_sub (x, y);            /* xvsubuhm */
  }
  
  v8hi_t short_mul (v8hi_t x, v8hi_t y)
  {
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return vec_mul (x, y);            /* xvmuluhm */
  }
  
  v8hi_t short_mulhi (v8hi_t x, v8hi_t y)
  {
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return vec_mulh (x, y);            /* xvmulhsh */
  }
  
  v2di_t longlong_mulhi (v2di_t x, v2di_t y)
  {
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return vec_mulh (x, y);            /* vmulhsd */
  }
  
--- 10,55 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-2.c gcc-17-20260705/gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-2.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-2.c	Sun Jun 28 22:32:15 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-2.c	Sun Jul  5 22:32:15 2026
*************** typedef vector unsigned long long v2di_t
*** 10,65 ****
  
  v4si_t uint_add (v4si_t x, v4si_t y)
  {
-   /* force x & y into FPRs to prefer xvadduwm over vadduwm.  */
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return vec_add (x, y);            /* xvadduwm */
  }
  
  v4si_t uint_sub (v4si_t x, v4si_t y)
  {
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return vec_sub (x, y);            /* xvsubuwm */
  }
  
  v4si_t uint_mul (v4si_t x, v4si_t y)
  {
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return vec_mul (x, y);            /* xvmuluwm */
  }
  
  v4si_t uint_mulhi (v4si_t x, v4si_t y)
  {
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return vec_mulh (x, y);           /* xvmulhuw */
  }
  
  v8hi_t ushort_add (v8hi_t x, v8hi_t y)
  {
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return vec_add (x, y);            /* xvadduhm */
  }
  
  v8hi_t ushort_sub (v8hi_t x, v8hi_t y)
  {
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return vec_sub (x, y);            /* xvsubuhm */
  }
  
  v8hi_t ushort_mul (v8hi_t x, v8hi_t y)
  {
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return vec_mul (x, y);            /* xvmuluhm */
  }
  
  v8hi_t ushort_mulhi (v8hi_t x, v8hi_t y)
  {
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return vec_mulh (x, y);            /* xvmulhuh */
  }
  
  v2di_t ulonglong_mulhi (v2di_t x, v2di_t y)
  {
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return vec_mulh (x, y);            /* vmulhud */
  }
  
--- 10,55 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/powerpc/vsx_arith_vect_1.c gcc-17-20260705/gcc/testsuite/gcc.target/powerpc/vsx_arith_vect_1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/powerpc/vsx_arith_vect_1.c	Sun Jun 28 22:32:15 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/powerpc/vsx_arith_vect_1.c	Sun Jul  5 22:32:15 2026
*************** typedef vector unsigned short  vus;
*** 11,84 ****
  
  vsi int_add (vsi x, vsi y)
  {
-   /* force x & y into FPRs to prefer xvadduwm over vadduwm.  */
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return x + y;            /* xvadduwm */
  }
  
  vsi int_sub (vsi x, vsi y)
  {
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return x - y;            /* xvsubuwm */
  }
  
  vsi int_mul (vsi x, vsi y)
  {
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return x * y;            /* xvmuluwm */
  }
  
  vui uint_add (vui x, vui y)
  {
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return x + y;            /* xvadduwm */
  }
  
  vui uint_sub (vui x, vui y)
  {
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return x - y;            /* xvsubuwm */
  }
  
  vui uint_mul (vui x, vui y)
  {
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return x * y;            /* xvmuluwm */
  }
  
  vss short_add (vss x, vss y)
  {
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return x + y;            /* xvadduhm */
  }
  
  vss short_sub (vss x, vss y)
  {
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return x - y;            /* xvsubuhm */
  }
  
  vss short_mul (vss x, vss y)
  {
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return x * y;            /* xvmuluhm */
  }
  
  vus ushort_add (vus x, vus y)
  {
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return x + y;            /* xvadduhm */
  }
  
  vus ushort_sub (vus x, vus y)
  {
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return x - y;            /* xvsubuhm */
  }
  
  vus ushort_mul (vus x, vus y)
  {
-   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
    return x * y;            /* xvmuluhm */
  }
  
--- 11,71 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/add-synthesis-3.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/add-synthesis-3.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/add-synthesis-3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/add-synthesis-3.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile { target rv64 } } */
+ /* { dg-options "-march=rv64gcb -mabi=lp64d" } */
+ 
+ long F1 (long x) { return x + 0xffffffff; }
+ long F2 (long x) { return x + (1UL << (sizeof (long) * 8 - 1) ); }
+ 
+ /* { dg-final { scan-assembler-times "\\tadd\\.uw\\t" 1 } } */
+ /* { dg-final { scan-assembler-times "\\tbinvi\\t" 1 } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/and-synthesis-1.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/and-synthesis-1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/and-synthesis-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/and-synthesis-1.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,42 ----
+ /* { dg-do compile { target rv64 } } */
+ /* { dg-options "-march=rv64gcb -mabi=lp64d" } */
+ 
+ #define T(L,S) unsigned long t_##L##_##S(unsigned long x) { return x & ((((1UL << L) - 1) << S)); }
+ 
+ T(1, 31)
+ T(2, 30)
+ T(3, 29)
+ T(4, 28)
+ T(5, 27)
+ T(6, 26)
+ T(7, 25)
+ T(8, 24)
+ T(9, 23)
+ T(10, 22)
+ T(11, 21)
+ T(12, 20)
+ T(13, 19)
+ T(14, 18)
+ T(15, 17)
+ T(16, 16)
+ T(17, 15)
+ T(18, 14)
+ T(19, 13)
+ T(20, 12)
+ T(21, 11)
+ T(22, 10)
+ T(23, 9)
+ T(24, 8)
+ T(25, 7)
+ T(26, 6)
+ T(27, 5)
+ T(28, 4)
+ T(29, 3)
+ T(30, 2)
+ T(31, 1)
+ 
+ /* { dg-final { scan-assembler-times "\\tsrliw" 30 } } */
+ /* { dg-final { scan-assembler-times "\\tslli" 30 } } */
+ /* { dg-final { scan-assembler-times "\\tbseti" 1 } } */
+ /* { dg-final { scan-assembler-times "\\tand" 1 } } */
+ 
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/and-synthesis-2.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/and-synthesis-2.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/and-synthesis-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/and-synthesis-2.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile { target rv64 } } */
+ /* { dg-options "-march=rv64gcb -mabi=lp64d" } */
+ 
+ unsigned long xor(unsigned long x) { return x ^ 0xfff0000000000fffULL; }
+ unsigned long ior(unsigned long x) { return x | 0xfff0000000000fffULL; }
+ unsigned long and(unsigned long x) { return x & 0xfff0000000000fffULL; }
+ 
+ /* { dg-final { scan-assembler-times "\\tli\\t" 3 } } */
+ /* { dg-final { scan-assembler-times "\\tsrli\t" 3 } } */
+ 
+ /* { dg-final { scan-assembler-times "\\txnor\t" 1 } } */
+ /* { dg-final { scan-assembler-times "\\torn\t" 1 } } */
+ /* { dg-final { scan-assembler-times "\\tandn\t" 1 } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/and-synthesis-3.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/and-synthesis-3.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/and-synthesis-3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/and-synthesis-3.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile { target rv64 } } */
+ /* { dg-options "-march=rv64gcb -mabi=lp64d" } */
+ 
+ 
+ 
+ #define T(X) long andn##X(long x) { return x & X; }
+ 
+ T(0x000200c3233fffffUL)
+ T(0x300000000003ffffUL)
+ T(0x00004f10000a0fffUL)
+ T(0x0000c7f3801fefffUL)
+ T(0xe00000000000fc00UL)
+ T(0x0eef7ffffffbbfffUL)
+ T(0xff0000000000ff00UL)
+ T(0xff000000000000ffUL)
+ T(0xfffff00000000fffUL)
+ T(0xf00000000000000fUL)
+ 
+ /* { dg-final { scan-assembler-times "\\tandn\\t" 7 } } */
+ /* { dg-final { scan-assembler-times "\\trori\\t" 6 } } */
+ /* { dg-final { scan-assembler-times "\\tzext.h\\t" 1 } } */
+ /* { dg-final { scan-assembler-times "\\tzext.w\\t" 1 } } */
+ /* { dg-final { scan-assembler-times "\\tandi\\t" 1 } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/mcpu-spacemit-a100.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/mcpu-spacemit-a100.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/mcpu-spacemit-a100.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/mcpu-spacemit-a100.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,80 ----
+ /* { dg-do compile } */
+ /* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
+ /* { dg-options "-mcpu=spacemit-a100" { target { rv64 } } } */
+ /* Spacemit A100 => rva23u64_zfh_zbc_zbkc_zfbfmin_smepmp_smnpm_smstateen_
+  * sscofpmf_ssnpm_sspm_ssstateen_sstc_svinval_svnapot_svpbmt_zifencei_zvfh_
+  * zvfbfwma_zvkng_zvknha_zvknc_zvksc_zvksg_zvl1024b_xsmtvdotii
+  */
+ 
+ #if !((__riscv_xlen == 64)		\
+       && !defined(__riscv_32e)		\
+       && !defined(__riscv_h)		\
+       && defined(__riscv_mul)		\
+       && defined(__riscv_atomic)	\
+       && (__riscv_flen == 64)		\
+       && defined(__riscv_compressed)	\
+       && defined(__riscv_v)		\
+       && defined(__riscv_zic64b)	\
+       && defined(__riscv_zba)		\
+       && defined(__riscv_zbb)		\
+       && defined(__riscv_zbc)		\
+       && defined(__riscv_zbs)		\
+       && defined(__riscv_zfh)		\
+       && defined(__riscv_zfhmin)	\
+       && defined(__riscv_ziccamoa)	\
+       && defined(__riscv_ziccif)	\
+       && defined(__riscv_zicclsm)	\
+       && defined(__riscv_ziccrse)	\
+       && defined(__riscv_zicsr)		\
+       && defined(__riscv_zifencei)	\
+       && defined(__riscv_zihintntl)	\
+       && defined(__riscv_svpbmt)	\
+       && defined(__riscv_smepmp)	\
+       && defined(__riscv_sstc)		\
+       && defined(__riscv_sscofpmf)	\
+       && defined(__riscv_zicond)	\
+       && defined(__riscv_zicboz)	\
+       && defined(__riscv_zicbom)	\
+       && defined(__riscv_zicbop)	\
+       && defined(__riscv_zicntr)	\
+       && defined(__riscv_zihpm)		\
+       && defined(__riscv_za64rs)	\
+       && defined(__riscv_zkt)		\
+       && defined(__riscv_svinval)	\
+       && defined(__riscv_svnapot)	\
+       && defined(__riscv_zihintpause)	\
+       && defined(__riscv_zbkc)		\
+       && defined(__riscv_zvfh)		\
+       && defined(__riscv_zvfhmin)	\
+       && defined(__riscv_zvl1024b)	\
+       && defined(__riscv_zfa)		\
+       && defined(__riscv_zca)		\
+       && defined(__riscv_zcb)		\
+       && defined(__riscv_zcd)		\
+       && defined(__riscv_zvbb)		\
+       && defined(__riscv_zvkng)		\
+       && defined(__riscv_zvknha)	\
+       && defined(__riscv_smstateen)	\
+       && defined(__riscv_ssstateen)	\
+       && defined(__riscv_zfbfmin)	\
+       && defined(__riscv_zvfbfmin)	\
+       && defined(__riscv_zvfbfwma)	\
+       && defined(__riscv_zimop)		\
+       && defined(__riscv_zcmop)		\
+       && defined(__riscv_smnpm)		\
+       && defined(__riscv_ssnpm)		\
+       && defined(__riscv_sspm)		\
+       && defined(__riscv_zawrs)		\
+       && defined(__riscv_zvbc)		\
+       && defined(__riscv_zvknc)		\
+       && defined(__riscv_zvksc)		\
+       && defined(__riscv_zvksg)		\
+       && defined(__riscv_supm)		\
+       && defined(__riscv_xsmtvdotii))
+ #error "unexpected arch"
+ #endif
+ 
+ int main()
+ {
+   return 0;
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/mcpu-spacemit-x100.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/mcpu-spacemit-x100.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/mcpu-spacemit-x100.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/mcpu-spacemit-x100.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,87 ----
+ /* { dg-do compile } */
+ /* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
+ /* { dg-options "-mcpu=spacemit-x100" { target { rv64 } } } */
+ /* Spacemit X100 => rva23s64_smepmp_smnpm_smstateen_sspm_zbc_zbkc_
+  * zfbfmin_zfh_zvbc_zvfbfwma_zvfh_zvknc_zvkng_zvknha_zvksc_zvksg_
+  * zvl256b_xsmtvdot
+  */
+ 
+ #if !((__riscv_xlen == 64)		\
+       && !defined(__riscv_32e)		\
+       && defined(__riscv_mul)		\
+       && defined(__riscv_atomic)	\
+       && (__riscv_flen == 64)		\
+       && defined(__riscv_compressed)	\
+       && defined(__riscv_v)		\
+       && defined(__riscv_h)		\
+       && defined(__riscv_zic64b)	\
+       && defined(__riscv_zba)		\
+       && defined(__riscv_zbb)		\
+       && defined(__riscv_zbc)		\
+       && defined(__riscv_zbs)		\
+       && defined(__riscv_zfh)		\
+       && defined(__riscv_zfhmin)	\
+       && defined(__riscv_ziccamoa)	\
+       && defined(__riscv_ziccif)	\
+       && defined(__riscv_zicclsm)	\
+       && defined(__riscv_ziccrse)	\
+       && defined(__riscv_zicsr)		\
+       && defined(__riscv_zifencei)	\
+       && defined(__riscv_zihintntl)	\
+       && defined(__riscv_svpbmt)	\
+       && defined(__riscv_smepmp)	\
+       && defined(__riscv_sstc)		\
+       && defined(__riscv_sscofpmf)	\
+       && defined(__riscv_zicond)	\
+       && defined(__riscv_zicboz)	\
+       && defined(__riscv_zicbom)	\
+       && defined(__riscv_zicbop)	\
+       && defined(__riscv_zicntr)	\
+       && defined(__riscv_zihpm)		\
+       && defined(__riscv_za64rs)	\
+       && defined(__riscv_zkt)		\
+       && defined(__riscv_svinval)	\
+       && defined(__riscv_svnapot)	\
+       && defined(__riscv_zihintpause)	\
+       && defined(__riscv_zbkc)		\
+       && defined(__riscv_zvfh)		\
+       && defined(__riscv_zvfhmin)	\
+       && defined(__riscv_zvl256b)	\
+       && defined(__riscv_zfa)		\
+       && defined(__riscv_zca)		\
+       && defined(__riscv_zcb)		\
+       && defined(__riscv_zcd)		\
+       && defined(__riscv_zvbb)		\
+       && defined(__riscv_zvkng)		\
+       && defined(__riscv_zvknha)	\
+       && defined(__riscv_smstateen)	\
+       && defined(__riscv_ssstateen)	\
+       && defined(__riscv_zfbfmin)	\
+       && defined(__riscv_zvfbfmin)	\
+       && defined(__riscv_zvfbfwma)	\
+       && defined(__riscv_zimop)		\
+       && defined(__riscv_zcmop)		\
+       && defined(__riscv_smnpm)		\
+       && defined(__riscv_ssnpm)		\
+       && defined(__riscv_sspm)		\
+       && defined(__riscv_zawrs)		\
+       && defined(__riscv_zvknc)		\
+       && defined(__riscv_zvksc)		\
+       && defined(__riscv_zvksg)		\
+       && defined(__riscv_supm)		\
+       && defined(__riscv_svbare)	\
+       && defined(__riscv_svade)		\
+       && defined(__riscv_ssccptr)	\
+       && defined(__riscv_sstvecd)	\
+       && defined(__riscv_sstvala)	\
+       && defined(__riscv_sscounterenw)	\
+       && defined(__riscv_ssu64xl)	\
+       && defined(__riscv_sha)		\
+       && defined(__riscv_xsmtvdot))
+ #error "unexpected arch"
+ #endif
+ 
+ int main()
+ {
+   return 0;
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/multilib.exp gcc-17-20260705/gcc/testsuite/gcc.target/riscv/multilib.exp
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/multilib.exp	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/multilib.exp	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,109 ----
+ # Copyright (C) 2026 Free Software Foundation, Inc.
+ 
+ # This program 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 of the License, or
+ # (at your option) any later version.
+ #
+ # This program 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 GCC; see the file COPYING3.  If not see
+ # <http://www.gnu.org/licenses/>.
+ #
+ # gcc.cc:set_multilib_dir does textual matching of MULTILIB_OPTIONS
+ # against the command line plus MULTILIB_DEFAULTS, which doesn't
+ # understand RISC-V arch supersetting.  When -march is a superset of
+ # one of the configured multilibs' arches but does not textually match,
+ # the textual matcher can pick the wrong (default) multilib.  Before
+ # the fix, riscv_compute_multilib early-returned that wrong pick;
+ # afterwards it runs the smart, score-based matcher unconditionally
+ # and selects the closest superset multilib.
+ #
+ # To exercise the bug a toolchain must be configured so that both
+ # rv64gc/lp64f and rv64g_zcmp_zcmt/lp64f are present, e.g.:
+ #   ./configure --enable-multilib --with-abi=lp64d --with-arch=rv64gc \
+ #     --with-multilib-generator="rv64gc-lp64f--;rv64g_zcmp_zcmt-lp64f--"
+ # The test only inspects --print-multi-lib output to detect that the
+ # two relevant multilibs exist, and is a no-op on any toolchain that
+ # is not configured this way.
+ 
+ if ![istarget riscv*-*-*] then {
+     return
+ }
+ 
+ load_lib gcc-dg.exp
+ 
+ dg-init
+ 
+ if ![gcc_parallel_test_run_p options] {
+     return
+ }
+ gcc_parallel_test_enable 0
+ 
+ proc gcc_run_with_flags { flags } {
+     global tool
+     set options [list "additional_flags=$flags"]
+     return [${tool}_target_compile "" "" "none" $options]
+ }
+ 
+ proc gcc_print_multi_dir { opts } {
+     return [string trim [gcc_run_with_flags [concat --print-multi-directory $opts]]]
+ }
+ 
+ proc check_multi_dir { gcc_opts multi_dir } {
+     set got [gcc_print_multi_dir $gcc_opts]
+     if { $got eq $multi_dir } {
+ 	pass "multilibdir $gcc_opts -> $multi_dir"
+     } else {
+ 	fail "multilibdir $gcc_opts -> $multi_dir (got '$got')"
+     }
+ }
+ 
+ # Detect the configured multilibs.  Each line of --print-multi-lib is
+ # "<dir>;<flags>"; the default multilib appears as ".;".
+ set zcmp_dir ""
+ set rv64gc_dir ""
+ foreach line [split [gcc_run_with_flags --print-multi-lib] "\n"] {
+     set line [string trim $line]
+     if { $line eq "" || [string match ".;*" $line] } {
+ 	continue
+     }
+     set dir [lindex [split $line ";"] 0]
+     if { [string match "*zcmp_zcmt*/lp64f" $dir] } {
+ 	set zcmp_dir $dir
+     } elseif { [string match "*zcd*/lp64f" $dir]
+ 	       && ![string match "*zcmp_zcmt*" $dir] } {
+ 	set rv64gc_dir $dir
+     }
+ }
+ 
+ if { $zcmp_dir eq "" || $rv64gc_dir eq "" } {
+     verbose "skipping: rv64gc/lp64f and rv64g_zcmp_zcmt/lp64f multilibs not both configured" 1
+     gcc_parallel_test_enable 1
+     return
+ }
+ 
+ # Sanity: exact arches must each select their own multilib.
+ check_multi_dir {-march=rv64gc -mabi=lp64f} $rv64gc_dir
+ check_multi_dir {-march=rv64g_zcmp_zcmt -mabi=lp64f} $zcmp_dir
+ 
+ # An arch that is a strict superset of rv64g_zcmp_zcmt but not of
+ # rv64gc (it has Zcmp/Zcmt and lacks Zcd) must select the Zc* multilib.
+ # Before the fix, the generic textual matcher in gcc.cc rescued the
+ # rv64gc default and riscv_compute_multilib accepted it; the smart
+ # matcher now runs unconditionally and overrides that pick.
+ check_multi_dir {-march=rv64g_zba_zcmp_zcmt -mabi=lp64f} $zcmp_dir
+ check_multi_dir {-march=rv64g_zicond_zcmp_zcmt -mabi=lp64f} $zcmp_dir
+ 
+ # Reverse direction: an arch that is a superset of rv64gc but not of
+ # rv64g_zcmp_zcmt (it has Zcd and lacks Zcmp/Zcmt) must still select
+ # the rv64gc multilib.  Guards against a future change that would
+ # unconditionally favour the longer Zc*-rich multilib.
+ check_multi_dir {-march=rv64gc_zba -mabi=lp64f} $rv64gc_dir
+ check_multi_dir {-march=rv64gc_zicond -mabi=lp64f} $rv64gc_dir
+ 
+ gcc_parallel_test_enable 1
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112399.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112399.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112399.c	Sun Jun 28 22:32:15 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112399.c	Sun Jul  5 22:32:15 2026
***************
*** 7,18 ****
  ** foo:
  **   ...
  **   vsetvli\s*[a-x0-9]+,\s*[a-x0-9]+,\s*e64,\s*m1,\s*tu,\s*m[au]
- **   slli\s*[a-x0-9]+,\s*[a-x0-9]+,\s*3
  **   vle64\.v\s*v[0-9]+,\s*0\([a-x0-9]+\)
  **   vle64\.v\s*v[0-9]+,\s*0\([a-x0-9]+\)
  **   vfmul\.vv\s*v[0-9]+,\s*v[0-9]+,\s*v[0-9]+
  **   vle64\.v\s*\s*v[0-9]+,\s*0\([a-x0-9]+\)
  **   vfmacc\.vv\s*\s*v[0-9]+,\s*v[0-9]+,\s*v[0-9]+
  **   add\s*[a-x0-9]+,\s*[a-x0-9]+,\s*[a-x0-9]+
  **   add\s*[a-x0-9]+,\s*[a-x0-9]+,\s*[a-x0-9]+
  **   add\s*[a-x0-9]+,\s*[a-x0-9]+,\s*[a-x0-9]+
--- 7,18 ----
  ** foo:
  **   ...
  **   vsetvli\s*[a-x0-9]+,\s*[a-x0-9]+,\s*e64,\s*m1,\s*tu,\s*m[au]
  **   vle64\.v\s*v[0-9]+,\s*0\([a-x0-9]+\)
  **   vle64\.v\s*v[0-9]+,\s*0\([a-x0-9]+\)
  **   vfmul\.vv\s*v[0-9]+,\s*v[0-9]+,\s*v[0-9]+
  **   vle64\.v\s*\s*v[0-9]+,\s*0\([a-x0-9]+\)
  **   vfmacc\.vv\s*\s*v[0-9]+,\s*v[0-9]+,\s*v[0-9]+
+ **   slli\s*[a-x0-9]+,\s*[a-x0-9]+,\s*3
  **   add\s*[a-x0-9]+,\s*[a-x0-9]+,\s*[a-x0-9]+
  **   add\s*[a-x0-9]+,\s*[a-x0-9]+,\s*[a-x0-9]+
  **   add\s*[a-x0-9]+,\s*[a-x0-9]+,\s*[a-x0-9]+
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr125994.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr125994.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr125994.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr125994.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -O3 -fdump-tree-vect-details" } */
+ 
+ #include <stdint.h>
+ 
+ void
+ AddWithIv (uint8_t *buf, uint8_t *Iv, uint64_t size)
+ {
+   uint64_t i;
+   for (i = 0; i < size; ++i)
+     {
+       buf[i] += Iv[i];
+     }
+ }
+ 
+ /* { dg-final { scan-tree-dump "Both peeling and versioning will be applied." "vect" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr126049.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr126049.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr126049.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr126049.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,26 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target riscv_v_ok } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d -O2 -ftree-vectorize" } */
+ 
+ #define NAN (__builtin_nan(""))
+ 
+ __attribute__ ((noipa)) float
+ maxx (float *arr, unsigned int sz)
+ {
+   float val = NAN;
+   unsigned int i;
+ 
+   for (i = 0; i < sz; i++)
+     val = __builtin_fmaxf (val, arr[i]);
+ 
+   return val;
+ }
+ 
+ int
+ main ()
+ {
+   float arr[] = { NAN, NAN, NAN, NAN };
+   float res = maxx (arr, 4);
+   if (!__builtin_isnan (res))
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h	Sun Jun 28 22:32:15 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h	Sun Jul  5 22:32:15 2026
*************** sat_u_mul_##NT##_from_##WT##_fmt_13 (NT
*** 869,872 ****
--- 869,968 ----
    sat_u_mul_##NT##_from_##WT##_fmt_13 (a, b)
  #define RUN_SAT_U_MUL_FMT_13_WRAP(NT, WT, a, b) RUN_SAT_U_MUL_FMT_13(NT, WT, a, b)
  
+ #define DEF_SAT_U_MUL_FMT_14(NT, WT)             \
+ NT __attribute__((noinline))                     \
+ sat_u_mul_##NT##_from_##WT##_fmt_14 (NT a, NT b) \
+ {                                                \
+   WT x = (WT)a * (WT)b;                          \
+   NT hi = x >> (sizeof(NT) * 8);                 \
+   NT lo = (NT)x;                                 \
+   return hi == 0 ? lo : -1;                      \
+ }
+ 
+ #define DEF_SAT_U_MUL_FMT_14_WRAP(NT, WT) DEF_SAT_U_MUL_FMT_14(NT, WT)
+ #define RUN_SAT_U_MUL_FMT_14(NT, WT, a, b) \
+   sat_u_mul_##NT##_from_##WT##_fmt_14 (a, b)
+ #define RUN_SAT_U_MUL_FMT_14_WRAP(NT, WT, a, b) \
+   RUN_SAT_U_MUL_FMT_14(NT, WT, a, b)
+ 
+ #define DEF_SAT_U_MUL_FMT_15(NT, WT)             \
+ NT __attribute__((noinline))                     \
+ sat_u_mul_##NT##_from_##WT##_fmt_15 (NT a, NT b) \
+ {                                                \
+   WT x = (WT)a * (WT)b;                          \
+   NT hi = x >> (sizeof(NT) * 8);                 \
+   NT lo = (NT)x;                                 \
+   return hi != 0 ? -1 : lo;                      \
+ }
+ 
+ #define DEF_SAT_U_MUL_FMT_15_WRAP(NT, WT) DEF_SAT_U_MUL_FMT_15(NT, WT)
+ #define RUN_SAT_U_MUL_FMT_15(NT, WT, a, b) \
+   sat_u_mul_##NT##_from_##WT##_fmt_15 (a, b)
+ #define RUN_SAT_U_MUL_FMT_15_WRAP(NT, WT, a, b) \
+   RUN_SAT_U_MUL_FMT_15(NT, WT, a, b)
+ 
+ #define DEF_SAT_U_MUL_FMT_16(NT, WT)             \
+ NT __attribute__((noinline))                     \
+ sat_u_mul_##NT##_from_##WT##_fmt_16 (NT a, NT b) \
+ {                                                \
+   WT x = (WT)a * (WT)b;                          \
+   NT lo = (NT)x;                                 \
+   bool overflow_p = x >> (sizeof(NT) * 8) != 0;  \
+   return overflow_p ? -1 : lo;                   \
+ }
+ 
+ #define DEF_SAT_U_MUL_FMT_16_WRAP(NT, WT) DEF_SAT_U_MUL_FMT_16(NT, WT)
+ #define RUN_SAT_U_MUL_FMT_16(NT, WT, a, b) \
+   sat_u_mul_##NT##_from_##WT##_fmt_16 (a, b)
+ #define RUN_SAT_U_MUL_FMT_16_WRAP(NT, WT, a, b) \
+   RUN_SAT_U_MUL_FMT_16(NT, WT, a, b)
+ 
+ #define DEF_SAT_U_MUL_FMT_17(NT, WT)                \
+ NT __attribute__((noinline))                        \
+ sat_u_mul_##NT##_from_##WT##_fmt_17 (NT a, NT b)    \
+ {                                                   \
+   WT x = (WT)a * (WT)b;                             \
+   NT lo = (NT)x;                                    \
+   bool non_overflow_p = x >> (sizeof(NT) * 8) == 0; \
+   return non_overflow_p ? lo : -1;                  \
+ }
+ 
+ #define DEF_SAT_U_MUL_FMT_17_WRAP(NT, WT) DEF_SAT_U_MUL_FMT_17(NT, WT)
+ #define RUN_SAT_U_MUL_FMT_17(NT, WT, a, b) \
+   sat_u_mul_##NT##_from_##WT##_fmt_17 (a, b)
+ #define RUN_SAT_U_MUL_FMT_17_WRAP(NT, WT, a, b) \
+   RUN_SAT_U_MUL_FMT_17(NT, WT, a, b)
+ 
+ #define DEF_SAT_U_MUL_FMT_18(NT, WT)             \
+ NT __attribute__((noinline))                     \
+ sat_u_mul_##NT##_from_##WT##_fmt_18 (NT a, NT b) \
+ {                                                \
+   WT x = (WT)a * (WT)b;                          \
+   NT lo = (NT)x;                                 \
+   bool overflow_p = x >> (sizeof(NT) * 8) != 0;  \
+   return !overflow_p ? lo : -1;                  \
+ }
+ 
+ #define DEF_SAT_U_MUL_FMT_18_WRAP(NT, WT) DEF_SAT_U_MUL_FMT_18(NT, WT)
+ #define RUN_SAT_U_MUL_FMT_18(NT, WT, a, b) \
+   sat_u_mul_##NT##_from_##WT##_fmt_18 (a, b)
+ #define RUN_SAT_U_MUL_FMT_18_WRAP(NT, WT, a, b) \
+   RUN_SAT_U_MUL_FMT_18(NT, WT, a, b)
+ 
+ #define DEF_SAT_U_MUL_FMT_19(NT, WT)                \
+ NT __attribute__((noinline))                        \
+ sat_u_mul_##NT##_from_##WT##_fmt_19 (NT a, NT b)    \
+ {                                                   \
+   WT x = (WT)a * (WT)b;                             \
+   NT lo = (NT)x;                                    \
+   bool non_overflow_p = x >> (sizeof(NT) * 8) == 0; \
+   return !non_overflow_p ? -1 : lo;                 \
+ }
+ 
+ #define DEF_SAT_U_MUL_FMT_19_WRAP(NT, WT) DEF_SAT_U_MUL_FMT_19(NT, WT)
+ #define RUN_SAT_U_MUL_FMT_19(NT, WT, a, b) \
+   sat_u_mul_##NT##_from_##WT##_fmt_19 (a, b)
+ #define RUN_SAT_U_MUL_FMT_19_WRAP(NT, WT, a, b) \
+   RUN_SAT_U_MUL_FMT_19(NT, WT, a, b)
+ 
  #endif
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u16-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u16-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u16-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u16-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_14_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u16-from-u32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u16-from-u32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u16-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u16-from-u32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint32_t
+ 
+ DEF_SAT_U_MUL_FMT_14_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u16-from-u64.rv32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u16-from-u64.rv32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u16-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u16-from-u64.rv32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32 -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_14_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u16-from-u64.rv64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u16-from-u64.rv64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u16-from-u64.rv64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u16-from-u64.rv64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_14_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u32-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u32-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u32-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u32-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint32_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_14_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u32-from-u64.rv32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u32-from-u64.rv32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u32-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u32-from-u64.rv32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32 -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint32_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_14_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u32-from-u64.rv64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u32-from-u64.rv64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u32-from-u64.rv64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u32-from-u64.rv64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint32_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_14_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u64-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u64-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u64-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u64-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint64_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_14_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u8-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u8-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u8-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u8-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_14_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u8-from-u16.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u8-from-u16.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u8-from-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u8-from-u16.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint16_t
+ 
+ DEF_SAT_U_MUL_FMT_14_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u8-from-u32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u8-from-u32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u8-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u8-from-u32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint32_t
+ 
+ DEF_SAT_U_MUL_FMT_14_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u8-from-u64.rv32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u8-from-u64.rv32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u8-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u8-from-u64.rv32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32 -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_14_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u8-from-u64.rv64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u8-from-u64.rv64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u8-from-u64.rv64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-15-u8-from-u64.rv64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_14_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u16-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u16-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u16-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u16-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_15_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u16-from-u32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u16-from-u32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u16-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u16-from-u32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint32_t
+ 
+ DEF_SAT_U_MUL_FMT_15_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u16-from-u64.rv32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u16-from-u64.rv32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u16-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u16-from-u64.rv32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32 -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_15_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u16-from-u64.rv64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u16-from-u64.rv64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u16-from-u64.rv64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u16-from-u64.rv64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_15_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u32-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u32-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u32-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u32-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint32_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_15_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u32-from-u64.rv32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u32-from-u64.rv32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u32-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u32-from-u64.rv32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32 -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint32_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_15_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u32-from-u64.rv64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u32-from-u64.rv64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u32-from-u64.rv64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u32-from-u64.rv64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint32_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_15_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u64-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u64-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u64-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u64-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint64_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_15_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u8-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u8-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u8-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u8-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_15_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u8-from-u16.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u8-from-u16.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u8-from-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u8-from-u16.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint16_t
+ 
+ DEF_SAT_U_MUL_FMT_15_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u8-from-u32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u8-from-u32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u8-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u8-from-u32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint32_t
+ 
+ DEF_SAT_U_MUL_FMT_15_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u8-from-u64.rv32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u8-from-u64.rv32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u8-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u8-from-u64.rv32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32 -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_15_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u8-from-u64.rv64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u8-from-u64.rv64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u8-from-u64.rv64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-16-u8-from-u64.rv64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_15_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u16-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u16-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u16-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u16-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_16_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u16-from-u32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u16-from-u32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u16-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u16-from-u32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint32_t
+ 
+ DEF_SAT_U_MUL_FMT_16_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u16-from-u64.rv32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u16-from-u64.rv32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u16-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u16-from-u64.rv32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32 -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_16_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u16-from-u64.rv64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u16-from-u64.rv64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u16-from-u64.rv64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u16-from-u64.rv64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_16_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u32-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u32-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u32-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u32-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint32_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_16_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u32-from-u64.rv32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u32-from-u64.rv32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u32-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u32-from-u64.rv32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32 -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint32_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_16_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u32-from-u64.rv64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u32-from-u64.rv64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u32-from-u64.rv64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u32-from-u64.rv64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint32_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_16_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u64-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u64-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u64-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u64-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint64_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_16_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u8-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u8-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u8-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u8-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_16_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u8-from-u16.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u8-from-u16.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u8-from-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u8-from-u16.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint16_t
+ 
+ DEF_SAT_U_MUL_FMT_16_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u8-from-u32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u8-from-u32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u8-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u8-from-u32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint32_t
+ 
+ DEF_SAT_U_MUL_FMT_16_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u8-from-u64.rv32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u8-from-u64.rv32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u8-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u8-from-u64.rv32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32 -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_16_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u8-from-u64.rv64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u8-from-u64.rv64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u8-from-u64.rv64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-17-u8-from-u64.rv64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_16_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u16-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u16-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u16-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u16-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_17_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u16-from-u32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u16-from-u32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u16-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u16-from-u32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint32_t
+ 
+ DEF_SAT_U_MUL_FMT_17_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u16-from-u64.rv32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u16-from-u64.rv32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u16-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u16-from-u64.rv32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32 -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_17_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u16-from-u64.rv64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u16-from-u64.rv64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u16-from-u64.rv64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u16-from-u64.rv64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_17_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u32-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u32-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u32-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u32-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint32_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_17_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u32-from-u64.rv32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u32-from-u64.rv32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u32-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u32-from-u64.rv32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32 -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint32_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_17_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u32-from-u64.rv64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u32-from-u64.rv64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u32-from-u64.rv64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u32-from-u64.rv64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint32_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_17_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u64-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u64-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u64-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u64-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint64_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_17_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u8-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u8-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u8-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u8-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_17_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u8-from-u16.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u8-from-u16.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u8-from-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u8-from-u16.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint16_t
+ 
+ DEF_SAT_U_MUL_FMT_17_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u8-from-u32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u8-from-u32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u8-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u8-from-u32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint32_t
+ 
+ DEF_SAT_U_MUL_FMT_17_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u8-from-u64.rv32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u8-from-u64.rv32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u8-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u8-from-u64.rv32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32 -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_17_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u8-from-u64.rv64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u8-from-u64.rv64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u8-from-u64.rv64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-18-u8-from-u64.rv64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_17_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u16-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u16-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u16-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u16-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_18_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u16-from-u32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u16-from-u32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u16-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u16-from-u32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint32_t
+ 
+ DEF_SAT_U_MUL_FMT_18_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u16-from-u64.rv32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u16-from-u64.rv32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u16-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u16-from-u64.rv32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32 -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_18_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u16-from-u64.rv64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u16-from-u64.rv64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u16-from-u64.rv64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u16-from-u64.rv64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_18_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u32-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u32-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u32-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u32-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint32_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_18_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u32-from-u64.rv32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u32-from-u64.rv32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u32-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u32-from-u64.rv32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32 -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint32_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_18_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u32-from-u64.rv64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u32-from-u64.rv64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u32-from-u64.rv64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u32-from-u64.rv64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint32_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_18_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u64-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u64-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u64-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u64-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint64_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_18_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u8-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u8-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u8-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u8-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_18_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u8-from-u16.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u8-from-u16.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u8-from-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u8-from-u16.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint16_t
+ 
+ DEF_SAT_U_MUL_FMT_18_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u8-from-u32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u8-from-u32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u8-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u8-from-u32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint32_t
+ 
+ DEF_SAT_U_MUL_FMT_18_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u8-from-u64.rv32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u8-from-u64.rv32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u8-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u8-from-u64.rv32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32 -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_18_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u8-from-u64.rv64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u8-from-u64.rv64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u8-from-u64.rv64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-19-u8-from-u64.rv64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_18_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u16-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u16-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u16-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u16-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_19_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u16-from-u32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u16-from-u32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u16-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u16-from-u32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint32_t
+ 
+ DEF_SAT_U_MUL_FMT_19_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u16-from-u64.rv32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u16-from-u64.rv32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u16-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u16-from-u64.rv32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32 -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_19_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u16-from-u64.rv64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u16-from-u64.rv64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u16-from-u64.rv64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u16-from-u64.rv64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_19_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u32-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u32-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u32-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u32-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint32_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_19_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u32-from-u64.rv32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u32-from-u64.rv32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u32-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u32-from-u64.rv32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32 -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint32_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_19_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u32-from-u64.rv64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u32-from-u64.rv64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u32-from-u64.rv64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u32-from-u64.rv64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint32_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_19_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u64-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u64-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u64-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u64-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint64_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_19_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u8-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u8-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u8-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u8-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_19_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u8-from-u16.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u8-from-u16.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u8-from-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u8-from-u16.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint16_t
+ 
+ DEF_SAT_U_MUL_FMT_19_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u8-from-u32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u8-from-u32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u8-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u8-from-u32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint32_t
+ 
+ DEF_SAT_U_MUL_FMT_19_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u8-from-u64.rv32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u8-from-u64.rv32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u8-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u8-from-u64.rv32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32 -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_19_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u8-from-u64.rv64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u8-from-u64.rv64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u8-from-u64.rv64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-20-u8-from-u64.rv64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_19_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u16-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u16-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u16-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u16-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_14_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_14_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u16-from-u32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u16-from-u32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u16-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u16-from-u32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint16_t
+ #define WT               uint32_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_14_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_14_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u16-from-u64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u16-from-u64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u16-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u16-from-u64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint16_t
+ #define WT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_14_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_14_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u32-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u32-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u32-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u32-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint32_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_14_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_14_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u32-from-u64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u32-from-u64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u32-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u32-from-u64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint32_t
+ #define WT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_14_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_14_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u64-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u64-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u64-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u64-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint64_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_14_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_14_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u8-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u8-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u8-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u8-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_14_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_14_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u8-from-u16.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u8-from-u16.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u8-from-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u8-from-u16.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint16_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_14_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_14_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u8-from-u32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u8-from-u32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u8-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u8-from-u32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint32_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_14_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_14_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u8-from-u64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u8-from-u64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u8-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-15-u8-from-u64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_14_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_14_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u16-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u16-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u16-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u16-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_15_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_15_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u16-from-u32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u16-from-u32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u16-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u16-from-u32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint16_t
+ #define WT               uint32_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_15_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_15_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u16-from-u64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u16-from-u64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u16-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u16-from-u64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint16_t
+ #define WT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_15_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_15_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u32-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u32-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u32-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u32-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint32_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_15_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_15_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u32-from-u64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u32-from-u64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u32-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u32-from-u64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint32_t
+ #define WT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_15_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_15_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u64-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u64-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u64-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u64-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint64_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_15_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_15_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u8-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u8-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u8-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u8-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_15_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_15_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u8-from-u16.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u8-from-u16.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u8-from-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u8-from-u16.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint16_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_15_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_15_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u8-from-u32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u8-from-u32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u8-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u8-from-u32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint32_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_15_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_15_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u8-from-u64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u8-from-u64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u8-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-16-u8-from-u64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_15_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_15_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u16-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u16-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u16-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u16-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_16_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_16_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u16-from-u32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u16-from-u32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u16-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u16-from-u32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint16_t
+ #define WT               uint32_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_16_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_16_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u16-from-u64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u16-from-u64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u16-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u16-from-u64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint16_t
+ #define WT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_16_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_16_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u32-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u32-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u32-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u32-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint32_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_16_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_16_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u32-from-u64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u32-from-u64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u32-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u32-from-u64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint32_t
+ #define WT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_16_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_16_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u64-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u64-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u64-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u64-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint64_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_16_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_16_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u8-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u8-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u8-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u8-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_16_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_16_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u8-from-u16.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u8-from-u16.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u8-from-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u8-from-u16.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint16_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_16_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_16_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u8-from-u32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u8-from-u32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u8-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u8-from-u32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint32_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_16_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_16_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u8-from-u64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u8-from-u64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u8-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-17-u8-from-u64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_16_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_16_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u16-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u16-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u16-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u16-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_17_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_17_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u16-from-u32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u16-from-u32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u16-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u16-from-u32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint16_t
+ #define WT               uint32_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_17_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_17_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u16-from-u64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u16-from-u64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u16-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u16-from-u64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint16_t
+ #define WT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_17_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_17_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u32-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u32-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u32-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u32-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint32_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_17_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_17_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u32-from-u64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u32-from-u64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u32-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u32-from-u64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint32_t
+ #define WT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_17_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_17_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u64-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u64-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u64-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u64-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint64_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_17_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_17_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u8-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u8-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u8-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u8-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_17_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_17_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u8-from-u16.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u8-from-u16.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u8-from-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u8-from-u16.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint16_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_17_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_17_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u8-from-u32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u8-from-u32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u8-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u8-from-u32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint32_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_17_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_17_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u8-from-u64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u8-from-u64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u8-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-18-u8-from-u64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_17_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_17_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u16-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u16-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u16-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u16-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_18_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_18_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u16-from-u32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u16-from-u32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u16-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u16-from-u32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint16_t
+ #define WT               uint32_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_18_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_18_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u16-from-u64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u16-from-u64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u16-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u16-from-u64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint16_t
+ #define WT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_18_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_18_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u32-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u32-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u32-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u32-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint32_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_18_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_18_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u32-from-u64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u32-from-u64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u32-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u32-from-u64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint32_t
+ #define WT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_18_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_18_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u64-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u64-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u64-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u64-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint64_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_18_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_18_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u8-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u8-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u8-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u8-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_18_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_18_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u8-from-u16.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u8-from-u16.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u8-from-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u8-from-u16.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint16_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_18_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_18_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u8-from-u32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u8-from-u32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u8-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u8-from-u32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint32_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_18_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_18_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u8-from-u64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u8-from-u64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u8-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-19-u8-from-u64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_18_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_18_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u16-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u16-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u16-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u16-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_19_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_19_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u16-from-u32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u16-from-u32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u16-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u16-from-u32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint16_t
+ #define WT               uint32_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_19_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_19_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u16-from-u64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u16-from-u64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u16-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u16-from-u64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint16_t
+ #define WT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_19_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_19_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u32-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u32-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u32-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u32-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint32_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_19_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_19_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u32-from-u64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u32-from-u64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u32-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u32-from-u64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint32_t
+ #define WT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_19_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_19_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u64-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u64-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u64-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u64-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint64_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_19_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_19_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u8-from-u128.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u8-from-u128.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u8-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u8-from-u128.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_19_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_19_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u8-from-u16.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u8-from-u16.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u8-from-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u8-from-u16.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint16_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_19_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_19_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u8-from-u32.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u8-from-u32.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u8-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u8-from-u32.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint32_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_19_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_19_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u8-from-u64.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u8-from-u64.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u8-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-20-u8-from-u64.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_19_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_19_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/xor-synthesis-2.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/xor-synthesis-2.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/xor-synthesis-2.c	Sun Jun 28 22:32:15 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/xor-synthesis-2.c	Sun Jul  5 22:32:15 2026
***************
*** 4,10 ****
  
  unsigned long foo(unsigned long src) { return src ^ 0x8800000000000007; }
  
! /* xfailed until we remove mvconst_internal.  */
! /* { dg-final { scan-assembler-times "\\sbinvi\t" 2 { xfail *-*-* } } } */
! /* { dg-final { scan-assembler-times "\\sxori\t" 1 { xfail *-*-* } } } */
  
--- 4,9 ----
  
  unsigned long foo(unsigned long src) { return src ^ 0x8800000000000007; }
  
! /* { dg-final { scan-assembler-times "\\sbinvi\t" 2 } } */
! /* { dg-final { scan-assembler-times "\\sxori\t" 1 } } */
  
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/riscv/xor-synthesis-4.c gcc-17-20260705/gcc/testsuite/gcc.target/riscv/xor-synthesis-4.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/riscv/xor-synthesis-4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/riscv/xor-synthesis-4.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do compile { target rv64 } } */
+ /* { dg-options "-march=rv64gcb -mabi=lp64d" } */
+ 
+ 
+ 
+ #define T(X) long xnor##X(long x) { return x ^ X; }
+ 
+ T(0x000200c3233fffffUL)
+ T(0x300000000003ffffUL)
+ T(0x00004f10000a0fffUL)
+ T(0x0000c7f3801fefffUL)
+ T(0xe00000000000fc00UL)
+ T(0x0eef7ffffffbbfffUL)
+ T(0xff0000000000ff00UL)
+ 
+ /* Each test above is better handled by inverting the constant
+    and using xnor.  */
+ 
+ /* { dg-final { scan-assembler-times "\\txnor\\t" 7 } } */
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/s390/pr126054.c gcc-17-20260705/gcc/testsuite/gcc.target/s390/pr126054.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/s390/pr126054.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/s390/pr126054.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do run { target int128 } } */
+ /* { dg-options "-O2" } */
+ 
+ int a = 255, b;
+ long c = 1, d;
+ long *e = &d;
+ int main() {
+   long f;
+   unsigned char g;
+   __int128 h = -10;
+   f = (long)h * (unsigned)(c | 56);
+   for (; b;)
+     ;
+   g = (unsigned char) f;
+   *e = 2540LL ^ g;
+   a = 16777215 ^ a ^ d & 255;
+   if ((a ^ (int) 4294967295) != 0xFF0000D5)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/sh/pr116709.c gcc-17-20260705/gcc/testsuite/gcc.target/sh/pr116709.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/sh/pr116709.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/sh/pr116709.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,10 ----
+ /* Verify that SFmode loads into FP registers are not ferried through FPUL.  */
+ /* { dg-do compile { target { any_fpu } } }  */
+ /* { dg-options "-O2" } */
+ /* { dg-final { scan-assembler-not "fpul" } } */
+ 
+ _Complex float
+ test_00 (void)
+ {
+   return __builtin_complex (12.3f, 15.4f);
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/sh/pr122948.c gcc-17-20260705/gcc/testsuite/gcc.target/sh/pr122948.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/sh/pr122948.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/sh/pr122948.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,67 ----
+ /* Verify that the T bit (carry/borrow) set expression of the subc insn is
+    correct.  */
+ /* { dg-do run } */
+ /* { dg-options "-O1" } */
+ 
+ extern void abort (void);
+ 
+ __attribute__ ((noipa)) unsigned int
+ foo (unsigned int a, unsigned int b)
+ {
+   if (b - a - 1 <= b)
+     a = 0;
+   return a;
+ }
+ 
+ __attribute__ ((noipa)) unsigned int
+ bar (unsigned int a, unsigned int b)
+ {
+   return (b - a - 1) > b;
+ }
+ 
+ __attribute__ ((noipa)) unsigned int
+ baz (unsigned int a, unsigned int b)
+ {
+   return (a + b + 1) <= a;
+ }
+ 
+ int
+ main (void)
+ {
+   if (foo (0xffffffff, 0x4e92c833) != 0)
+     abort ();
+ 
+   if (bar (0xffffffff, 0x4e92c833) != 0)
+     abort ();
+ 
+   /* b - a - 1 wraps (borrow) whenever a + 1 > b (unsigned).  */
+   if (bar (5, 3) != 1)
+     abort ();
+ 
+   if (bar (0, 0) != 1)
+     abort ();
+ 
+   if (bar (0, 5) != 0)
+     abort ();
+ 
+   /* addc carry-out: (a + b + 1) <= a.  */
+   /* 0xffffffff + 0 + 1 wraps to 0.  */
+   if (baz (0xffffffff, 0) != 1)
+     abort ();
+ 
+   if (baz (0xffffffff, 0xffffffff) != 1)
+     abort ();
+ 
+   /* wraps to 0.  */
+   if (baz (0xfffffffe, 1) != 1)
+     abort ();
+ 
+   /* 1 <= 0 is false.  */
+   if (baz (0, 0) != 0)
+     abort ();
+ 
+   if (baz (1, 2) != 0)
+     abort ();
+ 
+   return 0;
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/sh/pr55212-c248.c gcc-17-20260705/gcc/testsuite/gcc.target/sh/pr55212-c248.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/sh/pr55212-c248.c	Sun Jun 28 22:32:15 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/sh/pr55212-c248.c	Thu Jan  1 00:00:00 1970
***************
*** 1,31 ****
- /* { dg-do run }  */
- /* { dg-options "-O2 -m4 -mlra -ffixed-r7 -ffixed-r8 -ffixed-r9 -ffixed-r10 -ffixed-r11 -ffixed-r12 -ffixed-r13" } */
- #include <stdlib.h>
- #include <string.h>
- 
- typedef struct { int c[64]; } obj;
- obj obj0;
- obj obj1;
- 
- void __attribute__ ((noinline))
- bar (int a, int b, int c, int d, obj *q)
- {
-   if (q->c[0] != 0x12345678 || q->c[1] != 0xdeadbeef) 
-     abort ();
- }
- 
- void foo (obj *p)
- {
-   obj bobj;
-   bobj = *p;
-   bar (0, 0, 0, 0, &bobj);
- }
- 
- int
- main ()
- {
-   obj0.c[0] = 0x12345678;
-   obj0.c[1] = 0xdeadbeef;
-   foo (&obj0);
-   exit (0);
- }
--- 0 ----
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/sh/pr64366.c gcc-17-20260705/gcc/testsuite/gcc.target/sh/pr64366.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/sh/pr64366.c	Sun Jun 28 22:32:15 2026
--- gcc-17-20260705/gcc/testsuite/gcc.target/sh/pr64366.c	Sun Jul  5 22:32:15 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -mlra -std=gnu17" } */
  
  typedef int int8_t __attribute__ ((__mode__ (__QI__)));
  typedef int int16_t __attribute__ ((__mode__ (__HI__)));
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -std=gnu17" } */
  
  typedef int int8_t __attribute__ ((__mode__ (__QI__)));
  typedef int int16_t __attribute__ ((__mode__ (__HI__)));
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/sh/pr67643.c gcc-17-20260705/gcc/testsuite/gcc.target/sh/pr67643.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/sh/pr67643.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/sh/pr67643.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-m4 -mfmovd -O1" } */
+ /* { dg-final { scan-assembler "lds.l\t@r\[0-9\]+\\+,fpscr" } } */
+ 
+ extern double g;
+ 
+ void __attribute__ ((interrupt_handler))
+ isr (void)
+ {
+   g += 1.0;
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/sh/pr69765.c gcc-17-20260705/gcc/testsuite/gcc.target/sh/pr69765.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/sh/pr69765.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/sh/pr69765.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,15 ----
+ /* Verify that forwarding a double _Complex argument to a tail-called
+    function does not introduce additional reg-reg copies.  */
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ /* { dg-final { scan-assembler-times "jmp\t@r" 1 } } */
+ /* { dg-final { scan-assembler-not "mov\tr" } } */
+ /* { dg-final { scan-assembler-not "fmov\tr" } } */
+ 
+ double _Complex foo (double _Complex arg);
+ 
+ double _Complex
+ bar (double _Complex arg)
+ {
+   return foo (arg);
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/sh/pr81426.c gcc-17-20260705/gcc/testsuite/gcc.target/sh/pr81426.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/sh/pr81426.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/sh/pr81426.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile { target { atomic_model_soft_gusa_available } } }  */
+ /* { dg-options "-O2 -fPIC -matomic-model=soft-gusa,strict" }  */
+ 
+ inline int a (char *b, char c)
+ {
+   __sync_val_compare_and_swap (b, c, 0);
+ }
+ 
+ int d(void)
+ {
+   while (1)
+   {
+     char e;
+     a(&e, e);
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/sh/torture/pr124778.c gcc-17-20260705/gcc/testsuite/gcc.target/sh/torture/pr124778.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/sh/torture/pr124778.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/sh/torture/pr124778.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile }  */
+ /* { dg-additional-options "-std=gnu99" }  */
+ /* This used to trigger an ICE in decompose_multiword_subregs at -O2.  */
+ 
+ long long g;
+ 
+ void
+ f (unsigned n, char *p)
+ {
+   long long size = 4 + (long long)n;
+   while (size >= 4)
+     {
+       size -= 4;
+       p += 4;
+     }
+   g += *(unsigned short *)p;
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/sh/torture/pr34777-1.c gcc-17-20260705/gcc/testsuite/gcc.target/sh/torture/pr34777-1.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/sh/torture/pr34777-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/sh/torture/pr34777-1.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do compile }  */
+ /* { dg-additional-options "-fschedule-insns -fPIC -mprefergot" }  */
+ 
+ static __inline __attribute__ ((__always_inline__)) void *
+ _dl_mmap (void * start, int length, int prot, int flags, int fd,
+ 	  int offset, int xx)
+ {
+   register long __sc3 __asm__ ("r3") = 90;
+   register long __sc4 __asm__ ("r4") = (long) start;
+   register long __sc5 __asm__ ("r5") = (long) length;
+   register long __sc6 __asm__ ("r6") = (long) prot;
+   register long __sc7 __asm__ ("r7") = (long) flags;
+   register long __sc0 __asm__ ("r0") = (long) fd;
+   register long __sc1 __asm__ ("r1") = (long) offset;
+ 
+   if (xx & 3)
+     __asm__ __volatile__ ("trapa	%1"
+ 			: "=z" (__sc0)
+ 			: "i" (0x10 + 6), "0" (__sc0), "r" (__sc4),
+ 			  "r" (__sc5), "r" (__sc6), "r" (__sc7),
+ 			  "r" (__sc3), "r" (__sc1)
+ 			: "memory" );
+ }
+ 
+ extern int _dl_pagesize;
+ void
+ _dl_dprintf(int fd, const char *fmt, ...)
+ {
+   static char *buf;
+   buf = _dl_mmap ((void *) 0, _dl_pagesize, 0x1 | 0x2, 0x02 | 0x20, -1, 0, fd);
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/sh/torture/pr55212-c248.c gcc-17-20260705/gcc/testsuite/gcc.target/sh/torture/pr55212-c248.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/sh/torture/pr55212-c248.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/sh/torture/pr55212-c248.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,39 ----
+ /* { dg-do run }  */
+ /* { dg-options "-ffixed-r7 -ffixed-r8 -ffixed-r9 -ffixed-r10 -ffixed-r11 -ffixed-r12 -ffixed-r13" }  */
+ /* { dg-skip-if "over-constrained regs when not optimizting" { *-*-* } { "-O0" } { "" } }  */
+ 
+ /* The 'block_lump_real_i4' insn that is emitted on SH4 will use up regs
+    r0~r6.  With r7~r13 being artificially fixed for this test case, there
+    is only r14 (frame pointer) and r15 (stack pointer) left.  When compiling
+    with -O0 the frame pointer is not eliminated and there are no free registers
+    remaining and it will ICE.  */
+ 
+ #include <stdlib.h>
+ #include <string.h>
+ 
+ typedef struct { int c[64]; } obj;
+ obj obj0;
+ obj obj1;
+ 
+ void __attribute__ ((noinline))
+ bar (int a, int b, int c, int d, obj *q)
+ {
+   if (q->c[0] != 0x12345678 || q->c[1] != 0xdeadbeef)
+     abort ();
+ }
+ 
+ void foo (obj *p)
+ {
+   obj bobj;
+   bobj = *p;
+   bar (0, 0, 0, 0, &bobj);
+ }
+ 
+ int
+ main ()
+ {
+   obj0.c[0] = 0x12345678;
+   obj0.c[1] = 0xdeadbeef;
+   foo (&obj0);
+   exit (0);
+ }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/sh/torture/pr55212-c421.c gcc-17-20260705/gcc/testsuite/gcc.target/sh/torture/pr55212-c421.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/sh/torture/pr55212-c421.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/sh/torture/pr55212-c421.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,114 ----
+ /* { dg-additional-options "-m4 -std=c17 -fPIC -fno-math-errno -fno-signed-zeros -fno-tree-vectorize" }  */
+ /* { dg-do compile }  */
+ 
+ typedef struct AVExpr AVExpr;
+ 
+ extern float fabsf (float __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
+ 
+ enum
+ {
+   VAR_C, VAR_VARS_NB
+ };
+ 
+ typedef struct DCTdnoizContext
+ {
+   AVExpr *expr[8];
+   double var_values[8][VAR_VARS_NB];
+ } DCTdnoizContext;
+ 
+ static void __attribute__((always_inline)) inline
+ fdct16_1d (float *dst, const float *src, int dst_stridea,
+            int dst_strideb, int src_stridea, int src_strideb)
+ {
+   int i;
+   for (i = 0; i < 16;  i++)
+   {
+     const float x00 = src[ 0*src_stridea] + src[15*src_stridea];
+     const float x01 = src[ 1*src_stridea] + src[14*src_stridea];
+     const float x02 = src[ 2*src_stridea] + src[13*src_stridea];
+     const float x03 = src[ 3*src_stridea] + src[12*src_stridea];
+     const float x04 = src[ 4*src_stridea] + src[11*src_stridea];
+     const float x05 = src[ 5*src_stridea] + src[10*src_stridea];
+     const float x06 = src[ 6*src_stridea] + src[ 9*src_stridea];
+     const float x07 = src[ 7*src_stridea] + src[ 8*src_stridea];
+     const float x08 = src[ 0*src_stridea] - src[15*src_stridea];
+     const float x09 = src[ 1*src_stridea] - src[14*src_stridea];
+     const float x0a = src[ 2*src_stridea] - src[13*src_stridea];
+     const float x0b = src[ 3*src_stridea] - src[12*src_stridea];
+     const float x0c = src[ 4*src_stridea] - src[11*src_stridea];
+     const float x0d = src[ 5*src_stridea] - src[10*src_stridea];
+     const float x0e = src[ 6*src_stridea] - src[ 9*src_stridea];
+     const float x0f = src[ 7*src_stridea] - src[ 8*src_stridea];
+     const float x10 = x00 + x07;
+     const float x11 = x01 + x06;
+     const float x12 = x02 + x05;
+     const float x13 = x03 + x04;
+     const float x14 = x00 - x07;
+     const float x15 = x01 - x06;
+     const float x16 = x02 - x05;
+     const float x17 = x03 - x04;
+     const float x18 = x10 + x13;
+     const float x19 = x11 + x12;
+     const float x1a = x10 - x13;
+     const float x1b = x11 - x12;
+     const float x1c = 1.38703984532215f*x14 + 0.275899379282943f*x17;
+     const float x1d = 1.17587560241936f*x15 + 0.785694958387102f*x16;
+     const float x1e = -0.785694958387102f*x15 + 1.17587560241936f *x16;
+     const float x1f = 0.275899379282943f*x14 - 1.38703984532215f *x17;
+     const float x20 = 0.25f * (x1c - x1d);
+     const float x21 = 0.25f * (x1e - x1f);
+     const float x22 = 1.40740373752638f *x08 + 0.138617169199091f*x0f;
+     const float x23 = 1.35331800117435f *x09 + 0.410524527522357f*x0e;
+     const float x24 = 1.24722501298667f *x0a + 0.666655658477747f*x0d;
+     const float x25 = 1.09320186700176f *x0b + 0.897167586342636f*x0c;
+     const float x26 = -0.897167586342636f*x0b + 1.09320186700176f *x0c;
+     const float x27 = 0.666655658477747f*x0a - 1.24722501298667f *x0d;
+     const float x28 = -0.410524527522357f*x09 + 1.35331800117435f *x0e;
+     const float x29 = 0.138617169199091f*x08 - 1.40740373752638f *x0f;
+     const float x2a = x22 + x25;
+     const float x2b = x23 + x24;
+     const float x2c = x22 - x25;
+     const float x2d = x23 - x24;
+     const float x2e = 0.25f * (x2a - x2b);
+     const float x2f = 0.326640741219094f*x2c + 0.135299025036549f*x2d;
+     const float x31 = x26 + x29;
+     const float x32 = x27 + x28;
+     const float x33 = x26 - x29;
+     const float x34 = x27 - x28;
+     const float x35 = 0.25f * (x31 - x32);
+     const float x37 = 0.135299025036549f*x33 - 0.326640741219094f*x34;
+     dst[ 3*dst_stridea] = 0.707106781186547f * (x2f - x37);
+     dst[ 4*dst_stridea] = 0.326640741219094f*x1a + 0.135299025036549f*x1b;
+     dst[ 5*dst_stridea] = 0.707106781186547f * (x2f + x37);
+     dst[ 6*dst_stridea] = 0.707106781186547f * (x20 - x21);
+     dst[ 7*dst_stridea] = 0.707106781186547f * (x2e + x35);
+     dst[ 8*dst_stridea] = 0.25f * (x18 - x19);
+     dst[10*dst_stridea] = 0.707106781186547f * (x20 + x21);
+     dst += dst_strideb;
+     src += src_strideb;
+   }
+ }
+ 
+ static __attribute__((always_inline)) inline void
+ filter_freq_16 (const float *src, int src_linesize, float *dst, int dst_linesize,
+                 AVExpr *expr, double *var_values, int sigma_th)
+ {
+   unsigned i;
+   float __attribute__ ((aligned (16))) tmp_block1[16 * 16];
+   float __attribute__ ((aligned (16))) tmp_block2[16 * 16];
+   fdct16_1d(tmp_block2, tmp_block1, 16, 1, 16, 1);
+   for (i = 0;  i < 16*16;  i++)
+   {
+     float *b = &tmp_block2[i];
+     if (expr)
+       var_values[VAR_C] = fabsf(*b);
+   }
+ }
+ 
+ void
+ filter_freq_expr_16 (DCTdnoizContext *s, const float *src, int src_linesize,
+                      float *dst, int dst_linesize, int thread_id)
+ {
+   filter_freq_16 (src, src_linesize, dst, dst_linesize, s->expr[thread_id],
+                   s->var_values[thread_id], 0);
+ }
\ No newline at end of file
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gcc.target/sh/torture/pr55212-c464-3.c gcc-17-20260705/gcc/testsuite/gcc.target/sh/torture/pr55212-c464-3.c
*** gcc-17-20260628/gcc/testsuite/gcc.target/sh/torture/pr55212-c464-3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gcc.target/sh/torture/pr55212-c464-3.c	Sun Jul  5 22:32:15 2026
***************
*** 0 ****
--- 1,54 ----
+ /* { dg-additional-options "-std=c23 -m4 -mfsca -ffast-math" }  */
+ /* { dg-do compile }  */
+ 
+ /* N.B. This case was not posted in the PR but it's related since
+         it's triggered by fsca insn and v2sf usage.  */
+ 
+ typedef float vec4[4];
+ float glm_euler_by_order_angles_2, glm_euler_by_order_angles_1,
+     glm_euler_by_order_angles_0, glm_euler_by_order_dest_2_2,
+     glm_euler_by_order_dest_2_1, glm_euler_by_order_dest_2_0,
+     glm_euler_by_order_dest_0_2, glm_euler_by_order_dest_0_1,
+     glm_euler_by_order_sy, glm_euler_by_order_sz, glm_euler_by_order_cysz,
+     glm_euler_by_order_cysx, glm_euler_by_order_cxcy, glm_euler_by_order_cx,
+     glm_euler_by_order_cy, glm_euler_by_order_cz, glm_euler_by_order_cycz;
+ vec4 *glm_euler_by_order_dest;
+ 
+ typedef enum {
+   GLM_EULER_XZY = 2 << 4,
+   GLM_EULER_ZXY = 4,
+   GLM_EULER_ZYX
+ } glm_euler_seq;
+ glm_euler_seq glm_euler_by_order_ord;
+ 
+ void glm_euler_by_order()
+ {
+   float czsy, sysz;
+   glm_euler_by_order_cx = __builtin_cosf (glm_euler_by_order_angles_0);
+   glm_euler_by_order_sy = __builtin_cosf (glm_euler_by_order_angles_1);
+   glm_euler_by_order_sz = __builtin_cosf (glm_euler_by_order_angles_2);
+   glm_euler_by_order_cycz = glm_euler_by_order_cy * glm_euler_by_order_cz;
+   glm_euler_by_order_cysz = glm_euler_by_order_cy * glm_euler_by_order_sz;
+   glm_euler_by_order_cysx = glm_euler_by_order_cy * glm_euler_by_order_angles_0;
+   glm_euler_by_order_cxcy = glm_euler_by_order_cx * glm_euler_by_order_cy;
+   czsy = glm_euler_by_order_cz * glm_euler_by_order_sy;
+ 
+   switch (glm_euler_by_order_ord)
+   {
+   case GLM_EULER_XZY:
+     glm_euler_by_order_dest_0_1 =
+         glm_euler_by_order_cx * glm_euler_by_order_cysz;
+     break;
+   case GLM_EULER_ZXY:
+     glm_euler_by_order_dest[0][0] =
+         glm_euler_by_order_cycz - glm_euler_by_order_angles_0 * sysz;
+     glm_euler_by_order_dest_0_2 = glm_euler_by_order_cx * glm_euler_by_order_sy;
+     glm_euler_by_order_dest_2_0 =
+         czsy + glm_euler_by_order_cysx * glm_euler_by_order_sz;
+     glm_euler_by_order_dest_2_1 =
+         -glm_euler_by_order_cycz * glm_euler_by_order_angles_0 + sysz;
+     glm_euler_by_order_dest_2_2 = glm_euler_by_order_cxcy;
+   case GLM_EULER_ZYX:
+     glm_euler_by_order_dest[0][0] = glm_euler_by_order_cycz;
+   }
+ }
\ No newline at end of file
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gfortran.dg/asan/pdt_46.f03 gcc-17-20260705/gcc/testsuite/gfortran.dg/asan/pdt_46.f03
*** gcc-17-20260628/gcc/testsuite/gfortran.dg/asan/pdt_46.f03	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gfortran.dg/asan/pdt_46.f03	Sun Jul  5 22:32:16 2026
***************
*** 0 ****
--- 1,59 ----
+ ! { dg-do run }
+ !
+ ! Test the fix for PR83763 in which a dependency was not handled correctly, which
+ ! resulted in a runtime segfault.
+ !
+ ! Contributed by Berke Durak  <berke.durak@gmail.com>
+ !
+ module bar
+   implicit none
+ 
+   type :: foo(n)
+      integer, len :: n = 10
+      real :: vec(n)
+   end type foo
+ 
+ contains
+ 
+   function baz(a) result(b)
+     type(foo(n = *)), intent(in) :: a
+     type(foo(n = a%n)) :: b
+ 
+     b%vec = a%vec * 10
+   end function baz
+ 
+ end module bar
+ 
+ program test
+   use bar
+   implicit none
+   call main1   ! Original report
+   call main2   ! Check for memory loss with allocatable 'x' and 'y'.
+ 
+ contains
+ 
+   subroutine main1
+     type(foo(5)) :: x, y
+     integer :: a(5) = [1,2,3,4,5]
+ 
+     x = foo(5)(a)
+     x = baz (x)            ! Segmentation fault because dependency not handled.
+     if (any (x%vec /= 10 * a)) stop 1
+     y = x
+     x = baz (y)            ! No dependecy and so this worked.
+     if (any (x%vec /= 100 * a)) stop 2
+   end subroutine main1
+ 
+   subroutine main2
+     type(foo(5)), allocatable :: x, y
+     integer :: a(5) = [1,2,3,4,5]
+ 
+     x = foo(5)(a)
+     x = baz (x)            ! Segmentation fault because dependency not handled.
+     if (any (x%vec /= 10 * a)) stop 3
+     y = x
+     x = baz (y)            ! No dependecy and so this worked.
+     if (any (x%vec /= 100 * a)) stop 4
+   end subroutine main2
+ 
+ end program test
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gfortran.dg/asan/pdt_77.f03 gcc-17-20260705/gcc/testsuite/gfortran.dg/asan/pdt_77.f03
*** gcc-17-20260628/gcc/testsuite/gfortran.dg/asan/pdt_77.f03	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gfortran.dg/asan/pdt_77.f03	Sun Jul  5 22:32:16 2026
***************
*** 0 ****
--- 1,75 ----
+ ! { dg-do run }
+ !
+ ! Test the fix for PR110012, which failed to compile with an ICE.
+ ! Later, it was found that mfe_disc_test was leaking memory because
+ ! the 'navier_stokes' component p was given the PDT template dynamic
+ ! type, rather than that of the correct instance. This is detected
+ ! by the added, final subroutine being called twice, rather than
+ ! once (PR121972).
+ !
+ ! Contributed by Neil Carlson  <neil.n.carlson@gmail.com>
+ !
+ module pde_class
+   type, abstract :: pde(npde)
+     integer,len :: npde
+   end type
+ end module
+ 
+ module navier_stokes_type
+   use pde_class
+   type, extends(pde) :: navier_stokes
+     integer, allocatable :: data_(:)
+   contains
+     final :: finalIze_navier_stokes
+   end type
+   integer :: ctr = 0
+ contains
+   subroutine alloc_navier_stokes(p , n)
+     class(pde(:)), allocatable :: p
+     integer :: n
+     allocate(navier_stokes(npde=n) :: p)
+     select type (p)
+       type is (navier_stokes(*))
+         p%data_ = [(i, i = 1, p%npde)]
+     end select
+   end subroutine
+   impure elemental subroutine finalIze_navier_stokes (self)
+     type(navier_stokes), intent(inout) :: self
+     ctr = ctr + 1
+   end
+ end module
+ 
+ module mfe_disc_type
+   use pde_class
+   type :: foo
+     class(pde(:)), allocatable :: p ! This caused the ICE in resolution.
+   end type
+ end module
+ 
+ program test
+   use navier_stokes_type
+   call navier_stokes_test
+   call mfe_disc_test
+   if (ctr /= 2) stop 3
+ contains
+   subroutine navier_stokes_test
+     class (pde(:)), allocatable :: x
+     call alloc_navier_stokes (x, 4)
+     select type (x)
+       type is (navier_stokes(*))
+         if (any (x%data_ /= [1,2,3,4])) stop 1
+     end select
+   end subroutine
+ 
+   subroutine mfe_disc_test
+     use mfe_disc_type
+     type (foo), allocatable :: x
+     allocate (x)
+     call alloc_navier_stokes (x%p, 3)
+     select type (z => x%p)
+       type is (navier_stokes(*))
+         if (any (z%data_ /= [1,2,3])) stop 2
+     end select
+     if (allocated (x) .and. allocated (x%p)) deallocate (x%p)
+   end subroutine
+ end program
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gfortran.dg/contiguous_17.f90 gcc-17-20260705/gcc/testsuite/gfortran.dg/contiguous_17.f90
*** gcc-17-20260628/gcc/testsuite/gfortran.dg/contiguous_17.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gfortran.dg/contiguous_17.f90	Sun Jul  5 22:32:16 2026
***************
*** 0 ****
--- 1,229 ----
+ ! { dg-do run }
+ !
+ ! PR fortran/125998
+ ! Check the correct passing of a transposed array to an assumed-shape dummy
+ ! having the contiguous and target attributes.
+ !
+ ! Original testcase from Federico Perini <federico.perini@gmail.com>
+ 
+ subroutine original
+     real(8) :: a(3,4)
+     integer :: dims(2)           
+     character(48) :: iomsg  
+     call show(transpose(a),dims)
+     if (any(dims/=shape(transpose(a)))) then 
+         write(iomsg,1) 'invalid a^T dims',dims, &
+                        ' should be',shape(transpose(a))
+         error stop iomsg
+     endif
+     1 format(*(a,' [',i0,',',i0,']'))
+ 
+ contains
+ 
+     subroutine show(x,dims)
+         ! "3 4" with `contiguous` (BUG); "4 3" without
+         real(8), intent(in), target, contiguous :: x(:,:)
+         integer, intent(out) :: dims(2)    
+         dims = [size(x,1),size(x,2)]
+     end 
+ 
+ end
+ 
+ module m
+     implicit none
+     private
+     public :: check_all
+ 
+ contains
+ 
+     subroutine abort_different(lx,x,ly,y,code)
+         character(*), intent(in) :: lx, ly
+         integer, intent(in) :: x(..), y(..), code
+         write(6,'(a," /= ",a)') lx, ly
+         select rank(x)
+             rank(1)
+                 write(6,3) lx
+                 write(6,*) x
+             rank(2)
+                 write(6,3) lx
+                 write(6,*) x
+             rank default
+         end select
+         select rank(y)
+             rank(1)
+                 write(6,3) ly
+                 write(6,*) y
+             rank(2)
+                 write(6,3) ly
+                 write(6,*) y
+             rank default
+         end select
+         error stop code
+       3 format(a,":")
+     end subroutine
+ 
+     subroutine check_target(x,expected,num_error)
+         integer, intent(in), target, contiguous :: x(:,:)
+         integer, intent(in) :: num_error, expected(:,:)
+         if (any(shape(x) /= shape(expected))) then
+             call abort_different( &
+                     "shape(x)",shape(x), &
+                     "shape(expected)",shape(expected), &
+                     num_error*10+1 &
+             )
+         end if
+         if (any(x /= expected)) then
+             call abort_different("x",x,"expected",expected,num_error*10+2)
+         end if
+         if (x(2,2) /= expected(2,2)) then
+             call abort_different( &
+                 "x(2,2)",x(2,2), &
+                 "expected(2,2)",expected(2,2), &
+                 num_error*10+3 &
+             )
+         end if
+     end 
+ 
+     subroutine check_non_target(x,expected,num_error)
+         integer, intent(in), contiguous :: x(:,:)
+         integer, intent(in) :: num_error, expected(:,:)
+         if (any(shape(x) /= shape(expected))) then
+             call abort_different( &
+                     "shape(x)",shape(x), &
+                     "shape(expected)",shape(expected), &
+                     num_error*10+1 &
+             )
+         end if
+         if (any(x /= expected)) then
+             call abort_different("x",x,"expected",expected,num_error*10+2)
+         end if
+         if (x(2,2) /= expected(2,2)) then
+             call abort_different( &
+                 "x(2,2)",x(2,2), &
+                 "expected(2,2)",expected(2,2), &
+                 num_error*10+3 &
+             )
+         end if
+     end 
+ 
+     subroutine wrapper_target(x,expected,num_error)
+         integer, intent(in), target :: x(:,:)
+         integer, intent(in) :: expected(:,:)
+         integer, intent(in) :: num_error
+         call check_target(x,expected,num_error)
+     end subroutine
+ 
+     subroutine wrapper_non_target(x,expected,num_error)
+         integer, intent(in) :: x(:,:), expected(:,:)
+         integer, intent(in) :: num_error
+         call check_non_target(x,expected,num_error)
+     end subroutine
+ 
+     subroutine wrapper_transpose_target(x,expected,num_error)
+         integer, intent(in), target :: x(:,:)
+         integer, intent(in) :: expected(:,:)
+         integer, intent(in) :: num_error
+         call check_target(transpose(x),expected,num_error)
+     end subroutine
+ 
+     subroutine wrapper_transpose_non_target(x,expected,num_error)
+         integer, intent(in) :: x(:,:), expected(:,:)
+         integer, intent(in) :: num_error
+         call check_non_target(transpose(x),expected,num_error)
+     end subroutine
+ 
+     subroutine check_all
+         integer :: a(3,4)
+ 
+         a = reshape([0,1,1,2,3,5,8,13,21,34,55,89],shape(a))
+         call check_target( &
+                 transpose(a), &
+                 reshape([0,2,8,34,1,3,13,55,1,5,21,89],[4,3]), &
+                 1 &
+         )
+ 
+         a = reshape([0,1,1,2,3,5,8,13,21,34,55,89],shape(a))
+         call check_non_target( &
+                 transpose(a), &
+                 reshape([0,2,8,34,1,3,13,55,1,5,21,89],[4,3]), &
+                 2 &
+         )
+ 
+         a = reshape([0,1,1,2,3,5,8,13,21,34,55,89],shape(a))
+         call wrapper_target( &
+                 transpose(a), &
+                 reshape([0,2,8,34,1,3,13,55,1,5,21,89],[4,3]), &
+                 3 &
+         )
+ 
+         a = reshape([0,1,1,2,3,5,8,13,21,34,55,89],shape(a))
+         call wrapper_non_target( &
+                 transpose(a), &
+                 reshape([0,2,8,34,1,3,13,55,1,5,21,89],[4,3]), &
+                 4 &
+         )
+ 
+         a = reshape([0,1,1,2,3,5,8,13,21,34,55,89],shape(a))
+         call wrapper_transpose_target( &
+                 a, &
+                 reshape([0,2,8,34,1,3,13,55,1,5,21,89],[4,3]), &
+                 5 &
+         )
+ 
+         a = reshape([0,1,1,2,3,5,8,13,21,34,55,89],shape(a))
+         call wrapper_transpose_non_target( &
+                 a, &
+                 reshape([0,2,8,34,1,3,13,55,1,5,21,89],[4,3]), &
+                 6 &
+         )
+ 
+         a = reshape([0,1,1,2,3,5,8,13,21,34,55,89],shape(a))
+         call wrapper_transpose_target( &
+                 transpose(a), &
+                 reshape([0,1,1,2,3,5,8,13,21,34,55,89],[3,4]), &
+                 7 &
+         )
+ 
+         a = reshape([0,1,1,2,3,5,8,13,21,34,55,89],shape(a))
+         call wrapper_transpose_non_target( &
+                 transpose(a), &
+                 reshape([0,1,1,2,3,5,8,13,21,34,55,89],[3,4]), &
+                 8 &
+         )
+ 
+         a = reshape([0,1,1,2,3,5,8,13,21,34,55,89],shape(a))
+         call check_target( &
+                 a(::2,::2), &
+                 reshape([0,1,8,21],[2,2]), &
+                 9 &
+         )
+ 
+         a = reshape([0,1,1,2,3,5,8,13,21,34,55,89],shape(a))
+         call check_non_target( &
+                 a(::2,::2), &
+                 reshape([0,1,8,21],[2,2]), &
+                 10 &
+         )
+ 
+         a = reshape([0,1,1,2,3,5,8,13,21,34,55,89],shape(a))
+         call wrapper_target( &
+                 a(::2,::2), &
+                 reshape([0,1,8,21],[2,2]), &
+                 11 &
+         )
+ 
+         a = reshape([0,1,1,2,3,5,8,13,21,34,55,89],shape(a))
+         call wrapper_non_target( &
+                 a(::2,::2), &
+                 reshape([0,1,8,21],[2,2]), &
+                 12 &
+         )
+ 
+     end subroutine
+ 
+ end module
+ 
+ use m
+ call original
+ call check_all
+ end
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gfortran.dg/gomp/allocate-1.f90 gcc-17-20260705/gcc/testsuite/gfortran.dg/gomp/allocate-1.f90
*** gcc-17-20260628/gcc/testsuite/gfortran.dg/gomp/allocate-1.f90	Sun Jun 28 22:32:16 2026
--- gcc-17-20260705/gcc/testsuite/gfortran.dg/gomp/allocate-1.f90	Sun Jul  5 22:32:16 2026
*************** module omp_lib_kinds
*** 24,29 ****
--- 24,33 ----
       parameter :: omp_pteam_mem_alloc = 7
    integer (kind=omp_allocator_handle_kind), &
       parameter :: omp_thread_mem_alloc = 8
+ 
+   integer, parameter :: omp_memspace_handle_kind = c_intptr_t
+   integer (omp_memspace_handle_kind), &
+      parameter :: omp_default_mem_space = 0
  end module
  
  subroutine bar (a, b, c)
*************** subroutine foo(x, y)
*** 80,86 ****
    
    !$omp target teams distribute parallel do private (x) firstprivate (y) &
    !$omp allocate ((omp_default_mem_alloc + 0):z) allocate &
!   !$omp (omp_default_mem_alloc: x, y) allocate (h: r) lastprivate (z) reduction(+:r)
    do i = 1, 10
      call bar (0, x, z);
      call bar2 (1, y, r);
--- 84,91 ----
    
    !$omp target teams distribute parallel do private (x) firstprivate (y) &
    !$omp allocate ((omp_default_mem_alloc + 0):z) allocate &
!   !$omp (omp_default_mem_alloc: x, y) allocate (h: r) lastprivate (z) reduction(+:r) &
!   !$omp uses_allocators(memspace(omp_default_mem_space) : h)
    do i = 1, 10
      call bar (0, x, z);
      call bar2 (1, y, r);
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gfortran.dg/gomp/scope-6.f90 gcc-17-20260705/gcc/testsuite/gfortran.dg/gomp/scope-6.f90
*** gcc-17-20260628/gcc/testsuite/gfortran.dg/gomp/scope-6.f90	Sun Jun 28 22:32:16 2026
--- gcc-17-20260705/gcc/testsuite/gfortran.dg/gomp/scope-6.f90	Sun Jul  5 22:32:16 2026
*************** contains
*** 20,23 ****
    end
  end
  
! ! { dg-final { scan-tree-dump "omp scope private\\(a\\) firstprivate\\(b\\) reduction\\(\\+:c\\) allocate\\(allocator\\(D\\.\[0-9\]+\\):a\\) allocate\\(allocator\\(D\\.\[0-9\]+\\):b\\) allocate\\(allocator\\(D\\.\[0-9\]+\\):c\\)" "original" } }
--- 20,23 ----
    end
  end
  
! ! { dg-final { scan-tree-dump "omp scope private\\(a\\) firstprivate\\(b\\) reduction\\(\\+:c\\) allocate\\(allocator\\(h\\):a\\) allocate\\(allocator\\(h\\):b\\) allocate\\(allocator\\(h\\):c\\)" "original" } }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gfortran.dg/pdt_46.f03 gcc-17-20260705/gcc/testsuite/gfortran.dg/pdt_46.f03
*** gcc-17-20260628/gcc/testsuite/gfortran.dg/pdt_46.f03	Sun Jun 28 22:32:16 2026
--- gcc-17-20260705/gcc/testsuite/gfortran.dg/pdt_46.f03	Sun Jul  5 22:32:16 2026
*************** contains
*** 59,62 ****
  
  end program test
  ! { dg-final { scan-tree-dump-times "__builtin_free" 16 "original" } }
! ! { dg-final { scan-tree-dump-times "__builtin_malloc" 12 "original" } }
--- 59,63 ----
  
  end program test
  ! { dg-final { scan-tree-dump-times "__builtin_free" 16 "original" } }
! ! { dg-final { scan-tree-dump-times "__builtin_malloc" 8 "original" } }
! ! { dg-final { scan-tree-dump-times "__builtin_calloc" 4 "original" } }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gfortran.dg/pdt_50.f03 gcc-17-20260705/gcc/testsuite/gfortran.dg/pdt_50.f03
*** gcc-17-20260628/gcc/testsuite/gfortran.dg/pdt_50.f03	Sun Jun 28 22:32:16 2026
--- gcc-17-20260705/gcc/testsuite/gfortran.dg/pdt_50.f03	Sun Jul  5 22:32:16 2026
***************
*** 50,54 ****
      call sr
      deallocate (d%p_t1)
  end
! ! { dg-final { scan-tree-dump-times "__builtin_malloc" 8 "original" } }
  ! { dg-final { scan-tree-dump-times "__builtin_free" 9 "original" } }
--- 50,55 ----
      call sr
      deallocate (d%p_t1)
  end
! ! { dg-final { scan-tree-dump-times "__builtin_malloc" 7 "original" } }
! ! { dg-final { scan-tree-dump-times "__builtin_calloc" 1 "original" } }
  ! { dg-final { scan-tree-dump-times "__builtin_free" 9 "original" } }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gfortran.dg/pdt_70.f03 gcc-17-20260705/gcc/testsuite/gfortran.dg/pdt_70.f03
*** gcc-17-20260628/gcc/testsuite/gfortran.dg/pdt_70.f03	Sun Jun 28 22:32:16 2026
--- gcc-17-20260705/gcc/testsuite/gfortran.dg/pdt_70.f03	Sun Jul  5 22:32:16 2026
***************
*** 3,8 ****
--- 3,14 ----
  ! PR104650
  ! Contributed by Gerhard Steinmetz  <gscfq@t-online.de>
  !
+ ! Sometime later, after the original fix, it was noted that this test
+ ! leaked memory. This was originally because subroutine finalize_t1m
+ ! was unavailable. Adding it, resulted in the first in the FINAL list
+ ! not being called. This has been retained and a dimension-3 variable
+ ! 'e' added.
+ !
  module m1
     type t1
        integer :: i
*************** module m2
*** 30,36 ****
      integer, kind :: k
      real(k), pointer :: vector(:) => NULL ()
    contains
!     final :: finalize_t1s, finalize_t1v, finalize_t2e
    end type
  
    integer :: flag = 0
--- 36,42 ----
      integer, kind :: k
      real(k), pointer :: vector(:) => NULL ()
    contains
!     final :: finalize_t1s, finalize_t1v, finalize_t1m, finalize_t2e
    end type
  
    integer :: flag = 0
*************** contains
*** 51,56 ****
--- 57,72 ----
      end do
    end subroutine
  
+   impure subroutine finalize_t1m(x)
+     type(t(kind(0.0))) x(:,:)
+     do i = lbound(x,1), ubound(x,1)
+       do j = lbound(x,2), ubound(x,2)
+         if (associated(x(i,j)%vector)) deallocate(x(i,j)%vector)
+         flag = flag + 1
+       end do
+     end do
+   end subroutine
+ 
    impure elemental subroutine finalize_t2e(x)
      type(t(kind(0.0d0))), intent(inout) :: x
      if (associated(x%vector)) deallocate(x%vector)
*************** end module
*** 80,86 ****
  
  ! Test the standard example
    call example (dims)
!   if (flag /= 11 + dims**2) stop 2
  
  contains
  
--- 96,102 ----
  
  ! Test the standard example
    call example (dims)
!   if (flag /= 11 + 2 * dims**2) stop 2
  
  contains
  
*************** contains
*** 94,112 ****
  ! Returning from 'example' will effectively do
  !    call finalize_t1s(a)
  !    call finalize_t1v(b)
  !    call finalize_t2e(d)
! ! No final subroutine will be called for variable C because the user
  ! omitted to define a suitable specific procedure for it.
    subroutine example(n)
!   type(t(kind(0.0))) a, b(10), c(n,2)
    type(t(kind(0.0d0))) d(n,n)
-   real(kind(0.0)),target :: tgt(1)
  
    ! Explicit allocation to provide a valid memory refence for deallocation.
    call alloc_ts(a)
    call alloc_ts(b)
    call alloc_ts(c)
    call alloc_td(d)
    end subroutine
  
  end
--- 110,129 ----
  ! Returning from 'example' will effectively do
  !    call finalize_t1s(a)
  !    call finalize_t1v(b)
+ !    call finalize_t1m(c)
  !    call finalize_t2e(d)
! ! No final subroutine will be called for variable e because the user
  ! omitted to define a suitable specific procedure for it.
    subroutine example(n)
!   type(t(kind(0.0))) a, b(10), c(n,2), e(2,2,2)
    type(t(kind(0.0d0))) d(n,n)
  
    ! Explicit allocation to provide a valid memory refence for deallocation.
    call alloc_ts(a)
    call alloc_ts(b)
    call alloc_ts(c)
    call alloc_td(d)
+   call alloc_ts(e)
    end subroutine
  
  end
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gfortran.dg/pdt_86.f03 gcc-17-20260705/gcc/testsuite/gfortran.dg/pdt_86.f03
*** gcc-17-20260628/gcc/testsuite/gfortran.dg/pdt_86.f03	Sun Jun 28 22:32:16 2026
--- gcc-17-20260705/gcc/testsuite/gfortran.dg/pdt_86.f03	Sun Jul  5 22:32:16 2026
***************
*** 1,4 ****
--- 1,5 ----
  ! { dg-do run }
+ ! { dg-options "-fdump-tree-original" }
  !
  ! Test the fix for PR122902. Line 47 gave "free(): invalid pointer".
  !
*************** end submodule
*** 55,57 ****
--- 56,60 ----
    if (allocated(input_output_pairs)) deallocate(input_output_pairs)
    if (allocated(mini_batch)) deallocate(mini_batch)
  end
+ ! { dg-final { scan-tree-dump-times "__builtin_malloc" 31 "original" } }
+ ! { dg-final { scan-tree-dump-times "__builtin_free" 41 "original" } }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gfortran.dg/pdt_86_reduced.f90 gcc-17-20260705/gcc/testsuite/gfortran.dg/pdt_86_reduced.f90
*** gcc-17-20260628/gcc/testsuite/gfortran.dg/pdt_86_reduced.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gfortran.dg/pdt_86_reduced.f90	Sun Jul  5 22:32:16 2026
***************
*** 0 ****
--- 1,26 ----
+ ! { dg-do compile }
+ ! { dg-options "-fdump-tree-original" }
+ !
+ ! Check the fix for the memory leak in pdt_77.f03. This test is a reduced
+ ! version of the original that isolates the source of the leak. Note that
+ ! the leak is not PDT specific.
+ !
+ module input_output_pair_m
+   implicit none
+   type tensor_t                             ! No longer a PDT!
+     real(kind(1e0)), allocatable :: values_(:)
+   end type
+ end module
+ 
+   use input_output_pair_m
+   call test
+ contains
+   subroutine test
+     implicit none
+     type(tensor_t), allocatable :: inputs(:)
+     integer :: i
+     inputs = [(tensor_t([real(i)]), i=1,2)] ! Leaked 8 bytes in 2 blocks.
+   end
+ end
+ ! { dg-final { scan-tree-dump-times "__builtin_malloc" 7 "original" } }
+ ! { dg-final { scan-tree-dump-times "__builtin_free" 8 "original" } }
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gfortran.dg/pr84622.f90 gcc-17-20260705/gcc/testsuite/gfortran.dg/pr84622.f90
*** gcc-17-20260628/gcc/testsuite/gfortran.dg/pr84622.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gfortran.dg/pr84622.f90	Sun Jul  5 22:32:16 2026
***************
*** 0 ****
--- 1,15 ----
+ ! { dg-do compile }
+ ! { dg-options "-fcoarray=single" }
+ !
+ ! Previously s/CLASS/TYPE at line 12 caught the error.
+ !
+ ! Contributed by Damian ROuson  <damian@archaeologic.codes>
+ !
+   type foo
+     logical, allocatable :: bar[:]
+   end type
+ contains
+   subroutine foobar(this) ! { dg-error "or have coarray components" }
+     class(foo), intent(out) :: this
+   end subroutine
+ end
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gfortran.dg/stop_function_code_1.f90 gcc-17-20260705/gcc/testsuite/gfortran.dg/stop_function_code_1.f90
*** gcc-17-20260628/gcc/testsuite/gfortran.dg/stop_function_code_1.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gfortran.dg/stop_function_code_1.f90	Sun Jul  5 22:32:16 2026
***************
*** 0 ****
--- 1,14 ----
+ ! { dg-do compile }
+ ! PR fortran/126018 - Stop code may be a function call (CHARACTER or INTEGER)
+ program p
+   implicit none
+   error stop character_stop ()   ! was: "must be either INTEGER or CHARACTER"
+   stop integer_stop ()           ! likewise for integer
+ contains
+   character (1) function character_stop ()
+     character_stop = "a"
+   end function character_stop
+   integer function integer_stop ()
+     integer_stop = 1
+   end function integer_stop
+ end program p
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gfortran.dg/warn_undefined_vars_5.f90 gcc-17-20260705/gcc/testsuite/gfortran.dg/warn_undefined_vars_5.f90
*** gcc-17-20260628/gcc/testsuite/gfortran.dg/warn_undefined_vars_5.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gfortran.dg/warn_undefined_vars_5.f90	Sun Jul  5 22:32:16 2026
***************
*** 0 ****
--- 1,10 ----
+ ! { dg-do compile }
+ ! { dg-additional-options "-Wundefined-vars" }
+ program memain
+   implicit none
+   integer :: n, m
+   namelist /n1/ n
+   namelist /n2/ m
+   write (*,n1) ! { dg-warning "Undefined variable" }
+   write (*,nml=n2) ! { dg-warning "Undefined variable" }
+ end program memain
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gfortran.dg/warn_undefined_vars_6.f90 gcc-17-20260705/gcc/testsuite/gfortran.dg/warn_undefined_vars_6.f90
*** gcc-17-20260628/gcc/testsuite/gfortran.dg/warn_undefined_vars_6.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gfortran.dg/warn_undefined_vars_6.f90	Sun Jul  5 22:32:16 2026
***************
*** 0 ****
--- 1,15 ----
+ ! { dg-do compile }
+ ! { dg-additional-options "-Wundefined-vars -std=legacy" }
+ ! PR 126090 - warnings with STOP and friends
+ program memain
+   character(8) :: s
+   character(8) :: s1, s2, s3
+   s = "abc"
+   error stop s
+   stop s
+   pause s ! { dg-warning "Deleted feature" }
+   error stop s1 ! { dg-warning "Undefined variable" }
+   stop s2 ! { dg-warning "Undefined variable" }
+   pause s3 ! { dg-warning "Undefined variable" }
+   ! { dg-warning "Deleted feature" " " { target "*-*-*" } .-1 }
+ end program memain
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gnat.dg/opt109.adb gcc-17-20260705/gcc/testsuite/gnat.dg/opt109.adb
*** gcc-17-20260628/gcc/testsuite/gnat.dg/opt109.adb	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gnat.dg/opt109.adb	Sun Jul  5 22:32:16 2026
***************
*** 0 ****
--- 1,13 ----
+ -- { dg-do run }
+ -- { dg-options "-O" }
+ 
+ with Opt109_Pkg; use Opt109_Pkg;
+ 
+ procedure Opt109 is
+   S : constant String := "Hello World!";
+   R : constant Rec := F (S);
+ begin
+   if R.B.Data.all /= S then
+     raise Program_Error;
+   end if;
+ end;
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gnat.dg/opt109_pkg.adb gcc-17-20260705/gcc/testsuite/gnat.dg/opt109_pkg.adb
*** gcc-17-20260628/gcc/testsuite/gnat.dg/opt109_pkg.adb	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gnat.dg/opt109_pkg.adb	Sun Jul  5 22:32:16 2026
***************
*** 0 ****
--- 1,16 ----
+ package body Opt109_Pkg is
+ 
+    function F (Value : String) return Rec is
+    begin
+       if Value'Length > Max then
+          return Result : Rec (Is_Small => False) do
+             Result.B.Data := new String'(Value);
+          end return;
+       else
+          return Result : Rec (Is_Small => True) do
+             Result.S.Data (Value'Length + 1 .. Max) := (others => ' ');
+          end return;
+       end if;
+    end;
+ 
+ end Opt109_Pkg;
diff -Nrcpad gcc-17-20260628/gcc/testsuite/gnat.dg/opt109_pkg.ads gcc-17-20260705/gcc/testsuite/gnat.dg/opt109_pkg.ads
*** gcc-17-20260628/gcc/testsuite/gnat.dg/opt109_pkg.ads	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/gcc/testsuite/gnat.dg/opt109_pkg.ads	Sun Jul  5 22:32:16 2026
***************
*** 0 ****
--- 1,33 ----
+ with System;
+ 
+ package Opt109_Pkg is
+ 
+    Max : constant Natural := 7;
+    subtype Small_String_Size is Natural range 0 .. Max;
+ 
+    type Small_String is record
+       Is_Small : Boolean;
+       Length   : Small_String_Size;
+       Data     : aliased String (1 .. Max);
+    end record;
+ 
+    type Big_String_Access is access all String;
+ 
+    type Big_String is record
+       Data : Big_String_Access := null;
+    end record;
+ 
+    for Big_String use record
+       Data at 0 range 0 .. System.Word_Size - 1;
+    end record;
+ 
+    type Rec (Is_Small : Boolean := True) is record
+       case Is_Small is
+          when True  => S : Small_String;
+          when False => B : Big_String;
+       end case;
+    end record with Unchecked_Union;
+ 
+    function F (Value : String) return Rec;
+ 
+ end Opt109_Pkg;
diff -Nrcpad gcc-17-20260628/gcc/testsuite/lib/target-supports.exp gcc-17-20260705/gcc/testsuite/lib/target-supports.exp
*** gcc-17-20260628/gcc/testsuite/lib/target-supports.exp	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/gcc/testsuite/lib/target-supports.exp	Sun Jul  5 22:32:16 2026
*************** proc check_effective_target_section_anch
*** 10364,10370 ****
  # Return 1 if the target supports atomic operations on "int_128" values.
  
  proc check_effective_target_sync_int_128 { } {
!     return 0
  }
  
  # Return 1 if the target supports atomic operations on "int_128" values
--- 10364,10378 ----
  # Return 1 if the target supports atomic operations on "int_128" values.
  
  proc check_effective_target_sync_int_128 { } {
!     return [check_no_messages_and_pattern sync_int_128 \
! 	    "!__atomic_compare_exchange_16" assembly {
! 	__int128 v;
! 	void foo (__int128 *expected, __int128 desired)
! 	  {
! 	    __atomic_compare_exchange_n (&v, expected, desired, 0,
! 					__ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
! 	  }
!     } "" ]
  }
  
  # Return 1 if the target supports atomic operations on "int_128" values
*************** proc check_effective_target_amx_avx512 {
*** 11547,11563 ****
      } "-mamx-avx512" ]
  }
  
- # Return 1 if amx-tf32 instructions can be compiled.
- proc check_effective_target_amx_tf32 { } {
-     return [check_no_compiler_messages amx_tf32 object {
- 	void
- 	foo ()
- 	{
- 	  __asm__ volatile ("tmmultf32ps\t%%tmm1, %%tmm2, %%tmm3" ::);
- 	}
-     } "-mamx-tf32" ]
- }
- 
  # Return 1 if amx-fp8 instructions can be compiled.
  proc check_effective_target_amx_fp8 { } {
      return [check_no_compiler_messages amx_fp8 object {
--- 11555,11560 ----
*************** proc check_effective_target_aarch64_gas_
*** 12895,12900 ****
--- 12892,12908 ----
      }]
  }
  
+ # Return 1 if Gas supports DTPREL Relocation on AArch64 target
+ proc check_effective_target_aarch64_gas_has_dtprel_reloc { } {
+     if { ![istarget aarch64*-*-*] || ![check_effective_target_tls_native] } {
+ 	return 0
+     }
+     return [check_no_compiler_messages aarch64_gas_has_dtprel_reloc object {
+ 	/* Assembly */
+ 	.xword %dtprel(expr)
+     }]
+ }
+ 
  # Create functions to check that the AArch64 assembler supports the
  # various architecture extensions via the .arch_extension pseudo-op.
  
*************** set exts {
*** 12906,12912 ****
      "sme-f8f16" "sme-f8f32"
      "sme-b16b16" "sme-f16f16" "sme-i16i64" "sme" "sme2" "sme2p1" "sme2p2"
      "ssve-fp8dot2" "ssve-fp8dot4" "ssve-fp8fma" "sve-bfscale" "sme-lutv2"
!     "ssve-fexpa" "ssve-bitperm"
  }
  
  foreach { aarch64_ext } $exts {
--- 12914,12920 ----
      "sme-f8f16" "sme-f8f32"
      "sme-b16b16" "sme-f16f16" "sme-i16i64" "sme" "sme2" "sme2p1" "sme2p2"
      "ssve-fp8dot2" "ssve-fp8dot4" "ssve-fp8fma" "sve-bfscale" "sme-lutv2"
!     "ssve-fexpa" "ssve-bitperm" "ssve-aes"
  }
  
  foreach { aarch64_ext } $exts {
diff -Nrcpad gcc-17-20260628/gcc/testsuite/objc.dg/image-info.m gcc-17-20260705/gcc/testsuite/objc.dg/image-info.m
*** gcc-17-20260628/gcc/testsuite/objc.dg/image-info.m	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/gcc/testsuite/objc.dg/image-info.m	Sun Jul  5 22:32:16 2026
*************** extern void abort(void);
*** 39,42 ****
  @end
  
  /* { dg-final { scan-assembler "\t.section __OBJC, __image_info.*\n\t.align.*\nL_OBJC_ImageInfo.*:\n\t.long\t0\n\t.long\t1"  { target { *-*-darwin* && { ! lp64 } } } } } */
! /* { dg-final { scan-assembler "\t.section __DATA, __objc_imageinfo.*\n\t.align.*\nL_OBJC_ImageInfo.*:\n\t.long\t0\n\t.long\t17" { target { *-*-darwin* && { lp64 } } } } } */
--- 39,42 ----
  @end
  
  /* { dg-final { scan-assembler "\t.section __OBJC, __image_info.*\n\t.align.*\nL_OBJC_ImageInfo.*:\n\t.long\t0\n\t.long\t1"  { target { *-*-darwin* && { ! lp64 } } } } } */
! /* { dg-final { scan-assembler "\t.section __DATA, __objc_imageinfo.*\n\t.align.*\nL_OBJC_ImageInfo.*:\n\t.long\t0\n\t.long\t1" { target { *-*-darwin* && { lp64 } } } } } */
diff -Nrcpad gcc-17-20260628/gcc/tree-call-cdce.cc gcc-17-20260705/gcc/tree-call-cdce.cc
*** gcc-17-20260628/gcc/tree-call-cdce.cc	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/gcc/tree-call-cdce.cc	Sun Jul  5 22:32:17 2026
*************** along with GCC; see the file COPYING3.
*** 37,43 ****
  #include "internal-fn.h"
  #include "tree-dfa.h"
  #include "tree-eh.h"
! 
  
  /* This pass serves two closely-related purposes:
  
--- 37,45 ----
  #include "internal-fn.h"
  #include "tree-dfa.h"
  #include "tree-eh.h"
! #include "tree-ssanames.h"
! #include "gimple-fold.h"
! 
  
  /* This pass serves two closely-related purposes:
  
*************** use_internal_fn (gcall *call)
*** 1255,1260 ****
--- 1257,1353 ----
  					    is_arg_conds ? new_call : NULL);
  }
  
+ /* Return true if LEN is an SSA_NAME known to have a boolean range, i.e. its
+    value is provably in [0, 1].  */
+ 
+ static bool
+ len_has_boolean_range_p (tree len, gimple *stmt)
+ {
+   if (TREE_CODE (len) != SSA_NAME || !INTEGRAL_TYPE_P (TREE_TYPE (len)))
+     return false;
+   return ssa_name_has_boolean_range (len, stmt);
+ }
+ 
+ /* Return true if CALL is a supported length-taking builtin whose length
+    argument is an SSA name known to have a boolean range.  On success,
+    set LEN_ARG to the argument index of the length.  */
+ 
+ static bool
+ can_shrink_wrap_len_p (gcall *call, unsigned *len_arg)
+ {
+   if (!gimple_call_builtin_p (call, BUILT_IN_MEMSET)
+       || !gimple_vdef (call))
+     return false;
+ 
+   constexpr unsigned memset_len_arg = 2;
+   if (gimple_call_num_args (call) <= memset_len_arg)
+     return false;
+ 
+   tree len = gimple_call_arg (call, memset_len_arg);
+   if (!len_has_boolean_range_p (len, call))
+     return false;
+ 
+   *len_arg = memset_len_arg;
+   return true;
+ }
+ 
+ /* Generate the condition vector that guards a call whose LEN is known to be
+    in [0, 1]: skip the call when LEN is zero.  */
+ 
+ static void
+ gen_zero_len_conditions (tree len, vec<gimple *> &conds, unsigned *nconds)
+ {
+   tree zero = build_zero_cst (TREE_TYPE (len));
+ 
+   gcc_assert (nconds);
+   conds.quick_push (gimple_build_cond (EQ_EXPR, len, zero,
+ 				       NULL_TREE, NULL_TREE));
+   *nconds = 1;
+ }
+ 
+ /* Shrink-wrap CALL whose LEN_ARG argument is known to be in [0, 1].
+    ZERO_LEN_RESULT is the value of the call result when its length is zero.
+    On the guarded path the length is one, so pin it to a constant for
+    subsequent folding.  */
+ 
+ static void
+ shrink_wrap_len_call (gcall *call, unsigned len_arg, tree zero_len_result)
+ {
+   tree lhs = gimple_call_lhs (call);
+ 
+   /* Define the result on both the guarded and bypass paths before wrapping.  */
+   if (lhs)
+     {
+       gcc_assert (zero_len_result);
+       location_t loc = gimple_location (call);
+       gimple_stmt_iterator gsi = gsi_for_stmt (call);
+ 
+       zero_len_result = gimple_convert (&gsi, true, GSI_SAME_STMT, loc,
+ 					TREE_TYPE (lhs), zero_len_result);
+       gassign *stmt = gimple_build_assign (lhs, zero_len_result);
+       gimple_set_location (stmt, loc);
+       gsi_insert_before (&gsi, stmt, GSI_SAME_STMT);
+ 
+       gimple_call_set_lhs (call, NULL_TREE);
+       SSA_NAME_DEF_STMT (lhs) = stmt;
+       update_stmt (call);
+     }
+ 
+   tree len = gimple_call_arg (call, len_arg);
+   unsigned nconds = 0;
+   auto_vec<gimple *, 1> conds;
+   gen_zero_len_conditions (len, conds, &nconds);
+   gcc_assert (nconds != 0);
+ 
+   shrink_wrap_one_built_in_call_with_conds (call, conds, nconds);
+ 
+   /* On the guarded path the length is one.  */
+   gimple_call_set_arg (call, len_arg, build_one_cst (TREE_TYPE (len)));
+   update_stmt (call);
+   gimple_stmt_iterator gsi = gsi_for_stmt (call);
+   fold_stmt (&gsi);
+ }
+ 
  /* The top level function for conditional dead code shrink
     wrapping transformation.  */
  
*************** shrink_wrap_conditional_dead_built_in_ca
*** 1267,1273 ****
    for (; i < n ; i++)
      {
        gcall *bi_call = calls[i];
!       if (gimple_call_lhs (bi_call))
  	use_internal_fn (bi_call);
        else
  	shrink_wrap_one_built_in_call (bi_call);
--- 1360,1371 ----
    for (; i < n ; i++)
      {
        gcall *bi_call = calls[i];
!       unsigned len_arg;
! 
!       /* memset returns its destination pointer on the zero-length path.  */
!       if (can_shrink_wrap_len_p (bi_call, &len_arg))
! 	shrink_wrap_len_call (bi_call, len_arg, gimple_call_arg (bi_call, 0));
!       else if (gimple_call_lhs (bi_call))
  	use_internal_fn (bi_call);
        else
  	shrink_wrap_one_built_in_call (bi_call);
*************** pass_call_cdce::execute (function *fun)
*** 1326,1336 ****
        for (i = gsi_start_bb (bb); !gsi_end_p (i); gsi_next (&i))
          {
  	  gcall *stmt = dyn_cast <gcall *> (gsi_stmt (i));
            if (stmt
  	      && gimple_call_builtin_p (stmt, BUILT_IN_NORMAL)
! 	      && (gimple_call_lhs (stmt)
! 		  ? can_use_internal_fn (stmt)
! 		  : can_test_argument_range (stmt))
  	      && can_guard_call_p (stmt))
              {
                if (dump_file && (dump_flags & TDF_DETAILS))
--- 1424,1436 ----
        for (i = gsi_start_bb (bb); !gsi_end_p (i); gsi_next (&i))
          {
  	  gcall *stmt = dyn_cast <gcall *> (gsi_stmt (i));
+ 	  unsigned len_arg;
            if (stmt
  	      && gimple_call_builtin_p (stmt, BUILT_IN_NORMAL)
! 	      && (can_shrink_wrap_len_p (stmt, &len_arg)
! 		  || (gimple_call_lhs (stmt)
! 		      ? can_use_internal_fn (stmt)
! 		      : can_test_argument_range (stmt)))
  	      && can_guard_call_p (stmt))
              {
                if (dump_file && (dump_flags & TDF_DETAILS))
diff -Nrcpad gcc-17-20260628/gcc/tree-pretty-print.cc gcc-17-20260705/gcc/tree-pretty-print.cc
*** gcc-17-20260628/gcc/tree-pretty-print.cc	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/gcc/tree-pretty-print.cc	Sun Jul  5 22:32:17 2026
*************** dump_omp_clause (pretty_printer *pp, tre
*** 1155,1160 ****
--- 1155,1163 ----
  	case GOMP_MAP_POP_MAPPER_NAME:
  	  pp_string (pp, "pop_mapper");
  	  break;
+ 	case GOMP_MAP_USES_ALLOCATORS:
+ 	  pp_string (pp, "uses_allocators");
+ 	  break;
  	default:
  	  gcc_unreachable ();
  	}
diff -Nrcpad gcc-17-20260628/gcc/tree-ssa-address.cc gcc-17-20260705/gcc/tree-ssa-address.cc
*** gcc-17-20260628/gcc/tree-ssa-address.cc	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/gcc/tree-ssa-address.cc	Sun Jul  5 22:32:17 2026
*************** add_to_parts (struct mem_address *parts,
*** 546,555 ****
        return;
      }
  
!   /* Add ELT to base.  */
    type = TREE_TYPE (parts->base);
    if (POINTER_TYPE_P (type))
!     parts->base = fold_build_pointer_plus (parts->base, elt);
    else
      parts->base = fold_build2 (PLUS_EXPR, type, parts->base, elt);
  }
--- 546,560 ----
        return;
      }
  
!   /* Add ELT to base.  As we have arbitrarily associated address parts
!      make sure to use unsigned arithmetic.  */
    type = TREE_TYPE (parts->base);
    if (POINTER_TYPE_P (type))
!     parts->base
!       = fold_convert (TREE_TYPE (parts->base),
! 		      fold_build2 (PLUS_EXPR, sizetype,
! 				   fold_convert (sizetype, parts->base),
! 				   fold_convert (sizetype, elt)));
    else
      parts->base = fold_build2 (PLUS_EXPR, type, parts->base, elt);
  }
diff -Nrcpad gcc-17-20260628/gcc/tree-ssa-alias.cc gcc-17-20260705/gcc/tree-ssa-alias.cc
*** gcc-17-20260628/gcc/tree-ssa-alias.cc	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/gcc/tree-ssa-alias.cc	Sun Jul  5 22:32:17 2026
*************** ptr_deref_may_alias_global_p (tree ptr,
*** 238,243 ****
--- 238,267 ----
    return pt_solution_includes_global (&pi->pt, escaped_local_p);
  }
  
+ /* Return true, if dereferencing PTR may alias with a local automatic
+    variable.  */
+ 
+ bool
+ ptr_deref_may_alias_auto_p (tree ptr)
+ {
+   struct ptr_info_def *pi;
+ 
+   /* If we end up with a pointer constant here that may point
+      to local stack memory.  */
+   if (TREE_CODE (ptr) != SSA_NAME)
+     return true;
+ 
+   pi = SSA_NAME_PTR_INFO (ptr);
+ 
+   /* If we do not have points-to information for this variable,
+      we have to punt.  */
+   if (!pi)
+     return true;
+ 
+   return pt_solution_includes_auto (&pi->pt);
+ }
+ 
+ 
  /* Return true if dereferencing PTR may alias DECL.
     The caller is responsible for applying TBAA to see if PTR
     may access DECL at all.  */
diff -Nrcpad gcc-17-20260628/gcc/tree-ssa-alias.h gcc-17-20260705/gcc/tree-ssa-alias.h
*** gcc-17-20260628/gcc/tree-ssa-alias.h	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/gcc/tree-ssa-alias.h	Sun Jul  5 22:32:17 2026
*************** struct GTY(()) pt_solution
*** 54,59 ****
--- 54,61 ----
  
    /* Nonzero if the vars bitmap includes a variable included in 'nonlocal'.  */
    unsigned int vars_contains_nonlocal : 1;
+   /* Nonzero if the vars bitmap includes a local automatic variable.  */
+   unsigned int vars_contains_auto : 1;
    /* Nonzero if the vars bitmap includes a variable included in 'escaped'.  */
    unsigned int vars_contains_escaped : 1;
    /* Nonzero if the vars bitmap includes a anonymous heap variable that
*************** extern tree ao_ref_base_alias_ptr_type (
*** 127,132 ****
--- 129,135 ----
  extern bool ao_ref_alignment (ao_ref *, unsigned int *,
  			      unsigned HOST_WIDE_INT *);
  extern bool ptr_deref_may_alias_global_p (tree, bool);
+ extern bool ptr_deref_may_alias_auto_p (tree);
  extern bool ptr_derefs_may_alias_p (tree, tree);
  extern bool ptrs_compare_unequal (tree, tree);
  extern bool ref_may_alias_global_p (tree, bool);
*************** extern unsigned int compute_may_aliases
*** 182,187 ****
--- 185,191 ----
  extern bool pt_solution_empty_p (const pt_solution *);
  extern bool pt_solution_singleton_or_null_p (struct pt_solution *, unsigned *);
  extern bool pt_solution_includes_global (struct pt_solution *, bool);
+ extern bool pt_solution_includes_auto (struct pt_solution *);
  extern bool pt_solution_includes (struct pt_solution *, const_tree);
  extern bool pt_solution_includes_const_pool (struct pt_solution *);
  extern bool pt_solutions_intersect (struct pt_solution *, struct pt_solution *);
diff -Nrcpad gcc-17-20260628/gcc/tree-ssa-forwprop.cc gcc-17-20260705/gcc/tree-ssa-forwprop.cc
*** gcc-17-20260628/gcc/tree-ssa-forwprop.cc	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/gcc/tree-ssa-forwprop.cc	Sun Jul  5 22:32:17 2026
*************** check_table (tree ctor, tree type, HOST_
*** 3374,3379 ****
--- 3374,3380 ----
  /* Match.pd function to match the ctz expression.  */
  extern bool gimple_ctz_table_index (tree, tree *, tree (*)(tree));
  extern bool gimple_clz_table_index (tree, tree *, tree (*)(tree));
+ extern bool gimple_clz_msb_iso_table_index (tree, tree *, tree (*)(tree));
  
  /* Recognize count leading and trailing zeroes idioms.
     The canonical form is array[((x & -x) * C) >> SHIFT] where C is a magic
*************** simplify_count_zeroes (gimple_stmt_itera
*** 3393,3398 ****
--- 3394,3405 ----
    gcc_checking_assert (TREE_CODE (array_ref) == ARRAY_REF);
  
    internal_fn fn = IFN_LAST;
+   /* When true, the matched idiom is a CLZ using DeBruijn CTZ on the
+      isolated MSB -- see clz_msb_iso_table_index in match.pd.  The
+      table stores MSB positions and must satisfy the direct CTZ
+      DeBruijn property, so we validate it with the CTZ checkfn even
+      though we emit IFN_CLZ code.  */
+   bool clz_via_ctz = false;
    /* For CTZ we recognize ((x & -x) * C) >> SHIFT where the array data
       represents the number of trailing zeros.  */
    if (gimple_ctz_table_index (TREE_OPERAND (array_ref, 1), &res_ops[0], NULL))
*************** simplify_count_zeroes (gimple_stmt_itera
*** 3408,3413 ****
--- 3415,3431 ----
    else if (gimple_clz_table_index (TREE_OPERAND (array_ref, 1), &res_ops[0],
  				   NULL))
      fn = IFN_CLZ;
+   /* Variant CLZ idiom: after the OR-cascade sets all bits from 0 to
+      the original MSB, (value - (value >> 1)) isolates the MSB as a
+      power of two (2^k), and the subsequent DeBruijn multiply-and-shift
+      is a CTZ-style lookup on 2^k.  The table stores MSB positions
+      directly.  */
+   else if (gimple_clz_msb_iso_table_index (TREE_OPERAND (array_ref, 1),
+ 					   &res_ops[0], NULL))
+     {
+       fn = IFN_CLZ;
+       clz_via_ctz = true;
+     }
    else
      return false;
  
*************** simplify_count_zeroes (gimple_stmt_itera
*** 3417,3425 ****
    tree input_type = TREE_TYPE (res_ops[0]);
    unsigned input_bits = tree_to_shwi (TYPE_SIZE (input_type));
  
!   /* Check the array element type is not wider than 32 bits and the input is
!      an unsigned 32-bit or 64-bit type.  */
!   if (TYPE_PRECISION (type) > 32 || !TYPE_UNSIGNED (input_type))
      return false;
    if (input_bits != 32 && input_bits != 64)
      return false;
--- 3435,3447 ----
    tree input_type = TREE_TYPE (res_ops[0]);
    unsigned input_bits = tree_to_shwi (TYPE_SIZE (input_type));
  
!   /* Check the array element type is integral and not wider than 64 bits,
!      and the input is an unsigned 32-bit or 64-bit type.  The table values
!      are bit positions in [0, input_bits - 1], so any integer element type
!      with at least 6 bits of precision suffices; the cap is just to keep
!      the transformation simple.  */
!   if (!INTEGRAL_TYPE_P (type) || TYPE_PRECISION (type) > 64
!       || !TYPE_UNSIGNED (input_type))
      return false;
    if (input_bits != 32 && input_bits != 64)
      return false;
*************** simplify_count_zeroes (gimple_stmt_itera
*** 3441,3447 ****
    if (!ctor)
      return false;
    unsigned HOST_WIDE_INT mulval = tree_to_uhwi (res_ops[1]);
!   if (fn == IFN_CTZ)
      {
        auto checkfn = [&](unsigned data, unsigned i) -> bool
  	{
--- 3463,3471 ----
    if (!ctor)
      return false;
    unsigned HOST_WIDE_INT mulval = tree_to_uhwi (res_ops[1]);
!   /* CTZ and the MSB-isolation CLZ variant both use the direct CTZ
!      DeBruijn check (table[(magic << data) >> shift] == data).  */
!   if (fn == IFN_CTZ || clz_via_ctz)
      {
        auto checkfn = [&](unsigned data, unsigned i) -> bool
  	{
diff -Nrcpad gcc-17-20260628/gcc/tree-ssa-loop-ivopts.cc gcc-17-20260705/gcc/tree-ssa-loop-ivopts.cc
*** gcc-17-20260628/gcc/tree-ssa-loop-ivopts.cc	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/gcc/tree-ssa-loop-ivopts.cc	Sun Jul  5 22:32:17 2026
*************** alloc_iv (struct ivopts_data *data, tree
*** 1162,1169 ****
  					      sizeof (struct iv));
    gcc_assert (step != NULL_TREE);
  
!   /* Canonicalize the address expression in base.
!      That leads to more equalities being detected and results in:
  
         1) More accurate cost can be computed for address expressions;
         2) Duplicate candidates won't be created for bases in different
--- 1162,1169 ----
  					      sizeof (struct iv));
    gcc_assert (step != NULL_TREE);
  
!   /* Canonicalize the address expression in base if it were an unsigned
!       computation. That leads to more equalities being detected and results in:
  
         1) More accurate cost can be computed for address expressions;
         2) Duplicate candidates won't be created for bases in different
*************** alloc_iv (struct ivopts_data *data, tree
*** 1171,1178 ****
         3) Duplicate candidates won't be created for IV expressions that differ
  	  only in their sign.  */
    aff_tree comb;
    tree_to_aff_combination (expr, TREE_TYPE (expr), &comb);
!   base = aff_combination_to_tree (&comb);
  
    iv->base = base;
    iv->base_object = determine_base_object (data, base);
--- 1171,1180 ----
         3) Duplicate candidates won't be created for IV expressions that differ
  	  only in their sign.  */
    aff_tree comb;
+   STRIP_NOPS (expr);
+   expr = fold_convert (unsigned_type_for (TREE_TYPE (expr)), expr);
    tree_to_aff_combination (expr, TREE_TYPE (expr), &comb);
!   base = fold_convert (TREE_TYPE (base), aff_combination_to_tree (&comb));
  
    iv->base = base;
    iv->base_object = determine_base_object (data, base);
*************** rewrite_use_address (struct ivopts_data
*** 7637,7647 ****
    else
      {
        /* When we end up confused enough and have no suitable base but
! 	 stuffed everything to index2 use a LEA for the address and
  	 create a plain MEM_REF to avoid basing a memory reference
  	 on address zero which create_mem_ref_raw does as fallback.  */
        if (TREE_CODE (ref) == TARGET_MEM_REF
- 	  && TMR_INDEX2 (ref) != NULL_TREE
  	  && integer_zerop (TREE_OPERAND (ref, 0)))
  	{
  	  ref = fold_build1 (ADDR_EXPR, TREE_TYPE (TREE_OPERAND (ref, 0)), ref);
--- 7639,7648 ----
    else
      {
        /* When we end up confused enough and have no suitable base but
! 	 stuffed everything to indexes use a LEA for the address and
  	 create a plain MEM_REF to avoid basing a memory reference
  	 on address zero which create_mem_ref_raw does as fallback.  */
        if (TREE_CODE (ref) == TARGET_MEM_REF
  	  && integer_zerop (TREE_OPERAND (ref, 0)))
  	{
  	  ref = fold_build1 (ADDR_EXPR, TREE_TYPE (TREE_OPERAND (ref, 0)), ref);
diff -Nrcpad gcc-17-20260628/gcc/tree-ssa-loop-manip.cc gcc-17-20260705/gcc/tree-ssa-loop-manip.cc
*** gcc-17-20260628/gcc/tree-ssa-loop-manip.cc	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/gcc/tree-ssa-loop-manip.cc	Sun Jul  5 22:32:17 2026
*************** insert_iv_increment (gimple_stmt_iterato
*** 89,100 ****
     INCR_POS (after it if AFTER is true, before it otherwise).  INCR_POS and
     AFTER can be computed using standard_iv_increment_position.  The ssa versions
     of the variable before and after increment will be stored in VAR_BEFORE and
!    VAR_AFTER (unless they are NULL).  */
  
  void
  create_iv (tree base, tree_code incr_op, tree step, tree var, class loop *loop,
  	   gimple_stmt_iterator *incr_pos, bool after, tree *var_before,
! 	   tree *var_after)
  {
    gphi *phi;
    tree initial, step1;
--- 89,102 ----
     INCR_POS (after it if AFTER is true, before it otherwise).  INCR_POS and
     AFTER can be computed using standard_iv_increment_position.  The ssa versions
     of the variable before and after increment will be stored in VAR_BEFORE and
!    VAR_AFTER (unless they are NULL).  If LOOP_INVARIANT is true then the
!    calculation step will be added to the pre-header.  Otherwise, the step
!    calculation is added to incr_pos.  */
  
  void
  create_iv (tree base, tree_code incr_op, tree step, tree var, class loop *loop,
  	   gimple_stmt_iterator *incr_pos, bool after, tree *var_before,
! 	   tree *var_after, bool loop_invariant)
  {
    gphi *phi;
    tree initial, step1;
*************** create_iv (tree base, tree_code incr_op,
*** 150,162 ****
  	step = fold_build1 (NEGATE_EXPR, TREE_TYPE (step), step);
        incr_op = POINTER_PLUS_EXPR;
      }
-   /* Gimplify the step if necessary.  We put the computations in front of the
-      loop (i.e. the step should be loop invariant).  */
-   step = force_gimple_operand (step, &stmts, true, NULL_TREE);
-   if (stmts)
-     gsi_insert_seq_on_edge_immediate (pe, stmts);
  
    gimple_seq incr_stmts = nullptr;
    gimple_seq_add_stmt (&incr_stmts,
  		       gimple_build_assign (va, incr_op, vb, step));
    insert_iv_increment (incr_pos, after, incr_stmts);
--- 152,169 ----
  	step = fold_build1 (NEGATE_EXPR, TREE_TYPE (step), step);
        incr_op = POINTER_PLUS_EXPR;
      }
  
    gimple_seq incr_stmts = nullptr;
+   /* Gimplify the step if necessary.  */
+   if (loop_invariant)
+     {
+       step = force_gimple_operand (step, &stmts, true, NULL_TREE);
+       if (stmts)
+ 	gsi_insert_seq_on_edge_immediate (pe, stmts);
+     }
+   else
+     step = force_gimple_operand (step, &incr_stmts, true, NULL_TREE);
+ 
    gimple_seq_add_stmt (&incr_stmts,
  		       gimple_build_assign (va, incr_op, vb, step));
    insert_iv_increment (incr_pos, after, incr_stmts);
diff -Nrcpad gcc-17-20260628/gcc/tree-ssa-loop-manip.h gcc-17-20260705/gcc/tree-ssa-loop-manip.h
*** gcc-17-20260628/gcc/tree-ssa-loop-manip.h	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/gcc/tree-ssa-loop-manip.h	Sun Jul  5 22:32:17 2026
*************** typedef void (*transform_callback)(class
*** 24,30 ****
  
  extern void insert_iv_increment (gimple_stmt_iterator *, bool, gimple_seq);
  extern void create_iv (tree, tree_code, tree, tree, class loop *,
! 		       gimple_stmt_iterator *, bool, tree *, tree *);
  extern void rewrite_into_loop_closed_ssa (bitmap, unsigned);
  extern void verify_loop_closed_ssa (bool, class loop * = NULL);
  
--- 24,31 ----
  
  extern void insert_iv_increment (gimple_stmt_iterator *, bool, gimple_seq);
  extern void create_iv (tree, tree_code, tree, tree, class loop *,
! 		       gimple_stmt_iterator *, bool, tree *, tree *,
! 		       bool = true);
  extern void rewrite_into_loop_closed_ssa (bitmap, unsigned);
  extern void verify_loop_closed_ssa (bool, class loop * = NULL);
  
diff -Nrcpad gcc-17-20260628/gcc/tree-ssa-phiopt.cc gcc-17-20260705/gcc/tree-ssa-phiopt.cc
*** gcc-17-20260628/gcc/tree-ssa-phiopt.cc	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/gcc/tree-ssa-phiopt.cc	Sun Jul  5 22:32:17 2026
*************** factor_out_conditional_operation (edge e
*** 632,638 ****
  
    /* Remove the original PHI stmt.  */
    gsi = gsi_for_stmt (phi);
!   gsi_remove (&gsi, true);
  
    statistics_counter_event (cfun, "factored out operation", 1);
  
--- 632,638 ----
  
    /* Remove the original PHI stmt.  */
    gsi = gsi_for_stmt (phi);
!   remove_phi_node (&gsi, false);
  
    statistics_counter_event (cfun, "factored out operation", 1);
  
*************** factor_out_conditional_load (edge e0, ed
*** 3860,3866 ****
  
    /* RES is now defined by the load; drop the original PHI.  */
    gsi = gsi_for_stmt (phi);
!   gsi_remove (&gsi, true);
  
    /* The two arm loads are now dead.  */
    gsi = gsi_for_stmt (load0);
--- 3860,3866 ----
  
    /* RES is now defined by the load; drop the original PHI.  */
    gsi = gsi_for_stmt (phi);
!   remove_phi_node (&gsi, false);
  
    /* The two arm loads are now dead.  */
    gsi = gsi_for_stmt (load0);
diff -Nrcpad gcc-17-20260628/gcc/tree-ssa-pre.cc gcc-17-20260705/gcc/tree-ssa-pre.cc
*** gcc-17-20260628/gcc/tree-ssa-pre.cc	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/gcc/tree-ssa-pre.cc	Sun Jul  5 22:32:17 2026
*************** sorted_array_from_bitmap_set (bitmap_set
*** 1076,1086 ****
        result.truncate (0);
      }
  
    auto_bitmap val_visited (&grand_bitmap_obstack);
    bitmap_tree_view (val_visited);
    FOR_EACH_VALUE_ID_IN_SET (set, i, bi)
      if (bitmap_set_bit (val_visited, i))
!       pre_expr_DFS (i, set, exclusions, val_visited, result);
  
    return result;
  }
--- 1076,1118 ----
        result.truncate (0);
      }
  
+   bool single_p = true;
    auto_bitmap val_visited (&grand_bitmap_obstack);
    bitmap_tree_view (val_visited);
    FOR_EACH_VALUE_ID_IN_SET (set, i, bi)
      if (bitmap_set_bit (val_visited, i))
!       {
! 	if (!result.is_empty ())
! 	  {
! 	    single_p = false;
! 	    result.truncate (0);
! 	  }
! 	pre_expr_DFS (i, set, exclusions, val_visited, result);
! 	/* Mark i as entry that is not forward reachable.  Note we do
! 	   have cycles in the value graph so eventually i reaches itself.  */
! 	bitmap_clear_bit (val_visited, i);
!       }
!   /* If we didn't by luck visit only a single entry to the value
!      graph visit now all not forward reachable values.  */
!   if (!single_p)
!     {
!       result.truncate (0);
!       auto_bitmap val_visited2 (&grand_bitmap_obstack);
!       bitmap_tree_view (val_visited2);
!       FOR_EACH_VALUE_ID_IN_SET (set, i, bi)
! 	if (!bitmap_bit_p (val_visited, i))
! 	  {
! 	    if (bitmap_set_bit (val_visited2, i))
! 	      pre_expr_DFS (i, set, exclusions, val_visited2, result);
! 	    else
! 	      gcc_unreachable ();
! 	  }
!       if (flag_checking)
! 	{
! 	  bitmap_list_view (val_visited2);
! 	  gcc_assert (bitmap_equal_p (&set->values, val_visited2));
! 	}
!     }
  
    return result;
  }
*************** static void
*** 2139,2160 ****
  clean (bitmap_set_t set1, bitmap_set_t set2 = NULL)
  {
    vec<pre_expr> exprs = sorted_array_from_bitmap_set (set1, false);
!   pre_expr expr;
!   int i;
  
!   FOR_EACH_VEC_ELT (exprs, i, expr)
      {
!       if (!valid_in_sets (set1, set2, expr))
  	{
! 	  unsigned int val  = get_expr_value_id (expr);
! 	  bitmap_clear_bit (&set1->expressions, get_expression_id (expr));
! 	  /* We are entered with possibly multiple expressions for a value
! 	     so before removing a value from the set see if there's an
! 	     expression for it left.  */
! 	  if (! bitmap_find_leader (set1, val))
! 	    bitmap_clear_bit (&set1->values, val);
  	}
      }
    exprs.release ();
  
    if (flag_checking)
--- 2171,2208 ----
  clean (bitmap_set_t set1, bitmap_set_t set2 = NULL)
  {
    vec<pre_expr> exprs = sorted_array_from_bitmap_set (set1, false);
!   bool changed;
  
!   do
      {
!       unsigned j = 0;
!       changed = false;
!       for (unsigned i = 0; i < exprs.length (); ++i)
  	{
! 	  pre_expr expr = exprs[i];
! 	  if (!valid_in_sets (set1, set2, expr))
! 	    {
! 	      unsigned int val = get_expr_value_id (expr);
! 	      bitmap_clear_bit (&set1->expressions, get_expression_id (expr));
! 	      /* We are entered with possibly multiple expressions for a value
! 		 so before removing a value from the set see if there's an
! 		 expression for it left.  */
! 	      if (! bitmap_find_leader (set1, val))
! 		{
! 		  bitmap_clear_bit (&set1->values, val);
! 		  changed = true;
! 		}
! 	    }
! 	  else
! 	    {
! 	      exprs[j] = expr;
! 	      ++j;
! 	    }
  	}
+       exprs.truncate (j);
      }
+   /* As the value graph can have cycles we have to iterate here.  */
+   while (changed);
    exprs.release ();
  
    if (flag_checking)
diff -Nrcpad gcc-17-20260628/gcc/tree-ssa-sccvn.cc gcc-17-20260705/gcc/tree-ssa-sccvn.cc
*** gcc-17-20260628/gcc/tree-ssa-sccvn.cc	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/gcc/tree-ssa-sccvn.cc	Sun Jul  5 22:32:17 2026
*************** vn_reference_maybe_forwprop_address (vec
*** 1507,1512 ****
--- 1507,1515 ----
  		      = wide_int_to_tree (TREE_TYPE (mem_op->op0),
  					  wi::to_poly_wide (new_mem_op->op0));
  		}
+ 	      /* Do not forward addresses of TARGET_MEM_REF.  */
+ 	      else if (tem[0].opcode == TARGET_MEM_REF)
+ 		return changed;
  	      else
  		gcc_assert (tem.last ().opcode == STRING_CST);
  	      ops->pop ();
diff -Nrcpad gcc-17-20260628/gcc/tree-ssa-structalias.cc gcc-17-20260705/gcc/tree-ssa-structalias.cc
*** gcc-17-20260628/gcc/tree-ssa-structalias.cc	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/gcc/tree-ssa-structalias.cc	Sun Jul  5 22:32:17 2026
*************** static void
*** 745,756 ****
  set_uids_in_ptset (bitmap into, bitmap from, struct pt_solution *pt,
  		   tree fndecl)
  {
    unsigned int i;
    bitmap_iterator bi;
-   varinfo_t escaped_vi = get_varinfo (var_rep[escaped_id]);
-   varinfo_t escaped_return_vi = get_varinfo (var_rep[escaped_return_id]);
-   bool everything_escaped
-     = escaped_vi->solution && bitmap_bit_p (escaped_vi->solution, anything_id);
  
    EXECUTE_IF_SET_IN_BITMAP (from, 0, i, bi)
      {
--- 745,759 ----
  set_uids_in_ptset (bitmap into, bitmap from, struct pt_solution *pt,
  		   tree fndecl)
  {
+   const varinfo_t escaped_vi = get_varinfo (var_rep[escaped_id]);
+   const varinfo_t escaped_return_vi = get_varinfo (var_rep[escaped_return_id]);
+   const bool everything_escaped
+     = escaped_vi->solution && bitmap_bit_p (escaped_vi->solution, anything_id);
+   const bool everything_escaped_return
+     = escaped_return_vi->solution
+       && bitmap_bit_p (escaped_return_vi->solution, anything_id);
    unsigned int i;
    bitmap_iterator bi;
  
    EXECUTE_IF_SET_IN_BITMAP (from, 0, i, bi)
      {
*************** set_uids_in_ptset (bitmap into, bitmap f
*** 766,773 ****
  	  pt->vars_contains_escaped = true;
  	  pt->vars_contains_escaped_heap |= vi->is_heap_var;
  	}
!       if (escaped_return_vi->solution
! 	  && bitmap_bit_p (escaped_return_vi->solution, i))
  	pt->vars_contains_escaped_heap |= vi->is_heap_var;
  
        if (vi->is_restrict_var)
--- 769,778 ----
  	  pt->vars_contains_escaped = true;
  	  pt->vars_contains_escaped_heap |= vi->is_heap_var;
  	}
! 
!       if (everything_escaped_return
! 	  || (escaped_return_vi->solution
! 	      && bitmap_bit_p (escaped_return_vi->solution, i)))
  	pt->vars_contains_escaped_heap |= vi->is_heap_var;
  
        if (vi->is_restrict_var)
*************** set_uids_in_ptset (bitmap into, bitmap f
*** 801,806 ****
--- 806,818 ----
  		  && ! auto_var_in_fn_p (vi->decl, fndecl)))
  	    pt->vars_contains_nonlocal = true;
  
+ 	  /* If the variable is an automatic in the local stack frame, record
+ 	     that.  Note this does not include PARM_DECL and RESULT_DECL which
+ 	     are managed by the caller.  */
+ 	  if (VAR_P (vi->decl)
+ 	      && auto_var_in_fn_p (vi->decl, fndecl))
+ 	    pt->vars_contains_auto = true;
+ 
  	  /* If we have a variable that is interposable record that fact
  	     for pointer comparison simplification.  */
  	  if (VAR_P (vi->decl)
*************** pt_solution_includes_global (struct pt_s
*** 1120,1125 ****
--- 1132,1158 ----
    return false;
  }
  
+ /* Return true if the points-to solution *PT includes local automatic
+    storage.  */
+ 
+ bool
+ pt_solution_includes_auto (struct pt_solution *pt)
+ {
+   if (pt->anything
+       || pt->vars_contains_auto)
+     return true;
+ 
+   /* 'escaped' is also a placeholder so we have to look into it.  */
+   if (pt->escaped)
+     return pt_solution_includes_auto (&cfun->gimple_df->escaped);
+ 
+   if (pt->ipa_escaped)
+     return pt_solution_includes_auto (&ipa_escaped_pt);
+ 
+   return false;
+ }
+ 
+ 
  /* Return true if the points-to solution *PT includes the variable
     declaration DECL.  */
  
*************** make_pass_build_ealias (gcc::context *ct
*** 1803,1809 ****
  /* IPA PTA solutions for ESCAPED.  */
  struct pt_solution ipa_escaped_pt
    = { true, false, false, false, false, false,
!       false, false, false, false, false, NULL };
  
  
  /* Execute the driver for IPA PTA.  */
--- 1836,1842 ----
  /* IPA PTA solutions for ESCAPED.  */
  struct pt_solution ipa_escaped_pt
    = { true, false, false, false, false, false,
!       false, false, false, false, false, false, NULL };
  
  
  /* Execute the driver for IPA PTA.  */
diff -Nrcpad gcc-17-20260628/gcc/tree-vect-data-refs.cc gcc-17-20260705/gcc/tree-vect-data-refs.cc
*** gcc-17-20260628/gcc/tree-vect-data-refs.cc	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/gcc/tree-vect-data-refs.cc	Sun Jul  5 22:32:17 2026
*************** vect_create_data_ref_ptr (vec_info *vinf
*** 5878,5884 ****
      {
        gcc_assert (bb_vinfo);
        only_init = true;
!       *ptr_incr = NULL;
      }
  
    /* Create an expression for the first address accessed by this load
--- 5878,5885 ----
      {
        gcc_assert (bb_vinfo);
        only_init = true;
!       if (ptr_incr)
! 	*ptr_incr = NULL;
      }
  
    /* Create an expression for the first address accessed by this load
*************** vect_create_data_ref_ptr (vec_info *vinf
*** 6014,6020 ****
  
        create_iv (aggr_ptr_init, PLUS_EXPR,
  		 iv_step, aggr_ptr, loop, &incr_gsi, insert_after,
! 		 &indx_before_incr, &indx_after_incr);
        incr = gsi_stmt (incr_gsi);
  
        /* Copy the points-to information if it exists. */
--- 6015,6023 ----
  
        create_iv (aggr_ptr_init, PLUS_EXPR,
  		 iv_step, aggr_ptr, loop, &incr_gsi, insert_after,
! 		 &indx_before_incr, &indx_after_incr,
! 		 !loop_vinfo
! 		   || LOOP_VINFO_IV_INCREMENT_INVARIANT_P (loop_vinfo));
        incr = gsi_stmt (incr_gsi);
  
        /* Copy the points-to information if it exists. */
*************** vect_create_data_ref_ptr (vec_info *vinf
*** 6058,6087 ****
  
  /* Function bump_vector_ptr
  
!    Increment a pointer (to a vector type) by vector-size. If requested,
!    i.e. if PTR-INCR is given, then also connect the new increment stmt
!    to the existing def-use update-chain of the pointer, by modifying
!    the PTR_INCR as illustrated below:
! 
!    The pointer def-use update-chain before this function:
!                         DATAREF_PTR = phi (p_0, p_2)
!                         ....
!         PTR_INCR:       p_2 = DATAREF_PTR + step
! 
!    The pointer def-use update-chain after this function:
!                         DATAREF_PTR = phi (p_0, p_2)
!                         ....
!                         NEW_DATAREF_PTR = DATAREF_PTR + BUMP
!                         ....
!         PTR_INCR:       p_2 = NEW_DATAREF_PTR + step
  
     Input:
     DATAREF_PTR - ssa_name of a pointer (to vector type) that is being updated
                   in the loop.
!    PTR_INCR - optional. The stmt that updates the pointer in each iteration of
! 	      the loop.  The increment amount across iterations is expected
! 	      to be vector_size.
!    BSI - location where the new update stmt is to be placed.
     STMT_INFO - the original scalar memory-access stmt that is being vectorized.
     UPDATE - The offset by which to bump the pointer.
  
--- 6061,6072 ----
  
  /* Function bump_vector_ptr
  
!    Increment DATAREF_PTR by UPDATE.
  
     Input:
     DATAREF_PTR - ssa_name of a pointer (to vector type) that is being updated
                   in the loop.
!    GSI - location where the new update stmt is to be placed.
     STMT_INFO - the original scalar memory-access stmt that is being vectorized.
     UPDATE - The offset by which to bump the pointer.
  
*************** vect_create_data_ref_ptr (vec_info *vinf
*** 6091,6103 ****
  
  tree
  bump_vector_ptr (vec_info *vinfo,
! 		 tree dataref_ptr, gimple *ptr_incr, gimple_stmt_iterator *gsi,
  		 stmt_vec_info stmt_info, tree update)
  {
    struct data_reference *dr = STMT_VINFO_DATA_REF (stmt_info);
    gimple *incr_stmt;
-   ssa_op_iter iter;
-   use_operand_p use_p;
    tree new_dataref_ptr;
  
    if (TREE_CODE (dataref_ptr) == SSA_NAME)
--- 6076,6086 ----
  
  tree
  bump_vector_ptr (vec_info *vinfo,
! 		 tree dataref_ptr, gimple_stmt_iterator *gsi,
  		 stmt_vec_info stmt_info, tree update)
  {
    struct data_reference *dr = STMT_VINFO_DATA_REF (stmt_info);
    gimple *incr_stmt;
    tree new_dataref_ptr;
  
    if (TREE_CODE (dataref_ptr) == SSA_NAME)
*************** bump_vector_ptr (vec_info *vinfo,
*** 6128,6147 ****
    /* Copy the points-to information if it exists. */
    duplicate_ssa_name_ptr_info (new_dataref_ptr, DR_PTR_INFO (dr));
  
-   if (!ptr_incr)
-     return new_dataref_ptr;
- 
-   /* Update the vector-pointer's cross-iteration increment.  */
-   FOR_EACH_SSA_USE_OPERAND (use_p, ptr_incr, iter, SSA_OP_USE)
-     {
-       tree use = USE_FROM_PTR (use_p);
- 
-       if (use == dataref_ptr)
-         SET_USE (use_p, new_dataref_ptr);
-       else
-         gcc_assert (operand_equal_p (use, update, 0));
-     }
- 
    return new_dataref_ptr;
  }
  
--- 6111,6116 ----
diff -Nrcpad gcc-17-20260628/gcc/tree-vect-loop-manip.cc gcc-17-20260705/gcc/tree-vect-loop-manip.cc
*** gcc-17-20260628/gcc/tree-vect-loop-manip.cc	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/gcc/tree-vect-loop-manip.cc	Sun Jul  5 22:32:17 2026
*************** vect_set_loop_controls_directly (class l
*** 514,520 ****
    tree ctrl_type = rgc->type;
    unsigned int nitems_per_iter = rgc->max_nscalars_per_iter * rgc->factor;
    poly_uint64 nitems_per_ctrl = TYPE_VECTOR_SUBPARTS (ctrl_type) * rgc->factor;
-   poly_uint64 vf = LOOP_VINFO_VECT_FACTOR (loop_vinfo);
    tree length_limit = NULL_TREE;
    /* For length, we need length_limit to ensure length in range.  */
    if (!use_masks_p)
--- 514,519 ----
*************** vect_set_loop_controls_directly (class l
*** 525,531 ****
       of the vector loop, and the number that it should skip during the
       first iteration of the vector loop.  */
    tree nitems_total = niters;
!   tree nitems_step = build_int_cst (iv_type, vf);
    tree nitems_skip = niters_skip;
    if (nitems_per_iter != 1)
      {
--- 524,538 ----
       of the vector loop, and the number that it should skip during the
       first iteration of the vector loop.  */
    tree nitems_total = niters;
!   tree nitems_vf
!     = build_int_cst (iv_type, LOOP_VINFO_VECT_FACTOR (loop_vinfo));
!   tree nitems_step
!     = LOOP_VINFO_IV_INCREMENT_INVARIANT_P (loop_vinfo)
! 	? gimple_convert (preheader_seq, iv_type,
! 			  LOOP_VINFO_IV_INCREMENT (loop_vinfo))
! 	: gimple_convert (&loop_cond_gsi, true, GSI_SAME_STMT, UNKNOWN_LOCATION,
! 			  iv_type, LOOP_VINFO_IV_INCREMENT (loop_vinfo));
! 
    tree nitems_skip = niters_skip;
    if (nitems_per_iter != 1)
      {
*************** vect_set_loop_controls_directly (class l
*** 535,542 ****
        tree iv_factor = build_int_cst (iv_type, nitems_per_iter);
        nitems_total = gimple_build (preheader_seq, MULT_EXPR, compare_type,
  				   nitems_total, compare_factor);
!       nitems_step = gimple_build (preheader_seq, MULT_EXPR, iv_type,
! 				  nitems_step, iv_factor);
        if (nitems_skip)
  	nitems_skip = gimple_build (preheader_seq, MULT_EXPR, compare_type,
  				    nitems_skip, compare_factor);
--- 542,555 ----
        tree iv_factor = build_int_cst (iv_type, nitems_per_iter);
        nitems_total = gimple_build (preheader_seq, MULT_EXPR, compare_type,
  				   nitems_total, compare_factor);
!       nitems_vf = gimple_build (preheader_seq, MULT_EXPR, iv_type,
! 				  nitems_vf, iv_factor);
!       nitems_step = LOOP_VINFO_IV_INCREMENT_INVARIANT_P (loop_vinfo)
! 		      ? gimple_build (preheader_seq, MULT_EXPR, iv_type,
! 				      nitems_step, iv_factor)
! 		      : gimple_build (&loop_cond_gsi, true, GSI_SAME_STMT,
! 				      UNKNOWN_LOCATION, MULT_EXPR, iv_type,
! 				      nitems_step, iv_factor);
        if (nitems_skip)
  	nitems_skip = gimple_build (preheader_seq, MULT_EXPR, compare_type,
  				    nitems_skip, compare_factor);
*************** vect_set_loop_controls_directly (class l
*** 578,586 ****
  		     insert_after, &index_before_incr, &index_after_incr);
  	  tree vectype = build_zero_cst (rgc->type);
  	  tree len = gimple_build (header_seq, IFN_SELECT_VL, iv_type,
! 				   index_before_incr, nitems_step,
  				   vectype);
  	  gimple_seq_add_stmt (header_seq, gimple_build_assign (step, len));
  	}
        else
  	{
--- 591,611 ----
  		     insert_after, &index_before_incr, &index_after_incr);
  	  tree vectype = build_zero_cst (rgc->type);
  	  tree len = gimple_build (header_seq, IFN_SELECT_VL, iv_type,
! 				   index_before_incr, nitems_vf,
  				   vectype);
  	  gimple_seq_add_stmt (header_seq, gimple_build_assign (step, len));
+ 	  len = gimple_convert (header_seq, sizetype, len);
+ 
+ 	  /* Remove the previous initialization of IV_INCREMENT to VARYING.  */
+ 	  gimple *varying_def
+ 	    = SSA_NAME_DEF_STMT (LOOP_VINFO_IV_INCREMENT (loop_vinfo));
+ 	  auto def_gsi = gsi_for_stmt (varying_def);
+ 	  gsi_remove (&def_gsi, true);
+ 
+ 	  /* Set the LOOP_VINFO_IV_INCREMENT to be len.  */
+ 	  gassign* assign_iv_increment
+ 	    = gimple_build_assign (LOOP_VINFO_IV_INCREMENT (loop_vinfo), len);
+ 	  gimple_seq_add_stmt (header_seq, assign_iv_increment);
  	}
        else
  	{
*************** vect_set_loop_controls_directly (class l
*** 593,599 ****
  						    nitems_step));
  	}
        *iv_step = step;
!       *compare_step = nitems_step;
        return LOOP_VINFO_USING_SELECT_VL_P (loop_vinfo) ? index_after_incr
  						       : index_before_incr;
      }
--- 618,624 ----
  						    nitems_step));
  	}
        *iv_step = step;
!       *compare_step = nitems_vf;
        return LOOP_VINFO_USING_SELECT_VL_P (loop_vinfo) ? index_after_incr
  						       : index_before_incr;
      }
*************** vect_set_loop_controls_directly (class l
*** 601,607 ****
    /* Create increment IV.  */
    create_iv (build_int_cst (iv_type, 0), PLUS_EXPR, nitems_step, NULL_TREE,
  	     loop, &incr_gsi, insert_after, &index_before_incr,
! 	     &index_after_incr);
  
    tree zero_index = build_int_cst (compare_type, 0);
    tree test_index, test_limit, first_limit;
--- 626,633 ----
    /* Create increment IV.  */
    create_iv (build_int_cst (iv_type, 0), PLUS_EXPR, nitems_step, NULL_TREE,
  	     loop, &incr_gsi, insert_after, &index_before_incr,
! 	     &index_after_incr,
! 	     LOOP_VINFO_IV_INCREMENT_INVARIANT_P (loop_vinfo));
  
    tree zero_index = build_int_cst (compare_type, 0);
    tree test_index, test_limit, first_limit;
*************** vect_set_loop_controls_directly (class l
*** 636,642 ****
  	 COMPARE_TYPE.  */
        test_index = index_before_incr;
        tree adjust = gimple_convert (preheader_seq, compare_type,
! 				    nitems_step);
        if (nitems_skip)
  	adjust = gimple_build (preheader_seq, MINUS_EXPR, compare_type,
  			       adjust, nitems_skip);
--- 662,668 ----
  	 COMPARE_TYPE.  */
        test_index = index_before_incr;
        tree adjust = gimple_convert (preheader_seq, compare_type,
! 				    nitems_vf);
        if (nitems_skip)
  	adjust = gimple_build (preheader_seq, MINUS_EXPR, compare_type,
  			       adjust, nitems_skip);
*************** vect_set_loop_condition_partial_vectors_
*** 1040,1053 ****
  				 iv_type, niters, skip);
      }
  
-   /* The iteration step is the vectorization factor.  */
-   tree iv_step = build_int_cst (iv_type, vf);
- 
-   /* Create the decrement IV.  */
-   tree index_before_incr, index_after_incr;
    gimple_stmt_iterator incr_gsi;
    bool insert_after;
    vect_iv_increment_position (exit_edge, &incr_gsi, &insert_after);
    create_iv (niters_adj, MINUS_EXPR, iv_step, NULL_TREE, loop,
  	     &incr_gsi, insert_after, &index_before_incr,
  	     &index_after_incr);
--- 1066,1081 ----
  				 iv_type, niters, skip);
      }
  
    gimple_stmt_iterator incr_gsi;
+   tree index_before_incr, index_after_incr;
    bool insert_after;
    vect_iv_increment_position (exit_edge, &incr_gsi, &insert_after);
+ 
+   /* The iteration step is the vectorization factor.  */
+   tree iv_step = gimple_convert (&preheader_seq, iv_type,
+ 				 LOOP_VINFO_IV_INCREMENT (loop_vinfo));
+ 
+   /* Create the decrement IV.  */
    create_iv (niters_adj, MINUS_EXPR, iv_step, NULL_TREE, loop,
  	     &incr_gsi, insert_after, &index_before_incr,
  	     &index_after_incr);
*************** vect_set_loop_condition_partial_vectors_
*** 1230,1236 ****
     loop handles exactly VF scalars per iteration.  */
  
  static gcond *
! vect_set_loop_condition_normal (loop_vec_info /* loop_vinfo */, edge exit_edge,
  				class loop *loop, tree niters, tree step,
  				tree final_iv, bool niters_maybe_zero,
  				gimple_stmt_iterator loop_cond_gsi)
--- 1258,1264 ----
     loop handles exactly VF scalars per iteration.  */
  
  static gcond *
! vect_set_loop_condition_normal (loop_vec_info loop_vinfo, edge exit_edge,
  				class loop *loop, tree niters, tree step,
  				tree final_iv, bool niters_maybe_zero,
  				gimple_stmt_iterator loop_cond_gsi)
*************** vect_set_loop_condition_normal (loop_vec
*** 1325,1331 ****
  
    vect_iv_increment_position (exit_edge, &incr_gsi, &insert_after);
    create_iv (init, PLUS_EXPR, step, NULL_TREE, loop,
!              &incr_gsi, insert_after, &indx_before_incr, &indx_after_incr);
    indx_after_incr = force_gimple_operand_gsi (&loop_cond_gsi, indx_after_incr,
  					      true, NULL_TREE, true,
  					      GSI_SAME_STMT);
--- 1353,1362 ----
  
    vect_iv_increment_position (exit_edge, &incr_gsi, &insert_after);
    create_iv (init, PLUS_EXPR, step, NULL_TREE, loop,
! 	     &incr_gsi, insert_after,
! 	     &indx_before_incr, &indx_after_incr,
! 	     !loop_vinfo || LOOP_VINFO_IV_INCREMENT_INVARIANT_P (loop_vinfo));
! 
    indx_after_incr = force_gimple_operand_gsi (&loop_cond_gsi, indx_after_incr,
  					      true, NULL_TREE, true,
  					      GSI_SAME_STMT);
*************** vect_gen_vector_loop_niters (loop_vec_in
*** 2979,2985 ****
    /* To silence some unexpected warnings, simply initialize to 0. */
    unsigned HOST_WIDE_INT const_vf = 0;
    if (vf.is_constant (&const_vf)
!       && !LOOP_VINFO_USING_PARTIAL_VECTORS_P (loop_vinfo))
      {
        /* Create: niters / vf, which is equivalent to niters >> log2(vf) when
  		 vf is a power of two, and when not we approximate using a
--- 3010,3017 ----
    /* To silence some unexpected warnings, simply initialize to 0. */
    unsigned HOST_WIDE_INT const_vf = 0;
    if (vf.is_constant (&const_vf)
!       && !LOOP_VINFO_USING_PARTIAL_VECTORS_P (loop_vinfo)
!       && LOOP_VINFO_IV_INCREMENT_INVARIANT_P (loop_vinfo))
      {
        /* Create: niters / vf, which is equivalent to niters >> log2(vf) when
  		 vf is a power of two, and when not we approximate using a
*************** vect_gen_vector_loop_niters (loop_vec_in
*** 3054,3059 ****
--- 3086,3115 ----
    return;
  }
  
+ /* Finds the amount IV's should be incremented by each iteration.
+    Stored in LOOP_VINFO_IV_INCREMENT.  */
+ 
+ tree
+ vect_get_loop_iv_increment (loop_vec_info loop_vinfo)
+ {
+   if (LOOP_VINFO_USING_SELECT_VL_P (loop_vinfo))
+     {
+       /* For now, set this as varying.
+ 	 Fill this in later when building the loop controls.  */
+       tree iv_increment = make_temp_ssa_name (sizetype, NULL, "iv_increment");
+ 
+       gcall *varying_call = gimple_build_call_internal (IFN_VARYING, 0);
+       gimple_call_set_lhs (varying_call, iv_increment);
+ 
+       gimple_stmt_iterator gsi = gsi_after_labels (loop_vinfo->loop->header);
+       gsi_insert_before (&gsi, varying_call, GSI_NEW_STMT);
+ 
+       return iv_increment;
+     }
+   else
+     return build_int_cst (sizetype, LOOP_VINFO_VECT_FACTOR (loop_vinfo));
+ }
+ 
  /* Given NITERS_VECTOR which is the number of iterations for vectorized
     loop specified by LOOP_VINFO after vectorization, compute the number
     of iterations before vectorization (niters_vector * vf) and store it
diff -Nrcpad gcc-17-20260628/gcc/tree-vect-loop.cc gcc-17-20260705/gcc/tree-vect-loop.cc
*** gcc-17-20260628/gcc/tree-vect-loop.cc	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/gcc/tree-vect-loop.cc	Sun Jul  5 22:32:17 2026
*************** vectorizable_induction (loop_vec_info lo
*** 9524,9532 ****
    tree new_name;
    gphi *induction_phi;
    tree induc_def, vec_dest;
-   poly_uint64 vf = LOOP_VINFO_VECT_FACTOR (loop_vinfo);
    unsigned i;
-   tree expr;
    tree index_vectype = NULL_TREE;
    gimple_stmt_iterator si;
    enum vect_induction_op_type induction_type
--- 9524,9530 ----
*************** vectorizable_induction (loop_vec_info lo
*** 9633,9639 ****
    if (!target_supports_op_p (step_vectype, PLUS_EXPR, optab_default)
        || !target_supports_op_p (step_vectype, MINUS_EXPR, optab_default))
        return false;
!   if (!nunits.is_constant ())
      {
        if (!target_supports_op_p (step_vectype, MULT_EXPR, optab_default))
  	return false;
--- 9631,9638 ----
    if (!target_supports_op_p (step_vectype, PLUS_EXPR, optab_default)
        || !target_supports_op_p (step_vectype, MINUS_EXPR, optab_default))
        return false;
!   if (!nunits.is_constant ()
!       || !LOOP_VINFO_IV_INCREMENT_INVARIANT_P (loop_vinfo))
      {
        if (!target_supports_op_p (step_vectype, MULT_EXPR, optab_default))
  	return false;
*************** vectorizable_induction (loop_vec_info lo
*** 9734,9740 ****
    unsigned HOST_WIDE_INT const_nunits;
    if (nested_in_vect_loop)
      nivs = nvects;
!   else if (nunits.is_constant (&const_nunits))
      {
        /* Compute the number of distinct IVs we need.  First reduce
  	 group_size if it is a multiple of const_nunits so we get
--- 9733,9740 ----
    unsigned HOST_WIDE_INT const_nunits;
    if (nested_in_vect_loop)
      nivs = nvects;
!   else if (nunits.is_constant (&const_nunits)
! 	   && LOOP_VINFO_IV_INCREMENT_INVARIANT_P (loop_vinfo))
      {
        /* Compute the number of distinct IVs we need.  First reduce
  	 group_size if it is a multiple of const_nunits so we get
*************** vectorizable_induction (loop_vec_info lo
*** 9750,9759 ****
        nivs = 1;
      }
    gimple_seq init_stmts = NULL;
    tree lupdate_mul = NULL_TREE;
    if (!nested_in_vect_loop)
      {
!       if (nunits.is_constant (&const_nunits))
  	{
  	  /* The number of iterations covered in one vector iteration.  */
  	  unsigned lup_mul = (nvects * const_nunits) / group_size;
--- 9750,9761 ----
        nivs = 1;
      }
    gimple_seq init_stmts = NULL;
+   gimple_seq lupdate_mul_stmts = NULL;
    tree lupdate_mul = NULL_TREE;
    if (!nested_in_vect_loop)
      {
!       if (nunits.is_constant (&const_nunits)
! 	  && LOOP_VINFO_IV_INCREMENT_INVARIANT_P (loop_vinfo))
  	{
  	  /* The number of iterations covered in one vector iteration.  */
  	  unsigned lup_mul = (nvects * const_nunits) / group_size;
*************** vectorizable_induction (loop_vec_info lo
*** 9766,9779 ****
  	}
        else
  	{
  	  if (SCALAR_FLOAT_TYPE_P (stept))
  	    {
! 	      tree tem = build_int_cst (integer_type_node, vf);
! 	      lupdate_mul = gimple_build (&init_stmts, FLOAT_EXPR, stept, tem);
  	    }
  	  else
! 	    lupdate_mul = build_int_cst (stept, vf);
! 	  lupdate_mul = gimple_build_vector_from_val (&init_stmts, step_vectype,
  						      lupdate_mul);
  	}
      }
--- 9768,9790 ----
  	}
        else
  	{
+ 	  gimple_seq *update_stmts
+ 	    = LOOP_VINFO_IV_INCREMENT_INVARIANT_P (loop_vinfo)
+ 		? &init_stmts
+ 		: &lupdate_mul_stmts;
  	  if (SCALAR_FLOAT_TYPE_P (stept))
  	    {
! 	      tree increment
! 		= gimple_convert (update_stmts, integer_type_node,
! 				  LOOP_VINFO_IV_INCREMENT (loop_vinfo));
! 	      lupdate_mul = gimple_build (update_stmts, FLOAT_EXPR, stept,
! 					  increment);
  	    }
  	  else
! 	    lupdate_mul = gimple_convert (update_stmts, stept,
! 					 LOOP_VINFO_IV_INCREMENT (loop_vinfo));
! 	  lupdate_mul = gimple_build_vector_from_val (update_stmts,
! 						      step_vectype,
  						      lupdate_mul);
  	}
      }
*************** vectorizable_induction (loop_vec_info lo
*** 9796,9802 ****
      {
        gimple_seq stmts = NULL;
        bool invariant = true;
!       if (nunits.is_constant (&const_nunits))
  	{
  	  tree_vector_builder step_elts (step_vectype, const_nunits, 1);
  	  tree_vector_builder init_elts (vectype, const_nunits, 1);
--- 9807,9814 ----
      {
        gimple_seq stmts = NULL;
        bool invariant = true;
!       if (nunits.is_constant (&const_nunits)
! 	  && LOOP_VINFO_IV_INCREMENT_INVARIANT_P (loop_vinfo))
  	{
  	  tree_vector_builder step_elts (step_vectype, const_nunits, 1);
  	  tree_vector_builder init_elts (vectype, const_nunits, 1);
*************** vectorizable_induction (loop_vec_info lo
*** 9904,9939 ****
        /* Create the iv update inside the loop  */
        tree up = vec_step;
        if (lupdate_mul)
! 	{
! 	  if (LOOP_VINFO_USING_SELECT_VL_P (loop_vinfo))
! 	    {
! 	      /* When we're using loop_len produced by SELEC_VL, the
! 		 non-final iterations are not always processing VF
! 		 elements.  So vectorize induction variable instead of
! 
! 		   _21 = vect_vec_iv_.6_22 + { VF, ... };
! 
! 		 We should generate:
! 
! 		   _35 = .SELECT_VL (ivtmp_33, VF);
! 		   vect_cst__22 = [vec_duplicate_expr] _35;
! 		   _21 = vect_vec_iv_.6_22 + vect_cst__22;  */
! 	      vec_loop_lens *lens = &LOOP_VINFO_LENS (loop_vinfo);
! 	      tree len = vect_get_loop_len (loop_vinfo, NULL, lens, 1,
! 					    vectype, 0, 0, false);
! 	      if (SCALAR_FLOAT_TYPE_P (stept))
! 		expr = gimple_build (&stmts, FLOAT_EXPR, stept, len);
! 	      else
! 		expr = gimple_convert (&stmts, stept, len);
! 	      lupdate_mul = gimple_build_vector_from_val (&stmts, step_vectype,
! 							  expr);
! 	      up = gimple_build (&stmts, MULT_EXPR,
! 				 step_vectype, vec_step, lupdate_mul);
! 	    }
! 	  else
! 	    up = gimple_build (&init_stmts, MULT_EXPR, step_vectype,
! 			       vec_step, lupdate_mul);
! 	}
        vec_def = gimple_convert (&stmts, step_vectype, induc_def);
        vec_def = gimple_build (&stmts, PLUS_EXPR, step_vectype, vec_def, up);
        vec_def = gimple_convert (&stmts, vectype, vec_def);
--- 9916,9927 ----
        /* Create the iv update inside the loop  */
        tree up = vec_step;
        if (lupdate_mul)
! 	 {
! 	   if (lupdate_mul_stmts)
! 	     gimple_seq_add_seq (&stmts, lupdate_mul_stmts);
! 	   up = gimple_build (&stmts, MULT_EXPR, step_vectype, vec_step,
! 			      lupdate_mul);
! 	 }
        vec_def = gimple_convert (&stmts, step_vectype, induc_def);
        vec_def = gimple_build (&stmts, PLUS_EXPR, step_vectype, vec_def, up);
        vec_def = gimple_convert (&stmts, vectype, vec_def);
*************** vectorizable_induction (loop_vec_info lo
*** 9964,9970 ****
    if (!nested_in_vect_loop)
      {
        /* Fill up to the number of vectors we need for the whole group.  */
!       if (nunits.is_constant (&const_nunits))
  	nivs = least_common_multiple (group_size, const_nunits) / const_nunits;
        else
  	nivs = 1;
--- 9952,9959 ----
    if (!nested_in_vect_loop)
      {
        /* Fill up to the number of vectors we need for the whole group.  */
!       if (nunits.is_constant (&const_nunits)
! 	  && LOOP_VINFO_IV_INCREMENT_INVARIANT_P (loop_vinfo))
  	nivs = least_common_multiple (group_size, const_nunits) / const_nunits;
        else
  	nivs = 1;
*************** vectorizable_induction (loop_vec_info lo
*** 9980,9986 ****
       stmts by adding VF' * stride to the IVs generated above.  */
    if (ivn < nvects)
      {
!       if (nunits.is_constant (&const_nunits))
  	{
  	  unsigned vfp = (least_common_multiple (group_size, const_nunits)
  			  / group_size);
--- 9969,9976 ----
       stmts by adding VF' * stride to the IVs generated above.  */
    if (ivn < nvects)
      {
!       if (nunits.is_constant (&const_nunits)
! 	  && LOOP_VINFO_IV_INCREMENT_INVARIANT_P (loop_vinfo))
  	{
  	  unsigned vfp = (least_common_multiple (group_size, const_nunits)
  			  / group_size);
*************** vect_update_ivs_after_vectorizer_for_ear
*** 11073,11079 ****
  
    tree phi_var = LOOP_VINFO_EARLY_BRK_NITERS_VAR (loop_vinfo);
    tree niters_skip = LOOP_VINFO_MASK_SKIP_NITERS (loop_vinfo);
-   poly_uint64 vf = LOOP_VINFO_VECT_FACTOR (loop_vinfo);
    tree ty_var = TREE_TYPE (phi_var);
    auto loop = LOOP_VINFO_LOOP (loop_vinfo);
    tree induc_var = niters_skip ? copy_ssa_name (phi_var) : phi_var;
--- 11063,11068 ----
*************** vect_update_ivs_after_vectorizer_for_ear
*** 11090,11116 ****
    gimple_seq init_stmts = NULL;
    gimple_seq stmts = NULL;
    gimple_seq iv_stmts = NULL;
!   tree tree_vf = build_int_cst (ty_var, vf);
! 
!   /* For loop len targets we have to use .SELECT_VL (ivtmp_33, VF); instead of
!      just += VF as the VF can change in between two loop iterations.  */
!   if (LOOP_VINFO_USING_SELECT_VL_P (loop_vinfo))
!     {
!       vec_loop_lens *lens = &LOOP_VINFO_LENS (loop_vinfo);
!       tree_vf = vect_get_loop_len (loop_vinfo, NULL, lens, 1,
! 				   NULL_TREE, 0, 0, true);
!     }
  
    tree iter_var;
    if (POINTER_TYPE_P (ty_var))
!     {
!       tree offset = gimple_convert (&stmts, sizetype, tree_vf);
!       iter_var = gimple_build (&stmts, POINTER_PLUS_EXPR, ty_var, induc_def,
! 			       gimple_convert (&stmts, sizetype, offset));
!     }
    else
      {
!       tree offset = gimple_convert (&stmts, ty_var, tree_vf);
        iter_var = gimple_build (&stmts, PLUS_EXPR, ty_var, induc_def, offset);
      }
  
--- 11079,11093 ----
    gimple_seq init_stmts = NULL;
    gimple_seq stmts = NULL;
    gimple_seq iv_stmts = NULL;
!   tree tree_iv_incr = LOOP_VINFO_IV_INCREMENT (loop_vinfo);
  
    tree iter_var;
    if (POINTER_TYPE_P (ty_var))
!     iter_var = gimple_build (&stmts, POINTER_PLUS_EXPR, ty_var, induc_def,
! 			     tree_iv_incr);
    else
      {
!       tree offset = gimple_convert (&stmts, ty_var, tree_iv_incr);
        iter_var = gimple_build (&stmts, PLUS_EXPR, ty_var, induc_def, offset);
      }
  
*************** vect_update_ivs_after_vectorizer_for_ear
*** 11157,11166 ****
    /* Write the init_stmts in the loop-preheader block.  */
    auto psi = gsi_last_nondebug_bb (pe->src);
    gsi_insert_seq_after (&psi, init_stmts, GSI_LAST_NEW_STMT);
!   /* Write the adjustments in the header block.  */
!   basic_block bb = loop->header;
!   auto si = gsi_after_labels (bb);
!   gsi_insert_seq_before (&si, stmts, GSI_SAME_STMT);
  }
  
  /* Function vect_transform_loop.
--- 11134,11150 ----
    /* Write the init_stmts in the loop-preheader block.  */
    auto psi = gsi_last_nondebug_bb (pe->src);
    gsi_insert_seq_after (&psi, init_stmts, GSI_LAST_NEW_STMT);
! 
!   /* Write the adjustments at the end of the iv increment.  */
!   bool insert_after;
!   gimple_stmt_iterator incr_gsi;
!   vect_iv_increment_position (LOOP_VINFO_MAIN_EXIT (loop_vinfo), &incr_gsi,
! 			      &insert_after);
! 
!   if (insert_after)
!     gsi_insert_seq_after (&incr_gsi, stmts, GSI_NEW_STMT);
!   else
!     gsi_insert_seq_before (&incr_gsi, stmts, GSI_NEW_STMT);
  }
  
  /* Function vect_transform_loop.
*************** vect_transform_loop (loop_vec_info loop_
*** 11259,11264 ****
--- 11243,11251 ----
  			      check_profitability, niters_no_overflow,
  			      &advance);
  
+   LOOP_VINFO_IV_INCREMENT (loop_vinfo)
+     = vect_get_loop_iv_increment (loop_vinfo);
+ 
    /* Assign hierarchical discriminators to the vectorized loop.  */
    poly_uint64 vf_val = LOOP_VINFO_VECT_FACTOR (loop_vinfo);
    unsigned int vf_int = constant_lower_bound (vf_val);
diff -Nrcpad gcc-17-20260628/gcc/tree-vect-slp.cc gcc-17-20260705/gcc/tree-vect-slp.cc
*** gcc-17-20260628/gcc/tree-vect-slp.cc	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/gcc/tree-vect-slp.cc	Sun Jul  5 22:32:17 2026
*************** vect_bb_vectorization_profitable_p (bb_v
*** 9695,9700 ****
--- 9695,9703 ----
  	  continue;
  	}
  
+       if (dump_enabled_p ())
+ 	dump_printf_loc (MSG_NOTE, vect_location,
+ 			 "Scalar cost for part in loop %d\n", sl);
        class vector_costs *scalar_target_cost_data = init_cost (bb_vinfo, true);
        do
  	{
*************** vect_bb_vectorization_profitable_p (bb_v
*** 9707,9712 ****
--- 9710,9718 ----
        scalar_cost = scalar_target_cost_data->body_cost ();
  
        /* Complete the target-specific vector cost calculation.  */
+       if (dump_enabled_p ())
+ 	dump_printf_loc (MSG_NOTE, vect_location,
+ 			 "Vector cost for part in loop %d\n", vl);
        class vector_costs *vect_target_cost_data = init_cost (bb_vinfo, false);
        auto_vec<stmt_info_for_cost> tem;
        do
*************** vect_bb_vectorization_profitable_p (bb_v
*** 9741,9750 ****
  	 free on the scalar side but cost a load on the vector side for
  	 example).  */
        if (vec_outside_cost + vec_inside_cost > scalar_cost)
! 	{
! 	  profitable = false;
! 	  break;
! 	}
      }
    if (profitable && vi < li_vector_costs.length ())
      {
--- 9747,9753 ----
  	 free on the scalar side but cost a load on the vector side for
  	 example).  */
        if (vec_outside_cost + vec_inside_cost > scalar_cost)
! 	profitable = false;
      }
    if (profitable && vi < li_vector_costs.length ())
      {
diff -Nrcpad gcc-17-20260628/gcc/tree-vect-stmts.cc gcc-17-20260705/gcc/tree-vect-stmts.cc
*** gcc-17-20260628/gcc/tree-vect-stmts.cc	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/gcc/tree-vect-stmts.cc	Sun Jul  5 22:32:17 2026
*************** vect_get_gather_scatter_ops (class loop
*** 3170,3213 ****
     the gather load or scatter store operation described by GS_INFO.
     STMT_INFO is the load or store statement.
  
!    Set *DATAREF_BUMP to the amount that should be added to the base
!    address after each copy of the vectorized statement.  Set *VEC_OFFSET
!    to an invariant offset vector in which element I has the value
!    I * DR_STEP / SCALE.  */
  
  static void
  vect_get_strided_load_store_ops (stmt_vec_info stmt_info, slp_tree node,
  				 tree vectype, tree offset_vectype,
  				 loop_vec_info loop_vinfo,
  				 gimple_stmt_iterator *gsi,
! 				 tree *dataref_bump, tree *vec_offset,
! 				 vec_loop_lens *loop_lens)
  {
    struct data_reference *dr = STMT_VINFO_DATA_REF (stmt_info);
  
!   if (LOOP_VINFO_USING_SELECT_VL_P (loop_vinfo))
!     {
!       /* _31 = .SELECT_VL (ivtmp_29, POLY_INT_CST [4, 4]);
! 	 ivtmp_8 = _31 * 16 (step in bytes);
! 	 .MASK_LEN_SCATTER_STORE (vectp_a.9_7, ... );
! 	 vectp_a.9_26 = vectp_a.9_7 + ivtmp_8;  */
!       tree loop_len
! 	= vect_get_loop_len (loop_vinfo, gsi, loop_lens, 1, vectype, 0, 0, true);
!       tree tmp
! 	= fold_build2 (MULT_EXPR, sizetype,
! 		       fold_convert (sizetype, unshare_expr (DR_STEP (dr))),
! 		       loop_len);
!       *dataref_bump = force_gimple_operand_gsi (gsi, tmp, true, NULL_TREE, true,
! 						GSI_SAME_STMT);
!     }
!   else
!     {
!       tree bump
! 	= size_binop (MULT_EXPR,
! 		      fold_convert (sizetype, unshare_expr (DR_STEP (dr))),
! 		      size_int (TYPE_VECTOR_SUBPARTS (vectype)));
!       *dataref_bump = cse_and_gimplify_to_preheader (loop_vinfo, bump);
!     }
  
    internal_fn ifn
      = DR_IS_READ (dr) ? IFN_MASK_LEN_STRIDED_LOAD : IFN_MASK_LEN_STRIDED_STORE;
--- 3170,3204 ----
     the gather load or scatter store operation described by GS_INFO.
     STMT_INFO is the load or store statement.
  
!    Set *DR_STEP to the amount that should be added to pointer base address
!    to get to the next iteration's base address.
!    Set *DR_BUMP to the amount that should be added to the base
!    address after each copy of the vectorized statement in a grouped read.
!    Set *VEC_OFFSET to an invariant offset vector in which element I has the
!    value I * DR_STEP / SCALE.  */
  
  static void
  vect_get_strided_load_store_ops (stmt_vec_info stmt_info, slp_tree node,
  				 tree vectype, tree offset_vectype,
  				 loop_vec_info loop_vinfo,
  				 gimple_stmt_iterator *gsi,
! 				 tree *dr_step, tree *dr_bump,
! 				 tree *vec_offset)
  {
    struct data_reference *dr = STMT_VINFO_DATA_REF (stmt_info);
  
!   tree dr_step_temp
!     = size_binop (MULT_EXPR,
! 		  fold_convert (sizetype, unshare_expr (DR_STEP (dr))),
! 		  LOOP_VINFO_IV_INCREMENT (loop_vinfo));
!   *dr_step = LOOP_VINFO_IV_INCREMENT_INVARIANT_P (loop_vinfo)
! 	     ? cse_and_gimplify_to_preheader (loop_vinfo, dr_step_temp)
! 	     : force_gimple_operand_gsi (gsi, dr_step_temp, false, NULL_TREE,
! 					 true, GSI_SAME_STMT);
!   tree bump = size_binop (MULT_EXPR,
! 			  fold_convert (sizetype, unshare_expr (DR_STEP (dr))),
! 			  size_int (TYPE_VECTOR_SUBPARTS (vectype)));
!   *dr_bump = cse_and_gimplify_to_preheader (loop_vinfo, bump);
  
    internal_fn ifn
      = DR_IS_READ (dr) ? IFN_MASK_LEN_STRIDED_LOAD : IFN_MASK_LEN_STRIDED_STORE;
*************** vect_get_strided_load_store_ops (stmt_ve
*** 3233,3279 ****
    *vec_offset = cse_and_gimplify_to_preheader (loop_vinfo, offset);
  }
  
! /* Prepare the pointer IVs which needs to be updated by a variable amount.
!    Such variable amount is the outcome of .SELECT_VL. In this case, we can
!    allow each iteration process the flexible number of elements as long as
!    the number <= vf elements.
! 
!    Return data reference according to SELECT_VL.
!    If new statements are needed, insert them before GSI.  */
  
  static tree
! vect_get_loop_variant_data_ptr_increment (
!   vec_info *vinfo, tree aggr_type, gimple_stmt_iterator *gsi,
!   vec_loop_lens *loop_lens, dr_vec_info *dr_info,
!   vect_memory_access_type memory_access_type)
  {
    loop_vec_info loop_vinfo = dyn_cast<loop_vec_info> (vinfo);
!   tree step = vect_dr_behavior (vinfo, dr_info)->step;
  
    /* gather/scatter never reach here.  */
    gcc_assert (!mat_gather_scatter_p (memory_access_type));
  
!   /* When we support SELECT_VL pattern, we dynamic adjust
!      the memory address by .SELECT_VL result.
! 
!      The result of .SELECT_VL is the number of elements to
!      be processed of each iteration. So the memory address
!      adjustment operation should be:
  
!      addr = addr + .SELECT_VL (ARG..) * step;
!   */
!   tree loop_len
!     = vect_get_loop_len (loop_vinfo, gsi, loop_lens, 1, aggr_type, 0, 0, true);
!   tree len_type = TREE_TYPE (loop_len);
!   /* Since the outcome of .SELECT_VL is element size, we should adjust
!      it into bytesize so that it can be used in address pointer variable
!      amount IVs adjustment.  */
!   tree tmp = fold_build2 (MULT_EXPR, len_type, loop_len,
! 			  wide_int_to_tree (len_type, wi::to_widest (step)));
!   tree bump = make_temp_ssa_name (len_type, NULL, "ivtmp");
!   gassign *assign = gimple_build_assign (bump, tmp);
!   gsi_insert_before (gsi, assign, GSI_SAME_STMT);
!   return bump;
  }
  
  /* Return the amount that should be added to a vector pointer to move
--- 3224,3254 ----
    *vec_offset = cse_and_gimplify_to_preheader (loop_vinfo, offset);
  }
  
! /* Return the amount that should be added to a vector pointer, represented by
!    DR_INFO, to increment to the next vectorized iteration.  */
  
  static tree
! vect_get_data_ptr_step (vec_info *vinfo, dr_vec_info *dr_info,
! 			vect_memory_access_type memory_access_type)
  {
+   if (memory_access_type == VMAT_INVARIANT)
+     return size_zero_node;
+ 
    loop_vec_info loop_vinfo = dyn_cast<loop_vec_info> (vinfo);
! 
!   /* For BB SLP there is no next iteration.  */
!   if (!loop_vinfo)
!     return build_zero_cst (sizetype);
! 
!   tree step = vect_dr_behavior (loop_vinfo, dr_info)->step;
  
    /* gather/scatter never reach here.  */
    gcc_assert (!mat_gather_scatter_p (memory_access_type));
  
!   tree iv_increment = LOOP_VINFO_IV_INCREMENT (loop_vinfo);
  
!   return fold_build2 (MULT_EXPR, sizetype, iv_increment,
! 		      fold_convert (sizetype, step));
  }
  
  /* Return the amount that should be added to a vector pointer to move
*************** vect_get_loop_variant_data_ptr_increment
*** 3282,3300 ****
     vectorization.  */
  
  static tree
! vect_get_data_ptr_increment (vec_info *vinfo, gimple_stmt_iterator *gsi,
! 			     dr_vec_info *dr_info, tree aggr_type,
! 			     vect_memory_access_type memory_access_type,
! 			     vec_loop_lens *loop_lens)
  {
    if (memory_access_type == VMAT_INVARIANT)
      return size_zero_node;
  
    loop_vec_info loop_vinfo = dyn_cast<loop_vec_info> (vinfo);
    if (loop_vinfo && LOOP_VINFO_USING_SELECT_VL_P (loop_vinfo))
!     return vect_get_loop_variant_data_ptr_increment (vinfo, aggr_type, gsi,
! 						     loop_lens, dr_info,
! 						     memory_access_type);
  
    tree iv_step = TYPE_SIZE_UNIT (aggr_type);
    tree step = vect_dr_behavior (vinfo, dr_info)->step;
--- 3257,3274 ----
     vectorization.  */
  
  static tree
! vect_get_data_ptr_bump (vec_info *vinfo,
! 			dr_vec_info *dr_info, tree aggr_type,
! 			vect_memory_access_type memory_access_type)
  {
    if (memory_access_type == VMAT_INVARIANT)
      return size_zero_node;
  
    loop_vec_info loop_vinfo = dyn_cast<loop_vec_info> (vinfo);
+   /* We do not support SLP loads where num_vec != 1 with SELECT_VL so this value
+      should never be needed.  */
    if (loop_vinfo && LOOP_VINFO_USING_SELECT_VL_P (loop_vinfo))
!     return NULL_TREE;
  
    tree iv_step = TYPE_SIZE_UNIT (aggr_type);
    tree step = vect_dr_behavior (vinfo, dr_info)->step;
*************** vectorizable_scan_store (vec_info *vinfo
*** 7945,7963 ****
  	perms[i] = vect_gen_perm_mask_checked (vectype, indices);
      }
  
-   vec_loop_lens *loop_lens
-     = (loop_vinfo && LOOP_VINFO_FULLY_WITH_LENGTH_P (loop_vinfo)
-        ? &LOOP_VINFO_LENS (loop_vinfo)
-        : NULL);
- 
    tree vec_oprnd1 = NULL_TREE;
    tree vec_oprnd2 = NULL_TREE;
    tree vec_oprnd3 = NULL_TREE;
    tree dataref_ptr = DR_BASE_ADDRESS (dr_info->dr);
    tree dataref_offset = build_int_cst (ref_type, 0);
!   tree bump = vect_get_data_ptr_increment (vinfo, gsi, dr_info,
! 					   vectype, VMAT_CONTIGUOUS,
! 					   loop_lens);
    tree ldataref_ptr = NULL_TREE;
    tree orig = NULL_TREE;
    if (STMT_VINFO_SIMD_LANE_ACCESS_P (stmt_info) == 4 && !inscan_var_store)
--- 7919,7930 ----
  	perms[i] = vect_gen_perm_mask_checked (vectype, indices);
      }
  
    tree vec_oprnd1 = NULL_TREE;
    tree vec_oprnd2 = NULL_TREE;
    tree vec_oprnd3 = NULL_TREE;
    tree dataref_ptr = DR_BASE_ADDRESS (dr_info->dr);
    tree dataref_offset = build_int_cst (ref_type, 0);
!   tree bump = vect_get_data_ptr_bump (vinfo, dr_info, vectype, VMAT_CONTIGUOUS);
    tree ldataref_ptr = NULL_TREE;
    tree orig = NULL_TREE;
    if (STMT_VINFO_SIMD_LANE_ACCESS_P (stmt_info) == 4 && !inscan_var_store)
*************** vectorizable_store (vec_info *vinfo,
*** 8131,8137 ****
    enum vect_def_type mask_dt = vect_unknown_def_type;
    tree dataref_ptr = NULL_TREE;
    tree dataref_offset = NULL_TREE;
-   gimple *ptr_incr = NULL;
    int j;
    stmt_vec_info first_stmt_info;
    bool grouped_store;
--- 8098,8103 ----
*************** vectorizable_store (vec_info *vinfo,
*** 8558,8572 ****
        if (!costing_p)
  	{
  	  ivstep = stride_step;
  	  ivstep = fold_build2 (MULT_EXPR, TREE_TYPE (ivstep), ivstep,
! 				build_int_cst (TREE_TYPE (ivstep), vf));
  
  	  standard_iv_increment_position (loop, &incr_gsi, &insert_after);
  
  	  stride_base = cse_and_gimplify_to_preheader (loop_vinfo, stride_base);
! 	  ivstep = cse_and_gimplify_to_preheader (loop_vinfo, ivstep);
  	  create_iv (stride_base, PLUS_EXPR, ivstep, NULL, loop, &incr_gsi,
! 		     insert_after, &offvar, NULL);
  
  	  stride_step = cse_and_gimplify_to_preheader (loop_vinfo, stride_step);
  	}
--- 8524,8549 ----
        if (!costing_p)
  	{
  	  ivstep = stride_step;
+ 
+ 	  tree increment = fold_convert (TREE_TYPE (ivstep),
+ 					 LOOP_VINFO_IV_INCREMENT (loop_vinfo));
+ 
  	  ivstep = fold_build2 (MULT_EXPR, TREE_TYPE (ivstep), ivstep,
! 				increment);
  
  	  standard_iv_increment_position (loop, &incr_gsi, &insert_after);
  
  	  stride_base = cse_and_gimplify_to_preheader (loop_vinfo, stride_base);
! 	  if (LOOP_VINFO_IV_INCREMENT_INVARIANT_P (loop_vinfo))
! 	    ivstep = cse_and_gimplify_to_preheader (loop_vinfo, ivstep);
! 	  else
! 	    ivstep = force_gimple_operand_gsi (&incr_gsi, unshare_expr (ivstep),
! 					       true, NULL_TREE, true,
! 					       GSI_SAME_STMT);
! 
  	  create_iv (stride_base, PLUS_EXPR, ivstep, NULL, loop, &incr_gsi,
! 		     insert_after, &offvar, NULL,
! 		     LOOP_VINFO_IV_INCREMENT_INVARIANT_P (loop_vinfo));
  
  	  stride_step = cse_and_gimplify_to_preheader (loop_vinfo, stride_step);
  	}
*************** vectorizable_store (vec_info *vinfo,
*** 8705,8716 ****
    if (!known_eq (poffset, 0))
      offset = size_int (poffset);
  
!   tree bump;
    tree vec_offset = NULL_TREE;
    if (STMT_VINFO_GATHER_SCATTER_P (stmt_info))
      {
        aggr_type = NULL_TREE;
!       bump = NULL_TREE;
      }
    else if (mat_gather_scatter_p (memory_access_type))
      {
--- 8682,8696 ----
    if (!known_eq (poffset, 0))
      offset = size_int (poffset);
  
!   tree dr_increment;
!   tree dr_bump;
! 
    tree vec_offset = NULL_TREE;
    if (STMT_VINFO_GATHER_SCATTER_P (stmt_info))
      {
        aggr_type = NULL_TREE;
!       dr_increment = NULL_TREE;
!       dr_bump = NULL_TREE;
      }
    else if (mat_gather_scatter_p (memory_access_type))
      {
*************** vectorizable_store (vec_info *vinfo,
*** 8721,8727 ****
  	  vect_get_strided_load_store_ops (stmt_info, slp_node, vtype,
  					   ls.strided_offset_vectype,
  					   loop_vinfo, gsi,
! 					   &bump, &vec_offset, loop_lens);
  	}
      }
    else
--- 8701,8708 ----
  	  vect_get_strided_load_store_ops (stmt_info, slp_node, vtype,
  					   ls.strided_offset_vectype,
  					   loop_vinfo, gsi,
! 					   &dr_increment, &dr_bump,
! 					   &vec_offset);
  	}
      }
    else
*************** vectorizable_store (vec_info *vinfo,
*** 8731,8738 ****
        else
  	aggr_type = vectype;
        if (!costing_p)
! 	bump = vect_get_data_ptr_increment (vinfo, gsi, dr_info, aggr_type,
! 					    memory_access_type, loop_lens);
      }
  
    if (loop_vinfo && mask_node && !costing_p)
--- 8712,8723 ----
        else
  	aggr_type = vectype;
        if (!costing_p)
! 	{
! 	  dr_increment = vect_get_data_ptr_step (vinfo, dr_info,
! 						 memory_access_type);
! 	  dr_bump = vect_get_data_ptr_bump (vinfo, dr_info, aggr_type,
! 					    memory_access_type);
! 	}
      }
  
    if (loop_vinfo && mask_node && !costing_p)
*************** vectorizable_store (vec_info *vinfo,
*** 8785,8791 ****
  		  dataref_ptr
  		    = vect_create_data_ref_ptr (vinfo, first_stmt_info,
  						aggr_type, NULL, offset, &dummy,
! 						gsi, &ptr_incr, false, bump);
  		}
  	    }
  	  else if (!costing_p)
--- 8770,8776 ----
  		  dataref_ptr
  		    = vect_create_data_ref_ptr (vinfo, first_stmt_info,
  						aggr_type, NULL, offset, &dummy,
! 						gsi, NULL, false, dr_increment);
  		}
  	    }
  	  else if (!costing_p)
*************** vectorizable_store (vec_info *vinfo,
*** 8793,8800 ****
  	      gcc_assert (!LOOP_VINFO_USING_SELECT_VL_P (loop_vinfo));
  	      if (mask_node)
  		vec_mask = vec_masks[j];
! 	      dataref_ptr = bump_vector_ptr (vinfo, dataref_ptr, ptr_incr, gsi,
! 					     stmt_info, bump);
  	    }
  
  	  if (costing_p)
--- 8778,8785 ----
  	      gcc_assert (!LOOP_VINFO_USING_SELECT_VL_P (loop_vinfo));
  	      if (mask_node)
  		vec_mask = vec_masks[j];
! 	      dataref_ptr = bump_vector_ptr (vinfo, dataref_ptr, gsi,
! 					     stmt_info, dr_bump);
  	    }
  
  	  if (costing_p)
*************** vectorizable_store (vec_info *vinfo,
*** 8941,8956 ****
  		    dataref_ptr
  		      = vect_create_data_ref_ptr (vinfo, first_stmt_info,
  						  aggr_type, NULL, offset,
! 						  &dummy, gsi, &ptr_incr, false,
! 						  bump);
  		}
  	    }
  	  else if (!costing_p)
  	    {
  	      gcc_assert (!LOOP_VINFO_USING_SELECT_VL_P (loop_vinfo));
  	      if (!STMT_VINFO_GATHER_SCATTER_P (stmt_info))
! 		dataref_ptr = bump_vector_ptr (vinfo, dataref_ptr, ptr_incr,
! 					       gsi, stmt_info, bump);
  	    }
  
  	  new_stmt = NULL;
--- 8926,8941 ----
  		    dataref_ptr
  		      = vect_create_data_ref_ptr (vinfo, first_stmt_info,
  						  aggr_type, NULL, offset,
! 						  &dummy, gsi, NULL, false,
! 						  dr_increment);
  		}
  	    }
  	  else if (!costing_p)
  	    {
  	      gcc_assert (!LOOP_VINFO_USING_SELECT_VL_P (loop_vinfo));
  	      if (!STMT_VINFO_GATHER_SCATTER_P (stmt_info))
! 		dataref_ptr = bump_vector_ptr (vinfo, dataref_ptr,
! 					       gsi, stmt_info, dr_bump);
  	    }
  
  	  new_stmt = NULL;
*************** vectorizable_store (vec_info *vinfo,
*** 9347,9354 ****
    else if (!costing_p)
      dataref_ptr = vect_create_data_ref_ptr (vinfo, first_stmt_info, aggr_type,
  					    simd_lane_access_p ? loop : NULL,
! 					    offset, &dummy, gsi, &ptr_incr,
! 					    simd_lane_access_p, bump);
  
    new_stmt = NULL;
    gcc_assert (!grouped_store);
--- 9332,9339 ----
    else if (!costing_p)
      dataref_ptr = vect_create_data_ref_ptr (vinfo, first_stmt_info, aggr_type,
  					    simd_lane_access_p ? loop : NULL,
! 					    offset, &dummy, gsi, NULL,
! 					    simd_lane_access_p, dr_increment);
  
    new_stmt = NULL;
    gcc_assert (!grouped_store);
*************** vectorizable_store (vec_info *vinfo,
*** 9398,9405 ****
  
        if (i > 0)
  	/* Bump the vector pointer.  */
! 	dataref_ptr = bump_vector_ptr (vinfo, dataref_ptr, ptr_incr, gsi,
! 				       stmt_info, bump);
  
        unsigned misalign;
        unsigned HOST_WIDE_INT align;
--- 9383,9390 ----
  
        if (i > 0)
  	/* Bump the vector pointer.  */
! 	dataref_ptr = bump_vector_ptr (vinfo, dataref_ptr, gsi, stmt_info,
! 				       dr_bump);
  
        unsigned misalign;
        unsigned HOST_WIDE_INT align;
*************** vectorizable_load (vec_info *vinfo,
*** 9722,9728 ****
    tree dummy;
    tree dataref_ptr = NULL_TREE;
    tree dataref_offset = NULL_TREE;
-   gimple *ptr_incr = NULL;
    int i, j;
    unsigned int group_size;
    poly_uint64 group_gap_adj;
--- 9707,9712 ----
*************** vectorizable_load (vec_info *vinfo,
*** 10231,10246 ****
  		 vectemp = {tmp1, tmp2, ...}
  	     */
  
! 	  ivstep = fold_build2 (MULT_EXPR, TREE_TYPE (stride_step), stride_step,
! 				build_int_cst (TREE_TYPE (stride_step), vf));
  
  	  standard_iv_increment_position (loop, &incr_gsi, &insert_after);
  
  	  stride_base = cse_and_gimplify_to_preheader (loop_vinfo, stride_base);
! 	  ivstep = cse_and_gimplify_to_preheader (loop_vinfo, ivstep);
! 	  create_iv (stride_base, PLUS_EXPR, ivstep, NULL,
! 		     loop, &incr_gsi, insert_after,
! 		     &offvar, NULL);
  
  	  stride_step = cse_and_gimplify_to_preheader (loop_vinfo, stride_step);
  	}
--- 10215,10236 ----
  		 vectemp = {tmp1, tmp2, ...}
  	     */
  
! 	  tree increment = fold_convert (TREE_TYPE (stride_step),
! 					 LOOP_VINFO_IV_INCREMENT (loop_vinfo));
! 	  ivstep = fold_build2 (MULT_EXPR, TREE_TYPE (stride_step),
! 				stride_step, increment);
  
  	  standard_iv_increment_position (loop, &incr_gsi, &insert_after);
  
  	  stride_base = cse_and_gimplify_to_preheader (loop_vinfo, stride_base);
! 	  if (LOOP_VINFO_IV_INCREMENT_INVARIANT_P (loop_vinfo))
! 	    ivstep = cse_and_gimplify_to_preheader (loop_vinfo, ivstep);
! 	  else
! 	    ivstep = force_gimple_operand_gsi (&incr_gsi, unshare_expr (ivstep),
! 					       true, NULL_TREE, true,
! 					       GSI_SAME_STMT);
! 	  create_iv (stride_base, PLUS_EXPR, ivstep, NULL, loop, &incr_gsi,
! 		     insert_after, &offvar, NULL, true);
  
  	  stride_step = cse_and_gimplify_to_preheader (loop_vinfo, stride_step);
  	}
*************** vectorizable_load (vec_info *vinfo,
*** 10710,10716 ****
  	      ? size_binop (PLUS_EXPR, offset, size_int (poffset))
  	      : size_int (poffset));
  
!   tree bump;
    tree vec_offset = NULL_TREE;
  
    auto_vec<tree> vec_offsets;
--- 10700,10707 ----
  	      ? size_binop (PLUS_EXPR, offset, size_int (poffset))
  	      : size_int (poffset));
  
!   tree dr_increment;
!   tree dr_bump;
    tree vec_offset = NULL_TREE;
  
    auto_vec<tree> vec_offsets;
*************** vectorizable_load (vec_info *vinfo,
*** 10730,10737 ****
  
        aggr_type = build_array_type_nelts (elem_type, group_size * nunits);
        if (!costing_p)
! 	bump = vect_get_data_ptr_increment (vinfo, gsi, dr_info, aggr_type,
! 					    memory_access_type, loop_lens);
  
        unsigned int inside_cost = 0, prologue_cost = 0;
        /* For costing some adjacent vector loads, we'd like to cost with
--- 10721,10732 ----
  
        aggr_type = build_array_type_nelts (elem_type, group_size * nunits);
        if (!costing_p)
! 	{
! 	  dr_increment = vect_get_data_ptr_step (vinfo, dr_info,
! 						      memory_access_type);
! 	  dr_bump = vect_get_data_ptr_bump (vinfo, dr_info, aggr_type,
! 					    memory_access_type);
! 	}
  
        unsigned int inside_cost = 0, prologue_cost = 0;
        /* For costing some adjacent vector loads, we'd like to cost with
*************** vectorizable_load (vec_info *vinfo,
*** 10778,10789 ****
  	    dataref_ptr
  	      = vect_create_data_ref_ptr (vinfo, first_stmt_info, aggr_type,
  					  at_loop, offset, &dummy, gsi,
! 					  &ptr_incr, false, bump);
  	  else
  	    {
  	      gcc_assert (!LOOP_VINFO_USING_SELECT_VL_P (loop_vinfo));
! 	      dataref_ptr = bump_vector_ptr (vinfo, dataref_ptr, ptr_incr, gsi,
! 					     stmt_info, bump);
  	    }
  	  if (mask_node)
  	    vec_mask = vec_masks[j];
--- 10773,10784 ----
  	    dataref_ptr
  	      = vect_create_data_ref_ptr (vinfo, first_stmt_info, aggr_type,
  					  at_loop, offset, &dummy, gsi,
! 					  NULL, false, dr_increment);
  	  else
  	    {
  	      gcc_assert (!LOOP_VINFO_USING_SELECT_VL_P (loop_vinfo));
! 	      dataref_ptr = bump_vector_ptr (vinfo, dataref_ptr, gsi,
! 					     stmt_info, dr_bump);
  	    }
  	  if (mask_node)
  	    vec_mask = vec_masks[j];
*************** vectorizable_load (vec_info *vinfo,
*** 10909,10915 ****
        if (STMT_VINFO_GATHER_SCATTER_P (stmt_info))
  	{
  	  aggr_type = NULL_TREE;
! 	  bump = NULL_TREE;
  	  if (!costing_p)
  	    vect_get_gather_scatter_ops (loop, slp_node, &dataref_ptr,
  					 &vec_offsets);
--- 10904,10910 ----
        if (STMT_VINFO_GATHER_SCATTER_P (stmt_info))
  	{
  	  aggr_type = NULL_TREE;
! 	  dr_increment = NULL_TREE;
  	  if (!costing_p)
  	    vect_get_gather_scatter_ops (loop, slp_node, &dataref_ptr,
  					 &vec_offsets);
*************** vectorizable_load (vec_info *vinfo,
*** 10922,10932 ****
  	      vect_get_strided_load_store_ops (stmt_info, slp_node, vectype,
  					       ls.strided_offset_vectype,
  					       loop_vinfo, gsi,
! 					       &bump, &vec_offset, loop_lens);
  	      dataref_ptr
  		  = vect_create_data_ref_ptr (vinfo, first_stmt_info, aggr_type,
  					      at_loop, offset, &dummy, gsi,
! 					      &ptr_incr, false, bump);
  	    }
  	}
  
--- 10917,10928 ----
  	      vect_get_strided_load_store_ops (stmt_info, slp_node, vectype,
  					       ls.strided_offset_vectype,
  					       loop_vinfo, gsi,
! 					       &dr_increment, &dr_bump,
! 					       &vec_offset);
  	      dataref_ptr
  		  = vect_create_data_ref_ptr (vinfo, first_stmt_info, aggr_type,
  					      at_loop, offset, &dummy, gsi,
! 					      NULL, false, dr_increment);
  	    }
  	}
  
*************** vectorizable_load (vec_info *vinfo,
*** 10950,10957 ****
  					       final_mask, vec_mask, gsi);
  
  	      if (i > 0 && !STMT_VINFO_GATHER_SCATTER_P (stmt_info))
! 		dataref_ptr = bump_vector_ptr (vinfo, dataref_ptr, ptr_incr,
! 					       gsi, stmt_info, bump);
  	    }
  
  	  /* 2. Create the vector-load in the loop.  */
--- 10946,10953 ----
  					       final_mask, vec_mask, gsi);
  
  	      if (i > 0 && !STMT_VINFO_GATHER_SCATTER_P (stmt_info))
! 		dataref_ptr = bump_vector_ptr (vinfo, dataref_ptr, gsi,
! 					       stmt_info, dr_bump);
  	    }
  
  	  /* 2. Create the vector-load in the loop.  */
*************** vectorizable_load (vec_info *vinfo,
*** 11336,11343 ****
  
    aggr_type = vectype;
    if (!costing_p)
!     bump = vect_get_data_ptr_increment (vinfo, gsi, dr_info, aggr_type,
! 					memory_access_type, loop_lens);
  
    poly_uint64 group_elt = 0;
    unsigned int inside_cost = 0, prologue_cost = 0;
--- 11332,11343 ----
  
    aggr_type = vectype;
    if (!costing_p)
!     {
!       dr_increment = vect_get_data_ptr_step (vinfo, dr_info,
! 						  memory_access_type);
!       dr_bump = vect_get_data_ptr_bump (vinfo, dr_info, aggr_type,
! 					memory_access_type);
!     }
  
    poly_uint64 group_elt = 0;
    unsigned int inside_cost = 0, prologue_cost = 0;
*************** vectorizable_load (vec_info *vinfo,
*** 11368,11375 ****
  	  dataref_ptr
  	    = vect_create_data_ref_ptr (vinfo, first_stmt_info_for_drptr,
  					aggr_type, at_loop, offset, &dummy,
! 					gsi, &ptr_incr, simd_lane_access_p,
! 					bump);
  	  /* Adjust the pointer by the difference to first_stmt.  */
  	  data_reference_p ptrdr
  	    = STMT_VINFO_DATA_REF (first_stmt_info_for_drptr);
--- 11368,11375 ----
  	  dataref_ptr
  	    = vect_create_data_ref_ptr (vinfo, first_stmt_info_for_drptr,
  					aggr_type, at_loop, offset, &dummy,
! 					gsi, NULL, simd_lane_access_p,
! 					dr_increment);
  	  /* Adjust the pointer by the difference to first_stmt.  */
  	  data_reference_p ptrdr
  	    = STMT_VINFO_DATA_REF (first_stmt_info_for_drptr);
*************** vectorizable_load (vec_info *vinfo,
*** 11377,11383 ****
  				    size_binop (MINUS_EXPR,
  						DR_INIT (first_dr_info->dr),
  						DR_INIT (ptrdr)));
! 	  dataref_ptr = bump_vector_ptr (vinfo, dataref_ptr, ptr_incr, gsi,
  					 stmt_info, diff);
  	  if (alignment_support_scheme == dr_explicit_realign)
  	    {
--- 11377,11383 ----
  				    size_binop (MINUS_EXPR,
  						DR_INIT (first_dr_info->dr),
  						DR_INIT (ptrdr)));
! 	  dataref_ptr = bump_vector_ptr (vinfo, dataref_ptr, gsi,
  					 stmt_info, diff);
  	  if (alignment_support_scheme == dr_explicit_realign)
  	    {
*************** vectorizable_load (vec_info *vinfo,
*** 11393,11409 ****
  	dataref_ptr
  	  = vect_create_data_ref_ptr (vinfo, first_stmt_info, aggr_type,
  				      at_loop,
! 				      offset, &dummy, gsi, &ptr_incr,
! 				      simd_lane_access_p, bump);
!     }
!   else if (!costing_p)
!     {
!       gcc_assert (!LOOP_VINFO_USING_SELECT_VL_P (loop_vinfo));
!       if (dataref_offset)
! 	dataref_offset = int_const_binop (PLUS_EXPR, dataref_offset, bump);
!       else
! 	dataref_ptr = bump_vector_ptr (vinfo, dataref_ptr, ptr_incr, gsi,
! 				       stmt_info, bump);
      }
  
    auto_vec<tree> dr_chain;
--- 11393,11400 ----
  	dataref_ptr
  	  = vect_create_data_ref_ptr (vinfo, first_stmt_info, aggr_type,
  				      at_loop,
! 				      offset, &dummy, gsi, NULL,
! 				      simd_lane_access_p, dr_increment);
      }
  
    auto_vec<tree> dr_chain;
*************** vectorizable_load (vec_info *vinfo,
*** 11429,11436 ****
  					   final_mask, vec_mask, gsi);
  
  	  if (i > 0)
! 	    dataref_ptr = bump_vector_ptr (vinfo, dataref_ptr, ptr_incr,
! 					   gsi, stmt_info, bump);
  	}
  
        /* 2. Create the vector-load in the loop.  */
--- 11420,11427 ----
  					   final_mask, vec_mask, gsi);
  
  	  if (i > 0)
! 	    dataref_ptr = bump_vector_ptr (vinfo, dataref_ptr, gsi, stmt_info,
! 					   dr_bump);
  	}
  
        /* 2. Create the vector-load in the loop.  */
*************** vectorizable_load (vec_info *vinfo,
*** 11776,11783 ****
  
  	    bump = size_binop (MULT_EXPR, vs, TYPE_SIZE_UNIT (elem_type));
  	    bump = size_binop (MINUS_EXPR, bump, size_one_node);
! 	    ptr = bump_vector_ptr (vinfo, dataref_ptr, NULL, gsi, stmt_info,
! 				   bump);
  	    new_stmt = gimple_build_assign (NULL_TREE, BIT_AND_EXPR, ptr,
  					    build_int_cst (TREE_TYPE (ptr),
  							   -(HOST_WIDE_INT) align));
--- 11767,11773 ----
  
  	    bump = size_binop (MULT_EXPR, vs, TYPE_SIZE_UNIT (elem_type));
  	    bump = size_binop (MINUS_EXPR, bump, size_one_node);
! 	    ptr = bump_vector_ptr (vinfo, dataref_ptr, gsi, stmt_info, bump);
  	    new_stmt = gimple_build_assign (NULL_TREE, BIT_AND_EXPR, ptr,
  					    build_int_cst (TREE_TYPE (ptr),
  							   -(HOST_WIDE_INT) align));
*************** vectorizable_load (vec_info *vinfo,
*** 11934,11941 ****
  	  if (tree_int_cst_sgn (vect_dr_behavior (vinfo, dr_info)->step) == -1)
  	    bump_val = -bump_val;
  	  tree bump = wide_int_to_tree (sizetype, bump_val);
! 	  dataref_ptr = bump_vector_ptr (vinfo, dataref_ptr, ptr_incr, gsi,
! 					 stmt_info, bump);
  	  group_elt = 0;
  	}
      }
--- 11924,11931 ----
  	  if (tree_int_cst_sgn (vect_dr_behavior (vinfo, dr_info)->step) == -1)
  	    bump_val = -bump_val;
  	  tree bump = wide_int_to_tree (sizetype, bump_val);
! 	  dataref_ptr = bump_vector_ptr (vinfo, dataref_ptr, gsi, stmt_info,
! 					 bump);
  	  group_elt = 0;
  	}
      }
*************** vectorizable_load (vec_info *vinfo,
*** 11950,11957 ****
        if (tree_int_cst_sgn (vect_dr_behavior (vinfo, dr_info)->step) == -1)
  	bump_val = -bump_val;
        tree bump = wide_int_to_tree (sizetype, bump_val);
!       dataref_ptr = bump_vector_ptr (vinfo, dataref_ptr, ptr_incr, gsi,
! 				     stmt_info, bump);
      }
  
    if (ls.slp_perm)
--- 11940,11946 ----
        if (tree_int_cst_sgn (vect_dr_behavior (vinfo, dr_info)->step) == -1)
  	bump_val = -bump_val;
        tree bump = wide_int_to_tree (sizetype, bump_val);
!       dataref_ptr = bump_vector_ptr (vinfo, dataref_ptr, gsi, stmt_info, bump);
      }
  
    if (ls.slp_perm)
diff -Nrcpad gcc-17-20260628/gcc/tree-vectorizer.h gcc-17-20260705/gcc/tree-vectorizer.h
*** gcc-17-20260628/gcc/tree-vectorizer.h	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/gcc/tree-vectorizer.h	Sun Jul  5 22:32:17 2026
*************** public:
*** 978,983 ****
--- 978,987 ----
       it can be that no unrolling is needed, and thus this is 1.  */
    poly_uint64 vectorization_factor;
  
+   /* Gimple operand for the number of scalar iteration handed per loop
+      iteration, and therefore how much to increment each IV by.  */
+   tree iv_increment;
+ 
    /* If this loop is an epilogue loop whose main loop can be skipped,
       MAIN_LOOP_EDGE is the edge from the main loop to this loop's
       preheader.  SKIP_MAIN_LOOP_EDGE is then the edge that skips the
*************** public:
*** 1302,1307 ****
--- 1306,1314 ----
  #define LOOP_VINFO_ALLOW_MUTUAL_ALIGNMENT(L) (L)->allow_mutual_alignment
  #define LOOP_VINFO_PARTIAL_LOAD_STORE_BIAS(L) (L)->partial_load_store_bias
  #define LOOP_VINFO_VECT_FACTOR(L)          (L)->vectorization_factor
+ #define LOOP_VINFO_IV_INCREMENT(L)         (L)->iv_increment
+ #define LOOP_VINFO_IV_INCREMENT_INVARIANT_P(L) \
+   (!LOOP_VINFO_USING_SELECT_VL_P (L))
  #define LOOP_VINFO_MAX_VECT_FACTOR(L)      (L)->max_vectorization_factor
  #define LOOP_VINFO_MASKS(L)                (L)->masks
  #define LOOP_VINFO_LENS(L)                 (L)->lens
*************** extern tree vect_create_data_ref_ptr (ve
*** 2650,2656 ****
  				      tree *, gimple_stmt_iterator *,
  				      gimple **, bool,
  				      tree = NULL_TREE);
! extern tree bump_vector_ptr (vec_info *, tree, gimple *, gimple_stmt_iterator *,
  			     stmt_vec_info, tree);
  extern void vect_copy_ref_info (tree, tree);
  extern tree vect_create_destination_var (tree, tree);
--- 2657,2663 ----
  				      tree *, gimple_stmt_iterator *,
  				      gimple **, bool,
  				      tree = NULL_TREE);
! extern tree bump_vector_ptr (vec_info *, tree, gimple_stmt_iterator *,
  			     stmt_vec_info, tree);
  extern void vect_copy_ref_info (tree, tree);
  extern tree vect_create_destination_var (tree, tree);
*************** extern opt_loop_vec_info vect_analyze_lo
*** 2684,2689 ****
--- 2691,2697 ----
  extern tree vect_build_loop_niters (loop_vec_info, bool * = NULL);
  extern void vect_gen_vector_loop_niters (loop_vec_info, tree, tree *,
  					 tree *, bool);
+ extern tree vect_get_loop_iv_increment (loop_vec_info);
  extern tree vect_halve_mask_nunits (tree, machine_mode);
  extern tree vect_double_mask_nunits (tree, machine_mode);
  extern void vect_record_loop_mask (loop_vec_info, vec_loop_masks *,
diff -Nrcpad gcc-17-20260628/gcc/tree.cc gcc-17-20260705/gcc/tree.cc
*** gcc-17-20260628/gcc/tree.cc	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/gcc/tree.cc	Sun Jul  5 22:32:17 2026
*************** build_vector_from_ctor (tree type, const
*** 2201,2223 ****
    if (vec_safe_length (v) == 0)
      return build_zero_cst (type);
  
!   unsigned HOST_WIDE_INT idx, nelts, step = 1;
    tree value;
  
    /* If the vector is a VLA, build a VLA constant vector.  */
!   if (!TYPE_VECTOR_SUBPARTS (type).is_constant (&nelts))
!     {
!       nelts = constant_lower_bound (TYPE_VECTOR_SUBPARTS (type));
!       gcc_assert (vec_safe_length (v) <= nelts);
!       step = 2;
!     }
  
!   tree_vector_builder vec (type, nelts, step);
    FOR_EACH_CONSTRUCTOR_VALUE (v, idx, value)
      {
        if (TREE_CODE (value) == VECTOR_CST)
  	{
! 	  /* If NELTS is constant then this must be too.  */
  	  unsigned int sub_nelts = VECTOR_CST_NELTS (value).to_constant ();
  	  for (unsigned i = 0; i < sub_nelts; ++i)
  	    vec.quick_push (VECTOR_CST_ELT (value, i));
--- 2201,2220 ----
    if (vec_safe_length (v) == 0)
      return build_zero_cst (type);
  
!   unsigned HOST_WIDE_INT idx, npatterns, nelts_per_pattern;
    tree value;
  
    /* If the vector is a VLA, build a VLA constant vector.  */
!   npatterns = constant_lower_bound (TYPE_VECTOR_SUBPARTS (type));
!   nelts_per_pattern = TYPE_VECTOR_SUBPARTS (type).is_constant () ? 1 : 2;
!   gcc_assert (vec_safe_length (v) <= npatterns);
  
!   tree_vector_builder vec (type, npatterns, nelts_per_pattern);
    FOR_EACH_CONSTRUCTOR_VALUE (v, idx, value)
      {
        if (TREE_CODE (value) == VECTOR_CST)
  	{
! 	  /* If NPATTERNS is constant then this must be too.  */
  	  unsigned int sub_nelts = VECTOR_CST_NELTS (value).to_constant ();
  	  for (unsigned i = 0; i < sub_nelts; ++i)
  	    vec.quick_push (VECTOR_CST_ELT (value, i));
*************** build_vector_from_ctor (tree type, const
*** 2225,2231 ****
        else
  	vec.quick_push (value);
      }
!   while (vec.length () < nelts * step)
      vec.quick_push (build_zero_cst (TREE_TYPE (type)));
  
    return vec.build ();
--- 2222,2228 ----
        else
  	vec.quick_push (value);
      }
!   while (vec.length () < npatterns * nelts_per_pattern)
      vec.quick_push (build_zero_cst (TREE_TYPE (type)));
  
    return vec.build ();
diff -Nrcpad gcc-17-20260628/gnattools/ChangeLog gcc-17-20260705/gnattools/ChangeLog
*** gcc-17-20260628/gnattools/ChangeLog	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/gnattools/ChangeLog	Sun Jul  5 22:32:17 2026
***************
*** 1,3 ****
--- 1,9 ----
+ 2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* configure: Regenerate.
+ 	* configure.ac: Replace AC_HELP_STRING with AS_HELP_STRING.
+ 
  2026-05-10  Eric Botcazou  <ebotcazou@adacore.com>
  
  	PR ada/125232
diff -Nrcpad gcc-17-20260628/gnattools/configure gcc-17-20260705/gnattools/configure
*** gcc-17-20260628/gnattools/configure	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/gnattools/configure	Sun Jul  5 22:32:17 2026
*************** test -n "$target_alias" &&
*** 2024,2030 ****
      NONENONEs,x,x, &&
    program_prefix=${target_alias}-
  
- 
  ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 2024,2029 ----
*************** ac_link='$CC -o conftest$ac_exeext $CFLA
*** 2815,2821 ****
  ac_compiler_gnu=$ac_cv_c_compiler_gnu
  
  
- 
  if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}gnatbind", so it can be a program name with args.
  set dummy ${ac_tool_prefix}gnatbind; ac_word=$2
--- 2814,2819 ----
diff -Nrcpad gcc-17-20260628/gnattools/configure.ac gcc-17-20260705/gnattools/configure.ac
*** gcc-17-20260628/gnattools/configure.ac	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/gnattools/configure.ac	Sun Jul  5 22:32:17 2026
*************** AC_CONFIG_SRCDIR([Makefile.in])
*** 25,31 ****
  # Command-line options.
  # Very limited version of AC_MAINTAINER_MODE.
  AC_ARG_ENABLE([maintainer-mode],
!   [AC_HELP_STRING([--enable-maintainer-mode],
                   [enable make rules and dependencies not useful (and
                    sometimes confusing) to the casual installer])],
    [case ${enable_maintainer_mode} in
--- 25,31 ----
  # Command-line options.
  # Very limited version of AC_MAINTAINER_MODE.
  AC_ARG_ENABLE([maintainer-mode],
!   [AS_HELP_STRING([--enable-maintainer-mode],
                   [enable make rules and dependencies not useful (and
                    sometimes confusing) to the casual installer])],
    [case ${enable_maintainer_mode} in
diff -Nrcpad gcc-17-20260628/gotools/ChangeLog gcc-17-20260705/gotools/ChangeLog
*** gcc-17-20260628/gotools/ChangeLog	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/gotools/ChangeLog	Sun Jul  5 22:32:17 2026
***************
*** 1,3 ****
--- 1,9 ----
+ 2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* configure: Regenerate.
+ 	* configure.ac: Replace AC_CANONICAL_SYSTEM with AC_CANONICAL_TARGET.
+ 
  2024-04-15  Jakub Jelinek  <jakub@redhat.com>
  
  	* Makefile.am (install-exec-local, uninstall-local): Add goals
diff -Nrcpad gcc-17-20260628/gotools/configure gcc-17-20260705/gotools/configure
*** gcc-17-20260628/gotools/configure	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/gotools/configure	Sun Jul  5 22:32:17 2026
*************** test -n "$target_alias" &&
*** 2104,2110 ****
    test "$program_prefix$program_suffix$program_transform_name" = \
      NONENONEs,x,x, &&
    program_prefix=${target_alias}-
- 
  test "$program_prefix" != NONE &&
    program_transform_name="s&^&$program_prefix&;$program_transform_name"
  # Use a double $ so make ignores it.
--- 2104,2109 ----
diff -Nrcpad gcc-17-20260628/gotools/configure.ac gcc-17-20260705/gotools/configure.ac
*** gcc-17-20260628/gotools/configure.ac	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/gotools/configure.ac	Sun Jul  5 22:32:17 2026
*************** test "$host_noncanonical" = "$target_non
*** 32,38 ****
      NONENONEs,x,x, &&
    program_transform_name=s,y,y,
  
! AC_CANONICAL_SYSTEM
  AC_ARG_PROGRAM
  
  AM_INIT_AUTOMAKE([1.9.3 no-define foreign no-dist -Wall -Wno-portability])
--- 32,38 ----
      NONENONEs,x,x, &&
    program_transform_name=s,y,y,
  
! AC_CANONICAL_TARGET
  AC_ARG_PROGRAM
  
  AM_INIT_AUTOMAKE([1.9.3 no-define foreign no-dist -Wall -Wno-portability])
diff -Nrcpad gcc-17-20260628/include/ChangeLog gcc-17-20260705/include/ChangeLog
*** gcc-17-20260628/include/ChangeLog	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/include/ChangeLog	Sun Jul  5 22:32:17 2026
***************
*** 1,3 ****
--- 1,7 ----
+ 2026-06-30  Chung-Lin Tang  <cltang@baylibre.com>
+ 
+ 	* gomp-constants.h (enum gomp_map_kind): Add GOMP_MAP_USES_ALLOCATORS.
+ 
  2026-06-24  Paul-Antoine Arras  <parras@baylibre.com>
  
  	* gomp-constants.h (GOMP_BARRIER_IMPLICIT_PARALLEL): New macro.
diff -Nrcpad gcc-17-20260628/include/gomp-constants.h gcc-17-20260705/include/gomp-constants.h
*** gcc-17-20260628/include/gomp-constants.h	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/include/gomp-constants.h	Sun Jul  5 22:32:17 2026
*************** enum gomp_map_kind
*** 195,200 ****
--- 195,205 ----
      GOMP_MAP_ATTACH_ZERO_LENGTH_ARRAY_SECTION
        =					(GOMP_MAP_DEEP_COPY | 2),
  
+     /* Used to pass a descriptor for an OpenMP uses_allocators clause,
+        also serves as an effective 'firstprivate' clause for the allocator
+        variable.  */
+     GOMP_MAP_USES_ALLOCATORS =		(GOMP_MAP_DEEP_COPY | 3),
+ 
      /* Internal to GCC, not used in libgomp.  */
      /* Do not map, but pointer assign a pointer instead.  */
      GOMP_MAP_FIRSTPRIVATE_POINTER =	(GOMP_MAP_LAST | 1),
diff -Nrcpad gcc-17-20260628/libada/ChangeLog gcc-17-20260705/libada/ChangeLog
*** gcc-17-20260628/libada/ChangeLog	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libada/ChangeLog	Sun Jul  5 22:32:17 2026
***************
*** 1,3 ****
--- 1,8 ----
+ 2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* configure.ac: Replace AC_HELP_STRING with AS_HELP_STRING.
+ 
  2023-08-07  John Ericson  <git@JohnEricson.me>
  
  	* configure: Regenerate.
diff -Nrcpad gcc-17-20260628/libada/configure.ac gcc-17-20260705/libada/configure.ac
*** gcc-17-20260628/libada/configure.ac	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libada/configure.ac	Sun Jul  5 22:32:17 2026
*************** AC_ARG_ENABLE(version-specific-runtime-l
*** 56,62 ****
  
  # Very limited version of AC_MAINTAINER_MODE.
  AC_ARG_ENABLE([maintainer-mode],
!   [AC_HELP_STRING([--enable-maintainer-mode],
                   [enable make rules and dependencies not useful (and
                    sometimes confusing) to the casual installer])],
    [case ${enable_maintainer_mode} in
--- 56,62 ----
  
  # Very limited version of AC_MAINTAINER_MODE.
  AC_ARG_ENABLE([maintainer-mode],
!   [AS_HELP_STRING([--enable-maintainer-mode],
                   [enable make rules and dependencies not useful (and
                    sometimes confusing) to the casual installer])],
    [case ${enable_maintainer_mode} in
*************** m4_rename_force([real_PRECIOUS],[_AC_ARG
*** 122,128 ****
  AC_SUBST(CFLAGS)
  
  AC_ARG_ENABLE([shared],
! [AC_HELP_STRING([--disable-shared],
                  [don't provide a shared libgnat])],
  [
  case $enable_shared in
--- 122,128 ----
  AC_SUBST(CFLAGS)
  
  AC_ARG_ENABLE([shared],
! [AS_HELP_STRING([--disable-shared],
                  [don't provide a shared libgnat])],
  [
  case $enable_shared in
diff -Nrcpad gcc-17-20260628/libatomic/ChangeLog gcc-17-20260705/libatomic/ChangeLog
*** gcc-17-20260628/libatomic/ChangeLog	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libatomic/ChangeLog	Sun Jul  5 22:32:17 2026
***************
*** 1,3 ****
--- 1,13 ----
+ 2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* acinclude.m4: Replace AC_ERROR with AS_MSG_ERROR.  Replace AC_TRY_LINK
+ 	with AC_LINK_IFELSE.  Replace AC_TRY_COMPILE with AC_COMPILE_IFELSE.
+ 	Replace AC_HELP_STRING with AS_HELP_STRING.  Replace
+ 	AC_TRY_RUN with AC_RUN_IFELSE.
+ 	* configure.ac: Replace AM_PROG_LIBTOOL with LT_INIT.  Replace
+ 	AC_STDC_HEADERS with AC_HEADER_STDC.
+ 
  2026-06-17  Muhammad Kamran  <muhammad.kamran@arm.com>
  
  	* config/linux/aarch64/atomic_16.S (FEATURE_1_AND_MARK): Define.
diff -Nrcpad gcc-17-20260628/libatomic/acinclude.m4 gcc-17-20260705/libatomic/acinclude.m4
*** gcc-17-20260628/libatomic/acinclude.m4	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libatomic/acinclude.m4	Sun Jul  5 22:32:17 2026
*************** AC_DEFUN([LIBAT_WORDSIZE],[
*** 180,186 ****
    AC_CACHE_CHECK([for the word size],[libat_cv_wordsize],
      [AC_COMPUTE_INT(libat_cv_wordsize,
        [sizeof(word)], [typedef int word __attribute__((mode(word)));],
!       AC_ERROR([Could not determine word size.]))])
    AC_DEFINE_UNQUOTED(WORDSIZE, $libat_cv_wordsize,
      [The word size in bytes of the machine.])
  ])
--- 180,186 ----
    AC_CACHE_CHECK([for the word size],[libat_cv_wordsize],
      [AC_COMPUTE_INT(libat_cv_wordsize,
        [sizeof(word)], [typedef int word __attribute__((mode(word)));],
!       AC_MSG_ERROR([Could not determine word size.]))])
    AC_DEFINE_UNQUOTED(WORDSIZE, $libat_cv_wordsize,
      [The word size in bytes of the machine.])
  ])
*************** AC_DEFUN([LIBAT_CHECK_IFUNC], [
*** 193,204 ****
  		 libat_cv_have_ifunc, [
    save_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -Werror"
!   AC_TRY_LINK([
      int foo_alt(void) { return 0; }
      typedef int F (void);
      F *foo_sel(void) { return foo_alt; }
!     int foo(void) __attribute__((ifunc("foo_sel")));],
!     [return foo();], libat_cv_have_ifunc=yes, libat_cv_have_ifunc=no)])
    LIBAT_DEFINE_YESNO([HAVE_IFUNC], [$libat_cv_have_ifunc],
        [Define to 1 if the target supports __attribute__((ifunc(...))).])
  ])
--- 193,204 ----
  		 libat_cv_have_ifunc, [
    save_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -Werror"
!   AC_LINK_IFELSE([AC_LANG_PROGRAM([[
      int foo_alt(void) { return 0; }
      typedef int F (void);
      F *foo_sel(void) { return foo_alt; }
!     int foo(void) __attribute__((ifunc("foo_sel")));]],
!     [[return foo();]])], libat_cv_have_ifunc=yes, libat_cv_have_ifunc=no)])
    LIBAT_DEFINE_YESNO([HAVE_IFUNC], [$libat_cv_have_ifunc],
        [Define to 1 if the target supports __attribute__((ifunc(...))).])
  ])
*************** AC_DEFUN([LIBAT_CHECK_ATTRIBUTE_DLLEXPOR
*** 212,219 ****
  		 libat_cv_have_attribute_dllexport, [
    save_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -Werror"
!   AC_TRY_COMPILE([void __attribute__((dllexport)) foo(void) { }],
! 		 [], libat_cv_have_attribute_dllexport=yes,
  		 libat_cv_have_attribute_dllexport=no)
    CFLAGS="$save_CFLAGS"])
    if test $libat_cv_have_attribute_dllexport = yes; then
--- 212,221 ----
  		 libat_cv_have_attribute_dllexport, [
    save_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -Werror"
!   AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
! 		 [[void __attribute__((dllexport)) foo(void) { }]],
! 		 [[]])],
! 		 libat_cv_have_attribute_dllexport=yes,
  		 libat_cv_have_attribute_dllexport=no)
    CFLAGS="$save_CFLAGS"])
    if test $libat_cv_have_attribute_dllexport = yes; then
*************** dnl Check whether the target supports sy
*** 225,234 ****
  AC_DEFUN([LIBAT_CHECK_ATTRIBUTE_ALIAS], [
    AC_CACHE_CHECK([whether the target supports symbol aliases],
  		 libat_cv_have_attribute_alias, [
!   AC_TRY_LINK([
  void foo(void) { }
! extern void bar(void) __attribute__((alias("foo")));],
!     [bar();], libat_cv_have_attribute_alias=yes, libat_cv_have_attribute_alias=no)])
    if test $libat_cv_have_attribute_alias = yes; then
      AC_DEFINE(HAVE_ATTRIBUTE_ALIAS, 1,
        [Define to 1 if the target supports __attribute__((alias(...))).])
--- 227,237 ----
  AC_DEFUN([LIBAT_CHECK_ATTRIBUTE_ALIAS], [
    AC_CACHE_CHECK([whether the target supports symbol aliases],
  		 libat_cv_have_attribute_alias, [
!   AC_LINK_IFELSE([AC_LANG_PROGRAM([[
  void foo(void) { }
! extern void bar(void) __attribute__((alias("foo")));]],
!     [[bar();]])],
!     libat_cv_have_attribute_alias=yes, libat_cv_have_attribute_alias=no)])
    if test $libat_cv_have_attribute_alias = yes; then
      AC_DEFINE(HAVE_ATTRIBUTE_ALIAS, 1,
        [Define to 1 if the target supports __attribute__((alias(...))).])
*************** dnl See docs/html/17_intro/configury.htm
*** 247,253 ****
  dnl
  m4_define([LIBAT_ENABLE],[dnl
  m4_define([_g_switch],[--enable-$1])dnl
! m4_define([_g_help],[AC_HELP_STRING(_g_switch$3,[$4 @<:@default=$2@:>@])])dnl
   AC_ARG_ENABLE($1,_g_help,
    m4_bmatch([$5],
     [^permit ],
--- 250,256 ----
  dnl
  m4_define([LIBAT_ENABLE],[dnl
  m4_define([_g_switch],[--enable-$1])dnl
! m4_define([_g_help],[AS_HELP_STRING(_g_switch$3,[$4 @<:@default=$2@:>@])])dnl
   AC_ARG_ENABLE($1,_g_help,
    m4_bmatch([$5],
     [^permit ],
*************** AC_DEFUN([LIBAT_CHECK_LINKER_FEATURES],
*** 357,370 ****
      # .eh_frame and now some of the glibc sections for iconv).
      # Bzzzzt.  Thanks for playing, maybe next time.
      AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
!     AC_TRY_RUN([
       int main(void)
       {
         try { throw 1; }
         catch (...) { };
         return 0;
       }
!     ], [ac_sectionLDflags=yes],[ac_sectionLDflags=no], [ac_sectionLDflags=yes])
      if test "$ac_test_CFLAGS" = set; then
        CFLAGS="$ac_save_CFLAGS"
      else
--- 360,373 ----
      # .eh_frame and now some of the glibc sections for iconv).
      # Bzzzzt.  Thanks for playing, maybe next time.
      AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
!     AC_RUN_IFELSE([AC_LANG_SOURCE([[
       int main(void)
       {
         try { throw 1; }
         catch (...) { };
         return 0;
       }
!     ]])], [ac_sectionLDflags=yes],[ac_sectionLDflags=no], [ac_sectionLDflags=yes])
      if test "$ac_test_CFLAGS" = set; then
        CFLAGS="$ac_save_CFLAGS"
      else
*************** if test $enable_symvers != no; then
*** 452,458 ****
    AC_MSG_CHECKING([for shared libgcc])
    ac_save_CFLAGS="$CFLAGS"
    CFLAGS=' -lgcc_s'
!   AC_TRY_LINK(, [return 0;], libat_shared_libgcc=yes, libat_shared_libgcc=no)
    CFLAGS="$ac_save_CFLAGS"
    if test $libat_shared_libgcc = no; then
      cat > conftest.c <<EOF
--- 455,462 ----
    AC_MSG_CHECKING([for shared libgcc])
    ac_save_CFLAGS="$CFLAGS"
    CFLAGS=' -lgcc_s'
!   AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[return 0;]])],
! 		 [libat_shared_libgcc=yes], [libat_shared_libgcc=no])
    CFLAGS="$ac_save_CFLAGS"
    if test $libat_shared_libgcc = no; then
      cat > conftest.c <<EOF
*************** changequote([,])dnl
*** 467,473 ****
      rm -f conftest.c conftest.so
      if test x${libat_libgcc_s_suffix+set} = xset; then
        CFLAGS=" -lgcc_s$libat_libgcc_s_suffix"
!       AC_TRY_LINK(, [return 0;], libat_shared_libgcc=yes)
        CFLAGS="$ac_save_CFLAGS"
      fi
    fi
--- 471,478 ----
      rm -f conftest.c conftest.so
      if test x${libat_libgcc_s_suffix+set} = xset; then
        CFLAGS=" -lgcc_s$libat_libgcc_s_suffix"
!       AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[return 0;]])],
! 		     [libat_shared_libgcc=yes],[])
        CFLAGS="$ac_save_CFLAGS"
      fi
    fi
diff -Nrcpad gcc-17-20260628/libatomic/configure.ac gcc-17-20260705/libatomic/configure.ac
*** gcc-17-20260628/libatomic/configure.ac	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libatomic/configure.ac	Sun Jul  5 22:32:17 2026
*************** AC_CHECK_TOOL(RANLIB, ranlib, ranlib-not
*** 164,170 ****
  AC_PROG_INSTALL
  
  # Configure libtool
! AM_PROG_LIBTOOL
  ACX_LT_HOST_FLAGS
  AC_SUBST(enable_shared)
  AC_SUBST(enable_static)
--- 164,170 ----
  AC_PROG_INSTALL
  
  # Configure libtool
! LT_INIT
  ACX_LT_HOST_FLAGS
  AC_SUBST(enable_shared)
  AC_SUBST(enable_static)
*************** AC_DEFINE_UNQUOTED(IFUNC_RESOLVER_ARGS,
*** 205,211 ****
  CFLAGS="$__libatomic_save_CFLAGS__ -fno-sync-libcalls $XCFLAGS"
  
  # Check header files.
! AC_STDC_HEADERS
  ACX_HEADER_STRING
  GCC_HEADER_STDINT(gstdint.h)
  AC_CHECK_HEADERS([fenv.h])
--- 205,211 ----
  CFLAGS="$__libatomic_save_CFLAGS__ -fno-sync-libcalls $XCFLAGS"
  
  # Check header files.
! AC_HEADER_STDC
  ACX_HEADER_STRING
  GCC_HEADER_STDINT(gstdint.h)
  AC_CHECK_HEADERS([fenv.h])
diff -Nrcpad gcc-17-20260628/libbacktrace/ChangeLog gcc-17-20260705/libbacktrace/ChangeLog
*** gcc-17-20260628/libbacktrace/ChangeLog	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libbacktrace/ChangeLog	Sun Jul  5 22:32:17 2026
***************
*** 1,3 ****
--- 1,9 ----
+ 2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* configure: Regenerate.
+ 	* configure.ac: Remove redundant AM_PROG_LIBTOOL.
+ 
  2026-06-27  Ian Lance Taylor  <iant@golang.org>
  
  	* elf.c (elf_zstd_unpack_seq_decode): Set table field for RLE
diff -Nrcpad gcc-17-20260628/libbacktrace/configure gcc-17-20260705/libbacktrace/configure
*** gcc-17-20260628/libbacktrace/configure	Sun Jun 28 22:32:22 2026
--- gcc-17-20260705/libbacktrace/configure	Sun Jul  5 22:32:22 2026
*************** CC="$lt_save_CC"
*** 12368,12374 ****
  
  
  
- 
   if test x$enable_darwin_at_rpath = xyes; then
    ENABLE_DARWIN_AT_RPATH_TRUE=
    ENABLE_DARWIN_AT_RPATH_FALSE='#'
--- 12368,12373 ----
diff -Nrcpad gcc-17-20260628/libbacktrace/configure.ac gcc-17-20260705/libbacktrace/configure.ac
*** gcc-17-20260628/libbacktrace/configure.ac	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libbacktrace/configure.ac	Sun Jul  5 22:32:17 2026
*************** AC_CHECK_PROG(DWZ, dwz, dwz)
*** 83,89 ****
  AM_CONDITIONAL(HAVE_DWZ, test "$DWZ" != "")
  
  LT_INIT
- AM_PROG_LIBTOOL
  
  AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = xyes])
  
--- 83,88 ----
diff -Nrcpad gcc-17-20260628/libcc1/ChangeLog gcc-17-20260705/libcc1/ChangeLog
*** gcc-17-20260628/libcc1/ChangeLog	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libcc1/ChangeLog	Sun Jul  5 22:32:17 2026
***************
*** 1,3 ****
--- 1,10 ----
+ 2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* configure: Regenerate.
+ 	* configure.ac: Replace AC_CANONICAL_SYSTEM with AC_CANONICAL_TARGET.
+ 	Remove redundant AM_PROG_LIBTOOL.
+ 
  2026-01-15  Marek Polacek  <polacek@redhat.com>
  	    Jakub Jelinek  <jakub@redhat.com>
  
diff -Nrcpad gcc-17-20260628/libcc1/configure gcc-17-20260705/libcc1/configure
*** gcc-17-20260628/libcc1/configure	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libcc1/configure	Sun Jul  5 22:32:17 2026
*************** test -n "$target_alias" &&
*** 2564,2570 ****
    test "$program_prefix$program_suffix$program_transform_name" = \
      NONENONEs,x,x, &&
    program_prefix=${target_alias}-
- 
  # Expand $ac_aux_dir to an absolute path.
  am_aux_dir=`cd "$ac_aux_dir" && pwd`
  
--- 2564,2569 ----
*************** else
*** 11279,11285 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11282 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 11278,11284 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11281 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 11385,11391 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11388 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 11384,11390 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11387 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** CC="$lt_save_CC"
*** 11622,11628 ****
  # Only expand once:
  
  
- 
  ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 11621,11626 ----
diff -Nrcpad gcc-17-20260628/libcc1/configure.ac gcc-17-20260705/libcc1/configure.ac
*** gcc-17-20260628/libcc1/configure.ac	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libcc1/configure.ac	Sun Jul  5 22:32:17 2026
*************** AC_INIT([libcc1], [version-unused])
*** 20,26 ****
  AC_CONFIG_SRCDIR([libcc1.cc])
  AC_CONFIG_HEADER(cc1plugin-config.h)
  
! AC_CANONICAL_SYSTEM
  AC_USE_SYSTEM_EXTENSIONS
  # Determine the noncanonical target name, for directory use.
  ACX_NONCANONICAL_TARGET
--- 20,26 ----
  AC_CONFIG_SRCDIR([libcc1.cc])
  AC_CONFIG_HEADER(cc1plugin-config.h)
  
! AC_CANONICAL_TARGET
  AC_USE_SYSTEM_EXTENSIONS
  # Determine the noncanonical target name, for directory use.
  ACX_NONCANONICAL_TARGET
*************** AM_INIT_AUTOMAKE([1.11.1 foreign no-dist
*** 36,42 ****
  AM_MAINTAINER_MODE
  
  LT_INIT([disable-static])
- AM_PROG_LIBTOOL
  AC_PROG_CXX
  
  visibility=
--- 36,41 ----
diff -Nrcpad gcc-17-20260628/libcpp/ChangeLog gcc-17-20260705/libcpp/ChangeLog
*** gcc-17-20260628/libcpp/ChangeLog	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libcpp/ChangeLog	Sun Jul  5 22:32:17 2026
***************
*** 1,3 ****
--- 1,19 ----
+ 2026-06-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/125837
+ 	* include/cpplib.h: Implement C++29 P3540R3 - #embed offset parameter.
+ 	(enum cpp_warning_reason): Add CPP_W_CXX29_EXTENSIONS.
+ 	* directives.cc (EMBED_PARAMS): Add OFFSET.
+ 	(enum embed_param_kind): Change NUM_EMBED_STD_PARAMS.
+ 	(_cpp_parse_embed_params): Handle offset parameter for C++.
+ 
+ 2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* configure: Regenerate.
+ 	* configure.ac: Replace AC_CANONICAL_SYSTEM with AC_CANONICAL_TARGET.
+ 	Replace AC_TRY_COMPILE with AC_COMPILE_IFELSE.
+ 
  2026-06-16  Jakub Jelinek  <jakub@redhat.com>
  
  	* include/cpplib.h (enum c_lang): Add CLK_GNUCXX29 and CLK_CXX29.
diff -Nrcpad gcc-17-20260628/libcpp/configure gcc-17-20260705/libcpp/configure
*** gcc-17-20260628/libcpp/configure	Sun Jun 28 22:32:22 2026
--- gcc-17-20260705/libcpp/configure	Sun Jul  5 22:32:22 2026
*************** test -n "$target_alias" &&
*** 2813,2819 ****
      NONENONEs,x,x, &&
    program_prefix=${target_alias}-
  
- 
  # Checks for programs.
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
  $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
--- 2813,2818 ----
*************** $as_echo "found xgettext program is not
*** 6908,6914 ****
          rm -f messages.po
    fi
  
!   ac_config_commands="$ac_config_commands default-1"
  
  
  
--- 6907,6913 ----
          rm -f messages.po
    fi
  
!   ac_config_commands="$ac_config_commands posubdirs"
  
  
  
*************** for ac_config_target in $ac_config_targe
*** 10132,10138 ****
  do
    case $ac_config_target in
      "depdir") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir" ;;
!     "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
      "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;;
      "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
  
--- 10131,10137 ----
  do
    case $ac_config_target in
      "depdir") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir" ;;
!     "posubdirs") CONFIG_COMMANDS="$CONFIG_COMMANDS posubdirs" ;;
      "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;;
      "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
  
*************** $as_echo "$as_me: executing $ac_file com
*** 10691,10697 ****
  
    case $ac_file$ac_mode in
      "depdir":C) $SHELL $ac_aux_dir/mkinstalldirs $DEPDIR ;;
!     "default-1":C)
      for ac_file in $CONFIG_FILES; do
        # Support "outfile[:infile[:infile...]]"
        case "$ac_file" in
--- 10690,10696 ----
  
    case $ac_file$ac_mode in
      "depdir":C) $SHELL $ac_aux_dir/mkinstalldirs $DEPDIR ;;
!     "posubdirs":C)
      for ac_file in $CONFIG_FILES; do
        # Support "outfile[:infile[:infile...]]"
        case "$ac_file" in
diff -Nrcpad gcc-17-20260628/libcpp/configure.ac gcc-17-20260705/libcpp/configure.ac
*** gcc-17-20260628/libcpp/configure.ac	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libcpp/configure.ac	Sun Jul  5 22:32:17 2026
***************
*** 4,10 ****
  AC_INIT(cpplib, [ ], https://gcc.gnu.org/bugs/, cpplib)
  AC_CONFIG_SRCDIR(ucnid.h)
  AC_CONFIG_MACRO_DIR(../config)
! AC_CANONICAL_SYSTEM
  
  # Checks for programs.
  AC_PROG_MAKE_SET
--- 4,10 ----
  AC_INIT(cpplib, [ ], https://gcc.gnu.org/bugs/, cpplib)
  AC_CONFIG_SRCDIR(ucnid.h)
  AC_CONFIG_MACRO_DIR(../config)
! AC_CANONICAL_TARGET
  
  # Checks for programs.
  AC_PROG_MAKE_SET
*************** AM_LANGINFO_CODESET
*** 92,102 ****
  ZW_GNU_GETTEXT_SISTER_DIR
  
  AC_CACHE_CHECK(for uchar, gcc_cv_type_uchar,
! [AC_TRY_COMPILE([
  #include <sys/types.h>
! ],
! [if ((uchar *)0) return 0;
!  if (sizeof(uchar)) return 0;],
  ac_cv_type_uchar=yes, ac_cv_type_uchar=no)])
  if test $ac_cv_type_uchar = yes; then
    AC_DEFINE(HAVE_UCHAR, 1,
--- 92,102 ----
  ZW_GNU_GETTEXT_SISTER_DIR
  
  AC_CACHE_CHECK(for uchar, gcc_cv_type_uchar,
! [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
  #include <sys/types.h>
! ]],
! [[if ((uchar *)0) return 0;
!  if (sizeof(uchar)) return 0;]])],
  ac_cv_type_uchar=yes, ac_cv_type_uchar=no)])
  if test $ac_cv_type_uchar = yes; then
    AC_DEFINE(HAVE_UCHAR, 1,
*************** fi
*** 197,203 ****
  
  case $target in
    i?86-* | x86_64-*)
!     AC_TRY_COMPILE([], [asm ("pshufb %xmm0, %xmm1")],
        [AC_DEFINE([HAVE_SSSE3], [1],
  		 [Define to 1 if you can assemble SSSE3 insns.])])
  esac
--- 197,203 ----
  
  case $target in
    i?86-* | x86_64-*)
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[asm ("pshufb %xmm0, %xmm1")]])],
        [AC_DEFINE([HAVE_SSSE3], [1],
  		 [Define to 1 if you can assemble SSSE3 insns.])])
  esac
diff -Nrcpad gcc-17-20260628/libcpp/directives.cc gcc-17-20260705/libcpp/directives.cc
*** gcc-17-20260628/libcpp/directives.cc	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libcpp/directives.cc	Sun Jul  5 22:32:17 2026
*************** skip_balanced_token_seq (cpp_reader *pfi
*** 1106,1111 ****
--- 1106,1112 ----
    EMBED_PARAM (PREFIX, "prefix")	\
    EMBED_PARAM (SUFFIX, "suffix")	\
    EMBED_PARAM (IF_EMPTY, "if_empty")	\
+   EMBED_PARAM (OFFSET, "offset")	\
    EMBED_PARAM (GNU_BASE64, "base64")	\
    EMBED_PARAM (GNU_OFFSET, "offset")
  
*************** enum embed_param_kind {
*** 1114,1120 ****
    EMBED_PARAMS
  #undef EMBED_PARAM
    NUM_EMBED_PARAMS,
!   NUM_EMBED_STD_PARAMS = EMBED_PARAM_IF_EMPTY + 1
  };
  
  static struct { int len; const char *name; } embed_params[NUM_EMBED_PARAMS] = {
--- 1115,1121 ----
    EMBED_PARAMS
  #undef EMBED_PARAM
    NUM_EMBED_PARAMS,
!   NUM_EMBED_STD_PARAMS = EMBED_PARAM_OFFSET + 1
  };
  
  static struct { int len; const char *name; } embed_params[NUM_EMBED_PARAMS] = {
*************** _cpp_parse_embed_params (cpp_reader *pfi
*** 1158,1163 ****
--- 1159,1165 ----
  	    }
  	  if (params->base64.count
  	      && (seen & ((1 << EMBED_PARAM_LIMIT)
+ 			  | (1 << EMBED_PARAM_OFFSET)
  			  | (1 << EMBED_PARAM_GNU_OFFSET))) != 0)
  	    {
  	      ret = false;
*************** _cpp_parse_embed_params (cpp_reader *pfi
*** 1165,1172 ****
  		cpp_error_with_line (pfile, CPP_DL_ERROR,
  				     params->base64.base_run.base->src_loc, 0,
  				     "%<gnu::base64%> parameter conflicts "
! 				     "with %<limit%> or %<gnu::offset%> "
! 				     "parameters");
  	    }
  	  else if (params->base64.count == 0
  		   && CPP_OPTION (pfile, preprocessed))
--- 1167,1174 ----
  		cpp_error_with_line (pfile, CPP_DL_ERROR,
  				     params->base64.base_run.base->src_loc, 0,
  				     "%<gnu::base64%> parameter conflicts "
! 				     "with %<limit%> or %<offset%> or "
! 				     "%<gnu::offset%> parameters");
  	    }
  	  else if (params->base64.count == 0
  		   && CPP_OPTION (pfile, preprocessed))
*************** _cpp_parse_embed_params (cpp_reader *pfi
*** 1241,1246 ****
--- 1243,1255 ----
  		&& memcmp (param_name, embed_params[i].name,
  			   param_name_len) == 0)
  	      {
+ 		/* Until C standardizes offset, people should use just
+ 		   gnu::offset in C.  When/if it is standardized, these
+ 		   3 lines should be removed and pedwarn condition and
+ 		   wording adjusted to cope with C too.  */
+ 		if (i == EMBED_PARAM_OFFSET
+ 		    && !CPP_OPTION (pfile, cplusplus))
+ 		  continue;
  		param_kind = i;
  		break;
  	      }
*************** _cpp_parse_embed_params (cpp_reader *pfi
*** 1285,1290 ****
--- 1294,1300 ----
  	cpp_error_with_line (pfile, CPP_DL_ERROR, loc, 0,
  			     "expected %<(%>");
        else if (param_kind == EMBED_PARAM_LIMIT
+ 	       || param_kind == EMBED_PARAM_OFFSET
  	       || param_kind == EMBED_PARAM_GNU_OFFSET)
  	{
   	  if (params->has_embed && pfile->op_stack == NULL)
*************** _cpp_parse_embed_params (cpp_reader *pfi
*** 1294,1302 ****
  	    params->limit = res;
  	  else
  	    {
  	      if (res > INTTYPE_MAXIMUM (off_t))
  		cpp_error_with_line (pfile, CPP_DL_ERROR, loc, 0,
! 				     "too large %<gnu::offset%> argument");
  	      else
  		params->offset = res;
  	    }
--- 1304,1330 ----
  	    params->limit = res;
  	  else
  	    {
+ 	      if ((seen & ((1 << EMBED_PARAM_OFFSET)
+ 			   | (1 << EMBED_PARAM_GNU_OFFSET)))
+ 		  == ((1 << EMBED_PARAM_OFFSET)
+ 		      | (1 << EMBED_PARAM_GNU_OFFSET)))
+ 		cpp_error_with_line (pfile, CPP_DL_ERROR, loc, 0,
+ 				     "%qs parameter conflicts with %qs "
+ 				     "parameter",
+ 				     param_kind == EMBED_PARAM_OFFSET
+ 				     ? "offset" : "gnu::offset",
+ 				     param_kind == EMBED_PARAM_OFFSET
+ 				     ? "gnu::offset" : "offset");
+ 	      if (param_kind == EMBED_PARAM_OFFSET
+ 		  && CPP_OPTION (pfile, lang) < CLK_GNUCXX29)
+ 		cpp_pedwarning_with_line (pfile, CPP_W_CXX29_EXTENSIONS, loc,
+ 					  0, "%qs parameter before C++29 is "
+ 					     "a GCC extension", "offset");
  	      if (res > INTTYPE_MAXIMUM (off_t))
  		cpp_error_with_line (pfile, CPP_DL_ERROR, loc, 0,
! 				     "too large %qs argument",
! 				     param_kind == EMBED_PARAM_OFFSET
! 				     ? "offset" : "gnu::offset");
  	      else
  		params->offset = res;
  	    }
diff -Nrcpad gcc-17-20260628/libcpp/include/cpplib.h gcc-17-20260705/libcpp/include/cpplib.h
*** gcc-17-20260628/libcpp/include/cpplib.h	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libcpp/include/cpplib.h	Sun Jul  5 22:32:17 2026
*************** enum cpp_warning_reason {
*** 761,766 ****
--- 761,767 ----
    CPP_W_CXX20_EXTENSIONS,
    CPP_W_CXX23_EXTENSIONS,
    CPP_W_CXX26_EXTENSIONS,
+   CPP_W_CXX29_EXTENSIONS,
    CPP_W_EXPANSION_TO_DEFINED,
    CPP_W_BIDIRECTIONAL,
    CPP_W_INVALID_UTF8,
diff -Nrcpad gcc-17-20260628/libgcc/ChangeLog gcc-17-20260705/libgcc/ChangeLog
*** gcc-17-20260628/libgcc/ChangeLog	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libgcc/ChangeLog	Sun Jul  5 22:32:17 2026
***************
*** 1,3 ****
--- 1,27 ----
+ 2026-07-04  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR libgcc/123976
+ 	* config/t-darwin-ehs: Add md-unwind-def.h as a
+ 	pre-requisite.
+ 
+ 2026-06-29  Claudio Bantaloukas  <Claudio.Bantaloukas@arm.com>
+ 
+ 	* config/aarch64/__arm_sc_memchr_scalar.S: New file.
+ 	* config/aarch64/__arm_sc_memcpy_scalar.S: Likewise.
+ 	* config/aarch64/__arm_sc_memset_scalar.S: Likewise.
+ 	* config/aarch64/libgcc-sme.ver (GCC_17.0): Export
+ 	__arm_sc_memchr, __arm_sc_memcpy, __arm_sc_memmove and
+ 	__arm_sc_memset.
+ 	* config/aarch64/t-aarch64: Add new files.
+ 	* config/aarch64/aarch64-asm.h: Add ENTRY_ALIAS.
+ 
+ 2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* configure: Regenerate.
+ 	* configure.ac: Replace AC_HELP_STRING with AS_HELP_STRING.  Replace
+ 	AC_TRY_COMPILE with AC_COMPILE_IFELSE.
+ 
  2026-06-17  Muhammad Kamran  <muhammad.kamran@arm.com>
  
  	* config/aarch64/aarch64-asm.h (FEATURE_1_AND_MARK): Define.
diff -Nrcpad gcc-17-20260628/libgcc/Makefile.in gcc-17-20260705/libgcc/Makefile.in
*** gcc-17-20260628/libgcc/Makefile.in	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libgcc/Makefile.in	Sun Jul  5 22:32:17 2026
*************** enable_vtable_verify = @enable_vtable_ve
*** 44,50 ****
  enable_decimal_float = @enable_decimal_float@
  fixed_point = @fixed_point@
  with_aix_soname = @with_aix_soname@
- solaris_ld_v2_maps = @solaris_ld_v2_maps@
  enable_execute_stack = @enable_execute_stack@
  unwind_header = @unwind_header@
  md_unwind_def_header = @md_unwind_def_header@
--- 44,49 ----
diff -Nrcpad gcc-17-20260628/libgcc/config/aarch64/__arm_sc_memchr_scalar.S gcc-17-20260705/libgcc/config/aarch64/__arm_sc_memchr_scalar.S
*** gcc-17-20260628/libgcc/config/aarch64/__arm_sc_memchr_scalar.S	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libgcc/config/aarch64/__arm_sc_memchr_scalar.S	Sun Jul  5 22:32:17 2026
***************
*** 0 ****
--- 1,128 ----
+ /* Support routine for SME.
+    Copyright (C) 2026 Free Software Foundation, Inc.
+ 
+    This file is part of GCC.
+ 
+    GCC 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.
+ 
+    GCC 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.
+ 
+    Under Section 7 of GPL version 3, you are granted additional
+    permissions described in the GCC Runtime Library Exception, version
+    3.1, as published by the Free Software Foundation.
+ 
+    You should have received a copy of the GNU General Public License and
+    a copy of the GCC Runtime Library Exception along with this program;
+    see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #include "aarch64-asm.h"
+ 
+ .arch armv8-a
+ 
+ #define result			x0
+ #define src_in			x0
+ #define chr_in			w1
+ #define chr_repeated	x1
+ #define count_in		x2
+ 
+ #define src				x3
+ #define zeroones		x4
+ #define	data1			x5
+ #define	tmp1			x6
+ #define tmp2			x7
+ #define found1			x8
+ #define src_end			x9
+ 
+ #define REP8_01 0x0101010101010101
+ #define REP8_7f 0x7f7f7f7f7f7f7f7f
+ 
+ /* This function implements the hacker's delight algorithm for searching
+    matching values. We find them in words by performing an XOR against the
+    repeated searched char. Then, x being the xor result, we calculate
+    (x - 0x0101010101010101) & ~(x | 0x7f7f7f7f7f7f7f7f). Words with a matching
+    byte will produce a non-zero result.
+ 
+    __arm_sc_mem* functions must be able to run in streaming mode and can thus
+    not make use of most AdvSIMD instructions. */
+ 
+ variant_pcs (__arm_sc_memchr)
+ 
+ ENTRY (__arm_sc_memchr)
+ 	cbz	count_in, L(no_match)
+ 
+ 	/* Replicate the needle byte across the rest of the word.  */
+ 	and	chr_in, chr_in, 255
+ 	orr	chr_in, chr_in, chr_in, lsl 8
+ 	orr	chr_in, chr_in, chr_in, lsl 16
+ 	orr	chr_repeated, chr_repeated, chr_repeated, lsl 32
+ 	mov	zeroones, REP8_01
+ 
+ 	bic	src, src_in, 7
+ 	ldr	data1, [src], 8
+ #ifdef __AARCH64EB__
+ 	rev	data1, data1
+ #endif
+ 	/* Skip unused bytes before src_in.  */
+ 	lsl	tmp1, src_in, 3
+ 	lsr	tmp2, zeroones, tmp1
+ 	lsr	data1, data1, tmp1
+ 
+ 	eor	data1, data1, chr_repeated
+ 	sub	tmp1, data1, tmp2
+ 	orr	tmp2, data1, REP8_7f
+ 	bic	found1, tmp1, tmp2
+ 	cbz	found1, L(loop_start)
+ 
+     /* Calculate the offset and return it if offset < count_in. */
+ 	rbit	found1, found1
+ 	clz	tmp1, found1
+ 	cmp	count_in, tmp1, lsr 3
+ 	add	result, src_in, tmp1, lsr 3
+ 	csel	result, result, xzr, hi
+ 	ret
+ 
+ 	.p2align 4
+ 
+ L(no_match):
+ 	mov	result, 0
+ 	ret
+ 
+ L(loop_start):
+ 	/* Deal with count_in being so large that src_end comes before src_in due
+ 	   to wraparound. When this happens, set src_end to SIZE_MAX so that we do
+ 	   not reject results based on the address.  */
+ 	adds	src_end, src_in, count_in
+ 	csinv	src_end, src_end, xzr, cc
+ 
+ 	.p2align 4
+ L(loop):
+ 	cmp	src, src_end
+ 	b.hs	L(no_match)
+ 	ldr	data1, [src], 8
+ #ifdef __AARCH64EB__
+ 	rev	data1, data1
+ #endif
+ 	eor	data1, data1, chr_repeated
+ 	sub	tmp1, data1, zeroones
+ 	orr	tmp2, data1, REP8_7f
+ 	bics	xzr, tmp1, tmp2
+ 
+ 	b.eq	L(loop)
+ 
+ 	/* Found a match - return the address if it is before src_end.  */
+ 	bic	found1, tmp1, tmp2
+ 	sub	src, src, 8
+ 	rbit	found1, found1
+ 	clz	tmp1, found1
+ 	add	result, src, tmp1, lsr 3
+ 	cmp	src_end, result
+ 	csel	result, result, xzr, hi
+ 	ret
+ END (__arm_sc_memchr)
diff -Nrcpad gcc-17-20260628/libgcc/config/aarch64/__arm_sc_memcpy_scalar.S gcc-17-20260705/libgcc/config/aarch64/__arm_sc_memcpy_scalar.S
*** gcc-17-20260628/libgcc/config/aarch64/__arm_sc_memcpy_scalar.S	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libgcc/config/aarch64/__arm_sc_memcpy_scalar.S	Sun Jul  5 22:32:17 2026
***************
*** 0 ****
--- 1,258 ----
+ /* Support routine for SME.
+    Copyright (C) 2026 Free Software Foundation, Inc.
+ 
+    This file is part of GCC.
+ 
+    GCC 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.
+ 
+    GCC 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.
+ 
+    Under Section 7 of GPL version 3, you are granted additional
+    permissions described in the GCC Runtime Library Exception, version
+    3.1, as published by the Free Software Foundation.
+ 
+    You should have received a copy of the GNU General Public License and
+    a copy of the GCC Runtime Library Exception along with this program;
+    see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #include "aarch64-asm.h"
+ 
+ .arch armv8-a
+ 
+ #define dstin	x0
+ #define src	x1
+ #define count	x2
+ #define dst	x3
+ #define srcend	x4
+ #define dstend	x5
+ #define A_l	x6
+ #define A_lw	w6
+ #define A_h	x7
+ #define B_l	x8
+ #define B_lw	w8
+ #define B_h	x9
+ #define C_l	x10
+ #define C_lw	w10
+ #define C_h	x11
+ #define D_l	x12
+ #define D_h	x13
+ #define E_l	x14
+ #define E_h	x15
+ #define F_l	x16
+ #define F_h	x17
+ #define G_l	count
+ #define G_h	dst
+ #define H_l	src
+ #define H_h	srcend
+ #define tmp1	x14
+ 
+ /* This implementation handles overlaps and supports both memcpy and memmove
+    It uses unaligned accesses and branchless sequences to keep the code small,
+    simple and improve performance.
+ 
+    Copies are split into 3 main cases: small copies of up to 32 bytes, medium
+    copies of up to 128 bytes, and large copies.  The overhead of the overlap
+    check is negligible since it is only required for large copies.
+ 
+    Large copies use a software pipelined loop processing 64 bytes per iteration.
+    The destination pointer is 16-byte aligned to minimize unaligned accesses.
+    The loop tail is handled by always copying 64 bytes from the end.
+ 
+    __arm_sc_mem* functions must be able to run in streaming mode and can thus
+    not make use of most AdvSIMD instructions.
+ */
+ 
+ variant_pcs (__arm_sc_memmove)
+ ENTRY_ALIAS (__arm_sc_memmove)
+ 
+ variant_pcs (__arm_sc_memcpy)
+ 
+ ENTRY (__arm_sc_memcpy)
+ 	add	srcend, src, count
+ 	add	dstend, dstin, count
+ 	cmp	count, 128
+ 	b.hi	L(copy_long)
+ 	cmp	count, 32
+ 	b.hi	L(copy32_128)
+ 
+ 	/* Small copies: 0..32 bytes.  */
+ 	cmp	count, 16
+ 	b.lo	L(copy16)
+ 	ldp	A_l, A_h, [src]
+ 	ldp	D_l, D_h, [srcend, -16]
+ 	stp	A_l, A_h, [dstin]
+ 	stp	D_l, D_h, [dstend, -16]
+ 	ret
+ 
+ 	/* Copy 8-15 bytes.  */
+ L(copy16):
+ 	tbz	count, 3, L(copy8)
+ 	ldr	A_l, [src]
+ 	ldr	A_h, [srcend, -8]
+ 	str	A_l, [dstin]
+ 	str	A_h, [dstend, -8]
+ 	ret
+ 
+ 	.p2align 3
+ 	/* Copy 4-7 bytes.  */
+ L(copy8):
+ 	tbz	count, 2, L(copy4)
+ 	ldr	A_lw, [src]
+ 	ldr	B_lw, [srcend, -4]
+ 	str	A_lw, [dstin]
+ 	str	B_lw, [dstend, -4]
+ 	ret
+ 
+ 	/* Copy 0..3 bytes using a branchless sequence.  */
+ L(copy4):
+ 	cbz	count, L(copy0)
+ 	lsr	tmp1, count, 1
+ 	ldrb	A_lw, [src]
+ 	ldrb	C_lw, [srcend, -1]
+ 	ldrb	B_lw, [src, tmp1]
+ 	strb	A_lw, [dstin]
+ 	strb	B_lw, [dstin, tmp1]
+ 	strb	C_lw, [dstend, -1]
+ L(copy0):
+ 	ret
+ 
+ 	.p2align 4
+ 	/* Medium copies: 33..128 bytes.  */
+ L(copy32_128):
+ 	ldp	A_l, A_h, [src]
+ 	ldp	B_l, B_h, [src, 16]
+ 	ldp	C_l, C_h, [srcend, -32]
+ 	ldp	D_l, D_h, [srcend, -16]
+ 	cmp	count, 64
+ 	b.hi	L(copy128)
+ 	stp	A_l, A_h, [dstin]
+ 	stp	B_l, B_h, [dstin, 16]
+ 	stp	C_l, C_h, [dstend, -32]
+ 	stp	D_l, D_h, [dstend, -16]
+ 	ret
+ 
+ 	.p2align 4
+ 	/* Copy 65..128 bytes.  */
+ L(copy128):
+ 	ldp	E_l, E_h, [src, 32]
+ 	ldp	F_l, F_h, [src, 48]
+ 	cmp	count, 96
+ 	b.ls	L(copy96)
+ 	ldp	G_l, G_h, [srcend, -64]
+ 	ldp	H_l, H_h, [srcend, -48]
+ 	stp	G_l, G_h, [dstend, -64]
+ 	stp	H_l, H_h, [dstend, -48]
+ L(copy96):
+ 	stp	A_l, A_h, [dstin]
+ 	stp	B_l, B_h, [dstin, 16]
+ 	stp	E_l, E_h, [dstin, 32]
+ 	stp	F_l, F_h, [dstin, 48]
+ 	stp	C_l, C_h, [dstend, -32]
+ 	stp	D_l, D_h, [dstend, -16]
+ 	ret
+ 
+ 	.p2align 4
+ 	/* Copy more than 128 bytes.  */
+ L(copy_long):
+ 	/* Use backwards copy if there is an overlap.  */
+ 	sub	tmp1, dstin, src
+ 	cbz	tmp1, L(copy0)
+ 	cmp	tmp1, count
+ 	b.lo	L(copy_long_backwards)
+ 
+ 	/* Copy 16 bytes and then align dst to 16-byte alignment.  */
+ 
+ 	ldp	D_l, D_h, [src]
+ 	and	tmp1, dstin, 15
+ 	bic	dst, dstin, 15
+ 	sub	src, src, tmp1
+ 	add	count, count, tmp1	/* Count is now 16 too large.  */
+ 	ldp	A_l, A_h, [src, 16]
+ 	stp	D_l, D_h, [dstin]
+ 	ldp	B_l, B_h, [src, 32]
+ 	ldp	C_l, C_h, [src, 48]
+ 	ldp	D_l, D_h, [src, 64]!
+ 	subs	count, count, 128 + 16	/* Test and readjust count.  */
+ 	b.ls	L(copy64_from_end)
+ 
+ L(loop64):
+ 	stp	A_l, A_h, [dst, 16]
+ 	ldp	A_l, A_h, [src, 16]
+ 	stp	B_l, B_h, [dst, 32]
+ 	ldp	B_l, B_h, [src, 32]
+ 	stp	C_l, C_h, [dst, 48]
+ 	ldp	C_l, C_h, [src, 48]
+ 	stp	D_l, D_h, [dst, 64]!
+ 	ldp	D_l, D_h, [src, 64]!
+ 	subs	count, count, 64
+ 	b.hi	L(loop64)
+ 
+ 	/* Write the last iteration and copy 64 bytes from the end.  */
+ L(copy64_from_end):
+ 	ldp	E_l, E_h, [srcend, -64]
+ 	stp	A_l, A_h, [dst, 16]
+ 	ldp	A_l, A_h, [srcend, -48]
+ 	stp	B_l, B_h, [dst, 32]
+ 	ldp	B_l, B_h, [srcend, -32]
+ 	stp	C_l, C_h, [dst, 48]
+ 	ldp	C_l, C_h, [srcend, -16]
+ 	stp	D_l, D_h, [dst, 64]
+ 	stp	E_l, E_h, [dstend, -64]
+ 	stp	A_l, A_h, [dstend, -48]
+ 	stp	B_l, B_h, [dstend, -32]
+ 	stp	C_l, C_h, [dstend, -16]
+ 	ret
+ 
+ 	.p2align 4
+ 
+ 	/* Large backwards copy for overlapping copies.
+ 	   Copy 16 bytes and then align dst to 16-byte alignment.  */
+ L(copy_long_backwards):
+ 	ldp	D_l, D_h, [srcend, -16]
+ 	and	tmp1, dstend, 15
+ 	sub	srcend, srcend, tmp1
+ 	sub	count, count, tmp1
+ 	ldp	A_l, A_h, [srcend, -16]
+ 	stp	D_l, D_h, [dstend, -16]
+ 	ldp	B_l, B_h, [srcend, -32]
+ 	ldp	C_l, C_h, [srcend, -48]
+ 	ldp	D_l, D_h, [srcend, -64]!
+ 	sub	dstend, dstend, tmp1
+ 	subs	count, count, 128
+ 	b.ls	L(copy64_from_start)
+ 
+ L(loop64_backwards):
+ 	stp	A_l, A_h, [dstend, -16]
+ 	ldp	A_l, A_h, [srcend, -16]
+ 	stp	B_l, B_h, [dstend, -32]
+ 	ldp	B_l, B_h, [srcend, -32]
+ 	stp	C_l, C_h, [dstend, -48]
+ 	ldp	C_l, C_h, [srcend, -48]
+ 	stp	D_l, D_h, [dstend, -64]!
+ 	ldp	D_l, D_h, [srcend, -64]!
+ 	subs	count, count, 64
+ 	b.hi	L(loop64_backwards)
+ 
+ 	/* Write the last iteration and copy 64 bytes from the start.  */
+ L(copy64_from_start):
+ 	ldp	G_l, G_h, [src, 48]
+ 	stp	A_l, A_h, [dstend, -16]
+ 	ldp	A_l, A_h, [src, 32]
+ 	stp	B_l, B_h, [dstend, -32]
+ 	ldp	B_l, B_h, [src, 16]
+ 	stp	C_l, C_h, [dstend, -48]
+ 	ldp	C_l, C_h, [src]
+ 	stp	D_l, D_h, [dstend, -64]
+ 	stp	G_l, G_h, [dstin, 48]
+ 	stp	A_l, A_h, [dstin, 32]
+ 	stp	B_l, B_h, [dstin, 16]
+ 	stp	C_l, C_h, [dstin]
+ 	ret
+ END (__arm_sc_memcpy)
diff -Nrcpad gcc-17-20260628/libgcc/config/aarch64/__arm_sc_memset_scalar.S gcc-17-20260705/libgcc/config/aarch64/__arm_sc_memset_scalar.S
*** gcc-17-20260628/libgcc/config/aarch64/__arm_sc_memset_scalar.S	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libgcc/config/aarch64/__arm_sc_memset_scalar.S	Sun Jul  5 22:32:17 2026
***************
*** 0 ****
--- 1,178 ----
+ /* Support routine for SME.
+    Copyright (C) 2026 Free Software Foundation, Inc.
+ 
+    This file is part of GCC.
+ 
+    GCC 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.
+ 
+    GCC 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.
+ 
+    Under Section 7 of GPL version 3, you are granted additional
+    permissions described in the GCC Runtime Library Exception, version
+    3.1, as published by the Free Software Foundation.
+ 
+    You should have received a copy of the GNU General Public License and
+    a copy of the GCC Runtime Library Exception along with this program;
+    see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #include "aarch64-asm.h"
+ 
+ .arch armv8-a
+ 
+ #define dstin	x0
+ #define val	x1
+ #define valw	w1
+ #define count	x2
+ #define dst	x3
+ #define dstend	x4
+ #define zva_val	x5
+ #define off	x3
+ #define dstend2	x5
+ 
+ /* __arm_sc_mem* functions must be able to run in streaming mode and can thus
+    not make use of most AdvSIMD instructions.  */
+ 
+ variant_pcs (__arm_sc_memset)
+ ENTRY (__arm_sc_memset)
+ 	/* Replicate the fill byte across the last half of the word.  */
+ 	and	valw, valw, 255
+ 	orr	valw, valw, valw, lsl 8
+ 	orr	valw, valw, valw, lsl 16
+ 
+ 	cmp	count, 16
+ 	b.lo	L(set_lt16)
+ 
+ 	/* Replicate the fill byte across the rest of the word.  */
+ 	orr	val, val, val, lsl 32
+ 
+ 	add	dstend, dstin, count
+ 	cmp	count, 64
+ 	b.hi	L(set_gt64)
+ 
+ L(set_16_64):
+ 	/* Calculate an interior store offset based on half the count, This will be
+ 	  one of 0, 16 or 32 bytes. Then perform four overlapping stores.  */
+ 	mov	off, 48
+ 	and	off, off, count, lsr 1
+ 	sub	dstend2, dstend, off
+ 
+ 	stp	val, val, [dstin]
+ 	add	off, dstin, off
+ 	stp	val, val, [off]
+ 	stp	val, val, [dstend2, -16]
+ 	stp	val, val, [dstend, -16]
+ 	ret
+ 
+ 	.p2align 4
+ L(set_lt16):
+ 	add	dstend, dstin, count
+ 	cmp	count, 4
+ 	b.lo	1f
+ 
+ 	/* For sizes 4..15, salculate an interior offset based on the count. Then
+ 	   perform four overlapping 32 bit stores.  */
+ 	lsr	off, count, 3				/* off = count >> 3.  */
+ 	sub	dstend2, dstend, off, lsl 2
+ 	str	valw, [dstin]
+ 	str	valw, [dstin, off, lsl 2]
+ 	str	valw, [dstend2, -4]
+ 	str	valw, [dstend, -4]
+ 	ret
+ 
+ 	/* Potentially overlapping stores for sizes 0..3. */
+ 1:	cbz	count, 2f		/* Skip stores entirely for a zero-length memset.  */
+ 	lsr	off, count, 1
+ 	strb	valw, [dstin]
+ 	strb	valw, [dstin, off]
+ 	strb	valw, [dstend, -1]
+ 2:	ret
+ 
+ 	.p2align 4
+ L(set_gt64):
+ 	bic	dst, dstin, 15		/* Align dst down to 16 bytes.  */
+ 	cmp	count, 128
+ 	b.hi	L(set_gt128)
+ 
+ 	/* For sizes 64..128, perform eight overlapping 16-byte stores.  */
+ 	stp	val, val, [dstin]
+ 	stp	val, val, [dstin, 16]
+ 	stp	val, val, [dstin, 32]
+ 	stp	val, val, [dstin, 48]
+ 	stp	val, val, [dstend, -64]
+ 	stp	val, val, [dstend, -48]
+ 	stp	val, val, [dstend, -32]
+ 	stp	val, val, [dstend, -16]
+ 	ret
+ 
+ 	.p2align 4
+ L(set_gt128):
+ 	/* For sizes above 128, perform initial stores before entering loop on
+ 	   aligned addresses.  */
+ 	stp	val, val, [dstin]
+ 	stp	val, val, [dst, 16]
+ 
+ 	/* We can use DC ZVA to zero memory when the fill byte is zero and the block
+ 	   size reported by DCZID_EL0 is 64 bytes.  */
+ 	cbnz valw, L(no_zva)
+ #ifndef SKIP_ZVA_CHECK
+ 	mrs	zva_val, dczid_el0
+ 	and	zva_val, zva_val, 31
+ 	cmp	zva_val, 4
+ 	b.ne	L(no_zva)
+ #endif
+ 	/* Complete stores up to the first 64 byte aligned block.  */
+ 	stp	val, val, [dst, 32]
+ 	stp	val, val, [dst, 48]
+ 
+ 	bic	dst, dstin, 63		/* Align dst down to 64 bytes.  */
+ 	/* Compute count, accounting for the stores above and bias for the loop
+ 	   exit.  */
+ 	sub	count, dstend, dst
+ 	sub	count, count, 64 + 64
+ 
+ 	/* Write last bytes before entering ZVA loop.  */
+ 	stp	val, val, [dstend, -64]
+ 	stp	val, val, [dstend, -48]
+ 	stp	val, val, [dstend, -32]
+ 	stp	val, val, [dstend, -16]
+ 
+ 	.p2align 4
+ L(zva64_loop):
+ 	add	dst, dst, 64
+ 	dc	zva, dst		/* Zero the 64-byte cache block containing dst.  */
+ 	subs	count, count, 64
+ 	b.hi	L(zva64_loop)
+ 	ret
+ 
+ 	.p2align 3
+ L(no_zva):
+ 	/* Compute count, accounting for the two stores in set_gt128 and bias for
+ 	   the loop exit.  */
+ 	sub	count, dstend, dst
+ 	sub	count, count, 64 + 32
+ 
+ L(no_zva_loop):
+ 	/* Perform eight contiguous 16-byte stores per iteration.  */
+ 	stp	val, val, [dst, 32]
+ 	stp	val, val, [dst, 48]
+ 	stp	val, val, [dst, 64]
+ 	stp	val, val, [dst, 80]
+ 	add	dst, dst, 64
+ 	subs	count, count, 64
+ 	b.hi	L(no_zva_loop)
+ 
+ 	/* Perform final stores for the tail of the range, potentially overlapping
+ 	   with previous ones.  */
+ 	stp	val, val, [dstend, -64]
+ 	stp	val, val, [dstend, -48]
+ 	stp	val, val, [dstend, -32]
+ 	stp	val, val, [dstend, -16]
+ 	ret
+ END (__arm_sc_memset)
diff -Nrcpad gcc-17-20260628/libgcc/config/aarch64/aarch64-asm.h gcc-17-20260705/libgcc/config/aarch64/aarch64-asm.h
*** gcc-17-20260628/libgcc/config/aarch64/aarch64-asm.h	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libgcc/config/aarch64/aarch64-asm.h	Sun Jul  5 22:32:17 2026
*************** FEATURE_1_AND_MARK (BTI_FLAG|PAC_FLAG|GC
*** 127,132 ****
--- 127,137 ----
  # endif
  #endif
  
+ # define ENTRY_ALIAS(name)	\
+   .global name;			\
+   SYMBOL_TYPE(name, %function);		\
+   name:
+ 
  #define ENTRY_ALIGN(name, align) \
    .global name;		\
    SYMBOL_TYPE(name, %function);		\
diff -Nrcpad gcc-17-20260628/libgcc/config/aarch64/libgcc-sme.ver gcc-17-20260705/libgcc/config/aarch64/libgcc-sme.ver
*** gcc-17-20260628/libgcc/config/aarch64/libgcc-sme.ver	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libgcc/config/aarch64/libgcc-sme.ver	Sun Jul  5 22:32:17 2026
*************** GCC_14.0 {
*** 26,28 ****
--- 26,35 ----
  GCC_16.0 {
    __arm_get_current_vg
  }
+ 
+ GCC_17.0 {
+   __arm_sc_memchr
+   __arm_sc_memcpy
+   __arm_sc_memmove
+   __arm_sc_memset
+ }
diff -Nrcpad gcc-17-20260628/libgcc/config/aarch64/t-aarch64 gcc-17-20260705/libgcc/config/aarch64/t-aarch64
*** gcc-17-20260628/libgcc/config/aarch64/t-aarch64	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libgcc/config/aarch64/t-aarch64	Sun Jul  5 22:32:17 2026
*************** LIB2ADDEH += \
*** 28,34 ****
  	$(srcdir)/config/aarch64/__arm_sme_state.S \
  	$(srcdir)/config/aarch64/__arm_tpidr2_restore.S \
  	$(srcdir)/config/aarch64/__arm_tpidr2_save.S \
! 	$(srcdir)/config/aarch64/__arm_za_disable.S
  
  SHLIB_MAPFILES += $(srcdir)/config/aarch64/libgcc-sme.ver
  LIBGCC2_CFLAGS += $(WERROR) -Wno-prio-ctor-dtor
--- 28,37 ----
  	$(srcdir)/config/aarch64/__arm_sme_state.S \
  	$(srcdir)/config/aarch64/__arm_tpidr2_restore.S \
  	$(srcdir)/config/aarch64/__arm_tpidr2_save.S \
! 	$(srcdir)/config/aarch64/__arm_za_disable.S \
! 	$(srcdir)/config/aarch64/__arm_sc_memchr_scalar.S \
! 	$(srcdir)/config/aarch64/__arm_sc_memcpy_scalar.S \
! 	$(srcdir)/config/aarch64/__arm_sc_memset_scalar.S
  
  SHLIB_MAPFILES += $(srcdir)/config/aarch64/libgcc-sme.ver
  LIBGCC2_CFLAGS += $(WERROR) -Wno-prio-ctor-dtor
diff -Nrcpad gcc-17-20260628/libgcc/config/avr/libf7/ChangeLog gcc-17-20260705/libgcc/config/avr/libf7/ChangeLog
*** gcc-17-20260628/libgcc/config/avr/libf7/ChangeLog	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libgcc/config/avr/libf7/ChangeLog	Sun Jul  5 22:32:17 2026
***************
*** 1,3 ****
--- 1,18 ----
+ 2026-06-28  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/125752
+ 	* libf7.c (d_to_ufx, d_to_sfx): Remove prototypes.
+ 	(__fractdfda, __fractdfuda, __fractdfta, __fractdfuta)
+ 	(__fractdfdq, __fractdfudq): Move implementation to...
+ 	* libf7-asm.sx: ...here.
+ 	(d_to_fx64): Remove.
+ 	* libf7-common.mk (F7_ASM_PARTS): Add D2dq, D2udq, D2da,
+ 	D2uda, D2ta, D2uta.
+ 	(F7F_asm): Remove d_to_fx64.
+ 	* t-libf7 (LIBF7_DF_CONV): Remove fractdfda, fractdfta,
+ 	fractdfdq, fractdfuda, fractdfuta, fractdfudq.
+ 	* f7-renames.h: Rebuild.
+ 
  2026-06-13  Georg-Johann Lay  <avr@gjlay.de>
  
  	* asm-defs.h (REGNO): New .macro.
diff -Nrcpad gcc-17-20260628/libgcc/config/t-darwin-ehs gcc-17-20260705/libgcc/config/t-darwin-ehs
*** gcc-17-20260628/libgcc/config/t-darwin-ehs	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libgcc/config/t-darwin-ehs	Sun Jul  5 22:32:17 2026
***************
*** 3,7 ****
  
  LIBEHSOBJS = unwind-dw2_s.o unwind-dw2-fde-darwin_s.o unwind-c_s.o
  
! unwind-dw2_s.o: gthr-default.h md-unwind-support.h unwind.h
  $(LIBEHSOBJS): libgcc_tm.h
--- 3,7 ----
  
  LIBEHSOBJS = unwind-dw2_s.o unwind-dw2-fde-darwin_s.o unwind-c_s.o
  
! unwind-dw2_s.o: gthr-default.h md-unwind-support.h md-unwind-def.h unwind.h
  $(LIBEHSOBJS): libgcc_tm.h
diff -Nrcpad gcc-17-20260628/libgcc/config/t-slibgcc-sld gcc-17-20260705/libgcc/config/t-slibgcc-sld
*** gcc-17-20260628/libgcc/config/t-slibgcc-sld	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libgcc/config/t-slibgcc-sld	Sun Jul  5 22:32:17 2026
*************** ifeq ($(enable_shared),yes)
*** 8,30 ****
  
  # Linker mapfile to enforce direct binding to libgcc_s unwinder
  # (PR target/59788).
- # Emit v2 mapfile syntax if possible, otherwise ld -z guidance complains
- # every time the mapfile is used.
  libgcc-unwind.map: libgcc-std.ver
- ifeq ($(solaris_ld_v2_maps),yes)
  	@(echo '$$mapfile_version 2';		\
  	echo "SYMBOL_SCOPE {";			\
  	for f in `grep _Unwind_ $< | sort`; do	\
  	  echo "	$$f { FLAGS = EXTERN DIRECT };"; \
  	done;					\
  	echo "};" ) > $@
- else
- 	@(echo "{";				\
- 	for f in `grep _Unwind_ $< | sort`; do	\
- 	  echo "	$$f = EXTERN DIRECT;";	\
- 	done;					\
- 	echo "};" ) > $@
- endif
  
  # Copy libgcc-unwind.map to the place where gcc will look for it at build-time.
  install-libgcc-unwind-map-forbuild: libgcc-unwind.map
--- 8,20 ----
diff -Nrcpad gcc-17-20260628/libgcc/configure gcc-17-20260705/libgcc/configure
*** gcc-17-20260628/libgcc/configure	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libgcc/configure	Sun Jul  5 22:32:17 2026
*************** sfp_machine_header
*** 604,610 ****
  set_use_emutls
  set_have_cc_tls
  vis_hide
- solaris_ld_v2_maps
  real_host_noncanonical
  accel_dir_suffix
  use_tm_clone_registry
--- 604,609 ----
*************** EOF
*** 5403,5428 ****
    ;;
  esac
  
- # Check if Solaris linker support v2 linker mapfile syntax.
- # Link with -nostartfiles -nodefaultlibs since neither are present while
- # building libgcc.
- case ${host} in
- *-*-solaris2*)
-   solaris_ld_v2_maps=no
-   echo 'int main(void) {return 0;}' > conftest.c
-   echo '$mapfile_version 2' > conftest.map
-   if { ac_try='${CC-cc} -nostartfiles -nodefaultlibs -Wl,-M,conftest.map -o conftest conftest.c 1>&5'
-   { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
-   (eval $ac_try) 2>&5
-   ac_status=$?
-   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-   test $ac_status = 0; }; }; then
-       solaris_ld_v2_maps=yes
-   fi
-   ;;
- esac
- 
- 
  case ${host} in
  loongarch32*-*-*)
    tmake_file="${tmake_file} loongarch/t-crtstuff-la32"
--- 5402,5407 ----
*************** else
*** 5658,5665 ****
  int
  main ()
  {
! 			asm(".arch armv8-a+lse\n\tcas w0, w1, [x2]");
! 
    ;
    return 0;
  }
--- 5637,5643 ----
  int
  main ()
  {
! asm(".arch armv8-a+lse\n\tcas w0, w1, [x2]");
    ;
    return 0;
  }
diff -Nrcpad gcc-17-20260628/libgcc/configure.ac gcc-17-20260705/libgcc/configure.ac
*** gcc-17-20260628/libgcc/configure.ac	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libgcc/configure.ac	Sun Jul  5 22:32:17 2026
*************** AC_SUBST(slibdir)
*** 133,139 ****
  # Command-line options.
  # Very limited version of AC_MAINTAINER_MODE.
  AC_ARG_ENABLE([maintainer-mode],
!   [AC_HELP_STRING([--enable-maintainer-mode],
                   [enable make rules and dependencies not useful (and
                    sometimes confusing) to the casual installer])],
    [case ${enable_maintainer_mode} in
--- 133,139 ----
  # Command-line options.
  # Very limited version of AC_MAINTAINER_MODE.
  AC_ARG_ENABLE([maintainer-mode],
!   [AS_HELP_STRING([--enable-maintainer-mode],
                   [enable make rules and dependencies not useful (and
                    sometimes confusing) to the casual installer])],
    [case ${enable_maintainer_mode} in
*************** GCC_CET_FLAGS(CET_FLAGS)
*** 284,290 ****
  AC_SUBST(CET_FLAGS)
  
  AC_ARG_ENABLE([explicit-exception-frame-registration],
!   [AC_HELP_STRING([--enable-explicit-exception-frame-registration],
       [register exception tables explicitly at module start, for use
        e.g. for compatibility with installations without PT_GNU_EH_FRAME support])],
  [
--- 284,290 ----
  AC_SUBST(CET_FLAGS)
  
  AC_ARG_ENABLE([explicit-exception-frame-registration],
!   [AS_HELP_STRING([--enable-explicit-exception-frame-registration],
       [register exception tables explicitly at module start, for use
        e.g. for compatibility with installations without PT_GNU_EH_FRAME support])],
  [
*************** EOF
*** 529,549 ****
    ;;
  esac
  
- # Check if Solaris linker support v2 linker mapfile syntax.
- # Link with -nostartfiles -nodefaultlibs since neither are present while
- # building libgcc.
- case ${host} in
- *-*-solaris2*)
-   solaris_ld_v2_maps=no
-   echo 'int main(void) {return 0;}' > conftest.c
-   echo '$mapfile_version 2' > conftest.map
-   if AC_TRY_COMMAND([${CC-cc} -nostartfiles -nodefaultlibs -Wl,-M,conftest.map -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD]); then
-       solaris_ld_v2_maps=yes
-   fi
-   ;;
- esac
- AC_SUBST(solaris_ld_v2_maps)
- 
  case ${host} in
  loongarch32*-*-*)
    tmake_file="${tmake_file} loongarch/t-crtstuff-la32"
--- 529,534 ----
*************** AC_DEFUN([LIBGCC_CHECK_AS_AVX], [
*** 633,639 ****
  case "${target}" in
  i[[34567]]86-*-* | x86_64-*-*)
    AC_CACHE_CHECK([if the assembler supports AVX], libgcc_cv_as_avx, [
!     AC_TRY_COMPILE([], [asm("vzeroupper");],
  		   [libgcc_cv_as_avx=yes], [libgcc_cv_as_avx=no])
    ])
    if test x$libgcc_cv_as_avx = xyes; then
--- 618,624 ----
  case "${target}" in
  i[[34567]]86-*-* | x86_64-*-*)
    AC_CACHE_CHECK([if the assembler supports AVX], libgcc_cv_as_avx, [
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[asm("vzeroupper");]])],
  		   [libgcc_cv_as_avx=yes], [libgcc_cv_as_avx=no])
    ])
    if test x$libgcc_cv_as_avx = xyes; then
*************** AC_DEFUN([LIBGCC_CHECK_AS_LSE], [
*** 648,658 ****
  case "${target}" in
  aarch64*-*-*)
    AC_CACHE_CHECK([if the assembler supports LSE], libgcc_cv_as_lse, [
!     AC_TRY_COMPILE([],
! changequote(,)dnl
! 			asm(".arch armv8-a+lse\n\tcas w0, w1, [x2]");
! changequote([,])dnl
! 		       ,
  		   [libgcc_cv_as_lse=yes], [libgcc_cv_as_lse=no])
    ])
    if test x$libgcc_cv_as_lse = xyes; then
--- 633,641 ----
  case "${target}" in
  aarch64*-*-*)
    AC_CACHE_CHECK([if the assembler supports LSE], libgcc_cv_as_lse, [
!     AC_COMPILE_IFELSE(
!       [AC_LANG_PROGRAM([[]],
! 			[[asm(".arch armv8-a+lse\n\tcas w0, w1, [x2]");]])],
  		   [libgcc_cv_as_lse=yes], [libgcc_cv_as_lse=no])
    ])
    if test x$libgcc_cv_as_lse = xyes; then
diff -Nrcpad gcc-17-20260628/libgcobol/ChangeLog gcc-17-20260705/libgcobol/ChangeLog
*** gcc-17-20260628/libgcobol/ChangeLog	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libgcobol/ChangeLog	Sun Jul  5 22:32:17 2026
***************
*** 1,3 ****
--- 1,33 ----
+ 2026-06-30  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* charmaps.h (class charmap_t): Return uint8_t instead of uint32_t
+ 	when possible to avoid endian problems.
+ 	(class cbl_iconv_t): Formatting.
+ 	* inspect.cc (normalize_id): Return endian agnostic uint8_t.
+ 	(normalize_id_sbc): Use endian agnostic uint8_t.
+ 	* libgcobol-fp.h: Add cppcheck-suppress.
+ 	* libgcobol.cc (native_to_binary_signed): New conversion.
+ 	(native_to_binary_unsigned): New name.
+ 	(big_endian_to_binary_unsigned): Endian-aware conversion.
+ 	(big_endian_to_binary_signed): Likewise.
+ 	(get_binary_value_local): Likewise.
+ 	(binary_to_big_endian): Likewise.
+ 	(binary_to_little_endian): Changed name.
+ 	(binary_to_native_binary): New name; new conversion.
+ 	(int128_to_field): Use new routine.
+ 	* libgcobol.h (__gg__mabort): Create COBOL_BIG_ENDIAN and
+ 	COBOL_LITTLE_ENDIAN macros.
+ 	(defined): Likewise.
+ 	(COBOL_BIG_ENDIAN): Likewise.
+ 	(COBOL_LITTLE_ENDIAN): Likewise.
+ 	* stringbin.cc (packed_from_combined): Endian awareness.
+ 
+ 2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* configure: Regenerate.
+ 	* configure.ac: Remove redundant AM_PROG_LIBTOOL.
+ 
  2026-06-25  Robert Dubner  <rdubner@symas.com>
  
  	* charmaps.cc (__gg__miconverter): Use table instead of a map.
diff -Nrcpad gcc-17-20260628/libgcobol/charmaps.h gcc-17-20260705/libgcobol/charmaps.h
*** gcc-17-20260628/libgcobol/charmaps.h	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libgcobol/charmaps.h	Sun Jul  5 22:32:17 2026
*************** extern uint32_t __gg__wsclear;
*** 128,134 ****
  enum
    {
    /* HIGH-VALUE is an endless source of irritation.
!   
       0xFF is the default value for COBOL since time immemorial.  Its use that
       way long predates the existence of code pages.  0xFF is a valid character
       in many code pages, which make a muddle of the original intent of a
--- 128,134 ----
  enum
    {
    /* HIGH-VALUE is an endless source of irritation.
! 
       0xFF is the default value for COBOL since time immemorial.  Its use that
       way long predates the existence of code pages.  0xFF is a valid character
       in many code pages, which make a muddle of the original intent of a
*************** enum
*** 137,143 ****
       We want older programs to continue to work.  And we want to use 0xFF for
       ascii and ebcdic, and it turns out that 0xFFFF works for UTF-16; it is
       specifically designed in UNICODE as a well-formed non-character.
!      
       0xFFFFFFFF, however, is not readily usable in UTF-32.  It is not well-
       formed, and it is not a character.  Technically, the largest value in
       UTF-32 is the largest UNICODE code point, which is 0x10FFFF.  It's
--- 137,143 ----
       We want older programs to continue to work.  And we want to use 0xFF for
       ascii and ebcdic, and it turns out that 0xFFFF works for UTF-16; it is
       specifically designed in UNICODE as a well-formed non-character.
! 
       0xFFFFFFFF, however, is not readily usable in UTF-32.  It is not well-
       formed, and it is not a character.  Technically, the largest value in
       UTF-32 is the largest UNICODE code point, which is 0x10FFFF.  It's
*************** enum
*** 145,153 ****
       map into a single 16-bit value in UTF-16 (it takes a pair of 16-bit
       values), and it doesn't map into anything sensible in ASCII or EBCDIC, and
       it takes multiple bytes in UTF-8.
!      
       So, we are going to work with the following observations:
!      
       0xFF   in CP1252 <==> 0x000000FF in UTF32
       0xFF   in CP1140 <==> 0x0000009F in UTF32
       0xFFFF in UTF-16 <==> 0x0000FFFF in UTF32
--- 145,153 ----
       map into a single 16-bit value in UTF-16 (it takes a pair of 16-bit
       values), and it doesn't map into anything sensible in ASCII or EBCDIC, and
       it takes multiple bytes in UTF-8.
! 
       So, we are going to work with the following observations:
! 
       0xFF   in CP1252 <==> 0x000000FF in UTF32
       0xFF   in CP1140 <==> 0x0000009F in UTF32
       0xFFFF in UTF-16 <==> 0x0000FFFF in UTF32
*************** enum
*** 155,168 ****
       Be it hereby acknowledged that not all possibilities for encoding inter-
       conversion have been explored, and we anticipate finding and eliminating
       HIGH-VALUE problems will be Whac-A-Mole territory for some time to come.
!      
       Please use these constants for that kind of work, because otherwise
       finding anomalies will be even more frustrating than I currently
       anticipate.  Dubner, 2025-11-24  */
    DEFAULT_HIGH_VALUE_8  =       0xFF,
    DEFAULT_HIGH_VALUE_16 =     0x00FF,
    DEFAULT_HIGH_VALUE_32 = 0x000000FF,
!   
    /* These values are used as figurative constants when interconverting from
       and encoding to UTF32.  Examine, for example, the implementation for
       the INSPECT statement: */
--- 155,168 ----
       Be it hereby acknowledged that not all possibilities for encoding inter-
       conversion have been explored, and we anticipate finding and eliminating
       HIGH-VALUE problems will be Whac-A-Mole territory for some time to come.
! 
       Please use these constants for that kind of work, because otherwise
       finding anomalies will be even more frustrating than I currently
       anticipate.  Dubner, 2025-11-24  */
    DEFAULT_HIGH_VALUE_8  =       0xFF,
    DEFAULT_HIGH_VALUE_16 =     0x00FF,
    DEFAULT_HIGH_VALUE_32 = 0x000000FF,
! 
    /* These values are used as figurative constants when interconverting from
       and encoding to UTF32.  Examine, for example, the implementation for
       the INSPECT statement: */
*************** class charmap_t;
*** 324,330 ****
   * If used in the compiler, failure results in a compiler error message.  If
   * used in libgcobol, failure raises EC-IMP-ICONV-OPEN.
   *
!  * The destructor closes all handles successfully opened. 
   */
  class cbl_iconv_t {
    struct iconv_key_t {
--- 324,330 ----
   * If used in the compiler, failure results in a compiler error message.  If
   * used in libgcobol, failure raises EC-IMP-ICONV-OPEN.
   *
!  * The destructor closes all handles successfully opened.
   */
  class cbl_iconv_t {
    struct iconv_key_t {
*************** class cbl_iconv_t {
*** 338,344 ****
        : to(to), from(from)
        , tocode(__gg__encoding_iconv_name(to))
        , fromcode(__gg__encoding_iconv_name(from))
!     
      {}
      iconv_key_t( const char *tocode, const char *fromcode )
        : to(__gg__encoding_iconv_type(tocode))
--- 338,344 ----
        : to(to), from(from)
        , tocode(__gg__encoding_iconv_name(to))
        , fromcode(__gg__encoding_iconv_name(from))
! 
      {}
      iconv_key_t( const char *tocode, const char *fromcode )
        : to(__gg__encoding_iconv_type(tocode))
*************** class charmap_t
*** 432,438 ****
  
        // We do that by converting "0" to the target encoding, and we analyze
        // what we get back.
!       
        size_t outlength = 0;
        char challenge[] = "0";
        char response_[8];
--- 432,438 ----
  
        // We do that by converting "0" to the target encoding, and we analyze
        // what we get back.
! 
        size_t outlength = 0;
        char challenge[] = "0";
        char response_[8];
*************** class charmap_t
*** 440,446 ****
  
        iconv_t cd = cbl_iconv.open(m_encoding, DEFAULT_SOURCE_ENCODING);
        if( ! cbl_iconv.valid(cd) ) {
!         return;  // Abandon all hope ye who enter. 
        }
        char *inbuf  = challenge;
        char *outbuf = response_;
--- 440,446 ----
  
        iconv_t cd = cbl_iconv.open(m_encoding, DEFAULT_SOURCE_ENCODING);
        if( ! cbl_iconv.valid(cd) ) {
!         return;  // All hope abandon, ye who enter here.
        }
        char *inbuf  = challenge;
        char *outbuf = response_;
*************** class charmap_t
*** 450,459 ****
                              &inbuf,  &inbytesleft,
                              &outbuf, &outbytesleft);
        outlength = sizeof(response_) - outbytesleft;
!       
!       const unsigned char *response = 
                                    reinterpret_cast<unsigned char *>(response_);
!       
        unsigned char char_0 = 0x00;
  
        if( outlength == 1 )
--- 450,459 ----
                              &inbuf,  &inbytesleft,
                              &outbuf, &outbytesleft);
        outlength = sizeof(response_) - outbytesleft;
! 
!       const unsigned char *response =
                                    reinterpret_cast<unsigned char *>(response_);
! 
        unsigned char char_0 = 0x00;
  
        if( outlength == 1 )
*************** class charmap_t
*** 534,540 ****
        // the single-byte CP1252 code for the Euro symbol to our encoding.
        cd = cbl_iconv.open(iconv_CP1252_e, m_encoding);
        if( ! cbl_iconv.valid(cd) ) {
!         return;  // Abandon all hope ye who enter. 
        }
        challenge[0] = static_cast<char>(0x80);// This is the CP1252 Euro symbol.
        inbuf  = challenge;
--- 534,540 ----
        // the single-byte CP1252 code for the Euro symbol to our encoding.
        cd = cbl_iconv.open(iconv_CP1252_e, m_encoding);
        if( ! cbl_iconv.valid(cd) ) {
!         return;  // All hope abandon, ye who enter here.
        }
        challenge[0] = static_cast<char>(0x80);// This is the CP1252 Euro symbol.
        inbuf  = challenge;
*************** class charmap_t
*** 553,559 ****
      bool has_bom()       const { return m_has_bom      ; }
      uint8_t stride()     const { return m_stride       ; }
  
!     cbl_char_t mapped_character(cbl_char_t ch) 
        {
        // The assumption is that anybody calling this routine is providing
        // a single-byte character in the DEFAULT_SOURCE_ENCODING encoding.  We
--- 553,559 ----
      bool has_bom()       const { return m_has_bom      ; }
      uint8_t stride()     const { return m_stride       ; }
  
!     cbl_char_t mapped_character(unsigned char ch)
        {
        // The assumption is that anybody calling this routine is providing
        // a single-byte character in the DEFAULT_SOURCE_ENCODING encoding.  We
*************** class charmap_t
*** 569,580 ****
          {
          retval = 0;
          size_t outlength = 0;
!         const char *mapped = __gg__iconverter(DEFAULT_SOURCE_ENCODING,
!                                               m_encoding,
!                                               PTRCAST(char, &ch),
!                                               1,
!                                               &outlength);
!         memcpy(&retval, mapped, outlength);
          m_map_of_encodings[ch] = retval;
          }
        return retval;
--- 569,591 ----
          {
          retval = 0;
          size_t outlength = 0;
!         char *mapped = __gg__iconverter(DEFAULT_SOURCE_ENCODING,
!                                         m_encoding,
!                                         &ch,
!                                         1,
!                                         &outlength);
!         switch(stride())
!           {
!           case 1:
!             retval = *reinterpret_cast<uint8_t *>(mapped);
!             break;
!           case 2:
!             retval = *reinterpret_cast<uint16_t *>(mapped);
!             break;
!           case 4:
!             retval = *reinterpret_cast<uint32_t *>(mapped);
!             break;
!           }
          m_map_of_encodings[ch] = retval;
          }
        return retval;
*************** class charmap_t
*** 621,629 ****
        return retval;
        }
  
!     cbl_char_t figconst_character(cbl_figconst_t figconst)
        {
!       cbl_char_t const_char = 0;  // Head off a compiler warning
        switch(figconst)
          {
          case normal_value_e :
--- 632,640 ----
        return retval;
        }
  
!     uint8_t figconst_character(cbl_figconst_t figconst)
        {
!       uint8_t const_char = 0;  // Head off a compiler warning
        switch(figconst)
          {
          case normal_value_e :
*************** class charmap_t
*** 829,903 ****
  
    void putch(cbl_char_t ch, void *base_, size_t location)
      {
!     // This routine puts a character at a byte location.  It's up to the
!     // user to provide the correct byte location, and update it by the stride
!     // when necessary.
      uint8_t *base = static_cast<uint8_t *>(base_);
!     memcpy(base+location, &ch, m_stride);
!     if( m_stride < 4 )
        {
!       location += m_stride;
!       ch >>= (8 * m_stride);
!       while(ch)
!         {
!         memcpy(base+location, &ch, m_stride);
!         location += m_stride;
!         ch >>= (8 * m_stride);
!         }
        }
      }
  
    void putch(cbl_char_t ch, void *base_, size_t *location)
      {
      // This routine puts a character at a location, and updates the location
!     uint8_t *base = static_cast<uint8_t *>(base_);
!     memcpy(base+*location, &ch, m_stride);
      *location += m_stride;
-     if( m_stride < 4 )
-       {
-       ch >>= 8 * m_stride;
-       while(ch)
-         {
-         memcpy(base+*location, &ch, m_stride);
-         *location += m_stride;
-         ch >>= 8 * m_stride;
-         }
-       }
      }
  
    cbl_char_t getch(const void *base_, size_t location) const
      {
!     // This routine gets a character at a location, and updates the location
!     cbl_char_t retval = 0;
      const uint8_t *base = static_cast<const uint8_t *>(base_);
! 
!     memcpy(&retval, base+location, m_stride);
! ////    location += m_stride;
! ////  We need to do something about UTF-8 snd UTF-16
! ////    while(ch)
! ////      {
! ////      memcpy(base+*location, &ch, m_stride);
! ////      *location += m_stride;
! ////      ch >>= 8 * m_stride;
! ////      }
      return retval;
      }
  
    cbl_char_t getch(const void *base_, size_t *location) const
      {
      // This routine gets a character at a location, and updates the location
!     cbl_char_t retval = 0;
!     const uint8_t *base = static_cast<const uint8_t *>(base_);
! 
!     memcpy(&retval, base+*location, m_stride);
      *location += m_stride;
- ////  We need to do something about UTF-8 snd UTF-16
- ////    while(ch)
- ////      {
- ////      memcpy(base+*location, &ch, m_stride);
- ////      *location += m_stride;
- ////      ch >>= 8 * m_stride;
- ////      }
      return retval;
      }
  
--- 840,893 ----
  
    void putch(cbl_char_t ch, void *base_, size_t location)
      {
!     // This routine puts a character at a byte location.
      uint8_t *base = static_cast<uint8_t *>(base_);
!     switch(m_stride)
        {
!       case 1:
!         *reinterpret_cast<uint8_t*>(base+location) = ch;
!         break;            
!       case 2:             
!         *reinterpret_cast<uint16_t*>(base+location) = ch;
!         break;            
!       default:            
!         *reinterpret_cast<uint32_t*>(base+location) = ch;
!         break;
        }
      }
  
    void putch(cbl_char_t ch, void *base_, size_t *location)
      {
      // This routine puts a character at a location, and updates the location
!     this->putch(ch, base_, *location);
      *location += m_stride;
      }
  
    cbl_char_t getch(const void *base_, size_t location) const
      {
!     // This routine gets a character at a location
!     cbl_char_t retval;
      const uint8_t *base = static_cast<const uint8_t *>(base_);
!     switch(m_stride)
!       {
!       case 1:
!         retval = *reinterpret_cast<const uint8_t*>(base+location);
!         break;
!       case 2:
!         retval = *reinterpret_cast<const uint16_t*>(base+location);
!         break;
!       default:
!         retval = *reinterpret_cast<const uint32_t*>(base+location);
!         break;
!       }
      return retval;
      }
  
    cbl_char_t getch(const void *base_, size_t *location) const
      {
      // This routine gets a character at a location, and updates the location
!     cbl_char_t retval = this->getch(base_, *location);
      *location += m_stride;
      return retval;
      }
  
*************** class charmap_t
*** 942,948 ****
        //// gcc_unreachable();
        return -1; // Mollify cppcheck.
      }
!     
    size_t
    strlen( const void *converted,
            ssize_t limit = SSIZE_MAX)
--- 932,938 ----
        //// gcc_unreachable();
        return -1; // Mollify cppcheck.
      }
! 
    size_t
    strlen( const void *converted,
            ssize_t limit = SSIZE_MAX)
diff -Nrcpad gcc-17-20260628/libgcobol/configure gcc-17-20260705/libgcobol/configure
*** gcc-17-20260628/libgcobol/configure	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libgcobol/configure	Sun Jul  5 22:32:17 2026
*************** CC="$lt_save_CC"
*** 12564,12570 ****
  
  
  
- 
  enable_dlopen=yes
  
  
--- 12564,12569 ----
diff -Nrcpad gcc-17-20260628/libgcobol/configure.ac gcc-17-20260705/libgcobol/configure.ac
*** gcc-17-20260628/libgcobol/configure.ac	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libgcobol/configure.ac	Sun Jul  5 22:32:17 2026
*************** AC_CHECK_TOOL(RANLIB, ranlib, ranlib-not
*** 76,82 ****
  AC_PROG_MAKE_SET
  AC_PROG_INSTALL
  
- AM_PROG_LIBTOOL
  LT_INIT
  
  AC_LIBTOOL_DLOPEN
--- 76,81 ----
diff -Nrcpad gcc-17-20260628/libgcobol/inspect.cc gcc-17-20260705/libgcobol/inspect.cc
*** gcc-17-20260628/libgcobol/inspect.cc	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libgcobol/inspect.cc	Sun Jul  5 22:32:17 2026
*************** normalize_id( const cblc_field_t *field,
*** 319,325 ****
          }
        else
          {
!         char ch =  charmap->figconst_character(figconst);
          for( size_t i=retval.offset; i<retval.length; i+=1 )
            {
            retval.the_characters += ch;
--- 319,325 ----
          }
        else
          {
!         uint8_t ch =  charmap->figconst_character(figconst);
          for( size_t i=retval.offset; i<retval.length; i+=1 )
            {
            retval.the_characters += ch;
*************** normalize_id( const cblc_field_t *field,
*** 424,430 ****
        // We need to fill the field with a figurative constant:
        // We are set up to create the_characters;
        charmap_t *charmap32 = __gg__get_charmap(DEFAULT_32_ENCODING);
!       char ch =  charmap32->figconst_character(figconst);
        for( size_t i=retval.offset; i<retval.length; i+=1 )
          {
          retval.the_characters += ch;
--- 424,430 ----
        // We need to fill the field with a figurative constant:
        // We are set up to create the_characters;
        charmap_t *charmap32 = __gg__get_charmap(DEFAULT_32_ENCODING);
!       uint8_t ch =  charmap32->figconst_character(figconst);
        for( size_t i=retval.offset; i<retval.length; i+=1 )
          {
          retval.the_characters += ch;
*************** normalize_id_sbc( const cblc_field_t *fi
*** 500,506 ****
        else
          {
          // This field is flagged as figconst
!         char ch =  charmap->figconst_character(figconst);
          retval.assign(field_s, ch);
          }
        }
--- 500,506 ----
        else
          {
          // This field is flagged as figconst
!         uint8_t ch =  charmap->figconst_character(figconst);
          retval.assign(field_s, ch);
          }
        }
diff -Nrcpad gcc-17-20260628/libgcobol/libgcobol-fp.h gcc-17-20260705/libgcobol/libgcobol-fp.h
*** gcc-17-20260628/libgcobol/libgcobol-fp.h	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libgcobol/libgcobol-fp.h	Sun Jul  5 22:32:17 2026
*************** see the files COPYING3 and COPYING.RUNTI
*** 49,54 ****
--- 49,55 ----
  # define strtofp128(nptr, endptr) strtoflt128(nptr, endptr)
  # define strfromfp128(str, n, format, fp) quadmath_snprintf(str, n, format, fp)
  #else
+ // cppcheck-suppress preprocessorErrorDirective
  # error "libgcobol requires 128b floating point"
  #endif
  
diff -Nrcpad gcc-17-20260628/libgcobol/libgcobol.cc gcc-17-20260705/libgcobol/libgcobol.cc
*** gcc-17-20260628/libgcobol/libgcobol.cc	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libgcobol/libgcobol.cc	Sun Jul  5 22:32:17 2026
*************** edited_to_binary( const cblc_field_t *fi
*** 698,792 ****
  
  static
  __int128
! big_endian_to_binary_signed(
!   const unsigned char *psource,
!   int   capacity
! )
    {
!   // This subroutine takes a big-endian value of "capacity" bytes and
!   // converts it to a signed INT128.  The highest order bit of the big-endian
!   // value determines whether or not the highest-order bits of the INT128
!   // return value are off or on.
! 
!   __int128 retval;
!   if( *psource >= 128 )
!     {
!     retval = -1;
!     }
!   else
!     {
!     retval = 0;
!     }
! 
!   // move the bytes of psource into retval, flipping them end-to-end
!   unsigned char *dest = PTRCAST(unsigned char, &retval);
!   while(capacity > 0)
      {
!     *dest++ = psource[--capacity];
      }
!   return retval;
    }
  
  static
  __int128
! little_endian_to_binary_signed(
!   const unsigned char *psource,
!   int capacity
! )
    {
-   // This subroutine takes a little-endian value of "capacity" bytes and
-   // converts it to a signed INT128.  The highest order bit of the little-endian
-   // value determines whether or not the highest-order bits of the INT128
-   // return value are off or on.
- 
    __int128 result;
! 
!   // Set all the bits of the result based on the sign of the source:
!   if( psource[capacity-1] >= 128 )
!     {
!     result = -1;
!     }
!   else
      {
!     result = 0;
      }
- 
-   // Copy the low-order bytes into place:
-   memcpy(&result, psource, capacity);
    return result;
    }
  
  static
  __int128
! little_endian_to_binary_unsigned(
!   const unsigned char *psource,
!   int capacity
! )
    {
!   __int128 result = 0;
  
!   // Copy the low-order bytes into place:
!   memcpy(&result, psource, capacity);
!   return result;
    }
  
! static
! __int128
! big_endian_to_binary_unsigned(
!   const unsigned char *psource,
!   int   capacity
! )
    {
!   // This subroutine takes an unsigned big-endian value of "capacity" bytes and
!   // converts it to an INT128.
! 
!   __int128 retval = 0 ;
  
!   // move the bytes of psource into retval, flipping them end-to-end
!   unsigned char *dest = PTRCAST(unsigned char, &retval);
!   while(capacity > 0)
      {
!     *dest++ = psource[--capacity];
      }
    return retval;
    }
--- 698,860 ----
  
  static
  __int128
! native_to_binary_signed(void *psource,
!                         int capacity )
    {
!   __int128 result;
!   switch(capacity)
      {
!     case 1:
!       result = *reinterpret_cast<int8_t *>(psource);
!       break;
!     case 2:
!       result = *reinterpret_cast<int16_t *>(psource);
!       break;
!     case 4:
!       result = *reinterpret_cast<int32_t *>(psource);
!       break;
!     case 8:
!       result = *reinterpret_cast<int64_t *>(psource);
!       break;
!     case 16:
!       result = *reinterpret_cast<__int128 *>(psource);
!       break;
      }
!   return result;
    }
  
  static
  __int128
! native_to_binary_unsigned(void *psource,
!                           int capacity)
    {
    __int128 result;
!   switch(capacity)
      {
!     case 1:
!       result = *reinterpret_cast<uint8_t *>(psource);
!       break;
!     case 2:
!       result = *reinterpret_cast<uint16_t *>(psource);
!       break;
!     case 4:
!       result = *reinterpret_cast<uint32_t *>(psource);
!       break;
!     case 8:
!       result = *reinterpret_cast<uint64_t *>(psource);
!       break;
!     case 16:
!       result = *reinterpret_cast<unsigned __int128 *>(psource);
!       break;
      }
    return result;
    }
  
  static
  __int128
! big_endian_to_binary_unsigned(const void *psource,
!                               int   capacity)
    {
!   // This subroutine takes an unsigned big-endian value of "capacity" bytes and
!   // converts it to an INT128.
  
!   unsigned __int128 retval = 0 ;
! 
!   switch(capacity)
!     {
!     case 1:
!       {
!       uint8_t v;
!       memcpy(&v, psource, sizeof(v));
!       retval = v;
!       break;
!       }
!     case 2:
!       {
!       uint16_t v;
!       memcpy(&v, psource, sizeof(v));
!       #if COBOL_LITTLE_ENDIAN
!       // This is a little-endian machine, so we have to flip the value.
!       v = __builtin_bswap16(v);
!       #endif
!       retval = v;
!       break;
!       }
!     case 4:
!       {
!       uint32_t v;
!       memcpy(&v, psource, sizeof(v));
!       #if COBOL_LITTLE_ENDIAN
!       v = __builtin_bswap32(v);
!       #endif
!       retval = v;
!       break;
!       }
!     case 8:
!       {
!       uint64_t v;
!       memcpy(&v, psource, sizeof(v));
!       #if COBOL_LITTLE_ENDIAN
!       v = __builtin_bswap64(v);
!       #endif
!       retval = v;
!       break;
!       }
!     case 16:
!       {
!       unsigned __int128 v;
!       memcpy(&v, psource, sizeof(v));
!       #if COBOL_LITTLE_ENDIAN
!       v = __builtin_bswap128(v);
!       #endif
!       retval = v;
!       break;
!       }
!     }
!   return retval;
    }
  
! static __int128
! big_endian_to_binary_signed(const void *psource, int capacity)
    {
!   __int128 retval;
!   unsigned __int128 u = big_endian_to_binary_unsigned(psource, capacity);
  
!   switch (capacity)
      {
!     case 1:
!     case 2:
!     case 4:
!     case 8:
!       {
!       int bits = capacity * 8;
! 
!       unsigned __int128 sign_bit =
!           (static_cast<unsigned __int128>(1)) << (bits - 1);
! 
!       if(u & sign_bit)
!         {
!         unsigned __int128 extension =
!             (~static_cast<unsigned __int128>(0)) << bits;
! 
!         u |= extension;
!         }
! 
!       retval = u;
!       break;
!       }
! 
!     case 16:
!       {
!       /* Already a full-width 128-bit quantity.  Returning it as signed
!          interprets the high bit as the sign bit on GCC/two's-complement
!          targets. */
!       retval = u;
!       break;
!       }
! 
!     default:
!       abort();
      }
    return retval;
    }
*************** get_binary_value_local(  int
*** 911,923 ****
        if( resolved_var->attr & signable_e)
          {
          retval = big_endian_to_binary_signed(
!                         PTRCAST(const unsigned char, resolved_location),
                          resolved_length);
          }
        else
          {
          retval = big_endian_to_binary_unsigned(
!                         PTRCAST(const unsigned char, resolved_location),
                          resolved_length);
          }
        *rdigits = resolved_var->rdigits;
--- 979,991 ----
        if( resolved_var->attr & signable_e)
          {
          retval = big_endian_to_binary_signed(
!                         resolved_location,
                          resolved_length);
          }
        else
          {
          retval = big_endian_to_binary_unsigned(
!                         resolved_location,
                          resolved_length);
          }
        *rdigits = resolved_var->rdigits;
*************** get_binary_value_local(  int
*** 927,938 ****
        {
        if( resolved_var->attr & signable_e)
          {
!         retval = little_endian_to_binary_signed(resolved_var->data,
                                                  resolved_var->capacity);
          }
        else
          {
!         retval = little_endian_to_binary_unsigned(resolved_var->data,
                                                    resolved_var->capacity);
          }
        *rdigits = resolved_var->rdigits;
--- 995,1006 ----
        {
        if( resolved_var->attr & signable_e)
          {
!         retval = native_to_binary_signed(resolved_var->data,
                                                  resolved_var->capacity);
          }
        else
          {
!         retval = native_to_binary_unsigned(resolved_var->data,
                                                    resolved_var->capacity);
          }
        *rdigits = resolved_var->rdigits;
*************** get_binary_value_local(  int
*** 944,957 ****
      case FldPointer:
        if( resolved_var->attr & signable_e)
          {
!         retval = little_endian_to_binary_signed(
!                       PTRCAST(const unsigned char, resolved_location),
                        resolved_length);
          }
        else
          {
!         retval = little_endian_to_binary_unsigned(
!                       PTRCAST(const unsigned char, resolved_location),
                        resolved_length);
          }
        *rdigits = resolved_var->rdigits;
--- 1012,1025 ----
      case FldPointer:
        if( resolved_var->attr & signable_e)
          {
!         retval = native_to_binary_signed(
!                       resolved_location,
                        resolved_length);
          }
        else
          {
!         retval = native_to_binary_unsigned(
!                       resolved_location,
                        resolved_length);
          }
        *rdigits = resolved_var->rdigits;
*************** value_is_too_big(const cblc_field_t *var
*** 1247,1287 ****
  static void
  binary_to_big_endian(   unsigned char *dest,
                          int            bytes,
!                         __int128       value
!                     )
    {
!   if( value < 0 )
      {
!     memset(dest, 0xFF, bytes);
      }
    else
      {
!     memset(dest, 0x00, bytes);
!     }
! 
!   dest += bytes-1;
!   while( bytes-- )
!     {
!     *dest-- = (unsigned char) value;
!     value >>= 8;
      }
    }
  
  static void
! binary_to_little_endian(   unsigned char *dest,
!                            int            bytes,
!                            __int128       value
                         )
    {
!   if( value < 0 )
      {
!     memset(dest, 0xFF, bytes);
      }
    else
      {
!     memset(dest, 0x00, bytes);
      }
-   memcpy(dest, &value, bytes);
    }
  
  static __int128
--- 1315,1461 ----
  static void
  binary_to_big_endian(   unsigned char *dest,
                          int            bytes,
!                         __int128       value,
!                         bool           signable )
    {
!   // value is native, and we want the result to be big-endian.
!   if( signable )
      {
!     int8_t   v8;
!     int16_t  v16;
!     int32_t  v32;
!     int64_t  v64;
!     __int128 v128;
!     switch(bytes)
!       {
!       case 1:
!         v8 = value;
!         *reinterpret_cast<int8_t*>(dest) = v8;
!         break;
!       case 2:
!         v16 = value;
!         #if COBOL_LITTLE_ENDIAN
!         v16 = __builtin_bswap16(v16);
!         #endif
!         *reinterpret_cast<int16_t*>(dest) = v16;
!         break;
!       case 4:
!         v32 = value;
!         #if COBOL_LITTLE_ENDIAN
!         v32 = __builtin_bswap32(v32);
!         #endif
!         *reinterpret_cast<int32_t*>(dest) = v32;
!         break;
!       case 8:
!         v64 = value;
!         #if COBOL_LITTLE_ENDIAN
!         v64 = __builtin_bswap64(v64);
!         #endif
!         *reinterpret_cast<int64_t*>(dest) = v64;
!         break;
!       default:
!         v128 = value;
!         #if COBOL_LITTLE_ENDIAN
!         v128 = __builtin_bswap128(v128);
!         #endif
!         *reinterpret_cast<__int128*>(dest) = v128;
!         break;
!       }
      }
    else
      {
!     uint8_t   v8;
!     uint16_t  v16;
!     uint32_t  v32;
!     uint64_t  v64;
!     unsigned __int128 v128;
!     switch(bytes)
!       {
!       case 1:
!         v8 = value;
!         *reinterpret_cast<uint8_t*>(dest) = v8;
!         break;
!       case 2:
!         v16 = value;
!         #if COBOL_LITTLE_ENDIAN
!         v16 = __builtin_bswap16(v16);
!         #endif
!         *reinterpret_cast<uint16_t*>(dest) = v16;
!         break;
!       case 4:
!         v32 = value;
!         #if COBOL_LITTLE_ENDIAN
!         v32 = __builtin_bswap32(v32);
!         #endif
!         *reinterpret_cast<uint32_t*>(dest) = v32;
!         break;
!       case 8:
!         v64 = value;
!         #if COBOL_LITTLE_ENDIAN
!         v64 = __builtin_bswap64(v64);
!         #endif
!         *reinterpret_cast<uint64_t*>(dest) = v64;
!         break;
!       default:
!         v128 = value;
!         #if COBOL_LITTLE_ENDIAN
!         v128 = __builtin_bswap128(v128);
!         #endif
!         *reinterpret_cast<unsigned __int128*>(dest) = v128;
!         break;
!       }
      }
    }
  
  static void
! binary_to_native_binary(   void      *dest,
!                            int        bytes,
!                            __int128   value,
!                            bool       signable
                         )
    {
!   if(signable)
      {
!     switch(bytes)
!       {
!       case 1:
!         *reinterpret_cast<int8_t  * >(dest) = value;
!         break;
!       case 2:
!         *reinterpret_cast<int16_t * >(dest) = value;
!         break;
!       case 4:
!         *reinterpret_cast<int32_t * >(dest) = value;
!         break;
!       case 8:
!         *reinterpret_cast<int64_t * >(dest) = value;
!         break;
!       case 16:
!         *reinterpret_cast<__int128 * >(dest) = value;
!         break;
!       }
      }
    else
      {
!     switch(bytes)
!       {
!       case 1:
!         *reinterpret_cast<uint8_t  * >(dest) = value;
!         break;
!       case 2:
!         *reinterpret_cast<uint16_t * >(dest) = value;
!         break;
!       case 4:
!         *reinterpret_cast<uint32_t * >(dest) = value;
!         break;
!       case 8:
!         *reinterpret_cast<uint64_t * >(dest) = value;
!         break;
!       case 16:
!         *reinterpret_cast<unsigned __int128 * >(dest) = value;
!         break;
!       }
      }
    }
  
  static __int128
*************** int128_to_field(cblc_field_t   *var,
*** 1972,1978 ****
            case FldNumericBinary:
              binary_to_big_endian(   location,
                                      length,
!                                     value);
              size_error = value_is_too_big(var, value, source_rdigits);
              break;
  
--- 2146,2153 ----
            case FldNumericBinary:
              binary_to_big_endian(   location,
                                      length,
!                                     value,
!                                     !!(var->attr&signable_e));
              size_error = value_is_too_big(var, value, source_rdigits);
              break;
  
*************** int128_to_field(cblc_field_t   *var,
*** 1985,1993 ****
              // will become one, but it is, apparently harmless.  The HIGH-VALUE
              // must get processed separately elsewhere.  As the author, it
              // would be nice if I knew -- but I don't.
!             binary_to_little_endian(location,
                                      length,
!                                     value);
              size_error = value_is_too_big(var, value, source_rdigits);
              break;
  
--- 2160,2169 ----
              // will become one, but it is, apparently harmless.  The HIGH-VALUE
              // must get processed separately elsewhere.  As the author, it
              // would be nice if I knew -- but I don't.
!             binary_to_native_binary( location,
                                      length,
!                                     value,
!                                     !!(var->attr&signable_e));
              size_error = value_is_too_big(var, value, source_rdigits);
              break;
  
diff -Nrcpad gcc-17-20260628/libgcobol/libgcobol.h gcc-17-20260705/libgcobol/libgcobol.h
*** gcc-17-20260628/libgcobol/libgcobol.h	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libgcobol/libgcobol.h	Sun Jul  5 22:32:17 2026
***************
*** 39,48 ****
      Some are also called between source code modules in libgcobol, hence the
      need here for declarations. */
  
! extern void __gg__mabort();
  
  
! // The unnecessary abort() that follows is necessary to make cppcheck be 
  // aware that massert() actually terminates processing after a failed
  // malloc().
  #define massert(p) if(!p){__gg__mabort();abort();}
--- 39,69 ----
      Some are also called between source code modules in libgcobol, hence the
      need here for declarations. */
  
! // The runtime might be on a little-endian machine, and it might be on a
! // big-endian machine, most notably the IBM S390 series.
  
+ #if defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+ # define COBOL_BIG_ENDIAN 1
+ # define COBOL_LITTLE_ENDIAN 0
+ #elif defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ # define COBOL_BIG_ENDIAN 0
+ # define COBOL_LITTLE_ENDIAN 1
  
! #elif defined(__BIG_ENDIAN__) || defined(_BIG_ENDIAN)
! # define COBOL_BIG_ENDIAN 1
! # define COBOL_LITTLE_ENDIAN 0
! #elif defined(__LITTLE_ENDIAN__) || defined(_LITTLE_ENDIAN)
! # define COBOL_BIG_ENDIAN 0
! # define COBOL_LITTLE_ENDIAN 1
! 
! //#else
! cppcheck-suppress preprocessorErrorDirective
! # error "Unknown byte order" 
! #endif
! 
! extern void __gg__mabort();
! 
! // The unnecessary abort() that follows is necessary to make cppcheck be
  // aware that massert() actually terminates processing after a failed
  // malloc().
  #define massert(p) if(!p){__gg__mabort();abort();}
diff -Nrcpad gcc-17-20260628/libgcobol/stringbin.cc gcc-17-20260705/libgcobol/stringbin.cc
*** gcc-17-20260628/libgcobol/stringbin.cc	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libgcobol/stringbin.cc	Sun Jul  5 22:32:17 2026
*************** typedef struct
*** 132,138 ****
    union
      {
      unsigned __int128 val128;
-     uint64_t          val64;
      };
    } COMBINED;
  
--- 132,137 ----
*************** packed_from_combined(const COMBINED &com
*** 393,398 ****
--- 392,398 ----
      {
      // Stage 1: pull from int128 until the top half is zero.
      __int128 value128 = combined.val128;
+ #if COBOL_LITTLE_ENDIAN
      while(value128>>64)
        {
        *(--d) = bin2pd[value128%100];
*************** packed_from_combined(const COMBINED &com
*** 405,414 ****
        *(--d) = bin2pd[value64%100];
        value64 /= 100;
        }
      }
    else
      {
!     uint64_t value = combined.val64;
      while(d > combined_string)
        {
        *(--d) = bin2pd[value%100];
--- 405,426 ----
        *(--d) = bin2pd[value64%100];
        value64 /= 100;
        }
+ #else
+     // The cute trick for little-endian is trickier in big-endian.  Right now
+     // it's late, and I don't feel like it.  It would be easier if there were
+     // __int128 constants, because the test up above could be
+     //    while(value128/2^64)
+     // but that's not available as of this writing.
+     while(d > combined_string)
+       {
+       *(--d) = bin2pd[value128%100];
+       value128 /= 100;
+       }
+ #endif
      }
    else
      {
!     uint64_t value = combined.val128;
      while(d > combined_string)
        {
        *(--d) = bin2pd[value%100];
diff -Nrcpad gcc-17-20260628/libgfortran/ChangeLog gcc-17-20260705/libgfortran/ChangeLog
*** gcc-17-20260628/libgfortran/ChangeLog	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libgfortran/ChangeLog	Sun Jul  5 22:32:17 2026
***************
*** 1,3 ****
--- 1,17 ----
+ 2026-07-01  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* configure: Regenerate.
+ 	cherry picked from approved upstream pull request
+ 	AX_PTHREAD: Fix pthread detection on Solaris 11.4
+ 	https://github.com/autoconf-archive/autoconf-archive/pull/341
+ 
+ 2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* acinclude.m4: Replace AC_TRY_COMPILE with AC_COMPILE_IFELSE.
+ 	* configure.ac: Replace AC_LANG_C with AC_LANG([C]).  Replace
+ 	AM_PROG_LIBTOOL with LT_INIT.
+ 
  2026-06-25  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
  
  	PR libfortran/118793
diff -Nrcpad gcc-17-20260628/libgfortran/acinclude.m4 gcc-17-20260705/libgfortran/acinclude.m4
*** gcc-17-20260628/libgfortran/acinclude.m4	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libgfortran/acinclude.m4	Sun Jul  5 22:32:17 2026
*************** AC_DEFUN([LIBGFOR_CHECK_STRERROR_R], [
*** 407,416 ****
    dnl Check for three-argument POSIX version of strerror_r
    ac_save_CFLAGS="$CFLAGS"
    CFLAGS="-Wimplicit-function-declaration -Werror"
!   AC_TRY_COMPILE([#define _GNU_SOURCE 1
  	     	  #include <string.h>
! 		  #include <locale.h>],
! 		  [char s[128]; strerror_r(5, s, 128);],
  		  AC_DEFINE(HAVE_STRERROR_R, 1,
  		  [Define if strerror_r is available in <string.h>.]),)
    CFLAGS="$ac_save_CFLAGS"
--- 407,416 ----
    dnl Check for three-argument POSIX version of strerror_r
    ac_save_CFLAGS="$CFLAGS"
    CFLAGS="-Wimplicit-function-declaration -Werror"
!   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#define _GNU_SOURCE 1
  	     	  #include <string.h>
! 		  #include <locale.h>]],
! 		  [[char s[128]; strerror_r(5, s, 128);]])],
  		  AC_DEFINE(HAVE_STRERROR_R, 1,
  		  [Define if strerror_r is available in <string.h>.]),)
    CFLAGS="$ac_save_CFLAGS"
*************** AC_DEFUN([LIBGFOR_CHECK_STRERROR_R], [
*** 418,427 ****
    dnl Check for two-argument version of strerror_r (e.g. for VxWorks)
    ac_save_CFLAGS="$CFLAGS"
    CFLAGS="-Wimplicit-function-declaration -Werror"
!   AC_TRY_COMPILE([#define _GNU_SOURCE 1
  	     	  #include <string.h>
! 		  #include <locale.h>],
! 		  [char s[128]; strerror_r(5, s);],
  		  AC_DEFINE(HAVE_STRERROR_R_2ARGS, 1,
  		  [Define if strerror_r takes two arguments and is available in <string.h>.]),)
    CFLAGS="$ac_save_CFLAGS"
--- 418,427 ----
    dnl Check for two-argument version of strerror_r (e.g. for VxWorks)
    ac_save_CFLAGS="$CFLAGS"
    CFLAGS="-Wimplicit-function-declaration -Werror"
!   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#define _GNU_SOURCE 1
  	     	  #include <string.h>
! 		  #include <locale.h>]],
! 		  [[char s[128]; strerror_r(5, s);]])],
  		  AC_DEFINE(HAVE_STRERROR_R_2ARGS, 1,
  		  [Define if strerror_r takes two arguments and is available in <string.h>.]),)
    CFLAGS="$ac_save_CFLAGS"
diff -Nrcpad gcc-17-20260628/libgfortran/configure gcc-17-20260705/libgfortran/configure
*** gcc-17-20260628/libgfortran/configure	Sun Jun 28 22:32:22 2026
--- gcc-17-20260705/libgfortran/configure	Sun Jul  5 22:32:22 2026
*************** fi
*** 17917,17923 ****
  # correctly enabled
  
  case $host_os in
!         darwin* | hpux* | linux* | osf* | solaris*)
          ax_pthread_check_macro="_REENTRANT"
          ;;
  
--- 17917,17946 ----
  # correctly enabled
  
  case $host_os in
!         solaris*)
!         # Solaris 11.4 introduced XPG7 support and did away with the need for
!         # _REENTRANT.
! 
!         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
! /* end confdefs.h.  */
! 
! #            undef _XOPEN_SOURCE
! #            include <sys/feature_tests.h>
! #            if _XOPEN_VERSION < 700
!              AX_PTHREAD_SOLARIS__REENTRANT
! #            endif
! 
! _ACEOF
! if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
!   $EGREP "AX_PTHREAD_SOLARIS__REENTRANT" >/dev/null 2>&1; then :
!   ax_pthread_check_macro="_REENTRANT"
! else
!   ax_pthread_check_macro="--"
! fi
! rm -f conftest*
! 
!         ;;
!         darwin* | hpux* | linux* | osf*)
          ax_pthread_check_macro="_REENTRANT"
          ;;
  
diff -Nrcpad gcc-17-20260628/libgfortran/configure.ac gcc-17-20260705/libgfortran/configure.ac
*** gcc-17-20260628/libgfortran/configure.ac	Sun Jun 28 22:32:17 2026
--- gcc-17-20260705/libgfortran/configure.ac	Sun Jul  5 22:32:17 2026
*************** AC_SUBST(toolexeclibdir)
*** 115,121 ****
  # Create a spec file, so that compile/link tests don't fail
  test -f libgfortran.spec || touch libgfortran.spec
  
! AC_LANG_C
  # Check the compiler.
  # The same as in boehm-gc and libstdc++. Have to borrow it from there.
  # We must force CC to /not/ be precious variables; otherwise
--- 115,121 ----
  # Create a spec file, so that compile/link tests don't fail
  test -f libgfortran.spec || touch libgfortran.spec
  
! AC_LANG([C])
  # Check the compiler.
  # The same as in boehm-gc and libstdc++. Have to borrow it from there.
  # We must force CC to /not/ be precious variables; otherwise
*************** AC_PROG_INSTALL
*** 259,265 ****
  # Configure libtool
  #AC_MSG_NOTICE([====== Starting libtool configuration])
  AC_LIBTOOL_DLOPEN
! AM_PROG_LIBTOOL
  LT_LIB_M
  ACX_LT_HOST_FLAGS
  AC_SUBST(enable_shared)
--- 259,265 ----
  # Configure libtool
  #AC_MSG_NOTICE([====== Starting libtool configuration])
  AC_LIBTOOL_DLOPEN
! LT_INIT
  LT_LIB_M
  ACX_LT_HOST_FLAGS
  AC_SUBST(enable_shared)
diff -Nrcpad gcc-17-20260628/libgm2/ChangeLog gcc-17-20260705/libgm2/ChangeLog
*** gcc-17-20260628/libgm2/ChangeLog	Sun Jun 28 22:32:18 2026
--- gcc-17-20260705/libgm2/ChangeLog	Sun Jul  5 22:32:17 2026
***************
*** 1,3 ****
--- 1,15 ----
+ 2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* acinclude.m4: Replace AC_HELP_STRING with AS_HELP_STRING.  Replace
+ 	AC_LANG_SAVE AC_LANG_CPLUSPLUS (...) AC_LANG_RESTORE with
+ 	AC_LANG_PUSH([C++]) (...) AC_LANG_POP([C++]).  Replace AC_TRY_LINK with
+ 	AC_LINK_IFELSE.  Replace AC_TRY_COMPILE with AC_COMPILE_IFELSE.
+ 	* configure: Regenerate.
+ 	* configure.ac: Replace AC_HELP_STRING AS_HELP_STRING.  Remove redundant
+ 	AM_PROG_LIBTOOL.  Replace AC_LANG_C with AC_LANG([C]).  Replace
+ 	AC_FOREACH with m4_foreach_w.
+ 
  2026-06-01  Jakub Jelinek  <jakub@redhat.com>
  
  	* configure: Regenerate.
diff -Nrcpad gcc-17-20260628/libgm2/acinclude.m4 gcc-17-20260705/libgm2/acinclude.m4
*** gcc-17-20260628/libgm2/acinclude.m4	Sun Jun 28 22:32:18 2026
--- gcc-17-20260705/libgm2/acinclude.m4	Sun Jul  5 22:32:17 2026
*************** AC_DEFUN([GLIBCXX_CONFIGURE], [
*** 76,90 ****
    # We use these options to decide which functions to include.  They are
    # set from the top level.
    AC_ARG_WITH([target-subdir],
!     AC_HELP_STRING([--with-target-subdir=SUBDIR],
  		   [configuring in a subdirectory]))
  
    AC_ARG_WITH([cross-host],
!     AC_HELP_STRING([--with-cross-host=HOST],
  		   [configuring with a cross compiler]))
  
    AC_ARG_WITH([newlib],
!     AC_HELP_STRING([--with-newlib],
  		   [assume newlib as a system C library]))
  
    # Will set LN_S to either 'ln -s', 'ln', or 'cp -p' (if linking isn't
--- 76,90 ----
    # We use these options to decide which functions to include.  They are
    # set from the top level.
    AC_ARG_WITH([target-subdir],
!     AS_HELP_STRING([--with-target-subdir=SUBDIR],
  		   [configuring in a subdirectory]))
  
    AC_ARG_WITH([cross-host],
!     AS_HELP_STRING([--with-cross-host=HOST],
  		   [configuring with a cross compiler]))
  
    AC_ARG_WITH([newlib],
!     AS_HELP_STRING([--with-newlib],
  		   [assume newlib as a system C library]))
  
    # Will set LN_S to either 'ln -s', 'ln', or 'cp -p' (if linking isn't
*************** dnl documentation.
*** 136,142 ****
  dnl
  m4_define([GLIBCXX_ENABLE],[dnl
  m4_define([_g_switch],[--enable-$1])dnl
! m4_define([_g_help],[AC_HELP_STRING([_g_switch$3],[$4 @<:@default=$2@:>@])])dnl
   AC_ARG_ENABLE([$1],m4_dquote(_g_help),
    m4_bmatch([$5],
     [^permit ],
--- 136,142 ----
  dnl
  m4_define([GLIBCXX_ENABLE],[dnl
  m4_define([_g_switch],[--enable-$1])dnl
! m4_define([_g_help],[AS_HELP_STRING([_g_switch$3],[$4 @<:@default=$2@:>@])])dnl
   AC_ARG_ENABLE([$1],m4_dquote(_g_help),
    m4_bmatch([$5],
     [^permit ],
*************** AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME]
*** 193,200 ****
      [use KIND for check type],
      [permit yes|no|rt])
  
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
    ac_save_LIBS="$LIBS"
--- 193,199 ----
      [use KIND for check type],
      [permit yes|no|rt])
  
!   AC_LANG_PUSH([C++])
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
    ac_save_LIBS="$LIBS"
*************** AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME]
*** 295,335 ****
  
      if test x"$ac_has_unistd_h" = x"yes"; then
        AC_MSG_CHECKING([for monotonic clock])
!       AC_TRY_LINK(
! 	[#include <unistd.h>
  	 #include <time.h>
! 	],
! 	[#if _POSIX_TIMERS > 0 && defined(_POSIX_MONOTONIC_CLOCK)
  	  timespec tp;
  	 #endif
  	  clock_gettime(CLOCK_MONOTONIC, &tp);
! 	], [ac_has_clock_monotonic=yes], [ac_has_clock_monotonic=no])
  
        AC_MSG_RESULT($ac_has_clock_monotonic)
  
        AC_MSG_CHECKING([for realtime clock])
!       AC_TRY_LINK(
! 	[#include <unistd.h>
  	 #include <time.h>
! 	],
! 	[#if _POSIX_TIMERS > 0
  	  timespec tp;
  	 #endif
  	  clock_gettime(CLOCK_REALTIME, &tp);
! 	], [ac_has_clock_realtime=yes], [ac_has_clock_realtime=no])
  
        AC_MSG_RESULT($ac_has_clock_realtime)
  
        AC_MSG_CHECKING([for nanosleep])
!       AC_TRY_LINK(
! 	[#include <unistd.h>
  	 #include <time.h>
! 	],
! 	[#if _POSIX_TIMERS > 0
  	  timespec tp;
  	 #endif
  	  nanosleep(&tp, 0);
! 	], [ac_has_nanosleep=yes], [ac_has_nanosleep=no])
  
        AC_MSG_RESULT($ac_has_nanosleep)
      fi
--- 294,334 ----
  
      if test x"$ac_has_unistd_h" = x"yes"; then
        AC_MSG_CHECKING([for monotonic clock])
!       AC_LINK_IFELSE([AC_LANG_PROGRAM(
! 	[[#include <unistd.h>
  	 #include <time.h>
! 	]],
! 	[[#if _POSIX_TIMERS > 0 && defined(_POSIX_MONOTONIC_CLOCK)
  	  timespec tp;
  	 #endif
  	  clock_gettime(CLOCK_MONOTONIC, &tp);
! 	]])], [ac_has_clock_monotonic=yes], [ac_has_clock_monotonic=no])
  
        AC_MSG_RESULT($ac_has_clock_monotonic)
  
        AC_MSG_CHECKING([for realtime clock])
!       AC_LINK_IFELSE([AC_LANG_PROGRAM(
! 	[[#include <unistd.h>
  	 #include <time.h>
! 	]],
! 	[[#if _POSIX_TIMERS > 0
  	  timespec tp;
  	 #endif
  	  clock_gettime(CLOCK_REALTIME, &tp);
! 	]])], [ac_has_clock_realtime=yes], [ac_has_clock_realtime=no])
  
        AC_MSG_RESULT($ac_has_clock_realtime)
  
        AC_MSG_CHECKING([for nanosleep])
!       AC_LINK_IFELSE([AC_LANG_PROGRAM(
! 	[[#include <unistd.h>
  	 #include <time.h>
! 	]],
! 	[[#if _POSIX_TIMERS > 0
  	  timespec tp;
  	 #endif
  	  nanosleep(&tp, 0);
! 	]])], [ac_has_nanosleep=yes], [ac_has_nanosleep=no])
  
        AC_MSG_RESULT($ac_has_nanosleep)
      fi
*************** AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME]
*** 339,355 ****
      case ${target_os} in
        linux* | uclinux*)
  	AC_MSG_CHECKING([for clock_gettime syscall])
! 	AC_TRY_COMPILE(
! 	  [#include <unistd.h>
  	   #include <time.h>
  	   #include <sys/syscall.h>
! 	  ],
! 	  [#if _POSIX_TIMERS > 0 && defined(_POSIX_MONOTONIC_CLOCK)
  	    timespec tp;
  	   #endif
  	   syscall(SYS_clock_gettime, CLOCK_MONOTONIC, &tp);
  	   syscall(SYS_clock_gettime, CLOCK_REALTIME, &tp);
! 	  ], [ac_has_clock_gettime_syscall=yes], [ac_has_clock_gettime_syscall=no])
  	AC_MSG_RESULT($ac_has_clock_gettime_syscall)
  	if test x"$ac_has_clock_gettime_syscall" = x"yes"; then
  	  AC_DEFINE(_GLIBCXX_USE_CLOCK_GETTIME_SYSCALL, 1,
--- 338,354 ----
      case ${target_os} in
        linux* | uclinux*)
  	AC_MSG_CHECKING([for clock_gettime syscall])
! 	AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
! 	  [[#include <unistd.h>
  	   #include <time.h>
  	   #include <sys/syscall.h>
! 	  ]],
! 	  [[#if _POSIX_TIMERS > 0 && defined(_POSIX_MONOTONIC_CLOCK)
  	    timespec tp;
  	   #endif
  	   syscall(SYS_clock_gettime, CLOCK_MONOTONIC, &tp);
  	   syscall(SYS_clock_gettime, CLOCK_REALTIME, &tp);
! 	  ]])], [ac_has_clock_gettime_syscall=yes], [ac_has_clock_gettime_syscall=no])
  	AC_MSG_RESULT($ac_has_clock_gettime_syscall)
  	if test x"$ac_has_clock_gettime_syscall" = x"yes"; then
  	  AC_DEFINE(_GLIBCXX_USE_CLOCK_GETTIME_SYSCALL, 1,
*************** AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME]
*** 357,367 ****
  	  ac_has_clock_monotonic=yes
  	  ac_has_clock_realtime=yes
  	  AC_MSG_CHECKING([for struct timespec that matches syscall])
! 	  AC_TRY_COMPILE(
! 	    [#include <time.h>
  	     #include <sys/syscall.h>
! 	    ],
! 	    [#ifdef SYS_clock_gettime64
  	     #if SYS_clock_gettime64 != SYS_clock_gettime
  	     // We need to use SYS_clock_gettime and libc appears to
  	     // also know about the SYS_clock_gettime64 syscall.
--- 356,366 ----
  	  ac_has_clock_monotonic=yes
  	  ac_has_clock_realtime=yes
  	  AC_MSG_CHECKING([for struct timespec that matches syscall])
! 	  AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
! 	    [[#include <time.h>
  	     #include <sys/syscall.h>
! 	    ]],
! 	    [[#ifdef SYS_clock_gettime64
  	     #if SYS_clock_gettime64 != SYS_clock_gettime
  	     // We need to use SYS_clock_gettime and libc appears to
  	     // also know about the SYS_clock_gettime64 syscall.
*************** AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME]
*** 370,376 ****
  	       "struct timespec must be compatible with SYS_clock_gettime");
  	     #endif
  	     #endif
! 	    ],
  	    [ac_timespec_matches_syscall=yes],
  	    [ac_timespec_matches_syscall=no])
  	  AC_MSG_RESULT($ac_timespec_matches_syscall)
--- 369,375 ----
  	       "struct timespec must be compatible with SYS_clock_gettime");
  	     #endif
  	     #endif
! 	    ]])],
  	    [ac_timespec_matches_syscall=yes],
  	    [ac_timespec_matches_syscall=no])
  	  AC_MSG_RESULT($ac_timespec_matches_syscall)
*************** AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME]
*** 404,420 ****
        [Defined if Sleep exists.])
    else
        AC_MSG_CHECKING([for sleep])
!       AC_TRY_COMPILE([#include <unistd.h>],
!                      [sleep(1)],
                       [ac_has_sleep=yes],[ac_has_sleep=no])
        if test x"$ac_has_sleep" = x"yes"; then
          AC_DEFINE(HAVE_SLEEP,1, [Defined if sleep exists.])
        fi
        AC_MSG_RESULT($ac_has_sleep)
        AC_MSG_CHECKING([for usleep])
!       AC_TRY_COMPILE([#include <unistd.h>],
!                      [sleep(1);
!                       usleep(100);],
                       [ac_has_usleep=yes],[ac_has_usleep=no])
        if test x"$ac_has_usleep" = x"yes"; then
          AC_DEFINE(HAVE_USLEEP,1, [Defined if usleep exists.])
--- 403,419 ----
        [Defined if Sleep exists.])
    else
        AC_MSG_CHECKING([for sleep])
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>]],
!                      [[sleep(1)]])],
                       [ac_has_sleep=yes],[ac_has_sleep=no])
        if test x"$ac_has_sleep" = x"yes"; then
          AC_DEFINE(HAVE_SLEEP,1, [Defined if sleep exists.])
        fi
        AC_MSG_RESULT($ac_has_sleep)
        AC_MSG_CHECKING([for usleep])
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>]],
!                      [[sleep(1);
!                       usleep(100);]])],
                       [ac_has_usleep=yes],[ac_has_usleep=no])
        if test x"$ac_has_usleep" = x"yes"; then
          AC_DEFINE(HAVE_USLEEP,1, [Defined if usleep exists.])
*************** AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME]
*** 430,436 ****
  
    CXXFLAGS="$ac_save_CXXFLAGS"
    LIBS="$ac_save_LIBS"
!   AC_LANG_RESTORE
  ])
  
  dnl
--- 429,435 ----
  
    CXXFLAGS="$ac_save_CXXFLAGS"
    LIBS="$ac_save_LIBS"
!   AC_LANG_POP([C++])
  ])
  
  dnl
*************** AC_DEFUN([GLIBCXX_CHECK_GETTIMEOFDAY], [
*** 442,449 ****
  
    AC_MSG_CHECKING([for gettimeofday])
  
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
  
--- 441,447 ----
  
    AC_MSG_CHECKING([for gettimeofday])
  
!   AC_LANG_PUSH([C++])
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
  
*************** AC_DEFUN([GLIBCXX_CHECK_GETTIMEOFDAY], [
*** 464,470 ****
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_RESTORE
  ])
  
  dnl
--- 462,468 ----
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_POP([C++])
  ])
  
  dnl
diff -Nrcpad gcc-17-20260628/libgm2/configure gcc-17-20260705/libgm2/configure
*** gcc-17-20260628/libgm2/configure	Sun Jun 28 22:32:18 2026
--- gcc-17-20260705/libgm2/configure	Sun Jul  5 22:32:17 2026
*************** ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
*** 5101,5107 ****
    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gettimeofday" >&5
  $as_echo_n "checking for gettimeofday... " >&6; }
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 5101,5106 ----
*************** fi
*** 5207,5213 ****
  
  
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 5206,5211 ----
*************** else
*** 15243,15249 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 15246 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 15241,15247 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 15244 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 15349,15355 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 15352 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 15347,15353 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 15350 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** ac_compiler_gnu=$ac_cv_c_compiler_gnu
*** 18677,18683 ****
  # Only expand once:
  
  
- 
  enable_dlopen=yes
  
  
--- 18675,18680 ----
diff -Nrcpad gcc-17-20260628/libgm2/configure.ac gcc-17-20260705/libgm2/configure.ac
*** gcc-17-20260628/libgm2/configure.ac	Sun Jun 28 22:32:18 2026
--- gcc-17-20260705/libgm2/configure.ac	Sun Jul  5 22:32:17 2026
*************** AC_SUBST(slibdir)
*** 177,183 ****
  # Command-line options.
  # Very limited version of AC_MAINTAINER_MODE.
  AC_ARG_ENABLE([maintainer-mode],
!   [AC_HELP_STRING([--enable-maintainer-mode],
                   [enable make rules and dependencies not useful (and
                    sometimes confusing) to the casual installer])],
    [case ${enable_maintainer_mode} in
--- 177,183 ----
  # Command-line options.
  # Very limited version of AC_MAINTAINER_MODE.
  AC_ARG_ENABLE([maintainer-mode],
!   [AS_HELP_STRING([--enable-maintainer-mode],
                   [enable make rules and dependencies not useful (and
                    sometimes confusing) to the casual installer])],
    [case ${enable_maintainer_mode} in
*************** AC_CHECK_TOOL(RANLIB, ranlib, ranlib-not
*** 255,261 ****
  AC_PROG_MAKE_SET
  AC_PROG_INSTALL
  
- AM_PROG_LIBTOOL
  LT_INIT
  AC_LIBTOOL_DLOPEN
  
--- 255,260 ----
*************** if (test "$ac_cv_struct_tm_gmtoff" = "ye
*** 290,296 ****
    AC_DEFINE(HAVE_TM_TM_GMTOFF, 1, [Define if struct tm has a tm_gmtoff field.])
  fi
  
! AC_LANG_C
  # Check the compiler.
  # The same as in boehm-gc and libstdc++. Have to borrow it from there.
  # We must force CC to /not/ be precious variables; otherwise
--- 289,295 ----
    AC_DEFINE(HAVE_TM_TM_GMTOFF, 1, [Define if struct tm has a tm_gmtoff field.])
  fi
  
! AC_LANG([C])
  # Check the compiler.
  # The same as in boehm-gc and libstdc++. Have to borrow it from there.
  # We must force CC to /not/ be precious variables; otherwise
*************** GCC_BASE_VER
*** 505,511 ****
  AC_CONFIG_SRCDIR([Makefile.am])
  AC_CONFIG_FILES([Makefile])
  
! AC_CONFIG_FILES(AC_FOREACH([DIR], [libm2min libm2pim libm2iso libm2cor libm2log], [DIR/Makefile ]),
   [ cat > vpsed$$ << \_EOF
  s!`test -f '$<' || echo '$(srcdir)/'`!!
  _EOF
--- 504,510 ----
  AC_CONFIG_SRCDIR([Makefile.am])
  AC_CONFIG_FILES([Makefile])
  
! AC_CONFIG_FILES(m4_foreach_w([DIR], [libm2min libm2pim libm2iso libm2cor libm2log], [DIR/Makefile ]),
   [ cat > vpsed$$ << \_EOF
  s!`test -f '$<' || echo '$(srcdir)/'`!!
  _EOF
diff -Nrcpad gcc-17-20260628/libgomp/ChangeLog gcc-17-20260705/libgomp/ChangeLog
*** gcc-17-20260628/libgomp/ChangeLog	Sun Jun 28 22:32:18 2026
--- gcc-17-20260705/libgomp/ChangeLog	Sun Jul  5 22:32:18 2026
***************
*** 1,3 ****
--- 1,117 ----
+ 2026-07-02  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	* config/nvptx/allocator.c [PTX < 4.1]: Fix build.
+ 	* config/nvptx/team.c [PTX < 4.1]: Disable the whole
+ 	'__nvptx_lowlat_pool' machinery.
+ 
+ 2026-06-30  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	* config.h.in: Regenerate.
+ 	* configure.ac [x$libgomp_cv_have_sync_builtins = xno]: Fix check.
+ 	* configure: Regenerate.
+ 	* allocator.c (omp_init_allocator, gomp_map_omp_init_allocator)
+ 	[!HAVE_SYNC_BUILTINS]: Fix build.
+ 	* testsuite/libgomp.c-c++-common/uses_allocators-2.c: Fix for C++ testing.
+ 	* testsuite/libgomp.c-c++-common/uses_allocators-9.c: Likewise.
+ 	* testsuite/libgomp.fortran/dep-uses-allocators.f90: Remove
+ 	obsolete "sorry, unimplemented: [...]" diagnostic check.
+ 	* testsuite/libgomp.fortran/uses_allocators-7.f90: XFAIL one
+ 	'scan-tree-dump-times' check.
+ 
+ 2026-06-30  Chung-Lin Tang  <cltang@baylibre.com>
+ 
+ 	* allocator.c (struct omp_allocator_data): Always enable 'memkind' field
+ 	for configurations with offloading. Adjust comments assuming
+ 	HAVE_SYNC_BUILTINS for all offload host/accelerators.
+ 	(gomp_init_allocator_data): New function, created from omp_init_allocator
+ 	logic.
+ 	(omp_init_allocator): Adjust to use gomp_init_allocator_data.
+ 	(gomp_map_omp_init_allocator): New function to call
+ 	gomp_init_allocator_data for uses_allocators clauses.
+ 	* config/gcn/allocator.c (gcn_memspace_validate): Add comments.
+ 	* config/nvptx/allocator.c (nvptx_memspace_alloc): Add PTX >= v4.1
+ 	preprocessor symbol check.
+ 	(nvptx_memspace_calloc): Likewise.
+ 	(nvptx_memspace_free): Likewise.
+ 	(nvptx_memspace_realloc): Likewise.
+ 	(nvptx_memspace_validate): Add comments.
+ 	* configure.ac: Require offload hosts and accelerator targets to support
+ 	__sync_* builtins.
+ 	* configure: Regenerate.
+ 	* libgomp-plugin.h (GOMP_OFFLOAD_memspace_validate): New declaration.
+ 	* libgomp.h (gomp_omp_allocator_data_size): New declaration.
+ 	(memspace_validate_func): New plugin hook in struct gomp_device_descr.
+ 	(gomp_map_omp_init_allocator): New declaration.
+ 	* oacc-host.c (host_dispatch): Init .memspace_validate_func = NULL.
+ 	* plugin/plugin-gcn.c (GOMP_OFFLOAD_memspace_validate): New function.
+ 	* plugin/plugin-nvptx.c (GOMP_OFFLOAD_memspace_validate): New function.
+ 	* target.c (gomp_map_vars_internal): Implement GOMP_MAP_USES_ALLOCATORS
+ 	map kind.
+ 	(calculate_firstprivate_requirements): Likewise.
+ 	(copy_firstprivate_data): Likewise.
+ 	(gomp_load_plugin_for_device): Add DLSYM_OPT of memspace_validate_func
+ 	hook.
+ 	* testsuite/libgomp.c++/uses_allocators-1.C: Moved from
+ 	../gcc/testsuite/g++.dg/gomp/uses_allocators-1.C.
+ 	* testsuite/libgomp.c-c++-common/uses_allocators-1.c: Moved from
+ 	../gcc/testsuite/c-c++-common/gomp/uses_allocators-1.c.
+ 	* testsuite/libgomp.c-c++-common/uses_allocators-2.c: Moved from
+ 	../gcc/testsuite/c-c++-common/gomp/uses_allocators-2.c.
+ 	* testsuite/libgomp.c-c++-common/uses_allocators-4.c: Moved from
+ 	../gcc/testsuite/c-c++-common/gomp/uses_allocators-4.c.
+ 	* testsuite/libgomp.c-c++-common/uses_allocators-7.c: Moved from
+ 	../gcc/testsuite/c-c++-common/gomp/uses_allocators-7.c.
+ 	* testsuite/libgomp.c-c++-common/uses_allocators-8.c: Moved from
+ 	../gcc/testsuite/c-c++-common/gomp/uses_allocators-8.c.
+ 	* testsuite/libgomp.c-c++-common/uses_allocators-3.c: New test.
+ 	* testsuite/libgomp.c-c++-common/uses_allocators-5.c: New test.
+ 	* testsuite/libgomp.c-c++-common/uses_allocators-6.c: New test.
+ 	* testsuite/libgomp.c-c++-common/uses_allocators-9.c: New test.
+ 	* testsuite/libgomp.fortran/uses_allocators-1.f90: New test.
+ 	* testsuite/libgomp.fortran/uses_allocators-2.f90:
+ 	Rename from uses_allocators_1.f90.
+ 	* testsuite/libgomp.fortran/uses_allocators-3.f90:
+ 	Rename from uses_allocators_2.f90.
+ 	* testsuite/libgomp.fortran/uses_allocators-4.f90: New test.
+ 	* testsuite/libgomp.fortran/uses_allocators-5.f90: New test.
+ 	* testsuite/libgomp.fortran/uses_allocators-6.f90: New test.
+ 	* testsuite/libgomp.fortran/uses_allocators-7.f90: Adjust test.
+ 	* testsuite/libgomp.fortran/uses_allocators-8.f90: New test.
+ 	* testsuite/libgomp.fortran/uses_allocators_1.f90:
+ 	Renamed to uses_allocators-2.f90 and deleted.
+ 	* testsuite/libgomp.fortran/uses_allocators_2.f90:
+ 	Renamed to uses_allocators-3.f90 and deleted.
+ 	* testsuite/libgomp.c++/c++.exp (check_effective_target_c): Add.
+ 	(check_effective_target_c++): Add.
+ 	* testsuite/libgomp.c/c.exp (check_effective_target_c): Add.
+ 	(check_effective_target_c++): Add.
+ 
+ 2026-06-30  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	PR libgomp/125877
+ 	* config/linux/numa.c (gomp_get_numa_distance): Gracefully handle
+ 	failure to open Linux sysfs file for NUMA node.
+ 
+ 2026-06-30  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	PR libgomp/125877
+ 	* plugin/plugin-nvptx.c (nvptx_open_device): Initialize 'numa_node'.
+ 
+ 2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* acinclude.m4: Replace AC_TRY_LINK with AC_LINK_IFELSE.  Replace
+ 	AC_TRY_COMPILE with AC_COMPILE_IFELSE.  Replace AC_HELP_STRING with
+ 	AS_HELP_STRING.  Replace AC_TRY_RUN with AC_RUN_IFELSE.
+ 	* configure: Regenerate.
+ 	* configure.ac: Replace AM_PROG_LIBTOOL with LT_INIT.  Replace
+ 	AC_STDC_HEADERS with AC_HEADER_STDC.  Replace _AC_COMPUTE_INT with
+ 	AC_COMPUTE_INT.
+ 
+ 2026-06-28  Gerald Pfeifer  <gerald@pfeifer.com>
+ 
+ 	* libgomp.texi (nvptx): Update NVIDIA CUDA link.
+ 
  2026-06-25  Paul-Antoine Arras  <parras@baylibre.com>
  
  	* libgomp.texi (Implementing MASKED and MASTER construct): Fix
diff -Nrcpad gcc-17-20260628/libgomp/acinclude.m4 gcc-17-20260705/libgomp/acinclude.m4
*** gcc-17-20260628/libgomp/acinclude.m4	Sun Jun 28 22:32:18 2026
--- gcc-17-20260705/libgomp/acinclude.m4	Sun Jul  5 22:32:18 2026
*************** dnl Check whether the target supports __
*** 5,12 ****
  AC_DEFUN([LIBGOMP_CHECK_SYNC_BUILTINS], [
    AC_CACHE_CHECK([whether the target supports __sync_*_compare_and_swap],
  		 libgomp_cv_have_sync_builtins, [
!   AC_TRY_LINK([], [int foo; __sync_val_compare_and_swap(&foo, 0, 1);],
! 	      libgomp_cv_have_sync_builtins=yes, libgomp_cv_have_sync_builtins=no)])
    if test $libgomp_cv_have_sync_builtins = yes; then
      AC_DEFINE(HAVE_SYNC_BUILTINS, 1,
  	      [Define to 1 if the target supports __sync_*_compare_and_swap])
--- 5,15 ----
  AC_DEFUN([LIBGOMP_CHECK_SYNC_BUILTINS], [
    AC_CACHE_CHECK([whether the target supports __sync_*_compare_and_swap],
  		 libgomp_cv_have_sync_builtins, [
!   AC_LINK_IFELSE(
!     [AC_LANG_PROGRAM([[]],
! 		     [[int foo; __sync_val_compare_and_swap(&foo, 0, 1);]])],
!     [libgomp_cv_have_sync_builtins=yes],
!     [libgomp_cv_have_sync_builtins=no])])
    if test $libgomp_cv_have_sync_builtins = yes; then
      AC_DEFINE(HAVE_SYNC_BUILTINS, 1,
  	      [Define to 1 if the target supports __sync_*_compare_and_swap])
*************** AC_DEFUN([LIBGOMP_CHECK_ATTRIBUTE_DLLEXP
*** 18,26 ****
  		 libgomp_cv_have_attribute_dllexport, [
    save_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -Werror"
!   AC_TRY_COMPILE([void __attribute__((dllexport)) foo(void) { }],
! 		 [], libgomp_cv_have_attribute_dllexport=yes,
! 		 libgomp_cv_have_attribute_dllexport=no)
    CFLAGS="$save_CFLAGS"])
    if test $libgomp_cv_have_attribute_dllexport = yes; then
      AC_DEFINE(HAVE_ATTRIBUTE_DLLEXPORT, 1,
--- 21,31 ----
  		 libgomp_cv_have_attribute_dllexport, [
    save_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -Werror"
!   AC_COMPILE_IFELSE(
!     [AC_LANG_PROGRAM([[void __attribute__((dllexport)) foo(void) { }]],
! 		     [[]])],
!     [libgomp_cv_have_attribute_dllexport=yes],
!     [libgomp_cv_have_attribute_dllexport=no])
    CFLAGS="$save_CFLAGS"])
    if test $libgomp_cv_have_attribute_dllexport = yes; then
      AC_DEFINE(HAVE_ATTRIBUTE_DLLEXPORT, 1,
*************** dnl Check whether the target supports sy
*** 31,40 ****
  AC_DEFUN([LIBGOMP_CHECK_ATTRIBUTE_ALIAS], [
    AC_CACHE_CHECK([whether the target supports symbol aliases],
  		 libgomp_cv_have_attribute_alias, [
!   AC_TRY_LINK([
  void foo(void) { }
! extern void bar(void) __attribute__((alias("foo")));],
!     [bar();], libgomp_cv_have_attribute_alias=yes, libgomp_cv_have_attribute_alias=no)])
    if test $libgomp_cv_have_attribute_alias = yes; then
      AC_DEFINE(HAVE_ATTRIBUTE_ALIAS, 1,
        [Define to 1 if the target supports __attribute__((alias(...))).])
--- 36,48 ----
  AC_DEFUN([LIBGOMP_CHECK_ATTRIBUTE_ALIAS], [
    AC_CACHE_CHECK([whether the target supports symbol aliases],
  		 libgomp_cv_have_attribute_alias, [
!   AC_LINK_IFELSE(
!     [AC_LANG_PROGRAM([[
  void foo(void) { }
! extern void bar(void) __attribute__((alias("foo")));]],
! 		     [[bar();]])],
!     [libgomp_cv_have_attribute_alias=yes],
!     [libgomp_cv_have_attribute_alias=no])])
    if test $libgomp_cv_have_attribute_alias = yes; then
      AC_DEFINE(HAVE_ATTRIBUTE_ALIAS, 1,
        [Define to 1 if the target supports __attribute__((alias(...))).])
*************** dnl See docs/html/17_intro/configury.htm
*** 64,70 ****
  dnl
  m4_define([LIBGOMP_ENABLE],[dnl
  m4_define([_g_switch],[--enable-$1])dnl
! m4_define([_g_help],[AC_HELP_STRING(_g_switch$3,[$4 @<:@default=$2@:>@])])dnl
   AC_ARG_ENABLE($1,_g_help,
    m4_bmatch([$5],
     [^permit ],
--- 72,78 ----
  dnl
  m4_define([LIBGOMP_ENABLE],[dnl
  m4_define([_g_switch],[--enable-$1])dnl
! m4_define([_g_help],[AS_HELP_STRING(_g_switch$3,[$4 @<:@default=$2@:>@])])dnl
   AC_ARG_ENABLE($1,_g_help,
    m4_bmatch([$5],
     [^permit ],
*************** AC_DEFUN([LIBGOMP_CHECK_LINKER_FEATURES]
*** 170,183 ****
      # .eh_frame and now some of the glibc sections for iconv).
      # Bzzzzt.  Thanks for playing, maybe next time.
      AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
!     AC_TRY_RUN([
       int main(void)
       {
         try { throw 1; }
         catch (...) { };
         return 0;
       }
!     ], [ac_sectionLDflags=yes],[ac_sectionLDflags=no], [ac_sectionLDflags=yes])
      if test "$ac_test_CFLAGS" = set; then
        CFLAGS="$ac_save_CFLAGS"
      else
--- 178,191 ----
      # .eh_frame and now some of the glibc sections for iconv).
      # Bzzzzt.  Thanks for playing, maybe next time.
      AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
!     AC_RUN_IFELSE([AC_LANG_SOURCE([[
       int main(void)
       {
         try { throw 1; }
         catch (...) { };
         return 0;
       }
!     ]])], [ac_sectionLDflags=yes],[ac_sectionLDflags=no], [ac_sectionLDflags=yes])
      if test "$ac_test_CFLAGS" = set; then
        CFLAGS="$ac_save_CFLAGS"
      else
*************** if test $enable_symvers != no; then
*** 264,270 ****
    AC_MSG_CHECKING([for shared libgcc])
    ac_save_CFLAGS="$CFLAGS"
    CFLAGS=' -lgcc_s'
!   AC_TRY_LINK(, [return 0;], libgomp_shared_libgcc=yes, libgomp_shared_libgcc=no)
    CFLAGS="$ac_save_CFLAGS"
    if test $libgomp_shared_libgcc = no; then
      cat > conftest.c <<EOF
--- 272,279 ----
    AC_MSG_CHECKING([for shared libgcc])
    ac_save_CFLAGS="$CFLAGS"
    CFLAGS=' -lgcc_s'
!   AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[return 0;]])],
! 		 [libgomp_shared_libgcc=yes], [libgomp_shared_libgcc=no])
    CFLAGS="$ac_save_CFLAGS"
    if test $libgomp_shared_libgcc = no; then
      cat > conftest.c <<EOF
*************** changequote([,])dnl
*** 279,285 ****
      rm -f conftest.c conftest.so
      if test x${libgomp_libgcc_s_suffix+set} = xset; then
        CFLAGS=" -lgcc_s$libgomp_libgcc_s_suffix"
!       AC_TRY_LINK(, [return 0;], libgomp_shared_libgcc=yes)
        CFLAGS="$ac_save_CFLAGS"
      fi
    fi
--- 288,295 ----
      rm -f conftest.c conftest.so
      if test x${libgomp_libgcc_s_suffix+set} = xset; then
        CFLAGS=" -lgcc_s$libgomp_libgcc_s_suffix"
!       AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[return 0;]])],
! 		     [libgomp_shared_libgcc=yes])
        CFLAGS="$ac_save_CFLAGS"
      fi
    fi
*************** fi
*** 335,343 ****
  
  AC_CACHE_CHECK([whether the target supports .symver directive],
  	       libgomp_cv_have_as_symver_directive, [
!   AC_TRY_COMPILE([void foo (void); __asm (".symver foo, bar@SYMVER");],
! 		 [], libgomp_cv_have_as_symver_directive=yes,
! 		 libgomp_cv_have_as_symver_directive=no)])
  if test $libgomp_cv_have_as_symver_directive = yes; then
    AC_DEFINE(HAVE_AS_SYMVER_DIRECTIVE, 1,
      [Define to 1 if the target assembler supports .symver directive.])
--- 345,355 ----
  
  AC_CACHE_CHECK([whether the target supports .symver directive],
  	       libgomp_cv_have_as_symver_directive, [
!   AC_COMPILE_IFELSE(
!     [AC_LANG_PROGRAM([[void foo (void); __asm (".symver foo, bar@SYMVER");]],
! 		     [[]])],
!     [libgomp_cv_have_as_symver_directive=yes],
!     [libgomp_cv_have_as_symver_directive=no])])
  if test $libgomp_cv_have_as_symver_directive = yes; then
    AC_DEFINE(HAVE_AS_SYMVER_DIRECTIVE, 1,
      [Define to 1 if the target assembler supports .symver directive.])
diff -Nrcpad gcc-17-20260628/libgomp/allocator.c gcc-17-20260705/libgomp/allocator.c
*** gcc-17-20260628/libgomp/allocator.c	Sun Jun 28 22:32:18 2026
--- gcc-17-20260705/libgomp/allocator.c	Sun Jul  5 22:32:18 2026
*************** struct omp_allocator_data
*** 247,260 ****
    unsigned int fallback : 8;
    unsigned int pinned : 1;
    unsigned int partition : 7;
! #if defined(LIBGOMP_USE_MEMKIND) || defined(LIBGOMP_USE_LIBNUMA)
    unsigned int memkind : 8;
  #endif
  #ifndef HAVE_SYNC_BUILTINS
    gomp_mutex_t lock;
  #endif
  };
  
  struct omp_mem_header
  {
    void *ptr;
--- 247,270 ----
    unsigned int fallback : 8;
    unsigned int pinned : 1;
    unsigned int partition : 7;
!   /* To unify the format of this type across host/accelerator, enable
!      this field unconditionally when offload is enabled.  */
!   #if defined(LIBGOMP_USE_MEMKIND) || defined(LIBGOMP_USE_LIBNUMA) ||	\
!     defined(LIBGOMP_OFFLOAD_HOST) || defined(LIBGOMP_OFFLOADED_ONLY)
    unsigned int memkind : 8;
  #endif
+   /* Note: we now require __sync builtins for offload host/accelerator,
+      checked during configuration. This lock should never be enabled
+      for offload configs.  */
  #ifndef HAVE_SYNC_BUILTINS
    gomp_mutex_t lock;
  #endif
  };
  
+ /* Size of allocator data, exported within libgomp.  */
+ const size_t gomp_omp_allocator_data_size attribute_hidden
+   = sizeof (struct omp_allocator_data);
+ 
  struct omp_mem_header
  {
    void *ptr;
*************** gomp_get_memkind (void)
*** 404,441 ****
  }
  #endif
  
! omp_allocator_handle_t
! omp_init_allocator (omp_memspace_handle_t memspace, int ntraits,
! 		    const omp_alloctrait_t traits[])
  {
!   struct omp_allocator_data data
!     = { memspace, 1, ~(uintptr_t) 0, 0, 0, omp_atv_contended, omp_atv_all,
! 	omp_atv_default_mem_fb, omp_atv_false, omp_atv_environment,
! #if defined(LIBGOMP_USE_MEMKIND) || defined(LIBGOMP_USE_LIBNUMA)
! 	GOMP_MEMKIND_NONE
  #endif
-       };
-   struct omp_allocator_data *ret;
-   int i;
  
    if (memspace > omp_max_predefined_mem_space
        && (memspace < ompx_gnu_min_predefined_mem_space
  	  || memspace > ompx_gnu_max_predefined_mem_space))
      return omp_null_allocator;
!   for (i = 0; i < ntraits; i++)
      switch (traits[i].key)
        {
        case omp_atk_sync_hint:
  	switch (traits[i].value)
  	  {
  	  case omp_atv_default:
! 	    data.sync_hint = omp_atv_contended;
  	    break;
  	  case omp_atv_contended:
  	  case omp_atv_uncontended:
  	  case omp_atv_serialized:
  	  case omp_atv_private:
! 	    data.sync_hint = traits[i].value;
  	    break;
  	  default:
  	    return omp_null_allocator;
--- 414,457 ----
  }
  #endif
  
! static omp_allocator_handle_t
! gomp_init_allocator_data (struct omp_allocator_data *data,
! 			  omp_memspace_handle_t memspace, int ntraits,
! 			  const omp_alloctrait_t traits[])
  {
!   data->memspace = memspace;
!   data->alignment = 1;
!   data->pool_size = ~(uintptr_t) 0;
!   data->used_pool_size = 0;
!   data->fb_data = 0;
!   data->sync_hint = omp_atv_contended;
!   data->access = omp_atv_all;
!   data->fallback = omp_atv_default_mem_fb;
!   data->pinned = omp_atv_false;
!   data->partition = omp_atv_environment;
! #if defined(LIBGOMP_USE_MEMKIND) || defined(LIBGOMP_USE_LIBNUMA) ||	\
!   defined(LIBGOMP_OFFLOAD_HOST) || defined(LIBGOMP_OFFLOADED_ONLY)
!   data->memkind = GOMP_MEMKIND_NONE;
  #endif
  
    if (memspace > omp_max_predefined_mem_space
        && (memspace < ompx_gnu_min_predefined_mem_space
  	  || memspace > ompx_gnu_max_predefined_mem_space))
      return omp_null_allocator;
!   for (int i = 0; i < ntraits; i++)
      switch (traits[i].key)
        {
        case omp_atk_sync_hint:
  	switch (traits[i].value)
  	  {
  	  case omp_atv_default:
! 	    data->sync_hint = omp_atv_contended;
  	    break;
  	  case omp_atv_contended:
  	  case omp_atv_uncontended:
  	  case omp_atv_serialized:
  	  case omp_atv_private:
! 	    data->sync_hint = traits[i].value;
  	    break;
  	  default:
  	    return omp_null_allocator;
*************** omp_init_allocator (omp_memspace_handle_
*** 444,468 ****
        case omp_atk_alignment:
          if (traits[i].value == omp_atv_default)
  	  {
! 	    data.alignment = 1;
  	    break;
  	  }
  	if ((traits[i].value & (traits[i].value - 1)) != 0
  	    || !traits[i].value)
  	  return omp_null_allocator;
! 	data.alignment = traits[i].value;
  	break;
        case omp_atk_access:
  	switch (traits[i].value)
  	  {
  	  case omp_atv_default:
! 	    data.access = omp_atv_all;
  	    break;
  	  case omp_atv_all:
  	  case omp_atv_cgroup:
  	  case omp_atv_pteam:
  	  case omp_atv_thread:
! 	    data.access = traits[i].value;
  	    break;
  	  default:
  	    return omp_null_allocator;
--- 460,484 ----
        case omp_atk_alignment:
          if (traits[i].value == omp_atv_default)
  	  {
! 	    data->alignment = 1;
  	    break;
  	  }
  	if ((traits[i].value & (traits[i].value - 1)) != 0
  	    || !traits[i].value)
  	  return omp_null_allocator;
! 	data->alignment = traits[i].value;
  	break;
        case omp_atk_access:
  	switch (traits[i].value)
  	  {
  	  case omp_atv_default:
! 	    data->access = omp_atv_all;
  	    break;
  	  case omp_atv_all:
  	  case omp_atv_cgroup:
  	  case omp_atv_pteam:
  	  case omp_atv_thread:
! 	    data->access = traits[i].value;
  	    break;
  	  default:
  	    return omp_null_allocator;
*************** omp_init_allocator (omp_memspace_handle_
*** 470,507 ****
  	break;
        case omp_atk_pool_size:
  	if (traits[i].value == omp_atv_default)
! 	  data.pool_size = ~(uintptr_t) 0;
  	else
! 	  data.pool_size = traits[i].value;
  	break;
        case omp_atk_fallback:
  	switch (traits[i].value)
  	  {
  	  case omp_atv_default:
! 	    data.fallback = omp_atv_default_mem_fb;
  	    break;
  	  case omp_atv_default_mem_fb:
  	  case omp_atv_null_fb:
  	  case omp_atv_abort_fb:
  	  case omp_atv_allocator_fb:
! 	    data.fallback = traits[i].value;
  	    break;
  	  default:
  	    return omp_null_allocator;
  	  }
  	break;
        case omp_atk_fb_data:
! 	data.fb_data = traits[i].value;
  	break;
        case omp_atk_pinned:
  	switch (traits[i].value)
  	  {
  	  case omp_atv_default:
  	  case omp_atv_false:
! 	    data.pinned = omp_atv_false;
  	    break;
  	  case omp_atv_true:
! 	    data.pinned = omp_atv_true;
  	    break;
  	  default:
  	    return omp_null_allocator;
--- 486,523 ----
  	break;
        case omp_atk_pool_size:
  	if (traits[i].value == omp_atv_default)
! 	  data->pool_size = ~(uintptr_t) 0;
  	else
! 	  data->pool_size = traits[i].value;
  	break;
        case omp_atk_fallback:
  	switch (traits[i].value)
  	  {
  	  case omp_atv_default:
! 	    data->fallback = omp_atv_default_mem_fb;
  	    break;
  	  case omp_atv_default_mem_fb:
  	  case omp_atv_null_fb:
  	  case omp_atv_abort_fb:
  	  case omp_atv_allocator_fb:
! 	    data->fallback = traits[i].value;
  	    break;
  	  default:
  	    return omp_null_allocator;
  	  }
  	break;
        case omp_atk_fb_data:
! 	data->fb_data = traits[i].value;
  	break;
        case omp_atk_pinned:
  	switch (traits[i].value)
  	  {
  	  case omp_atv_default:
  	  case omp_atv_false:
! 	    data->pinned = omp_atv_false;
  	    break;
  	  case omp_atv_true:
! 	    data->pinned = omp_atv_true;
  	    break;
  	  default:
  	    return omp_null_allocator;
*************** omp_init_allocator (omp_memspace_handle_
*** 511,523 ****
  	switch (traits[i].value)
  	  {
  	  case omp_atv_default:
! 	    data.partition = omp_atv_environment;
  	    break;
  	  case omp_atv_environment:
  	  case omp_atv_nearest:
  	  case omp_atv_blocked:
  	  case omp_atv_interleaved:
! 	    data.partition = traits[i].value;
  	    break;
  	  default:
  	    return omp_null_allocator;
--- 527,539 ----
  	switch (traits[i].value)
  	  {
  	  case omp_atv_default:
! 	    data->partition = omp_atv_environment;
  	    break;
  	  case omp_atv_environment:
  	  case omp_atv_nearest:
  	  case omp_atv_blocked:
  	  case omp_atv_interleaved:
! 	    data->partition = traits[i].value;
  	    break;
  	  default:
  	    return omp_null_allocator;
*************** omp_init_allocator (omp_memspace_handle_
*** 527,534 ****
  	return omp_null_allocator;
        }
  
!   if (data.alignment < sizeof (void *))
!     data.alignment = sizeof (void *);
  
    switch (memspace)
      {
--- 543,550 ----
  	return omp_null_allocator;
        }
  
!   if (data->alignment < sizeof (void *))
!     data->alignment = sizeof (void *);
  
    switch (memspace)
      {
*************** omp_init_allocator (omp_memspace_handle_
*** 536,592 ****
      case omp_high_bw_mem_space:
        struct gomp_memkind_data *memkind_data;
        memkind_data = gomp_get_memkind ();
!       if (data.partition == omp_atv_interleaved
  	  && memkind_data->kinds[GOMP_MEMKIND_HBW_INTERLEAVE])
  	{
! 	  data.memkind = GOMP_MEMKIND_HBW_INTERLEAVE;
  	  break;
  	}
        else if (memkind_data->kinds[GOMP_MEMKIND_HBW_PREFERRED])
  	{
! 	  data.memkind = GOMP_MEMKIND_HBW_PREFERRED;
  	  break;
  	}
        break;
      case omp_large_cap_mem_space:
        memkind_data = gomp_get_memkind ();
        if (memkind_data->kinds[GOMP_MEMKIND_DAX_KMEM_ALL])
! 	data.memkind = GOMP_MEMKIND_DAX_KMEM_ALL;
        else if (memkind_data->kinds[GOMP_MEMKIND_DAX_KMEM])
! 	data.memkind = GOMP_MEMKIND_DAX_KMEM;
        break;
  #endif
      default:
  #ifdef LIBGOMP_USE_MEMKIND
!       if (data.partition == omp_atv_interleaved)
  	{
  	  memkind_data = gomp_get_memkind ();
  	  if (memkind_data->kinds[GOMP_MEMKIND_INTERLEAVE])
! 	    data.memkind = GOMP_MEMKIND_INTERLEAVE;
  	}
  #endif
        break;
      }
  
  #ifdef LIBGOMP_USE_LIBNUMA
!   if (data.memkind == GOMP_MEMKIND_NONE && data.partition == omp_atv_nearest)
      {
        libnuma_data = gomp_get_libnuma ();
        if (libnuma_data->numa_alloc_local != NULL)
! 	data.memkind = GOMP_MEMKIND_LIBNUMA;
      }
  #endif
  
!   /* Reject unsupported memory spaces.  */
!   if (!MEMSPACE_VALIDATE (data.memspace, data.access, data.pinned))
!     return omp_null_allocator;
  
!   ret = gomp_malloc (sizeof (struct omp_allocator_data));
!   *ret = data;
  #ifndef HAVE_SYNC_BUILTINS
!   gomp_mutex_init (&ret->lock);
  #endif
!   return (omp_allocator_handle_t) ret;
  }
  
  void
--- 552,626 ----
      case omp_high_bw_mem_space:
        struct gomp_memkind_data *memkind_data;
        memkind_data = gomp_get_memkind ();
!       if (data->partition == omp_atv_interleaved
  	  && memkind_data->kinds[GOMP_MEMKIND_HBW_INTERLEAVE])
  	{
! 	  data->memkind = GOMP_MEMKIND_HBW_INTERLEAVE;
  	  break;
  	}
        else if (memkind_data->kinds[GOMP_MEMKIND_HBW_PREFERRED])
  	{
! 	  data->memkind = GOMP_MEMKIND_HBW_PREFERRED;
  	  break;
  	}
        break;
      case omp_large_cap_mem_space:
        memkind_data = gomp_get_memkind ();
        if (memkind_data->kinds[GOMP_MEMKIND_DAX_KMEM_ALL])
! 	data->memkind = GOMP_MEMKIND_DAX_KMEM_ALL;
        else if (memkind_data->kinds[GOMP_MEMKIND_DAX_KMEM])
! 	data->memkind = GOMP_MEMKIND_DAX_KMEM;
        break;
  #endif
      default:
  #ifdef LIBGOMP_USE_MEMKIND
!       if (data->partition == omp_atv_interleaved)
  	{
  	  memkind_data = gomp_get_memkind ();
  	  if (memkind_data->kinds[GOMP_MEMKIND_INTERLEAVE])
! 	    data->memkind = GOMP_MEMKIND_INTERLEAVE;
  	}
  #endif
        break;
      }
  
  #ifdef LIBGOMP_USE_LIBNUMA
!   if (data->memkind == GOMP_MEMKIND_NONE && data->partition == omp_atv_nearest)
      {
        libnuma_data = gomp_get_libnuma ();
        if (libnuma_data->numa_alloc_local != NULL)
! 	data->memkind = GOMP_MEMKIND_LIBNUMA;
      }
  #endif
  
!   return (omp_allocator_handle_t) data;
! }
  
! omp_allocator_handle_t
! omp_init_allocator (omp_memspace_handle_t memspace, int ntraits,
! 		    const omp_alloctrait_t traits[])
! {
!   struct omp_allocator_data *data
!     = gomp_malloc (sizeof (struct omp_allocator_data));
! 
!   omp_allocator_handle_t ret
!     = gomp_init_allocator_data (data, memspace, ntraits, traits);
! 
!   if (ret == omp_null_allocator
!       /* Reject unsupported memory spaces.  */
!       || !MEMSPACE_VALIDATE (data->memspace, data->access, data->pinned))
!     {
!       ret = omp_null_allocator;
!       free (data);
!     }
!   else
!     {
  #ifndef HAVE_SYNC_BUILTINS
!       gomp_mutex_init (&data->lock);
  #endif
!     }
! 
!   return ret;
  }
  
  void
*************** fail:;
*** 1500,1502 ****
--- 1534,1594 ----
      }
    return NULL;
  }
+ 
+ #if !defined(LIBGOMP_OFFLOADED_ONLY)
+ 
+ /* Called from gomp_maps_vars, used to implement the effective
+    omp_init_allocator() call in an uses_allocators clause.
+ 
+    The memspace_validate hook is also used here to check things for
+    the offload accelerator on the host side.
+ */
+ attribute_hidden uintptr_t
+ gomp_map_omp_init_allocator (struct gomp_device_descr *devicep,
+ 			     struct goacc_asyncqueue *aq,
+ 			     struct gomp_coalesce_buf *cbuf,
+ 			     void *allocator_data_devaddr, void *descr_ptr)
+ {
+   uintptr_t *descr = (uintptr_t *) descr_ptr;
+ 
+   omp_memspace_handle_t memspace = (omp_memspace_handle_t) descr[0];
+   int ntraits = (int) descr[1];
+   omp_alloctrait_t *traits = (omp_alloctrait_t *) descr[2];
+ 
+   struct omp_allocator_data data;
+   omp_allocator_handle_t ret = gomp_init_allocator_data (&data, memspace,
+ 							 ntraits, traits);
+   if (ret != omp_null_allocator)
+     {
+       if (devicep)
+ 	{
+ 	  /* Do memspace validation for the offload target, using the
+ 	     offload plugin.  */
+ 	  if (devicep->memspace_validate_func
+ 	      && !devicep->memspace_validate_func (data.memspace, data.access))
+ 	    return (uintptr_t) omp_null_allocator;
+ 
+ 	  /* Copy to device. This is now the device-side omp_allocator_data.  */
+ 	  gomp_copy_host2dev (devicep, aq, allocator_data_devaddr, &data,
+ 			      sizeof (struct omp_allocator_data), true, cbuf);
+ 	}
+       else
+ 	{
+ 	  /* Used for host fallback case.  */
+ 
+ 	  if (!MEMSPACE_VALIDATE (data.memspace, data.access, data.pinned))
+ 	    /* Reject unsupported memory spaces.  */
+ 	    return omp_null_allocator;
+ 
+ 	  memcpy (allocator_data_devaddr, &data,
+ 		  sizeof (struct omp_allocator_data));
+ #ifndef HAVE_SYNC_BUILTINS
+ 	  gomp_mutex_init
+ 	    (&((struct omp_allocator_data *) allocator_data_devaddr)->lock);
+ #endif
+ 	}
+       ret = (omp_allocator_handle_t) allocator_data_devaddr;
+     }
+   return (uintptr_t) ret;
+ }
+ #endif
diff -Nrcpad gcc-17-20260628/libgomp/config/gcn/allocator.c gcc-17-20260705/libgomp/config/gcn/allocator.c
*** gcc-17-20260628/libgomp/config/gcn/allocator.c	Sun Jun 28 22:32:18 2026
--- gcc-17-20260705/libgomp/config/gcn/allocator.c	Sun Jul  5 22:32:18 2026
*************** gcn_memspace_realloc (omp_memspace_handl
*** 110,115 ****
--- 110,119 ----
      return realloc (addr, size);
  }
  
+ /* The MEMSPACE_VALIDATE implementation should be kept in sync with
+    the GOMP_OFFLOAD_memspace_validate plugin hook function in
+    plugin/plugin-gcn.c.  */
+ 
  static inline int
  gcn_memspace_validate (omp_memspace_handle_t memspace, unsigned access)
  {
diff -Nrcpad gcc-17-20260628/libgomp/config/linux/numa.c gcc-17-20260705/libgomp/config/linux/numa.c
*** gcc-17-20260628/libgomp/config/linux/numa.c	Sun Jun 28 22:32:18 2026
--- gcc-17-20260705/libgomp/config/linux/numa.c	Sun Jul  5 22:32:18 2026
*************** gomp_get_numa_distance (int node1, int n
*** 85,90 ****
--- 85,95 ----
  	    return -1;
  	  int distance = -1;
  	  FILE *in = fopen (filename, "r");
+ 	  if (!in)
+ 	    {
+ 	      free (numa_distances);
+ 	      return -1;
+ 	    }
  	  for (int j = 0; j < cnt; j++)
  	    {
  	      fscanf (in, "%d", &distance);
diff -Nrcpad gcc-17-20260628/libgomp/config/nvptx/allocator.c gcc-17-20260705/libgomp/config/nvptx/allocator.c
*** gcc-17-20260628/libgomp/config/nvptx/allocator.c	Sun Jun 28 22:32:18 2026
--- gcc-17-20260705/libgomp/config/nvptx/allocator.c	Sun Jul  5 22:32:18 2026
***************
*** 44,49 ****
--- 44,52 ----
  #include "libgomp.h"
  #include <stdlib.h>
  
+ #if __PTX_ISA_VERSION_MAJOR__ > 4					\
+     || (__PTX_ISA_VERSION_MAJOR__ == 4 && __PTX_ISA_VERSION_MINOR >= 1)
+ 
  #define BASIC_ALLOC_PREFIX __nvptx_lowlat
  #include "../../basic-allocator.c"
  
***************
*** 51,59 ****
--- 54,67 ----
     express this magic extern sizeless array in C so use asm.  */
  asm (".extern .shared .u8 __nvptx_lowlat_pool[];\n");
  
+ #endif
+ 
  static void *
  nvptx_memspace_alloc (omp_memspace_handle_t memspace, size_t size)
  {
+ #if __PTX_ISA_VERSION_MAJOR__ > 4					\
+     || (__PTX_ISA_VERSION_MAJOR__ == 4 && __PTX_ISA_VERSION_MINOR >= 1)
+   /* Low-latency memory is not available before PTX 4.1.  */
    if (memspace == omp_low_lat_mem_space)
      {
        char *shared_pool;
*************** nvptx_memspace_alloc (omp_memspace_handl
*** 65,76 ****
--- 73,88 ----
      /* No non-standard memspaces are implemented for device-side nvptx.  */
      return NULL;
    else
+ #endif
      return malloc (size);
  }
  
  static void *
  nvptx_memspace_calloc (omp_memspace_handle_t memspace, size_t size)
  {
+ #if __PTX_ISA_VERSION_MAJOR__ > 4					\
+     || (__PTX_ISA_VERSION_MAJOR__ == 4 && __PTX_ISA_VERSION_MINOR >= 1)
+   /* Low-latency memory is not available before PTX 4.1.  */
    if (memspace == omp_low_lat_mem_space)
      {
        char *shared_pool;
*************** nvptx_memspace_calloc (omp_memspace_hand
*** 82,93 ****
--- 94,109 ----
      /* No non-standard memspaces are implemented for device-side nvptx.  */
      return NULL;
    else
+ #endif
      return calloc (1, size);
  }
  
  static void
  nvptx_memspace_free (omp_memspace_handle_t memspace, void *addr, size_t size)
  {
+ #if __PTX_ISA_VERSION_MAJOR__ > 4					\
+     || (__PTX_ISA_VERSION_MAJOR__ == 4 && __PTX_ISA_VERSION_MINOR >= 1)
+   /* Low-latency memory is not available before PTX 4.1.  */
    if (memspace == omp_low_lat_mem_space)
      {
        char *shared_pool;
*************** nvptx_memspace_free (omp_memspace_handle
*** 96,101 ****
--- 112,118 ----
        __nvptx_lowlat_free (shared_pool, addr, size);
      }
    else
+ #endif
      free (addr);
  }
  
*************** static void *
*** 103,108 ****
--- 120,128 ----
  nvptx_memspace_realloc (omp_memspace_handle_t memspace, void *addr,
  			size_t oldsize, size_t size)
  {
+ #if __PTX_ISA_VERSION_MAJOR__ > 4 \
+     || (__PTX_ISA_VERSION_MAJOR__ == 4 && __PTX_ISA_VERSION_MINOR >= 1)
+   /* Low-latency memory is not available before PTX 4.1.  */
    if (memspace == omp_low_lat_mem_space)
      {
        char *shared_pool;
*************** nvptx_memspace_realloc (omp_memspace_han
*** 110,122 ****
  
        return __nvptx_lowlat_realloc (shared_pool, addr, oldsize, size);
      }
-   else if (memspace > GOMP_OMP_PREDEF_MEMSPACE_MAX)
-     /* No non-standard memspaces are implemented for device-side nvptx.  */
-     return NULL;
    else
!     return realloc (addr, size);
  }
  
  static inline int
  nvptx_memspace_validate (omp_memspace_handle_t memspace, unsigned access)
  {
--- 130,150 ----
  
        return __nvptx_lowlat_realloc (shared_pool, addr, oldsize, size);
      }
    else
! #endif
!     {
!       if (memspace > GOMP_OMP_PREDEF_MEMSPACE_MAX)
! 	/* No non-standard memspaces are implemented for device-side nvptx.  */
! 	return NULL;
!       else
! 	return realloc (addr, size);
!     }
  }
  
+ /* The MEMSPACE_VALIDATE implementation should be kept in sync with
+    the GOMP_OFFLOAD_memspace_validate plugin hook function in
+    plugin/plugin-nvptx.c.  */
+ 
  static inline int
  nvptx_memspace_validate (omp_memspace_handle_t memspace, unsigned access)
  {
diff -Nrcpad gcc-17-20260628/libgomp/config/nvptx/team.c gcc-17-20260705/libgomp/config/nvptx/team.c
*** gcc-17-20260628/libgomp/config/nvptx/team.c	Sun Jun 28 22:32:18 2026
--- gcc-17-20260705/libgomp/config/nvptx/team.c	Sun Jul  5 22:32:18 2026
*************** int __gomp_team_num __attribute__((share
*** 39,44 ****
--- 39,47 ----
  
  static void gomp_thread_start (struct gomp_thread_pool *);
  
+ #if __PTX_ISA_VERSION_MAJOR__ > 4 \
+     || (__PTX_ISA_VERSION_MAJOR__ == 4 && __PTX_ISA_VERSION_MINOR__ >= 1)
+ 
  /* There should be some .shared space reserved for us.  There's no way to
     express this magic extern sizeless array in C so use asm.  */
  asm (".extern .shared .u8 __nvptx_lowlat_pool[];\n");
*************** asm (".extern .shared .u8 __nvptx_lowlat
*** 46,51 ****
--- 49,56 ----
  /* Defined in basic-allocator.c via config/nvptx/allocator.c.  */
  void __nvptx_lowlat_init (void *heap, size_t size);
  
+ #endif
+ 
  /* This externally visible function handles target region entry.  It
     sets up a per-team thread pool and transfers control by calling FN (FN_DATA)
     in the master thread or gomp_thread_start in other threads.
*************** gomp_nvptx_main (void (*fn) (void *), vo
*** 79,94 ****
        if (UNLIKELY (GOMP_INDIRECT_ADDR_MAP != NULL && block_id == 0))
  	build_indirect_map ();
  
        /* Find the low-latency heap details ....  */
        uint32_t *shared_pool;
        uint32_t shared_pool_size = 0;
        asm ("cvta.shared.u64\t%0, __nvptx_lowlat_pool;" : "=r"(shared_pool));
- #if __PTX_ISA_VERSION_MAJOR__ > 4 \
-     || (__PTX_ISA_VERSION_MAJOR__ == 4 && __PTX_ISA_VERSION_MINOR__ >= 1)
        asm ("mov.u32\t%0, %%dynamic_smem_size;\n"
  	   : "=r"(shared_pool_size));
- #endif
        __nvptx_lowlat_init (shared_pool, shared_pool_size);
  
        /* Initialize the thread pool.  */
        struct gomp_thread_pool *pool = alloca (sizeof (*pool));
--- 84,99 ----
        if (UNLIKELY (GOMP_INDIRECT_ADDR_MAP != NULL && block_id == 0))
  	build_indirect_map ();
  
+ #if __PTX_ISA_VERSION_MAJOR__ > 4 \
+     || (__PTX_ISA_VERSION_MAJOR__ == 4 && __PTX_ISA_VERSION_MINOR__ >= 1)
        /* Find the low-latency heap details ....  */
        uint32_t *shared_pool;
        uint32_t shared_pool_size = 0;
        asm ("cvta.shared.u64\t%0, __nvptx_lowlat_pool;" : "=r"(shared_pool));
        asm ("mov.u32\t%0, %%dynamic_smem_size;\n"
  	   : "=r"(shared_pool_size));
        __nvptx_lowlat_init (shared_pool, shared_pool_size);
+ #endif
  
        /* Initialize the thread pool.  */
        struct gomp_thread_pool *pool = alloca (sizeof (*pool));
diff -Nrcpad gcc-17-20260628/libgomp/config.h.in gcc-17-20260705/libgomp/config.h.in
*** gcc-17-20260628/libgomp/config.h.in	Sun Jun 28 22:32:22 2026
--- gcc-17-20260705/libgomp/config.h.in	Sun Jul  5 22:32:22 2026
***************
*** 133,138 ****
--- 133,141 ----
  /* Define to 1 if building libgomp for an accelerator-only target. */
  #undef LIBGOMP_OFFLOADED_ONLY
  
+ /* Define to 1 if building libgomp for a offload host */
+ #undef LIBGOMP_OFFLOAD_HOST
+ 
  /* Define to 1 if libgomp should use POSIX threads. */
  #undef LIBGOMP_USE_PTHREADS
  
diff -Nrcpad gcc-17-20260628/libgomp/configure gcc-17-20260705/libgomp/configure
*** gcc-17-20260628/libgomp/configure	Sun Jun 28 22:32:22 2026
--- gcc-17-20260705/libgomp/configure	Sun Jul  5 22:32:22 2026
*************** fi
*** 15782,15787 ****
--- 15782,15793 ----
  
  
  
+ if test x"$offload_plugins" != x; then
+ 
+ $as_echo "#define LIBGOMP_OFFLOAD_HOST 1" >>confdefs.h
+ 
+ fi
+ 
  # Check for functions needed.
  for ac_func in getloadavg clock_gettime strtoull
  do :
*************** $as_echo "#define HAVE_SYNC_BUILTINS 1"
*** 17120,17125 ****
--- 17126,17144 ----
  
    fi
  
+ # If offloading is enabled, both offload hosts and accelerators are required to support
+ # __sync_* builtins, to simplify architectural assumptions between both sides
+ if test x$libgomp_cv_have_sync_builtins = xno; then
+   # We require accelerator targets to support __sync_* builtins.
+   if test x$libgomp_offloaded_only = xyes; then
+     as_fn_error $? "accelerator targets require __sync_val_compare_and_swap to build libgomp." "$LINENO" 5
+   fi
+   # Same for offload hosts.
+   if test x"$offload_plugins" != x; then
+     as_fn_error $? "offload hosts require __sync_val_compare_and_swap to build libgomp." "$LINENO" 5
+   fi
+ fi
+ 
  XCFLAGS="$XCFLAGS$XPCFLAGS"
  
  # Add CET specific flags if CET is enabled
*************** if ac_fn_c_compute_int "$LINENO" "sizeof
*** 17357,17422 ****
  
  fi
  
- 
  if ac_fn_c_compute_int "$LINENO" "sizeof (__int128)" "OMP_INT128_SIZE"        ""; then :
  
  else
    OMP_INT128_SIZE=0
  fi
  
- 
  if ac_fn_c_compute_int "$LINENO" "2*sizeof (__INTPTR_TYPE__)" "OMP_DEPEND_KIND"        ""; then :
  
  else
    OMP_DEPEND_KIND=0
  fi
  
- 
  if ac_fn_c_compute_int "$LINENO" "sizeof (omp_lock_t)" "OMP_LOCK_SIZE"        ""; then :
  
  else
    as_fn_error $? "unsupported system, cannot find sizeof (omp_lock_t)" "$LINENO" 5
  fi
  
- 
  if ac_fn_c_compute_int "$LINENO" "__alignof (omp_lock_t)" "OMP_LOCK_ALIGN"        ""; then :
  
  fi
  
- 
  if ac_fn_c_compute_int "$LINENO" "sizeof (omp_nest_lock_t)" "OMP_NEST_LOCK_SIZE"        ""; then :
  
  fi
  
- 
  if ac_fn_c_compute_int "$LINENO" "__alignof (omp_nest_lock_t)" "OMP_NEST_LOCK_ALIGN"        ""; then :
  
  fi
  
- 
  if ac_fn_c_compute_int "$LINENO" "sizeof (omp_lock_25_t)" "OMP_LOCK_25_SIZE"        ""; then :
  
  else
    as_fn_error $? "unsupported system, cannot find sizeof (omp_lock_25_t)" "$LINENO" 5
  fi
  
- 
  if ac_fn_c_compute_int "$LINENO" "__alignof (omp_lock_25_t)" "OMP_LOCK_25_ALIGN"        ""; then :
  
  fi
  
- 
  if ac_fn_c_compute_int "$LINENO" "sizeof (omp_nest_lock_25_t)" "OMP_NEST_LOCK_25_SIZE"        ""; then :
  
  fi
  
- 
  if ac_fn_c_compute_int "$LINENO" "__alignof (omp_nest_lock_25_t)" "OMP_NEST_LOCK_25_ALIGN"        ""; then :
  
  fi
  
  
- 
  # If the lock fits in an integer, then arrange for Fortran to use that
  # integer.  If it doesn't, then arrange for Fortran to use a pointer.
  # Except that we don't have a way at present to multi-lib the installed
--- 17376,17430 ----
diff -Nrcpad gcc-17-20260628/libgomp/configure.ac gcc-17-20260705/libgomp/configure.ac
*** gcc-17-20260628/libgomp/configure.ac	Sun Jun 28 22:32:22 2026
--- gcc-17-20260705/libgomp/configure.ac	Sun Jul  5 22:32:22 2026
*************** AM_CONDITIONAL(BUILD_INFO, test $gcc_cv_
*** 144,150 ****
  
  
  # Configure libtool
! AM_PROG_LIBTOOL
  ACX_LT_HOST_FLAGS
  AC_SUBST(enable_shared)
  AC_SUBST(enable_static)
--- 144,150 ----
  
  
  # Configure libtool
! LT_INIT
  ACX_LT_HOST_FLAGS
  AC_SUBST(enable_shared)
  AC_SUBST(enable_static)
*************** libtool_VERSION=1:0:0
*** 178,184 ****
  AC_SUBST(libtool_VERSION)
  
  # Check header files.
! AC_STDC_HEADERS
  AC_HEADER_TIME
  ACX_HEADER_STRING
  AC_CHECK_HEADERS(pthread.h unistd.h semaphore.h sys/loadavg.h sys/sysctl.h sys/time.h)
--- 178,184 ----
  AC_SUBST(libtool_VERSION)
  
  # Check header files.
! AC_HEADER_STDC
  AC_HEADER_TIME
  ACX_HEADER_STRING
  AC_CHECK_HEADERS(pthread.h unistd.h semaphore.h sys/loadavg.h sys/sysctl.h sys/time.h)
*************** AC_CHECK_SIZEOF([void *])
*** 233,238 ****
--- 233,243 ----
  
  m4_include([plugin/configfrag.ac])
  
+ if test x"$offload_plugins" != x; then
+   AC_DEFINE(LIBGOMP_OFFLOAD_HOST, 1,
+     [Define to 1 if building libgomp for a offload host])
+ fi
+ 
  # Check for functions needed.
  AC_CHECK_FUNCS(getloadavg clock_gettime strtoull)
  AC_CHECK_FUNCS(aligned_alloc posix_memalign memalign _aligned_malloc)
*************** CFLAGS="$save_CFLAGS $XCFLAGS"
*** 365,370 ****
--- 370,388 ----
  # had a chance to set XCFLAGS.
  LIBGOMP_CHECK_SYNC_BUILTINS
  
+ # If offloading is enabled, both offload hosts and accelerators are required to support
+ # __sync_* builtins, to simplify architectural assumptions between both sides
+ if test x$libgomp_cv_have_sync_builtins = xno; then
+   # We require accelerator targets to support __sync_* builtins.
+   if test x$libgomp_offloaded_only = xyes; then
+     AC_MSG_ERROR([accelerator targets require __sync_val_compare_and_swap to build libgomp.])
+   fi
+   # Same for offload hosts.
+   if test x"$offload_plugins" != x; then
+     AC_MSG_ERROR([offload hosts require __sync_val_compare_and_swap to build libgomp.])
+   fi
+ fi
+ 
  XCFLAGS="$XCFLAGS$XPCFLAGS"
  
  # Add CET specific flags if CET is enabled
*************** for i in $config_path; do
*** 423,442 ****
    fi
  done
  
! _AC_COMPUTE_INT([sizeof (__INTPTR_TYPE__)], [INTPTR_T_KIND])
! _AC_COMPUTE_INT([sizeof (__int128)], [OMP_INT128_SIZE],,[OMP_INT128_SIZE=0])
! _AC_COMPUTE_INT([2*sizeof (__INTPTR_TYPE__)], [OMP_DEPEND_KIND],,
! 		[OMP_DEPEND_KIND=0])
! _AC_COMPUTE_INT([sizeof (omp_lock_t)], [OMP_LOCK_SIZE],,
    [AC_MSG_ERROR([unsupported system, cannot find sizeof (omp_lock_t)])])
! _AC_COMPUTE_INT([__alignof (omp_lock_t)], [OMP_LOCK_ALIGN])
! _AC_COMPUTE_INT([sizeof (omp_nest_lock_t)], [OMP_NEST_LOCK_SIZE])
! _AC_COMPUTE_INT([__alignof (omp_nest_lock_t)], [OMP_NEST_LOCK_ALIGN])
! _AC_COMPUTE_INT([sizeof (omp_lock_25_t)], [OMP_LOCK_25_SIZE],,
    [AC_MSG_ERROR([unsupported system, cannot find sizeof (omp_lock_25_t)])])
! _AC_COMPUTE_INT([__alignof (omp_lock_25_t)], [OMP_LOCK_25_ALIGN])
! _AC_COMPUTE_INT([sizeof (omp_nest_lock_25_t)], [OMP_NEST_LOCK_25_SIZE])
! _AC_COMPUTE_INT([__alignof (omp_nest_lock_25_t)], [OMP_NEST_LOCK_25_ALIGN])
  
  # If the lock fits in an integer, then arrange for Fortran to use that
  # integer.  If it doesn't, then arrange for Fortran to use a pointer.
--- 441,460 ----
    fi
  done
  
! AC_COMPUTE_INT([INTPTR_T_KIND], [sizeof (__INTPTR_TYPE__)])
! AC_COMPUTE_INT([OMP_INT128_SIZE], [sizeof (__int128)],,[OMP_INT128_SIZE=0])
! AC_COMPUTE_INT([OMP_DEPEND_KIND], [2*sizeof (__INTPTR_TYPE__)],,
! 	       [OMP_DEPEND_KIND=0])
! AC_COMPUTE_INT([OMP_LOCK_SIZE], [sizeof (omp_lock_t)],,
    [AC_MSG_ERROR([unsupported system, cannot find sizeof (omp_lock_t)])])
! AC_COMPUTE_INT([OMP_LOCK_ALIGN], [__alignof (omp_lock_t)])
! AC_COMPUTE_INT([OMP_NEST_LOCK_SIZE], [sizeof (omp_nest_lock_t)])
! AC_COMPUTE_INT([OMP_NEST_LOCK_ALIGN], [__alignof (omp_nest_lock_t)])
! AC_COMPUTE_INT([OMP_LOCK_25_SIZE], [sizeof (omp_lock_25_t)],,
    [AC_MSG_ERROR([unsupported system, cannot find sizeof (omp_lock_25_t)])])
! AC_COMPUTE_INT([OMP_LOCK_25_ALIGN], [__alignof (omp_lock_25_t)])
! AC_COMPUTE_INT([OMP_NEST_LOCK_25_SIZE], [sizeof (omp_nest_lock_25_t)])
! AC_COMPUTE_INT([OMP_NEST_LOCK_25_ALIGN], [__alignof (omp_nest_lock_25_t)])
  
  # If the lock fits in an integer, then arrange for Fortran to use that
  # integer.  If it doesn't, then arrange for Fortran to use a pointer.
diff -Nrcpad gcc-17-20260628/libgomp/libgomp-plugin.h gcc-17-20260705/libgomp/libgomp-plugin.h
*** gcc-17-20260628/libgomp/libgomp-plugin.h	Sun Jun 28 22:32:18 2026
--- gcc-17-20260705/libgomp/libgomp-plugin.h	Sun Jul  5 22:32:18 2026
*************** extern int GOMP_OFFLOAD_memcpy3d (int, i
*** 191,196 ****
--- 191,197 ----
  				  const void *, size_t, size_t, size_t, size_t,
  				  size_t);
  extern bool GOMP_OFFLOAD_memset (int, void *, int, size_t);
+ extern int GOMP_OFFLOAD_memspace_validate (omp_memspace_handle_t, unsigned int);
  extern bool GOMP_OFFLOAD_can_run (void *);
  
  /* An opaque type, encapsulating the state required to launch a single
diff -Nrcpad gcc-17-20260628/libgomp/libgomp.h gcc-17-20260705/libgomp/libgomp.h
*** gcc-17-20260628/libgomp/libgomp.h	Sun Jun 28 22:32:18 2026
--- gcc-17-20260705/libgomp/libgomp.h	Sun Jul  5 22:32:18 2026
*************** extern size_t gomp_affinity_format_len;
*** 616,621 ****
--- 616,622 ----
  extern int gomp_get_current_numa_node ();
  extern int gomp_get_numa_distance (int, int);
  extern uintptr_t gomp_def_allocator;
+ extern const size_t gomp_omp_allocator_data_size;
  extern const struct gomp_default_icv gomp_default_icv_values;
  extern struct gomp_icv_list *gomp_initial_icv_list;
  extern struct gomp_offload_icv_list *gomp_offload_icv_list;
*************** struct gomp_device_descr
*** 1472,1477 ****
--- 1473,1479 ----
    __typeof (GOMP_OFFLOAD_memcpy2d) *memcpy2d_func;
    __typeof (GOMP_OFFLOAD_memcpy3d) *memcpy3d_func;
    __typeof (GOMP_OFFLOAD_memset) *memset_func;
+   __typeof (GOMP_OFFLOAD_memspace_validate) *memspace_validate_func;
    struct {
      __typeof (GOMP_OFFLOAD_session_start) *start_func;
      __typeof (GOMP_OFFLOAD_session_allocate_target_var_table) *alloc_tvt_func;
*************** extern bool gomp_remove_var (struct gomp
*** 1561,1566 ****
--- 1563,1575 ----
  extern void gomp_remove_var_async (struct gomp_device_descr *, splay_tree_key,
  				   struct goacc_asyncqueue *);
  
+ /* allocator.c */
+ 
+ extern uintptr_t gomp_map_omp_init_allocator (struct gomp_device_descr *,
+ 					      struct goacc_asyncqueue *,
+ 					      struct gomp_coalesce_buf *,
+ 					      void *, void *);
+ 
  /* work.c */
  
  extern void gomp_init_work_share (struct gomp_work_share *, size_t, unsigned);
diff -Nrcpad gcc-17-20260628/libgomp/oacc-host.c gcc-17-20260705/libgomp/oacc-host.c
*** gcc-17-20260628/libgomp/oacc-host.c	Sun Jun 28 22:32:18 2026
--- gcc-17-20260705/libgomp/oacc-host.c	Sun Jul  5 22:32:18 2026
*************** static struct gomp_device_descr host_dis
*** 320,325 ****
--- 320,326 ----
      .host2dev_func = host_host2dev,
      .memcpy2d_func = NULL,
      .memcpy3d_func = NULL,
+     .memspace_validate_func = NULL,
      .run_func = host_run,
  
      .session = {
diff -Nrcpad gcc-17-20260628/libgomp/plugin/plugin-gcn.c gcc-17-20260705/libgomp/plugin/plugin-gcn.c
*** gcc-17-20260628/libgomp/plugin/plugin-gcn.c	Sun Jun 28 22:32:18 2026
--- gcc-17-20260705/libgomp/plugin/plugin-gcn.c	Sun Jul  5 22:32:18 2026
*************** unlock:
*** 4896,4901 ****
--- 4896,4917 ----
    return retval;
  }
  
+ /* This plugin hook function should be kept in sync with gcn_memspace_validate
+    in config/gcn/allocator.c.  */
+ 
+ int
+ GOMP_OFFLOAD_memspace_validate (omp_memspace_handle_t memspace, unsigned access)
+ {
+   /* Disallow use of low-latency memory when it must be accessible by
+      all threads.  */
+   return (memspace != omp_low_lat_mem_space
+ 	  || access != omp_atv_all);
+ 
+   /* Otherwise, standard memspaces are accepted, even when we don't have
+      anything special to do with them, and non-standard memspaces are assumed
+      to need explicit support.  */
+   return (memspace <= GOMP_OMP_PREDEF_MEMSPACE_MAX);
+ }
  
  static bool
  init_hip_runtime_functions (void)
diff -Nrcpad gcc-17-20260628/libgomp/plugin/plugin-nvptx.c gcc-17-20260705/libgomp/plugin/plugin-nvptx.c
*** gcc-17-20260628/libgomp/plugin/plugin-nvptx.c	Sun Jun 28 22:32:18 2026
--- gcc-17-20260705/libgomp/plugin/plugin-nvptx.c	Sun Jul  5 22:32:18 2026
*************** nvptx_open_device (int n)
*** 561,566 ****
--- 561,568 ----
  			 CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING, dev);
    assert (r == CUDA_SUCCESS && pi);
  
+   ptx_dev->numa_node = 0;
+ 
    for (int i = 0; i != GOMP_DIM_MAX; i++)
      ptx_dev->default_dims[i] = 0;
  
*************** GOMP_OFFLOAD_memset (int ord, void *ptr,
*** 2581,2586 ****
--- 2583,2606 ----
    return true;
  }
  
+ /* This plugin hook function should be kept in sync with nvptx_memspace_validate
+    in config/nvptx/allocator.c.  */
+ 
+ int
+ GOMP_OFFLOAD_memspace_validate (omp_memspace_handle_t memspace, unsigned access)
+ {
+   /* Disallow use of low-latency memory when it must be accessible by
+      all threads.  */
+   if (memspace == omp_low_lat_mem_space
+       && access == omp_atv_all)
+     return false;
+ 
+   /* Otherwise, standard memspaces are accepted, even when we don't have
+      anything special to do with them, and non-standard memspaces are assumed
+      to need explicit support.  */
+   return (memspace <= GOMP_OMP_PREDEF_MEMSPACE_MAX);
+ }
+ 
  bool
  GOMP_OFFLOAD_openacc_async_host2dev (int ord, void *dst, const void *src,
  				     size_t n, struct goacc_asyncqueue *aq)
diff -Nrcpad gcc-17-20260628/libgomp/target.c gcc-17-20260705/libgomp/target.c
*** gcc-17-20260628/libgomp/target.c	Sun Jun 28 22:32:18 2026
--- gcc-17-20260705/libgomp/target.c	Sun Jul  5 22:32:18 2026
*************** gomp_map_vars_internal (struct gomp_devi
*** 1322,1327 ****
--- 1322,1344 ----
  	{
  	  tgt->list[i].key = NULL;
  	  tgt->list[i].offset = OFFSET_INLINED;
+ 	  has_firstprivate = true;
+ 	  continue;
+ 	}
+       else if ((kind & typemask) == GOMP_MAP_USES_ALLOCATORS)
+ 	{
+ 	  tgt->list[i].key = NULL;
+ 	  tgt->list[i].offset = OFFSET_INLINED;
+ 
+ 	  size_t align = (size_t) 1 << (kind >> rshift);
+ 	  if (tgt_align < align)
+ 	    tgt_align = align;
+ 	  tgt_size = (tgt_size + align - 1) & ~(align - 1);
+ 
+ 	  /* Allocate space for omp_allocator_data.  */
+ 	  tgt_size += gomp_omp_allocator_data_size;
+ 
+ 	  has_firstprivate = true;
  	  continue;
  	}
        else if ((kind & typemask) == GOMP_MAP_USE_DEVICE_PTR
*************** gomp_map_vars_internal (struct gomp_devi
*** 1753,1758 ****
--- 1770,1790 ----
  		    tgt->list[i].offset = OFFSET_INLINED;
  		  }
  		continue;
+ 
+ 	      case GOMP_MAP_USES_ALLOCATORS:
+ 		align = (size_t) 1 << (kind >> rshift);
+ 		tgt_size = (tgt_size + align - 1) & ~(align - 1);
+ 		tgt->list[i].offset = tgt_size;
+ 
+ 		void *descr_ptr = hostaddrs[i];
+ 		void *devaddr = (void *) (tgt->tgt_start + tgt_size);
+ 		uintptr_t dev_allocator
+ 		  = gomp_map_omp_init_allocator (devicep, aq, cbufp, devaddr,
+ 						 descr_ptr);
+ 		hostaddrs[i] = (void *) dev_allocator;
+ 		tgt_size += gomp_omp_allocator_data_size;
+ 		continue;
+ 
  	      case GOMP_MAP_STRUCT_UNORD:
  		if (sizes[i] > 1)
  		  {
*************** calculate_firstprivate_requirements (siz
*** 3204,3209 ****
--- 3236,3249 ----
  	*tgt_size = (*tgt_size + align - 1) & ~(align - 1);
  	*tgt_size += sizes[i];
        }
+     else if ((kinds[i] & 0xff) == GOMP_MAP_USES_ALLOCATORS)
+       {
+ 	size_t align = (size_t) 1 << (kinds[i] >> 8);
+ 	if (*tgt_align < align)
+ 	  *tgt_align = align;
+ 	*tgt_size = (*tgt_size + align - 1) & ~(align - 1);
+ 	*tgt_size += gomp_omp_allocator_data_size;
+       }
  }
  
  /* Copy data shared as GOMP_MAP_FIRSTPRIVATE to DST.  */
*************** copy_firstprivate_data (char *tgt, size_
*** 3226,3237 ****
  	memcpy (tgt + tgt_size, hostaddrs[i], sizes[i]);
  	hostaddrs[i] = tgt + tgt_size;
  	tgt_size = tgt_size + sizes[i];
! 	if (i + 1 < mapnum && (kinds[i+1] & 0xff) == GOMP_MAP_ATTACH)
  	  {
! 	    *(*(uintptr_t**) hostaddrs[i+1] + sizes[i+1]) = (uintptr_t) hostaddrs[i];
  	    ++i;
  	  }
        }
  }
  
  /* Helper function of GOMP_target{,_ext} routines.  */
--- 3266,3288 ----
  	memcpy (tgt + tgt_size, hostaddrs[i], sizes[i]);
  	hostaddrs[i] = tgt + tgt_size;
  	tgt_size = tgt_size + sizes[i];
! 	if (i + 1 < mapnum && (kinds[i + 1] & 0xff) == GOMP_MAP_ATTACH)
  	  {
! 	    *(*(uintptr_t**) hostaddrs[i + 1] + sizes[i + 1])
! 	      = (uintptr_t) hostaddrs[i];
  	    ++i;
  	  }
        }
+     else if ((kinds[i] & 0xff) == GOMP_MAP_USES_ALLOCATORS)
+       {
+ 	assert (hostaddrs[i] != NULL);
+ 	size_t align = (size_t) 1 << (kinds[i] >> 8);
+ 	tgt_size = (tgt_size + align - 1) & ~(align - 1);
+ 	uintptr_t allocator = gomp_map_omp_init_allocator (NULL, NULL, NULL,
+ 							   tgt + tgt_size,
+ 							   hostaddrs[i]);
+ 	hostaddrs[i] = (void *) allocator;
+       }
  }
  
  /* Helper function of GOMP_target{,_ext} routines.  */
*************** gomp_load_plugin_for_device (struct gomp
*** 6261,6266 ****
--- 6312,6318 ----
    DLSYM (host2dev);
    DLSYM_OPT (memcpy2d, memcpy2d);
    DLSYM_OPT (memcpy3d, memcpy3d);
+   DLSYM_OPT (memspace_validate, memspace_validate);
    if (DLSYM_OPT (interop, interop))
      {
        DLSYM (get_interop_int);
diff -Nrcpad gcc-17-20260628/libgomp/testsuite/libgomp.c/c.exp gcc-17-20260705/libgomp/testsuite/libgomp.c/c.exp
*** gcc-17-20260628/libgomp/testsuite/libgomp.c/c.exp	Sun Jun 28 22:32:18 2026
--- gcc-17-20260705/libgomp/testsuite/libgomp.c/c.exp	Sun Jul  5 22:32:18 2026
*************** load_gcc_lib gcc-dg.exp
*** 3,8 ****
--- 3,16 ----
  
  lappend ALWAYS_CFLAGS "compiler=$GCC_UNDER_TEST"
  
+ proc check_effective_target_c { } {
+     return 1
+ }
+ 
+ proc check_effective_target_c++ { } {
+     return 0
+ }
+ 
  # If a testcase doesn't have special options, use these.
  if ![info exists DEFAULT_CFLAGS] then {
      set DEFAULT_CFLAGS "-O2"
diff -Nrcpad gcc-17-20260628/libgomp/testsuite/libgomp.c++/c++.exp gcc-17-20260705/libgomp/testsuite/libgomp.c++/c++.exp
*** gcc-17-20260628/libgomp/testsuite/libgomp.c++/c++.exp	Sun Jun 28 22:32:18 2026
--- gcc-17-20260705/libgomp/testsuite/libgomp.c++/c++.exp	Sun Jul  5 22:32:18 2026
***************
*** 1,6 ****
--- 1,15 ----
  load_lib libgomp-dg.exp
  load_gcc_lib gcc-dg.exp
  
+ proc check_effective_target_c { } {
+     return 0
+ }
+ 
+ proc check_effective_target_c++ { } {
+     return 1
+ }
+ 
+ 
  if { $blddir != "" } {
      set libstdc++_library_path "../libstdc++-v3/src/.libs"
      set shlib_ext [get_shlib_extension]
diff -Nrcpad gcc-17-20260628/libgomp/testsuite/libgomp.c++/uses_allocators-1.C gcc-17-20260705/libgomp/testsuite/libgomp.c++/uses_allocators-1.C
*** gcc-17-20260628/libgomp/testsuite/libgomp.c++/uses_allocators-1.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libgomp/testsuite/libgomp.c++/uses_allocators-1.C	Sun Jul  5 22:32:18 2026
***************
*** 0 ****
--- 1,101 ----
+ // { dg-do compile }
+ /* { dg-additional-options "-Wno-deprecated-openmp" } */
+ 
+ #include <omp.h>
+ /*
+ typedef __UINTPTR_TYPE__ omp_uintptr_t;
+ 
+ #if __cplusplus >= 201103L
+ # define __GOMP_UINTPTR_T_ENUM : omp_uintptr_t
+ #else
+ # define __GOMP_UINTPTR_T_ENUM
+ #endif
+ 
+ typedef enum omp_memspace_handle_t __GOMP_UINTPTR_T_ENUM
+ {
+   omp_default_mem_space = 0,
+   omp_large_cap_mem_space = 1,
+   omp_const_mem_space = 2,
+   omp_high_bw_mem_space = 3,
+   omp_low_lat_mem_space = 4,
+   ompx_gnu_managed_mem_space = 200,
+   __omp_memspace_handle_t_max__ = __UINTPTR_MAX__
+ } omp_memspace_handle_t;
+ 
+ typedef enum omp_allocator_handle_t __GOMP_UINTPTR_T_ENUM
+ {
+   omp_null_allocator = 0,
+   omp_default_mem_alloc = 1,
+   omp_large_cap_mem_alloc = 2,
+   omp_const_mem_alloc = 3,
+   omp_high_bw_mem_alloc = 4,
+   omp_low_lat_mem_alloc = 5,
+   omp_cgroup_mem_alloc = 6,
+   omp_pteam_mem_alloc = 7,
+   omp_thread_mem_alloc = 8,
+   ompx_gnu_pinned_mem_alloc = 200,
+   ompx_gnu_managed_mem_alloc = 201,
+   __omp_allocator_handle_t_max__ = __UINTPTR_MAX__
+ } omp_allocator_handle_t;
+ 
+ typedef struct omp_alloctrait_t
+ {
+ //  omp_alloctrait_key_t key;
+ //  omp_uintptr_t value;
+ } omp_alloctrait_t;
+ */
+ 
+ template<typename TH, TH alloc>
+ void f()
+ {
+  #pragma omp target uses_allocators(alloc)
+    ;
+ }
+ 
+ template<typename TH, typename TT>
+ void g(TT trait, TH alloc)
+ {
+  #pragma omp target uses_allocators(alloc)
+    ;
+  #pragma omp target uses_allocators(alloc(trait))
+    // { dg-error "traits array 'trait' must be defined in same scope as the construct on which the clause appears" "" { target *-*-* } .-1 }
+    // { dg-error "traits array 'trait' must be of 'const omp_alloctrait_t \\\[\\\]' type" "" { target *-*-* } .-2 }
+    ;
+ }
+ 
+ void use()
+ {
+   omp_allocator_handle_t my;
+   static const omp_alloctrait_t t[] = {};
+ 
+   f<omp_allocator_handle_t, omp_null_allocator>(); // OK
+   f<omp_allocator_handle_t, omp_default_mem_alloc>(); // OK
+ 
+   g<omp_allocator_handle_t, const omp_alloctrait_t[]>(t, my); // 't'/traits not in the same scope
+ }
+ 
+ template<typename TH, TH alloc>
+ void f2()
+ {
+  #pragma omp target uses_allocators(alloc)
+    // { dg-error "allocator '\\(omp_allocator_handle_t\\)300' must be either a variable or a predefined allocator" "" { target *-*-* } .-1 }
+    ;
+ }
+ 
+ template<typename TH, typename TT>
+ void g2(TH alloc)
+ {
+  TT t = {};
+  #pragma omp target uses_allocators(alloc(t))
+    ;
+ }
+ 
+ void use2()
+ {
+   omp_allocator_handle_t my;
+   const omp_allocator_handle_t wrong = (omp_allocator_handle_t) 300;
+ 
+   f2<omp_allocator_handle_t, wrong>(); // 300 is not a predefined allocator
+ 
+   g2<omp_allocator_handle_t, const omp_alloctrait_t[]>(my); // OK
+ }
diff -Nrcpad gcc-17-20260628/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-1.c gcc-17-20260705/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-1.c
*** gcc-17-20260628/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-1.c	Sun Jul  5 22:32:18 2026
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do compile } */
+ #include <omp.h>
+ 
+ void
+ f (omp_allocator_handle_t my_alloc)
+ {
+   #pragma omp target
+   {
+     int a; /* { dg-error "'my_alloc' in 'allocator' clause inside a target region must be specified in an 'uses_allocators' clause on the 'target' directive" "" { target c } } */
+     #pragma omp allocate(a) allocator(my_alloc) /* { dg-message "sorry, unimplemented: '#pragma omp allocate' not yet supported" "" { target c++ } }  */
+     a  = 5;
+     void *prt = omp_alloc(32, my_alloc);
+     #pragma omp parallel allocate(allocator(my_alloc) : a) firstprivate(a) /* { dg-error "allocator 'my_alloc' in 'allocate' clause inside a target region must be specified in an 'uses_allocators' clause on the 'target' directive" } */
+       a = 7;
+   }
+ }
+ 
+ void
+ g (omp_allocator_handle_t my_alloc)
+ {
+   /* The following defines a default-mem-space allocator with no extra traits. */
+   #pragma omp target uses_allocators(my_alloc)
+   {
+     int a;
+     #pragma omp allocate(a) allocator(my_alloc)  /* { dg-message "sorry, unimplemented: '#pragma omp allocate' not yet supported" "" { target c++ } }  */
+     a  = 5;
+     void *prt = omp_alloc(32, my_alloc);
+     #pragma omp parallel allocate(allocator(my_alloc) : a) firstprivate(a)
+       a = 7;
+   }
+ }
diff -Nrcpad gcc-17-20260628/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-2.c gcc-17-20260705/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-2.c
*** gcc-17-20260628/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-2.c	Sun Jul  5 22:32:18 2026
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do compile } */
+ #include <omp.h>
+ 
+ void
+ f ()
+ {
+    omp_alloctrait_t trait[1] = {{omp_atk_sync_hint, 1}};
+    omp_allocator_handle_t my_alloc;
+    #pragma omp target uses_allocators(traits(trait) : my_alloc)  /* { dg-error "traits array 'trait' must be of 'const omp_alloctrait_t \\\[\\\]' type" } */
+      ;
+ }
+ 
+ void
+ g ()
+ {
+    const omp_alloctrait_t trait[1] = {{omp_atk_sync_hint, 1}};
+    omp_allocator_handle_t my_alloc;
+    #pragma omp target uses_allocators(traits(trait) : my_alloc)
+      ;
+ }
diff -Nrcpad gcc-17-20260628/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-3.c gcc-17-20260705/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-3.c
*** gcc-17-20260628/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-3.c	Sun Jul  5 22:32:18 2026
***************
*** 0 ****
--- 1,50 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-fdump-tree-original -fdump-tree-gimple" } */
+ 
+ #include <omp.h>
+ 
+ int n = 2;
+ 
+ int main (void)
+ {
+   omp_allocator_handle_t foo, bar;
+   const omp_alloctrait_t foo_traits[] = { { omp_atk_pinned,    omp_atv_true },
+   					  { omp_atk_partition, omp_atv_nearest } };
+ 
+   #pragma omp target
+     ;
+   #pragma omp target uses_allocators (bar)
+     ;
+   #pragma omp target uses_allocators (foo (foo_traits)) /* { dg-warning "the specification of arguments to 'uses_allocators' where each item is of the form 'allocator\\(traits\\)' is deprecated since OpenMP 5.2 \\\[-Wdeprecated-openmp\\\]" } */
+     ;
+   #pragma omp target uses_allocators (foo (foo_traits), bar (foo_traits)) /* { dg-warning "the specification of arguments to 'uses_allocators' where each item is of the form 'allocator\\(traits\\)' is deprecated since OpenMP 5.2 \\\[-Wdeprecated-openmp\\\]" } */
+     ;
+   #pragma omp target uses_allocators (memspace(omp_high_bw_mem_space) : foo)
+     ;
+   #pragma omp target uses_allocators (traits(foo_traits) : bar)
+     ;
+   #pragma omp target parallel uses_allocators (memspace(omp_high_bw_mem_space), traits(foo_traits) : bar)
+     ;
+   #pragma omp target parallel uses_allocators (traits(foo_traits), memspace(omp_high_bw_mem_space) : bar) uses_allocators(foo)
+   {
+     void *p = omp_alloc ((unsigned long) 32, bar);
+     omp_free (p, bar);
+   }
+   return 0;
+ }
+ 
+ /* { dg-final { scan-tree-dump "pragma omp target uses_allocators\\(memspace\\(\\), traits\\(\\) : bar\\)" "original" } } */
+ /* { dg-final { scan-tree-dump "pragma omp target uses_allocators\\(memspace\\(\\), traits\\(foo_traits\\) : foo\\)" "original" } } */
+ /* { dg-final { scan-tree-dump "pragma omp target uses_allocators\\(memspace\\(\\), traits\\(foo_traits\\) : bar\\) uses_allocators\\(memspace\\(\\), traits\\(foo_traits\\) : foo\\)" "original" } } */
+ /* { dg-final { scan-tree-dump "pragma omp target uses_allocators\\(memspace\\(.+\\), traits\\(\\) : foo\\)" "original" } } */
+ /* { dg-final { scan-tree-dump "pragma omp target uses_allocators\\(memspace\\(\\), traits\\(foo_traits\\) : bar\\)" "original" } } */
+ /* { dg-final { scan-tree-dump "pragma omp target uses_allocators\\(memspace\\(.+\\), traits\\(foo_traits\\) : bar\\)" "original" } } */
+ /* { dg-final { scan-tree-dump "pragma omp target uses_allocators\\(memspace\\(.+\\), traits\\(foo_traits\\) : bar\\) uses_allocators\\(memspace\\(\\), traits\\(\\) : foo\\)" "original" } } */
+ 
+ /* { dg-final { scan-tree-dump "pragma omp target num_teams\\(-2\\) thread_limit\\(0\\) uses_allocators\\(memspace\\(\\), traits\\(\\) : bar\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "pragma omp target num_teams\\(-2\\) thread_limit\\(0\\) uses_allocators\\(memspace\\(\\), traits\\(foo_traits\\) : foo\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "pragma omp target num_teams\\(-2\\) thread_limit\\(0\\) uses_allocators\\(memspace\\(\\), traits\\(foo_traits\\) : bar\\) uses_allocators\\(memspace\\(\\), traits\\(foo_traits\\) : foo\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "pragma omp target num_teams\\(-2\\) thread_limit\\(0\\) uses_allocators\\(memspace\\(.+\\), traits\\(\\) : foo\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "pragma omp target num_teams\\(-2\\) thread_limit\\(0\\) uses_allocators\\(memspace\\(\\), traits\\(foo_traits\\) : bar\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "pragma omp target num_teams\\(-2\\) thread_limit\\(0\\) uses_allocators\\(memspace\\(.+\\), traits\\(foo_traits\\) : bar\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "pragma omp target num_teams\\(-2\\) thread_limit\\(0\\) uses_allocators\\(memspace\\(.+\\), traits\\(foo_traits\\) : bar\\) uses_allocators\\(memspace\\(\\), traits\\(\\) : foo\\)" "gimple" } } */
diff -Nrcpad gcc-17-20260628/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-4.c gcc-17-20260705/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-4.c
*** gcc-17-20260628/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-4.c	Sun Jul  5 22:32:18 2026
***************
*** 0 ****
--- 1,58 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-Wno-deprecated-openmp" } */
+ 
+ #include <omp.h>
+ 
+ int f (const omp_alloctrait_t arg_traits[], int n)
+ {
+   omp_allocator_handle_t foo, bar;
+   const omp_alloctrait_t traits_array[] = { { omp_atk_pinned,    omp_atv_true },
+ 					    { omp_atk_partition, omp_atv_nearest } };
+   extern const omp_alloctrait_t ex_traits[2];
+   extern const omp_alloctrait_t ex2_traits[];
+ #ifndef __cplusplus
+   const omp_alloctrait_t vla_traits[n] = {};  /* Not useful, but shouldn't crash.  */
+ #else
+   const omp_alloctrait_t vla_traits[n] = { { omp_atk_pinned,    omp_atv_true },
+   					   { omp_atk_partition, omp_atv_nearest } };
+ #endif
+ 
+   #pragma omp target uses_allocators (baz) /* { dg-error "'baz' undeclared .first use in this function." "" { target c } } */
+     ;                                      /* { dg-error "'baz' has not been declared" "" { target c++ } .-1 } */
+   #pragma omp target uses_allocators (foo (xyz)) /* { dg-error "'xyz' undeclared .first use in this function." "" { target c } } */
+     ;                                            /* { dg-error "'xyz' has not been declared" "" { target c++ } .-1 } */
+   #pragma omp target uses_allocators (foo (traits_array), baz (traits_array)) /* { dg-error "'baz' has not been declared" "" { target c++ } } */
+     ;
+   #pragma omp target uses_allocators (foo (arg_traits)) /* { dg-error "traits array 'arg_traits' must be defined in same scope as the construct on which the clause appears" } */
+     ;                                                   /* { dg-error "traits array 'arg_traits' must be of 'const omp_alloctrait_t \\\[\\\]' type" "" { target *-*-* } .-1 } */
+   #pragma omp target uses_allocators (foo (ex_traits)) /* { dg-error "traits array 'ex_traits' must be defined in same scope as the construct on which the clause appears" } */
+     ;                                                  /* { dg-error "traits array must be initialized with constants" "" { target *-*-* } .-1 } */
+   #pragma omp target uses_allocators (foo (ex2_traits)) /* { dg-error "traits array 'ex2_traits' must be defined in same scope as the construct on which the clause appears" } */
+     ;                                                   /* { dg-error "traits array 'ex2_traits' must be of 'const omp_alloctrait_t \\\[\\\]' type" "" { target *-*-* } .-1 } */
+   #pragma omp target uses_allocators (foo (vla_traits)) /* { dg-error "variable length traits arrays are not supported" "" { target c++ } } */
+     ;
+   #pragma omp target uses_allocators (memspace(omp_no_such_space) : foo) /* { dg-error "'omp_no_such_space' undeclared .first use in this function." "" { target c } } */
+     ;                                                                    /* { dg-error "'omp_no_such_space' was not declared in this scope" "" { target c++ } .-1 } */
+   #pragma omp target uses_allocators (memspace(1) : foo) /* { dg-error "memspace modifier '1' must be constant enum of 'omp_memspace_handle_t' type" } */
+     ;
+   #pragma omp target uses_allocators (memspace(omp_no_such_space) : foo, bar) /* { dg-error "'uses_allocators' clause only accepts a single allocator when using modifiers" } */
+     ;                                                                         /* { dg-error "memspace modifier 'omp_no_such_space' must be constant enum of 'omp_memspace_handle_t' type" "" { target c++ } .-1 } */
+   #pragma omp target uses_allocators (traits(xyz) : bar) /* { dg-error "'xyz' was not declared in this scope" "" { target c++ } } */
+     ;
+   #pragma omp target uses_allocators (memspace(omp_high_bw_mem_space), traits(traits_array), memspace (omp_no_such_space) : bar) /* { dg-error "duplicate 'memspace' modifier" "" { target c } } */
+     ;                                                                                                                            /* { dg-error "expected '\\\)' before 'memspace" "" { target c } .-1 } */
+                                                                                                                                  /* { dg-error "duplicate 'memspace' modifier" "" { target c++ } .-2 } */
+   #pragma omp target uses_allocators (traitz(traits_array), memspace(omp_high_bw_mem_space) : bar) /* { dg-error "'traitz' undeclared .first use in this function." "" { target c } } */
+     ;                                                                                              /* { dg-error "'memspace' undeclared .first use in this function." "" { target c } .-1 } */
+                                                                                                    /* { dg-error "'traitz' has not been declared" "" { target c++ } .-2 } */
+                                                                                                    /* { dg-error "'memspace' has not been declared" "" { target c++ } .-3 } */
+                                                                                                    /* { dg-error "expected '\\\)' before ':' token" "" { target *-*-* } .-4 } */
+   #pragma omp target uses_allocators (omp_null_allocator)
+     ;
+   #pragma omp target uses_allocators (memspace(omp_high_bw_mem_space) : foo, bar) /* { dg-error "'uses_allocators' clause only accepts a single allocator when using modifiers" } */
+     ;
+   #pragma omp target uses_allocators (memspace(omp_high_bw_mem_space) : foo(foo_traits)) /* { dg-error "'foo_traits' undeclared .first use in this function.; did you mean 'vla_traits'." "" { target c } } */
+     ;                                                                                    /* { dg-error "'foo_traits' has not been declared" "" { target c++ } .-1 } */
+                                                                                          /* { dg-error "legacy 'foo\\\(foo_traits\\\)' traits syntax not allowed in 'uses_allocators' clause when using modifiers" "" { target *-*-* } .-2 } */
+   return 0;
+ }
diff -Nrcpad gcc-17-20260628/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-5.c gcc-17-20260705/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-5.c
*** gcc-17-20260628/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-5.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-5.c	Sun Jul  5 22:32:18 2026
***************
*** 0 ****
--- 1,34 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-fdump-tree-original -fdump-tree-gimple" } */
+ 
+ #include <omp.h>
+ 
+ int main (void)
+ {
+   omp_allocator_handle_t memspace, traits;
+   const omp_alloctrait_t mytraits[] = { { omp_atk_pinned,    omp_atv_true },
+ 					{ omp_atk_partition, omp_atv_nearest } };
+   #pragma omp target uses_allocators (memspace)
+     ;
+   #pragma omp target uses_allocators (traits)
+     ;
+   #pragma omp target uses_allocators (traits, memspace)
+     ;
+   #pragma omp target uses_allocators (traits (mytraits)) /* { dg-warning "the specification of arguments to 'uses_allocators' where each item is of the form 'allocator\\(traits\\)' is deprecated since OpenMP 5.2" } */
+     ;
+   #pragma omp target uses_allocators (memspace (mytraits), omp_default_mem_alloc) /* { dg-warning "the specification of arguments to 'uses_allocators' where each item is of the form 'allocator\\(traits\\)' is deprecated since OpenMP 5.2" } */
+     ;
+   return 0;
+ }
+ 
+ /* { dg-final { scan-tree-dump "pragma omp target uses_allocators\\(memspace\\(\\), traits\\(\\) : memspace\\)" "original" } } */
+ /* { dg-final { scan-tree-dump "pragma omp target uses_allocators\\(memspace\\(\\), traits\\(\\) : traits\\)" "original" } } */
+ /* { dg-final { scan-tree-dump "pragma omp target uses_allocators\\(memspace\\(\\), traits\\(\\) : memspace\\) uses_allocators\\(memspace\\(\\), traits\\(\\) : traits\\)" "original" } } */
+ /* { dg-final { scan-tree-dump "pragma omp target uses_allocators\\(memspace\\(\\), traits\\(mytraits\\) : traits\\)" "original" } } */
+ /* { dg-final { scan-tree-dump "pragma omp target uses_allocators\\(memspace\\(\\), traits\\(mytraits\\) : memspace\\)" "original" } } */
+ 
+ /* { dg-final { scan-tree-dump "pragma omp target num_teams\\(-2\\) thread_limit\\(0\\) uses_allocators\\(memspace\\(\\), traits\\(\\) : memspace\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "pragma omp target num_teams\\(-2\\) thread_limit\\(0\\) uses_allocators\\(memspace\\(\\), traits\\(\\) : traits\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "pragma omp target num_teams\\(-2\\) thread_limit\\(0\\) uses_allocators\\(memspace\\(\\), traits\\(\\) : memspace\\) uses_allocators\\(memspace\\(\\), traits\\(\\) : traits\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "pragma omp target num_teams\\(-2\\) thread_limit\\(0\\) uses_allocators\\(memspace\\(\\), traits\\(mytraits\\) : traits\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "pragma omp target num_teams\\(-2\\) thread_limit\\(0\\) uses_allocators\\(memspace\\(\\), traits\\(mytraits\\) : memspace\\)" "gimple" } } */
diff -Nrcpad gcc-17-20260628/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-6.c gcc-17-20260705/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-6.c
*** gcc-17-20260628/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-6.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-6.c	Sun Jul  5 22:32:18 2026
***************
*** 0 ****
--- 1,53 ----
+ /* { dg-additional-options "-fdump-tree-gimple" } */
+ 
+ #include <stdint.h>
+ #include <omp.h>
+ 
+ int
+ main ()
+ {
+   int x, *xbuf[10];
+   omp_allocator_handle_t my_alloc;
+   const omp_alloctrait_t trait[1]= {{omp_atk_alignment,128}};
+ 
+   #pragma omp target uses_allocators(omp_low_lat_mem_alloc) map(tofrom: x, xbuf) defaultmap(none)
+     #pragma omp parallel allocate(allocator(omp_low_lat_mem_alloc), align(128): x, xbuf) if(0) firstprivate(x, xbuf)
+       {
+ 	if ((uintptr_t) &x % 128 != 0)
+ 	  __builtin_abort ();
+ 	if ((uintptr_t) xbuf % 128 != 0)
+ 	  __builtin_abort ();
+       }
+ 
+   my_alloc = (omp_allocator_handle_t) 0xABCD;
+ 
+   #pragma omp target uses_allocators(traits(trait): my_alloc) defaultmap(none) map(tofrom: x, xbuf)
+     #pragma omp parallel allocate(allocator(my_alloc): x, xbuf) if(0) firstprivate(x, xbuf)
+       {
+ 	if ((uintptr_t) &x % 128 != 0)
+ 	  __builtin_abort ();
+ 	if ((uintptr_t) xbuf % 128 != 0)
+ 	  __builtin_abort ();
+       }
+ 
+   if (my_alloc != (omp_allocator_handle_t) 0xABCD)
+     __builtin_abort ();
+ 
+   /* The following creates an allocator with empty traits + default mem space. */
+   #pragma omp target uses_allocators(my_alloc) map(tofrom: x, xbuf) defaultmap(none)
+     #pragma omp parallel allocate(allocator(my_alloc), align(128): x, xbuf) if(0) firstprivate(x, xbuf)
+       {
+ 	if ((uintptr_t) &x % 128 != 0)
+ 	  __builtin_abort ();
+ 	if ((uintptr_t) xbuf % 128 != 0)
+ 	  __builtin_abort ();
+       }
+ 
+   if (my_alloc != (omp_allocator_handle_t) 0xABCD)
+     __builtin_abort ();
+ 
+   return 0;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "#pragma omp target .* uses_allocators\\(memspace\\(\\), traits\\(trait\\) : my_alloc\\)" 1 "gimple" } } */
+ /* { dg-final { scan-tree-dump-times "#pragma omp target .* uses_allocators\\(memspace\\(\\), traits\\(\\) : my_alloc\\)" 1 "gimple" } } */
diff -Nrcpad gcc-17-20260628/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-7.c gcc-17-20260705/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-7.c
*** gcc-17-20260628/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-7.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-7.c	Sun Jul  5 22:32:18 2026
***************
*** 0 ****
--- 1,35 ----
+ /* { dg-do compile } */
+ #include <omp.h>
+ 
+ void f()
+ {
+  omp_allocator_handle_t my;
+  struct t {
+    omp_allocator_handle_t a1;
+  } s;
+ 
+ const omp_allocator_handle_t my3 = (omp_allocator_handle_t) 300;
+ omp_allocator_handle_t my4[1];
+ const omp_alloctrait_t t[] = {};
+  #pragma omp target uses_allocators(my, omp_default_mem_alloc, omp_null_allocator)  // OK
+    ;
+  #pragma omp target uses_allocators(my) firstprivate(my) // { dg-error "'my' appears more than once in data clauses" }
+    ;
+  #pragma omp target private(my) uses_allocators(my) // { dg-error "'my' appears more than once in data clauses" }
+    ;
+  #pragma omp target uses_allocators(my3)
+    ;
+  #pragma omp target uses_allocators(s.a1)
+    // { dg-error "expected '\\)' before '\\.' token" "" { target *-*-* } .-1 }
+    // { dg-error "allocator 's' must be of 'omp_allocator_handle_t' type" "" { target *-*-* } .-2 }
+    ;
+  #pragma omp target uses_allocators(my4)
+    // { dg-error "allocator 'my4' must be of 'omp_allocator_handle_t' type" "" { target *-*-* } .-1 }
+    ;
+  #pragma omp target uses_allocators(my4[0])
+    // { dg-error "expected '\\)' before '\\\[' token" "" { target *-*-* } .-1 }
+    // { dg-error "allocator 'my4' must be of 'omp_allocator_handle_t' type" "" { target *-*-* } .-2 }
+    ;
+  #pragma omp target uses_allocators(memspace(omp_default_mem_space) : my, my(t)) // { dg-error "legacy 'my\\(t\\)' traits syntax not allowed in 'uses_allocators' clause when using modifiers" }
+    ;
+ }
diff -Nrcpad gcc-17-20260628/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-8.c gcc-17-20260705/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-8.c
*** gcc-17-20260628/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-8.c	Sun Jul  5 22:32:18 2026
***************
*** 0 ****
--- 1,16 ----
+ // { dg-do compile }
+ // { dg-additional-options "-fdump-tree-original" }
+ 
+ #include <omp.h>
+ 
+ void f()
+ {
+  omp_allocator_handle_t my, my2, my3, my4;
+ const omp_alloctrait_t t[] = {};
+ const omp_alloctrait_t t2[] = {};
+  #pragma omp target uses_allocators(traits(t), memspace(omp_high_bw_mem_space) : my; omp_default_mem_alloc, omp_null_allocator; my2; traits(t2) : my3; memspace(omp_large_cap_mem_space) : my4)
+    ;
+ }
+ 
+ // { dg-final { scan-tree-dump "#pragma omp target uses_allocators\\(memspace\\(1\\), traits\\(\\) : my4\\) uses_allocators\\(memspace\\(\\), traits\\(t2\\) : my3\\) uses_allocators\\(memspace\\(\\), traits\\(\\) : my2\\) uses_allocators\\(memspace\\(3\\), traits\\(t\\) : my\\)" "original" { target c } } }
+ // { dg-final { scan-tree-dump "#pragma omp target uses_allocators\\(memspace\\(omp_large_cap_mem_space\\), traits\\(\\) : my4\\) uses_allocators\\(memspace\\(\\), traits\\(t2\\) : my3\\) uses_allocators\\(memspace\\(\\), traits\\(\\) : my2\\) uses_allocators\\(memspace\\(omp_high_bw_mem_space\\), traits\\(t\\) : my\\)" "original" { target c++ } } }
diff -Nrcpad gcc-17-20260628/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-9.c gcc-17-20260705/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-9.c
*** gcc-17-20260628/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-9.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libgomp/testsuite/libgomp.c-c++-common/uses_allocators-9.c	Sun Jul  5 22:32:18 2026
***************
*** 0 ****
--- 1,44 ----
+ #include <stdint.h>
+ #include <omp.h>
+ 
+ int main (void)
+ {
+   omp_allocator_handle_t my_alloc;
+   const omp_alloctrait_t trait[] = { { omp_atk_alignment, 128 } };
+ 
+   #pragma omp target uses_allocators (traits (trait): my_alloc)
+   {
+     int *x = (int *) omp_alloc (sizeof (int), my_alloc);
+     if ((uintptr_t) x % 128 != 0)
+       __builtin_abort ();
+     omp_free (x, my_alloc);
+   }
+ 
+   my_alloc = (omp_allocator_handle_t) 0xABCD;
+ 
+   #pragma omp target uses_allocators (traits (trait): my_alloc)
+   {
+     int *x = (int *) omp_alloc (sizeof (int), my_alloc);
+     if ((uintptr_t) x % 128 != 0)
+       __builtin_abort ();
+     omp_free (x, my_alloc);
+   }
+ 
+   if (my_alloc != (omp_allocator_handle_t) 0xABCD)
+     __builtin_abort ();
+ 
+   /* The following creates an allocator with empty traits + default mem space. */
+   #pragma omp target uses_allocators (my_alloc)
+   {
+     int *x = (int *) omp_aligned_alloc (128, sizeof (int), my_alloc);
+     if ((uintptr_t) x % 128 != 0)
+       __builtin_abort ();
+     omp_free (x, my_alloc);
+   }
+ 
+   if (my_alloc != (omp_allocator_handle_t) 0xABCD)
+     __builtin_abort ();
+ 
+   return 0;
+ }
+ 
diff -Nrcpad gcc-17-20260628/libgomp/testsuite/libgomp.fortran/dep-uses-allocators.f90 gcc-17-20260705/libgomp/testsuite/libgomp.fortran/dep-uses-allocators.f90
*** gcc-17-20260628/libgomp/testsuite/libgomp.fortran/dep-uses-allocators.f90	Sun Jun 28 22:32:18 2026
--- gcc-17-20260705/libgomp/testsuite/libgomp.fortran/dep-uses-allocators.f90	Sun Jul  5 22:32:18 2026
*************** program test
*** 9,14 ****
    type(omp_alloctrait), parameter :: trait(0) = [omp_alloctrait :: ]
  
    !$omp target uses_allocators(omp_default_mem_alloc, a1(trait))
-   ! { dg-message "sorry, unimplemented: 'uses_allocators' clause with traits and memory spaces" "" { target *-*-* } .-1 }
    block; end block
  end program
--- 9,13 ----
diff -Nrcpad gcc-17-20260628/libgomp/testsuite/libgomp.fortran/uses_allocators-1.f90 gcc-17-20260705/libgomp/testsuite/libgomp.fortran/uses_allocators-1.f90
*** gcc-17-20260628/libgomp/testsuite/libgomp.fortran/uses_allocators-1.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libgomp/testsuite/libgomp.fortran/uses_allocators-1.f90	Sun Jul  5 22:32:18 2026
***************
*** 0 ****
--- 1,18 ----
+ ! { dg-do compile }
+ use iso_c_binding
+ use omp_lib
+ implicit none
+ contains
+ subroutine x
+ integer :: mem
+ type(omp_alloctrait), parameter:: mem2(1) = [omp_alloctrait(1,1)]
+ integer(omp_allocator_handle_kind) :: var
+ !$omp target uses_allocators(memspace(omp_default_mem_space), traits(mem2) : var) defaultmap(none)
+ block;
+ type(c_ptr) ::c
+ c = omp_alloc(omp_default_mem_space, 20_8)
+ end block
+ !$omp target uses_allocators(omp_default_mem_alloc, var(mem2))  ! { dg-warning "The specification of arguments to 'uses_allocators' at \\(1\\) where each item is of the form 'allocator\\(traits\\)' is deprecated since OpenMP 5.2; instead use 'uses_allocators\\(traits\\(mem2\\): var\\)' \\\[-Wdeprecated-openmp\\\]" }
+ block; end block
+ end
+ end
diff -Nrcpad gcc-17-20260628/libgomp/testsuite/libgomp.fortran/uses_allocators-2.f90 gcc-17-20260705/libgomp/testsuite/libgomp.fortran/uses_allocators-2.f90
*** gcc-17-20260628/libgomp/testsuite/libgomp.fortran/uses_allocators-2.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libgomp/testsuite/libgomp.fortran/uses_allocators-2.f90	Sun Jul  5 22:32:18 2026
***************
*** 0 ****
--- 1,184 ----
+ ! { dg-do compile }
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
+ 
+ subroutine test
+   use omp_lib
+   implicit none
+ 
+   !$omp target uses_allocators ( omp_default_mem_alloc , omp_large_cap_mem_alloc, &
+   !$omp&                         omp_const_mem_alloc,omp_high_bw_mem_alloc, &
+   !$omp&                         omp_low_lat_mem_alloc ,omp_cgroup_mem_alloc , &
+   !$omp&                         omp_pteam_mem_alloc, omp_thread_mem_alloc )
+   block; end block
+ 
+   !$omp target uses_allocators(omp_default_mem_alloc, omp_high_bw_mem_alloc) &
+   !$omp&       uses_allocators(omp_high_bw_mem_alloc, omp_low_lat_mem_alloc)  ! { dg-error "Symbol 'omp_high_bw_mem_alloc' present on multiple clauses" }
+   block; end block
+ 
+   !$omp target firstprivate ( omp_default_mem_alloc ) , uses_allocators &
+   !$omp&                                                 (omp_default_mem_alloc , omp_high_bw_mem_alloc ) &
+   !$omp&       map(to: omp_high_bw_mem_alloc)
+   block; end block
+ ! { dg-error "Object 'omp_default_mem_alloc' is not a variable" "" { target *-*-* } .-4 }
+ ! { dg-error "Symbol 'omp_default_mem_alloc' present on both data and map clauses" "" { target *-*-* } .-5 }
+ ! { dg-error "Symbol 'omp_high_bw_mem_alloc' present on multiple clauses" "" { target *-*-* } .-5 }
+ ! { dg-error "Object 'omp_high_bw_mem_alloc' is not a variable at .1.; parameters cannot be and need not be mapped" "" { target *-*-* } .-5 }
+ end
+ 
+ subroutine non_predef
+   use omp_lib
+   implicit none
+ 
+   type(omp_alloctrait), parameter :: trait(0) = [omp_alloctrait :: ]
+   type(omp_alloctrait), parameter :: trait2(*) &
+     = [omp_alloctrait (omp_atk_alignment, 16),                    &
+        omp_alloctrait (omp_atk_sync_hint, omp_atv_default),       &
+        omp_alloctrait (omp_atk_access, omp_atv_default)]
+ 
+   integer(kind=omp_allocator_handle_kind) :: a1, a2, a3
+ 
+   !$omp target uses_allocators(omp_default_mem_alloc, a1(trait), a2(trait2))
+   block; end block
+ 
+   !$omp target uses_allocators(omp_default_mem_alloc, a1(trait), omp_cgroup_mem_alloc, a1(trait2)) ! { dg-error "Symbol 'a1' present on multiple clauses" }
+   block; end block
+ 
+   !$omp target uses_allocators(traits(trait):a1) &
+   !$omp&        uses_allocators ( memspace ( omp_low_lat_mem_space ) , traits ( trait2 ) : a2 , a3)
+   block; end block
+ 
+   !$omp target uses_allocators ( traits(trait2) , memspace ( omp_low_lat_mem_space ) : a2 , a3)
+   block; end block
+ 
+   !$omp target firstprivate ( a2 ) , &  ! { dg-error "Symbol 'a2' present on both data and map clauses" }
+   !$omp&       uses_allocators (a2, a3) &  ! { dg-error "Symbol 'a3' present on multiple clauses" }
+   !$omp&       map(to: a3)
+   block; end block
+ end subroutine
+ 
+ subroutine duplicate
+   use omp_lib
+   implicit none
+   type(omp_alloctrait), parameter :: trait1(0) = [omp_alloctrait :: ]
+   type(omp_alloctrait), parameter :: trait2(0) = [omp_alloctrait :: ]
+ 
+   !$omp target uses_allocators(traits(trait1), memspace ( omp_low_lat_mem_space ) , traits ( trait2 ) : bar)  ! { dg-error "Duplicate TRAITS modifier" }
+   block; end block
+ 
+   !$omp target uses_allocators(traits(trait1), memspace ( omp_low_lat_mem_space ) , memspace (omp_large_cap_mem_space) : bar)  ! { dg-error "Duplicate MEMSPACE modifier" }
+   block; end block
+ end
+ 
+ subroutine trait_present
+   use omp_lib
+   implicit none
+ 
+   type(omp_alloctrait), parameter :: trait1(0) = [omp_alloctrait :: ]
+   integer(kind=omp_allocator_handle_kind) :: a1
+ 
+   !$omp target uses_allocators(omp_cgroup_mem_alloc(trait1))  ! { dg-error "A memory space or traits array may not be specified for predefined allocator 'omp_cgroup_mem_alloc'" }
+   block; end block
+ 
+   !$omp target uses_allocators(traits(trait1) : omp_pteam_mem_alloc)  ! { dg-error "A memory space or traits array may not be specified for predefined allocator 'omp_pteam_mem_alloc'" }
+   block; end block
+ 
+   !$omp target uses_allocators(memspace(omp_low_lat_mem_space) : omp_thread_mem_alloc)  ! { dg-error "A memory space or traits array may not be specified for predefined allocator 'omp_thread_mem_alloc'" }
+   block; end block
+ 
+   ! Invalid in OpenMP 5.0 / 5.1, but valid since 5.2 the same as omp_default_mem_space + emptry traits array
+   !$omp target uses_allocators ( a1 )
+   block; end block
+ end
+ 
+ subroutine odd_names
+   use omp_lib
+   implicit none
+ 
+   type(omp_alloctrait), parameter :: trait1(0) = [omp_alloctrait :: ]
+ 
+   ! oddly named allocators:
+   integer(kind=omp_allocator_handle_kind) :: traits
+   integer(kind=omp_allocator_handle_kind) :: memspace
+ 
+   !$omp target uses_allocators ( traits(trait1), memspace(trait1) )
+   block; end block
+ 
+   !$omp target uses_allocators ( traits(trait1), memspace(omp_low_lat_mem_space)  : traits)
+   block; end block
+ 
+   !$omp target uses_allocators ( memspace(omp_low_lat_mem_space), traits(trait1) : memspace)
+   block; end block
+ end
+ 
+ subroutine more_checks
+   use omp_lib
+   implicit none
+ 
+   integer(kind=kind(omp_low_lat_mem_space)) :: my_memspace
+   integer(kind=omp_allocator_handle_kind) :: a1, a2(4)
+   integer(kind=1) :: a3
+ 
+   !$omp target uses_allocators ( memspace(my_memspace) : a1)  ! { dg-error "Memspace 'my_memspace' at .1. in USES_ALLOCATORS must be a predefined memory space" }
+   block; end block
+ 
+   !$omp target uses_allocators ( omp_low_lat_mem_space)  ! { dg-error "Allocator 'omp_low_lat_mem_space' at .1. in USES_ALLOCATORS must either a variable or a predefined allocator" }
+   block; end block
+ 
+   !$omp target uses_allocators ( memspace (omp_low_lat_mem_alloc) : a1)  ! { dg-error "Memspace 'omp_low_lat_mem_alloc' at .1. in USES_ALLOCATORS must be a predefined memory space" }
+   block; end block
+ 
+   !$omp target uses_allocators(memspace (omp_low_lat_mem_space) : a1 )
+   block; end block
+ 
+   !$omp target uses_allocators(memspace (omp_low_lat_mem_space) : a2 )  ! { dg-error "Allocator 'a2' at .1. in USES_ALLOCATORS must be a scalar integer of kind 'omp_allocator_handle_kind'" }
+   block; end block
+ 
+   !$omp target uses_allocators(memspace (omp_low_lat_mem_space) : a3 )  ! { dg-error "Allocator 'a3' at .1. in USES_ALLOCATORS must be a scalar integer of kind 'omp_allocator_handle_kind'" }
+   block; end block
+ end
+ 
+ subroutine traits_checks
+   use omp_lib
+   implicit none
+ 
+   type(omp_alloctrait), parameter :: trait1 = omp_alloctrait (omp_atk_alignment, 16)
+   type(omp_alloctrait) :: trait2
+   integer(kind=omp_atk_alignment), parameter :: trait3(1) = omp_atk_alignment
+   integer(kind=omp_allocator_handle_kind) :: a1
+ 
+   ! Sensible - but not (yet?) valid - an array constructor:
+   !$omp target uses_allocators(traits ([omp_alloctrait :: ]) : a1 )  ! { dg-error "39: Expected ',', '\\)' or ';' at .1." }
+   block; end block
+   !$omp target uses_allocators(a1 ([omp_alloctrait :: ]))  ! { dg-error "35: Expected ',', '\\)' or ';' at .1." }
+   block; end block
+ 
+   !$omp target uses_allocators(traits (trait1) : a1 )  ! { dg-error "Traits array 'trait1' in USES_ALLOCATORS .1. must be a one-dimensional named constant array of type 'omp_alloctrait'" }
+   block; end block
+   !$omp target uses_allocators(a1 (trait1))  ! { dg-error "Traits array 'trait1' in USES_ALLOCATORS .1. must be a one-dimensional named constant array of type 'omp_alloctrait'" }
+   block; end block
+ 
+   !$omp target uses_allocators(traits (trait2) : a1 )  ! { dg-error "Traits array 'trait2' in USES_ALLOCATORS .1. must be a one-dimensional named constant array of type 'omp_alloctrait'" }
+   block; end block
+   !$omp target uses_allocators(a1 (trait2))  ! { dg-error "Traits array 'trait2' in USES_ALLOCATORS .1. must be a one-dimensional named constant array of type 'omp_alloctrait'" }
+   block; end block
+ 
+   !$omp target uses_allocators(traits (trait3) : a1 )  ! { dg-error "Traits array 'trait3' in USES_ALLOCATORS .1. must be a one-dimensional named constant array of type 'omp_alloctrait'" }
+   block; end block
+   !$omp target uses_allocators(a1 (trait3))  ! { dg-error "Traits array 'trait3' in USES_ALLOCATORS .1. must be a one-dimensional named constant array of type 'omp_alloctrait'" }
+   block; end block
+ end
+ 
+ subroutine null_allocator_ok
+   use omp_lib
+   implicit none
+   integer(omp_allocator_handle_kind) ::  my, my2
+   integer(omp_allocator_handle_kind), parameter ::  my3 = -9
+   !$omp target uses_allocators(my, my2) ! OK -> default settings
+   block; end block
+   !$omp target uses_allocators(my3) ! { dg-error "'my3' at .1. in USES_ALLOCATORS must either a variable or a predefined allocator" }
+   block; end block
+   !$omp target uses_allocators(omp_default_mem_alloc, omp_null_allocator) ! OK -> omp_null_allocator
+   block; end block
+   !$omp target uses_allocators(my, omp_null_allocator) firstprivate(my) ! { dg-error "Symbol 'my' present on both data and map clauses" }
+   block; end block
+ end
diff -Nrcpad gcc-17-20260628/libgomp/testsuite/libgomp.fortran/uses_allocators-3.f90 gcc-17-20260705/libgomp/testsuite/libgomp.fortran/uses_allocators-3.f90
*** gcc-17-20260628/libgomp/testsuite/libgomp.fortran/uses_allocators-3.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libgomp/testsuite/libgomp.fortran/uses_allocators-3.f90	Sun Jul  5 22:32:18 2026
***************
*** 0 ****
--- 1,97 ----
+ ! { dg-do compile }
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
+ ! Minimal test for valid code:
+ ! - predefined allocators do not need any special treatment in uses_allocators
+ !   (as 'requires dynamic_allocators' is the default).
+ 
+ subroutine test
+   use omp_lib
+   implicit none
+ 
+   !$omp target uses_allocators ( omp_default_mem_alloc , omp_large_cap_mem_alloc, &
+   !$omp&                         omp_const_mem_alloc,omp_high_bw_mem_alloc, &
+   !$omp&                         omp_low_lat_mem_alloc ,omp_cgroup_mem_alloc , &
+   !$omp&                         omp_pteam_mem_alloc, omp_thread_mem_alloc )
+   block; end block
+ 
+   !$omp target parallel uses_allocators ( omp_default_mem_alloc , omp_large_cap_mem_alloc, &
+   !$omp&                                  omp_const_mem_alloc,omp_high_bw_mem_alloc, &
+   !$omp&                                  omp_low_lat_mem_alloc ,omp_cgroup_mem_alloc , &
+   !$omp&                                  omp_pteam_mem_alloc, omp_thread_mem_alloc )
+   block; end block
+ end
+ 
+ subroutine non_predef
+   use omp_lib
+   implicit none
+ 
+   type(omp_alloctrait), parameter :: trait(0) = [omp_alloctrait :: ]
+   type(omp_alloctrait), parameter :: trait2(*) &
+     = [omp_alloctrait (omp_atk_alignment, 16),                    &
+        omp_alloctrait (omp_atk_sync_hint, omp_atv_default),       &
+        omp_alloctrait (omp_atk_access, omp_atv_default)]
+ 
+   integer(kind=omp_allocator_handle_kind) :: a1, a2, a3
+ 
+   !$omp target uses_allocators(omp_default_mem_alloc, a1(trait), a2(trait2))
+   block; end block
+ 
+   !$omp target parallel uses_allocators(omp_default_mem_alloc, a1(trait), a2(trait2))
+   block; end block
+ 
+ 
+   !$omp target uses_allocators(traits(trait):a1) &
+   !$omp&        uses_allocators ( memspace ( omp_low_lat_mem_space ) , traits ( trait2 ) : a2 , a3)
+   block; end block
+ 
+   !$omp target parallel uses_allocators(traits(trait):a1) &
+   !$omp&        uses_allocators ( memspace ( omp_low_lat_mem_space ) , traits ( trait2 ) : a2 , a3)
+   block; end block
+ 
+   !$omp target uses_allocators ( traits(trait2) , memspace ( omp_low_lat_mem_space ) : a2 , a3)
+   block; end block
+ end subroutine
+ 
+ subroutine trait_present
+   use omp_lib
+   implicit none
+ 
+   type(omp_alloctrait), parameter :: trait1(0) = [omp_alloctrait :: ]
+   integer(kind=omp_allocator_handle_kind) :: a1
+ 
+   ! Invalid in OpenMP 5.0 / 5.1, but valid since 5.2 the same as omp_default_mem_space + emptry traits array
+   !$omp target uses_allocators ( a1 )
+   block; end block
+ end
+ 
+ subroutine odd_names
+   use omp_lib
+   implicit none
+ 
+   type(omp_alloctrait), parameter :: trait1(0) = [omp_alloctrait :: ]
+ 
+   ! oddly named allocators:
+   integer(kind=omp_allocator_handle_kind) :: traits
+   integer(kind=omp_allocator_handle_kind) :: memspace
+ 
+   !$omp target uses_allocators ( traits(trait1), memspace(trait1) )
+   block; end block
+ 
+   !$omp target uses_allocators ( traits(trait1), memspace(omp_low_lat_mem_space)  : traits)
+   block; end block
+ 
+   !$omp target uses_allocators ( memspace(omp_low_lat_mem_space), traits(trait1) : memspace)
+   block; end block
+ end
+ 
+ subroutine more_checks
+   use omp_lib
+   implicit none
+ 
+   integer(kind=kind(omp_low_lat_mem_space)) :: my_memspace
+   integer(kind=omp_allocator_handle_kind) :: a1, a2(4)
+   integer(kind=1) :: a3
+ 
+   !$omp target uses_allocators(memspace (omp_low_lat_mem_space) : a1 )
+   block; end block
+ end
diff -Nrcpad gcc-17-20260628/libgomp/testsuite/libgomp.fortran/uses_allocators-4.f90 gcc-17-20260705/libgomp/testsuite/libgomp.fortran/uses_allocators-4.f90
*** gcc-17-20260628/libgomp/testsuite/libgomp.fortran/uses_allocators-4.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libgomp/testsuite/libgomp.fortran/uses_allocators-4.f90	Sun Jul  5 22:32:18 2026
***************
*** 0 ****
--- 1,59 ----
+ ! { dg-do compile }
+ ! { dg-additional-options "-fdump-tree-original -fdump-tree-gimple" }
+ 
+ program main
+   use omp_lib
+   implicit none
+   integer, allocatable :: arr(:)
+   integer (omp_allocator_handle_kind) :: bar, foo
+ 
+   type (omp_alloctrait), parameter :: traits_array(*) = &
+        [omp_alloctrait(omp_atk_pinned,omp_atv_true),&
+        omp_alloctrait(omp_atk_partition,omp_atv_nearest)]
+ 
+   !$omp target allocate(bar : arr) uses_allocators(bar)
+   block
+     allocate(arr(100))
+   end block
+ 
+   !$omp target uses_allocators(omp_default_mem_alloc)
+   block
+   end block
+ 
+   !$omp target uses_allocators(bar(traits_array), foo (traits_array)) ! { dg-warning "The specification of arguments to 'uses_allocators' at \\(1\\) where each item is of the form 'allocator\\(traits\\)' is deprecated since OpenMP 5.2; instead use 'uses_allocators\\(traits\\(traits_array\\): foo\\)' \\\[-Wdeprecated-openmp\\\]" }
+   block
+     if (foo == 0) stop 1
+   end block
+ 
+   !$omp target uses_allocators(traits(traits_array) : bar)
+   block
+   end block
+ 
+   !$omp target parallel uses_allocators(memspace (omp_low_lat_mem_space) : bar)
+   block
+   end block
+ 
+   !$omp target parallel uses_allocators(memspace (omp_high_bw_mem_space), traits(traits_array) : bar)
+   block
+     use iso_c_binding
+     type(c_ptr) :: ptr
+     integer(c_size_t) :: sz = 32
+     ptr = omp_alloc (sz, bar)
+     call omp_free (ptr, bar)
+   end block
+ 
+ end program main
+ 
+ ! { dg-final { scan-tree-dump "pragma omp target allocate\\(allocator\\(bar\\):arr\\) uses_allocators\\(memspace\\(\\), traits\\(\\) : bar\\)" "original" } }
+ ! { dg-final { scan-tree-dump "pragma omp target" "original" } }
+ ! { dg-final { scan-tree-dump "pragma omp target uses_allocators\\(memspace\\(\\), traits\\(traits_array\\) : bar\\) uses_allocators\\(memspace\\(\\), traits\\(traits_array\\) : foo\\)" "original" } }
+ ! { dg-final { scan-tree-dump "pragma omp target uses_allocators\\(memspace\\(\\), traits\\(traits_array\\) : bar\\)" "original" } }
+ ! { dg-final { scan-tree-dump "pragma omp target uses_allocators\\(memspace\\(omp_low_lat_mem_space\\), traits\\(\\) : bar\\)" "original" } }
+ ! { dg-final { scan-tree-dump "pragma omp target uses_allocators\\(memspace\\(omp_high_bw_mem_space\\), traits\\(traits_array\\) : bar\\)" "original" } }
+ 
+ ! { dg-final { scan-tree-dump "pragma omp target num_teams\\(-2\\) thread_limit\\(0\\) allocate\\(allocator\\(bar\\):arr\\) uses_allocators\\(memspace\\(\\), traits\\(\\) : bar\\)" "gimple" } }
+ ! { dg-final { scan-tree-dump "pragma omp target" "gimple" } }
+ ! { dg-final { scan-tree-dump "pragma omp target num_teams\\(-2\\) thread_limit\\(0\\) uses_allocators\\(memspace\\(\\), traits\\(traits_array\\) : bar\\) uses_allocators\\(memspace\\(\\), traits\\(traits_array\\) : foo\\)" "gimple" } }
+ ! { dg-final { scan-tree-dump "pragma omp target num_teams\\(-2\\) thread_limit\\(0\\) uses_allocators\\(memspace\\(\\), traits\\(traits_array\\) : bar\\)" "gimple" } }
+ ! { dg-final { scan-tree-dump "pragma omp target num_teams\\(-2\\) thread_limit\\(0\\) uses_allocators\\(memspace\\(omp_low_lat_mem_space\\), traits\\(\\) : bar\\)" "gimple" } }
+ ! { dg-final { scan-tree-dump "pragma omp target num_teams\\(-2\\) thread_limit\\(0\\) uses_allocators\\(memspace\\(omp_high_bw_mem_space\\), traits\\(traits_array\\) : bar\\)" "gimple" } }
diff -Nrcpad gcc-17-20260628/libgomp/testsuite/libgomp.fortran/uses_allocators-5.f90 gcc-17-20260705/libgomp/testsuite/libgomp.fortran/uses_allocators-5.f90
*** gcc-17-20260628/libgomp/testsuite/libgomp.fortran/uses_allocators-5.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libgomp/testsuite/libgomp.fortran/uses_allocators-5.f90	Sun Jul  5 22:32:18 2026
***************
*** 0 ****
--- 1,54 ----
+ ! { dg-do compile }
+ 
+ program main
+   use omp_lib
+   implicit none
+   integer (omp_allocator_handle_kind) :: bar, foo
+ 
+   type (omp_alloctrait), parameter :: traits_array(*) = &
+        [omp_alloctrait(omp_atk_pinned,omp_atv_true),&
+        omp_alloctrait(omp_atk_partition,omp_atv_nearest)]
+ 
+   !$omp target uses_allocators(omp_non_existant_alloc) ! { dg-error "Allocator 'omp_non_existant_alloc' at .1. in USES_ALLOCATORS must be a scalar integer of kind 'omp_allocator_handle_kind'" }
+   block  ! { dg-error "Symbol 'omp_non_existant_alloc' at .1. has no IMPLICIT type; did you mean 'omp_const_mem_alloc'\?" "" { target *-*-* } .-1 }
+   end block
+ 
+   !$omp target uses_allocators(bar(traits_array), foo (traits_array), ) ! { dg-error "Invalid character in name" }
+   block
+   end block
+ 
+   !$omp target uses_allocators(traits(xyz) : bar) ! { dg-error "Symbol 'xyz' at .1. has no IMPLICIT type" }
+   block  ! { dg-error "Traits array 'xyz' in USES_ALLOCATORS .1. must be a one-dimensional named constant array of type 'omp_alloctrait'" "" { target *-*-* } .-1 }
+   end block
+ 
+   !$omp target uses_allocators(memspace(omp_non_existant_mem_space) : foo) ! { dg-error "Symbol 'omp_non_existant_mem_space' at .1. has no IMPLICIT type; did you mean 'omp_const_mem_space'\?" }
+   ! { dg-error "Memspace 'omp_non_existant_mem_space' at .1. in USES_ALLOCATORS must be a predefined memory space" "" { target *-*-* } .-1 }
+ 
+   block
+   end block
+ 
+   !$omp target uses_allocators(traits(traits_array), traits(traits_array) : bar) ! { dg-error "Duplicate TRAITS modifier at .1. in USES_ALLOCATORS clause" }
+   block
+   end block
+ 
+   !$omp target uses_allocators(memspace(omp_default_mem_space), memspace(omp_default_mem_space) : foo) ! { dg-error "Duplicate MEMSPACE modifier at .1. in USES_ALLOCATORS clause" }
+   block
+   end block
+ 
+   !$omp target uses_allocators(memspace(omp_default_mem_space), traits(traits_array), traits(traits_array) : foo) ! { dg-error "Duplicate TRAITS modifier at .1. in USES_ALLOCATORS clause" }
+   block
+   end block
+ 
+   !$omp target uses_allocators (omp_null_allocator)
+   block
+   end block
+ 
+   !$omp target uses_allocators (memspace(omp_high_bw_mem_space) : foo, bar)
+   block
+   end block
+ 
+   !$omp target uses_allocators (memspace(omp_high_bw_mem_space) : foo(foo_traits)) ! { dg-error "70:Unexpected '\\(' at .1." }
+   block
+   end block
+ 
+ end program main
diff -Nrcpad gcc-17-20260628/libgomp/testsuite/libgomp.fortran/uses_allocators-6.f90 gcc-17-20260705/libgomp/testsuite/libgomp.fortran/uses_allocators-6.f90
*** gcc-17-20260628/libgomp/testsuite/libgomp.fortran/uses_allocators-6.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libgomp/testsuite/libgomp.fortran/uses_allocators-6.f90	Sun Jul  5 22:32:18 2026
***************
*** 0 ****
--- 1,14 ----
+ ! { dg-do compile }
+ 
+ program main
+   use omp_lib
+   implicit none
+   integer, allocatable :: arr(:)
+   integer (omp_allocator_handle_kind) :: bar
+ 
+   !$omp target allocate(bar : arr) ! { dg-error "allocator 'bar' requires 'uses_allocators.bar.' clause in target region" }
+   block
+     allocate(arr(100))
+   end block
+ 
+ end program main
diff -Nrcpad gcc-17-20260628/libgomp/testsuite/libgomp.fortran/uses_allocators-7.f90 gcc-17-20260705/libgomp/testsuite/libgomp.fortran/uses_allocators-7.f90
*** gcc-17-20260628/libgomp/testsuite/libgomp.fortran/uses_allocators-7.f90	Sun Jun 28 22:32:18 2026
--- gcc-17-20260705/libgomp/testsuite/libgomp.fortran/uses_allocators-7.f90	Sun Jul  5 22:32:18 2026
***************
*** 1,5 ****
! ! { dg-do compile }
! ! { dg-additional-options "-fdump-tree-gimple" }
  
  program main
    use iso_c_binding
--- 1,4 ----
! ! { dg-additional-options "-fdump-tree-original -fdump-tree-gimple" }
  
  program main
    use iso_c_binding
*************** program main
*** 28,34 ****
  
    my_alloc = transfer(int(z'ABCD', omp_allocator_handle_kind), my_alloc)
  
!   !$omp target uses_allocators(traits(trait): my_alloc) defaultmap(none) map(tofrom: x, xbuf) 
      !$omp parallel allocate(allocator(my_alloc): x, xbuf) if(.false.) firstprivate(x, xbuf)
        if (mod (TRANSFER (loc(x), iptr), 128) /= 0) &
          stop 3
--- 27,33 ----
  
    my_alloc = transfer(int(z'ABCD', omp_allocator_handle_kind), my_alloc)
  
!   !$omp target uses_allocators(traits(trait): my_alloc) defaultmap(none) map(tofrom: x, xbuf)
      !$omp parallel allocate(allocator(my_alloc): x, xbuf) if(.false.) firstprivate(x, xbuf)
        if (mod (TRANSFER (loc(x), iptr), 128) /= 0) &
          stop 3
*************** program main
*** 54,69 ****
      stop 8
  end
  
! 
! ! FIXME ENABLE: 'dg FIXME final' -> 'dg-final'
! ! { dg  FIXME  final { scan-tree-dump-times "#pragma omp target .*private\\(my_alloc\\).*uses_allocators\\(my_alloc: memspace\\(\\), traits\\(trait\\)\\)" 1 "gimple" } }
! ! { dg  FIXME  final { scan-tree-dump-times "#pragma omp target .*private\\(my_alloc\\).*uses_allocators\\(my_alloc: memspace\\(\\), traits\\(\\)\\)" 1 "gimple" } }
! ! { dg  FIXME  final { scan-tree-dump "#pragma omp target uses_allocators\\(memspace\\(1\\), traits\\(\\) : my4\\) uses_allocators\\(memspace\\(\\), traits\\(t2\\) : my3\\) uses_allocators\\(memspace\\(\\), traits\\(\\) : my2\\) uses_allocators\\(memspace\\(3\\), traits\\(t\\) : my\\)" 1 "original" } }
! 
! 
! ! FIXME ENABLE code above for "gimple" once it has been implemented:
! ! { dg-message "sorry, unimplemented: 'uses_allocators' clause with traits and memory spaces" "" { target *-*-* } 16 }
! ! { dg-message "sorry, unimplemented: 'uses_allocators' clause with traits and memory spaces" "" { target *-*-* } 31 }
! ! { dg-message "sorry, unimplemented: 'uses_allocators' clause with traits and memory spaces" "" { target *-*-* } 44 }
! ! { dg-bogus "'my_alloc' not specified in enclosing 'target'" "bogus issue because clause is ignored" { xfail *-*-* } 32 }
! ! { dg-bogus "'my_alloc' not specified in enclosing 'target'" "bogus issue because clause is ignored" { xfail *-*-* } 45 }
--- 53,58 ----
      stop 8
  end
  
! ! { dg-final { scan-tree-dump-times "#pragma omp target .*uses_allocators\\(memspace\\(\\), traits\\(trait\\) : my_alloc\\)" 1 "gimple" } }
! ! { dg-final { scan-tree-dump-times "#pragma omp target .*uses_allocators\\(memspace\\(\\), traits\\(\\) : my_alloc\\)" 1 "gimple" } }
! ! { dg-final { scan-tree-dump-times "#pragma omp target .*uses_allocators\\(memspace\\(1\\), traits\\(\\) : my4\\) uses_allocators\\(memspace\\(\\), traits\\(t2\\) : my3\\) uses_allocators\\(memspace\\(\\), traits\\(\\) : my2\\) uses_allocators\\(memspace\\(3\\), traits\\(t\\) : my\\)" 1 "original" { xfail *-*-* }  } }
diff -Nrcpad gcc-17-20260628/libgomp/testsuite/libgomp.fortran/uses_allocators-8.f90 gcc-17-20260705/libgomp/testsuite/libgomp.fortran/uses_allocators-8.f90
*** gcc-17-20260628/libgomp/testsuite/libgomp.fortran/uses_allocators-8.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libgomp/testsuite/libgomp.fortran/uses_allocators-8.f90	Sun Jul  5 22:32:18 2026
***************
*** 0 ****
--- 1,51 ----
+ program main
+   use omp_lib
+   use iso_c_binding
+   implicit none
+   integer(c_intptr_t) :: iptr
+   integer (omp_allocator_handle_kind) :: my_alloc
+   type(omp_alloctrait), parameter :: trait(*) = &
+        [omp_alloctrait(omp_atk_alignment, 128)]
+ 
+   !$omp target uses_allocators(traits(trait) : my_alloc)
+   block
+     type(c_ptr) :: ptr
+     integer(c_size_t) :: sz = 32
+     ptr = omp_alloc (sz, my_alloc)
+     if (mod (TRANSFER (ptr, iptr), 128) /= 0) &
+       stop 1
+     call omp_free (ptr, my_alloc)
+   end block
+ 
+   my_alloc = transfer(int(z'ABCD', omp_allocator_handle_kind), my_alloc)
+ 
+   !$omp target uses_allocators(traits(trait) : my_alloc)
+   block
+     type(c_ptr) :: ptr
+     integer(c_size_t) :: sz = 32
+     ptr = omp_alloc (sz, my_alloc)
+     if (mod (TRANSFER (ptr, iptr), 128) /= 0) &
+       stop 2
+     call omp_free (ptr, my_alloc)
+   end block
+ 
+   if (transfer(my_alloc, 0_omp_allocator_handle_kind) /= int(z'ABCD', &
+        omp_allocator_handle_kind)) &
+     stop 3
+ 
+   ! The following creates an allocator with empty traits + default mem space.
+   !$omp target uses_allocators(my_alloc)
+   block
+     type(c_ptr) :: ptr
+     integer(c_size_t) :: sz = 32
+     ptr = omp_aligned_alloc (128_c_size_t, sz, my_alloc)
+     if (mod (TRANSFER (ptr, iptr), 128) /= 0) &
+       stop 4
+     call omp_free (ptr, my_alloc)
+   end block
+ 
+   if (transfer(my_alloc, 0_omp_allocator_handle_kind) /= int(z'ABCD', &
+        omp_allocator_handle_kind)) &
+     stop 5
+ 
+ end program main
diff -Nrcpad gcc-17-20260628/libgomp/testsuite/libgomp.fortran/uses_allocators_1.f90 gcc-17-20260705/libgomp/testsuite/libgomp.fortran/uses_allocators_1.f90
*** gcc-17-20260628/libgomp/testsuite/libgomp.fortran/uses_allocators_1.f90	Sun Jun 28 22:32:18 2026
--- gcc-17-20260705/libgomp/testsuite/libgomp.fortran/uses_allocators_1.f90	Thu Jan  1 00:00:00 1970
***************
*** 1,184 ****
- ! { dg-do compile }
- ! { dg-additional-options "-Wno-deprecated-openmp" }
- 
- subroutine test
-   use omp_lib
-   implicit none
- 
-   !$omp target uses_allocators ( omp_default_mem_alloc , omp_large_cap_mem_alloc, &
-   !$omp&                         omp_const_mem_alloc,omp_high_bw_mem_alloc, &
-   !$omp&                         omp_low_lat_mem_alloc ,omp_cgroup_mem_alloc , &
-   !$omp&                         omp_pteam_mem_alloc, omp_thread_mem_alloc )
-   block; end block
- 
-   !$omp target uses_allocators(omp_default_mem_alloc, omp_high_bw_mem_alloc) &
-   !$omp&       uses_allocators(omp_high_bw_mem_alloc, omp_low_lat_mem_alloc)  ! { dg-error "Symbol 'omp_high_bw_mem_alloc' present on multiple clauses" }
-   block; end block
- 
-   !$omp target firstprivate ( omp_default_mem_alloc ) , uses_allocators &
-   !$omp&                                                 (omp_default_mem_alloc , omp_high_bw_mem_alloc ) &
-   !$omp&       map(to: omp_high_bw_mem_alloc)
-   block; end block
- ! { dg-error "Object 'omp_default_mem_alloc' is not a variable" "" { target *-*-* } .-4 }
- ! { dg-error "Symbol 'omp_default_mem_alloc' present on both data and map clauses" "" { target *-*-* } .-5 }
- ! { dg-error "Symbol 'omp_high_bw_mem_alloc' present on multiple clauses" "" { target *-*-* } .-5 }
- ! { dg-error "Object 'omp_high_bw_mem_alloc' is not a variable at .1.; parameters cannot be and need not be mapped" "" { target *-*-* } .-5 }
- end
- 
- subroutine non_predef
-   use omp_lib
-   implicit none
- 
-   type(omp_alloctrait), parameter :: trait(0) = [omp_alloctrait :: ]
-   type(omp_alloctrait), parameter :: trait2(*) &
-     = [omp_alloctrait (omp_atk_alignment, 16),                    &
-        omp_alloctrait (omp_atk_sync_hint, omp_atv_default),       &
-        omp_alloctrait (omp_atk_access, omp_atv_default)]
- 
-   integer(kind=omp_allocator_handle_kind) :: a1, a2, a3
- 
-   !$omp target uses_allocators(omp_default_mem_alloc, a1(trait), a2(trait2))
-   block; end block
- 
-   !$omp target uses_allocators(omp_default_mem_alloc, a1(trait), omp_cgroup_mem_alloc, a1(trait2)) ! { dg-error "Symbol 'a1' present on multiple clauses" }
-   block; end block
- 
-   !$omp target uses_allocators(traits(trait):a1) &
-   !$omp&        uses_allocators ( memspace ( omp_low_lat_mem_space ) , traits ( trait2 ) : a2 , a3)
-   block; end block
- 
-   !$omp target uses_allocators ( traits(trait2) , memspace ( omp_low_lat_mem_space ) : a2 , a3)
-   block; end block
- 
-   !$omp target firstprivate ( a2 ) , &  ! { dg-error "Symbol 'a2' present on both data and map clauses" }
-   !$omp&       uses_allocators (a2, a3) &  ! { dg-error "Symbol 'a3' present on multiple clauses" }
-   !$omp&       map(to: a3)
-   block; end block
- end subroutine
- 
- subroutine duplicate
-   use omp_lib
-   implicit none
-   type(omp_alloctrait), parameter :: trait1(0) = [omp_alloctrait :: ]
-   type(omp_alloctrait), parameter :: trait2(0) = [omp_alloctrait :: ]
- 
-   !$omp target uses_allocators(traits(trait1), memspace ( omp_low_lat_mem_space ) , traits ( trait2 ) : bar)  ! { dg-error "Duplicate TRAITS modifier" }
-   block; end block
- 
-   !$omp target uses_allocators(traits(trait1), memspace ( omp_low_lat_mem_space ) , memspace (omp_large_cap_mem_space) : bar)  ! { dg-error "Duplicate MEMSPACE modifier" }
-   block; end block
- end
- 
- subroutine trait_present
-   use omp_lib
-   implicit none
- 
-   type(omp_alloctrait), parameter :: trait1(0) = [omp_alloctrait :: ]
-   integer(kind=omp_allocator_handle_kind) :: a1
- 
-   !$omp target uses_allocators(omp_cgroup_mem_alloc(trait1))  ! { dg-error "A memory space or traits array may not be specified for predefined allocator 'omp_cgroup_mem_alloc'" }
-   block; end block
- 
-   !$omp target uses_allocators(traits(trait1) : omp_pteam_mem_alloc)  ! { dg-error "A memory space or traits array may not be specified for predefined allocator 'omp_pteam_mem_alloc'" }
-   block; end block
- 
-   !$omp target uses_allocators(memspace(omp_low_lat_mem_space) : omp_thread_mem_alloc)  ! { dg-error "A memory space or traits array may not be specified for predefined allocator 'omp_thread_mem_alloc'" }
-   block; end block
- 
-   ! Invalid in OpenMP 5.0 / 5.1, but valid since 5.2 the same as omp_default_mem_space + emptry traits array
-   !$omp target uses_allocators ( a1 )
-   block; end block
- end
- 
- subroutine odd_names
-   use omp_lib
-   implicit none
- 
-   type(omp_alloctrait), parameter :: trait1(0) = [omp_alloctrait :: ]
- 
-   ! oddly named allocators:
-   integer(kind=omp_allocator_handle_kind) :: traits
-   integer(kind=omp_allocator_handle_kind) :: memspace
- 
-   !$omp target uses_allocators ( traits(trait1), memspace(trait1) )
-   block; end block
- 
-   !$omp target uses_allocators ( traits(trait1), memspace(omp_low_lat_mem_space)  : traits)
-   block; end block
- 
-   !$omp target uses_allocators ( memspace(omp_low_lat_mem_space), traits(trait1) : memspace)
-   block; end block
- end
- 
- subroutine more_checks
-   use omp_lib
-   implicit none
- 
-   integer(kind=kind(omp_low_lat_mem_space)) :: my_memspace
-   integer(kind=omp_allocator_handle_kind) :: a1, a2(4)
-   integer(kind=1) :: a3
- 
-   !$omp target uses_allocators ( memspace(my_memspace) : a1)  ! { dg-error "Memspace 'my_memspace' at .1. in USES_ALLOCATORS must be a predefined memory space" }
-   block; end block
- 
-   !$omp target uses_allocators ( omp_low_lat_mem_space)  ! { dg-error "Allocator 'omp_low_lat_mem_space' at .1. in USES_ALLOCATORS must either a variable or a predefined allocator" }
-   block; end block
- 
-   !$omp target uses_allocators ( memspace (omp_low_lat_mem_alloc) : a1)  ! { dg-error "Memspace 'omp_low_lat_mem_alloc' at .1. in USES_ALLOCATORS must be a predefined memory space" }
-   block; end block
- 
-   !$omp target uses_allocators(memspace (omp_low_lat_mem_space) : a1 )
-   block; end block
- 
-   !$omp target uses_allocators(memspace (omp_low_lat_mem_space) : a2 )  ! { dg-error "Allocator 'a2' at .1. in USES_ALLOCATORS must be a scalar integer of kind 'omp_allocator_handle_kind'" }
-   block; end block
- 
-   !$omp target uses_allocators(memspace (omp_low_lat_mem_space) : a3 )  ! { dg-error "Allocator 'a3' at .1. in USES_ALLOCATORS must be a scalar integer of kind 'omp_allocator_handle_kind'" }
-   block; end block
- end
- 
- subroutine traits_checks
-   use omp_lib
-   implicit none
- 
-   type(omp_alloctrait), parameter :: trait1 = omp_alloctrait (omp_atk_alignment, 16)
-   type(omp_alloctrait) :: trait2
-   integer(kind=omp_atk_alignment), parameter :: trait3(1) = omp_atk_alignment
-   integer(kind=omp_allocator_handle_kind) :: a1
- 
-   ! Sensible - but not (yet?) valid - an array constructor:
-   !$omp target uses_allocators(traits ([omp_alloctrait :: ]) : a1 )  ! { dg-error "39: Expected ',', '\\)' or ';' at .1." }
-   block; end block
-   !$omp target uses_allocators(a1 ([omp_alloctrait :: ]))  ! { dg-error "35: Expected ',', '\\)' or ';' at .1." }
-   block; end block
- 
-   !$omp target uses_allocators(traits (trait1) : a1 )  ! { dg-error "Traits array 'trait1' in USES_ALLOCATORS .1. must be a one-dimensional named constant array of type 'omp_alloctrait'" }
-   block; end block
-   !$omp target uses_allocators(a1 (trait1))  ! { dg-error "Traits array 'trait1' in USES_ALLOCATORS .1. must be a one-dimensional named constant array of type 'omp_alloctrait'" }
-   block; end block
- 
-   !$omp target uses_allocators(traits (trait2) : a1 )  ! { dg-error "Traits array 'trait2' in USES_ALLOCATORS .1. must be a one-dimensional named constant array of type 'omp_alloctrait'" }
-   block; end block
-   !$omp target uses_allocators(a1 (trait2))  ! { dg-error "Traits array 'trait2' in USES_ALLOCATORS .1. must be a one-dimensional named constant array of type 'omp_alloctrait'" }
-   block; end block
- 
-   !$omp target uses_allocators(traits (trait3) : a1 )  ! { dg-error "Traits array 'trait3' in USES_ALLOCATORS .1. must be a one-dimensional named constant array of type 'omp_alloctrait'" }
-   block; end block
-   !$omp target uses_allocators(a1 (trait3))  ! { dg-error "Traits array 'trait3' in USES_ALLOCATORS .1. must be a one-dimensional named constant array of type 'omp_alloctrait'" }
-   block; end block
- end
- 
- subroutine null_allocator_ok
-   use omp_lib
-   implicit none
-   integer(omp_allocator_handle_kind) ::  my, my2
-   integer(omp_allocator_handle_kind), parameter ::  my3 = -9
-   !$omp target uses_allocators(my, my2) ! OK -> default settings
-   block; end block
-   !$omp target uses_allocators(my3) ! { dg-error "'my3' at .1. in USES_ALLOCATORS must either a variable or a predefined allocator" }
-   block; end block
-   !$omp target uses_allocators(omp_default_mem_alloc, omp_null_allocator) ! OK -> omp_null_allocator
-   block; end block
-   !$omp target uses_allocators(my, omp_null_allocator) firstprivate(my) ! { dg-error "Symbol 'my' present on both data and map clauses" }
-   block; end block
- end
--- 0 ----
diff -Nrcpad gcc-17-20260628/libgomp/testsuite/libgomp.fortran/uses_allocators_2.f90 gcc-17-20260705/libgomp/testsuite/libgomp.fortran/uses_allocators_2.f90
*** gcc-17-20260628/libgomp/testsuite/libgomp.fortran/uses_allocators_2.f90	Sun Jun 28 22:32:18 2026
--- gcc-17-20260705/libgomp/testsuite/libgomp.fortran/uses_allocators_2.f90	Thu Jan  1 00:00:00 1970
***************
*** 1,99 ****
- ! { dg-do compile }
- ! { dg-additional-options "-Wno-deprecated-openmp" }
- ! Minimal test for valid code:
- ! - predefined allocators do not need any special treatment in uses_allocators
- !   (as 'requires dynamic_allocators' is the default).
- !
- ! - Non-predefined allocators are currently rejected ('sorry)'
- 
- subroutine test
-   use omp_lib
-   implicit none
- 
-   !$omp target uses_allocators ( omp_default_mem_alloc , omp_large_cap_mem_alloc, &
-   !$omp&                         omp_const_mem_alloc,omp_high_bw_mem_alloc, &
-   !$omp&                         omp_low_lat_mem_alloc ,omp_cgroup_mem_alloc , &
-   !$omp&                         omp_pteam_mem_alloc, omp_thread_mem_alloc )
-   block; end block
- 
-   !$omp target parallel uses_allocators ( omp_default_mem_alloc , omp_large_cap_mem_alloc, &
-   !$omp&                                  omp_const_mem_alloc,omp_high_bw_mem_alloc, &
-   !$omp&                                  omp_low_lat_mem_alloc ,omp_cgroup_mem_alloc , &
-   !$omp&                                  omp_pteam_mem_alloc, omp_thread_mem_alloc )
-   block; end block
- end
- 
- subroutine non_predef
-   use omp_lib
-   implicit none
- 
-   type(omp_alloctrait), parameter :: trait(0) = [omp_alloctrait :: ]
-   type(omp_alloctrait), parameter :: trait2(*) &
-     = [omp_alloctrait (omp_atk_alignment, 16),                    &
-        omp_alloctrait (omp_atk_sync_hint, omp_atv_default),       &
-        omp_alloctrait (omp_atk_access, omp_atv_default)]
- 
-   integer(kind=omp_allocator_handle_kind) :: a1, a2, a3
- 
-   !$omp target uses_allocators(omp_default_mem_alloc, a1(trait), a2(trait2))  ! { dg-message "sorry, unimplemented: 'uses_allocators' clause with traits and memory spaces" }
-   block; end block
- 
-   !$omp target parallel uses_allocators(omp_default_mem_alloc, a1(trait), a2(trait2))  ! { dg-message "sorry, unimplemented: 'uses_allocators' clause with traits and memory spaces" }
-   block; end block
- 
- 
-   !$omp target uses_allocators(traits(trait):a1) &
-   !$omp&        uses_allocators ( memspace ( omp_low_lat_mem_space ) , traits ( trait2 ) : a2 , a3)  ! { dg-message "sorry, unimplemented: 'uses_allocators' clause with traits and memory spaces" }
-   block; end block
- 
-   !$omp target parallel uses_allocators(traits(trait):a1) &
-   !$omp&        uses_allocators ( memspace ( omp_low_lat_mem_space ) , traits ( trait2 ) : a2 , a3)  ! { dg-message "sorry, unimplemented: 'uses_allocators' clause with traits and memory spaces" }
-   block; end block
- 
-   !$omp target uses_allocators ( traits(trait2) , memspace ( omp_low_lat_mem_space ) : a2 , a3)  ! { dg-message "sorry, unimplemented: 'uses_allocators' clause with traits and memory spaces" }
-   block; end block
- end subroutine
- 
- subroutine trait_present
-   use omp_lib
-   implicit none
- 
-   type(omp_alloctrait), parameter :: trait1(0) = [omp_alloctrait :: ]
-   integer(kind=omp_allocator_handle_kind) :: a1
- 
-   ! Invalid in OpenMP 5.0 / 5.1, but valid since 5.2 the same as omp_default_mem_space + emptry traits array
-   !$omp target uses_allocators ( a1 )  ! { dg-message "sorry, unimplemented: 'uses_allocators' clause with traits and memory spaces" }
-   block; end block
- end
- 
- subroutine odd_names
-   use omp_lib
-   implicit none
- 
-   type(omp_alloctrait), parameter :: trait1(0) = [omp_alloctrait :: ]
- 
-   ! oddly named allocators:
-   integer(kind=omp_allocator_handle_kind) :: traits
-   integer(kind=omp_allocator_handle_kind) :: memspace
- 
-   !$omp target uses_allocators ( traits(trait1), memspace(trait1) )  ! { dg-message "sorry, unimplemented: 'uses_allocators' clause with traits and memory spaces" }
-   block; end block
- 
-   !$omp target uses_allocators ( traits(trait1), memspace(omp_low_lat_mem_space)  : traits)  ! { dg-message "sorry, unimplemented: 'uses_allocators' clause with traits and memory spaces" }
-   block; end block
- 
-   !$omp target uses_allocators ( memspace(omp_low_lat_mem_space), traits(trait1) : memspace)  ! { dg-message "sorry, unimplemented: 'uses_allocators' clause with traits and memory spaces" }
-   block; end block
- end
- 
- subroutine more_checks
-   use omp_lib
-   implicit none
- 
-   integer(kind=kind(omp_low_lat_mem_space)) :: my_memspace
-   integer(kind=omp_allocator_handle_kind) :: a1, a2(4)
-   integer(kind=1) :: a3
- 
-   !$omp target uses_allocators(memspace (omp_low_lat_mem_space) : a1 )  ! { dg-message "sorry, unimplemented: 'uses_allocators' clause with traits and memory spaces" }
-   block; end block
- end
--- 0 ----
diff -Nrcpad gcc-17-20260628/libgrust/ChangeLog gcc-17-20260705/libgrust/ChangeLog
*** gcc-17-20260628/libgrust/ChangeLog	Sun Jun 28 22:32:18 2026
--- gcc-17-20260705/libgrust/ChangeLog	Sun Jul  5 22:32:18 2026
***************
*** 1,3 ****
--- 1,8 ----
+ 2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* configure.ac: Replace AC_FOREACH with m4_foreach_w.
+ 
  2025-12-29  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
  
  	* configure: Regenerate.
diff -Nrcpad gcc-17-20260628/libgrust/configure.ac gcc-17-20260705/libgrust/configure.ac
*** gcc-17-20260628/libgrust/configure.ac	Sun Jun 28 22:32:18 2026
--- gcc-17-20260705/libgrust/configure.ac	Sun Jul  5 22:32:18 2026
*************** AM_CONDITIONAL(TARGET_LIBRARY, test -n "
*** 107,113 ****
  
  AC_CONFIG_FILES([libformat_parser/Makefile])
  
! AC_CONFIG_FILES(AC_FOREACH([DIR], [libproc_macro_internal], [DIR/Makefile ]),
   [ cat > vpsed$$ << \_EOF
  s!`test -f '$<' || echo '$(srcdir)/'`!!
  _EOF
--- 107,113 ----
  
  AC_CONFIG_FILES([libformat_parser/Makefile])
  
! AC_CONFIG_FILES(m4_foreach_w([DIR], [libproc_macro_internal], [DIR/Makefile ]),
   [ cat > vpsed$$ << \_EOF
  s!`test -f '$<' || echo '$(srcdir)/'`!!
  _EOF
diff -Nrcpad gcc-17-20260628/libiberty/ChangeLog gcc-17-20260705/libiberty/ChangeLog
*** gcc-17-20260628/libiberty/ChangeLog	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libiberty/ChangeLog	Sun Jul  5 22:32:18 2026
***************
*** 1,3 ****
--- 1,15 ----
+ 2026-07-01  Alan Modra  <amodra@gmail.com>
+ 
+ 	* cp-demangle.c (d_compact_number): Avoid signed overflow.
+ 
+ 2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* acinclude.m4: Replace AC_TRY_RUN with AC_RUN_IFELSE.  Replace
+ 	AC_TRY_COMPILE with AC_COMPILE_IFELSE.
+ 	* configure.ac: Replace AC_TRY_COMPILE with AC_COMPILE_IFELSE.  Replace
+ 	AC_ISC_POSIX with AC_SEARCH_LIBS([strerror],[cposix]).
+ 
  2026-06-13  Sunil Dora  <sunilkumar.dora@windriver.com>
  
  	PR driver/111527
diff -Nrcpad gcc-17-20260628/libiberty/acinclude.m4 gcc-17-20260705/libiberty/acinclude.m4
*** gcc-17-20260628/libiberty/acinclude.m4	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libiberty/acinclude.m4	Sun Jul  5 22:32:18 2026
*************** dnl a SEGV in some cases.
*** 21,27 ****
  AC_DEFUN([libiberty_AC_FUNC_STRNCMP],
  [AC_REQUIRE([AC_FUNC_MMAP])
  AC_CACHE_CHECK([for working strncmp], ac_cv_func_strncmp_works,
! [AC_TRY_RUN([
  /* Test by Jim Wilson and Kaveh Ghazi.
     Check whether strncmp reads past the end of its string parameters. */
  #include <stdlib.h>
--- 21,27 ----
  AC_DEFUN([libiberty_AC_FUNC_STRNCMP],
  [AC_REQUIRE([AC_FUNC_MMAP])
  AC_CACHE_CHECK([for working strncmp], ac_cv_func_strncmp_works,
! [AC_RUN_IFELSE([AC_LANG_SOURCE([[
  /* Test by Jim Wilson and Kaveh Ghazi.
     Check whether strncmp reads past the end of its string parameters. */
  #include <stdlib.h>
*************** main (void)
*** 84,91 ****
  #endif /* HAVE_MMAP || HAVE_MMAP_ANYWHERE */
    exit (0);
  }
! ], ac_cv_func_strncmp_works=yes, ac_cv_func_strncmp_works=no,
!   ac_cv_func_strncmp_works=yes)
  rm -f core core.* *.core])
  if test $ac_cv_func_strncmp_works = no ; then
    AC_LIBOBJ([strncmp])
--- 84,91 ----
  #endif /* HAVE_MMAP || HAVE_MMAP_ANYWHERE */
    exit (0);
  }
! ]])], [ac_cv_func_strncmp_works=yes], [ac_cv_func_strncmp_works=no],
!   [ac_cv_func_strncmp_works=yes])
  rm -f core core.* *.core])
  if test $ac_cv_func_strncmp_works = no ; then
    AC_LIBOBJ([strncmp])
*************** fi
*** 95,105 ****
  dnl See if errno must be declared even when <errno.h> is included.
  AC_DEFUN([libiberty_AC_DECLARE_ERRNO],
  [AC_CACHE_CHECK(whether errno must be declared, libiberty_cv_declare_errno,
! [AC_TRY_COMPILE(
! [#include <errno.h>],
! [int x = errno;],
! libiberty_cv_declare_errno=no,
! libiberty_cv_declare_errno=yes)])
  if test $libiberty_cv_declare_errno = yes
  then AC_DEFINE(NEED_DECLARATION_ERRNO, 1,
    [Define if errno must be declared even when <errno.h> is included.])
--- 95,105 ----
  dnl See if errno must be declared even when <errno.h> is included.
  AC_DEFUN([libiberty_AC_DECLARE_ERRNO],
  [AC_CACHE_CHECK(whether errno must be declared, libiberty_cv_declare_errno,
! [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
! [[#include <errno.h>]],
! [[int x = errno;]])],
! [libiberty_cv_declare_errno=no],
! [libiberty_cv_declare_errno=yes])])
  if test $libiberty_cv_declare_errno = yes
  then AC_DEFINE(NEED_DECLARATION_ERRNO, 1,
    [Define if errno must be declared even when <errno.h> is included.])
*************** dnl See whether we need a declaration fo
*** 110,116 ****
  AC_DEFUN([libiberty_NEED_DECLARATION],
  [AC_MSG_CHECKING([whether $1 must be declared])
  AC_CACHE_VAL(libiberty_cv_decl_needed_$1,
! [AC_TRY_COMPILE([
  #include "confdefs.h"
  #include <stdio.h>
  #ifdef HAVE_STRING_H
--- 110,116 ----
  AC_DEFUN([libiberty_NEED_DECLARATION],
  [AC_MSG_CHECKING([whether $1 must be declared])
  AC_CACHE_VAL(libiberty_cv_decl_needed_$1,
! [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
  #include "confdefs.h"
  #include <stdio.h>
  #ifdef HAVE_STRING_H
*************** AC_CACHE_VAL(libiberty_cv_decl_needed_$1
*** 125,133 ****
  #endif
  #ifdef HAVE_UNISTD_H
  #include <unistd.h>
! #endif],
! [char *(*pfn) = (char *(*)) $1],
! libiberty_cv_decl_needed_$1=no, libiberty_cv_decl_needed_$1=yes)])
  AC_MSG_RESULT($libiberty_cv_decl_needed_$1)
  if test $libiberty_cv_decl_needed_$1 = yes; then
    AC_DEFINE([NEED_DECLARATION_]translit($1, [a-z], [A-Z]), 1,
--- 125,134 ----
  #endif
  #ifdef HAVE_UNISTD_H
  #include <unistd.h>
! #endif]],
! [[char *(*pfn) = (char *(*)) $1]])],
! [libiberty_cv_decl_needed_$1=no],
! [libiberty_cv_decl_needed_$1=yes])])
  AC_MSG_RESULT($libiberty_cv_decl_needed_$1)
  if test $libiberty_cv_decl_needed_$1 = yes; then
    AC_DEFINE([NEED_DECLARATION_]translit($1, [a-z], [A-Z]), 1,
*************** if test $ac_cv_os_cray = yes; then
*** 160,166 ****
  fi
  
  AC_CACHE_CHECK(stack direction for C alloca, ac_cv_c_stack_direction,
! [AC_TRY_RUN([#include <stdlib.h>
  
  int
  find_stack_direction (void)
--- 161,167 ----
  fi
  
  AC_CACHE_CHECK(stack direction for C alloca, ac_cv_c_stack_direction,
! [AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>
  
  int
  find_stack_direction (void)
*************** int
*** 180,189 ****
  main (void)
  {
    exit (find_stack_direction() < 0);
! }],
!   ac_cv_c_stack_direction=1,
!   ac_cv_c_stack_direction=-1,
!   ac_cv_c_stack_direction=0)])
  AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction,
    [Define if you know the direction of stack growth for your system;
     otherwise it will be automatically deduced at run-time.
--- 181,190 ----
  main (void)
  {
    exit (find_stack_direction() < 0);
! }]])],
!   [ac_cv_c_stack_direction=1],
!   [ac_cv_c_stack_direction=-1],
!   [ac_cv_c_stack_direction=0])])
  AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction,
    [Define if you know the direction of stack growth for your system;
     otherwise it will be automatically deduced at run-time.
diff -Nrcpad gcc-17-20260628/libiberty/configure.ac gcc-17-20260705/libiberty/configure.ac
*** gcc-17-20260628/libiberty/configure.ac	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libiberty/configure.ac	Sun Jul  5 22:32:18 2026
*************** AC_CHECK_TYPE([long long],
*** 329,358 ****
  # Look for a 64-bit type.
  AC_MSG_CHECKING([for a 64-bit type])
  AC_CACHE_VAL(liberty_cv_uint64,
! [AC_TRY_COMPILE(
! [#ifdef HAVE_STDINT_H
  #include <stdint.h>
! #endif],
! [extern uint64_t foo;],
! liberty_cv_uint64=uint64_t,
! [AC_TRY_COMPILE(
! [#ifdef HAVE_LIMITS_H
  #include <limits.h>
  #endif
  #ifndef CHAR_BIT
  #define CHAR_BIT 8
! #endif],
! [extern char foo[sizeof(long) * CHAR_BIT >= 64 ? 1 : -1];],
! liberty_cv_uint64="unsigned long",
! [AC_TRY_COMPILE(
! [#ifdef HAVE_LIMITS_H
  #include <limits.h>
  #endif
  #ifndef CHAR_BIT
  #define CHAR_BIT 8
! #endif],
! [extern char foo[sizeof(long long) * CHAR_BIT >= 64 ? 1 : -1];],
! liberty_cv_uint64="unsigned long long", liberty_cv_uint64=none)])])])
  AC_MSG_RESULT($liberty_cv_uint64)
  if test "$liberty_cv_uint64" != none; then
    AC_DEFINE_UNQUOTED(UNSIGNED_64BIT_TYPE, $liberty_cv_uint64,
--- 329,358 ----
  # Look for a 64-bit type.
  AC_MSG_CHECKING([for a 64-bit type])
  AC_CACHE_VAL(liberty_cv_uint64,
! [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
! [[#ifdef HAVE_STDINT_H
  #include <stdint.h>
! #endif]],
! [[extern uint64_t foo;]])],
! [liberty_cv_uint64=uint64_t],
! [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
! [[#ifdef HAVE_LIMITS_H
  #include <limits.h>
  #endif
  #ifndef CHAR_BIT
  #define CHAR_BIT 8
! #endif]],
! [[extern char foo[sizeof(long) * CHAR_BIT >= 64 ? 1 : -1];]])],
! [liberty_cv_uint64="unsigned long"],
! [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
! [[#ifdef HAVE_LIMITS_H
  #include <limits.h>
  #endif
  #ifndef CHAR_BIT
  #define CHAR_BIT 8
! #endif]],
! [[extern char foo[sizeof(long long) * CHAR_BIT >= 64 ? 1 : -1];]])],
! [liberty_cv_uint64="unsigned long long"], [liberty_cv_uint64=none])])])])
  AC_MSG_RESULT($liberty_cv_uint64)
  if test "$liberty_cv_uint64" != none; then
    AC_DEFINE_UNQUOTED(UNSIGNED_64BIT_TYPE, $liberty_cv_uint64,
*************** if test -z "${setobjs}"; then
*** 701,707 ****
  
    # We haven't set the list of objects yet.  Use the standard autoconf
    # tests.  This will only work if the compiler works.
!   AC_ISC_POSIX
    AC_REPLACE_FUNCS($funcs)
    libiberty_AC_FUNC_C_ALLOCA
    AC_FUNC_FORK
--- 701,707 ----
  
    # We haven't set the list of objects yet.  Use the standard autoconf
    # tests.  This will only work if the compiler works.
!   AC_SEARCH_LIBS([strerror],[cposix])
    AC_REPLACE_FUNCS($funcs)
    libiberty_AC_FUNC_C_ALLOCA
    AC_FUNC_FORK
diff -Nrcpad gcc-17-20260628/libiberty/cp-demangle.c gcc-17-20260705/libiberty/cp-demangle.c
*** gcc-17-20260628/libiberty/cp-demangle.c	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libiberty/cp-demangle.c	Sun Jul  5 22:32:18 2026
*************** d_compact_number (struct d_info *di)
*** 3266,3272 ****
    else if (d_peek_char (di) == 'n')
      return -1;
    else
!     num = d_number (di) + 1;
  
    if (num < 0 || ! d_check_char (di, '_'))
      return -1;
--- 3266,3272 ----
    else if (d_peek_char (di) == 'n')
      return -1;
    else
!     num = d_number (di) + 1u;
  
    if (num < 0 || ! d_check_char (di, '_'))
      return -1;
diff -Nrcpad gcc-17-20260628/libitm/ChangeLog gcc-17-20260705/libitm/ChangeLog
*** gcc-17-20260628/libitm/ChangeLog	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libitm/ChangeLog	Sun Jul  5 22:32:18 2026
***************
*** 1,3 ****
--- 1,12 ----
+ 2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* acinclude.m4: Replace AC_TRY_LINK with AC_LINK_IFELSE.  Replace
+ 	AC_TRY_COMPILE with AC_COMPILE_IFELSE.  Replace AC_HELP_STRING with
+ 	AS_HELP_STRING.  Replace AC_TRY_RUN with AC_RUN_IFELSE.
+ 	* configure.ac: Replace AM_PROG_LIBTOOL with LT_INIT.  Replace
+ 	AC_STDC_HEADERS with AC_HEADER_STDC.
+ 
  2026-06-17  Muhammad Kamran  <muhammad.kamran@arm.com>
  
  	* config/aarch64/sjlj.S (FEATURE_1_AND_MARK): Define.  Use
diff -Nrcpad gcc-17-20260628/libitm/acinclude.m4 gcc-17-20260705/libitm/acinclude.m4
*** gcc-17-20260628/libitm/acinclude.m4	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libitm/acinclude.m4	Sun Jul  5 22:32:18 2026
*************** dnl Check whether the target supports __
*** 5,12 ****
  AC_DEFUN([LIBITM_CHECK_SYNC_BUILTINS], [
    AC_CACHE_CHECK([whether the target supports __sync_*_compare_and_swap],
  		 libitm_cv_have_sync_builtins, [
!   AC_TRY_LINK([], [int foo, bar; bar = __sync_val_compare_and_swap(&foo, 0, 1);],
! 	      libitm_cv_have_sync_builtins=yes, libitm_cv_have_sync_builtins=no)])
    if test $libitm_cv_have_sync_builtins = yes; then
      AC_DEFINE(HAVE_SYNC_BUILTINS, 1,
  	      [Define to 1 if the target supports __sync_*_compare_and_swap])
--- 5,15 ----
  AC_DEFUN([LIBITM_CHECK_SYNC_BUILTINS], [
    AC_CACHE_CHECK([whether the target supports __sync_*_compare_and_swap],
  		 libitm_cv_have_sync_builtins, [
!   AC_LINK_IFELSE(
!     [AC_LANG_PROGRAM([[]],
! 		     [[int foo, bar; bar = __sync_val_compare_and_swap(&foo, 0, 1);]])],
!     [libitm_cv_have_sync_builtins=yes],
!     [libitm_cv_have_sync_builtins=no])])
    if test $libitm_cv_have_sync_builtins = yes; then
      AC_DEFINE(HAVE_SYNC_BUILTINS, 1,
  	      [Define to 1 if the target supports __sync_*_compare_and_swap])
*************** dnl Check whether the target supports 64
*** 16,26 ****
  AC_DEFUN([LIBITM_CHECK_64BIT_SYNC_BUILTINS], [
    AC_CACHE_CHECK([whether the target supports 64-bit __sync_*_compare_and_swap],
  		 libitm_cv_have_64bit_sync_builtins, [
!   AC_TRY_LINK([#include <stdint.h>],
!     [uint64_t foo, bar;
!      bar = __sync_val_compare_and_swap(&foo, 0, 1);],
!     libitm_cv_have_64bit_sync_builtins=yes,
!     libitm_cv_have_64bit_sync_builtins=no)])
      if test $libitm_cv_have_64bit_sync_builtins = yes; then
        AC_DEFINE(HAVE_64BIT_SYNC_BUILTINS, 1,
  	        [Define to 1 if the target supports 64-bit __sync_*_compare_and_swap])
--- 19,30 ----
  AC_DEFUN([LIBITM_CHECK_64BIT_SYNC_BUILTINS], [
    AC_CACHE_CHECK([whether the target supports 64-bit __sync_*_compare_and_swap],
  		 libitm_cv_have_64bit_sync_builtins, [
!   AC_LINK_IFELSE(
!     [AC_LANG_PROGRAM([[#include <stdint.h>]],
! 		     [[uint64_t foo, bar;
!      bar = __sync_val_compare_and_swap(&foo, 0, 1);]])],
!     [libitm_cv_have_64bit_sync_builtins=yes],
!     [libitm_cv_have_64bit_sync_builtins=no])])
      if test $libitm_cv_have_64bit_sync_builtins = yes; then
        AC_DEFINE(HAVE_64BIT_SYNC_BUILTINS, 1,
  	        [Define to 1 if the target supports 64-bit __sync_*_compare_and_swap])
*************** AC_DEFUN([LIBITM_CHECK_ATTRIBUTE_DLLEXPO
*** 32,40 ****
  		 libitm_cv_have_attribute_dllexport, [
    save_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -Werror"
!   AC_TRY_COMPILE([void __attribute__((dllexport)) foo(void) { }],
! 		 [], libitm_cv_have_attribute_dllexport=yes,
! 		 libitm_cv_have_attribute_dllexport=no)
    CFLAGS="$save_CFLAGS"])
    if test $libitm_cv_have_attribute_dllexport = yes; then
      AC_DEFINE(HAVE_ATTRIBUTE_DLLEXPORT, 1,
--- 36,46 ----
  		 libitm_cv_have_attribute_dllexport, [
    save_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -Werror"
!   AC_COMPILE_IFELSE(
!   [AC_LANG_PROGRAM([[void __attribute__((dllexport)) foo(void) { }]],
! 		   [[]])],
! 		   [libitm_cv_have_attribute_dllexport=yes],
! 		   [libitm_cv_have_attribute_dllexport=no])
    CFLAGS="$save_CFLAGS"])
    if test $libitm_cv_have_attribute_dllexport = yes; then
      AC_DEFINE(HAVE_ATTRIBUTE_DLLEXPORT, 1,
*************** dnl Check whether the target supports sy
*** 45,54 ****
  AC_DEFUN([LIBITM_CHECK_ATTRIBUTE_ALIAS], [
    AC_CACHE_CHECK([whether the target supports symbol aliases],
  		 libitm_cv_have_attribute_alias, [
!   AC_TRY_LINK([
  void foo(void) { }
! extern void bar(void) __attribute__((alias("foo")));],
!     [bar();], libitm_cv_have_attribute_alias=yes, libitm_cv_have_attribute_alias=no)])
    if test $libitm_cv_have_attribute_alias = yes; then
      AC_DEFINE(HAVE_ATTRIBUTE_ALIAS, 1,
        [Define to 1 if the target supports __attribute__((alias(...))).])
--- 51,63 ----
  AC_DEFUN([LIBITM_CHECK_ATTRIBUTE_ALIAS], [
    AC_CACHE_CHECK([whether the target supports symbol aliases],
  		 libitm_cv_have_attribute_alias, [
!   AC_LINK_IFELSE(
!     [AC_LANG_PROGRAM([[
  void foo(void) { }
! extern void bar(void) __attribute__((alias("foo")));]],
! 		     [[bar();]])],
!     [libitm_cv_have_attribute_alias=yes],
!     [libitm_cv_have_attribute_alias=no])])
    if test $libitm_cv_have_attribute_alias = yes; then
      AC_DEFINE(HAVE_ATTRIBUTE_ALIAS, 1,
        [Define to 1 if the target supports __attribute__((alias(...))).])
*************** dnl Check how size_t is mangled.
*** 58,72 ****
  AC_DEFUN([LIBITM_CHECK_SIZE_T_MANGLING], [
    AC_CACHE_CHECK([how size_t is mangled],
                   libitm_cv_size_t_mangling, [
!     AC_TRY_COMPILE([], [extern __SIZE_TYPE__ x; extern unsigned long x;],
! 	           [libitm_cv_size_t_mangling=m], [
!       AC_TRY_COMPILE([], [extern __SIZE_TYPE__ x; extern unsigned int x;],
  	             [libitm_cv_size_t_mangling=j], [
!         AC_TRY_COMPILE([],
! 		       [extern __SIZE_TYPE__ x; extern unsigned long long x;],
  	               [libitm_cv_size_t_mangling=y], [
!           AC_TRY_COMPILE([],
! 			 [extern __SIZE_TYPE__ x; extern unsigned short x;],
  			 [libitm_cv_size_t_mangling=t],
  		         [libitm_cv_size_t_mangling=x])
  	])
--- 67,87 ----
  AC_DEFUN([LIBITM_CHECK_SIZE_T_MANGLING], [
    AC_CACHE_CHECK([how size_t is mangled],
                   libitm_cv_size_t_mangling, [
!     AC_COMPILE_IFELSE(
!       [AC_LANG_PROGRAM([[]],
! 		       [[extern __SIZE_TYPE__ x; extern unsigned long x;]])],
!       [libitm_cv_size_t_mangling=m], [
!       AC_COMPILE_IFELSE(
!         [AC_LANG_PROGRAM([[]],
! 	[[extern __SIZE_TYPE__ x; extern unsigned int x;]])],
  	             [libitm_cv_size_t_mangling=j], [
!         AC_COMPILE_IFELSE(
!           [AC_LANG_PROGRAM([[]],
! 		           [[extern __SIZE_TYPE__ x; extern unsigned long long x;]])],
  	               [libitm_cv_size_t_mangling=y], [
!           AC_COMPILE_IFELSE(
!             [AC_LANG_PROGRAM([[]],
! 			     [[extern __SIZE_TYPE__ x; extern unsigned short x;]])],
  			 [libitm_cv_size_t_mangling=t],
  		         [libitm_cv_size_t_mangling=x])
  	])
*************** AC_DEFUN([LIBITM_CHECK_AS_AVX], [
*** 85,92 ****
  case "${target_cpu}" in
  i[[34567]]86 | x86_64)
    AC_CACHE_CHECK([if the assembler supports AVX], libitm_cv_as_avx, [
!     AC_TRY_COMPILE([], [asm("vzeroupper");],
! 		   [libitm_cv_as_avx=yes], [libitm_cv_as_avx=no])
    ])
    if test x$libitm_cv_as_avx = xyes; then
      AC_DEFINE(HAVE_AS_AVX, 1, [Define to 1 if the assembler supports AVX.])
--- 100,109 ----
  case "${target_cpu}" in
  i[[34567]]86 | x86_64)
    AC_CACHE_CHECK([if the assembler supports AVX], libitm_cv_as_avx, [
!     AC_COMPILE_IFELSE(
!       [AC_LANG_PROGRAM([[]], [[asm("vzeroupper");]])],
!       [libitm_cv_as_avx=yes],
!       [libitm_cv_as_avx=no])
    ])
    if test x$libitm_cv_as_avx = xyes; then
      AC_DEFINE(HAVE_AS_AVX, 1, [Define to 1 if the assembler supports AVX.])
*************** AC_DEFUN([LIBITM_CHECK_AS_RTM], [
*** 99,106 ****
  case "${target_cpu}" in
  i[[34567]]86 | x86_64)
    AC_CACHE_CHECK([if the assembler supports RTM], libitm_cv_as_rtm, [
!     AC_TRY_COMPILE([], [asm("1: xbegin 1b; xend");],
! 		   [libitm_cv_as_rtm=yes], [libitm_cv_as_rtm=no])
    ])
    if test x$libitm_cv_as_rtm = xyes; then
      AC_DEFINE(HAVE_AS_RTM, 1, [Define to 1 if the assembler supports RTM.])
--- 116,125 ----
  case "${target_cpu}" in
  i[[34567]]86 | x86_64)
    AC_CACHE_CHECK([if the assembler supports RTM], libitm_cv_as_rtm, [
!     AC_COMPILE_IFELSE(
!       [AC_LANG_PROGRAM([[]], [[asm("1: xbegin 1b; xend");]])],
!       [libitm_cv_as_rtm=yes],
!       [libitm_cv_as_rtm=no])
    ])
    if test x$libitm_cv_as_rtm = xyes; then
      AC_DEFINE(HAVE_AS_RTM, 1, [Define to 1 if the assembler supports RTM.])
*************** AC_DEFUN([LIBITM_CHECK_AS_HTM], [
*** 113,120 ****
  case "${target_cpu}" in
  powerpc*)
    AC_CACHE_CHECK([if the assembler supports HTM], libitm_cv_as_htm, [
!     AC_TRY_COMPILE([], [asm("tbegin. 0; tend. 0");],
! 		   [libitm_cv_as_htm=yes], [libitm_cv_as_htm=no])
    ])
    if test x$libitm_cv_as_htm = xyes; then
      AC_DEFINE(HAVE_AS_HTM, 1, [Define to 1 if the assembler supports HTM.])
--- 132,141 ----
  case "${target_cpu}" in
  powerpc*)
    AC_CACHE_CHECK([if the assembler supports HTM], libitm_cv_as_htm, [
!     AC_COMPILE_IFELSE(
!       [AC_LANG_PROGRAM([[]], [[asm("tbegin. 0; tend. 0");]])],
!       [libitm_cv_as_htm=yes],
!       [libitm_cv_as_htm=no])
    ])
    if test x$libitm_cv_as_htm = xyes; then
      AC_DEFINE(HAVE_AS_HTM, 1, [Define to 1 if the assembler supports HTM.])
*************** s390*)
*** 124,131 ****
    AC_CACHE_CHECK([if the assembler supports HTM], libitm_cv_as_htm, [
      save_CFLAGS="$CFLAGS"
      CFLAGS="$CFLAGS -march=zEC12"
!     AC_TRY_COMPILE([], [asm("tbegin 0,0; tend");],
! 		   [libitm_cv_as_htm=yes], [libitm_cv_as_htm=no])
      CFLAGS="$save_CFLAGS"])
    if test x$libitm_cv_as_htm = xyes; then
      AC_DEFINE(HAVE_AS_HTM, 1, [Define to 1 if the assembler supports HTM.])
--- 145,154 ----
    AC_CACHE_CHECK([if the assembler supports HTM], libitm_cv_as_htm, [
      save_CFLAGS="$CFLAGS"
      CFLAGS="$CFLAGS -march=zEC12"
!     AC_COMPILE_IFELSE(
!       [AC_LANG_PROGRAM([[]], [[asm("tbegin 0,0; tend");]])],
!       [libitm_cv_as_htm=yes],
!       [libitm_cv_as_htm=no])
      CFLAGS="$save_CFLAGS"])
    if test x$libitm_cv_as_htm = xyes; then
      AC_DEFINE(HAVE_AS_HTM, 1, [Define to 1 if the assembler supports HTM.])
*************** dnl See docs/html/17_intro/configury.htm
*** 157,163 ****
  dnl
  m4_define([LIBITM_ENABLE],[dnl
  m4_define([_g_switch],[--enable-$1])dnl
! m4_define([_g_help],[AC_HELP_STRING(_g_switch$3,[$4 @<:@default=$2@:>@])])dnl
   AC_ARG_ENABLE($1,_g_help,
    m4_bmatch([$5],
     [^permit ],
--- 180,186 ----
  dnl
  m4_define([LIBITM_ENABLE],[dnl
  m4_define([_g_switch],[--enable-$1])dnl
! m4_define([_g_help],[AS_HELP_STRING(_g_switch$3,[$4 @<:@default=$2@:>@])])dnl
   AC_ARG_ENABLE($1,_g_help,
    m4_bmatch([$5],
     [^permit ],
*************** AC_DEFUN([LIBITM_CHECK_LINKER_FEATURES],
*** 263,276 ****
      # .eh_frame and now some of the glibc sections for iconv).
      # Bzzzzt.  Thanks for playing, maybe next time.
      AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
!     AC_TRY_RUN([
       int main(void)
       {
         try { throw 1; }
         catch (...) { };
         return 0;
       }
!     ], [ac_sectionLDflags=yes],[ac_sectionLDflags=no], [ac_sectionLDflags=yes])
      if test "$ac_test_CFLAGS" = set; then
        CFLAGS="$ac_save_CFLAGS"
      else
--- 286,299 ----
      # .eh_frame and now some of the glibc sections for iconv).
      # Bzzzzt.  Thanks for playing, maybe next time.
      AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
!     AC_RUN_IFELSE([AC_LANG_SOURCE([[
       int main(void)
       {
         try { throw 1; }
         catch (...) { };
         return 0;
       }
!     ]])], [ac_sectionLDflags=yes],[ac_sectionLDflags=no], [ac_sectionLDflags=yes])
      if test "$ac_test_CFLAGS" = set; then
        CFLAGS="$ac_save_CFLAGS"
      else
*************** if test $enable_symvers != no; then
*** 357,363 ****
    AC_MSG_CHECKING([for shared libgcc])
    ac_save_CFLAGS="$CFLAGS"
    CFLAGS=' -lgcc_s'
!   AC_TRY_LINK(, [return 0;], libitm_shared_libgcc=yes, libitm_shared_libgcc=no)
    CFLAGS="$ac_save_CFLAGS"
    if test $libitm_shared_libgcc = no; then
      cat > conftest.c <<EOF
--- 380,387 ----
    AC_MSG_CHECKING([for shared libgcc])
    ac_save_CFLAGS="$CFLAGS"
    CFLAGS=' -lgcc_s'
!   AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[return 0;]])],
! 		 [libitm_shared_libgcc=yes], [libitm_shared_libgcc=no])
    CFLAGS="$ac_save_CFLAGS"
    if test $libitm_shared_libgcc = no; then
      cat > conftest.c <<EOF
*************** changequote([,])dnl
*** 372,378 ****
      rm -f conftest.c conftest.so
      if test x${libitm_libgcc_s_suffix+set} = xset; then
        CFLAGS=" -lgcc_s$libitm_libgcc_s_suffix"
!       AC_TRY_LINK(, [return 0;], libitm_shared_libgcc=yes)
        CFLAGS="$ac_save_CFLAGS"
      fi
    fi
--- 396,403 ----
      rm -f conftest.c conftest.so
      if test x${libitm_libgcc_s_suffix+set} = xset; then
        CFLAGS=" -lgcc_s$libitm_libgcc_s_suffix"
!       AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[return 0;]])],
! 		     [libitm_shared_libgcc=yes])
        CFLAGS="$ac_save_CFLAGS"
      fi
    fi
diff -Nrcpad gcc-17-20260628/libitm/configure.ac gcc-17-20260705/libitm/configure.ac
*** gcc-17-20260628/libitm/configure.ac	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libitm/configure.ac	Sun Jul  5 22:32:18 2026
*************** AM_CONDITIONAL(BUILD_INFO, test $gcc_cv_
*** 153,159 ****
  
  
  # Configure libtool
! AM_PROG_LIBTOOL
  AC_SUBST(enable_shared)
  AC_SUBST(enable_static)
  AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = xyes])
--- 153,159 ----
  
  
  # Configure libtool
! LT_INIT
  AC_SUBST(enable_shared)
  AC_SUBST(enable_static)
  AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = xyes])
*************** libtool_VERSION=1:0:0
*** 165,171 ****
  AC_SUBST(libtool_VERSION)
  
  # Check header files.
! AC_STDC_HEADERS
  AC_HEADER_TIME
  ACX_HEADER_STRING
  AC_CHECK_HEADERS(unistd.h semaphore.h sys/time.h sys/auxv.h malloc.h)
--- 165,171 ----
  AC_SUBST(libtool_VERSION)
  
  # Check header files.
! AC_HEADER_STDC
  AC_HEADER_TIME
  ACX_HEADER_STRING
  AC_CHECK_HEADERS(unistd.h semaphore.h sys/time.h sys/auxv.h malloc.h)
diff -Nrcpad gcc-17-20260628/libobjc/ChangeLog gcc-17-20260705/libobjc/ChangeLog
*** gcc-17-20260628/libobjc/ChangeLog	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libobjc/ChangeLog	Sun Jul  5 22:32:18 2026
***************
*** 1,3 ****
--- 1,11 ----
+ 2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* configure: Regenerate.
+ 	* configure.ac: Replace AC_CANONICAL_SYSTEM with AC_CANONICAL_TARGET.
+ 	Replace AM_PROG_LIBTOOL with LT_INIT. Remove unnecessary escape in
+ 	double quoted string.
+ 
  2025-12-29  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
  
  	* configure: Regenerate.
diff -Nrcpad gcc-17-20260628/libobjc/configure gcc-17-20260705/libobjc/configure
*** gcc-17-20260628/libobjc/configure	Sun Jun 28 22:32:22 2026
--- gcc-17-20260705/libobjc/configure	Sun Jul  5 22:32:18 2026
*************** test -n "$target_alias" &&
*** 2503,2509 ****
  
  
  
- 
  # Export source directory.
  # These need to be absolute paths, yet at the same time need to
  # canonicalize only relative paths, because then amd will not unmount
--- 2503,2508 ----
*************** else
*** 11265,11271 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11268 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 11264,11270 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11267 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 11371,11377 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11374 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 11370,11376 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11373 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
diff -Nrcpad gcc-17-20260628/libobjc/configure.ac gcc-17-20260705/libobjc/configure.ac
*** gcc-17-20260628/libobjc/configure.ac	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libobjc/configure.ac	Sun Jul  5 22:32:18 2026
*************** AC_MSG_RESULT($version_specific_libs)
*** 64,70 ****
  # Find the rest of the source tree framework.
  AM_ENABLE_MULTILIB(, ..)
  
! AC_CANONICAL_SYSTEM
  ACX_NONCANONICAL_TARGET
  
  # Export source directory.
--- 64,70 ----
  # Find the rest of the source tree framework.
  AM_ENABLE_MULTILIB(, ..)
  
! AC_CANONICAL_TARGET
  ACX_NONCANONICAL_TARGET
  
  # Export source directory.
*************** AM_MAINTAINER_MODE
*** 166,172 ****
  # Enable Win32 DLL on MS Windows - FIXME
  AC_LIBTOOL_WIN32_DLL
  
! AC_PROG_LIBTOOL
  
  AM_PROG_CC_C_O
  
--- 166,172 ----
  # Enable Win32 DLL on MS Windows - FIXME
  AC_LIBTOOL_WIN32_DLL
  
! LT_INIT
  
  AM_PROG_CC_C_O
  
*************** AC_CHECK_HEADER(stdio.h,:,
*** 206,213 ****
    [AC_MSG_ERROR([Can't find stdio.h.
  You must have a usable C system for the target already installed, at least
  including headers and, preferably, the library, before you can configure
! the Objective C runtime system.  If necessary, install gcc now with 
! \`LANGUAGES=c', then the target library, then build with \`LANGUAGES=objc'.])])
  
  AC_HEADER_STDC
  
--- 206,213 ----
    [AC_MSG_ERROR([Can't find stdio.h.
  You must have a usable C system for the target already installed, at least
  including headers and, preferably, the library, before you can configure
! the Objective C runtime system.  If necessary, install gcc now with
! `LANGUAGES=c', then the target library, then build with `LANGUAGES=objc'.])])
  
  AC_HEADER_STDC
  
diff -Nrcpad gcc-17-20260628/libphobos/ChangeLog gcc-17-20260705/libphobos/ChangeLog
*** gcc-17-20260628/libphobos/ChangeLog	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libphobos/ChangeLog	Sun Jul  5 22:32:18 2026
***************
*** 1,3 ****
--- 1,14 ----
+ 2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* configure: Regenerate.
+ 	* configure.ac: Replace AC_CANONICAL_SYSTEM with AC_CANONICAL_TARGET.
+ 	Remove redundant AM_PROG_LIBTOOL.  Replace AC_FOREACH with m4_foreach_w.
+ 	* m4/druntime.m4: Replace AC_HELP_STRING AS_HELP_STRING.  Replace
+ 	AC_TRY_COMPILE with AC_COMPILE_IFELSE.
+ 	* m4/druntime/cpu.m4: Replace AC_TRY_LINK with AC_LINK_IFELSE.
+ 	* m4/druntime/os.m4: Replace AC_TRY_COMPILE with AC_COMPILE_IFELSE.
+ 
  2026-04-21  Iain Buclaw  <ibuclaw@gdcproject.org>
  
  	* libdruntime/MERGE: Merge upstream druntime d1fbbb1a2f.
diff -Nrcpad gcc-17-20260628/libphobos/configure gcc-17-20260705/libphobos/configure
*** gcc-17-20260628/libphobos/configure	Sun Jun 28 22:32:22 2026
--- gcc-17-20260705/libphobos/configure	Sun Jul  5 22:32:22 2026
*************** test -n "$target_alias" &&
*** 2647,2653 ****
    test "$program_prefix$program_suffix$program_transform_name" = \
      NONENONEs,x,x, &&
    program_prefix=${target_alias}-
- 
  # Expand $ac_aux_dir to an absolute path.
  am_aux_dir=`cd "$ac_aux_dir" && pwd`
  
--- 2647,2652 ----
*************** else
*** 12253,12259 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12256 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 12252,12258 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12255 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 12359,12365 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12362 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 12358,12364 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12361 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** CC="$lt_save_CC"
*** 12597,12603 ****
  
  
  
- 
  
    gdc_save_DFLAGS=$GDCFLAGS
    GDCFLAGS="-fno-druntime -nostdinc -I $phobos_cv_abs_srcdir/libdruntime  $GDCFLAGS"
--- 12596,12601 ----
diff -Nrcpad gcc-17-20260628/libphobos/configure.ac gcc-17-20260705/libphobos/configure.ac
*** gcc-17-20260628/libphobos/configure.ac	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libphobos/configure.ac	Sun Jul  5 22:32:18 2026
*************** AC_CONFIG_SRCDIR(libdruntime/gcc/attribu
*** 31,37 ****
  AC_CONFIG_HEADERS(config.h)
  
  AM_ENABLE_MULTILIB(, ..)
! AC_CANONICAL_SYSTEM
  AC_USE_SYSTEM_EXTENSIONS
  
  target_alias=${target_alias-$target}
--- 31,37 ----
  AC_CONFIG_HEADERS(config.h)
  
  AM_ENABLE_MULTILIB(, ..)
! AC_CANONICAL_TARGET
  AC_USE_SYSTEM_EXTENSIONS
  
  target_alias=${target_alias-$target}
*************** AC_SUBST(CFLAGS_FOR_BUILD)
*** 86,92 ****
  
  # Enable libtool
  LT_INIT(dlopen)
- AM_PROG_LIBTOOL
  WITH_LOCAL_DRUNTIME([LT_LANG([D])], [])
  AC_SUBST(enable_shared)
  AC_SUBST(enable_static)
--- 86,91 ----
*************** AC_CONFIG_FILES([testsuite/testsuite_fla
*** 288,294 ****
  # append it here.  Only modify Makefiles that have just been created.
  #
  # Also, get rid of this simulated-VPATH thing that automake does.
! AC_CONFIG_FILES(AC_FOREACH([DIR], [libdruntime src testsuite], [DIR/Makefile ]),
    [cat > vpsed$$ << \_EOF
  s!`test -f '$<' || echo '$(srcdir)/'`!!
  _EOF
--- 287,293 ----
  # append it here.  Only modify Makefiles that have just been created.
  #
  # Also, get rid of this simulated-VPATH thing that automake does.
! AC_CONFIG_FILES(m4_foreach_w([DIR], [libdruntime src testsuite], [DIR/Makefile ]),
    [cat > vpsed$$ << \_EOF
  s!`test -f '$<' || echo '$(srcdir)/'`!!
  _EOF
diff -Nrcpad gcc-17-20260628/libphobos/m4/druntime/cpu.m4 gcc-17-20260705/libphobos/m4/druntime/cpu.m4
*** gcc-17-20260628/libphobos/m4/druntime/cpu.m4	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libphobos/m4/druntime/cpu.m4	Sun Jul  5 22:32:18 2026
*************** AC_DEFUN([DRUNTIME_ENABLE_ATOMIC_BUILTIN
*** 63,77 ****
    # used should be checked.
    AC_MSG_CHECKING([for atomic builtins for byte])
    AC_CACHE_VAL(druntime_cv_atomic_byte, [
!     AC_TRY_LINK(
!       [import gcc.builtins;], [
        shared(byte) c1;
         byte c2, c3;
         __atomic_compare_exchange_1(&c1, &c2, c3, false, 5, 5);
         __atomic_load_1(&c1, 5);
         __atomic_store_1(&c1, c2, 5);
         return 0;
!       ],
        [druntime_cv_atomic_byte=yes],
        [druntime_cv_atomic_byte=no])
    ])
--- 63,77 ----
    # used should be checked.
    AC_MSG_CHECKING([for atomic builtins for byte])
    AC_CACHE_VAL(druntime_cv_atomic_byte, [
!     AC_LINK_IFELSE([AC_LANG_PROGRAM(
!       [[import gcc.builtins;]], [[
        shared(byte) c1;
         byte c2, c3;
         __atomic_compare_exchange_1(&c1, &c2, c3, false, 5, 5);
         __atomic_load_1(&c1, 5);
         __atomic_store_1(&c1, c2, 5);
         return 0;
!       ]])],
        [druntime_cv_atomic_byte=yes],
        [druntime_cv_atomic_byte=no])
    ])
*************** AC_DEFUN([DRUNTIME_ENABLE_ATOMIC_BUILTIN
*** 79,93 ****
  
    AC_MSG_CHECKING([for atomic builtins for short])
    AC_CACHE_VAL(druntime_cv_atomic_short, [
!     AC_TRY_LINK(
!       [import gcc.builtins;], [
        shared(short) c1;
         short c2, c3;
         __atomic_compare_exchange_2(&c1, &c2, c3, false, 5, 5);
         __atomic_load_2(&c1, 5);
         __atomic_store_2(&c1, c2, 5);
         return 0;
!       ],
        [druntime_cv_atomic_short=yes],
        [druntime_cv_atomic_short=no])
    ])
--- 79,93 ----
  
    AC_MSG_CHECKING([for atomic builtins for short])
    AC_CACHE_VAL(druntime_cv_atomic_short, [
!     AC_LINK_IFELSE([AC_LANG_PROGRAM(
!       [[import gcc.builtins;]], [[
        shared(short) c1;
         short c2, c3;
         __atomic_compare_exchange_2(&c1, &c2, c3, false, 5, 5);
         __atomic_load_2(&c1, 5);
         __atomic_store_2(&c1, c2, 5);
         return 0;
!       ]])],
        [druntime_cv_atomic_short=yes],
        [druntime_cv_atomic_short=no])
    ])
*************** AC_DEFUN([DRUNTIME_ENABLE_ATOMIC_BUILTIN
*** 95,109 ****
  
    AC_MSG_CHECKING([for atomic builtins for int])
    AC_CACHE_VAL(druntime_cv_atomic_int, [
!     AC_TRY_LINK(
!       [import gcc.builtins;], [
        shared(int) c1;
         int c2, c3;
         __atomic_compare_exchange_4(&c1, &c2, c3, false, 5, 5);
         __atomic_load_4(&c1, 5);
         __atomic_store_4(&c1, c2, 5);
         return 0;
!       ],
        [druntime_cv_atomic_int=yes],
        [druntime_cv_atomic_int=no])
    ])
--- 95,109 ----
  
    AC_MSG_CHECKING([for atomic builtins for int])
    AC_CACHE_VAL(druntime_cv_atomic_int, [
!     AC_LINK_IFELSE([AC_LANG_PROGRAM(
!       [[import gcc.builtins;]], [[
        shared(int) c1;
         int c2, c3;
         __atomic_compare_exchange_4(&c1, &c2, c3, false, 5, 5);
         __atomic_load_4(&c1, 5);
         __atomic_store_4(&c1, c2, 5);
         return 0;
!       ]])],
        [druntime_cv_atomic_int=yes],
        [druntime_cv_atomic_int=no])
    ])
*************** AC_DEFUN([DRUNTIME_ENABLE_ATOMIC_BUILTIN
*** 111,125 ****
  
    AC_MSG_CHECKING([for atomic builtins for long])
    AC_CACHE_VAL(druntime_cv_atomic_long, [
!     AC_TRY_LINK(
!       [import gcc.builtins;], [
         shared(long) c1;
         long c2, c3;
         __atomic_compare_exchange_8(&c1, &c2, c3, false, 5, 5);
         __atomic_load_8(&c1, 5);
         __atomic_store_8(&c1, c2, 5);
         return 0;
!       ],
        [druntime_cv_atomic_long=yes],
        [druntime_cv_atomic_long=no])
    ])
--- 111,125 ----
  
    AC_MSG_CHECKING([for atomic builtins for long])
    AC_CACHE_VAL(druntime_cv_atomic_long, [
!     AC_LINK_IFELSE([AC_LANG_PROGRAM(
!       [[import gcc.builtins;]], [[
         shared(long) c1;
         long c2, c3;
         __atomic_compare_exchange_8(&c1, &c2, c3, false, 5, 5);
         __atomic_load_8(&c1, 5);
         __atomic_store_8(&c1, c2, 5);
         return 0;
!       ]])],
        [druntime_cv_atomic_long=yes],
        [druntime_cv_atomic_long=no])
    ])
diff -Nrcpad gcc-17-20260628/libphobos/m4/druntime/os.m4 gcc-17-20260705/libphobos/m4/druntime/os.m4
*** gcc-17-20260628/libphobos/m4/druntime/os.m4	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libphobos/m4/druntime/os.m4	Sun Jul  5 22:32:18 2026
*************** AC_DEFUN([DRUNTIME_OS_FEATURES],
*** 133,142 ****
      linux*)  druntime_target_os_parsed="linux"
        AC_MSG_CHECKING([for getrandom])
        AC_LANG_PUSH([C])
!       AC_TRY_COMPILE([#include <sys/syscall.h>
! #include <unistd.h>],[
          syscall (__NR_getrandom);
!       ],
          [AC_MSG_RESULT([yes])],
          [AC_MSG_RESULT([no])
           OS_DFLAGS=-fversion=linux_legacy_emulate_getrandom])
--- 133,142 ----
      linux*)  druntime_target_os_parsed="linux"
        AC_MSG_CHECKING([for getrandom])
        AC_LANG_PUSH([C])
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/syscall.h>
! #include <unistd.h>]], [[
          syscall (__NR_getrandom);
!       ]])],
          [AC_MSG_RESULT([yes])],
          [AC_MSG_RESULT([no])
           OS_DFLAGS=-fversion=linux_legacy_emulate_getrandom])
*************** AC_DEFUN([DRUNTIME_OS_ARM_EABI_UNWINDER]
*** 156,166 ****
  [
    AC_LANG_PUSH([C])
    AC_MSG_CHECKING([for ARM unwinder])
!   AC_TRY_COMPILE([#include <unwind.h>],[
    #if __ARM_EABI_UNWINDER__
    #error Yes, it is.
    #endif
!   ],
      [AC_MSG_RESULT([no])
       DCFG_ARM_EABI_UNWINDER=false],
      [AC_MSG_RESULT([yes])
--- 156,166 ----
  [
    AC_LANG_PUSH([C])
    AC_MSG_CHECKING([for ARM unwinder])
!   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unwind.h>]],[[
    #if __ARM_EABI_UNWINDER__
    #error Yes, it is.
    #endif
!   ]])],
      [AC_MSG_RESULT([no])
       DCFG_ARM_EABI_UNWINDER=false],
      [AC_MSG_RESULT([yes])
diff -Nrcpad gcc-17-20260628/libphobos/m4/druntime.m4 gcc-17-20260705/libphobos/m4/druntime.m4
*** gcc-17-20260628/libphobos/m4/druntime.m4	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libphobos/m4/druntime.m4	Sun Jul  5 22:32:18 2026
*************** AC_DEFUN([DRUNTIME_INSTALL_DIRECTORIES],
*** 62,68 ****
    AC_SUBST(gcc_version)
  
    AC_ARG_WITH([cross-host],
!     AC_HELP_STRING([--with-cross-host=HOST],
                     [configuring with a cross compiler]))
  
    libphobos_toolexecdir=no
--- 62,68 ----
    AC_SUBST(gcc_version)
  
    AC_ARG_WITH([cross-host],
!     AS_HELP_STRING([--with-cross-host=HOST],
                     [configuring with a cross compiler]))
  
    libphobos_toolexecdir=no
*************** AC_DEFUN([DRUNTIME_INSTALL_DIRECTORIES],
*** 70,76 ****
  
    AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
    AC_ARG_ENABLE([version-specific-runtime-libs],
!     AC_HELP_STRING([--enable-version-specific-runtime-libs],
  		   [Specify that runtime libraries should be installed in a compiler-specific directory]),
      [case "$enableval" in
        yes) version_specific_libs=yes ;;
--- 70,76 ----
  
    AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
    AC_ARG_ENABLE([version-specific-runtime-libs],
!     AS_HELP_STRING([--enable-version-specific-runtime-libs],
  		   [Specify that runtime libraries should be installed in a compiler-specific directory]),
      [case "$enableval" in
        yes) version_specific_libs=yes ;;
*************** AC_DEFUN([DRUNTIME_SECTION_FLAGS],
*** 125,132 ****
    WITH_LOCAL_DRUNTIME([
      AC_LANG_PUSH([D])
      GDCFLAGS="$GDCFLAGS -g -Werror -ffunction-sections -fdata-sections"
!     AC_TRY_COMPILE([int foo; void bar() { }],[return 0;],
! 		   [ac_fdsections=yes], [ac_fdsections=no])
      if test "x$ac_fdsections" = "xyes"; then
        SECTION_FLAGS='-ffunction-sections -fdata-sections'
      fi
--- 125,132 ----
    WITH_LOCAL_DRUNTIME([
      AC_LANG_PUSH([D])
      GDCFLAGS="$GDCFLAGS -g -Werror -ffunction-sections -fdata-sections"
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[int foo; void bar() { }]], [[return 0;]])],
! 		      [ac_fdsections=yes], [ac_fdsections=no])
      if test "x$ac_fdsections" = "xyes"; then
        SECTION_FLAGS='-ffunction-sections -fdata-sections'
      fi
diff -Nrcpad gcc-17-20260628/libquadmath/ChangeLog gcc-17-20260705/libquadmath/ChangeLog
*** gcc-17-20260628/libquadmath/ChangeLog	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libquadmath/ChangeLog	Sun Jul  5 22:32:18 2026
***************
*** 1,3 ****
--- 1,10 ----
+ 2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* configure.ac: Replace AM_PROG_LIBTOOL with LT_INIT.  Replace
+ 	AC_LANG_C with AC_LANG([C]).  Replace AC_TRY_COMPILE with
+ 	AC_COMPILE_IFELSE.  Replace AC_TRY_LINK with AC_LINK_IFELSE.
+ 
  2026-05-30  Dhruv Chawla  <dhruvc@nvidia.com>
  
  	* math/powq.c: Fix typos.
diff -Nrcpad gcc-17-20260628/libquadmath/configure.ac gcc-17-20260705/libquadmath/configure.ac
*** gcc-17-20260628/libquadmath/configure.ac	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libquadmath/configure.ac	Sun Jul  5 22:32:19 2026
*************** AM_CONDITIONAL(BUILD_INFO, test $gcc_cv_
*** 55,61 ****
  ACX_BUGURL([https://gcc.gnu.org/bugs/])
  
  # Configure libtool
! AM_PROG_LIBTOOL
  ACX_LT_HOST_FLAGS
  AC_SUBST(enable_shared)
  AC_SUBST(enable_static)
--- 55,61 ----
  ACX_BUGURL([https://gcc.gnu.org/bugs/])
  
  # Configure libtool
! LT_INIT
  ACX_LT_HOST_FLAGS
  AC_SUBST(enable_shared)
  AC_SUBST(enable_static)
*************** AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH],
*** 63,69 ****
  
  AM_MAINTAINER_MODE
  
! AC_LANG_C
  # The same as in boehm-gc and libstdc++. Have to borrow it from there.
  # We must force CC to /not/ be precious variables; otherwise
  # the wrong, non-multilib-adjusted value will be used in multilibs.
--- 63,69 ----
  
  AM_MAINTAINER_MODE
  
! AC_LANG([C])
  # The same as in boehm-gc and libstdc++. Have to borrow it from there.
  # We must force CC to /not/ be precious variables; otherwise
  # the wrong, non-multilib-adjusted value will be used in multilibs.
*************** fi
*** 178,185 ****
  saved_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS -Werror"
  AC_MSG_CHECKING([whether hidden visibility is supported])
! AC_TRY_COMPILE([
! void __attribute__((visibility ("hidden"))) bar (void) {}],,
  [quadmath_hidden=yes],[quadmath_hidden=no])
  AC_MSG_RESULT($quadmath_hidden)
  if test x$quadmath_hidden = xyes; then
--- 178,185 ----
  saved_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS -Werror"
  AC_MSG_CHECKING([whether hidden visibility is supported])
! AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
! void __attribute__((visibility ("hidden"))) bar (void) {}]] [[]])],
  [quadmath_hidden=yes],[quadmath_hidden=no])
  AC_MSG_RESULT($quadmath_hidden)
  if test x$quadmath_hidden = xyes; then
*************** FOO_1.0 {
*** 207,213 ****
    global: *foo*; bar; local: *;
  };
  EOF
!     AC_TRY_LINK([int foo;],[],[quadmath_use_symver=gnu],[quadmath_use_symver=no])
      if test x$quadmath_use_symver = xno; then
        case "$target_os" in
          solaris2*)
--- 207,216 ----
    global: *foo*; bar; local: *;
  };
  EOF
!     AC_LINK_IFELSE(
!       [AC_LANG_PROGRAM([[int foo;]], [[]])],
!       [quadmath_use_symver=gnu],
!       [quadmath_use_symver=no])
      if test x$quadmath_use_symver = xno; then
        case "$target_os" in
          solaris2*)
*************** FOO_1.0 {
*** 219,225 ****
    global: foo; local: *;
  };
  EOF
!           AC_TRY_LINK([int foo;],[],[quadmath_use_symver=sun],[quadmath_use_symver=no])
            ;;
        esac
      fi
--- 222,231 ----
    global: foo; local: *;
  };
  EOF
!           AC_LINK_IFELSE(
!             [AC_LANG_PROGRAM([[int foo;]], [[]])],
!             [quadmath_use_symver=sun],
!             [quadmath_use_symver=no])
            ;;
        esac
      fi
*************** AM_CONDITIONAL(BUILD_LIBQUADMATH, [test
*** 271,289 ****
  
  # Check for printf hook support.
  AC_MSG_CHECKING([whether printf hooks are supported])
! AC_TRY_COMPILE([
  #include <printf.h>
  #include <stdarg.h>
  #include <stdlib.h>
  extern void flt128_va (void *, va_list *);
  extern int flt128_ais (const struct printf_info *, size_t, int *, int *);
  extern int flt128_printf_fp (FILE *, const struct printf_info *, const void *const *);
! ],[
  int pa_flt128 = register_printf_type (flt128_va);
  int mod_Q = register_printf_modifier (L"Q");
  int res = register_printf_specifier ('f', flt128_printf_fp, flt128_ais);
  struct printf_info info = { .user = -1 };
! ],
  [quadmath_printf_hooks=yes],[quadmath_printf_hooks=no])
  AC_MSG_RESULT($quadmath_printf_hooks)
  if test x$quadmath_printf_hooks = xyes; then
--- 277,295 ----
  
  # Check for printf hook support.
  AC_MSG_CHECKING([whether printf hooks are supported])
! AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
  #include <printf.h>
  #include <stdarg.h>
  #include <stdlib.h>
  extern void flt128_va (void *, va_list *);
  extern int flt128_ais (const struct printf_info *, size_t, int *, int *);
  extern int flt128_printf_fp (FILE *, const struct printf_info *, const void *const *);
! ]], [[
  int pa_flt128 = register_printf_type (flt128_va);
  int mod_Q = register_printf_modifier (L"Q");
  int res = register_printf_specifier ('f', flt128_printf_fp, flt128_ais);
  struct printf_info info = { .user = -1 };
! ]])],
  [quadmath_printf_hooks=yes],[quadmath_printf_hooks=no])
  AC_MSG_RESULT($quadmath_printf_hooks)
  if test x$quadmath_printf_hooks = xyes; then
*************** fi
*** 293,299 ****
  # Check for whether locale support for quadmath_snprintf or Q printf hooks
  # should be provided.
  AC_MSG_CHECKING([whether nl_langinfo should be used])
! AC_TRY_COMPILE([#include <langinfo.h>],[
  const char *s;
  s = nl_langinfo (DECIMAL_POINT);
  s = nl_langinfo (MON_DECIMAL_POINT);
--- 299,305 ----
  # Check for whether locale support for quadmath_snprintf or Q printf hooks
  # should be provided.
  AC_MSG_CHECKING([whether nl_langinfo should be used])
! AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <langinfo.h>]], [[
  const char *s;
  s = nl_langinfo (DECIMAL_POINT);
  s = nl_langinfo (MON_DECIMAL_POINT);
*************** s = nl_langinfo (MON_GROUPING);
*** 302,308 ****
  s = nl_langinfo (THOUSANDS_SEP);
  s = nl_langinfo (MON_THOUSANDS_SEP);
  (void) s;
! ],
  [quadmath_use_nl_langinfo=yes],[quadmath_use_nl_langinfo=no])
  AC_MSG_RESULT($quadmath_use_nl_langinfo)
  if test x$quadmath_use_nl_langinfo = xyes; then
--- 308,314 ----
  s = nl_langinfo (THOUSANDS_SEP);
  s = nl_langinfo (MON_THOUSANDS_SEP);
  (void) s;
! ]])],
  [quadmath_use_nl_langinfo=yes],[quadmath_use_nl_langinfo=no])
  AC_MSG_RESULT($quadmath_use_nl_langinfo)
  if test x$quadmath_use_nl_langinfo = xyes; then
*************** if test x$quadmath_use_nl_langinfo = xye
*** 310,323 ****
  fi
  
  AC_MSG_CHECKING([whether nl_langinfo should be used for wide char locale info])
! AC_TRY_COMPILE([#include <langinfo.h>],[
  const char *s;
  s = nl_langinfo (_NL_NUMERIC_DECIMAL_POINT_WC);
  s = nl_langinfo (_NL_MONETARY_DECIMAL_POINT_WC);
  s = nl_langinfo (_NL_NUMERIC_THOUSANDS_SEP_WC);
  s = nl_langinfo (_NL_MONETARY_THOUSANDS_SEP_WC);
  (void) s;
! ],
  [quadmath_use_nl_langinfo_wc=yes],[quadmath_use_nl_langinfo_wc=no])
  AC_MSG_RESULT($quadmath_use_nl_langinfo_wc)
  if test x$quadmath_use_nl_langinfo_wc = xyes; then
--- 316,329 ----
  fi
  
  AC_MSG_CHECKING([whether nl_langinfo should be used for wide char locale info])
! AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <langinfo.h>]], [[
  const char *s;
  s = nl_langinfo (_NL_NUMERIC_DECIMAL_POINT_WC);
  s = nl_langinfo (_NL_MONETARY_DECIMAL_POINT_WC);
  s = nl_langinfo (_NL_NUMERIC_THOUSANDS_SEP_WC);
  s = nl_langinfo (_NL_MONETARY_THOUSANDS_SEP_WC);
  (void) s;
! ]])],
  [quadmath_use_nl_langinfo_wc=yes],[quadmath_use_nl_langinfo_wc=no])
  AC_MSG_RESULT($quadmath_use_nl_langinfo_wc)
  if test x$quadmath_use_nl_langinfo_wc = xyes; then
*************** if test x$quadmath_use_nl_langinfo_wc =
*** 325,331 ****
  fi
  
  AC_MSG_CHECKING([whether localeconv should be used])
! AC_TRY_COMPILE([#include <locale.h>],[
  const struct lconv *l = localeconv ();
  const char *s;
  s = l->decimal_point;
--- 331,337 ----
  fi
  
  AC_MSG_CHECKING([whether localeconv should be used])
! AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <locale.h>]], [[
  const struct lconv *l = localeconv ();
  const char *s;
  s = l->decimal_point;
*************** s = l->mon_grouping;
*** 335,341 ****
  s = l->thousands_sep;
  s = l->mon_thousands_sep;
  (void) s;
! ],
  [quadmath_use_localeconv=yes],[quadmath_use_localeconv=no])
  AC_MSG_RESULT($quadmath_use_localeconv)
  if test x$quadmath_use_localeconv = xyes; then
--- 341,347 ----
  s = l->thousands_sep;
  s = l->mon_thousands_sep;
  (void) s;
! ]])],
  [quadmath_use_localeconv=yes],[quadmath_use_localeconv=no])
  AC_MSG_RESULT($quadmath_use_localeconv)
  if test x$quadmath_use_localeconv = xyes; then
*************** fi
*** 345,355 ****
  # Check for whether i18n number rewriting support for quadmath_snprintf
  # or Q printf hooks should be provided.
  AC_MSG_CHECKING([whether i18n number rewriting support for quadmath_snprintf should be added])
! AC_TRY_COMPILE([#include <langinfo.h>
  #include <limits.h>
  #include <string.h>
  #include <wchar.h>
! #include <wctype.h>],[
  const char *s;
  char decimal[MB_LEN_MAX];
  wctrans_t map = wctrans ("to_outpunct");
--- 351,361 ----
  # Check for whether i18n number rewriting support for quadmath_snprintf
  # or Q printf hooks should be provided.
  AC_MSG_CHECKING([whether i18n number rewriting support for quadmath_snprintf should be added])
! AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <langinfo.h>
  #include <limits.h>
  #include <string.h>
  #include <wchar.h>
! #include <wctype.h>]], [[
  const char *s;
  char decimal[MB_LEN_MAX];
  wctrans_t map = wctrans ("to_outpunct");
*************** s = nl_langinfo (_NL_CTYPE_OUTDIGIT0_MB)
*** 361,367 ****
  s = nl_langinfo (_NL_CTYPE_OUTDIGIT0_WC);
  s = nl_langinfo (_NL_CTYPE_MB_CUR_MAX);
  (void) s;
! ],
  [quadmath_use_i18n_number_h=yes],[quadmath_use_i18n_number_h=no])
  AC_MSG_RESULT($quadmath_use_i18n_number_h)
  if test x$quadmath_use_i18n_number_h = xyes; then
--- 367,373 ----
  s = nl_langinfo (_NL_CTYPE_OUTDIGIT0_WC);
  s = nl_langinfo (_NL_CTYPE_MB_CUR_MAX);
  (void) s;
! ]])],
  [quadmath_use_i18n_number_h=yes],[quadmath_use_i18n_number_h=no])
  AC_MSG_RESULT($quadmath_use_i18n_number_h)
  if test x$quadmath_use_i18n_number_h = xyes; then
diff -Nrcpad gcc-17-20260628/libsanitizer/ChangeLog gcc-17-20260705/libsanitizer/ChangeLog
*** gcc-17-20260628/libsanitizer/ChangeLog	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libsanitizer/ChangeLog	Sun Jul  5 22:32:19 2026
***************
*** 1,3 ****
--- 1,10 ----
+ 2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* configure.ac: Replace AM_PROG_LIBTOOL with LT_INIT.  Replace
+ 	AC_TRY_COMPILE with AC_COMPILE_IFELSE.  Replace AC_FOREACH with
+ 	m4_foreach_w.
+ 
  2026-06-02  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
  
  	* sanitizer_common/sanitizer_platform_limits_solaris.cpp:
diff -Nrcpad gcc-17-20260628/libsanitizer/configure.ac gcc-17-20260705/libsanitizer/configure.ac
*** gcc-17-20260628/libsanitizer/configure.ac	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libsanitizer/configure.ac	Sun Jul  5 22:32:19 2026
*************** AM_PROG_AS
*** 75,81 ****
  AC_PROG_RANLIB
  
  AC_LIBTOOL_DLOPEN
! AM_PROG_LIBTOOL
  
  AC_PROG_AWK
  case "$AWK" in
--- 75,81 ----
  AC_PROG_RANLIB
  
  AC_LIBTOOL_DLOPEN
! LT_INIT
  
  AC_PROG_AWK
  case "$AWK" in
*************** case "$target" in
*** 163,174 ****
    *-*-linux*)
      # Some old Linux distributions miss required syscalls.
      sanitizer_supported=no
!     AC_TRY_COMPILE([#include <sys/syscall.h>
! #include <unistd.h>],[
        syscall (__NR_gettid);
        syscall (__NR_futex);
        syscall (__NR_exit_group);
!     ], [sanitizer_supported=yes])
      ;;
    *)
      sanitizer_supported=yes
--- 163,174 ----
    *-*-linux*)
      # Some old Linux distributions miss required syscalls.
      sanitizer_supported=no
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/syscall.h>
! #include <unistd.h>]], [[
        syscall (__NR_gettid);
        syscall (__NR_futex);
        syscall (__NR_exit_group);
!     ]])], [sanitizer_supported=yes])
      ;;
    *)
      sanitizer_supported=yes
*************** AH_BOTTOM([#include "libbacktrace/backtr
*** 370,376 ****
  AC_CONFIG_FILES([Makefile libsanitizer.spec libbacktrace/backtrace-supported.h])
  AC_CONFIG_HEADER(config.h)
  
! AC_CONFIG_FILES(AC_FOREACH([DIR], [interception sanitizer_common libbacktrace lsan asan ubsan], [DIR/Makefile ]),
    [cat > vpsed$$ << \_EOF
  s!`test -f '$<' || echo '$(srcdir)/'`!!
  _EOF
--- 370,376 ----
  AC_CONFIG_FILES([Makefile libsanitizer.spec libbacktrace/backtrace-supported.h])
  AC_CONFIG_HEADER(config.h)
  
! AC_CONFIG_FILES(m4_foreach_w([DIR], [interception sanitizer_common libbacktrace lsan asan ubsan], [DIR/Makefile ]),
    [cat > vpsed$$ << \_EOF
  s!`test -f '$<' || echo '$(srcdir)/'`!!
  _EOF
*************** _EOF
*** 384,390 ****
  ])
  
  if test "x$TSAN_SUPPORTED" = "xyes"; then
!   AC_CONFIG_FILES(AC_FOREACH([DIR], [tsan], [DIR/Makefile ]), 
      [cat > vpsed$$ << \_EOF
  s!`test -f '$<' || echo '$(srcdir)/'`!!
  _EOF
--- 384,390 ----
  ])
  
  if test "x$TSAN_SUPPORTED" = "xyes"; then
!   AC_CONFIG_FILES(m4_foreach_w([DIR], [tsan], [DIR/Makefile ]),
      [cat > vpsed$$ << \_EOF
  s!`test -f '$<' || echo '$(srcdir)/'`!!
  _EOF
*************** _EOF
*** 399,405 ****
  fi
  
  if test "x$HWASAN_SUPPORTED" = "xyes"; then
!   AC_CONFIG_FILES(AC_FOREACH([DIR], [hwasan], [DIR/Makefile ]), 
      [cat > vpsed$$ << \_EOF
  s!`test -f '$<' || echo '$(srcdir)/'`!!
  _EOF
--- 399,405 ----
  fi
  
  if test "x$HWASAN_SUPPORTED" = "xyes"; then
!   AC_CONFIG_FILES(m4_foreach_w([DIR], [hwasan], [DIR/Makefile ]),
      [cat > vpsed$$ << \_EOF
  s!`test -f '$<' || echo '$(srcdir)/'`!!
  _EOF
diff -Nrcpad gcc-17-20260628/libssp/ChangeLog gcc-17-20260705/libssp/ChangeLog
*** gcc-17-20260628/libssp/ChangeLog	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libssp/ChangeLog	Sun Jul  5 22:32:19 2026
***************
*** 1,3 ****
--- 1,16 ----
+ 2026-07-03  WHR  <whr@rivoreo.one>
+ 	    Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	PR other/116547
+ 	* ssp.c: Include stdlib.h for alloca(3).
+ 
+ 2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* configure.ac: Replace AC_LANG_C with AC_LANG([C]).  Replace
+ 	AC_TRY_COMPILE with AC_COMPILE_IFELSE.  Replace AC_TRY_LINK with
+ 	AC_LINK_IFELSE.  Replace AM_PROG_LIBTOOL with LT_INIT.
+ 
  2026-05-05  H.J. Lu  <hjl.tools@gmail.com>
  
  	PR c/121911
diff -Nrcpad gcc-17-20260628/libssp/configure.ac gcc-17-20260705/libssp/configure.ac
*** gcc-17-20260628/libssp/configure.ac	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libssp/configure.ac	Sun Jul  5 22:32:19 2026
*************** AC_SUBST(target_alias)
*** 31,37 ****
  
  AC_CONFIG_HEADERS(config.h)
  
! AC_LANG_C
  # The same as in boehm-gc and libstdc++. Have to borrow it from there.
  # We must force CC to /not/ be precious variables; otherwise
  # the wrong, non-multilib-adjusted value will be used in multilibs.
--- 31,37 ----
  
  AC_CONFIG_HEADERS(config.h)
  
! AC_LANG([C])
  # The same as in boehm-gc and libstdc++. Have to borrow it from there.
  # We must force CC to /not/ be precious variables; otherwise
  # the wrong, non-multilib-adjusted value will be used in multilibs.
*************** AC_PROG_CPP
*** 52,62 ****
  AC_MSG_CHECKING([whether -fstack-protector works])
  save_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS -fstack-protector -Werror"
! AC_TRY_COMPILE([
  void __attribute__((noinline)) bar (char *x)
  {
    __builtin_memset (x, 0, 64);
! }],[char buf[64]; bar (buf);],
  [AC_MSG_RESULT(yes)],
  [AC_MSG_RESULT(no)])
  CFLAGS="$save_CFLAGS"
--- 52,62 ----
  AC_MSG_CHECKING([whether -fstack-protector works])
  save_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS -fstack-protector -Werror"
! AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
  void __attribute__((noinline)) bar (char *x)
  {
    __builtin_memset (x, 0, 64);
! }]], [[char buf[64]; bar (buf);]])],
  [AC_MSG_RESULT(yes)],
  [AC_MSG_RESULT(no)])
  CFLAGS="$save_CFLAGS"
*************** XCFLAGS="$XCFLAGS $CET_FLAGS"
*** 67,74 ****
  AC_SUBST(XCFLAGS)
  
  AC_MSG_CHECKING([whether hidden visibility is supported])
! AC_TRY_COMPILE([
! void __attribute__((visibility ("hidden"))) bar (void) {}],,
  [ssp_hidden=yes],[ssp_hidden=no])
  AC_MSG_RESULT($ssp_hidden)
  if test x$ssp_hidden = xyes; then
--- 67,74 ----
  AC_SUBST(XCFLAGS)
  
  AC_MSG_CHECKING([whether hidden visibility is supported])
! AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
! void __attribute__((visibility ("hidden"))) bar (void) {}]], [[]])],
  [ssp_hidden=yes],[ssp_hidden=no])
  AC_MSG_RESULT($ssp_hidden)
  if test x$ssp_hidden = xyes; then
*************** FOO_1.0 {
*** 94,100 ****
    global: *foo*; bar; local: *;
  };
  EOF
!     AC_TRY_LINK([int foo;],[],[ssp_use_symver=gnu],[ssp_use_symver=no])
      if test x$ssp_use_symver = xno; then
        case "$target_os" in
          solaris2*)
--- 94,103 ----
    global: *foo*; bar; local: *;
  };
  EOF
!     AC_LINK_IFELSE(
!       [AC_LANG_PROGRAM([[int foo;]], [[]])],
!       [ssp_use_symver=gnu],
!       [ssp_use_symver=no])
      if test x$ssp_use_symver = xno; then
        case "$target_os" in
          solaris2*)
*************** FOO_1.0 {
*** 106,112 ****
    global: foo; local: *;
  };
  EOF
!           AC_TRY_LINK([int foo;],[],[ssp_use_symver=sun],[ssp_use_symver=no])
  	  ;;
        esac
      fi
--- 109,118 ----
    global: foo; local: *;
  };
  EOF
!           AC_LINK_IFELSE(
!             [AC_LANG_PROGRAM([[int foo;]], [[]])],
!             [ssp_use_symver=sun],
!             [ssp_use_symver=no])
  	  ;;
        esac
      fi
*************** else
*** 159,165 ****
  fi
  AC_SUBST(ssp_have_usable_vsnprintf)
  
! AM_PROG_LIBTOOL
  ACX_LT_HOST_FLAGS
  AC_SUBST(enable_shared)
  AC_SUBST(enable_static)
--- 165,171 ----
  fi
  AC_SUBST(ssp_have_usable_vsnprintf)
  
! LT_INIT
  ACX_LT_HOST_FLAGS
  AC_SUBST(enable_shared)
  AC_SUBST(enable_static)
diff -Nrcpad gcc-17-20260628/libssp/ssp.c gcc-17-20260705/libssp/ssp.c
*** gcc-17-20260628/libssp/ssp.c	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libssp/ssp.c	Sun Jul  5 22:32:19 2026
*************** see the files COPYING3 and COPYING.RUNTI
*** 39,44 ****
--- 39,47 ----
  #ifdef HAVE_MALLOC_H
  # include <malloc.h>
  #endif
+ #ifdef HAVE_STDLIB_H
+ # include <stdlib.h>
+ #endif
  #ifdef HAVE_STRING_H
  # include <string.h>
  #endif
diff -Nrcpad gcc-17-20260628/libstdc++-v3/ChangeLog gcc-17-20260705/libstdc++-v3/ChangeLog
*** gcc-17-20260628/libstdc++-v3/ChangeLog	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libstdc++-v3/ChangeLog	Sun Jul  5 22:32:19 2026
***************
*** 1,3 ****
--- 1,303 ----
+ 2026-07-03  Nathan Myers  <ncm@cantrip.org>
+ 
+ 	PR libstdc++/126072
+ 	* testsuite/20_util/allocator/allocate_at_least.cc: Fix.
+ 
+ 2026-07-03  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	* include/std/format (_Pres_type::_Pres_p, _Pres_type::_Pres_P):
+ 	Change the values to which they are defined.
+ 	(__formatter_fp::format): Append 0x/0X if _M_type is _Pres_p/_Pres_P
+ 	respectively.
+ 	(__formatter_fp::_M_localize): Add __offset parameter representing
+ 	start of number value (after sign and prefix).
+ 	(__formatter_ptr::parse, __formatter_ptr::_M_default)
+ 	(__formatter_ptr::__formatter_ptr): Remove unused __type parameter,
+ 	and replace use of _Pres_p/P with _Pres_x/X.
+ 
+ 2026-07-03  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	* include/std/format (__formatter_int::format)
+ 	(__formatter_fp::format): For unrecognised _M_spec._M_type
+ 	values (default branch of switch) fallthrou to _Pres_none.
+ 
+ 2026-07-03  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	* include/bits/optional_ref.h (optional<_Tp&>::_S_from_ptr):
+ 	Define.
+ 	* include/bits/version.def (exception_ptr_cast): Bump value
+ 	to 202603.
+ 	* include/bits/version.h: Regenerate.
+ 	* libsupc++/exception_ptr.h (exception_ptr_cast)
+ 	[__cpp_lib_exception_ptr_cast >= 202603L]: Change return
+ 	type to optional<const _Ex&>.
+ 	* testsuite/18_support/exception_ptr/exception_ptr_cast.cc:
+ 	Modify to handle change in the return type, and add test
+ 	for type convertible to optional to reference to that value.
+ 
+ 2026-07-03  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	* include/Makefile.am (bits/optional_ref.h): Add.
+ 	* include/Makefile.in: Regenerate.
+ 	* include/bits/inplace_tags.h: New file.
+ 	* include/bits/utility.h (std::in_place_t, std::in_place)
+ 	(std::in_place_type_t, std::in_place_type)
+ 	(std::in_place_index_t, in_place_index): Move to
+ 	bits/inplace_tags.h.
+ 	* include/bits/optional_ref.h: New file.
+ 	* include/std/optional (std::nullopt_t, std::nullopt)
+ 	(std::__is_valid_contained_type_for_optional)
+ 	(std::_Optional_func, std::optional<_Tp&>)
+ 	(std::__is_optional_ref_v, std::__optional_ref_base):
+ 	Moved to bits/optional_ref.h.
+ 	(optional<_Tp&>::begin, optional<_Tp&>::end)
+ 	(optional<_Tp&>::value, optional<_Tp&>::value_or)
+ 	(optional<_Tp&>::and_then, optional<_Tp&>::transform)
+ 	(optional<_Tp&>::optional(_Optional_func<_Fn>, _Value)):
+ 	Define out of line.
+ 	(optional<_Tp&>::or_else): Define out of line, and
+ 	change requires from invocable<_Fn> to is_invocable_v<_Fn>.
+ 
+ 2026-07-02  Yuao Ma  <c8ef@outlook.com>
+ 
+ 	* include/bits/basic_string.h(append, assign): Add new
+ 	overloads.
+ 	* include/bits/cow_string.h(append, assign): Ditto.
+ 	* testsuite/21_strings/basic_string/modifiers/append/char/2.cc:
+ 	Test new overloads.
+ 	* testsuite/21_strings/basic_string/modifiers/append/wchar_t/2.cc:
+ 	Ditto.
+ 	* testsuite/21_strings/basic_string/modifiers/assign/char/3.cc:
+ 	Ditto.
+ 	* testsuite/21_strings/basic_string/modifiers/assign/wchar_t/3.cc:
+ 	Ditto.
+ 
+ 2026-07-02  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	* include/bits/version.def: Remove trailing whitespaces.
+ 	* include/std/inplace_vector: Likewise.
+ 	* testsuite/23_containers/inplace_vector/modifiers/single_insert.cc:
+ 	Likewise.
+ 
+ 2026-07-02  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* src/c++17/fs_ops.cc (windows_create_symlink): Adjust
+ 	preprocessor conditions to not define this at all unless
+ 	SYMBOLIC_LINK_FLAG_DIRECTORY is defined.
+ 	(fs::create_directory_symlink): Adjust preprocessor conditions
+ 	accordingly.
+ 	(fs::create_symlink): Likewise.
+ 
+ 2026-07-02  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* src/c++20/tzdb.cc (_Node::NumLeapSeconds::set_locked)
+ 	[ATOMIC_INT_LOCK_FREE == 2]: Use atomic store.
+ 	(_Node::NumLeapSeconds::set) [ATOMIC_INT_LOCK_FREE != 2]: Set
+ 	value directly instead of calling set_locked.
+ 
+ 2026-07-01  Matthias Kretz  <m.kretz@gsi.de>
+ 
+ 	* include/Makefile.am: Add bits/simd_bit.h, bits/simd_complex.h,
+ 	and bit/simd_math.
+ 	* include/Makefile.in: Regenerate.
+ 	* include/bits/simd_bit.h: New file.
+ 	* include/bits/simd_complex.h: New file.
+ 	* include/bits/simd_details.h (__complex_like): New concept.
+ 	(__vectorizable): Extend for complex types.
+ 	(_AbiVariant): Add _CxIleav and _CxCtgus variants.
+ 	(_ScalarAbi, _Abi): Add _S_is_cx_ileav and _S_is_cx_ctgus
+ 	members.
+ 	(_ArchTraits::_M_have_addsub): New.
+ 	(__native_abi): For __complex_like default to _CxIleav _Abi.
+ 	Derive the size from the native size for the complex's
+ 	value_type.
+ 	(__abi_rebind): Implement rebind to and from complex.
+ 	(__is_mask_conversion_explicit): Take _Cx* _AbiVariant into
+ 	account.
+ 	(__value_preserving_convertible_to): Also allow conversion to
+ 	complex.
+ 	(__simd_unsigned_integer): New.
+ 	(__simd_complex_value_type, __simd_complex): New.
+ 	* include/bits/simd_loadstore.h (unchecked_load): Use a cast to
+ 	the complex's value_type for converting loads to __complex_like.
+ 	* include/bits/simd_mask.h (basic_mask): Constrain partial
+ 	specializations to non-complex ABI tags.
+ 	(basic_mask::basic_mask): Add conversion from _CxIleav ABIs.
+ 	(_M_to_uint): Add option to interpret two mask elements as one
+ 	result bit. Make use of __x86_cvt_vecmask_to_bitmask.
+ 	(basic_mask::basic_mask): Add conversion from _CxCtgus and
+ 	_CxIleav masks.
+ 	(__select_impl): The complex specialization of basic_vec needs
+ 	_S_concat instead of _S_init.
+ 	(_M_reduce_count): Implement recursive reduction.
+ 	* include/bits/simd_mask_reductions.h (reduce_count): Fall back
+ 	to _M_reduce_count() for mask types without unary minus.
+ 	* include/bits/simd_math.h: New file.
+ 	* include/bits/simd_vec.h (basic_vec): Constrain partial
+ 	specializations to !__complex_like.
+ 	* include/bits/simd_x86.h (__x86_cvt_vecmask_to_bitmask): New.
+ 	* include/bits/vec_ops.h (__is_const_known): __complex_like
+ 	arguments are known if real and imag are known.
+ 	(_S_complex_negate_real, _S_complex_negate_imag, _S_addsub)
+ 	(_S_complex_real_is_const_known_zero)
+ 	(_S_complex_imag_is_const_known_zero): New.
+ 	* include/bits/version.def: Add simd_complex.
+ 	* include/bits/version.h: Regenerate.
+ 	* include/std/simd: Ask for simd_complex feature macro. Include
+ 	bits/simd_bit.h, bits/simd_complex.h, and bits/simd_math.h.
+ 	* testsuite/std/simd/arithmetic.cc: Enable tests for complex
+ 	which needs complex_init.h.
+ 	* testsuite/std/simd/complex_init.h: Helper for passing complex
+ 	values as template arguments.
+ 	* testsuite/std/simd/create_tests.h: Add float16_t, and three
+ 	complex types.
+ 	* testsuite/std/simd/mask2.cc: Add complex test types.
+ 	* testsuite/std/simd/simd_bit.cc: New test.
+ 	* testsuite/std/simd/simd_bit_expensive.cc: New test.
+ 	* testsuite/std/simd/stores.cc: Guard converting stores from
+ 	complex.
+ 	* testsuite/std/simd/test_setup.h (any_type_of): New.
+ 	(complex_like): New.
+ 	(bit_equal): Handle multi-reg and complex arguments.
+ 	(cx_isinf): New.
+ 	(equal_with_nan_and_inf_fixup): Handle complex types.
+ 	(is_const_known): Add std::complex overload.
+ 	(test_iota): Add support for std::complex.
+ 	* testsuite/std/simd/traits_common.cc: Add complex test types.
+ 	Test that instantiation of complete classes is well-formed.
+ 	* testsuite/std/simd/traits_impl.cc: Add complex test types.
+ 	Test __complex_like. Add a test that _CxIleav is dropped when
+ 	rebinding to the member of a _CxIleav mask.
+ 
+ 2026-07-01  Matthias Kretz  <m.kretz@gsi.de>
+ 
+ 	* include/bits/simd_details.h (_ScalarAbi): Remove.
+ 	(__scalar_abi_tag): Identify _Abi<N, N> as scalar now.
+ 	(__native_abi): Replace _ScalarAbi<1> with _Abi_t<1, 1, ...>.
+ 	(__abi_rebind): Refactor rebinding from/to __scalar_abi_tag.
+ 	* include/bits/simd_mask.h (_S_use_bitmask): Only true if
+ 	!_S_is_scalar.
+ 	(_M_and_neighbors, _M_or_neighbors): Add case for _S_is_scalar
+ 	where the and/or must be executed one step earlier.
+ 	(_M_reduce_min_index, _M_reduce_max_index): Delete dead code.
+ 	* include/bits/simd_vec.h (_S_use_bitmask): Inherit the value
+ 	from the first data member.
+ 	* testsuite/std/simd/traits_impl.cc: Adjust for the removal of
+ 	_ScalarAbi.
+ 
+ 2026-07-01  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* src/c++20/tzdb.cc (_Node::NumLeapSeconds::set_atomically):
+ 	Rename to set and define unconditionally.
+ 	(_Node::NumLeapSeconds::set_locked): Define unconditionally.
+ 
+ 2026-07-01  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 	    Álvaro Begué  <alvaro.begue@gmail.com>
+ 
+ 	PR libstdc++/124853
+ 	* src/c++20/tzdb.cc
+ 	(time_zone::_M_get_sys_info): Extract code blocks to
+ 	separate functions, and invoke them.
+ 	(<unnamed>::find_active_rule): Modify algorithm to
+ 	handle cascading saves.
+ 	(<unnamed>::find_first_std): Simplified implementation
+ 	benefiting from reordering of rules.
+ 	(chrono::reload_tzdb): Sort rules by name, from and save.
+ 	* testsuite/std/time/time_zone/wall_cascade.cc: New test.
+ 
+ 2026-07-01  Anlai Lu  <agicy@qq.com>
+ 
+ 	* testsuite/std/time/ostream_insert.cc: New test.
+ 
+ 2026-07-01  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/125467
+ 	* src/c++20/tzdb.cc (tzdb::current_zone): Use realpath to
+ 	resolve the /etc/localtime symlink instead of readlink.
+ 
+ 2026-07-01  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* src/c++20/tzdb.cc (_Node::NumLeapSeconds): New class.
+ 	(_Node::num_leap_seconds): New static variable.
+ 	(num_leap_seconds): Remove.
+ 	(__detail::__recent_leap_second_info): Replace uses of
+ 	num_leap_seconds with _Node::num_leap_seconds.
+ 	(_Node::_S_replace_head): Likewise.
+ 
+ 2026-07-01  Yi Chen  <chencyy@hygon.cn>
+ 
+ 	* src/c++11/random.cc (random_device::_M_init): Add signature_HYGON_ebx to
+ 	the RDSEED and RDRAND CPUID vendor allowlists.  For the default device on
+ 	Hygon, prefer RDRAND via a dedicated check at the top of the function.
+ 
+ 2026-06-30  Adam Wood  <adam.wood@mines.sdsmt.edu>
+ 	    Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* src/c++17/fs_ops.cc: Include <winioctl.h> for
+ 	FSCTL_GET_REPARSE_POINT. Include <ntdef.h> for
+ 	REPARSE_DATA_BUFFER.
+ 	(windows_create_symlink): New helper function for
+ 	fs::create_symlink and fs::create_directory_symlink.
+ 	(fs::create_directory_symlink): Call windows_create_symlink on
+ 	Windows.
+ 	(fs::create_symlink): Call windows_create_symlink on Windows.
+ 	(auto_win_file_handle::auto_win_file_handle): Add follow_symlink
+ 	parameter to control whether the handle should open the symlink
+ 	or the target, with a default value of true.
+ 	(windows_read_symlink_handle): New helper function
+ 	for fs::read_symlink.
+ 	(fs::read_symlink): Call windows_read_symlink_handle on Windows.
+ 	(fs::remove): Call RemoveDirectoryW only for directories, and
+ 	DeleteFileW for regular files, but attempt both for symlinks.
+ 	(fs::remove_all): Return immediately if path is empty.
+ 	Check if path points to a symlink, and if so, remove the
+ 	symlink using fs::remove.
+ 	* src/filesystem/ops-common.h [_GLIBCXX_FILESYSTEM_IS_WINDOWS]
+ 	(S_IFLNK, S_ISLNK): Define.
+ 	(__detail::__open_for_stat): New helper function for stat and
+ 	lstat.
+ 	(__detail::FileType): New enum type.
+ 	(__detail::__check_handle_type): New helper function for stat
+ 	and lstat.
+ 	(__detail::__is_handle_symlink): New helper function for
+ 	fs::read_symlink.
+ 	(__detail::__stat_windows): New helper function for stat and
+ 	lstat.
+ 	(__gnu_posix::stat, __gnu_posix::lstat): Use __stat_windows to
+ 	properly follow or not follow symlinks, and check if file is a
+ 	symlink.
+ 	* testsuite/27_io/filesystem/operations/canonical.cc (test03):
+ 	Use fs::create_directory_symlink instead of fs::create_symlink.
+ 	Check if NO_SYMLINKS or _GLIBCXX_FILESYSTEM_IS_WINDOWS instead
+ 	of just checking NO_SYMLINKS when defining baz.
+ 	* testsuite/27_io/filesystem/operations/copy.cc (test02):
+ 	Create a symlink to temporary file instead of ".".  Use
+ 	fs::exists(symlink_status()) instead of fs::exists for symlinks.
+ 	* testsuite/27_io/filesystem/operations/weakly_canonical.cc
+ 	(test01): Use fs::create_directory_symlink instead of
+ 	fs::create_symlink.  Wrap statements that test a dotdot after a
+ 	symlink in an ifndef _GLIBCXX_FILESYSTEM_IS_WINDOWS.
+ 	* testsuite/util/testsuite_fs.h: Do not define NO_SYMLINKS on
+ 	Windows.
+ 
+ 2026-06-30  Adam Wood  <adam.wood@mines.sdsmt.edu>
+ 
+ 	* testsuite/27_io/filesystem/operations/remove.cc: Check that
+ 	fs::remove deletes symlink instead of target.
+ 	* testsuite/27_io/filesystem/operations/remove_all.cc: Likewise.
+ 
+ 2026-06-29  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/chrono_io.h: Fix comment typo.
+ 
+ 2026-06-29  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* doc/doxygen/user.cfg.in (DOT_MULTI_TARGETS): Remove obsolete
+ 	config.
+ 	* include/bits/stl_algo.h: Use markdown and fix some typos in
+ 	Doxygen comments.  Mark internal helper functions as
+ 	undocumented.
+ 
  2026-06-26  Jonathan Wakely  <jwakely@redhat.com>
  
  	* testsuite/27_io/filesystem/operations/status.cc: Check
diff -Nrcpad gcc-17-20260628/libstdc++-v3/doc/doxygen/user.cfg.in gcc-17-20260705/libstdc++-v3/doc/doxygen/user.cfg.in
*** gcc-17-20260628/libstdc++-v3/doc/doxygen/user.cfg.in	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libstdc++-v3/doc/doxygen/user.cfg.in	Sun Jul  5 22:32:19 2026
*************** DOT_GRAPH_MAX_NODES    = 50
*** 3376,3390 ****
  
  MAX_DOT_GRAPH_DEPTH    = 0
  
- # Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
- # files in one run (i.e. multiple -o and -T options on the command line). This
- # makes dot run faster, but since only newer versions of dot (>1.8.10) support
- # this, this feature is disabled by default.
- # The default value is: NO.
- # This tag requires that the tag HAVE_DOT is set to YES.
- 
- DOT_MULTI_TARGETS      = YES
- 
  # If the GENERATE_LEGEND tag is set to YES Doxygen will generate a legend page
  # explaining the meaning of the various boxes and arrows in the dot generated
  # graphs.
--- 3376,3381 ----
diff -Nrcpad gcc-17-20260628/libstdc++-v3/include/Makefile.am gcc-17-20260705/libstdc++-v3/include/Makefile.am
*** gcc-17-20260628/libstdc++-v3/include/Makefile.am	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libstdc++-v3/include/Makefile.am	Sun Jul  5 22:32:19 2026
*************** bits_freestanding = \
*** 138,143 ****
--- 138,144 ----
  	${bits_srcdir}/enable_special_members.h \
  	${bits_srcdir}/functexcept.h \
  	${bits_srcdir}/functional_hash.h \
+ 	${bits_srcdir}/inplace_tags.h \
  	${bits_srcdir}/intcmp.h \
  	${bits_srcdir}/invoke.h \
  	${bits_srcdir}/iosfwd.h \
*************** bits_freestanding = \
*** 152,157 ****
--- 153,159 ----
  	${bits_srcdir}/memoryfwd.h \
  	${bits_srcdir}/monostate.h \
  	${bits_srcdir}/move.h \
+ 	${bits_srcdir}/optional_ref.h \
  	${bits_srcdir}/ostream.h \
  	${bits_srcdir}/out_ptr.h \
  	${bits_srcdir}/predefined_ops.h \
*************** bits_headers = \
*** 273,284 ****
--- 275,289 ----
  	${bits_srcdir}/shared_ptr_atomic.h \
  	${bits_srcdir}/shared_ptr_base.h \
  	${bits_srcdir}/simd_alg.h \
+ 	${bits_srcdir}/simd_bit.h \
+ 	${bits_srcdir}/simd_complex.h \
  	${bits_srcdir}/simd_details.h \
  	${bits_srcdir}/simd_flags.h \
  	${bits_srcdir}/simd_iterator.h \
  	${bits_srcdir}/simd_loadstore.h \
  	${bits_srcdir}/simd_mask.h \
  	${bits_srcdir}/simd_mask_reductions.h \
+ 	${bits_srcdir}/simd_math.h \
  	${bits_srcdir}/simd_reductions.h \
  	${bits_srcdir}/simd_vec.h \
  	${bits_srcdir}/simd_x86.h \
diff -Nrcpad gcc-17-20260628/libstdc++-v3/include/Makefile.in gcc-17-20260705/libstdc++-v3/include/Makefile.in
*** gcc-17-20260628/libstdc++-v3/include/Makefile.in	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libstdc++-v3/include/Makefile.in	Sun Jul  5 22:32:19 2026
*************** bits_freestanding = \
*** 496,501 ****
--- 496,502 ----
  	${bits_srcdir}/enable_special_members.h \
  	${bits_srcdir}/functexcept.h \
  	${bits_srcdir}/functional_hash.h \
+ 	${bits_srcdir}/inplace_tags.h \
  	${bits_srcdir}/intcmp.h \
  	${bits_srcdir}/invoke.h \
  	${bits_srcdir}/iosfwd.h \
*************** bits_freestanding = \
*** 510,515 ****
--- 511,517 ----
  	${bits_srcdir}/memoryfwd.h \
  	${bits_srcdir}/monostate.h \
  	${bits_srcdir}/move.h \
+ 	${bits_srcdir}/optional_ref.h \
  	${bits_srcdir}/ostream.h \
  	${bits_srcdir}/out_ptr.h \
  	${bits_srcdir}/predefined_ops.h \
*************** bits_freestanding = \
*** 629,640 ****
--- 631,645 ----
  @GLIBCXX_HOSTED_TRUE@	${bits_srcdir}/shared_ptr_atomic.h \
  @GLIBCXX_HOSTED_TRUE@	${bits_srcdir}/shared_ptr_base.h \
  @GLIBCXX_HOSTED_TRUE@	${bits_srcdir}/simd_alg.h \
+ @GLIBCXX_HOSTED_TRUE@	${bits_srcdir}/simd_bit.h \
+ @GLIBCXX_HOSTED_TRUE@	${bits_srcdir}/simd_complex.h \
  @GLIBCXX_HOSTED_TRUE@	${bits_srcdir}/simd_details.h \
  @GLIBCXX_HOSTED_TRUE@	${bits_srcdir}/simd_flags.h \
  @GLIBCXX_HOSTED_TRUE@	${bits_srcdir}/simd_iterator.h \
  @GLIBCXX_HOSTED_TRUE@	${bits_srcdir}/simd_loadstore.h \
  @GLIBCXX_HOSTED_TRUE@	${bits_srcdir}/simd_mask.h \
  @GLIBCXX_HOSTED_TRUE@	${bits_srcdir}/simd_mask_reductions.h \
+ @GLIBCXX_HOSTED_TRUE@	${bits_srcdir}/simd_math.h \
  @GLIBCXX_HOSTED_TRUE@	${bits_srcdir}/simd_reductions.h \
  @GLIBCXX_HOSTED_TRUE@	${bits_srcdir}/simd_vec.h \
  @GLIBCXX_HOSTED_TRUE@	${bits_srcdir}/simd_x86.h \
diff -Nrcpad gcc-17-20260628/libstdc++-v3/include/bits/basic_string.h gcc-17-20260705/libstdc++-v3/include/bits/basic_string.h
*** gcc-17-20260628/libstdc++-v3/include/bits/basic_string.h	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libstdc++-v3/include/bits/basic_string.h	Sun Jul  5 22:32:19 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_CXX11
*** 1767,1772 ****
--- 1767,1786 ----
  	      + std::__sv_check(__sv.size(), __pos, "basic_string::append"),
  	      std::__sv_limit(__sv.size(), __pos, __n));
  	}
+ 
+       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+       // 3662. basic_string::append/assign(NTBS, pos, n) suboptimal
+       /**
+        *  @brief  Append a C substring.
+        *  @param __s  The C string to append.
+        *  @param __pos  The position in the C string to append from.
+        *  @param __n  The number of characters to append.
+        *  @return  Reference to this string.
+        */
+       _GLIBCXX20_CONSTEXPR
+       basic_string&
+       append(const _CharT* __s, size_type __pos, size_type __n)
+       { return append(__sv_type(__s).substr(__pos, __n)); }
  #endif // C++17
  
        /**
*************** _GLIBCXX_BEGIN_NAMESPACE_CXX11
*** 2040,2045 ****
--- 2054,2073 ----
  	      + std::__sv_check(__sv.size(), __pos, "basic_string::assign"),
  	      std::__sv_limit(__sv.size(), __pos, __n));
  	}
+ 
+       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+       // 3662. basic_string::append/assign(NTBS, pos, n) suboptimal
+       /**
+        *  @brief  Set value to a C substring.
+        *  @param __s  The C string to use.
+        *  @param __pos  The position in the C string to assign from.
+        *  @param __n  Number of characters to use.
+        *  @return  Reference to this string.
+        */
+       _GLIBCXX20_CONSTEXPR
+       basic_string&
+       assign(const _CharT* __s, size_type __pos, size_type __n)
+       { return assign(__sv_type(__s).substr(__pos, __n)); }
  #endif // C++17
  
  #if __cplusplus >= 201103L
diff -Nrcpad gcc-17-20260628/libstdc++-v3/include/bits/chrono_io.h gcc-17-20260705/libstdc++-v3/include/bits/chrono_io.h
*** gcc-17-20260628/libstdc++-v3/include/bits/chrono_io.h	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libstdc++-v3/include/bits/chrono_io.h	Sun Jul  5 22:32:19 2026
*************** namespace __format
*** 3358,3364 ****
  		__cd._M_zone_abbrev = *__zt._M_abbrev;
  	      else
  		{
! 		  // TODO: use resize_for_override
  		  __zone_store.resize(__zt._M_abbrev->size());
  		  auto& __ct = use_facet<ctype<_CharT>>(_M_f._M_locale(__fc));
  		  __ct.widen(__zt._M_abbrev->data(),
--- 3358,3364 ----
  		__cd._M_zone_abbrev = *__zt._M_abbrev;
  	      else
  		{
! 		  // TODO: use resize_and_overwrite
  		  __zone_store.resize(__zt._M_abbrev->size());
  		  auto& __ct = use_facet<ctype<_CharT>>(_M_f._M_locale(__fc));
  		  __ct.widen(__zt._M_abbrev->data(),
diff -Nrcpad gcc-17-20260628/libstdc++-v3/include/bits/cow_string.h gcc-17-20260705/libstdc++-v3/include/bits/cow_string.h
*** gcc-17-20260628/libstdc++-v3/include/bits/cow_string.h	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libstdc++-v3/include/bits/cow_string.h	Sun Jul  5 22:32:19 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1427,1432 ****
--- 1427,1445 ----
  	      + std::__sv_check(__sv.size(), __pos, "basic_string::append"),
  	      std::__sv_limit(__sv.size(), __pos, __n));
  	}
+ 
+       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+       // 3662. basic_string::append/assign(NTBS, pos, n) suboptimal
+       /**
+        *  @brief  Append a C substring.
+        *  @param __s  The C string to append.
+        *  @param __pos  The position in the C string to append from.
+        *  @param __n  The number of characters to append.
+        *  @return  Reference to this string.
+        */
+       basic_string&
+       append(const _CharT* __s, size_type __pos, size_type __n)
+       { return append(__sv_type(__s).substr(__pos, __n)); }
  #endif // C++17
  
        /**
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1600,1605 ****
--- 1613,1631 ----
  	      + std::__sv_check(__sv.size(), __pos, "basic_string::assign"),
  	      std::__sv_limit(__sv.size(), __pos, __n));
  	}
+ 
+       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+       // 3662. basic_string::append/assign(NTBS, pos, n) suboptimal
+       /**
+        *  @brief  Set value to a C substring.
+        *  @param __s  The C string to use.
+        *  @param __pos  The position in the C string to assign from.
+        *  @param __n  Number of characters to use.
+        *  @return  Reference to this string.
+        */
+       basic_string&
+       assign(const _CharT* __s, size_type __pos, size_type __n)
+       { return assign(__sv_type(__s).substr(__pos, __n)); }
  #endif // C++17
  
        /**
diff -Nrcpad gcc-17-20260628/libstdc++-v3/include/bits/inplace_tags.h gcc-17-20260705/libstdc++-v3/include/bits/inplace_tags.h
*** gcc-17-20260628/libstdc++-v3/include/bits/inplace_tags.h	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libstdc++-v3/include/bits/inplace_tags.h	Sun Jul  5 22:32:19 2026
***************
*** 0 ****
--- 1,84 ----
+ // Tag types for inplace construction. -*- C++ -*-
+ 
+ // Copyright (C) 2004-2026 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.
+ 
+ // Under Section 7 of GPL version 3, you are granted additional
+ // permissions described in the GCC Runtime Library Exception, version
+ // 3.1, as published by the Free Software Foundation.
+ 
+ // You should have received a copy of the GNU General Public License and
+ // a copy of the GCC Runtime Library Exception along with this program;
+ // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ // <http://www.gnu.org/licenses/>.
+ 
+ /** @file include/bits/inplace_tags.h
+  *  This is an internal header file, included by other library headers.
+  *  Do not attempt to use it directly. @headername{utility}
+  *
+  *  This file contains the parts of `<utility>` needed by other headers,
+  *  so they don't need to include the whole of `<utility>`.
+  */
+ 
+ #ifndef _GLIBCXX_INPLACE_TAGS_H
+ #define _GLIBCXX_INPLACE_TAGS_H 1
+ 
+ #ifdef _GLIBCXX_SYSHDR
+ #pragma GCC system_header
+ #endif
+ 
+ #if __cplusplus >= 201703L
+ 
+ namespace std _GLIBCXX_VISIBILITY(default)
+ {
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+ 
+   struct in_place_t {
+     explicit in_place_t() = default;
+   };
+ 
+   inline constexpr in_place_t in_place{};
+ 
+   template<typename _Tp> struct in_place_type_t
+   {
+     explicit in_place_type_t() = default;
+   };
+ 
+   template<typename _Tp>
+     inline constexpr in_place_type_t<_Tp> in_place_type{};
+ 
+   template<size_t _Idx> struct in_place_index_t
+   {
+     explicit in_place_index_t() = default;
+   };
+ 
+   template<size_t _Idx>
+     inline constexpr in_place_index_t<_Idx> in_place_index{};
+ 
+   template<typename>
+     inline constexpr bool __is_in_place_type_v = false;
+ 
+   template<typename _Tp>
+     inline constexpr bool __is_in_place_type_v<in_place_type_t<_Tp>> = true;
+ 
+   template<typename>
+     inline constexpr bool __is_in_place_index_v = false;
+ 
+   template<size_t _Nm>
+     inline constexpr bool __is_in_place_index_v<in_place_index_t<_Nm>> = true;
+ 
+ _GLIBCXX_END_NAMESPACE_VERSION
+ } // namespace
+ 
+ #endif // C++17
+ #endif /* _GLIBCXX_INPLACE_TAGS_H */
diff -Nrcpad gcc-17-20260628/libstdc++-v3/include/bits/optional_ref.h gcc-17-20260705/libstdc++-v3/include/bits/optional_ref.h
*** gcc-17-20260628/libstdc++-v3/include/bits/optional_ref.h	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libstdc++-v3/include/bits/optional_ref.h	Sun Jul  5 22:32:19 2026
***************
*** 0 ****
--- 1,393 ----
+ // optional<T&> -*- C++ -*-
+ 
+ // Copyright (C) 2013-2026 Free Software Foundation, Inc.
+ // Copyright The GNU Toolchain Authors.
+ //
+ // 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.
+ 
+ // Under Section 7 of GPL version 3, you are granted additional
+ // permissions described in the GCC Runtime Library Exception, version
+ // 3.1, as published by the Free Software Foundation.
+ 
+ // You should have received a copy of the GNU General Public License and
+ // a copy of the GCC Runtime Library Exception along with this program;
+ // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ // <http://www.gnu.org/licenses/>.
+ 
+ /** @file bits/optional_ref.h
+  *  This is an internal header file, included by other library headers.
+  *  Do not attempt to use it directly. @headername{optional}
+  */
+ 
+ #ifndef _GLIBCXX_OPTIONAL_REF
+ #define _GLIBCXX_OPTIONAL_REF 1
+ 
+ #ifdef _GLIBCXX_SYSHDR
+ #pragma GCC system_header
+ #endif
+ 
+ #ifdef __glibcxx_optional // C++ >= 17
+ 
+ #include <type_traits>
+ #include <bits/move.h>
+ #include <bits/inplace_tags.h>
+ 
+ namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
+ {
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+ 
+   template<typename _Iterator, typename _Container>
+     class __normal_iterator;
+ 
+ _GLIBCXX_END_NAMESPACE_VERSION
+ } // namespace __gnu_cxx
+ 
+ namespace std _GLIBCXX_VISIBILITY(default)
+ {
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+ 
+    /**
+    *  @addtogroup utilities
+    *  @{
+    */
+ 
+   template<typename _Tp>
+     class optional;
+ 
+   /// Tag type to disengage optional objects.
+   struct nullopt_t
+   {
+     // Do not user-declare default constructor at all for
+     // optional_value = {} syntax to work.
+     // nullopt_t() = delete;
+ 
+     // Used for constructing nullopt.
+     enum class _Construct { _Token };
+ 
+     // Must be constexpr for nullopt_t to be literal.
+     explicit constexpr nullopt_t(_Construct) noexcept { }
+   };
+ 
+   /// Tag to disengage optional objects.
+   inline constexpr nullopt_t nullopt { nullopt_t::_Construct::_Token };
+ 
+   template<typename _Fn> struct _Optional_func { _Fn& _M_f; };
+ 
+   template<typename _Tp>
+     inline constexpr bool __is_valid_contained_type_for_optional =
+       (
+ #if __glibcxx_optional >= 202506L
+ 	is_lvalue_reference_v<_Tp> ||
+ #endif
+ 	(is_object_v<_Tp> && is_destructible_v<_Tp> && !is_array_v<_Tp>)
+       )
+       && !is_same_v<remove_cv_t<remove_reference_t<_Tp>>, nullopt_t>
+       && !is_same_v<remove_cv_t<remove_reference_t<_Tp>>, in_place_t>;
+ 
+ #if __glibcxx_optional >= 202506L // C++26
+   template<typename _Tp>
+     class optional<_Tp&>;
+ 
+   template<typename _Tp>
+     constexpr bool __is_optional_ref_v = false;
+ 
+   template<typename _Tp>
+     constexpr bool __is_optional_ref_v<optional<_Tp&>> = true;
+ 
+   template<typename _Tp>
+     struct __optional_ref_base
+     {};
+ 
+ #ifdef __glibcxx_optional_range_support // >= C++26
+   template<typename _Tp>
+     struct __optional_ref_base<_Tp[]>
+     {};
+ 
+   template<typename _Tp>
+     requires is_object_v<_Tp>
+     struct __optional_ref_base<_Tp>
+     {
+       using iterator = __gnu_cxx::__normal_iterator<_Tp*, optional<_Tp&>>;
+     };
+ #endif // __glibcxx_optional_range_support
+ 
+   template<typename _Tp>
+     class optional<_Tp&> : public __optional_ref_base<_Tp>
+     {
+       static_assert(__is_valid_contained_type_for_optional<_Tp&>);
+ 
+     public:
+       using value_type = _Tp;
+ 
+       constexpr static optional
+       _S_from_ptr(_Tp* __ptr)
+       {
+ 	optional __res;
+ 	__res._M_val = __ptr;
+ 	return __res;
+       }
+ 
+       // Constructors.
+       constexpr optional() noexcept = default;
+       constexpr optional(nullopt_t) noexcept : optional() {}
+       constexpr optional(const optional&) noexcept = default;
+ 
+       template<typename _Arg>
+ 	requires is_constructible_v<_Tp&, _Arg>
+ 	  && (!reference_constructs_from_temporary_v<_Tp&, _Arg>)
+ 	explicit constexpr
+ 	optional(in_place_t, _Arg&& __arg)
+ 	{
+ 	  __convert_ref_init_val(std::forward<_Arg>(__arg));
+ 	}
+ 
+       template<typename _Up>
+ 	requires (!is_same_v<remove_cvref_t<_Up>, optional>)
+ 	  && (!is_same_v<remove_cvref_t<_Up>, in_place_t>)
+ 	  && is_constructible_v<_Tp&, _Up>
+ 	  && (!reference_constructs_from_temporary_v<_Tp&, _Up>)
+ 	explicit(!is_convertible_v<_Up, _Tp&>)
+ 	constexpr
+ 	optional(_Up&& __u)
+ 	noexcept(is_nothrow_constructible_v<_Tp&, _Up>)
+ 	{
+ 	  __convert_ref_init_val(std::forward<_Up>(__u));
+ 	}
+ 
+       template<typename _Up>
+ 	requires (!is_same_v<remove_cvref_t<_Up>, optional>)
+ 	  && (!is_same_v<remove_cvref_t<_Up>, in_place_t>)
+ 	  && is_constructible_v<_Tp&, _Up>
+ 	  && reference_constructs_from_temporary_v<_Tp&, _Up>
+ 	explicit(!is_convertible_v<_Up, _Tp&>)
+ 	constexpr
+ 	optional(_Up&& __u) = delete;
+ 
+       // optional<U> &
+       template<typename _Up>
+ 	requires (!is_same_v<remove_cv_t<_Tp>, optional<_Up>>)
+ 	  && (!is_same_v<_Tp&, _Up>)
+ 	  && is_constructible_v<_Tp&, _Up&>
+ 	  && (!reference_constructs_from_temporary_v<_Tp&, _Up&>)
+ 	explicit(!is_convertible_v<_Up&, _Tp&>)
+ 	constexpr
+ 	optional(optional<_Up>& __rhs)
+ 	noexcept(is_nothrow_constructible_v<_Tp&, _Up&>)
+ 	{
+ 	  if (__rhs)
+ 	    __convert_ref_init_val(__rhs._M_fwd());
+ 	}
+ 
+       template<typename _Up>
+ 	requires (!is_same_v<remove_cv_t<_Tp>, optional<_Up>>)
+ 	  && (!is_same_v<_Tp&, _Up>)
+ 	  && is_constructible_v<_Tp&, _Up&>
+ 	  && reference_constructs_from_temporary_v<_Tp&, _Up&>
+ 	explicit(!is_convertible_v<_Up&, _Tp&>)
+ 	constexpr
+ 	optional(optional<_Up>& __rhs) = delete;
+ 
+       // const optional<U>&
+       template<typename _Up>
+ 	requires (!is_same_v<remove_cv_t<_Tp>, optional<_Up>>)
+ 	  && (!is_same_v<_Tp&, _Up>)
+ 	  && is_constructible_v<_Tp&, const _Up&>
+ 	  && (!reference_constructs_from_temporary_v<_Tp&, const _Up&>)
+ 	explicit(!is_convertible_v<const _Up&, _Tp&>)
+ 	constexpr
+ 	optional(const optional<_Up>& __rhs)
+ 	noexcept(is_nothrow_constructible_v<_Tp&, _Up&>)
+ 	{
+ 	  if (__rhs)
+ 	    __convert_ref_init_val(__rhs._M_fwd());
+ 	}
+ 
+       template<typename _Up>
+ 	requires (!is_same_v<remove_cv_t<_Tp>, optional<_Up>>)
+ 	  && (!is_same_v<_Tp&, _Up>)
+ 	  && is_constructible_v<_Tp&, const _Up&>
+ 	  && reference_constructs_from_temporary_v<_Tp&, const _Up&>
+ 	explicit(!is_convertible_v<const _Up&, _Tp&>)
+ 	constexpr
+ 	optional(const optional<_Up>& __rhs) = delete;
+ 
+       // optional<U>&&
+       template<typename _Up>
+ 	requires (!is_same_v<remove_cv_t<_Tp>, optional<_Up>>)
+ 	  && (!is_same_v<_Tp&, _Up>)
+ 	  && is_constructible_v<_Tp&, _Up>
+ 	  && (!reference_constructs_from_temporary_v<_Tp&, _Up>)
+ 	explicit(!is_convertible_v<_Up, _Tp&>)
+ 	constexpr
+ 	optional(optional<_Up>&& __rhs)
+ 	noexcept(is_nothrow_constructible_v<_Tp&, _Up>)
+ 	{
+ 	  if (__rhs)
+ 	    __convert_ref_init_val(std::move(__rhs)._M_fwd());
+ 	}
+ 
+       template<typename _Up>
+ 	requires (!is_same_v<remove_cv_t<_Tp>, optional<_Up>>)
+ 	  && (!is_same_v<_Tp&, _Up>)
+ 	  && is_constructible_v<_Tp&, _Up>
+ 	  && reference_constructs_from_temporary_v<_Tp&, _Up>
+ 	explicit(!is_convertible_v<_Up, _Tp&>)
+ 	constexpr
+ 	optional(optional<_Up>&& __rhs) = delete;
+ 
+       // const optional<U>&&
+       template<typename _Up>
+ 	requires (!is_same_v<remove_cv_t<_Tp>, optional<_Up>>)
+ 	  && (!is_same_v<_Tp&, _Up>)
+ 	  && is_constructible_v<_Tp&, const _Up>
+ 	  && (!reference_constructs_from_temporary_v<_Tp&, _Up>)
+ 	explicit(!is_convertible_v<const _Up, _Tp&>)
+ 	constexpr
+ 	optional(const optional<_Up>&& __rhs)
+ 	noexcept(is_nothrow_constructible_v<_Tp&, const _Up>)
+ 	{
+ 	  if (__rhs)
+ 	    __convert_ref_init_val(std::move(__rhs)._M_fwd());
+ 	}
+ 
+       template<typename _Up>
+ 	requires (!is_same_v<remove_cv_t<_Tp>, optional<_Up>>)
+ 	  && (!is_same_v<_Tp&, _Up>)
+ 	  && is_constructible_v<_Tp&, const _Up>
+ 	  && reference_constructs_from_temporary_v<_Tp&, const _Up>
+ 	explicit(!is_convertible_v<const _Up, _Tp&>)
+ 	constexpr
+ 	optional(const optional<_Up>&& __rhs) = delete;
+ 
+       constexpr ~optional() = default;
+ 
+       // Assignment.
+       constexpr optional& operator=(nullopt_t) noexcept
+       {
+ 	_M_val = nullptr;
+ 	return *this;
+       }
+ 
+       constexpr optional& operator=(const optional&) noexcept = default;
+ 
+       template<typename _Up>
+ 	requires is_constructible_v<_Tp&, _Up>
+ 	  && (!reference_constructs_from_temporary_v<_Tp&, _Up>)
+ 	constexpr _Tp&
+ 	emplace(_Up&& __u)
+ 	noexcept(is_nothrow_constructible_v<_Tp&, _Up>)
+ 	{
+ 	  __convert_ref_init_val(std::forward<_Up>(__u));
+ 	  // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ 	  // 4300. Missing Returns: element in optional<T&>::emplace
+ 	  return *_M_val;
+ 	}
+ 
+       // Swap.
+       constexpr void swap(optional& __rhs) noexcept
+       { std::swap(_M_val, __rhs._M_val); }
+ 
+ #ifdef __glibcxx_optional_range_support // >= C++26
+       // Iterator support.
+       constexpr auto begin() const noexcept
+ 	requires is_object_v<_Tp> && (!is_unbounded_array_v<_Tp>);
+ 
+       constexpr auto end() const noexcept
+ 	requires is_object_v<_Tp> && (!is_unbounded_array_v<_Tp>);
+ #endif // __glibcxx_optional_range_support
+ 
+       // Observers.
+       constexpr _Tp* operator->() const noexcept
+       {
+ 	__glibcxx_assert(_M_val); // hardened precondition
+ 	return _M_val;
+       }
+ 
+       constexpr _Tp& operator*() const noexcept
+       {
+ 	__glibcxx_assert(_M_val); // hardened precondition
+ 	return *_M_val;
+       }
+ 
+       constexpr explicit operator bool() const noexcept
+       {
+ 	return _M_val;
+       }
+ 
+       constexpr bool has_value() const noexcept
+       {
+ 	return _M_val;
+       }
+ 
+       constexpr _Tp& value() const;
+ 
+       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+       // 4304. std::optional<NonReturnable&> is ill-formed due to value_or
+       template<typename _Up = remove_cv_t<_Tp>>
+ 	requires is_object_v<_Tp> && (!is_array_v<_Tp>)
+ 	constexpr decay_t<_Tp>
+ 	value_or(_Up&& __u) const;
+ 
+       // Monadic operations.
+       template<typename _Fn>
+ 	constexpr auto
+ 	and_then(_Fn&& __f) const;
+ 
+       template<typename _Fn>
+ 	constexpr
+ 	optional<remove_cv_t<invoke_result_t<_Fn, _Tp&>>>
+ 	transform(_Fn&& __f) const;
+ 
+       template<typename _Fn>
+ 	requires is_invocable_v<_Fn>
+ 	constexpr
+ 	optional
+ 	or_else(_Fn&& __f) const;
+ 
+       // Modifiers.
+       constexpr void reset() noexcept
+       {
+ 	_M_val = nullptr;
+       }
+ 
+     private:
+       _Tp *_M_val = nullptr;
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr _Tp&
+       _M_fwd() const noexcept
+       { return *_M_val; }
+ 
+       template<typename _Up> friend class optional;
+ 
+       template<typename _Up>
+ 	constexpr
+ 	void
+ 	__convert_ref_init_val(_Up&& __u)
+ 	noexcept
+ 	{
+ 	  _Tp& __r(std::forward<_Up>(__u));
+ 	  _M_val = std::addressof(__r);
+ 	}
+ 
+       template<typename _Fn, typename _Value>
+ 	explicit constexpr
+ 	optional(_Optional_func<_Fn> __f, _Value&& __v);
+     };
+ #endif // __glibcxx_optional >= 202506L
+ 
+ _GLIBCXX_END_NAMESPACE_VERSION
+ } // namespace std
+ 
+ #endif // __glibcxx_optional
+ 
+ #endif // _GLIBCXX_OPTIONAL_REF
diff -Nrcpad gcc-17-20260628/libstdc++-v3/include/bits/simd_bit.h gcc-17-20260705/libstdc++-v3/include/bits/simd_bit.h
*** gcc-17-20260628/libstdc++-v3/include/bits/simd_bit.h	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libstdc++-v3/include/bits/simd_bit.h	Sun Jul  5 22:32:19 2026
***************
*** 0 ****
--- 1,192 ----
+ // Implementation of <simd> -*- C++ -*-
+ 
+ // Copyright The GNU Toolchain Authors.
+ //
+ // 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.
+ 
+ // Under Section 7 of GPL version 3, you are granted additional
+ // permissions described in the GCC Runtime Library Exception, version
+ // 3.1, as published by the Free Software Foundation.
+ 
+ // You should have received a copy of the GNU General Public License and
+ // a copy of the GCC Runtime Library Exception along with this program;
+ // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ // <http://www.gnu.org/licenses/>.
+ 
+ #ifndef _GLIBCXX_SIMD_BIT_H
+ #define _GLIBCXX_SIMD_BIT_H 1
+ 
+ #ifdef _GLIBCXX_SYSHDR
+ #pragma GCC system_header
+ #endif
+ 
+ #if __cplusplus >= 202400L
+ 
+ #include "simd_vec.h"
+ 
+ // psabi warnings are bogus because the ABI of the internal types never leaks into user code
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wpsabi"
+ 
+ // [simd.bit] -----------------------------------------------------------------
+ namespace std _GLIBCXX_VISIBILITY(default)
+ {
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+ namespace simd
+ {
+   template<__simd_integral _Vp>
+     [[__gnu__::__always_inline__]]
+     constexpr _Vp
+     byteswap(const _Vp& __v) noexcept
+     {
+       if constexpr (sizeof(typename _Vp::value_type) == 1)
+ 	return __v;
+       else
+ 	return _Vp([&](int __i) { return std::byteswap(__v[__i]); });
+     }
+ 
+   template<__simd_unsigned_integer _Vp>
+     [[__gnu__::__always_inline__]]
+     constexpr _Vp
+     bit_ceil(const _Vp& __v)
+     {
+       using _Tp = typename _Vp::value_type;
+       constexpr _Tp __max = _Tp(1) << (sizeof(_Tp) * __CHAR_BIT__ - 1);
+       __glibcxx_simd_precondition(all_of(__v <= __max), "bit_ceil result is not representable");
+       return _Vp([&](int __i) { return std::bit_ceil(__v[__i]); });
+     }
+ 
+   template<__simd_unsigned_integer _Vp>
+     [[__gnu__::__always_inline__]]
+     constexpr _Vp
+     bit_floor(const _Vp& __v) noexcept
+     { return _Vp([&](int __i) { return std::bit_floor(__v[__i]); }); }
+ 
+   template<__simd_unsigned_integer _Vp>
+     [[__gnu__::__always_inline__]]
+     constexpr typename _Vp::mask_type
+     has_single_bit(const _Vp& __v) noexcept
+     { return typename _Vp::mask_type([&](int __i) { return std::has_single_bit(__v[__i]); }); }
+ 
+   template<__simd_unsigned_integer _V0, __simd_integral _V1>
+     requires (_V0::size() == _V1::size())
+       && (sizeof(typename _V0::value_type) == sizeof(typename _V1::value_type))
+     [[__gnu__::__always_inline__]]
+     constexpr _V0
+     rotl(const _V0& __v, const _V1& __s) noexcept
+     { return _V0([&](int __i) { return std::rotl(__v[__i], __s[__i]); }); }
+ 
+   template<__simd_unsigned_integer _Vp>
+     [[__gnu__::__always_inline__]]
+     constexpr _Vp
+     rotl(const _Vp& __v, int __s) noexcept
+     { return _Vp([&](int __i) { return std::rotl(__v[__i], __s); }); }
+ 
+   template<__simd_unsigned_integer _V0, __simd_integral _V1>
+     requires (_V0::size() == _V1::size())
+       && (sizeof(typename _V0::value_type) == sizeof(typename _V1::value_type))
+     [[__gnu__::__always_inline__]]
+     constexpr _V0
+     rotr(const _V0& __v, const _V1& __s) noexcept
+     { return _V0([&](int __i) { return std::rotr(__v[__i], __s[__i]); }); }
+ 
+   template<__simd_unsigned_integer _Vp>
+     [[__gnu__::__always_inline__]]
+     constexpr _Vp
+     rotr(const _Vp& __v, int __s) noexcept
+     { return _Vp([&](int __i) { return std::rotr(__v[__i], __s); }); }
+ 
+   template<__simd_unsigned_integer _Vp>
+     [[__gnu__::__always_inline__]]
+     constexpr rebind_t<make_signed_t<typename _Vp::value_type>, _Vp>
+     bit_width(const _Vp& __v) noexcept
+     {
+       using _Ip = make_signed_t<typename _Vp::value_type>;
+       return rebind_t<_Ip, _Vp>([&](int __i) {
+ 	       return static_cast<_Ip>(std::bit_width(__v[__i]));
+ 	     });
+     }
+ 
+   template<__simd_unsigned_integer _Vp>
+     [[__gnu__::__always_inline__]]
+     constexpr rebind_t<make_signed_t<typename _Vp::value_type>, _Vp>
+     countl_zero(const _Vp& __v) noexcept
+     {
+       using _Ip = make_signed_t<typename _Vp::value_type>;
+       return rebind_t<_Ip, _Vp>([&](int __i) {
+ 	       return static_cast<_Ip>(std::countl_zero(__v[__i]));
+ 	     });
+     }
+ 
+   template<__simd_unsigned_integer _Vp>
+     [[__gnu__::__always_inline__]]
+     constexpr rebind_t<make_signed_t<typename _Vp::value_type>, _Vp>
+     countl_one(const _Vp& __v) noexcept
+     {
+       using _Ip = make_signed_t<typename _Vp::value_type>;
+       return rebind_t<_Ip, _Vp>([&](int __i) {
+ 	       return static_cast<_Ip>(std::countl_one(__v[__i]));
+ 	     });
+     }
+ 
+   template<__simd_unsigned_integer _Vp>
+     [[__gnu__::__always_inline__]]
+     constexpr rebind_t<make_signed_t<typename _Vp::value_type>, _Vp>
+     countr_zero(const _Vp& __v) noexcept
+     {
+       using _Ip = make_signed_t<typename _Vp::value_type>;
+       return rebind_t<_Ip, _Vp>([&](int __i) {
+ 	       return static_cast<_Ip>(std::countr_zero(__v[__i]));
+ 	     });
+     }
+ 
+   template<__simd_unsigned_integer _Vp>
+     [[__gnu__::__always_inline__]]
+     constexpr rebind_t<make_signed_t<typename _Vp::value_type>, _Vp>
+     countr_one(const _Vp& __v) noexcept
+     {
+       using _Ip = make_signed_t<typename _Vp::value_type>;
+       return rebind_t<_Ip, _Vp>([&](int __i) {
+ 	       return static_cast<_Ip>(std::countr_one(__v[__i]));
+ 	     });
+     }
+ 
+   template<__simd_unsigned_integer _Vp>
+     [[__gnu__::__always_inline__]]
+     constexpr rebind_t<make_signed_t<typename _Vp::value_type>, _Vp>
+     popcount(const _Vp& __v) noexcept
+     {
+       using _Ip = make_signed_t<typename _Vp::value_type>;
+       return rebind_t<_Ip, _Vp>([&](int __i) {
+ 	       return static_cast<_Ip>(std::popcount(__v[__i]));
+ 	     });
+     }
+ } // namespace simd
+ 
+   using simd::byteswap;
+   using simd::bit_ceil;
+   using simd::bit_floor;
+   using simd::has_single_bit;
+   using simd::rotl;
+   using simd::rotr;
+   using simd::bit_width;
+   using simd::countl_zero;
+   using simd::countl_one;
+   using simd::countr_zero;
+   using simd::countr_one;
+   using simd::popcount;
+ _GLIBCXX_END_NAMESPACE_VERSION
+ } // namespace std
+ 
+ #pragma GCC diagnostic pop
+ #endif // C++26
+ #endif // _GLIBCXX_SIMD_BIT_H
diff -Nrcpad gcc-17-20260628/libstdc++-v3/include/bits/simd_complex.h gcc-17-20260705/libstdc++-v3/include/bits/simd_complex.h
*** gcc-17-20260628/libstdc++-v3/include/bits/simd_complex.h	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libstdc++-v3/include/bits/simd_complex.h	Sun Jul  5 22:32:19 2026
***************
*** 0 ****
--- 1,2322 ----
+ // Implementation of <simd> -*- C++ -*-
+ 
+ // Copyright The GNU Toolchain Authors.
+ //
+ // 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.
+ 
+ // Under Section 7 of GPL version 3, you are granted additional
+ // permissions described in the GCC Runtime Library Exception, version
+ // 3.1, as published by the Free Software Foundation.
+ 
+ // You should have received a copy of the GNU General Public License and
+ // a copy of the GCC Runtime Library Exception along with this program;
+ // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ // <http://www.gnu.org/licenses/>.
+ 
+ #ifndef _GLIBCXX_SIMD_COMPLEX_H
+ #define _GLIBCXX_SIMD_COMPLEX_H 1
+ 
+ #ifdef _GLIBCXX_SYSHDR
+ #pragma GCC system_header
+ #endif
+ 
+ #if __cplusplus >= 202400L
+ 
+ #include "simd_vec.h"
+ #include <complex>
+ 
+ // psabi warnings are bogus because the ABI of the internal types never leaks into user code
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wpsabi"
+ 
+ namespace std _GLIBCXX_VISIBILITY(default)
+ {
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+ namespace simd
+ {
+   /** @internal
+    * @brief Return a _CxIleav mask that holds @p __k as its data member.
+    *
+    * @note If the resulting mask type has size 1, then it will actually store a single bool, rather
+    * than the given mask object.
+    */
+   template <size_t _Bytes, typename _Ap, __abi_tag _Aret
+ 	      = decltype(__abi_rebind<complex<__float_from<_Bytes>>, _Ap::_S_size / 2, _Ap>())>
+     [[__gnu__::__always_inline__]]
+     constexpr basic_mask<_Bytes * 2, _Aret>
+     __to_cx_ileav(const basic_mask<_Bytes, _Ap>& __k)
+     {
+       static_assert(_Ap::_S_size % 2 == 0
+ 		      && (__filter_abi_variant(_Ap::_S_variant, _AbiVariant::_CxVariants)
+ 			    == _AbiVariant()));
+       if constexpr (_Aret::_S_size == 1)
+ 	return basic_mask<_Bytes * 2, _Aret>(__k[0]);
+       else
+ 	return basic_mask<_Bytes * 2, _Aret>::_S_init(__k);
+     }
+ 
+   constexpr void
+   __check_hi_bits_for_zero(unsigned_integral auto __x)
+   {
+     __glibcxx_simd_precondition(__x == 0,
+ 				"to_ullong called on mask with 'true' elements at indices"
+ 				"higher than 64");
+   }
+ 
+   template <typename _T0, typename _T1>
+     constexpr void
+     __check_hi_bits_for_zero(const __trivial_pair<_T0, _T1>& __p)
+     {
+       std::simd::__check_hi_bits_for_zero(__p._M_first);
+       std::simd::__check_hi_bits_for_zero(__p._M_second);
+     }
+ 
+   constexpr unsigned long long
+   __unwrap_pairs_to_ullong(unsigned_integral auto __x)
+   { return __x; }
+ 
+   template <typename _T0, typename _T1>
+     constexpr unsigned long long
+     __unwrap_pairs_to_ullong(const __trivial_pair<_T0, _T1>& __p)
+     {
+       std::simd::__check_hi_bits_for_zero(__p._M_second);
+       return std::simd::__unwrap_pairs_to_ullong(__p._M_first);
+     }
+ 
+   template <int _Np>
+     constexpr bitset<_Np>
+     __unwrap_pairs_to_bitset(unsigned_integral auto __x)
+     {
+       static_assert(_Np <= 64);
+       return __x;
+     }
+ 
+   template <size_t _Np, typename _T0, typename _T1>
+     constexpr bitset<_Np>
+     __unwrap_pairs_to_bitset(const __trivial_pair<_T0, _T1>& __p)
+     {
+       constexpr size_t _N0 = __bit_floor(_Np);
+       constexpr size_t _N1 = _Np - _N0;
+       static_assert(_N0 % 64 == 0);
+       struct _Tmp
+       {
+ 	bitset<__bit_floor(_Np)> _M_lo;
+ 	bitset<_Np - __bit_floor(_Np)> _M_hi;
+       };
+       _Tmp __tmp = {std::simd::__unwrap_pairs_to_bitset<_N0>(__p._M_first),
+ 		    std::simd::__unwrap_pairs_to_bitset<_N1>(__p._M_second)};
+       return __builtin_bit_cast(bitset<_Np>, __tmp);
+     }
+ 
+   template <size_t _Bytes>
+     consteval auto
+     __tree_of_ulong()
+     {
+       static constexpr size_t _N0 = __bit_floor(_Bytes - 1);
+       static constexpr size_t _N1 = _Bytes - _N0;
+       if constexpr (_Bytes <= sizeof(unsigned long))
+ 	return 0ul;
+       else
+ 	return __trivial_pair {__tree_of_ulong<_N0>(), __tree_of_ulong<_N1>()};
+     }
+ 
+   template <size_t _Bytes>
+     using __tree_of_ulong_t = decltype(__tree_of_ulong<_Bytes>());
+ 
+   template <size_t _Np>
+     constexpr auto
+     __bitset_to_pairs(const bitset<_Np>& __b) noexcept
+     {
+       if constexpr (_Np <= 64)
+ 	return __b.to_ullong();
+       else
+ 	return __builtin_bit_cast(__tree_of_ulong_t<__div_ceil(_Np, size_t(__CHAR_BIT__))>, __b);
+     }
+ 
+   // complex interleaved (_CxIleav) -------------------------------------------
+ 
+   /** @internal
+    * @brief Functions acting on / recursing into the non-complex fp vec objects, interpreting even
+    * elements as real and odd elements as imaginary.
+    */
+   namespace __cxileav
+   {
+     /** @internal
+      * @brief Set even (real) elements in @p __x to the values in @p __re.
+      */
+     template <typename _Tp, typename _Ap>
+       [[__gnu__::__always_inline__]]
+       constexpr void
+       __set_real(basic_vec<_Tp, _Ap>& __x,
+ 		 const __similar_vec<_Tp, _Ap::_S_size / 2, _Ap>& __re) noexcept
+       {
+ 	if constexpr (__scalar_abi_tag<_Ap> && _Ap::_S_size == 2)
+ 	  __x._M_get_low() = __re;
+ 	else if constexpr (_Ap::_S_nreg >= 2)
+ 	  { // recurse
+ 	    constexpr int __n0 = __x._M_get_low().size();
+ 	    const auto& [__lo, __hi] = __re.template _M_chunk<
+ 					 __similar_vec<_Tp, __n0 / 2, _Ap>>();
+ 	    __set_real(__x._M_get_low(), __lo);
+ 	    __set_real(__x._M_get_high(), __hi);
+ 	  }
+ 	else
+ 	  {
+ 	    using _DataType = typename _Ap::template _DataType<_Tp>;
+ 	    _DataType& __xv = __x._M_get();
+ 	    const auto __rv = __re._M_get();
+ 	    if constexpr (_Ap::_S_size == 2)
+ 	      __vec_set(__xv, 0, __rv);
+ 	    else if (__is_const_known(__x, __re))
+ 	      {
+ 		constexpr auto [...__is] = _IotaArray<_Ap::_S_size>;
+ 		__xv = _DataType {((__is & 1) == 0 ? __rv[__is / 2] : __xv[__is])...};
+ 	      }
+ 	    else
+ 	      _VecOps<_DataType>::_S_overwrite_even_elements(__xv, __rv);
+ 	  }
+       }
+ 
+     /** @internal
+      * @brief Set odd (imaginary) elements in @p __x to the values in @p __im.
+      */
+     template <typename _Tp, typename _Ap>
+       [[__gnu__::__always_inline__]]
+       constexpr void
+       __set_imag(basic_vec<_Tp, _Ap>& __x,
+ 		 const __similar_vec<_Tp, _Ap::_S_size / 2, _Ap>& __im) noexcept
+       {
+ 	if constexpr (__scalar_abi_tag<_Ap> && _Ap::_S_size == 2)
+ 	  __x._M_get_high() = __im;
+ 	else if constexpr (_Ap::_S_nreg >= 2)
+ 	  { // recurse
+ 	    constexpr int __n0 = __x._M_get_low().size();
+ 	    const auto& [__lo, __hi] = __im.template _M_chunk<
+ 					 __similar_vec<_Tp, __n0 / 2, _Ap>>();
+ 	    __set_imag(__x._M_get_low(), __lo);
+ 	    __set_imag(__x._M_get_high(), __hi);
+ 	  }
+ 	else
+ 	  {
+ 	    using _DataType = typename _Ap::template _DataType<_Tp>;
+ 	    _DataType& __xv = __x._M_get();
+ 	    const auto __iv = __im._M_get();
+ 	    if constexpr (_Ap::_S_size == 2)
+ 	      __vec_set(__xv, 1, __iv);
+ 	    else if (__is_const_known(__x, __im))
+ 	      {
+ 		constexpr auto [...__is] = _IotaArray<_Ap::_S_size>;
+ 		__xv = _DataType {((__is & 1) == 1 ? __iv[__is / 2] : __xv[__is])...};
+ 	      }
+ 	    else
+ 	      _VecOps<_DataType>::_S_overwrite_odd_elements(__xv, __iv);
+ 	  }
+       }
+ 
+     /** @internal
+      * @brief Return @p __x after flipping the sign of odd (imaginary) elements.
+      */
+     template <typename _Tp, typename _Ap>
+       [[__gnu__::__always_inline__]]
+       constexpr basic_vec<_Tp, _Ap>
+       __negate_imag(const basic_vec<_Tp, _Ap>& __x)
+       {
+ 	if constexpr (__scalar_abi_tag<_Ap> && _Ap::_S_size == 2)
+ 	  return basic_vec<_Tp, _Ap>::_S_init(__x._M_get_low(), -__x._M_get_high());
+ 	else if constexpr (_Ap::_S_nreg >= 2) // recurse
+ 	  return basic_vec<_Tp, _Ap>::_S_init(__negate_imag(__x._M_get_low()),
+ 					      __negate_imag(__x._M_get_high()));
+ 	else
+ 	  return _VecOps<typename _Ap::template _DataType<_Tp>>
+ 		   ::_S_complex_negate_imag(__x._M_get());
+       }
+ 
+     /** @internal
+      * @brief Recompute all complex multiplications where @p __nan is true using @p _Cx's
+      * multiplication operator.
+      *
+      * @todo use coarser _TargetTraits and move into .so
+      */
+     template <typename _Cx, _TargetTraits, __vec_builtin _TV>
+       [[__gnu__::__cold__]]
+       constexpr _TV
+       __redo_mul(_TV __r, const _TV __x, const _TV __y, const auto __nan, const int __n)
+       {
+ 	// redo multiplication using scalar complex-mul on (NaN, NaN) results
+ 	for (int __i = 0; __i < __n; __i += 2)
+ 	  {
+ 	    if (__nan[__i] && __nan[__i + 1])
+ 	      {
+ 		using _Tc = typename _Cx::value_type;
+ 		const _Cx __cx(_Tc(__x[__i]), _Tc(__x[__i + 1]));
+ 		const _Cx __cy(_Tc(__y[__i]), _Tc(__y[__i + 1]));
+ 		const _Cx __cr = __cx * __cy;
+ 		__vec_set(__r, __i, __cr.real());
+ 		__vec_set(__r, __i + 1, __cr.imag());
+ 	      }
+ 	  }
+ 	return __r;
+       }
+ 
+     /** @internal
+      * @brief Complex multiplication of @p __x and @p __y, returning the result in @p __x.
+      */
+     template <typename _Cx, _TargetTraits _Traits, typename _Tp, typename _Ap>
+       [[__gnu__::__always_inline__]]
+       constexpr void
+       __mul(basic_vec<_Tp, _Ap>& __x, const basic_vec<_Tp, _Ap>& __y)
+       {
+ 	static_assert(__complex_like<_Cx>);
+ 	if constexpr (__scalar_abi_tag<_Ap> && _Ap::_S_size == 2)
+ 	  {
+ 	    const _Cx __c = _Cx(__x[0], __x[1]) * _Cx(__y[0], __y[1]);
+ 	    __x._M_get_low() = __c.real();
+ 	    __x._M_get_high() = __c.imag();
+ 	  }
+ 	else if constexpr (_Ap::_S_nreg >= 2)
+ 	  { // recurse
+ 	    __mul<_Cx, _Traits>(__x._M_get_low(), __y._M_get_low());
+ 	    __mul<_Cx, _Traits>(__x._M_get_high(), __y._M_get_high());
+ 	  }
+ 	else if constexpr (_Traits.template _M_eval_as_f32<_Tp>())
+ 	  { // eval float16_t as float
+ 	    using _Vf32 = rebind_t<float, basic_vec<_Tp, _Ap>>;
+ 	    _Vf32 __xf32(__x);
+ 	    __mul<_Cx, _Traits>(__xf32, _Vf32(__y));
+ 	    __x = static_cast<basic_vec<_Tp, _Ap>>(__xf32);
+ 	  }
+ 	else
+ 	  {
+ 	    using _DataType = typename _Ap::template _DataType<_Tp>;
+ 	    const _DataType __xv = __x._M_get();
+ 	    const _DataType __yv = __y._M_get();
+ 	    using _VO = _VecOps<_DataType>; // don't care for actual numer of elements
+ 	    using _VOS = _VecOps<_DataType, _Ap::_S_size>; // to check for const-prop values
+ 	    if (_VOS::_S_complex_imag_is_const_known_zero(__xv))
+ 	      {
+ 		if (_VOS::_S_complex_imag_is_const_known_zero(__yv))
+ 		  __x = __xv * __yv;
+ 		else
+ 		  {
+ 		    if (_Traits._M_conforming_to_STDC_annex_G())
+ 		      { // handle negative zero (0 * y can be -0)
+ 			auto __a = _VO::_S_dup_even(__xv) * __yv;
+ 			auto __b = _DataType() * _VO::_S_swap_neighbors(__yv);
+ 			__x = _VO::_S_addsub(__a, __b);
+ 		      }
+ 		    else
+ 		      __x = _VO::_S_dup_even(__xv) * __yv;
+ 		  }
+ 	      }
+ 	    else if (_VOS::_S_complex_imag_is_const_known_zero(__yv))
+ 	      {
+ 		if (_Traits._M_conforming_to_STDC_annex_G())
+ 		  __x = _VO::_S_addsub(_VO::_S_dup_even(__yv) * __xv,
+ 				       _DataType() * _VO::_S_swap_neighbors(__xv));
+ 		else
+ 		  __x = _VO::_S_dup_even(__yv) * __xv;
+ 	      }
+ 	    else if (_VOS::_S_complex_real_is_const_known_zero(__yv))
+ 	      {
+ 		if (_Traits._M_conforming_to_STDC_annex_G())
+ 		  __x = _VO::_S_addsub(_DataType(), _VO::_S_dup_odd(__yv)
+ 					 * _VO::_S_swap_neighbors(__xv));
+ 		else
+ 		  __x = _VO::_S_dup_odd(__yv)
+ 			  * _VO::_S_complex_negate_real(_VO::_S_swap_neighbors(__xv));
+ 	      }
+ 	    else if (_VOS::_S_complex_real_is_const_known_zero(__xv))
+ 	      {
+ 		if (_Traits._M_conforming_to_STDC_annex_G())
+ 		  __x = _VO::_S_addsub(_DataType(), _VO::_S_dup_odd(__xv)
+ 					 * _VO::_S_swap_neighbors(__yv));
+ 		else
+ 		  __x = _VO::_S_dup_odd(__xv)
+ 			  * _VO::_S_complex_negate_real(_VO::_S_swap_neighbors(__yv));
+ 	      }
+ 	    else
+ 	      {
+ #if _GLIBCXX_X86
+ 		if (_Traits._M_have_fma() && !__is_const_known(__xv, __yv))
+ 		  {
+ 		    if constexpr (_Traits._M_have_fma())
+ 		      __x = __x86_complex_multiplies(__xv, __yv);
+ 		  }
+ 		else
+ #endif
+ 		  __x = _VO::_S_addsub(_VO::_S_dup_even(__xv) * __yv,
+ 				       _VO::_S_dup_odd(__xv) * _VO::_S_swap_neighbors(__yv));
+ 		const auto __nan = __x._M_isnan();
+ 		if (_Traits._M_conforming_to_STDC_annex_G() && __nan._M_any_of())
+ 		  __x = __redo_mul<_Cx, _Traits>(__x._M_get(), __xv, __yv, __nan, _Ap::_S_size);
+ 	      }
+ 	  }
+       }
+   }
+ 
+   template <size_t _Bytes, __abi_tag _Ap>
+     requires _Ap::_S_is_cx_ileav && (_Ap::_S_size >= 2) // size 1 is in simd_mask.h
+     class basic_mask<_Bytes, _Ap>
+     : public _MaskBase<_Bytes, _Ap>
+     {
+       using _Base = _MaskBase<_Bytes, _Ap>;
+ 
+       using _VecType = _Base::_VecType;
+ 
+       template <size_t, typename>
+ 	friend class basic_mask;
+ 
+       template <typename, typename>
+ 	friend class basic_vec;
+ 
+       static constexpr int _S_size = _Ap::_S_size;
+ 
+       using _DataType = __component_mask_for_ileav<_Bytes, _Ap>;
+ 
+       static constexpr bool _S_is_scalar = _DataType::_S_is_scalar;
+ 
+       static constexpr bool _S_use_bitmask = _DataType::_S_use_bitmask;
+ 
+       static constexpr int _S_full_size = _DataType::_S_full_size / 2;
+ 
+       static constexpr bool _S_is_partial = _DataType::_S_is_partial;
+ 
+       static constexpr bool _S_has_bool_member = _DataType::_S_has_bool_member;
+ 
+       static constexpr size_t _S_padding_bytes = _DataType::_S_padding_bytes;
+ 
+       _DataType _M_data;
+ 
+     public:
+       using value_type = bool;
+ 
+       using abi_type = _Ap;
+ 
+       using iterator = _Base::iterator;
+ 
+       using const_iterator = _Base::const_iterator;
+ 
+       // internal but public API ----------------------------------------------
+       [[__gnu__::__always_inline__]]
+       static constexpr basic_mask
+       _S_init(const _DataType& __x)
+       {
+ 	basic_mask __r;
+ 	__r._M_data = __x;
+ 	return __r;
+       }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr auto
+       _M_concat_data() const
+       { return _M_data._M_concat_data(); }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr const _DataType&
+       _M_get_ileav_data() const
+       { return _M_data; }
+ 
+       template <_ArchTraits _Traits = {}>
+ 	[[__gnu__::__always_inline__]]
+ 	static constexpr basic_mask
+ 	_S_partial_mask_of_n(int __n)
+ 	{ return _S_init(_DataType::_S_partial_mask_of_n(__n * 2)); }
+ 
+       [[__gnu__::__always_inline__]]
+       static constexpr basic_mask
+       _S_and_neighbors(_DataType __k)
+       { return _S_init(__k._M_and_neighbors()); }
+ 
+       [[__gnu__::__always_inline__]]
+       static constexpr basic_mask
+       _S_or_neighbors(_DataType __k)
+       { return _S_init(__k._M_or_neighbors()); }
+ 
+       template <typename _Mp>
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr auto
+ 	_M_chunk() const noexcept
+ 	{
+ 	  if constexpr (_Mp::abi_type::_S_variant != _Ap::_S_variant)
+ 	    {
+ 	      using _M2 = resize_t<_S_size, _Mp>;
+ 	      static_assert(!is_same_v<_M2, basic_mask>);
+ 	      return static_cast<_M2>(*this).template _M_chunk<_Mp>();
+ 	    }
+ 	  else if constexpr (_Mp::_S_size == 1)
+ 	    {
+ 	      constexpr auto [...__is] = _IotaArray<_S_size>;
+ 	      return array{_Mp(_M_data[__is])...};
+ 	    }
+ 	  else // _Mp is the same partial specialization
+ 	    {
+ 	      constexpr int __rem = _S_size % _Mp::_S_size;
+ 	      const auto [...__xs] = _M_data.template _M_chunk<typename _Mp::_DataType>();
+ 	      static_assert(is_same_v<decltype(__to_cx_ileav(__xs...[0])), _Mp>);
+ 	      if constexpr (__rem == 0)
+ 		return array{__to_cx_ileav(__xs)...};
+ 	      else
+ 		return tuple(__to_cx_ileav(__xs)...);
+ 	    }
+ 	}
+ 
+       [[__gnu__::__always_inline__]]
+       static constexpr const basic_mask&
+       _S_concat(const basic_mask& __x0) noexcept
+       { return __x0; }
+ 
+       template <typename... _As>
+ 	requires (sizeof...(_As) > 1)
+ 	[[__gnu__::__always_inline__]]
+ 	static constexpr basic_mask
+ 	_S_concat(const basic_mask<_Bytes, _As>&... __xs) noexcept
+ 	{ return basic_mask::_S_init(_DataType::_S_concat(__xs._M_get_ileav_data()...)); }
+ 
+       // [simd.mask.overview] default constructor -----------------------------
+       basic_mask() = default;
+ 
+       // [simd.mask.overview] conversion extensions ---------------------------
+       template <__vec_builtin _TV>
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr
+ 	basic_mask(const _TV& __x) requires convertible_to<_TV, _DataType>
+ 	: _M_data(__x)
+ 	{}
+ 
+       template <__vec_builtin _TV>
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr
+ 	operator _TV() requires convertible_to<_DataType, _TV>
+ 	{ return _M_data; }
+ 
+       // [simd.mask.ctor] broadcast constructor -------------------------------
+       [[__gnu__::__always_inline__]]
+       constexpr explicit
+       basic_mask(same_as<bool> auto __x) noexcept // LWG 4382.
+ 	: _M_data(__x)
+       {}
+ 
+       // [simd.mask.ctor] conversion constructor ------------------------------
+       template <size_t _UBytes, typename _UAbi>
+ 	requires (_S_size == _UAbi::_S_size)
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr explicit(__is_mask_conversion_explicit<_Ap, _UAbi>(_Bytes, _UBytes))
+ 	basic_mask(const basic_mask<_UBytes, _UAbi>& __x) noexcept
+ 	  : _M_data([&] {
+ 	      using _UV = basic_mask<_UBytes, _UAbi>;
+ 	      if constexpr (_UAbi::_S_is_cx_ileav)
+ 		// _CxIleav -> _CxIleav => we can simply convert the contained mask
+ 		return __x._M_data; // calls conversion ctor on _DataType
+ 
+ 	      // __x is not _CxIleav from here on
+ 	      else if constexpr (_S_use_bitmask || _UV::_S_use_bitmask)
+ 		return _DataType::_S_init(__duplicate_each_bit<_S_size>(__x._M_to_uint()));
+ 
+ 	      // vec-mask to vec-mask from here on
+ 	      else if constexpr (_UAbi::_S_is_cx_ctgus)
+ 		// unwrap _CxCtgus mask and recurse
+ 		return basic_mask(__x._M_data)._M_data;
+ 
+ 	      else if constexpr (_UV::_S_is_scalar || _S_is_scalar)
+ 		// need to duplicate & convert one vector element into two bools
+ 		return _DataType([&](int __i) { return __x[__i / 2]; }); // TODO: optimize
+ 
+ 	      else if constexpr (_Bytes == _UBytes)
+ 		return _DataType::_S_recursive_bit_cast(__x);
+ 	      else if constexpr (_Bytes <= sizeof(0ll))
+ 		{
+ 		  using _U2 = __similar_mask<__integer_from<_Bytes>, _S_size, _UAbi>;
+ 		  return _DataType::_S_recursive_bit_cast(_U2(__x));
+ 		}
+ 	      else if constexpr (_UBytes > 1)
+ 		{
+ 		  using _U2 = __similar_mask<__integer_from<_UBytes / 2>, _S_size * 2, _UAbi>;
+ 		  return _U2::_S_recursive_bit_cast(__x); // calls conversion ctor on _DataType
+ 		}
+ 	      else // _Bytes == 16 && _UBytes == 1
+ 		// convert twice (1 -> 2 -> 16)
+ 		// The conversion to short keeps the intermediate mask as small as possible and thus
+ 		// requires fewer across-128bit boundary shuffles.
+ 		return basic_mask(__similar_mask<short, _UV::_S_size, _UAbi>(__x))._M_data;
+ 	  }())
+ 	{}
+ 
+       using _Base::_MaskBase;
+ 
+       // [simd.mask.ctor] generator constructor -------------------------------
+       template <__simd_generator_invokable<bool, _S_size> _Fp>
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr explicit
+ 	basic_mask(_Fp&& __gen)
+ 	: _M_data([&] [[__gnu__::__always_inline__]] {
+ 	    // for _CxIleav, the results of each __gen call need to initialize two
+ 	    // neighboring elements
+ 	    constexpr auto [...__is] = _IotaArray<_S_size>;
+ 	    bool __tmp[_S_size] = {__gen(__simd_size_c<__is>)...};
+ 	    return _DataType([&] [[__gnu__::__always_inline__]] (size_t __i) {
+ 		     return __tmp[__i / 2];
+ 		   });
+ 	  }())
+ 	{}
+ 
+       // [simd.mask.ctor] bitset constructor ----------------------------------
+       [[__gnu__::__always_inline__]]
+       constexpr
+       basic_mask(const same_as<bitset<_S_size>> auto& __b) noexcept // LWG 4382.
+       : _M_data(_DataType::_S_init(__duplicate_each_bit<_S_size>(
+ 				     std::simd::__bitset_to_pairs(__b))))
+       {}
+ 
+       // [simd.mask.ctor] uint constructor ------------------------------------
+       template <unsigned_integral _Tp>
+ 	requires (!same_as<_Tp, bool>) // LWG 4382.
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr explicit
+ 	basic_mask(_Tp __val) noexcept
+ 	: _M_data(__duplicate_each_bit<_S_size>(__val))
+ 	{}
+ 
+       // [simd.mask.subscr] ---------------------------------------------------
+       [[__gnu__::__always_inline__]]
+       constexpr value_type
+       operator[](__simd_size_type __i) const
+       { return _M_data[__i * 2]; }
+ 
+       // [simd.mask.unary] ----------------------------------------------------
+       [[__gnu__::__always_inline__]]
+       constexpr basic_mask
+       operator!() const noexcept
+       { return _S_init(!_M_data); }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr _VecType
+       operator+() const noexcept requires destructible<_VecType>
+       { return operator _VecType(); }
+ 
+       constexpr _VecType
+       operator+() const noexcept = delete;
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr _VecType
+       operator-() const noexcept requires destructible<_VecType>
+       {
+ 	using _Ip = typename _VecType::value_type;
+ 	if constexpr (_S_use_bitmask)
+ 	  return __select_impl(*this, _Ip(-1), _Ip());
+ 	else
+ 	  return __builtin_bit_cast(_VecType, -_M_data);
+       }
+ 
+       constexpr _VecType
+       operator-() const noexcept = delete;
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr _VecType
+       operator~() const noexcept requires destructible<_VecType>
+       {
+ 	using _Ip = typename _VecType::value_type;
+ 	if constexpr (_S_use_bitmask)
+ 	  return __select_impl(*this, _Ip(-2), _Ip(-1));
+ 	else
+ 	  return __builtin_bit_cast(_VecType, _M_data) - _Ip(1);
+       }
+ 
+       constexpr _VecType
+       operator~() const noexcept = delete;
+ 
+       // [simd.mask.conv] -----------------------------------------------------
+       template <typename _Up, typename _UAbi>
+ 	requires (_UAbi::_S_size == _S_size)
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr explicit(sizeof(_Up) != _Bytes)
+ 	operator basic_vec<_Up, _UAbi>() const noexcept
+ 	{
+ 	  using _Mp = typename basic_vec<_Up, _UAbi>::mask_type;
+ 	  return __select_impl(_Mp(*this), basic_vec<_Up, _UAbi>(1), basic_vec<_Up, _UAbi>(0));
+ 	}
+ 
+       using _Base::operator basic_vec;
+ 
+       // [simd.mask.namedconv] ------------------------------------------------
+       [[__gnu__::__always_inline__]]
+       constexpr bitset<_S_size>
+       to_bitset() const noexcept
+       { return std::simd::__unwrap_pairs_to_bitset<_S_size>(_M_to_uint()); }
+ 
+       template <int _Offset = 0, _ArchTraits _Traits = {}>
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr auto
+ 	_M_to_uint() const
+ 	{ return _M_data.template _M_to_uint<_Offset, true>(); }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr unsigned long long
+       to_ullong() const
+       { return std::simd::__unwrap_pairs_to_ullong(_M_to_uint()); }
+ 
+       // [simd.mask.binary] ---------------------------------------------------
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask
+       operator&&(const basic_mask& __x, const basic_mask& __y) noexcept
+       { return _S_init(__x._M_data & __y._M_data); }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask
+       operator||(const basic_mask& __x, const basic_mask& __y) noexcept
+       { return _S_init(__x._M_data | __y._M_data); }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask
+       operator&(const basic_mask& __x, const basic_mask& __y) noexcept
+       { return _S_init(__x._M_data & __y._M_data); }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask
+       operator|(const basic_mask& __x, const basic_mask& __y) noexcept
+       { return _S_init(__x._M_data | __y._M_data); }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask
+       operator^(const basic_mask& __x, const basic_mask& __y) noexcept
+       { return _S_init(__x._M_data ^ __y._M_data); }
+ 
+       // [simd.mask.cassign] --------------------------------------------------
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask&
+       operator&=(basic_mask& __x, const basic_mask& __y) noexcept
+       {
+ 	__x._M_data &= __y._M_data;
+ 	return __x;
+       }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask&
+       operator|=(basic_mask& __x, const basic_mask& __y) noexcept
+       {
+ 	__x._M_data |= __y._M_data;
+ 	return __x;
+       }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask&
+       operator^=(basic_mask& __x, const basic_mask& __y) noexcept
+       {
+ 	__x._M_data ^= __y._M_data;
+ 	return __x;
+       }
+ 
+       // [simd.mask.comparison] -----------------------------------------------
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask
+       operator==(const basic_mask& __x, const basic_mask& __y) noexcept
+       { return _S_init(__x._M_data == __y._M_data); }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask
+       operator!=(const basic_mask& __x, const basic_mask& __y) noexcept
+       { return _S_init(__x._M_data != __y._M_data); }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask
+       operator>=(const basic_mask& __x, const basic_mask& __y) noexcept
+       { return _S_init(__x._M_data >= __y._M_data); }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask
+       operator<=(const basic_mask& __x, const basic_mask& __y) noexcept
+       { return _S_init(__x._M_data <= __y._M_data); }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask
+       operator>(const basic_mask& __x, const basic_mask& __y) noexcept
+       { return _S_init(__x._M_data > __y._M_data); }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask
+       operator<(const basic_mask& __x, const basic_mask& __y) noexcept
+       { return _S_init(__x._M_data < __y._M_data); }
+ 
+       // [simd.mask.cond] -----------------------------------------------------
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask
+       __select_impl(const basic_mask& __k, const basic_mask& __t, const basic_mask& __f) noexcept
+       { return _S_init(__select_impl(__k._M_data, __t._M_data, __f._M_data)); }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask
+       __select_impl(const basic_mask& __k, same_as<bool> auto __t, same_as<bool> auto __f) noexcept
+       { return _S_init(__select_impl(__k._M_data, __t, __f)); }
+ 
+       template <__vectorizable _T0, same_as<_T0> _T1>
+ 	requires (sizeof(_T0) == _Bytes)
+ 	[[__gnu__::__always_inline__]]
+ 	friend constexpr vec<_T0, _S_size>
+ 	__select_impl(const basic_mask& __k, const _T0& __t, const _T1& __f) noexcept
+ 	{
+ 	  using _Vp = vec<_T0, _S_size>;
+ 	  return __select_impl(static_cast<typename _Vp::mask_type>(__k), _Vp(__t), _Vp(__f));
+ 	}
+ 
+       // [simd.mask.reductions] implementation --------------------------------
+       [[__gnu__::__always_inline__]]
+       constexpr bool
+       _M_all_of() const noexcept
+       { return _M_data._M_all_of(); }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr bool
+       _M_any_of() const noexcept
+       { return _M_data._M_any_of(); }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr bool
+       _M_none_of() const noexcept
+       { return _M_data._M_none_of(); }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr __simd_size_type
+       _M_reduce_count() const noexcept
+       { return _M_data._M_reduce_count() / 2; }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr __simd_size_type
+       _M_reduce_min_index() const
+       { return _M_data._M_reduce_min_index() / 2; }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr __simd_size_type
+       _M_reduce_max_index() const
+       { return _M_data._M_reduce_max_index() / 2; }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr bool
+       __is_const_known(const basic_mask& __x)
+       { return __is_const_known(__x._M_data); }
+     };
+ 
+   template <__vectorizable _Tp, __abi_tag _Ap>
+     requires __complex_like<_Tp> && _Ap::_S_is_cx_ileav && (_Ap::_S_size >= 2) // size 1 is below
+     class basic_vec<_Tp, _Ap>
+     : public _VecBase<_Tp, _Ap>
+     {
+       template <typename, typename>
+ 	friend class basic_vec;
+ 
+       static constexpr int _S_size = _Ap::_S_size;
+ 
+       static constexpr int _S_full_size = __bit_ceil(unsigned(_S_size));
+ 
+       using _T0 = typename _Tp::value_type;
+ 
+       using _TSimd = __similar_vec<_T0, 2 * _S_size, _Ap>;
+ 
+       using _RealSimd = __similar_vec<_T0, _S_size, _Ap>;
+ 
+       _TSimd _M_data = {};
+ 
+       static constexpr bool _S_use_bitmask = _TSimd::_S_use_bitmask;
+ 
+       static constexpr bool _S_is_partial = sizeof(_M_data) > sizeof(_Tp) * _S_size;
+ 
+       [[__gnu__::__always_inline__]]
+       static constexpr basic_vec
+       _S_init(const _TSimd& __x)
+       {
+ 	basic_vec __r;
+ 	__r._M_data = __x;
+ 	return __r;
+       }
+ 
+     public:
+       using value_type = _Tp;
+ 
+       using mask_type = _VecBase<_Tp, _Ap>::mask_type;
+ 
+       // internal but public API ----------------------------------------------
+       [[__gnu__::__always_inline__]]
+       constexpr const _TSimd&
+       _M_get_ileav_data() const
+       { return _M_data; }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr const auto&
+       _M_get_low() const requires (_Ap::_S_nreg >= 2)
+       { return _M_data._M_get_low(); }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr const auto&
+       _M_get_high() const requires (_Ap::_S_nreg >= 2)
+       { return _M_data._M_get_high(); }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr bool
+       __is_const_known(const basic_vec& __x)
+       { return __is_const_known(__x._M_data); }
+ 
+       template <typename _Vp>
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr auto
+ 	_M_chunk() const noexcept
+ 	{
+ 	  if constexpr (_Vp::abi_type::_S_is_cx_ileav)
+ 	    {
+ 	      constexpr int __n = _S_size / _Vp::_S_size;
+ 	      constexpr int __rem = _S_size % _Vp::_S_size;
+ 	      const auto __chunked = _M_data.template _M_chunk<resize_t<_Vp::_S_size * 2,
+ 									_TSimd>>();
+ 	      constexpr auto [...__is] = _IotaArray<__n>;
+ 	      if constexpr (__rem == 0)
+ 		return array<_Vp, __n> {_Vp::_S_init(__chunked[__is])...};
+ 	      else
+ 		{
+ 		  using _Rest = resize_t<__rem, _Vp>;
+ 		  return tuple(_Vp::_S_init(get<__is>(__chunked))...,
+ 			       _Rest::_S_init(get<__n>(__chunked)));
+ 		}
+ 	    }
+ 	  else
+ 	    return resize_t<_S_size, _Vp>(*this).template _M_chunk<_Vp>();
+ 	}
+ 
+       [[__gnu__::__always_inline__]]
+       static constexpr const basic_vec&
+       _S_concat(const basic_vec& __x0) noexcept
+       { return __x0; }
+ 
+       template <typename... _As>
+ 	requires (sizeof...(_As) > 1)
+ 	[[__gnu__::__always_inline__]]
+ 	static constexpr basic_vec
+ 	_S_concat(const basic_vec<value_type, _As>&... __xs) noexcept
+ 	{ return basic_vec::_S_init(_TSimd::_S_concat(__xs._M_get_ileav_data()...)); }
+ 
+       template <typename _BinaryOp>
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr auto
+ 	_M_reduce_to_register(_BinaryOp __binary_op) const
+ 	{
+ 	  if constexpr (_TSimd::abi_type::_S_nreg == 1)
+ 	    return *this;
+ 	  else
+ 	    {
+ 	      auto [__lo, __hi] = _M_chunk<resize_t<__bit_ceil(unsigned(_S_size)) / 2,
+ 						    basic_vec>>();
+ 	      auto __a = __lo._M_reduce_to_register(__binary_op);
+ 	      auto __b = __hi._M_reduce_to_register(__binary_op);
+ 	      if constexpr (__a._S_size == __b._S_size)
+ 		return __binary_op(__a, __b);
+ 	      else
+ 		{
+ 		  using _V1 = resize_t<1, basic_vec>;
+ 		  return __binary_op(_V1(__a._M_reduce(__binary_op)),
+ 				     _V1(__b._M_reduce(__binary_op)));
+ 		}
+ 	    }
+ 	}
+ 
+       template <typename _BinaryOp, _ArchTraits _Traits = {}>
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr value_type
+ 	_M_reduce(_BinaryOp __binary_op) const
+ 	{
+ 	  if constexpr (_S_size == 1)
+ 	    return operator[](0);
+ 	  else if constexpr (_Traits.template _M_eval_as_f32<_T0>())
+ 	    return value_type(rebind_t<complex<float>, basic_vec>(*this)._M_reduce(__binary_op));
+ 	  else if constexpr (_TSimd::abi_type::_S_nreg >= 2)
+ 	    return _M_reduce_to_register(__binary_op)._M_reduce(__binary_op);
+ 	  else if constexpr (__has_single_bit(unsigned(_S_size)))
+ 	    {
+ 	      const auto [__a, __b] = _M_chunk<resize_t<_S_size / 2, basic_vec>>();
+ 	      return __binary_op(__a, __b)._M_reduce(__binary_op);
+ 	    }
+ 	  else
+ 	    {
+ 	      const auto [__a, __b, __c, ...__rest]
+ 		= _M_chunk<resize_t<__bit_floor(unsigned(_S_size)) / 2, basic_vec>>();
+ 	      const auto __ab = __binary_op(__a, __b);
+ 	      static_assert(sizeof...(__rest) <= 1);
+ 	      if constexpr (__a._S_size != __c._S_size)
+ 		return cat(__ab, __c)._M_reduce(__binary_op);
+ 	      else
+ 		return cat(__binary_op(__ab, __c), __rest...)._M_reduce(__binary_op);
+ 	    }
+ 	}
+ 
+       template <typename _Up>
+ 	[[__gnu__::__always_inline__]]
+ 	static inline basic_vec
+ 	_S_partial_load(const _Up* __mem, size_t __n)
+ 	{
+ 	  if constexpr (__complex_like<_Up>)
+ 	    return _S_init(_TSimd::_S_partial_load(
+ 			     reinterpret_cast<const typename _Up::value_type*>(__mem), __n * 2));
+ 	  else
+ 	    return basic_vec(_RealSimd::_S_partial_load(__mem, __n));
+ 	}
+ 
+       template <typename _Up, _ArchTraits _Traits = {}>
+ 	static inline basic_vec
+ 	_S_masked_load(const _Up* __mem, mask_type __k)
+ 	{
+ 	  if constexpr (__complex_like<_Up>)
+ 	    return _S_init(_TSimd::_S_masked_load(
+ 			     reinterpret_cast<const typename _Up::value_type*>(__mem),
+ 			     __k._M_data));
+ 	  else
+ 	    return basic_vec(_RealSimd::_S_masked_load(__mem, typename _RealSimd::mask_type(__k)));
+ 	}
+ 
+       template <typename _Up>
+ 	[[__gnu__::__always_inline__]]
+ 	inline void
+ 	_M_store(_Up* __mem) const
+ 	{
+ 	  static_assert(__complex_like<_Up>);
+ 	  _M_data._M_store(reinterpret_cast<typename _Up::value_type*>(__mem));
+ 	}
+ 
+       template <typename _Up>
+ 	[[__gnu__::__always_inline__]]
+ 	static inline void
+ 	_S_partial_store(const basic_vec& __v, _Up* __mem, size_t __n)
+ 	{
+ 	  static_assert(__complex_like<_Up>);
+ 	  _TSimd::_S_partial_store(__v._M_data, reinterpret_cast<typename _Up::value_type*>(__mem),
+ 				   __n * 2);
+ 	}
+ 
+       template <typename _Up>
+ 	[[__gnu__::__always_inline__]]
+ 	static inline void
+ 	_S_masked_store(const basic_vec& __v, _Up* __mem, const mask_type& __k)
+ 	{
+ 	  static_assert(__complex_like<_Up>);
+ 	  _TSimd::_S_masked_store(__v._M_data, reinterpret_cast<typename _Up::value_type*>(__mem),
+ 				  __k._M_data);
+ 	}
+ 
+       basic_vec() = default;
+ 
+       // TODO: conversion extensions
+ 
+       // [simd.ctor] broadcast constructor ------------------------------------
+       template <__broadcast_constructible<value_type> _Up>
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr
+ 	basic_vec(_Up&& __x) noexcept
+ 	  : _M_data([&](int __i) {
+ 	      if constexpr (__complex_like<_Up>)
+ 		return (__i & 1) == 0 ? __x.real() : __x.imag();
+ 	      else
+ 		return (__i & 1) == 0 ? __x : _T0();
+ 	    })
+ 	{}
+ 
+       // [simd.ctor] conversion constructor -----------------------------------
+       template <__complex_like _Up, typename _UAbi>
+ 	requires (_S_size == _UAbi::_S_size)
+ 	  && __explicitly_convertible_to<_Up, value_type>
+ 	  && _UAbi::_S_is_cx_ileav
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr
+ 	explicit(!convertible_to<_Up, value_type>)
+ 	basic_vec(const basic_vec<_Up, _UAbi>& __x) noexcept
+ 	: _M_data(__x._M_data)
+ 	{}
+ 
+       template <__complex_like _Up, typename _UAbi>
+ 	requires (_S_size == _UAbi::_S_size)
+ 	  && __explicitly_convertible_to<_Up, value_type>
+ 	  && (!_UAbi::_S_is_cx_ileav)
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr
+ 	explicit(!convertible_to<_Up, value_type>)
+ 	basic_vec(const basic_vec<_Up, _UAbi>& __x) noexcept
+ 	: basic_vec(static_cast<_RealSimd>(__x._M_real), static_cast<_RealSimd>(__x._M_imag))
+ 	{}
+ 
+       template <typename _Up, typename _UAbi>
+ 	requires (!__complex_like<_Up>)
+ 	  && (_S_size == _UAbi::_S_size)
+ 	  && __explicitly_convertible_to<_Up, value_type>
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr
+ 	explicit(!convertible_to<_Up, value_type>)
+ 	basic_vec(const basic_vec<_Up, _UAbi>& __x) noexcept
+ 	: basic_vec(_RealSimd(__x))
+ 	{}
+ 
+       using _VecBase<_Tp, _Ap>::_VecBase;
+ 
+       // [simd.ctor] generator constructor ------------------------------------
+       template <__simd_generator_invokable<value_type, _S_size> _Fp>
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr explicit
+ 	basic_vec(_Fp&& __gen)
+ 	: _M_data([&] {
+ 	    using _Arr = std::array<value_type, sizeof(_TSimd) / sizeof(value_type)>;
+ 	    constexpr auto [...__is] = _IotaArray<_S_size>;
+ 	    const _Arr __tmp = { static_cast<value_type>(__gen(__simd_size_c<__is>))... };
+ 	    return __builtin_bit_cast(_TSimd, __tmp);
+ 	  }())
+ 	{}
+ 
+       // [simd.ctor] load constructor -----------------------------------------
+       template <__complex_like _Up>
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr
+ 	basic_vec(_LoadCtorTag, const _Up* __ptr)
+ 	: _M_data([&] {
+ 	    if consteval
+ 	      {
+ 		return _TSimd([&](int __i) {
+ 			 const _Up& __cx = __ptr[__i / 2];
+ 			 return static_cast<_T0>(__i % 2 == 0 ? __cx.real() : __cx.imag());
+ 		       });
+ 	      }
+ 	    else
+ 	      {
+ 		return _TSimd(_LoadCtorTag(),
+ 			      reinterpret_cast<const typename _Up::value_type*>(__ptr));
+ 	      }
+ 	  }())
+ 	{}
+ 
+       template <typename _Up>
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr
+ 	basic_vec(_LoadCtorTag, const _Up* __ptr)
+ 	  : basic_vec(_RealSimd(_LoadCtorTag(), __ptr))
+ 	{}
+ 
+       template <ranges::contiguous_range _Rg, typename... _Flags>
+ 	requires ranges::__static_sized_range<_Rg> && (ranges::__static_size<_Rg>() == _S_size)
+ 	  && __vectorizable<ranges::range_value_t<_Rg>>
+ 	  && __explicitly_convertible_to<ranges::range_value_t<_Rg>, value_type>
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr
+ 	basic_vec(_Rg&& __range, flags<_Flags...> __flags = {})
+ 	: basic_vec(_LoadCtorTag(), __flags.template _S_adjust_pointer<basic_vec>(
+ 				      ranges::data(__range)))
+ 	{
+ 	  static_assert(__loadstore_convertible_to<ranges::range_value_t<_Rg>, value_type,
+ 						   _Flags...>);
+ 	}
+ 
+       // [simd.ctor] complex init ---------------------------------------------
+       // This uses _RealSimd as proposed in LWG4230
+       [[__gnu__::__always_inline__]]
+       constexpr
+       basic_vec(const _RealSimd& __re, const _RealSimd& __im = {}) noexcept
+       {
+ 	__cxileav::__set_real(_M_data, __re);
+ 	__cxileav::__set_imag(_M_data, __im);
+       }
+ 
+       // [simd.subscr] --------------------------------------------------------
+       [[__gnu__::__always_inline__]]
+       constexpr value_type
+       operator[](__simd_size_type __i) const
+       { return value_type(_M_data[__i * 2], _M_data[__i * 2 + 1]); }
+ 
+       // [simd.unary] unary operators -----------------------------------------
+       [[__gnu__::__always_inline__]]
+       constexpr basic_vec&
+       operator++() noexcept requires requires(value_type __a) { ++__a; }
+       {
+ 	_M_data += value_type(_T0(1));
+ 	return *this;
+       }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr basic_vec
+       operator++(int) noexcept requires requires(value_type __a) { __a++; }
+       {
+ 	basic_vec __r = *this;
+ 	_M_data += value_type(_T0(1));
+ 	return __r;
+       }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr basic_vec&
+       operator--() noexcept requires requires(value_type __a) { --__a; }
+       {
+ 	_M_data -= value_type(_T0(1));
+ 	return *this;
+       }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr basic_vec
+       operator--(int) noexcept requires requires(value_type __a) { __a--; }
+       {
+ 	basic_vec __r = *this;
+ 	_M_data -= value_type(_T0(1));
+ 	return __r;
+       }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr mask_type
+       operator!() const noexcept requires requires(value_type __a) { !__a; }
+       { return _S_init(!_M_data); }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr basic_vec
+       operator+() const noexcept requires requires(value_type __a) { +__a; }
+       { return *this; }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr basic_vec
+       operator-() const noexcept requires requires(value_type __a) { -__a; }
+       {
+ 	basic_vec __r = *this;
+ 	__r._M_data = -_M_data;
+ 	return __r;
+       }
+ 
+       // [simd.cassign] compound assignment -----------------------------------
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_vec&
+       operator+=(basic_vec& __x, const basic_vec& __y) noexcept
+       requires requires(value_type __a) { __a + __a; }
+       {
+ 	__x._M_data += __y._M_data;
+ 	return __x;
+       }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_vec&
+       operator-=(basic_vec& __x, const basic_vec& __y) noexcept
+       requires requires(value_type __a) { __a - __a; }
+       {
+ 	__x._M_data -= __y._M_data;
+ 	return __x;
+       }
+ 
+       template <_TargetTraits _Traits = {}>
+ 	[[__gnu__::__always_inline__]]
+ 	friend constexpr basic_vec&
+ 	operator*=(basic_vec& __x, const basic_vec& __y) noexcept
+ 	requires requires(value_type __a) { __a * __a; }
+ 	{
+ 	  __cxileav::__mul<value_type, _Traits>(__x._M_data, __y._M_data);
+ 	  return __x;
+ 	}
+ 
+       template <int _RemoveMe = 0>
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_vec&
+       operator/=(basic_vec& __x, const basic_vec& __y) noexcept
+       requires requires(value_type __a) { __a / __a; }
+       {
+ 	static_assert(false, "TODO");
+       }
+ 
+       // [simd.comparison] compare operators ----------------------------------
+       [[__gnu__::__always_inline__]]
+       friend constexpr mask_type
+       operator==(const basic_vec& __x, const basic_vec& __y) noexcept
+       { return mask_type::_S_and_neighbors(__x._M_data == __y._M_data); }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr mask_type
+       operator!=(const basic_vec& __x, const basic_vec& __y) noexcept
+       { return mask_type::_S_or_neighbors(__x._M_data != __y._M_data); }
+ 
+       // [simd.complex.access] complex-value accessors ------------------------
+       // LWG4230: returns _RealSimd instead of auto
+       [[__gnu__::__always_inline__]]
+       constexpr _RealSimd
+       real() const noexcept
+       { return permute<_S_size>(_M_data, [](int __i) { return __i * 2; }); }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr _RealSimd
+       imag() const noexcept
+       { return permute<_S_size>(_M_data, [](int __i) { return __i * 2 + 1; }); }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr void
+       real(const _RealSimd& __x) noexcept
+       { __cxileav::__set_real(_M_data, __x); }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr void
+       imag(const _RealSimd& __x) noexcept
+       { __cxileav::__set_imag(_M_data, __x); }
+ 
+       // [simd.cond] ---------------------------------------------------------
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_vec
+       __select_impl(const mask_type& __k, const basic_vec& __t, const basic_vec& __f) noexcept
+       { return _S_init(__select_impl(__k._M_data, __t._M_data, __f._M_data)); }
+ 
+       // [simd.complex.math] internals ---------------------------------------
+       [[__gnu__::__always_inline__]]
+       constexpr _RealSimd
+       _M_abs() const; // TODO: depends on [simd.math]
+ 
+       // associated functions
+       [[__gnu__::__always_inline__]]
+       constexpr _RealSimd
+       _M_norm() const
+       {
+ 	auto __re = real();
+ 	auto __im = imag();
+ 	return __re * __re + __im * __im;
+       }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr basic_vec
+       _M_conj() const
+       { return _S_init(__cxileav::__negate_imag(_M_data)); }
+     };
+ 
+   // complex contiguous (_CxCtgus) --------------------------------------------
+   // (and _CxIleav basic_vec with size 1)
+ 
+   /** @internal
+    * @brief Functions acting on / recursing into the non-complex fp vec objects, where real and
+    * imaginary parts are stored in separate vec objects.
+    */
+   namespace __cxctgus
+   {
+     /** @internal
+      * @brief Recompute all complex multiplications where @p __nan is true using @p _Cx's
+      * multiplication operator.
+      *
+      * @todo use coarser _TargetTraits and move into .so
+      */
+     template <typename _Cx, _TargetTraits, __vec_builtin _TV, typename _Kp>
+       [[__gnu__::__cold__, __gnu__::__noinline__]]
+       constexpr void
+       __redo_mul(_TV& __re, _TV& __im, const _TV __re0, const _TV __im0,
+ 		 const _TV __re1, const _TV __im1, const _Kp __nan, int __n)
+       {
+ 	for (int __i = 0; __i < __n; ++__i)
+ 	  {
+ 	    bool __isnan;
+ 	    if constexpr (is_integral_v<_Kp>)
+ 	      __isnan = (__nan & (_Kp(1) << __i)) != 0;
+ 	    else
+ 	      __isnan = __nan[__i] != 0;
+ 	    if (__isnan)
+ 	      {
+ 		const _Cx __c0(__re0[__i], __im0[__i]);
+ 		const _Cx __c1(__re1[__i], __im1[__i]);
+ 		const _Cx __cr = __c0 * __c1;
+ 		__vec_set(__re, __i, __cr.real());
+ 		__vec_set(__im, __i, __cr.imag());
+ 	      }
+ 	  }
+       }
+ 
+     /** @internal
+      * @brief Complex multiplication of (@p __re0, @p __im0) and (@p __re1, @p __im1), returning the
+      * result in @p __re0 and @p __im0.
+      */
+     template <typename _Cx, _TargetTraits _Traits, typename _Tp, typename _Ap>
+       [[__gnu__::__always_inline__]]
+       constexpr void
+       __mul(basic_vec<_Tp, _Ap>& __re0, basic_vec<_Tp, _Ap>& __im0,
+ 	    const basic_vec<_Tp, _Ap>& __re1, const basic_vec<_Tp, _Ap>& __im1)
+       {
+ 	static_assert(__complex_like<_Cx>);
+ 	if constexpr (_Ap::_S_nreg >= 2)
+ 	  {
+ 	    __mul<_Cx, _Traits>(__re0._M_get_low(), __im0._M_get_low(),
+ 				__re1._M_get_low(), __im1._M_get_low());
+ 	    __mul<_Cx, _Traits>(__re0._M_get_high(), __im0._M_get_high(),
+ 				__re1._M_get_high(), __im1._M_get_high());
+ 	  }
+ 	else if constexpr (_Ap::_S_size == 1)
+ 	  { // use _Cx::operator*
+ 	    const _Cx __c0(__re0._M_get(), __im0._M_get());
+ 	    const _Cx __c1(__re1._M_get(), __im1._M_get());
+ 	    const _Cx __cr = __c0 * __c1;
+ 	    __re0._M_get() = __cr.real();
+ 	    __im0._M_get() = __cr.imag();
+ 	  }
+ 	else if constexpr (_Traits.template _M_eval_as_f32<_Tp>())
+ 	  {
+ 	    using _Vf = rebind_t<float, basic_vec<_Tp, _Ap>>;
+ 	    using _Cf = complex<float>;
+ 	    _Vf __re0f = __re0;
+ 	    _Vf __im0f = __im0;
+ 	    __mul<_Cf, _Traits, float, typename _Vf::abi_type>(__re0f, __im0f, __re1, __im1);
+ 	    __re0 = static_cast<basic_vec<_Tp, _Ap>>(__re0f);
+ 	    __im0 = static_cast<basic_vec<_Tp, _Ap>>(__im0f);
+ 	  }
+ 	else
+ 	  {
+ 	    basic_vec<_Tp, _Ap> __re = __re0 * __re1 - __im0 * __im1;
+ 	    basic_vec<_Tp, _Ap> __im = __re0 * __im1 + __im0 * __re1;
+ 	    const auto __nan = __re._M_isunordered(__im);
+ 	    if (__nan._M_any_of()) [[unlikely]]
+ 	      __redo_mul<_Cx, _Traits>(__re._M_get(), __im._M_get(), __re0._M_get(), __im0._M_get(),
+ 				       __re1._M_get(), __im1._M_get(),
+ 				       __nan._M_concat_data(), _Ap::_S_size);
+ 	    __re0 = __re;
+ 	    __im0 = __im;
+ 	  }
+       }
+   }
+ 
+   template <size_t _Bytes, __abi_tag _Ap>
+     requires _Ap::_S_is_cx_ctgus && (_Ap::_S_size >= 2) // size 1 is in simd_mask.h
+     class basic_mask<_Bytes, _Ap>
+     : public _MaskBase<_Bytes, _Ap>
+     {
+       using _Base = _MaskBase<_Bytes, _Ap>;
+ 
+       using _VecType = _Base::_VecType;
+ 
+       template <size_t, typename>
+ 	friend class basic_mask;
+ 
+       template <typename, typename>
+ 	friend class basic_vec;
+ 
+       static constexpr int _S_size = _Ap::_S_size;
+ 
+       using _DataType = __component_mask_for_ctgus<_Bytes, _Ap>;
+ 
+       static_assert(_DataType::abi_type::_S_nreg == _Ap::_S_nreg);
+ 
+       static constexpr bool _S_is_scalar = _DataType::_S_is_scalar;
+ 
+       static constexpr bool _S_use_bitmask = _DataType::_S_use_bitmask;
+ 
+       static constexpr int _S_full_size = _DataType::_S_full_size;
+ 
+       static constexpr bool _S_is_partial = _DataType::_S_is_partial;
+ 
+       static constexpr bool _S_has_bool_member = _DataType::_S_has_bool_member;
+ 
+       static constexpr size_t _S_padding_bytes = _DataType::_S_padding_bytes;
+ 
+       _DataType _M_data;
+ 
+     public:
+       using value_type = bool;
+ 
+       using abi_type = _Ap;
+ 
+       // internal but public API ----------------------------------------------
+       [[__gnu__::__always_inline__]]
+       static constexpr basic_mask
+       _S_init(const _DataType& __x)
+       {
+ 	basic_mask __r;
+ 	__r._M_data = __x;
+ 	return __r;
+       }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr const _DataType&
+       _M_get() const
+       { return _M_data; }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr auto
+       _M_concat_data() const
+       { return _M_data._M_concat_data(); }
+ 
+       template <_ArchTraits _Traits = {}>
+ 	[[__gnu__::__always_inline__]]
+ 	static constexpr basic_mask
+ 	_S_partial_mask_of_n(int __n)
+ 	{ return _S_init(_DataType::_S_partial_mask_of_n(__n)); }
+ 
+       template <typename _Mp>
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr auto
+ 	_M_chunk() const noexcept
+ 	{
+ 	  if constexpr (_Mp::abi_type::_S_variant != _Ap::_S_variant)
+ 	    {
+ 	      using _M2 = resize_t<_S_size, _Mp>;
+ 	      static_assert(!is_same_v<_M2, basic_mask>);
+ 	      return static_cast<_M2>(*this).template _M_chunk<_Mp>();
+ 	    }
+ 	  else if constexpr (_Mp::_S_size == 1)
+ 	    {
+ 	      constexpr auto [...__is] = _IotaArray<_S_size>;
+ 	      return array{_Mp(_M_data[__is])...};
+ 	    }
+ 	  else // _Mp is the same partial specialization
+ 	    {
+ 	      constexpr int __rem = _S_size % _Mp::_S_size;
+ 	      const auto [...__xs, __last] = _M_data.template _M_chunk<typename _Mp::_DataType>();
+ 	      if constexpr (__rem == 0)
+ 		return array{_Mp::_S_init(__xs)..., _Mp::_S_init(__last)};
+ 	      else
+ 		return tuple(_Mp::_S_init(__xs)..., resize_t<__rem, _Mp>(__last));
+ 	    }
+ 	}
+ 
+       [[__gnu__::__always_inline__]]
+       static constexpr const basic_mask&
+       _S_concat(const basic_mask& __x0) noexcept
+       { return __x0; }
+ 
+       /** @internal
+        * @brief Adjust the mask type to match _RealSimd.
+        *
+        * This is a trivial unwrap for this partial specialization of basic_mask. However, for
+        * _Abi<1, 1, _CxCtgus> _M_data is the bool object and needs to be converted.
+        */
+       [[__gnu__::__always_inline__]]
+       constexpr const _DataType&
+       _M_get_ctgus_data() const noexcept
+       { return _M_data; }
+ 
+       template <typename... _As>
+ 	requires (sizeof...(_As) > 1)
+ 	[[__gnu__::__always_inline__]]
+ 	static constexpr basic_mask
+ 	_S_concat(const basic_mask<_Bytes, _As>&... __xs) noexcept
+ 	{ return basic_mask::_S_init(_DataType::_S_concat(__xs._M_get_ctgus_data()...)); }
+ 
+       // [simd.mask.overview] default constructor -----------------------------
+       basic_mask() = default;
+ 
+       // [simd.mask.overview] conversion extensions ---------------------------
+       template <__vec_builtin _TV>
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr
+ 	basic_mask(const _TV& __x) requires convertible_to<_TV, _DataType>
+ 	: _M_data(__x)
+ 	{}
+ 
+       template <__vec_builtin _TV>
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr
+ 	operator _TV() requires convertible_to<_DataType, _TV>
+ 	{ return _M_data; }
+ 
+       // [simd.mask.ctor] broadcast constructor -------------------------------
+       [[__gnu__::__always_inline__]]
+       constexpr explicit
+       basic_mask(same_as<bool> auto __x) noexcept // LWG 4382.
+       : _M_data(__x)
+       {}
+ 
+       // [simd.mask.ctor] conversion constructor ------------------------------
+       template <size_t _UBytes, typename _UAbi>
+ 	requires (_S_size == _UAbi::_S_size)
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr explicit(__is_mask_conversion_explicit<_Ap, _UAbi>(_Bytes, _UBytes))
+ 	basic_mask(const basic_mask<_UBytes, _UAbi>& __x) noexcept
+ 	: _M_data(__x)
+ 	{}
+ 
+       using _Base::_MaskBase;
+ 
+       // [simd.mask.ctor] generator constructor -------------------------------
+       template <__simd_generator_invokable<bool, _S_size> _Fp>
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr explicit
+ 	basic_mask(_Fp&& __gen)
+ 	: _M_data(__gen)
+ 	{}
+ 
+       // [simd.mask.ctor] bitset constructor ----------------------------------
+       [[__gnu__::__always_inline__]]
+       constexpr
+       basic_mask(const same_as<bitset<_S_size>> auto& __b) noexcept // LWG 4382.
+       : _M_data(__b)
+       {}
+ 
+       // [simd.mask.ctor] uint constructor ------------------------------------
+       template <unsigned_integral _Tp>
+ 	requires (!same_as<_Tp, bool>) // LWG 4382.
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr explicit
+ 	basic_mask(_Tp __val) noexcept
+ 	: _M_data(__val)
+ 	{}
+ 
+       // [simd.mask.subscr] ---------------------------------------------------
+       [[__gnu__::__always_inline__]]
+       constexpr value_type
+       operator[](__simd_size_type __i) const
+       { return _M_data[__i]; }
+ 
+       // [simd.mask.unary] ----------------------------------------------------
+       [[__gnu__::__always_inline__]]
+       constexpr basic_mask
+       operator!() const noexcept
+       { return _S_init(!_M_data); }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr _VecType
+       operator+() const noexcept requires destructible<_VecType>
+       { return static_cast<_VecType>(_M_data); }
+ 
+       constexpr _VecType
+       operator+() const noexcept = delete;
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr _VecType
+       operator-() const noexcept requires destructible<_VecType>
+       {
+ 	using _Ip = typename _VecType::value_type;
+ 	if constexpr (_S_use_bitmask)
+ 	  return __select_impl(*this, _Ip(-1), _Ip());
+ 	else
+ 	  return -_M_data; // sign-extends
+       }
+ 
+       constexpr _VecType
+       operator-() const noexcept = delete;
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr _VecType
+       operator~() const noexcept requires destructible<_VecType>
+       {
+ 	using _Ip = typename _VecType::value_type;
+ 	if constexpr (_S_use_bitmask)
+ 	  return __select_impl(*this, _Ip(-2), _Ip(-1));
+ 	else
+ 	  return ~_M_data; // sign-extends
+       }
+ 
+       constexpr _VecType
+       operator~() const noexcept = delete;
+ 
+       // [simd.mask.conv] -----------------------------------------------------
+       template <typename _Up, typename _UAbi>
+ 	requires (_UAbi::_S_size == _S_size)
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr explicit(sizeof(_Up) != _Bytes)
+ 	operator basic_vec<_Up, _UAbi>() const noexcept
+ 	{
+ 	  using _UV = basic_vec<_Up, _UAbi>;
+ 	  using _Mp = typename _UV::mask_type;
+ 	  return __select_impl(static_cast<_Mp>(_M_data), _UV(1), _UV(0));
+ 	}
+ 
+       using _Base::operator basic_vec;
+ 
+       // [simd.mask.namedconv] ------------------------------------------------
+       [[__gnu__::__always_inline__]]
+       constexpr bitset<_S_size>
+       to_bitset() const noexcept
+       { return _M_data.to_bitset(); }
+ 
+       template <int _Offset = 0, _ArchTraits _Traits = {}>
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr auto
+ 	_M_to_uint() const
+ 	{ return _M_data.template _M_to_uint<_Offset>(); }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr unsigned long long
+       to_ullong() const
+       { return _M_data.to_ullong(); }
+ 
+       // [simd.mask.binary] ---------------------------------------------------
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask
+       operator&&(const basic_mask& __x, const basic_mask& __y) noexcept
+       { return _S_init(__x._M_data & __y._M_data); }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask
+       operator||(const basic_mask& __x, const basic_mask& __y) noexcept
+       { return _S_init(__x._M_data | __y._M_data); }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask
+       operator&(const basic_mask& __x, const basic_mask& __y) noexcept
+       { return _S_init(__x._M_data & __y._M_data); }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask
+       operator|(const basic_mask& __x, const basic_mask& __y) noexcept
+       { return _S_init(__x._M_data | __y._M_data); }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask
+       operator^(const basic_mask& __x, const basic_mask& __y) noexcept
+       { return _S_init(__x._M_data ^ __y._M_data); }
+ 
+       // [simd.mask.cassign] --------------------------------------------------
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask&
+       operator&=(basic_mask& __x, const basic_mask& __y) noexcept
+       {
+ 	__x._M_data &= __y._M_data;
+ 	return __x;
+       }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask&
+       operator|=(basic_mask& __x, const basic_mask& __y) noexcept
+       {
+ 	__x._M_data |= __y._M_data;
+ 	return __x;
+       }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask&
+       operator^=(basic_mask& __x, const basic_mask& __y) noexcept
+       {
+ 	__x._M_data ^= __y._M_data;
+ 	return __x;
+       }
+ 
+       // [simd.mask.comparison] -----------------------------------------------
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask
+       operator==(const basic_mask& __x, const basic_mask& __y) noexcept
+       { return _S_init(__x._M_data == __y._M_data); }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask
+       operator!=(const basic_mask& __x, const basic_mask& __y) noexcept
+       { return _S_init(__x._M_data != __y._M_data); }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask
+       operator>=(const basic_mask& __x, const basic_mask& __y) noexcept
+       { return _S_init(__x._M_data >= __y._M_data); }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask
+       operator<=(const basic_mask& __x, const basic_mask& __y) noexcept
+       { return _S_init(__x._M_data <= __y._M_data); }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask
+       operator>(const basic_mask& __x, const basic_mask& __y) noexcept
+       { return _S_init(__x._M_data > __y._M_data); }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask
+       operator<(const basic_mask& __x, const basic_mask& __y) noexcept
+       { return _S_init(__x._M_data < __y._M_data); }
+ 
+       // [simd.mask.cond] -----------------------------------------------------
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask
+       __select_impl(const basic_mask& __k, const basic_mask& __t, const basic_mask& __f) noexcept
+       { return __select_impl(__k._M_data, __t._M_data, __f._M_data); }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_mask
+       __select_impl(const basic_mask& __k, same_as<bool> auto __t, same_as<bool> auto __f) noexcept
+       { return _S_init(__select_impl(__k._M_data, __t, __f)); }
+ 
+       template <__vectorizable _T0, same_as<_T0> _T1>
+ 	requires (sizeof(_T0) == _Bytes)
+ 	[[__gnu__::__always_inline__]]
+ 	friend constexpr vec<_T0, _S_size>
+ 	__select_impl(const basic_mask& __k, const _T0& __t, const _T1& __f) noexcept
+ 	{
+ 	  using _Vp = vec<_T0, _S_size>;
+ 	  return __select_impl(static_cast<typename _Vp::mask_type>(__k), _Vp(__t), _Vp(__f));
+ 	}
+ 
+       // [simd.mask.reductions] implementation --------------------------------
+       [[__gnu__::__always_inline__]]
+       constexpr bool
+       _M_all_of() const noexcept
+       { return _M_data._M_all_of(); }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr bool
+       _M_any_of() const noexcept
+       { return _M_data._M_any_of(); }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr bool
+       _M_none_of() const noexcept
+       { return _M_data._M_none_of(); }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr __simd_size_type
+       _M_reduce_count() const noexcept
+       { return _M_data._M_reduce_count(); }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr __simd_size_type
+       _M_reduce_min_index() const
+       { return _M_data._M_reduce_min_index(); }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr __simd_size_type
+       _M_reduce_max_index() const
+       { return _M_data._M_reduce_max_index(); }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr bool
+       __is_const_known(const basic_mask& __x)
+       { return __is_const_known(__x._M_data); }
+     };
+ 
+   template <__vectorizable _Tp, __abi_tag _Ap>
+     requires __complex_like<_Tp> && (_Ap::_S_is_cx_ctgus || _Ap::_S_size == 1)
+     class basic_vec<_Tp, _Ap>
+     : public _VecBase<_Tp, _Ap>
+     {
+       template <typename, typename>
+ 	friend class basic_vec;
+ 
+       static constexpr int _S_size = _Ap::_S_size;
+ 
+       static constexpr int _S_full_size = __bit_ceil(unsigned(_S_size));
+ 
+       using _T0 = typename _Tp::value_type;
+ 
+       using _RealSimd = __similar_vec<_T0, _S_size, _Ap>;
+ 
+       _RealSimd _M_real = {};
+ 
+       _RealSimd _M_imag = {};
+ 
+       static constexpr bool _S_is_scalar = _RealSimd::_S_is_scalar;
+ 
+       static constexpr bool _S_use_bitmask = _RealSimd::_S_use_bitmask;
+ 
+       static constexpr bool _S_is_partial = _RealSimd::_S_is_partial;
+ 
+     public:
+       using value_type = _Tp;
+ 
+       using mask_type = _VecBase<_Tp, _Ap>::mask_type;
+ 
+       // internal but public API ----------------------------------------------
+       [[__gnu__::__always_inline__]]
+       constexpr _RealSimd&
+       _M_get_real() noexcept
+       { return _M_real; }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr const _RealSimd&
+       _M_get_real() const noexcept
+       { return _M_real; }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr _RealSimd&
+       _M_get_imag() noexcept
+       { return _M_imag; }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr const _RealSimd&
+       _M_get_imag() const noexcept
+       { return _M_imag; }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr auto
+       _M_get_low() const requires (_Ap::_S_nreg >= 2)
+       {
+ 	return resize_t<_M_real._N0, basic_vec>(
+ 		 _M_real._M_get_low(), _M_imag._M_get_low());
+       }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr auto
+       _M_get_high() const requires (_Ap::_S_nreg >= 2)
+       {
+ 	return resize_t<_M_real._N1, basic_vec>(
+ 		 _M_real._M_get_high(), _M_imag._M_get_high());
+       }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr auto
+       _M_concat_data(bool /*do_sanitize*/ = false) const
+       requires (_S_size == 1) // only for _CxCtgus of size 1
+       {
+ 	return __vec_builtin_type<__canonical_vec_type_t<_T0>, 2>{
+ 	  _M_real._M_data, _M_imag._M_data
+ 	};
+       }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr auto
+       _M_get_ileav_data() const
+       requires (_S_size == 1 && _Ap::_S_is_cx_ileav)
+       { return __builtin_bit_cast(__similar_vec<_T0, 2, _Ap>, *this); }
+ 
+       [[__gnu__::__always_inline__]]
+       static constexpr basic_vec
+       _S_init(const __similar_vec<_T0, 2, _Ap>& __x)
+       requires (_S_size == 1 && _Ap::_S_is_cx_ileav)
+       { return __builtin_bit_cast(basic_vec, __x); }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr bool
+       __is_const_known(const basic_vec& __x)
+       { return __is_const_known(__x._M_real) && __is_const_known(__x._M_imag); }
+ 
+       template <typename _Vp>
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr auto
+ 	_M_chunk() const noexcept
+ 	{
+ 	  constexpr int __n = _S_size / _Vp::_S_size;
+ 	  constexpr int __rem = _S_size % _Vp::_S_size;
+ 	  const auto [...__rs, __rN] = _M_real.template _M_chunk<typename _Vp::_RealSimd>();
+ 	  const auto [...__is, __iN] = _M_imag.template _M_chunk<typename _Vp::_RealSimd>();
+ 	  if constexpr (__rem == 0)
+ 	    return array<_Vp, __n>{_Vp(__rs, __is)..., _Vp(__rN, __iN)};
+ 	  else
+ 	    return tuple(_Vp(__rs, __is)..., resize_t<__rem, _Vp>(__rN, __iN));
+ 	}
+ 
+       template <typename _A0>
+ 	[[__gnu__::__always_inline__]]
+ 	static constexpr basic_vec
+ 	_S_concat(const basic_vec<value_type, _A0>& __x0) noexcept
+ 	{ return static_cast<basic_vec>(__x0); }
+ 
+       template <typename... _As>
+ 	requires (sizeof...(_As) > 1)
+ 	[[__gnu__::__always_inline__]]
+ 	static constexpr basic_vec
+ 	_S_concat(const basic_vec<value_type, _As>&... __xs) noexcept
+ 	{ return {_RealSimd::_S_concat(__xs._M_real...), _RealSimd::_S_concat(__xs._M_imag...) }; }
+ 
+       template <typename _BinaryOp>
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr auto
+ 	_M_reduce_to_register(_BinaryOp __binary_op) const
+ 	{
+ 	  if constexpr (_RealSimd::abi_type::_S_nreg == 1)
+ 	    return *this;
+ 	  else
+ 	    {
+ 	      auto [__lo, __hi] = _M_chunk<resize_t<_RealSimd::_N0, basic_vec>>();
+ 	      auto __a = __lo._M_reduce_to_register(__binary_op);
+ 	      auto __b = __hi._M_reduce_to_register(__binary_op);
+ 	      if constexpr (__a._S_size == __b._S_size)
+ 		return __binary_op(__a, __b);
+ 	      else
+ 		{
+ 		  using _V1 = resize_t<1, basic_vec>;
+ 		  return __binary_op(_V1(__a._M_reduce(__binary_op)),
+ 				     _V1(__b._M_reduce(__binary_op)));
+ 		}
+ 	    }
+ 	}
+ 
+       template <typename _BinaryOp, _ArchTraits _Traits = {}>
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr value_type
+ 	_M_reduce(_BinaryOp __binary_op) const
+ 	{
+ 	  if constexpr (_S_size == 1)
+ 	    return operator[](0);
+ 	  else if constexpr (_Traits.template _M_eval_as_f32<_T0>())
+ 	    return value_type(rebind_t<complex<float>, basic_vec>(*this)._M_reduce(__binary_op));
+ 	  else if constexpr (_RealSimd::abi_type::_S_nreg >= 2)
+ 	    return _M_reduce_to_register(__binary_op)._M_reduce(__binary_op);
+ 	  else if constexpr (__has_single_bit(unsigned(_S_size)))
+ 	    {
+ 	      const auto [__a, __b] = _M_chunk<resize_t<_S_size / 2, basic_vec>>();
+ 	      return __binary_op(__a, __b)._M_reduce(__binary_op);
+ 	    }
+ 	  else
+ 	    {
+ 	      const auto [__a, __b, __c, ...__rest]
+ 		= _M_chunk<resize_t<__bit_floor(unsigned(_S_size)) / 2, basic_vec>>();
+ 	      const auto __ab = __binary_op(__a, __b);
+ 	      static_assert(sizeof...(__rest) <= 1);
+ 	      if constexpr (__a._S_size != __c._S_size)
+ 		return cat(__ab, __c)._M_reduce(__binary_op);
+ 	      else
+ 		return cat(__binary_op(__ab, __c), __rest...)._M_reduce(__binary_op);
+ 	    }
+ 	}
+ 
+       /** @internal
+        * Implementation of @ref partial_load.
+        *
+        * If @p __mem stores complex numbers, this needs to load @c abcdefgh from memory into two
+        * basic_vec: @c aceg and @c bdfh.
+        *
+        * @param __mem  A pointer to an array of @p __n values. Can be complex or real.
+        * @param __n    Read no more than @p __n values from memory.
+        *
+        * @todo Optimize with deinterleaving loads or loads + deinterleaving fixup.
+        */
+       template <typename _Up>
+ 	[[__gnu__::__always_inline__]]
+ 	static inline basic_vec
+ 	_S_partial_load(const _Up* __mem, size_t __n)
+ 	{
+ 	  if constexpr (__complex_like<_Up>)
+ 	    return basic_vec(
+ 		     _RealSimd([&](size_t __i) -> _T0 {
+ 		       return __i < __n ? __mem[__i].real() : _T0();
+ 		     }),
+ 		     _RealSimd([&](size_t __i) -> _T0 {
+ 		       return __i < __n ? __mem[__i].imag() : _T0();
+ 		     }));
+ 	  else
+ 	    return basic_vec(_RealSimd::_S_partial_load(__mem, __n));
+ 	}
+ 
+       /** @internal
+        *
+        * @todo Optimize with deinterleaving loads or loads + deinterleaving fixup.
+        */
+       template <typename _Up, _ArchTraits _Traits = {}>
+ 	static inline basic_vec
+ 	_S_masked_load(const _Up* __mem, mask_type __k)
+ 	{
+ 	  if constexpr (__complex_like<_Up>)
+ 	    { // TODO: optimize
+ 	      return basic_vec(_RealSimd([&](int __i) {
+ 				 return __k[__i] ? __mem[__i].real() : _T0();
+ 			       }),
+ 			       _RealSimd([&](int __i) {
+ 				 return __k[__i] ? __mem[__i].imag() : _T0();
+ 			       }));
+ 	    }
+ 	  else
+ 	    return basic_vec(_RealSimd::_S_masked_load(__mem, typename _RealSimd::mask_type(__k)));
+ 	}
+ 
+       template <typename _Up>
+ 	[[__gnu__::__always_inline__]]
+ 	inline void
+ 	_M_store(_Up* __mem) const
+ 	{
+ 	  static_assert(__complex_like<_Up>);
+ 	  for (int __i = 0; __i < _S_size; ++__i)
+ 	    {
+ 	      __mem[__i].real(_M_real[__i]);
+ 	      __mem[__i].imag(_M_imag[__i]);
+ 	    }
+ 	}
+ 
+       template <typename _Up>
+ 	[[__gnu__::__always_inline__]]
+ 	static inline void
+ 	_S_partial_store(const basic_vec& __v, _Up* __mem, size_t __n)
+ 	{
+ 	  static_assert(__complex_like<_Up>);
+ 	  for (size_t __i = 0; __i < std::min(__n, size_t(_S_size)); ++__i)
+ 	    {
+ 	      __mem[__i].real(__v._M_real[__i]);
+ 	      __mem[__i].imag(__v._M_imag[__i]);
+ 	    }
+ 	}
+ 
+       template <typename _Up>
+ 	[[__gnu__::__always_inline__]]
+ 	static inline void
+ 	_S_masked_store(const basic_vec& __v, _Up* __mem, const mask_type& __k)
+ 	{
+ 	  // TODO: optimize
+ 	  static_assert(__complex_like<_Up>);
+ 	  for (int __i = 0; __i < _S_size; ++__i)
+ 	    {
+ 	      if (__k[__i])
+ 		__mem[__i] = __v[__i];
+ 	    }
+ 	}
+ 
+       basic_vec() = default;
+ 
+       // TODO: conversion extensions
+ 
+       // [simd.ctor] broadcast constructor ------------------------------------
+       template <__broadcast_constructible<value_type> _Up>
+ 	requires __complex_like<_Up>
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr
+ 	basic_vec(_Up&& __x) noexcept
+ 	  : _M_real(__x.real()), _M_imag(__x.imag())
+ 	{}
+ 
+       template <__broadcast_constructible<value_type> _Up>
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr
+ 	basic_vec(_Up&& __x) noexcept
+ 	  : _M_real(__x), _M_imag()
+ 	{}
+ 
+       // [simd.ctor] conversion constructor -----------------------------------
+       template <__complex_like _Up, typename _UAbi>
+ 	requires (_S_size == _UAbi::_S_size)
+ 	  && __explicitly_convertible_to<_Up, value_type>
+ 	  && _UAbi::_S_is_cx_ileav
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr
+ 	explicit(!convertible_to<_Up, value_type>)
+ 	basic_vec(const basic_vec<_Up, _UAbi>& __x) noexcept
+ 	: _M_real(__x.real()), _M_imag(__x.imag())
+ 	{}
+ 
+       template <__complex_like _Up, typename _UAbi>
+ 	requires (_S_size == _UAbi::_S_size)
+ 	  && __explicitly_convertible_to<_Up, value_type>
+ 	  && (!_UAbi::_S_is_cx_ileav)
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr
+ 	explicit(!convertible_to<_Up, value_type>)
+ 	basic_vec(const basic_vec<_Up, _UAbi>& __x) noexcept
+ 	: _M_real(__x._M_real), _M_imag(__x._M_imag) // using real() instead of _M_real is possible
+ 	  // but potentially leads to memcpy because of oversized _M_real (likewise for imag)
+ 	{}
+ 
+       template <typename _Up, typename _UAbi> // _Up is not complex!
+ 	requires (!__complex_like<_Up>)
+ 	  && (_S_size == _UAbi::_S_size)
+ 	  && __explicitly_convertible_to<_Up, value_type>
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr
+ 	explicit(!convertible_to<_Up, value_type>)
+ 	basic_vec(const basic_vec<_Up, _UAbi>& __x) noexcept
+ 	: _M_real(__x), _M_imag()
+ 	{}
+ 
+       using _VecBase<_Tp, _Ap>::_VecBase;
+ 
+       // [simd.ctor] generator constructor ------------------------------------
+       template <__simd_generator_invokable<value_type, _S_size> _Fp>
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr explicit
+ 	basic_vec(_Fp&& __gen)
+ 	: _M_real(),
+ 	  _M_imag([&] {
+ 	    _T0 __re[sizeof(_RealSimd) / sizeof(_T0)] = {};
+ 	    _T0 __im[sizeof(_RealSimd) / sizeof(_T0)] = {};
+ 	    template for (constexpr int __i : _IotaArray<_S_size>)
+ 	      {
+ 		const value_type __c = static_cast<value_type>(__gen(__simd_size_c<__i>));
+ 		__re[__i] = __c.real();
+ 		__im[__i] = __c.imag();
+ 	      }
+ 	    _M_real = __builtin_bit_cast(_RealSimd, __re);
+ 	    return __builtin_bit_cast(_RealSimd, __im);
+ 	  }())
+ 	{}
+ 
+       // [simd.ctor] load constructor -----------------------------------------
+       template <__complex_like _Up>
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr
+ 	basic_vec(_LoadCtorTag, const _Up* __ptr)
+ 	: _M_real([&](int __i) -> _T0 { return __ptr[__i].real(); }),
+ 	  _M_imag([&](int __i) -> _T0 { return __ptr[__i].imag(); })
+ 	{}
+ 
+       template <typename _Up>
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr
+ 	basic_vec(_LoadCtorTag, const _Up* __ptr)
+ 	: _M_real(_LoadCtorTag(), __ptr), _M_imag()
+ 	{}
+ 
+       template <ranges::contiguous_range _Rg, typename... _Flags>
+ 	requires ranges::__static_sized_range<_Rg> && (ranges::__static_size<_Rg>() == _S_size)
+ 	  && __vectorizable<ranges::range_value_t<_Rg>>
+ 	  && __explicitly_convertible_to<ranges::range_value_t<_Rg>, value_type>
+ 	[[__gnu__::__always_inline__]]
+ 	constexpr
+ 	basic_vec(_Rg&& __range, flags<_Flags...> __flags = {})
+ 	: basic_vec(_LoadCtorTag(), __flags.template _S_adjust_pointer<basic_vec>(
+ 				      ranges::data(__range)))
+ 	{
+ 	  static_assert(__loadstore_convertible_to<ranges::range_value_t<_Rg>, value_type,
+ 						   _Flags...>);
+ 	}
+ 
+       // [simd.ctor] complex init ---------------------------------------------
+       // This uses _RealSimd as proposed in LWG4230
+       [[__gnu__::__always_inline__]]
+       constexpr
+       basic_vec(const _RealSimd& __re, const _RealSimd& __im = {}) noexcept
+       : _M_real(__re), _M_imag(__im)
+       {}
+ 
+       // [simd.subscr] --------------------------------------------------------
+       [[__gnu__::__always_inline__]]
+       constexpr value_type
+       operator[](__simd_size_type __i) const
+       { return value_type(_M_real[__i], _M_imag[__i]); }
+ 
+       // [simd.unary] unary operators -----------------------------------------
+       [[__gnu__::__always_inline__]]
+       constexpr basic_vec&
+       operator++() noexcept requires requires(value_type __a) { ++__a; }
+       {
+ 	++_M_real;
+ 	return *this;
+       }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr basic_vec
+       operator++(int) noexcept requires requires(value_type __a) { __a++; }
+       {
+ 	basic_vec __r = *this;
+ 	++_M_real;
+ 	return __r;
+       }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr basic_vec&
+       operator--() noexcept requires requires(value_type __a) { --__a; }
+       {
+ 	--_M_real;
+ 	return *this;
+       }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr basic_vec
+       operator--(int) noexcept requires requires(value_type __a) { __a--; }
+       {
+ 	basic_vec __r = *this;
+ 	--_M_real;
+ 	return __r;
+       }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr mask_type
+       operator!() const noexcept requires requires(value_type __a) { !__a; }
+       { return !_M_real && !_M_imag; }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr basic_vec
+       operator+() const noexcept requires requires(value_type __a) { +__a; }
+       { return *this; }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr basic_vec
+       operator-() const noexcept requires requires(value_type __a) { -__a; }
+       { return basic_vec(-_M_real, -_M_imag); }
+ 
+       // [simd.cassign] compound assignment -----------------------------------
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_vec&
+       operator+=(basic_vec& __x, const basic_vec& __y) noexcept
+       requires requires(value_type __a) { __a + __a; }
+       {
+ 	__x._M_real += __y._M_real;
+ 	__x._M_imag += __y._M_imag;
+ 	return __x;
+       }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_vec&
+       operator-=(basic_vec& __x, const basic_vec& __y) noexcept
+       requires requires(value_type __a) { __a - __a; }
+       {
+ 	__x._M_real -= __y._M_real;
+ 	__x._M_imag -= __y._M_imag;
+ 	return __x;
+       }
+ 
+ 
+       template <_TargetTraits _Traits = {}>
+ 	[[__gnu__::__always_inline__]]
+ 	friend constexpr basic_vec&
+ 	operator*=(basic_vec& __x, const basic_vec& __y) noexcept
+ 	requires requires(value_type __a) { __a * __a; }
+ 	{
+ 	  __cxctgus::__mul<value_type, _Traits>(__x._M_real, __x._M_imag, __y._M_real, __y._M_imag);
+ 	  return __x;
+ 	}
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_vec&
+       operator/=(basic_vec& __x, const basic_vec& __y) noexcept
+       requires requires(value_type __a) { __a / __a; }
+       {
+ 	const _RealSimd __r =  __x._M_real * __y._M_real + __x._M_imag * __y._M_imag;
+ 	const _RealSimd __n = __y._M_norm();
+ 	__x._M_imag = (__x._M_imag * __y._M_real - __x._M_real * __y._M_imag) / __n;
+ 	__x._M_real = __r / __n;
+ 	return __x;
+       }
+ 
+       // [simd.comparison] compare operators ----------------------------------
+       [[__gnu__::__always_inline__]]
+       friend constexpr mask_type
+       operator==(const basic_vec& __x, const basic_vec& __y) noexcept
+       { return mask_type(__x._M_real == __y._M_real && __x._M_imag == __y._M_imag); }
+ 
+       [[__gnu__::__always_inline__]]
+       friend constexpr mask_type
+       operator!=(const basic_vec& __x, const basic_vec& __y) noexcept
+       { return mask_type(__x._M_real != __y._M_real || __x._M_imag != __y._M_imag); }
+ 
+       // [simd.complex.access] complex-value accessors ------------------------
+       // LWG4230: returns _RealSimd instead of auto
+       [[__gnu__::__always_inline__]]
+       constexpr _RealSimd
+       real() const noexcept
+       { return _M_real; }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr _RealSimd
+       imag() const noexcept
+       { return _M_imag; }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr void
+       real(const _RealSimd& __x) noexcept
+       { _M_real = __x; }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr void
+       imag(const _RealSimd& __x) noexcept
+       { _M_imag = __x; }
+ 
+       // [simd.cond] ---------------------------------------------------------
+       [[__gnu__::__always_inline__]]
+       friend constexpr basic_vec
+       __select_impl(const mask_type& __k, const basic_vec& __t, const basic_vec& __f) noexcept
+       {
+ 	typename basic_vec::_RealSimd::mask_type __kk(__k);
+ 	return basic_vec(__select_impl(__kk, __t._M_real, __f._M_real),
+ 			 __select_impl(__kk, __t._M_imag, __f._M_imag));
+       }
+ 
+       // [simd.complex.math] internals ---------------------------------------
+       [[__gnu__::__always_inline__]]
+       constexpr _RealSimd
+       _M_abs() const; // TODO: depends on [simd.math]
+ 
+       // associated functions
+       [[__gnu__::__always_inline__]]
+       constexpr _RealSimd
+       _M_norm() const
+       { return _M_real * _M_real + _M_imag * _M_imag; }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr basic_vec
+       _M_conj() const
+       { return basic_vec(_M_real, -_M_imag); }
+     };
+ 
+   // [P3319R5] (extension) ----------------------------------------------------
+   template <__complex_like _Tp, typename _Ap>
+     inline constexpr basic_vec<_Tp, _Ap>
+     __iota<basic_vec<_Tp, _Ap>> = basic_vec<_Tp, _Ap>([](typename _Tp::value_type __i)
+ 							  -> typename _Tp::value_type {
+       static_assert(_Ap::_S_size - 1 <= numeric_limits<typename _Tp::value_type>::max(),
+ 		    "iota object would overflow");
+       return __i;
+     });
+ } // namespace simd
+ _GLIBCXX_END_NAMESPACE_VERSION
+ } // namespace std
+ 
+ #pragma GCC diagnostic pop
+ #endif // C++26
+ #endif // _GLIBCXX_SIMD_COMPLEX_H
diff -Nrcpad gcc-17-20260628/libstdc++-v3/include/bits/simd_details.h gcc-17-20260705/libstdc++-v3/include/bits/simd_details.h
*** gcc-17-20260628/libstdc++-v3/include/bits/simd_details.h	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libstdc++-v3/include/bits/simd_details.h	Sun Jul  5 22:32:19 2026
*************** namespace std _GLIBCXX_VISIBILITY(defaul
*** 75,80 ****
--- 75,82 ----
  {
  _GLIBCXX_BEGIN_NAMESPACE_VERSION
  
+   template<typename> class complex;
+ 
  namespace simd
  {
    template <typename _Tp>
*************** namespace simd
*** 82,87 ****
--- 84,98 ----
      __iota = [] { static_assert(false, "invalid __iota specialization"); }();
  
    // [simd.general] vectorizable types
+   template <typename _Tp>
+     concept __complex_like_impl
+       = same_as<_Tp, complex<typename _Tp::value_type>>;
+ 
+   /** @internal
+    * Satisfied if @p _Tp implements the std::complex interface.
+    */
+   template <typename _Tp>
+     concept __complex_like = __complex_like_impl<remove_cvref_t<_Tp>>;
  
    template <typename _Tp>
      concept __vectorizable_scalar
*************** namespace simd
*** 94,100 ****
  
    // [simd.general] p2
    template <typename _Tp>
!     concept __vectorizable = __vectorizable_scalar<_Tp>;
  
    /** @internal
     * Describes variants of _Abi.
--- 105,114 ----
  
    // [simd.general] p2
    template <typename _Tp>
!     concept __vectorizable
!       = __vectorizable_scalar<_Tp>
! 	  || (__complex_like_impl<_Tp> && __vectorizable_scalar<typename _Tp::value_type>
! 		&& floating_point<typename _Tp::value_type>);
  
    /** @internal
     * Describes variants of _Abi.
*************** namespace simd
*** 103,108 ****
--- 117,127 ----
    {
      _BitMask      = 0x01, // AVX512 bit-masks
      _MaskVariants = 0x0f, // vector masks if bits [0:3] are 0
+     _CxIleav      = 0x10, // store complex components interleaved (ririri...)
+ 			  // mask elements are stored for both    (001122...)
+     _CxCtgus      = 0x20, // ... or store complex components contiguously (rrrr iiii)
+ 			  // mask elements are store for one component    (0123)
+     _CxVariants   = _CxIleav | _CxCtgus,
    };
  
    /** @internal
*************** namespace simd
*** 141,146 ****
--- 160,175 ----
  	    return _InvalidInteger();
  	}());
  
+   template <size_t _Bytes>
+     using __float_from = decltype([] consteval {
+ 			   if constexpr (sizeof(double) == _Bytes)
+ 			     return double();
+ 			   else if constexpr (sizeof(float) == _Bytes)
+ 			     return float();
+ 			   else if constexpr (sizeof(_Float16) == _Bytes)
+ 			     return _Float16();
+ 			 }());
+ 
    /** @internal
     * Alias for an unsigned integer type T such that sizeof(T) equals _Bytes.
     */
*************** namespace simd
*** 241,289 ****
  #endif
  
    /** @internal
!    * This ABI tag describes basic_vec objects that store one element per data member and basic_mask
!    * objects that store one bool data members.
     *
!    * @tparam _Np   The number of elements, which also matches the number of data members in
!    *               basic_vec and basic_mask.
!    */
!   template <int _Np = 1>
!     struct _ScalarAbi
!     {
!       static constexpr int _S_size = _Np;
! 
!       static constexpr int _S_nreg = _Np;
! 
!       static constexpr _AbiVariant _S_variant = {};
! 
!       template <typename _Tp>
! 	using _DataType = __canonical_vec_type_t<_Tp>;
! 
!       static constexpr bool _S_is_vecmask = false;
! 
!       // in principle a bool is a 1-bit bitmask, but this is asking for an AVX512 bitmask
!       static constexpr bool _S_is_bitmask = false;
! 
!       template <size_t>
! 	using _MaskDataType = bool;
! 
!       template <int _N2, int _Nreg2 = _N2>
! 	static consteval _ScalarAbi<_N2>
! 	_S_resize()
! 	{
! 	  static_assert(_N2 == _Nreg2);
! 	  return {};
! 	}
!     };
! 
!   /** @internal
!    * This ABI tag describes basic_vec objects that store one or more objects declared with the
!    * [[gnu::vector_size(N)]] attribute.
!    * Applied to basic_mask objects, this ABI tag either describes corresponding vector-mask objects
!    * or bit-mask objects. Which one is used is determined via @p _Var.
     *
     * @tparam _Np    The number of elements.
!    * @tparam _Nreg  The number of registers needed to store @p _Np elements.
     * @tparam _Var   Determines how complex value-types are laid out and whether mask types use
     *                bit-masks or vector-masks.
     */
--- 270,293 ----
  #endif
  
    /** @internal
!    * @brief This ABI tag determines the data member(s) of basic_vec and basic_mask.
     *
!    * `_Nreg` determines the number of recursive basic_vec/basic_mask data members where `_Nreg` is
!    * equal to 1. With `_Nreg` equal to 1, the basic_vec/basic_mask holds one vector builtin ( `_Np`
!    * greater than 1) or a scalar (`_Np` equal to 1).
!    * @f$\lceil\frac{\mathtt{Np}}{\mathtt{Nreg}}\rceil@f$ therefore determines the number of elements
!    * in a register (except for a remainder where it can be smaller). If `_Np` equals `_Nreg`, (the
!    * aforementioned quotient is 1), then basic_vec (recursively) holds non-vector data members and
!    * basic_mask holds bools.
!    *
!    * The `_Var` parameter determines details about the data member in the one register case. Masks
!    * can be represented as vector masks (the default comparison result of GNU vector builtins),
!    * bit-masks as used by AVX-512, bit-masks as used by ARM SVE (not yet implemented), or a single
!    * bool (for the `_Np` equals 1 case). For basic_mask it determines the actual data layout and
!    * for basic_mask it determines the result of compares.
     *
     * @tparam _Np    The number of elements.
!    * @tparam _Nreg  The number of registers needed to store `_Np` elements.
     * @tparam _Var   Determines how complex value-types are laid out and whether mask types use
     *                bit-masks or vector-masks.
     */
*************** namespace simd
*** 296,307 ****
--- 300,316 ----
         * The number of registers needed to represent one basic_vec for the element type that was
         * used on ABI deduction.
         *
+        * For _CxCtgus the value applies twice, once per reals and once per imags.
+        *
         * Examples:
         * - '_Abi< 8, 2>' for 'int' is 2x 128-bit
         * - '_Abi< 9, 3>' for 'int' is 2x 128-bit and 1x 32-bit
         * - '_Abi<10, 3>' for 'int' is 2x 128-bit and 1x 64-bit
         * - '_Abi<10, 1>' for 'int' is 1x 512-bit
         * - '_Abi<10, 2>' for 'int' is 1x 256-bit and 1x 64-bit
+        * - '_Abi< 8, 2, _CxIleav>' for 'complex<float>' is 2x 256-bit
+        * - '_Abi< 9, 2, _CxIleav>' for 'complex<float>' is 1x 512-bit and 1x 64-bit
+        * - '_Abi< 8, 1, _CxCtgus>' for 'complex<float>' is 2x 256-bit
         */
        static constexpr int _S_nreg = _Nreg;
  
*************** namespace simd
*** 310,315 ****
--- 319,334 ----
  
        static constexpr _AbiVariant _S_variant = static_cast<_AbiVariant>(_Var);
  
+       static constexpr bool _S_is_cx_ileav
+ 	= __filter_abi_variant(_S_variant, _AbiVariant::_CxIleav) == _AbiVariant::_CxIleav;
+ 
+       static constexpr bool _S_is_cx_ctgus
+ 	= __filter_abi_variant(_S_variant, _AbiVariant::_CxCtgus) == _AbiVariant::_CxCtgus;
+ 
+       static_assert(!(_S_is_cx_ileav && _S_is_cx_ctgus)); // can't be both
+ 
+       static_assert(_S_size >= _S_nreg || (_S_is_cx_ileav && _S_size * 2 >= _S_nreg));
+ 
        static constexpr bool _S_is_bitmask
  	= __filter_abi_variant(_S_variant, _AbiVariant::_BitMask) == _AbiVariant::_BitMask;
  
*************** namespace simd
*** 391,399 ****
  	    { __x.template _S_resize<_Tp::_S_size, _Tp::_S_nreg>() } -> same_as<_Tp>;
  	  };
  
    template <typename _Tp>
      concept __scalar_abi_tag
!       = same_as<_Tp, _ScalarAbi<_Tp::_S_size>> && __abi_tag<_Tp>;
  
    // Determine if math functions must *raise* floating-point exceptions.
    // math_errhandling may expand to an extern symbol, in which case we must assume fp exceptions
--- 410,422 ----
  	    { __x.template _S_resize<_Tp::_S_size, _Tp::_S_nreg>() } -> same_as<_Tp>;
  	  };
  
+   /** @internal
+    * Satisfied if `_Tp` is a valid simd ABI tag and one element is stored per register (number of
+    * registers equals size).
+    */
    template <typename _Tp>
      concept __scalar_abi_tag
!       = same_as<_Tp, _Abi_t<_Tp::_S_size, _Tp::_S_size, _Tp::_S_variant>> && __abi_tag<_Tp>;
  
    // Determine if math functions must *raise* floating-point exceptions.
    // math_errhandling may expand to an extern symbol, in which case we must assume fp exceptions
*************** namespace simd
*** 746,751 ****
--- 769,778 ----
        consteval bool
        _M_eval_as_f32() const
        { return is_same_v<_Tp, _Float16> && !_M_have_avx512fp16(); }
+ 
+     consteval bool
+     _M_have_addsub() const
+     { return _M_have_sse3(); }
    };
  
    template <typename _Tp, _ArchTraits _Traits = {}>
*************** namespace simd
*** 755,766 ****
        constexpr int __adj_sizeof = sizeof(_Tp) * (1 + is_same_v<_Tp, _Float16>);
        if constexpr (!__vectorizable<_Tp>)
  	return _InvalidAbi();
        else if constexpr (_Traits._M_have_avx512fp16())
  	return _Abi_t<64 / sizeof(_Tp), 1, _AbiVariant::_BitMask>();
        else if constexpr (_Traits._M_have_avx512f())
  	return _Abi_t<64 / __adj_sizeof, 1, _AbiVariant::_BitMask>();
        else if constexpr (is_same_v<_Tp, _Float16> && !_Traits._M_have_f16c())
! 	return _ScalarAbi<1>();
        else if constexpr (_Traits._M_have_avx2())
  	return _Abi_t<32 / __adj_sizeof, 1>();
        else if constexpr (_Traits._M_have_avx() && is_floating_point_v<_Tp>)
--- 782,799 ----
        constexpr int __adj_sizeof = sizeof(_Tp) * (1 + is_same_v<_Tp, _Float16>);
        if constexpr (!__vectorizable<_Tp>)
  	return _InvalidAbi();
+       else if constexpr (__complex_like<_Tp>)
+ 	{
+ 	  constexpr auto __underlying = std::simd::__native_abi<typename _Tp::value_type>();
+ 	  constexpr int __cx_size = __underlying._S_size / (__underlying._S_size == 1 ? 1 : 2);
+ 	  return _Abi_t<__cx_size, 1, __underlying._S_variant, _AbiVariant::_CxIleav>();
+ 	}
        else if constexpr (_Traits._M_have_avx512fp16())
  	return _Abi_t<64 / sizeof(_Tp), 1, _AbiVariant::_BitMask>();
        else if constexpr (_Traits._M_have_avx512f())
  	return _Abi_t<64 / __adj_sizeof, 1, _AbiVariant::_BitMask>();
        else if constexpr (is_same_v<_Tp, _Float16> && !_Traits._M_have_f16c())
! 	return _Abi_t<1, 1>();
        else if constexpr (_Traits._M_have_avx2())
  	return _Abi_t<32 / __adj_sizeof, 1>();
        else if constexpr (_Traits._M_have_avx() && is_floating_point_v<_Tp>)
*************** namespace simd
*** 772,778 ****
  	return _Abi_t<16 / __adj_sizeof, 1>();
        // no MMX: we can't emit EMMS where it would be necessary
        else
! 	return _ScalarAbi<1>();
      }
  
  #else
--- 805,811 ----
  	return _Abi_t<16 / __adj_sizeof, 1>();
        // no MMX: we can't emit EMMS where it would be necessary
        else
! 	return _Abi_t<1, 1>();
      }
  
  #else
*************** namespace simd
*** 793,800 ****
      {
        if constexpr (!__vectorizable<_Tp>)
  	return _InvalidAbi();
        else
! 	return _ScalarAbi<1>();
      }
  
  #endif
--- 826,835 ----
      {
        if constexpr (!__vectorizable<_Tp>)
  	return _InvalidAbi();
+       else if constexpr (__complex_like<_Tp>)
+ 	return _Abi_t<1, 1, _AbiVariant::_CxIleav>();
        else
! 	return _Abi_t<1, 1>();
      }
  
  #endif
*************** namespace simd
*** 850,866 ****
        if constexpr (_Np <= 0 || !__vectorizable<_Tp>)
  	return _InvalidAbi();
  
-       else if constexpr (__scalar_abi_tag<_A0>)
- 	return _A0::template _S_resize<_Np>();
- 
        else
  	{
  	  using _Native = remove_const_t<decltype(std::simd::__native_abi<_Tp>())>;
  	  static_assert(0 != _Native::_S_size);
  	  constexpr int __nreg = __div_ceil(_Np, _Native::_S_size);
  
! 	  if constexpr (__scalar_abi_tag<_Native>)
! 	    return _Native::template _S_resize<_Np>();
  	  else
  	    return _Abi_t<_Native::_S_size, 1, __filter_abi_variant(_A0::_S_variant,
  								    _AbiVariant::_MaskVariants)
--- 885,934 ----
        if constexpr (_Np <= 0 || !__vectorizable<_Tp>)
  	return _InvalidAbi();
  
        else
  	{
  	  using _Native = remove_const_t<decltype(std::simd::__native_abi<_Tp>())>;
  	  static_assert(0 != _Native::_S_size);
  	  constexpr int __nreg = __div_ceil(_Np, _Native::_S_size);
  
! 	  // __scalar_abi_tag is sticky (unless we reach size 1, where we can't know whether it was
! 	  // an explicit __scalar_abi_tag before some resize_t)
! 	  if constexpr (__scalar_abi_tag<_Native> || (__scalar_abi_tag<_A0> && _A0::_S_size >= 2))
! 	    {
! 	      constexpr bool __remove_cx
! 		= __filter_abi_variant(_A0::_S_variant, _AbiVariant::_CxVariants) != _AbiVariant()
! 		    && !__complex_like<_Tp>;
! 	      constexpr bool __add_cx
! 		= __filter_abi_variant(_A0::_S_variant, _AbiVariant::_CxVariants) == _AbiVariant()
! 		    && __complex_like<_Tp>;
! 
! 	      if constexpr (__remove_cx)
! 		return _Abi_t<_Np, _Np,
! 			      __filter_abi_variant(_A0::_S_variant, _AbiVariant::_MaskVariants)>();
! 	      else if constexpr (__add_cx)
! 		return _Abi_t<_Np, _Np, _A0::_S_variant,
! 			      __filter_abi_variant(_Native::_S_variant, _AbiVariant::_CxVariants)>();
! 	      else
! 		return _A0::template _S_resize<_Np, _Np>();
! 	    }
! 
! 	  else if constexpr (__complex_like<_Tp> && _A0::_S_is_cx_ctgus && _Native::_S_is_cx_ileav)
! 	    // we need half the number of registers since the number applies twice, to reals and
! 	    // imaginaries.
! 	    return _A0::template _S_resize<_Np, __div_ceil(__nreg, 2)>();
! 
! 	  else if constexpr (__complex_like<_Tp> && _A0::_S_is_cx_ileav && _Native::_S_is_cx_ctgus)
! 	    return _A0::template _S_resize<_Np, __nreg * 2>();
! 
! 	  else if constexpr (__complex_like<_Tp> && (_A0::_S_is_cx_ctgus || _A0::_S_is_cx_ileav))
! 	    return _A0::template _S_resize<_Np, __nreg>();
! 
! 	  else if constexpr (__complex_like<_Tp>)
! 	    // Bit vs. Vec Mask determined by _A0, _CxVariant determined by _Native
! 	    return _Abi_t<_Native::_S_size, 1, _A0::_S_variant,
! 			  __filter_abi_variant(_Native::_S_variant, _AbiVariant::_CxVariants)>
! 		     ::template _S_resize<_Np, __nreg>();
! 
  	  else
  	    return _Abi_t<_Native::_S_size, 1, __filter_abi_variant(_A0::_S_variant,
  								    _AbiVariant::_MaskVariants)
*************** namespace simd
*** 882,892 ****
      consteval auto
      __abi_rebind()
      {
        if constexpr (_Bytes == 0 || _Np <= 0)
  	return _InvalidAbi();
  
!       else if constexpr (__scalar_abi_tag<_A0>)
! 	return _A0::template _S_resize<_Np>();
  
  #if _GLIBCXX_X86
        // AVX w/o AVX2:
--- 950,969 ----
      consteval auto
      __abi_rebind()
      {
+       constexpr bool __from_cx = _A0::_S_is_cx_ctgus || _A0::_S_is_cx_ileav;
+ 
        if constexpr (_Bytes == 0 || _Np <= 0)
  	return _InvalidAbi();
  
!       // If the source ABI is complex, _Bytes == sizeof(complex<float>) or
!       // sizeof(complex<float16_t>), and _IsOnlyResize is true, then it's a mask<complex<float>,
!       // _Np>
!       else if constexpr (__from_cx && _IsOnlyResize && _Bytes == 2 * sizeof(double))
! 	return __abi_rebind<complex<double>, _Np, _A0>();
!       else if constexpr (__from_cx && _IsOnlyResize && _Bytes == 2 * sizeof(float))
! 	return __abi_rebind<complex<float>, _Np, _A0>();
!       else if constexpr (__from_cx && _IsOnlyResize && _Bytes == 2 * sizeof(_Float16))
! 	return __abi_rebind<complex<_Float16>, _Np, _A0>();
  
  #if _GLIBCXX_X86
        // AVX w/o AVX2:
*************** namespace simd
*** 939,950 ****
        if (__b0 != __b1)
  	return true;
  
-       // everything is better than _ScalarAbi, except when converting to a single bool
-       if constexpr (__scalar_abi_tag<_To>)
- 	return __n > 1;
-       else if constexpr (__scalar_abi_tag<_From>)
- 	return true;
- 
        // converting to a bit-mask is better
        else if constexpr (_To::_S_is_vecmask != _From::_S_is_vecmask)
  	return _To::_S_is_vecmask; // to vector-mask is explicit
--- 1016,1021 ----
*************** namespace simd
*** 953,958 ****
--- 1024,1041 ----
        else if constexpr (_From::_S_nreg != _To::_S_nreg)
  	return _From::_S_nreg < _To::_S_nreg;
  
+       // differ only on _Cx flags
+       // interleaved complex is worse
+       else if constexpr (_To::_S_is_cx_ileav)
+ 	return true;
+       else if constexpr (_From::_S_is_cx_ileav)
+ 	return false;
+ 
+       // prefer non-_Cx over _CxCtgus
+       else if constexpr (_To::_S_is_cx_ctgus)
+ 	return true;
+       else if constexpr (_From::_S_is_cx_ctgus)
+ 	return false;
        else
  	__builtin_unreachable();
  #endif
*************** namespace simd
*** 1012,1018 ****
     */
    template <typename _From, typename _To>
      concept __value_preserving_convertible_to
!       = __arithmetic_only_value_preserving_convertible_to<_From, _To>;
  
    // LWG4420
    template <typename _From, typename _To>
--- 1095,1103 ----
     */
    template <typename _From, typename _To>
      concept __value_preserving_convertible_to
!       = __arithmetic_only_value_preserving_convertible_to<_From, _To>
! 	  || (__complex_like<_To> && __arithmetic_only_value_preserving_convertible_to<
! 					_From, typename _To::value_type>);
  
    // LWG4420
    template <typename _From, typename _To>
*************** namespace simd
*** 1140,1145 ****
--- 1225,1241 ----
      concept __simd_integral
        = __simd_vec_type<_Vp> && integral<typename _Vp::value_type>;
  
+   template <typename _Vp>
+     concept __simd_unsigned_integer
+       = __simd_vec_type<_Vp> && __unsigned_integer<typename _Vp::value_type>;
+ 
+   template <typename _Vp>
+     using __simd_complex_value_type = typename _Vp::value_type::value_type;
+ 
+   template <typename _Vp>
+     concept __simd_complex
+       = __simd_vec_type<_Vp> && __complex_like_impl<typename _Vp::value_type>;
+ 
    template <typename _Tp>
      concept __converts_to_vec
        = __simd_vec_type<decltype(declval<const _Tp&>() + declval<const _Tp&>())>;
*************** namespace simd
*** 1181,1186 ****
--- 1277,1292 ----
    template <__vectorizable _Tp, __simd_size_type _Np, __abi_tag _Ap>
      using __similar_mask = basic_mask<sizeof(_Tp), decltype(__abi_rebind<_Tp, _Np, _Ap>())>;
  
+   template <size_t _Bytes, __abi_tag _Ap>
+     using __component_mask_for_ileav
+       = basic_mask<_Bytes / 2,
+ 		   decltype(__abi_rebind<__float_from<_Bytes / 2>, _Ap::_S_size * 2, _Ap>())>;
+ 
+   template <size_t _Bytes, __abi_tag _Ap>
+     using __component_mask_for_ctgus
+       = basic_mask<_Bytes / 2,
+ 		   decltype(__abi_rebind<__float_from<_Bytes / 2>, _Ap::_S_size, _Ap>())>;
+ 
    // Allow _Tp to be _InvalidInteger for __integer_from<16>
    template <typename _Tp, __simd_size_type _Np, __abi_tag _Ap>
      using __similar_vec = basic_vec<_Tp, decltype(__abi_rebind<_Tp, _Np, _Ap>())>;
diff -Nrcpad gcc-17-20260628/libstdc++-v3/include/bits/simd_loadstore.h gcc-17-20260705/libstdc++-v3/include/bits/simd_loadstore.h
*** gcc-17-20260628/libstdc++-v3/include/bits/simd_loadstore.h	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libstdc++-v3/include/bits/simd_loadstore.h	Sun Jul  5 22:32:19 2026
*************** namespace simd
*** 90,95 ****
--- 90,97 ----
  	  return _RV([&](size_t __i) -> _Rp {
  		   if (__i >= __rg_size)
  		     return _Rp();
+ 		   else if constexpr (__complex_like<_Rp> && !__complex_like<_Tp>)
+ 		     return static_cast<typename _Rp::value_type>(__r[__i]);
  		   else
  		     return static_cast<_Rp>(__r[__i]);
  		 });
*************** namespace simd
*** 137,142 ****
--- 139,146 ----
  	  return _RV([&](size_t __i) -> _Rp {
  		   if (__i >= __rg_size || !__mask[int(__i)])
  		     return _Rp();
+ 		   else if constexpr (__complex_like<_Rp> && !__complex_like<_Tp>)
+ 		     return static_cast<typename _Rp::value_type>(__r[__i]);
  		   else
  		     return static_cast<_Rp>(__r[__i]);
  		 });
diff -Nrcpad gcc-17-20260628/libstdc++-v3/include/bits/simd_mask.h gcc-17-20260705/libstdc++-v3/include/bits/simd_mask.h
*** gcc-17-20260628/libstdc++-v3/include/bits/simd_mask.h	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libstdc++-v3/include/bits/simd_mask.h	Sun Jul  5 22:32:19 2026
*************** namespace simd
*** 522,527 ****
--- 522,529 ----
  
    template <size_t _Bytes, __abi_tag _Ap>
      requires (_Ap::_S_nreg == 1)
+       && (__filter_abi_variant(_Ap::_S_variant, _AbiVariant::_CxVariants) == _AbiVariant()
+ 	    || _Ap::_S_size == 1) // _Abi<1, 1, _CxIleav> and _Abi<1, 1, _CxCtgus> go here
      class basic_mask<_Bytes, _Ap>
      : public _MaskBase<_Bytes, _Ap>
      {
*************** namespace simd
*** 543,549 ****
  
        static constexpr bool _S_is_scalar = _S_has_bool_member;
  
!       static constexpr bool _S_use_bitmask = _Ap::_S_is_bitmask;
  
        static constexpr int _S_full_size = [] {
  	if constexpr (_S_is_scalar)
--- 545,551 ----
  
        static constexpr bool _S_is_scalar = _S_has_bool_member;
  
!       static constexpr bool _S_use_bitmask = _Ap::_S_is_bitmask && !_S_is_scalar;
  
        static constexpr int _S_full_size = [] {
  	if constexpr (_S_is_scalar)
*************** namespace simd
*** 606,611 ****
--- 608,637 ----
        { return _M_data; }
  
        /** @internal
+        * @brief Converts the type of the mask without changing the data member.
+        *
+        * Since _Abi<1, 1, _CxCtgus> uses this partial specialization of basic_mask, the _M_data
+        * member cannot be used as mask that matches the basic_vec elements.
+        */
+       [[__gnu__::__always_inline__]]
+       constexpr auto
+       _M_get_ileav_data() const noexcept
+       requires _Ap::_S_is_cx_ileav
+       { return __component_mask_for_ileav<_Bytes, _Ap>(_M_data); }
+ 
+       /** @internal
+        * @brief Converts the type of the mask from a scalar (bool) into a mask of 2 elements.
+        *
+        * Since _Abi<1, 1, _CxIleav> uses this partial specialization of basic_mask, the _M_data
+        * member cannot be used as mask that matches the basic_vec elements.
+        */
+       [[__gnu__::__always_inline__]]
+       constexpr auto
+       _M_get_ctgus_data() const noexcept
+       requires _Ap::_S_is_cx_ctgus
+       { return __component_mask_for_ctgus<_Bytes, _Ap>(_M_data); }
+ 
+       /** @internal
         * Bit-cast the given object @p __x to basic_mask.
         *
         * This is necessary for _S_nreg > 1 where the last element can be bool or when the sizeof
*************** namespace simd
*** 786,795 ****
--- 812,845 ----
  	      else if constexpr (_S_use_bitmask || _UV::_S_use_bitmask)
  		return basic_mask(__x.to_bitset())._M_data;
  
+ 	      // _CxCtgus stores its masks matching the complex::value_type (_UBytes/2)
+ 	      else if constexpr (_UAbi::_S_is_cx_ctgus)
+ 		return basic_mask(__x._M_data)._M_data;
+ 
  	      // vec-mask to vec-mask
  	      else if constexpr (_Bytes == _UBytes)
  		return _S_recursive_bit_cast(__x)._M_data;
  
+ 	      // 2-mask-elements wrapper to plain mask
+ 	      else if constexpr (_UAbi::_S_is_cx_ileav)
+ 		{
+ 		  if constexpr (_UBytes <= sizeof(0ll))
+ 		    // two step (bit-cast -> convert)
+ 		    return basic_mask(__similar_mask<__integer_from<_UBytes>, _S_size, _UAbi>(__x))
+ 			     ._M_data;
+ 		  else if constexpr (_Bytes == 1)
+ 		    { // 16 -> 1
+ 		      constexpr auto [...__is] = _IotaArray<_S_size>;
+ 		      using _Ip = __vec_value_type<_DataType>;
+ 		      return _DataType {_Ip(__x._M_data._M_concat_data()[__is * 2])...};
+ 		    }
+ 		  else // from complex<double>
+ 		    {
+ 		      const auto __k2 = __similar_mask<__integer_from<_Bytes / 2>, 2 * _S_size,
+ 						       _UAbi>(__x._M_data);
+ 		      return _S_recursive_bit_cast(__k2);
+ 		    }
+ 		}
  	      else
  		{
  #if _GLIBCXX_X86
*************** namespace simd
*** 1015,1027 ****
         * @tparam _Use_2_for_1  Store the value of every second element into one bit of the result.
         *                       (precondition: each even/odd pair stores the same value)
         */
!       template <int _Offset = 0, _ArchTraits _Traits = {}>
  	[[__gnu__::__always_inline__]]
! 	constexpr _Bitmask<_S_size + _Offset>
  	_M_to_uint() const
  	{
! 	  constexpr int __nbits = _S_size;
  	  static_assert(__nbits + _Offset <= numeric_limits<unsigned long long>::digits);
  	  // before shifting
  	  using _U0 = _Bitmask<__nbits>;
  	  // potentially wider type needed for shift by _Offset
--- 1065,1078 ----
         * @tparam _Use_2_for_1  Store the value of every second element into one bit of the result.
         *                       (precondition: each even/odd pair stores the same value)
         */
!       template <int _Offset = 0, bool _Use_2_for_1 = false, _ArchTraits _Traits = {}>
  	[[__gnu__::__always_inline__]]
! 	constexpr _Bitmask<_S_size / (_Use_2_for_1 + 1) + _Offset>
  	_M_to_uint() const
  	{
! 	  constexpr int __nbits = _S_size / (_Use_2_for_1 + 1);
  	  static_assert(__nbits + _Offset <= numeric_limits<unsigned long long>::digits);
+ 	  static_assert(!(_S_is_scalar && _Use_2_for_1));
  	  // before shifting
  	  using _U0 = _Bitmask<__nbits>;
  	  // potentially wider type needed for shift by _Offset
*************** namespace simd
*** 1031,1065 ****
  	      auto __bits = _M_data;
  	      if constexpr (_S_is_partial)
  		__bits &= _S_implicit_mask;
  	      return _Ur(__bits) << _Offset;
  	    }
  	  else
  	    {
  #if _GLIBCXX_X86
  	      if (!__is_const_known(*this))
  		{
  		  _U0 __uint;
! 		  if constexpr (_Bytes != 2) // movmskb would duplicate each bit
! 		    __uint = _U0(__x86_movmsk(_M_data));
! 		  else if constexpr (_Bytes == 2 && _Traits._M_have_bmi2())
! 		    __uint = __bit_extract_even<__nbits>(__x86_movmsk(_M_data));
! 		  else if constexpr (_Bytes == 2)
! 		    return __similar_mask<char, __nbits, _Ap>(*this).template _M_to_uint<_Offset>();
  		  else
! 		    static_assert(false);
! 		  // TODO: with AVX512 use __builtin_ia32_cvt[bwdq]2mask(128|256|512)
! 		  // TODO: Ask for compiler builtin to do the best of the above. This should also
! 		  // combine with a preceding vector-mask compare to produce a bit-mask compare (on
! 		  // AVX512)
  		  if constexpr (_S_is_partial)
  		    __uint &= (_U0(1) << _S_size) - 1;
  		  return _Ur(__uint) << _Offset;
  		}
  #endif
! 	      using _IV = _VecType;
  	      static_assert(destructible<_IV>);
  	      const typename _IV::mask_type& __k = [&] [[__gnu__::__always_inline__]] () {
! 		if constexpr (is_same_v<typename _IV::mask_type, basic_mask>)
  		  return *this;
  		else
  		  return typename _IV::mask_type(*this);
--- 1082,1137 ----
  	      auto __bits = _M_data;
  	      if constexpr (_S_is_partial)
  		__bits &= _S_implicit_mask;
+ 	      if constexpr (_Use_2_for_1)
+ 		__bits = __bit_extract_even<__nbits>(__bits);
  	      return _Ur(__bits) << _Offset;
  	    }
+ 	  else if constexpr (_Bytes == sizeof(0ll) && _Use_2_for_1)
+ 	    {
+ 	      const auto __u32 = __vec_bit_cast<unsigned>(_M_data);
+ 	      if constexpr (sizeof(_M_data) == 16)
+ 		{
+ 		  if constexpr (_Offset < 32)
+ 		    return __u32[0] & (1u << _Offset);
+ 		  else
+ 		    return _M_data[0] & (1ull << _Offset);
+ 		}
+ 	      else if constexpr (sizeof(_M_data) == 32)
+ 		{
+ 		  if constexpr (_Offset < 31)
+ 		    return (__u32[4] & (2u << _Offset)) | (__u32[0] & (1u << _Offset));
+ 		  else
+ 		    return (_M_data[2] & (2ull << _Offset)) | (_M_data[0] & (1ull << _Offset));
+ 		}
+ 	      else
+ 		static_assert(false);
+ 	    }
+ 	  else if constexpr (_Use_2_for_1 && __nbits == 1)
+ 	    return _Ur(operator[](0)) << _Offset;
  	  else
  	    {
  #if _GLIBCXX_X86
  	      if (!__is_const_known(*this))
  		{
  		  _U0 __uint;
! 		  if constexpr (_Use_2_for_1)
! 		    __uint = __x86_cvt_vecmask_to_bitmask<_Traits>(
! 			     __vec_bit_cast<__integer_from<_Bytes * 2>>(_M_data));
  		  else
! 		    __uint = __x86_cvt_vecmask_to_bitmask<_Traits>( _M_data);
  		  if constexpr (_S_is_partial)
  		    __uint &= (_U0(1) << _S_size) - 1;
  		  return _Ur(__uint) << _Offset;
  		}
  #endif
! 	      using _IV = conditional_t<_Use_2_for_1,
! 					__similar_vec<__integer_from<_Bytes * 2>, __nbits, _Ap>,
! 					_VecType>;
  	      static_assert(destructible<_IV>);
  	      const typename _IV::mask_type& __k = [&] [[__gnu__::__always_inline__]] () {
! 		if constexpr (_Use_2_for_1)
! 		  return typename _IV::mask_type(__to_cx_ileav(*this));
! 		else if constexpr (is_same_v<typename _IV::mask_type, basic_mask>)
  		  return *this;
  		else
  		  return typename _IV::mask_type(*this);
*************** namespace simd
*** 1075,1082 ****
  		{ // recurse after splitting in two
  		  constexpr int __n_lo = __n - __n % __CHAR_BIT__;
  		  const auto [__lo, __hi] = chunk<__n_lo>(__k);
! 		  _Ur __bits = __hi.template _M_to_uint<_Offset + __n_lo>();
! 		  return __bits | __lo.template _M_to_uint<_Offset>();
  		}
  	      else
  		{ // limit powers_of_2 to 1, 2, 4, ..., 128
--- 1147,1154 ----
  		{ // recurse after splitting in two
  		  constexpr int __n_lo = __n - __n % __CHAR_BIT__;
  		  const auto [__lo, __hi] = chunk<__n_lo>(__k);
! 		  _Ur __bits = __hi.template _M_to_uint<_Offset + __n_lo, _Use_2_for_1>();
! 		  return __bits | __lo.template _M_to_uint<_Offset, _Use_2_for_1>();
  		}
  	      else
  		{ // limit powers_of_2 to 1, 2, 4, ..., 128
*************** namespace simd
*** 1345,1350 ****
--- 1417,1423 ----
  
    template <size_t _Bytes, __abi_tag _Ap>
      requires (_Ap::_S_nreg > 1)
+       && (__filter_abi_variant(_Ap::_S_variant, _AbiVariant::_CxVariants) == _AbiVariant())
      class basic_mask<_Bytes, _Ap>
      : public _MaskBase<_Bytes, _Ap>
      {
*************** namespace simd
*** 1519,1526 ****
        constexpr basic_mask&
        _M_and_neighbors()
        {
! 	_M_data0._M_and_neighbors();
! 	_M_data1._M_and_neighbors();
  	return *this;
        }
  
--- 1592,1607 ----
        constexpr basic_mask&
        _M_and_neighbors()
        {
! 	if constexpr (_S_size == 2)
! 	  {
! 	    static_assert(_S_is_scalar);
! 	    _M_data0 = _M_data1 = _M_data0 && _M_data1;
! 	  }
! 	else
! 	  {
! 	    _M_data0._M_and_neighbors();
! 	    _M_data1._M_and_neighbors();
! 	  }
  	return *this;
        }
  
*************** namespace simd
*** 1528,1535 ****
        constexpr basic_mask&
        _M_or_neighbors()
        {
! 	_M_data0._M_or_neighbors();
! 	_M_data1._M_or_neighbors();
  	return *this;
        }
  
--- 1609,1624 ----
        constexpr basic_mask&
        _M_or_neighbors()
        {
! 	if constexpr (_S_size == 2)
! 	  {
! 	    static_assert(_S_is_scalar);
! 	    _M_data0 = _M_data1 = _M_data0 || _M_data1;
! 	  }
! 	else
! 	  {
! 	    _M_data0._M_or_neighbors();
! 	    _M_data1._M_or_neighbors();
! 	  }
  	return *this;
        }
  
*************** namespace simd
*** 1583,1595 ****
  
        // [simd.mask.ctor] conversion constructor ------------------------------
        template <size_t _UBytes, typename _UAbi>
! 	requires (_S_size == _UAbi::_S_size)
  	[[__gnu__::__always_inline__]]
  	constexpr explicit(__is_mask_conversion_explicit<_Ap, _UAbi>(_Bytes, _UBytes))
  	basic_mask(const basic_mask<_UBytes, _UAbi>& __x) noexcept
  	  : _M_data0([&] {
  	      if constexpr (_UAbi::_S_nreg > 1)
  		{
  		    return __x._M_data0;
  		}
  	      else if constexpr (_N0 == 1)
--- 1672,1696 ----
  
        // [simd.mask.ctor] conversion constructor ------------------------------
        template <size_t _UBytes, typename _UAbi>
! 	requires (_S_size == _UAbi::_S_size) && (_UAbi::_S_is_cx_ctgus)
! 	[[__gnu__::__always_inline__]]
! 	constexpr explicit(__is_mask_conversion_explicit<_Ap, _UAbi>(_Bytes, _UBytes))
! 	basic_mask(const basic_mask<_UBytes, _UAbi>& __x) noexcept
! 	: basic_mask(__x._M_data) // unwrap _CxCtgus basic_mask partial specialization
! 	{}
! 
! 
!       template <size_t _UBytes, typename _UAbi>
! 	requires (_S_size == _UAbi::_S_size) && (!_UAbi::_S_is_cx_ctgus)
  	[[__gnu__::__always_inline__]]
  	constexpr explicit(__is_mask_conversion_explicit<_Ap, _UAbi>(_Bytes, _UBytes))
  	basic_mask(const basic_mask<_UBytes, _UAbi>& __x) noexcept
  	  : _M_data0([&] {
  	      if constexpr (_UAbi::_S_nreg > 1)
  		{
+ 		  if constexpr (_UAbi::_S_is_cx_ileav)
+ 		    return __to_cx_ileav(__x._M_data._M_data0);
+ 		  else
  		    return __x._M_data0;
  		}
  	      else if constexpr (_N0 == 1)
*************** namespace simd
*** 1600,1605 ****
--- 1701,1709 ----
  	    _M_data1([&] {
  	      if constexpr (_UAbi::_S_nreg > 1)
  		{
+ 		  if constexpr (_UAbi::_S_is_cx_ileav)
+ 		    return __to_cx_ileav(__x._M_data._M_data1);
+ 		  else
  		    return __x._M_data1;
  		}
  	      else if constexpr (_N1 == 1)
*************** namespace simd
*** 1650,1656 ****
  	else if constexpr (_M_data1._S_has_bool_member)
  	  // in some cases the last element can be 'bool' instead of bit-/vector-mask;
  	  // e.g. mask<short, 17> is {mask<short, 16>, mask<short, 1>}, where the latter uses
! 	  // _ScalarAbi<1>, which is stored as 'bool'
  	  return __i < _N0 ? _M_data0[__i] : _M_data1[__i - _N0];
  	else if constexpr (abi_type::_S_is_bitmask)
  	  {
--- 1754,1760 ----
  	else if constexpr (_M_data1._S_has_bool_member)
  	  // in some cases the last element can be 'bool' instead of bit-/vector-mask;
  	  // e.g. mask<short, 17> is {mask<short, 16>, mask<short, 1>}, where the latter uses
! 	  // _Abi<1, 1>, which is stored as 'bool'
  	  return __i < _N0 ? _M_data0[__i] : _M_data1[__i - _N0];
  	else if constexpr (abi_type::_S_is_bitmask)
  	  {
*************** namespace simd
*** 1728,1756 ****
  	  }
        }
  
!       template <int _Offset = 0, _ArchTraits _Traits = {}>
  	[[__gnu__::__always_inline__]]
  	constexpr auto
  	_M_to_uint() const
  	{
! 	  constexpr int _N0x = _N0;
! 	  if constexpr (_N0x >= numeric_limits<unsigned long long>::digits)
  	    {
  	      static_assert(_Offset == 0);
  	      return __trivial_pair {
! 		_M_data0.template _M_to_uint<0>(),
! 		_M_data1.template _M_to_uint<0>()
  	      };
  	    }
  	  else
  	    {
  #if _GLIBCXX_X86
  	      if constexpr (_Bytes == 2 && !_Traits._M_have_bmi2() && _Ap::_S_nreg == 2
! 			      && !_S_use_bitmask)
  		return __similar_mask<char, _S_size, _Ap>(*this).template _M_to_uint<_Offset>();
  #endif
! 	      auto __uint = _M_data1.template _M_to_uint<_N0x + _Offset>();
! 	      __uint |= _M_data0.template _M_to_uint<_Offset>();
  	      return __uint;
  	    }
  	}
--- 1832,1862 ----
  	  }
        }
  
!       template <int _Offset = 0, bool _Use_2_for_1 = false, _ArchTraits _Traits = {}>
  	[[__gnu__::__always_inline__]]
  	constexpr auto
  	_M_to_uint() const
  	{
! 	  constexpr int _N0x = _Use_2_for_1 ? _N0 / 2 : _N0;
! 	  if constexpr (_Use_2_for_1 && _S_is_scalar && _S_size == 2)
! 	    return _M_data1.template _M_to_uint<_Offset>();
! 	  else if constexpr (_N0x >= numeric_limits<unsigned long long>::digits)
  	    {
  	      static_assert(_Offset == 0);
  	      return __trivial_pair {
! 		_M_data0.template _M_to_uint<0, _Use_2_for_1>(),
! 		_M_data1.template _M_to_uint<0, _Use_2_for_1>()
  	      };
  	    }
  	  else
  	    {
  #if _GLIBCXX_X86
  	      if constexpr (_Bytes == 2 && !_Traits._M_have_bmi2() && _Ap::_S_nreg == 2
! 			      && !_S_is_scalar && !_S_use_bitmask && !_Use_2_for_1)
  		return __similar_mask<char, _S_size, _Ap>(*this).template _M_to_uint<_Offset>();
  #endif
! 	      auto __uint = _M_data1.template _M_to_uint<_N0x + _Offset, _Use_2_for_1>();
! 	      __uint |= _M_data0.template _M_to_uint<_Offset, _Use_2_for_1>();
  	      return __uint;
  	    }
  	}
*************** namespace simd
*** 1883,1888 ****
--- 1989,1997 ----
  	  using _Vp = vec<_T0, _S_size>;
  	  if constexpr (!is_same_v<basic_mask, typename _Vp::mask_type>)
  	    return __select_impl(static_cast<_Vp::mask_type>(__k), __t, __f);
+ 	  else if constexpr (__complex_like<_T0>)
+ 	    return _Vp::_S_concat(__select_impl(__k._M_data0, __t, __f),
+ 				  __select_impl(__k._M_data1, __t, __f));
  	  else
  	    return _Vp::_S_init(__select_impl(__k._M_data0, __t, __f),
  				__select_impl(__k._M_data1, __t, __f));
*************** namespace simd
*** 1923,1938 ****
  
        [[__gnu__::__always_inline__]]
        constexpr __simd_size_type
        _M_reduce_min_index() const
        {
  	if constexpr (_S_size <= numeric_limits<unsigned long long>::digits)
  	  {
  	    const auto __bits = _M_to_uint();
  	    __glibcxx_simd_precondition(__bits, "An empty mask does not have a min_index.");
! 	    if constexpr (_S_size == 1)
! 	      return 0;
! 	    else
! 	      return __countr_zero(_M_to_uint());
  	  }
  	else if (_M_data0._M_none_of())
  	  return _M_data1._M_reduce_min_index() + _N0;
--- 2032,2059 ----
  
        [[__gnu__::__always_inline__]]
        constexpr __simd_size_type
+       _M_reduce_count() const noexcept
+       {
+ 	if constexpr (_S_is_scalar)
+ 	  // SWAR could help. I don't think we care at the moment.
+ 	  return _M_data0._M_reduce_count() + _M_data1._M_reduce_count();
+ 	else if constexpr (_S_size <= numeric_limits<unsigned>::digits)
+ 	  return __builtin_popcount(_M_to_uint());
+ 	else if constexpr (_S_size <= numeric_limits<unsigned long long>::digits)
+ 	  return __builtin_popcountll(to_ullong());
+ 	else
+ 	  return _M_data0._M_reduce_count() + _M_data1._M_reduce_count();
+       }
+ 
+       [[__gnu__::__always_inline__]]
+       constexpr __simd_size_type
        _M_reduce_min_index() const
        {
  	if constexpr (_S_size <= numeric_limits<unsigned long long>::digits)
  	  {
  	    const auto __bits = _M_to_uint();
  	    __glibcxx_simd_precondition(__bits, "An empty mask does not have a min_index.");
! 	    return __countr_zero(_M_to_uint());
  	  }
  	else if (_M_data0._M_none_of())
  	  return _M_data1._M_reduce_min_index() + _N0;
*************** namespace simd
*** 1948,1957 ****
  	  {
  	    const auto __bits = _M_to_uint();
  	    __glibcxx_simd_precondition(__bits, "An empty mask does not have a max_index.");
! 	    if constexpr (_S_size == 1)
! 	      return 0;
! 	    else
! 	      return __highest_bit(_M_to_uint());
  	  }
  	else if (_M_data1._M_none_of())
  	  return _M_data0._M_reduce_max_index();
--- 2069,2075 ----
  	  {
  	    const auto __bits = _M_to_uint();
  	    __glibcxx_simd_precondition(__bits, "An empty mask does not have a max_index.");
! 	    return __highest_bit(_M_to_uint());
  	  }
  	else if (_M_data1._M_none_of())
  	  return _M_data0._M_reduce_max_index();
diff -Nrcpad gcc-17-20260628/libstdc++-v3/include/bits/simd_mask_reductions.h gcc-17-20260705/libstdc++-v3/include/bits/simd_mask_reductions.h
*** gcc-17-20260628/libstdc++-v3/include/bits/simd_mask_reductions.h	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libstdc++-v3/include/bits/simd_mask_reductions.h	Sun Jul  5 22:32:19 2026
*************** namespace simd
*** 68,74 ****
      {
        if constexpr (_Ap::_S_size == 1)
  	return +__k[0];
!       else if constexpr (_Ap::_S_is_vecmask)
  	return -reduce(-__k);
        else
  	return __k._M_reduce_count();
--- 68,74 ----
      {
        if constexpr (_Ap::_S_size == 1)
  	return +__k[0];
!       else if constexpr (_Ap::_S_is_vecmask && _Bytes <= sizeof(0ll))
  	return -reduce(-__k);
        else
  	return __k._M_reduce_count();
diff -Nrcpad gcc-17-20260628/libstdc++-v3/include/bits/simd_math.h gcc-17-20260705/libstdc++-v3/include/bits/simd_math.h
*** gcc-17-20260628/libstdc++-v3/include/bits/simd_math.h	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libstdc++-v3/include/bits/simd_math.h	Sun Jul  5 22:32:19 2026
***************
*** 0 ****
--- 1,125 ----
+ // Implementation of <simd> -*- C++ -*-
+ 
+ // Copyright The GNU Toolchain Authors.
+ //
+ // 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.
+ 
+ // Under Section 7 of GPL version 3, you are granted additional
+ // permissions described in the GCC Runtime Library Exception, version
+ // 3.1, as published by the Free Software Foundation.
+ 
+ // You should have received a copy of the GNU General Public License and
+ // a copy of the GCC Runtime Library Exception along with this program;
+ // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ // <http://www.gnu.org/licenses/>.
+ 
+ #ifndef _GLIBCXX_SIMD_MATH_H
+ #define _GLIBCXX_SIMD_MATH_H 1
+ 
+ #ifdef _GLIBCXX_SYSHDR
+ #pragma GCC system_header
+ #endif
+ 
+ #if __cplusplus >= 202400L
+ 
+ #include "simd_vec.h"
+ 
+ // psabi warnings are bogus because the ABI of the internal types never leaks into user code
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wpsabi"
+ 
+ // [simd.math] ----------------------------------------------------------------
+ namespace std _GLIBCXX_VISIBILITY(default)
+ {
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+ namespace simd
+ {
+   template <signed_integral T, typename Abi>
+     [[__gnu__::__always_inline__]]
+     constexpr basic_vec<T, Abi>
+     abs(const basic_vec<T, Abi>& __x)
+     { return __x._M_abs(); }
+ 
+   template <__math_floating_point _Vp>
+     [[__gnu__::__always_inline__]]
+     constexpr typename __deduced_vec_t<_Vp>::mask_type
+     isinf(const _Vp& __x)
+     { return static_cast<const __deduced_vec_t<_Vp>&>(__x)._M_isinf(); }
+ 
+   template <__math_floating_point _Vp>
+     [[__gnu__::__always_inline__]]
+     constexpr typename __deduced_vec_t<_Vp>::mask_type
+     isnan(const _Vp& __x)
+     { return static_cast<const __deduced_vec_t<_Vp>&>(__x)._M_isnan(); }
+ } // namespace simd
+ 
+ 
+ // [simd.complex.math] --------------------------------------------------------
+ namespace simd
+ {
+   template <__simd_complex _Vp>
+     [[__gnu__::__always_inline__]]
+     constexpr rebind_t<__simd_complex_value_type<_Vp>, _Vp>
+     real(const _Vp& __x) noexcept
+     { return __x.real(); }
+ 
+   template <__simd_complex _Vp>
+     [[__gnu__::__always_inline__]]
+     constexpr rebind_t<__simd_complex_value_type<_Vp>, _Vp>
+     imag(const _Vp& __x) noexcept
+     { return __x.imag(); }
+ 
+   template <__simd_complex _Vp>
+     [[__gnu__::__always_inline__]]
+     constexpr rebind_t<__simd_complex_value_type<_Vp>, _Vp>
+     abs(const _Vp& __x) noexcept
+     { return __x._M_abs(); }
+ 
+   template <__simd_complex _Vp>
+     [[__gnu__::__always_inline__]]
+     constexpr rebind_t<__simd_complex_value_type<_Vp>, _Vp>
+     arg(const _Vp& __x) noexcept
+     { return __x._M_arg(); }
+ 
+   template <__simd_complex _Vp>
+     [[__gnu__::__always_inline__]]
+     constexpr rebind_t<__simd_complex_value_type<_Vp>, _Vp>
+     norm(const _Vp& __x) noexcept
+     { return __x._M_norm(); }
+ 
+   template <__simd_complex _Vp>
+     [[__gnu__::__always_inline__]]
+     constexpr _Vp
+     conj(const _Vp& __x) noexcept
+     { return __x._M_conj(); }
+ 
+   template <__simd_complex _Vp>
+     [[__gnu__::__always_inline__]]
+     constexpr _Vp
+     proj(const _Vp& __x) noexcept
+     { return __x._M_proj(); }
+ } // namespace simd
+ 
+   using simd::real;
+   using simd::imag;
+   using simd::abs;
+   using simd::arg;
+   using simd::norm;
+   using simd::conj;
+   using simd::proj;
+ 
+ _GLIBCXX_END_NAMESPACE_VERSION
+ } // namespace std
+ 
+ #pragma GCC diagnostic pop
+ #endif // C++26
+ #endif // _GLIBCXX_SIMD_MATH_H
diff -Nrcpad gcc-17-20260628/libstdc++-v3/include/bits/simd_vec.h gcc-17-20260705/libstdc++-v3/include/bits/simd_vec.h
*** gcc-17-20260628/libstdc++-v3/include/bits/simd_vec.h	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libstdc++-v3/include/bits/simd_vec.h	Sun Jul  5 22:32:19 2026
*************** namespace simd
*** 249,254 ****
--- 249,255 ----
  
    template <__vectorizable _Tp, __abi_tag _Ap>
      requires (_Ap::_S_nreg == 1)
+       && (!__complex_like<_Tp>)
      class basic_vec<_Tp, _Ap>
      : public _VecBase<_Tp, _Ap>
      {
*************** namespace simd
*** 296,303 ****
        }
  
        [[__gnu__::__always_inline__]]
        constexpr const _DataType&
!       _M_get() const
        { return _M_data; }
  
        [[__gnu__::__always_inline__]]
--- 297,309 ----
        }
  
        [[__gnu__::__always_inline__]]
+       constexpr _DataType&
+       _M_get() noexcept
+       { return _M_data; }
+ 
+       [[__gnu__::__always_inline__]]
        constexpr const _DataType&
!       _M_get() const noexcept
        { return _M_data; }
  
        [[__gnu__::__always_inline__]]
*************** namespace simd
*** 1747,1752 ****
--- 1753,1759 ----
  
    template <__vectorizable _Tp, __abi_tag _Ap>
      requires (_Ap::_S_nreg > 1)
+       && (!__complex_like<_Tp>)
      class basic_vec<_Tp, _Ap>
      : public _VecBase<_Tp, _Ap>
      {
*************** namespace simd
*** 1777,1783 ****
  
        _DataType1 _M_data1;
  
!       static constexpr bool _S_use_bitmask = _Ap::_S_is_bitmask;
  
        static constexpr bool _S_is_partial = _DataType1::_S_is_partial;
  
--- 1784,1790 ----
  
        _DataType1 _M_data1;
  
!       static constexpr bool _S_use_bitmask = _DataType0::_S_use_bitmask;
  
        static constexpr bool _S_is_partial = _DataType1::_S_is_partial;
  
*************** namespace simd
*** 1797,1809 ****
        }
  
        [[__gnu__::__always_inline__]]
        constexpr const _DataType0&
!       _M_get_low() const
        { return _M_data0; }
  
        [[__gnu__::__always_inline__]]
        constexpr const _DataType1&
!       _M_get_high() const
        { return _M_data1; }
  
        [[__gnu__::__always_inline__]]
--- 1804,1826 ----
        }
  
        [[__gnu__::__always_inline__]]
+       constexpr _DataType0&
+       _M_get_low() noexcept
+       { return _M_data0; }
+ 
+       [[__gnu__::__always_inline__]]
        constexpr const _DataType0&
!       _M_get_low() const noexcept
        { return _M_data0; }
  
        [[__gnu__::__always_inline__]]
+       constexpr _DataType1&
+       _M_get_high() noexcept
+       { return _M_data1; }
+ 
+       [[__gnu__::__always_inline__]]
        constexpr const _DataType1&
!       _M_get_high() const noexcept
        { return _M_data1; }
  
        [[__gnu__::__always_inline__]]
diff -Nrcpad gcc-17-20260628/libstdc++-v3/include/bits/simd_x86.h gcc-17-20260705/libstdc++-v3/include/bits/simd_x86.h
*** gcc-17-20260628/libstdc++-v3/include/bits/simd_x86.h	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libstdc++-v3/include/bits/simd_x86.h	Sun Jul  5 22:32:19 2026
*************** namespace simd
*** 1043,1048 ****
--- 1043,1094 ----
  	static_assert(false, "TODO");
      }
  
+   template <_ArchTraits _Traits = {}, __vec_builtin _TV>
+     [[__gnu__::__always_inline__]]
+     inline _Bitmask<__width_of<_TV>>
+     __x86_cvt_vecmask_to_bitmask(const _TV __k)
+     {
+       using _Tp = __vec_value_type<_TV>;
+       constexpr int _Bytes = sizeof(_Tp);
+       constexpr int _Np = __width_of<_TV>;
+       constexpr bool __vl = _Traits._M_have_avx512vl();
+       constexpr bool __bw = _Traits._M_have_avx512bw();
+       constexpr bool __dq = _Traits._M_have_avx512dq();
+       if constexpr (__vl && __bw && _Bytes == 1 && sizeof(__k) == 16)
+ 	return __builtin_ia32_cvtb2mask128(__k);
+       else if constexpr (__vl && __bw && _Bytes == 1 && sizeof(__k) == 32)
+ 	return __builtin_ia32_cvtb2mask256(__k);
+       else if constexpr (__bw && _Bytes == 1 && sizeof(__k) == 64)
+ 	return __builtin_ia32_cvtb2mask512(__k);
+       else if constexpr (__vl && __bw && _Bytes == 2 && sizeof(__k) == 16)
+ 	return __builtin_ia32_cvtw2mask128(__k);
+       else if constexpr (__vl && __bw && _Bytes == 2 && sizeof(__k) == 32)
+ 	return __builtin_ia32_cvtw2mask256(__k);
+       else if constexpr (__bw && _Bytes == 2 && sizeof(__k) == 64)
+ 	return __builtin_ia32_cvtw2mask512(__k);
+       else if constexpr (__vl && __dq && _Bytes == 4 && sizeof(__k) == 16)
+ 	return __builtin_ia32_cvtd2mask128(__k);
+       else if constexpr (__vl && __dq && _Bytes == 4 && sizeof(__k) == 32)
+ 	return __builtin_ia32_cvtd2mask256(__k);
+       else if constexpr (__dq && _Bytes == 4 && sizeof(__k) == 64)
+ 	return __builtin_ia32_cvtd2mask512(__k);
+       else if constexpr (__vl && __dq && _Bytes == 8 && sizeof(__k) == 16)
+ 	return __builtin_ia32_cvtq2mask128(__k);
+       else if constexpr (__vl && __dq && _Bytes == 8 && sizeof(__k) == 32)
+ 	return __builtin_ia32_cvtq2mask256(__k);
+       else if constexpr (__dq && _Bytes == 8 && sizeof(__k) == 64)
+ 	return __builtin_ia32_cvtq2mask512(__k);
+       else if constexpr (__vl && __dq && __bw && sizeof(__k) < 16)
+ 	return __x86_cvt_vecmask_to_bitmask(__vec_zero_pad_to_16(__k));
+       else if constexpr (_Bytes != 2) // movmskb would duplicate each bit
+ 	return __x86_movmsk(__k);
+       else if constexpr (_Traits._M_have_bmi2())
+ 	return __bit_extract_even<_Np>(__x86_movmsk(__k));
+       else
+ 	return __x86_cvt_vecmask_to_bitmask(
+ 		 __x86_cvt_vecmask<__vec_builtin_type<char, _Np>>(__k));
+     }
+ 
    /** @internal
     * AVX512 masked (converting) loads
     *
diff -Nrcpad gcc-17-20260628/libstdc++-v3/include/bits/stl_algo.h gcc-17-20260705/libstdc++-v3/include/bits/stl_algo.h
*** gcc-17-20260628/libstdc++-v3/include/bits/stl_algo.h	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libstdc++-v3/include/bits/stl_algo.h	Sun Jul  5 22:32:19 2026
*************** namespace std _GLIBCXX_VISIBILITY(defaul
*** 81,86 ****
--- 81,88 ----
  {
  _GLIBCXX_BEGIN_NAMESPACE_VERSION
  
+   /// @cond undocumented
+ 
    /// Swaps the median value of *__a, *__b and *__c under __comp to *__result
    template<typename _Iterator, typename _Compare>
      _GLIBCXX20_CONSTEXPR
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 295,300 ****
--- 297,304 ----
  	}
      }
  
+   /// @endcond
+ 
    /**
     *  @brief  Find last matching subsequence in a sequence.
     *  @ingroup non_mutating_algorithms
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 302,325 ****
     *  @param  __last1   End of range to search.
     *  @param  __first2  Start of sequence to match.
     *  @param  __last2   End of sequence to match.
!    *  @return   The last iterator @c i in the range
!    *  @p [__first1,__last1-(__last2-__first2)) such that @c *(i+N) ==
!    *  @p *(__first2+N) for each @c N in the range @p
!    *  [0,__last2-__first2), or @p __last1 if no such iterator exists.
     *
!    *  Searches the range @p [__first1,__last1) for a sub-sequence that
!    *  compares equal value-by-value with the sequence given by @p
!    *  [__first2,__last2) and returns an iterator to the __first
!    *  element of the sub-sequence, or @p __last1 if the sub-sequence
     *  is not found.  The sub-sequence will be the last such
!    *  subsequence contained in [__first1,__last1).
     *
!    *  Because the sub-sequence must lie completely within the range @p
!    *  [__first1,__last1) it must start at a position less than @p
!    *  __last1-(__last2-__first2) where @p __last2-__first2 is the
     *  length of the sub-sequence.  This means that the returned
!    *  iterator @c i will be in the range @p
!    *  [__first1,__last1-(__last2-__first2))
    */
    template<typename _ForwardIterator1, typename _ForwardIterator2>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
--- 306,330 ----
     *  @param  __last1   End of range to search.
     *  @param  __first2  Start of sequence to match.
     *  @param  __last2   End of sequence to match.
!    *  @return   The last iterator `i` in the range
!    *            `[__first1, __last1 - (__last2 - __first2))` such that
!    *            `*(i + N) == *(__first2 + N)` for each `N` in the range
!    *            `[0, __last2 - __first2)`, or `__last1` if no such iterator
!    *            exists.
     *
!    *  Searches the range `[__first1, __last1)` for a sub-sequence that
!    *  compares equal value-by-value with the sequence given by
!    *  `[__first2, __last2)` and returns an iterator to the first
!    *  element of the sub-sequence, or `__last1` if the sub-sequence
     *  is not found.  The sub-sequence will be the last such
!    *  subsequence contained in `[__first1, __last1)`.
     *
!    *  Because the sub-sequence must lie completely within the range
!    *  `[__first1, __last1)` it must start at a position less than
!    *  `__last1 - (__last2 - __first2)` where `__last2 - __first2` is the
     *  length of the sub-sequence.  This means that the returned
!    *  iterator `i` will be in the range
!    *  `[__first1, __last1 - (__last2 - __first2))`
    */
    template<typename _ForwardIterator1, typename _ForwardIterator2>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 350,374 ****
     *  @param  __first2  Start of sequence to match.
     *  @param  __last2   End of sequence to match.
     *  @param  __comp    The predicate to use.
!    *  @return The last iterator @c i in the range @p
!    *  [__first1,__last1-(__last2-__first2)) such that @c
!    *  predicate(*(i+N), @p (__first2+N)) is true for each @c N in the
!    *  range @p [0,__last2-__first2), or @p __last1 if no such iterator
!    *  exists.
     *
!    *  Searches the range @p [__first1,__last1) for a sub-sequence that
!    *  compares equal value-by-value with the sequence given by @p
!    *  [__first2,__last2) using comp as a predicate and returns an
!    *  iterator to the first element of the sub-sequence, or @p __last1
     *  if the sub-sequence is not found.  The sub-sequence will be the
!    *  last such subsequence contained in [__first,__last1).
     *
!    *  Because the sub-sequence must lie completely within the range @p
!    *  [__first1,__last1) it must start at a position less than @p
!    *  __last1-(__last2-__first2) where @p __last2-__first2 is the
     *  length of the sub-sequence.  This means that the returned
!    *  iterator @c i will be in the range @p
!    *  [__first1,__last1-(__last2-__first2))
    */
    template<typename _ForwardIterator1, typename _ForwardIterator2,
  	   typename _BinaryPredicate>
--- 355,379 ----
     *  @param  __first2  Start of sequence to match.
     *  @param  __last2   End of sequence to match.
     *  @param  __comp    The predicate to use.
!    *  @return The last iterator `i` in the range
!    *          `[__first1, __last1-(__last2 - __first2))` such that
!    *          `__comp(*(i + N), (__first2 + N))` is true for each `N` in the
!    *          range `[0, __last2 - __first2)`, or `__last1` if no such iterator
!    *          exists.
     *
!    *  Searches the range `[__first1, __last1)` for a sub-sequence that
!    *  compares equal value-by-value with the sequence given by
!    *  `[__first2, __last2)` using `__comp` as a predicate and returns an
!    *  iterator to the first element of the sub-sequence, or `__last1`
     *  if the sub-sequence is not found.  The sub-sequence will be the
!    *  last such subsequence contained in `[__first, __last1)`.
     *
!    *  Because the sub-sequence must lie completely within the range
!    *  `[__first1, __last1)` it must start at a position less than
!    *  `__last1 - (__last2 - __first2)` where `__last2 - __first2` is the
     *  length of the sub-sequence.  This means that the returned
!    *  iterator `i` will be in the range
!    *  `[__first1, __last1 - (__last2 - __first2))`
    */
    template<typename _ForwardIterator1, typename _ForwardIterator2,
  	   typename _BinaryPredicate>
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 403,410 ****
     *  @param  __pred    A predicate.
     *  @return  True if the check is true, false otherwise.
     *
!    *  Returns true if @p __pred is true for each element in the range
!    *  @p [__first,__last), and false otherwise.
    */
    template<typename _InputIterator, typename _Predicate>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
--- 408,415 ----
     *  @param  __pred    A predicate.
     *  @return  True if the check is true, false otherwise.
     *
!    *  Returns true if `__pred` is true for each element in the range
!    *  `[__first, __last)`, and false otherwise.
    */
    template<typename _InputIterator, typename _Predicate>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 421,428 ****
     *  @param  __pred    A predicate.
     *  @return  True if the check is true, false otherwise.
     *
!    *  Returns true if @p __pred is false for each element in the range
!    *  @p [__first,__last), and false otherwise.
    */
    template<typename _InputIterator, typename _Predicate>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
--- 426,433 ----
     *  @param  __pred    A predicate.
     *  @return  True if the check is true, false otherwise.
     *
!    *  Returns true if `__pred` is false for each element in the range
!    *  `[__first, __last)`, and false otherwise.
    */
    template<typename _InputIterator, typename _Predicate>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 439,446 ****
     *  @param  __pred    A predicate.
     *  @return  True if the check is true, false otherwise.
     *
!    *  Returns true if an element exists in the range @p
!    *  [__first,__last) such that @p __pred is true, and false
     *  otherwise.
    */
    template<typename _InputIterator, typename _Predicate>
--- 444,451 ----
     *  @param  __pred    A predicate.
     *  @return  True if the check is true, false otherwise.
     *
!    *  Returns true if an element exists in the range
!    *  `[__first, __last)` such that `__pred` is true, and false
     *  otherwise.
    */
    template<typename _InputIterator, typename _Predicate>
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 456,463 ****
     *  @param  __first  An input iterator.
     *  @param  __last   An input iterator.
     *  @param  __pred   A predicate.
!    *  @return   The first iterator @c i in the range @p [__first,__last)
!    *  such that @p __pred(*i) is false, or @p __last if no such iterator exists.
    */
    template<typename _InputIterator, typename _Predicate>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
--- 461,468 ----
     *  @param  __first  An input iterator.
     *  @param  __last   An input iterator.
     *  @param  __pred   A predicate.
!    *  @return   The first iterator `i` in the range `[__first, __last)`
!    *  such that `__pred(*i)` is false, or `__last` if no such iterator exists.
    */
    template<typename _InputIterator, typename _Predicate>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 479,487 ****
     *  @param  __first  An input iterator.
     *  @param  __last   An input iterator.
     *  @param  __pred   A predicate.
!    *  @return  True if the range @p [__first,__last) is partitioned by @p
!    *  __pred, i.e. if all elements that satisfy @p __pred appear before those
!    *  that do not.
    */
    template<typename _InputIterator, typename _Predicate>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
--- 484,492 ----
     *  @param  __first  An input iterator.
     *  @param  __last   An input iterator.
     *  @param  __pred   A predicate.
!    *  @return  True if the range `[__first, __last)` is partitioned by
!    *  `__pred`, i.e. if all elements that satisfy `__pred` appear before
!    *  those that do not.
    */
    template<typename _InputIterator, typename _Predicate>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 502,509 ****
     *  @param  __first   An iterator.
     *  @param  __last    Another iterator.
     *  @param  __pred    A predicate.
!    *  @return  An iterator @p mid such that @p all_of(__first, mid, __pred)
!    *           and @p none_of(mid, __last, __pred) are both true.
    */
    template<typename _ForwardIterator, typename _Predicate>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
--- 507,514 ----
     *  @param  __first   An iterator.
     *  @param  __last    Another iterator.
     *  @param  __pred    A predicate.
!    *  @return  An iterator `mid` such that `all_of(__first, mid, __pred)`
!    *           and `none_of(mid, __last, __pred)` are both true.
    */
    template<typename _ForwardIterator, typename _Predicate>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 567,575 ****
     *  @param  __value   The value to be removed.
     *  @return   An iterator designating the end of the resulting sequence.
     *
!    *  Copies each element in the range @p [__first,__last) not equal
!    *  to @p __value to the range beginning at @p __result.
!    *  remove_copy() is stable, so the relative order of elements that
     *  are copied is unchanged.
    */
    template<typename _InputIterator, typename _OutputIterator, typename _Tp>
--- 572,580 ----
     *  @param  __value   The value to be removed.
     *  @return   An iterator designating the end of the resulting sequence.
     *
!    *  Copies each element in the range `[__first, __last)` not equal
!    *  to `__value` to the range beginning at `__result`.
!    *  `remove_copy` is stable, so the relative order of elements that
     *  are copied is unchanged.
    */
    template<typename _InputIterator, typename _OutputIterator, typename _Tp>
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 599,608 ****
     *  @param  __pred    A predicate.
     *  @return   An iterator designating the end of the resulting sequence.
     *
!    *  Copies each element in the range @p [__first,__last) for which
!    *  @p __pred returns false to the range beginning at @p __result.
     *
!    *  remove_copy_if() is stable, so the relative order of elements that are
     *  copied is unchanged.
    */
    template<typename _InputIterator, typename _OutputIterator,
--- 604,613 ----
     *  @param  __pred    A predicate.
     *  @return   An iterator designating the end of the resulting sequence.
     *
!    *  Copies each element in the range `[__first, __last)` for which
!    *  `__pred` returns false to the range beginning at `__result`.
     *
!    *  `remove_copy_if` is stable, so the relative order of elements that are
     *  copied is unchanged.
    */
    template<typename _InputIterator, typename _OutputIterator,
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 633,642 ****
     *  @param  __pred    A predicate.
     *  @return   An iterator designating the end of the resulting sequence.
     *
!    *  Copies each element in the range @p [__first,__last) for which
!    *  @p __pred returns true to the range beginning at @p __result.
     *
!    *  copy_if() is stable, so the relative order of elements that are
     *  copied is unchanged.
    */
    template<typename _InputIterator, typename _OutputIterator,
--- 638,647 ----
     *  @param  __pred    A predicate.
     *  @return   An iterator designating the end of the resulting sequence.
     *
!    *  Copies each element in the range `[__first, __last)` for which
!    *  `__pred` returns true to the range beginning at `__result`.
     *
!    *  `copy_if` is stable, so the relative order of elements that are
     *  copied is unchanged.
    */
    template<typename _InputIterator, typename _OutputIterator,
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 671,677 ****
     *  @param  __result An output iterator.
     *  @return  result+n.
     *
!    *  This inline function will boil down to a call to @c memmove whenever
     *  possible.  Failing that, if random access iterators are passed, then the
     *  loop count will be known (and therefore a candidate for compiler
     *  optimizations such as unrolling).
--- 676,682 ----
     *  @param  __result An output iterator.
     *  @return  result+n.
     *
!    *  This inline function will boil down to a call to `memmove` whenever
     *  possible.  Failing that, if random access iterators are passed, then the
     *  loop count will be known (and therefore a candidate for compiler
     *  optimizations such as unrolling).
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 709,717 ****
     *  @param  __pred    A predicate.
     *  @return   A pair designating the ends of the resulting sequences.
     *
!    *  Copies each element in the range @p [__first,__last) for which
!    *  @p __pred returns true to the range beginning at @p out_true
!    *  and each element for which @p __pred returns false to @p __out_false.
    */
    template<typename _InputIterator, typename _OutputIterator1,
  	   typename _OutputIterator2, typename _Predicate>
--- 714,722 ----
     *  @param  __pred    A predicate.
     *  @return   A pair designating the ends of the resulting sequences.
     *
!    *  Copies each element in the range `[__first, __last)` for which
!    *  `__pred` returns true to the range beginning at `__out_true`
!    *  and each element for which `__pred` returns false to `__out_false`.
    */
    template<typename _InputIterator, typename _OutputIterator1,
  	   typename _OutputIterator2, typename _Predicate>
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 755,767 ****
     *  @param  __value  The value to be removed.
     *  @return   An iterator designating the end of the resulting sequence.
     *
!    *  All elements equal to @p __value are removed from the range
!    *  @p [__first,__last).
     *
!    *  remove() is stable, so the relative order of elements that are
     *  not removed is unchanged.
     *
!    *  Elements between the end of the resulting sequence and @p __last
     *  are still present, but their value is unspecified.
    */
    template<typename _ForwardIterator, typename _Tp>
--- 760,772 ----
     *  @param  __value  The value to be removed.
     *  @return   An iterator designating the end of the resulting sequence.
     *
!    *  All elements equal to `__value` are removed from the range
!    *  `[__first, __last)`.
     *
!    *  `remove` is stable, so the relative order of elements that are
     *  not removed is unchanged.
     *
!    *  Elements between the end of the resulting sequence and `__last`
     *  are still present, but their value is unspecified.
    */
    template<typename _ForwardIterator, typename _Tp>
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 789,801 ****
     *  @param  __pred   A predicate.
     *  @return   An iterator designating the end of the resulting sequence.
     *
!    *  All elements for which @p __pred returns true are removed from the range
!    *  @p [__first,__last).
     *
!    *  remove_if() is stable, so the relative order of elements that are
     *  not removed is unchanged.
     *
!    *  Elements between the end of the resulting sequence and @p __last
     *  are still present, but their value is unspecified.
    */
    template<typename _ForwardIterator, typename _Predicate>
--- 794,806 ----
     *  @param  __pred   A predicate.
     *  @return   An iterator designating the end of the resulting sequence.
     *
!    *  All elements for which `__pred` returns true are removed from the range
!    *  `[__first, __last)`.
     *
!    *  `remove_if` is stable, so the relative order of elements that are
     *  not removed is unchanged.
     *
!    *  Elements between the end of the resulting sequence and `__last`
     *  are still present, but their value is unspecified.
    */
    template<typename _ForwardIterator, typename _Predicate>
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 861,869 ****
     *
     *  Removes all but the first element from each group of consecutive
     *  values that compare equal.
!    *  unique() is stable, so the relative order of elements that are
     *  not removed is unchanged.
!    *  Elements between the end of the resulting sequence and @p __last
     *  are still present, but their value is unspecified.
    */
    template<typename _ForwardIterator>
--- 866,874 ----
     *
     *  Removes all but the first element from each group of consecutive
     *  values that compare equal.
!    *  `unique` is stable, so the relative order of elements that are
     *  not removed is unchanged.
!    *  Elements between the end of the resulting sequence and `__last`
     *  are still present, but their value is unspecified.
    */
    template<typename _ForwardIterator>
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 890,899 ****
     *  @return  An iterator designating the end of the resulting sequence.
     *
     *  Removes all but the first element from each group of consecutive
!    *  values for which @p __binary_pred returns true.
!    *  unique() is stable, so the relative order of elements that are
     *  not removed is unchanged.
!    *  Elements between the end of the resulting sequence and @p __last
     *  are still present, but their value is unspecified.
    */
    template<typename _ForwardIterator, typename _BinaryPredicate>
--- 895,904 ----
     *  @return  An iterator designating the end of the resulting sequence.
     *
     *  Removes all but the first element from each group of consecutive
!    *  values for which `__binary_pred` returns true.
!    *  `unique` is stable, so the relative order of elements that are
     *  not removed is unchanged.
!    *  Elements between the end of the resulting sequence and `__last`
     *  are still present, but their value is unspecified.
    */
    template<typename _ForwardIterator, typename _BinaryPredicate>
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 913,918 ****
--- 918,925 ----
        return std::__unique(__first, __last, __binary_pred);
      }
  
+   /// @cond undocumented
+ 
    // _GLIBCXX_RESOLVE_LIB_DEFECTS
    // 4269. unique_copy passes arguments to its predicate backwards
  
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1043,1059 ****
  	}
      }
  
    /**
     *  @brief Reverse a sequence.
     *  @ingroup mutating_algorithms
     *  @param  __first  A bidirectional iterator.
     *  @param  __last   A bidirectional iterator.
-    *  @return   reverse() returns no value.
     *
!    *  Reverses the order of the elements in the range @p [__first,__last),
     *  so that the first element becomes the last etc.
!    *  For every @c i such that @p 0<=i<=(__last-__first)/2), @p reverse()
!    *  swaps @p *(__first+i) and @p *(__last-(i+1))
    */
    template<typename _BidirectionalIterator>
      _GLIBCXX20_CONSTEXPR
--- 1050,1067 ----
  	}
      }
  
+   /// @endcond
+ 
    /**
     *  @brief Reverse a sequence.
     *  @ingroup mutating_algorithms
     *  @param  __first  A bidirectional iterator.
     *  @param  __last   A bidirectional iterator.
     *
!    *  Reverses the order of the elements in the range `[__first, __last)`,
     *  so that the first element becomes the last etc.
!    *  For every `i` such that `0<=i<=(__last-__first)/2)`, reverse()
!    *  swaps `*(__first+i)` and `*(__last-(i+1))`.
    */
    template<typename _BidirectionalIterator>
      _GLIBCXX20_CONSTEXPR
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1075,1087 ****
     *  @param  __result  An output iterator.
     *  @return  An iterator designating the end of the resulting sequence.
     *
!    *  Copies the elements in the range @p [__first,__last) to the
!    *  range @p [__result,__result+(__last-__first)) such that the
!    *  order of the elements is reversed.  For every @c i such that @p
!    *  0<=i<=(__last-__first), @p reverse_copy() performs the
!    *  assignment @p *(__result+(__last-__first)-1-i) = *(__first+i).
!    *  The ranges @p [__first,__last) and @p
!    *  [__result,__result+(__last-__first)) must not overlap.
    */
    template<typename _BidirectionalIterator, typename _OutputIterator>
      _GLIBCXX20_CONSTEXPR
--- 1083,1095 ----
     *  @param  __result  An output iterator.
     *  @return  An iterator designating the end of the resulting sequence.
     *
!    *  Copies the elements in the range `[__first, __last)` to the
!    *  range `[__result, __result + (__last - __first))` such that the
!    *  order of the elements is reversed.  For every `i` such that
!    *  `0 <= i <= (__last - __first)`, `reverse_copy` performs the
!    *  assignment `*(__result + (__last - __first) - 1 - i) = *(__first + i)`.
!    *  The ranges `[__first, __last)` and
!    *  `[__result, __result + (__last - __first))` must not overlap.
    */
    template<typename _BidirectionalIterator, typename _OutputIterator>
      _GLIBCXX20_CONSTEXPR
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1105,1110 ****
--- 1113,1120 ----
        return __result;
      }
  
+   /// @cond undocumented
+ 
    /**
     *  This is a helper function for the rotate algorithm specialized on RAIs.
     *  It returns the greatest common divisor of two integer values.
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1122,1130 ****
--- 1132,1143 ----
  	}
        return __m;
      }
+   /// @endcond
  
  _GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(_V2)
  
+   /// @cond undocumented
+ 
    /// This is a helper function for the rotate algorithm.
    template<typename _ForwardIterator>
      _GLIBCXX20_CONSTEXPR
*************** _GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(_V2)
*** 1303,1308 ****
--- 1316,1323 ----
  	}
      }
  
+   /// @endcond
+ 
     // _GLIBCXX_RESOLVE_LIB_DEFECTS
     // DR 488. rotate throws away useful information
    /**
*************** _GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(_V2)
*** 1313,1330 ****
     *  @param  __last    A forward iterator.
     *  @return  first + (last - middle).
     *
!    *  Rotates the elements of the range @p [__first,__last) by
!    *  @p (__middle - __first) positions so that the element at @p __middle
!    *  is moved to @p __first, the element at @p __middle+1 is moved to
!    *  @p __first+1 and so on for each element in the range
!    *  @p [__first,__last).
     *
!    *  This effectively swaps the ranges @p [__first,__middle) and
!    *  @p [__middle,__last).
     *
     *  Performs
!    *   @p *(__first+(n+(__last-__middle))%(__last-__first))=*(__first+n)
!    *  for each @p n in the range @p [0,__last-__first).
    */
    template<typename _ForwardIterator>
      _GLIBCXX20_CONSTEXPR
--- 1328,1345 ----
     *  @param  __last    A forward iterator.
     *  @return  first + (last - middle).
     *
!    *  Rotates the elements of the range `[__first, __last)` by
!    *  `(__middle - __first)` positions so that the element at `__middle`
!    *  is moved to `__first`, the element at `__middle+1` is moved to
!    *  `__first+1` and so on for each element in the range
!    *  `[__first, __last)`.
     *
!    *  This effectively swaps the ranges `[__first, __middle)` and
!    *  `[__middle, __last)`.
     *
     *  Performs
!    *  `*(__first+(n+(__last - __middle)) % (__last - __first)) = *(__first+n)`
!    *  for each `n` in the range `[0, __last - __first)`.
    */
    template<typename _ForwardIterator>
      _GLIBCXX20_CONSTEXPR
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 1353,1368 ****
     *  @param  __result  An output iterator.
     *  @return   An iterator designating the end of the resulting sequence.
     *
!    *  Copies the elements of the range @p [__first,__last) to the
!    *  range beginning at @result, rotating the copied elements by
!    *  @p (__middle-__first) positions so that the element at @p __middle
!    *  is moved to @p __result, the element at @p __middle+1 is moved
!    *  to @p __result+1 and so on for each element in the range @p
!    *  [__first,__last).
     *
     *  Performs
!    *  @p *(__result+(n+(__last-__middle))%(__last-__first))=*(__first+n)
!    *  for each @p n in the range @p [0,__last-__first).
    */
    template<typename _ForwardIterator, typename _OutputIterator>
      _GLIBCXX20_CONSTEXPR
--- 1368,1383 ----
     *  @param  __result  An output iterator.
     *  @return   An iterator designating the end of the resulting sequence.
     *
!    *  Copies the elements of the range `[__first, __last)` to the
!    *  range beginning at `result`, rotating the copied elements by
!    *  `(__middle-__first)` positions so that the element at `__middle`
!    *  is moved to `__result`, the element at `__middle+1` is moved
!    *  to `__result+1` and so on for each element in the range
!    *  `[__first, __last)`.
     *
     *  Performs
!    *  `*(__result+(n+(__last - __middle)) % (__last - __first)) = *(__first+n)`
!    *  for each `n` in the range `[0, __last - __first)`.
    */
    template<typename _ForwardIterator, typename _OutputIterator>
      _GLIBCXX20_CONSTEXPR
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 1381,1386 ****
--- 1396,1403 ----
  		       std::copy(__middle, __last, __result));
      }
  
+   /// @cond undocumented
+ 
    /// This is a helper function...
    template<typename _ForwardIterator, typename _Predicate>
      _GLIBCXX20_CONSTEXPR
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 1435,1444 ****
--- 1452,1464 ----
  	  ++__first;
  	}
      }
+   /// @endcond
  
  #if _GLIBCXX_HOSTED
    // partition
  
+   /// @cond undocumented
+ 
    /// This is a helper function...
    /// Requires __first != __last and !__pred(*__first)
    /// and __len == distance(__first, __last).
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 1545,1550 ****
--- 1565,1571 ----
  					 __buf.begin(),
  					 _DistanceType(__buf.size()));
      }
+   /// @endcond
  
    /**
     *  @brief Move elements for which a predicate is true to the beginning
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 1552,1567 ****
     *  @ingroup mutating_algorithms
     *  @param  __first   A forward iterator.
     *  @param  __last    A forward iterator.
!    *  @param  __pred    A predicate functor.
!    *  @return  An iterator @p middle such that @p __pred(i) is true for each
!    *  iterator @p i in the range @p [first,middle) and false for each @p i
!    *  in the range @p [middle,last).
     *
!    *  Performs the same function as @p partition() with the additional
     *  guarantee that the relative ordering of elements in each group is
!    *  preserved, so any two elements @p x and @p y in the range
!    *  @p [__first,__last) such that @p __pred(x)==__pred(y) will have the same
!    *  relative ordering after calling @p stable_partition().
    */
    template<typename _ForwardIterator, typename _Predicate>
      _GLIBCXX26_CONSTEXPR
--- 1573,1588 ----
     *  @ingroup mutating_algorithms
     *  @param  __first   A forward iterator.
     *  @param  __last    A forward iterator.
!    *  @param  __pred    A predicate function object.
!    *  @return  An iterator `middle` such that `__pred(i)` is true for each
!    *  iterator `i` in the range `[__first, middle)` and false for each `i`
!    *  in the range `[middle, __last)`.
     *
!    *  Performs the same function as `partition` with the additional
     *  guarantee that the relative ordering of elements in each group is
!    *  preserved, so any two elements `x` and `y` in the range
!    *  `[__first, __last)` such that `__pred(x) == __pred(y)` will have the
!    *  same relative ordering after calling stable_partition().
    */
    template<typename _ForwardIterator, typename _Predicate>
      _GLIBCXX26_CONSTEXPR
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 1694,1700 ****
     *  @param  __last    Another input iterator.
     *  @param  __result_first   A random-access iterator.
     *  @param  __result_last    Another random-access iterator.
!    *  @param  __comp    A comparison functor.
     *  @return   An iterator indicating the end of the resulting sequence.
     *
     *  Copies and sorts the smallest `N` values from the range
--- 1715,1721 ----
     *  @param  __last    Another input iterator.
     *  @param  __result_first   A random-access iterator.
     *  @param  __result_last    Another random-access iterator.
!    *  @param  __comp    A comparison function object.
     *  @return   An iterator indicating the end of the resulting sequence.
     *
     *  Copies and sorts the smallest `N` values from the range
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 1960,1968 ****
     *  @param  __first   An iterator to the start of a sorted range.
     *  @param  __last    A past-the-end iterator for the sorted range.
     *  @param  __val     The search term.
!    *  @param  __comp    A functor to use for comparisons.
     *  @return An iterator pointing to the first element _not less than_
!    *           `__val`, or `end()` if every element is less than `__val`.
     *  @ingroup binary_search_algorithms
     *
     *  The comparison function should have the same effects on ordering as
--- 1981,1989 ----
     *  @param  __first   An iterator to the start of a sorted range.
     *  @param  __last    A past-the-end iterator for the sorted range.
     *  @param  __val     The search term.
!    *  @param  __comp    A function object to use for comparisons.
     *  @return An iterator pointing to the first element _not less than_
!    *           `__val`, or `__last` if every element is less than `__val`.
     *  @ingroup binary_search_algorithms
     *
     *  The comparison function should have the same effects on ordering as
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 1984,1989 ****
--- 2005,2012 ----
        return std::__lower_bound(__first, __last, __val, __comp);
      }
  
+   /// @cond undocumented
+ 
    template<typename _ForwardIterator, typename _Tp, typename _Compare>
      _GLIBCXX20_CONSTEXPR
      _ForwardIterator
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 2011,2026 ****
  	}
        return __first;
      }
  
    /**
!    *  @brief Finds the last position in which @p __val could be inserted
     *         without changing the ordering.
     *  @ingroup binary_search_algorithms
     *  @param  __first   An iterator.
     *  @param  __last    Another iterator.
     *  @param  __val     The search term.
!    *  @return  An iterator pointing to the first element greater than @p __val,
!    *           or end() if no elements are greater than @p __val.
     *  @ingroup binary_search_algorithms
    */
    template<typename _ForwardIterator, typename _Tp>
--- 2034,2050 ----
  	}
        return __first;
      }
+   /// @endcond
  
    /**
!    *  @brief Finds the last position in which `__val` could be inserted
     *         without changing the ordering.
     *  @ingroup binary_search_algorithms
     *  @param  __first   An iterator.
     *  @param  __last    Another iterator.
     *  @param  __val     The search term.
!    *  @return  An iterator pointing to the first element greater than `__val`,
!    *           or `__last` if no elements are greater than `__val`.
     *  @ingroup binary_search_algorithms
    */
    template<typename _ForwardIterator, typename _Tp>
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 2040,2054 ****
      }
  
    /**
!    *  @brief Finds the last position in which @p __val could be inserted
     *         without changing the ordering.
     *  @ingroup binary_search_algorithms
     *  @param  __first   An iterator.
     *  @param  __last    Another iterator.
     *  @param  __val     The search term.
!    *  @param  __comp    A functor to use for comparisons.
!    *  @return  An iterator pointing to the first element greater than @p __val,
!    *           or end() if no elements are greater than @p __val.
     *  @ingroup binary_search_algorithms
     *
     *  The comparison function should have the same effects on ordering as
--- 2064,2078 ----
      }
  
    /**
!    *  @brief Finds the last position in which `__val` could be inserted
     *         without changing the ordering.
     *  @ingroup binary_search_algorithms
     *  @param  __first   An iterator.
     *  @param  __last    Another iterator.
     *  @param  __val     The search term.
!    *  @param  __comp    A function object to use for comparisons.
!    *  @return  An iterator pointing to the first element greater than `__val`,
!    *           or `__last` if no elements are greater than `__val`.
     *  @ingroup binary_search_algorithms
     *
     *  The comparison function should have the same effects on ordering as
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 2070,2075 ****
--- 2094,2100 ----
        return std::__upper_bound(__first, __last, __val, __comp);
      }
  
+   /// @cond undocumented
    template<typename _ForwardIterator, typename _Tp, typename _Compare>
      _GLIBCXX20_CONSTEXPR
      pair<_ForwardIterator, _ForwardIterator>
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 2106,2114 ****
  	}
        return pair<_ForwardIterator, _ForwardIterator>(__first, __first);
      }
  
    /**
!    *  @brief Finds the largest subrange in which @p __val could be inserted
     *         at any place in it without changing the ordering.
     *  @ingroup binary_search_algorithms
     *  @param  __first   An iterator.
--- 2131,2140 ----
  	}
        return pair<_ForwardIterator, _ForwardIterator>(__first, __first);
      }
+   /// @endcond
  
    /**
!    *  @brief Finds the largest subrange in which `__val` could be inserted
     *         at any place in it without changing the ordering.
     *  @ingroup binary_search_algorithms
     *  @param  __first   An iterator.
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 2118,2127 ****
     *  @ingroup binary_search_algorithms
     *
     *  This is equivalent to
!    *  @code
     *    std::make_pair(lower_bound(__first, __last, __val),
     *                   upper_bound(__first, __last, __val))
!    *  @endcode
     *  but does not actually call those functions.
    */
    template<typename _ForwardIterator, typename _Tp>
--- 2144,2153 ----
     *  @ingroup binary_search_algorithms
     *
     *  This is equivalent to
!    *  ```
     *    std::make_pair(lower_bound(__first, __last, __val),
     *                   upper_bound(__first, __last, __val))
!    *  ```
     *  but does not actually call those functions.
    */
    template<typename _ForwardIterator, typename _Tp>
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 2144,2155 ****
      }
  
    /**
!    *  @brief Finds the largest subrange in which @p __val could be inserted
     *         at any place in it without changing the ordering.
     *  @param  __first   An iterator.
     *  @param  __last    Another iterator.
     *  @param  __val     The search term.
!    *  @param  __comp    A functor to use for comparisons.
     *  @return  An pair of iterators defining the subrange.
     *  @ingroup binary_search_algorithms
     *
--- 2170,2181 ----
      }
  
    /**
!    *  @brief Finds the largest subrange in which `__val` could be inserted
     *         at any place in it without changing the ordering.
     *  @param  __first   An iterator.
     *  @param  __last    Another iterator.
     *  @param  __val     The search term.
!    *  @param  __comp    A function object to use for comparisons.
     *  @return  An pair of iterators defining the subrange.
     *  @ingroup binary_search_algorithms
     *
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 2186,2196 ****
     *  @param  __first   An iterator.
     *  @param  __last    Another iterator.
     *  @param  __val     The search term.
!    *  @return True if @p __val (or its equivalent) is in [@p
!    *  __first,@p __last ].
     *
!    *  Note that this does not actually return an iterator to @p __val.  For
!    *  that, use std::find or a container's specialized find member functions.
    */
    template<typename _ForwardIterator, typename _Tp>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
--- 2212,2221 ----
     *  @param  __first   An iterator.
     *  @param  __last    Another iterator.
     *  @param  __val     The search term.
!    *  @return True if `__val` (or its equivalent) is in `[__first, __last)`.
     *
!    *  Note that this does not actually return an iterator to `__val`.  For
!    *  that, use `std::find` or a container's specialized find member functions.
    */
    template<typename _ForwardIterator, typename _Tp>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 2216,2226 ****
     *  @param  __first   An iterator.
     *  @param  __last    Another iterator.
     *  @param  __val     The search term.
!    *  @param  __comp    A functor to use for comparisons.
!    *  @return  True if @p __val (or its equivalent) is in @p [__first,__last].
     *
!    *  Note that this does not actually return an iterator to @p __val.  For
!    *  that, use std::find or a container's specialized find member functions.
     *
     *  The comparison function should have the same effects on ordering as
     *  the function used for the initial sort.
--- 2241,2251 ----
     *  @param  __first   An iterator.
     *  @param  __last    Another iterator.
     *  @param  __val     The search term.
!    *  @param  __comp    A function object to use for comparisons.
!    *  @return  True if `__val` (or its equivalent) is in `[__first, __last)`.
     *
!    *  Note that this does not actually return an iterator to `__val`.  For
!    *  that, use `std::find` or a container's specialized find member functions.
     *
     *  The comparison function should have the same effects on ordering as
     *  the function used for the initial sort.
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 2247,2252 ****
--- 2272,2279 ----
  
    // merge
  
+   /// @cond undocumented
+ 
    /// This is a helper function for the __merge_adaptive routines.
    template<typename _InputIterator1, typename _InputIterator2,
  	   typename _OutputIterator, typename _Compare>
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 2524,2529 ****
--- 2551,2557 ----
  	(__first, __middle, __last, __len1, __len2, __comp);
  #endif
      }
+   /// @endcond
  
    /**
     *  @brief Merges two sorted ranges in place.
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 2532,2546 ****
     *  @param  __middle  Another iterator.
     *  @param  __last    Another iterator.
     *
!    *  Merges two sorted and consecutive ranges, [__first,__middle) and
!    *  [__middle,__last), and puts the result in [__first,__last).  The
     *  output will be sorted.  The sort is @e stable, that is, for
     *  equivalent elements in the two ranges, elements from the first
     *  range will always come before elements from the second.
     *
!    *  If enough additional memory is available, this takes (__last-__first)-1
     *  comparisons.  Otherwise an NlogN algorithm is used, where N is
!    *  distance(__first,__last).
    */
    template<typename _BidirectionalIterator>
      _GLIBCXX26_CONSTEXPR
--- 2560,2574 ----
     *  @param  __middle  Another iterator.
     *  @param  __last    Another iterator.
     *
!    *  Merges two sorted and consecutive ranges, `[__first, __middle)` and
!    *  `[__middle, __last)`, and puts the result in `[__first, __last)`.  The
     *  output will be sorted.  The sort is @e stable, that is, for
     *  equivalent elements in the two ranges, elements from the first
     *  range will always come before elements from the second.
     *
!    *  If enough additional memory is available, this takes `(__last-__first)-1`
     *  comparisons.  Otherwise an NlogN algorithm is used, where N is
!    *  `distance(__first,__last)`.
    */
    template<typename _BidirectionalIterator>
      _GLIBCXX26_CONSTEXPR
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 2568,2574 ****
     *  @param  __first   An iterator.
     *  @param  __middle  Another iterator.
     *  @param  __last    Another iterator.
!    *  @param  __comp    A functor to use for comparisons.
     *
     *  Merges two sorted and consecutive ranges, [__first,__middle) and
     *  [middle,last), and puts the result in [__first,__last).  The output will
--- 2596,2602 ----
     *  @param  __first   An iterator.
     *  @param  __middle  Another iterator.
     *  @param  __last    Another iterator.
!    *  @param  __comp    A function object to use for comparisons.
     *
     *  Merges two sorted and consecutive ranges, [__first,__middle) and
     *  [middle,last), and puts the result in [__first,__last).  The output will
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 2576,2584 ****
     *  elements in the two ranges, elements from the first range will always
     *  come before elements from the second.
     *
!    *  If enough additional memory is available, this takes (__last-__first)-1
     *  comparisons.  Otherwise an NlogN algorithm is used, where N is
!    *  distance(__first,__last).
     *
     *  The comparison function should have the same effects on ordering as
     *  the function used for the initial sort.
--- 2604,2612 ----
     *  elements in the two ranges, elements from the first range will always
     *  come before elements from the second.
     *
!    *  If enough additional memory is available, this takes `(__last-__first)-1`
     *  comparisons.  Otherwise an NlogN algorithm is used, where N is
!    *  `distance(__first,__last)`.
     *
     *  The comparison function should have the same effects on ordering as
     *  the function used for the initial sort.
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 2604,2609 ****
--- 2632,2638 ----
        std::__inplace_merge(__first, __middle, __last, __comp);
      }
  
+   /// @cond undocumented
  
    /// This is a helper function for the __merge_sort_loop routines.
    template<typename _InputIterator, typename _OutputIterator,
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 2789,2794 ****
--- 2818,2824 ----
  
        return __first2 == __last2;
      }
+   /// @endcond
  
    /**
     *  @brief Determines whether all elements of a sequence exists in a range.
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 2796,2811 ****
     *  @param  __last1   End of search range.
     *  @param  __first2  Start of sequence
     *  @param  __last2   End of sequence.
!    *  @return  True if each element in [__first2,__last2) is contained in order
!    *  within [__first1,__last1).  False otherwise.
     *  @ingroup set_algorithms
     *
!    *  This operation expects both [__first1,__last1) and
!    *  [__first2,__last2) to be sorted.  Searches for the presence of
!    *  each element in [__first2,__last2) within [__first1,__last1).
     *  The iterators over each range only move forward, so this is a
!    *  linear algorithm.  If an element in [__first2,__last2) is not
!    *  found before the search iterator reaches @p __last2, false is
     *  returned.
    */
    template<typename _InputIterator1, typename _InputIterator2>
--- 2826,2841 ----
     *  @param  __last1   End of search range.
     *  @param  __first2  Start of sequence
     *  @param  __last2   End of sequence.
!    *  @return  True if each element in `[__first2, __last2)` is contained in
!    *           order within `[__first1, __last1)`.  False otherwise.
     *  @ingroup set_algorithms
     *
!    *  This operation expects both `[__first1, __last1)` and
!    *  `[__first2, __last2)` to be sorted.  Searches for the presence of
!    *  each element in `[__first2, __last2)` within `[__first1, __last1)`.
     *  The iterators over each range only move forward, so this is a
!    *  linear algorithm.  If an element in `[__first2, __last2)` is not
!    *  found before the search iterator reaches `__last2`, false is
     *  returned.
    */
    template<typename _InputIterator1, typename _InputIterator2>
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 2841,2857 ****
     *  @param  __first2  Start of sequence
     *  @param  __last2   End of sequence.
     *  @param  __comp    Comparison function to use.
!    *  @return True if each element in [__first2,__last2) is contained
!    *  in order within [__first1,__last1) according to comp.  False
     *  otherwise.  @ingroup set_algorithms
     *
!    *  This operation expects both [__first1,__last1) and
!    *  [__first2,__last2) to be sorted.  Searches for the presence of
!    *  each element in [__first2,__last2) within [__first1,__last1),
     *  using comp to decide.  The iterators over each range only move
     *  forward, so this is a linear algorithm.  If an element in
!    *  [__first2,__last2) is not found before the search iterator
!    *  reaches @p __last2, false is returned.
    */
    template<typename _InputIterator1, typename _InputIterator2,
  	   typename _Compare>
--- 2871,2887 ----
     *  @param  __first2  Start of sequence
     *  @param  __last2   End of sequence.
     *  @param  __comp    Comparison function to use.
!    *  @return True if each element in `[__first2, __last2)` is contained
!    *  in order within `[__first1, __last1)` according to comp.  False
     *  otherwise.  @ingroup set_algorithms
     *
!    *  This operation expects both `[__first1, __last1)` and
!    *  `[__first2, __last2)` to be sorted.  Searches for the presence of
!    *  each element in `[__first2, __last2)` within `[__first1, __last1)`,
     *  using comp to decide.  The iterators over each range only move
     *  forward, so this is a linear algorithm.  If an element in
!    *  `[__first2, __last2)` is not found before the search iterator
!    *  reaches `__last2`, false is returned.
    */
    template<typename _InputIterator1, typename _InputIterator2,
  	   typename _Compare>
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 2888,2893 ****
--- 2918,2924 ----
    // min_element
    // max_element
  
+   /// @cond undocumented
    template<typename _BidirectionalIterator, typename _Compare>
      _GLIBCXX20_CONSTEXPR
      bool
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 2925,2933 ****
  	    }
  	}
      }
  
    /**
!    *  @brief  Permute range into the next @e dictionary ordering.
     *  @ingroup sorting_algorithms
     *  @param  __first  Start of range.
     *  @param  __last   End of range.
--- 2956,2965 ----
  	    }
  	}
      }
+   /// @endcond
  
    /**
!    *  @brief  Permute range into the next dictionary ordering.
     *  @ingroup sorting_algorithms
     *  @param  __first  Start of range.
     *  @param  __last   End of range.
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 2956,2971 ****
      }
  
    /**
!    *  @brief  Permute range into the next @e dictionary ordering using
!    *          comparison functor.
     *  @ingroup sorting_algorithms
     *  @param  __first  Start of range.
     *  @param  __last   End of range.
!    *  @param  __comp   A comparison functor.
     *  @return  False if wrapped to first permutation, true otherwise.
     *
!    *  Treats all permutations of the range [__first,__last) as a set of
!    *  @e dictionary sorted sequences ordered by @p __comp.  Permutes the current
     *  sequence into the next one of this set.  Returns true if there are more
     *  sequences to generate.  If the sequence is the largest of the set, the
     *  smallest is generated and false returned.
--- 2988,3003 ----
      }
  
    /**
!    *  @brief  Permute range into the next dictionary ordering using a
!    *          comparison function.
     *  @ingroup sorting_algorithms
     *  @param  __first  Start of range.
     *  @param  __last   End of range.
!    *  @param  __comp   A comparison function object.
     *  @return  False if wrapped to first permutation, true otherwise.
     *
!    *  Treats all permutations of the range `[__first, __last)` as a set of
!    *  @e dictionary sorted sequences ordered by `__comp`.  Permutes the current
     *  sequence into the next one of this set.  Returns true if there are more
     *  sequences to generate.  If the sequence is the largest of the set, the
     *  smallest is generated and false returned.
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 2988,2993 ****
--- 3020,3026 ----
        return std::__next_permutation(__first, __last, __comp);
      }
  
+   /// @cond undocumented
    template<typename _BidirectionalIterator, typename _Compare>
      _GLIBCXX20_CONSTEXPR
      bool
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 3025,3030 ****
--- 3058,3064 ----
  	    }
  	}
      }
+   /// @endcond
  
    /**
     *  @brief  Permute range into the previous @e dictionary ordering.
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 3057,3068 ****
      }
  
    /**
!    *  @brief  Permute range into the previous @e dictionary ordering using
!    *          comparison functor.
     *  @ingroup sorting_algorithms
     *  @param  __first  Start of range.
     *  @param  __last   End of range.
!    *  @param  __comp   A comparison functor.
     *  @return  False if wrapped to last permutation, true otherwise.
     *
     *  Treats all permutations of the range [__first,__last) as a set of
--- 3091,3102 ----
      }
  
    /**
!    *  @brief  Permute range into the previous @e dictionary ordering using a
!    *          comparison function.
     *  @ingroup sorting_algorithms
     *  @param  __first  Start of range.
     *  @param  __last   End of range.
!    *  @param  __comp   A comparison function object.
     *  @return  False if wrapped to last permutation, true otherwise.
     *
     *  Treats all permutations of the range [__first,__last) as a set of
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 3092,3097 ****
--- 3126,3132 ----
    // replace
    // replace_if
  
+   /// @cond undocumented
    template<typename _InputIterator, typename _OutputIterator,
  	   typename _Predicate, typename _Tp>
      _GLIBCXX20_CONSTEXPR
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 3107,3112 ****
--- 3142,3148 ----
  	  *__result = *__first;
        return __result;
      }
+   /// @endcond
  
    /**
     *  @brief Copy a sequence, replacing each element of one value with another
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 3193,3203 ****
  
    /**
     *  @brief  Determines whether the elements of a sequence are sorted
!    *          according to a comparison functor.
     *  @ingroup sorting_algorithms
     *  @param  __first   An iterator.
     *  @param  __last    Another iterator.
!    *  @param  __comp    A comparison functor.
     *  @return  True if the elements are sorted, false otherwise.
    */
    template<typename _ForwardIterator, typename _Compare>
--- 3229,3239 ----
  
    /**
     *  @brief  Determines whether the elements of a sequence are sorted
!    *          according to a comparison function.
     *  @ingroup sorting_algorithms
     *  @param  __first   An iterator.
     *  @param  __last    Another iterator.
!    *  @param  __comp    A comparison function object.
     *  @return  True if the elements are sorted, false otherwise.
    */
    template<typename _ForwardIterator, typename _Compare>
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 3207,3212 ****
--- 3243,3249 ----
  	      _Compare __comp)
      { return std::is_sorted_until(__first, __last, __comp) == __last; }
  
+   /// @cond undocumented
    template<typename _ForwardIterator, typename _Compare>
      _GLIBCXX20_CONSTEXPR
      _ForwardIterator
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 3222,3227 ****
--- 3259,3265 ----
  	  return __next;
        return __next;
      }
+   /// @endcond
  
    /**
     *  @brief  Determines the end of a sorted sequence.
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 3248,3258 ****
      }
  
    /**
!    *  @brief  Determines the end of a sorted sequence using comparison functor.
     *  @ingroup sorting_algorithms
     *  @param  __first   An iterator.
     *  @param  __last    Another iterator.
!    *  @param  __comp    A comparison functor.
     *  @return  An iterator pointing to the last iterator i in [__first, __last)
     *           for which the range [__first, i) is sorted.
    */
--- 3286,3296 ----
      }
  
    /**
!    *  @brief  Determines the end of a sorted sequence using comparison function.
     *  @ingroup sorting_algorithms
     *  @param  __first   An iterator.
     *  @param  __last    Another iterator.
!    *  @param  __comp    A comparison function object.
     *  @return  An iterator pointing to the last iterator i in [__first, __last)
     *           for which the range [__first, i) is sorted.
    */
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 3298,3304 ****
     *  @ingroup sorting_algorithms
     *  @param  __a  A thing of arbitrary type.
     *  @param  __b  Another thing of arbitrary type.
!    *  @param  __comp  A @link comparison_functors comparison functor @endlink.
     *  @return A pair(__b, __a) if __b is smaller than __a, pair(__a,
     *  __b) otherwise.
    */
--- 3336,3342 ----
     *  @ingroup sorting_algorithms
     *  @param  __a  A thing of arbitrary type.
     *  @param  __b  Another thing of arbitrary type.
!    *  @param  __comp  A @link comparison_functors comparison function @endlink.
     *  @return A pair(__b, __a) if __b is smaller than __a, pair(__a,
     *  __b) otherwise.
    */
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 3311,3316 ****
--- 3349,3355 ----
  			      : pair<const _Tp&, const _Tp&>(__a, __b);
      }
  
+   /// @cond undocumented
    template<typename _ForwardIterator, typename _Compare>
      _GLIBCXX14_CONSTEXPR
      pair<_ForwardIterator, _ForwardIterator>
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 3370,3375 ****
--- 3409,3415 ----
  
        return std::make_pair(__min, __max);
      }
+   /// @endcond
  
    /**
     *  @brief  Return a pair of iterators pointing to the minimum and maximum
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 3403,3409 ****
     *  @ingroup sorting_algorithms
     *  @param  __first  Start of range.
     *  @param  __last   End of range.
!    *  @param  __comp   Comparison functor.
     *  @return  make_pair(m, M), where m is the first iterator i in
     *           [__first, __last) such that no other element in the range is
     *           smaller, and where M is the last iterator i in [__first, __last)
--- 3443,3449 ----
     *  @ingroup sorting_algorithms
     *  @param  __first  Start of range.
     *  @param  __last   End of range.
!    *  @param  __comp   Comparison function object.
     *  @return  make_pair(m, M), where m is the first iterator i in
     *           [__first, __last) such that no other element in the range is
     *           smaller, and where M is the last iterator i in [__first, __last)
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 3482,3487 ****
--- 3522,3528 ----
      }
  
  #if __glibcxx_robust_nonmodifying_seq_ops // C++ >= 14
+   /// @cond undocumented
  #pragma GCC diagnostic push
  #pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr
    template<typename _ForwardIterator1, typename _ForwardIterator2,
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 3540,3545 ****
--- 3581,3587 ----
        return true;
      }
  #pragma GCC diagnostic pop
+   /// @endcond
  
    /**
     *  @brief  Checks whether a permutation of the second sequence is equal
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 3623,3629 ****
     *  @param  __val   A value of arbitrary type.
     *  @param  __lo    A lower limit of arbitrary type.
     *  @param  __hi    An upper limit of arbitrary type.
!    *  @param  __comp  A comparison functor.
     *  @retval `__lo` if `__comp(__val, __lo)`
     *  @retval `__hi` if `__comp(__hi, __val)`
     *  @retval `__val` otherwise.
--- 3665,3671 ----
     *  @param  __val   A value of arbitrary type.
     *  @param  __lo    A lower limit of arbitrary type.
     *  @param  __hi    An upper limit of arbitrary type.
!    *  @param  __comp  A comparison function object.
     *  @retval `__lo` if `__comp(__val, __lo)`
     *  @retval `__hi` if `__comp(__hi, __val)`
     *  @retval `__val` otherwise.
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 3675,3683 ****
     *  @ingroup mutating_algorithms
     *  @param  __first   A forward iterator.
     *  @param  __last    A forward iterator.
!    *  @param  __g       A UniformRandomNumberGenerator (26.5.1.3).
     *
!    *  Reorders the elements in the range @p [__first,__last) using @p __g to
     *  provide random numbers.
    */
    template<typename _RandomAccessIterator,
--- 3717,3725 ----
     *  @ingroup mutating_algorithms
     *  @param  __first   A forward iterator.
     *  @param  __last    A forward iterator.
!    *  @param  __g       A UniformRandomNumberGenerator (C++11 26.5.1.3).
     *
!    *  Reorders the elements in the range `[__first, __last)` using `__g` to
     *  provide random numbers.
    */
    template<typename _RandomAccessIterator,
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 3757,3767 ****
     *  @param  __first  An input iterator.
     *  @param  __last   An input iterator.
     *  @param  __f      A unary function object.
!    *  @return   @p __f
     *
!    *  Applies the function object @p __f to each element in the range
!    *  @p [first,last).  @p __f must not modify the order of the sequence.
!    *  If @p __f has a return value it is ignored.
    */
    template<typename _InputIterator, typename _Function>
      _GLIBCXX20_CONSTEXPR
--- 3799,3809 ----
     *  @param  __first  An input iterator.
     *  @param  __last   An input iterator.
     *  @param  __f      A unary function object.
!    *  @return   `__f`
     *
!    *  Applies the function object `__f` to each element in the range
!    *  `[__first, __last)`.  `__f` must not modify the order of the sequence.
!    *  If `__f` has a return value it is ignored.
    */
    template<typename _InputIterator, typename _Function>
      _GLIBCXX20_CONSTEXPR
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 3823,3830 ****
     *  @param  __first  An input iterator.
     *  @param  __last   An input iterator.
     *  @param  __val    The value to find.
!    *  @return   The first iterator @c i in the range @p [__first,__last)
!    *  such that @c *i == @p __val, or @p __last if no such iterator exists.
    */
    template<typename _InputIterator, typename _Tp>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
--- 3865,3872 ----
     *  @param  __first  An input iterator.
     *  @param  __last   An input iterator.
     *  @param  __val    The value to find.
!    *  @return   The first iterator `i` in the range `[__first, __last)`
!    *  such that `*i == __val`, or `__last` if no such iterator exists.
    */
    template<typename _InputIterator, typename _Tp>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 3881,3888 ****
     *  @param  __first  An input iterator.
     *  @param  __last   An input iterator.
     *  @param  __pred   A predicate.
!    *  @return   The first iterator @c i in the range @p [__first,__last)
!    *  such that @p __pred(*i) is true, or @p __last if no such iterator exists.
    */
    template<typename _InputIterator, typename _Predicate>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
--- 3923,3930 ----
     *  @param  __first  An input iterator.
     *  @param  __last   An input iterator.
     *  @param  __pred   A predicate.
!    *  @return   The first iterator `i` in the range `[__first, __last)`
!    *  such that `__pred(*i)` is true, or `__last` if no such iterator exists.
    */
    template<typename _InputIterator, typename _Predicate>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 3906,3919 ****
     *  @param  __last1   End of range to search.
     *  @param  __first2  Start of match candidates.
     *  @param  __last2   End of match candidates.
!    *  @return   The first iterator @c i in the range
!    *  @p [__first1,__last1) such that @c *i == @p *(i2) such that i2 is an
!    *  iterator in [__first2,__last2), or @p __last1 if no such iterator exists.
     *
!    *  Searches the range @p [__first1,__last1) for an element that is
!    *  equal to some element in the range [__first2,__last2).  If
!    *  found, returns an iterator in the range [__first1,__last1),
!    *  otherwise returns @p __last1.
    */
    template<typename _InputIterator, typename _ForwardIterator>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
--- 3948,3962 ----
     *  @param  __last1   End of range to search.
     *  @param  __first2  Start of match candidates.
     *  @param  __last2   End of match candidates.
!    *  @return   The first iterator `i` in the range
!    *  `[__first1, __last1)` such that `*i == *(i2)` such that `i2` is an
!    *  iterator in `[__first2, __last2)`, or `__last1` if no such iterator
!    *  exists.
     *
!    *  Searches the range `[__first1, __last1)` for an element that is
!    *  equal to some element in the range `[__first2, __last2)`.  If
!    *  found, returns an iterator in the range `[__first1, __last1)`,
!    *  otherwise returns `__last1`.
    */
    template<typename _InputIterator, typename _ForwardIterator>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 3945,3960 ****
     *  @param  __first2  Start of match candidates.
     *  @param  __last2   End of match candidates.
     *  @param  __comp    Predicate to use.
!    *  @return   The first iterator @c i in the range
!    *  @p [__first1,__last1) such that @c comp(*i, @p *(i2)) is true
!    *  and i2 is an iterator in [__first2,__last2), or @p __last1 if no
     *  such iterator exists.
     *
  
!    *  Searches the range @p [__first1,__last1) for an element that is
!    *  equal to some element in the range [__first2,__last2).  If
!    *  found, returns an iterator in the range [__first1,__last1),
!    *  otherwise returns @p __last1.
    */
    template<typename _InputIterator, typename _ForwardIterator,
  	   typename _BinaryPredicate>
--- 3988,4003 ----
     *  @param  __first2  Start of match candidates.
     *  @param  __last2   End of match candidates.
     *  @param  __comp    Predicate to use.
!    *  @return   The first iterator `i` in the range
!    *  `[__first1, __last1)` such that `comp(*i, *(i2))` is true
!    *  and `i2` is an iterator in `[__first2, __last2)`, or `__last1` if no
     *  such iterator exists.
     *
  
!    *  Searches the range `[__first1, __last1)` for an element that is
!    *  equal to some element in the range `[__first2, __last2)`.  If
!    *  found, returns an iterator in the range `[__first1, __last1)`,
!    *  otherwise returns `__last1`.
    */
    template<typename _InputIterator, typename _ForwardIterator,
  	   typename _BinaryPredicate>
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 3985,3993 ****
     *  @ingroup non_mutating_algorithms
     *  @param  __first  A forward iterator.
     *  @param  __last   A forward iterator.
!    *  @return   The first iterator @c i such that @c i and @c i+1 are both
!    *  valid iterators in @p [__first,__last) and such that @c *i == @c *(i+1),
!    *  or @p __last if no such iterator exists.
    */
    template<typename _ForwardIterator>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
--- 4028,4036 ----
     *  @ingroup non_mutating_algorithms
     *  @param  __first  A forward iterator.
     *  @param  __last   A forward iterator.
!    *  @return  The first iterator `i` such that `i` and `i`+1 are both
!    *           valid iterators in `[__first, __last)` and such that
!    *           `*i == *(i+1)`, or `__last` if no such iterator exists.
    */
    template<typename _ForwardIterator>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 4010,4019 ****
     *  @param  __first         A forward iterator.
     *  @param  __last          A forward iterator.
     *  @param  __binary_pred   A binary predicate.
!    *  @return   The first iterator @c i such that @c i and @c i+1 are both
!    *  valid iterators in @p [__first,__last) and such that
!    *  @p __binary_pred(*i,*(i+1)) is true, or @p __last if no such iterator
!    *  exists.
    */
    template<typename _ForwardIterator, typename _BinaryPredicate>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
--- 4053,4062 ----
     *  @param  __first         A forward iterator.
     *  @param  __last          A forward iterator.
     *  @param  __binary_pred   A binary predicate.
!    *  @return  The first iterator `i` such that `i` and `i`+1 are both
!    *           valid iterators in `[__first, __last)` and such that
!    *           `__binary_pred(*i,*(i+1))` is true, or `__last` if no such
!    *           iterator exists.
    */
    template<typename _ForwardIterator, typename _BinaryPredicate>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 4037,4044 ****
     *  @param  __first  An input iterator.
     *  @param  __last   An input iterator.
     *  @param  __value  The value to be counted.
!    *  @return   The number of iterators @c i in the range @p [__first,__last)
!    *  for which @c *i == @p __value
    */
    template<typename _InputIterator, typename _Tp>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
--- 4080,4087 ----
     *  @param  __first  An input iterator.
     *  @param  __last   An input iterator.
     *  @param  __value  The value to be counted.
!    *  @return  The number of iterators `i` in the range `[__first, __last)`
!    *           for which `*i == __value`
    */
    template<typename _InputIterator, typename _Tp>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 4061,4068 ****
     *  @param  __first  An input iterator.
     *  @param  __last   An input iterator.
     *  @param  __pred   A predicate.
!    *  @return   The number of iterators @c i in the range @p [__first,__last)
!    *  for which @p __pred(*i) is true.
    */
    template<typename _InputIterator, typename _Predicate>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
--- 4104,4111 ----
     *  @param  __first  An input iterator.
     *  @param  __last   An input iterator.
     *  @param  __pred   A predicate.
!    *  @return  The number of iterators `i` in the range `[__first, __last)`
!    *           for which `__pred(*i)` is true.
    */
    template<typename _InputIterator, typename _Predicate>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 4085,4108 ****
     *  @param  __last1   A forward iterator.
     *  @param  __first2  A forward iterator.
     *  @param  __last2   A forward iterator.
!    *  @return The first iterator @c i in the range @p
!    *  [__first1,__last1-(__last2-__first2)) such that @c *(i+N) == @p
!    *  *(__first2+N) for each @c N in the range @p
!    *  [0,__last2-__first2), or @p __last1 if no such iterator exists.
     *
!    *  Searches the range @p [__first1,__last1) for a sub-sequence that
!    *  compares equal value-by-value with the sequence given by @p
!    *  [__first2,__last2) and returns an iterator to the first element
!    *  of the sub-sequence, or @p __last1 if the sub-sequence is not
!    *  found.
     *
!    *  Because the sub-sequence must lie completely within the range @p
!    *  [__first1,__last1) it must start at a position less than @p
!    *  __last1-(__last2-__first2) where @p __last2-__first2 is the
     *  length of the sub-sequence.
     *
!    *  This means that the returned iterator @c i will be in the range
!    *  @p [__first1,__last1-(__last2-__first2))
    */
    template<typename _ForwardIterator1, typename _ForwardIterator2>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
--- 4128,4151 ----
     *  @param  __last1   A forward iterator.
     *  @param  __first2  A forward iterator.
     *  @param  __last2   A forward iterator.
!    *  @return The first iterator `i` in the range
!    *          `[__first1, __last1 - (__last2 - __first2))` such that
!    *          `*(i+N) == *(__first2+N)` for each `N` in the range
!    *          `[0, __last2 - __first2)`, or `__last1` if no such iterator
!    *          exists.
     *
!    *  Searches the range `[__first1, __last1)` for a sub-sequence that
!    *  compares equal value-by-value with the sequence given by
!    *  `[__first2, __last2)` and returns an iterator to the first element
!    *  of the sub-sequence, or `__last1` if the sub-sequence is not found.
     *
!    *  Because the sub-sequence must lie completely within the range
!    *  `[__first1, __last1)` it must start at a position less than
!    *  `__last1 - (__last2 - __first2)` where `__last2 - __first2` is the
     *  length of the sub-sequence.
     *
!    *  This means that the returned iterator `i` will be in the range
!    *  `[__first1, __last1 - (__last2 - __first2))`.
    */
    template<typename _ForwardIterator1, typename _ForwardIterator2>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 4130,4142 ****
     *  @param  __last   A forward iterator.
     *  @param  __count  The number of consecutive values.
     *  @param  __val    The value to find.
!    *  @return The first iterator @c i in the range @p
!    *  [__first,__last-__count) such that @c *(i+N) == @p __val for
!    *  each @c N in the range @p [0,__count), or @p __last if no such
!    *  iterator exists.
     *
!    *  Searches the range @p [__first,__last) for @p count consecutive elements
!    *  equal to @p __val.
    */
    template<typename _ForwardIterator, typename _Integer, typename _Tp>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
--- 4173,4184 ----
     *  @param  __last   A forward iterator.
     *  @param  __count  The number of consecutive values.
     *  @param  __val    The value to find.
!    *  @return The first iterator `i` in the range `[__first, __last - __count)`
!    *          such that `*(i+N) == __val` for each `N` in the range
!    *          `[0, __count)`, or `__last` if no such iterator exists.
     *
!    *  Searches the range `[__first, __last)` for `__count` consecutive
!    *  elements equal to `__val`.
    */
    template<typename _ForwardIterator, typename _Integer, typename _Tp>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 4164,4175 ****
     *  @param  __count        The number of consecutive values.
     *  @param  __val          The value to find.
     *  @param  __binary_pred  A binary predicate.
!    *  @return The first iterator @c i in the range @p
!    *  [__first,__last-__count) such that @p
!    *  __binary_pred(*(i+N),__val) is true for each @c N in the range
!    *  @p [0,__count), or @p __last if no such iterator exists.
     *
!    *  Searches the range @p [__first,__last) for @p __count
     *  consecutive elements for which the predicate returns true.
    */
    template<typename _ForwardIterator, typename _Integer, typename _Tp,
--- 4206,4216 ----
     *  @param  __count        The number of consecutive values.
     *  @param  __val          The value to find.
     *  @param  __binary_pred  A binary predicate.
!    *  @return The first iterator `i` in the range `[__first, __last - __count)`
!    *          such that `__binary_pred(*(i+N), __val)` is true for each `N` in
!    *          the range `[0, __count)`, or `__last` if no such iterator exists.
     *
!    *  Searches the range `[__first, __last)` for `__count`
     *  consecutive elements for which the predicate returns true.
    */
    template<typename _ForwardIterator, typename _Integer, typename _Tp,
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 4196,4202 ****
     *  @param  __first        A forward iterator.
     *  @param  __last         A forward iterator.
     *  @param  __searcher     A callable object.
!    *  @return @p __searcher(__first,__last).first
    */
    template<typename _ForwardIterator, typename _Searcher>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
--- 4237,4243 ----
     *  @param  __first        A forward iterator.
     *  @param  __last         A forward iterator.
     *  @param  __searcher     A callable object.
!    *  @return `__searcher(__first,__last).first`
    */
    template<typename _ForwardIterator, typename _Searcher>
      _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 4213,4226 ****
     *  @param  __last      An input iterator.
     *  @param  __result    An output iterator.
     *  @param  __unary_op  A unary operator.
!    *  @return   An output iterator equal to @p __result+(__last-__first).
     *
     *  Applies the operator to each element in the input range and assigns
     *  the results to successive elements of the output sequence.
!    *  Evaluates @p *(__result+N)=unary_op(*(__first+N)) for each @c N in the
!    *  range @p [0,__last-__first).
     *
!    *  @p unary_op must not alter its argument.
    */
    template<typename _InputIterator, typename _OutputIterator,
  	   typename _UnaryOperation>
--- 4254,4267 ----
     *  @param  __last      An input iterator.
     *  @param  __result    An output iterator.
     *  @param  __unary_op  A unary operator.
!    *  @return   An output iterator equal to `__result + (__last - __first)`.
     *
     *  Applies the operator to each element in the input range and assigns
     *  the results to successive elements of the output sequence.
!    *  Evaluates `*(__result+N) = unary_op(*(__first+N))` for each `N` in the
!    *  range `[0, __last - __first)`.
     *
!    *  `__unary_op` must not alter its argument.
    */
    template<typename _InputIterator, typename _OutputIterator,
  	   typename _UnaryOperation>
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 4249,4264 ****
     *  @param  __first2     An input iterator.
     *  @param  __result     An output iterator.
     *  @param  __binary_op  A binary operator.
!    *  @return   An output iterator equal to @p result+(last-first).
     *
     *  Applies the operator to the corresponding elements in the two
     *  input ranges and assigns the results to successive elements of the
     *  output sequence.
!    *  Evaluates @p
!    *  *(__result+N)=__binary_op(*(__first1+N),*(__first2+N)) for each
!    *  @c N in the range @p [0,__last1-__first1).
     *
!    *  @p binary_op must not alter either of its arguments.
    */
    template<typename _InputIterator1, typename _InputIterator2,
  	   typename _OutputIterator, typename _BinaryOperation>
--- 4290,4304 ----
     *  @param  __first2     An input iterator.
     *  @param  __result     An output iterator.
     *  @param  __binary_op  A binary operator.
!    *  @return   An output iterator equal to `__result+(__last1-__first1)`.
     *
     *  Applies the operator to the corresponding elements in the two
     *  input ranges and assigns the results to successive elements of the
     *  output sequence.
!    *  Evaluates `*(__result+N) = __binary_op(*(__first1+N), *(__first2+N))`
!    *  for each `N` in the range `[0, __last1-__first1)`.
     *
!    *  `__binary_op` must not alter either of its arguments.
    */
    template<typename _InputIterator1, typename _InputIterator2,
  	   typename _OutputIterator, typename _BinaryOperation>
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 4289,4295 ****
     *  @param  __last       A forward iterator.
     *  @param  __old_value  The value to be replaced.
     *  @param  __new_value  The replacement value.
-    *  @return   replace() returns no value.
     *
     *  For each iterator `i` in the range `[__first,__last)` if
     *  `*i == __old_value` then the assignment `*i = __new_value` is performed.
--- 4329,4334 ----
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 4322,4328 ****
     *  @param  __last       A forward iterator.
     *  @param  __pred       A predicate.
     *  @param  __new_value  The replacement value.
-    *  @return   replace_if() returns no value.
     *
     *  For each iterator `i` in the range `[__first,__last)` if `__pred(*i)`
     *  is true then the assignment `*i = __new_value` is performed.
--- 4361,4366 ----
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 4354,4360 ****
     *  @param  __first  A forward iterator.
     *  @param  __last   A forward iterator.
     *  @param  __gen    A function object callable with no arguments.
-    *  @return   generate() returns no value.
     *
     *  Performs the assignment `*i = __gen()` for each `i` in the range
     *  `[__first, __last)`.
--- 4392,4397 ----
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 4560,4566 ****
     *  @ingroup mutating_algorithms
     *  @param  __first   A forward iterator.
     *  @param  __last    A forward iterator.
!    *  @param  __rand    The RNG functor or function.
     *
     *  Reorders the elements in the range `[__first, __last)` using `__rand`
     *  to provide a random distribution. Calling `__rand(N)` for a positive
--- 4597,4603 ----
     *  @ingroup mutating_algorithms
     *  @param  __first   A forward iterator.
     *  @param  __last    A forward iterator.
!    *  @param  __rand    The RNG function object.
     *
     *  Reorders the elements in the range `[__first, __last)` using `__rand`
     *  to provide a random distribution. Calling `__rand(N)` for a positive
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 4609,4615 ****
     *  @ingroup mutating_algorithms
     *  @param  __first   A forward iterator.
     *  @param  __last    A forward iterator.
!    *  @param  __pred    A predicate functor.
     *  @return  An iterator `middle` such that `__pred(i)` is true for each
     *  iterator `i` in the range `[__first, middle)` and false for each `i`
     *  in the range `[middle, __last)`.
--- 4646,4652 ----
     *  @ingroup mutating_algorithms
     *  @param  __first   A forward iterator.
     *  @param  __last    A forward iterator.
!    *  @param  __pred    A predicate function object.
     *  @return  An iterator `middle` such that `__pred(i)` is true for each
     *  iterator `i` in the range `[__first, middle)` and false for each `i`
     *  in the range `[middle, __last)`.
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 4679,4685 ****
     *  @param  __first   An iterator.
     *  @param  __middle  Another iterator.
     *  @param  __last    Another iterator.
!    *  @param  __comp    A comparison functor.
     *
     *  Sorts the smallest `(__middle - __first)` elements in the range
     *  `[__first, __last)` and moves them to the range `[__first, __middle)`.
--- 4716,4722 ----
     *  @param  __first   An iterator.
     *  @param  __middle  Another iterator.
     *  @param  __last    Another iterator.
!    *  @param  __comp    A comparison function object.
     *
     *  Sorts the smallest `(__middle - __first)` elements in the range
     *  `[__first, __last)` and moves them to the range `[__first, __middle)`.
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 4755,4761 ****
     *  @param  __first   An iterator.
     *  @param  __nth     Another iterator.
     *  @param  __last    Another iterator.
!    *  @param  __comp    A comparison functor.
     *
     *  Rearranges the elements in the range `[__first, __last)` so that `*__nth`
     *  is the same element that would have been in that position had the
--- 4792,4798 ----
     *  @param  __first   An iterator.
     *  @param  __nth     Another iterator.
     *  @param  __last    Another iterator.
!    *  @param  __comp    A comparison function object.
     *
     *  Rearranges the elements in the range `[__first, __last)` so that `*__nth`
     *  is the same element that would have been in that position had the
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 4822,4828 ****
     *  @ingroup sorting_algorithms
     *  @param  __first   An iterator.
     *  @param  __last    Another iterator.
!    *  @param  __comp    A comparison functor.
     *
     *  Sorts the elements in the range `[__first, __last)` in ascending order,
     *  such that `__comp(*(i+1), *i)` is false for every iterator `i` in the
--- 4859,4865 ----
     *  @ingroup sorting_algorithms
     *  @param  __first   An iterator.
     *  @param  __last    Another iterator.
!    *  @param  __comp    A comparison function object.
     *
     *  Sorts the elements in the range `[__first, __last)` in ascending order,
     *  such that `__comp(*(i+1), *i)` is false for every iterator `i` in the
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 4883,4896 ****
     *  @param  __last1   Another iterator.
     *  @param  __last2   Another iterator.
     *  @param  __result  An iterator pointing to the end of the merged range.
!    *  @return   An output iterator equal to @p __result + (__last1 - __first1)
!    *            + (__last2 - __first2).
     *
!    *  Merges the ranges @p [__first1,__last1) and @p [__first2,__last2) into
!    *  the sorted range @p [__result, __result + (__last1-__first1) +
!    *  (__last2-__first2)).  Both input ranges must be sorted, and the
!    *  output range must not overlap with either of the input ranges.
!    *  The sort is @e stable, that is, for equivalent elements in the
     *  two ranges, elements from the first range will always come
     *  before elements from the second.
    */
--- 4920,4934 ----
     *  @param  __last1   Another iterator.
     *  @param  __last2   Another iterator.
     *  @param  __result  An iterator pointing to the end of the merged range.
!    *  @return   An output iterator equal to
!    *            `__result + (__last1 - __first1) + (__last2 - __first2)`.
     *
!    *  Merges the ranges `[__first1, __last1)` and `[__first2, __last2)` into
!    *  the sorted range
!    *  `[__result, __result + (__last1-__first1) + (__last2-__first2))`.
!    *  Both input ranges must be sorted, and the output range must not overlap
!    *  with either of the input ranges.
!    *  The sort is _stable_, that is, for equivalent elements in the
     *  two ranges, elements from the first range will always come
     *  before elements from the second.
    */
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 4929,4943 ****
     *  @param  __last1   Another iterator.
     *  @param  __last2   Another iterator.
     *  @param  __result  An iterator pointing to the end of the merged range.
!    *  @param  __comp    A functor to use for comparisons.
!    *  @return   An output iterator equal to @p __result + (__last1 - __first1)
!    *            + (__last2 - __first2).
     *
!    *  Merges the ranges @p [__first1,__last1) and @p [__first2,__last2) into
!    *  the sorted range @p [__result, __result + (__last1-__first1) +
!    *  (__last2-__first2)).  Both input ranges must be sorted, and the
!    *  output range must not overlap with either of the input ranges.
!    *  The sort is @e stable, that is, for equivalent elements in the
     *  two ranges, elements from the first range will always come
     *  before elements from the second.
     *
--- 4967,4982 ----
     *  @param  __last1   Another iterator.
     *  @param  __last2   Another iterator.
     *  @param  __result  An iterator pointing to the end of the merged range.
!    *  @param  __comp    A function object to use for comparisons.
!    *  @return   An output iterator equal to
!    *            `__result + (__last1 - __first1) + (__last2 - __first2)`.
     *
!    *  Merges the ranges `[__first1, __last1)` and `[__first2, __last2)` into
!    *  the sorted range
!    *  `[__result, __result + (__last1-__first1) + (__last2-__first2))`.
!    *  Both input ranges must be sorted, and the output range must not overlap
!    *  with either of the input ranges.
!    *  The sort is _stable_, that is, for equivalent elements in the
     *  two ranges, elements from the first range will always come
     *  before elements from the second.
     *
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 5018,5031 ****
     *  @param  __first   An iterator.
     *  @param  __last    Another iterator.
     *
!    *  Sorts the elements in the range @p [__first,__last) in ascending order,
!    *  such that for each iterator @p i in the range @p [__first,__last-1),
!    *  @p *(i+1)<*i is false.
     *
     *  The relative ordering of equivalent elements is preserved, so any two
!    *  elements @p x and @p y in the range @p [__first,__last) such that
!    *  @p x<y is false and @p y<x is false will have the same relative
!    *  ordering after calling @p stable_sort().
    */
    template<typename _RandomAccessIterator>
      _GLIBCXX26_CONSTEXPR
--- 5057,5070 ----
     *  @param  __first   An iterator.
     *  @param  __last    Another iterator.
     *
!    *  Sorts the elements in the range `[__first, __last)` in ascending order,
!    *  such that for each iterator `i` in the range `[__first, __last-1)`,
!    *  `*(i+1) < *i` is false.
     *
     *  The relative ordering of equivalent elements is preserved, so any two
!    *  elements `x` and `y` in the range `[__first, __last)` such that
!    *  `x < y` is false and `y < x` is false will have the same relative
!    *  ordering after calling `stable_sort`.
    */
    template<typename _RandomAccessIterator>
      _GLIBCXX26_CONSTEXPR
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 5050,5065 ****
     *  @ingroup sorting_algorithms
     *  @param  __first   An iterator.
     *  @param  __last    Another iterator.
!    *  @param  __comp    A comparison functor.
     *
!    *  Sorts the elements in the range @p [__first,__last) in ascending order,
!    *  such that for each iterator @p i in the range @p [__first,__last-1),
!    *  @p __comp(*(i+1),*i) is false.
     *
     *  The relative ordering of equivalent elements is preserved, so any two
!    *  elements @p x and @p y in the range @p [__first,__last) such that
!    *  @p __comp(x,y) is false and @p __comp(y,x) is false will have the same
!    *  relative ordering after calling @p stable_sort().
    */
    template<typename _RandomAccessIterator, typename _Compare>
      _GLIBCXX26_CONSTEXPR
--- 5089,5104 ----
     *  @ingroup sorting_algorithms
     *  @param  __first   An iterator.
     *  @param  __last    Another iterator.
!    *  @param  __comp    A comparison function object.
     *
!    *  Sorts the elements in the range `[__first, __last)` in ascending order,
!    *  such that for each iterator `i in the range `[__first,__last-1)`,
!    *  `__comp(*(i+1), *i)` is false.
     *
     *  The relative ordering of equivalent elements is preserved, so any two
!    *  elements `x` and `y` in the range `[__first, __last)` such that
!    *  `__comp(x, y)` is false and `__comp(y, x)` is false will have the same
!    *  relative ordering after calling `stable_sort`.
    */
    template<typename _RandomAccessIterator, typename _Compare>
      _GLIBCXX26_CONSTEXPR
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 5161,5182 ****
      }
  
    /**
!    *  @brief Return the union of two sorted ranges using a comparison functor.
     *  @ingroup set_algorithms
     *  @param  __first1  Start of first range.
     *  @param  __last1   End of first range.
     *  @param  __first2  Start of second range.
     *  @param  __last2   End of second range.
     *  @param  __result  Start of output range.
!    *  @param  __comp    The comparison functor.
     *  @return  End of the output range.
     *  @ingroup set_algorithms
     *
     *  This operation iterates over both ranges, copying elements present in
     *  each range in order to the output range.  Iterators increment for each
     *  range.  When the current element of one range is less than the other
!    *  according to @p __comp, that element is copied and the iterator advanced.
!    *  If an equivalent element according to @p __comp is contained in both
     *  ranges, the element from the first range is copied and both ranges
     *  advance.  The output range may not overlap either input range.
    */
--- 5200,5221 ----
      }
  
    /**
!    *  @brief Return the union of two sorted ranges using a comparison function.
     *  @ingroup set_algorithms
     *  @param  __first1  Start of first range.
     *  @param  __last1   End of first range.
     *  @param  __first2  Start of second range.
     *  @param  __last2   End of second range.
     *  @param  __result  Start of output range.
!    *  @param  __comp    The comparison function object.
     *  @return  End of the output range.
     *  @ingroup set_algorithms
     *
     *  This operation iterates over both ranges, copying elements present in
     *  each range in order to the output range.  Iterators increment for each
     *  range.  When the current element of one range is less than the other
!    *  according to `__comp`, that element is copied and the iterator advanced.
!    *  If an equivalent element according to `__comp` is contained in both
     *  ranges, the element from the first range is copied and both ranges
     *  advance.  The output range may not overlap either input range.
    */
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 5282,5303 ****
  
    /**
     *  @brief Return the intersection of two sorted ranges using comparison
!    *  functor.
     *  @ingroup set_algorithms
     *  @param  __first1  Start of first range.
     *  @param  __last1   End of first range.
     *  @param  __first2  Start of second range.
     *  @param  __last2   End of second range.
     *  @param  __result  Start of output range.
!    *  @param  __comp    The comparison functor.
     *  @return  End of the output range.
     *  @ingroup set_algorithms
     *
     *  This operation iterates over both ranges, copying elements present in
     *  both ranges in order to the output range.  Iterators increment for each
     *  range.  When the current element of one range is less than the other
!    *  according to @p __comp, that iterator advances.  If an element is
!    *  contained in both ranges according to @p __comp, the element from the
     *  first range is copied and both ranges advance.  The output range may not
     *  overlap either input range.
    */
--- 5321,5342 ----
  
    /**
     *  @brief Return the intersection of two sorted ranges using comparison
!    *  function.
     *  @ingroup set_algorithms
     *  @param  __first1  Start of first range.
     *  @param  __last1   End of first range.
     *  @param  __first2  Start of second range.
     *  @param  __last2   End of second range.
     *  @param  __result  Start of output range.
!    *  @param  __comp    The comparison function object.
     *  @return  End of the output range.
     *  @ingroup set_algorithms
     *
     *  This operation iterates over both ranges, copying elements present in
     *  both ranges in order to the output range.  Iterators increment for each
     *  range.  When the current element of one range is less than the other
!    *  according to `__comp`, that iterator advances.  If an element is
!    *  contained in both ranges according to `__comp`, the element from the
     *  first range is copied and both ranges advance.  The output range may not
     *  overlap either input range.
    */
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 5406,5429 ****
  
    /**
     *  @brief  Return the difference of two sorted ranges using comparison
!    *  functor.
     *  @ingroup set_algorithms
     *  @param  __first1  Start of first range.
     *  @param  __last1   End of first range.
     *  @param  __first2  Start of second range.
     *  @param  __last2   End of second range.
     *  @param  __result  Start of output range.
!    *  @param  __comp    The comparison functor.
     *  @return  End of the output range.
     *  @ingroup set_algorithms
     *
     *  This operation iterates over both ranges, copying elements present in
     *  the first range but not the second in order to the output range.
     *  Iterators increment for each range.  When the current element of the
!    *  first range is less than the second according to @p __comp, that element
     *  is copied and the iterator advances.  If the current element of the
     *  second range is less, no element is copied and the iterator advances.
!    *  If an element is contained in both ranges according to @p __comp, no
     *  elements are copied and both ranges advance.  The output range may not
     *  overlap either input range.
    */
--- 5445,5468 ----
  
    /**
     *  @brief  Return the difference of two sorted ranges using comparison
!    *  function.
     *  @ingroup set_algorithms
     *  @param  __first1  Start of first range.
     *  @param  __last1   End of first range.
     *  @param  __first2  Start of second range.
     *  @param  __last2   End of second range.
     *  @param  __result  Start of output range.
!    *  @param  __comp    The comparison function object.
     *  @return  End of the output range.
     *  @ingroup set_algorithms
     *
     *  This operation iterates over both ranges, copying elements present in
     *  the first range but not the second in order to the output range.
     *  Iterators increment for each range.  When the current element of the
!    *  first range is less than the second according to `__comp`, that element
     *  is copied and the iterator advances.  If the current element of the
     *  second range is less, no element is copied and the iterator advances.
!    *  If an element is contained in both ranges according to `__comp`, no
     *  elements are copied and both ranges advance.  The output range may not
     *  overlap either input range.
    */
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 5541,5563 ****
  
    /**
     *  @brief  Return the symmetric difference of two sorted ranges using
!    *  comparison functor.
     *  @ingroup set_algorithms
     *  @param  __first1  Start of first range.
     *  @param  __last1   End of first range.
     *  @param  __first2  Start of second range.
     *  @param  __last2   End of second range.
     *  @param  __result  Start of output range.
!    *  @param  __comp    The comparison functor.
     *  @return  End of the output range.
     *  @ingroup set_algorithms
     *
     *  This operation iterates over both ranges, copying elements present in
     *  one range but not the other in order to the output range.  Iterators
     *  increment for each range.  When the current element of one range is less
!    *  than the other according to @p comp, that element is copied and the
     *  iterator advances.  If an element is contained in both ranges according
!    *  to @p __comp, no elements are copied and both ranges advance.  The output
     *  range may not overlap either input range.
    */
    template<typename _InputIterator1, typename _InputIterator2,
--- 5580,5602 ----
  
    /**
     *  @brief  Return the symmetric difference of two sorted ranges using
!    *  comparison function.
     *  @ingroup set_algorithms
     *  @param  __first1  Start of first range.
     *  @param  __last1   End of first range.
     *  @param  __first2  Start of second range.
     *  @param  __last2   End of second range.
     *  @param  __result  Start of output range.
!    *  @param  __comp    The comparison function object.
     *  @return  End of the output range.
     *  @ingroup set_algorithms
     *
     *  This operation iterates over both ranges, copying elements present in
     *  one range but not the other in order to the output range.  Iterators
     *  increment for each range.  When the current element of one range is less
!    *  than the other according to `__comp`, that element is copied and the
     *  iterator advances.  If an element is contained in both ranges according
!    *  to `__comp`, no elements are copied and both ranges advance.  The output
     *  range may not overlap either input range.
    */
    template<typename _InputIterator1, typename _InputIterator2,
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 5631,5643 ****
      }
  
    /**
!    *  @brief  Return the minimum element in a range using comparison functor.
     *  @ingroup sorting_algorithms
     *  @param  __first  Start of range.
     *  @param  __last   End of range.
!    *  @param  __comp   Comparison functor.
     *  @return  Iterator referencing the first instance of the smallest value
!    *  according to __comp.
    */
    template<typename _ForwardIterator, typename _Compare>
      _GLIBCXX_NODISCARD _GLIBCXX14_CONSTEXPR
--- 5670,5682 ----
      }
  
    /**
!    *  @brief  Return the minimum element in a range using comparison function.
     *  @ingroup sorting_algorithms
     *  @param  __first  Start of range.
     *  @param  __last   End of range.
!    *  @param  __comp   Comparison function object.
     *  @return  Iterator referencing the first instance of the smallest value
!    *  according to `__comp`.
    */
    template<typename _ForwardIterator, typename _Compare>
      _GLIBCXX_NODISCARD _GLIBCXX14_CONSTEXPR
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 5694,5706 ****
      }
  
    /**
!    *  @brief  Return the maximum element in a range using comparison functor.
     *  @ingroup sorting_algorithms
     *  @param  __first  Start of range.
     *  @param  __last   End of range.
!    *  @param  __comp   Comparison functor.
     *  @return  Iterator referencing the first instance of the largest value
!    *  according to __comp.
    */
    template<typename _ForwardIterator, typename _Compare>
      _GLIBCXX_NODISCARD _GLIBCXX14_CONSTEXPR
--- 5733,5745 ----
      }
  
    /**
!    *  @brief  Return the maximum element in a range using comparison function.
     *  @ingroup sorting_algorithms
     *  @param  __first  Start of range.
     *  @param  __last   End of range.
!    *  @param  __comp   Comparison function object.
     *  @return  Iterator referencing the first instance of the largest value
!    *  according to `__comp`.
    */
    template<typename _ForwardIterator, typename _Compare>
      _GLIBCXX_NODISCARD _GLIBCXX14_CONSTEXPR
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 5761,5766 ****
--- 5800,5806 ----
  #endif // C++11
  
  #if __cplusplus >= 201402L // C++17 std::sample and C++14 experimental::sample
+   /// @cond undocumented
    /// Reservoir sampling algorithm.
    template<typename _InputIterator, typename _RandomAccessIterator,
             typename _Size, typename _UniformRandomBitGenerator>
*************** _GLIBCXX_BEGIN_NAMESPACE_ALGO
*** 5855,5860 ****
--- 5895,5901 ----
  	  }
        return __out;
      }
+   /// @endcond
  #endif // C++14
  
  #ifdef __glibcxx_sample // C++ >= 17
diff -Nrcpad gcc-17-20260628/libstdc++-v3/include/bits/utility.h gcc-17-20260705/libstdc++-v3/include/bits/utility.h
*** gcc-17-20260628/libstdc++-v3/include/bits/utility.h	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libstdc++-v3/include/bits/utility.h	Sun Jul  5 22:32:19 2026
***************
*** 41,46 ****
--- 41,47 ----
  
  #include <type_traits>
  #include <bits/move.h>
+ #include <bits/inplace_tags.h>
  #ifdef __glibcxx_constant_wrapper // C++ >= 26
  #  include <bits/invoke.h>
  #endif
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 549,592 ****
  #endif // __integer_pack
  #endif // __cpp_structured_bindings >= 202411L
  
- #if __cplusplus >= 201703L
- 
-   struct in_place_t {
-     explicit in_place_t() = default;
-   };
- 
-   inline constexpr in_place_t in_place{};
- 
-   template<typename _Tp> struct in_place_type_t
-   {
-     explicit in_place_type_t() = default;
-   };
- 
-   template<typename _Tp>
-     inline constexpr in_place_type_t<_Tp> in_place_type{};
- 
-   template<size_t _Idx> struct in_place_index_t
-   {
-     explicit in_place_index_t() = default;
-   };
- 
-   template<size_t _Idx>
-     inline constexpr in_place_index_t<_Idx> in_place_index{};
- 
-   template<typename>
-     inline constexpr bool __is_in_place_type_v = false;
- 
-   template<typename _Tp>
-     inline constexpr bool __is_in_place_type_v<in_place_type_t<_Tp>> = true;
- 
-   template<typename>
-     inline constexpr bool __is_in_place_index_v = false;
- 
-   template<size_t _Nm>
-     inline constexpr bool __is_in_place_index_v<in_place_index_t<_Nm>> = true;
- 
- #endif // C++17
- 
  #if _GLIBCXX_USE_BUILTIN_TRAIT(__type_pack_element)
    template<size_t _Np, typename... _Types>
      struct _Nth_type
--- 550,555 ----
diff -Nrcpad gcc-17-20260628/libstdc++-v3/include/bits/vec_ops.h gcc-17-20260705/libstdc++-v3/include/bits/vec_ops.h
*** gcc-17-20260628/libstdc++-v3/include/bits/vec_ops.h	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libstdc++-v3/include/bits/vec_ops.h	Sun Jul  5 22:32:19 2026
*************** namespace simd
*** 299,305 ****
      constexpr bool
      __is_const_known(const _Tp& __x)
      {
!       return __builtin_constant_p(__x);
      }
  
    [[__gnu__::__always_inline__]]
--- 299,308 ----
      constexpr bool
      __is_const_known(const _Tp& __x)
      {
!       if constexpr (__complex_like<_Tp>)
! 	return __is_const_known(__x.real()) && __is_const_known(__x.imag());
!       else
! 	return __builtin_constant_p(__x);
      }
  
    [[__gnu__::__always_inline__]]
*************** namespace simd
*** 590,601 ****
--- 593,663 ----
  	__xh = __builtin_shufflevector(__xh, __y, ((_Is & 1) == 1 ? __nh + _Is / 2 : _Is)...);
        }
  
+       // negate every even element (real part of interleaved complex)
+       [[__gnu__::__always_inline__]]
+       static constexpr _TV
+       _S_complex_negate_real(_TV __x)
+       { return __vec_xor(_S_broadcast_to_even(_S_signmask<_TV>[0]), __x); }
+ 
+       // negate every odd element (imaginary part of interleaved complex)
+       [[__gnu__::__always_inline__]]
+       static constexpr _TV
+       _S_complex_negate_imag(_TV __x)
+       { return __vec_xor(_S_broadcast_to_odd(_S_signmask<_TV>[0]), __x); }
+ 
+       // Subtract elements with even index, add elements with odd index.
+       template <_ArchTraits _Traits = {}>
+ 	[[__gnu__::__always_inline__]]
+ 	static constexpr _TV
+ 	_S_addsub(_TV __x, _TV __y)
+ 	{
+ 	  if constexpr (_Traits._M_have_addsub())
+ 	    // GCC recognizes this pattern as addsub
+ 	    return __builtin_shufflevector(__x - __y, __x + __y,
+ 					   (_Is + (_Is & 1) * __width_of<_TV>)...);
+ 	  else
+ 	    return __x + _S_complex_negate_real(__y);
+ 	}
+ 
        // true if all elements are know to be equal to __ref at compile time
        [[__gnu__::__always_inline__]]
        static constexpr bool
        _S_is_const_known_equal_to(_TV __x, _Tp __ref)
        { return (__is_const_known_equal_to(__x[_Is], __ref) && ...); }
  
+       // True iff all elements at even indexes are zero. This includes signed zeros only when
+       // -fno-signed-zeros is in effect.
+       template <_OptTraits _Traits = {}>
+ 	[[__gnu__::__always_inline__]]
+ 	static constexpr bool
+ 	_S_complex_real_is_const_known_zero(_TV __x)
+ 	{
+ 	  if constexpr (_Traits._M_conforming_to_STDC_annex_G())
+ 	    {
+ 	      using _Up = _UInt<sizeof(_Tp)>;
+ 	      return (((_Is & 1) == 1 || __is_const_known_equal_to(
+ 					   __builtin_bit_cast(_Up, __x[_Is]), _Up())) && ...);
+ 	    }
+ 	  else
+ 	    return (((_Is & 1) == 1 || __is_const_known_equal_to(__x[_Is], _Tp())) && ...);
+       }
+ 
+       // True iff all elements at odd indexes are zero. This includes signed zeros only when
+       // -fno-signed-zeros is in effect.
+       template <_OptTraits _Traits = {}>
+ 	[[__gnu__::__always_inline__]]
+ 	static constexpr bool
+ 	_S_complex_imag_is_const_known_zero(_TV __x)
+ 	{
+ 	  if constexpr (_Traits._M_conforming_to_STDC_annex_G())
+ 	    {
+ 	      using _Up = _UInt<sizeof(_Tp)>;
+ 	      return (((_Is & 1) == 0 || __is_const_known_equal_to(
+ 					   __builtin_bit_cast(_Up, __x[_Is]), _Up())) && ...);
+ 	    }
+ 	  else
+ 	    return (((_Is & 1) == 0 || __is_const_known_equal_to(__x[_Is], _Tp())) && ...);
+ 	}
      };
  } // namespace simd
  _GLIBCXX_END_NAMESPACE_VERSION
diff -Nrcpad gcc-17-20260628/libstdc++-v3/include/bits/version.def gcc-17-20260705/libstdc++-v3/include/bits/version.def
*** gcc-17-20260628/libstdc++-v3/include/bits/version.def	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libstdc++-v3/include/bits/version.def	Sun Jul  5 22:32:19 2026
*************** ftms = {
*** 408,414 ****
  
  ftms = {
    name = constant_wrapper;
!   // 202506 P2781R9 std::constexpr_wrapper 
    // 202603 P3978R3 constant_wrapper should unwrap on call and subscript
    // 202606 P4206R0 Revert string support in std::constant_wrapper
    values = {
--- 408,414 ----
  
  ftms = {
    name = constant_wrapper;
!   // 202506 P2781R9 std::constexpr_wrapper
    // 202603 P3978R3 constant_wrapper should unwrap on call and subscript
    // 202606 P4206R0 Revert string support in std::constant_wrapper
    values = {
*************** ftms = {
*** 1128,1135 ****
    // 202306 P2630R4 Submdspan
    // 202403 P2642R6 Padded mdspan layouts
    // 202411 P3355R1 Fix submdspan for C++26
!   // 202511 P3663R3 Future-proof submdspan-mapping  
!   // 202603 P3982R1 Split strided_slice into extent_slice and range_slice for C++26                                                          
    values = {
      v = 202603;
      cxxmin = 26;
--- 1128,1135 ----
    // 202306 P2630R4 Submdspan
    // 202403 P2642R6 Padded mdspan layouts
    // 202411 P3355R1 Fix submdspan for C++26
!   // 202511 P3663R3 Future-proof submdspan-mapping
!   // 202603 P3982R1 Split strided_slice into extent_slice and range_slice for C++26
    values = {
      v = 202603;
      cxxmin = 26;
*************** ftms = {
*** 2282,2288 ****
  };
  
  ftms = {
!   // 202406 P0843R14 inplace_vector 
    // 202603 P3981R2 Better return types in std::inplace_vector and std::exception_ptr_cast
    //        P4022R0 Remove try_append_range from inplace_vector for now
    name = inplace_vector;
--- 2282,2288 ----
  };
  
  ftms = {
!   // 202406 P0843R14 inplace_vector
    // 202603 P3981R2 Better return types in std::inplace_vector and std::exception_ptr_cast
    //        P4022R0 Remove try_append_range from inplace_vector for now
    name = inplace_vector;
*************** ftms = {
*** 2339,2347 ****
  };
  
  ftms = {
    name = exception_ptr_cast;
    values = {
!     v = 202506;
      cxxmin = 26;
    };
  };
--- 2339,2349 ----
  };
  
  ftms = {
+   // 202506 P2927R3 Observing exceptions stored in exception_ptr
+   // 202603 P3981R2 Better return types in std::inplace_vector and std::exception_ptr_cast
    name = exception_ptr_cast;
    values = {
!     v = 202603;
      cxxmin = 26;
    };
  };
*************** ftms = {
*** 2427,2432 ****
--- 2429,2445 ----
      hosted = yes;
    };
  };
+ 
+ ftms = {
+   name = simd_complex;
+   values = {
+     no_stdname = true; // TODO: change once complete
+     v = 202502;
+     cxxmin = 26;
+     extra_cond = "defined __glibcxx_simd";
+     hosted = yes;
+   };
+ };
  
  ftms = {
    name = is_structural;
diff -Nrcpad gcc-17-20260628/libstdc++-v3/include/bits/version.h gcc-17-20260705/libstdc++-v3/include/bits/version.h
*** gcc-17-20260628/libstdc++-v3/include/bits/version.h	Sun Jun 28 22:32:22 2026
--- gcc-17-20260705/libstdc++-v3/include/bits/version.h	Sun Jul  5 22:32:19 2026
***************
*** 2588,2596 ****
  
  #if !defined(__cpp_lib_exception_ptr_cast)
  # if (__cplusplus >  202302L)
! #  define __glibcxx_exception_ptr_cast 202506L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_exception_ptr_cast)
! #   define __cpp_lib_exception_ptr_cast 202506L
  #  endif
  # endif
  #endif /* !defined(__cpp_lib_exception_ptr_cast) */
--- 2588,2596 ----
  
  #if !defined(__cpp_lib_exception_ptr_cast)
  # if (__cplusplus >  202302L)
! #  define __glibcxx_exception_ptr_cast 202603L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_exception_ptr_cast)
! #   define __cpp_lib_exception_ptr_cast 202603L
  #  endif
  # endif
  #endif /* !defined(__cpp_lib_exception_ptr_cast) */
***************
*** 2680,2685 ****
--- 2680,2694 ----
  #endif /* !defined(__cpp_lib_simd) */
  #undef __glibcxx_want_simd
  
+ #if !defined(__cpp_lib_simd_complex)
+ # if (__cplusplus >  202302L) && _GLIBCXX_HOSTED && (defined __glibcxx_simd)
+ #  define __glibcxx_simd_complex 202502L
+ #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_simd_complex)
+ #  endif
+ # endif
+ #endif /* !defined(__cpp_lib_simd_complex) */
+ #undef __glibcxx_want_simd_complex
+ 
  #if !defined(__cpp_lib_is_structural)
  # if (__cplusplus >  202302L) && (__has_builtin(__builtin_is_structural))
  #  define __glibcxx_is_structural 202603L
diff -Nrcpad gcc-17-20260628/libstdc++-v3/include/std/format gcc-17-20260705/libstdc++-v3/include/std/format
*** gcc-17-20260628/libstdc++-v3/include/std/format	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libstdc++-v3/include/std/format	Sun Jul  5 22:32:19 2026
*************** namespace __format
*** 495,502 ****
      _Pres_c = 2, _Pres_x, _Pres_X, _Pres_d, _Pres_o, _Pres_b, _Pres_B,
      // Presentation types for floating-point types
      _Pres_g = 1, _Pres_G, _Pres_a, _Pres_A, _Pres_e, _Pres_E, _Pres_f, _Pres_F,
!     // For pointers, the value are same as hexadecimal presentations for integers
!     _Pres_p = _Pres_x, _Pres_P = _Pres_X,
      _Pres_max = 0xf,
    };
    using enum _Pres_type;
--- 495,501 ----
      _Pres_c = 2, _Pres_x, _Pres_X, _Pres_d, _Pres_o, _Pres_b, _Pres_B,
      // Presentation types for floating-point types
      _Pres_g = 1, _Pres_G, _Pres_a, _Pres_A, _Pres_e, _Pres_E, _Pres_f, _Pres_F,
!       _Pres_p, _Pres_P,
      _Pres_max = 0xf,
    };
    using enum _Pres_type;
*************** namespace __format
*** 1722,1727 ****
--- 1721,1727 ----
  	    case _Pres_c:
  	      return _M_format_character(_S_to_character(__i), __fc);
  #endif
+ 	    default: // Fallback for _Pres_type values introduces in later versions.
  	    case _Pres_none:
  	      // Should not reach here with _Pres_none for bool or charT, so:
  	      [[fallthrough]];
*************** namespace __format
*** 1741,1748 ****
  		for (auto __p = __start; __p != __res.ptr; ++__p)
  		  *__p = __format::__toupper_numeric(*__p);
  	      break;
- 	    default:
- 	      __builtin_unreachable();
  	  }
  
  	  if (_M_spec._M_alt && __base_prefix.size())
--- 1741,1746 ----
*************** namespace __format
*** 1752,1758 ****
  	    }
  	  __start = __format::__put_sign(__i, _M_spec._M_sign, __start - 1);
  
- 
  	  string_view __narrow_str(__start, __res.ptr - __start);
  	  size_t __prefix_len = __start_digits - __start;
  	  if constexpr (is_same_v<char, _CharT>)
--- 1750,1755 ----
*************** namespace __format
*** 2129,2151 ****
  	  if (__use_prec)
  	    __prec = _M_spec._M_get_precision(__fc);
  
- 	  char* __start = __buf + 1; // reserve space for sign
- 	  char* __end = __buf + sizeof(__buf);
- 
  	  chars_format __fmt{};
  	  bool __upper = false;
  	  bool __trailing_zeros = false;
  	  char __expc = 'e';
  
  	  switch (_M_spec._M_type)
  	  {
  	    case _Pres_A:
  	      __upper = true;
  	      __expc = 'P';
  	      [[fallthrough]];
  	    case _Pres_a:
! 	      if (_M_spec._M_type != _Pres_A)
! 		__expc = 'p';
  	      __fmt = chars_format::hex;
  	      break;
  	    case _Pres_E:
--- 2126,2154 ----
  	  if (__use_prec)
  	    __prec = _M_spec._M_get_precision(__fc);
  
  	  chars_format __fmt{};
  	  bool __upper = false;
  	  bool __trailing_zeros = false;
  	  char __expc = 'e';
+ 	  size_t __offset = 1; // reserve space for sign
  
  	  switch (_M_spec._M_type)
  	  {
+ 	    case _Pres_P:
+ 	      if (__builtin_isfinite(__v))
+ 	        __offset += 2; // reserve space for prefix
+ 	      [[fallthrough]];
  	    case _Pres_A:
  	      __upper = true;
  	      __expc = 'P';
+ 	      __fmt = chars_format::hex;
+ 	      break;
+ 	    case _Pres_p:
+ 	      if (__builtin_isfinite(__v))
+ 	        __offset += 2; // reserve space for prefix
  	      [[fallthrough]];
  	    case _Pres_a:
! 	      __expc = 'p';
  	      __fmt = chars_format::hex;
  	      break;
  	    case _Pres_E:
*************** namespace __format
*** 2172,2185 ****
  	      __use_prec = true;
  	      __fmt = chars_format::general;
  	      break;
  	    case _Pres_none:
  	      if (__use_prec)
  		__fmt = chars_format::general;
  	      break;
- 	    default:
- 	      __builtin_unreachable();
  	  }
  
  	  // Write value into buffer using std::to_chars.
  	  auto __to_chars = [&](char* __b, char* __e) {
  	    if (__use_prec)
--- 2175,2190 ----
  	      __use_prec = true;
  	      __fmt = chars_format::general;
  	      break;
+ 	    default: // Fallback for _Pres_type values introduces in later versions.
  	    case _Pres_none:
  	      if (__use_prec)
  		__fmt = chars_format::general;
  	      break;
  	  }
  
+ 	  char* __start = __buf + __offset;
+ 	  char* __end = __buf + sizeof(__buf);
+ 
  	  // Write value into buffer using std::to_chars.
  	  auto __to_chars = [&](char* __b, char* __e) {
  	    if (__use_prec)
*************** namespace __format
*** 2197,2203 ****
  	    {
  	      // If the buffer is too small it's probably because of a large
  	      // precision, or a very large value in fixed format.
! 	      size_t __guess = 8 + __prec;
  	      if (__fmt == chars_format::fixed) // +ddd.prec
  		{
  		  if constexpr (is_same_v<_Fp, float> || is_same_v<_Fp, double>
--- 2202,2208 ----
  	    {
  	      // If the buffer is too small it's probably because of a large
  	      // precision, or a very large value in fixed format.
! 	      size_t __guess = 7 + __offset + __prec;
  	      if (__fmt == chars_format::fixed) // +ddd.prec
  		{
  		  if constexpr (is_same_v<_Fp, float> || is_same_v<_Fp, double>
*************** namespace __format
*** 2228,2255 ****
  		  // instantiated with it, was fixed in ABI 18 (G++ 13).  Since
  		  // <format> was new in G++ 13, and is experimental, that
  		  // isn't a problem.
! 		  auto __overwrite = [&__to_chars, &__res] (char* __p, size_t __n)
  		  {
! 		    __res = __to_chars(__p + 1, __p + __n - 1);
  		    return __res.ec == errc{} ? __res.ptr - __p : 0;
  		  };
  
  		  __dynbuf.__resize_and_overwrite(__dynbuf.capacity() * 2,
  						  __overwrite);
! 		  __start = __dynbuf.data() + 1; // reserve space for sign
  		  __end = __dynbuf.data() + __dynbuf.size();
  		}
  	      while (__builtin_expect(__res.ec == errc::value_too_large, 0));
  	  }
  
! 	  // Use uppercase for 'A', 'E', and 'G' formats.
  	  if (__upper)
  	    {
  	      for (char* __p = __start; __p != __res.ptr; ++__p)
  		*__p = __format::__toupper_numeric(*__p);
  	    }
  
- 	  bool __have_sign = true;
  	  // Add sign for non-negative values.
  	  if (!__builtin_signbit(__v))
  	    {
--- 2233,2268 ----
  		  // instantiated with it, was fixed in ABI 18 (G++ 13).  Since
  		  // <format> was new in G++ 13, and is experimental, that
  		  // isn't a problem.
! 		  auto __overwrite = [&__to_chars, &__res, __offset] (char* __p, size_t __n)
  		  {
! 		    __res = __to_chars(__p + __offset, __p + __n - __offset);
  		    return __res.ec == errc{} ? __res.ptr - __p : 0;
  		  };
  
  		  __dynbuf.__resize_and_overwrite(__dynbuf.capacity() * 2,
  						  __overwrite);
! 		  __start = __dynbuf.data() + __offset; // reserve space for sign and prefix
  		  __end = __dynbuf.data() + __dynbuf.size();
  		}
  	      while (__builtin_expect(__res.ec == errc::value_too_large, 0));
  	  }
  
!           if (__offset == 3)
! 	    {
! 	      __start -= 2;
! 	      if (__builtin_signbit(__v))
! 	        ranges::copy(string_view("-0x"), __start);
! 	      else
! 	        ranges::copy(string_view("0x"), __start);
! 	    }
! 
! 	  // Use uppercase for 'A', 'P', 'E', and 'G' formats.
  	  if (__upper)
  	    {
  	      for (char* __p = __start; __p != __res.ptr; ++__p)
  		*__p = __format::__toupper_numeric(*__p);
  	    }
  
  	  // Add sign for non-negative values.
  	  if (!__builtin_signbit(__v))
  	    {
*************** namespace __format
*** 2258,2264 ****
  	      else if (_M_spec._M_sign == _Sign_space)
  		*--__start = ' ';
  	      else
! 		__have_sign = false;
  	    }
  
  	  string_view __narrow_str(__start, __res.ptr - __start);
--- 2271,2277 ----
  	      else if (_M_spec._M_sign == _Sign_space)
  		*--__start = ' ';
  	      else
! 		--__offset;
  	    }
  
  	  string_view __narrow_str(__start, __res.ptr - __start);
*************** namespace __format
*** 2282,2290 ****
  		  if (__trailing_zeros)
  		    {
  		      // Find number of digits after first significant figure.
! 		      if (__s[__have_sign] != '0')
  			// A string like "D.D" or "-D.DDD"
! 			__sigfigs = __p - __have_sign - 1;
  		      else
  			// A string like "0.D" or "-0.0DD".
  			// Safe to assume there is a non-zero digit, because
--- 2295,2303 ----
  		  if (__trailing_zeros)
  		    {
  		      // Find number of digits after first significant figure.
! 		      if (__s[__offset] != '0')
  			// A string like "D.D" or "-D.DDD"
! 			__sigfigs = __p - __offset - 1;
  		      else
  			// A string like "0.D" or "-0.0DD".
  			// Safe to assume there is a non-zero digit, because
*************** namespace __format
*** 2298,2304 ****
  		  if (__p == __s.npos)
  		    __p = __s.size();
  		  __d = __p; // Position where '.' should be inserted.
! 		  __sigfigs = __d - __have_sign;
  		}
  
  	      if (__trailing_zeros && __prec != 0)
--- 2311,2317 ----
  		  if (__p == __s.npos)
  		    __p = __s.size();
  		  __d = __p; // Position where '.' should be inserted.
! 		  __sigfigs = __d - __offset;
  		}
  
  	      if (__trailing_zeros && __prec != 0)
*************** namespace __format
*** 2362,2368 ****
  
  	  if (_M_spec._M_localized && __builtin_isfinite(__v))
  	    {
! 	      auto __s = _M_localize(__str, __expc, __fc.locale());
  	      if (!__s.empty())
  		__str = __wstr = std::move(__s);
  	    }
--- 2375,2381 ----
  
  	  if (_M_spec._M_localized && __builtin_isfinite(__v))
  	    {
! 	      auto __s = _M_localize(__str, __expc, __offset, __fc.locale());
  	      if (!__s.empty())
  		__str = __wstr = std::move(__s);
  	    }
*************** namespace __format
*** 2383,2393 ****
  	      if (_M_spec._M_zero_fill && __builtin_isfinite(__v))
  		{
  		  __fill_char = _CharT('0');
! 		  // Write sign before zero filling.
! 		  if (!__format::__is_xdigit(__narrow_str[0]))
  		    {
! 		      *__out++ = __str[0];
! 		      __str.remove_prefix(1);
  		    }
  		}
  	      else
--- 2396,2405 ----
  	      if (_M_spec._M_zero_fill && __builtin_isfinite(__v))
  		{
  		  __fill_char = _CharT('0');
! 		  if (__offset > 0)
  		    {
! 		      __out = __format::__write(__out, __str.substr(0, __offset));
! 		      __str.remove_prefix(__offset);
  		    }
  		}
  	      else
*************** namespace __format
*** 2400,2406 ****
        // Locale-specific format.
        basic_string<_CharT>
        _M_localize(basic_string_view<_CharT> __str, char __expc,
! 		  const locale& __loc) const
        {
  	basic_string<_CharT> __lstr;
  
--- 2412,2418 ----
        // Locale-specific format.
        basic_string<_CharT>
        _M_localize(basic_string_view<_CharT> __str, char __expc,
! 		  int __offset, const locale& __loc) const
        {
  	basic_string<_CharT> __lstr;
  
*************** namespace __format
*** 2448,2463 ****
  	  __e = __str.size();
  	const size_t __r = __str.size() - __e; // Length of remainder.
  	auto __overwrite = [&](_CharT* __p, size_t) {
  	  // Apply grouping to the digits before the radix or exponent.
! 	  int __off = 0;
! 	  if (auto __c = __str.front(); __c == '-' || __c == '+' || __c == ' ')
! 	    {
! 	      *__p = __c;
! 	      __off = 1;
! 	    }
! 	  auto __end = std::__add_grouping(__p + __off, __np.thousands_sep(),
  					   __grp.data(), __grp.size(),
! 					   __str.data() + __off,
  					   __str.data() + __e);
  	  if (__r) // If there's a fractional part or exponent
  	    {
--- 2460,2471 ----
  	  __e = __str.size();
  	const size_t __r = __str.size() - __e; // Length of remainder.
  	auto __overwrite = [&](_CharT* __p, size_t) {
+ 	  // Copy any +/- sign and "0x" prefix
+ 	  ranges::copy_n(__str.data(), __offset, __p); 
  	  // Apply grouping to the digits before the radix or exponent.
! 	  auto __end = std::__add_grouping(__p + __offset, __np.thousands_sep(),
  					   __grp.data(), __grp.size(),
! 					   __str.data() + __offset,
  					   __str.data() + __e);
  	  if (__r) // If there's a fractional part or exponent
  	    {
*************** namespace __format
*** 2488,2512 ****
        __formatter_ptr() noexcept
        : _M_spec()
        {
! 	_M_spec._M_type = _Pres_p;
  	_M_spec._M_alt = true;
        }
  
        constexpr
        __formatter_ptr(_Spec<_CharT> __spec) noexcept
        : _M_spec(__spec)
!       { _M_set_default(_Pres_p); }
  
        constexpr typename basic_format_parse_context<_CharT>::iterator
!       parse(basic_format_parse_context<_CharT>& __pc, _Pres_type __type = _Pres_p)
        {
  	__format::_Spec<_CharT> __spec{};
  	const auto __last = __pc.end();
  	auto __first = __pc.begin();
  
! 	auto __finalize = [this, &__spec, __type] {
  	  _M_spec = __spec;
! 	  _M_set_default(__type);
  	};
  
  	auto __finished = [&] {
--- 2496,2520 ----
        __formatter_ptr() noexcept
        : _M_spec()
        {
! 	_M_spec._M_type = _Pres_x;
  	_M_spec._M_alt = true;
        }
  
        constexpr
        __formatter_ptr(_Spec<_CharT> __spec) noexcept
        : _M_spec(__spec)
!       { _M_set_default(); }
  
        constexpr typename basic_format_parse_context<_CharT>::iterator
!       parse(basic_format_parse_context<_CharT>& __pc)
        {
  	__format::_Spec<_CharT> __spec{};
  	const auto __last = __pc.end();
  	auto __first = __pc.begin();
  
! 	auto __finalize = [this, &__spec] {
  	  _M_spec = __spec;
! 	  _M_set_default();
  	};
  
  	auto __finished = [&] {
*************** namespace __format
*** 2539,2553 ****
  
  	if (*__first == 'p')
  	  {
! 	    __spec._M_type = _Pres_p;
! 	    __spec._M_alt = !__spec._M_alt;
  	    ++__first;
  	  }
  #if __glibcxx_format >= 202304L
  	else if (*__first == 'P')
  	  {
! 	    __spec._M_type = _Pres_P;
! 	    __spec._M_alt = !__spec._M_alt;
  	    ++__first;
  	  }
  #endif
--- 2547,2561 ----
  
  	if (*__first == 'p')
  	  {
! 	    __spec._M_type = _Pres_x;
! 	    __spec._M_alt = true;
  	    ++__first;
  	  }
  #if __glibcxx_format >= 202304L
  	else if (*__first == 'P')
  	  {
! 	    __spec._M_type = _Pres_X;
! 	    __spec._M_alt = true;
  	    ++__first;
  	  }
  #endif
*************** namespace __format
*** 2572,2583 ****
      private:
        [[__gnu__::__always_inline__]]
        constexpr void
!       _M_set_default(_Pres_type __type)
        {
! 	if (_M_spec._M_type == _Pres_none && __type != _Pres_none)
  	{
! 	  _M_spec._M_type = __type;
! 	  _M_spec._M_alt = !_M_spec._M_alt;
  	}
        }
  
--- 2580,2591 ----
      private:
        [[__gnu__::__always_inline__]]
        constexpr void
!       _M_set_default()
        {
! 	if (_M_spec._M_type == _Pres_none)
  	{
! 	  _M_spec._M_type = _Pres_x;
! 	  _M_spec._M_alt = true;
  	}
        }
  
diff -Nrcpad gcc-17-20260628/libstdc++-v3/include/std/inplace_vector gcc-17-20260705/libstdc++-v3/include/std/inplace_vector
*** gcc-17-20260628/libstdc++-v3/include/std/inplace_vector	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libstdc++-v3/include/std/inplace_vector	Sun Jul  5 22:32:19 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 121,127 ****
  	constexpr
  	inplace_vector(from_range_t, _Rg&& __rg)
  	: inplace_vector()
! 	{ 
  	  // _GLIBCXX_RESOLVE_LIB_DEFECTS
  	  // 4396. Improve inplace_vector(from_range_t, R&& rg)
  	  if constexpr (ranges::__static_sized_range<_Rg>)
--- 121,127 ----
  	constexpr
  	inplace_vector(from_range_t, _Rg&& __rg)
  	: inplace_vector()
! 	{
  	  // _GLIBCXX_RESOLVE_LIB_DEFECTS
  	  // 4396. Improve inplace_vector(from_range_t, R&& rg)
  	  if constexpr (ranges::__static_sized_range<_Rg>)
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 1194,1200 ****
        { __builtin_trap(); }
  
        template<typename... _Args>
!         constexpr optional<_Tp&>
  	try_emplace_back(_Args&&...)
  	{ return nullopt; }
  
--- 1194,1200 ----
        { __builtin_trap(); }
  
        template<typename... _Args>
! 	constexpr optional<_Tp&>
  	try_emplace_back(_Args&&...)
  	{ return nullopt; }
  
diff -Nrcpad gcc-17-20260628/libstdc++-v3/include/std/optional gcc-17-20260705/libstdc++-v3/include/std/optional
*** gcc-17-20260628/libstdc++-v3/include/std/optional	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libstdc++-v3/include/std/optional	Sun Jul  5 22:32:19 2026
***************
*** 51,56 ****
--- 51,57 ----
  #include <bits/enable_special_members.h>
  #include <bits/exception_defines.h>
  #include <bits/functional_hash.h>
+ #include <bits/optional_ref.h>  // nullopt_t, optional<_Tp&>
  #include <bits/stl_construct.h> // _Construct
  #include <bits/utility.h> // in_place_t
  #if __cplusplus > 201703L
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 77,104 ****
     *  @{
     */
  
-   template<typename _Tp>
-     class optional;
- 
-   /// Tag type to disengage optional objects.
-   struct nullopt_t
-   {
-     // Do not user-declare default constructor at all for
-     // optional_value = {} syntax to work.
-     // nullopt_t() = delete;
- 
-     // Used for constructing nullopt.
-     enum class _Construct { _Token };
- 
-     // Must be constexpr for nullopt_t to be literal.
-     explicit constexpr nullopt_t(_Construct) noexcept { }
-   };
- 
-   /// Tag to disengage optional objects.
-   inline constexpr nullopt_t nullopt { nullopt_t::_Construct::_Token };
- 
-   template<typename _Fn> struct _Optional_func { _Fn& _M_f; };
- 
    /**
     *  @brief Exception class thrown when a disengaged optional object is
     *  dereferenced.
--- 78,83 ----
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 795,811 ****
  # define _GLIBCXX_USE_CONSTRAINTS_FOR_OPTIONAL 1
  #endif
  
-   template<typename _Tp>
-     inline constexpr bool __is_valid_contained_type_for_optional =
-       (
- #if __cpp_lib_optional >= 202506L
- 	is_lvalue_reference_v<_Tp> ||
- #endif
- 	(is_object_v<_Tp> && is_destructible_v<_Tp> && !is_array_v<_Tp>)
-       )
-       && !is_same_v<remove_cv_t<remove_reference_t<_Tp>>, nullopt_t>
-       && !is_same_v<remove_cv_t<remove_reference_t<_Tp>>, in_place_t>;
- 
    /**
      * @brief Class template for optional values.
      */
--- 774,779 ----
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1505,1838 ****
      };
  
  #if __cpp_lib_optional >= 202506L // C++26
    template<typename _Tp>
!     class optional<_Tp&>;
! 
!   template<typename _Tp>
!     constexpr bool __is_optional_ref_v = false;
! 
!   template<typename _Tp>
!     constexpr bool __is_optional_ref_v<optional<_Tp&>> = true;
! 
!   template<typename _Tp>
!     struct __optional_ref_base
!     {};
! 
! #ifdef __cpp_lib_optional_range_support // >= C++26
!   template<typename _Tp>
!     struct __optional_ref_base<_Tp[]>
!     {};
  
    template<typename _Tp>
!     requires is_object_v<_Tp>
!     struct __optional_ref_base<_Tp>
!     {
!       using iterator = __gnu_cxx::__normal_iterator<_Tp*, optional<_Tp&>>;
!     };
  #endif // __cpp_lib_optional_range_support
  
    template<typename _Tp>
!     class optional<_Tp&> : public __optional_ref_base<_Tp>
      {
!       static_assert(__is_valid_contained_type_for_optional<_Tp&>);
! 
!     public:
!       using value_type = _Tp;
! 
!       // Constructors.
!       constexpr optional() noexcept = default;
!       constexpr optional(nullopt_t) noexcept : optional() {}
!       constexpr optional(const optional&) noexcept = default;
! 
!       template<typename _Arg>
! 	requires is_constructible_v<_Tp&, _Arg>
! 	  && (!reference_constructs_from_temporary_v<_Tp&, _Arg>)
! 	explicit constexpr
! 	optional(in_place_t, _Arg&& __arg)
! 	{
! 	  __convert_ref_init_val(std::forward<_Arg>(__arg));
! 	}
! 
!       template<typename _Up>
! 	requires (!is_same_v<remove_cvref_t<_Up>, optional>)
! 	  && (!is_same_v<remove_cvref_t<_Up>, in_place_t>)
! 	  && is_constructible_v<_Tp&, _Up>
! 	  && (!reference_constructs_from_temporary_v<_Tp&, _Up>)
! 	explicit(!is_convertible_v<_Up, _Tp&>)
! 	constexpr
! 	optional(_Up&& __u)
! 	noexcept(is_nothrow_constructible_v<_Tp&, _Up>)
! 	{
! 	  __convert_ref_init_val(std::forward<_Up>(__u));
! 	}
! 
!       template<typename _Up>
! 	requires (!is_same_v<remove_cvref_t<_Up>, optional>)
! 	  && (!is_same_v<remove_cvref_t<_Up>, in_place_t>)
! 	  && is_constructible_v<_Tp&, _Up>
! 	  && reference_constructs_from_temporary_v<_Tp&, _Up>
! 	explicit(!is_convertible_v<_Up, _Tp&>)
! 	constexpr
! 	optional(_Up&& __u) = delete;
! 
!       // optional<U> &
!       template<typename _Up>
! 	requires (!is_same_v<remove_cv_t<_Tp>, optional<_Up>>)
! 	  && (!is_same_v<_Tp&, _Up>)
! 	  && is_constructible_v<_Tp&, _Up&>
! 	  && (!reference_constructs_from_temporary_v<_Tp&, _Up&>)
! 	explicit(!is_convertible_v<_Up&, _Tp&>)
! 	constexpr
! 	optional(optional<_Up>& __rhs)
! 	noexcept(is_nothrow_constructible_v<_Tp&, _Up&>)
! 	{
! 	  if (__rhs)
! 	    __convert_ref_init_val(__rhs._M_fwd());
! 	}
! 
!       template<typename _Up>
! 	requires (!is_same_v<remove_cv_t<_Tp>, optional<_Up>>)
! 	  && (!is_same_v<_Tp&, _Up>)
! 	  && is_constructible_v<_Tp&, _Up&>
! 	  && reference_constructs_from_temporary_v<_Tp&, _Up&>
! 	explicit(!is_convertible_v<_Up&, _Tp&>)
! 	constexpr
! 	optional(optional<_Up>& __rhs) = delete;
! 
!       // const optional<U>&
!       template<typename _Up>
! 	requires (!is_same_v<remove_cv_t<_Tp>, optional<_Up>>)
! 	  && (!is_same_v<_Tp&, _Up>)
! 	  && is_constructible_v<_Tp&, const _Up&>
! 	  && (!reference_constructs_from_temporary_v<_Tp&, const _Up&>)
! 	explicit(!is_convertible_v<const _Up&, _Tp&>)
! 	constexpr
! 	optional(const optional<_Up>& __rhs)
! 	noexcept(is_nothrow_constructible_v<_Tp&, _Up&>)
! 	{
! 	  if (__rhs)
! 	    __convert_ref_init_val(__rhs._M_fwd());
! 	}
! 
!       template<typename _Up>
! 	requires (!is_same_v<remove_cv_t<_Tp>, optional<_Up>>)
! 	  && (!is_same_v<_Tp&, _Up>)
! 	  && is_constructible_v<_Tp&, const _Up&>
! 	  && reference_constructs_from_temporary_v<_Tp&, const _Up&>
! 	explicit(!is_convertible_v<const _Up&, _Tp&>)
! 	constexpr
! 	optional(const optional<_Up>& __rhs) = delete;
! 
!       // optional<U>&&
!       template<typename _Up>
! 	requires (!is_same_v<remove_cv_t<_Tp>, optional<_Up>>)
! 	  && (!is_same_v<_Tp&, _Up>)
! 	  && is_constructible_v<_Tp&, _Up>
! 	  && (!reference_constructs_from_temporary_v<_Tp&, _Up>)
! 	explicit(!is_convertible_v<_Up, _Tp&>)
! 	constexpr
! 	optional(optional<_Up>&& __rhs)
! 	noexcept(is_nothrow_constructible_v<_Tp&, _Up>)
! 	{
! 	  if (__rhs)
! 	    __convert_ref_init_val(std::move(__rhs)._M_fwd());
! 	}
! 
!       template<typename _Up>
! 	requires (!is_same_v<remove_cv_t<_Tp>, optional<_Up>>)
! 	  && (!is_same_v<_Tp&, _Up>)
! 	  && is_constructible_v<_Tp&, _Up>
! 	  && reference_constructs_from_temporary_v<_Tp&, _Up>
! 	explicit(!is_convertible_v<_Up, _Tp&>)
! 	constexpr
! 	optional(optional<_Up>&& __rhs) = delete;
! 
!       // const optional<U>&&
!       template<typename _Up>
! 	requires (!is_same_v<remove_cv_t<_Tp>, optional<_Up>>)
! 	  && (!is_same_v<_Tp&, _Up>)
! 	  && is_constructible_v<_Tp&, const _Up>
! 	  && (!reference_constructs_from_temporary_v<_Tp&, _Up>)
! 	explicit(!is_convertible_v<const _Up, _Tp&>)
! 	constexpr
! 	optional(const optional<_Up>&& __rhs)
! 	noexcept(is_nothrow_constructible_v<_Tp&, const _Up>)
! 	{
! 	  if (__rhs)
! 	    __convert_ref_init_val(std::move(__rhs)._M_fwd());
! 	}
! 
!       template<typename _Up>
! 	requires (!is_same_v<remove_cv_t<_Tp>, optional<_Up>>)
! 	  && (!is_same_v<_Tp&, _Up>)
! 	  && is_constructible_v<_Tp&, const _Up>
! 	  && reference_constructs_from_temporary_v<_Tp&, const _Up>
! 	explicit(!is_convertible_v<const _Up, _Tp&>)
! 	constexpr
! 	optional(const optional<_Up>&& __rhs) = delete;
! 
!       constexpr ~optional() = default;
  
!       // Assignment.
!       constexpr optional& operator=(nullopt_t) noexcept
        {
! 	_M_val = nullptr;
! 	return *this;
!       }
! 
!       constexpr optional& operator=(const optional&) noexcept = default;
! 
!       template<typename _Up>
! 	requires is_constructible_v<_Tp&, _Up>
! 	  && (!reference_constructs_from_temporary_v<_Tp&, _Up>)
! 	constexpr _Tp&
! 	emplace(_Up&& __u)
! 	noexcept(is_nothrow_constructible_v<_Tp&, _Up>)
! 	{
! 	  __convert_ref_init_val(std::forward<_Up>(__u));
! 	  // _GLIBCXX_RESOLVE_LIB_DEFECTS
! 	  // 4300. Missing Returns: element in optional<T&>::emplace
  	  return *_M_val;
! 	}
! 
!       // Swap.
!       constexpr void swap(optional& __rhs) noexcept
!       { std::swap(_M_val, __rhs._M_val); }
! 
! #ifdef __cpp_lib_optional_range_support // >= C++26
!       // Iterator support.
!       constexpr auto begin() const noexcept
! 	requires is_object_v<_Tp> && (!is_unbounded_array_v<_Tp>)
!       { return __gnu_cxx::__normal_iterator<_Tp*, optional>(_M_val); }
! 
!       constexpr auto end() const noexcept
! 	requires is_object_v<_Tp> && (!is_unbounded_array_v<_Tp>)
!       { return begin() + has_value(); }
! #endif // __cpp_lib_optional_range_support
! 
!       // Observers.
!       constexpr _Tp* operator->() const noexcept
!       {
! 	__glibcxx_assert(_M_val); // hardened precondition
! 	return _M_val;
!       }
! 
!       constexpr _Tp& operator*() const noexcept
!       {
! 	__glibcxx_assert(_M_val); // hardened precondition
! 	return *_M_val;
        }
  
!       constexpr explicit operator bool() const noexcept
        {
! 	return _M_val;
        }
  
!       constexpr bool has_value() const noexcept
        {
! 	return _M_val;
        }
  
!       constexpr _Tp& value() const
        {
! 	if (_M_val)
! 	  return *_M_val;
! 	__throw_bad_optional_access();
        }
  
!       // _GLIBCXX_RESOLVE_LIB_DEFECTS
!       // 4304. std::optional<NonReturnable&> is ill-formed due to value_or
!       template<typename _Up = remove_cv_t<_Tp>>
! 	requires is_object_v<_Tp> && (!is_array_v<_Tp>)
! 	constexpr decay_t<_Tp>
! 	value_or(_Up&& __u) const
! 	{
! 	  using _Xp = remove_cv_t<_Tp>;
! 	  static_assert(is_convertible_v<_Tp&, _Xp>);
! 	  static_assert(is_convertible_v<_Up, _Xp>);
! 	  if (_M_val)
! 	    return *_M_val;
! 	  return std::forward<_Up>(__u);
! 	}
! 
!       // Monadic operations.
!       template<typename _Fn>
! 	constexpr auto
! 	and_then(_Fn&& __f) const
! 	{
! 	  using _Up = remove_cvref_t<invoke_result_t<_Fn, _Tp&>>;
! 	  static_assert(__is_optional_v<_Up>,
! 			"the function passed to std::optional<T&>::and_then "
! 			"must return a std::optional");
! 	  if (has_value())
! 	    return std::__invoke(std::forward<_Fn>(__f), *_M_val);
! 	  else
! 	    return _Up();
! 	}
! 
!       template<typename _Fn>
! 	constexpr
! 	optional<remove_cv_t<invoke_result_t<_Fn, _Tp&>>>
! 	transform(_Fn&& __f) const
! 	{
! 	  using _Up = remove_cv_t<invoke_result_t<_Fn, _Tp&>>;
! 	  if (has_value())
! 	    return optional<_Up>(_Optional_func<_Fn>{__f}, *_M_val);
! 	  else
! 	    return optional<_Up>();
! 	}
! 
!       template<typename _Fn>
! 	requires invocable<_Fn>
! 	constexpr
! 	optional
! 	or_else(_Fn&& __f) const
! 	{
! 	  static_assert(is_same_v<remove_cvref_t<invoke_result_t<_Fn>>, optional>,
! 			"the function passed to std::optional<T&>::or_else "
! 			"must return a std::optional<T&>");
! 	  // _GLIBCXX_RESOLVE_LIB_DEFECTS
! 	  // 4367. Improve optional<T&>::or_else
! 	  if (has_value())
! 	    return *this;
! 	  else
! 	    return std::forward<_Fn>(__f)();
! 	}
! 
!       // Modifiers.
!       constexpr void reset() noexcept
        {
! 	_M_val = nullptr;
        }
- 
-     private:
-       _Tp *_M_val = nullptr;
- 
-       [[__gnu__::__always_inline__]]
-       constexpr _Tp&
-       _M_fwd() const noexcept
-       { return *_M_val; }
- 
-       template<typename _Up> friend class optional;
- 
-       template<typename _Up>
- 	constexpr
- 	void
- 	__convert_ref_init_val(_Up&& __u)
- 	noexcept
- 	{
- 	  _Tp& __r(std::forward<_Up>(__u));
- 	  _M_val = std::addressof(__r);
- 	}
- 
-       template<typename _Fn, typename _Value>
- 	explicit constexpr
- 	optional(_Optional_func<_Fn> __f, _Value&& __v)
- 	{
- 	  _Tp& __r = std::__invoke(std::forward<_Fn>(__f._M_f), std::forward<_Value>(__v));
- 	  _M_val = std::addressof(__r);
- 	}
-     };
  #endif // __cpp_lib_optional >= 202506L
  
    template<typename _Tp>
--- 1473,1567 ----
      };
  
  #if __cpp_lib_optional >= 202506L // C++26
+ #ifdef __cpp_lib_optional_range_support
    template<typename _Tp>
!     constexpr auto
!     optional<_Tp&>::begin() const noexcept
!       requires is_object_v<_Tp> && (!is_unbounded_array_v<_Tp>)
!     { return __gnu_cxx::__normal_iterator<_Tp*, optional>(_M_val); }
  
    template<typename _Tp>
!     constexpr auto
!     optional<_Tp&>::end() const noexcept
!       requires is_object_v<_Tp> && (!is_unbounded_array_v<_Tp>)
!     { return begin() + has_value(); }
  #endif // __cpp_lib_optional_range_support
  
    template<typename _Tp>
!     constexpr _Tp&
!     optional<_Tp&>::value() const
      {
!       if (_M_val)
! 	return *_M_val;
!       __throw_bad_optional_access();
!     }
  
!   template<typename _Tp>
!     template<typename _Up>
!       requires is_object_v<_Tp> && (!is_array_v<_Tp>)
!       constexpr decay_t<_Tp>
!       optional<_Tp&>::value_or(_Up&& __u) const
        {
! 	using _Xp = remove_cv_t<_Tp>;
! 	static_assert(is_convertible_v<_Tp&, _Xp>);
! 	static_assert(is_convertible_v<_Up, _Xp>);
! 	if (_M_val)
  	  return *_M_val;
! 	return std::forward<_Up>(__u);
        }
  
!   template<typename _Tp>
!     template<typename _Fn>
!       constexpr auto
!       optional<_Tp&>::and_then(_Fn&& __f) const
        {
!         using _Up = remove_cvref_t<invoke_result_t<_Fn, _Tp&>>;
!         static_assert(__is_optional_v<_Up>,
!                       "the function passed to std::optional<T&>::and_then "
!                       "must return a std::optional");
!         if (has_value())
!           return std::__invoke(std::forward<_Fn>(__f), *_M_val);
!         else
!           return _Up();
        }
  
!   template<typename _Tp>
!     template<typename _Fn>
!       constexpr optional<remove_cv_t<invoke_result_t<_Fn, _Tp&>>>
!       optional<_Tp&>::transform(_Fn&& __f) const
        {
!         using _Up = remove_cv_t<invoke_result_t<_Fn, _Tp&>>;
!         if (has_value())
!           return optional<_Up>(_Optional_func<_Fn>{__f}, *_M_val);
!         else
!           return optional<_Up>();
        }
  
!   template<typename _Tp>
!     template<typename _Fn>
!       requires is_invocable_v<_Fn>
!       constexpr optional<_Tp&>
!       optional<_Tp&>::or_else(_Fn&& __f) const
        {
!         static_assert(is_same_v<remove_cvref_t<invoke_result_t<_Fn>>, optional>,
!                       "the function passed to std::optional<T&>::or_else "
!                       "must return a std::optional<T&>");
!         // _GLIBCXX_RESOLVE_LIB_DEFECTS
!         // 4367. Improve optional<T&>::or_else
!         if (has_value())
!           return *this;
!         else
!           return std::forward<_Fn>(__f)();
        }
  
!   template<typename _Tp>
!     template<typename _Fn, typename _Value>
!       constexpr
!       optional<_Tp&>::optional(_Optional_func<_Fn> __f, _Value&& __v)
        {
!         _Tp& __r = std::__invoke(std::forward<_Fn>(__f._M_f), std::forward<_Value>(__v));
!         _M_val = std::addressof(__r);
        }
  #endif // __cpp_lib_optional >= 202506L
  
    template<typename _Tp>
diff -Nrcpad gcc-17-20260628/libstdc++-v3/include/std/simd gcc-17-20260705/libstdc++-v3/include/std/simd
*** gcc-17-20260628/libstdc++-v3/include/std/simd	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libstdc++-v3/include/std/simd	Sun Jul  5 22:32:19 2026
***************
*** 34,39 ****
--- 34,40 ----
  #endif
  
  #define __glibcxx_want_simd
+ #define __glibcxx_want_simd_complex
  #include <bits/version.h>
  
  #ifdef __glibcxx_simd
***************
*** 43,48 ****
--- 44,54 ----
  #include "bits/simd_mask_reductions.h"
  #include "bits/simd_reductions.h"
  #include "bits/simd_alg.h"
+ #include "bits/simd_bit.h"
+ #ifdef __glibcxx_simd_complex
+ #include "bits/simd_complex.h"
+ #endif
+ #include "bits/simd_math.h"
  
  #endif
  #endif
diff -Nrcpad gcc-17-20260628/libstdc++-v3/libsupc++/exception_ptr.h gcc-17-20260705/libstdc++-v3/libsupc++/exception_ptr.h
*** gcc-17-20260628/libstdc++-v3/libsupc++/exception_ptr.h	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libstdc++-v3/libsupc++/exception_ptr.h	Sun Jul  5 22:32:19 2026
***************
*** 41,46 ****
--- 41,50 ----
  # include <bits/move.h>
  #endif
  
+ #if __cpp_lib_exception_ptr_cast >= 202603L
+ # include <bits/optional_ref.h>
+ #endif
+ 
  #ifdef _GLIBCXX_EH_PTR_RELOPS_COMPAT
  # define _GLIBCXX_EH_PTR_USED __attribute__((__used__))
  #else
*************** namespace std _GLIBCXX_VISIBILITY(defaul
*** 81,89 ****
    /// Throw the object pointed to by the exception_ptr.
    void rethrow_exception(exception_ptr) __attribute__ ((__noreturn__));
  
! #if __cpp_lib_exception_ptr_cast >= 202506L
    template<typename _Ex>
!     constexpr const _Ex* exception_ptr_cast(const exception_ptr&) noexcept;
    template<typename _Ex>
      void exception_ptr_cast(const exception_ptr&&) = delete;
  #endif
--- 85,93 ----
    /// Throw the object pointed to by the exception_ptr.
    void rethrow_exception(exception_ptr) __attribute__ ((__noreturn__));
  
! #if __cpp_lib_exception_ptr_cast >= 202603L
    template<typename _Ex>
!     constexpr optional<const _Ex&> exception_ptr_cast(const exception_ptr&) noexcept;
    template<typename _Ex>
      void exception_ptr_cast(const exception_ptr&&) = delete;
  #endif
*************** namespace std _GLIBCXX_VISIBILITY(defaul
*** 139,145 ****
  	_GLIBCXX_USE_NOEXCEPT;
  #if __cpp_lib_exception_ptr_cast >= 202506L
        template<typename _Ex>
! 	friend constexpr const _Ex*
  	std::exception_ptr_cast(const exception_ptr&) noexcept;
  #endif
  
--- 143,149 ----
  	_GLIBCXX_USE_NOEXCEPT;
  #if __cpp_lib_exception_ptr_cast >= 202506L
        template<typename _Ex>
! 	friend constexpr optional<const _Ex&>
  	std::exception_ptr_cast(const exception_ptr&) noexcept;
  #endif
  
*************** namespace std _GLIBCXX_VISIBILITY(defaul
*** 352,361 ****
        return exception_ptr();
      }
  
! #if __cpp_lib_exception_ptr_cast >= 202506L
    template<typename _Ex>
      [[__gnu__::__always_inline__]]
!     constexpr const _Ex*
      exception_ptr_cast(const exception_ptr& __p) noexcept
      {
        static_assert(!std::is_const_v<_Ex>);
--- 356,365 ----
        return exception_ptr();
      }
  
! #if __cpp_lib_exception_ptr_cast >= 202603L
    template<typename _Ex>
      [[__gnu__::__always_inline__]]
!     constexpr optional<const _Ex&>
      exception_ptr_cast(const exception_ptr& __p) noexcept
      {
        static_assert(!std::is_const_v<_Ex>);
*************** namespace std _GLIBCXX_VISIBILITY(defaul
*** 369,375 ****
        // For runtime calls with -frtti enabled we can avoid try-catch overhead.
        if ! consteval {
  	const type_info &__id = typeid(const _Ex&);
! 	return static_cast<const _Ex*>(__p._M_exception_ptr_cast(__id));
        }
  #endif
  
--- 373,380 ----
        // For runtime calls with -frtti enabled we can avoid try-catch overhead.
        if ! consteval {
  	const type_info &__id = typeid(const _Ex&);
! 	const _Ex* __exp = static_cast<const _Ex*>(__p._M_exception_ptr_cast(__id));
! 	return optional<const _Ex&>::_S_from_ptr(__exp);
        }
  #endif
  
*************** namespace std _GLIBCXX_VISIBILITY(defaul
*** 381,394 ****
  	  }
  	catch (const _Ex& __exc)
  	  {
! 	    return &__exc;
  	  }
  	catch (...)
  	  {
  	  }
  #endif
  
!       return nullptr;
      }
  #endif
  
--- 386,399 ----
  	  }
  	catch (const _Ex& __exc)
  	  {
! 	    return optional<const _Ex&>(std::in_place, __exc);
  	  }
  	catch (...)
  	  {
  	  }
  #endif
  
!       return std::nullopt;
      }
  #endif
  
diff -Nrcpad gcc-17-20260628/libstdc++-v3/src/c++11/random.cc gcc-17-20260705/libstdc++-v3/src/c++11/random.cc
*** gcc-17-20260628/libstdc++-v3/src/c++11/random.cc	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libstdc++-v3/src/c++11/random.cc	Sun Jul  5 22:32:19 2026
*************** namespace std _GLIBCXX_VISIBILITY(defaul
*** 390,403 ****
      }
  #endif // _GLIBCXX_USE_CRT_RAND_S
  
  #ifdef USE_RDSEED
      if (which & rdseed)
      {
        unsigned int eax, ebx, ecx, edx;
        // Check availability of cpuid and, for now at least, also the
!       // CPU signature for Intel and AMD.
        if (__get_cpuid_max(0, &ebx) > 0
! 	  && (ebx == signature_INTEL_ebx || ebx == signature_AMD_ebx))
  	{
  	  // CPUID.(EAX=07H, ECX=0H):EBX.RDSEED[bit 18]
  	  __cpuid_count(7, 0, eax, ebx, ecx, edx);
--- 390,424 ----
      }
  #endif // _GLIBCXX_USE_CRT_RAND_S
  
+ #ifdef USE_RDRAND
+     // For the default device on Hygon prefer RDRAND (faster than RDSEED for
+     // bulk generation); an explicit "rdseed" token still selects rdseed below.
+     if (which == any)
+     {
+       unsigned int eax, ebx, ecx, edx;
+       if (__get_cpuid_max(0, &ebx) > 0 && ebx == signature_HYGON_ebx)
+ 	{
+ 	  // CPUID.01H:ECX.RDRAND[bit 30]
+ 	  __cpuid(1, eax, ebx, ecx, edx);
+ 	  if (ecx & bit_RDRND)
+ 	    {
+ 	      _M_func = &__x86_rdrand;
+ 	      return;
+ 	    }
+ 	}
+     }
+ #endif // USE_RDRAND
+ 
  #ifdef USE_RDSEED
      if (which & rdseed)
      {
        unsigned int eax, ebx, ecx, edx;
        // Check availability of cpuid and, for now at least, also the
!       // CPU signature for Intel, AMD and Hygon.
        if (__get_cpuid_max(0, &ebx) > 0
! 	  && (ebx == signature_INTEL_ebx
! 	      || ebx == signature_AMD_ebx
! 	      || ebx == signature_HYGON_ebx))
  	{
  	  // CPUID.(EAX=07H, ECX=0H):EBX.RDSEED[bit 18]
  	  __cpuid_count(7, 0, eax, ebx, ecx, edx);
*************** namespace std _GLIBCXX_VISIBILITY(defaul
*** 425,433 ****
      {
        unsigned int eax, ebx, ecx, edx;
        // Check availability of cpuid and, for now at least, also the
!       // CPU signature for Intel and AMD.
        if (__get_cpuid_max(0, &ebx) > 0
! 	  && (ebx == signature_INTEL_ebx || ebx == signature_AMD_ebx))
  	{
  	  // CPUID.01H:ECX.RDRAND[bit 30]
  	  __cpuid(1, eax, ebx, ecx, edx);
--- 446,456 ----
      {
        unsigned int eax, ebx, ecx, edx;
        // Check availability of cpuid and, for now at least, also the
!       // CPU signature for Intel, AMD and Hygon.
        if (__get_cpuid_max(0, &ebx) > 0
! 	  && (ebx == signature_INTEL_ebx
! 	      || ebx == signature_AMD_ebx
! 	      || ebx == signature_HYGON_ebx))
  	{
  	  // CPUID.01H:ECX.RDRAND[bit 30]
  	  __cpuid(1, eax, ebx, ecx, edx);
diff -Nrcpad gcc-17-20260628/libstdc++-v3/src/c++17/fs_ops.cc gcc-17-20260705/libstdc++-v3/src/c++17/fs_ops.cc
*** gcc-17-20260628/libstdc++-v3/src/c++17/fs_ops.cc	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libstdc++-v3/src/c++17/fs_ops.cc	Sun Jul  5 22:32:19 2026
***************
*** 56,61 ****
--- 56,63 ----
  #ifdef _GLIBCXX_FILESYSTEM_IS_WINDOWS
  # define WIN32_LEAN_AND_MEAN
  # include <windows.h>
+ # include <winioctl.h> // FSCTL_GET_REPARSE_POINT
+ # include <ntdef.h> // REPARSE_DATA_BUFFER
  #endif
  
  #define _GLIBCXX_BEGIN_NAMESPACE_FILESYSTEM namespace filesystem {
*************** fs::create_directory(const path& p, cons
*** 644,649 ****
--- 646,694 ----
  #endif
  }
  
+ #if defined(_GLIBCXX_FILESYSTEM_IS_WINDOWS) \
+     && defined(SYMBOLIC_LINK_FLAG_DIRECTORY)
+ namespace
+ {
+   void
+   windows_create_symlink(const fs::path& to, const fs::path& new_symlink,
+ 			 const fs::file_type target_type,
+ 			 std::error_code& ec) noexcept
+   {
+     DWORD symlink_type = target_type == fs::file_type::directory
+ 			 ? SYMBOLIC_LINK_FLAG_DIRECTORY : 0;
+     // Windows can't handle relative symlinks with non-preferred slashes.
+     // Creating the symlink will succeed, but the symlink won't resolve
+     // correctly in later operations.
+     const fs::path* preferred_to = &to;
+     fs::path to2;
+     if (to.native().find(L'/') != std::string::npos)
+       {
+ 	__try
+ 	  {
+ 	    to2 = to;
+ 	    to2.make_preferred();
+ 	    preferred_to = &to2;
+ 	  }
+ 	__catch (const std::bad_alloc&)
+ 	  {
+ 	    ec = std::make_error_code(std::errc::not_enough_memory);
+ 	    return;
+ 	  }
+       }
+     if (CreateSymbolicLinkW(new_symlink.c_str(), preferred_to->c_str(),
+ 			    symlink_type
+ 			    | SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE))
+       ec.clear();
+     else if (GetLastError() == ERROR_INVALID_PARAMETER
+ 	     && CreateSymbolicLinkW(new_symlink.c_str(), preferred_to->c_str(),
+ 				    symlink_type))
+       ec.clear();
+     else
+       ec = std::__last_system_error();
+   }
+ }
+ #endif
  
  void
  fs::create_directory_symlink(const path& to, const path& new_symlink)
*************** void
*** 659,668 ****
  fs::create_directory_symlink(const path& to, const path& new_symlink,
  			     error_code& ec) noexcept
  {
! #ifdef _GLIBCXX_FILESYSTEM_IS_WINDOWS
!   ec = std::make_error_code(std::errc::function_not_supported);
! #else
    create_symlink(to, new_symlink, ec);
  #endif
  }
  
--- 704,716 ----
  fs::create_directory_symlink(const path& to, const path& new_symlink,
  			     error_code& ec) noexcept
  {
! #ifdef _GLIBCXX_HAVE_SYMLINK
    create_symlink(to, new_symlink, ec);
+ #elif defined(_GLIBCXX_FILESYSTEM_IS_WINDOWS) \
+     && defined(SYMBOLIC_LINK_FLAG_DIRECTORY)
+   windows_create_symlink(to, new_symlink, file_type::directory, ec);
+ #else
+   ec = std::make_error_code(std::errc::function_not_supported);
  #endif
  }
  
*************** fs::create_symlink(const path& to, const
*** 715,720 ****
--- 763,771 ----
      ec.assign(errno, std::generic_category());
    else
      ec.clear();
+ #elif defined(_GLIBCXX_FILESYSTEM_IS_WINDOWS) \
+     && defined(SYMBOLIC_LINK_FLAG_DIRECTORY)
+   windows_create_symlink(to, new_symlink, file_type::regular, ec);
  #else
    ec = std::make_error_code(std::errc::function_not_supported);
  #endif
*************** namespace
*** 829,838 ****
    struct auto_win_file_handle
    {
      explicit
!     auto_win_file_handle(const wchar_t* p, std::error_code& ec) noexcept
      : handle(CreateFileW(p, 0,
  			 FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
! 			 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0)),
        ec(ec)
      {
        if (handle == INVALID_HANDLE_VALUE)
--- 880,893 ----
    struct auto_win_file_handle
    {
      explicit
!     auto_win_file_handle(const wchar_t* p, std::error_code& ec,
! 			 const bool follow_symlink = true) noexcept
      : handle(CreateFileW(p, 0,
  			 FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
! 			 0, OPEN_EXISTING,
! 			 (FILE_FLAG_BACKUP_SEMANTICS
! 			  | (follow_symlink ? 0 : FILE_FLAG_OPEN_REPARSE_POINT)),
! 			 0)),
        ec(ec)
      {
        if (handle == INVALID_HANDLE_VALUE)
*************** fs::proximate(const path& p, const path&
*** 1193,1198 ****
--- 1248,1321 ----
    return result;
  }
  
+ #if defined(_GLIBCXX_FILESYSTEM_IS_WINDOWS) \
+     && defined(SYMBOLIC_LINK_FLAG_DIRECTORY)
+ namespace
+ {
+   void
+   windows_read_symlink_handle(auto_win_file_handle& link_handle,
+ 			      std::error_code& ec,
+ 			      fs::path& result)
+   {
+     PREPARSE_DATA_BUFFER reparse_buffer = nullptr;
+     std::unique_ptr<char[]> big_buffer;
+ 
+     // Allocate enough memory on the stack to get the reparse data
+     // plus a 260 character path.  Should be sufficient in most cases.
+     // Allocate an extra wchar_t to ensure we can manually null terminate.
+     static constexpr size_t small_buffer_size = sizeof(REPARSE_DATA_BUFFER)
+ 						+ 260 * sizeof(wchar_t);
+     char small_buffer[small_buffer_size + sizeof(wchar_t)];
+     reparse_buffer = reinterpret_cast<PREPARSE_DATA_BUFFER>(&small_buffer[0]);
+     long unsigned int bytes_returned, big_buffer_size;
+ 
+     // Attempt to get the reparse data with the buffer on the stack
+     // before allocating the exact amount needed on the heap.
+     bool got_reparse_data = DeviceIoControl(link_handle.handle,
+ 					    FSCTL_GET_REPARSE_POINT,
+ 					    nullptr, 0,
+ 					    &small_buffer, small_buffer_size,
+ 					    &bytes_returned, nullptr);
+ 
+     int last_error = GetLastError();
+     if (!got_reparse_data && last_error == ERROR_MORE_DATA)
+       {
+ 	big_buffer_size = bytes_returned;
+ 	big_buffer.reset(new char[big_buffer_size + sizeof(wchar_t)]);
+ 	got_reparse_data = DeviceIoControl(link_handle.handle,
+ 					   FSCTL_GET_REPARSE_POINT,
+ 					   nullptr, 0,
+ 					   big_buffer.get(), big_buffer_size,
+ 					   &bytes_returned, nullptr);
+ 	if (!got_reparse_data)
+ 	  {
+ 	    ec = std::__last_system_error();
+ 	    return;
+ 	  }
+ 
+ 	reparse_buffer
+ 	  = reinterpret_cast<PREPARSE_DATA_BUFFER>(big_buffer.get());
+ 
+       }
+     else
+       {
+ 	if (!got_reparse_data)
+ 	  {
+ 	    ec = std::__last_system_error();
+ 	    return;
+ 	  }
+       }
+ 
+     ec.clear();
+     auto& symlink_buffer = reparse_buffer->SymbolicLinkReparseBuffer;
+     wchar_t* target_name = &symlink_buffer.PathBuffer[0];
+     target_name += symlink_buffer.PrintNameOffset / sizeof(wchar_t);
+     target_name[symlink_buffer.PrintNameLength / sizeof(wchar_t)] = L'\0';
+     result = target_name;
+   }
+ };
+ #endif // _GLIBCXX_FILESYSTEM_IS_WINDOWS
+ 
  fs::path
  fs::read_symlink(const path& p)
  {
*************** fs::path fs::read_symlink(const path& p,
*** 1248,1253 ****
--- 1371,1396 ----
  	bufsz *= 2;
      }
    while (true);
+ #elif defined(_GLIBCXX_FILESYSTEM_IS_WINDOWS) \
+       && defined(SYMBOLIC_LINK_FLAG_DIRECTORY)
+   auto_win_file_handle link_handle(p.c_str(), ec, false);
+   if (!link_handle)
+     return result;
+ 
+   int is_symlink = __detail::__is_handle_symlink(link_handle.handle);
+   if (is_symlink == -1)
+     {
+       ec = __last_system_error();
+       return result;
+     }
+ 
+   if (!is_symlink)
+     {
+       ec.assign(EINVAL, std::generic_category());
+       return result;
+     }
+ 
+   windows_read_symlink_handle(link_handle, ec, result);
  #else
    ec = std::make_error_code(std::errc::function_not_supported);
  #endif
*************** fs::remove(const path& p, error_code& ec
*** 1291,1298 ****
    auto st = symlink_status(p, ec);
    if (exists(st))
      {
!       if ((is_directory(p, ec) && RemoveDirectoryW(p.c_str()))
! 	  || DeleteFileW(p.c_str()))
  	{
  	  ec.clear();
  	  return true;
--- 1434,1447 ----
    auto st = symlink_status(p, ec);
    if (exists(st))
      {
!       if ((is_directory(st) || is_symlink(st))
! 	  && RemoveDirectoryW(p.c_str()))
! 	{
! 	  ec.clear();
! 	  return true;
! 	}
!       else if ((is_regular_file(st) || is_symlink(st))
! 	       && DeleteFileW(p.c_str()))
  	{
  	  ec.clear();
  	  return true;
*************** std::uintmax_t
*** 1320,1325 ****
--- 1469,1498 ----
  fs::remove_all(const path& p)
  {
    error_code ec;
+ #if _GLIBCXX_FILESYSTEM_IS_WINDOWS
+   if (p.empty())
+     return 0;
+   // The current opendir implementation on Windows always follows an initial
+   // symlink.  Therefore, if remove_all is called on a symlink,
+   // the target is removed.  Call remove if we have a symlink.
+   auto p_status = symlink_status(p, ec);
+   if (!exists(p_status))
+     {
+       int err = ec.default_error_condition().value();
+       bool not_found = !ec || is_not_found_errno(err);
+       if (!not_found)
+ 	_GLIBCXX_THROW_OR_ABORT(filesystem_error("cannot remove all",
+ 						 p, ec));
+       return 0;
+     }
+   if (is_symlink(p_status))
+     {
+       if (!remove(p, ec))
+ 	_GLIBCXX_THROW_OR_ABORT(filesystem_error("cannot remove all",
+ 						 p, ec));
+       return 1;
+     }
+ #endif
    uintmax_t count = 0;
    recursive_directory_iterator dir(p, directory_options{64|128}, ec);
    switch (ec.value()) // N.B. assumes ec.category() == std::generic_category()
*************** fs::remove_all(const path& p)
*** 1363,1368 ****
--- 1536,1569 ----
  std::uintmax_t
  fs::remove_all(const path& p, error_code& ec)
  {
+ #if _GLIBCXX_FILESYSTEM_IS_WINDOWS
+   if (p.empty())
+     {
+       ec.clear();
+       return 0;
+     }
+   // The current opendir implementation on Windows always follows an initial
+   // symlink.  Therefore, if remove_all is called on a symlink,
+   // the target is removed.  Call remove if we have a symlink.
+   auto p_status = symlink_status(p, ec);
+   if (!exists(p_status))
+     {
+       int err = ec.default_error_condition().value();
+       bool not_found = !ec || is_not_found_errno(err);
+       if (not_found)
+ 	{
+ 	  ec.clear();
+ 	  return 0;
+ 	}
+       return -1;
+     }
+   if (is_symlink(p_status))
+     {
+       if (remove(p, ec))
+ 	return 1;
+       return ec ? -1 : 0;
+     }
+ #endif
    uintmax_t count = 0;
    recursive_directory_iterator dir(p, directory_options{64|128}, ec);
    switch (ec.value()) // N.B. assumes ec.category() == std::generic_category()
diff -Nrcpad gcc-17-20260628/libstdc++-v3/src/c++20/tzdb.cc gcc-17-20260705/libstdc++-v3/src/c++20/tzdb.cc
*** gcc-17-20260628/libstdc++-v3/src/c++20/tzdb.cc	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libstdc++-v3/src/c++20/tzdb.cc	Sun Jul  5 22:32:19 2026
***************
*** 41,48 ****
  # include <ext/concurrence.h> // __gnu_cxx::__mutex
  #endif
  
! #if defined(_GLIBCXX_HAVE_READLINK) && defined(_GLIBCXX_HAVE_UNISTD_H)
! # include <unistd.h>  // readlink
  #endif
  
  #ifdef _AIX
--- 41,53 ----
  # include <ext/concurrence.h> // __gnu_cxx::__mutex
  #endif
  
! #ifdef _GLIBCXX_HAVE_UNISTD_H
! # include <unistd.h> // _XOPEN_VERSION
! #endif
! #if defined _GLIBCXX_USE_REALPATH && _XOPEN_VERSION >= 700
! # include <stdlib.h>   // malloc, free, realpath
! #else
! # include <filesystem> // filesystem::canonicalize
  #endif
  
  #ifdef _AIX
***************
*** 67,72 ****
--- 72,78 ----
  #endif
  
  #if USE_ATOMIC_SHARED_PTR && ! USE_ATOMIC_LIST_HEAD
+ // Cannot use atomic<shared_ptr<T>> without lock-free atomic<T*>.
  # error Unsupported combination
  #endif
  
*************** namespace std::chrono
*** 200,205 ****
--- 206,215 ----
  
      // This is here because _Node is a friend so can call private constructor.
      static const leap_second fixed_leaps[];
+ 
+     // This is a member so that it can access fixed_leaps.
+     struct NumLeapSeconds;
+     static NumLeapSeconds num_leap_seconds;
    };
  
    // Implementation of the private constructor used for the singleton object.
*************** namespace std::chrono
*** 684,689 ****
--- 694,840 ----
        }
  #endif
      };
+ 
+     const Rule*
+     find_active_rule(span<const Rule> rules, sys_seconds t, seconds std_offset)
+     {
+       struct Transition {
+ 	const Rule* rule;
+ 	sys_seconds when;
+       };
+ 
+       const year_month_day date(chrono::floor<days>(t));
+       // Expand the search window for a time near the end
+       // of the year which can be pushed to next/previous
+       // year by 'offset'. This assumes that 'offset' is
+       // never greater than 24h.
+       year first_year = date.year(), last_year = date.year();
+       if (std_offset.count() > 0)
+ 	if (date.month() == December && date.day() == day(31))
+ 	  ++last_year;
+       if (std_offset.count() < 0)
+ 	if (date.month() == January && date.day() == day(1))
+ 	  --first_year;
+ 
+       // Rule specifying start time as Wall time, should apply
+       // running 'save' accumulated by earlier rules. To handle
+       // that we firstly collect transitions surrounding specified
+       // time t, ignoring the 'save':
+       // * curr_tran - rule active directly before or at t,
+       // * prev_tran - rule transition before curr_tran
+       // * next_tran - rule transition directly after t
+       Transition prev_tran{nullptr, sys_seconds::min()};
+       Transition curr_tran{nullptr, sys_seconds::min()};
+       Transition next_tran{nullptr, sys_seconds::max()};
+       for (const auto& rule : rules)
+ 	{
+ 	  if (last_year < rule.from) // Rule doesn't apply yet at time t.
+ 	    break; // Rules are ordered by 'from' in ascending order.
+ 
+ 	  seconds offset{}; // appropriate for at_time::Universal
+ 	  if (rule.when.indicator == at_time::Wall
+ 	      || rule.when.indicator == at_time::Standard)
+ 	    offset = std_offset;
+ 
+ 	  // Times at which rule takes affect before (or equal) t,
+ 	  // and after t, respectively.
+ 	  sys_seconds start_before = sys_seconds::min();
+ 	  sys_seconds start_after = sys_seconds::max();
+ 	  auto for_year = [&](year y)
+ 	  {
+ 	    // Time the rule takes effect on year y:
+ 	    const sys_seconds rule_start = rule.start_time(y, offset);
+ 	    if (rule_start <= t)
+ 	      {
+ 		start_before = rule_start;
+ 		if (y == last_year && rule.to > y)
+ 		  start_after = rule.start_time(++y, offset);
+ 	      }
+ 	    // Do not override start_after set for first_year
+ 	    else if (rule_start < start_after)
+ 	      {
+ 		start_after = rule_start;
+ 		if (y == first_year && rule.from < y)
+ 		  start_before = rule.start_time(--y, offset);
+ 	      }
+ 	  };
+ 
+ 	  if (first_year > rule.to)
+ 	    // Rule no longer applies at time t, record last transition
+             start_before = rule.start_time(rule.to, offset);
+ 	  else if (first_year == last_year)
+ 	    for_year(first_year);
+ 	  else
+ 	   {
+ 	     // Local time may of t may be in prev/next year.
+ 	     if (first_year >= rule.from)
+ 	       for_year(first_year);
+ 	     if (last_year <= rule.to)
+ 	       for_year(last_year);
+ 	   }
+ 
+ 	  if (curr_tran.when < start_before)
+ 	    {
+ 	      prev_tran = curr_tran;
+ 	      curr_tran = {&rule, start_before};
+ 	    }
+ 	  else if (prev_tran.when < start_before)
+ 	    prev_tran = {&rule, start_before};
+ 
+ 	  if (start_after < next_tran.when)
+ 	    next_tran = {&rule, start_after};
+ 	}
+ 
+       // No rule was active at the time of t, running 'save'
+       // cannot change this output, as we have no save to apply.
+       if (!curr_tran.rule)
+ 	return nullptr;
+ 
+       auto cascade_save = [](const Rule* from, Transition& to)
+       {
+ 	if (!from || from->save == seconds(0))
+ 	  return false;
+ 	if (!to.rule || to.rule->when.indicator != at_time::Wall)
+ 	   return false;
+ 	to.when -= from->save;
+ 	return true;
+       };
+ 
+       if (cascade_save(curr_tran.rule, next_tran))
+ 	// Running save moved what we considered next_tran to time
+ 	// before or at t, in that case next_tran is active rule.
+ 	if (next_tran.when <= t)
+ 	  return next_tran.rule;
+ 
+       if (cascade_save(prev_tran.rule, curr_tran))
+ 	// Running save moved what we consider curr_tran to
+ 	// time after t, in that case prev_tran is active rule.
+ 	if (curr_tran.when > t)
+ 	  return prev_tran.rule;
+ 
+       return curr_tran.rule;
+     }
+ 
+     const Rule*
+     find_first_std(span<const Rule> rules)
+     {
+       auto is_std = [](const Rule& rule) { return !rule.save.count(); };
+       // Rules with same name are sorted by 'from' and then 'save' in ascending order.
+       auto it = ranges::find_if(rules, is_std);
+       if (it == rules.end())
+ 	return nullptr;
+ 
+       const Rule* first = &*it;
+       const year y = first->from;
+       for (const Rule& next : span<const Rule>(++it, rules.end()))
+ 	{
+ 	  if (!is_std(next) || next.from > y)
+ 	    break;
+ 	  if (next.start_time(y, {}) < first->start_time(y, {}))
+ 	    first = &next;
+ 	}
+       return first;
+     }
    } // namespace
  #endif // TZDB_DISABLED
  
*************** namespace std::chrono
*** 872,941 ****
  
      if (letters.empty())
        {
- 	sys_seconds t = info.begin - seconds(1);
- 	const year_month_day date(chrono::floor<days>(t));
- 
  	// Try to find a Rule active before this time, to get initial
  	// SAVE and LETTERS values. There may not be a Rule for the period
  	// before the first DST transition, so find the earliest DST->STD
  	// transition and use the LETTERS from that.
! 	const Rule* active_rule = nullptr;
! 	sys_seconds active_rule_start = sys_seconds::min();
! 	const Rule* first_std = nullptr;
! 	for (const auto& rule : rules)
! 	  {
! 	    if (rule.save == minutes(0))
! 	      {
! 		if (!first_std)
! 		  first_std = &rule;
! 		else if (rule.from < first_std->from)
! 		  first_std = &rule;
! 		else if (rule.from == first_std->from)
! 		  {
! 		    if (rule.start_time(rule.from, {})
! 			  < first_std->start_time(first_std->from, {}))
! 		      first_std = &rule;
! 		  }
! 	      }
! 
! 	    year y = date.year();
! 
! 	    if (y > rule.to) // rule no longer applies at time t
! 	      continue;
! 	    if (y < rule.from) // rule doesn't apply yet at time t
! 	      continue;
! 
! 	    sys_seconds rule_start;
! 
! 	    seconds offset{}; // appropriate for at_time::Universal
! 	    if (rule.when.indicator == at_time::Wall)
! 	      offset = info.offset;
! 	    else if (rule.when.indicator == at_time::Standard)
! 	      offset = ri.offset();
! 
! 	    // Time the rule takes effect this year:
! 	    rule_start = rule.start_time(y, offset);
! 
! 	    if (rule_start >= t && rule.from < y)
! 	      {
! 		// Try this rule in the previous year.
! 		rule_start = rule.start_time(--y, offset);
! 	      }
! 
! 	    if (active_rule_start < rule_start && rule_start < t)
! 	      {
! 		active_rule_start = rule_start;
! 		active_rule = &rule;
! 	      }
! 	  }
! 
! 	if (active_rule)
  	  {
  	    info.offset = ri.offset() + active_rule->save;
  	    info.save = chrono::duration_cast<minutes>(active_rule->save);
  	    letters = active_rule->letters;
  	  }
! 	else if (first_std)
  	  letters = first_std->letters;
        }
  
--- 1023,1039 ----
  
      if (letters.empty())
        {
  	// Try to find a Rule active before this time, to get initial
  	// SAVE and LETTERS values. There may not be a Rule for the period
  	// before the first DST transition, so find the earliest DST->STD
  	// transition and use the LETTERS from that.
! 	if (const Rule* active_rule = find_active_rule(rules, info.begin - seconds(1), ri.offset()))
  	  {
  	    info.offset = ri.offset() + active_rule->save;
  	    info.save = chrono::duration_cast<minutes>(active_rule->save);
  	    letters = active_rule->letters;
  	  }
! 	else if (const Rule* first_std = find_first_std(rules))
  	  letters = first_std->letters;
        }
  
*************** namespace
*** 1301,1312 ****
    // The expiry date corresponding to the list above.
    // tzdata 2026a leapseconds list expires at 2026-12-28 00:00:00 UTC
    constexpr seconds fixed_expiry{1798416000u};
- 
-   // This holds the most up-to-date number of leap seconds known at runtime.
-   // Initially zero, updated when _S_read_leap_seconds() is called.
-   constinit atomic<unsigned> num_leap_seconds{0};
  }
  
    namespace __detail
    {
      // Called by chrono::__detail::__get_leap_second_info in <chrono>
--- 1399,1492 ----
    // The expiry date corresponding to the list above.
    // tzdata 2026a leapseconds list expires at 2026-12-28 00:00:00 UTC
    constexpr seconds fixed_expiry{1798416000u};
  }
  
+ // This holds the most up-to-date number of leap seconds known at runtime.
+ // Initially zero, updated when _S_read_leap_seconds() is called.
+ struct tzdb_list::_Node::NumLeapSeconds
+ {
+   // Called by __recent_leap_second_info to read num_leap_seconds.
+   unsigned
+   get()
+   {
+ #if ATOMIC_INT_LOCK_FREE == 2
+     atomic_ref<unsigned> ref(count);
+     auto num = ref.load(memory_order::relaxed);
+ 
+     if (num == std::size(_Node::fixed_leaps))
+       // A leapseconds file has been read and has no new leap seconds.
+       return num;
+ 
+     if (num == 0)
+       // No leapseconds file has been read yet.
+       return 0;
+ 
+     // The tzdb_list has been initialized and contains a tzdb object with
+     // new leap seconds, which the caller is going to use.
+     // The relaxed load above does not synchronize with anything, so to
+     // ensure that the get_tzdb_list() in the caller will see a tzdb object
+     // set by _S_replace_head, we load num_leap_seconds again with acquire
+     // ordering:
+     return ref.load(memory_order::acquire);
+ #else
+     lock_guard<mutex> l(list_mutex()); // This ensures acquire ordering.
+     return count;
+ #endif
+   }
+ 
+   // Called by __recent_leap_second_info to set num_leap_seconds when
+   // we have determined there are no new leap seconds in a leapseconds file.
+   void
+   set_to_fixed_size()
+   {
+ #if ATOMIC_INT_LOCK_FREE == 2
+     atomic_ref<unsigned> ref(count);
+     unsigned expected = 0;
+     ref.compare_exchange_strong(expected, std::size(_Node::fixed_leaps),
+ 				memory_order::relaxed);
+ #else
+     lock_guard<mutex> l(list_mutex());
+     if (count == 0)
+       count = std::size(_Node::fixed_leaps);
+ #endif
+   }
+ 
+   // Called by _Node::_S_replace_head
+   // The two versions are named differently so that caller has to be explicit
+   // about which version it calls, based on whether the mutex is held.
+   void
+   set(unsigned val)
+   {
+ #if ATOMIC_INT_LOCK_FREE == 2
+     atomic_ref<unsigned> ref(count);
+     // The release op here synchronizes with the acquire op in get().
+     ref.store(val, memory_order::release);
+ #else
+     lock_guard<mutex> l(list_mutex());
+     count = val;
+ #endif
+   }
+ 
+   void
+   set_locked(unsigned val, const lock_guard<mutex>&)
+   {
+ #if ATOMIC_INT_LOCK_FREE == 2
+     // Even though the caller locked the mutex, we still need to use an
+     // atomic store in this case, because there could be concurrent loads.
+     set(val);
+ #else
+     // The only caller of this function locks list_mutex() so we would
+     // deadlock if we locked it again here.
+     count = val;
+ #endif
+   }
+ 
+ private:
+   unsigned count = 0;
+ };
+ 
+ constinit tzdb_list::_Node::NumLeapSeconds tzdb_list::_Node::num_leap_seconds;
+ 
    namespace __detail
    {
      // Called by chrono::__detail::__get_leap_second_info in <chrono>
*************** namespace
*** 1368,1386 ****
  
        constexpr auto num_fixed_leaps = std::size(_Node::fixed_leaps);
  
!       auto num_leaps = num_leap_seconds.load(memory_order::relaxed);
        if (num_leaps == num_fixed_leaps)
  	// A leapseconds file has been read and has no new leap seconds:
  	return update_info(_Node::fixed_leaps);
!       else if (num_leaps != 0)
! 	// The tzdb_list has been initialized and contains a tzdb object
! 	// with new leap seconds, which we want to use here.
! 	// The relaxed load above does not synchronize with anything, so to
! 	// ensure that the get_tzdb_list() below will see a tzdb object set
! 	// by _S_replace_head, we load num_leap_seconds again with acquire
! 	// ordering:
! 	(void) num_leap_seconds.load(memory_order::acquire);
!       else
  	{
  	  // The tzdb_list has not been initialized yet, so we don't know
  	  // the correct number of leap seconds.
--- 1548,1558 ----
  
        constexpr auto num_fixed_leaps = std::size(_Node::fixed_leaps);
  
!       auto num_leaps = _Node::num_leap_seconds.get();
        if (num_leaps == num_fixed_leaps)
  	// A leapseconds file has been read and has no new leap seconds:
  	return update_info(_Node::fixed_leaps);
!       else if (num_leaps == 0)
  	{
  	  // The tzdb_list has not been initialized yet, so we don't know
  	  // the correct number of leap seconds.
*************** namespace
*** 1389,1399 ****
  	  // to parse all of tzdata.zi and initialize a whole tzdb object.
  	  if (_Node::_S_read_leap_seconds().first.size() == num_fixed_leaps)
  	    {
! 	      // There are no new leap seconds. remember that so that the next
  	      // call to this function can just use fixed_leaps.
! 	      num_leap_seconds.compare_exchange_strong(num_leaps,
! 						       num_fixed_leaps,
! 						       memory_order::relaxed);
  	      return update_info(_Node::fixed_leaps);
  	    }
  	  // else there are new leap seconds. We init tzdb_list so that the
--- 1561,1569 ----
  	  // to parse all of tzdata.zi and initialize a whole tzdb object.
  	  if (_Node::_S_read_leap_seconds().first.size() == num_fixed_leaps)
  	    {
! 	      // There are no new leap seconds. Remember that so that the next
  	      // call to this function can just use fixed_leaps.
! 	      _Node::num_leap_seconds.set_to_fixed_size();
  	      return update_info(_Node::fixed_leaps);
  	    }
  	  // else there are new leap seconds. We init tzdb_list so that the
*************** namespace
*** 1525,1532 ****
  	new_head_ptr->next = curr;
        }
      // XXX small window here where _S_head_cache still points to previous tzdb.
  #else
!     lock_guard<mutex> l(list_mutex());
      if (const _Node* h = _S_head_owner.get())
        {
  	if (h->db.version == new_head_ptr->db.version)
--- 1695,1707 ----
  	new_head_ptr->next = curr;
        }
      // XXX small window here where _S_head_cache still points to previous tzdb.
+     _S_cache_list_head(new_head_ptr);
+ 
+     // This allows __recent_leap_second_info() to know that it can use
+     // get_tzdb_list()->begin()->leap_seconds to get new leap seconds.
+     num_leap_seconds.set(new_head_ptr->db.leap_seconds.size());
  #else
!     lock_guard<mutex> lock(list_mutex());
      if (const _Node* h = _S_head_owner.get())
        {
  	if (h->db.version == new_head_ptr->db.version)
*************** namespace
*** 1534,1547 ****
  	new_head_ptr->next = _S_head_owner;
        }
      _S_head_owner = std::move(new_head);
- #endif
      _S_cache_list_head(new_head_ptr);
  
!     // This allows __recent_leap_second_info() to know that it can use
!     // get_tzdb_list()->begin()->leap_seconds to get new leap seconds.
!     // The release op here synchronizes with the acquire op there.
!     num_leap_seconds.store(new_head_ptr->db.leap_seconds.size(),
! 			   memory_order::release);
  
      return new_head_ptr->db;
    }
--- 1709,1718 ----
  	new_head_ptr->next = _S_head_owner;
        }
      _S_head_owner = std::move(new_head);
      _S_cache_list_head(new_head_ptr);
  
!     num_leap_seconds.set_locked(new_head_ptr->db.leap_seconds.size(), lock);
! #endif
  
      return new_head_ptr->db;
    }
*************** namespace
*** 1752,1758 ****
  
      ranges::sort(node->db.zones, {}, &time_zone::name);
      ranges::sort(node->db.links, {}, &time_zone_link::name);
!     ranges::stable_sort(node->rules, {}, &Rule::name);
  
      return Node::_S_replace_head(std::move(head), std::move(node));
  #else
--- 1923,1936 ----
  
      ranges::sort(node->db.zones, {}, &time_zone::name);
      ranges::sort(node->db.links, {}, &time_zone_link::name);
!     ranges::sort(node->rules, [](const Rule& lhs, const Rule& rhs)
!     {
!       if (auto result = lhs.name <=> rhs.name; result != 0)
! 	return result < 0;
!       if (auto result = lhs.from <=> rhs.from; result != 0)
! 	return result < 0;
!       return lhs.save < rhs.save;
!     });
  
      return Node::_S_replace_head(std::move(head), std::move(node));
  #else
*************** namespace
*** 2029,2086 ****
      // to have a way to force a re-read.
  
  #if !defined(_AIX) && !defined(_GLIBCXX_HAVE_WINDOWS_H)
- #if defined(_GLIBCXX_HAVE_READLINK) && defined(_GLIBCXX_HAVE_UNISTD_H)
-     string_view str;
-     char buf[128]; // strlen("../usr/share/zoneinfo/...") is usually < 55
-     string dynbuf;
      // /etc/localtime should be a symlink that ends with a zone name,
      // e.g. /etc/localtime -> /usr/share/zoneinfo/Europe/London
      // https://www.freedesktop.org/software/systemd/man/latest/localtime.html
      // This should work on GNU/Linux, macOS, NetBSD, and OpenBSD.
!     // Some FreeBSD systems also use a symlink for /etc/localtime.
!     // Use readlink directly to avoid std::filesystem overhead.
!     if (auto n = ::readlink("/etc/localtime", buf, sizeof(buf)); n > 0)
        {
! 	if (static_cast<size_t>(n) < sizeof(buf))
! 	  str = string_view(buf, n);
! 	else [[unlikely]]
! 	  {
! 	    // We read the symlink but it didn't fit in buf[], use dynbuf.
! 	    do
! 	      {
! 		n *= 2;
! 		dynbuf.__resize_and_overwrite(n, [](char* p, size_t len) {
! 		  auto n2 = ::readlink("/etc/localtime", p, len);
! 		  if (n2 == -1) // symlink removed or replaced by file?!
! 		    __throw_runtime_error("tzdb: error reading /etc/localtime");
! 		  const size_t r = n2;
! 		  return r < len ? r : 0;
! 		});
! 	      }
! 	    while (dynbuf.empty());
! 	    str = dynbuf;
! 	  }
        }
  
!     if (!str.empty())
        {
- 	// Remove any redundant slashes so we can match zone names.
- 	// e.g. /usr/share/zoneinfo/Europe//London is a valid symlink,
- 	// but won't match against "Europe/London".
- 	if (auto pos = str.rfind("//"); pos != str.npos) [[unlikely]]
- 	  {
- 	    if (str.data() != dynbuf.data())
- 	      dynbuf = str;
- 	    string::size_type spos = pos;
- 	    do
- 	      {
- 		dynbuf.erase(spos, 1);
- 		spos = dynbuf.rfind("//", spos);
- 	      }
- 	    while (spos != dynbuf.npos);
- 	    str = dynbuf;
- 	  }
- 
  	// Check the trailing components of the path against known zone names.
  	// Valid IANA times zones can have one, two, or three parts, e.g.
  	// "UTC", "Europe/London", and "America/Indiana/Indianapolis".
--- 2207,2239 ----
      // to have a way to force a re-read.
  
  #if !defined(_AIX) && !defined(_GLIBCXX_HAVE_WINDOWS_H)
      // /etc/localtime should be a symlink that ends with a zone name,
      // e.g. /etc/localtime -> /usr/share/zoneinfo/Europe/London
      // https://www.freedesktop.org/software/systemd/man/latest/localtime.html
      // This should work on GNU/Linux, macOS, NetBSD, and OpenBSD.
!     // Some FreeBSD systems also use a symlink for /etc/localtime (since 15.0).
! 
!     // N.B. we do not support dangling symlinks here. If that becomes necessary
!     // then after realpath fails we could fallback to using
!     // filesystem::weakly_canonical(filesystem::read_symlink("etc/localtime")).
! 
!     string_view str;
! #if defined _GLIBCXX_USE_REALPATH && _XOPEN_VERSION >= 700
!     unique_ptr<char[], void(*)(void*)> cbuf{ nullptr, &::free };
!     // Use realpath directly to avoid std::filesystem overhead.
!     // We use realpath not readlink to resolve multiple levels of symlinks.
!     if (char* p = ::realpath("/etc/localtime", nullptr))
        {
! 	cbuf.reset(p);
! 	str = p;
        }
+ #else
+     string sbuf = std::filesystem::canonical("/etc/localtime").string();
+     str = sbuf;
+ #endif
  
!     if (!str.empty() && str != "/etc/localtime")
        {
  	// Check the trailing components of the path against known zone names.
  	// Valid IANA times zones can have one, two, or three parts, e.g.
  	// "UTC", "Europe/London", and "America/Indiana/Indianapolis".
*************** namespace
*** 2106,2115 ****
  				     str.substr(pos + 1)))
  	  return tz;
        }
! #endif
      // Otherwise, look for a file naming the time zone.
      string_view files[] {
!       "/etc/timezone",    // Debian derivates
        "/var/db/zoneinfo", // FreeBSD
      };
      for (auto f : files)
--- 2259,2268 ----
  				     str.substr(pos + 1)))
  	  return tz;
        }
! 
      // Otherwise, look for a file naming the time zone.
      string_view files[] {
!       "/etc/timezone",    // Debian derivates, non-systemd Gentoo
        "/var/db/zoneinfo", // FreeBSD
      };
      for (auto f : files)
*************** namespace
*** 2365,2371 ****
  	    {
  	      if (c = in.get(); c == '<' || c == '>')
  		if (in.get() == '=')
! 	          if (unsigned d; (in >> d) && (d <= 31)) [[likely]]
  		    {
  		      on.kind = c == '<' ? LessEq : GreaterEq;
  		      on.day_of_week = w.wd.c_encoding();
--- 2518,2524 ----
  	    {
  	      if (c = in.get(); c == '<' || c == '>')
  		if (in.get() == '=')
! 		  if (unsigned d; (in >> d) && (d <= 31)) [[likely]]
  		    {
  		      on.kind = c == '<' ? LessEq : GreaterEq;
  		      on.day_of_week = w.wd.c_encoding();
diff -Nrcpad gcc-17-20260628/libstdc++-v3/src/filesystem/ops-common.h gcc-17-20260705/libstdc++-v3/src/filesystem/ops-common.h
*** gcc-17-20260628/libstdc++-v3/src/filesystem/ops-common.h	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libstdc++-v3/src/filesystem/ops-common.h	Sun Jul  5 22:32:19 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 105,110 ****
--- 105,205 ----
  
  namespace filesystem
  {
+ #ifdef _GLIBCXX_FILESYSTEM_IS_WINDOWS
+ namespace __detail
+ {
+ #define S_IFLNK 0xC000
+ #define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
+ 
+   using stat_type = struct ::__stat64;
+ 
+   inline HANDLE __open_for_stat(const wchar_t* path, bool following_symlinks)
+   {
+     constexpr auto share_flags
+       = FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE;
+     auto file_flags = FILE_FLAG_BACKUP_SEMANTICS;
+     if (!following_symlinks)
+       file_flags |= FILE_FLAG_OPEN_REPARSE_POINT;
+     HANDLE handle
+       = CreateFileW(path, 0, share_flags, 0, OPEN_EXISTING, file_flags, 0);
+ 
+     if (handle == INVALID_HANDLE_VALUE)
+       {
+ 	// CreateFileW does not set errno.
+ 	errno = std::__last_system_error().default_error_condition().value();
+       }
+ 
+     return handle;
+   }
+ 
+   // _fstat64 in mingw-w64 does not know about symlinks and before v14.0.0
+   // it does not know about directories.
+   // We use GetFileInformationByHandleEx to check whether the HANDLE refers
+   // to a symlink or directory, then fix the result of _fstat64 accordingly.
+   enum class FileType { Err = -1, Dir = S_IFDIR, Link = S_IFLNK, Other = 0 };
+ 
+   inline FileType __check_handle_type(HANDLE handle, bool following_symlinks)
+   {
+ #ifdef SYMBOLIC_LINK_FLAG_DIRECTORY
+     FILE_ATTRIBUTE_TAG_INFO type_info;
+     if (!GetFileInformationByHandleEx(handle, FileAttributeTagInfo,
+ 				      &type_info, sizeof(type_info)))
+       {
+ 	errno = std::__last_system_error().default_error_condition().value();
+ 	return FileType::Err;
+       }
+     // A directory symlink has both DIRECTORY and REPARSE_POINT set,
+     // so to detect a symlink we need to check for REPARSE_POINT first.
+     if (!following_symlinks)
+       if (type_info.FileAttributes & FILE_ATTRIBUTE_REPARSE_POINT
+ 	     && type_info.ReparseTag == IO_REPARSE_TAG_SYMLINK)
+ 	return FileType::Link;
+     if (type_info.FileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+       return FileType::Dir;
+ #endif
+     return FileType::Other;
+   }
+ 
+   // -1 error, 0 not a symlink, 1 a symlink
+   inline int __is_handle_symlink(HANDLE handle)
+   {
+     FileType type = __check_handle_type(handle, false);
+     if (type == FileType::Err)
+       return -1;
+     return type == FileType::Link;
+   }
+ 
+   inline int __stat_windows(const wchar_t* path, stat_type* buffer,
+ 			    bool following_symlinks)
+   {
+     HANDLE handle = __open_for_stat(path, following_symlinks);
+     if (handle == INVALID_HANDLE_VALUE)
+       return -1;
+     // Manually check for directory or symlink, because _fstat does not.
+     FileType type = __check_handle_type(handle, following_symlinks);
+     if (type == FileType::Err)
+       {
+ 	CloseHandle(handle);
+ 	return -1;
+       }
+     int fd = ::_open_osfhandle((intptr_t)handle, _O_RDONLY);
+     if (fd == -1)
+       {
+ 	CloseHandle(handle);
+ 	return -1;
+       }
+     int stat_result = ::_fstat64(fd, buffer);
+     if (stat_result != -1 && type != FileType::Other)
+       {
+ 	// Clear the previous file type.
+ 	buffer->st_mode &= ~S_IFMT;
+ 	buffer->st_mode |= (::mode_t)type;
+       }
+     ::_close(fd);
+     return stat_result;
+   }
+ }
+ #endif
  namespace __gnu_posix
  {
  #ifdef _GLIBCXX_FILESYSTEM_IS_WINDOWS
*************** namespace __gnu_posix
*** 121,133 ****
    using stat_type = struct ::__stat64;
  
    inline int stat(const wchar_t* path, stat_type* buffer)
!   { return ::_wstat64(path, buffer); }
  
    inline int lstat(const wchar_t* path, stat_type* buffer)
!   {
!     // FIXME: symlinks not currently supported
!     return stat(path, buffer);
!   }
  
    using ::mode_t;
  
--- 216,229 ----
    using stat_type = struct ::__stat64;
  
    inline int stat(const wchar_t* path, stat_type* buffer)
!   { return __detail::__stat_windows(path, buffer, true); }
  
    inline int lstat(const wchar_t* path, stat_type* buffer)
! #ifdef SYMBOLIC_LINK_FLAG_DIRECTORY
!   { return __detail::__stat_windows(path, buffer, false); }
! #else
!   { return stat(path, buffer); }
! #endif
  
    using ::mode_t;
  
diff -Nrcpad gcc-17-20260628/libstdc++-v3/testsuite/18_support/exception_ptr/exception_ptr_cast.cc gcc-17-20260705/libstdc++-v3/testsuite/18_support/exception_ptr/exception_ptr_cast.cc
*** gcc-17-20260628/libstdc++-v3/testsuite/18_support/exception_ptr/exception_ptr_cast.cc	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libstdc++-v3/testsuite/18_support/exception_ptr/exception_ptr_cast.cc	Sun Jul  5 22:32:19 2026
***************
*** 22,29 ****
  #include <exception>
  #include <testsuite_hooks.h>
  
! #if __cpp_lib_exception_ptr_cast != 202506L
! # error "__cpp_lib_exception_ptr_cast != 202506"
  #endif
  
  struct A { int a; };
--- 22,29 ----
  #include <exception>
  #include <testsuite_hooks.h>
  
! #if __cpp_lib_exception_ptr_cast != 202603L
! # error "__cpp_lib_exception_ptr_cast != 202606"
  #endif
  
  struct A { int a; };
*************** struct G : virtual F, virtual C, virtual
*** 36,57 ****
    constexpr G () : g (4) { a = 1; e = 2; f = 3; } int g;
  };
  
  constexpr bool test01(bool x)
  {
    auto a = std::make_exception_ptr(C{ 42 });
    auto b = std::exception_ptr_cast<C>(a);
!   VERIFY( b != nullptr );
    VERIFY( b->a == 42 );
    auto c = std::exception_ptr_cast<B>(a);
!   VERIFY( c == static_cast<const B*>(b) );
    auto d = std::exception_ptr_cast<A>(a);
!   VERIFY( d == static_cast<const A*>(b) );
    auto e = std::exception_ptr_cast<D>(a);
!   VERIFY( e == nullptr );
    auto f = std::make_exception_ptr(42L);
    auto g = std::exception_ptr_cast<long>(f);
!   VERIFY( g != nullptr );
    VERIFY( *g == 42L );
    try
      {
        throw G ();
--- 36,68 ----
    constexpr G () : g (4) { a = 1; e = 2; f = 3; } int g;
  };
  
+ // Convertible to optional<const Y&>
+ struct Y
+ {
+   constexpr operator std::optional<const Y&>() const
+   { return std::nullopt; }
+ };
+ 
  constexpr bool test01(bool x)
  {
    auto a = std::make_exception_ptr(C{ 42 });
    auto b = std::exception_ptr_cast<C>(a);
!   auto bp = &*b;
!   VERIFY( b );
    VERIFY( b->a == 42 );
    auto c = std::exception_ptr_cast<B>(a);
!   VERIFY( c );
!   VERIFY( &*c == static_cast<const B*>(bp) );
    auto d = std::exception_ptr_cast<A>(a);
!   VERIFY( d );
!   VERIFY( &*d == static_cast<const A*>(bp) );
    auto e = std::exception_ptr_cast<D>(a);
!   VERIFY( !e );
    auto f = std::make_exception_ptr(42L);
    auto g = std::exception_ptr_cast<long>(f);
!   VERIFY( g );
    VERIFY( *g == 42L );
+ 
    try
      {
        throw G ();
*************** constexpr bool test01(bool x)
*** 64,82 ****
        auto h = std::current_exception();
  #endif
        auto i = std::exception_ptr_cast<G>(h);
!       VERIFY( i != nullptr );
        VERIFY( i->a == 1 && i->e == 2 && i->f == 3 && i->g == 4 );
        auto j = std::exception_ptr_cast<A>(h);
!       VERIFY( j == static_cast<const A*>(i) );
        auto k = std::exception_ptr_cast<C>(h);
!       VERIFY( k == static_cast<const C*>(i) );
        auto l = std::exception_ptr_cast<E>(h);
!       VERIFY( l == static_cast<const E*>(i) );
        auto m = std::exception_ptr_cast<F>(h);
!       VERIFY( m == static_cast<const F*>(i) );
        auto n = std::exception_ptr_cast<G>(a);
!       VERIFY( n == nullptr );
      }
    if (x)
      throw 1;
    return true;
--- 75,103 ----
        auto h = std::current_exception();
  #endif
        auto i = std::exception_ptr_cast<G>(h);
!       VERIFY( i );
        VERIFY( i->a == 1 && i->e == 2 && i->f == 3 && i->g == 4 );
+       auto ip = &*i;
        auto j = std::exception_ptr_cast<A>(h);
!       VERIFY( j );
!       VERIFY( &*j == static_cast<const A*>(ip) );
        auto k = std::exception_ptr_cast<C>(h);
!       VERIFY( k );
!       VERIFY( &*k == static_cast<const C*>(ip) );
        auto l = std::exception_ptr_cast<E>(h);
!       VERIFY( l );
!       VERIFY( &*l == static_cast<const E*>(ip) );
        auto m = std::exception_ptr_cast<F>(h);
!       VERIFY( m );
!       VERIFY( &*m == static_cast<const F*>(ip) );
        auto n = std::exception_ptr_cast<G>(a);
!       VERIFY( !n );
      }
+   
+   auto o = std::make_exception_ptr(Y{});
+   auto p = std::exception_ptr_cast<Y>(o);
+   VERIFY( p );
+ 
    if (x)
      throw 1;
    return true;
diff -Nrcpad gcc-17-20260628/libstdc++-v3/testsuite/20_util/allocator/allocate_at_least.cc gcc-17-20260705/libstdc++-v3/testsuite/20_util/allocator/allocate_at_least.cc
*** gcc-17-20260628/libstdc++-v3/testsuite/20_util/allocator/allocate_at_least.cc	Sun Jun 28 22:32:19 2026
--- gcc-17-20260705/libstdc++-v3/testsuite/20_util/allocator/allocate_at_least.cc	Sun Jul  5 22:32:19 2026
*************** void extra()
*** 73,89 ****
      VERIFY(n == __STDCPP_DEFAULT_NEW_ALIGNMENT__);
      SatC::deallocate(satc, p, n);
    }
!   {
!     auto [p, n] = SatC::allocate_at_least(satc, 2);
!     VERIFY(n == __STDCPP_DEFAULT_NEW_ALIGNMENT__);
!     SatC::deallocate(satc, p, n);
!   }
!   {
!     auto [p, n] =
!       SatC::allocate_at_least(satc, __STDCPP_DEFAULT_NEW_ALIGNMENT__ - 1);
!     VERIFY(n == __STDCPP_DEFAULT_NEW_ALIGNMENT__);
!     SatC::deallocate(satc, p, n);
!   }
    {
      auto [p, n] = SatC::allocate_at_least(
  	satc, __STDCPP_DEFAULT_NEW_ALIGNMENT__);
--- 73,91 ----
      VERIFY(n == __STDCPP_DEFAULT_NEW_ALIGNMENT__);
      SatC::deallocate(satc, p, n);
    }
!   if constexpr (__STDCPP_DEFAULT_NEW_ALIGNMENT__ >= 2)
!     {
!       auto [p, n] = SatC::allocate_at_least(satc, 2);
!       VERIFY(n == __STDCPP_DEFAULT_NEW_ALIGNMENT__);
!       SatC::deallocate(satc, p, n);
!     }
!   if constexpr (__STDCPP_DEFAULT_NEW_ALIGNMENT__ > 1)
!     {
!       auto [p, n] =
! 	SatC::allocate_at_least(satc, __STDCPP_DEFAULT_NEW_ALIGNMENT__ - 1);
!       VERIFY(n == __STDCPP_DEFAULT_NEW_ALIGNMENT__);
!       SatC::deallocate(satc, p, n);
!     }
    {
      auto [p, n] = SatC::allocate_at_least(
  	satc, __STDCPP_DEFAULT_NEW_ALIGNMENT__);
*************** void extra()
*** 91,167 ****
      SatC::deallocate(satc, p, n);
    }
  
!   using SatS = std::allocator_traits<std::allocator<short>>;
!   std::allocator<short> sats;
!   {
!     auto [p, n] = SatS::allocate_at_least(sats, 1);
!     VERIFY(n == __STDCPP_DEFAULT_NEW_ALIGNMENT__ / sizeof(short));
!     SatS::deallocate(sats, p, n);
!   }
!   {
!     auto [p, n] = SatS::allocate_at_least(sats, 2);
!     VERIFY(n == __STDCPP_DEFAULT_NEW_ALIGNMENT__ / sizeof(short));
!     SatS::deallocate(sats, p, n);
!   }
!   {
!     auto [p, n] = SatS::allocate_at_least(sats,
! 	(__STDCPP_DEFAULT_NEW_ALIGNMENT__ - 1) / sizeof(short));
!     VERIFY(n == __STDCPP_DEFAULT_NEW_ALIGNMENT__ / sizeof(short));
!     SatS::deallocate(sats, p, n);
!   }
!   {
!     auto [p, n] = SatS::allocate_at_least(sats,
! 	__STDCPP_DEFAULT_NEW_ALIGNMENT__ / sizeof(short));
!     VERIFY(n == __STDCPP_DEFAULT_NEW_ALIGNMENT__ / sizeof(short));
!     SatS::deallocate(sats, p, n);
!   }
  
!   struct A3 { char s[3]; };
!   using SatA3 = std::allocator_traits<std::allocator<A3>>;
!   std::allocator<A3> sata3;
!   {
!     auto [p, n] = SatA3::allocate_at_least(sata3, 1);
!     VERIFY(n == __STDCPP_DEFAULT_NEW_ALIGNMENT__ / sizeof(A3));
!     SatA3::deallocate(sata3, p, n);
!   }
!   {
!     auto [p, n] = SatA3::allocate_at_least(sata3, 2);
!     VERIFY(n == __STDCPP_DEFAULT_NEW_ALIGNMENT__ / sizeof(A3));
!     SatA3::deallocate(sata3, p, n);
!   }
!   {
!     auto [p, n] = SatA3::allocate_at_least(sata3,
! 	(__STDCPP_DEFAULT_NEW_ALIGNMENT__ - 1) / sizeof(A3));
!     VERIFY(n == __STDCPP_DEFAULT_NEW_ALIGNMENT__ / sizeof(A3));
!     SatA3::deallocate(sata3, p, n);
!   }
!   {
!     auto [p, n] = SatA3::allocate_at_least(sata3,
! 	__STDCPP_DEFAULT_NEW_ALIGNMENT__ / sizeof(A3));
!     VERIFY(n == __STDCPP_DEFAULT_NEW_ALIGNMENT__ / sizeof(A3));
!     SatA3::deallocate(sata3, p, n);
!   }
  
!   struct Anm1 { char s[__STDCPP_DEFAULT_NEW_ALIGNMENT__ - 1]; };
!   using SatAnm1 = std::allocator_traits<std::allocator<Anm1>>;
!   std::allocator<Anm1> satanm1;
!   {
!     auto [p, n] = SatAnm1::allocate_at_least(satanm1, 1);
!     VERIFY(n == 1);
!     SatAnm1::deallocate(satanm1, p, n);
!   }
!   {
!     auto [p, n] = SatAnm1::allocate_at_least(satanm1,
! 	__STDCPP_DEFAULT_NEW_ALIGNMENT__);
!     VERIFY(n == __STDCPP_DEFAULT_NEW_ALIGNMENT__);
!     SatAnm1::deallocate(satanm1, p, n);
!   }
!   {
!     auto [p, n] = SatAnm1::allocate_at_least(satanm1,
! 	__STDCPP_DEFAULT_NEW_ALIGNMENT__ - 1);
!     VERIFY(n == __STDCPP_DEFAULT_NEW_ALIGNMENT__);
!     SatAnm1::deallocate(satanm1, p, n);
!   }
  }
  
  int main()
--- 93,186 ----
      SatC::deallocate(satc, p, n);
    }
  
!   if constexpr (__STDCPP_DEFAULT_NEW_ALIGNMENT__ > 2)
!     {
!       struct A2 { char s[2]; };
!       using SatA2 = std::allocator_traits<std::allocator<A2>>;
!       std::allocator<A2> sats;
!       if (sizeof(A2) <= __STDCPP_DEFAULT_NEW_ALIGNMENT__)
!       {
! 	auto [p, n] = SatA2::allocate_at_least(sats, 1);
! 	VERIFY(n == __STDCPP_DEFAULT_NEW_ALIGNMENT__ / sizeof(A2));
! 	SatA2::deallocate(sats, p, n);
!       }
!       if (2*sizeof(A2) < __STDCPP_DEFAULT_NEW_ALIGNMENT__)
!       {
! 	auto [p, n] = SatA2::allocate_at_least(sats, 2);
! 	VERIFY(n == __STDCPP_DEFAULT_NEW_ALIGNMENT__ / sizeof(A2));
! 	SatA2::deallocate(sats, p, n);
!       }
!       if ((__STDCPP_DEFAULT_NEW_ALIGNMENT__ - 1) / sizeof(A2) > 0)
!       {
! 	auto [p, n] = SatA2::allocate_at_least(sats,
! 	    (__STDCPP_DEFAULT_NEW_ALIGNMENT__ - 1) / sizeof(A2));
! 	VERIFY(n == __STDCPP_DEFAULT_NEW_ALIGNMENT__ / sizeof(A2));
! 	SatA2::deallocate(sats, p, n);
!       }
!       if (__STDCPP_DEFAULT_NEW_ALIGNMENT__ / sizeof(A2) > 0)
!       {
! 	auto [p, n] = SatA2::allocate_at_least(sats,
! 	    __STDCPP_DEFAULT_NEW_ALIGNMENT__ / sizeof(A2));
! 	VERIFY(n == __STDCPP_DEFAULT_NEW_ALIGNMENT__ / sizeof(A2));
! 	SatA2::deallocate(sats, p, n);
!       }
!     }
  
!   if constexpr (__STDCPP_DEFAULT_NEW_ALIGNMENT__ > 2)
!     {
!       struct A3 { char s[3]; };
!       using SatA3 = std::allocator_traits<std::allocator<A3>>;
!       std::allocator<A3> sata3;
!       {
! 	auto [p, n] = SatA3::allocate_at_least(sata3, 1);
! 	VERIFY(n == __STDCPP_DEFAULT_NEW_ALIGNMENT__ / sizeof(A3));
! 	SatA3::deallocate(sata3, p, n);
!       }
!       if constexpr (2*sizeof(A3) <= __STDCPP_DEFAULT_NEW_ALIGNMENT__)
! 	{
! 	  auto [p, n] = SatA3::allocate_at_least(sata3, 2);
! 	  VERIFY(n == __STDCPP_DEFAULT_NEW_ALIGNMENT__ / sizeof(A3));
! 	  SatA3::deallocate(sata3, p, n);
! 	}
!       if constexpr ((__STDCPP_DEFAULT_NEW_ALIGNMENT__ - 1) / sizeof(A3) > 0)
! 	{
! 	  auto [p, n] = SatA3::allocate_at_least(sata3,
! 	      (__STDCPP_DEFAULT_NEW_ALIGNMENT__ - 1) / sizeof(A3));
! 	  VERIFY(n == __STDCPP_DEFAULT_NEW_ALIGNMENT__ / sizeof(A3));
! 	  SatA3::deallocate(sata3, p, n);
! 	}
!       if constexpr (__STDCPP_DEFAULT_NEW_ALIGNMENT__ / sizeof(A3) > 0)
! 	{
! 	  auto [p, n] = SatA3::allocate_at_least(sata3,
! 	      __STDCPP_DEFAULT_NEW_ALIGNMENT__ / sizeof(A3));
! 	  VERIFY(n == __STDCPP_DEFAULT_NEW_ALIGNMENT__ / sizeof(A3));
! 	  SatA3::deallocate(sata3, p, n);
! 	}
!     }
  
!   if constexpr (__STDCPP_DEFAULT_NEW_ALIGNMENT__ > 1)
!     {
!       struct Anm1 { char s[__STDCPP_DEFAULT_NEW_ALIGNMENT__ - 1]; };
!       using SatAnm1 = std::allocator_traits<std::allocator<Anm1>>;
!       std::allocator<Anm1> satanm1;
!       {
! 	auto [p, n] = SatAnm1::allocate_at_least(satanm1, 1);
! 	VERIFY(n == 1);
! 	SatAnm1::deallocate(satanm1, p, n);
!       }
!       {
! 	auto [p, n] = SatAnm1::allocate_at_least(satanm1,
! 	    __STDCPP_DEFAULT_NEW_ALIGNMENT__);
! 	VERIFY(n == __STDCPP_DEFAULT_NEW_ALIGNMENT__);
! 	SatAnm1::deallocate(satanm1, p, n);
!       }
!       {
! 	auto [p, n] = SatAnm1::allocate_at_least(satanm1,
! 	    __STDCPP_DEFAULT_NEW_ALIGNMENT__ - 1);
! 	VERIFY(n == __STDCPP_DEFAULT_NEW_ALIGNMENT__);
! 	SatAnm1::deallocate(satanm1, p, n);
!       }
!     }
  }
  
  int main()
diff -Nrcpad gcc-17-20260628/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/char/2.cc gcc-17-20260705/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/char/2.cc
*** gcc-17-20260628/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/char/2.cc	Sun Jun 28 22:32:20 2026
--- gcc-17-20260705/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/char/2.cc	Sun Jul  5 22:32:19 2026
***************
*** 19,29 ****
--- 19,31 ----
  
  // 21.3.5 string modifiers
  
+ #include <stdexcept>
  #include <string>
  #include <testsuite_hooks.h>
  
  // append(const _CharT* __s, size_type __n)
  // append(const _CharT* __s)
+ // append(const _CharT* __s, size_type __pos, size_type __n)
  void
  test02()
  {
*************** test02()
*** 55,60 ****
--- 57,76 ----
  
    two.append(two.c_str(), 3);
    VERIFY( two == "Written in your eyeseyesWri" );
+ 
+   two.append(two.c_str(), 8, 2);
+   VERIFY( two == "Written in your eyeseyesWriin" );
+ 
+   try {
+     two.append("a\0b", 2, 1);
+     VERIFY( false );
+   }
+   catch(std::out_of_range& fail) {
+     VERIFY( true );
+   }
+   catch(...) {
+     VERIFY( false );
+   }
  }
  
  int main()
diff -Nrcpad gcc-17-20260628/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/wchar_t/2.cc gcc-17-20260705/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/wchar_t/2.cc
*** gcc-17-20260628/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/wchar_t/2.cc	Sun Jun 28 22:32:20 2026
--- gcc-17-20260705/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/wchar_t/2.cc	Sun Jul  5 22:32:19 2026
***************
*** 19,29 ****
--- 19,31 ----
  
  // 21.3.5 string modifiers
  
+ #include <stdexcept>
  #include <string>
  #include <testsuite_hooks.h>
  
  // append(const _CharT* __s, size_type __n)
  // append(const _CharT* __s)
+ // append(const _CharT* __s, size_type __pos, size_type __n)
  void
  test02()
  {
*************** test02()
*** 55,60 ****
--- 57,76 ----
  
    two.append(two.c_str(), 3);
    VERIFY( two == L"Written in your eyeseyesWri" );
+ 
+   two.append(two.c_str(), 8, 2);
+   VERIFY( two == L"Written in your eyeseyesWriin" );
+ 
+   try {
+     two.append(L"a\0b", 2, 1);
+     VERIFY( false );
+   }
+   catch(std::out_of_range& fail) {
+     VERIFY( true );
+   }
+   catch(...) {
+     VERIFY( false );
+   }
  }
  
  int main()
diff -Nrcpad gcc-17-20260628/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/3.cc gcc-17-20260705/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/3.cc
*** gcc-17-20260628/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/3.cc	Sun Jun 28 22:32:20 2026
--- gcc-17-20260705/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/3.cc	Sun Jul  5 22:32:19 2026
***************
*** 19,29 ****
--- 19,31 ----
  
  // 21.3.5 string modifiers
  
+ #include <stdexcept>
  #include <string>
  #include <testsuite_hooks.h>
  
  // assign(const _CharT* __s, size_type __n)
  // assign(const _CharT* __s)
+ // assign(const _CharT* __s, size_type __pos, size_type __n)
  void
  test03()
  {
*************** test03()
*** 47,52 ****
--- 49,68 ----
  
    one.assign(one.c_str() + 8, 6);
    VERIFY( one == "by the" );
+ 
+   one.assign(one.c_str(), 3, 3);
+   VERIFY( one == "the" );
+ 
+   try {
+     one.assign("a\0b", 2, 1);
+     VERIFY( false );
+   }
+   catch(std::out_of_range& fail) {
+     VERIFY( true );
+   }
+   catch(...) {
+     VERIFY( false );
+   }
  }
  
  int main()
diff -Nrcpad gcc-17-20260628/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/3.cc gcc-17-20260705/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/3.cc
*** gcc-17-20260628/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/3.cc	Sun Jun 28 22:32:20 2026
--- gcc-17-20260705/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/3.cc	Sun Jul  5 22:32:19 2026
***************
*** 19,29 ****
--- 19,31 ----
  
  // 21.3.5 string modifiers
  
+ #include <stdexcept>
  #include <string>
  #include <testsuite_hooks.h>
  
  // assign(const _CharT* __s, size_type __n)
  // assign(const _CharT* __s)
+ // assign(const _CharT* __s, size_type __pos, size_type __n)
  void
  test03()
  {
*************** test03()
*** 47,52 ****
--- 49,68 ----
  
    one.assign(one.c_str() + 8, 6);
    VERIFY( one == L"by the" );
+ 
+   one.assign(one.c_str(), 3, 3);
+   VERIFY( one == L"the" );
+ 
+   try {
+     one.assign(L"a\0b", 2, 1);
+     VERIFY( false );
+   }
+   catch(std::out_of_range& fail) {
+     VERIFY( true );
+   }
+   catch(...) {
+     VERIFY( false );
+   }
  }
  
  int main()
diff -Nrcpad gcc-17-20260628/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/single_insert.cc gcc-17-20260705/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/single_insert.cc
*** gcc-17-20260628/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/single_insert.cc	Sun Jun 28 22:32:20 2026
--- gcc-17-20260705/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/single_insert.cc	Sun Jul  5 22:32:19 2026
*************** struct Y
*** 24,30 ****
  {
    Y() = default;
    constexpr Y(int p) : v(p) {}
!       
    constexpr operator std::optional<Y&>()
    { return std::nullopt; }
  
--- 24,30 ----
  {
    Y() = default;
    constexpr Y(int p) : v(p) {}
! 
    constexpr operator std::optional<Y&>()
    { return std::nullopt; }
  
diff -Nrcpad gcc-17-20260628/libstdc++-v3/testsuite/27_io/filesystem/operations/canonical.cc gcc-17-20260705/libstdc++-v3/testsuite/27_io/filesystem/operations/canonical.cc
*** gcc-17-20260628/libstdc++-v3/testsuite/27_io/filesystem/operations/canonical.cc	Sun Jun 28 22:32:20 2026
--- gcc-17-20260705/libstdc++-v3/testsuite/27_io/filesystem/operations/canonical.cc	Sun Jul  5 22:32:20 2026
*************** test03()
*** 113,126 ****
    fs::path foo = dir/"foo", bar = dir/"bar";
    fs::create_directory(foo);
    fs::create_directory(bar);
! #ifdef NO_SYMLINKS
  #if defined(__MINGW32__) || defined(__MINGW64__)
    const fs::path baz = dir/"foo\\\\..\\bar///";
  #else
    const fs::path baz = dir/"foo//../bar///";
  #endif
  #else
!   fs::create_symlink("../bar", foo/"baz");
    const fs::path baz = dir/"foo//./baz///";
  #endif
  
--- 113,126 ----
    fs::path foo = dir/"foo", bar = dir/"bar";
    fs::create_directory(foo);
    fs::create_directory(bar);
! #if defined(NO_SYMLINKS) || defined(_GLIBCXX_FILESYSTEM_IS_WINDOWS)
  #if defined(__MINGW32__) || defined(__MINGW64__)
    const fs::path baz = dir/"foo\\\\..\\bar///";
  #else
    const fs::path baz = dir/"foo//../bar///";
  #endif
  #else
!   fs::create_directory_symlink("../bar", foo/"baz");
    const fs::path baz = dir/"foo//./baz///";
  #endif
  
diff -Nrcpad gcc-17-20260628/libstdc++-v3/testsuite/27_io/filesystem/operations/copy.cc gcc-17-20260705/libstdc++-v3/testsuite/27_io/filesystem/operations/copy.cc
*** gcc-17-20260628/libstdc++-v3/testsuite/27_io/filesystem/operations/copy.cc	Sun Jun 28 22:32:20 2026
--- gcc-17-20260705/libstdc++-v3/testsuite/27_io/filesystem/operations/copy.cc	Sun Jul  5 22:32:20 2026
*************** test02()
*** 68,80 ****
  {
  #ifndef NO_SYMLINKS
    const std::error_code bad_ec = make_error_code(std::errc::invalid_argument);
    auto from = __gnu_test::nonexistent_path();
    std::error_code ec;
  
    ec = bad_ec;
!   fs::create_symlink(".", from, ec);
    VERIFY( !ec );
!   VERIFY( fs::exists(from) );
  
    auto to = __gnu_test::nonexistent_path();
    ec = bad_ec;
--- 68,81 ----
  {
  #ifndef NO_SYMLINKS
    const std::error_code bad_ec = make_error_code(std::errc::invalid_argument);
+   __gnu_test::scoped_file tmp_file;
    auto from = __gnu_test::nonexistent_path();
    std::error_code ec;
  
    ec = bad_ec;
!   fs::create_symlink(tmp_file.path, from, ec);
    VERIFY( !ec );
!   VERIFY( fs::exists(symlink_status(from)) );
  
    auto to = __gnu_test::nonexistent_path();
    ec = bad_ec;
*************** test02()
*** 97,103 ****
    ec = bad_ec;
    fs::copy(from, to, fs::copy_options::copy_symlinks, ec);
    VERIFY( !ec );
!   VERIFY( fs::exists(to) );
    VERIFY( is_symlink(to) );
  
    ec.clear();
--- 98,104 ----
    ec = bad_ec;
    fs::copy(from, to, fs::copy_options::copy_symlinks, ec);
    VERIFY( !ec );
!   VERIFY( fs::exists(symlink_status(to)) );
    VERIFY( is_symlink(to) );
  
    ec.clear();
diff -Nrcpad gcc-17-20260628/libstdc++-v3/testsuite/27_io/filesystem/operations/remove.cc gcc-17-20260705/libstdc++-v3/testsuite/27_io/filesystem/operations/remove.cc
*** gcc-17-20260628/libstdc++-v3/testsuite/27_io/filesystem/operations/remove.cc	Sun Jun 28 22:32:20 2026
--- gcc-17-20260705/libstdc++-v3/testsuite/27_io/filesystem/operations/remove.cc	Sun Jul  5 22:32:20 2026
*************** test01()
*** 68,73 ****
--- 68,92 ----
  
    const auto dir = __gnu_test::nonexistent_path();
    create_directories(dir/"a/b");
+ 
+ #ifndef NO_SYMLINKS
+   create_directories(dir/"real");
+   create_directory_symlink(dir/"real", dir/"link");
+ 
+   ec = bad_ec;
+   n = remove(dir/"link", ec);
+   VERIFY( !ec );
+   VERIFY( exists(dir/"real") );
+   VERIFY( !exists(symlink_status(dir/"link")) );
+   VERIFY( n );
+ 
+   ec = bad_ec;
+   n = remove(dir/"real", ec);
+   VERIFY( !ec );
+   VERIFY( !exists(dir/"real") );
+   VERIFY( n );
+ #endif
+ 
    ec.clear();
    n = remove(dir/"a", ec);
    VERIFY( ec );
diff -Nrcpad gcc-17-20260628/libstdc++-v3/testsuite/27_io/filesystem/operations/remove_all.cc gcc-17-20260705/libstdc++-v3/testsuite/27_io/filesystem/operations/remove_all.cc
*** gcc-17-20260628/libstdc++-v3/testsuite/27_io/filesystem/operations/remove_all.cc	Sun Jun 28 22:32:20 2026
--- gcc-17-20260705/libstdc++-v3/testsuite/27_io/filesystem/operations/remove_all.cc	Sun Jul  5 22:32:20 2026
*************** test01()
*** 61,67 ****
  #endif
  
    const auto dir = __gnu_test::nonexistent_path();
!   create_directories(dir/"a/b/c");
    ec = bad_ec;
    n = remove_all(dir/"a", ec);
    VERIFY( !ec );
--- 61,67 ----
  #endif
  
    const auto dir = __gnu_test::nonexistent_path();
!   create_directories(dir/"a"/"b"/"c");
    ec = bad_ec;
    n = remove_all(dir/"a", ec);
    VERIFY( !ec );
*************** test01()
*** 69,74 ****
--- 69,112 ----
    VERIFY( exists(dir) );
    VERIFY( !exists(dir/"a") );
  
+ #ifndef NO_SYMLINKS
+   // Test that remove_all does not follow an initial directory symlink.
+   create_directories(dir/"real");
+   create_directory_symlink(dir/"real", dir/"link");
+ 
+   ec = bad_ec;
+   n = remove_all(dir/"link", ec);
+   VERIFY( !ec );
+   VERIFY( exists(dir/"real") );
+   VERIFY( !exists(symlink_status(dir/"link")) );
+   VERIFY( n == 1 );
+ 
+   ec = bad_ec;
+   n = remove_all(dir/"real", ec);
+   VERIFY( !ec );
+   VERIFY( !exists(dir/"real") );
+   VERIFY( n == 1 );
+ 
+   // Test that remove_all does not follow symlinks inside the directory.
+   create_directories(dir/"subdir");
+   create_directories(dir/"target_dir");
+   __gnu_test::scoped_file f2(dir/"target_file");
+   create_directory_symlink(dir/"target_dir", dir/"subdir"/"link_dir");
+   create_symlink(dir/"target_file", dir/"subdir"/"link_file");
+ 
+   ec = bad_ec;
+   n = remove_all(dir/"subdir", ec);
+   VERIFY( !ec );
+   VERIFY( exists(dir/"target_dir") );
+   VERIFY( exists(dir/"target_file") );
+   VERIFY( !exists(dir/"subdir") );
+   VERIFY( n == 3 );
+ 
+   f2.path.clear();
+   remove(dir/"target_dir");
+   remove(dir/"target_file");
+ #endif
+ 
    create_directories(dir/"a/b/c");
    __gnu_test::scoped_file a1(dir/"a/1");
    __gnu_test::scoped_file a2(dir/"a/2");
diff -Nrcpad gcc-17-20260628/libstdc++-v3/testsuite/27_io/filesystem/operations/weakly_canonical.cc gcc-17-20260705/libstdc++-v3/testsuite/27_io/filesystem/operations/weakly_canonical.cc
*** gcc-17-20260628/libstdc++-v3/testsuite/27_io/filesystem/operations/weakly_canonical.cc	Sun Jun 28 22:32:20 2026
--- gcc-17-20260705/libstdc++-v3/testsuite/27_io/filesystem/operations/weakly_canonical.cc	Sun Jul  5 22:32:20 2026
*************** test01()
*** 40,58 ****
    fs::path p;
  
  #ifndef NO_SYMLINKS
!   fs::create_symlink("../bar", foo/"bar");
  
    p = fs::weakly_canonical(dir/"foo//./bar///../biz/.");
    VERIFY( p == dirc/"biz/" );
    p = fs::weakly_canonical(dir/"foo/.//bar/././baz/.");
!   VERIFY( p == dirc/"bar/baz" );
    p = fs::weakly_canonical(fs::current_path()/dir/"bar//../foo/bar/baz");
    VERIFY( p == dirc/"bar/baz" );
  
    ec = bad_ec;
    p = fs::weakly_canonical(dir/"foo//./bar///../biz/.", ec);
    VERIFY( !ec );
    VERIFY( p == dirc/"biz/" );
    ec = bad_ec;
    p = fs::weakly_canonical(dir/"foo/.//bar/././baz/.", ec);
    VERIFY( !ec );
--- 40,72 ----
    fs::path p;
  
  #ifndef NO_SYMLINKS
!   fs::create_directory_symlink(fs::path("..")/"bar", foo/"bar");
! 
!   // This fails when under under Wine, see
!   // https://bugs.winehq.org/show_bug.cgi?id=59922
!   p = fs::canonical(dir/"foo//./bar/.");
!   VERIFY( p == dirc/"bar" );
  
    p = fs::weakly_canonical(dir/"foo//./bar///../biz/.");
+ #ifndef _GLIBCXX_FILESYSTEM_IS_WINDOWS
    VERIFY( p == dirc/"biz/" );
+ #else
+   VERIFY( p == dirc/"foo\\biz\\" );
+ #endif
+ 
    p = fs::weakly_canonical(dir/"foo/.//bar/././baz/.");
!   VERIFY( p == dirc/"bar"/"baz" );
    p = fs::weakly_canonical(fs::current_path()/dir/"bar//../foo/bar/baz");
    VERIFY( p == dirc/"bar/baz" );
  
    ec = bad_ec;
    p = fs::weakly_canonical(dir/"foo//./bar///../biz/.", ec);
    VERIFY( !ec );
+ #ifndef _GLIBCXX_FILESYSTEM_IS_WINDOWS
    VERIFY( p == dirc/"biz/" );
+ #else
+   VERIFY( p == dirc/"foo\\biz\\" );
+ #endif
    ec = bad_ec;
    p = fs::weakly_canonical(dir/"foo/.//bar/././baz/.", ec);
    VERIFY( !ec );
diff -Nrcpad gcc-17-20260628/libstdc++-v3/testsuite/std/simd/arithmetic.cc gcc-17-20260705/libstdc++-v3/testsuite/std/simd/arithmetic.cc
*** gcc-17-20260628/libstdc++-v3/testsuite/std/simd/arithmetic.cc	Sun Jun 28 22:32:20 2026
--- gcc-17-20260705/libstdc++-v3/testsuite/std/simd/arithmetic.cc	Sun Jul  5 22:32:20 2026
***************
*** 3,8 ****
--- 3,9 ----
  // { dg-additional-options "-msse2" }
  
  #include "test_setup.h"
+ #include "complex_init.h"
  
  static constexpr bool is_iec559 =
  #ifdef __GCC_IEC_559
*************** static constexpr bool is_iec559 =
*** 13,19 ****
        false;
  #endif
  
- #if VIR_NEXT_PATCH
  template <typename V>
    requires complex_like<typename V::value_type>
    struct Tests<V>
--- 14,19 ----
*************** template <typename V>
*** 135,141 ****
        }
      };
    };
- #endif
  
  template <typename V>
    struct Tests
--- 135,140 ----
diff -Nrcpad gcc-17-20260628/libstdc++-v3/testsuite/std/simd/complex_init.h gcc-17-20260705/libstdc++-v3/testsuite/std/simd/complex_init.h
*** gcc-17-20260628/libstdc++-v3/testsuite/std/simd/complex_init.h	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libstdc++-v3/testsuite/std/simd/complex_init.h	Sun Jul  5 22:32:20 2026
***************
*** 0 ****
--- 1,17 ----
+ #include <complex>
+ 
+ /**
+  * This class is a workaround for std::complex not being allowed in template arguments.
+  *
+  * All it does is carry the real & imag values until it can "decay" into a std::complex.
+  * There's no other interface.
+  */
+ template <typename T>
+   struct C
+   {
+     T re, im;
+ 
+     template <typename U>
+       constexpr operator std::complex<U>() const
+       { return {U(re), U(im)}; }
+   };
diff -Nrcpad gcc-17-20260628/libstdc++-v3/testsuite/std/simd/create_tests.h gcc-17-20260705/libstdc++-v3/testsuite/std/simd/create_tests.h
*** gcc-17-20260628/libstdc++-v3/testsuite/std/simd/create_tests.h	Sun Jun 28 22:32:20 2026
--- gcc-17-20260705/libstdc++-v3/testsuite/std/simd/create_tests.h	Sun Jul  5 22:32:20 2026
***************
*** 2,8 ****
  
  void create_tests()
  {
!   template for (auto t : {char(), short(), unsigned(), 0l, 0ull, float(), double()})
      {
        using T = decltype(t);
  #ifndef EXPENSIVE_TESTS
--- 2,12 ----
  
  void create_tests()
  {
!   template for (auto t : {char(), short(), unsigned(), 0l, 0ull, float(), double(),
! #ifdef __STDCPP_FLOAT16_T__
! 			  std::float16_t(), std::complex<std::float16_t>(),
! #endif
! 			  std::complex<float>(), std::complex<double>()})
      {
        using T = decltype(t);
  #ifndef EXPENSIVE_TESTS
diff -Nrcpad gcc-17-20260628/libstdc++-v3/testsuite/std/simd/mask2.cc gcc-17-20260705/libstdc++-v3/testsuite/std/simd/mask2.cc
*** gcc-17-20260628/libstdc++-v3/testsuite/std/simd/mask2.cc	Sun Jun 28 22:32:20 2026
--- gcc-17-20260705/libstdc++-v3/testsuite/std/simd/mask2.cc	Sun Jul  5 22:32:20 2026
*************** template <typename V>
*** 18,24 ****
      ADD_TEST(mask_conversion) {
        std::array {alternating, k010, k00111},
        [](auto& t, M k) {
! 	template for (auto tmp : {char(), short(), int(), double()})
  	  {
  	    using U = decltype(tmp);
  	    using M2 = simd::rebind_t<U, M>;
--- 18,25 ----
      ADD_TEST(mask_conversion) {
        std::array {alternating, k010, k00111},
        [](auto& t, M k) {
! 	template for (auto tmp : {char(), short(), int(), double(), std::complex<float>(),
! 				  std::complex<double>()})
  	  {
  	    using U = decltype(tmp);
  	    using M2 = simd::rebind_t<U, M>;
diff -Nrcpad gcc-17-20260628/libstdc++-v3/testsuite/std/simd/simd_bit.cc gcc-17-20260705/libstdc++-v3/testsuite/std/simd/simd_bit.cc
*** gcc-17-20260628/libstdc++-v3/testsuite/std/simd/simd_bit.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libstdc++-v3/testsuite/std/simd/simd_bit.cc	Sun Jul  5 22:32:20 2026
***************
*** 0 ****
--- 1,203 ----
+ // { dg-do run { target c++26 } }
+ // { dg-require-effective-target x86 }
+ // { dg-additional-options "-msse2" }
+ 
+ #include "test_setup.h"
+ #include <climits>
+ 
+ template <typename V>
+   struct CheckInvocable
+   {
+     using T = typename V::value_type;
+     static constexpr bool unsigned_integer
+       = any_type_of<T, unsigned char, unsigned short, unsigned int, unsigned long,
+ 		    unsigned long long>;
+     static_assert(std::integral<T> == requires(V x) { std::byteswap(x); });
+     static_assert(unsigned_integer == requires(V x) { std::bit_ceil(x); });
+     static_assert(unsigned_integer == requires(V x) { std::bit_floor(x); });
+     static_assert(unsigned_integer == requires(V x) { std::has_single_bit(x); });
+     static_assert(unsigned_integer == requires(V x, V y) { std::rotl(x, y); });
+     static_assert(unsigned_integer == requires(V x, int y) { std::rotl(x, y); });
+     static_assert(unsigned_integer == requires(V x, V y) { std::rotr(x, y); });
+     static_assert(unsigned_integer == requires(V x, int y) { std::rotr(x, y); });
+     static_assert(unsigned_integer == requires(V x) { std::bit_width(x); });
+     static_assert(unsigned_integer == requires(V x) { std::countl_zero(x); });
+     static_assert(unsigned_integer == requires(V x) { std::countl_one(x); });
+     static_assert(unsigned_integer == requires(V x) { std::countr_zero(x); });
+     static_assert(unsigned_integer == requires(V x) { std::countr_one(x); });
+     static_assert(unsigned_integer == requires(V x) { std::popcount(x); });
+   };
+ 
+ template <typename V>
+   requires std::integral<typename V::value_type>
+   struct Tests<V> : CheckInvocable<V>
+   {
+     using T = typename V::value_type;
+     using M = typename V::mask_type;
+ 
+     static constexpr T msb = T(std::make_unsigned_t<T>(1) << (sizeof(T) * CHAR_BIT - 1));
+ 
+     ADD_TEST(Byteswap) {
+       std::tuple {test_iota<V>, V(T(0x01'02'03'04'05'06'07'08LL))},
+       [](auto& t, const V a, const V b) {
+ 	if constexpr (sizeof(T) == 1)
+ 	  t.verify_equal(std::byteswap(a), a);
+ 	else
+ 	  {
+ 	    auto x = std::byteswap(a);
+ 	    for (int i = 0; i < V::size(); ++i)
+ 	      t.verify_equal(x[i], std::byteswap(a[i]));
+ 	    auto y = std::simd::byteswap(b);
+ 	    for (int i = 0; i < V::size(); ++i)
+ 	      t.verify_equal(y[i], std::byteswap(b[i]));
+ 	  }
+       }
+     };
+ 
+     ADD_TEST(BitCeil, std::__unsigned_integer<T>) {
+       std::tuple {test_iota<V, 0, msb < test_iota_max<V> ? msb : test_iota_max<V>>,
+ 		  T(1024), T(msb + 1)},
+       [](auto& t, const V a, const V b, const V c) {
+ 	t.verify_precondition_failure("bit_ceil result is not representable", [&] {
+ 	  bit_ceil(c);
+ 	});
+ 	t.verify_equal(bit_ceil(b), select(b == T(), T(1), b));
+ 	t.verify_equal(std::bit_ceil(a), bit_ceil(a));
+ 	t.verify_equal(std::simd::bit_ceil(a), bit_ceil(a));
+ 	t.verify_equal(bit_ceil(a), V([&](int i) { return std::bit_ceil(a[i]); }));
+       }
+     };
+ 
+     ADD_TEST(BitFloor, std::__unsigned_integer<T>) {
+       std::tuple {test_iota<V>, T(1024), T(msb + 1)},
+       [](auto& t, const V a, const V b, const V c) {
+ 	t.verify_equal(bit_floor(c), msb);
+ 	t.verify_equal(bit_floor(b), b);
+ 	t.verify_equal(std::bit_floor(a), bit_floor(a));
+ 	t.verify_equal(std::simd::bit_floor(a), bit_floor(a));
+ 	t.verify_equal(bit_floor(a), V([&](int i) { return std::bit_floor(a[i]); }));
+       }
+     };
+ 
+     ADD_TEST(HasSingleBit, std::__unsigned_integer<T>) {
+       std::tuple {test_iota<V>, msb, T(msb + 1)},
+       [](auto& t, const V a, const V b, const V c) {
+ 	t.verify(all_of(has_single_bit(b)));
+ 	t.verify(none_of(has_single_bit(c)));
+ 	t.verify_equal(std::has_single_bit(a), has_single_bit(a));
+ 	t.verify_equal(std::simd::has_single_bit(a), has_single_bit(a));
+ 	t.verify_equal(has_single_bit(a), a != T() && a == bit_floor(a));
+       }
+     };
+ 
+     ADD_TEST(FullRotate, std::__unsigned_integer<T>) {
+       std::tuple {test_iota<V, 0, 0>},
+       [](auto& t, const V a) {
+ 	constexpr int digits = std::numeric_limits<T>::digits;
+ 	template for (int n : {0, digits, 5 * digits})
+ 	  {
+ 	    t.verify_equal(rotl(a, n), a);
+ 	    t.verify_equal(std::rotl(a, n), a);
+ 	    t.verify_equal(std::simd::rotl(a, n), a);
+ 	    t.verify_equal(rotr(a, n), a);
+ 	    t.verify_equal(std::rotr(a, n), a);
+ 	    t.verify_equal(std::simd::rotr(a, n), a);
+ 	  }
+       }
+     };
+ 
+     using I = std::make_signed_t<T>;
+     using IV = std::simd::rebind_t<I, V>;
+ 
+     ADD_TEST_N(RotateN, 12, std::__unsigned_integer<T>) {
+       std::tuple {test_iota<V, 0, 0>},
+       []<int N>(auto& t, const V x) {
+ 	constexpr int shift = 11 * N;
+ 	constexpr int rshift = I(sizeof(T) * CHAR_BIT) - shift;
+ 	const IV vshift = I(shift);
+ 	const IV vshiftx = vshift ^ IV(x & T(1));
+ 	V ref([](T i) -> T { return std::rotl(i, shift); });
+ 	V refx([](T i) -> T { return std::rotl(i, shift ^ (i & 1)); });
+ 	const V l1 = rotl(x, shift);
+ 	const V lv = rotl(x, vshift);
+ 	const V lx = rotl(x, vshiftx);
+ 	t.verify_equal(l1, ref);
+ 	t.verify_equal(lv, ref);
+ 	t.verify_equal(lx, refx);
+ 	t.verify_equal(rotr(x, rshift), ref);
+ 	t.verify_equal(rotr(x, I(rshift)), ref);
+ 	t.verify_equal(rotr(x, I(sizeof(T) * CHAR_BIT) - vshiftx), refx);
+       }
+     };
+ 
+     // The value-type of reference is always going to be 'int', forcing a conversion in verify_equal
+     // (unless V::value_type is 'unsigned int'). That's intentional, since we thus can find
+     // (hypothetical) cases of value-changing conversions in the implementation.
+ #define REFERENCE(x, fun) simd::rebind_t<decltype(fun(x[0])), V>([&](int i) { return fun(x[i]); })
+ 
+     ADD_TEST(BitWidth, std::__unsigned_integer<T>) {
+       std::tuple {test_iota<V>, msb - test_iota<V>},
+       [](auto& t, const V x, const V y) {
+ 	t.verify_equal(std::bit_width(x), REFERENCE(x, std::bit_width));
+ 	t.verify_equal(simd::bit_width(x), REFERENCE(x, std::bit_width));
+ 	t.verify_equal(std::bit_width(y), REFERENCE(y, std::bit_width));
+ 	t.verify_equal(simd::bit_width(y), REFERENCE(y, std::bit_width));
+       }
+     };
+ 
+     ADD_TEST(CountLZero, std::__unsigned_integer<T>) {
+       std::tuple {test_iota<V>, msb - test_iota<V>},
+       [](auto& t, const V x, const V y) {
+ 	t.verify_equal(std::countl_zero(x), REFERENCE(x, std::countl_zero));
+ 	t.verify_equal(simd::countl_zero(x), REFERENCE(x, std::countl_zero));
+ 	t.verify_equal(std::countl_zero(y), REFERENCE(y, std::countl_zero));
+ 	t.verify_equal(simd::countl_zero(y), REFERENCE(y, std::countl_zero));
+       }
+     };
+ 
+     ADD_TEST(CountLOne, std::__unsigned_integer<T>) {
+       std::tuple {test_iota<V>, msb - test_iota<V>},
+       [](auto& t, const V x, const V y) {
+ 	t.verify_equal(std::countl_one(x), REFERENCE(x, std::countl_one));
+ 	t.verify_equal(simd::countl_one(x), REFERENCE(x, std::countl_one));
+ 	t.verify_equal(std::countl_one(y), REFERENCE(y, std::countl_one));
+ 	t.verify_equal(simd::countl_one(y), REFERENCE(y, std::countl_one));
+       }
+     };
+ 
+     ADD_TEST(CountRZero, std::__unsigned_integer<T>) {
+       std::tuple {test_iota<V>, msb - test_iota<V>},
+       [](auto& t, const V x, const V y) {
+ 	t.verify_equal(std::countr_zero(x), REFERENCE(x, std::countr_zero));
+ 	t.verify_equal(simd::countr_zero(x), REFERENCE(x, std::countr_zero));
+ 	t.verify_equal(std::countr_zero(y), REFERENCE(y, std::countr_zero));
+ 	t.verify_equal(simd::countr_zero(y), REFERENCE(y, std::countr_zero));
+       }
+     };
+ 
+     ADD_TEST(CountROne, std::__unsigned_integer<T>) {
+       std::tuple {test_iota<V>, msb - test_iota<V>},
+       [](auto& t, const V x, const V y) {
+ 	t.verify_equal(std::countr_one(x), REFERENCE(x, std::countr_one));
+ 	t.verify_equal(simd::countr_one(x), REFERENCE(x, std::countr_one));
+ 	t.verify_equal(std::countr_one(y), REFERENCE(y, std::countr_one));
+ 	t.verify_equal(simd::countr_one(y), REFERENCE(y, std::countr_one));
+       }
+     };
+ 
+     ADD_TEST(PopCount, std::__unsigned_integer<T>) {
+       std::tuple {test_iota<V>, msb - test_iota<V>},
+       [](auto& t, const V x, const V y) {
+ 	t.verify_equal(std::popcount(x), REFERENCE(x, std::popcount));
+ 	t.verify_equal(simd::popcount(x), REFERENCE(x, std::popcount));
+ 	t.verify_equal(std::popcount(y), REFERENCE(y, std::popcount));
+ 	t.verify_equal(simd::popcount(y), REFERENCE(y, std::popcount));
+       }
+     };
+   };
+ 
+ template <typename V>
+   struct Tests : CheckInvocable<V>
+   {};
+ 
+ #include "create_tests.h"
diff -Nrcpad gcc-17-20260628/libstdc++-v3/testsuite/std/simd/simd_bit_expensive.cc gcc-17-20260705/libstdc++-v3/testsuite/std/simd/simd_bit_expensive.cc
*** gcc-17-20260628/libstdc++-v3/testsuite/std/simd/simd_bit_expensive.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libstdc++-v3/testsuite/std/simd/simd_bit_expensive.cc	Sun Jul  5 22:32:20 2026
***************
*** 0 ****
--- 1,7 ----
+ // { dg-do run { target c++26 } }
+ // { dg-require-effective-target x86 }
+ // { dg-timeout-factor 2 }
+ // { dg-require-effective-target run_expensive_tests }
+ 
+ #define EXPENSIVE_TESTS 1
+ #include "simd_bit.cc"
diff -Nrcpad gcc-17-20260628/libstdc++-v3/testsuite/std/simd/stores.cc gcc-17-20260705/libstdc++-v3/testsuite/std/simd/stores.cc
*** gcc-17-20260628/libstdc++-v3/testsuite/std/simd/stores.cc	Sun Jun 28 22:32:20 2026
--- gcc-17-20260705/libstdc++-v3/testsuite/std/simd/stores.cc	Sun Jul  5 22:32:20 2026
*************** template <typename V>
*** 25,36 ****
  	    t.verify_equal(mem[i], T(i + 1));
  	    t.verify_equal(mem[V::size + i], T(i + 1));
  	  }
- #if VIR_NEXT_PATCH
  	if constexpr (complex_like<T>)
! 	  {
  	  }
  	else
- #endif
  	  {
  	    simd::unchecked_store(v, ints, simd::flag_convert);
  	    simd::partial_store(v, ints.begin() + V::size() + 1, ints.end(),
--- 25,34 ----
  	    t.verify_equal(mem[i], T(i + 1));
  	    t.verify_equal(mem[V::size + i], T(i + 1));
  	  }
  	if constexpr (complex_like<T>)
! 	  { // TODO
  	  }
  	else
  	  {
  	    simd::unchecked_store(v, ints, simd::flag_convert);
  	    simd::partial_store(v, ints.begin() + V::size() + 1, ints.end(),
diff -Nrcpad gcc-17-20260628/libstdc++-v3/testsuite/std/simd/test_setup.h gcc-17-20260705/libstdc++-v3/testsuite/std/simd/test_setup.h
*** gcc-17-20260628/libstdc++-v3/testsuite/std/simd/test_setup.h	Sun Jun 28 22:32:20 2026
--- gcc-17-20260705/libstdc++-v3/testsuite/std/simd/test_setup.h	Sun Jul  5 22:32:20 2026
*************** static std::string_view test_name = "unk
*** 73,78 ****
--- 73,84 ----
  
  namespace simd = std::simd;
  
+ template <typename T, typename... Us>
+   concept any_type_of = (std::same_as<T, Us> || ...);
+ 
+ template <typename T>
+   concept complex_like = std::simd::__complex_like<T>;
+ 
  template <typename T>
    struct is_character_type
    : std::bool_constant<false>
*************** template <typename T>
*** 285,292 ****
--- 291,306 ----
  	using TT = typename T::value_type;
  	if constexpr (std::is_integral_v<TT>)
  	  return all_of(a == b);
+ 	else if constexpr (T::abi_type::_S_nreg > 1)
+ 	  {
+ 	    return bit_equal(a._M_get_low(), b._M_get_low())
+ 		     && bit_equal(a._M_get_high(), b._M_get_high());
+ 	  }
  	else
  	  {
+ 	    // float, 4 -> unsigned, 4 (uint_size = 4)
+ 	    // double, 4 -> ullong, 4 (uint_size = 8)
+ 	    // complex<double>, 4 -> ullong, 8 (uint_size = 8)
  	    constexpr size_t uint_size = std::min(size_t(8), sizeof(TT));
  	    struct B
  	    {
*************** template <typename T>
*** 303,315 ****
--- 317,342 ----
  	      }
  	  }
        }
+     else if constexpr (complex_like<T>)
+       return bit_equal(a.real(), b.real()) && bit_equal(a.imag(), b.imag());
      else
        static_assert(false);
    }
  
+ // true iff real or imag parts of x are +/-inf. This matches the C23 Annex G interpretation.
+ template <complex_like T, typename Abi>
+   constexpr typename simd::basic_vec<T, Abi>::mask_type
+   cx_isinf(const simd::basic_vec<T, Abi>& x)
+   {
+     using M = typename simd::basic_vec<T, Abi>::mask_type;
+     return M(isinf(x.real()) || isinf(x.imag()));
+   }
+ 
  // treat as equal if either:
  // - operator== yields true
  // - or for floats, a and b are NaNs
+ // - or for complex, a and b are any infinity (see cx_isinf)
+ // - or for complex, a and b are NaNs in real *and* imag components
  template <typename V>
    constexpr bool
    equal_with_nan_and_inf_fixup(const V& a, const V& b)
*************** template <typename V>
*** 321,329 ****
        {
  	using M = typename V::mask_type;
  	using T = typename V::value_type;
! 	if constexpr (std::is_floating_point_v<T>)
  	  { // fix up nan == nan results
! 	    eq |= a._M_isnan() && b._M_isnan();
  	  }
  	else
  	  return false;
--- 348,362 ----
        {
  	using M = typename V::mask_type;
  	using T = typename V::value_type;
! 	if constexpr (complex_like<T>)
! 	  { // fix up nan == nan and (inf,nan) == (inf,?)
! 	    eq |= M(isnan(a.real()) && isnan(a.imag()) && isnan(b.real()) && isnan(a.imag()))
! 		  // a and b are "an infinity" according to C23 Annex G.3
! 		    || (cx_isinf(a) && cx_isinf(b));
! 	  }
! 	else if constexpr (std::is_floating_point_v<T>)
  	  { // fix up nan == nan results
! 	    eq |= isnan(a) && isnan(b);
  	  }
  	else
  	  return false;
*************** template <std::size_t B, typename Abi>
*** 617,622 ****
--- 650,660 ----
    is_const_known(const std::simd::basic_mask<B, Abi>& x)
    { return __is_const_known(x); }
  
+ template <typename T>
+   [[gnu::always_inline]] inline bool
+   is_const_known(const std::complex<T>& x)
+   { return is_const_known(x.real()) && is_const_known(x.imag()); }
+ 
  template <std::ranges::sized_range R>
    [[gnu::always_inline]] inline bool
    is_const_known(const R& arr)
*************** template <typename V, int Init = 0, int
*** 675,680 ****
--- 713,721 ----
  		    i -= Max - Init + 1;
  		}
  	      using T = value_type_t<V>;
+ 	      if constexpr (std::simd::__simd_complex<V>)
+ 		return std::complex<T>(T(i), T());
+ 	      else
  		return static_cast<T>(i);
  	    });
  
diff -Nrcpad gcc-17-20260628/libstdc++-v3/testsuite/std/simd/traits_common.cc gcc-17-20260705/libstdc++-v3/testsuite/std/simd/traits_common.cc
*** gcc-17-20260628/libstdc++-v3/testsuite/std/simd/traits_common.cc	Sun Jun 28 22:32:20 2026
--- gcc-17-20260705/libstdc++-v3/testsuite/std/simd/traits_common.cc	Sun Jul  5 22:32:20 2026
***************
*** 4,13 ****
--- 4,16 ----
  // { dg-timeout-factor 2 }
  
  #include <simd>
+ #include <complex>
  #include <stdfloat>
  
  namespace simd = std::simd;
  
+ using std::complex;
+ 
  // test that instantiation of the complete class is well-formed
  template class simd::basic_vec<int, typename simd::vec<int, 1>::abi_type>;
  template class simd::basic_vec<int, typename simd::vec<int, 5>::abi_type>;
*************** template class simd::basic_vec<int, type
*** 15,20 ****
--- 18,62 ----
  template class simd::basic_vec<int, typename simd::vec<int, 13>::abi_type>;
  template class simd::basic_vec<float, typename simd::vec<float, 8>::abi_type>;
  template class simd::basic_vec<float, typename simd::vec<float, 13>::abi_type>;
+ template class simd::basic_vec<complex<double>, typename simd::vec<complex<double>, 3>::abi_type>;
+ 
+ // LWG4420 ///////////////////////////////////////
+ 
+ #ifdef __STDCPP_FLOAT16_T__
+ namespace LWG4420
+ {
+   using std::convertible_to;
+   using std::constructible_from;
+   using std::float16_t;
+   using std::array;
+ 
+   static_assert( convertible_to<simd::vec<float16_t, 4>, simd::vec<float, 4>>);
+   static_assert(!convertible_to<simd::vec<float, 4>, simd::vec<float16_t, 4>>);
+ 
+   static_assert( convertible_to<float16_t, simd::vec<float, 4>>);
+   static_assert(!convertible_to<float, simd::vec<float16_t, 4>>);
+ 
+   static_assert(constructible_from<simd::vec<float16_t, 4>, simd::vec<float, 4>>);
+ 
+   static_assert(convertible_to<array<float16_t, 4>, simd::vec<float, 4>>);
+   static_assert(convertible_to<array<float, 4>, simd::vec<float16_t, 4>>); // Mandates flag_convert
+ 
+   static_assert([] {
+     array<float, 4> f4 = {};
+     array<float16_t, 4> h4 = {};
+ 
+     simd::vec<float, 4> vh2f = h4;
+     simd::vec<float, 4> vh2f_b = float16_t();
+ 
+     simd::vec<float16_t, 4> vf2h = {f4, simd::flag_convert};
+ 
+     vh2f = vf2h;
+     vf2h = static_cast<decltype(vf2h)>(vh2f);
+ 
+     return all_of(vh2f == vh2f_b);
+   }());
+ }
+ #endif
  
  constexpr auto default_mask_abi_variant =
  #ifdef __AVX512F__
*************** namespace test02
*** 52,65 ****
--- 94,148 ----
  
    static_assert(!destructible<simd::basic_mask<7>>);
  
+   template <int N>
+     using expected_abi = _Abi_t<N, 1, default_mask_abi_variant, _AbiVariant::_CxIleav>;
+ 
+   static_assert(same_as<simd::vec<complex<float>, 1>::abi_type, expected_abi<1>>);
+   static_assert(same_as<simd::vec<complex<double>, 1>::abi_type, expected_abi<1>>);
+ 
+ #if defined __AVX512F__
+   static_assert(same_as<simd::vec<complex<float>, 2>::abi_type,
+ 			_Abi_t<2, 1, _AbiVariant::_CxIleav, _AbiVariant::_BitMask>>);
+   static_assert(same_as<simd::vec<complex<double>, 2>::abi_type,
+ 			_Abi_t<2, 1, _AbiVariant::_CxIleav, _AbiVariant::_BitMask>>);
+   static_assert(same_as<simd::vec<complex<float>, 4>::abi_type,
+ 			_Abi_t<4, 1, _AbiVariant::_CxIleav, _AbiVariant::_BitMask>>);
+   static_assert(same_as<simd::vec<complex<double>, 4>::abi_type,
+ 			_Abi_t<4, 1, _AbiVariant::_CxIleav, _AbiVariant::_BitMask>>);
+ #elif defined __AVX__
+   static_assert(same_as<simd::vec<complex<float>, 2>::abi_type,
+ 			_Abi_t<2, 1, _AbiVariant::_CxIleav>>);
+   static_assert(same_as<simd::vec<complex<double>, 2>::abi_type,
+ 			_Abi_t<2, 1, _AbiVariant::_CxIleav>>);
+   static_assert(same_as<simd::vec<complex<float>, 4>::abi_type,
+ 			_Abi_t<4, 1, _AbiVariant::_CxIleav>>);
+   static_assert(same_as<simd::vec<complex<double>, 4>::abi_type,
+ 			_Abi_t<4, 2, _AbiVariant::_CxIleav>>);
+ #elif defined __SSE__
+   static_assert(same_as<simd::vec<complex<float>, 2>::abi_type,
+ 			_Abi_t<2, 1, _AbiVariant::_CxIleav>>);
+   static_assert(same_as<simd::vec<complex<double>, 2>::abi_type,
+ 			_Abi_t<2, 2, _AbiVariant::_CxIleav>>);
+   static_assert(same_as<simd::vec<complex<float>, 4>::abi_type,
+ 			_Abi_t<4, 2, _AbiVariant::_CxIleav>>);
+   static_assert(same_as<simd::vec<complex<double>, 4>::abi_type,
+ 			_Abi_t<4, 4, _AbiVariant::_CxIleav>>);
+ #endif
+ 
    static_assert(same_as<simd::vec<int>::mask_type, simd::mask<int>>);
    static_assert(same_as<simd::vec<float>::mask_type, simd::mask<float>>);
    static_assert(same_as<simd::vec<float, 1>::mask_type, simd::mask<float, 1>>);
  
+   static_assert(destructible<simd::vec<complex<float>>>);
+   static_assert(same_as<simd::vec<complex<float>>::mask_type, simd::mask<complex<float>>>);
+   static_assert(same_as<simd::vec<complex<float>, 1>::mask_type, simd::mask<complex<float>, 1>>);
+ 
    // ensure 'true ? int : vec<float>' doesn't work
    template <typename T>
      concept has_type_member = requires { typename T::type; };
    static_assert(!has_type_member<common_type<int, simd::vec<float>>>);
+ 
+   constexpr simd::vec<complex<double>>::mask_type k = {};
  }
  
  #if defined __AVX__ && !defined __AVX2__
*************** static_assert(std::same_as<decltype(+sim
*** 77,82 ****
--- 160,167 ----
  #if defined __SSE__ && !defined __F16C__ && defined __STDCPP_FLOAT16_T__
  static_assert(simd::vec<std::float16_t>::size() == 1);
  static_assert(simd::mask<std::float16_t>::size() == 1);
+ static_assert(simd::vec<std::complex<std::float16_t>>::size() == 1);
+ static_assert(simd::mask<std::complex<std::float16_t>>::size() == 1);
  static_assert(alignof(simd::vec<std::float16_t, 8>) == alignof(std::float16_t));
  static_assert(alignof(simd::rebind_t<std::float16_t, simd::vec<float>>) == alignof(std::float16_t));
  static_assert(simd::rebind_t<std::float16_t, simd::mask<float>>::abi_type::_S_nreg
*************** template <template <typename> class Tpl>
*** 198,214 ****
--- 283,320 ----
      Tpl<unsigned long long> p;
  #ifdef __STDCPP_FLOAT16_T__
      Tpl<std::float16_t> q;
+     Tpl<std::complex<std::float16_t>> qc;
  #endif
  #ifdef __STDCPP_FLOAT32_T__
      Tpl<std::float32_t> r;
+     Tpl<std::complex<std::float32_t>> rc;
  #endif
  #ifdef __STDCPP_FLOAT64_T__
      Tpl<std::float64_t> s;
+     Tpl<std::complex<std::float64_t>> sc;
  #endif
+     Tpl<std::complex<float>> u;
+     Tpl<std::complex<double>> v;
    };
  
  template struct instantiate_all_vectorizable<test_usable_simd>;
  
+ // vec broadcast ctor ///////////////
+ namespace test_broadcast
+ {
+   using std::constructible_from;
+   using std::complex;
+   using simd::vec;
+ 
+   static_assert(constructible_from<simd::vec<complex<float>>, complex<float>>);
+   static_assert(constructible_from<simd::vec<complex<double>>, complex<float>>);
+ 
+   constexpr simd::vec<complex<double>, 2> cd2 = 1.f; // broadcast real from float
+   static_assert(all_of(cd2.real() == 1));
+   static_assert(all_of(cd2.imag() == 0));
+   static_assert(all_of(cd2 == complex{1.f, 0.f}));
+ }
+ 
  // vec generator ctor ///////////////
  
  namespace test_generator
*************** namespace test_generator
*** 223,228 ****
--- 329,338 ----
    static_assert( std::constructible_from<simd::vec<float>, short (&)(int)>);
    static_assert(!std::constructible_from<simd::vec<float>, long double (&)(int)>);
    static_assert( std::constructible_from<simd::vec<float>, udt_convertible_to_float (&)(int)>);
+   static_assert( std::constructible_from<simd::vec<std::complex<double>>,
+ 					 std::complex<double> (&)(int)>);
+   static_assert( std::constructible_from<simd::vec<std::complex<double>>,
+ 					 std::complex<float> (&)(int)>);
  }
  
  // mask generator ctor ///////////////
*************** static_assert([] constexpr {
*** 358,363 ****
--- 468,474 ----
  // mask conversions //////////////////
  namespace mask_conversion_tests
  {
+   using std::complex;
    using simd::mask;
  
    struct TestResult
*************** namespace mask_conversion_tests
*** 423,428 ****
--- 534,543 ----
  	  check<do_test<std::float16_t>(    k)>();
  	  check<do_test<std::float16_t>(!k)>();
  #endif
+ 	  check<do_test<complex<float>>(    k)>();
+ 	  check<do_test<complex<float>>(!k)>();
+ 	  check<do_test<complex<double>>(    k)>();
+ 	  check<do_test<complex<double>>(!k)>();
  	  if constexpr (P <= 2)
  	    do_test<T, N, P + 1>();
  	}
*************** namespace mask_conversion_tests
*** 453,458 ****
--- 568,575 ----
  #ifdef __STDCPP_FLOAT16_T__
    static_assert(test<std::float16_t>());
  #endif
+   static_assert(test<complex<float>>());
+   static_assert(test<complex<double>>());
  }
  
  // vec reductions ///////////////////
*************** static_assert(all_of(simd::cat(simd::__i
*** 542,547 ****
--- 659,676 ----
  static_assert(all_of(simd::cat(simd::__iota<simd::vec<double, 4>>, simd::__iota<simd::vec<double, 4>> + 4)
  		       == simd::__iota<simd::vec<double, 8>>));
  
+ static_assert(all_of(simd::cat(simd::__iota<simd::vec<complex<float>, 1>>,
+ 			       simd::__iota<simd::vec<complex<float>, 1>> + 1.f)
+ 		       == simd::__iota<simd::vec<complex<float>, 2>>));
+ 
+ static_assert(all_of(simd::cat(simd::__iota<simd::vec<complex<float>, 3>>,
+ 			       simd::__iota<simd::vec<complex<float>, 3>> + 3.f)
+ 		       == simd::__iota<simd::vec<complex<float>, 6>>));
+ 
+ static_assert(all_of(simd::cat(simd::__iota<simd::vec<complex<float>, 8>>,
+ 			       simd::__iota<simd::vec<complex<float>, 8>> + 8.f)
+ 		       == simd::__iota<simd::vec<complex<float>, 16>>));
+ 
  // select ////////////////////////
  
  #ifndef AVOID_BROKEN_CLANG_FAILURES
diff -Nrcpad gcc-17-20260628/libstdc++-v3/testsuite/std/simd/traits_impl.cc gcc-17-20260705/libstdc++-v3/testsuite/std/simd/traits_impl.cc
*** gcc-17-20260628/libstdc++-v3/testsuite/std/simd/traits_impl.cc	Sun Jun 28 22:32:20 2026
--- gcc-17-20260705/libstdc++-v3/testsuite/std/simd/traits_impl.cc	Sun Jul  5 22:32:20 2026
***************
*** 5,14 ****
--- 5,16 ----
  
  #include <bits/simd_details.h>
  #include <bits/simd_flags.h>
+ #include <complex>
  #include <stdfloat>
  
  namespace simd = std::simd;
  
+ using std::complex;
  #ifdef __STDCPP_FLOAT16_T__
  using std::float16_t;
  #endif
*************** void test()
*** 29,34 ****
--- 31,39 ----
      {
        using T = decltype(t);
        static_assert(__vectorizable<T>);
+       static_assert(__complex_like<complex<T>>);
+       static_assert(__complex_like<const complex<T>&>);
+       static_assert(__vectorizable<complex<T>>);
      }
  
    static_assert(!__vectorizable<const float>);
*************** void test()
*** 43,72 ****
        static_assert(sizeof(__integer_from<N>) == N);
        static_assert(__vectorizable<__integer_from<N>>);
      }
  
    static_assert(__div_ceil(5, 3) == 2);
  
    static_assert(sizeof(_Bitmask<3>) == 1);
    static_assert(sizeof(_Bitmask<30>) == 4);
  
!   static_assert(__scalar_abi_tag<_ScalarAbi<1>>);
!   static_assert(__scalar_abi_tag<_ScalarAbi<2>>);
!   static_assert(!__scalar_abi_tag<_Abi_t<1, 1>>);
  
!   static_assert(__abi_tag<_ScalarAbi<1>>);
!   static_assert(__abi_tag<_ScalarAbi<2>>);
  
    using AN = decltype(__native_abi<float>());
    using A1 = decltype(__native_abi<float>()._S_resize<1>());
    static_assert(A1::_S_size == 1);
    static_assert(A1::_S_nreg == 1);
    static_assert(A1::_S_variant == AN::_S_variant);
-   static_assert(__scalar_abi_tag<A1> == __scalar_abi_tag<AN>);
    static_assert(std::is_same_v<decltype(__abi_rebind<float, AN::_S_size, A1>()), AN>);
    if constexpr (AN::_S_size >= 2) // the target has SIMD support for float
      {
        {
  	using A2 = decltype(__abi_rebind<float, 2, AN>());
  	static_assert(A2::_S_size == 2);
  	static_assert(A2::_S_nreg == 1);
  	static_assert(A2::_S_variant == AN::_S_variant);
--- 48,87 ----
        static_assert(sizeof(__integer_from<N>) == N);
        static_assert(__vectorizable<__integer_from<N>>);
      }
+   template for (constexpr int N : {
+ #ifdef __STDCPP_BFLOAT16_T__
+ 				  2,
+ #endif
+ 				  4, 8})
+     {
+       static_assert(std::floating_point<__float_from<N>>);
+       static_assert(sizeof(__float_from<N>) == N);
+       static_assert(__vectorizable<__float_from<N>>);
+     }
  
    static_assert(__div_ceil(5, 3) == 2);
  
    static_assert(sizeof(_Bitmask<3>) == 1);
    static_assert(sizeof(_Bitmask<30>) == 4);
  
!   static_assert(__scalar_abi_tag<_Abi_t<1, 1>>);
!   static_assert(__scalar_abi_tag<_Abi_t<2, 2>>);
!   static_assert(!__scalar_abi_tag<_Abi_t<2, 1>>);
  
!   static_assert(__abi_tag<_Abi_t<2, 1, _AbiVariant::_CxIleav>>);
!   static_assert(__abi_tag<_Abi_t<2, 1, _AbiVariant::_CxCtgus>>);
  
    using AN = decltype(__native_abi<float>());
    using A1 = decltype(__native_abi<float>()._S_resize<1>());
    static_assert(A1::_S_size == 1);
    static_assert(A1::_S_nreg == 1);
    static_assert(A1::_S_variant == AN::_S_variant);
    static_assert(std::is_same_v<decltype(__abi_rebind<float, AN::_S_size, A1>()), AN>);
    if constexpr (AN::_S_size >= 2) // the target has SIMD support for float
      {
        {
  	using A2 = decltype(__abi_rebind<float, 2, AN>());
+ 	static_assert(__scalar_abi_tag<A2> == __scalar_abi_tag<AN>);
  	static_assert(A2::_S_size == 2);
  	static_assert(A2::_S_nreg == 1);
  	static_assert(A2::_S_variant == AN::_S_variant);
*************** void test()
*** 75,82 ****
--- 90,122 ----
        }
        using A4 = decltype(__abi_rebind<float, 4, AN>());
        static_assert(A4::_S_size == 4);
+ 
+       // at this point we unconditionally expect _CxIleav from __abi_rebind:
+       using AC2 = decltype(__abi_rebind<complex<float>, 2, AN>());
+       static_assert(AC2::_S_size == 2);
+       static_assert(AC2::_S_nreg == A4::_S_nreg);
+       static_assert(AC2::_S_variant != A4::_S_variant);
+       static_assert(__filter_abi_variant(AC2::_S_variant, _AbiVariant::_MaskVariants)
+ 		      == A4::_S_variant);
+       static_assert(__filter_abi_variant(AC2::_S_variant, _AbiVariant::_CxVariants)
+ 		      == _AbiVariant::_CxIleav);
+       static_assert(AC2::_S_is_cx_ileav);
+       static_assert(!AC2::_S_is_cx_ctgus);
      }
  
+ #if __glibcxx_simd_complex
+   {
+     using ACx2 = _Abi_t<2, 2, _AbiVariant::_CxIleav>;
+     static_assert(__abi_tag<ACx2>);
+     static_assert(__scalar_abi_tag<ACx2>);
+     using AM4 = decltype(__abi_rebind<__float_from<2>, ACx2::_S_size * 2, ACx2>());
+     static_assert(__abi_tag<AM4>);
+     static_assert(__scalar_abi_tag<AM4>);
+     static_assert(AM4::_S_size == ACx2::_S_size * 2);
+     static_assert(!AM4::_S_is_cx_ileav);
+   }
+ #endif
+ 
    static_assert(__streq_to_1("1"));
    static_assert(!__streq_to_1(""));
    static_assert(!__streq_to_1(nullptr));
*************** void test()
*** 87,92 ****
--- 127,136 ----
    static_assert(!__value_preserving_convertible_to<int, float>);
    static_assert( __value_preserving_convertible_to<float, double>);
    static_assert(!__value_preserving_convertible_to<double, float>);
+   static_assert( __value_preserving_convertible_to<float, complex<float>>);
+   static_assert( __value_preserving_convertible_to<float, complex<double>>);
+   static_assert( __value_preserving_convertible_to<double, complex<double>>);
+   static_assert(!__value_preserving_convertible_to<double, complex<float>>);
  
  #ifdef __STDCPP_FLOAT16_T__
    static_assert(__explicitly_convertible_to<float, float16_t>);
*************** void test()
*** 107,112 ****
--- 151,159 ----
    static_assert(__broadcast_constructible<decltype(std::cw<0.f>), std::float16_t>);
  #endif
  
+   static_assert( __broadcast_constructible<complex<float>, complex<float>>);
+   static_assert( __broadcast_constructible<complex<float>, complex<double>>);
+   static_assert(!__broadcast_constructible<complex<double>, complex<float>>);
  
    static_assert(__higher_rank_than<long, int>);
    static_assert(__higher_rank_than<long long, long>);
diff -Nrcpad gcc-17-20260628/libstdc++-v3/testsuite/std/time/ostream_insert.cc gcc-17-20260705/libstdc++-v3/testsuite/std/time/ostream_insert.cc
*** gcc-17-20260628/libstdc++-v3/testsuite/std/time/ostream_insert.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libstdc++-v3/testsuite/std/time/ostream_insert.cc	Sun Jul  5 22:32:20 2026
***************
*** 0 ****
--- 1,183 ----
+ // { dg-do run { target c++20 } }
+ 
+ // Test stream state semantics for chrono operator<<
+ #include <chrono>
+ #include <format>
+ #include <iomanip>
+ #include <sstream>
+ #include <testsuite_hooks.h>
+ 
+ bool
+ check_prefix(std::string_view s, size_t n, char c)
+ {
+   for (char v : s)
+     if (v != c)
+       return !n;
+     else if (!n)
+       return false;
+     else
+       --n; 
+   return false;
+ }
+ 
+ void
+ test_sentry_badbit()
+ {
+   using namespace std::chrono;
+   std::ostringstream os;
+   os.setstate(std::ios::badbit);
+   VERIFY( !os.good() );
+   os << sys_time<seconds>{1'700'000'000s};
+   VERIFY( os.bad() );
+   VERIFY( os.str().empty() );
+ }
+ 
+ void
+ test_sentry_tied()
+ {
+   using namespace std::chrono;
+   struct testbuf : std::streambuf
+   { bool flushed = false; int sync() override { flushed = true; return 0; } };
+   testbuf tied_buf; std::ostream tied(&tied_buf); std::ostringstream os;
+   os.tie(&tied);
+   os << sys_time<seconds>{1'700'000'000s};
+   VERIFY( tied_buf.flushed == true );
+ }
+ 
+ void
+ test_width_fill()
+ {
+   using namespace std::chrono;
+   std::ostringstream os;
+   os << std::setw(30) << std::setfill('*') << sys_time<seconds>{1'700'000'000s};
+   auto s = os.view();
+   VERIFY( s.size() == 30 );
+   VERIFY( check_prefix(s, 11, '*') );
+   VERIFY( s.substr(11) == "2023-11-14 22:13:20" );
+   VERIFY( os.width() == 0 );
+ }
+ 
+ void
+ test_width_left()
+ {
+   using namespace std::chrono;
+   std::ostringstream os;
+   os << std::setw(30) << std::left << std::setfill('.') << sys_time<seconds>{1'700'000'000s};
+   auto s = os.view();
+   VERIFY( s.size() == 30 );
+   VERIFY( s.find("2023-11-14") == 0 );
+   VERIFY( s.back() == '.' );
+   VERIFY( os.width() == 0 );
+ }
+ 
+ void
+ test_width_internal()
+ {
+   using namespace std::chrono;
+   std::ostringstream os;
+   os << std::setw(30) << std::internal << std::setfill('_') << day(15);
+   auto s = os.view();
+   VERIFY( s.size() == 30 );
+   VERIFY( check_prefix(s, 28, '_') );
+   VERIFY( s.substr(28) == "15" );
+   VERIFY( os.width() == 0 );
+ }
+ 
+ void
+ test_width_reset()
+ {
+   using namespace std::chrono;
+   std::ostringstream os;
+   os << std::setw(20) << sys_time<seconds>{1'700'000'000s};
+   VERIFY( os.width() == 0 );
+   os << hh_mm_ss{seconds(45296)};
+   VERIFY( os.width() == 0 );
+   os << std::setw(15) << day(15);
+   VERIFY( os.width() == 0 );
+ }
+ 
+ void
+ test_width_zero()
+ {
+   using namespace std::chrono;
+   std::ostringstream os;
+   os << std::setw(0) << sys_time<seconds>{1'700'000'000s};
+   auto s = os.view();
+   VERIFY( s.find("2023-11-14") != std::string::npos );
+   VERIFY( s.size() < 20 );
+   VERIFY( os.width() == 0 );
+ }
+ 
+ void
+ test_multiple_chrono_types()
+ {
+   using namespace std::chrono;
+   std::ostringstream os;
+   os << std::setw(25) << std::setfill('-') << sys_time<seconds>{1'700'000'000s};
+   VERIFY( check_prefix(os.view(), 6, '-') );
+   VERIFY( os.width() == 0 );
+   os << std::setw(15) << hh_mm_ss{seconds(45296)};
+   VERIFY( check_prefix(os.view().substr(25), 7, '-') );
+   VERIFY( os.width() == 0 );
+   os << std::setw(10) << day(15);
+   VERIFY( check_prefix(os.view().substr(40), 8, '-') );
+   VERIFY( os.width() == 0 );
+   os << std::setw(10) << month(7);
+   VERIFY( check_prefix(os.view().substr(50), 7, '-') );
+   VERIFY( os.width() == 0 );
+   os << std::setw(10) << year(2026);
+   VERIFY( check_prefix(os.view().substr(60), 6, '-') );
+   VERIFY( os.width() == 0 );
+   os << std::setw(12) << Monday;
+   VERIFY( check_prefix(os.view().substr(70), 9, '-') );
+   VERIFY( os.width() == 0 );
+ }
+ 
+ void
+ test_locale_aware()
+ {
+   using namespace std::chrono;
+   std::ostringstream os;
+   os.imbue(std::locale::classic());
+   os << std::setw(12) << Monday;
+   auto s = os.view();
+   VERIFY( s.size() >= 12 );
+   VERIFY( os.width() == 0 );
+ }
+ 
+ void
+ test_wchar_t()
+ {
+   using namespace std::chrono;
+   std::wostringstream wos;
+   wos << std::chrono::sys_time<std::chrono::seconds>{1'700'000'000s};
+   VERIFY( wos.view() == L"2023-11-14 22:13:20" );
+ }
+ 
+ void
+ test_weekday_indexed()
+ {
+   using namespace std::chrono;
+   std::ostringstream os;
+   os << Monday[1];
+   VERIFY( os.view() == "Mon[1]" );
+   os.str("");
+   os << Monday[6];  // invalid index
+   VERIFY( os.view().find("Mon[") != std::string::npos );
+ }
+ 
+ int
+ main()
+ {
+   test_sentry_badbit();
+   test_sentry_tied();
+   test_width_fill();
+   test_width_left();
+   test_width_internal();
+   test_width_reset();
+   test_width_zero();
+   test_multiple_chrono_types();
+   test_locale_aware();
+   test_wchar_t();
+   test_weekday_indexed();
+ }
diff -Nrcpad gcc-17-20260628/libstdc++-v3/testsuite/std/time/time_zone/wall_cascade.cc gcc-17-20260705/libstdc++-v3/testsuite/std/time/time_zone/wall_cascade.cc
*** gcc-17-20260628/libstdc++-v3/testsuite/std/time/time_zone/wall_cascade.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260705/libstdc++-v3/testsuite/std/time/time_zone/wall_cascade.cc	Sun Jul  5 22:32:20 2026
***************
*** 0 ****
--- 1,233 ----
+ // { dg-do run { target c++20 } }
+ // { dg-require-effective-target tzdb }
+ // { dg-require-effective-target cxx11_abi }
+ // { dg-xfail-run-if "no weak override on AIX" { powerpc-ibm-aix* } }
+ 
+ // Wall-time rules in the same rule set whose effective firing time
+ // depends on a prior rule's save (Europe/Paris 1945):
+ //   1945 Apr 2  02:00 wall  save=2  M
+ //   1945 Sep 16 03:00 wall  save=0  -
+ // In the (stdoff=1, save=2) frame the September rule fires at
+ // Sep 16 00:00 UT, not Sep 16 02:00 UT.
+ 
+ #include <chrono>
+ #include <fstream>
+ #include <testsuite_hooks.h>
+ 
+ static bool override_used = false;
+ 
+ namespace __gnu_cxx
+ {
+   const char* zoneinfo_dir_override() {
+     override_used = true;
+     return "./";
+   }
+ }
+ 
+ using namespace std::chrono;
+ 
+ void
+ test_positive()
+ {
+   // Line 1 ends at "1945 Sep 16 1u" (Universal time, no save shenanigans),
+   // so info.begin for line 2 is exactly 1945-09-16 01:00 UT.
+   //
+   // Two-line zone whose second line begins at 1945 Sep 16 01:00 UT,
+   // between the cascaded firing time (Sep 16 00:00 UT) and the
+   // non-cascaded firing time (Sep 16 02:00 UT) of the September rule.
+   // The seeding must pick the September rule (save=0, CET) at info.begin.
+   std::ofstream("tzdata.zi") << R"(# version test_wall_cascade
+ R Fr 1945 o - Apr 2  2 2 M
+ R Fr 1945 o - Sep 16 3 0 -
+ Z Test/Paris 0  -  X     1945 Sep 16 1u
+              1  Fr CE%sT
+ )";
+ 
+   const auto& db = reload_tzdb();
+   VERIFY( override_used ); // If this fails then XFAIL for the target.
+   VERIFY( db.version == "test_wall_cascade" );
+ 
+   auto* tz = locate_zone("Test/Paris");
+ 
+   // Line 2 begins at exactly 1945-09-16 01:00 UT.  Sample one second
+   // after the boundary, well inside line 2's first sys_info.
+   auto info = tz->get_info(sys_seconds{
+       sys_days(1945y/September/16) + 1h + 1s});
+   VERIFY( info.offset == 1h );
+   VERIFY( info.save == 0min );
+   VERIFY( info.abbrev == "CET" );
+ 
+   // The boundary instant itself is in the new line.
+   auto at_boundary
+     = tz->get_info(sys_seconds{sys_days(1945y/September/16) + 1h});
+   VERIFY( at_boundary.offset == 1h );
+   VERIFY( at_boundary.save == 0min );
+ 
+   // Sample later still in line 2 (winter): unchanged.
+   auto winter = tz->get_info(sys_days(1945y/December/1));
+   VERIFY( winter.offset == 1h );
+   VERIFY( winter.save == 0min );
+ }
+ 
+ void
+ test_negative()
+ {
+   // This is synthetic version of above example, with negative
+   // running save.
+   //
+   // Two-line zone whose second line begins at 1945 Sep 16 01:00 UT,
+   // at the cascaded firing time (Sep 16 01:00 UT), but after
+   // non-cascaded firing time (Sep 16 00:00 UT) of the September rule.
+   // The seeding must pick the April rule (save=-2, CEST) at info.begin.
+   std::ofstream("tzdata.zi") << R"(# version test_negative_cascade
+ R Fr 1945 o - Apr 2  2 -2 M
+ R Fr 1945 o - Sep 16 0 0 -
+ Z Test/Negative 0  -  X     1945 Sep 16 1u
+              1  Fr CE%sT
+ )";
+ 
+   const auto& db = reload_tzdb();
+   VERIFY( override_used ); // If this fails then XFAIL for the target.
+   VERIFY( db.version == "test_negative_cascade" );
+ 
+   auto* tz = locate_zone("Test/Negative");
+ 
+   // Line 2 begins at exactly 1945-09-16 01:00 UT, sample
+   // one second after.
+   auto info = tz->get_info(sys_seconds{
+       sys_days(1945y/September/16) + 1h + 1s});
+   VERIFY( info.offset == -1h );
+   VERIFY( info.save == -2h );
+   VERIFY( info.abbrev == "CEMT" );
+ 
+   // The boundary instant.
+   auto at_boundary
+     = tz->get_info(sys_seconds{sys_days(1945y/September/16) + 1h});
+   VERIFY( at_boundary.offset == -1h );
+   VERIFY( at_boundary.save == -2h );
+ }
+ 
+ void
+ test_next_year()
+ {
+   // The NZ 1946 rule triggers at 1946 Jan 1 00:00:00
+   // local time, which correspond to 1946 Dec 13 12:00:00 UT.
+   std::ofstream("tzdata.zi") << R"(# version test_next_year
+ R NZ 1934 1940 - Ap lastSu 2 0 M
+ R NZ 1934 1940 - S lastSu 2 0:30 S
+ R NZ 1946 o - Ja 1 0 0 S
+ Z Pacific/Auckland 11:39:4 - LMT 1868 N 2
+ 11:30 NZ NZ%sT 1946
+ 12 NZ NZ%sT
+ Z Pacific/AucklandUT 11:39:4 - LMT 1868 N 2
+ 11:30 NZ NZ%sT 1945 Dec 31 13u
+ 12 NZ NZ%sT
+ )";
+ 
+   const auto& db = reload_tzdb();
+   VERIFY( override_used ); // If this fails then XFAIL for the target.
+   VERIFY( db.version == "test_next_year" );
+ 
+   // Pacific/Auckland requires both PR124854 and PR116110 to work
+   // correctly. TODO test it once implemented.
+   // The UT version uses 1945-12-31 13:00:00 UT after
+   // the rule application change.
+   auto* utz = locate_zone("Pacific/AucklandUT");
+ 
+   // Before the change
+   auto before_utboundary
+    = utz->get_info(sys_seconds{sys_days(1945y/December/31) + 11h});
+   VERIFY( before_utboundary.offset == 12h );
+   VERIFY( before_utboundary.save == 30min );
+   VERIFY( before_utboundary.abbrev == "NZST" );
+ 
+   auto at_utboundary
+     = utz->get_info(sys_seconds{sys_days(1945y/December/31) + 13h});
+   VERIFY( at_utboundary.offset == 12h );
+   VERIFY( at_utboundary.save == 0h );
+   VERIFY( at_utboundary.abbrev == "NZST" );
+ 
+   auto after_utboundary
+     = utz->get_info(sys_seconds{sys_days(1945y/December/31) + 14h});
+   VERIFY( after_utboundary.offset == 12h );
+   VERIFY( after_utboundary.save == 0h );
+   VERIFY( after_utboundary.abbrev == "NZST" );
+ }
+ 
+ void
+ test_prev_year()
+ {
+   // The synthetic version of above, where the local
+   // time for rule is moved to previous year.
+   // The NZ 1946 rule triggers at 1946 Dec 31 22:00:00
+   // local time, which correspond to 1947 Jan 1 10:00:00 UT.
+   std::ofstream("tzdata.zi") << R"(# version test_prev_year
+ R PY 1934 1940 - Ap lastSu 2 0 M
+ R PY 1934 1940 - S lastSu 2 0:30 S
+ R PY 1946 o - D 31 22 0 S
+ Z Test/PrevYear -11:39:4 - LMT 1868 N 2
+ -12:30 PY PY%sT 1947 Jan 1 11u
+ -12 PY PY%sT
+ )";
+ 
+   const auto& db = reload_tzdb();
+   VERIFY( override_used ); // If this fails then XFAIL for the target.
+   VERIFY( db.version == "test_prev_year" );
+ 
+   // The UT version uses 1945-12-31 13:00:00 UT after
+   // the rule application change.
+   auto* tz = locate_zone("Test/PrevYear");
+ 
+   // Before the change
+   auto before_boundary
+    = tz->get_info(sys_seconds{sys_days(1947y/January/1) + 9h});
+   VERIFY( before_boundary.offset == -12h );
+   VERIFY( before_boundary.save == 30min );
+   VERIFY( before_boundary.abbrev == "PYST" );
+ 
+   auto at_boundary
+     = tz->get_info(sys_seconds{sys_days(1947y/January/1) + 11h});
+   VERIFY( at_boundary.offset == -12h );
+   VERIFY( at_boundary.save == 0h );
+   VERIFY( at_boundary.abbrev == "PYST" );
+ 
+   auto after_boundary
+     = tz->get_info(sys_seconds{sys_days(1947y/January/1) + 12h});
+   VERIFY( after_boundary.offset == -12h );
+   VERIFY( after_boundary.save == 0h );
+   VERIFY( after_boundary.abbrev == "PYST" );
+ }
+ 
+ void
+ test_earlier_year()
+ {
+   // Synthetic example where PY 1941 rule is still running.
+   std::ofstream("tzdata.zi") << R"(# version test_earlier_year
+ R EY 1934 1941 - Ap lastSu 2 0 M
+ R EY 1934 1940 - S lastSu 2 0:30 S
+ Z Test/EarielYear 11:39:4 - LMT 1868 N 2
+ 11:30 EY EY%sT 1943 Jan 1 12u
+ 12 EY EY%sT
+    )";
+ 
+   const auto& db = reload_tzdb();
+   VERIFY( override_used ); // If this fails then XFAIL for the target.
+   VERIFY( db.version == "test_earlier_year" );
+ 
+   auto* utz = locate_zone("Test/EarielYear");
+   auto at_boundary
+     = utz->get_info(sys_seconds{sys_days(1943y/January/1) + 12h});
+   VERIFY( at_boundary.offset == 12h );
+   VERIFY( at_boundary.save == 0min );
+   VERIFY( at_boundary.abbrev == "EYMT" );
+ }
+ 
+ int
+ main()
+ {
+   test_positive();
+   test_negative();
+   test_next_year();
+   test_prev_year();
+   test_earlier_year();
+ }
diff -Nrcpad gcc-17-20260628/libstdc++-v3/testsuite/util/testsuite_fs.h gcc-17-20260705/libstdc++-v3/testsuite/util/testsuite_fs.h
*** gcc-17-20260628/libstdc++-v3/testsuite/util/testsuite_fs.h	Sun Jun 28 22:32:20 2026
--- gcc-17-20260705/libstdc++-v3/testsuite/util/testsuite_fs.h	Sun Jul  5 22:32:20 2026
*************** namespace test_fs = std::experimental::f
*** 42,48 ****
  #include <stdlib.h> // mkstemp
  #endif
  
! #ifndef _GLIBCXX_HAVE_SYMLINK
  #define NO_SYMLINKS
  #endif
  
--- 42,48 ----
  #include <stdlib.h> // mkstemp
  #endif
  
! #if !defined _GLIBCXX_HAVE_SYMLINK && !defined _GLIBCXX_FILESYSTEM_IS_WINDOWS
  #define NO_SYMLINKS
  #endif
  
diff -Nrcpad gcc-17-20260628/libvtv/ChangeLog gcc-17-20260705/libvtv/ChangeLog
*** gcc-17-20260628/libvtv/ChangeLog	Sun Jun 28 22:32:20 2026
--- gcc-17-20260705/libvtv/ChangeLog	Sun Jul  5 22:32:20 2026
***************
*** 1,3 ****
--- 1,10 ----
+ 2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* configure.ac: Replace AC_GNU_SOURCE with AC_USE_SYSTEM_EXTENSIONS.
+ 	Replace AM_PROG_LIBTOOL with LT_INIT.  Replace AC_FOREACH with
+ 	m4_foreach_w.
+ 
  2026-05-30  Dhruv Chawla  <dhruvc@nvidia.com>
  
  	* vtv_fail.cc: Fix typos.
diff -Nrcpad gcc-17-20260628/libvtv/configure.ac gcc-17-20260705/libvtv/configure.ac
*** gcc-17-20260628/libvtv/configure.ac	Sun Jun 28 22:32:20 2026
--- gcc-17-20260705/libvtv/configure.ac	Sun Jul  5 22:32:20 2026
*************** esac
*** 117,126 ****
  AC_SUBST(toolexecdir)
  AC_SUBST(toolexeclibdir)
  
! AC_GNU_SOURCE
  AC_CHECK_FUNCS([__secure_getenv])
  
! AC_GNU_SOURCE
  AC_CHECK_FUNCS([secure_getenv])
  
  AC_CHECK_FUNCS([getexecname __fortify_fail])
--- 117,126 ----
  AC_SUBST(toolexecdir)
  AC_SUBST(toolexeclibdir)
  
! AC_USE_SYSTEM_EXTENSIONS
  AC_CHECK_FUNCS([__secure_getenv])
  
! AC_USE_SYSTEM_EXTENSIONS
  AC_CHECK_FUNCS([secure_getenv])
  
  AC_CHECK_FUNCS([getexecname __fortify_fail])
*************** AC_CHECK_TOOL(RANLIB, ranlib, :)
*** 149,155 ****
  
  # Configure libtool
  AC_LIBTOOL_DLOPEN
! AM_PROG_LIBTOOL
  ACX_LT_HOST_FLAGS
  AC_SUBST(enable_shared)
  AC_SUBST(enable_static)
--- 149,155 ----
  
  # Configure libtool
  AC_LIBTOOL_DLOPEN
! LT_INIT
  ACX_LT_HOST_FLAGS
  AC_SUBST(enable_shared)
  AC_SUBST(enable_static)
*************** fi
*** 176,182 ****
  AC_CONFIG_FILES([Makefile])
  
  if test "x$VTV_SUPPORTED" = "xyes"; then
!   AC_CONFIG_FILES(AC_FOREACH([DIR], [testsuite], [DIR/Makefile ]), 
      [cat > vpsed$$ << \_EOF
  s!`test -f '$<' || echo '$(srcdir)/'`!!
  _EOF
--- 176,182 ----
  AC_CONFIG_FILES([Makefile])
  
  if test "x$VTV_SUPPORTED" = "xyes"; then
!   AC_CONFIG_FILES(m4_foreach_w([DIR], [testsuite], [DIR/Makefile ]),
      [cat > vpsed$$ << \_EOF
  s!`test -f '$<' || echo '$(srcdir)/'`!!
  _EOF
diff -Nrcpad gcc-17-20260628/lto-plugin/ChangeLog gcc-17-20260705/lto-plugin/ChangeLog
*** gcc-17-20260628/lto-plugin/ChangeLog	Sun Jun 28 22:32:20 2026
--- gcc-17-20260705/lto-plugin/ChangeLog	Sun Jul  5 22:32:20 2026
***************
*** 1,3 ****
--- 1,11 ----
+ 2026-06-29  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* configure: Regenerate.
+ 	* configure.ac: Replace AC_CANONICAL_SYSTEM with AC_CANONICAL_TARGET.
+ 	Replace AC_TRY_LINK with AC_LINK_IFELSE. Replace AM_PROG_LIBTOOL with
+ 	LT_INIT.
+ 
  2026-06-22  Filip Kastl  <fkastl@suse.cz>
  
  	* lto-plugin.c (process_symtab): char *s -> const char *s.
diff -Nrcpad gcc-17-20260628/lto-plugin/configure gcc-17-20260705/lto-plugin/configure
*** gcc-17-20260628/lto-plugin/configure	Sun Jun 28 22:32:22 2026
--- gcc-17-20260705/lto-plugin/configure	Sun Jul  5 22:32:21 2026
*************** test -n "$target_alias" &&
*** 2515,2521 ****
    test "$program_prefix$program_suffix$program_transform_name" = \
      NONENONEs,x,x, &&
    program_prefix=${target_alias}-
- 
   case ${build_alias} in
    "") build_noncanonical=${build} ;;
    *) build_noncanonical=${build_alias} ;;
--- 2515,2520 ----
*************** else
*** 12630,12636 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12633 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 12629,12635 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12632 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 12736,12742 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12739 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 12735,12741 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12738 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
diff -Nrcpad gcc-17-20260628/lto-plugin/configure.ac gcc-17-20260705/lto-plugin/configure.ac
*** gcc-17-20260628/lto-plugin/configure.ac	Sun Jun 28 22:32:20 2026
--- gcc-17-20260705/lto-plugin/configure.ac	Sun Jul  5 22:32:20 2026
***************
*** 1,5 ****
  AC_INIT([LTO plugin for ld], 0.1,,[lto-plugin])
! AC_CANONICAL_SYSTEM
  GCC_TOPLEV_SUBDIRS
  AM_INIT_AUTOMAKE([foreign no-dist])
  AM_MAINTAINER_MODE
--- 1,5 ----
  AC_INIT([LTO plugin for ld], 0.1,,[lto-plugin])
! AC_CANONICAL_TARGET
  GCC_TOPLEV_SUBDIRS
  AM_INIT_AUTOMAKE([foreign no-dist])
  AM_MAINTAINER_MODE
*************** else
*** 75,81 ****
    global: *foo*; bar; local: *;
  };
  EOF
!   AC_TRY_LINK([int foo;],[],[lto_plugin_use_symver=gnu],[lto_plugin_use_symver=no])
    if test x$lto_plugin_use_symver = xno; then
      case "$target_os" in
        solaris2*)
--- 75,84 ----
    global: *foo*; bar; local: *;
  };
  EOF
!   AC_LINK_IFELSE(
!     [AC_LANG_PROGRAM([[int foo;]], [[]])],
!     [lto_plugin_use_symver=gnu],
!     [lto_plugin_use_symver=no])
    if test x$lto_plugin_use_symver = xno; then
      case "$target_os" in
        solaris2*)
*************** EOF
*** 87,93 ****
    global: foo; local: *;
  };
  EOF
! 	AC_TRY_LINK([int foo;],[],[lto_plugin_use_symver=sun],[lto_plugin_use_symver=no])
  	  ;;
      esac
    fi
--- 90,99 ----
    global: foo; local: *;
  };
  EOF
! 	AC_LINK_IFELSE(
! 	  [AC_LANG_PROGRAM([[int foo;]], [[]])],
! 	  [lto_plugin_use_symver=sun],
!           [lto_plugin_use_symver=no])
  	  ;;
      esac
    fi
*************** fi
*** 120,126 ****
  
  AC_SUBST(ac_lto_plugin_extra_ldflags)
  
! AM_PROG_LIBTOOL
  AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = xyes])
  ACX_LT_HOST_FLAGS
  AC_SUBST(target_noncanonical)
--- 126,132 ----
  
  AC_SUBST(ac_lto_plugin_extra_ldflags)
  
! LT_INIT
  AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = xyes])
  ACX_LT_HOST_FLAGS
  AC_SUBST(target_noncanonical)
